From 080895421d6466714cea1e16aaed65ad9d8c0524 Mon Sep 17 00:00:00 2001 From: Tanner Collin Date: Thu, 29 Apr 2021 02:18:01 +0000 Subject: [PATCH] Improve parsing chat commands --- mosfet/commands.py | 54 +++++++++++-------------------------- mosfet/protocol/managers.py | 29 ++++++++++---------- 2 files changed, 30 insertions(+), 53 deletions(-) diff --git a/mosfet/commands.py b/mosfet/commands.py index 86a5a15..c4839d9 100644 --- a/mosfet/commands.py +++ b/mosfet/commands.py @@ -21,11 +21,12 @@ class Commands: self.g.chat.set_handler(self.handle_chat) def handle_chat(self, message): - source, text = message + source, sender, text = message reply = None private = False for_me = False - authed = False + authed = sender == '0c123cfa-1697-4427-9413-4b645dee7ec0' + bot_num = self.g.name[-1] if source == 'SYSTEM': self.g.command_lock = False @@ -35,40 +36,20 @@ class Commands: elif text == 'You are no longer AFK.': self.g.afk = False - match1 = re.match(r'.*<(\w+)> (.*)', text) - match2 = re.match(r'\[(\w+) -> me] (.*)', text) - if match1: - sender, text = match1.groups() - elif match2: - sender, text = match2.groups() + text = text.replace('zzz', '!zzz') + + match = re.match(r'(.*\W+)\s+(['+bot_num+'|!])(\w+) ?(.*)', text) + if match: + meta, prefix, command, data = match.groups() + else: + return + + if '-> me' in meta: private = True - else: - return - if sender == 'tanner6': - authed = True - - if text.startswith('zzz'): - text = '!zzz' - - bot_num = self.g.name[-1] - - if text.startswith(bot_num): - text = text[1:] + if prefix == bot_num: for_me = True - elif text.startswith('! '): - text = text[2:] - elif text.startswith('!'): - text = text[1:] - else: - return - if ' ' in text: - command = text.split(' ', 1)[0] - data = text.split(' ', 1)[1] - else: - command = text - data = None try: @@ -391,14 +372,9 @@ class Commands: ## 1here - bot comes to your location if command == 'here': - try: - sender_uuid = self.g.player_names[sender] - except KeyError: - reply = 'can\'t find your uuid' - if not reply: for p in self.g.players.values(): - if p.player_uuid == sender_uuid: + if p.player_uuid == sender: player = p break else: # for @@ -525,7 +501,7 @@ class Commands: reply = 'reply too long, check console' if private and not reply.startswith('/'): - self.g.chat.send('/m ' + sender + ' ' + reply) + self.g.chat.send('/r ' + reply) else: self.g.chat.send(reply) diff --git a/mosfet/protocol/managers.py b/mosfet/protocol/managers.py index 4ab9c0b..e33d5db 100644 --- a/mosfet/protocol/managers.py +++ b/mosfet/protocol/managers.py @@ -161,24 +161,25 @@ class ChatManager: def translate_chat(self, data): if isinstance(data, str): return data + + result = data.get('text', '') + result += data.get('translate', '') + + if 'with' in data: + result += ' ' + ' '.join([self.translate_chat(x) for x in data['with']]) elif 'extra' in data: - return ''.join([self.translate_chat(x) for x in data['extra']]) - elif 'text' in data: - return data['text'] - elif 'with' in data: - if len(data['with']) >= 2: - return '<{}> {}'.format(*[self.translate_chat(x) for x in data['with']]) - else: - return self.translate_chat(data['with'][0]) - elif 'translate' in data: - return data['translate'] - else: - print(data) - return '?' + result += ''.join([self.translate_chat(x) for x in data['extra']]) + + return result def print_chat(self, chat_packet): + #print(chat_packet) + #print(chat_packet.json_data) + #import json + #print(json.dumps(json.loads(chat_packet.json_data), indent=4)) try: source = chat_packet.field_string('position') + sender = chat_packet.sender text = self.translate_chat(json.loads(chat_packet.json_data)) print('[%s] %s'%(source, text)) except Exception as ex: @@ -186,7 +187,7 @@ class ChatManager: return if self.handler: - self.handler((source, text)) + self.handler((source, sender, text)) def set_handler(self, func): self.handler = func