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

如何让机器人在第一次加入服务器时编写特定消息?

廖令
2023-03-14

我希望我的不和谐机器人在加入新服务器时发送一条特定的消息,例如:“你好”。机器人应该搜索要写入的顶部通道,然后在那里发送消息。我看到了这个,但这对我没有帮助

async def on_guild_join(guild):
    general = find(lambda x: x.name == 'general',  guild.text_channels)
    if general and general.permissions_for(guild.me).send_messages:
        await general.send('Hello {}!'.format(guild.name))```

共有1个答案

壤驷高洁
2023-03-14

您使用的代码实际上非常有用,因为它包含了您需要的所有构建块:

  • on_guild_join事件
  • 所有通道的列表,按照从上到下的顺序(根据官方参考)。如果你想获得顶级频道,你可以使用guild.text_channels[0]
  • 检查所述通道的权限
async def on_guild_join(guild):
    general = guild.text_channels[0]
    if general and general.permissions_for(guild.me).send_messages:
        await general.send('Hello {}!'.format(guild.name))
    else:
        # raise an error

现在您可能遇到的一个问题是,如果顶部频道类似于公告频道,您可能没有在其中发送消息的权限。因此,从逻辑上讲,您希望尝试下一个通道,如果这不起作用,请尝试下一个通道。您可以在正常的for循环中执行此操作:

async def on_guild_join(guild):
    for general in guild.text_channels:
        if general and general.permissions_for(guild.me).send_messages:
            await general.send('Hello {}!'.format(guild.name))
            return
    print('I could not send a message in any channel!')

所以实际上,你说的这段“没用”的代码实际上是做你想做的事情的关键。下次请简明扼要地说它有什么没有用,而不是仅仅说“这整件事没有用,因为它没有做我想要的事情”。

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

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

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

  • 所以基本上,我想要的是每当我的机器人加入任何公会时,它应该向我服务器中的一个特定频道发送一条消息,声明它被邀请到一个服务器,并带有它的名字,如果可能的话,还有该服务器的邀请链接。我尝试了一些东西,但从来没有真正奏效。 它不起作用,并抛出以下错误: 我真的不知道如何让机器人发送带有公会名称的公会邀请链接。

  • 我试图让我的自我机器人加入服务器。我知道self-bots反对discordtos,但我想学习一些新的东西。 这是我尝试过的命令: 错误:

  • 我正在尝试让我的discord机器人连接到一个语音频道,目前如下所示: 基本上,当他们发送消息时,我希望它加入消息作者的语音频道“-skip”,然后我的机器人加入,在聊天中说-p scotland forever,然后离开。我收到一条错误消息,说“频道”未定义或“连接”未定义,我尝试了几种不同的方法,我想我只是没有导入插件或其他东西,这可能是我的问题,但我知道应该使用什么插件。任何帮助都将不胜感激