python - 我可以让我的不和谐机器人向添加了该机器人的所有服务器发送消息吗?
问题描述
我有一个不和谐的机器人,它会定期检查数据库中的一些数据,如果有更新,它会向频道输出一些东西。所以我设置了一个每小时运行一次的函数。
async def check_new():
general_channel = bot.get_channel(channel_id)
embed = discord.Embed(
title="Update!",
color=0xff0000,
description=''
)
while True:
change = check_change()
if change:
await general_channel.send(embed=embed)
await asyncio.sleep(3600)
@bot.event
async def on_ready():
print('Logged in as')
print(bot.user.name)
print(bot.user.id)
print('------')
bot.loop.create_task(check_new())
当机器人被添加到多个服务器时,问题就出现了,在这些服务器中,消息只发送到特定的到特定的channel_id
,因此消息只发送到我的服务器通道。本质上,我只向我的频道发送通知,如何向每个拥有我的机器人的频道发送通知,这可能吗?
解决方案
你可以得到你的机器人所在的公会列表,用bot.guilds
if change:
guilds = bot.guilds()
for guild in guilds:
channels = guild.channels #get all channels
for channel in channels:
try:
await channel.send(embed=embed)
break
except:
print('unable to send in', channel, guild)
虽然您可以这样做并且它会正常工作,但我不建议这样做,因为机器人可能会update
在随机频道中发送。我建议您让用户设置一个bot updates
频道,这样您就可以将其存储在数据库中并使用它来发送更新。
参考:
推荐阅读
- ruby - Ruby // 获取跨类通信的变量 // 为什么是 nil?
- python - 希望从 python 中的文件中部分填充固定大小的数组
- c++ - 将对象声明为数组,然后将同一数组中的某个值的类型声明为子类
- websphere - 如何从 WebSphere 上托管的应用程序请求 LtpaToken2
- c# - 我无法提高(Devexpres)chartcontrol 中的图形精度
- python - 倒排索引加速
- javascript - jsPDF将html文件标签p的句子转换为一栏中的单词
- html - 尝试为 HTML 中的图像添加微光/淡入淡出效果
- gcc - 具有新的 ecores/pcores 的 OpenMP
- python - 熊猫对数据帧进行上采样并在特定窗口上进行累积和