You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用fbchat未收到正确消息,代码中abc(message_object)调用存在问题

解决fbchat聊天机器人无法正常接收消息的问题

嘿,我之前也踩过fbchat消息处理的坑,结合你的代码来看,核心问题肯定出在onMessage里调用abc(message_object)这一步。下面是几个最可能的原因和对应的解决办法:

1. abc函数阻塞了客户端的事件循环

fbchat的客户端是靠异步事件循环来处理消息的,如果abc是个同步的耗时函数(比如要发网络请求、做大量计算),它会直接卡住整个消息处理线程,导致后续的消息根本没法被接收和处理。

解决办法:

把onMessage改成异步方法,然后用异步的方式调用abc:

from fbchat import log, Client, Message
from ais import abc
import asyncio

class EchoBot(Client):
    async def onMessage(self, author_id, message_object, thread_id, thread_type, **kwargs):
        self.markAsDelivered(author_id, thread_id)
        self.markAsRead(author_id)
        log.info("{} from {} in {}".format(message_object, thread_id, thread_type.name))
        
        if author_id != self.uid:
            # 如果abc本身是异步函数,直接await
            await abc(message_object)
            # 如果abc是同步函数,用to_thread包装成异步任务
            # asyncio.create_task(asyncio.to_thread(abc, message_object))

client = EchoBot("your_email", "your_password")
client.listen()

2. abc修改了原message_object的状态

fbchat的message_object是客户端内部用来管理消息的实例,如果abc函数里对这个对象做了一些意外的修改(比如删属性、改内部状态),会干扰客户端后续的消息处理流程,导致接收异常。

解决办法:

别直接传原对象,要么提取需要的字段(比如消息文本)传进去,要么传一个对象副本:

if author_id != self.uid:
    # 只传消息文本(最常用的场景)
    msg_content = message_object.text
    abc(msg_content)
    
    # 如果需要完整的消息信息,传副本
    from copy import deepcopy
    msg_copy = deepcopy(message_object)
    abc(msg_copy)

3. abc抛出了未捕获的异常

如果abc执行时出了错但没被捕获,会直接打断onMessage的执行流程,严重的话甚至会让客户端崩溃,自然没法接收消息了。

解决办法:

给abc的调用加个异常捕获:

if author_id != self.uid:
    try:
        abc(message_object)
    except Exception as e:
        log.error(f"调用abc时出错了: {str(e)}")
        # 还可以给用户回个消息告知出错
        self.send(Message(text="哎呀,处理你的消息时出了点小问题😅"), thread_id=thread_id, thread_type=thread_type)

4. 版本兼容性问题

不同版本的fbchat对message_object的结构定义可能不一样,如果abc是基于旧版本的fbchat写的,在新版本里调用就会出错。

解决办法:

  • 检查ais模块的abc函数适配的fbchat版本,然后安装对应的版本:
pip install fbchat==1.9.0  # 替换成你确认兼容的版本号
  • 或者修改abc函数,适配当前使用的fbchat版本的message_object结构。

内容的提问来源于stack exchange,提问作者Display name

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:43:21