[TASK] Almost complete ident parsing.

This commit is contained in:
Jan Philipp Timme 2015-10-25 01:13:15 +02:00
parent 83f953aaa8
commit 7b08f9512b
2 changed files with 29 additions and 2 deletions

7
bot.py
View File

@ -55,6 +55,7 @@ class ManagedProtocol(asyncio.Protocol):
def get_config(self): def get_config(self):
return self._config return self._config
class IrcProtocol(ManagedProtocol): class IrcProtocol(ManagedProtocol):
"""Implementation of the IRC protocol. """Implementation of the IRC protocol.
""" """
@ -97,6 +98,7 @@ class IrcProtocol(ManagedProtocol):
self.send_data(data) self.send_data(data)
def msg_received(self, msg): def msg_received(self, msg):
print(str(msg), msg.data)
if isinstance(msg, irc.Ping): if isinstance(msg, irc.Ping):
self.send_msg(irc.Pong(msg)) self.send_msg(irc.Pong(msg))
if isinstance(msg, irc.Message) and msg.get('command') == "376": if isinstance(msg, irc.Message) and msg.get('command') == "376":
@ -105,6 +107,11 @@ class IrcProtocol(ManagedProtocol):
if msg.message == "-cycle": if msg.message == "-cycle":
self.send_msg(irc.Part(msg.target, "Hop!")) self.send_msg(irc.Part(msg.target, "Hop!"))
self.send_msg(irc.Join(msg.target)) self.send_msg(irc.Join(msg.target))
if isinstance(msg, irc.Privmsg):
if msg.message.startswith("\x01") and msg.message.endswith("\x01"):
text = msg.message.strip("\x01")
if text.upper() == "VERSION":
self.send_msg(irc.Privmsg(msg.source, "\x01HalloWelt lustiger Client v0.0.1\x01"))
def ready(self): def ready(self):
for channel in self._config["channels"]: for channel in self._config["channels"]:

24
irc.py
View File

@ -16,7 +16,23 @@ def parse(line):
tmp_args = line.split() tmp_args = line.split()
command, *middle = tmp_args command, *middle = tmp_args
params = middle[:] params = middle[:]
return {"prefix": prefix, "subject": subject, "command": command, "params": params, "trailing": trailing} # Now prepare parsing the subject if possible.
if subject != "" and "!" in subject:
s_nick, s_identname = subject.split("!", 1)
if "@" in s_identname:
s_identname, s_host = s_identname.split("@", 1)
else:
s_nick = s_identname = s_host = subject
return {
"prefix": prefix,
"subject": subject,
"command": command,
"params": params,
"trailing": trailing,
"nick": s_nick,
"ident": s_identname,
"host": s_host
}
class Message(object): class Message(object):
@ -30,12 +46,16 @@ class Message(object):
"subject": "", "subject": "",
"command": "", "command": "",
"params": "", "params": "",
"trailing": "" "trailing": "",
"nick": "",
"ident": "",
"host": ""
} }
@classmethod @classmethod
def from_string(cls, string): def from_string(cls, string):
data = parse(string) data = parse(string)
print(data)
instance = cls._command_map.get(data["command"].upper(), cls)() instance = cls._command_map.get(data["command"].upper(), cls)()
instance.update(data) instance.update(data)
return instance return instance