|
|
@ -1,4 +1,14 @@ |
|
|
|
import socket |
|
|
|
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: |
|
|
|
class message: |
|
|
|
def __init__(self): |
|
|
|
def __init__(self): |
|
|
|
self.prefix = "" |
|
|
|
self.prefix = "" |
|
|
@ -31,22 +41,42 @@ class message: |
|
|
|
print(self.parameters) |
|
|
|
print(self.parameters) |
|
|
|
print(">>", str(self)) |
|
|
|
print(">>", str(self)) |
|
|
|
|
|
|
|
|
|
|
|
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) |
|
|
|
class privmsg: |
|
|
|
s.connect(("irc.rizon.net", 7000)) |
|
|
|
def __init__(self): |
|
|
|
#s.send("PASS none\r\n".encode("utf-8")) |
|
|
|
self.msg = message() |
|
|
|
s.send("USER dorfl 0 * :dorfl\r\n".encode("utf-8")) |
|
|
|
@staticmethod |
|
|
|
s.send("NICK dorfl\r\n".encode("utf-8")) |
|
|
|
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] |
|
|
|
|
|
|
|
|
|
|
|
while True: |
|
|
|
class bot: |
|
|
|
data = s.recv(512).decode("utf-8") |
|
|
|
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 |
|
|
|
if not data: continue |
|
|
|
msgs = [message.parse(raw) for raw in [part for part in data.split("\r\n") if part]] |
|
|
|
msgs = [message.parse(raw) for raw in [part for part in data.split("\r\n") if part]] |
|
|
|
for msg in msgs: |
|
|
|
for msg in msgs: |
|
|
|
print("<<", str(msg)) |
|
|
|
event_handler(msg, self) |
|
|
|
if msg.command == "PING": |
|
|
|
|
|
|
|
message.manual("", "PONG", msg.parameters).send(s) |
|
|
|
dorfl = bot() |
|
|
|
if msg.command == "001": |
|
|
|
dorfl.connect_register("irc.rizon.net", 7000) |
|
|
|
message.manual("", "JOIN", ["#qrs"]).send(s) |
|
|
|
|
|
|
|
if msg.command == "PRIVMSG" and "\x01VERSION\x01" in msg.parameters: |
|
|
|
dorfl.run() |
|
|
|
message.manual(":"+msg.parameters[0], "PRIVMSG", [msg.prefix[1:].split("!")[0], ":\x01dorfl bot\x01"]).send(s) |
|
|
|
|
|
|
|
s.close() |
|
|
|
s.close() |