如何让机器人在首次加入服务器时写入特定消息?
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!')
所以实际上,你说的那段“没用”的代码实际上是做你想做的事情的关键。下次请简明扼要地说什么没用,而不是只说“这整件事没用,因为它没有做我想做的事”。
【讨论】:
以上是关于如何让机器人在首次加入服务器时写入特定消息?的主要内容,如果未能解决你的问题,请参考以下文章
在 R Shiny App 中,如何在首次调用 App 时呈现默认表格?