mirror of
https://github.com/jlu5/PyLink.git
synced 2024-11-24 03:29:28 +01:00
clientbot: add support for IRCv3.2 account-tag (#290)
This commit is contained in:
parent
48c6765411
commit
85f283c5f8
@ -3,7 +3,8 @@ clientbot.py: Clientbot (regular IRC bot) protocol module for PyLink.
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
# Here be dragons. There are lots of hacks and stubs in this module to recreate the same sort of state
|
# Here be dragons. There are lots of hacks and stubs in this module to recreate the same sort of state
|
||||||
# that a regular server would have (e.g. spawning virtual users for things like Relay).
|
# that a regular server would have (e.g. spawning virtual users for things like Relay). Somehow it
|
||||||
|
# works on most networks though!
|
||||||
|
|
||||||
import time
|
import time
|
||||||
import threading
|
import threading
|
||||||
@ -17,7 +18,8 @@ from pylinkirc.classes import *
|
|||||||
FALLBACK_REALNAME = 'PyLink Relay Mirror Client'
|
FALLBACK_REALNAME = 'PyLink Relay Mirror Client'
|
||||||
|
|
||||||
# IRCv3 capabilities to request when available
|
# IRCv3 capabilities to request when available
|
||||||
IRCV3_CAPABILITIES = {'multi-prefix', 'sasl', 'away-notify', 'userhost-in-names', 'chghost', 'account-notify'}
|
IRCV3_CAPABILITIES = {'multi-prefix', 'sasl', 'away-notify', 'userhost-in-names', 'chghost', 'account-notify',
|
||||||
|
'account-tag'}
|
||||||
|
|
||||||
class ClientbotWrapperProtocol(IRCCommonProtocol):
|
class ClientbotWrapperProtocol(IRCCommonProtocol):
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
@ -426,6 +428,12 @@ class ClientbotWrapperProtocol(IRCCommonProtocol):
|
|||||||
nick = sender # Treat the sender prefix we received as a nick.
|
nick = sender # Treat the sender prefix we received as a nick.
|
||||||
idsource = self._get_UID(nick, ident, host)
|
idsource = self._get_UID(nick, ident, host)
|
||||||
|
|
||||||
|
if idsource in self.users:
|
||||||
|
# Handle IRCv3.2 account-tag.
|
||||||
|
account_tag = tags.get('account')
|
||||||
|
if account_tag is not None and account_tag != self.users[idsource].services_account:
|
||||||
|
self.call_hooks([idsource, 'CLIENT_SERVICES_LOGIN', {'text': account_tag}])
|
||||||
|
|
||||||
try:
|
try:
|
||||||
func = getattr(self, 'handle_'+command.lower())
|
func = getattr(self, 'handle_'+command.lower())
|
||||||
except AttributeError: # unhandled command
|
except AttributeError: # unhandled command
|
||||||
@ -783,7 +791,8 @@ class ClientbotWrapperProtocol(IRCCommonProtocol):
|
|||||||
if account == '*': # Logout
|
if account == '*': # Logout
|
||||||
account = ''
|
account = ''
|
||||||
|
|
||||||
return {'text': account}
|
if account != self.users[source].services_account:
|
||||||
|
return {'text': account}
|
||||||
|
|
||||||
def handle_join(self, source, command, args):
|
def handle_join(self, source, command, args):
|
||||||
"""
|
"""
|
||||||
|
Loading…
Reference in New Issue
Block a user