mirror of
https://github.com/langbot-app/LangBot.git
synced 2026-06-28 00:14:21 +00:00
Merge pull request #1191 from wangcham/master
fix: eliminate critical message queue blockage in wxoa
This commit is contained in:
@@ -27,6 +27,8 @@ xml_template = """
|
|||||||
</xml>
|
</xml>
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
user_msg_queue = {}
|
||||||
|
|
||||||
class OAClient():
|
class OAClient():
|
||||||
|
|
||||||
def __init__(self,token:str,EncodingAESKey:str,AppID:str,Appsecret:str):
|
def __init__(self,token:str,EncodingAESKey:str,AppID:str,Appsecret:str):
|
||||||
@@ -227,6 +229,10 @@ class OAClientForLongerResponse():
|
|||||||
queue_top = oa.msg_queue[from_user].pop(0)
|
queue_top = oa.msg_queue[from_user].pop(0)
|
||||||
queue_content = queue_top["content"]
|
queue_content = queue_top["content"]
|
||||||
|
|
||||||
|
# 弹出用户消息
|
||||||
|
if user_msg_queue.get(from_user) and user_msg_queue[from_user]:
|
||||||
|
user_msg_queue[from_user].pop(0)
|
||||||
|
|
||||||
response_xml = xml_template.format(
|
response_xml = xml_template.format(
|
||||||
to_user=from_user,
|
to_user=from_user,
|
||||||
from_user=to_user,
|
from_user=to_user,
|
||||||
@@ -243,13 +249,22 @@ class OAClientForLongerResponse():
|
|||||||
content="AI正在思考中,请发送任意内容获取回答。"
|
content="AI正在思考中,请发送任意内容获取回答。"
|
||||||
)
|
)
|
||||||
|
|
||||||
message_data = await self.get_message(xml_msg)
|
if user_msg_queue.get(from_user) and user_msg_queue[from_user][0]["content"]:
|
||||||
if message_data:
|
return response_xml
|
||||||
event = OAEvent.from_payload(message_data)
|
else:
|
||||||
if event:
|
message_data = await self.get_message(xml_msg)
|
||||||
await self._handle_message(event)
|
|
||||||
|
|
||||||
return response_xml
|
if message_data:
|
||||||
|
event = OAEvent.from_payload(message_data)
|
||||||
|
if event:
|
||||||
|
user_msg_queue.setdefault(from_user,[]).append(
|
||||||
|
{
|
||||||
|
"content":event.message,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
await self._handle_message(event)
|
||||||
|
|
||||||
|
return response_xml
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
|
|||||||
@@ -101,13 +101,15 @@ class OfficialAccountAdapter(adapter.MessagePlatformAdapter):
|
|||||||
Appsecret=config['AppSecret'],
|
Appsecret=config['AppSecret'],
|
||||||
AppID=config['AppID'],
|
AppID=config['AppID'],
|
||||||
)
|
)
|
||||||
if self.config['Mode'] == "passive":
|
elif self.config['Mode'] == "passive":
|
||||||
self.bot = OAClientForLongerResponse(
|
self.bot = OAClientForLongerResponse(
|
||||||
token=config['token'],
|
token=config['token'],
|
||||||
EncodingAESKey=config['EncodingAESKey'],
|
EncodingAESKey=config['EncodingAESKey'],
|
||||||
Appsecret=config['AppSecret'],
|
Appsecret=config['AppSecret'],
|
||||||
AppID=config['AppID'],
|
AppID=config['AppID'],
|
||||||
)
|
)
|
||||||
|
else:
|
||||||
|
raise KeyError("请设置微信公众号通信模式")
|
||||||
|
|
||||||
|
|
||||||
async def reply_message(self, message_source: platform_events.FriendMessage, message: platform_message.MessageChain, quote_origin: bool = False):
|
async def reply_message(self, message_source: platform_events.FriendMessage, message: platform_message.MessageChain, quote_origin: bool = False):
|
||||||
|
|||||||
Reference in New Issue
Block a user