Corrections dans les requêtes
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
from tools.commons import Message
|
||||
from tools.coco.client import CocoClient
|
||||
from tools.commons import Message, BotMessage
|
||||
from .commons import *
|
||||
|
||||
|
||||
@@ -6,28 +7,108 @@ class DispatcherBotProcessor(MessageProcessor):
|
||||
"""A processor that matches a context, then forwards the message to a list of sub-processors.
|
||||
This enables the botprocessor-matching mechanism to behave kinda like a decision tree"""
|
||||
|
||||
def __init__(self, processors_list : List[MessageProcessor]):
|
||||
def __init__(self, processors_list: List[MessageProcessor]):
|
||||
self.dispatcher = MessageDispatcher(processors_list)
|
||||
|
||||
def process(self, text : str, sender_id : str, users_list : UserList):
|
||||
def process(self, text: str, sender_id: str, users_list: UserList):
|
||||
return self.dispatcher.dispatch(text, sender_id, users_list)
|
||||
|
||||
|
||||
class CommandsDispatcherProcessor(DispatcherBotProcessor):
|
||||
"""Reacts to commands of the form '/botname command' or 'botname, command' """
|
||||
|
||||
def __init__(self, processors_list: List[MessageProcessor], trigger_word: str = None, default_response :str = None):
|
||||
def __init__(self, processors_list: List[MessageProcessor], trigger_word: str = None, default_response: str = None):
|
||||
super().__init__(processors_list)
|
||||
self.trigger = trigger_word
|
||||
self.default_response = default_response if default_response is not None else "Commande non reconnue, pd"
|
||||
|
||||
def match(self, text : str, sender_id : str, users_list : UserList):
|
||||
def match(self, text: str, sender_id: str, users_list: UserList):
|
||||
trigger = self.trigger.upper() if self.trigger is not None else users_list.my_name.upper()
|
||||
return text.upper().startswith(trigger + ",") \
|
||||
or text.upper().startswith("/" + trigger)
|
||||
|
||||
def process(self, text : str, sender_id : str, users_list : UserList):
|
||||
def process(self, text: str, sender_id : str, users_list: UserList):
|
||||
without_cmd = text[len(users_list.my_name)+1:]
|
||||
response = super().process(without_cmd, sender_id, users_list)
|
||||
return Message(self.default_response) if response is None else response
|
||||
|
||||
|
||||
class BaseCocobotCommand(MessageProcessor):
|
||||
|
||||
HELP_STR = None
|
||||
_cmd_suffix = ""
|
||||
|
||||
def __init__(self, cococlient: CocoClient):
|
||||
self.cococlient = cococlient
|
||||
|
||||
def match(self, text : str, sender_id : str, users_list : UserList):
|
||||
return text.lower().startswith(self._cmd_suffix)
|
||||
|
||||
|
||||
class CocoConnectCommand(BaseCocobotCommand):
|
||||
HELP_STR = "/coconnect pseudo age code_postal"
|
||||
_cmd_suffix = "nnect"
|
||||
|
||||
def process(self, text : str, sender_id : str, users_list : UserList):
|
||||
text = text[len(self._cmd_suffix):].strip()
|
||||
try:
|
||||
nick, age, zip_code = text.split()
|
||||
except ValueError:
|
||||
return Message("Pas le bon nombre d'arguments, pd")
|
||||
|
||||
if not nick.isalnum():
|
||||
return Message("Le pseudo doit être alphanumérique, pd")
|
||||
|
||||
if len(age) != 2 or not age.isnumeric():
|
||||
return Message("L'âge c'est avec DEUX chiffres (déso bulbi)")
|
||||
|
||||
if len(zip_code) != 5 or not zip_code.isnumeric():
|
||||
return Message("Le code postal c'est 5 chiffres, pd")
|
||||
|
||||
return self.cococlient.connect(nick, int(age), True, zip_code)
|
||||
|
||||
|
||||
class CocoMsgCommand(BaseCocobotCommand):
|
||||
HELP_STR = "/cocospeak message"
|
||||
_cmd_suffix = "speak"
|
||||
|
||||
def process(self, text : str, sender_id : str, users_list : UserList):
|
||||
text = text[len(self._cmd_suffix):].strip()
|
||||
return self.cococlient.send_msg(text)
|
||||
|
||||
|
||||
class CocoSwitchCommand(BaseCocobotCommand):
|
||||
HELP_STR = "/cocoswitch [pseudo de l'interlocuteur]"
|
||||
_cmd_suffix = "switch"
|
||||
|
||||
def process(self, text : str, sender_id : str, users_list : UserList):
|
||||
text = text[len(self._cmd_suffix):].strip()
|
||||
if text:
|
||||
return self.cococlient.switch_conv(text)
|
||||
else:
|
||||
return self.cococlient.switch_conv()
|
||||
|
||||
|
||||
class CocoListCommand(BaseCocobotCommand):
|
||||
HELP_STR = "/cocolist"
|
||||
_cmd_suffix = "list"
|
||||
|
||||
def process(self, text : str, sender_id : str, users_list : UserList):
|
||||
return self.cococlient.list_convs()
|
||||
|
||||
|
||||
class BotHelp(MessageProcessor):
|
||||
"""Displays the help string for all processors in the list that have a helpt string"""
|
||||
|
||||
def __init__(self, processors_list: List[BaseCocobotCommand]):
|
||||
all_help_strs = [proc.HELP_STR
|
||||
for proc in processors_list if proc.HELP_STR is not None]
|
||||
self.help_str = ", ".join(all_help_strs)
|
||||
|
||||
def match(self, text : str, sender_id : str, users_list : UserList):
|
||||
return text.lower().startswith("help")
|
||||
|
||||
def process(self, text : str, sender_id : str, users_list : UserList):
|
||||
return BotMessage(self.help_str)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user