mirror of
https://github.com/jlu5/PyLink.git
synced 2024-11-27 21:19:31 +01:00
nefarious: handle CLEARMODE
This commit is contained in:
parent
2a6b096401
commit
9362b74d78
@ -83,7 +83,7 @@ class P10Protocol(Protocol):
|
||||
# SID generator for P10.
|
||||
self.sidgen = P10SIDGenerator(irc)
|
||||
|
||||
self.hook_map = {'END_OF_BURST': 'ENDBURST', 'OPMODE': 'MODE'}
|
||||
self.hook_map = {'END_OF_BURST': 'ENDBURST', 'OPMODE': 'MODE', 'CLEARMODE': 'MODE'}
|
||||
|
||||
def _send(self, source, text):
|
||||
self.irc.send("%s %s" % (source, text))
|
||||
@ -1055,4 +1055,38 @@ class P10Protocol(Protocol):
|
||||
# <- ABAAA W Ay :PyLink-devel
|
||||
return {'target': self._getUid(args[-1])}
|
||||
|
||||
def handle_clearmode(self, numeric, command, args):
|
||||
"""Handles CLEARMODE, which is used to clear a channel's modes."""
|
||||
# <- ABAAA CM #test ovpsmikbl
|
||||
channel = utils.toLower(self.irc, args[0])
|
||||
modes = args[1]
|
||||
|
||||
# Enumerate a list of our existing modes, including prefix modes.
|
||||
existing = list(self.irc.channels[channel].modes)
|
||||
for pmode, userlist in self.irc.channels[channel].prefixmodes.items():
|
||||
# Expand the prefix modes lists to individual ('o', 'UID') mode pairs.
|
||||
modechar = self.irc.cmodes.get(pmode)
|
||||
existing += [(modechar, user) for user in userlist]
|
||||
|
||||
# Back up the channel state.
|
||||
oldobj = self.irc.channels[channel].deepcopy()
|
||||
|
||||
changedmodes = []
|
||||
|
||||
# Iterate over all the modes we have for this channel.
|
||||
for modepair in existing:
|
||||
modechar, data = modepair
|
||||
|
||||
# Check if each mode matches any that we're unsetting.
|
||||
if modechar in modes:
|
||||
if modechar in (self.irc.cmodes['*A']+self.irc.cmodes['*B']+''.join(self.irc.prefixmodes.keys())):
|
||||
# Mode is a list mode, prefix mode, or one that always takes a parameter when unsetting.
|
||||
changedmodes.append(('-%s' % modechar, data))
|
||||
else:
|
||||
# Mode does not take an argument when unsetting.
|
||||
changedmodes.append(('-%s' % modechar, None))
|
||||
|
||||
utils.applyModes(self.irc, channel, changedmodes)
|
||||
return {'target': channel, 'modes': changedmodes, 'oldchan': oldobj}
|
||||
|
||||
Class = P10Protocol
|
||||
|
Loading…
Reference in New Issue
Block a user