general irc bot interface
This commit is contained in:
parent
898d4a8d85
commit
74df9e9287
44
tools/irc.py
44
tools/irc.py
@ -1,4 +1,8 @@
|
||||
from time import sleep
|
||||
|
||||
from .schedule import Scheduler
|
||||
from .simplesocket import ClientSocket
|
||||
from datetime import timedelta
|
||||
from enum import Enum
|
||||
from typing import Callable, Dict, List, Union
|
||||
|
||||
@ -365,3 +369,43 @@ class Client:
|
||||
|
||||
def getChannelList(self) -> List[Channel]:
|
||||
return list(self.__channellist.values())
|
||||
|
||||
|
||||
class IrcBot(Client):
|
||||
def __init__(self, server: str, port: int, nick: str, username: str, realname: str = "Python Bot"):
|
||||
super().__init__(server, port, nick, username, realname)
|
||||
self._scheduler = Scheduler()
|
||||
self._channel_commands = {}
|
||||
self._privmsg_commands = {}
|
||||
self.subscribe(ServerMessage.MSG_PRIVMSG, self.on_privmsg)
|
||||
|
||||
def on(self, *args, **kwargs):
|
||||
self.subscribe(*args, **kwargs)
|
||||
|
||||
def schedule(self, name: str, every: timedelta, func: Callable):
|
||||
self._scheduler.schedule(name, every, func)
|
||||
|
||||
def register_channel_command(self, command: str, channel: str, func: Callable):
|
||||
if channel not in self._channel_commands:
|
||||
self._channel_commands[channel] = {}
|
||||
|
||||
self._channel_commands[channel][command] = func
|
||||
|
||||
def register_privmsg_command(self, command: str, func: Callable):
|
||||
self._privmsg_commands[command] = func
|
||||
|
||||
def on_privmsg(self, msg_from, msg_to, message):
|
||||
if not message:
|
||||
return
|
||||
command = message.split()[0]
|
||||
if msg_to in self._channel_commands and command in self._channel_commands[msg_to]:
|
||||
self._channel_commands[msg_to][command](msg_from, " ".join(message.split()[1:]))
|
||||
|
||||
if msg_to == self.getUser().nickname and command in self._privmsg_commands:
|
||||
self._privmsg_commands[command](msg_from, " ".join(message.split()[1:]))
|
||||
|
||||
def run(self):
|
||||
while True:
|
||||
self._scheduler.run_pending()
|
||||
self.receive()
|
||||
sleep(0.01)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user