当前位置: 首页 > 知识库问答 >
问题:

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

梁修贤
2023-03-14

我有一个关于不和的问题。皮耶。我运行我的bot所在的两个独立服务器:测试服务器和主服务器。问题是,当我在测试服务器中发送消息时,bot会将其消息发送到主服务器,而不会将其发送回调用命令的服务器(仅在函数中)。

例如:

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

如果我在测试服务器中键入上述内容,我的bot将以“你好!”在测试服务器中。但是,如果我尝试将此代码放入函数并调用它:

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没有什么不同。我的问题是如何确保“channel”属性根据调用它的服务器而改变。如果我说的话,我希望如此!您好,在我的测试服务器中,它不发送到主服务器,只发送到测试服务器。

似乎是一个非常琐碎的答案,但我只是在努力寻找它,任何帮助都很感激!

共有1个答案

林辰钊
2023-03-14

您可以使用检查发送的消息。帮会消息的属性。

例子:

# 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的命令扩展,而不是对消息使用事件。

  • 使用命令装饰器的机器人示例
  • Message.guild
  • Guild.id
  • commands.command()
  • Message.channel
  • TextChannel.send()
  • Messageable.send()-从abc继承的任何东西。Messagable能够向其发送消息!所以这包括用户、文本通道、上下文等。
  • 命令。Context-在处理命令时,你会经常使用这个!

 类似资料:
  • 我目前正在制作一个discord bot,并希望在服务器加入时在服务器的通道中发送一条消息,这是我到目前为止的代码。 当我运行这段代码时,什么都不会发生。我没有得到任何ERORR或输出。 如果有人能帮忙,那就太棒了。谢谢

  • 我正试图通过discord创建一个discord机器人。py并希望创建一个显示成员pfp的命令。但是,我希望bot能够识别何时正在ping,何时正在请求pfp。我如何重新格式化它,使我的机器人识别它是否在成员ping时被引用(假设机器人的名称和id为“bot#1111”) 我希望discord用户输入的reference命令 ,membget@Bot#1111

  • 在我的不和谐中,我有几个角色,比如“所有者”、“成员”和“监狱”。我希望bot只能由“所有者”角色访问,并希望命令如下所示:。监狱@user。然后机器人应该去掉“成员”角色,给他们“监狱”角色。 不和谐服务器最新更新请在此输入图像描述

  • 我试图制作一个不和谐机器人,当被召唤时,它将加入作者所在的语音频道。 这是我所拥有的: 当我加入语音频道并键入命令时,我收到以下错误:

  • 每次机器人被邀请到服务器时,我都想发送一条消息。然后它应该写这样的话:“你好,这是我的不和机器人” 到目前为止,我有这个代码,它不会产生错误,但也不会发送消息。

  • 因此,我希望我的bot在我的bot所在的每台服务器上都发送一条消息,但它将仅以一个通道名发送一条消息,如 示例: 机器人搜索频道名称将军 机器人会向该频道发送一条消息,它会继续向我的机器人所在的其他服务器发送“你好”。 谁能给我举个例子?因为我不知道如何。所以我在这里寻求帮助