Discord.py 你能让进入特定频道的 say 命令可以与 # 一起使用吗?

Discord.py can you make a say command that goes into a specific channel be usable with the #?

我正在为 discord 机器人发出 say 命令,大部分情况下一切正常。我想做的是一个人可以在任何频道中使用的命令,它发送委托的消息,在它被告知发送它的频道中。这一切都有效,这是我的代码:

async def say(self, ctx, channelname, *, message):
        """Make the bot say whatever you want it to say"""
        channel = discord.utils.get(ctx.guild.channels, name=channelname)
        await channel.send(message)

但是,我的问题是预期的 discord 服务器中的每个频道在频道名称前面都有一个表情符号,因此使用 discord 功能要容易得多,如果您键入 # 就可以单击名称频道的。但是每当我这样做并用#发送它时它仍然会抛出这个错误代码:

AttributeError: NoneType object has no attribute “send”

有谁知道我该如何解决这个问题?

提前致谢!

在discord.py1.5.x的版本中,有一些网关意图是获取成员、频道、公会、使用事件等所必需的。你必须在你的代码并从 Developer Portal.

启用它

您可以查看 API 参考文献 来定义您需要的意图并启用来自 Developer Portal.

最好使用 ID(正如您在之前的评论中提到的)。您可以使用 channel = bot.get_channel(channel_id) 获取频道对象,然后对其调用 channel.send()。简单地获取频道不需要意图。您只需要确保机器人有权访问该频道并有权发送到那里。

警告:如果您 运行 此 BOT 在多个服务器上,我不建议使用此代码,因为即使命令 运行 在不同的服务器上,它也会将消息发送到指定的频道里面有机器人!

根据您使用的是@client 还是@bot,您需要将下面代码中的每个“客户端”切换为“bot”

@client.command()
async def say(ctx, *, message):
    channel = client.get_channel(put the channel ID that you need the bot to send to)
    
    await channel.send(f"{message}")

之后您需要做的就是转到您的 Discord 服务器并输入任何频道:

(前缀)说消息

然后机器人会将您的消息发送到您在代码中输入的频道。