如何让 discord.py bot 发送到它被调用的服务器?

Posted

技术标签:

【中文标题】如何让 discord.py bot 发送到它被调用的服务器?【英文标题】:How to make discord.py bot send to the server it's called in? 【发布时间】:2021-04-10 01:11:33 【问题描述】:

对 discord.py 有疑问。 我运行我的机器人所在的两个单独的服务器,我的测试服务器和我的主服务器。 问题是当我在测试服务器中发送消息时,机器人会将其消息发送到主服务器,并且永远不会将其发送回正在调用命令的服务器(仅在函数中)。

例如:

 if message.content == '!Hello':
 await message.channel.send('Hello there!')

如果我在测试服务器中输入上述内容,我的机器人会回复“你好!”在测试服务器中应该如此。但是,如果我尝试将此代码放在一个函数中并调用它:

if message.content == "!Hello":
    await hellomessage()

async def hellomessage():
    channel = client.get_channel('Channel ID Here')
    await channel.send('Hello there!')

频道 ID 显然设置为特定的服务器。所以说我有 ID '1234' 作为我的主服务器和 ID '1111' 作为我的测试服务器,无论我是在我的测试服务器还是主服务器中调用它,该消息都会发送到主服务器,因为 ID 是 no不同的。我的问题是如何确保“通道”属性根据调用它的服务器而变化。我想要它,所以如果我说 !Hello 在我的测试服务器中,它不会发送到主服务器,而只会发送到测试服务器。

似乎是一个非常微不足道的答案,但我只是在努力寻找它,感谢任何帮助!

【问题讨论】:

【参考方案1】:

您可以使用消息的.guild 属性检查消息是从哪个公会发送的。

例子:

# You can also have a separate coroutine for your main server
async def hello_test_message():
    test_guild_channel = client.get_channel(ID_HERE)
    await test_guild_channel.send("Hello there!")

@client.event
async def on_message(message):
    if client.user == message.author:
        return

    if message.guild.id == TEST_GUILD_ID_HERE:
        if message.content.lower() == "!hello":  # .lower() for case insensitivity
            await hello_test_message()
    # Another condition for your main server + calling the other coroutine

话虽如此,我假设您没有在每个可能的频道等的值中硬编码值,如果是这种情况,并且您只希望机器人在原始消息的频道中做出响应,您可以使用message.channel.send(...

目前的做事方式会导致相当多的重复代码。

我还建议查看 discord 的命令扩展,而不是为它们使用 on_message 事件。


参考资料:

Bot example using command decorators Message.guild Guild.id commands.command() Message.channel TextChannel.send() Messageable.send() - Anything that inherits from abc.Messageable 可以发送消息给它!所以这包括用户、文本频道、context 等内容。 commands.Context - 在处理命令时你会经常用到它!

【讨论】:

我真的很感谢这些参考资料让我更深入地研究编码,你可能会说我在这方面真的很陌生。至于修复?我将所有内容都更改为使用 message.channel.send(stuff()),这使它比以前工作得更好! @jtnoble 担心,我很高兴你发现它有用!我将添加更多在这种情况下可能有用的链接:)

以上是关于如何让 discord.py bot 发送到它被调用的服务器?的主要内容,如果未能解决你的问题,请参考以下文章

Discord.py bot - 如何让机器人在 DM 中向我发送用户的消息?

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

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

discord.py Bot 并不总是删除消息

如何在 discord.py 中获取 dm [重复]

Discord Bot 响应短语(Discord.py 重写)