Python 如何在discord.py中获取用户活动?

Python 如何在discord.py中获取用户活动?,python,python-3.x,discord,discord.py,Python,Python 3.x,Discord,Discord.py,我正在尝试制作一个机器人,将用户正在玩的内容写入聊天室,但即使在游戏运行时,也不会一直显示任何内容 我做错了什么 工作代码: from discord.ext import tasks import discord intents = discord.Intents.all() intents.presences = True class MyClient(discord.Client): def __init__(self, *args, **kwargs): s

我正在尝试制作一个机器人,将用户正在玩的内容写入聊天室,但即使在游戏运行时,也不会一直显示任何内容

我做错了什么

工作代码:

from discord.ext import tasks
import discord

intents = discord.Intents.all()
intents.presences = True


class MyClient(discord.Client):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

    async def on_ready(self):
        print('Logged in as')
        print(self.user.name)
        print(self.user.id)
        print('------')

    @tasks.loop(seconds=5)
    async def activity_task(self, message):
        mentions = message.mentions
        if len(mentions) == 0:
            await message.reply("Remember to give someone to get status!")
        else:
            activ = mentions[0].activity
            if activ is None:
                await message.reply("None")
            else:
                await message.reply(activ.name)

    @activity_task.before_loop
    async def before_my_task(self):
        await self.wait_until_ready()

    async def on_message(self, message):
        if message.content.startswith('!status'):
            self.activity_task.start(message)


client = MyClient(intents=intents)
client.run('token')

正如谷神星所说,你需要允许意图。 转到开发人员页面,然后转到bot。向下滚动一点,您将看到: 打开状态和服务器成员意图

现在,在代码中,必须在开头添加以下内容:

intents = discord.Intents.all()
将bot启动代码更改为

client = MyClient(intents=intents)
现在,有了意图,你想要对方的活动。 因此,在activity_task方法中,您不能使用message.author,因为这将返回发送消息的人,而不是您提到的人

将其更改为:

async def activity_task(self, message):
        mentions = message.mentions
        if len(mentions) == 0:
            await message.reply("Remember to give someone to get status!")
        else:
            activ = mentions[0].activity
            if activ == None:
                await messag.reply("None")
            else:    
                await message.reply(activ.name)


现在,如果你这样做!status@[此处为有效ping],它应该返回他们正在执行的任何操作。必须注意:它必须是有效的ping。

正如Ceres所说,您需要允许意图。 转到开发人员页面,然后转到bot。向下滚动一点,您将看到: 打开状态和服务器成员意图

现在,在代码中,必须在开头添加以下内容:

intents = discord.Intents.all()
将bot启动代码更改为

client = MyClient(intents=intents)
现在,有了意图,你想要对方的活动。 因此,在activity_task方法中,您不能使用message.author,因为这将返回发送消息的人,而不是您提到的人

将其更改为:

async def activity_task(self, message):
        mentions = message.mentions
        if len(mentions) == 0:
            await message.reply("Remember to give someone to get status!")
        else:
            activ = mentions[0].activity
            if activ == None:
                await messag.reply("None")
            else:    
                await message.reply(activ.name)


现在,如果你这样做!status@[此处为有效ping],它应该返回他们正在执行的任何操作。必须注意:必须是有效的ping。

您需要启用状态您需要启用状态您还必须在代码中启用它们。是的,添加了这一点@Łukaszkwiecinski他创建了自己的客户机类,所以它不是bot=discord.cliententents=intents,而是client=myclientents=intents@Łukaszkwiecinski好吧,我会修复我添加并启用了上面描述的所有内容,但是bot仍然不能正常工作。你还必须在代码中启用它们。是的,补充道@Łukaszkwiecinski他创建了自己的客户机类,所以它不是bot=discord.cliententents=intents,而是client=mycliententents=intents@Łukaszkwiecinski好的,我会修复我添加并启用了上面描述的所有内容,但是bot仍然不能正常工作