lich0821 / WeChatRobot

微信机器人,接入Gemini、ChatGPT、ChatGLM、讯飞星火、Tigerbot;成语接龙、天气预报、新闻摘要、定时任务。
MIT License
1.35k stars 264 forks source link

[🐛BUG] 运行一段时间后,不接收消息了 #52

Closed mugbya closed 5 months ago

mugbya commented 9 months ago

描述这个 bug 对 bug 作一个清晰简明的描述:

使用环境(请补全下列信息):

屏幕截图

image

运行一段时候后,不打印这个日志了

    def enableReceivingMsg(self) -> None:
        def innerProcessMsg(wcf: Wcf):
            while wcf.is_receiving_msg():
                now_time = str(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
                print(f"{now_time}【等待消息】************************")
                try:
                    msg = wcf.get_msg()
                    if msg.roomid and msg.roomid not in self.config.GROUPS:
                        self.all_room.update({msg.roomid: "未知"})
                        with open("room/all_room.json", "w") as f:
                            f.write(json.dumps(self.all_room))
                        return
                    self.LOG.info(f"msg:roomid: {msg.roomid}, sender: {msg.sender}, content: {msg.content}")

                    flag = self.baseFunc.manage_command(msg, self)  # 首先执行管理指令
                    self.LOG.info(f"【管理指令】是否是管理执行指令 {flag}")
                    if not flag:
                        self.processMsg(msg)
                    # self.processMsg(msg)
                except Empty:
                    now_time = str(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
                    print(f"{now_time}【空消息】!!!!!!!!!!!!!! ")
                    continue  # Empty message
                except Exception as e:
                    traceback.print_exc()
                    self.LOG.error(f"Receiving message error: {e}")

        self.wcf.enable_receiving_msg()
        Thread(target=innerProcessMsg, name="GetMessage", args=(self.wcf,), daemon=True).start()

最开始就发现这个问题,然后在群里也有其他人遇到,群友他自己 print 打印日志后就咩有这个问题,但是我依旧存在这个问题

然后我就想看看运行的多线程情况,如下图

image

图上半截是正常运行的,下半截是不接受消息时的,线程丢失了

lich0821 commented 9 months ago

可以在while结束之后加一行日志,看看是不是退出接收消息了