summaryrefslogtreecommitdiff
path: root/Unsetmode.py
blob: 5ef26c33fe1a3f141af1f59708fb2900f4cb4038 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#!/usr/bin/env python3


import miniirc, miniirc_extras, random, re, threading, time
from ast import literal_eval

assert miniirc.ver >= (1, 5, 0), "miniirc v1.5.0+ required!"
from miniirc_extras import utils

# Add their hostmask here
trusted = {
    "LibreIRC/staff/Andrew",
    "services.irc.andrewyu.org",
    "andrewyu.org",
    "user/labrador",
    "services.libera.chat",
    "user/AndrewYu",
    "user/AndrewYu/bot/LibreBot",
    "xIRC/guest/2s1.ocj.4nc5dk.IP",
}
banned = {"114.88.181.238"}

trusted = set([i.lower() for i in trusted])
banned = set([i.lower() for i in banned])

igotban = []

hg = utils.HandlerGroup()


@hg.Handler("PART", colon=False)
def _handle_part(irc, hostmask, args):
    if hostmask[0] == irc.current_nick:
        irc.send("JOIN", args[0])
    else:
        irc.send("INVITE", args[0], hostmask[0])


@hg.Handler("JOIN", colon=False)
def _handle_join(irc, hostmask, args):
    if hostmask[0] == irc.current_nick:
        try:
            chan = irc.chans[args[0]]
        except KeyError:
            return
        if irc.current_nick not in chan.modes.getset("o"):
            irc.msg("LibreBot", "OP", chan.name)
    else:
        irc.send("KICK", args[0], hostmask[0], "Channel is locked")


lock = threading.Lock()


@hg.Handler("MODE", colon=False)
def _handle_mode(irc, hostmask, args):
    if not args[0][0] == "#":
        return
    if args[2] == irc.current_nick or hostmask[0] == irc.current_nick:
        return
    if args[1][0] == "-":
        f = "+"
    else:
        f = "-"
    irc.send("MODE", args[0], f + args[1][1:], *args[2:])


@hg.Handler("KICK", colon=False)
def _handle_kick(irc, hostmask, args):
    if args[1] == irc.current_nick:
        irc.send("JOIN", args[0])
        ops = irc.chans[args[0]].modes.getset("o")
        print("@@@", ops)
        for op in ops:
            if op == irc.current_nick:
                continue
            irc.send("MODE", args[0], "-o", op)
    else:
        irc.msg(args[0], "YAYKICK!")


def make_many_ircs(amount, ip, port, nick, *args, start_from=0, **kwargs):
    start_from = start_from or 1
    res = []
    kwargs["auto_connect"] = False
    for i in range(amount):
        if i == 0:
            irc = miniirc.IRC(ip, port, nick, *args, **kwargs)
        else:
            irc = miniirc.IRC(ip, port, nick + str(i + start_from), *args, **kwargs)
        hg.add_to(irc)
        res.append(irc)
        irc.require("users")
        irc.require("chans")
        irc.connect()
        time.sleep(1)
    return res


def main():
    import argparse

    parser = argparse.ArgumentParser()
    parser.add_argument("ip", help="The server IP")
    parser.add_argument("nick", help="The nickname.")
    parser.add_argument("channel", help="The channel.")
    parser.add_argument("--amount", type=int, help="The amount of bots (default: 3).")
    parser.add_argument(
        "--start-from", type=int, help="The number to start from (default: 1)."
    )
    parser.add_argument("--port", type=int, help="The port to use (default: 6697).")
    parser.add_argument("--username", help="NickServ username")
    parser.add_argument("--password", help="NickServ password")
    parser.add_argument("--debug", action="store_true")
    args = parser.parse_args()

    ns_identity = None
    if args.username and args.password:
        ns_identity = (args.username, args.password)
    make_many_ircs(
        args.amount or 1,
        args.ip,
        args.port or 6697,
        args.nick,
        args.channel,
        start_from=args.start_from,
        ns_identity=ns_identity,
        debug=args.debug,
    )


if __name__ == "__main__":
    main()