Команда Discord clear только для владельца - PullRequest
0 голосов
/ 30 сентября 2018

Чрезвычайно новый для разногласий ботов.Я хочу ограничить команду очистки только для сообщений владельцу.Я также хотел бы вернуть простое сообщение «у вас нет прав для использования этой команды», если пользователь, вызывающий команду, не имеет разрешения.В настоящее время я написал следующее:

async def is_owner(ctx):

    return ctx.author.id == *my userid*

@client.command(pass_context=True)

@commands.check(is_owner)

async def clear(ctx, amount=5):

    channel = ctx.message.channel

    messages = []

    async for message in client.logs_from(channel, limit=int(amount)):

        messages.append(message)

    await client.delete_messages(messages)

    await client.say('Messages deleted')

Хотя это работает, в настоящее время любой пользователь, который запускает его, может выполнить команду.Не уверен, что мне не хватает.Я ценю любые указания или советы по исправлению этой проблемы.

Ошибка после внесения исправления def is_owner (ctx) выглядит следующим образом:

Ignoring exception in on_message
Traceback (most recent call last):
  File "F:\Python\lib\site-packages\discord\client.py", line 307, in _run_event
    yield from getattr(self, event)(*args, **kwargs)
  File "F:\Python\lib\site-packages\discord\ext\commands\bot.py", line 857, in on_message
    yield from self.process_commands(message)
  File "F:\Python\lib\site-packages\discord\ext\commands\bot.py", line 846, in process_commands
    yield from command.invoke(ctx)
  File "F:\Python\lib\site-packages\discord\ext\commands\core.py", line 367, in invoke
    yield from self.prepare(ctx)
  File "F:\Python\lib\site-packages\discord\ext\commands\core.py", line 344, in prepare
    self._verify_checks(ctx)
  File "F:\Python\lib\site-packages\discord\ext\commands\core.py", line 338, in _verify_checks
    if not self.can_run(ctx):
  File "F:\Python\lib\site-packages\discord\ext\commands\core.py", line 438, in can_run
    return all(predicate(context) for predicate in predicates)
  File "F:\Python\lib\site-packages\discord\ext\commands\core.py", line 438, in <genexpr>
    return all(predicate(context) for predicate in predicates)
  File "f:\Discord Bots\First\bot.py", line 19, in is_owner
    return ctx.author.id == 'MY USERID'
AttributeError: 'Context' object has no attribute 'author'

Ответы [ 2 ]

0 голосов
/ 30 сентября 2018

Вы, вероятно, видите ошибку в направлении RuntimeWarning: coroutine 'is_owner' was never awaited, что означает, что вы дали что-то сопрограмму, когда оно не ожидалось, поэтому его значение было проигнорировано.

В асинхронной ветви, commands.check работает только с функциями, а не с сопрограммами.Измените is_owner сопрограмму на функцию, удалив async

def is_owner(ctx):
    return ctx.message.author.id == *my userid*
0 голосов
/ 30 сентября 2018

Ваш декоратор @commands.check(is_owner) может содержать проблему.Попытайтесь увидеть, может ли этот декоратор работать, и если он это делает, то проверьте, нет ли проблем, как я сказал.Кроме того, в документации Discord API говорится, что сообщения старше 2 недель не могут быть удалены, поскольку это «прервет базу данных сообщений Discord».

...