Discord.py бот не будет отображать текст с префиксом

#python #python-3.x #discord.py

#python #python-3.x #discord.py

Вопрос:

 import discord
from discord.ext.commands import Bot

bot = Bot(command_prefix='!')
TOKEN = 'TOKEN GOES HERE'

@bot.event
async def on_ready():
    print(f'Bot connected as {bot.user}')
    await bot.change_presence(activity = discord.Game('SAO'))

#Bellow this it the trouble part
@bot.command(name='test')
async def on_message(message):
    if message.content == 'test':
        await message.channel.send('Testing 1 2 3!')

    await bot.process_commands(message)


    
bot.run(TOKEN)
 

Мне нужна помощь, чтобы он отображал ‘Test 1 2 3!’ при вводе ‘!test’? Почему, черт возьми, так сложно опубликовать, им нужно больше деталей, но я не знаю, что еще вам сказать.

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

1. Убедитесь, что вы не выдаете свой токен. Надеюсь, discord отсканировал сообщение и сбросил ваш токен.

Ответ №1:

Сообщение приходит полностью так, как вы его ввели. Вы проверяете, ввел ли пользователь «тест». Возможно, измените свой оператор if на:

 if message.content == "!test":
 

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

1. Есть ли другой способ сделать это

2. На самом деле нет, есть тактика, которую вы можете использовать, чтобы упростить задачу. Например, с помощью метода startswith для проверки, является ли это командной строкой. Пример: message.content.startswith("!") .

3. можете ли вы отправить код, демонстрирующий, как это сделать?

4. Вы можете проверить, распечатав его сразу после on_message объявления : print(message.content.startswith("!")) . Вы также можете протестировать его из строкового литерала: print("!this-is-true".startswith("!") и print("this-is-false!".startswith("!")

Ответ №2:

Вы смешиваете commands с events , on_message это событие, а не команда. согласно вашему примеру, вы должны использовать команды. Вот пример

Команда

 #Run this using !test
@bot.command()
async def test(ctx):
    await ctx.send('Testing 1 2 3!')
 

Событие

 @bot.event
async def on_message(message):
    if message.content == 'hey':
        await message.channel.send('Hello')
    await bot.process_commands(message)
 

Подробнее о командах