diff --git a/ircked.py b/ircked.py index 2ca0cae..1e3e550 100644 --- a/ircked.py +++ b/ircked.py @@ -1,4 +1,14 @@ import socket + +def default_event_handler(msg, ctx): + print("<<", str(msg)) + if msg.command == "PING": + message.manual("", "PONG", msg.parameters).send(ctx.socket) + if msg.command == "001": + message.manual("", "JOIN", ["#qrs"]).send(ctx.socket) + if msg.command == "PRIVMSG" and "\x01VERSION\x01" in msg.parameters: + message.manual(":"+msg.parameters[0], "PRIVMSG", [msg.prefix[1:].split("!")[0], ":\x01dorfl bot\x01"]).send(s) + class message: def __init__(self): self.prefix = "" @@ -31,22 +41,42 @@ class message: print(self.parameters) print(">>", str(self)) -s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) -s.connect(("irc.rizon.net", 7000)) -#s.send("PASS none\r\n".encode("utf-8")) -s.send("USER dorfl 0 * :dorfl\r\n".encode("utf-8")) -s.send("NICK dorfl\r\n".encode("utf-8")) +class privmsg: + def __init__(self): + self.msg = message() + @staticmethod + def build(fro, to, body): + pm = privmsg() + pm.msg.prefix = ":"+fro + pm.msg.command = "PRIVMSG" + pm.msg.parameters[0] = to + for word in body.split(" "): + pm.msg.parameters.append(word) + pm.msg.parameters[1] = ":"+pm.msg.parameters[1] + +class bot: + def __init__(self): + self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + self.con_to = () + self.nick = "dorfl" + self.user = "dorfl" + self.real = "dorfl" + self.behaviour = {} + def connect_register(self, addy, port): + self.socket.connect((addy, port)) + self.socket.send(f"USER {self.user} 0 * :{self.real}\r\n".encode("utf-8")) + self.socket.send(f"NICK {self.nick}\r\n".encode("utf-8")) + self.con_to = (addy, port) + def run(self, event_handler = default_event_handler): + while True: + data = self.socket.recv(512).decode("utf-8") + if not data: continue + msgs = [message.parse(raw) for raw in [part for part in data.split("\r\n") if part]] + for msg in msgs: + event_handler(msg, self) + +dorfl = bot() +dorfl.connect_register("irc.rizon.net", 7000) -while True: - data = s.recv(512).decode("utf-8") - if not data: continue - msgs = [message.parse(raw) for raw in [part for part in data.split("\r\n") if part]] - for msg in msgs: - print("<<", str(msg)) - if msg.command == "PING": - message.manual("", "PONG", msg.parameters).send(s) - if msg.command == "001": - message.manual("", "JOIN", ["#qrs"]).send(s) - if msg.command == "PRIVMSG" and "\x01VERSION\x01" in msg.parameters: - message.manual(":"+msg.parameters[0], "PRIVMSG", [msg.prefix[1:].split("!")[0], ":\x01dorfl bot\x01"]).send(s) +dorfl.run() s.close() \ No newline at end of file