【问题标题】:How do I make a bot write a certain message when it first joins a server?如何让机器人在首次加入服务器时写入特定消息?
【发布时间】:2020-10-16 21:24:30
【问题描述】:

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

async def on_guild_join(guild):
    general = find(lambda x: x.name == 'general', guild.text_channels)
    如果一般和general.permissions_for(guild.me).send_messages:
        等待 general.send('Hello {}!'.format(guild.name))```

【问题讨论】:

  • 您发布的代码应该找到名为“general”的频道并在其中写一条消息。什么不适合它?你有任何错误吗?
  • 我知道,但我不想搜索名为 general 的频道,我想找到机器人可以写的顶级频道

标签: python discord.py


【解决方案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

现在您可能遇到的一个问题是,如果顶级频道类似于公告频道,您可能没有在其中发送消息的权限。所以从逻辑上讲,你会想尝试下一个频道,如果这不起作用,下一个等等。你可以在正常的 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!')

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

【讨论】:

    猜你喜欢
    • 2018-11-21
    • 1970-01-01
    • 2018-07-27
    • 2020-12-30
    • 2020-11-08
    • 2020-10-20
    • 1970-01-01
    • 2019-07-27
    • 2020-01-22
    相关资源
    最近更新 更多