mirror of
https://github.com/jlu5/PyLink.git
synced 2024-12-25 12:12:53 +01:00
Move unreal's handle_events block to ts6_common
Precursor to part 2 of #156.
This commit is contained in:
parent
2fd0a8ae74
commit
a220659eaf
@ -34,6 +34,15 @@ class TS6BaseProtocol(Protocol):
|
|||||||
else:
|
else:
|
||||||
return sname # Fall back to given text instead of None
|
return sname # Fall back to given text instead of None
|
||||||
|
|
||||||
|
def _getNick(self, target):
|
||||||
|
"""Converts a nick argument to its matching UID. This differs from irc.nickToUid()
|
||||||
|
in that it returns the original text instead of None, if no matching nick is found."""
|
||||||
|
target = self.irc.nickToUid(target) or target
|
||||||
|
if target not in self.irc.users and not utils.isChannel(target):
|
||||||
|
log.debug("(%s) Possible desync? Got command target %s, who "
|
||||||
|
"isn't in our user list!", self.irc.name, target)
|
||||||
|
return target
|
||||||
|
|
||||||
### OUTGOING COMMANDS
|
### OUTGOING COMMANDS
|
||||||
|
|
||||||
def numeric(self, source, numeric, target, text):
|
def numeric(self, source, numeric, target, text):
|
||||||
@ -153,6 +162,50 @@ class TS6BaseProtocol(Protocol):
|
|||||||
|
|
||||||
### HANDLERS
|
### HANDLERS
|
||||||
|
|
||||||
|
def handle_events(self, data):
|
||||||
|
"""Event handler for TS6 protocols.
|
||||||
|
|
||||||
|
This passes most commands to the various handle_ABCD() functions
|
||||||
|
elsewhere defined protocol modules, coersing various sender prefixes
|
||||||
|
from nicks and server names to UIDs and SIDs respectively,
|
||||||
|
whenever possible.
|
||||||
|
|
||||||
|
Commands sent without an explicit sender prefix will have them set to
|
||||||
|
the SID of the uplink server.
|
||||||
|
"""
|
||||||
|
data = data.split(" ")
|
||||||
|
try: # Message starts with a SID/UID prefix.
|
||||||
|
args = self.parseTS6Args(data)
|
||||||
|
sender = args[0]
|
||||||
|
command = args[1]
|
||||||
|
args = args[2:]
|
||||||
|
# If the sender isn't in UID format, try to convert it automatically.
|
||||||
|
# Unreal's protocol, for example, isn't quite consistent with this yet!
|
||||||
|
sender_server = self._getSid(sender)
|
||||||
|
if sender_server in self.irc.servers:
|
||||||
|
# Sender is a server when converted from name to SID.
|
||||||
|
numeric = sender_server
|
||||||
|
else:
|
||||||
|
# Sender is a user.
|
||||||
|
numeric = self._getNick(sender)
|
||||||
|
|
||||||
|
# parseTS6Args() will raise IndexError if the TS6 sender prefix is missing.
|
||||||
|
except IndexError:
|
||||||
|
# Raw command without an explicit sender; assume it's being sent by our uplink.
|
||||||
|
args = self.parseArgs(data)
|
||||||
|
numeric = self.irc.uplink
|
||||||
|
command = args[0]
|
||||||
|
args = args[1:]
|
||||||
|
|
||||||
|
try:
|
||||||
|
func = getattr(self, 'handle_'+command.lower())
|
||||||
|
except AttributeError: # unhandled command
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
parsed_args = func(numeric, command, args)
|
||||||
|
if parsed_args is not None:
|
||||||
|
return [numeric, command, parsed_args]
|
||||||
|
|
||||||
def handle_privmsg(self, source, command, args):
|
def handle_privmsg(self, source, command, args):
|
||||||
"""Handles incoming PRIVMSG/NOTICE."""
|
"""Handles incoming PRIVMSG/NOTICE."""
|
||||||
# <- :70MAAAAAA PRIVMSG #dev :afasfsa
|
# <- :70MAAAAAA PRIVMSG #dev :afasfsa
|
||||||
|
@ -477,58 +477,6 @@ class UnrealProtocol(TS6BaseProtocol):
|
|||||||
log.debug('(%s) self.irc.connected set!', self.irc.name)
|
log.debug('(%s) self.irc.connected set!', self.irc.name)
|
||||||
self.irc.connected.set()
|
self.irc.connected.set()
|
||||||
|
|
||||||
def _getNick(self, target):
|
|
||||||
"""Converts a nick argument to its matching UID. This differs from irc.nickToUid()
|
|
||||||
in that it returns the original text instead of None, if no matching nick is found."""
|
|
||||||
target = self.irc.nickToUid(target) or target
|
|
||||||
if target not in self.irc.users and not utils.isChannel(target):
|
|
||||||
log.debug("(%s) Possible desync? Got command target %s, who "
|
|
||||||
"isn't in our user list!", self.irc.name, target)
|
|
||||||
return target
|
|
||||||
|
|
||||||
def handle_events(self, data):
|
|
||||||
"""Event handler for the UnrealIRCd 3.4+ protocol.
|
|
||||||
|
|
||||||
This passes most commands to the various handle_ABCD() functions
|
|
||||||
elsewhere in this module, coersing various sender prefixes from nicks
|
|
||||||
to UIDs wherever possible.
|
|
||||||
|
|
||||||
Unreal 3.4's protocol operates similarly to TS6, where lines can have :
|
|
||||||
indicating a long argument lasting to the end of the line. Not all commands
|
|
||||||
send an explicit sender prefix, in which case, it will be set to the SID
|
|
||||||
of the uplink server.
|
|
||||||
"""
|
|
||||||
data = data.split(" ")
|
|
||||||
try: # Message starts with a SID/UID prefix.
|
|
||||||
args = self.parseTS6Args(data)
|
|
||||||
sender = args[0]
|
|
||||||
command = args[1]
|
|
||||||
args = args[2:]
|
|
||||||
# If the sender isn't in UID format, try to convert it automatically.
|
|
||||||
# Unreal's protocol isn't quite consistent with this yet!
|
|
||||||
sender_server = self._getSid(sender)
|
|
||||||
if sender_server in self.irc.servers:
|
|
||||||
# Sender is a server when converted from name to SID.
|
|
||||||
numeric = sender_server
|
|
||||||
else:
|
|
||||||
# Sender is a user.
|
|
||||||
numeric = self._getNick(sender)
|
|
||||||
# parseTS6Args() will raise IndexError if the TS6 sender prefix is missing.
|
|
||||||
except IndexError:
|
|
||||||
# Raw command without an explicit sender; assume it's being sent by our uplink.
|
|
||||||
args = self.parseArgs(data)
|
|
||||||
numeric = self.irc.uplink
|
|
||||||
command = args[0]
|
|
||||||
args = args[1:]
|
|
||||||
try:
|
|
||||||
func = getattr(self, 'handle_'+command.lower())
|
|
||||||
except AttributeError: # unhandled command
|
|
||||||
pass
|
|
||||||
else:
|
|
||||||
parsed_args = func(numeric, command, args)
|
|
||||||
if parsed_args is not None:
|
|
||||||
return [numeric, command, parsed_args]
|
|
||||||
|
|
||||||
def handle_privmsg(self, source, command, args):
|
def handle_privmsg(self, source, command, args):
|
||||||
# Convert nicks to UIDs, where they exist.
|
# Convert nicks to UIDs, where they exist.
|
||||||
target = self._getNick(args[0])
|
target = self._getNick(args[0])
|
||||||
|
Loading…
Reference in New Issue
Block a user