Pycord message.content 为空

bor*_*ris 6 python discord pycord

我正在使用 Discord API 并注意到我无法访问消息的内容。

这是我的代码:

import discord

client = discord.Client()

@client.event
async def on_ready():
    print(f'Logged in as {client.user}')

@client.event
async def on_message(message):
    if 'My Name' in message.author.name:
        print(f'Author: {message.author.name}')
        print(f'Content: {message.content}')
        print(f'Clean_Content: {message.clean_content}')
        print(f'System_Content: {message.system_content}')

client.run(TOKEN, bot=False)
Run Code Online (Sandbox Code Playgroud)

请注意,由于显而易见的原因,令牌和我的用户名在本文中保持私密。

无论消息如何,这都是我得到的输出:

Author: My Name
Content: 
Clean_Content: 
System_Content: 
Run Code Online (Sandbox Code Playgroud)

如您所见,我还尝试了 clean_content 和 system_content 属性。然而,它们都没有显示实际的消息。我还尝试过使用机器人帐户,结果令人惊讶地有效,但我希望它可以与我自己的帐户一起使用。问题是 Discord 不打算让私人客户阅读消息还是我错过了一些基本的东西?

小智 13

正如马特提到的,不支持用户机器人。但是,您的问题可能与意图有关。您可以尝试使用以下几行:

import discord

intents = discord.Intents.all()

client = discord.Client(intents=intents)
Run Code Online (Sandbox Code Playgroud)

也可以看看:


Aug*_*tin 9

您可以通过MESSAGE CONTENT INTENT在 Discord 开发者面板中为您的机器人启用 来解决此问题。

import os
TOKEN = os.environ['TOKEN']
import discord 



# This example requires the 'message_content' privileged intent to function.


class MyClient(discord.Client):
    async def on_ready(self):
        print(f'Logged in as {self.user} (ID: {self.user.id})')
        print('------')

    async def on_message(self, message):
        # we do not want the bot to reply to itself
        if message.author.id == self.user.id:
            return

        if message.content.startswith('!hello'):
            await message.reply('Hello!', mention_author=True)


intents = discord.Intents.default()
intents.message_content = True



def main():
  client = MyClient(intents=intents)
  client.run(TOKEN)


if __name__ == '__main__':
  main()
Run Code Online (Sandbox Code Playgroud)

这是文档中回复的示例


小智 1

Discord 自助机器人不再受支持,您可能必须使用仍然支持它们的discord.ext。似乎使用discord.py message.content 将始终为空。