首页 > 解决方案 > 我可以让我的不和谐机器人向添加了该机器人的所有服务器发送消息吗?

问题描述

我有一个不和谐的机器人,它会定期检查数据库中的一些数据,如果有更新,它会向频道输出一些东西。所以我设置了一个每小时运行一次的函数。

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,因此消息只发送到我的服务器通道。本质上,我只向我的频道发送通知,如何向每个拥有我的机器人的频道发送通知,这可能吗?

标签: pythondiscorddiscord.py

解决方案


你可以得到你的机器人所在的公会列表,用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频道,这样您就可以将其存储在数据库中并使用它来发送更新。

参考:


推荐阅读