【问题标题】:Discord.py - Detecting when a bot goes offlineDiscord.py - 检测机器人何时离线
【发布时间】:2021-04-04 05:47:12
【问题描述】:

现在我有一个事件可以跟踪某个机器人何时下线。 (我托管两个机器人)这是我目前的代码,我没有设法获得任何输出或任何回溯。有什么我想念的吗? (我已经开启了意图!)

@commands.Cog.listener()
  async def on_member_update(self, before, after):
    if before.id == 777361919211732993:
      if after.status == discord.Status.offline:
        channel = self.bot.get_channel(792485617954586634)
        timestamp = datetime.now()
        embed = discord.Embed(title = "⚠️ PortalBot is offline!", description = "Recorded Downtime (start): " + str(timestamp.strftime("%H:%M:%S")) , color = 0xf03224)
        embed.add_field(name = "Restart Link", value = "-")
        await channel.send(embed = embed)

任何提示或建议都会有所帮助!

【问题讨论】:

  • 乍一看,您的代码在我看来还不错。或者在你定义它之后尝试添加print(channel),看看它是否无法访问它?
  • id是bot id?

标签: python discord.py


【解决方案1】:

您的代码没有错误,但是,在解释为什么您的机器人可能无法检测到成员更新后,我将描述一些修改。

自 2020 年 10 月 27 日起,Discord 通过添加意图更新了其网关。在this 帖子中看到的最有可能影响您的代码的部分在此处引用:

对于没有 GUILD_MEMBERS 意图的机器人 --------

如果您在公会成员加入、离开或更新时不需要做任何事情,则不需要成员意图。您无法获取完整的成员列表来填充缓存,但在大多数情况下,构建持久缓存不需要完整的成员列表。

如果不在您的机器人的开发者门户页面中启用 服务器成员意图 的特权网关意图,您将无法获得这些成员更新。此外,在这样做之后,在您的主要机器人类中,您需要在 __init__ 函数中指定意图,例如:

class Bot(discord.Client):
    def __init__(self):
        discord.Client.__init__(self, intents=discord.Intents(guilds=True, members=True))

注意:如果你的机器人加入的公会少于 100 个,你完全可以启用特权意图,但是一旦你超过 100 个公会,你就需要验证你的机器人(接下来会有一个视觉验证的复选标记到bot标签)并获取数据白名单,link


现在建议对您的代码进行一些修改:

1)
您设置它的当前方式,当它离线显示时,它将始终为该机器人发生的任何更新执行该代码。这应该不是问题,但最好是安全的: if after.status == discord.Status.offline and before.status != discord.Status.offline:

2)
另一个通常不应该成为问题的修改,我会将if before.id == 777361919211732993: 更改为if after.id == 777361919211732993:,因为before 变量是成员的缓存版本,并且很少有可能丢失数据,即使是id 属性.

【讨论】:

  • 我已经尝试了你的建议,但我仍然没有得到任何输出。
  • @SpaceTurtle0 您是否完成了以下所有四项操作:1) 在您的开发人员门户中启用服务器成员意图 2) 您的机器人在少于 100 台服务器中 3) 将意图添加到您的机器人的主类 4 ) 确保机器人 ID 和频道 ID 都正确
猜你喜欢
  • 2020-07-13
  • 2021-08-01
  • 2021-07-17
  • 1970-01-01
  • 2021-09-28
  • 2019-03-06
  • 2018-06-16
  • 2020-09-01
  • 2020-12-26
相关资源
最近更新 更多