From d67d4b25cbf24f2ac3190b6bf03e78c10334ca0d Mon Sep 17 00:00:00 2001 From: Matt Arnold Date: Thu, 20 Feb 2025 09:18:03 -0500 Subject: new year new bot --- IRC.py | 53 ++++++++++++++++++++++++++++++----------------------- 1 file changed, 30 insertions(+), 23 deletions(-) (limited to 'IRC.py') diff --git a/IRC.py b/IRC.py index 90ef1fa..9361982 100644 --- a/IRC.py +++ b/IRC.py @@ -4,26 +4,31 @@ import socket import sys import irctokens import time + + class IRCBadMessage(Exception): pass + + class IRCError(Exception): pass + def printred(s): t = f"\033[1;31m {s} \033[0m\n" print(t) + def parsemsg(s): - """Breaks a message from an IRC server into its prefix, command, and arguments. - """ - prefix = '' + """Breaks a message from an IRC server into its prefix, command, and arguments.""" + prefix = "" trailing = [] if not s: - raise IRCBadMessage("Empty line.") - if s[0] == ':': - prefix, s = s[1:].split(' ', 1) - if s.find(' :') != -1: - s, trailing = s.split(' :', 1) + raise IRCBadMessage("Empty line.") + if s[0] == ":": + prefix, s = s[1:].split(" ", 1) + if s.find(" :") != -1: + s, trailing = s.split(" :", 1) args = s.split() args.append(trailing) else: @@ -32,10 +37,10 @@ def parsemsg(s): return prefix, command, args -LINEEND = '\r\n' +LINEEND = "\r\n" -class IRCBot: +class IRCBot: irc = None def __init__(self, sock, config=None): @@ -45,10 +50,10 @@ class IRCBot: def send_cmd(self, line): """Send an IRC Command, takes an IRC command string without the CRLF - Returns encoded msg on success raises IRCError on failure """ + Returns encoded msg on success raises IRCError on failure""" if not self.connected: raise IRCError("Not Connected") - encmsg = bytes(line.format() + LINEEND, 'UTF-8' ) + encmsg = bytes(line.format() + LINEEND, "UTF-8") expected = len(encmsg) if self.irc.send(encmsg) == expected: return str(encmsg) @@ -56,16 +61,15 @@ class IRCBot: raise IRCError("Unexpected Send Length") def on_welcome(self, *args, **kwargs): - authmsg = irctokens.build("NICKSERV", ['IDENTIFY', self.config['nickpass']]) + authmsg = irctokens.build("NICKSERV", ["IDENTIFY", self.config["nickpass"]]) self.send_cmd(authmsg) - joinmsg = irctokens.build("JOIN", [self.config['channel']]) + joinmsg = irctokens.build("JOIN", [self.config["channel"]]) self.send_cmd(joinmsg) - def send_privmsg(self, dst, msg): - msg = irctokens.build("PRIVMSG",[dst, msg]) + msg = irctokens.build("PRIVMSG", [dst, msg]) self.send_cmd(msg) - + def send_quit(self, quitmsg): msg = irctokens.build("QUIT", [quitmsg]) print(msg) @@ -87,12 +91,16 @@ class IRCBot: self.connected = True # Perform user registration - usermsg = irctokens.build("USER", [botnick, "0","*", "RabbitEars Bot"]).format() + password_msg = irctokens.build("PASS", [self.config["nickpass"]]) + self.send_cmd(password_msg) + usermsg = irctokens.build( + "USER", [botnick, "0", "*", "Nyx Kermitsdotter"] + ).format() print(usermsg) self.send_cmd(usermsg) nickmsg = irctokens.build("NICK", [botnick]) self.send_cmd(nickmsg) - + def get_response(self): # Get the response resp = self.irc.recv(4096).decode("UTF-8") @@ -103,9 +111,8 @@ class IRCBot: self.on_welcome(nwmsg.params) if nwmsg.command == "ERROR": raise IRCError(str(nwmsg.params[0])) - if nwmsg.command == 'PING': - print('Sending pong') - self.irc.send( - bytes('PONG ' + LINEEND, "UTF-8")) + if nwmsg.command == "PING": + print("Sending pong") + self.irc.send(bytes("PONG " + LINEEND, "UTF-8")) return msg -- cgit 1.4.1-2-gfad0