]>
Commit | Line | Data |
---|---|---|
b069ba10 JR |
1 | from classes import * |
2 | from util import * | |
3 | ||
4 | name = 'channel modes' | |
5 | def init(cache): | |
6 | cache.currmod = __name__ | |
7 | cache.hookcmd('OP', 3, op, 0, helpop) | |
8 | cache.hookcmd('VOICE', 2, voice, 0, helpvoice) | |
9 | cache.hookcmd('DEOP', 0, deop, 0, helpdeop) | |
10 | cache.hookcmd('DEVOICE', 0, devoice, 0, helpdevoice) | |
11 | cache.hookcmd('DOWN', 0, down, 0, helpdown) | |
12 | cache.hooknum('MODE', modehook) | |
13 | def deinit(cache, reloading=False): | |
14 | cache.currmod = __name__ | |
15 | cache.unhookcmd('OP') | |
16 | cache.unhookcmd('VOICE') | |
17 | cache.unhookcmd('DEOP') | |
18 | cache.unhookcmd('DEVOICE') | |
19 | cache.unhookcmd('DOWN') | |
20 | ||
21 | def op(nick, target, params, bot, cache): | |
22 | if params == '': opnick = nick | |
23 | elif cache.chans[target].alist[cache.users[nick].auth] >= 4: opnick = params | |
24 | else: | |
25 | noaccess(bot, nick, True) | |
26 | return | |
27 | ||
28 | user = cache.users[nick] | |
29 | if user in cache.chans[target].ops: | |
30 | bot.msg(nick, "%s is already opped on %s" % (opnick, target)) | |
31 | elif user in cache.chans[target].users: | |
32 | bot.raw("MODE %s +o %s" % (target, opnick)) | |
33 | bot.msg(nick, "Done.") | |
34 | else: | |
35 | bot.msg(nick, "%s isn't on %s" % (opnick, target)) | |
36 | def voice(nick, target, params, bot, cache): | |
37 | if params == '': vnick = nick | |
38 | elif cache.chans[target].alist[cache.users[nick].auth] >= 3: vnick = params | |
39 | else: | |
40 | noaccess(bot, nick, True) | |
41 | return | |
42 | ||
43 | user = cache.users[nick] | |
44 | if user in cache.chans[target].voices: | |
45 | bot.msg(nick, "%s is already voiced on %s" % (vnick, target)) | |
46 | elif user in cache.chans[target].users: | |
47 | bot.raw("MODE %s +v %s" % (target, vnick)) | |
48 | bot.msg(nick, "Done.") | |
49 | else: | |
50 | bot.msg(nick, "%s isn't on %s" % (vnick, target)) | |
51 | def deop(nick, target, params, bot, cache): | |
52 | if params == '': opnick = nick | |
53 | elif cache.chans[target].alist[cache.users[nick].auth] >= 4: opnick = params | |
54 | else: | |
55 | noaccess(bot, nick, True) | |
56 | return | |
57 | ||
58 | user = cache.users[nick] | |
59 | if user in cache.chans[target].ops: | |
60 | bot.raw("MODE %s -o %s" % (target, opnick)) | |
61 | bot.msg(nick, "Done.") | |
62 | elif user in cache.chans[target].users: | |
63 | bot.msg(nick, "%s isn't opped on %s" % (opnick, target)) | |
64 | else: | |
65 | bot.msg(nick, "%s isn't on %s" % (opnick, target)) | |
66 | def devoice(nick, target, params, bot, cache): | |
67 | if params == '': vnick = nick | |
68 | elif cache.chans[target].alist[cache.users[nick].auth] >= 3: vnick = params | |
69 | else: | |
70 | noaccess(bot, nick, True) | |
71 | return | |
72 | ||
73 | user = cache.users[nick] | |
74 | if user in cache.chans[target].voices: | |
75 | bot.raw("MODE %s -v %s" % (target, vnick)) | |
76 | bot.msg(nick, "Done.") | |
77 | elif user in cache.chans[target].users: | |
78 | bot.msg(nick, "%s isn't voiced on %s" % (vnick, target)) | |
79 | else: | |
80 | bot.msg(nick, "%s isn't on %s" % (vnick, target)) | |
81 | ||
82 | def down(nick, target, params, bot, cache): | |
83 | user = cache.users[nick] | |
84 | if user in cache.chans[target].users: | |
85 | bot.raw("MODE %s -ov %s %s" % (target, nick, nick)) | |
86 | else: | |
87 | bot.msg(nick, "You aren't on %s" % (target)) | |
88 | ||
89 | ||
90 | def modehook(line, bot): # :U!I@H MODE #chan +o-v DimeCadmium DimeCadmium | |
91 | pieces = deque(line.split()[2:]) # #chan +o-v DimeCadmium DimeCadmium | |
92 | chname = pieces.popleft().lower() | |
93 | if chname[0] != '#': return # usermode change | |
94 | if chname not in cache.chans: | |
95 | return | |
96 | chan = cache.chans[chname] # +o-v DimeCadmium DimeCadmium | |
97 | modes = pieces.popleft() # DimeCadmium DimeCadmium | |
98 | for i in modes: | |
99 | if i == '+': | |
100 | adding = True | |
101 | elif i == '-': | |
102 | adding = False | |
103 | elif i == 'o': | |
104 | nick = pieces.popleft() | |
105 | if nick not in cache.users: cache.users[nick] = User(nick) | |
106 | user = cache.users[nick] | |
107 | if adding: chan.ops.append(user) | |
108 | elif user in chan.ops: chan.ops.remove(user) | |
109 | elif i == 'v': | |
110 | nick = pieces.popleft() | |
111 | if nick not in cache.users: cache.users[nick] = User(nick) | |
112 | user = cache.users[nick] | |
113 | if adding: chan.voices.append(user) | |
114 | elif user in chan.voices: chan.voices.remove(user) | |
115 | ||
116 | def helpop(): | |
117 | return ['OP <#channel> [<nick>]', 'Ops you, or <nick>.'] | |
118 | def helpvoice(): | |
119 | return ['VOICE <#channel> [<nick>]', 'Voices you, or <nick>.'] | |
120 | def helpdeop(): | |
121 | return ['DEOP <#channel> [<nick>]', 'Deops you, or <nick>.'] | |
122 | def helpdevoice(): | |
123 | return ['DEVOICE <#channel> [<nick>]', 'Devoices you, or <nick>.'] | |
124 | def helpdown(): | |
125 | return ['DOWN <#channel>', 'Removes your op/voice.'] |