mirror of
https://github.com/jlu5/PyLink.git
synced 2024-12-17 23:52:49 +01:00
Add User.get_fields(), and rework plugins to fix $nick broken expansions
User.nick is no longer a writable attribute since a085aed924
, so it won't show up in __dict__ now.
get_fields() replaces the User.__dict__ hack various plugins used and also provides some new expansion variables:
- $sid and $server expand to the server ID and name respectively
- $modes and $channels are now preformatted strings
- $netname expands to the network name
$manipulatable and $_irc were removed since their values aren't quite meaningful as strings
This commit is contained in:
parent
108d4b86d9
commit
f20fa5e995
31
classes.py
31
classes.py
@ -116,6 +116,37 @@ class User():
|
|||||||
# Update the new nick.
|
# Update the new nick.
|
||||||
self._irc.users.bynick.setdefault(self.lower_nick, []).append(self.uid)
|
self._irc.users.bynick.setdefault(self.lower_nick, []).append(self.uid)
|
||||||
|
|
||||||
|
def get_fields(self):
|
||||||
|
"""
|
||||||
|
Returns all template/substitution-friendly fields for the User object in a read-only dictionary.
|
||||||
|
"""
|
||||||
|
fields = self.__dict__.copy()
|
||||||
|
|
||||||
|
# These don't really make sense in text substitutions
|
||||||
|
for field in ('manipulatable', '_irc'):
|
||||||
|
del fields[field]
|
||||||
|
|
||||||
|
# Pre-format the channels list. FIXME: maybe this should be configurable somehow?
|
||||||
|
fields['channels'] = ','.join(sorted(self.channels))
|
||||||
|
|
||||||
|
# Swap SID and server name for convenience
|
||||||
|
fields['sid'] = self.server
|
||||||
|
try:
|
||||||
|
fields['server'] = self._irc.get_friendly_name(self.server)
|
||||||
|
except KeyError:
|
||||||
|
pass # Keep it as is (i.e. as the SID) if grabbing the server name fails
|
||||||
|
|
||||||
|
# Network name
|
||||||
|
fields['netname'] = self._irc.name
|
||||||
|
|
||||||
|
# Join umodes together
|
||||||
|
fields['modes'] = self._irc.join_modes(self.modes)
|
||||||
|
|
||||||
|
# Add the nick attribute; this isn't in __dict__ because it's a property
|
||||||
|
fields['nick'] = self._nick
|
||||||
|
|
||||||
|
return fields
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return 'User(%s/%s)' % (self.uid, self.nick)
|
return 'User(%s/%s)' % (self.uid, self.nick)
|
||||||
IrcUser = User
|
IrcUser = User
|
||||||
|
@ -114,9 +114,9 @@ def handle_chghost(irc, sender, command, args):
|
|||||||
irc.name, target, ex)
|
irc.name, target, ex)
|
||||||
return
|
return
|
||||||
|
|
||||||
userdata = irc.users.get(target)
|
userobj = irc.users.get(target)
|
||||||
if userdata:
|
if userobj:
|
||||||
_changehost(irc, target, userdata.__dict__)
|
_changehost(irc, target, userobj.get_fields())
|
||||||
|
|
||||||
utils.add_hook(handle_chghost, 'CHGHOST')
|
utils.add_hook(handle_chghost, 'CHGHOST')
|
||||||
|
|
||||||
|
@ -647,7 +647,11 @@ class ClientbotWrapperProtocol(IRCCommonProtocol):
|
|||||||
for line in self.serverdata.get("autoperform", []):
|
for line in self.serverdata.get("autoperform", []):
|
||||||
# Expand substitutions like $nick, $ident, $host
|
# Expand substitutions like $nick, $ident, $host
|
||||||
tmpl = string.Template(line)
|
tmpl = string.Template(line)
|
||||||
line = tmpl.safe_substitute(**self.pseudoclient.__dict__)
|
|
||||||
|
args = self.pseudoclient.get_fields()
|
||||||
|
|
||||||
|
log.debug('(%s) handle_376: bot user fields are %s', self.name, args)
|
||||||
|
line = tmpl.safe_substitute(**args)
|
||||||
self.send(line)
|
self.send(line)
|
||||||
|
|
||||||
# Virtual endburst hook.
|
# Virtual endburst hook.
|
||||||
|
Loading…
Reference in New Issue
Block a user