mirror of
https://github.com/jlu5/PyLink.git
synced 2024-11-27 13:09:23 +01:00
coremods, plugins: migrate to snake case
This commit is contained in:
parent
a4e321522b
commit
10bca676fc
@ -18,12 +18,12 @@ def _login(irc, source, username):
|
|||||||
irc.users[source].account = username
|
irc.users[source].account = username
|
||||||
irc.reply('Successfully logged in as %s.' % username)
|
irc.reply('Successfully logged in as %s.' % username)
|
||||||
log.info("(%s) Successful login to %r by %s",
|
log.info("(%s) Successful login to %r by %s",
|
||||||
irc.name, username, irc.getHostmask(source))
|
irc.name, username, irc.get_hostmask(source))
|
||||||
|
|
||||||
def _loginfail(irc, source, username):
|
def _loginfail(irc, source, username):
|
||||||
"""Internal function to process login failures."""
|
"""Internal function to process login failures."""
|
||||||
irc.error('Incorrect credentials.')
|
irc.error('Incorrect credentials.')
|
||||||
log.warning("(%s) Failed login to %r from %s", irc.name, username, irc.getHostmask(source))
|
log.warning("(%s) Failed login to %r from %s", irc.name, username, irc.get_hostmask(source))
|
||||||
|
|
||||||
@utils.add_cmd
|
@utils.add_cmd
|
||||||
def identify(irc, source, args):
|
def identify(irc, source, args):
|
||||||
@ -86,7 +86,7 @@ def load(irc, source, args):
|
|||||||
if name in world.plugins:
|
if name in world.plugins:
|
||||||
irc.reply("Error: %r is already loaded." % name)
|
irc.reply("Error: %r is already loaded." % name)
|
||||||
return
|
return
|
||||||
log.info('(%s) Loading plugin %r for %s', irc.name, name, irc.getHostmask(source))
|
log.info('(%s) Loading plugin %r for %s', irc.name, name, irc.get_hostmask(source))
|
||||||
try:
|
try:
|
||||||
world.plugins[name] = pl = utils.loadPlugin(name)
|
world.plugins[name] = pl = utils.loadPlugin(name)
|
||||||
except ImportError as e:
|
except ImportError as e:
|
||||||
@ -119,7 +119,7 @@ def unload(irc, source, args):
|
|||||||
modulename = utils.PLUGIN_PREFIX + name
|
modulename = utils.PLUGIN_PREFIX + name
|
||||||
|
|
||||||
if name in world.plugins:
|
if name in world.plugins:
|
||||||
log.info('(%s) Unloading plugin %r for %s', irc.name, name, irc.getHostmask(source))
|
log.info('(%s) Unloading plugin %r for %s', irc.name, name, irc.get_hostmask(source))
|
||||||
pl = world.plugins[name]
|
pl = world.plugins[name]
|
||||||
log.debug('sys.getrefcount of plugin %s is %s', pl, sys.getrefcount(pl))
|
log.debug('sys.getrefcount of plugin %s is %s', pl, sys.getrefcount(pl))
|
||||||
|
|
||||||
|
@ -41,10 +41,10 @@ def account(irc, host, uid):
|
|||||||
homenet, realuid)
|
homenet, realuid)
|
||||||
return False
|
return False
|
||||||
|
|
||||||
slogin = irc.toLower(userobj.services_account)
|
slogin = irc.to_lower(userobj.services_account)
|
||||||
|
|
||||||
# Split the given exttarget host into parts, so we know how many to look for.
|
# Split the given exttarget host into parts, so we know how many to look for.
|
||||||
groups = list(map(irc.toLower, host.split(':')))
|
groups = list(map(irc.to_lower, host.split(':')))
|
||||||
log.debug('(%s) exttargets.account: groups to match: %s', irc.name, groups)
|
log.debug('(%s) exttargets.account: groups to match: %s', irc.name, groups)
|
||||||
|
|
||||||
if len(groups) == 1:
|
if len(groups) == 1:
|
||||||
@ -74,10 +74,10 @@ def ircop(irc, host, uid):
|
|||||||
|
|
||||||
if len(groups) == 1:
|
if len(groups) == 1:
|
||||||
# 1st scenario.
|
# 1st scenario.
|
||||||
return irc.isOper(uid, allowAuthed=False)
|
return irc.is_oper(uid, allowAuthed=False)
|
||||||
else:
|
else:
|
||||||
# 2nd scenario. Use matchHost (ircmatch) to match the opertype glob to the opertype.
|
# 2nd scenario. Use match_host (ircmatch) to match the opertype glob to the opertype.
|
||||||
return irc.matchHost(groups[1], irc.users[uid].opertype)
|
return irc.match_host(groups[1], irc.users[uid].opertype)
|
||||||
|
|
||||||
@bind
|
@bind
|
||||||
def server(irc, host, uid):
|
def server(irc, host, uid):
|
||||||
@ -93,10 +93,10 @@ def server(irc, host, uid):
|
|||||||
log.debug('(%s) exttargets.server: groups to match: %s', irc.name, groups)
|
log.debug('(%s) exttargets.server: groups to match: %s', irc.name, groups)
|
||||||
|
|
||||||
if len(groups) >= 2:
|
if len(groups) >= 2:
|
||||||
sid = irc.getServer(uid)
|
sid = irc.get_server(uid)
|
||||||
query = groups[1]
|
query = groups[1]
|
||||||
# Return True if the SID matches the query or the server's name glob matches it.
|
# Return True if the SID matches the query or the server's name glob matches it.
|
||||||
return sid == query or irc.matchHost(query, irc.getFriendlyName(sid))
|
return sid == query or irc.match_host(query, irc.get_friendly_name(sid))
|
||||||
# $server alone is invalid. Don't match anything.
|
# $server alone is invalid. Don't match anything.
|
||||||
return False
|
return False
|
||||||
|
|
||||||
@ -134,8 +134,8 @@ def pylinkacc(irc, host, uid):
|
|||||||
$pylinkacc -> Returns True if the target is logged in to PyLink.
|
$pylinkacc -> Returns True if the target is logged in to PyLink.
|
||||||
$pylinkacc:accountname -> Returns True if the target's PyLink login matches the one given.
|
$pylinkacc:accountname -> Returns True if the target's PyLink login matches the one given.
|
||||||
"""
|
"""
|
||||||
login = irc.toLower(irc.users[uid].account)
|
login = irc.to_lower(irc.users[uid].account)
|
||||||
groups = list(map(irc.toLower, host.split(':')))
|
groups = list(map(irc.to_lower, host.split(':')))
|
||||||
log.debug('(%s) exttargets.pylinkacc: groups to match: %s', irc.name, groups)
|
log.debug('(%s) exttargets.pylinkacc: groups to match: %s', irc.name, groups)
|
||||||
|
|
||||||
if len(groups) == 1:
|
if len(groups) == 1:
|
||||||
@ -187,6 +187,6 @@ def exttarget_and(irc, host, uid):
|
|||||||
targets = targets[1:-1]
|
targets = targets[1:-1]
|
||||||
targets = list(filter(None, targets.split('+')))
|
targets = list(filter(None, targets.split('+')))
|
||||||
log.debug('exttargets_and: using raw subtargets list %r (original query=%r)', targets, host)
|
log.debug('exttargets_and: using raw subtargets list %r (original query=%r)', targets, host)
|
||||||
# Wrap every subtarget into irc.matchHost and return True if all subtargets return True.
|
# Wrap every subtarget into irc.match_host and return True if all subtargets return True.
|
||||||
return all(map(lambda sub_exttarget: irc.matchHost(sub_exttarget, uid), targets))
|
return all(map(lambda sub_exttarget: irc.match_host(sub_exttarget, uid), targets))
|
||||||
world.exttarget_handlers['and'] = exttarget_and
|
world.exttarget_handlers['and'] = exttarget_and
|
||||||
|
@ -14,7 +14,7 @@ def handle_whois(irc, source, command, args):
|
|||||||
f = lambda num, source, text: irc.numeric(irc.sid, num, source, text)
|
f = lambda num, source, text: irc.numeric(irc.sid, num, source, text)
|
||||||
|
|
||||||
# Get the server that the target is on.
|
# Get the server that the target is on.
|
||||||
server = irc.getServer(target)
|
server = irc.get_server(target)
|
||||||
|
|
||||||
if user is None: # User doesn't exist
|
if user is None: # User doesn't exist
|
||||||
# <- :42X 401 7PYAAAAAB GL- :No such nick/channel
|
# <- :42X 401 7PYAAAAAB GL- :No such nick/channel
|
||||||
@ -22,7 +22,7 @@ def handle_whois(irc, source, command, args):
|
|||||||
f(401, source, "%s :No such nick/channel" % nick)
|
f(401, source, "%s :No such nick/channel" % nick)
|
||||||
else:
|
else:
|
||||||
nick = user.nick
|
nick = user.nick
|
||||||
sourceisOper = ('o', None) in irc.users[source].modes
|
sourceis_oper = ('o', None) in irc.users[source].modes
|
||||||
sourceisBot = (irc.umodes.get('bot'), None) in irc.users[source].modes
|
sourceisBot = (irc.umodes.get('bot'), None) in irc.users[source].modes
|
||||||
|
|
||||||
# Get the full network name.
|
# Get the full network name.
|
||||||
@ -35,7 +35,7 @@ def handle_whois(irc, source, command, args):
|
|||||||
# 319: RPL_WHOISCHANNELS; Show public channels of the target, respecting
|
# 319: RPL_WHOISCHANNELS; Show public channels of the target, respecting
|
||||||
# hidechans umodes for non-oper callers.
|
# hidechans umodes for non-oper callers.
|
||||||
isHideChans = (irc.umodes.get('hidechans'), None) in user.modes
|
isHideChans = (irc.umodes.get('hidechans'), None) in user.modes
|
||||||
if (not isHideChans) or (isHideChans and sourceisOper):
|
if (not isHideChans) or (isHideChans and sourceis_oper):
|
||||||
public_chans = []
|
public_chans = []
|
||||||
for chan in user.channels:
|
for chan in user.channels:
|
||||||
c = irc.channels[chan]
|
c = irc.channels[chan]
|
||||||
@ -44,7 +44,7 @@ def handle_whois(irc, source, command, args):
|
|||||||
|
|
||||||
if ((irc.cmodes.get('secret'), None) in c.modes or \
|
if ((irc.cmodes.get('secret'), None) in c.modes or \
|
||||||
(irc.cmodes.get('private'), None) in c.modes) \
|
(irc.cmodes.get('private'), None) in c.modes) \
|
||||||
and not (sourceisOper or source in c.users):
|
and not (sourceis_oper or source in c.users):
|
||||||
continue
|
continue
|
||||||
|
|
||||||
# Show the highest prefix mode like a regular IRCd does, if there are any.
|
# Show the highest prefix mode like a regular IRCd does, if there are any.
|
||||||
@ -74,7 +74,7 @@ def handle_whois(irc, source, command, args):
|
|||||||
# 2) +H is set, but the caller is oper
|
# 2) +H is set, but the caller is oper
|
||||||
# 3) +H is set, but whois_use_hideoper is disabled in config
|
# 3) +H is set, but whois_use_hideoper is disabled in config
|
||||||
isHideOper = (irc.umodes.get('hideoper'), None) in user.modes
|
isHideOper = (irc.umodes.get('hideoper'), None) in user.modes
|
||||||
if (not isHideOper) or (isHideOper and sourceisOper) or \
|
if (not isHideOper) or (isHideOper and sourceis_oper) or \
|
||||||
(isHideOper and not conf.conf['bot'].get('whois_use_hideoper', True)):
|
(isHideOper and not conf.conf['bot'].get('whois_use_hideoper', True)):
|
||||||
# Let's be gramatically correct. (If the opertype starts with a vowel,
|
# Let's be gramatically correct. (If the opertype starts with a vowel,
|
||||||
# write "an Operator" instead of "a Operator")
|
# write "an Operator" instead of "a Operator")
|
||||||
@ -84,9 +84,9 @@ def handle_whois(irc, source, command, args):
|
|||||||
|
|
||||||
# 379: RPL_WHOISMODES, used by UnrealIRCd and InspIRCd to show user modes.
|
# 379: RPL_WHOISMODES, used by UnrealIRCd and InspIRCd to show user modes.
|
||||||
# Only show this to opers!
|
# Only show this to opers!
|
||||||
if sourceisOper:
|
if sourceis_oper:
|
||||||
f(378, source, "%s :is connecting from %s@%s %s" % (nick, user.ident, user.realhost, user.ip))
|
f(378, source, "%s :is connecting from %s@%s %s" % (nick, user.ident, user.realhost, user.ip))
|
||||||
f(379, source, '%s :is using modes %s' % (nick, irc.joinModes(user.modes, sort=True)))
|
f(379, source, '%s :is using modes %s' % (nick, irc.join_modes(user.modes, sort=True)))
|
||||||
|
|
||||||
# 301: used to show away information if present
|
# 301: used to show away information if present
|
||||||
away_text = user.away
|
away_text = user.away
|
||||||
@ -101,7 +101,7 @@ def handle_whois(irc, source, command, args):
|
|||||||
# Call custom WHOIS handlers via the PYLINK_CUSTOM_WHOIS hook, unless the
|
# Call custom WHOIS handlers via the PYLINK_CUSTOM_WHOIS hook, unless the
|
||||||
# caller is marked a bot and the whois_show_extensions_to_bots option is False
|
# caller is marked a bot and the whois_show_extensions_to_bots option is False
|
||||||
if (sourceisBot and conf.conf['bot'].get('whois_show_extensions_to_bots')) or (not sourceisBot):
|
if (sourceisBot and conf.conf['bot'].get('whois_show_extensions_to_bots')) or (not sourceisBot):
|
||||||
irc.callHooks([source, 'PYLINK_CUSTOM_WHOIS', {'target': target, 'server': server}])
|
irc.call_hooks([source, 'PYLINK_CUSTOM_WHOIS', {'target': target, 'server': server}])
|
||||||
else:
|
else:
|
||||||
log.debug('(%s) coremods.handlers.handle_whois: skipping custom whois handlers because '
|
log.debug('(%s) coremods.handlers.handle_whois: skipping custom whois handlers because '
|
||||||
'caller %s is marked as a bot', irc.name, source)
|
'caller %s is marked as a bot', irc.name, source)
|
||||||
@ -116,15 +116,15 @@ def handle_mode(irc, source, command, args):
|
|||||||
modes = args['modes']
|
modes = args['modes']
|
||||||
# If the sender is not a PyLink client, and the target IS a protected
|
# If the sender is not a PyLink client, and the target IS a protected
|
||||||
# client, revert any forced deoper attempts.
|
# client, revert any forced deoper attempts.
|
||||||
if irc.isInternalClient(target) and not irc.isInternalClient(source):
|
if irc.is_internal_client(target) and not irc.is_internal_client(source):
|
||||||
if ('-o', None) in modes and (target == irc.pseudoclient.uid or not irc.isManipulatableClient(target)):
|
if ('-o', None) in modes and (target == irc.pseudoclient.uid or not irc.is_manipulatable_client(target)):
|
||||||
irc.mode(irc.sid, target, {('+o', None)})
|
irc.mode(irc.sid, target, {('+o', None)})
|
||||||
utils.add_hook(handle_mode, 'MODE')
|
utils.add_hook(handle_mode, 'MODE')
|
||||||
|
|
||||||
def handle_operup(irc, source, command, args):
|
def handle_operup(irc, source, command, args):
|
||||||
"""Logs successful oper-ups on networks."""
|
"""Logs successful oper-ups on networks."""
|
||||||
otype = args.get('text', 'IRC Operator')
|
otype = args.get('text', 'IRC Operator')
|
||||||
log.debug("(%s) Successful oper-up (opertype %r) from %s", irc.name, otype, irc.getHostmask(source))
|
log.debug("(%s) Successful oper-up (opertype %r) from %s", irc.name, otype, irc.get_hostmask(source))
|
||||||
irc.users[source].opertype = otype
|
irc.users[source].opertype = otype
|
||||||
|
|
||||||
utils.add_hook(handle_operup, 'CLIENT_OPERED')
|
utils.add_hook(handle_operup, 'CLIENT_OPERED')
|
||||||
|
@ -60,22 +60,22 @@ def checkPermissions(irc, uid, perms, also_show=[]):
|
|||||||
"""
|
"""
|
||||||
# For old (< 1.1 login blocks):
|
# For old (< 1.1 login blocks):
|
||||||
# If the user is logged in, they automatically have all permissions.
|
# If the user is logged in, they automatically have all permissions.
|
||||||
if irc.matchHost('$pylinkacc', uid) and conf.conf['login'].get('user'):
|
if irc.match_host('$pylinkacc', uid) and conf.conf['login'].get('user'):
|
||||||
log.debug('permissions: overriding permissions check for old-style admin user %s',
|
log.debug('permissions: overriding permissions check for old-style admin user %s',
|
||||||
irc.getHostmask(uid))
|
irc.get_hostmask(uid))
|
||||||
return True
|
return True
|
||||||
|
|
||||||
# Iterate over all hostmask->permission list mappings.
|
# Iterate over all hostmask->permission list mappings.
|
||||||
for host, permlist in permissions.copy().items():
|
for host, permlist in permissions.copy().items():
|
||||||
log.debug('permissions: permlist for %s: %s', host, permlist)
|
log.debug('permissions: permlist for %s: %s', host, permlist)
|
||||||
if irc.matchHost(host, uid):
|
if irc.match_host(host, uid):
|
||||||
# Now, iterate over all the perms we are looking for.
|
# Now, iterate over all the perms we are looking for.
|
||||||
for perm in permlist:
|
for perm in permlist:
|
||||||
# Use irc.matchHost to expand globs in an IRC-case insensitive and wildcard
|
# Use irc.match_host to expand globs in an IRC-case insensitive and wildcard
|
||||||
# friendly way. e.g. 'xyz.*.#Channel\' will match 'xyz.manage.#channel|' on IRCds
|
# friendly way. e.g. 'xyz.*.#Channel\' will match 'xyz.manage.#channel|' on IRCds
|
||||||
# using the RFC1459 casemapping.
|
# using the RFC1459 casemapping.
|
||||||
log.debug('permissions: checking if %s glob matches anything in %s', perm, permlist)
|
log.debug('permissions: checking if %s glob matches anything in %s', perm, permlist)
|
||||||
if any(irc.matchHost(perm, p) for p in perms):
|
if any(irc.match_host(perm, p) for p in perms):
|
||||||
return True
|
return True
|
||||||
raise utils.NotAuthorizedError("You are missing one of the following permissions: %s" %
|
raise utils.NotAuthorizedError("You are missing one of the following permissions: %s" %
|
||||||
(', '.join(perms+also_show)))
|
(', '.join(perms+also_show)))
|
||||||
|
@ -14,7 +14,7 @@ def spawn_service(irc, source, command, args):
|
|||||||
# Service name
|
# Service name
|
||||||
name = args['name']
|
name = args['name']
|
||||||
|
|
||||||
if name != 'pylink' and not irc.hasCap('can-spawn-clients'):
|
if name != 'pylink' and not irc.has_cap('can-spawn-clients'):
|
||||||
log.debug("(%s) Not spawning service %s because the server doesn't support spawning clients",
|
log.debug("(%s) Not spawning service %s because the server doesn't support spawning clients",
|
||||||
irc.name, name)
|
irc.name, name)
|
||||||
return
|
return
|
||||||
@ -49,8 +49,8 @@ def spawn_service(irc, source, command, args):
|
|||||||
|
|
||||||
# Track the service's UIDs on each network.
|
# Track the service's UIDs on each network.
|
||||||
log.debug('(%s) spawn_service: Using nick %s for service %s', irc.name, nick, name)
|
log.debug('(%s) spawn_service: Using nick %s for service %s', irc.name, nick, name)
|
||||||
u = irc.nickToUid(nick)
|
u = irc.nick_to_uid(nick)
|
||||||
if u and irc.isInternalClient(u): # If an internal client exists, reuse it.
|
if u and irc.is_internal_client(u): # If an internal client exists, reuse it.
|
||||||
log.debug('(%s) spawn_service: Using existing client %s/%s', irc.name, u, nick)
|
log.debug('(%s) spawn_service: Using existing client %s/%s', irc.name, u, nick)
|
||||||
userobj = irc.users[u]
|
userobj = irc.users[u]
|
||||||
else:
|
else:
|
||||||
@ -101,7 +101,7 @@ def handle_kill(irc, source, command, args):
|
|||||||
"""Handle KILLs to PyLink service bots, respawning them as needed."""
|
"""Handle KILLs to PyLink service bots, respawning them as needed."""
|
||||||
target = args['target']
|
target = args['target']
|
||||||
userdata = args.get('userdata')
|
userdata = args.get('userdata')
|
||||||
sbot = irc.getServiceBot(target)
|
sbot = irc.get_service_bot(target)
|
||||||
servicename = None
|
servicename = None
|
||||||
|
|
||||||
if userdata and hasattr(userdata, 'service'): # Look for the target's service name attribute
|
if userdata and hasattr(userdata, 'service'): # Look for the target's service name attribute
|
||||||
@ -118,7 +118,7 @@ def handle_kick(irc, source, command, args):
|
|||||||
"""Handle KICKs to the PyLink service bots, rejoining channels as needed."""
|
"""Handle KICKs to the PyLink service bots, rejoining channels as needed."""
|
||||||
kicked = args['target']
|
kicked = args['target']
|
||||||
channel = args['channel']
|
channel = args['channel']
|
||||||
sbot = irc.getServiceBot(kicked)
|
sbot = irc.get_service_bot(kicked)
|
||||||
if sbot:
|
if sbot:
|
||||||
sbot.join(irc, channel)
|
sbot.join(irc, channel)
|
||||||
utils.add_hook(handle_kick, 'KICK')
|
utils.add_hook(handle_kick, 'KICK')
|
||||||
@ -128,7 +128,7 @@ def handle_commands(irc, source, command, args):
|
|||||||
target = args['target']
|
target = args['target']
|
||||||
text = args['text']
|
text = args['text']
|
||||||
|
|
||||||
sbot = irc.getServiceBot(target)
|
sbot = irc.get_service_bot(target)
|
||||||
if sbot:
|
if sbot:
|
||||||
sbot.call_cmd(irc, source, text)
|
sbot.call_cmd(irc, source, text)
|
||||||
|
|
||||||
|
@ -58,7 +58,7 @@ def checkAccess(irc, uid, channel, command):
|
|||||||
# - automode.<command>.#channel: ability to <command> automode on the given channel.
|
# - automode.<command>.#channel: ability to <command> automode on the given channel.
|
||||||
# - automode.savedb: ability to save the automode DB.
|
# - automode.savedb: ability to save the automode DB.
|
||||||
log.debug('(%s) Automode: checking access for %s/%s for %s capability on %s', irc.name, uid,
|
log.debug('(%s) Automode: checking access for %s/%s for %s capability on %s', irc.name, uid,
|
||||||
irc.getHostmask(uid), command, channel)
|
irc.get_hostmask(uid), command, channel)
|
||||||
|
|
||||||
baseperm = 'automode.%s' % command
|
baseperm = 'automode.%s' % command
|
||||||
try:
|
try:
|
||||||
@ -99,7 +99,7 @@ def match(irc, channel, uids=None):
|
|||||||
|
|
||||||
for mask, modes in dbentry.items():
|
for mask, modes in dbentry.items():
|
||||||
for uid in uids:
|
for uid in uids:
|
||||||
if irc.matchHost(mask, uid):
|
if irc.match_host(mask, uid):
|
||||||
# User matched a mask. Filter the mode list given to only those that are valid
|
# User matched a mask. Filter the mode list given to only those that are valid
|
||||||
# prefix mode characters.
|
# prefix mode characters.
|
||||||
outgoing_modes += [('+'+mode, uid) for mode in modes if mode in irc.prefixmodes]
|
outgoing_modes += [('+'+mode, uid) for mode in modes if mode in irc.prefixmodes]
|
||||||
@ -116,7 +116,7 @@ def match(irc, channel, uids=None):
|
|||||||
irc.mode(modebot_uid, channel, outgoing_modes)
|
irc.mode(modebot_uid, channel, outgoing_modes)
|
||||||
|
|
||||||
# Create a hook payload to support plugins like relay.
|
# Create a hook payload to support plugins like relay.
|
||||||
irc.callHooks([modebot_uid, 'AUTOMODE_MODE',
|
irc.call_hooks([modebot_uid, 'AUTOMODE_MODE',
|
||||||
{'target': channel, 'modes': outgoing_modes, 'parse_as': 'MODE'}])
|
{'target': channel, 'modes': outgoing_modes, 'parse_as': 'MODE'}])
|
||||||
|
|
||||||
def handle_join(irc, source, command, args):
|
def handle_join(irc, source, command, args):
|
||||||
@ -124,7 +124,7 @@ def handle_join(irc, source, command, args):
|
|||||||
Automode JOIN listener. This sets modes accordingly if the person joining matches a mask in the
|
Automode JOIN listener. This sets modes accordingly if the person joining matches a mask in the
|
||||||
ACL.
|
ACL.
|
||||||
"""
|
"""
|
||||||
channel = irc.toLower(args['channel'])
|
channel = irc.to_lower(args['channel'])
|
||||||
match(irc, channel, args['users'])
|
match(irc, channel, args['users'])
|
||||||
|
|
||||||
utils.add_hook(handle_join, 'JOIN')
|
utils.add_hook(handle_join, 'JOIN')
|
||||||
@ -153,7 +153,7 @@ def getChannelPair(irc, source, chanpair, perm=None):
|
|||||||
except ValueError:
|
except ValueError:
|
||||||
raise ValueError("Invalid channel pair %r" % chanpair)
|
raise ValueError("Invalid channel pair %r" % chanpair)
|
||||||
channel = '#' + channel
|
channel = '#' + channel
|
||||||
channel = irc.toLower(channel)
|
channel = irc.to_lower(channel)
|
||||||
|
|
||||||
assert utils.isChannel(channel), "Invalid channel name %s." % channel
|
assert utils.isChannel(channel), "Invalid channel name %s." % channel
|
||||||
|
|
||||||
@ -202,7 +202,7 @@ def setacc(irc, source, args):
|
|||||||
|
|
||||||
modes = modes.lstrip('+') # remove extraneous leading +'s
|
modes = modes.lstrip('+') # remove extraneous leading +'s
|
||||||
dbentry[mask] = modes
|
dbentry[mask] = modes
|
||||||
log.info('(%s) %s set modes +%s for %s on %s', ircobj.name, irc.getHostmask(source), modes, mask, channel)
|
log.info('(%s) %s set modes +%s for %s on %s', ircobj.name, irc.get_hostmask(source), modes, mask, channel)
|
||||||
reply(irc, "Done. \x02%s\x02 now has modes \x02+%s\x02 in \x02%s\x02." % (mask, modes, channel))
|
reply(irc, "Done. \x02%s\x02 now has modes \x02+%s\x02 in \x02%s\x02." % (mask, modes, channel))
|
||||||
|
|
||||||
# Join the Automode bot to the channel if not explicitly told to.
|
# Join the Automode bot to the channel if not explicitly told to.
|
||||||
@ -233,7 +233,7 @@ def delacc(irc, source, args):
|
|||||||
|
|
||||||
if mask in dbentry:
|
if mask in dbentry:
|
||||||
del dbentry[mask]
|
del dbentry[mask]
|
||||||
log.info('(%s) %s removed modes for %s on %s', ircobj.name, irc.getHostmask(source), mask, channel)
|
log.info('(%s) %s removed modes for %s on %s', ircobj.name, irc.get_hostmask(source), mask, channel)
|
||||||
reply(irc, "Done. Removed the Automode access entry for \x02%s\x02 in \x02%s\x02." % (mask, channel))
|
reply(irc, "Done. Removed the Automode access entry for \x02%s\x02 in \x02%s\x02." % (mask, channel))
|
||||||
else:
|
else:
|
||||||
error(irc, "No Automode access entry for \x02%s\x02 exists in \x02%s\x02." % (mask, channel))
|
error(irc, "No Automode access entry for \x02%s\x02 exists in \x02%s\x02." % (mask, channel))
|
||||||
@ -299,7 +299,7 @@ def syncacc(irc, source, args):
|
|||||||
else:
|
else:
|
||||||
ircobj, channel = getChannelPair(irc, source, chanpair, perm='sync')
|
ircobj, channel = getChannelPair(irc, source, chanpair, perm='sync')
|
||||||
|
|
||||||
log.info('(%s) %s synced modes on %s', ircobj.name, irc.getHostmask(source), channel)
|
log.info('(%s) %s synced modes on %s', ircobj.name, irc.get_hostmask(source), channel)
|
||||||
match(ircobj, channel)
|
match(ircobj, channel)
|
||||||
|
|
||||||
reply(irc, 'Done.')
|
reply(irc, 'Done.')
|
||||||
@ -324,7 +324,7 @@ def clearacc(irc, source, args):
|
|||||||
|
|
||||||
if db.get(ircobj.name+channel):
|
if db.get(ircobj.name+channel):
|
||||||
del db[ircobj.name+channel]
|
del db[ircobj.name+channel]
|
||||||
log.info('(%s) %s cleared modes on %s', ircobj.name, irc.getHostmask(source), channel)
|
log.info('(%s) %s cleared modes on %s', ircobj.name, irc.get_hostmask(source), channel)
|
||||||
reply(irc, "Done. Removed all Automode access entries for \x02%s\x02." % channel)
|
reply(irc, "Done. Removed all Automode access entries for \x02%s\x02." % channel)
|
||||||
else:
|
else:
|
||||||
error(irc, "No Automode access entries exist for \x02%s\x02." % channel)
|
error(irc, "No Automode access entries exist for \x02%s\x02." % channel)
|
||||||
|
@ -33,21 +33,21 @@ def quit(irc, source, args):
|
|||||||
except IndexError:
|
except IndexError:
|
||||||
irc.error("Not enough arguments. Needs 1-2: nick, reason (optional).")
|
irc.error("Not enough arguments. Needs 1-2: nick, reason (optional).")
|
||||||
return
|
return
|
||||||
if irc.pseudoclient.uid == irc.nickToUid(nick):
|
if irc.pseudoclient.uid == irc.nick_to_uid(nick):
|
||||||
irc.error("Cannot quit the main PyLink client!")
|
irc.error("Cannot quit the main PyLink client!")
|
||||||
return
|
return
|
||||||
|
|
||||||
u = irc.nickToUid(nick)
|
u = irc.nick_to_uid(nick)
|
||||||
|
|
||||||
quitmsg = ' '.join(args[1:]) or 'Client Quit'
|
quitmsg = ' '.join(args[1:]) or 'Client Quit'
|
||||||
|
|
||||||
if not irc.isManipulatableClient(u):
|
if not irc.is_manipulatable_client(u):
|
||||||
irc.error("Cannot force quit a protected PyLink services client.")
|
irc.error("Cannot force quit a protected PyLink services client.")
|
||||||
return
|
return
|
||||||
|
|
||||||
irc.quit(u, quitmsg)
|
irc.quit(u, quitmsg)
|
||||||
irc.reply("Done.")
|
irc.reply("Done.")
|
||||||
irc.callHooks([u, 'PYLINK_BOTSPLUGIN_QUIT', {'text': quitmsg, 'parse_as': 'QUIT'}])
|
irc.call_hooks([u, 'PYLINK_BOTSPLUGIN_QUIT', {'text': quitmsg, 'parse_as': 'QUIT'}])
|
||||||
|
|
||||||
def joinclient(irc, source, args):
|
def joinclient(irc, source, args):
|
||||||
"""[<target>] <channel1>[,<channel2>,<channel3>,...]
|
"""[<target>] <channel1>[,<channel2>,<channel3>,...]
|
||||||
@ -63,9 +63,9 @@ def joinclient(irc, source, args):
|
|||||||
try:
|
try:
|
||||||
# Check if the first argument is an existing PyLink client. If it is not,
|
# Check if the first argument is an existing PyLink client. If it is not,
|
||||||
# then assume that the first argument was actually the channels being joined.
|
# then assume that the first argument was actually the channels being joined.
|
||||||
u = irc.nickToUid(args[0])
|
u = irc.nick_to_uid(args[0])
|
||||||
|
|
||||||
if not irc.isInternalClient(u): # First argument isn't one of our clients
|
if not irc.is_internal_client(u): # First argument isn't one of our clients
|
||||||
raise IndexError
|
raise IndexError
|
||||||
|
|
||||||
clist = args[1]
|
clist = args[1]
|
||||||
@ -82,7 +82,7 @@ def joinclient(irc, source, args):
|
|||||||
irc.error("No valid channels given.")
|
irc.error("No valid channels given.")
|
||||||
return
|
return
|
||||||
|
|
||||||
if not (irc.isManipulatableClient(u) or irc.getServiceBot(u)):
|
if not (irc.is_manipulatable_client(u) or irc.get_service_bot(u)):
|
||||||
irc.error("Cannot force join a protected PyLink services client.")
|
irc.error("Cannot force join a protected PyLink services client.")
|
||||||
return
|
return
|
||||||
|
|
||||||
@ -104,7 +104,7 @@ def joinclient(irc, source, args):
|
|||||||
irc.join(u, real_channel)
|
irc.join(u, real_channel)
|
||||||
|
|
||||||
# Call a join hook manually so other plugins like relay can understand it.
|
# Call a join hook manually so other plugins like relay can understand it.
|
||||||
irc.callHooks([u, 'PYLINK_BOTSPLUGIN_JOIN', {'channel': real_channel, 'users': [u],
|
irc.call_hooks([u, 'PYLINK_BOTSPLUGIN_JOIN', {'channel': real_channel, 'users': [u],
|
||||||
'modes': irc.channels[real_channel].modes,
|
'modes': irc.channels[real_channel].modes,
|
||||||
'parse_as': 'JOIN'}])
|
'parse_as': 'JOIN'}])
|
||||||
irc.reply("Done.")
|
irc.reply("Done.")
|
||||||
@ -128,7 +128,7 @@ def nick(irc, source, args):
|
|||||||
except IndexError:
|
except IndexError:
|
||||||
irc.error("Not enough arguments. Needs 1-2: nick (optional), newnick.")
|
irc.error("Not enough arguments. Needs 1-2: nick (optional), newnick.")
|
||||||
return
|
return
|
||||||
u = irc.nickToUid(nick)
|
u = irc.nick_to_uid(nick)
|
||||||
|
|
||||||
if newnick in ('0', u): # Allow /nick 0 to work
|
if newnick in ('0', u): # Allow /nick 0 to work
|
||||||
newnick = u
|
newnick = u
|
||||||
@ -137,14 +137,14 @@ def nick(irc, source, args):
|
|||||||
irc.error('Invalid nickname %r.' % newnick)
|
irc.error('Invalid nickname %r.' % newnick)
|
||||||
return
|
return
|
||||||
|
|
||||||
elif not (irc.isManipulatableClient(u) or irc.getServiceBot(u)):
|
elif not (irc.is_manipulatable_client(u) or irc.get_service_bot(u)):
|
||||||
irc.error("Cannot force nick changes for a protected PyLink services client.")
|
irc.error("Cannot force nick changes for a protected PyLink services client.")
|
||||||
return
|
return
|
||||||
|
|
||||||
irc.nick(u, newnick)
|
irc.nick(u, newnick)
|
||||||
irc.reply("Done.")
|
irc.reply("Done.")
|
||||||
# Ditto above: manually send a NICK change hook payload to other plugins.
|
# Ditto above: manually send a NICK change hook payload to other plugins.
|
||||||
irc.callHooks([u, 'PYLINK_BOTSPLUGIN_NICK', {'newnick': newnick, 'oldnick': nick, 'parse_as': 'NICK'}])
|
irc.call_hooks([u, 'PYLINK_BOTSPLUGIN_NICK', {'newnick': newnick, 'oldnick': nick, 'parse_as': 'NICK'}])
|
||||||
|
|
||||||
@utils.add_cmd
|
@utils.add_cmd
|
||||||
def part(irc, source, args):
|
def part(irc, source, args):
|
||||||
@ -161,8 +161,8 @@ def part(irc, source, args):
|
|||||||
|
|
||||||
# First, check if the first argument is an existing PyLink client. If it is not,
|
# First, check if the first argument is an existing PyLink client. If it is not,
|
||||||
# then assume that the first argument was actually the channels being parted.
|
# then assume that the first argument was actually the channels being parted.
|
||||||
u = irc.nickToUid(nick)
|
u = irc.nick_to_uid(nick)
|
||||||
if not irc.isInternalClient(u): # First argument isn't one of our clients
|
if not irc.is_internal_client(u): # First argument isn't one of our clients
|
||||||
raise IndexError
|
raise IndexError
|
||||||
|
|
||||||
except IndexError: # No nick was given; shift arguments one to the left.
|
except IndexError: # No nick was given; shift arguments one to the left.
|
||||||
@ -180,7 +180,7 @@ def part(irc, source, args):
|
|||||||
irc.error("No valid channels given.")
|
irc.error("No valid channels given.")
|
||||||
return
|
return
|
||||||
|
|
||||||
if not (irc.isManipulatableClient(u) or irc.getServiceBot(u)):
|
if not (irc.is_manipulatable_client(u) or irc.get_service_bot(u)):
|
||||||
irc.error("Cannot force part a protected PyLink services client.")
|
irc.error("Cannot force part a protected PyLink services client.")
|
||||||
return
|
return
|
||||||
|
|
||||||
@ -191,7 +191,7 @@ def part(irc, source, args):
|
|||||||
irc.part(u, channel, reason)
|
irc.part(u, channel, reason)
|
||||||
|
|
||||||
irc.reply("Done.")
|
irc.reply("Done.")
|
||||||
irc.callHooks([u, 'PYLINK_BOTSPLUGIN_PART', {'channels': clist, 'text': reason, 'parse_as': 'PART'}])
|
irc.call_hooks([u, 'PYLINK_BOTSPLUGIN_PART', {'channels': clist, 'text': reason, 'parse_as': 'PART'}])
|
||||||
|
|
||||||
@utils.add_cmd
|
@utils.add_cmd
|
||||||
def msg(irc, source, args):
|
def msg(irc, source, args):
|
||||||
@ -208,8 +208,8 @@ def msg(irc, source, args):
|
|||||||
|
|
||||||
# First, check if the first argument is an existing PyLink client. If it is not,
|
# First, check if the first argument is an existing PyLink client. If it is not,
|
||||||
# then assume that the first argument was actually the message TARGET.
|
# then assume that the first argument was actually the message TARGET.
|
||||||
sourceuid = irc.nickToUid(msgsource)
|
sourceuid = irc.nick_to_uid(msgsource)
|
||||||
if not irc.isInternalClient(sourceuid): # First argument isn't one of our clients
|
if not irc.is_internal_client(sourceuid): # First argument isn't one of our clients
|
||||||
raise IndexError
|
raise IndexError
|
||||||
|
|
||||||
if not text:
|
if not text:
|
||||||
@ -229,7 +229,7 @@ def msg(irc, source, args):
|
|||||||
|
|
||||||
if not utils.isChannel(target):
|
if not utils.isChannel(target):
|
||||||
# Convert nick of the message target to a UID, if the target isn't a channel
|
# Convert nick of the message target to a UID, if the target isn't a channel
|
||||||
real_target = irc.nickToUid(target)
|
real_target = irc.nick_to_uid(target)
|
||||||
if real_target is None: # Unknown target user, if target isn't a valid channel name
|
if real_target is None: # Unknown target user, if target isn't a valid channel name
|
||||||
irc.error('Unknown user %r.' % target)
|
irc.error('Unknown user %r.' % target)
|
||||||
return
|
return
|
||||||
@ -238,5 +238,5 @@ def msg(irc, source, args):
|
|||||||
|
|
||||||
irc.message(sourceuid, real_target, text)
|
irc.message(sourceuid, real_target, text)
|
||||||
irc.reply("Done.")
|
irc.reply("Done.")
|
||||||
irc.callHooks([sourceuid, 'PYLINK_BOTSPLUGIN_MSG', {'target': real_target, 'text': text, 'parse_as': 'PRIVMSG'}])
|
irc.call_hooks([sourceuid, 'PYLINK_BOTSPLUGIN_MSG', {'target': real_target, 'text': text, 'parse_as': 'PRIVMSG'}])
|
||||||
utils.add_cmd(msg, 'say')
|
utils.add_cmd(msg, 'say')
|
||||||
|
@ -19,7 +19,7 @@ def _changehost(irc, target, args):
|
|||||||
|
|
||||||
if target not in irc.users:
|
if target not in irc.users:
|
||||||
return
|
return
|
||||||
elif irc.isInternalClient(target):
|
elif irc.is_internal_client(target):
|
||||||
log.debug('(%s) Skipping changehost on internal client %s', irc.name, target)
|
log.debug('(%s) Skipping changehost on internal client %s', irc.name, target)
|
||||||
return
|
return
|
||||||
|
|
||||||
@ -48,7 +48,7 @@ def _changehost(irc, target, args):
|
|||||||
|
|
||||||
for host_glob, host_template in changehost_hosts.items():
|
for host_glob, host_template in changehost_hosts.items():
|
||||||
log.debug('(%s) Changehost: checking mask %s', irc.name, host_glob)
|
log.debug('(%s) Changehost: checking mask %s', irc.name, host_glob)
|
||||||
if irc.matchHost(host_glob, target, ip=match_ip, realhost=match_realhosts):
|
if irc.match_host(host_glob, target, ip=match_ip, realhost=match_realhosts):
|
||||||
log.debug('(%s) Changehost matched mask %s', irc.name, host_glob)
|
log.debug('(%s) Changehost matched mask %s', irc.name, host_glob)
|
||||||
# This uses template strings for simple substitution:
|
# This uses template strings for simple substitution:
|
||||||
# https://docs.python.org/3/library/string.html#template-strings
|
# https://docs.python.org/3/library/string.html#template-strings
|
||||||
@ -103,13 +103,13 @@ def handle_chghost(irc, sender, command, args):
|
|||||||
|
|
||||||
target = args['target']
|
target = args['target']
|
||||||
|
|
||||||
if (not irc.isInternalClient(sender)) and (not irc.isInternalServer(sender)):
|
if (not irc.is_internal_client(sender)) and (not irc.is_internal_server(sender)):
|
||||||
if irc.name in changehost_conf.get('enforced_nets', []):
|
if irc.name in changehost_conf.get('enforced_nets', []):
|
||||||
log.debug('(%s) Enforce for network is on, re-checking host for target %s/%s',
|
log.debug('(%s) Enforce for network is on, re-checking host for target %s/%s',
|
||||||
irc.name, target, irc.getFriendlyName(target))
|
irc.name, target, irc.get_friendly_name(target))
|
||||||
|
|
||||||
for ex in changehost_conf.get("enforce_exceptions", []):
|
for ex in changehost_conf.get("enforce_exceptions", []):
|
||||||
if irc.matchHost(ex, target):
|
if irc.match_host(ex, target):
|
||||||
log.debug('(%s) Skipping host change for target %s; they are exempted by mask %s',
|
log.debug('(%s) Skipping host change for target %s; they are exempted by mask %s',
|
||||||
irc.name, target, ex)
|
irc.name, target, ex)
|
||||||
return
|
return
|
||||||
|
@ -29,7 +29,7 @@ def status(irc, source, args):
|
|||||||
irc.reply('You are identified as \x02%s\x02.' % identified)
|
irc.reply('You are identified as \x02%s\x02.' % identified)
|
||||||
else:
|
else:
|
||||||
irc.reply('You are not identified as anyone.')
|
irc.reply('You are not identified as anyone.')
|
||||||
irc.reply('Operator access: \x02%s\x02' % bool(irc.isOper(source)))
|
irc.reply('Operator access: \x02%s\x02' % bool(irc.is_oper(source)))
|
||||||
|
|
||||||
_none = '\x1D(none)\x1D'
|
_none = '\x1D(none)\x1D'
|
||||||
@utils.add_cmd
|
@utils.add_cmd
|
||||||
@ -43,10 +43,10 @@ def showuser(irc, source, args):
|
|||||||
except IndexError:
|
except IndexError:
|
||||||
irc.error("Not enough arguments. Needs 1: nick.")
|
irc.error("Not enough arguments. Needs 1: nick.")
|
||||||
return
|
return
|
||||||
u = irc.nickToUid(target) or target
|
u = irc.nick_to_uid(target) or target
|
||||||
# Only show private info if the person is calling 'showuser' on themselves,
|
# Only show private info if the person is calling 'showuser' on themselves,
|
||||||
# or is an oper.
|
# or is an oper.
|
||||||
verbose = irc.isOper(source) or u == source
|
verbose = irc.is_oper(source) or u == source
|
||||||
if u not in irc.users:
|
if u not in irc.users:
|
||||||
irc.error('Unknown user %r.' % target)
|
irc.error('Unknown user %r.' % target)
|
||||||
return
|
return
|
||||||
@ -57,7 +57,7 @@ def showuser(irc, source, args):
|
|||||||
f('Showing information on user \x02%s\x02 (%s@%s): %s' % (userobj.nick, userobj.ident,
|
f('Showing information on user \x02%s\x02 (%s@%s): %s' % (userobj.nick, userobj.ident,
|
||||||
userobj.host, userobj.realname))
|
userobj.host, userobj.realname))
|
||||||
|
|
||||||
sid = irc.getServer(u)
|
sid = irc.get_server(u)
|
||||||
serverobj = irc.servers[sid]
|
serverobj = irc.servers[sid]
|
||||||
ts = userobj.ts
|
ts = userobj.ts
|
||||||
|
|
||||||
@ -67,7 +67,7 @@ def showuser(irc, source, args):
|
|||||||
|
|
||||||
if verbose: # Oper only data: user modes, channels on, account info, etc.
|
if verbose: # Oper only data: user modes, channels on, account info, etc.
|
||||||
|
|
||||||
f('\x02User modes\x02: %s' % irc.joinModes(userobj.modes, sort=True))
|
f('\x02User modes\x02: %s' % irc.join_modes(userobj.modes, sort=True))
|
||||||
f('\x02Protocol UID\x02: %s; \x02Real host\x02: %s; \x02IP\x02: %s' % \
|
f('\x02Protocol UID\x02: %s; \x02Real host\x02: %s; \x02IP\x02: %s' % \
|
||||||
(u, userobj.realhost, userobj.ip))
|
(u, userobj.realhost, userobj.ip))
|
||||||
channels = sorted(userobj.channels)
|
channels = sorted(userobj.channels)
|
||||||
@ -83,7 +83,7 @@ def showchan(irc, source, args):
|
|||||||
Shows information about <channel>."""
|
Shows information about <channel>."""
|
||||||
permissions.checkPermissions(irc, source, ['commands.showchan'])
|
permissions.checkPermissions(irc, source, ['commands.showchan'])
|
||||||
try:
|
try:
|
||||||
channel = irc.toLower(args[0])
|
channel = irc.to_lower(args[0])
|
||||||
except IndexError:
|
except IndexError:
|
||||||
irc.error("Not enough arguments. Needs 1: channel.")
|
irc.error("Not enough arguments. Needs 1: channel.")
|
||||||
return
|
return
|
||||||
@ -95,7 +95,7 @@ def showchan(irc, source, args):
|
|||||||
|
|
||||||
c = irc.channels[channel]
|
c = irc.channels[channel]
|
||||||
# Only show verbose info if caller is oper or is in the target channel.
|
# Only show verbose info if caller is oper or is in the target channel.
|
||||||
verbose = source in c.users or irc.isOper(source)
|
verbose = source in c.users or irc.is_oper(source)
|
||||||
secret = ('s', None) in c.modes
|
secret = ('s', None) in c.modes
|
||||||
if secret and not verbose:
|
if secret and not verbose:
|
||||||
# Hide secret channels from normal users.
|
# Hide secret channels from normal users.
|
||||||
@ -110,10 +110,10 @@ def showchan(irc, source, args):
|
|||||||
|
|
||||||
# Mark TS values as untrusted on Clientbot and others (where TS is read-only or not trackable)
|
# Mark TS values as untrusted on Clientbot and others (where TS is read-only or not trackable)
|
||||||
f('\x02Channel creation time\x02: %s (%s)%s' % (ctime(c.ts), c.ts,
|
f('\x02Channel creation time\x02: %s (%s)%s' % (ctime(c.ts), c.ts,
|
||||||
' [UNTRUSTED]' if not irc.hasCap('has-ts') else ''))
|
' [UNTRUSTED]' if not irc.has_cap('has-ts') else ''))
|
||||||
|
|
||||||
# Show only modes that aren't list-style modes.
|
# Show only modes that aren't list-style modes.
|
||||||
modes = irc.joinModes([m for m in c.modes if m[0] not in irc.cmodes['*A']], sort=True)
|
modes = irc.join_modes([m for m in c.modes if m[0] not in irc.cmodes['*A']], sort=True)
|
||||||
f('\x02Channel modes\x02: %s' % modes)
|
f('\x02Channel modes\x02: %s' % modes)
|
||||||
if verbose:
|
if verbose:
|
||||||
nicklist = []
|
nicklist = []
|
||||||
@ -179,7 +179,7 @@ def logout(irc, source, args):
|
|||||||
irc.error("You are not logged in!")
|
irc.error("You are not logged in!")
|
||||||
return
|
return
|
||||||
else:
|
else:
|
||||||
otheruid = irc.nickToUid(othernick)
|
otheruid = irc.nick_to_uid(othernick)
|
||||||
if not otheruid:
|
if not otheruid:
|
||||||
irc.error("Unknown user %s." % othernick)
|
irc.error("Unknown user %s." % othernick)
|
||||||
return
|
return
|
||||||
|
@ -34,7 +34,7 @@ def _exec(irc, source, args, locals_dict=None):
|
|||||||
return
|
return
|
||||||
|
|
||||||
log.info('(%s) Executing %r for %s', irc.name, args,
|
log.info('(%s) Executing %r for %s', irc.name, args,
|
||||||
irc.getHostmask(source))
|
irc.get_hostmask(source))
|
||||||
if locals_dict is None:
|
if locals_dict is None:
|
||||||
locals_dict = locals()
|
locals_dict = locals()
|
||||||
else:
|
else:
|
||||||
@ -86,7 +86,7 @@ def _eval(irc, source, args, locals_dict=None, pretty_print=False):
|
|||||||
locals_dict['args'] = args
|
locals_dict['args'] = args
|
||||||
|
|
||||||
log.info('(%s) Evaluating %r for %s', irc.name, args,
|
log.info('(%s) Evaluating %r for %s', irc.name, args,
|
||||||
irc.getHostmask(source))
|
irc.get_hostmask(source))
|
||||||
|
|
||||||
result = eval(args, globals(), locals_dict)
|
result = eval(args, globals(), locals_dict)
|
||||||
|
|
||||||
@ -150,7 +150,7 @@ def raw(irc, source, args):
|
|||||||
return
|
return
|
||||||
|
|
||||||
log.debug('(%s) Sending raw text %r to IRC for %s', irc.name, args,
|
log.debug('(%s) Sending raw text %r to IRC for %s', irc.name, args,
|
||||||
irc.getHostmask(source))
|
irc.get_hostmask(source))
|
||||||
irc.send(args)
|
irc.send(args)
|
||||||
|
|
||||||
irc.reply("Done.")
|
irc.reply("Done.")
|
||||||
@ -170,5 +170,5 @@ def inject(irc, source, args):
|
|||||||
return
|
return
|
||||||
|
|
||||||
log.info('(%s) Injecting raw text %r into protocol module for %s', irc.name,
|
log.info('(%s) Injecting raw text %r into protocol module for %s', irc.name,
|
||||||
args, irc.getHostmask(source))
|
args, irc.get_hostmask(source))
|
||||||
irc.reply(irc.runline(args))
|
irc.reply(irc.runline(args))
|
||||||
|
@ -12,7 +12,7 @@ def handle_fantasy(irc, source, command, args):
|
|||||||
channel = args['target']
|
channel = args['target']
|
||||||
orig_text = args['text']
|
orig_text = args['text']
|
||||||
|
|
||||||
if utils.isChannel(channel) and not irc.isInternalClient(source):
|
if utils.isChannel(channel) and not irc.is_internal_client(source):
|
||||||
# The following conditions must be met for an incoming message for
|
# The following conditions must be met for an incoming message for
|
||||||
# fantasy to trigger:
|
# fantasy to trigger:
|
||||||
# 1) The message target is a channel.
|
# 1) The message target is a channel.
|
||||||
@ -42,7 +42,7 @@ def handle_fantasy(irc, source, command, args):
|
|||||||
|
|
||||||
# If responding to nick is enabled, add variations of the current nick
|
# If responding to nick is enabled, add variations of the current nick
|
||||||
# to the prefix list: "<nick>," and "<nick>:"
|
# to the prefix list: "<nick>," and "<nick>:"
|
||||||
nick = irc.toLower(irc.users[servuid].nick)
|
nick = irc.to_lower(irc.users[servuid].nick)
|
||||||
|
|
||||||
nick_prefixes = [nick+',', nick+':']
|
nick_prefixes = [nick+',', nick+':']
|
||||||
if respondtonick:
|
if respondtonick:
|
||||||
@ -52,7 +52,7 @@ def handle_fantasy(irc, source, command, args):
|
|||||||
# No prefixes were set, so skip.
|
# No prefixes were set, so skip.
|
||||||
continue
|
continue
|
||||||
|
|
||||||
lowered_text = irc.toLower(orig_text)
|
lowered_text = irc.to_lower(orig_text)
|
||||||
for prefix in filter(None, prefixes): # Cycle through the prefixes list we finished with.
|
for prefix in filter(None, prefixes): # Cycle through the prefixes list we finished with.
|
||||||
if lowered_text.startswith(prefix):
|
if lowered_text.startswith(prefix):
|
||||||
|
|
||||||
|
@ -20,12 +20,12 @@ def g(irc, source, args):
|
|||||||
for name, ircd in world.networkobjects.items():
|
for name, ircd in world.networkobjects.items():
|
||||||
if ircd.connected.is_set(): # Only attempt to send to connected networks
|
if ircd.connected.is_set(): # Only attempt to send to connected networks
|
||||||
for channel in ircd.pseudoclient.channels:
|
for channel in ircd.pseudoclient.channels:
|
||||||
subst = {'sender': irc.getFriendlyName(source),
|
subst = {'sender': irc.get_friendly_name(source),
|
||||||
'network': irc.name,
|
'network': irc.name,
|
||||||
'fullnetwork': irc.getFullNetworkName(),
|
'fullnetwork': irc.get_full_network_name(),
|
||||||
'current_channel': channel,
|
'current_channel': channel,
|
||||||
'current_network': ircd.name,
|
'current_network': ircd.name,
|
||||||
'current_fullnetwork': ircd.getFullNetworkName(),
|
'current_fullnetwork': ircd.get_full_network_name(),
|
||||||
'text': message}
|
'text': message}
|
||||||
|
|
||||||
# Disable relaying or other plugins handling the global message.
|
# Disable relaying or other plugins handling the global message.
|
||||||
|
@ -27,10 +27,10 @@ def checkban(irc, source, args):
|
|||||||
|
|
||||||
results = 0
|
results = 0
|
||||||
for uid, userobj in irc.users.copy().items():
|
for uid, userobj in irc.users.copy().items():
|
||||||
if irc.matchHost(banmask, uid):
|
if irc.match_host(banmask, uid):
|
||||||
if results < 50: # XXX rather arbitrary limit
|
if results < 50: # XXX rather arbitrary limit
|
||||||
s = "\x02%s\x02 (%s@%s) [%s] {\x02%s\x02}" % (userobj.nick, userobj.ident,
|
s = "\x02%s\x02 (%s@%s) [%s] {\x02%s\x02}" % (userobj.nick, userobj.ident,
|
||||||
userobj.host, userobj.realname, irc.getFriendlyName(irc.getServer(uid)))
|
userobj.host, userobj.realname, irc.get_friendly_name(irc.get_server(uid)))
|
||||||
|
|
||||||
# Always reply in private to prevent information leaks.
|
# Always reply in private to prevent information leaks.
|
||||||
irc.reply(s, private=True)
|
irc.reply(s, private=True)
|
||||||
@ -42,9 +42,9 @@ def checkban(irc, source, args):
|
|||||||
else:
|
else:
|
||||||
irc.msg(source, "No results found.", notice=True)
|
irc.msg(source, "No results found.", notice=True)
|
||||||
else:
|
else:
|
||||||
# Target can be both a nick (of an online user) or a hostmask. irc.matchHost() handles this
|
# Target can be both a nick (of an online user) or a hostmask. irc.match_host() handles this
|
||||||
# automatically.
|
# automatically.
|
||||||
if irc.matchHost(banmask, targetmask):
|
if irc.match_host(banmask, targetmask):
|
||||||
irc.reply('Yes, \x02%s\x02 matches \x02%s\x02.' % (targetmask, banmask))
|
irc.reply('Yes, \x02%s\x02 matches \x02%s\x02.' % (targetmask, banmask))
|
||||||
else:
|
else:
|
||||||
irc.reply('No, \x02%s\x02 does not match \x02%s\x02.' % (targetmask, banmask))
|
irc.reply('No, \x02%s\x02 does not match \x02%s\x02.' % (targetmask, banmask))
|
||||||
@ -61,7 +61,7 @@ def jupe(irc, source, args):
|
|||||||
try:
|
try:
|
||||||
servername = args[0]
|
servername = args[0]
|
||||||
reason = ' '.join(args[1:]) or "No reason given"
|
reason = ' '.join(args[1:]) or "No reason given"
|
||||||
desc = "Juped by %s: [%s]" % (irc.getHostmask(source), reason)
|
desc = "Juped by %s: [%s]" % (irc.get_hostmask(source), reason)
|
||||||
except IndexError:
|
except IndexError:
|
||||||
irc.error('Not enough arguments. Needs 1-2: servername, reason (optional).')
|
irc.error('Not enough arguments. Needs 1-2: servername, reason (optional).')
|
||||||
return
|
return
|
||||||
@ -72,7 +72,7 @@ def jupe(irc, source, args):
|
|||||||
|
|
||||||
sid = irc.spawnServer(servername, desc=desc)
|
sid = irc.spawnServer(servername, desc=desc)
|
||||||
|
|
||||||
irc.callHooks([irc.pseudoclient.uid, 'OPERCMDS_SPAWNSERVER',
|
irc.call_hooks([irc.pseudoclient.uid, 'OPERCMDS_SPAWNSERVER',
|
||||||
{'name': servername, 'sid': sid, 'text': desc}])
|
{'name': servername, 'sid': sid, 'text': desc}])
|
||||||
|
|
||||||
irc.reply("Done.")
|
irc.reply("Done.")
|
||||||
@ -85,14 +85,14 @@ def kick(irc, source, args):
|
|||||||
Admin only. Kicks <user> from the specified channel."""
|
Admin only. Kicks <user> from the specified channel."""
|
||||||
permissions.checkPermissions(irc, source, ['opercmds.kick'])
|
permissions.checkPermissions(irc, source, ['opercmds.kick'])
|
||||||
try:
|
try:
|
||||||
channel = irc.toLower(args[0])
|
channel = irc.to_lower(args[0])
|
||||||
target = args[1]
|
target = args[1]
|
||||||
reason = ' '.join(args[2:])
|
reason = ' '.join(args[2:])
|
||||||
except IndexError:
|
except IndexError:
|
||||||
irc.error("Not enough arguments. Needs 2-3: channel, target, reason (optional).")
|
irc.error("Not enough arguments. Needs 2-3: channel, target, reason (optional).")
|
||||||
return
|
return
|
||||||
|
|
||||||
targetu = irc.nickToUid(target)
|
targetu = irc.nick_to_uid(target)
|
||||||
|
|
||||||
if channel not in irc.channels: # KICK only works on channels that exist.
|
if channel not in irc.channels: # KICK only works on channels that exist.
|
||||||
irc.error("Unknown channel %r." % channel)
|
irc.error("Unknown channel %r." % channel)
|
||||||
@ -106,7 +106,7 @@ def kick(irc, source, args):
|
|||||||
sender = irc.pseudoclient.uid
|
sender = irc.pseudoclient.uid
|
||||||
irc.kick(sender, channel, targetu, reason)
|
irc.kick(sender, channel, targetu, reason)
|
||||||
irc.reply("Done.")
|
irc.reply("Done.")
|
||||||
irc.callHooks([sender, 'CHANCMDS_KICK', {'channel': channel, 'target': targetu,
|
irc.call_hooks([sender, 'CHANCMDS_KICK', {'channel': channel, 'target': targetu,
|
||||||
'text': reason, 'parse_as': 'KICK'}])
|
'text': reason, 'parse_as': 'KICK'}])
|
||||||
|
|
||||||
@utils.add_cmd
|
@utils.add_cmd
|
||||||
@ -124,7 +124,7 @@ def kill(irc, source, args):
|
|||||||
|
|
||||||
# Convert the source and target nicks to UIDs.
|
# Convert the source and target nicks to UIDs.
|
||||||
sender = irc.pseudoclient.uid
|
sender = irc.pseudoclient.uid
|
||||||
targetu = irc.nickToUid(target)
|
targetu = irc.nick_to_uid(target)
|
||||||
userdata = irc.users.get(targetu)
|
userdata = irc.users.get(targetu)
|
||||||
|
|
||||||
if targetu not in irc.users:
|
if targetu not in irc.users:
|
||||||
@ -135,10 +135,10 @@ def kill(irc, source, args):
|
|||||||
irc.kill(sender, targetu, reason)
|
irc.kill(sender, targetu, reason)
|
||||||
|
|
||||||
# Format the kill reason properly in hooks.
|
# Format the kill reason properly in hooks.
|
||||||
reason = "Killed (%s (%s))" % (irc.getFriendlyName(sender), reason)
|
reason = "Killed (%s (%s))" % (irc.get_friendly_name(sender), reason)
|
||||||
|
|
||||||
irc.reply("Done.")
|
irc.reply("Done.")
|
||||||
irc.callHooks([sender, 'CHANCMDS_KILL', {'target': targetu, 'text': reason,
|
irc.call_hooks([sender, 'CHANCMDS_KILL', {'target': targetu, 'text': reason,
|
||||||
'userdata': userdata, 'parse_as': 'KILL'}])
|
'userdata': userdata, 'parse_as': 'KILL'}])
|
||||||
|
|
||||||
@utils.add_cmd
|
@utils.add_cmd
|
||||||
@ -164,7 +164,7 @@ def mode(irc, source, args):
|
|||||||
irc.error("No valid modes were given.")
|
irc.error("No valid modes were given.")
|
||||||
return
|
return
|
||||||
|
|
||||||
parsedmodes = irc.parseModes(target, modes)
|
parsedmodes = irc.parse_modes(target, modes)
|
||||||
|
|
||||||
if not parsedmodes:
|
if not parsedmodes:
|
||||||
# Modes were given but they failed to parse into anything meaningful.
|
# Modes were given but they failed to parse into anything meaningful.
|
||||||
@ -176,7 +176,7 @@ def mode(irc, source, args):
|
|||||||
irc.mode(irc.pseudoclient.uid, target, parsedmodes)
|
irc.mode(irc.pseudoclient.uid, target, parsedmodes)
|
||||||
|
|
||||||
# Call the appropriate hooks for plugins like relay.
|
# Call the appropriate hooks for plugins like relay.
|
||||||
irc.callHooks([irc.pseudoclient.uid, 'OPERCMDS_MODEOVERRIDE',
|
irc.call_hooks([irc.pseudoclient.uid, 'OPERCMDS_MODEOVERRIDE',
|
||||||
{'target': target, 'modes': parsedmodes, 'parse_as': 'MODE'}])
|
{'target': target, 'modes': parsedmodes, 'parse_as': 'MODE'}])
|
||||||
|
|
||||||
irc.reply("Done.")
|
irc.reply("Done.")
|
||||||
@ -201,6 +201,6 @@ def topic(irc, source, args):
|
|||||||
irc.topic(irc.pseudoclient.uid, channel, topic)
|
irc.topic(irc.pseudoclient.uid, channel, topic)
|
||||||
|
|
||||||
irc.reply("Done.")
|
irc.reply("Done.")
|
||||||
irc.callHooks([irc.pseudoclient.uid, 'CHANCMDS_TOPIC',
|
irc.call_hooks([irc.pseudoclient.uid, 'CHANCMDS_TOPIC',
|
||||||
{'channel': channel, 'text': topic, 'setter': source,
|
{'channel': channel, 'text': topic, 'setter': source,
|
||||||
'parse_as': 'TOPIC'}])
|
'parse_as': 'TOPIC'}])
|
||||||
|
108
plugins/relay.py
108
plugins/relay.py
@ -105,7 +105,7 @@ def normalize_nick(irc, netname, nick, times_tagged=0, uid=''):
|
|||||||
forcetag_nicks = conf.conf.get('relay', {}).get('forcetag_nicks', [])
|
forcetag_nicks = conf.conf.get('relay', {}).get('forcetag_nicks', [])
|
||||||
log.debug('(%s) relay.normalize_nick: checking if globs %s match %s.', irc.name, forcetag_nicks, nick)
|
log.debug('(%s) relay.normalize_nick: checking if globs %s match %s.', irc.name, forcetag_nicks, nick)
|
||||||
for glob in forcetag_nicks:
|
for glob in forcetag_nicks:
|
||||||
if irc.matchHost(glob, nick):
|
if irc.match_host(glob, nick):
|
||||||
# User matched a nick to force tag nicks for. Tag them.
|
# User matched a nick to force tag nicks for. Tag them.
|
||||||
times_tagged = 1
|
times_tagged = 1
|
||||||
break
|
break
|
||||||
@ -117,7 +117,7 @@ def normalize_nick(irc, netname, nick, times_tagged=0, uid=''):
|
|||||||
# Charybdis, IRCu, etc. don't allow / in nicks, and will SQUIT with a protocol
|
# Charybdis, IRCu, etc. don't allow / in nicks, and will SQUIT with a protocol
|
||||||
# violation if it sees one. Or it might just ignore the client introduction and
|
# violation if it sees one. Or it might just ignore the client introduction and
|
||||||
# cause bad desyncs.
|
# cause bad desyncs.
|
||||||
protocol_allows_slashes = irc.hasCap('slash-in-nicks') or \
|
protocol_allows_slashes = irc.has_cap('slash-in-nicks') or \
|
||||||
irc.serverdata.get('relay_force_slashes')
|
irc.serverdata.get('relay_force_slashes')
|
||||||
|
|
||||||
if '/' not in separator or not protocol_allows_slashes:
|
if '/' not in separator or not protocol_allows_slashes:
|
||||||
@ -153,7 +153,7 @@ def normalize_nick(irc, netname, nick, times_tagged=0, uid=''):
|
|||||||
if char not in allowed_chars:
|
if char not in allowed_chars:
|
||||||
nick = nick.replace(char, fallback_separator)
|
nick = nick.replace(char, fallback_separator)
|
||||||
|
|
||||||
while irc.nickToUid(nick) and irc.nickToUid(nick) != uid:
|
while irc.nick_to_uid(nick) and irc.nick_to_uid(nick) != uid:
|
||||||
# The nick we want exists: Increase the separator length by 1 if the user was already
|
# The nick we want exists: Increase the separator length by 1 if the user was already
|
||||||
# tagged, but couldn't be created due to a nick conflict. This can happen when someone
|
# tagged, but couldn't be created due to a nick conflict. This can happen when someone
|
||||||
# steals a relay user's nick.
|
# steals a relay user's nick.
|
||||||
@ -176,11 +176,11 @@ def normalize_host(irc, host):
|
|||||||
log.debug('(%s) relay.normalize_host: IRCd=%s, host=%s', irc.name, irc.protoname, host)
|
log.debug('(%s) relay.normalize_host: IRCd=%s, host=%s', irc.name, irc.protoname, host)
|
||||||
|
|
||||||
allowed_chars = string.ascii_letters + string.digits + '-.:'
|
allowed_chars = string.ascii_letters + string.digits + '-.:'
|
||||||
if irc.hasCap('slash-in-hosts'):
|
if irc.has_cap('slash-in-hosts'):
|
||||||
# UnrealIRCd and IRCd-Hybrid don't allow slashes in hostnames
|
# UnrealIRCd and IRCd-Hybrid don't allow slashes in hostnames
|
||||||
allowed_chars += '/'
|
allowed_chars += '/'
|
||||||
|
|
||||||
if irc.hasCap('underscore-in-hosts'):
|
if irc.has_cap('underscore-in-hosts'):
|
||||||
# Most IRCds allow _ in hostnames, but hybrid/charybdis/ratbox IRCds do not.
|
# Most IRCds allow _ in hostnames, but hybrid/charybdis/ratbox IRCds do not.
|
||||||
allowed_chars += '_'
|
allowed_chars += '_'
|
||||||
|
|
||||||
@ -221,7 +221,7 @@ def spawn_relay_server(irc, remoteirc):
|
|||||||
suffix = suffix.strip('.')
|
suffix = suffix.strip('.')
|
||||||
sid = irc.spawnServer('%s.%s' % (remoteirc.name, suffix),
|
sid = irc.spawnServer('%s.%s' % (remoteirc.name, suffix),
|
||||||
desc="PyLink Relay network - %s" %
|
desc="PyLink Relay network - %s" %
|
||||||
(remoteirc.getFullNetworkName()), endburst_delay=3)
|
(remoteirc.get_full_network_name()), endburst_delay=3)
|
||||||
except (RuntimeError, ValueError): # Network not initialized yet, or a server name conflict.
|
except (RuntimeError, ValueError): # Network not initialized yet, or a server name conflict.
|
||||||
log.exception('(%s) Failed to spawn server for %r (possible jupe?):',
|
log.exception('(%s) Failed to spawn server for %r (possible jupe?):',
|
||||||
irc.name, remoteirc.name)
|
irc.name, remoteirc.name)
|
||||||
@ -296,7 +296,7 @@ def spawn_relay_user(irc, remoteirc, user, times_tagged=0):
|
|||||||
else:
|
else:
|
||||||
opertype = 'IRC Operator'
|
opertype = 'IRC Operator'
|
||||||
|
|
||||||
opertype += ' (on %s)' % irc.getFullNetworkName()
|
opertype += ' (on %s)' % irc.get_full_network_name()
|
||||||
|
|
||||||
# Set hideoper on remote opers, to prevent inflating
|
# Set hideoper on remote opers, to prevent inflating
|
||||||
# /lusers and various /stats
|
# /lusers and various /stats
|
||||||
@ -351,7 +351,7 @@ def get_remote_user(irc, remoteirc, user, spawn_if_missing=True, times_tagged=0)
|
|||||||
# Wait until the network is working before trying to spawn anything.
|
# Wait until the network is working before trying to spawn anything.
|
||||||
if irc.connected.wait(TCONDITION_TIMEOUT):
|
if irc.connected.wait(TCONDITION_TIMEOUT):
|
||||||
# Don't spawn clones for registered service bots.
|
# Don't spawn clones for registered service bots.
|
||||||
sbot = irc.getServiceBot(user)
|
sbot = irc.get_service_bot(user)
|
||||||
if sbot:
|
if sbot:
|
||||||
return sbot.uids.get(remoteirc.name)
|
return sbot.uids.get(remoteirc.name)
|
||||||
|
|
||||||
@ -538,8 +538,8 @@ def check_claim(irc, channel, sender, chanobj=None):
|
|||||||
return (not relay) or irc.name == relay[0] or not db[relay]['claim'] or \
|
return (not relay) or irc.name == relay[0] or not db[relay]['claim'] or \
|
||||||
irc.name in db[relay]['claim'] or \
|
irc.name in db[relay]['claim'] or \
|
||||||
any([mode in sender_modes for mode in ('y', 'q', 'a', 'o', 'h')]) \
|
any([mode in sender_modes for mode in ('y', 'q', 'a', 'o', 'h')]) \
|
||||||
or irc.isInternalClient(sender) or \
|
or irc.is_internal_client(sender) or \
|
||||||
irc.isInternalServer(sender)
|
irc.is_internal_server(sender)
|
||||||
|
|
||||||
def get_supported_umodes(irc, remoteirc, modes):
|
def get_supported_umodes(irc, remoteirc, modes):
|
||||||
"""Given a list of user modes, filters out all of those not supported by the
|
"""Given a list of user modes, filters out all of those not supported by the
|
||||||
@ -648,7 +648,7 @@ def relay_joins(irc, channel, users, ts, burst=True):
|
|||||||
|
|
||||||
# Fetch the known channel TS and all the prefix modes for each user. This ensures
|
# Fetch the known channel TS and all the prefix modes for each user. This ensures
|
||||||
# the different sides of the relay are merged properly.
|
# the different sides of the relay are merged properly.
|
||||||
if not irc.hasCap('has-ts'):
|
if not irc.has_cap('has-ts'):
|
||||||
# Special hack for clientbot: just use the remote's modes so mode changes
|
# Special hack for clientbot: just use the remote's modes so mode changes
|
||||||
# take precendence. (TS is always outside the clientbot's control)
|
# take precendence. (TS is always outside the clientbot's control)
|
||||||
ts = remoteirc.channels[remotechan].ts
|
ts = remoteirc.channels[remotechan].ts
|
||||||
@ -677,7 +677,7 @@ def relay_joins(irc, channel, users, ts, burst=True):
|
|||||||
|
|
||||||
for remoteirc, hookdata in joined_nets.items():
|
for remoteirc, hookdata in joined_nets.items():
|
||||||
# HACK: Announce this JOIN as a special hook on each network, for plugins like Automode.
|
# HACK: Announce this JOIN as a special hook on each network, for plugins like Automode.
|
||||||
remoteirc.callHooks([remoteirc.sid, 'PYLINK_RELAY_JOIN', hookdata])
|
remoteirc.call_hooks([remoteirc.sid, 'PYLINK_RELAY_JOIN', hookdata])
|
||||||
|
|
||||||
def relay_part(irc, channel, user):
|
def relay_part(irc, channel, user):
|
||||||
"""
|
"""
|
||||||
@ -783,7 +783,7 @@ def get_supported_cmodes(irc, remoteirc, channel, modes):
|
|||||||
"for network %r.",
|
"for network %r.",
|
||||||
irc.name, modechar, arg, remoteirc.name)
|
irc.name, modechar, arg, remoteirc.name)
|
||||||
|
|
||||||
if (not irc.hasCap('can-spawn-clients')) and irc.pseudoclient and arg == irc.pseudoclient.uid:
|
if (not irc.has_cap('can-spawn-clients')) and irc.pseudoclient and arg == irc.pseudoclient.uid:
|
||||||
# Skip modesync on the main PyLink client.
|
# Skip modesync on the main PyLink client.
|
||||||
log.debug("(%s) relay.get_supported_cmodes: filtering prefix change (%r, %r) on Clientbot relayer",
|
log.debug("(%s) relay.get_supported_cmodes: filtering prefix change (%r, %r) on Clientbot relayer",
|
||||||
irc.name, name, arg)
|
irc.name, name, arg)
|
||||||
@ -857,7 +857,7 @@ def handle_relay_whois(irc, source, command, args):
|
|||||||
setting = conf.conf.get('relay', {}).get(infoline, '').lower()
|
setting = conf.conf.get('relay', {}).get(infoline, '').lower()
|
||||||
if setting == 'all':
|
if setting == 'all':
|
||||||
return True
|
return True
|
||||||
elif setting == 'opers' and irc.isOper(source, allowAuthed=False):
|
elif setting == 'opers' and irc.is_oper(source, allowAuthed=False):
|
||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
|
||||||
@ -867,7 +867,7 @@ def handle_relay_whois(irc, source, command, args):
|
|||||||
homenet, uid = origuser
|
homenet, uid = origuser
|
||||||
realirc = world.networkobjects[homenet]
|
realirc = world.networkobjects[homenet]
|
||||||
realuser = realirc.users[uid]
|
realuser = realirc.users[uid]
|
||||||
netname = realirc.getFullNetworkName()
|
netname = realirc.get_full_network_name()
|
||||||
|
|
||||||
wreply(320, ":is a remote user connected via PyLink Relay. Home network: %s; "
|
wreply(320, ":is a remote user connected via PyLink Relay. Home network: %s; "
|
||||||
"Home nick: %s" % (netname, realuser.nick))
|
"Home nick: %s" % (netname, realuser.nick))
|
||||||
@ -876,9 +876,9 @@ def handle_relay_whois(irc, source, command, args):
|
|||||||
# Send account information if told to and the target is logged in.
|
# Send account information if told to and the target is logged in.
|
||||||
wreply(330, "%s :is logged in (on %s) as" % (realuser.services_account, netname))
|
wreply(330, "%s :is logged in (on %s) as" % (realuser.services_account, netname))
|
||||||
|
|
||||||
if checkSendKey('whois_show_server') and realirc.hasCap('can-track-servers'):
|
if checkSendKey('whois_show_server') and realirc.has_cap('can-track-servers'):
|
||||||
wreply(320, ":is actually connected via the following server:")
|
wreply(320, ":is actually connected via the following server:")
|
||||||
realserver = realirc.getServer(uid)
|
realserver = realirc.get_server(uid)
|
||||||
realserver = realirc.servers[realserver]
|
realserver = realirc.servers[realserver]
|
||||||
wreply(312, "%s :%s" % (realserver.name, realserver.desc))
|
wreply(312, "%s :%s" % (realserver.name, realserver.desc))
|
||||||
|
|
||||||
@ -888,7 +888,7 @@ def handle_operup(irc, numeric, command, args):
|
|||||||
"""
|
"""
|
||||||
Handles setting oper types on relay clients during oper up.
|
Handles setting oper types on relay clients during oper up.
|
||||||
"""
|
"""
|
||||||
newtype = '%s (on %s)' % (args['text'], irc.getFullNetworkName())
|
newtype = '%s (on %s)' % (args['text'], irc.get_full_network_name())
|
||||||
for netname, user in relayusers[(irc.name, numeric)].items():
|
for netname, user in relayusers[(irc.name, numeric)].items():
|
||||||
log.debug('(%s) relay.handle_opertype: setting OPERTYPE of %s/%s to %s',
|
log.debug('(%s) relay.handle_opertype: setting OPERTYPE of %s/%s to %s',
|
||||||
irc.name, user, netname, newtype)
|
irc.name, user, netname, newtype)
|
||||||
@ -935,7 +935,7 @@ def handle_join(irc, numeric, command, args):
|
|||||||
modes.append(('-%s' % modechar, user))
|
modes.append(('-%s' % modechar, user))
|
||||||
|
|
||||||
if modes:
|
if modes:
|
||||||
log.debug('(%s) relay.handle_join: reverting modes on BURST: %s', irc.name, irc.joinModes(modes))
|
log.debug('(%s) relay.handle_join: reverting modes on BURST: %s', irc.name, irc.join_modes(modes))
|
||||||
irc.mode(irc.sid, channel, modes)
|
irc.mode(irc.sid, channel, modes)
|
||||||
|
|
||||||
relay_joins(irc, channel, users, ts, burst=False)
|
relay_joins(irc, channel, users, ts, burst=False)
|
||||||
@ -1017,11 +1017,11 @@ def handle_part(irc, numeric, command, args):
|
|||||||
if numeric == irc.pseudoclient.uid:
|
if numeric == irc.pseudoclient.uid:
|
||||||
# For clientbot: treat forced parts to the bot as clearchan, and attempt to rejoin only
|
# For clientbot: treat forced parts to the bot as clearchan, and attempt to rejoin only
|
||||||
# if it affected a relay.
|
# if it affected a relay.
|
||||||
if not irc.hasCap('can-spawn-clients'):
|
if not irc.has_cap('can-spawn-clients'):
|
||||||
for channel in [c for c in channels if get_relay((irc.name, c))]:
|
for channel in [c for c in channels if get_relay((irc.name, c))]:
|
||||||
for user in irc.channels[channel].users:
|
for user in irc.channels[channel].users:
|
||||||
if (not irc.isInternalClient(user)) and (not isRelayClient(irc, user)):
|
if (not irc.is_internal_client(user)) and (not isRelayClient(irc, user)):
|
||||||
irc.callHooks([irc.sid, 'CLIENTBOT_SERVICE_KICKED', {'channel': channel, 'target': user,
|
irc.call_hooks([irc.sid, 'CLIENTBOT_SERVICE_KICKED', {'channel': channel, 'target': user,
|
||||||
'text': 'Clientbot was force parted (Reason: %s)' % text or 'None',
|
'text': 'Clientbot was force parted (Reason: %s)' % text or 'None',
|
||||||
'parse_as': 'KICK'}])
|
'parse_as': 'KICK'}])
|
||||||
irc.join(irc.pseudoclient.uid, channel)
|
irc.join(irc.pseudoclient.uid, channel)
|
||||||
@ -1045,7 +1045,7 @@ def handle_messages(irc, numeric, command, args):
|
|||||||
notice = (command in ('NOTICE', 'PYLINK_SELF_NOTICE'))
|
notice = (command in ('NOTICE', 'PYLINK_SELF_NOTICE'))
|
||||||
target = args['target']
|
target = args['target']
|
||||||
text = args['text']
|
text = args['text']
|
||||||
if irc.isInternalClient(numeric) and irc.isInternalClient(target):
|
if irc.is_internal_client(numeric) and irc.is_internal_client(target):
|
||||||
# Drop attempted PMs between internal clients (this shouldn't happen,
|
# Drop attempted PMs between internal clients (this shouldn't happen,
|
||||||
# but whatever).
|
# but whatever).
|
||||||
return
|
return
|
||||||
@ -1089,8 +1089,8 @@ def handle_messages(irc, numeric, command, args):
|
|||||||
|
|
||||||
# Skip "from:" formatting for servers; it's messy with longer hostnames.
|
# Skip "from:" formatting for servers; it's messy with longer hostnames.
|
||||||
# Also skip this formatting for servicebot relaying.
|
# Also skip this formatting for servicebot relaying.
|
||||||
if numeric not in irc.servers and not irc.getServiceBot(numeric):
|
if numeric not in irc.servers and not irc.get_service_bot(numeric):
|
||||||
displayedname = irc.getFriendlyName(numeric)
|
displayedname = irc.get_friendly_name(numeric)
|
||||||
real_text = '<%s/%s> %s' % (displayedname, irc.name, text)
|
real_text = '<%s/%s> %s' % (displayedname, irc.name, text)
|
||||||
else:
|
else:
|
||||||
real_text = text
|
real_text = text
|
||||||
@ -1149,7 +1149,7 @@ def handle_messages(irc, numeric, command, args):
|
|||||||
return
|
return
|
||||||
remoteirc = world.networkobjects[homenet]
|
remoteirc = world.networkobjects[homenet]
|
||||||
|
|
||||||
if (not remoteirc.hasCap('can-spawn-clients')) and not conf.conf.get('relay', {}).get('allow_clientbot_pms'):
|
if (not remoteirc.has_cap('can-spawn-clients')) and not conf.conf.get('relay', {}).get('allow_clientbot_pms'):
|
||||||
irc.msg(numeric, 'Private messages to users connected via Clientbot have '
|
irc.msg(numeric, 'Private messages to users connected via Clientbot have '
|
||||||
'been administratively disabled.', notice=True)
|
'been administratively disabled.', notice=True)
|
||||||
return
|
return
|
||||||
@ -1180,17 +1180,17 @@ def handle_kick(irc, source, command, args):
|
|||||||
relay = get_relay((irc.name, channel))
|
relay = get_relay((irc.name, channel))
|
||||||
|
|
||||||
# Special case for clientbot: treat kicks to the PyLink service bot as channel clear.
|
# Special case for clientbot: treat kicks to the PyLink service bot as channel clear.
|
||||||
if (not irc.hasCap('can-spawn-clients')) and irc.pseudoclient and target == irc.pseudoclient.uid:
|
if (not irc.has_cap('can-spawn-clients')) and irc.pseudoclient and target == irc.pseudoclient.uid:
|
||||||
for user in irc.channels[channel].users:
|
for user in irc.channels[channel].users:
|
||||||
if (not irc.isInternalClient(user)) and (not isRelayClient(irc, user)):
|
if (not irc.is_internal_client(user)) and (not isRelayClient(irc, user)):
|
||||||
reason = "Clientbot kicked by %s (Reason: %s)" % (irc.getFriendlyName(source), text)
|
reason = "Clientbot kicked by %s (Reason: %s)" % (irc.get_friendly_name(source), text)
|
||||||
irc.callHooks([irc.sid, 'CLIENTBOT_SERVICE_KICKED', {'channel': channel, 'target': user,
|
irc.call_hooks([irc.sid, 'CLIENTBOT_SERVICE_KICKED', {'channel': channel, 'target': user,
|
||||||
'text': reason, 'parse_as': 'KICK'}])
|
'text': reason, 'parse_as': 'KICK'}])
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
# Don't relay kicks to protected service bots.
|
# Don't relay kicks to protected service bots.
|
||||||
if relay is None or irc.getServiceBot(target):
|
if relay is None or irc.get_service_bot(target):
|
||||||
return
|
return
|
||||||
|
|
||||||
origuser = get_orig_user(irc, target)
|
origuser = get_orig_user(irc, target)
|
||||||
@ -1247,7 +1247,7 @@ def handle_kick(irc, source, command, args):
|
|||||||
# common channels with the target relay network.
|
# common channels with the target relay network.
|
||||||
rsid = get_remote_sid(remoteirc, irc)
|
rsid = get_remote_sid(remoteirc, irc)
|
||||||
log.debug('(%s) relay.handle_kick: Kicking %s from channel %s via %s on behalf of %s/%s', irc.name, real_target, remotechan, rsid, kicker, irc.name)
|
log.debug('(%s) relay.handle_kick: Kicking %s from channel %s via %s on behalf of %s/%s', irc.name, real_target, remotechan, rsid, kicker, irc.name)
|
||||||
if not irc.hasCap('can-spawn-clients'):
|
if not irc.has_cap('can-spawn-clients'):
|
||||||
# Special case for clientbot: no kick prefixes are needed.
|
# Special case for clientbot: no kick prefixes are needed.
|
||||||
text = args['text']
|
text = args['text']
|
||||||
else:
|
else:
|
||||||
@ -1328,7 +1328,7 @@ def handle_mode(irc, numeric, command, args):
|
|||||||
rsid = rsid or remoteirc.sid
|
rsid = rsid or remoteirc.sid
|
||||||
remoteirc.mode(rsid, remotechan, supported_modes)
|
remoteirc.mode(rsid, remotechan, supported_modes)
|
||||||
else: # Mode change blocked by CLAIM.
|
else: # Mode change blocked by CLAIM.
|
||||||
reversed_modes = irc.reverseModes(target, modes, oldobj=oldchan)
|
reversed_modes = irc.reverse_modes(target, modes, oldobj=oldchan)
|
||||||
log.debug('(%s) relay.handle_mode: Reversing mode changes of %r with %r (CLAIM).',
|
log.debug('(%s) relay.handle_mode: Reversing mode changes of %r with %r (CLAIM).',
|
||||||
irc.name, modes, reversed_modes)
|
irc.name, modes, reversed_modes)
|
||||||
if reversed_modes:
|
if reversed_modes:
|
||||||
@ -1468,7 +1468,7 @@ def handle_services_login(irc, numeric, command, args):
|
|||||||
"""
|
"""
|
||||||
for netname, user in relayusers[(irc.name, numeric)].items():
|
for netname, user in relayusers[(irc.name, numeric)].items():
|
||||||
remoteirc = world.networkobjects[netname]
|
remoteirc = world.networkobjects[netname]
|
||||||
remoteirc.callHooks([user, 'PYLINK_RELAY_SERVICES_LOGIN', args])
|
remoteirc.call_hooks([user, 'PYLINK_RELAY_SERVICES_LOGIN', args])
|
||||||
utils.add_hook(handle_services_login, 'CLIENT_SERVICES_LOGIN')
|
utils.add_hook(handle_services_login, 'CLIENT_SERVICES_LOGIN')
|
||||||
|
|
||||||
def handle_disconnect(irc, numeric, command, args):
|
def handle_disconnect(irc, numeric, command, args):
|
||||||
@ -1575,14 +1575,14 @@ def create(irc, source, args):
|
|||||||
|
|
||||||
Opens up the given channel over PyLink Relay."""
|
Opens up the given channel over PyLink Relay."""
|
||||||
try:
|
try:
|
||||||
channel = irc.toLower(args[0])
|
channel = irc.to_lower(args[0])
|
||||||
except IndexError:
|
except IndexError:
|
||||||
irc.error("Not enough arguments. Needs 1: channel.")
|
irc.error("Not enough arguments. Needs 1: channel.")
|
||||||
return
|
return
|
||||||
if not utils.isChannel(channel):
|
if not utils.isChannel(channel):
|
||||||
irc.error('Invalid channel %r.' % channel)
|
irc.error('Invalid channel %r.' % channel)
|
||||||
return
|
return
|
||||||
if not irc.hasCap('can-host-relay'):
|
if not irc.has_cap('can-host-relay'):
|
||||||
irc.error('Clientbot networks cannot be used to host a relay.')
|
irc.error('Clientbot networks cannot be used to host a relay.')
|
||||||
return
|
return
|
||||||
if source not in irc.channels[channel].users:
|
if source not in irc.channels[channel].users:
|
||||||
@ -1598,7 +1598,7 @@ def create(irc, source, args):
|
|||||||
irc.error('Channel %r is already part of a relay.' % channel)
|
irc.error('Channel %r is already part of a relay.' % channel)
|
||||||
return
|
return
|
||||||
|
|
||||||
creator = irc.getHostmask(source)
|
creator = irc.get_hostmask(source)
|
||||||
# Create the relay database entry with the (network name, channel name)
|
# Create the relay database entry with the (network name, channel name)
|
||||||
# pair - this is just a dict with various keys.
|
# pair - this is just a dict with various keys.
|
||||||
db[(irc.name, channel)] = {'claim': [irc.name], 'links': set(),
|
db[(irc.name, channel)] = {'claim': [irc.name], 'links': set(),
|
||||||
@ -1622,11 +1622,11 @@ def destroy(irc, source, args):
|
|||||||
|
|
||||||
Removes the given channel from the PyLink Relay, delinking all networks linked to it. If the home network is given and you are logged in as admin, this can also remove relay channels from other networks."""
|
Removes the given channel from the PyLink Relay, delinking all networks linked to it. If the home network is given and you are logged in as admin, this can also remove relay channels from other networks."""
|
||||||
try: # Two args were given: first one is network name, second is channel.
|
try: # Two args were given: first one is network name, second is channel.
|
||||||
channel = irc.toLower(args[1])
|
channel = irc.to_lower(args[1])
|
||||||
network = args[0]
|
network = args[0]
|
||||||
except IndexError:
|
except IndexError:
|
||||||
try: # One argument was given; assume it's just the channel.
|
try: # One argument was given; assume it's just the channel.
|
||||||
channel = irc.toLower(args[0])
|
channel = irc.to_lower(args[0])
|
||||||
network = irc.name
|
network = irc.name
|
||||||
except IndexError:
|
except IndexError:
|
||||||
irc.error("Not enough arguments. Needs 1-2: channel, network (optional).")
|
irc.error("Not enough arguments. Needs 1-2: channel, network (optional).")
|
||||||
@ -1649,7 +1649,7 @@ def destroy(irc, source, args):
|
|||||||
del db[entry]
|
del db[entry]
|
||||||
|
|
||||||
log.info('(%s) relay: Channel %s destroyed by %s.', irc.name,
|
log.info('(%s) relay: Channel %s destroyed by %s.', irc.name,
|
||||||
channel, irc.getHostmask(source))
|
channel, irc.get_hostmask(source))
|
||||||
irc.reply('Done.')
|
irc.reply('Done.')
|
||||||
else:
|
else:
|
||||||
irc.error("No such channel %r exists. If you're trying to delink a channel from "
|
irc.error("No such channel %r exists. If you're trying to delink a channel from "
|
||||||
@ -1703,8 +1703,8 @@ def link(irc, source, args):
|
|||||||
args = link_parser.parse_args(args)
|
args = link_parser.parse_args(args)
|
||||||
|
|
||||||
# Normalize channel case
|
# Normalize channel case
|
||||||
channel = irc.toLower(args.channel)
|
channel = irc.to_lower(args.channel)
|
||||||
localchan = irc.toLower(args.localchannel or args.channel)
|
localchan = irc.to_lower(args.localchannel or args.channel)
|
||||||
remotenet = args.remotenet
|
remotenet = args.remotenet
|
||||||
|
|
||||||
for c in (channel, localchan):
|
for c in (channel, localchan):
|
||||||
@ -1774,7 +1774,7 @@ def link(irc, source, args):
|
|||||||
|
|
||||||
our_ts = irc.channels[localchan].ts
|
our_ts = irc.channels[localchan].ts
|
||||||
their_ts = world.networkobjects[remotenet].channels[channel].ts
|
their_ts = world.networkobjects[remotenet].channels[channel].ts
|
||||||
if (our_ts < their_ts) and irc.hasCap('has-ts'):
|
if (our_ts < their_ts) and irc.has_cap('has-ts'):
|
||||||
log.debug('(%s) relay: Blocking link request %s%s -> %s%s due to bad TS (%s < %s)', irc.name,
|
log.debug('(%s) relay: Blocking link request %s%s -> %s%s due to bad TS (%s < %s)', irc.name,
|
||||||
irc.name, localchan, remotenet, args.channel, our_ts, their_ts)
|
irc.name, localchan, remotenet, args.channel, our_ts, their_ts)
|
||||||
irc.error("The channel creation date (TS) on %s (%s) is lower than the target "
|
irc.error("The channel creation date (TS) on %s (%s) is lower than the target "
|
||||||
@ -1785,7 +1785,7 @@ def link(irc, source, args):
|
|||||||
|
|
||||||
entry['links'].add((irc.name, localchan))
|
entry['links'].add((irc.name, localchan))
|
||||||
log.info('(%s) relay: Channel %s linked to %s%s by %s.', irc.name,
|
log.info('(%s) relay: Channel %s linked to %s%s by %s.', irc.name,
|
||||||
localchan, remotenet, args.channel, irc.getHostmask(source))
|
localchan, remotenet, args.channel, irc.get_hostmask(source))
|
||||||
initialize_channel(irc, localchan)
|
initialize_channel(irc, localchan)
|
||||||
irc.reply('Done.')
|
irc.reply('Done.')
|
||||||
link = utils.add_cmd(link, featured=True)
|
link = utils.add_cmd(link, featured=True)
|
||||||
@ -1796,7 +1796,7 @@ def delink(irc, source, args):
|
|||||||
Delinks the given channel from PyLink Relay. \x02network\x02 must and can only be specified if you are on the host network for the channel given, and allows you to pick which network to delink.
|
Delinks the given channel from PyLink Relay. \x02network\x02 must and can only be specified if you are on the host network for the channel given, and allows you to pick which network to delink.
|
||||||
To remove a relay channel entirely, use the 'destroy' command instead."""
|
To remove a relay channel entirely, use the 'destroy' command instead."""
|
||||||
try:
|
try:
|
||||||
channel = irc.toLower(args[0])
|
channel = irc.to_lower(args[0])
|
||||||
except IndexError:
|
except IndexError:
|
||||||
irc.error("Not enough arguments. Needs 1-2: channel, remote netname (optional).")
|
irc.error("Not enough arguments. Needs 1-2: channel, remote netname (optional).")
|
||||||
return
|
return
|
||||||
@ -1829,7 +1829,7 @@ def delink(irc, source, args):
|
|||||||
db[entry]['links'].remove((irc.name, channel))
|
db[entry]['links'].remove((irc.name, channel))
|
||||||
irc.reply('Done.')
|
irc.reply('Done.')
|
||||||
log.info('(%s) relay: Channel %s delinked from %s%s by %s.', irc.name,
|
log.info('(%s) relay: Channel %s delinked from %s%s by %s.', irc.name,
|
||||||
channel, entry[0], entry[1], irc.getHostmask(source))
|
channel, entry[0], entry[1], irc.get_hostmask(source))
|
||||||
else:
|
else:
|
||||||
irc.error('No such relay %r.' % channel)
|
irc.error('No such relay %r.' % channel)
|
||||||
delink = utils.add_cmd(delink, featured=True)
|
delink = utils.add_cmd(delink, featured=True)
|
||||||
@ -1880,7 +1880,7 @@ def linked(irc, source, args):
|
|||||||
# Only show secret channels to opers or those in the channel, and tag them as
|
# Only show secret channels to opers or those in the channel, and tag them as
|
||||||
# [secret].
|
# [secret].
|
||||||
localchan = get_remote_channel(remoteirc, irc, channel)
|
localchan = get_remote_channel(remoteirc, irc, channel)
|
||||||
if irc.isOper(source) or (localchan and source in irc.channels[localchan].users):
|
if irc.is_oper(source) or (localchan and source in irc.channels[localchan].users):
|
||||||
s += '\x02[secret]\x02 '
|
s += '\x02[secret]\x02 '
|
||||||
else:
|
else:
|
||||||
continue
|
continue
|
||||||
@ -1896,7 +1896,7 @@ def linked(irc, source, args):
|
|||||||
|
|
||||||
irc.reply(s, private=True)
|
irc.reply(s, private=True)
|
||||||
|
|
||||||
if irc.isOper(source):
|
if irc.is_oper(source):
|
||||||
s = ''
|
s = ''
|
||||||
|
|
||||||
# If the caller is an oper, we can show the hostmasks of people
|
# If the caller is an oper, we can show the hostmasks of people
|
||||||
@ -1927,7 +1927,7 @@ def linkacl(irc, source, args):
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
cmd = args[0].lower()
|
cmd = args[0].lower()
|
||||||
channel = irc.toLower(args[1])
|
channel = irc.to_lower(args[1])
|
||||||
except IndexError:
|
except IndexError:
|
||||||
irc.error(missingargs)
|
irc.error(missingargs)
|
||||||
return
|
return
|
||||||
@ -1974,7 +1974,7 @@ def showuser(irc, source, args):
|
|||||||
# No errors here; showuser from the commands plugin already does this
|
# No errors here; showuser from the commands plugin already does this
|
||||||
# for us.
|
# for us.
|
||||||
return
|
return
|
||||||
u = irc.nickToUid(target)
|
u = irc.nick_to_uid(target)
|
||||||
if u:
|
if u:
|
||||||
irc.reply("Showing relay information on user \x02%s\x02:" % irc.users[u].nick, private=True)
|
irc.reply("Showing relay information on user \x02%s\x02:" % irc.users[u].nick, private=True)
|
||||||
try:
|
try:
|
||||||
@ -1997,7 +1997,7 @@ def showuser(irc, source, args):
|
|||||||
relay = get_relay((irc.name, ch))
|
relay = get_relay((irc.name, ch))
|
||||||
if relay:
|
if relay:
|
||||||
relaychannels.append(''.join(relay))
|
relaychannels.append(''.join(relay))
|
||||||
if relaychannels and (irc.isOper(source) or u == source):
|
if relaychannels and (irc.is_oper(source) or u == source):
|
||||||
irc.reply("\x02Relay channels\x02: %s" % ' '.join(relaychannels), private=True)
|
irc.reply("\x02Relay channels\x02: %s" % ' '.join(relaychannels), private=True)
|
||||||
|
|
||||||
@utils.add_cmd
|
@utils.add_cmd
|
||||||
@ -2006,7 +2006,7 @@ def showchan(irc, source, args):
|
|||||||
|
|
||||||
Shows relay data about the given channel. This supplements the 'showchan' command in the 'commands' plugin, which provides more general information."""
|
Shows relay data about the given channel. This supplements the 'showchan' command in the 'commands' plugin, which provides more general information."""
|
||||||
try:
|
try:
|
||||||
channel = irc.toLower(args[0])
|
channel = irc.to_lower(args[0])
|
||||||
except IndexError:
|
except IndexError:
|
||||||
return
|
return
|
||||||
if channel not in irc.channels:
|
if channel not in irc.channels:
|
||||||
@ -2017,7 +2017,7 @@ def showchan(irc, source, args):
|
|||||||
c = irc.channels[channel]
|
c = irc.channels[channel]
|
||||||
|
|
||||||
# Only show verbose info if caller is oper or is in the target channel.
|
# Only show verbose info if caller is oper or is in the target channel.
|
||||||
verbose = source in c.users or irc.isOper(source)
|
verbose = source in c.users or irc.is_oper(source)
|
||||||
secret = ('s', None) in c.modes
|
secret = ('s', None) in c.modes
|
||||||
if secret and not verbose:
|
if secret and not verbose:
|
||||||
# Hide secret channels from normal users.
|
# Hide secret channels from normal users.
|
||||||
@ -2055,7 +2055,7 @@ def claim(irc, source, args):
|
|||||||
as well).
|
as well).
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
channel = irc.toLower(args[0])
|
channel = irc.to_lower(args[0])
|
||||||
except IndexError:
|
except IndexError:
|
||||||
irc.error("Not enough arguments. Needs 1-2: channel, list of networks (optional).")
|
irc.error("Not enough arguments. Needs 1-2: channel, list of networks (optional).")
|
||||||
return
|
return
|
||||||
|
@ -45,7 +45,7 @@ def cb_relay_core(irc, source, command, args):
|
|||||||
|
|
||||||
if irc.pseudoclient and relay:
|
if irc.pseudoclient and relay:
|
||||||
try:
|
try:
|
||||||
sourcename = irc.getFriendlyName(source)
|
sourcename = irc.get_friendly_name(source)
|
||||||
except KeyError: # User has left due to /quit
|
except KeyError: # User has left due to /quit
|
||||||
sourcename = args['userdata'].nick
|
sourcename = args['userdata'].nick
|
||||||
|
|
||||||
@ -87,7 +87,7 @@ def cb_relay_core(irc, source, command, args):
|
|||||||
text_template = string.Template(text_template)
|
text_template = string.Template(text_template)
|
||||||
|
|
||||||
if text_template:
|
if text_template:
|
||||||
if irc.getServiceBot(source):
|
if irc.get_service_bot(source):
|
||||||
# HACK: service bots are global and lack the relay state we look for.
|
# HACK: service bots are global and lack the relay state we look for.
|
||||||
# just pretend the message comes from the current network.
|
# just pretend the message comes from the current network.
|
||||||
log.debug('(%s) relay_cb_core: Overriding network origin to local (source=%s)', irc.name, source)
|
log.debug('(%s) relay_cb_core: Overriding network origin to local (source=%s)', irc.name, source)
|
||||||
@ -131,7 +131,7 @@ def cb_relay_core(irc, source, command, args):
|
|||||||
|
|
||||||
if source in irc.users:
|
if source in irc.users:
|
||||||
try:
|
try:
|
||||||
identhost = irc.getHostmask(source).split('!')[-1]
|
identhost = irc.get_hostmask(source).split('!')[-1]
|
||||||
except KeyError: # User got removed due to quit
|
except KeyError: # User got removed due to quit
|
||||||
identhost = '%s@%s' % (args['olduser'].ident, args['olduser'].host)
|
identhost = '%s@%s' % (args['olduser'].ident, args['olduser'].host)
|
||||||
# This is specifically spaced so that ident@host is only shown for users that have
|
# This is specifically spaced so that ident@host is only shown for users that have
|
||||||
@ -142,7 +142,7 @@ def cb_relay_core(irc, source, command, args):
|
|||||||
|
|
||||||
# $target_nick: Convert the target for kicks, etc. from a UID to a nick
|
# $target_nick: Convert the target for kicks, etc. from a UID to a nick
|
||||||
if args.get("target") in irc.users:
|
if args.get("target") in irc.users:
|
||||||
args["target_nick"] = irc.getFriendlyName(args['target'])
|
args["target_nick"] = irc.get_friendly_name(args['target'])
|
||||||
|
|
||||||
args.update({'netname': netname, 'sender': sourcename, 'sender_identhost': identhost,
|
args.update({'netname': netname, 'sender': sourcename, 'sender_identhost': identhost,
|
||||||
'colored_sender': color_text(sourcename), 'colored_netname': color_text(netname)})
|
'colored_sender': color_text(sourcename), 'colored_netname': color_text(netname)})
|
||||||
@ -204,7 +204,7 @@ def rpm(irc, source, args):
|
|||||||
return
|
return
|
||||||
|
|
||||||
relay = world.plugins.get('relay')
|
relay = world.plugins.get('relay')
|
||||||
if irc.hasCap('can-spawn-clients'):
|
if irc.has_cap('can-spawn-clients'):
|
||||||
irc.error('This command is only supported on Clientbot networks. Try /msg %s <text>' % target)
|
irc.error('This command is only supported on Clientbot networks. Try /msg %s <text>' % target)
|
||||||
return
|
return
|
||||||
elif relay is None:
|
elif relay is None:
|
||||||
@ -218,7 +218,7 @@ def rpm(irc, source, args):
|
|||||||
'administratively disabled.')
|
'administratively disabled.')
|
||||||
return
|
return
|
||||||
|
|
||||||
uid = irc.nickToUid(target)
|
uid = irc.nick_to_uid(target)
|
||||||
if not uid:
|
if not uid:
|
||||||
irc.error('Unknown user %s.' % target)
|
irc.error('Unknown user %s.' % target)
|
||||||
return
|
return
|
||||||
@ -226,7 +226,7 @@ def rpm(irc, source, args):
|
|||||||
irc.error('%s is not a relay user.' % target)
|
irc.error('%s is not a relay user.' % target)
|
||||||
return
|
return
|
||||||
else:
|
else:
|
||||||
assert not irc.isInternalClient(source), "rpm is not allowed from PyLink bots"
|
assert not irc.is_internal_client(source), "rpm is not allowed from PyLink bots"
|
||||||
# Send the message through relay by faking a hook for its handler.
|
# Send the message through relay by faking a hook for its handler.
|
||||||
relay.handle_messages(irc, source, 'RELAY_CLIENTBOT_PRIVMSG', {'target': uid, 'text': text})
|
relay.handle_messages(irc, source, 'RELAY_CLIENTBOT_PRIVMSG', {'target': uid, 'text': text})
|
||||||
irc.reply('Message sent.')
|
irc.reply('Message sent.')
|
||||||
|
@ -78,7 +78,7 @@ def _map(irc, source, args, show_relay=True):
|
|||||||
# This is a relay server - display the remote map of the network it represents
|
# This is a relay server - display the remote map of the network it represents
|
||||||
relay_server = serverlist[leaf].remote
|
relay_server = serverlist[leaf].remote
|
||||||
remoteirc = world.networkobjects[relay_server]
|
remoteirc = world.networkobjects[relay_server]
|
||||||
if remoteirc.hasCap('can-track-servers'):
|
if remoteirc.has_cap('can-track-servers'):
|
||||||
# Only ever show relay subservers once - this prevents infinite loops.
|
# Only ever show relay subservers once - this prevents infinite loops.
|
||||||
showall(remoteirc, remoteirc.sid, hops=hops, is_relay_server=True)
|
showall(remoteirc, remoteirc.sid, hops=hops, is_relay_server=True)
|
||||||
|
|
||||||
|
@ -18,7 +18,7 @@ def handle_kill(irc, numeric, command, args):
|
|||||||
automatically disconnects from the network.
|
automatically disconnects from the network.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if (args['userdata'] and irc.isInternalServer(args['userdata'].server)) or irc.isInternalClient(args['target']):
|
if (args['userdata'] and irc.is_internal_server(args['userdata'].server)) or irc.is_internal_client(args['target']):
|
||||||
if killcache.setdefault(irc.name, 1) >= length:
|
if killcache.setdefault(irc.name, 1) >= length:
|
||||||
log.error('(%s) servprotect: Too many kills received, aborting!', irc.name)
|
log.error('(%s) servprotect: Too many kills received, aborting!', irc.name)
|
||||||
irc.disconnect()
|
irc.disconnect()
|
||||||
@ -33,7 +33,7 @@ def handle_save(irc, numeric, command, args):
|
|||||||
Tracks SAVEs (nick collision) against PyLink clients. If too many are received,
|
Tracks SAVEs (nick collision) against PyLink clients. If too many are received,
|
||||||
automatically disconnects from the network.
|
automatically disconnects from the network.
|
||||||
"""
|
"""
|
||||||
if irc.isInternalClient(args['target']):
|
if irc.is_internal_client(args['target']):
|
||||||
if savecache.setdefault(irc.name, 0) >= length:
|
if savecache.setdefault(irc.name, 0) >= length:
|
||||||
log.error('(%s) servprotect: Too many nick collisions, aborting!', irc.name)
|
log.error('(%s) servprotect: Too many nick collisions, aborting!', irc.name)
|
||||||
irc.disconnect()
|
irc.disconnect()
|
||||||
|
Loading…
Reference in New Issue
Block a user