Add triggers and rename callbacks to commands

This commit is contained in:
Joscha 2017-09-08 13:53:35 +00:00
parent da84c6685e
commit 405a9b81a5
2 changed files with 37 additions and 18 deletions

View file

@ -25,8 +25,9 @@ class Bot(Controller):
self.restarting = False # whoever runs the bot can check if a restart is necessary self.restarting = False # whoever runs the bot can check if a restart is necessary
self.start_time = time.time() self.start_time = time.time()
self._callbacks = Callbacks() self._commands = Callbacks()
self.register_default_callbacks() self._triggers = Callbacks()
self.register_default_commands()
self._help_topics = {} self._help_topics = {}
@ -39,8 +40,11 @@ class Bot(Controller):
self.restart_message = "/me temporary *poof*" # how to respond to !restart, whether restartable or not self.restart_message = "/me temporary *poof*" # how to respond to !restart, whether restartable or not
self.ping_message = "Pong!" # as specified by the botrulez self.ping_message = "Pong!" # as specified by the botrulez
def register_callback(self, event, callback, specific=True): def register_command(self, command, callback, specific=True):
self._callbacks.add((event, specific), callback) self._commands.add((command, specific), callback)
def register_trigger(self, regex, callback):
self._triggers.add(regex, callback)
def add_help(self, topic, text, description=None): def add_help(self, topic, text, description=None):
info = (text, description) # TODO: make named tuple? info = (text, description) # TODO: make named tuple?
@ -71,22 +75,28 @@ class Bot(Controller):
async def on_send(self, message): async def on_send(self, message):
wait = [] wait = []
# get specific command to call (if any)
specific = self.parse_message(message.content, specific=True) specific = self.parse_message(message.content, specific=True)
if specific: if specific:
wait.append(self._callbacks.call( wait.append(self._commands.call(
(specific.command, True), (specific.command, True),
message, message, specific.argstr
specific.argstr
)) ))
# get generic command to call (if any)
general = self.parse_message(message.content, specific=False) general = self.parse_message(message.content, specific=False)
if general: if general:
wait.append(self._callbacks.call( wait.append(self._commands.call(
(general.command, False), (general.command, False),
message, message, general.argstr
general.argstr
)) ))
# find triggers to call (if any)
for trigger in self._triggers.list():
match = re.fullmatch(trigger, message.content)
if match:
wait.append(self._triggers.call(trigger, message, match))
if wait: if wait:
await asyncio.wait(wait) await asyncio.wait(wait)
@ -177,14 +187,14 @@ class Bot(Controller):
# BOTRULEZ AND YABOLI-SPECIFIC COMMANDS # BOTRULEZ AND YABOLI-SPECIFIC COMMANDS
def register_default_callbacks(self): def register_default_commands(self):
self.register_callback("ping", self.command_ping) self.register_command("ping", self.command_ping)
self.register_callback("ping", self.command_ping, specific=False) self.register_command("ping", self.command_ping, specific=False)
self.register_callback("help", self.command_help) self.register_command("help", self.command_help)
self.register_callback("help", self.command_help_general, specific=False) self.register_command("help", self.command_help_general, specific=False)
self.register_callback("uptime", self.command_uptime) self.register_command("uptime", self.command_uptime)
self.register_callback("kill", self.command_kill) self.register_command("kill", self.command_kill)
self.register_callback("restart", self.command_restart) self.register_command("restart", self.command_restart)
@noargs @noargs
async def command_ping(self, message): async def command_ping(self, message):

View file

@ -54,3 +54,12 @@ class Callbacks():
""" """
return event in self._callbacks return event in self._callbacks
def list(self):
"""
list() -> callbacks
Returns a list of current callbacks
"""
return list(self._callbacks.keys())