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

histor

Известный
Автор темы
175
111
Проблема в том, что бот на команду "#rand" реагирует не только как на команду, но и как на обычный текст. Мне надо чтобы бот реагировал на команду только как на команду и игнорировал её как текст.
main:
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'])
e041d.png

не обращайте внимание на никнеймы... локальные приколы, ничего более
 
Решение
Да, но тогда бот будет игнорировать любые сообщение начинающиеся с '#' даже когда они не являются командой
Ну создай список с командами своими и ищи совпадения в чате. 🙂
Python:
# Где-то в начале
cmds = [
    "cmd1",
    "cmd2",
    "cmd3",
]

# on_message
if not ctx.content in cmds:
    await ctx.reply("Ты " + ctx.channel.name)
Ты можешь через string.format добавить в проверке префикс свой. Ну или же вручную в массиве ставить.

histor

Известный
Автор темы
175
111
Как вариант, можно в on_message добавить проверку на то, что текст не начинается с префикса для команд.
Python:
if ctx.author != bot.user:
    if ctx.channel.name == "bot-test":
        if not ctx.content.startswith(config["prefix"]):
            await ctx.reply('Ты ' + ctx.channel.name)
Да, но тогда бот будет игнорировать любые сообщение начинающиеся с '#' даже когда они не являются командой
 

Dmitriy Makarov

25.05.2021
Проверенный
2,478
1,113
Да, но тогда бот будет игнорировать любые сообщение начинающиеся с '#' даже когда они не являются командой
Ну создай список с командами своими и ищи совпадения в чате. 🙂
Python:
# Где-то в начале
cmds = [
    "cmd1",
    "cmd2",
    "cmd3",
]

# on_message
if not ctx.content in cmds:
    await ctx.reply("Ты " + ctx.channel.name)
Ты можешь через string.format добавить в проверке префикс свой. Ну или же вручную в массиве ставить.
 
  • Нравится
Реакции: histor

histor

Известный
Автор темы
175
111
Ну создай список с командами своими и ищи совпадения в чате. 🙂
Python:
# Где-то в начале
cmds = [
    "cmd1",
    "cmd2",
    "cmd3",
]

# on_message
if not ctx.content in cmds:
    await ctx.reply("Ты " + ctx.channel.name)
Ты можешь через string.format добавить в проверке префикс свой. Ну или же вручную в массиве ставить.
Я думал так сделать, но мне не хватило навыков чтобы каждый элемент в массиве соединять с '#'. Думал, что когда будет большое количество функций, то тогда бот будет медленнее работать из за цикла. Все равно спасибо, пожалуй так и сделаю.