我有一个不和谐的机器人,它会定期检查数据库中的一些数据,如果有更新,它会向频道输出一些内容。所以我设置了一个每小时运行一次的函数。
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
,因此消息仅发送到我的服务器通道。本质上,我只向我的频道发送通知,如何向每个拥有我的机器人的频道发送一个通知,这可能吗?
答案 0 :(得分:0)
您可以使用 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
频道,以便您可以将其存储在数据库中并使用它来发送更新。