-
Notifications
You must be signed in to change notification settings - Fork 72
Open
Description
我在使用您的软件的时候,希望可以轮询调用(即使轮询很消耗cpu性能)获取下一条新的消息也就是这个issue #21 。这样每次确实可以获取新的消息和他对应的chat_name.但是如果有多条消息,进行回复时,会用到引用回复。我在观察您代码时,发现他只能发送监听中的引用回复。这有点不方便,所以我阅读了wxauto的代码和接口文档,发现wxauto是支持获取当前窗口所有消息的(GetAllMessage()),根据您的代码实现,我在app/wechat_adapter.py下引入了GetAllMessage方法:
def GetAllMessage(self):
if not self._instance:
raise AttributeError("微信实例未初始化")
return self._instance.GetAllMessage()然后为了实现无缓存引用回复,我又在app/api/message_operations.py添加了:
@message_ops_bp.route('/quote_stateless', methods=['POST'])
@require_api_key
def quote_stateless_message():
"""无需监听的 引用回复消息"""
wx_instance = wechat_manager.get_instance()
if not wx_instance:
return jsonify({
'code': 2001,
'message': '微信未初始化',
'data': None
}), 400
data = request.get_json()
who = data.get('who')
message_id = data.get('message_id')
message = data.get('message', '')
if not who or not message_id:
return jsonify({
'code': 1002,
'message': '缺少必要参数',
'data': None
}), 400
try:
# 切换到who的窗口
wx_instance.ChatWith(who)
time.sleep(0.5) # 等待窗口加载
messages = wx_instance.GetAllMessage()
logger.info(f"已切换到聊天窗口: {messages}")
target_message = None
for msg in messages:
if getattr(msg, 'id', '') == message_id:
target_message = msg
break
if not target_message:
# 可能在独立窗口中 尝试关闭窗口
wind = wx_instance.get_instance().core.get_sub_wnd(who)
if wind:
wind.close()
# 因为是每次关闭窗口 消息id都会变 所以用普通的方法发送
return send_message()
return jsonify({
'code': 3001,
'message': f'未找到消息ID: {message_id}',
'data': None
}), 404
# 引用回复
target_message.quote(message)
return jsonify({
'code': 0,
'message': '引用回复成功',
'data': {
'who': who,
'message_id': message_id,
'reply_text': message
}
})
except Exception as e:
logger.error(f"引用回复失败: {str(e)}")
return jsonify({
'code': 3001,
'message': f'引用回复失败: {str(e)}',
'data': None
}), 500Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels