diff --git a/main.py b/main.py index 69f26d5..c09d5a7 100644 --- a/main.py +++ b/main.py @@ -41,7 +41,8 @@ def main(): robot.sendTextMsg("机器人启动成功!", "filehelper") # 接收消息 - robot.enableRecvMsg() + # robot.enableRecvMsg() # 可能会丢消息? + robot.enableReceivingMsg() # 加队列 # 每天 7 点发送天气预报 robot.onEveryTime("07:00", weather_report, robot=robot) diff --git a/robot.py b/robot.py index 9f26129..8cf6099 100644 --- a/robot.py +++ b/robot.py @@ -4,6 +4,8 @@ import logging import re import time import xml.etree.ElementTree as ET +from queue import Empty +from threading import Thread from wcferry import Wcf, WxMsg @@ -139,6 +141,21 @@ class Robot(Job): def enableRecvMsg(self) -> None: self.wcf.enable_recv_msg(self.onMsg) + def enableReceivingMsg(self) -> None: + def innerProcessMsg(wcf: Wcf): + while wcf.is_receiving_msg(): + try: + msg = wcf.get_msg() + self.LOG.info(msg) + self.processMsg(msg) + except Empty: + continue # Empty message + except Exception as e: + self.LOG.error(f"Receiving message error: {e}") + + self.wcf.enable_receiving_msg() + Thread(target=innerProcessMsg, name="GetMessage", args=(self.wcf,), daemon=True).start() + def sendTextMsg(self, msg: str, receiver: str, at_list: str = "") -> None: """ 发送消息 :param msg: 消息字符串