Discord.py команды всегда произносятся как существующие команды, даже если они совершенно случайны

#python #discord #discord.py

#python #Discord #discord.py

Вопрос:

Я пытаюсь написать Discord-бота в discord.py он просто реагирует на команды, например, когда вы вводите =!firewall, он говорит Привет! Вот мой код:

 import discord
from discord.ext import commands

TOKEN = ('')

client = discord.Client()
bot = commands.Bot(command_prefix='=!')

@bot.event
async def on_ready():
    print('Bot ready')

@bot.event
async def on_message(message):
    if message.author == client.user:
        return

    @bot.command(pass_context=True)
    async def chickennuggets(ctx):
        await message.channel.send("Hello!")
    await bot.process_commands(message)

bot.run(TOKEN)
 

Однако, когда я пытаюсь запустить команду с =!firewall в Discord, консоль возвращает это:

 Ignoring exception in on_message
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/discord/client.py", line 343, in _run_event
    await coro(*args, **kwargs)
  File "/Users/pixdoet/Code/python/firewall/bottest.py", line 19, in on_message
    async def chickennuggets(ctx):
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/discord/ext/commands/core.py", line 1257, in decorator
    self.add_command(result)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/discord/ext/commands/core.py", line 1143, in add_command
    raise CommandRegistrationError(command.name)
discord.ext.commands.errors.CommandRegistrationError: The command chickennuggets is already an existing command or alias.
 

Как это довольно очевидно, chickennuggets не является командой по умолчанию или командой, используемой любыми другими библиотеками в Python. Я искал это в Интернете, но безрезультатно. Пожалуйста, помогите. Спасибо!

Ответ №1:

Прежде всего, вы ссылаетесь на свою команду chickennuggets с другим именем в своем сообщении, что говорит мне о том, что вы используете псевдоним для команды в своем коде. Однако вы не указали псевдоним или то, как вы его определяете. Ваш отступ в вашем коде также неверен. Попробуйте это:

 import discord
from discord.ext import commands

client = discord.Client()
bot = commands.Bot(command_prefix='=!')

@bot.event
async def on_ready():
    print('Bot ready')

@bot.event
async def on_message(message):
    if message.author == client.user:
        return
    await bot.process_commands(message)

@bot.command(pass_context=True, aliases = ['firewall'])
async def chickennuggets(ctx):
    await ctx.send("Hello!")

TOKEN = ('') # insert your token here
bot.run(TOKEN)
 

Кроме того, пожалуйста, не сливайте токен вашего бота на какой-либо общедоступный форум, потому что другие могут запускать свой код через вашего бота, используя токен вашего бота. Теперь вам нужно будет перейти к вашему приложению на портале разработчика Discord и сгенерировать новый токен. Это приведет к обнулению вашего предыдущего токена, чтобы никто не мог использовать его для запуска своего кода на вашем боте.

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

1. Спасибо за ваш ответ, но клиент фактически используется в client.user

2. Упс, пропустил это.

3. Вместо использования client.user use bot.user . Вы запускаете экземпляр бота, а не клиент. Также зачем определять оба? В этом нет смысла