Дискорд бот на питоне реагирует на команду как на текст и как на команду. Как решить эту проблему?

Рейтинг: 0Ответов: 2Опубликовано: 20.02.2023

Проблема в том, что бот на команду "#rand" реагирует не только как на команду, но и как на обычный текст. Мне надо чтобы бот реагировал на команду только как на команду и игнорировал её как текст.

import discord
import random
from discord.ext import commands

config = {
    'token': '',
    'prefix': '#',
}
intents = discord.Intents.default()
intents.presences = True
intents.members = True 
intents.message_content = True

bot = commands.Bot(command_prefix=config['prefix'], intents = intents)

@bot.command()
async def rand(ctx):
    await ctx.reply(random.randint(0, 100))

@bot.event
async def on_message(ctx):
    await bot.process_commands(ctx)
    if ctx.author != bot.user:
        if ctx.channel.name == "bot-test":
            await ctx.reply('Ты ' + ctx.channel.name)

bot.run(config['token'])

скриншот

не обращайте внимание на никнеймы... локальные приколы, ничего более

Ответы

▲ 0Принят

Как решение, могу предложить добавить что-то подобное в on_message:

if ctx.content.startswith("#"):
    return

*some logic here*
▲ 0

Вот решение немного другой проблемы, которое может помочь: https://stackoverflow.com/questions/66512034/discord-bot-ignore-command-if-word-not-present.

Там вопрос другой, но решение должно тебе подойти. В методе on_message() ты должен обработать команду через bot.process_commands(message). Подробнее можешь прочитать по этой ссылке, может понятней станет.