]> jfr.im git - z_archive/Ophion.git/blame - modules/autoload/chmode.py
Initialize repo
[z_archive/Ophion.git] / modules / autoload / chmode.py
CommitLineData
b069ba10
JR
1from classes import *
2from util import *
3
4name = 'channel modes'
5def 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)
13def 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
21def 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))
36def 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))
51def 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))
66def 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
82def 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
90def 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
116def helpop():
117 return ['OP <#channel> [<nick>]', 'Ops you, or <nick>.']
118def helpvoice():
119 return ['VOICE <#channel> [<nick>]', 'Voices you, or <nick>.']
120def helpdeop():
121 return ['DEOP <#channel> [<nick>]', 'Deops you, or <nick>.']
122def helpdevoice():
123 return ['DEVOICE <#channel> [<nick>]', 'Devoices you, or <nick>.']
124def helpdown():
125 return ['DOWN <#channel>', 'Removes your op/voice.']