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()
|