我一直在尝试能够异步监听由discord发送的事件,以指示用户活动状态的变化(例如,如果有人在discord上听音乐,它会跟踪他们正在听的音乐的变化当他们通过播放列表收听时,或者如果用户开始玩游戏就会触发事件)
我正在尝试使用不和谐机器人来执行此操作,该机器人将跟踪给定服务器成员的数据(该机器人是其中的一部分,具有管理权限)。我在开发人员门户上为机器人启用了特权意图,因为 on_presense_update 事件需要此操作。在我的代码中,我指定了我想听的意图,如下所示:
intents = discord.Intents.default()
intents.members = True
intents.presences = True
client = commands.Bot(command_prefix='>', itents=intents)
但是,我的事件侦听器永远不会检测到用户状态的任何更改(特别是活动状态更新);以下代码永远不会运行:
intents = discord.Intents.default()
intents.members = True
intents.presences = True
client = commands.Bot(command_prefix='>', itents=intents)
我是否错误地实现了这一点,或者我是否使用错误的意图来完成我想要的事情?
如果我没有分享正确的细节,请告诉我——我对discord.py以及一般意图和网关的世界还很陌生!
看起来
@client.event
async def on_presence_update(before, after):
#do something
可能是一种已弃用的方法。尝试使用 @client.event
async def on_presence_update(before, after):
#do something
代替,按照discord.py 文档。
对于最近面临此问题的任何人来说,至少就我而言,问题是该功能仅在 Discord.py 2.0+ 之后可用,需要 Python 3.8+
在Python 3.7之前,你只能安装Discord.py 1.7.x,这意味着
on_presence_update()
不起作用,所以解决方案就是更新你的python和discord.py pkg。
接受的答案不准确
on_presence_update() 并未弃用。
如此处所示它是 v2.0 上的新内容:
状态更新(成员状态和活动的变化)现在有一个单独的 on_presence_update() 事件。 on_member_update() 事件现在仅在成员更新时调用(昵称、角色、待处理状态等的更改)。
所以,我是这个论坛的新手,但我想我可以帮助你,即使这个问题是 1 年零 5 个月前提出的..
所以这是我使用 on_presence_update 的代码:
on_member_update()
所以尝试一下,如果不起作用,你可能必须全力以赴:
on_presence_update
希望这可以帮助你,即使一年后..
(我在文档中找到了这个解决方案)