0

所以我试图做一个反虚荣改变作为我的机器人反核武器的一部分,但它不起作用并且没有返回任何错误。这是代码:

         
    @commands.Cog.listener()
    async def on_guild_update(self, before, after):
      if before.premium_tier == 3:
        try:
          with open('whitelisted.json') as f:
            whitelisted = json.load(f)
          before_vanity = await before.vanity_invite()
          whitelistedUsers = str(whitelisted)
          after_vanity = await after.vanity_invite()
          if before_vanity != after_vanity:
            async for entry in after.audit_logs(limit=1, after=datetime.datetime.now() - datetime.timedelta(seconds = 3), action=discord.AuditLogDiff.vanity_url_code):
              if entry.user.id in whitelistedUsers or entry.user in whitelistedUsers:
                return
              if entry.target == before:
                try:
                    await entry.user.ban(reason="Lying\n・Unauthorized user changing vanity.")                    
                    session.patch(f"https://discord.com/api/v9/guilds/{after.id}/vanity-url/{before_vanity}")
                except Exception as error:
                  if isinstance(error, discord.Forbidden):
                    return
                  else:
                    return print(f"{Fore.RED}[Anti Error]: Vanity Protection ({after.name}){Fore.RESET}")
        except Exception as error:
            print(f"{Fore.RED}[Anti Error]: {error} | Anti-Vanity. ({after.name}){Fore.RESET}") 


我还确保我在测试时没有被列入白名单,但仍然没有发生任何事情。

4

1 回答 1

0

如果您的代码中没有显示错误,则可能是您严重覆盖了cog 或 bot 中的on_command_errororon_error函数,您应该添加一个默认情况,如果该函数未处理异常,则重新引发异常

对于这个问题,我怀疑if before.premium_tier == 3:应该是if before.guild.premium_tier == 3:

于 2022-02-01T22:00:30.613 回答