如何使用discord.py中的on_presence_update事件

问题描述 投票:0回答:4

我一直在尝试能够异步监听由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以及一般意图和网关的世界还很陌生!

python discord discord.py gateway
4个回答
1
投票

看起来


@client.event
async def on_presence_update(before, after):
       #do something
可能是一种已弃用的方法。尝试使用
@client.event
async def on_presence_update(before, after):
       #do something
代替,按照discord.py 文档


0
投票

对于最近面临此问题的任何人来说,至少就我而言,问题是该功能仅在 Discord.py 2.0+ 之后可用,需要 Python 3.8+

在Python 3.7之前,你只能安装Discord.py 1.7.x,这意味着

on_presence_update()
不起作用,所以解决方案就是更新你的python和discord.py pkg。


0
投票

接受的答案不准确

on_presence_update() 并未弃用。

如此处所示它是 v2.0 上的新内容:

状态更新(成员状态和活动的变化)现在有一个单独的 on_presence_update() 事件。 on_member_update() 事件现在仅在成员更新时调用(昵称、角色、待处理状态等的更改)。


0
投票

所以,我是这个论坛的新手,但我想我可以帮助你,即使这个问题是 1 年零 5 个月前提出的..

所以这是我使用 on_presence_update 的代码:

on_member_update()

所以尝试一下,如果不起作用,你可能必须全力以赴:

on_presence_update

希望这可以帮助你,即使一年后..

(我在文档中找到了这个解决方案)

© www.soinside.com 2019 - 2024. All rights reserved.