Бот Discord показывает ошибку при запуске команд, но все же иногда запускает команду

#python #discord #bots #discord.py

#python #Discord #боты #discord.py

Вопрос:

Я выполнил 2 простые команды (ping), чтобы сообщить ping бота и (очистить), чтобы очистить последние 6 сообщений. когда я запускаю команду ping, она работает нормально, но выдает трассировку в консоли. в то время как команда clear вообще не работает и выдает обратную трассировку ниже

 C:UserswelcomeDesktopPythonDiscord>bot1.py
Bot online
Ignoring exception in command clear:
Traceback (most recent call last):
  File "C:UserswelcomeAppDataLocalProgramsPythonPython37libsite-packagesdiscorditerators.py", line 263, in next
    return self.messages.get_nowait()
  File "C:UserswelcomeAppDataLocalProgramsPythonPython37libasyncioqueues.py", line 182, in get_nowait
    raise QueueEmpty
asyncio.queues.QueueEmpty

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:UserswelcomeAppDataLocalProgramsPythonPython37libsite-packagesdiscordchannel.py", line 379, in purge
    msg = await iterator.next()
  File "C:UserswelcomeAppDataLocalProgramsPythonPython37libsite-packagesdiscorditerators.py", line 265, in next
    raise NoMoreItems()
discord.errors.NoMoreItems

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:UserswelcomeAppDataLocalProgramsPythonPython37libsite-packagesdiscordextcommandscore.py", line 85, in wrapped
    ret = await coro(*args, **kwargs)
  File "C:UserswelcomeDesktopPythonDiscordbot1.py", line 19, in clear
    await ctx.channel.purge(limit=amount)
  File "C:UserswelcomeAppDataLocalProgramsPythonPython37libsite-packagesdiscordchannel.py", line 385, in purge
    await strategy(to_delete)
  File "C:UserswelcomeAppDataLocalProgramsPythonPython37libsite-packagesdiscordchannel.py", line 303, in delete_messages
    await self._state.http.delete_messages(self.id, message_ids)
  File "C:UserswelcomeAppDataLocalProgramsPythonPython37libsite-packagesdiscordhttp.py", line 241, in request
    raise Forbidden(r, data)
discord.errors.Forbidden: 403 Forbidden (error code: 50013): Missing Permissions

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "C:UserswelcomeAppDataLocalProgramsPythonPython37libsite-packagesdiscordextcommandsbot.py", line 903, in invoke
    await ctx.command.invoke(ctx)
  File "C:UserswelcomeAppDataLocalProgramsPythonPython37libsite-packagesdiscordextcommandscore.py", line 855, in invoke
    await injected(*ctx.args, **ctx.kwargs)
  File "C:UserswelcomeAppDataLocalProgramsPythonPython37libsite-packagesdiscordextcommandscore.py", line 94, in wrapped
    raise CommandInvokeError(exc) from exc
discord.ext.commands.errors.CommandInvokeError: Command raised an exception: Forbidden: 403 Forbidden (error code: 50013): Missing Permissions
  

и мой код

 import discord
from discord.ext import commands

client=commands.Bot(command_prefix='!')

@client.event
async def on_ready():
    print("Bot online")

@client.command(aliases = ['ping','latency'])
async def _ping(ctx):
    await ctx.send(f'Chucky ping {round(client.latency*1000)}ms')

#@client.command(aliases = [''])
#async def _

@client.command()
async def clear(ctx, amount=6):
    await ctx.channel.purge(limit=amount)

client.run('my token')
  

Комментарии:

1. при clear do async def clear(ctx, *, amount=0) все, что это делает, — это то, что после команды clear будет сохранено в переменной amount . это означает, что вы можете сделать (command_prefix)clear 4 , и он удалит 4 сообщения

2. * в основном означает все, что идет после параметра, прежде чем он перейдет в следующую переменную

3. @Remi_Zacharias * необходим только при хранении нескольких слов, но в этом случае сумма представляет собой только одно целое число, поэтому нет необходимости использовать *. Примером может служить, если вы хотите что-то повторить. async def repeat(ctx, *, message)

Ответ №1:

Возможно, у бота отсутствует предпосылка для удаления сообщений. Снова добавьте бота на сервер и дайте ему разрешения администратора. Вы можете сделать это по этой ссылке, если измените [client_id] на идентификатор клиента вашего бота. https://discord.com/oauth2/authorize?client_id =[clien_id]amp;scope=botamp;permissions=8 И если у вашего бота все еще нет намерения делать то, что вы хотите, возможно, попробуйте присвоить ему какой-то ранг.