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

Posted

技术标签:

【中文标题】如何让机器人在首次加入服务器时写入特定消息?【英文标题】: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 的频道,我想找到机器人可以写的***频道 【参考方案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!')

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

【讨论】:

以上是关于如何让机器人在首次加入服务器时写入特定消息?的主要内容,如果未能解决你的问题,请参考以下文章

Discord.js 尝试在用户加入语音频道时发送消息

在 R Shiny App 中,如何在首次调用 App 时呈现默认表格?

kendo ui 在首次加载期间选择特定的索引/文本

CKEDITOR 在首次提交时不通过 ajax 提交数据

(Discord 机器人)当用户加入 Discord 服务器(discord.js)时,如何发送欢迎消息?

Discord C# 用户加入消息