Как исправить ошибку MissingPermissions не работает |discord.py - PullRequest
0 голосов
/ 21 июня 2019

Я настроил команду *ban, и она использует декоратор @commands.has_permissions(ban_members=True). Тем не менее, мой обработчик ошибок, похоже, не отвечает на if isinstance (error, MissingPermissions):.

@client.command(name="ban", pass_ctx=True)
@commands.has_permissions(ban_members=True)
async def ban(ctx, member: discord.Member=None, *, reason: str=None):
    # command is here but irrelevant i think

@ban.error
async def ban_error(ctx, error):
    if isinstance(error, BadArgument): # members != @user
        await ctx.send("Please specify a **valid** user!")
    elif isinstance(error, MissingPermissions): # can't ban
        await ctx.send("You need the **ban members** permission")
    else:
        raise error

Он не попадает в обработчик ошибок, но мой терминал [vscode] действительно выдает это: discord.ext.commands.errors.CommandInvokeError: Command raised an exception: Forbidden: 403 FORBIDDEN (error code: 50013): Missing Permissions Я предположил, что это было то, что MissingPermissions делает? В любом случае, я озадачен, почему это не работает, поэтому помощь приветствуется:)

Также обратите внимание, что этот же код работает на моей команде kick как-нибудь?

1 Ответ

0 голосов
/ 22 июня 2019

Проблема была в том, что я пытался забанить кого-то с администратором (а не на гуннах).

Однако я, вероятно, добавлю ошибки, если бот не может забанить этого человека:

try:
    await member.ban() # member: discord.Member
except discord.Forbidden: # the error being raised
    await ctx.send(f"I don't have permission to ban **{member}**")

Это гарантирует, что бот действительно может запретить упоминание пользователя (проверено и работает)

...