You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
48 lines
1.4 KiB
48 lines
1.4 KiB
import irc.client
|
|
from irc.client import NickMask
|
|
|
|
from edmond.log import Logger
|
|
|
|
|
|
class Bot(irc.client.SimpleIRCClient, Logger):
|
|
|
|
def __init__(self, config, logger):
|
|
super().__init__()
|
|
self.config = config
|
|
self.logger = logger
|
|
|
|
@property
|
|
def nick(self):
|
|
return self.config["nick"]
|
|
|
|
def on_welcome(self, connection, event):
|
|
self.log_i(f"Connected to server {event.source}.")
|
|
for channel in self.config["channels"]:
|
|
connection.join(channel)
|
|
|
|
def on_join(self, connection, event):
|
|
self.log_i(f"Joined {event.target}.")
|
|
|
|
def on_part(self, connection, event):
|
|
self.log_i(f"Left {event.target} (args: {event.arguments[0]}).")
|
|
|
|
def on_pubmsg(self, connection, event):
|
|
channel = event.target
|
|
nick = NickMask(event.source).nick
|
|
message = event.arguments[0]
|
|
self.log_d(f"Message in {channel} from {nick}: {message}")
|
|
|
|
def on_privmsg(self, connection, event):
|
|
nick = NickMask(event.source).nick
|
|
target = event.target
|
|
message = event.arguments[0]
|
|
self.log_d(f"Private message from {nick} to {target}: {message}")
|
|
|
|
def run(self):
|
|
self.log_i("Starting Edmond.")
|
|
self.connect(self.config["host"], self.config["port"], self.nick)
|
|
try:
|
|
self.start()
|
|
except KeyboardInterrupt:
|
|
self.log_i("Stopping Edmond.")
|