Discord工单机器人出现async_generator无flatten属性的AttributeError求助
解决Discord工单机器人的
flatten()属性错误 错误原因
你遇到的AttributeError: 'async_generator' object has no attribute 'flatten'是discord.py版本升级引发的API变更导致的:在discord.py v2.0及以上版本中,TextChannel.history()方法返回的是异步生成器(async_generator),不再提供flatten()方法;而旧版本(v1.x)中该方法返回MessageHistory对象,自带flatten()用于将历史消息转为列表。
修复方案
直接替换第26行的代码,用异步列表推导式替代flatten(),实现相同的消息列表收集功能:
修改前代码
msgs = await support_request_channel.history(limit=200, oldest_first=True).flatten()
修改后代码
msgs = [msg async for msg in support_request_channel.history(limit=200, oldest_first=True)]
验证修复
修改后,msgs仍然是频道历史消息的列表,后续筛选机器人消息、删除旧消息的逻辑无需改动。机器人即可正常完成初始化流程,恢复发送消息、删除旧消息的功能。
版本确认(可选)
若不确定当前discord.py版本,可执行以下命令查看:
pip show discord.py
如果版本号为2.x.x及以上,上述修改完全适用。
内容的提问来源于stack exchange,提问作者bsrp23
相关产品推荐
相关产品推荐

