在 discord.py 中,on_message 不会为一个公会触发

Posted

技术标签:

【中文标题】在 discord.py 中,on_message 不会为一个公会触发【英文标题】:In discord.py, the on_message does not trigger for one guild 【发布时间】:2021-04-26 06:35:09 【问题描述】:

我正在尝试弄清楚如何为 Discord 编写一个简单的机器人。 但是,我面临的问题是,对于一个特定的服务器(或称为公会),我没有收到任何消息。

我以同一个用户在网页界面登录了这个公会。我看到消息进来了。

但是,在客户端中我没有看到任何记录。

代码很简单:

import discord

class DiscordClient(discord.Client):
    async def on_ready(self, *args, **kwargs):
        print(f"Connected as self.user.display_name to:")

        for guild in self.guilds:
            print(f"- guild.name")

    async def on_message(self, message):
        print(f"Message from 'message.guild.name'")

DiscordClient().run(TOKEN, bot=False)

on_ready,我可以看到它知道公会甚至频道。所以没关系。有联系...

服务器是“Among Us”服务器,拥有 50 万用户。所以也许这是一个限制,因为太多的用户?因为on_message 确实会为用户数量有限(例如 20k 左右)的服务器正确触发。

我应该调整什么设置来连接到这个服务器以便接收消息?

谢谢!

【问题讨论】:

只是在黑暗中拍摄,但您的机器人是否有权读取大型服务器上的消息? @ZeroKnight:不,但这也是我目前使用自己的用户 (bot=False) 而不是机器人登录的原因。而我自己的用户确实可以在网络界面中很好地收到消息... 我真的不确定要特别建议什么,因为用户帐户具有不同的 API 访问权限,我什至不确定是否记录在案。如果仅此一项是您在这里看到的差异的原因,我不会感到惊讶。您是为了测试差异而进行自我测试,还是打算编写一个自我机器人? 我目前正在编写一个自我机器人,因为比较网络级别的差异更容易。我注意到在浏览器上发送的 json 与 discord.py 发送的 json 不同,但对于所有意图和目的来说都无关紧要......我从较小的公会收到消息就好了。 对于任何参与此讨论的人,这是我打开的一个错误:github.com/Rapptz/discord.py/issues/6340 【参考方案1】:

我没有看到您的代码有任何问题,可能是意图问题 (?),尝试启用一些基本意图

intents = discord.Intents.default()

DiscordClient(intents=intents).run(TOKEN, bot=False)

【讨论】:

我在发帖之前确实检查了意图,但所有内容都设置为 True。也许这有点宽,但它适用于较小的服务器......像你提到的那样明确设置它。 不,我从 none() 开始,并在消息、公会和 webhook 上添加了意图。我收到了来自我加入的其他公会的消息,但不是大公会......在这里完全不知所措:(

以上是关于在 discord.py 中,on_message 不会为一个公会触发的主要内容,如果未能解决你的问题,请参考以下文章

如何在 discord.py 中将 on_message 与 sqlite3 集成?

discord.py,在没有 on_message() 事件的情况下通过通道 id 发送消息?

Discord.py on_message() 但仅用于私人消息

为啥我的 discord.py 机器人不响应 on_message 事件?

Discord.py:有没有办法使用 on_message() 函数获取命令的参数?

discord.py bot:on_message 检测机器人等待发送()消息