机器人首次加入服务器时,如何使它写入特定消息?

时间:2020-06-26 09:37:03

标签: python discord.py

我希望Discord机器人发送特定消息,例如:加入新服务器时显示“ Hello”。机器人应搜索要写入的顶部频道,然后在此处发送消息。 我看到了,但这对我没有帮助

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 个答案:

答案 0 :(得分:1)

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

  • on_guild_join事件
  • 所有频道的列表,按从上到下的顺序(according to the official reference)。因此,如果您想获得“热门频道”,则可以使用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

现在,您可能会遇到的一个问题是,如果顶部频道类似于公告频道,那么您可能没有在其中发送消息的权限。因此,从逻辑上讲,您应该尝试下一个频道,如果该频道不起作用,请尝试下一个频道,等等。您可以在常规的while循环中进行此操作:

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!')

因此,实际上,您说的“没用”的代码实际上是完成您想要做的事情的关键。下次,请简洁明了,说出没有什么用处,而不是仅仅说“这整个事情都没有用,因为它没有完成我想要的事情”。