Skip to content

Commit 2463cf1

Browse files
committed
[ChOp] Allow !(de)op/!(de)voice/!(un)mute/!kick #channel nick
1 parent 3708200 commit 2463cf1

File tree

1 file changed

+54
-95
lines changed

1 file changed

+54
-95
lines changed

chop.py

+54-95
Original file line numberDiff line numberDiff line change
@@ -36,147 +36,106 @@ def num_badwords(sentence):
3636

3737
return badwords
3838

39-
def voice(phenny, input):
40-
if not input.admin: return
41-
if not input.sender.startswith('#'): return
42-
# Can only be done in a channel by an admin
39+
def hmasktrans(va):
40+
a = "!" in va
41+
b = "@" in va
42+
if not a and not b:
43+
return "*!" + va + "@*"
44+
elif a and not b:
45+
return va + "@*"
46+
elif not a and b:
47+
return "*!" + va
48+
else: # a and b
49+
return va
50+
51+
52+
def chanmodefunc(phenny, input, mode, modfunc=None):
53+
if modfunc == None:
54+
modfunc = lambda x: x
4355
arg = input.group(2)
44-
if not arg: return
56+
if not arg: return phenny.write(['MODE', input.sender, mode, input.nick], "")
4557
arg = arg.split(" ")
46-
for va in arg:
47-
phenny.write(['MODE', input.sender, '+v', va], "")
58+
skip_next = False
59+
for i in range(0, len(arg)):
60+
if skip_next:
61+
skip_next = False
62+
continue
63+
va = arg[i]
64+
if va.startswith('#'):
65+
if i+2 > len(arg): return phenny.reply("Too few arguments")
66+
phenny.write(['MODE', va, mode, modfunc(arg[i+1])], "")
67+
skip_next = True
68+
continue
69+
phenny.write(['MODE', input.sender, mode, modfunc(va)], "")
70+
71+
def voice(phenny, input):
72+
if not input.admin: return
73+
# Can only be done by an admin
74+
chanmodefunc(phenny, input, '+v')
4875

4976
voice.commands = ['voice']
5077

5178
def devoice(phenny, input):
5279
if not input.admin: return
53-
if not input.sender.startswith('#'): return
54-
# Can only be done in a channel by an admin
55-
arg = input.group(2)
56-
if not arg: return
57-
arg = arg.split(" ")
58-
for va in arg:
59-
phenny.write(['MODE', input.sender, '-v', va], "")
80+
# Can only be done by an admin
81+
chanmodefunc(phenny, input, '-v')
6082

6183
devoice.commands = ['devoice']
6284

6385
def kick(phenny, input):
6486
if not input.admin: return
65-
if not input.sender.startswith('#'): return
66-
# Can only be done in a channel by an admin
87+
# Can only be done by an admin
6788
arg = input.group(2)
6889
if not arg: return
6990
arg = arg.split(" ")
7091
if len(arg) < 2: return
71-
phenny.write(['KICK', input.sender, arg[0]], arg[1])
92+
if arg[0].startswith('#'):
93+
if len(arg) < 3: return
94+
phenny.write(['KICK', arg[0], arg[1]], arg[2])
95+
else:
96+
phenny.write(['KICK', input.sender, arg[0]], arg[1])
7297

7398
kick.commands = ['kick']
7499

75100
def ban(phenny, input):
76101
if not input.admin: return
77-
if not input.sender.startswith('#'): return
78-
# Can only be done in a channel by an admin
79-
arg = input.group(2)
80-
if not arg: return
81-
arg = arg.split(" ")
82-
for va in arg:
83-
a = "!" in va
84-
b = "@" in va
85-
if not a and not b:
86-
phenny.write(['MODE', input.sender, '+b', "*!" + va + "@*"], "")
87-
elif a and not b:
88-
phenny.write(['MODE', input.sender, '+b', va + "@*"], "")
89-
elif not a and b:
90-
phenny.write(['MODE', input.sender, '+b', "*!" + va], "")
91-
else: # a and b
92-
phenny.write(['MODE', input.sender, '+b', va], "")
102+
# Can only be done by an admin
103+
chanmodefunc(phenny, input, '+b', hmasktrans)
93104

94105
ban.commands = ['ban']
95106

96107
def unban(phenny, input):
97108
if not input.admin: return
98-
if not input.sender.startswith('#'): return
99-
# Can only be done in a channel by an admin
100-
arg = input.group(2)
101-
if not arg: return
102-
arg = arg.split(" ")
103-
for va in arg:
104-
a = "!" in va
105-
b = "@" in va
106-
if not a and not b:
107-
phenny.write(['MODE', input.sender, '-b', "*!" + va + "@*"], "")
108-
elif a and not b:
109-
phenny.write(['MODE', input.sender, '-b', va + "@*"], "")
110-
elif not a and b:
111-
phenny.write(['MODE', input.sender, '-b', "*!" + va], "")
112-
else: # a and b
113-
phenny.write(['MODE', input.sender, '-b', va], "")
109+
# Can only be done by an admin
110+
chanmodefunc(phenny, input, '-b', hmasktrans)
114111

115112
unban.commands = ['unban']
116113

117114
def mute(phenny, input):
118115
if not input.admin: return
119-
if not input.sender.startswith('#'): return
120-
# Can only be done in a channel by an admin
121-
arg = input.group(2)
122-
if not arg: return
123-
arg = arg.split(" ")
124-
for va in arg:
125-
a = "!" in va
126-
b = "@" in va
127-
if not a and not b:
128-
phenny.write(['MODE', input.sender, '+q', "*!" + va + "@*"], "")
129-
elif a and not b:
130-
phenny.write(['MODE', input.sender, '+q', va + "@*"], "")
131-
elif not a and b:
132-
phenny.write(['MODE', input.sender, '+q', "*!" + va], "")
133-
else: # a and b
134-
phenny.write(['MODE', input.sender, '+q', va], "")
116+
# Can only be done by an admin
117+
chanmodefunc(phenny, input, '+q', hmasktrans)
135118

136119
mute.commands = ['mute']
137120

138121
def unmute(phenny, input):
139122
if not input.admin: return
140-
if not input.sender.startswith('#'): return
141-
# Can only be done in a channel by an admin
142-
arg = input.group(2)
143-
if not arg: return
144-
arg = arg.split(" ")
145-
for va in arg:
146-
a = "!" in va
147-
b = "@" in va
148-
if not a and not b:
149-
phenny.write(['MODE', input.sender, '-q', "*!" + va + "@*"], "")
150-
elif a and not b:
151-
phenny.write(['MODE', input.sender, '-q', va + "@*"], "")
152-
elif not a and b:
153-
phenny.write(['MODE', input.sender, '-q', "*!" + va], "")
154-
else: # a and b
155-
phenny.write(['MODE', input.sender, '-q', va], "")
123+
# Can only be done by an admin
124+
chanmodefunc(phenny, input, '-q', hmasktrans)
156125

157126
unmute.commands = ['unmute']
158127

159128
def op(phenny, input):
160129
if not input.admin: return
161-
if not input.sender.startswith('#'): return
162-
# Can only be done in a channel by an admin
163-
arg = input.group(2)
164-
if not arg: return phenny.write(['MODE', input.sender, '+o', input.nick], "")
165-
arg = arg.split(" ")
166-
for va in arg:
167-
phenny.write(['MODE', input.sender, '+o', va], "")
130+
# Can only be done by an admin
131+
chanmodefunc(phenny, input, '+o')
168132

169133
op.commands = ['op']
170134

171135
def deop(phenny, input):
172136
if not input.admin: return
173-
if not input.sender.startswith('#'): return
174-
# Can only be done in a channel by an admin
175-
arg = input.group(2)
176-
if not arg: return phenny.write(['MODE', input.sender, '-o', input.nick], "")
177-
arg = arg.split(" ")
178-
for va in arg:
179-
phenny.write(['MODE', input.sender, '-o', va], "")
137+
# Can only be done by an admin
138+
chanmodefunc(phenny, input, '-o')
180139

181140
deop.commands = ['deop']
182141

0 commit comments

Comments
 (0)