@@ -36,147 +36,106 @@ def num_badwords(sentence):
36
36
37
37
return badwords
38
38
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
43
55
arg = input .group (2 )
44
- if not arg : return
56
+ if not arg : return phenny . write ([ 'MODE' , input . sender , mode , input . nick ], "" )
45
57
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' )
48
75
49
76
voice .commands = ['voice' ]
50
77
51
78
def devoice (phenny , input ):
52
79
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' )
60
82
61
83
devoice .commands = ['devoice' ]
62
84
63
85
def kick (phenny , input ):
64
86
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
67
88
arg = input .group (2 )
68
89
if not arg : return
69
90
arg = arg .split (" " )
70
91
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 ])
72
97
73
98
kick .commands = ['kick' ]
74
99
75
100
def ban (phenny , input ):
76
101
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 )
93
104
94
105
ban .commands = ['ban' ]
95
106
96
107
def unban (phenny , input ):
97
108
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 )
114
111
115
112
unban .commands = ['unban' ]
116
113
117
114
def mute (phenny , input ):
118
115
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 )
135
118
136
119
mute .commands = ['mute' ]
137
120
138
121
def unmute (phenny , input ):
139
122
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 )
156
125
157
126
unmute .commands = ['unmute' ]
158
127
159
128
def op (phenny , input ):
160
129
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' )
168
132
169
133
op .commands = ['op' ]
170
134
171
135
def deop (phenny , input ):
172
136
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' )
180
139
181
140
deop .commands = ['deop' ]
182
141
0 commit comments