Как определить MissingPermissions для диска disot bot python 3.6

122
13

@warn.error
async def kick_error(error, ctx):
if isinstance(error, MissingPermissions):
text = "Sorry {}, you do not have permissions to do that!".format(ctx.message.author)
await bot.send_message(ctx.message.channel, text)

Он работает, но когда я использую команду warn, он печатает, что MissingPermissions не определен. Как определить его?

eError: name 'MissingPermissions' is not defined

спросил(а) 2021-01-28T00:16:57+03:00 2 месяца, 2 недели назад
1
Решение
96

Асинхронная ветвь не определяет MissingPermissions. Вместо этого has_permissions повысит CheckFailure.

Если вы хотите написать свои собственные has_permissions которые повышают уникальную ошибку, вы можете подклассифицировать CheckFailure самостоятельно:

from discord.ext.commands import CheckFailure, check

class MissingPermissions(CheckFailure): pass

def has_permissions(**perms):
def predicate(ctx):
msg = ctx.message
ch = msg.channel
permissions = ch.permissions_for(msg.author)
if all(getattr(permissions, perm, None) == value for perm, value in perms.items()):
return True
raise MissingPermissions()
return check(predicate)

Это не совсем так, как переписывание has_permissions, которое включает недостающие разрешения в объекте MissingPermissions, но оно должно быть достаточно близко, чтобы имитировать один и тот же поток управления

ответил(а) 2021-01-28T00:16:57+03:00 2 месяца, 2 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема