@daxak

Как в aiogram сделать так, чтобы на все команды кроме определенного списка бот реагировал одинаково?

Мне нужно, чтобы бот писал "Для получения информации о существующих командах введите /help", когда команды нет в следующем списке: ["weather", "dice"]
  • Вопрос задан
  • 3134 просмотра
Пригласить эксперта
Ответы на вопрос 4
@shadrin_ss
Junior
Создаешь хендлер

@dp.message_handler() # Он принимает все запросы без фильтров
    if message.text == 'тут твой текст':
        pass # ответ 
    else:
        send_message("Для получения информации о существующих командах введите /help")
Ответ написан
Комментировать
Buchachalo
@Buchachalo
После того как опишешь реакции на все нужные команды создай хэндлер с регулярным выражением который будет ловить все сообщения начинающиеся с «/» и который будет отсылать твое сообщение.
Ответ написан
Комментировать
lxstvayne
@lxstvayne
Люблю Python
Написать свой фильтр:
from aiogram import types
from aiogram.dispatcher.filters import Filter, Command


class CommandNotInListFilter(Filter):
    def __init__(self, commands: Command):
        self.commands = commands

    def check(self, message: types.Message) -> bool:
        if not message.text.startswith('/'):
            return False
        return message.text[1:] in self.commands.commands


Далее нужно будет создать хендлер, который бы отлавливал неизвестные команды:
@dp.message_handler(
    CommandNotInListFilter(Command(['start', 'help']))
)
async def handle_unknown_commands(message: types.Message):
    await message.reply("Данной команды не существует!")
Ответ написан
Комментировать
@BrainDrill
Можно просто фильтровать с помощью анонимной функции

@dp.message_handler(lambda message: message.get_command() not in (None, "/start", ...))
async def answer_unknown_command(message: Message):
    await message.answer(f"Я не знаю что это,  друг\n\n{message.text}")
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы