При попытке запустить команду discord бот ничего не делает[решено]

Пишу бота для discord на python и пытался добавить таймер

@client.event
async def on_message(message):
    if message.content.startswith("таймер"):
        message.id=766947123312721930
        min=0
        sec=60
        while(sec != 0):
            sec-=1
            emb = discord.Embed(type="rich", colour=discord.Color.blurple(), description= f'До конца: {min} мин. {sec} сек.')
            await message.edit(embed = emb)
            await asyncio.sleep(0.25) 

Но при попытке ввести команду #таймер выдают ошибку:

discord.ext.commands.errors.CommandNotFound: Command "таймер" is not found

Как исправить?


Ответы (1 шт):

Автор решения: denisnumb

Вы используете объект discord.ext.commands.Bot(), командой которого является отдельная асинхронная функция, помеченная декоратором @bot.command(), где bot - имя объекта вашего бота.

Вы же не создаете функцию команды, а просто пытаетесь обработать любое поступающее сообщение, путем сравнения первого слова. Если сообщение начинается с "#таймер", то обрабатываете его как команду.

Вообще, ваша текущая проблема решится, если в этой строке вы укажите "#" перед "таймер". То есть вот так:

if message.content.startswith("#таймер"):

Но в любом случае потом возникнут другие проблемы, так как код написан не совсем корректно. Ниже я немного поправил его и сделал правильное оформление команды бота :)


Вы используете объект discord.ext.commands.Bot(), который умеет обрабатывать полноценные команды. Зачем тогда создавать такие "костыли" через проверку сообщения?

Правильнее будет заменить вашу "команду" на асинхронную функцию:

import discord, asyncio
from discord.ext import commands

bot = commands.Bot(command_prefix = '#')

@bot.command()
async def таймер(ctx):
    min=0
    sec=60
    emb = discord.Embed(type="rich", colour=discord.Color.blurple(), description= f'До конца: {min} мин. {sec} сек.')
    message = await ctx.send(embed = emb)
    while(sec != 0):
        sec-=1
        emb = discord.Embed(type="rich", colour=discord.Color.blurple(), description= f'До конца: {min} мин. {sec} сек.')
        await message.edit(embed = emb)
        await asyncio.sleep(0.25) 

bot.run(TOKEN)

В конце укажите токен вашего бота!

→ Ссылка