From 0eca8e6dff57d73eb8a57aaa7387f28e043620fd Mon Sep 17 00:00:00 2001 From: YunFan Jiang Date: Sat, 21 Jul 2018 23:39:27 +0800 Subject: [PATCH] fix a bug for user with nick prifex --- sakuratown/mcbot.py | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/sakuratown/mcbot.py b/sakuratown/mcbot.py index b900b8e..9657c52 100755 --- a/sakuratown/mcbot.py +++ b/sakuratown/mcbot.py @@ -20,6 +20,7 @@ from pprint import pprint as pp _color_wipe_pattern = re.compile('§[0-9a-fklmnor]', re.U|re.I|re.M|re.S) _color_wipe = lambda s: re.sub(_color_wipe_pattern, '', s) +_nick_prefix_wipe = lambda s: re.sub(r'\[[^]]+\]|\s+', '', s) _cmd_split = re.compile(r'\s+', re.U|re.I|re.M|re.S) @@ -141,13 +142,12 @@ class CoreBot(object): gmsg = [m for m in chat_strip(jdata) if m] msg = ''.join(gmsg) + ##print(json.dumps([m for m in chat_strip(jdata) if m], indent=2)) - if pos == 'SYSTEM' and len(gmsg) == 2 and ('请求你传送到他那里' in gmsg[1] or '请求传送到你这里' in gmsg[1]): - self.handle_tp_request(gmsg[0].strip(), gmsg[1]) + if pos == 'SYSTEM' and ('请求你传送到他那里' in msg or '请求传送到你这里' in msg): + self.handle_tp_request(gmsg, msg) return - ##print(json.dumps([m for m in chat_strip(jdata) if m], indent=2)) - if self.state != STATES['AUTHED']: self.handle_login_state(pos, msg) return @@ -261,7 +261,7 @@ class SakuraBot(CoreBot): kwargs.update({ 'address': 'sakuratown.cn', 'port': 25565, - 'handle_exception': self.handle_exit, + 'handle_exception': self.handle_exception, 'handle_exit': self.handle_exit, }) self.admins = set() @@ -279,7 +279,10 @@ class SakuraBot(CoreBot): if '您已成功登录樱花镇服务器' in msg: self.state = STATES['AUTHED'] - def handle_tp_request(self, from_user, msg): + def handle_tp_request(self, gmsg, msg): + idxs = [idx for idx, m in enumerate(gmsg) if '传送' in m][0] + from_user = _nick_prefix_wipe(''.join(gmsg[:idxs])) + if from_user in self.admins: self.send_msg('/tpaccept') else: @@ -311,10 +314,21 @@ class SakuraBot(CoreBot): traceback.print_exc() self.send_msg('/msg {} {}'.format(from_user, '出了点小问题啊 大佬')) + def handle_exception(self, *args, **kwargs): + print("!IMPORT: Exception", args, kwargs) + traceback.print_exc() + def handle_exit(self, *args, **kwargs): self.connection.disconnect() self.keepon = False + def command_admins(self, *args, from_user=None): + sleep_int = 0.001 if from_user is None else 0.2 + sendback = print if from_user is None else lambda m: self.send_msg('/msg {} {}'.format(from_user, m)) + for u in self.admins: + sendback(u) + time.sleep(sleep_int) + def command_players(self, *args, from_user=None): infos = ["{name}:{ping}".format(**i) for i in sorted(self.players.values(), key=lambda v: v['ping'])] pp(infos) -- 2.11.4.GIT