Open MrLuer opened 1 year ago
目前,使用 ItChat 库的 WechatChannel 类存在一个问题,那就是在长时间运行后会自动登出。这可能会中断持续的对话或者其他基于长期在线的活动。
修改 chatgpt-on-wechat/channel/wechat/wechat_channel.py 文件 ,在WechatChannel 类中增加两个回调函数 login_callback 和 logout_callback。然后在 itchat.auto_login 的调用中设置这两个回调函数。当logout_callback 被调用时,会重新执行 startup 方法以重新登录。 这样,即使出现自动登出的情况,程序也会自动重新登录,从而避免了中断。 下面是修改后的代码: `@singleton class WechatChannel(ChatChannel): NOT_SUPPORT_REPLYTYPE = []
def __init__(self):
super().__init__()
self.receivedMsgs = ExpiredDict(60 * 60 * 24)
def **login_callback(self):**
print('Login successful')
def logout_callback(self):
print('Logout')
self.startup()
def startup(self):
itchat.instance.receivingRetryCount = 600 # 修改断线超时时间
# login by scan QRCode
hotReload = conf().get("hot_reload", False)
status_path = os.path.join(get_appdata_dir(), "itchat.pkl")
itchat.auto_login(
enableCmdQR=2,
hotReload=hotReload,
statusStorageDir=status_path,
qrCallback=qrCallback,
loginCallback=self.login_callback,
exitCallback=self.logout_callback
)
self.user_id = itchat.instance.storageClass.userName
self.name = itchat.instance.storageClass.nickName
logger.info("Wechat login success, user_id: {}, nickname: {}".format(self.user_id, self.name))
# start message listener
itchat.run()
`
验证方法
为了验证此修改是否有效,可以长时间运行此程序,并观察是否出现自动登出的情况。在自动登出后,程序应当自动重新登录,如果能成功重新登录,并没有中断任何操作,那么说明这个修改是有效的。
希望这个修复能够帮助到你,如果有任何问题,欢迎进行进一步的讨论。
Fix for ItChat Automatic Logout Issue
问题描述
目前,使用 ItChat 库的 WechatChannel 类存在一个问题,那就是在长时间运行后会自动登出。这可能会中断持续的对话或者其他基于长期在线的活动。
修复方案
修改 chatgpt-on-wechat/channel/wechat/wechat_channel.py 文件 ,在WechatChannel 类中增加两个回调函数 login_callback 和 logout_callback。然后在 itchat.auto_login 的调用中设置这两个回调函数。当logout_callback 被调用时,会重新执行 startup 方法以重新登录。 这样,即使出现自动登出的情况,程序也会自动重新登录,从而避免了中断。 下面是修改后的代码: `@singleton class WechatChannel(ChatChannel): NOT_SUPPORT_REPLYTYPE = []
def __init__(self): super().__init__() self.receivedMsgs = ExpiredDict(60 * 60 * 24) def **login_callback(self):** print('Login successful') def logout_callback(self): print('Logout') self.startup() def startup(self): itchat.instance.receivingRetryCount = 600 # 修改断线超时时间 # login by scan QRCode hotReload = conf().get("hot_reload", False) status_path = os.path.join(get_appdata_dir(), "itchat.pkl") itchat.auto_login( enableCmdQR=2, hotReload=hotReload, statusStorageDir=status_path, qrCallback=qrCallback, loginCallback=self.login_callback, exitCallback=self.logout_callback ) self.user_id = itchat.instance.storageClass.userName self.name = itchat.instance.storageClass.nickName logger.info("Wechat login success, user_id: {}, nickname: {}".format(self.user_id, self.name)) # start message listener itchat.run()
`
验证方法
为了验证此修改是否有效,可以长时间运行此程序,并观察是否出现自动登出的情况。在自动登出后,程序应当自动重新登录,如果能成功重新登录,并没有中断任何操作,那么说明这个修改是有效的。
希望这个修复能够帮助到你,如果有任何问题,欢迎进行进一步的讨论。
昨天尝试了这个修复方案,还是自动登出了,重新登录没成功 ` Unexpected sync check result: window.synccheck={retcode:"1102",selector:"0"}
Logout `
能否提供复现步骤和更多日志呢?
Fix for ItChat Automatic Logout Issue
问题描述
目前,使用 ItChat 库的 WechatChannel 类存在一个问题,那就是在长时间运行后会自动登出。这可能会中断持续的对话或者其他基于长期在线的活动。
修复方案
修改 chatgpt-on-wechat/channel/wechat/wechat_channel.py 文件 ,在WechatChannel 类中增加两个回调函数 login_callback 和 logout_callback。然后在 itchat.auto_login 的调用中设置这两个回调函数。当logout_callback 被调用时,会重新执行 startup 方法以重新登录。 这样,即使出现自动登出的情况,程序也会自动重新登录,从而避免了中断。 下面是修改后的代码: `@singleton class WechatChannel(ChatChannel): NOT_SUPPORT_REPLYTYPE = []
def __init__(self): super().__init__() self.receivedMsgs = ExpiredDict(60 * 60 * 24) def **login_callback(self):** print('Login successful') def logout_callback(self): print('Logout') self.startup() def startup(self): itchat.instance.receivingRetryCount = 600 # 修改断线超时时间 # login by scan QRCode hotReload = conf().get("hot_reload", False) status_path = os.path.join(get_appdata_dir(), "itchat.pkl") itchat.auto_login( enableCmdQR=2, hotReload=hotReload, statusStorageDir=status_path, qrCallback=qrCallback, loginCallback=self.login_callback, exitCallback=self.logout_callback ) self.user_id = itchat.instance.storageClass.userName self.name = itchat.instance.storageClass.nickName logger.info("Wechat login success, user_id: {}, nickname: {}".format(self.user_id, self.name)) # start message listener itchat.run()
`
验证方法
为了验证此修改是否有效,可以长时间运行此程序,并观察是否出现自动登出的情况。在自动登出后,程序应当自动重新登录,如果能成功重新登录,并没有中断任何操作,那么说明这个修改是有效的。
希望这个修复能够帮助到你,如果有任何问题,欢迎进行进一步的讨论。
这个方式似乎不能修复,今天又掉线了,
能否提供复现步骤和更多日志呢?
能否提供复现步骤和更多日志呢?
上面的的日志应该提供了所有信息,前后的日志都是正常的。 步骤就是正常railway部署,然后微信登录一段时间就掉线
我也是的,试验了上面的方法,仍然是继续会自动登出。我用的是腾讯云在新加坡的服务器,也碰到这样的问题,一天左右的时间自动登出,而且奇怪的是日志里没有log out的信息
我看到其它群里有的机器人,每天定时会自动说一句话,像早上的慰问啊等等,是不是他利用这样的方式来保证不会自动掉线
这个我解决了,方法也很简单,你就写个脚本去监听这个进程就好了,进程没了就自动重启。
这个我解决了,方法也很简单,你就写个脚本去监听这个进程就好了,进程没了就自动重启。 请问怎么解决的,这个不是需要手动扫码重新登陆吗
@7tinghua 请问怎么解决这个掉线问题?
前置确认
⚠️ 搜索issues中是否已存在类似问题
操作系统类型?
Railway
运行的python版本是?
python 3.7
使用的chatgpt-on-wechat版本是?
Latest Release
运行的
channel
类型是?wx(个人微信, itchat)
复现步骤 🕹
正常在railway上部署
问题描述 😯
railway上部署,运行一段时间微信掉线
终端日志 📒
[WARNING][2023-06-11 08:23:30][chat_channel.py:174] - [WX]any to wav error, use raw path. Expecting value: line 1 column 1 (char 0) [INFO][2023-06-11 08:23:30][bridge.py:30] - create bot openai for voice_to_text [INFO][2023-06-11 08:23:34][openai_voice.py:25] - [Openai] voiceToText text=就拍了很久 在滿洲啊 在寒氣環境啊 水線清洗 一彈1 está lá 你都会不会不要去 voice file name=tmp/230611-082106.mp3 [INFO][2023-06-11 08:23:34][chat_gpt_bot.py:49] - [CHATGPT] query=就拍了很久 在滿洲啊 在寒氣環境啊 水線清洗 一彈1 está lá 你都会不会不要去 [INFO][2023-06-11 08:23:38][wechat_channel.py:184] - [WX] sendMsg=Reply(type=TEXT, content=[bot] 抱歉,这句话非常难以理解。请问这句话的背景和意思是什么?我可以帮助您更好地理解和回答这个问题。), receiver=@230fc5855d5d507cb9b3955ab0fb4f5c2f838451766688f52deec3f4bbb582c6 /entrypoint.sh: line 49: 7 Killed $CHATGPT_ON_WECHAT_EXEC [INFO][2023-06-11 08:26:49][config.py:180] - [INIT] override config by environ args: group_chat_prefix=["@bot"] [INFO][2023-06-11 08:26:49][config.py:180] - [INIT] override config by environ args: single_chat_prefix=["bot", "@bot"] [INFO][2023-06-11 08:26:49][config.py:180] - [INIT] override config by environ args: single_chat_reply_prefix=[bot] [INFO][2023-06-11 08:26:49][config.py:180] - [INIT] override config by environ args: group_chat_in_one_session=["ChatGPT测试群"] [INFO][2023-06-11 08:26:49][config.py:180] - [INIT] override config by environ args: group_name_white_list=["ChatGPT测试群", "ChatGPT测试群2"] [INFO][2023-06-11 08:26:49][config.py:180] - [INIT] override config by environ args: group_speech_recognition=False [INFO][2023-06-11 08:26:49][config.py:180] - [INIT] override config by environ args: speech_recognition=True [INFO][2023-06-11 08:26:49][config.py:180] - [INIT] override config by environ args: character_desc=你是一个通晓天文地理全能选手。 [INFO][2023-06-11 08:26:49][config.py:180] - [INIT] override config by environ args: image_create_prefix=["画", "看", "找"] [INFO][2023-06-11 08:26:49][config.py:180] - [INIT] override config by environ args: voice_reply_voice=False [INFO][2023-06-11 08:26:49][config.py:180] - [INIT] override config by environ args: open_ai_api_key=sk-lq9zRSAHRGgIvHQ2ZrxXT4BlbkFJhMfGOMZzqQ0fWAypo7fH [INFO][2023-06-11 08:26:49][config.py:180] - [INIT] override config by environ args: expires_in_seconds=3600 [INFO][2023-06-11 08:26:49][config.py:180] - [INIT] override config by environ args: conversation_max_tokens=1000 [INFO][2023-06-11 08:26:49][config.py:180] - [INIT] override config by environ args: model=gpt-3.5-turbo