在 Discord (discord.py bot) 中仅从 1 个频道发送消息

Posted

技术标签:

【中文标题】在 Discord (discord.py bot) 中仅从 1 个频道发送消息【英文标题】:Sending messages from only 1 channel in Discord (discord.py bot) 【发布时间】:2022-01-21 20:44:10 【问题描述】:

对于我的 Discord 机器人,我试图让它只响应一个频道中的消息。我有以下代码:

@client.event
async def send(message):
  if message.channel.id == 897042290487492638:
    await message.channel.send('Hi!')

这个想法是它获取已发送消息的通道 id,如果它与指定的通道匹配,它将以“Hi!”响应。我的问题是当我从指定频道发送消息时,机器人不会做任何事情。我检查了机器人的权限,它拥有类似这样的所有必要权限。为了仔细检查,我在代码的前面添加了一个命令,以确保机器人正常工作,并且我可以很好地执行该命令。有人知道我在这里缺少什么吗?

我知道我可以将机器人的权限更改为仅读取指定频道,但我希望它能够读取某些命令的其他频道。我只想为这个特定的实例阅读这个频道,我认为这将是最好的方法。非常感谢任何帮助!

编辑:经过一些研究,我发现命令和事件不能很好地混合,除非添加以下行:

await client.process_commands(message)

但是,这似乎修复了机器人不执行命令但仍在执行事件的错误。我的问题恰恰相反——机器人可以很好地读取命令,但它没有执行事件。无论如何,我将这一行添加到我的代码中,但仍然无法解决此问题。

【问题讨论】:

【参考方案1】:

发生这种情况是因为没有类似 "send" 事件。我想你想使用on_message 事件:

@client.event
async def on_message(message):
  if message.channel.id == 897042290487492638:
    await message.channel.send('Hi!')

  await client.process_commands(message)

记住它需要intents.messages

【讨论】:

以上是关于在 Discord (discord.py bot) 中仅从 1 个频道发送消息的主要内容,如果未能解决你的问题,请参考以下文章

Discord bot 运行命令两次 discord.py

Discord.py Bot 将文件发送到 Discord 频道

在 Discord (discord.py bot) 中仅从 1 个频道发送消息

Discord bot 添加对消息 discord.py 的反应(无自定义表情符号)

Discord Bot 不播放声音 - Discord.py

Discord Bot w/ Discord.py 跳线