2023-11-05 01:37:35 +00:00
|
|
|
#!/usr/bin/python3
|
|
|
|
from socket import socket, AF_INET, SOCK_STREAM
|
|
|
|
from overrides import bytes, bbytes
|
|
|
|
from logs import log
|
|
|
|
import re
|
2023-11-05 23:38:43 +00:00
|
|
|
from typing import NoReturn
|
2023-11-05 01:37:35 +00:00
|
|
|
|
|
|
|
class bot:
|
|
|
|
def __init__(server: str):
|
|
|
|
self.gmode = False
|
|
|
|
self.server = server
|
|
|
|
self.nicklen = 30
|
|
|
|
self.address = servers[server]["address"]
|
|
|
|
self.port = servers[server]["port"] if "port" in servers[server] else 6667
|
|
|
|
self.channels = servers[server]["channels"]
|
|
|
|
self.interval = (
|
|
|
|
servers[server]["interval"] if "interval" in servers[server] else 50
|
|
|
|
)
|
|
|
|
self.prefix = "."
|
|
|
|
self.rebt = "fire"
|
|
|
|
self.gblrebt = "all"
|
|
|
|
self.lrebt = 7 + len(rebt)
|
|
|
|
self.lgblrebt = 7 + len(gblrebt)
|
|
|
|
self.adminnames = servers[server]["admins"]
|
|
|
|
self.exitcode = f"bye {botnick.lower()}"
|
|
|
|
self.np = re.compile(npbase.replace("MAX", f"{nicklen}"))
|
|
|
|
self.queue = []
|
|
|
|
self.__version__ = "v1.0.5"
|
|
|
|
self.socket = socket(AF_INET, SOCK_STREAM)
|
|
|
|
log(f"Start init for {server}", self.server)
|
|
|
|
|
|
|
|
def send(self, command: str) -> int:
|
2023-11-05 22:26:50 +00:00
|
|
|
return ircsock.send(bytes(command))
|
2023-11-05 01:37:35 +00:00
|
|
|
|
|
|
|
def recv(self) -> bytes:
|
2023-11-05 22:26:50 +00:00
|
|
|
if self.queue:
|
|
|
|
return bytes(self.queue.pop(0))
|
|
|
|
data = bytes(self.socket.recv(2048).strip(b"\r\n"))
|
|
|
|
if b"\r\n" in data:
|
|
|
|
self.queue.extend(data.split(b"\r\n"))
|
|
|
|
return bytes(self.queue.pop(0))
|
|
|
|
return data
|
2023-11-05 01:37:35 +00:00
|
|
|
|
|
|
|
def log(self, message: object) -> None:
|
|
|
|
log(message, self.server)
|
|
|
|
|
2023-11-05 23:38:43 +00:00
|
|
|
def exit(message: object) -> NoReturn:
|
2023-11-05 01:37:35 +00:00
|
|
|
log(message, self.server, "EXIT")
|
|
|
|
exit(1)
|