#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 И если у вашего бота все еще нет намерения делать то, что вы хотите, возможно, попробуйте присвоить ему какой-то ранг.