mirror of
https://github.com/jlu5/PyLink.git
synced 2025-02-02 15:44:06 +01:00
protocols: migrate away from camel case
This commit is contained in:
parent
3913a909ef
commit
a4e321522b
@ -113,7 +113,7 @@ class ClientbotWrapperProtocol(IRCCommonProtocol):
|
||||
manipulatable=manipulatable, realhost=realhost, ip=ip)
|
||||
self.servers[server].users.add(uid)
|
||||
|
||||
self.applyModes(uid, modes)
|
||||
self.apply_modes(uid, modes)
|
||||
|
||||
return u
|
||||
|
||||
@ -128,22 +128,22 @@ class ClientbotWrapperProtocol(IRCCommonProtocol):
|
||||
|
||||
def away(self, source, text):
|
||||
"""STUB: sets away messages for clients internally."""
|
||||
log.debug('(%s) away: target is %s, internal client? %s', self.name, source, self.isInternalClient(source))
|
||||
log.debug('(%s) away: target is %s, internal client? %s', self.name, source, self.is_internal_client(source))
|
||||
|
||||
if self.users[source].away != text:
|
||||
if not self.isInternalClient(source):
|
||||
if not self.is_internal_client(source):
|
||||
log.debug('(%s) away: sending AWAY hook from %s with text %r', self.name, source, text)
|
||||
self.callHooks([source, 'AWAY', {'text': text}])
|
||||
self.call_hooks([source, 'AWAY', {'text': text}])
|
||||
|
||||
self.users[source].away = text
|
||||
|
||||
def invite(self, client, target, channel):
|
||||
"""Invites a user to a channel."""
|
||||
self.send('INVITE %s %s' % (self.getFriendlyName(target), channel))
|
||||
self.send('INVITE %s %s' % (self.get_friendly_name(target), channel))
|
||||
|
||||
def join(self, client, channel):
|
||||
"""STUB: Joins a user to a channel."""
|
||||
channel = self.toLower(channel)
|
||||
channel = self.to_lower(channel)
|
||||
|
||||
# Only joins for the main PyLink client are actually forwarded. Others are ignored.
|
||||
# Note: we do not automatically add our main client to the channel state, as we
|
||||
@ -159,25 +159,25 @@ class ClientbotWrapperProtocol(IRCCommonProtocol):
|
||||
self.users[client].channels.add(channel)
|
||||
|
||||
log.debug('(%s) join: faking JOIN of client %s/%s to %s', self.name, client,
|
||||
self.getFriendlyName(client), channel)
|
||||
self.callHooks([client, 'CLIENTBOT_JOIN', {'channel': channel}])
|
||||
self.get_friendly_name(client), channel)
|
||||
self.call_hooks([client, 'CLIENTBOT_JOIN', {'channel': channel}])
|
||||
|
||||
def kick(self, source, channel, target, reason=''):
|
||||
"""Sends channel kicks."""
|
||||
|
||||
log.debug('(%s) kick: checking if target %s (nick: %s) is an internal client? %s',
|
||||
self.name, target, self.getFriendlyName(target),
|
||||
self.isInternalClient(target))
|
||||
if self.isInternalClient(target):
|
||||
self.name, target, self.get_friendly_name(target),
|
||||
self.is_internal_client(target))
|
||||
if self.is_internal_client(target):
|
||||
# Target was one of our virtual clients. Just remove them from the state.
|
||||
self.handle_part(target, 'KICK', [channel, reason])
|
||||
|
||||
# Send a KICK hook for message formatting.
|
||||
self.callHooks([source, 'CLIENTBOT_KICK', {'channel': channel, 'target': target, 'text': reason}])
|
||||
self.call_hooks([source, 'CLIENTBOT_KICK', {'channel': channel, 'target': target, 'text': reason}])
|
||||
return
|
||||
|
||||
self.send('KICK %s %s :<%s> %s' % (channel, self._expandPUID(target),
|
||||
self.getFriendlyName(source), reason))
|
||||
self.get_friendly_name(source), reason))
|
||||
|
||||
# Don't update our state here: wait for the IRCd to send an acknowledgement instead.
|
||||
# There is essentially a 3 second wait to do this, as we send NAMES with a delay
|
||||
@ -201,7 +201,7 @@ class ClientbotWrapperProtocol(IRCCommonProtocol):
|
||||
if self.pseudoclient and self.pseudoclient.uid == source:
|
||||
self.send('%s %s :%s' % (command, self._expandPUID(target), text))
|
||||
else:
|
||||
self.callHooks([source, 'CLIENTBOT_MESSAGE', {'target': target, 'is_notice': notice, 'text': text}])
|
||||
self.call_hooks([source, 'CLIENTBOT_MESSAGE', {'target': target, 'is_notice': notice, 'text': text}])
|
||||
|
||||
def mode(self, source, channel, modes, ts=None):
|
||||
"""Sends channel MODE changes."""
|
||||
@ -212,24 +212,24 @@ class ClientbotWrapperProtocol(IRCCommonProtocol):
|
||||
# with IRCd MODE acknowledgements.
|
||||
# FIXME: More related safety checks should be added for this.
|
||||
log.debug('(%s) mode: re-parsing modes %s', self.name, modes)
|
||||
joined_modes = self.joinModes(modes)
|
||||
for modepair in self.parseModes(channel, joined_modes):
|
||||
joined_modes = self.join_modes(modes)
|
||||
for modepair in self.parse_modes(channel, joined_modes):
|
||||
log.debug('(%s) mode: checking if %s a prefix mode: %s', self.name, modepair, self.prefixmodes)
|
||||
if modepair[0][-1] in self.prefixmodes:
|
||||
if self.isInternalClient(modepair[1]):
|
||||
if self.is_internal_client(modepair[1]):
|
||||
# Ignore prefix modes for virtual internal clients.
|
||||
log.debug('(%s) mode: skipping virtual client prefixmode change %s', self.name, modepair)
|
||||
continue
|
||||
else:
|
||||
# For other clients, change the mode argument to nick instead of PUID.
|
||||
nick = self.getFriendlyName(modepair[1])
|
||||
nick = self.get_friendly_name(modepair[1])
|
||||
log.debug('(%s) mode: coersing mode %s argument to %s', self.name, modepair, nick)
|
||||
modepair = (modepair[0], nick)
|
||||
extmodes.append(modepair)
|
||||
|
||||
log.debug('(%s) mode: filtered modes for %s: %s', self.name, channel, extmodes)
|
||||
if extmodes:
|
||||
self.send('MODE %s %s' % (channel, self.joinModes(extmodes)))
|
||||
self.send('MODE %s %s' % (channel, self.join_modes(extmodes)))
|
||||
# Don't update the state here: the IRCd sill respond with a MODE reply if successful.
|
||||
|
||||
def nick(self, source, newnick):
|
||||
@ -238,7 +238,7 @@ class ClientbotWrapperProtocol(IRCCommonProtocol):
|
||||
self.send('NICK :%s' % newnick)
|
||||
# No state update here: the IRCd will respond with a NICK acknowledgement if the change succeeds.
|
||||
else:
|
||||
self.callHooks([source, 'CLIENTBOT_NICK', {'newnick': newnick}])
|
||||
self.call_hooks([source, 'CLIENTBOT_NICK', {'newnick': newnick}])
|
||||
self.users[source].nick = newnick
|
||||
|
||||
def notice(self, source, target, text):
|
||||
@ -251,7 +251,7 @@ class ClientbotWrapperProtocol(IRCCommonProtocol):
|
||||
Sends PING to the uplink.
|
||||
"""
|
||||
if self.uplink:
|
||||
self.send('PING %s' % self.getFriendlyName(self.uplink))
|
||||
self.send('PING %s' % self.get_friendly_name(self.uplink))
|
||||
|
||||
# Poll WHO periodically to figure out any ident/host/away status changes.
|
||||
for channel in self.pseudoclient.channels:
|
||||
@ -266,13 +266,13 @@ class ClientbotWrapperProtocol(IRCCommonProtocol):
|
||||
if self.pseudoclient and source == self.pseudoclient.uid:
|
||||
self.send('PART %s :%s' % (channel, reason))
|
||||
else:
|
||||
self.callHooks([source, 'CLIENTBOT_PART', {'channel': channel, 'text': reason}])
|
||||
self.call_hooks([source, 'CLIENTBOT_PART', {'channel': channel, 'text': reason}])
|
||||
|
||||
def quit(self, source, reason):
|
||||
"""STUB: Quits a client."""
|
||||
userdata = self.users[source]
|
||||
self._remove_client(source)
|
||||
self.callHooks([source, 'CLIENTBOT_QUIT', {'text': reason, 'userdata': userdata}])
|
||||
self.call_hooks([source, 'CLIENTBOT_QUIT', {'text': reason, 'userdata': userdata}])
|
||||
|
||||
def sjoin(self, server, channel, users, ts=None, modes=set()):
|
||||
"""STUB: bursts joins from a server."""
|
||||
@ -288,8 +288,8 @@ class ClientbotWrapperProtocol(IRCCommonProtocol):
|
||||
self.users[user].channels.add(channel)
|
||||
|
||||
self.channels[channel].users |= puids
|
||||
nicks = {self.getFriendlyName(u) for u in puids}
|
||||
self.callHooks([server, 'CLIENTBOT_SJOIN', {'channel': channel, 'nicks': nicks}])
|
||||
nicks = {self.get_friendly_name(u) for u in puids}
|
||||
self.call_hooks([server, 'CLIENTBOT_SJOIN', {'channel': channel, 'nicks': nicks}])
|
||||
|
||||
def squit(self, source, target, text):
|
||||
"""STUB: SQUITs a server."""
|
||||
@ -298,7 +298,7 @@ class ClientbotWrapperProtocol(IRCCommonProtocol):
|
||||
squit_data = self._squit(source, 'CLIENTBOT_VIRTUAL_SQUIT', [target, text])
|
||||
|
||||
if squit_data.get('nicks'):
|
||||
self.callHooks([source, 'CLIENTBOT_SQUIT', squit_data])
|
||||
self.call_hooks([source, 'CLIENTBOT_SQUIT', squit_data])
|
||||
|
||||
def _stub(self, *args):
|
||||
"""Stub outgoing command function (does nothing)."""
|
||||
@ -315,20 +315,20 @@ class ClientbotWrapperProtocol(IRCCommonProtocol):
|
||||
|
||||
if field == 'IDENT' and u.ident != text:
|
||||
u.ident = text
|
||||
if not self.isInternalClient(target):
|
||||
if not self.is_internal_client(target):
|
||||
# We're updating the host of an external client in our state, so send the appropriate
|
||||
# hook payloads.
|
||||
self.callHooks([self.sid, 'CHGIDENT',
|
||||
self.call_hooks([self.sid, 'CHGIDENT',
|
||||
{'target': target, 'newident': text}])
|
||||
elif field == 'HOST' and u.host != text:
|
||||
u.host = text
|
||||
if not self.isInternalClient(target):
|
||||
self.callHooks([self.sid, 'CHGHOST',
|
||||
if not self.is_internal_client(target):
|
||||
self.call_hooks([self.sid, 'CHGHOST',
|
||||
{'target': target, 'newhost': text}])
|
||||
elif field in ('REALNAME', 'GECOS') and u.realname != text:
|
||||
u.realname = text
|
||||
if not self.isInternalClient(target):
|
||||
self.callHooks([self.sid, 'CHGNAME',
|
||||
if not self.is_internal_client(target):
|
||||
self.call_hooks([self.sid, 'CHGNAME',
|
||||
{'target': target, 'newgecos': text}])
|
||||
else:
|
||||
return # Nothing changed
|
||||
@ -340,8 +340,8 @@ class ClientbotWrapperProtocol(IRCCommonProtocol):
|
||||
Limited (internal) nick collision checking is done here to prevent Clientbot users from
|
||||
being confused with virtual clients, and vice versa."""
|
||||
self._validateNick(nick)
|
||||
idsource = self.nickToUid(nick)
|
||||
is_internal = self.isInternalClient(idsource)
|
||||
idsource = self.nick_to_uid(nick)
|
||||
is_internal = self.is_internal_client(idsource)
|
||||
|
||||
# If this sender isn't known or it is one of our virtual clients, spawn a new one.
|
||||
# This also takes care of any nick collisions caused by new, Clientbot users
|
||||
@ -349,7 +349,7 @@ class ClientbotWrapperProtocol(IRCCommonProtocol):
|
||||
if (not idsource) or (is_internal and self.pseudoclient and idsource != self.pseudoclient.uid):
|
||||
if idsource:
|
||||
log.debug('(%s) Nick-colliding virtual client %s/%s', self.name, idsource, nick)
|
||||
self.callHooks([self.sid, 'CLIENTBOT_NICKCOLLIDE', {'target': idsource, 'parse_as': 'SAVE'}])
|
||||
self.call_hooks([self.sid, 'CLIENTBOT_NICKCOLLIDE', {'target': idsource, 'parse_as': 'SAVE'}])
|
||||
|
||||
idsource = self.spawnClient(nick, ident or 'unknown', host or 'unknown',
|
||||
server=self.uplink, realname=FALLBACK_REALNAME).uid
|
||||
@ -634,9 +634,9 @@ class ClientbotWrapperProtocol(IRCCommonProtocol):
|
||||
# <- :charybdis.midnight.vpn 353 ice = #test :ice @GL
|
||||
|
||||
# Mark "@"-type channels as secret automatically, per RFC2812.
|
||||
channel = self.toLower(args[2])
|
||||
channel = self.to_lower(args[2])
|
||||
if args[1] == '@':
|
||||
self.applyModes(channel, [('+s', None)])
|
||||
self.apply_modes(channel, [('+s', None)])
|
||||
|
||||
names = set()
|
||||
modes = set()
|
||||
@ -667,7 +667,7 @@ class ClientbotWrapperProtocol(IRCCommonProtocol):
|
||||
|
||||
# Statekeeping: make sure the channel's user list is updated!
|
||||
self.channels[channel].users |= names
|
||||
self.applyModes(channel, modes)
|
||||
self.apply_modes(channel, modes)
|
||||
|
||||
log.debug('(%s) handle_353: adding users %s to %s', self.name, names, channel)
|
||||
log.debug('(%s) handle_353: adding modes %s to %s', self.name, modes, channel)
|
||||
@ -705,7 +705,7 @@ class ClientbotWrapperProtocol(IRCCommonProtocol):
|
||||
realname = args[-1].split(' ', 1)[-1]
|
||||
|
||||
self._validateNick(nick)
|
||||
uid = self.nickToUid(nick)
|
||||
uid = self.nick_to_uid(nick)
|
||||
|
||||
if uid is None:
|
||||
log.debug("(%s) Ignoring extraneous /WHO info for %s", self.name, nick)
|
||||
@ -732,15 +732,15 @@ class ClientbotWrapperProtocol(IRCCommonProtocol):
|
||||
|
||||
if self.serverdata.get('track_oper_statuses'):
|
||||
if '*' in status: # Track IRCop status
|
||||
if not self.isOper(uid, allowAuthed=False):
|
||||
if not self.is_oper(uid, allowAuthed=False):
|
||||
# Don't send duplicate oper ups if the target is already oper.
|
||||
self.applyModes(uid, [('+o', None)])
|
||||
self.callHooks([uid, 'MODE', {'target': uid, 'modes': {('+o', None)}}])
|
||||
self.callHooks([uid, 'CLIENT_OPERED', {'text': 'IRC Operator'}])
|
||||
elif self.isOper(uid, allowAuthed=False) and not self.isInternalClient(uid):
|
||||
self.apply_modes(uid, [('+o', None)])
|
||||
self.call_hooks([uid, 'MODE', {'target': uid, 'modes': {('+o', None)}}])
|
||||
self.call_hooks([uid, 'CLIENT_OPERED', {'text': 'IRC Operator'}])
|
||||
elif self.is_oper(uid, allowAuthed=False) and not self.is_internal_client(uid):
|
||||
# Track deopers
|
||||
self.applyModes(uid, [('-o', None)])
|
||||
self.callHooks([uid, 'MODE', {'target': uid, 'modes': {('-o', None)}}])
|
||||
self.apply_modes(uid, [('-o', None)])
|
||||
self.call_hooks([uid, 'MODE', {'target': uid, 'modes': {('-o', None)}}])
|
||||
|
||||
self.who_received.add(uid)
|
||||
|
||||
@ -753,7 +753,7 @@ class ClientbotWrapperProtocol(IRCCommonProtocol):
|
||||
users = self.who_received.copy()
|
||||
self.who_received.clear()
|
||||
|
||||
channel = self.toLower(args[1])
|
||||
channel = self.to_lower(args[1])
|
||||
c = self.channels[channel]
|
||||
c.who_received = True
|
||||
|
||||
@ -788,7 +788,7 @@ class ClientbotWrapperProtocol(IRCCommonProtocol):
|
||||
Handles incoming JOINs.
|
||||
"""
|
||||
# <- :GL|!~GL@127.0.0.1 JOIN #whatever
|
||||
channel = self.toLower(args[0])
|
||||
channel = self.to_lower(args[0])
|
||||
self.join(source, channel)
|
||||
|
||||
return {'channel': channel, 'users': [source], 'modes': self.channels[channel].modes}
|
||||
@ -798,8 +798,8 @@ class ClientbotWrapperProtocol(IRCCommonProtocol):
|
||||
Handles incoming KICKs.
|
||||
"""
|
||||
# <- :GL!~gl@127.0.0.1 KICK #whatever GL| :xd
|
||||
channel = self.toLower(args[0])
|
||||
target = self.nickToUid(args[1])
|
||||
channel = self.to_lower(args[0])
|
||||
target = self.nick_to_uid(args[1])
|
||||
|
||||
try:
|
||||
reason = args[2]
|
||||
@ -824,9 +824,9 @@ class ClientbotWrapperProtocol(IRCCommonProtocol):
|
||||
except KeyError:
|
||||
pass
|
||||
|
||||
if (not self.isInternalClient(source)) and not self.isInternalServer(source):
|
||||
if (not self.is_internal_client(source)) and not self.is_internal_server(source):
|
||||
# Don't repeat hooks if we're the kicker.
|
||||
self.callHooks([source, 'KICK', {'channel': channel, 'target': target, 'text': reason}])
|
||||
self.call_hooks([source, 'KICK', {'channel': channel, 'target': target, 'text': reason}])
|
||||
|
||||
# Delete channels that we were kicked from, for better state keeping.
|
||||
if self.pseudoclient and target == self.pseudoclient.uid:
|
||||
@ -838,16 +838,16 @@ class ClientbotWrapperProtocol(IRCCommonProtocol):
|
||||
# <- :ice MODE ice :+Zi
|
||||
target = args[0]
|
||||
if utils.isChannel(target):
|
||||
target = self.toLower(target)
|
||||
target = self.to_lower(target)
|
||||
oldobj = self.channels[target].deepcopy()
|
||||
else:
|
||||
target = self.nickToUid(target)
|
||||
target = self.nick_to_uid(target)
|
||||
oldobj = None
|
||||
modes = args[1:]
|
||||
changedmodes = self.parseModes(target, modes)
|
||||
self.applyModes(target, changedmodes)
|
||||
changedmodes = self.parse_modes(target, modes)
|
||||
self.apply_modes(target, changedmodes)
|
||||
|
||||
if self.isInternalClient(target):
|
||||
if self.is_internal_client(target):
|
||||
log.debug('(%s) Suppressing MODE change hook for internal client %s', self.name, target)
|
||||
return
|
||||
if changedmodes:
|
||||
@ -862,15 +862,15 @@ class ClientbotWrapperProtocol(IRCCommonProtocol):
|
||||
# -> MODE #test
|
||||
# <- :midnight.vpn 324 GL #test +nt
|
||||
# <- :midnight.vpn 329 GL #test 1491773459
|
||||
channel = self.toLower(args[1])
|
||||
channel = self.to_lower(args[1])
|
||||
modes = args[2:]
|
||||
log.debug('(%s) Got RPL_CHANNELMODEIS (324) modes %s for %s', self.name, modes, channel)
|
||||
changedmodes = self.parseModes(channel, modes)
|
||||
self.applyModes(channel, changedmodes)
|
||||
changedmodes = self.parse_modes(channel, modes)
|
||||
self.apply_modes(channel, changedmodes)
|
||||
|
||||
def handle_329(self, source, command, args):
|
||||
"""Handles TS announcements via RPL_CREATIONTIME."""
|
||||
channel = self.toLower(args[1])
|
||||
channel = self.to_lower(args[1])
|
||||
ts = int(args[2])
|
||||
self.channels[channel].ts = ts
|
||||
|
||||
@ -900,7 +900,7 @@ class ClientbotWrapperProtocol(IRCCommonProtocol):
|
||||
Handles incoming PARTs.
|
||||
"""
|
||||
# <- :GL|!~GL@127.0.0.1 PART #whatever
|
||||
channels = list(map(self.toLower, args[0].split(',')))
|
||||
channels = list(map(self.to_lower, args[0].split(',')))
|
||||
try:
|
||||
reason = args[1]
|
||||
except IndexError:
|
||||
@ -910,7 +910,7 @@ class ClientbotWrapperProtocol(IRCCommonProtocol):
|
||||
self.channels[channel].removeuser(source)
|
||||
self.users[source].channels -= set(channels)
|
||||
|
||||
self.callHooks([source, 'PART', {'channels': channels, 'text': reason}])
|
||||
self.call_hooks([source, 'PART', {'channels': channels, 'text': reason}])
|
||||
|
||||
# Clear channels that are empty, or that we're parting.
|
||||
for channel in channels:
|
||||
@ -936,15 +936,15 @@ class ClientbotWrapperProtocol(IRCCommonProtocol):
|
||||
# <- :sender NOTICE somenick :afasfsa
|
||||
target = args[0]
|
||||
|
||||
if self.isInternalClient(source) or self.isInternalServer(source):
|
||||
if self.is_internal_client(source) or self.is_internal_server(source):
|
||||
log.warning('(%s) Received %s to %s being routed the wrong way!', self.name, command, target)
|
||||
return
|
||||
|
||||
# We use lowercase channels internally.
|
||||
if utils.isChannel(target):
|
||||
target = self.toLower(target)
|
||||
target = self.to_lower(target)
|
||||
else:
|
||||
target = self.nickToUid(target)
|
||||
target = self.nick_to_uid(target)
|
||||
if target:
|
||||
return {'target': target, 'text': args[1]}
|
||||
handle_notice = handle_privmsg
|
||||
|
@ -96,7 +96,7 @@ class HybridProtocol(TS6Protocol):
|
||||
"""
|
||||
|
||||
server = server or self.sid
|
||||
if not self.isInternalServer(server):
|
||||
if not self.is_internal_server(server):
|
||||
raise ValueError('Server %r is not a PyLink server!' % server)
|
||||
|
||||
uid = self.uidgen[server].next_uid()
|
||||
@ -104,10 +104,10 @@ class HybridProtocol(TS6Protocol):
|
||||
ts = ts or int(time.time())
|
||||
realname = realname or conf.conf['bot']['realname']
|
||||
realhost = realhost or host
|
||||
raw_modes = self.joinModes(modes)
|
||||
raw_modes = self.join_modes(modes)
|
||||
u = self.users[uid] = IrcUser(nick, ts, uid, server, ident=ident, host=host, realname=realname,
|
||||
realhost=realhost, ip=ip, manipulatable=manipulatable)
|
||||
self.applyModes(uid, modes)
|
||||
self.apply_modes(uid, modes)
|
||||
self.servers[server].users.add(uid)
|
||||
self._send_with_prefix(server, "UID {nick} 1 {ts} {modes} {ident} {host} {ip} {uid} "
|
||||
"* :{realname}".format(ts=ts, host=host,
|
||||
@ -138,7 +138,7 @@ class HybridProtocol(TS6Protocol):
|
||||
def topicBurst(self, numeric, target, text):
|
||||
"""Sends a topic change from a PyLink server. This is usually used on burst."""
|
||||
# <- :0UY TBURST 1459308205 #testchan 1459309379 dan!~d@localhost :sdf
|
||||
if not self.isInternalServer(numeric):
|
||||
if not self.is_internal_server(numeric):
|
||||
raise LookupError('No such PyLink server exists.')
|
||||
|
||||
ts = self.channels[target].ts
|
||||
@ -179,25 +179,25 @@ class HybridProtocol(TS6Protocol):
|
||||
|
||||
self.users[uid] = IrcUser(nick, ts, uid, numeric, ident, host, realname, host, ip)
|
||||
|
||||
parsedmodes = self.parseModes(uid, [modes])
|
||||
parsedmodes = self.parse_modes(uid, [modes])
|
||||
log.debug('(%s) handle_uid: Applying modes %s for %s', self.name, parsedmodes, uid)
|
||||
self.applyModes(uid, parsedmodes)
|
||||
self.apply_modes(uid, parsedmodes)
|
||||
self.servers[numeric].users.add(uid)
|
||||
|
||||
# Call the OPERED UP hook if +o is being added to the mode list.
|
||||
if ('+o', None) in parsedmodes:
|
||||
self.callHooks([uid, 'CLIENT_OPERED', {'text': 'IRC_Operator'}])
|
||||
self.call_hooks([uid, 'CLIENT_OPERED', {'text': 'IRC_Operator'}])
|
||||
|
||||
# Set the account name if present
|
||||
if account:
|
||||
self.callHooks([uid, 'CLIENT_SERVICES_LOGIN', {'text': account}])
|
||||
self.call_hooks([uid, 'CLIENT_SERVICES_LOGIN', {'text': account}])
|
||||
|
||||
return {'uid': uid, 'ts': ts, 'nick': nick, 'realname': realname, 'host': host, 'ident': ident, 'ip': ip}
|
||||
|
||||
def handle_tburst(self, numeric, command, args):
|
||||
"""Handles incoming topic burst (TBURST) commands."""
|
||||
# <- :0UY TBURST 1459308205 #testchan 1459309379 dan!~d@localhost :sdf
|
||||
channel = self.toLower(args[1])
|
||||
channel = self.to_lower(args[1])
|
||||
ts = args[2]
|
||||
setter = args[3]
|
||||
topic = args[-1]
|
||||
@ -221,7 +221,7 @@ class HybridProtocol(TS6Protocol):
|
||||
target = args[0]
|
||||
ts = args[1]
|
||||
modes = args[2:]
|
||||
parsedmodes = self.parseModes(target, modes)
|
||||
parsedmodes = self.parse_modes(target, modes)
|
||||
|
||||
for modepair in parsedmodes:
|
||||
if modepair[0] == '+d':
|
||||
@ -241,7 +241,7 @@ class HybridProtocol(TS6Protocol):
|
||||
|
||||
# Send the login hook, and remove this mode from the mode
|
||||
# list, as it shouldn't be parsed literally.
|
||||
self.callHooks([target, 'CLIENT_SERVICES_LOGIN', {'text': account}])
|
||||
self.call_hooks([target, 'CLIENT_SERVICES_LOGIN', {'text': account}])
|
||||
parsedmodes.remove(modepair)
|
||||
|
||||
elif modepair[0] == '+x':
|
||||
@ -253,13 +253,13 @@ class HybridProtocol(TS6Protocol):
|
||||
self.users[target].host = host
|
||||
|
||||
# Propagate the hostmask change as a hook.
|
||||
self.callHooks([numeric, 'CHGHOST',
|
||||
self.call_hooks([numeric, 'CHGHOST',
|
||||
{'target': target, 'newhost': host}])
|
||||
|
||||
parsedmodes.remove(modepair)
|
||||
|
||||
if parsedmodes:
|
||||
self.applyModes(target, parsedmodes)
|
||||
self.apply_modes(target, parsedmodes)
|
||||
|
||||
return {'target': target, 'modes': parsedmodes}
|
||||
|
||||
|
@ -44,7 +44,7 @@ class InspIRCdProtocol(TS6BaseProtocol):
|
||||
"""
|
||||
server = server or self.sid
|
||||
|
||||
if not self.isInternalServer(server):
|
||||
if not self.is_internal_server(server):
|
||||
raise ValueError('Server %r is not a PyLink server!' % server)
|
||||
|
||||
uid = self.uidgen[server].next_uid()
|
||||
@ -52,11 +52,11 @@ class InspIRCdProtocol(TS6BaseProtocol):
|
||||
ts = ts or int(time.time())
|
||||
realname = realname or conf.conf['bot']['realname']
|
||||
realhost = realhost or host
|
||||
raw_modes = self.joinModes(modes)
|
||||
raw_modes = self.join_modes(modes)
|
||||
u = self.users[uid] = IrcUser(nick, ts, uid, server, ident=ident, host=host, realname=realname,
|
||||
realhost=realhost, ip=ip, manipulatable=manipulatable, opertype=opertype)
|
||||
|
||||
self.applyModes(uid, modes)
|
||||
self.apply_modes(uid, modes)
|
||||
self.servers[server].users.add(uid)
|
||||
|
||||
self._send_with_prefix(server, "UID {uid} {ts} {nick} {realhost} {host} {ident} {ip}"
|
||||
@ -73,10 +73,10 @@ class InspIRCdProtocol(TS6BaseProtocol):
|
||||
# InspIRCd doesn't distinguish between burst joins and regular joins,
|
||||
# so what we're actually doing here is sending FJOIN from the server,
|
||||
# on behalf of the clients that are joining.
|
||||
channel = self.toLower(channel)
|
||||
channel = self.to_lower(channel)
|
||||
|
||||
server = self.getServer(client)
|
||||
if not self.isInternalServer(server):
|
||||
server = self.get_server(client)
|
||||
if not self.is_internal_server(server):
|
||||
log.error('(%s) Error trying to join %r to %r (no such client exists)', self.name, client, channel)
|
||||
raise LookupError('No such PyLink client exists.')
|
||||
|
||||
@ -84,7 +84,7 @@ class InspIRCdProtocol(TS6BaseProtocol):
|
||||
modes = [m for m in self.channels[channel].modes if m[0] not in self.cmodes['*A']]
|
||||
self._send_with_prefix(server, "FJOIN {channel} {ts} {modes} :,{uid}".format(
|
||||
ts=self.channels[channel].ts, uid=client, channel=channel,
|
||||
modes=self.joinModes(modes)))
|
||||
modes=self.join_modes(modes)))
|
||||
self.channels[channel].users.add(client)
|
||||
self.users[client].channels.add(channel)
|
||||
|
||||
@ -99,7 +99,7 @@ class InspIRCdProtocol(TS6BaseProtocol):
|
||||
sjoin('100', '#test', [('', '100AAABBC'), ('qo', 100AAABBB'), ('h', '100AAADDD')])
|
||||
sjoin(self.sid, '#test', [('o', self.pseudoclient.uid)])
|
||||
"""
|
||||
channel = self.toLower(channel)
|
||||
channel = self.to_lower(channel)
|
||||
server = server or self.sid
|
||||
assert users, "sjoin: No users sent?"
|
||||
log.debug('(%s) sjoin: got %r for users', self.name, users)
|
||||
@ -144,14 +144,14 @@ class InspIRCdProtocol(TS6BaseProtocol):
|
||||
namelist = ' '.join(namelist)
|
||||
self._send_with_prefix(server, "FJOIN {channel} {ts} {modes} :{users}".format(
|
||||
ts=ts, users=namelist, channel=channel,
|
||||
modes=self.joinModes(modes)))
|
||||
modes=self.join_modes(modes)))
|
||||
self.channels[channel].users.update(uids)
|
||||
|
||||
if banmodes:
|
||||
# Burst ban modes if there are any.
|
||||
# <- :1ML FMODE #test 1461201525 +bb *!*@bad.user *!*@rly.bad.user
|
||||
self._send_with_prefix(server, "FMODE {channel} {ts} {modes} ".format(
|
||||
ts=ts, channel=channel, modes=self.joinModes(banmodes)))
|
||||
ts=ts, channel=channel, modes=self.join_modes(banmodes)))
|
||||
|
||||
self.updateTS(server, channel, ts, changedmodes)
|
||||
|
||||
@ -194,8 +194,8 @@ class InspIRCdProtocol(TS6BaseProtocol):
|
||||
# -> :9PYAAAAAA FMODE #pylink 1433653951 +os 9PYAAAAAA
|
||||
# -> :9PYAAAAAA MODE 9PYAAAAAA -i+w
|
||||
|
||||
if (not self.isInternalClient(numeric)) and \
|
||||
(not self.isInternalServer(numeric)):
|
||||
if (not self.is_internal_client(numeric)) and \
|
||||
(not self.is_internal_server(numeric)):
|
||||
raise LookupError('No such PyLink client/server exists.')
|
||||
|
||||
log.debug('(%s) inspircd._send_with_prefixModes: received %r for mode list', self.name, modes)
|
||||
@ -203,18 +203,18 @@ class InspIRCdProtocol(TS6BaseProtocol):
|
||||
# https://github.com/inspircd/inspircd/blob/master/src/modules/m_spanningtree/opertype.cpp#L26-L28
|
||||
# Servers need a special command to set umode +o on people.
|
||||
self._operUp(target)
|
||||
self.applyModes(target, modes)
|
||||
joinedmodes = self.joinModes(modes)
|
||||
self.apply_modes(target, modes)
|
||||
joinedmodes = self.join_modes(modes)
|
||||
if utils.isChannel(target):
|
||||
ts = ts or self.channels[self.toLower(target)].ts
|
||||
ts = ts or self.channels[self.to_lower(target)].ts
|
||||
self._send_with_prefix(numeric, 'FMODE %s %s %s' % (target, ts, joinedmodes))
|
||||
else:
|
||||
self._send_with_prefix(numeric, 'MODE %s %s' % (target, joinedmodes))
|
||||
|
||||
def kill(self, numeric, target, reason):
|
||||
"""Sends a kill from a PyLink client/server."""
|
||||
if (not self.isInternalClient(numeric)) and \
|
||||
(not self.isInternalServer(numeric)):
|
||||
if (not self.is_internal_client(numeric)) and \
|
||||
(not self.is_internal_server(numeric)):
|
||||
raise LookupError('No such PyLink client/server exists.')
|
||||
|
||||
# InspIRCd will show the raw kill message sent from our server as the quit message.
|
||||
@ -230,12 +230,12 @@ class InspIRCdProtocol(TS6BaseProtocol):
|
||||
# We only need to call _remove_client here if the target is one of our
|
||||
# clients, since any remote servers will send a QUIT from
|
||||
# their target if the command succeeds.
|
||||
if self.isInternalClient(target):
|
||||
if self.is_internal_client(target):
|
||||
self._remove_client(target)
|
||||
|
||||
def topicBurst(self, numeric, target, text):
|
||||
"""Sends a topic change from a PyLink server. This is usually used on burst."""
|
||||
if not self.isInternalServer(numeric):
|
||||
if not self.is_internal_server(numeric):
|
||||
raise LookupError('No such PyLink server exists.')
|
||||
ts = int(time.time())
|
||||
servername = self.servers[numeric].name
|
||||
@ -245,13 +245,13 @@ class InspIRCdProtocol(TS6BaseProtocol):
|
||||
|
||||
def invite(self, numeric, target, channel):
|
||||
"""Sends an INVITE from a PyLink client.."""
|
||||
if not self.isInternalClient(numeric):
|
||||
if not self.is_internal_client(numeric):
|
||||
raise LookupError('No such PyLink client exists.')
|
||||
self._send_with_prefix(numeric, 'INVITE %s %s' % (target, channel))
|
||||
|
||||
def knock(self, numeric, target, text):
|
||||
"""Sends a KNOCK from a PyLink client."""
|
||||
if not self.isInternalClient(numeric):
|
||||
if not self.is_internal_client(numeric):
|
||||
raise LookupError('No such PyLink client exists.')
|
||||
self._send_with_prefix(numeric, 'ENCAP * KNOCK %s :%s' % (target, text))
|
||||
|
||||
@ -263,7 +263,7 @@ class InspIRCdProtocol(TS6BaseProtocol):
|
||||
raise NotImplementedError("Changing field %r of a client is "
|
||||
"unsupported by this protocol." % field)
|
||||
|
||||
if self.isInternalClient(target):
|
||||
if self.is_internal_client(target):
|
||||
# It is one of our clients, use FIDENT/HOST/NAME.
|
||||
if field == 'IDENT':
|
||||
self.users[target].ident = text
|
||||
@ -285,7 +285,7 @@ class InspIRCdProtocol(TS6BaseProtocol):
|
||||
self._send_with_prefix(self.sid, 'CHGIDENT %s %s' % (target, text))
|
||||
|
||||
# Send hook payloads for other plugins to listen to.
|
||||
self.callHooks([self.sid, 'CHGIDENT',
|
||||
self.call_hooks([self.sid, 'CHGIDENT',
|
||||
{'target': target, 'newident': text}])
|
||||
elif field == 'HOST':
|
||||
if 'm_chghost.so' not in self.modsupport:
|
||||
@ -295,7 +295,7 @@ class InspIRCdProtocol(TS6BaseProtocol):
|
||||
self.users[target].host = text
|
||||
self._send_with_prefix(self.sid, 'CHGHOST %s %s' % (target, text))
|
||||
|
||||
self.callHooks([self.sid, 'CHGHOST',
|
||||
self.call_hooks([self.sid, 'CHGHOST',
|
||||
{'target': target, 'newhost': text}])
|
||||
|
||||
elif field in ('REALNAME', 'GECOS'):
|
||||
@ -305,7 +305,7 @@ class InspIRCdProtocol(TS6BaseProtocol):
|
||||
self.users[target].realname = text
|
||||
self._send_with_prefix(self.sid, 'CHGNAME %s :%s' % (target, text))
|
||||
|
||||
self.callHooks([self.sid, 'CHGNAME',
|
||||
self.call_hooks([self.sid, 'CHGNAME',
|
||||
{'target': target, 'newgecos': text}])
|
||||
|
||||
def ping(self, source=None, target=None):
|
||||
@ -363,7 +363,7 @@ class InspIRCdProtocol(TS6BaseProtocol):
|
||||
for server in self.servers.values():
|
||||
if name == server.name:
|
||||
raise ValueError('A server named %r already exists!' % name)
|
||||
if not self.isInternalServer(uplink):
|
||||
if not self.is_internal_server(uplink):
|
||||
raise ValueError('Server %r is not a PyLink server!' % uplink)
|
||||
if not utils.isServerName(name):
|
||||
raise ValueError('Invalid server name %r' % name)
|
||||
@ -523,19 +523,19 @@ class InspIRCdProtocol(TS6BaseProtocol):
|
||||
"""Handles incoming PING commands, so we don't time out."""
|
||||
# <- :70M PING 70M 0AL
|
||||
# -> :0AL PONG 0AL 70M
|
||||
if self.isInternalServer(args[1]):
|
||||
if self.is_internal_server(args[1]):
|
||||
self._send_with_prefix(args[1], 'PONG %s %s' % (args[1], source), queue=False)
|
||||
|
||||
def handle_fjoin(self, servernumeric, command, args):
|
||||
"""Handles incoming FJOIN commands (InspIRCd equivalent of JOIN/SJOIN)."""
|
||||
# :70M FJOIN #chat 1423790411 +AFPfjnt 6:5 7:5 9:5 :o,1SRAABIT4 v,1IOAAF53R <...>
|
||||
channel = self.toLower(args[0])
|
||||
channel = self.to_lower(args[0])
|
||||
chandata = self.channels[channel].deepcopy()
|
||||
# InspIRCd sends each channel's users in the form of 'modeprefix(es),UID'
|
||||
userlist = args[-1].split()
|
||||
|
||||
modestring = args[2:-1] or args[2]
|
||||
parsedmodes = self.parseModes(channel, modestring)
|
||||
parsedmodes = self.parse_modes(channel, modestring)
|
||||
namelist = []
|
||||
|
||||
# Keep track of other modes that are added due to prefix modes being joined too.
|
||||
@ -579,13 +579,13 @@ class InspIRCdProtocol(TS6BaseProtocol):
|
||||
realname = args[-1]
|
||||
self.users[uid] = userobj = IrcUser(nick, ts, uid, numeric, ident, host, realname, realhost, ip)
|
||||
|
||||
parsedmodes = self.parseModes(uid, [args[8], args[9]])
|
||||
self.applyModes(uid, parsedmodes)
|
||||
parsedmodes = self.parse_modes(uid, [args[8], args[9]])
|
||||
self.apply_modes(uid, parsedmodes)
|
||||
|
||||
if (self.umodes.get('servprotect'), None) in userobj.modes:
|
||||
# Services are usually given a "Network Service" WHOIS, so
|
||||
# set that as the opertype.
|
||||
self.callHooks([uid, 'CLIENT_OPERED', {'text': 'Network Service'}])
|
||||
self.call_hooks([uid, 'CLIENT_OPERED', {'text': 'Network Service'}])
|
||||
|
||||
self.servers[numeric].users.add(uid)
|
||||
return {'uid': uid, 'ts': ts, 'nick': nick, 'realhost': realhost, 'host': host, 'ident': ident, 'ip': ip}
|
||||
@ -620,11 +620,11 @@ class InspIRCdProtocol(TS6BaseProtocol):
|
||||
def handle_fmode(self, numeric, command, args):
|
||||
"""Handles the FMODE command, used for channel mode changes."""
|
||||
# <- :70MAAAAAA FMODE #chat 1433653462 +hhT 70MAAAAAA 70MAAAAAD
|
||||
channel = self.toLower(args[0])
|
||||
channel = self.to_lower(args[0])
|
||||
oldobj = self.channels[channel].deepcopy()
|
||||
modes = args[2:]
|
||||
changedmodes = self.parseModes(channel, modes)
|
||||
self.applyModes(channel, changedmodes)
|
||||
changedmodes = self.parse_modes(channel, modes)
|
||||
self.apply_modes(channel, changedmodes)
|
||||
ts = int(args[1])
|
||||
return {'target': channel, 'modes': changedmodes, 'ts': ts,
|
||||
'channeldata': oldobj}
|
||||
@ -636,8 +636,8 @@ class InspIRCdProtocol(TS6BaseProtocol):
|
||||
# <- :70MAAAAAA MODE 70MAAAAAA -i+xc
|
||||
target = args[0]
|
||||
modestrings = args[1:]
|
||||
changedmodes = self.parseModes(target, modestrings)
|
||||
self.applyModes(target, changedmodes)
|
||||
changedmodes = self.parse_modes(target, modestrings)
|
||||
self.apply_modes(target, changedmodes)
|
||||
return {'target': target, 'modes': changedmodes}
|
||||
|
||||
def handle_idle(self, numeric, command, args):
|
||||
@ -662,7 +662,7 @@ class InspIRCdProtocol(TS6BaseProtocol):
|
||||
def handle_ftopic(self, numeric, command, args):
|
||||
"""Handles incoming FTOPIC (sets topic on burst)."""
|
||||
# <- :70M FTOPIC #channel 1434510754 GLo|o|!GLolol@escape.the.dreamland.ca :Some channel topic
|
||||
channel = self.toLower(args[0])
|
||||
channel = self.to_lower(args[0])
|
||||
ts = args[1]
|
||||
setter = args[2]
|
||||
topic = args[-1]
|
||||
@ -676,7 +676,7 @@ class InspIRCdProtocol(TS6BaseProtocol):
|
||||
def handle_knock(self, numeric, command, args):
|
||||
"""Handles channel KNOCKs."""
|
||||
# <- :70MAAAAAA ENCAP * KNOCK #blah :abcdefg
|
||||
channel = self.toLower(args[0])
|
||||
channel = self.to_lower(args[0])
|
||||
text = args[1]
|
||||
return {'channel': channel, 'text': text}
|
||||
|
||||
@ -693,11 +693,11 @@ class InspIRCdProtocol(TS6BaseProtocol):
|
||||
|
||||
# Set umode +o on the target.
|
||||
omode = [('+o', None)]
|
||||
self.applyModes(target, omode)
|
||||
self.apply_modes(target, omode)
|
||||
|
||||
# Call the CLIENT_OPERED hook that protocols use. The MODE hook
|
||||
# payload is returned below.
|
||||
self.callHooks([target, 'CLIENT_OPERED', {'text': opertype}])
|
||||
self.call_hooks([target, 'CLIENT_OPERED', {'text': opertype}])
|
||||
return {'target': target, 'modes': omode}
|
||||
|
||||
def handle_fident(self, numeric, command, args):
|
||||
@ -752,10 +752,10 @@ class InspIRCdProtocol(TS6BaseProtocol):
|
||||
# SQUIT, in order to be consistent with other IRCds which make SQUITs
|
||||
# implicit.
|
||||
target = self._get_SID(args[0])
|
||||
if self.isInternalServer(target):
|
||||
if self.is_internal_server(target):
|
||||
# The target has to be one of our servers in order to work...
|
||||
uplink = self.servers[target].uplink
|
||||
reason = 'Requested by %s' % self.getHostmask(numeric)
|
||||
reason = 'Requested by %s' % self.get_hostmask(numeric)
|
||||
self._send_with_prefix(uplink, 'SQUIT %s :%s' % (target, reason))
|
||||
return self.handle_squit(numeric, 'SQUIT', [target, reason])
|
||||
else:
|
||||
@ -774,7 +774,7 @@ class InspIRCdProtocol(TS6BaseProtocol):
|
||||
# <- :00A METADATA 1MLAAAJET accountname :tester
|
||||
# Sets the services login name of the client.
|
||||
|
||||
self.callHooks([uid, 'CLIENT_SERVICES_LOGIN', {'text': args[-1]}])
|
||||
self.call_hooks([uid, 'CLIENT_SERVICES_LOGIN', {'text': args[-1]}])
|
||||
|
||||
def handle_version(self, numeric, command, args):
|
||||
"""
|
||||
@ -800,20 +800,20 @@ class InspIRCdProtocol(TS6BaseProtocol):
|
||||
# ENCAP -> SAKICK args: ['#test', '0ALAAAAAB', 'test']
|
||||
|
||||
target = args[1]
|
||||
channel = self.toLower(args[0])
|
||||
channel = self.to_lower(args[0])
|
||||
try:
|
||||
reason = args[2]
|
||||
except IndexError:
|
||||
# Kick reason is optional, strange...
|
||||
reason = self.getFriendlyName(source)
|
||||
reason = self.get_friendly_name(source)
|
||||
|
||||
if not self.isInternalClient(target):
|
||||
if not self.is_internal_client(target):
|
||||
log.warning("(%s) Got SAKICK for client that not one of ours: %s", self.name, target)
|
||||
return
|
||||
else:
|
||||
# Like RSQUIT, SAKICK requires that the receiving server acknowledge that a kick has
|
||||
# happened. This comes from the server hosting the target client.
|
||||
server = self.getServer(target)
|
||||
server = self.get_server(target)
|
||||
|
||||
self.kick(server, channel, target, reason)
|
||||
return {'channel': channel, 'target': target, 'text': reason}
|
||||
|
@ -179,7 +179,7 @@ class IRCS2SProtocol(IRCCommonProtocol):
|
||||
sender = self.uplink
|
||||
args.insert(0, sender)
|
||||
|
||||
if self.isInternalClient(sender) or self.isInternalServer(sender):
|
||||
if self.is_internal_client(sender) or self.is_internal_server(sender):
|
||||
log.warning("(%s) Received command %s being routed the wrong way!", self.name, command)
|
||||
return
|
||||
|
||||
@ -213,13 +213,13 @@ class IRCS2SProtocol(IRCCommonProtocol):
|
||||
"""
|
||||
Nick collision checker.
|
||||
"""
|
||||
uid = self.nickToUid(nick)
|
||||
uid = self.nick_to_uid(nick)
|
||||
# If there is a nick collision, we simply alert plugins. Relay will purposely try to
|
||||
# lose fights and tag nicks instead, while other plugins can choose how to handle this.
|
||||
if uid:
|
||||
log.info('(%s) Nick collision on %s/%s, forwarding this to plugins', self.name,
|
||||
uid, nick)
|
||||
self.callHooks([self.sid, 'SAVE', {'target': uid}])
|
||||
self.call_hooks([self.sid, 'SAVE', {'target': uid}])
|
||||
|
||||
def handle_away(self, numeric, command, args):
|
||||
"""Handles incoming AWAY messages."""
|
||||
@ -243,7 +243,7 @@ class IRCS2SProtocol(IRCCommonProtocol):
|
||||
# Note that the target is a nickname, not a numeric.
|
||||
|
||||
target = self._get_UID(args[0])
|
||||
channel = self.toLower(args[1])
|
||||
channel = self.to_lower(args[1])
|
||||
|
||||
curtime = int(time.time())
|
||||
try:
|
||||
@ -274,7 +274,7 @@ class IRCS2SProtocol(IRCCommonProtocol):
|
||||
|
||||
try:
|
||||
# Get the nick or server name of the caller.
|
||||
killer = self.getFriendlyName(source)
|
||||
killer = self.get_friendly_name(source)
|
||||
except KeyError:
|
||||
# Killer was... neither? We must have aliens or something. Fallback
|
||||
# to the given "UID".
|
||||
@ -289,7 +289,7 @@ class IRCS2SProtocol(IRCCommonProtocol):
|
||||
|
||||
def handle_part(self, source, command, args):
|
||||
"""Handles incoming PART commands."""
|
||||
channels = self.toLower(args[0]).split(',')
|
||||
channels = self.to_lower(args[0]).split(',')
|
||||
|
||||
for channel in channels:
|
||||
self.channels[channel].removeuser(source)
|
||||
@ -337,7 +337,7 @@ class IRCS2SProtocol(IRCCommonProtocol):
|
||||
# Note: don't mess with the case of the channel prefix, or ~#channel
|
||||
# messages will break on RFC1459 casemapping networks (it becomes ^#channel
|
||||
# instead).
|
||||
target = '#'.join((split_channel[0], self.toLower(split_channel[1])))
|
||||
target = '#'.join((split_channel[0], self.to_lower(split_channel[1])))
|
||||
log.debug('(%s) Normalizing channel target %s to %s', self.name, args[0], target)
|
||||
|
||||
return {'target': target, 'text': args[1]}
|
||||
|
112
protocols/p10.py
112
protocols/p10.py
@ -262,7 +262,7 @@ class P10Protocol(IRCS2SProtocol):
|
||||
# -1 <fullname>
|
||||
|
||||
server = server or self.sid
|
||||
if not self.isInternalServer(server):
|
||||
if not self.is_internal_server(server):
|
||||
raise ValueError('Server %r is not a PyLink server!' % server)
|
||||
|
||||
# Create an UIDGenerator instance for every SID, so that each gets
|
||||
@ -273,7 +273,7 @@ class P10Protocol(IRCS2SProtocol):
|
||||
ts = ts or int(time.time())
|
||||
realname = realname or conf.conf['bot']['realname']
|
||||
realhost = realhost or host
|
||||
raw_modes = self.joinModes(modes)
|
||||
raw_modes = self.join_modes(modes)
|
||||
|
||||
# Initialize an IrcUser instance
|
||||
u = self.users[uid] = IrcUser(nick, ts, uid, server, ident=ident, host=host, realname=realname,
|
||||
@ -281,7 +281,7 @@ class P10Protocol(IRCS2SProtocol):
|
||||
opertype=opertype)
|
||||
|
||||
# Fill in modes and add it to our users index
|
||||
self.applyModes(uid, modes)
|
||||
self.apply_modes(uid, modes)
|
||||
self.servers[server].users.add(uid)
|
||||
|
||||
# Encode IPs when sending
|
||||
@ -301,7 +301,7 @@ class P10Protocol(IRCS2SProtocol):
|
||||
def away(self, source, text):
|
||||
"""Sends an AWAY message from a PyLink client. <text> can be an empty string
|
||||
to unset AWAY status."""
|
||||
if not self.isInternalClient(source):
|
||||
if not self.is_internal_client(source):
|
||||
raise LookupError('No such PyLink client exists.')
|
||||
|
||||
if text:
|
||||
@ -315,7 +315,7 @@ class P10Protocol(IRCS2SProtocol):
|
||||
# Note: we have to send a nick as the target, not a UID.
|
||||
# <- ABAAA I PyLink-devel #services 1460948992
|
||||
|
||||
if not self.isInternalClient(numeric):
|
||||
if not self.is_internal_client(numeric):
|
||||
raise LookupError('No such PyLink client exists.')
|
||||
|
||||
nick = self.users[target].nick
|
||||
@ -325,10 +325,10 @@ class P10Protocol(IRCS2SProtocol):
|
||||
def join(self, client, channel):
|
||||
"""Joins a PyLink client to a channel."""
|
||||
# <- ABAAB J #test3 1460744371
|
||||
channel = self.toLower(channel)
|
||||
channel = self.to_lower(channel)
|
||||
ts = self.channels[channel].ts
|
||||
|
||||
if not self.isInternalClient(client):
|
||||
if not self.is_internal_client(client):
|
||||
raise LookupError('No such PyLink client exists.')
|
||||
|
||||
if not self.channels[channel].users:
|
||||
@ -343,11 +343,11 @@ class P10Protocol(IRCS2SProtocol):
|
||||
def kick(self, numeric, channel, target, reason=None):
|
||||
"""Sends kicks from a PyLink client/server."""
|
||||
|
||||
if (not self.isInternalClient(numeric)) and \
|
||||
(not self.isInternalServer(numeric)):
|
||||
if (not self.is_internal_client(numeric)) and \
|
||||
(not self.is_internal_server(numeric)):
|
||||
raise LookupError('No such PyLink client/server exists.')
|
||||
|
||||
channel = self.toLower(channel)
|
||||
channel = self.to_lower(channel)
|
||||
if not reason:
|
||||
reason = 'No reason given'
|
||||
|
||||
@ -355,8 +355,8 @@ class P10Protocol(IRCS2SProtocol):
|
||||
# HACK: prevent kick bounces by sending our kick through the server if
|
||||
# the sender isn't op.
|
||||
if numeric not in self.servers and (not cobj.isOp(numeric)) and (not cobj.isHalfop(numeric)):
|
||||
reason = '(%s) %s' % (self.getFriendlyName(numeric), reason)
|
||||
numeric = self.getServer(numeric)
|
||||
reason = '(%s) %s' % (self.get_friendly_name(numeric), reason)
|
||||
numeric = self.get_server(numeric)
|
||||
|
||||
self._send_with_prefix(numeric, 'K %s %s :%s' % (channel, target, reason))
|
||||
|
||||
@ -369,8 +369,8 @@ class P10Protocol(IRCS2SProtocol):
|
||||
"""Sends a kill from a PyLink client/server."""
|
||||
# <- ABAAA D AyAAA :nefarious.midnight.vpn!GL (test)
|
||||
|
||||
if (not self.isInternalClient(numeric)) and \
|
||||
(not self.isInternalServer(numeric)):
|
||||
if (not self.is_internal_client(numeric)) and \
|
||||
(not self.is_internal_server(numeric)):
|
||||
raise LookupError('No such PyLink client/server exists.')
|
||||
|
||||
self._send_with_prefix(numeric, 'D %s :Killed (%s)' % (target, reason))
|
||||
@ -381,7 +381,7 @@ class P10Protocol(IRCS2SProtocol):
|
||||
|
||||
def message(self, numeric, target, text):
|
||||
"""Sends a PRIVMSG from a PyLink client."""
|
||||
if not self.isInternalClient(numeric):
|
||||
if not self.is_internal_client(numeric):
|
||||
raise LookupError('No such PyLink client exists.')
|
||||
|
||||
self._send_with_prefix(numeric, 'P %s :%s' % (target, text))
|
||||
@ -391,8 +391,8 @@ class P10Protocol(IRCS2SProtocol):
|
||||
# <- ABAAA M GL -w
|
||||
# <- ABAAA M #test +v ABAAB 1460747615
|
||||
|
||||
if (not self.isInternalClient(numeric)) and \
|
||||
(not self.isInternalServer(numeric)):
|
||||
if (not self.is_internal_client(numeric)) and \
|
||||
(not self.is_internal_server(numeric)):
|
||||
raise LookupError('No such PyLink client/server exists.')
|
||||
|
||||
modes = list(modes)
|
||||
@ -404,13 +404,13 @@ class P10Protocol(IRCS2SProtocol):
|
||||
is_cmode = utils.isChannel(target)
|
||||
if is_cmode:
|
||||
# Channel mode changes have a trailing TS. User mode changes do not.
|
||||
cobj = self.channels[self.toLower(target)]
|
||||
cobj = self.channels[self.to_lower(target)]
|
||||
ts = ts or cobj.ts
|
||||
|
||||
# HACK: prevent mode bounces by sending our mode through the server if
|
||||
# the sender isn't op.
|
||||
if numeric not in self.servers and (not cobj.isOp(numeric)) and (not cobj.isHalfop(numeric)):
|
||||
numeric = self.getServer(numeric)
|
||||
numeric = self.get_server(numeric)
|
||||
|
||||
# Wrap modes: start with max bufsize and subtract the lengths of the source, target,
|
||||
# mode command, and whitespace.
|
||||
@ -422,12 +422,12 @@ class P10Protocol(IRCS2SProtocol):
|
||||
# P10 uses nicks in user MODE targets, NOT UIDs. ~GL
|
||||
real_target = self.users[target].nick
|
||||
|
||||
self.applyModes(target, modes)
|
||||
self.apply_modes(target, modes)
|
||||
|
||||
while modes[:12]:
|
||||
joinedmodes = self.joinModes([m for m in modes[:12]])
|
||||
joinedmodes = self.join_modes([m for m in modes[:12]])
|
||||
if is_cmode:
|
||||
for wrapped_modes in self.wrapModes(modes[:12], bufsize):
|
||||
for wrapped_modes in self.wrap_modes(modes[:12], bufsize):
|
||||
self._send_with_prefix(numeric, 'M %s %s %s' % (real_target, wrapped_modes, ts))
|
||||
else:
|
||||
self._send_with_prefix(numeric, 'M %s %s' % (real_target, joinedmodes))
|
||||
@ -436,7 +436,7 @@ class P10Protocol(IRCS2SProtocol):
|
||||
def nick(self, numeric, newnick):
|
||||
"""Changes the nick of a PyLink client."""
|
||||
# <- ABAAA N GL_ 1460753763
|
||||
if not self.isInternalClient(numeric):
|
||||
if not self.is_internal_client(numeric):
|
||||
raise LookupError('No such PyLink client exists.')
|
||||
|
||||
self._send_with_prefix(numeric, 'N %s %s' % (newnick, int(time.time())))
|
||||
@ -453,17 +453,17 @@ class P10Protocol(IRCS2SProtocol):
|
||||
|
||||
def notice(self, numeric, target, text):
|
||||
"""Sends a NOTICE from a PyLink client or server."""
|
||||
if (not self.isInternalClient(numeric)) and \
|
||||
(not self.isInternalServer(numeric)):
|
||||
if (not self.is_internal_client(numeric)) and \
|
||||
(not self.is_internal_server(numeric)):
|
||||
raise LookupError('No such PyLink client/server exists.')
|
||||
|
||||
self._send_with_prefix(numeric, 'O %s :%s' % (target, text))
|
||||
|
||||
def part(self, client, channel, reason=None):
|
||||
"""Sends a part from a PyLink client."""
|
||||
channel = self.toLower(channel)
|
||||
channel = self.to_lower(channel)
|
||||
|
||||
if not self.isInternalClient(client):
|
||||
if not self.is_internal_client(client):
|
||||
raise LookupError('No such PyLink client exists.')
|
||||
|
||||
msg = "L %s" % channel
|
||||
@ -485,7 +485,7 @@ class P10Protocol(IRCS2SProtocol):
|
||||
|
||||
def quit(self, numeric, reason):
|
||||
"""Quits a PyLink client."""
|
||||
if self.isInternalClient(numeric):
|
||||
if self.is_internal_client(numeric):
|
||||
self._send_with_prefix(numeric, "Q :%s" % reason)
|
||||
self._remove_client(numeric)
|
||||
else:
|
||||
@ -503,7 +503,7 @@ class P10Protocol(IRCS2SProtocol):
|
||||
sjoin(self.sid, '#test', [('o', self.pseudoclient.uid)])
|
||||
"""
|
||||
# <- AB B #test 1460742014 +tnl 10 ABAAB,ABAAA:o :%*!*@other.bad.host ~ *!*@bad.host
|
||||
channel = self.toLower(channel)
|
||||
channel = self.to_lower(channel)
|
||||
server = server or self.sid
|
||||
|
||||
assert users, "sjoin: No users sent?"
|
||||
@ -546,7 +546,7 @@ class P10Protocol(IRCS2SProtocol):
|
||||
|
||||
msgprefix = '{sid} B {channel} {ts} '.format(sid=server, channel=channel, ts=ts)
|
||||
if regularmodes:
|
||||
msgprefix += '%s ' % self.joinModes(regularmodes)
|
||||
msgprefix += '%s ' % self.join_modes(regularmodes)
|
||||
|
||||
last_prefixes = ''
|
||||
for userpair in users:
|
||||
@ -652,7 +652,7 @@ class P10Protocol(IRCS2SProtocol):
|
||||
if name == server.name:
|
||||
raise ValueError('A server named %r already exists!' % name)
|
||||
|
||||
if not self.isInternalServer(uplink):
|
||||
if not self.is_internal_server(uplink):
|
||||
raise ValueError('Server %r is not a PyLink server!' % uplink)
|
||||
if not utils.isServerName(name):
|
||||
raise ValueError('Invalid server name %r' % name)
|
||||
@ -677,10 +677,10 @@ class P10Protocol(IRCS2SProtocol):
|
||||
# <- ABAAA T #test GL!~gl@nefarious.midnight.vpn 1460852591 1460855795 :blah
|
||||
# First timestamp is channel creation time, second is current time,
|
||||
|
||||
if not self.isInternalClient(numeric):
|
||||
if not self.is_internal_client(numeric):
|
||||
raise LookupError('No such PyLink client exists.')
|
||||
|
||||
sendername = self.getHostmask(numeric)
|
||||
sendername = self.get_hostmask(numeric)
|
||||
|
||||
creationts = self.channels[target].ts
|
||||
|
||||
@ -693,7 +693,7 @@ class P10Protocol(IRCS2SProtocol):
|
||||
"""Sends a TOPIC change from a PyLink server."""
|
||||
# <- AB T #test GL!~gl@nefarious.midnight.vpn 1460852591 1460855795 :blah
|
||||
|
||||
if not self.isInternalServer(numeric):
|
||||
if not self.is_internal_server(numeric):
|
||||
raise LookupError('No such PyLink server exists.')
|
||||
|
||||
sendername = self.servers[numeric].name
|
||||
@ -711,7 +711,7 @@ class P10Protocol(IRCS2SProtocol):
|
||||
|
||||
ircd = self.serverdata.get('p10_ircd', 'nefarious').lower()
|
||||
|
||||
if self.isInternalClient(target):
|
||||
if self.is_internal_client(target):
|
||||
# Host changing via SETHOST is only supported on nefarious and snircd.
|
||||
if ircd not in ('nefarious', 'snircd'):
|
||||
raise NotImplementedError("Host changing for internal clients (via SETHOST) is only "
|
||||
@ -741,7 +741,7 @@ class P10Protocol(IRCS2SProtocol):
|
||||
|
||||
# Save the host change as a user mode (this is what P10 does on bursts),
|
||||
# so further host checks work.
|
||||
self.applyModes(target, [('+f', text)])
|
||||
self.apply_modes(target, [('+f', text)])
|
||||
self.mode(self.sid, target, [('+x', None)])
|
||||
else:
|
||||
raise NotImplementedError("Changing field %r of a client is "
|
||||
@ -865,18 +865,18 @@ class P10Protocol(IRCS2SProtocol):
|
||||
# parameters attached.
|
||||
if args[5].startswith('+'):
|
||||
modes = args[5:-3]
|
||||
parsedmodes = self.parseModes(uid, modes)
|
||||
self.applyModes(uid, parsedmodes)
|
||||
parsedmodes = self.parse_modes(uid, modes)
|
||||
self.apply_modes(uid, parsedmodes)
|
||||
|
||||
for modepair in parsedmodes:
|
||||
if modepair[0][-1] == 'r':
|
||||
# Parse account registrations, sent as usermode "+r accountname:TS"
|
||||
accountname = modepair[1].split(':', 1)[0]
|
||||
self.callHooks([uid, 'CLIENT_SERVICES_LOGIN', {'text': accountname}])
|
||||
self.call_hooks([uid, 'CLIENT_SERVICES_LOGIN', {'text': accountname}])
|
||||
|
||||
# Call the OPERED UP hook if +o is being added to the mode list.
|
||||
if ('+o', None) in parsedmodes:
|
||||
self.callHooks([uid, 'CLIENT_OPERED', {'text': 'IRC Operator'}])
|
||||
self.call_hooks([uid, 'CLIENT_OPERED', {'text': 'IRC Operator'}])
|
||||
|
||||
self._check_cloak_change(uid)
|
||||
|
||||
@ -947,9 +947,9 @@ class P10Protocol(IRCS2SProtocol):
|
||||
|
||||
# Propagate a hostname update to plugins, but only if the changed host is different.
|
||||
if newhost != uobj.host:
|
||||
self.callHooks([uid, 'CHGHOST', {'target': uid, 'newhost': newhost}])
|
||||
self.call_hooks([uid, 'CHGHOST', {'target': uid, 'newhost': newhost}])
|
||||
if ident != uobj.ident:
|
||||
self.callHooks([uid, 'CHGIDENT', {'target': uid, 'newident': ident}])
|
||||
self.call_hooks([uid, 'CHGIDENT', {'target': uid, 'newident': ident}])
|
||||
uobj.host = newhost
|
||||
uobj.ident = ident
|
||||
|
||||
@ -972,7 +972,7 @@ class P10Protocol(IRCS2SProtocol):
|
||||
currtime = time.time()
|
||||
timediff = int(time.time() - float(orig_pingtime))
|
||||
|
||||
if self.isInternalServer(sid):
|
||||
if self.is_internal_server(sid):
|
||||
# Only respond if the target server is ours. No forwarding is needed because
|
||||
# no IRCds can ever connect behind us...
|
||||
self._send_with_prefix(self.sid, 'Z %s %s %s %s' % (target, orig_pingtime, timediff, currtime), queue=False)
|
||||
@ -1002,7 +1002,7 @@ class P10Protocol(IRCS2SProtocol):
|
||||
# No useful data was sent, ignore.
|
||||
return
|
||||
|
||||
channel = self.toLower(args[0])
|
||||
channel = self.to_lower(args[0])
|
||||
chandata = self.channels[channel].deepcopy()
|
||||
|
||||
bans = []
|
||||
@ -1030,7 +1030,7 @@ class P10Protocol(IRCS2SProtocol):
|
||||
# If no modes are given, this will simply be empty.
|
||||
modestring = args[2:-1]
|
||||
if modestring:
|
||||
parsedmodes = self.parseModes(channel, modestring)
|
||||
parsedmodes = self.parse_modes(channel, modestring)
|
||||
else:
|
||||
parsedmodes = []
|
||||
|
||||
@ -1100,7 +1100,7 @@ class P10Protocol(IRCS2SProtocol):
|
||||
|
||||
return {'channels': oldchans, 'text': 'Left all channels.', 'parse_as': 'PART'}
|
||||
else:
|
||||
channel = self.toLower(args[0])
|
||||
channel = self.to_lower(args[0])
|
||||
if ts: # Only update TS if one was sent.
|
||||
self.updateTS(source, channel, ts)
|
||||
|
||||
@ -1126,15 +1126,15 @@ class P10Protocol(IRCS2SProtocol):
|
||||
# <- ABAAA OM #test +h ABAAA
|
||||
target = self._get_UID(args[0])
|
||||
if utils.isChannel(target):
|
||||
target = self.toLower(target)
|
||||
target = self.to_lower(target)
|
||||
|
||||
modestrings = args[1:]
|
||||
changedmodes = self.parseModes(target, modestrings)
|
||||
self.applyModes(target, changedmodes)
|
||||
changedmodes = self.parse_modes(target, modestrings)
|
||||
self.apply_modes(target, changedmodes)
|
||||
|
||||
# Call the CLIENT_OPERED hook if +o is being set.
|
||||
if ('+o', None) in changedmodes and target in self.users:
|
||||
self.callHooks([target, 'CLIENT_OPERED', {'text': 'IRC Operator'}])
|
||||
self.call_hooks([target, 'CLIENT_OPERED', {'text': 'IRC Operator'}])
|
||||
|
||||
if target in self.users:
|
||||
# Target was a user. Check for any cloak changes.
|
||||
@ -1147,7 +1147,7 @@ class P10Protocol(IRCS2SProtocol):
|
||||
def handle_kick(self, source, command, args):
|
||||
"""Handles incoming KICKs."""
|
||||
# <- ABAAA K #TEST AyAAA :PyLink-devel
|
||||
channel = self.toLower(args[0])
|
||||
channel = self.to_lower(args[0])
|
||||
kicked = args[1]
|
||||
|
||||
self.handle_part(kicked, 'KICK', [channel, args[2]])
|
||||
@ -1161,7 +1161,7 @@ class P10Protocol(IRCS2SProtocol):
|
||||
def handle_topic(self, source, command, args):
|
||||
"""Handles TOPIC changes."""
|
||||
# <- ABAAA T #test GL!~gl@nefarious.midnight.vpn 1460852591 1460855795 :blah
|
||||
channel = self.toLower(args[0])
|
||||
channel = self.to_lower(args[0])
|
||||
topic = args[-1]
|
||||
|
||||
oldtopic = self.channels[channel].topic
|
||||
@ -1174,7 +1174,7 @@ class P10Protocol(IRCS2SProtocol):
|
||||
def handle_clearmode(self, numeric, command, args):
|
||||
"""Handles CLEARMODE, which is used to clear a channel's modes."""
|
||||
# <- ABAAA CM #test ovpsmikbl
|
||||
channel = self.toLower(args[0])
|
||||
channel = self.to_lower(args[0])
|
||||
modes = args[1]
|
||||
|
||||
# Enumerate a list of our existing modes, including prefix modes.
|
||||
@ -1202,7 +1202,7 @@ class P10Protocol(IRCS2SProtocol):
|
||||
# Mode does not take an argument when unsetting.
|
||||
changedmodes.append(('-%s' % modechar, None))
|
||||
|
||||
self.applyModes(channel, changedmodes)
|
||||
self.apply_modes(channel, changedmodes)
|
||||
return {'target': channel, 'modes': changedmodes, 'channeldata': oldobj}
|
||||
|
||||
def handle_account(self, numeric, command, args):
|
||||
@ -1236,7 +1236,7 @@ class P10Protocol(IRCS2SProtocol):
|
||||
accountname = args[1]
|
||||
|
||||
# Call this manually because we need the UID to be the sender.
|
||||
self.callHooks([target, 'CLIENT_SERVICES_LOGIN', {'text': accountname}])
|
||||
self.call_hooks([target, 'CLIENT_SERVICES_LOGIN', {'text': accountname}])
|
||||
|
||||
# Check for any cloak changes now.
|
||||
self._check_cloak_change(target)
|
||||
@ -1247,7 +1247,7 @@ class P10Protocol(IRCS2SProtocol):
|
||||
text = args[1]
|
||||
|
||||
# Assume a usermode +f change, and then update the cloak checking.
|
||||
self.applyModes(target, [('+f', text)])
|
||||
self.apply_modes(target, [('+f', text)])
|
||||
|
||||
self._check_cloak_change(target)
|
||||
# We don't need to send any hooks here, _check_cloak_change does that for us.
|
||||
|
@ -54,21 +54,21 @@ class RatboxProtocol(TS6Protocol):
|
||||
# UID, gecos
|
||||
|
||||
server = server or self.sid
|
||||
if not self.isInternalServer(server):
|
||||
if not self.is_internal_server(server):
|
||||
raise ValueError('Server %r is not a PyLink server!' % server)
|
||||
|
||||
uid = self.uidgen[server].next_uid()
|
||||
|
||||
ts = ts or int(time.time())
|
||||
realname = realname or conf.conf['bot']['realname']
|
||||
raw_modes = self.joinModes(modes)
|
||||
raw_modes = self.join_modes(modes)
|
||||
|
||||
orig_realhost = realhost
|
||||
realhost = realhost or host
|
||||
|
||||
u = self.users[uid] = IrcUser(nick, ts, uid, server, ident=ident, host=host, realname=realname,
|
||||
realhost=realhost, ip=ip, manipulatable=manipulatable)
|
||||
self.applyModes(uid, modes)
|
||||
self.apply_modes(uid, modes)
|
||||
self.servers[server].users.add(uid)
|
||||
|
||||
self._send_with_prefix(server, "UID {nick} 1 {ts} {modes} {ident} {host} {ip} {uid} "
|
||||
|
@ -38,7 +38,7 @@ class TS6Protocol(TS6BaseProtocol):
|
||||
"""
|
||||
server = server or self.sid
|
||||
|
||||
if not self.isInternalServer(server):
|
||||
if not self.is_internal_server(server):
|
||||
raise ValueError('Server %r is not a PyLink server!' % server)
|
||||
|
||||
uid = self.uidgen[server].next_uid()
|
||||
@ -49,11 +49,11 @@ class TS6Protocol(TS6BaseProtocol):
|
||||
ts = ts or int(time.time())
|
||||
realname = realname or conf.conf['bot']['realname']
|
||||
realhost = realhost or host
|
||||
raw_modes = self.joinModes(modes)
|
||||
raw_modes = self.join_modes(modes)
|
||||
u = self.users[uid] = IrcUser(nick, ts, uid, server, ident=ident, host=host, realname=realname,
|
||||
realhost=realhost, ip=ip, manipulatable=manipulatable, opertype=opertype)
|
||||
|
||||
self.applyModes(uid, modes)
|
||||
self.apply_modes(uid, modes)
|
||||
self.servers[server].users.add(uid)
|
||||
|
||||
self._send_with_prefix(server, "EUID {nick} 1 {ts} {modes} {ident} {host} {ip} {uid} "
|
||||
@ -66,10 +66,10 @@ class TS6Protocol(TS6BaseProtocol):
|
||||
|
||||
def join(self, client, channel):
|
||||
"""Joins a PyLink client to a channel."""
|
||||
channel = self.toLower(channel)
|
||||
channel = self.to_lower(channel)
|
||||
# JOIN:
|
||||
# parameters: channelTS, channel, '+' (a plus sign)
|
||||
if not self.isInternalClient(client):
|
||||
if not self.is_internal_client(client):
|
||||
log.error('(%s) Error trying to join %r to %r (no such client exists)', self.name, client, channel)
|
||||
raise LookupError('No such PyLink client exists.')
|
||||
self._send_with_prefix(client, "JOIN {ts} {channel} +".format(ts=self.channels[channel].ts, channel=channel))
|
||||
@ -96,7 +96,7 @@ class TS6Protocol(TS6BaseProtocol):
|
||||
# their status ('@+', '@', '+' or ''), for example:
|
||||
# '@+1JJAAAAAB +2JJAAAA4C 1JJAAAADS'. All users must be behind the source server
|
||||
# so it is not possible to use this message to force users to join a channel.
|
||||
channel = self.toLower(channel)
|
||||
channel = self.to_lower(channel)
|
||||
server = server or self.sid
|
||||
assert users, "sjoin: No users sent?"
|
||||
log.debug('(%s) sjoin: got %r for users', self.name, users)
|
||||
@ -149,7 +149,7 @@ class TS6Protocol(TS6BaseProtocol):
|
||||
namelist = ' '.join(namelist)
|
||||
self._send_with_prefix(server, "SJOIN {ts} {channel} {modes} :{users}".format(
|
||||
ts=ts, users=namelist, channel=channel,
|
||||
modes=self.joinModes(regularmodes)))
|
||||
modes=self.join_modes(regularmodes)))
|
||||
self.channels[channel].users.update(uids)
|
||||
|
||||
# Now, burst bans.
|
||||
@ -172,15 +172,15 @@ class TS6Protocol(TS6BaseProtocol):
|
||||
# c <- :0UYAAAAAA TMODE 0 #a +o 0T4AAAAAC
|
||||
# u <- :0UYAAAAAA MODE 0UYAAAAAA :-Facdefklnou
|
||||
|
||||
if (not self.isInternalClient(numeric)) and \
|
||||
(not self.isInternalServer(numeric)):
|
||||
if (not self.is_internal_client(numeric)) and \
|
||||
(not self.is_internal_server(numeric)):
|
||||
raise LookupError('No such PyLink client/server exists.')
|
||||
|
||||
self.applyModes(target, modes)
|
||||
self.apply_modes(target, modes)
|
||||
modes = list(modes)
|
||||
|
||||
if utils.isChannel(target):
|
||||
ts = ts or self.channels[self.toLower(target)].ts
|
||||
ts = ts or self.channels[self.to_lower(target)].ts
|
||||
# TMODE:
|
||||
# parameters: channelTS, channel, cmode changes, opt. cmode parameters...
|
||||
|
||||
@ -189,15 +189,15 @@ class TS6Protocol(TS6BaseProtocol):
|
||||
msgprefix = ':%s TMODE %s %s ' % (numeric, ts, target)
|
||||
bufsize = S2S_BUFSIZE - len(msgprefix)
|
||||
|
||||
for modestr in self.wrapModes(modes, bufsize, max_modes_per_msg=10):
|
||||
for modestr in self.wrap_modes(modes, bufsize, max_modes_per_msg=10):
|
||||
self.send(msgprefix + modestr)
|
||||
else:
|
||||
joinedmodes = self.joinModes(modes)
|
||||
joinedmodes = self.join_modes(modes)
|
||||
self._send_with_prefix(numeric, 'MODE %s %s' % (target, joinedmodes))
|
||||
|
||||
def topicBurst(self, numeric, target, text):
|
||||
"""Sends a topic change from a PyLink server. This is usually used on burst."""
|
||||
if not self.isInternalServer(numeric):
|
||||
if not self.is_internal_server(numeric):
|
||||
raise LookupError('No such PyLink server exists.')
|
||||
# TB
|
||||
# capab: TB
|
||||
@ -212,7 +212,7 @@ class TS6Protocol(TS6BaseProtocol):
|
||||
|
||||
def invite(self, numeric, target, channel):
|
||||
"""Sends an INVITE from a PyLink client.."""
|
||||
if not self.isInternalClient(numeric):
|
||||
if not self.is_internal_client(numeric):
|
||||
raise LookupError('No such PyLink client exists.')
|
||||
self._send_with_prefix(numeric, 'INVITE %s %s %s' % (target, channel, self.channels[channel].ts))
|
||||
|
||||
@ -222,7 +222,7 @@ class TS6Protocol(TS6BaseProtocol):
|
||||
log.debug('(%s) knock: Dropping KNOCK to %r since the IRCd '
|
||||
'doesn\'t support it.', self.name, target)
|
||||
return
|
||||
if not self.isInternalClient(numeric):
|
||||
if not self.is_internal_client(numeric):
|
||||
raise LookupError('No such PyLink client exists.')
|
||||
# No text value is supported here; drop it.
|
||||
self._send_with_prefix(numeric, 'KNOCK %s' % target)
|
||||
@ -233,10 +233,10 @@ class TS6Protocol(TS6BaseProtocol):
|
||||
if field == 'HOST':
|
||||
self.users[target].host = text
|
||||
self._send_with_prefix(self.sid, 'CHGHOST %s :%s' % (target, text))
|
||||
if not self.isInternalClient(target):
|
||||
if not self.is_internal_client(target):
|
||||
# If the target isn't one of our clients, send hook payload
|
||||
# for other plugins to listen to.
|
||||
self.callHooks([self.sid, 'CHGHOST',
|
||||
self.call_hooks([self.sid, 'CHGHOST',
|
||||
{'target': target, 'newhost': text}])
|
||||
else:
|
||||
raise NotImplementedError("Changing field %r of a client is "
|
||||
@ -406,7 +406,7 @@ class TS6Protocol(TS6BaseProtocol):
|
||||
destination = args[1]
|
||||
except IndexError:
|
||||
destination = self.sid
|
||||
if self.isInternalServer(destination):
|
||||
if self.is_internal_server(destination):
|
||||
self._send_with_prefix(destination, 'PONG %s %s' % (destination, source), queue=False)
|
||||
|
||||
if destination == self.sid and not self.has_eob:
|
||||
@ -421,12 +421,12 @@ class TS6Protocol(TS6BaseProtocol):
|
||||
"""Handles incoming SJOIN commands."""
|
||||
# parameters: channelTS, channel, simple modes, opt. mode parameters..., nicklist
|
||||
# <- :0UY SJOIN 1451041566 #channel +nt :@0UYAAAAAB
|
||||
channel = self.toLower(args[1])
|
||||
channel = self.to_lower(args[1])
|
||||
chandata = self.channels[channel].deepcopy()
|
||||
userlist = args[-1].split()
|
||||
|
||||
modestring = args[2:-1] or args[2]
|
||||
parsedmodes = self.parseModes(channel, modestring)
|
||||
parsedmodes = self.parse_modes(channel, modestring)
|
||||
namelist = []
|
||||
|
||||
# Keep track of other modes that are added due to prefix modes being joined too.
|
||||
@ -484,7 +484,7 @@ class TS6Protocol(TS6BaseProtocol):
|
||||
self.users[numeric].channels.discard(channel)
|
||||
return {'channels': oldchans, 'text': 'Left all channels.', 'parse_as': 'PART'}
|
||||
else:
|
||||
channel = self.toLower(args[1])
|
||||
channel = self.to_lower(args[1])
|
||||
self.updateTS(numeric, channel, ts)
|
||||
|
||||
self.users[numeric].channels.add(channel)
|
||||
@ -514,19 +514,19 @@ class TS6Protocol(TS6BaseProtocol):
|
||||
|
||||
self.users[uid] = IrcUser(nick, ts, uid, numeric, ident, host, realname, realhost, ip)
|
||||
|
||||
parsedmodes = self.parseModes(uid, [modes])
|
||||
parsedmodes = self.parse_modes(uid, [modes])
|
||||
log.debug('Applying modes %s for %s', parsedmodes, uid)
|
||||
self.applyModes(uid, parsedmodes)
|
||||
self.apply_modes(uid, parsedmodes)
|
||||
self.servers[numeric].users.add(uid)
|
||||
|
||||
# Call the OPERED UP hook if +o is being added to the mode list.
|
||||
if ('+o', None) in parsedmodes:
|
||||
otype = 'Server Administrator' if ('+a', None) in parsedmodes else 'IRC Operator'
|
||||
self.callHooks([uid, 'CLIENT_OPERED', {'text': otype}])
|
||||
self.call_hooks([uid, 'CLIENT_OPERED', {'text': otype}])
|
||||
|
||||
# Set the accountname if present
|
||||
if accountname != "*":
|
||||
self.callHooks([uid, 'CLIENT_SERVICES_LOGIN', {'text': accountname}])
|
||||
self.call_hooks([uid, 'CLIENT_SERVICES_LOGIN', {'text': accountname}])
|
||||
|
||||
return {'uid': uid, 'ts': ts, 'nick': nick, 'realhost': realhost, 'host': host, 'ident': ident, 'ip': ip}
|
||||
|
||||
@ -587,11 +587,11 @@ class TS6Protocol(TS6BaseProtocol):
|
||||
"""Handles incoming TMODE commands (channel mode change)."""
|
||||
# <- :42XAAAAAB TMODE 1437450768 #test -c+lkC 3 agte4
|
||||
# <- :0UYAAAAAD TMODE 0 #a +h 0UYAAAAAD
|
||||
channel = self.toLower(args[1])
|
||||
channel = self.to_lower(args[1])
|
||||
oldobj = self.channels[channel].deepcopy()
|
||||
modes = args[2:]
|
||||
changedmodes = self.parseModes(channel, modes)
|
||||
self.applyModes(channel, changedmodes)
|
||||
changedmodes = self.parse_modes(channel, modes)
|
||||
self.apply_modes(channel, changedmodes)
|
||||
ts = int(args[0])
|
||||
return {'target': channel, 'modes': changedmodes, 'ts': ts,
|
||||
'channeldata': oldobj}
|
||||
@ -601,18 +601,18 @@ class TS6Protocol(TS6BaseProtocol):
|
||||
# <- :70MAAAAAA MODE 70MAAAAAA -i+xc
|
||||
target = args[0]
|
||||
modestrings = args[1:]
|
||||
changedmodes = self.parseModes(target, modestrings)
|
||||
self.applyModes(target, changedmodes)
|
||||
changedmodes = self.parse_modes(target, modestrings)
|
||||
self.apply_modes(target, changedmodes)
|
||||
# Call the OPERED UP hook if +o is being set.
|
||||
if ('+o', None) in changedmodes:
|
||||
otype = 'Server Administrator' if ('a', None) in self.users[target].modes else 'IRC Operator'
|
||||
self.callHooks([target, 'CLIENT_OPERED', {'text': otype}])
|
||||
self.call_hooks([target, 'CLIENT_OPERED', {'text': otype}])
|
||||
return {'target': target, 'modes': changedmodes}
|
||||
|
||||
def handle_tb(self, numeric, command, args):
|
||||
"""Handles incoming topic burst (TB) commands."""
|
||||
# <- :42X TB #chat 1467427448 GL!~gl@127.0.0.1 :test
|
||||
channel = self.toLower(args[0])
|
||||
channel = self.to_lower(args[0])
|
||||
ts = args[1]
|
||||
setter = args[2]
|
||||
topic = args[-1]
|
||||
@ -624,7 +624,7 @@ class TS6Protocol(TS6BaseProtocol):
|
||||
"""Handles extended topic burst (ETB)."""
|
||||
# <- :00AAAAAAC ETB 0 #test 1470021157 GL :test | abcd
|
||||
# Same as TB, with extra TS and extensions arguments.
|
||||
channel = self.toLower(args[1])
|
||||
channel = self.to_lower(args[1])
|
||||
ts = args[2]
|
||||
setter = args[3]
|
||||
topic = args[-1]
|
||||
@ -642,13 +642,13 @@ class TS6Protocol(TS6BaseProtocol):
|
||||
"""Handles incoming BMASK commands (ban propagation on burst)."""
|
||||
# <- :42X BMASK 1424222769 #dev b :*!test@*.isp.net *!badident@*
|
||||
# This is used for propagating bans, not TMODE!
|
||||
channel = self.toLower(args[1])
|
||||
channel = self.to_lower(args[1])
|
||||
mode = args[2]
|
||||
ts = int(args[0])
|
||||
modes = []
|
||||
for ban in args[-1].split():
|
||||
modes.append(('+%s' % mode, ban))
|
||||
self.applyModes(channel, modes)
|
||||
self.apply_modes(channel, modes)
|
||||
return {'target': channel, 'modes': modes, 'ts': ts}
|
||||
|
||||
def handle_472(self, numeric, command, args):
|
||||
@ -684,7 +684,7 @@ class TS6Protocol(TS6BaseProtocol):
|
||||
account = '' # No account name means a logout
|
||||
|
||||
uid = args[0]
|
||||
self.callHooks([uid, 'CLIENT_SERVICES_LOGIN', {'text': account}])
|
||||
self.call_hooks([uid, 'CLIENT_SERVICES_LOGIN', {'text': account}])
|
||||
|
||||
def handle_rsfnc(self, numeric, command, args):
|
||||
"""
|
||||
|
@ -134,11 +134,11 @@ class TS6BaseProtocol(IRCS2SProtocol):
|
||||
def kick(self, numeric, channel, target, reason=None):
|
||||
"""Sends kicks from a PyLink client/server."""
|
||||
|
||||
if (not self.isInternalClient(numeric)) and \
|
||||
(not self.isInternalServer(numeric)):
|
||||
if (not self.is_internal_client(numeric)) and \
|
||||
(not self.is_internal_server(numeric)):
|
||||
raise LookupError('No such PyLink client/server exists.')
|
||||
|
||||
channel = self.toLower(channel)
|
||||
channel = self.to_lower(channel)
|
||||
if not reason:
|
||||
reason = 'No reason given'
|
||||
|
||||
@ -155,8 +155,8 @@ class TS6BaseProtocol(IRCS2SProtocol):
|
||||
def kill(self, numeric, target, reason):
|
||||
"""Sends a kill from a PyLink client/server."""
|
||||
|
||||
if (not self.isInternalClient(numeric)) and \
|
||||
(not self.isInternalServer(numeric)):
|
||||
if (not self.is_internal_client(numeric)) and \
|
||||
(not self.is_internal_server(numeric)):
|
||||
raise LookupError('No such PyLink client/server exists.')
|
||||
|
||||
# From TS6 docs:
|
||||
@ -187,7 +187,7 @@ class TS6BaseProtocol(IRCS2SProtocol):
|
||||
|
||||
def nick(self, numeric, newnick):
|
||||
"""Changes the nick of a PyLink client."""
|
||||
if not self.isInternalClient(numeric):
|
||||
if not self.is_internal_client(numeric):
|
||||
raise LookupError('No such PyLink client exists.')
|
||||
|
||||
self._send_with_prefix(numeric, 'NICK %s %s' % (newnick, int(time.time())))
|
||||
@ -199,8 +199,8 @@ class TS6BaseProtocol(IRCS2SProtocol):
|
||||
|
||||
def part(self, client, channel, reason=None):
|
||||
"""Sends a part from a PyLink client."""
|
||||
channel = self.toLower(channel)
|
||||
if not self.isInternalClient(client):
|
||||
channel = self.to_lower(channel)
|
||||
if not self.is_internal_client(client):
|
||||
log.error('(%s) Error trying to part %r from %r (no such client exists)', self.name, client, channel)
|
||||
raise LookupError('No such PyLink client exists.')
|
||||
msg = "PART %s" % channel
|
||||
@ -211,7 +211,7 @@ class TS6BaseProtocol(IRCS2SProtocol):
|
||||
|
||||
def quit(self, numeric, reason):
|
||||
"""Quits a PyLink client."""
|
||||
if self.isInternalClient(numeric):
|
||||
if self.is_internal_client(numeric):
|
||||
self._send_with_prefix(numeric, "QUIT :%s" % reason)
|
||||
self._remove_client(numeric)
|
||||
else:
|
||||
@ -219,7 +219,7 @@ class TS6BaseProtocol(IRCS2SProtocol):
|
||||
|
||||
def message(self, numeric, target, text):
|
||||
"""Sends a PRIVMSG from a PyLink client."""
|
||||
if not self.isInternalClient(numeric):
|
||||
if not self.is_internal_client(numeric):
|
||||
raise LookupError('No such PyLink client exists.')
|
||||
|
||||
# Mangle message targets for IRCds that require it.
|
||||
@ -229,8 +229,8 @@ class TS6BaseProtocol(IRCS2SProtocol):
|
||||
|
||||
def notice(self, numeric, target, text):
|
||||
"""Sends a NOTICE from a PyLink client or server."""
|
||||
if (not self.isInternalClient(numeric)) and \
|
||||
(not self.isInternalServer(numeric)):
|
||||
if (not self.is_internal_client(numeric)) and \
|
||||
(not self.is_internal_server(numeric)):
|
||||
raise LookupError('No such PyLink client/server exists.')
|
||||
|
||||
# Mangle message targets for IRCds that require it.
|
||||
@ -240,7 +240,7 @@ class TS6BaseProtocol(IRCS2SProtocol):
|
||||
|
||||
def topic(self, numeric, target, text):
|
||||
"""Sends a TOPIC change from a PyLink client."""
|
||||
if not self.isInternalClient(numeric):
|
||||
if not self.is_internal_client(numeric):
|
||||
raise LookupError('No such PyLink client exists.')
|
||||
self._send_with_prefix(numeric, 'TOPIC %s :%s' % (target, text))
|
||||
self.channels[target].topic = text
|
||||
@ -268,7 +268,7 @@ class TS6BaseProtocol(IRCS2SProtocol):
|
||||
for server in self.servers.values():
|
||||
if name == server.name:
|
||||
raise ValueError('A server named %r already exists!' % name)
|
||||
if not self.isInternalServer(uplink):
|
||||
if not self.is_internal_server(uplink):
|
||||
raise ValueError('Server %r is not a PyLink server!' % uplink)
|
||||
if not utils.isServerName(name):
|
||||
raise ValueError('Invalid server name %r' % name)
|
||||
@ -296,7 +296,7 @@ class TS6BaseProtocol(IRCS2SProtocol):
|
||||
def handle_kick(self, source, command, args):
|
||||
"""Handles incoming KICKs."""
|
||||
# :70MAAAAAA KICK #test 70MAAAAAA :some reason
|
||||
channel = self.toLower(args[0])
|
||||
channel = self.to_lower(args[0])
|
||||
kicked = self._get_UID(args[1])
|
||||
|
||||
try:
|
||||
@ -343,7 +343,7 @@ class TS6BaseProtocol(IRCS2SProtocol):
|
||||
"""Handles incoming TOPIC changes from clients. For topic bursts,
|
||||
TB (TS6/charybdis) and FTOPIC (InspIRCd) are used instead."""
|
||||
# <- :70MAAAAAA TOPIC #test :test
|
||||
channel = self.toLower(args[0])
|
||||
channel = self.to_lower(args[0])
|
||||
topic = args[1]
|
||||
|
||||
oldtopic = self.channels[channel].topic
|
||||
|
@ -66,7 +66,7 @@ class UnrealProtocol(TS6BaseProtocol):
|
||||
up to plugins to make sure they don't introduce anything invalid.
|
||||
"""
|
||||
server = server or self.sid
|
||||
if not self.isInternalServer(server):
|
||||
if not self.is_internal_server(server):
|
||||
raise ValueError('Server %r is not a PyLink server!' % server)
|
||||
|
||||
# Unreal 4.0 uses TS6-style UIDs. They don't start from AAAAAA like other IRCd's
|
||||
@ -81,10 +81,10 @@ class UnrealProtocol(TS6BaseProtocol):
|
||||
modes = set(modes) # Ensure type safety
|
||||
modes |= {('+x', None), ('+t', None)}
|
||||
|
||||
raw_modes = self.joinModes(modes)
|
||||
raw_modes = self.join_modes(modes)
|
||||
u = self.users[uid] = IrcUser(nick, ts, uid, server, ident=ident, host=host, realname=realname,
|
||||
realhost=realhost, ip=ip, manipulatable=manipulatable, opertype=opertype)
|
||||
self.applyModes(uid, modes)
|
||||
self.apply_modes(uid, modes)
|
||||
self.servers[server].users.add(uid)
|
||||
|
||||
# UnrealIRCd requires encoding the IP by first packing it into a binary format,
|
||||
@ -116,8 +116,8 @@ class UnrealProtocol(TS6BaseProtocol):
|
||||
|
||||
def join(self, client, channel):
|
||||
"""Joins a PyLink client to a channel."""
|
||||
channel = self.toLower(channel)
|
||||
if not self.isInternalClient(client):
|
||||
channel = self.to_lower(channel)
|
||||
if not self.is_internal_client(client):
|
||||
raise LookupError('No such PyLink client exists.')
|
||||
self._send_with_prefix(client, "JOIN %s" % channel)
|
||||
self.channels[channel].users.add(client)
|
||||
@ -135,7 +135,7 @@ class UnrealProtocol(TS6BaseProtocol):
|
||||
sjoin(self.sid, '#test', [('o', self.pseudoclient.uid)])
|
||||
"""
|
||||
# <- :001 SJOIN 1444361345 #test :*@+1JJAAAAAB %2JJAAAA4C 1JJAAAADS
|
||||
channel = self.toLower(channel)
|
||||
channel = self.to_lower(channel)
|
||||
server = server or self.sid
|
||||
assert users, "sjoin: No users sent?"
|
||||
if not server:
|
||||
@ -189,7 +189,7 @@ class UnrealProtocol(TS6BaseProtocol):
|
||||
|
||||
# Modes are optional; add them if they exist
|
||||
if modes:
|
||||
sjoin_prefix += " %s" % self.joinModes(simplemodes)
|
||||
sjoin_prefix += " %s" % self.join_modes(simplemodes)
|
||||
|
||||
sjoin_prefix += " :"
|
||||
# Wrap arguments to the max supported S2S line length to prevent cutoff
|
||||
@ -212,15 +212,15 @@ class UnrealProtocol(TS6BaseProtocol):
|
||||
def mode(self, numeric, target, modes, ts=None):
|
||||
"""
|
||||
Sends mode changes from a PyLink client/server. The mode list should be
|
||||
a list of (mode, arg) tuples, i.e. the format of utils.parseModes() output.
|
||||
a list of (mode, arg) tuples, i.e. the format of utils.parse_modes() output.
|
||||
"""
|
||||
# <- :unreal.midnight.vpn MODE #test +ntCo GL 1444361345
|
||||
|
||||
if (not self.isInternalClient(numeric)) and \
|
||||
(not self.isInternalServer(numeric)):
|
||||
if (not self.is_internal_client(numeric)) and \
|
||||
(not self.is_internal_server(numeric)):
|
||||
raise LookupError('No such PyLink client/server exists.')
|
||||
|
||||
self.applyModes(target, modes)
|
||||
self.apply_modes(target, modes)
|
||||
|
||||
if utils.isChannel(target):
|
||||
|
||||
@ -231,7 +231,7 @@ class UnrealProtocol(TS6BaseProtocol):
|
||||
modes[idx] = (mode[0], self._expandPUID(mode[1]))
|
||||
|
||||
# The MODE command is used for channel mode changes only
|
||||
ts = ts or self.channels[self.toLower(target)].ts
|
||||
ts = ts or self.channels[self.to_lower(target)].ts
|
||||
|
||||
# 7 characters for "MODE", the space between MODE and the target, the space between the
|
||||
# target and mode list, and the space between the mode list and TS.
|
||||
@ -242,7 +242,7 @@ class UnrealProtocol(TS6BaseProtocol):
|
||||
bufsize -= len(target)
|
||||
|
||||
# Subtract the prefix (":SID " for servers or ":SIDAAAAAA " for servers)
|
||||
bufsize -= (5 if self.isInternalServer(numeric) else 11)
|
||||
bufsize -= (5 if self.is_internal_server(numeric) else 11)
|
||||
|
||||
# There is also an (undocumented) 15 args per line limit for MODE. The target, mode
|
||||
# characters, and TS take up three args, so we're left with 12 spaces for parameters.
|
||||
@ -251,24 +251,24 @@ class UnrealProtocol(TS6BaseProtocol):
|
||||
# * *** Warning! Possible desynch: MODE for channel #test ('+bbbbbbbbbbbb *!*@0.1 *!*@1.1 *!*@2.1 *!*@3.1 *!*@4.1 *!*@5.1 *!*@6.1 *!*@7.1 *!*@8.1 *!*@9.1 *!*@10.1 *!*@11.1') has fishy timestamp (12) (from pylink.local/pylink.local)
|
||||
|
||||
# Thanks to kevin and Jobe for helping me debug this!
|
||||
for modestring in self.wrapModes(modes, bufsize, max_modes_per_msg=12):
|
||||
for modestring in self.wrap_modes(modes, bufsize, max_modes_per_msg=12):
|
||||
self._send_with_prefix(numeric, 'MODE %s %s %s' % (target, modestring, ts))
|
||||
else:
|
||||
# For user modes, the only way to set modes (for non-U:Lined servers)
|
||||
# is through UMODE2, which sets the modes on the caller.
|
||||
# U:Lines can use SVSMODE/SVS2MODE, but I won't expect people to
|
||||
# U:Line a PyLink daemon...
|
||||
if not self.isInternalClient(target):
|
||||
if not self.is_internal_client(target):
|
||||
raise ProtocolError('Cannot force mode change on external clients!')
|
||||
|
||||
# XXX: I don't expect usermode changes to ever get cut off, but length
|
||||
# checks could be added just to be safe...
|
||||
joinedmodes = self.joinModes(modes)
|
||||
joinedmodes = self.join_modes(modes)
|
||||
self._send_with_prefix(target, 'UMODE2 %s' % joinedmodes)
|
||||
|
||||
def topicBurst(self, numeric, target, text):
|
||||
"""Sends a TOPIC change from a PyLink server."""
|
||||
if not self.isInternalServer(numeric):
|
||||
if not self.is_internal_server(numeric):
|
||||
raise LookupError('No such PyLink server exists.')
|
||||
self._send_with_prefix(numeric, 'TOPIC %s :%s' % (target, text))
|
||||
self.channels[target].topic = text
|
||||
@ -282,7 +282,7 @@ class UnrealProtocol(TS6BaseProtocol):
|
||||
raise NotImplementedError("Changing field %r of a client is "
|
||||
"unsupported by this protocol." % field)
|
||||
|
||||
if self.isInternalClient(target):
|
||||
if self.is_internal_client(target):
|
||||
# It is one of our clients, use SETIDENT/HOST/NAME.
|
||||
if field == 'IDENT':
|
||||
self.users[target].ident = text
|
||||
@ -300,26 +300,26 @@ class UnrealProtocol(TS6BaseProtocol):
|
||||
self._send_with_prefix(self.sid, 'CHGIDENT %s %s' % (target, text))
|
||||
|
||||
# Send hook payloads for other plugins to listen to.
|
||||
self.callHooks([self.sid, 'CHGIDENT',
|
||||
self.call_hooks([self.sid, 'CHGIDENT',
|
||||
{'target': target, 'newident': text}])
|
||||
|
||||
elif field == 'HOST':
|
||||
self.users[target].host = text
|
||||
self._send_with_prefix(self.sid, 'CHGHOST %s %s' % (target, text))
|
||||
|
||||
self.callHooks([self.sid, 'CHGHOST',
|
||||
self.call_hooks([self.sid, 'CHGHOST',
|
||||
{'target': target, 'newhost': text}])
|
||||
|
||||
elif field in ('REALNAME', 'GECOS'):
|
||||
self.users[target].realname = text
|
||||
self._send_with_prefix(self.sid, 'CHGNAME %s :%s' % (target, text))
|
||||
|
||||
self.callHooks([self.sid, 'CHGNAME',
|
||||
self.call_hooks([self.sid, 'CHGNAME',
|
||||
{'target': target, 'newgecos': text}])
|
||||
|
||||
def invite(self, numeric, target, channel):
|
||||
"""Sends an INVITE from a PyLink client.."""
|
||||
if not self.isInternalClient(numeric):
|
||||
if not self.is_internal_client(numeric):
|
||||
raise LookupError('No such PyLink client exists.')
|
||||
self._send_with_prefix(numeric, 'INVITE %s %s' % (target, channel))
|
||||
|
||||
@ -329,8 +329,8 @@ class UnrealProtocol(TS6BaseProtocol):
|
||||
# sent to all ops in a channel.
|
||||
# <- :unreal.midnight.vpn NOTICE @#test :[Knock] by GL|!gl@hidden-1C620195 (test)
|
||||
assert utils.isChannel(target), "Can only knock on channels!"
|
||||
sender = self.getServer(numeric)
|
||||
s = '[Knock] by %s (%s)' % (self.getHostmask(numeric), text)
|
||||
sender = self.get_server(numeric)
|
||||
s = '[Knock] by %s (%s)' % (self.get_hostmask(numeric), text)
|
||||
self._send_with_prefix(sender, 'NOTICE @%s :%s' % (target, s))
|
||||
|
||||
### HANDLERS
|
||||
@ -422,8 +422,8 @@ class UnrealProtocol(TS6BaseProtocol):
|
||||
self.servers[numeric].users.add(uid)
|
||||
|
||||
# Handle user modes
|
||||
parsedmodes = self.parseModes(uid, [modestring])
|
||||
self.applyModes(uid, parsedmodes)
|
||||
parsedmodes = self.parse_modes(uid, [modestring])
|
||||
self.apply_modes(uid, parsedmodes)
|
||||
|
||||
# The cloaked (+x) host is completely separate from the displayed host
|
||||
# and real host in that it is ONLY shown if the user is +x (cloak mode
|
||||
@ -432,7 +432,7 @@ class UnrealProtocol(TS6BaseProtocol):
|
||||
|
||||
if ('+o', None) in parsedmodes:
|
||||
# If +o being set, call the CLIENT_OPERED internal hook.
|
||||
self.callHooks([uid, 'CLIENT_OPERED', {'text': 'IRC Operator'}])
|
||||
self.call_hooks([uid, 'CLIENT_OPERED', {'text': 'IRC Operator'}])
|
||||
|
||||
if ('+x', None) not in parsedmodes:
|
||||
# If +x is not set, update to use the person's real host.
|
||||
@ -443,7 +443,7 @@ class UnrealProtocol(TS6BaseProtocol):
|
||||
accountname = nick
|
||||
|
||||
if not accountname.isdigit():
|
||||
self.callHooks([uid, 'CLIENT_SERVICES_LOGIN', {'text': accountname}])
|
||||
self.call_hooks([uid, 'CLIENT_SERVICES_LOGIN', {'text': accountname}])
|
||||
|
||||
return {'uid': uid, 'ts': ts, 'nick': nick, 'realhost': realhost, 'host': host, 'ident': ident, 'ip': ip}
|
||||
|
||||
@ -564,7 +564,7 @@ class UnrealProtocol(TS6BaseProtocol):
|
||||
else:
|
||||
for channel in args[0].split(','):
|
||||
# Normalize channel case.
|
||||
channel = self.toLower(channel)
|
||||
channel = self.to_lower(channel)
|
||||
|
||||
c = self.channels[channel]
|
||||
|
||||
@ -572,14 +572,14 @@ class UnrealProtocol(TS6BaseProtocol):
|
||||
self.channels[channel].users.add(numeric)
|
||||
# Call hooks manually, because one JOIN command in UnrealIRCd can
|
||||
# have multiple channels...
|
||||
self.callHooks([numeric, command, {'channel': channel, 'users': [numeric], 'modes':
|
||||
self.call_hooks([numeric, command, {'channel': channel, 'users': [numeric], 'modes':
|
||||
c.modes, 'ts': c.ts}])
|
||||
|
||||
def handle_sjoin(self, numeric, command, args):
|
||||
"""Handles the UnrealIRCd SJOIN command."""
|
||||
# <- :001 SJOIN 1444361345 #test :001AAAAAA @001AAAAAB +001AAAAAC
|
||||
# <- :001 SJOIN 1483250129 #services +nt :+001OR9V02 @*~001DH6901 &*!*@test "*!*@blah.blah '*!*@yes.no
|
||||
channel = self.toLower(args[1])
|
||||
channel = self.to_lower(args[1])
|
||||
chandata = self.channels[channel].deepcopy()
|
||||
userlist = args[-1].split()
|
||||
|
||||
@ -599,7 +599,7 @@ class UnrealProtocol(TS6BaseProtocol):
|
||||
# Strip extra spaces between the mode argument and the user list, if
|
||||
# there are any. XXX: report this as a bug in unreal's s2s protocol?
|
||||
modestring = [m for m in modestring if m]
|
||||
parsedmodes = self.parseModes(channel, modestring)
|
||||
parsedmodes = self.parse_modes(channel, modestring)
|
||||
changedmodes = set(parsedmodes)
|
||||
except IndexError:
|
||||
pass
|
||||
@ -705,11 +705,11 @@ class UnrealProtocol(TS6BaseProtocol):
|
||||
|
||||
# Also, we need to get rid of that extra space following the +f argument. :|
|
||||
if utils.isChannel(args[0]):
|
||||
channel = self.toLower(args[0])
|
||||
channel = self.to_lower(args[0])
|
||||
oldobj = self.channels[channel].deepcopy()
|
||||
|
||||
modes = [arg for arg in args[1:] if arg] # normalize whitespace
|
||||
parsedmodes = self.parseModes(channel, modes)
|
||||
parsedmodes = self.parse_modes(channel, modes)
|
||||
|
||||
if parsedmodes:
|
||||
if parsedmodes[0][0] == '+&':
|
||||
@ -720,7 +720,7 @@ class UnrealProtocol(TS6BaseProtocol):
|
||||
self.name, modes, channel, self.channels[channel].ts)
|
||||
return
|
||||
|
||||
self.applyModes(channel, parsedmodes)
|
||||
self.apply_modes(channel, parsedmodes)
|
||||
|
||||
if numeric in self.servers and args[-1].isdigit():
|
||||
# Sender is a server AND last arg is number. Perform TS updates.
|
||||
@ -763,7 +763,7 @@ class UnrealProtocol(TS6BaseProtocol):
|
||||
|
||||
if newhost != oldhost:
|
||||
# Only send a payload if the old and new hosts are different.
|
||||
self.callHooks([uid, 'SETHOST',
|
||||
self.call_hooks([uid, 'SETHOST',
|
||||
{'target': uid, 'newhost': newhost}])
|
||||
|
||||
def handle_svsmode(self, numeric, command, args):
|
||||
@ -772,8 +772,8 @@ class UnrealProtocol(TS6BaseProtocol):
|
||||
target = self._get_UID(args[0])
|
||||
modes = args[1:]
|
||||
|
||||
parsedmodes = self.parseModes(target, modes)
|
||||
self.applyModes(target, parsedmodes)
|
||||
parsedmodes = self.parse_modes(target, modes)
|
||||
self.apply_modes(target, parsedmodes)
|
||||
|
||||
# If +x/-x is being set, update cloaked host info.
|
||||
self._check_cloak_change(target, parsedmodes)
|
||||
@ -818,7 +818,7 @@ class UnrealProtocol(TS6BaseProtocol):
|
||||
# <- :NickServ SVS2MODE 001SALZ01 +r
|
||||
|
||||
target = self._get_UID(args[0])
|
||||
parsedmodes = self.parseModes(target, args[1:])
|
||||
parsedmodes = self.parse_modes(target, args[1:])
|
||||
|
||||
if ('+r', None) in parsedmodes:
|
||||
# Umode +r is being set (log in)
|
||||
@ -829,13 +829,13 @@ class UnrealProtocol(TS6BaseProtocol):
|
||||
# If one doesn't exist, make it the same as the nick, but only if the account name
|
||||
# wasn't set already.
|
||||
if not self.users[target].services_account:
|
||||
account = self.getFriendlyName(target)
|
||||
account = self.get_friendly_name(target)
|
||||
else:
|
||||
return
|
||||
else:
|
||||
if account.isdigit():
|
||||
# If the +d argument is a number, ignore it and set the account name to the nick.
|
||||
account = self.getFriendlyName(target)
|
||||
account = self.get_friendly_name(target)
|
||||
|
||||
elif ('-r', None) in parsedmodes:
|
||||
# Umode -r being set.
|
||||
@ -853,17 +853,17 @@ class UnrealProtocol(TS6BaseProtocol):
|
||||
else:
|
||||
return
|
||||
|
||||
self.callHooks([target, 'CLIENT_SERVICES_LOGIN', {'text': account}])
|
||||
self.call_hooks([target, 'CLIENT_SERVICES_LOGIN', {'text': account}])
|
||||
|
||||
def handle_umode2(self, numeric, command, args):
|
||||
"""Handles UMODE2, used to set user modes on oneself."""
|
||||
# <- :GL UMODE2 +W
|
||||
parsedmodes = self.parseModes(numeric, args)
|
||||
self.applyModes(numeric, parsedmodes)
|
||||
parsedmodes = self.parse_modes(numeric, args)
|
||||
self.apply_modes(numeric, parsedmodes)
|
||||
|
||||
if ('+o', None) in parsedmodes:
|
||||
# If +o being set, call the CLIENT_OPERED internal hook.
|
||||
self.callHooks([numeric, 'CLIENT_OPERED', {'text': 'IRC Operator'}])
|
||||
self.call_hooks([numeric, 'CLIENT_OPERED', {'text': 'IRC Operator'}])
|
||||
|
||||
self._check_cloak_change(numeric, parsedmodes)
|
||||
|
||||
@ -873,7 +873,7 @@ class UnrealProtocol(TS6BaseProtocol):
|
||||
"""Handles the TOPIC command."""
|
||||
# <- GL TOPIC #services GL 1444699395 :weeee
|
||||
# <- TOPIC #services devel.relay 1452399682 :test
|
||||
channel = self.toLower(args[0])
|
||||
channel = self.to_lower(args[0])
|
||||
topic = args[-1]
|
||||
setter = args[1]
|
||||
ts = args[2]
|
||||
@ -898,7 +898,7 @@ class UnrealProtocol(TS6BaseProtocol):
|
||||
|
||||
# When SETHOST or CHGHOST is used, modes +xt are implicitly set on the
|
||||
# target.
|
||||
self.applyModes(numeric, [('+x', None), ('+t', None)])
|
||||
self.apply_modes(numeric, [('+x', None), ('+t', None)])
|
||||
|
||||
return {'target': numeric, 'newhost': newhost}
|
||||
|
||||
@ -923,7 +923,7 @@ class UnrealProtocol(TS6BaseProtocol):
|
||||
|
||||
# When SETHOST or CHGHOST is used, modes +xt are implicitly set on the
|
||||
# target.
|
||||
self.applyModes(target, [('+x', None), ('+t', None)])
|
||||
self.apply_modes(target, [('+x', None), ('+t', None)])
|
||||
|
||||
return {'target': target, 'newhost': newhost}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user