что не может придумать как это адекватно и аккуратно выразить в коде.
Телега. Бот.
1. Команды.
1.1. Я глупый юзер и не умею в аргументы команд и вообще хочу кнопки. Вызвал я команду и следующим сообщением хочу отправить какую-либо инфу.
Вопрос: Обработать сообщение не проблема, но как узнать что перед этим была вызвана определённая команда? Как это алгоритмически выразить и написать?
1.2. Я ещё тупее юзер и после одной команды с обработкой текста в следующем сообщении вызвал другую команду.
Вопрос: Как отменить первую команду и дать выполнение второй? Опять же, нужен алгоритм.
2. Типы сообщений.
Есть много типов сообщений: фото, видео, голосовое, геолокация, текст, совмещённое и т.д. И есть только 1 ивент, который вызывается при получении сообщения.
Вопрос: Как правильнее разделить все сообщения по типам и условиям, к примеру, на текстовые команды. Проблема в том, что команд таких может быть уйма и писать в 1 листенере их вообще не в кайф. Так что тогда делать?
1.1. Хранить в бд состояние. Переключать через fsm. В популярных бото-либах есть функция диалогов 1.2. Или ставить в очередь и троттлить, или никак 1.3. Разделять хендлеры по разным классам
1. Я не подскажу по либам, я по сути. Можешь сам набросать, главное принцип fsm и хранить состояние. Условный редис подойдёт для этого хорошо 2. Ну, фсм это одно состояние в каждый момент времени. Ты можешь просто игнорировать ввод или реально троттлить, брать все апдейты и искать самый последний для чувака. Но тут задача кмк бесполезная. 3. Ну, тут не прям просто. Если брать каждый отдельный апдейт, то можно выкупить или простую команду, или активный диалог по user id, туда и отправлять. Но тут проще сказать чем сделать)
https://spatie.be/docs/laravel-model-states/v2/01-introduction Пойдёт как fsm?
Та похер шо) fsm и самому пишется за пару минут
Не шарю просто за fsm. Это же обычные состояния?
Если не ошибаюсь, у ботов добавили фичу когда можно свой Идентификатор подкидывать при отправке сообщений, таким образом можно легко отслеживать на что пользователь отвечает. В доке не подскажу где, сам не использовал
Это если отвечать на сообщение, а не, как обычно, просто писать новое. У кнопок каллбэк идентификаторы есть. Как-то раньше писал, но то была просто простыня в 1 файл + библиотека для базы
В любом случае, годных актуальных пакетов с реализацией системы диалога я не смог найти.
Есть какая-то инфа по работе системы диалога? Мб попробую написать
На первый вопрос уже сказали fsm делать, я fsm на простом mysql делал, а на второй вопрос, поставь один обработчик который будет обрабатывать текст, если текст какая-то команда тогда переключаешься на другой функционал бота, а если какое-то ключевое слово из кнопок тоже так и каждый апдейт пропускаешь через этот обработик, крч ставишь условие if('/command' || 'keyword') и так продолжаешь. И про ивенты по моему лучше создать по одному для каждого типа
2. Да ну. Правда что-ли? Вот это удивил... Только я не хочу писать 3-ю ивент-систему, а аккуратно распределить по кастомным хандлерам тоже дело не простое
Обсуждают сегодня