170 похожих чатов

Господа, а есть хороший мануал, как лучше организовать код бота

(неважно на каком языке)? Там же куча колбеков на разные команды, текущие статусы пользователя и тд. У меня пока получается лапша из кучи if elif else. Хочу сделать поаккуратнее.

16 ответов

10 просмотров

использовать библиотеку для апи они предоставляют хендлеры

Mikhail-Polykovskij Автор вопроса
Fᴏʀᴅᴇɴ
использовать библиотеку для апи они предоставляют ...

Это я знаю. Вопрос, как организовать код, когда хэндлеров становится слишком много.

Mikhail Polykovskij
Это я знаю. Вопрос, как организовать код, когда хэ...

просто разбивать по файлам а вообще в хендлерах не должно быть if elif else для проверки ввода

https://github.com/Tishka17/tgbot_template

Mikhail-Polykovskij Автор вопроса
Fᴏʀᴅᴇɴ
просто разбивать по файлам а вообще в хендлерах не...

Ну смотри. Я пишу сложное взаимодействие. Пользователь может инициировать процесс, может поучаствовать, может вклиниться в середине. Это значит, что надо хранить разные статусы, понимать, что он имел в виду. Сложная логика. И я хочу иметь возможность через полгода разобраться в этой логике. Поэтому спрашиваю best practices. А не как апи телеги использовать :)

Tishka17
https://github.com/Tishka17/tgbot_template

Снова этот чел с половинчатым лицом

https://github.com/Latand/aiogram-bot-template @Tishka17 не бань

Mikhail-Polykovskij Автор вопроса
quantum super position
А че ему банить то?)))

У него же свой похожий проект есть

Alex RootJunior 🇺🇦
этих шаблонов куча

А есть лучше чем у Latand?

r nurnu
А есть лучше чем у Latand?

они все по своему хороши

У меня есть базовые обработчики запроса, состояний и callback функций. Запрос попадает на контроллер, дальше кладется в очередь. После из очереди он попадает в "маршрутизатор". Там на основе данных я определяю, состояние это или просто кнопка. И дальше уже функция обработчика этой кнопки. Все разбито по папкам, например mainMenu, Settings. В каждой папке есть файлы с обработчики кнопок, которые принадлежат этому меню.

Mikhail-Polykovskij Автор вопроса
Vitaliy Mikhailov
У меня есть базовые обработчики запроса, состояний...

Маршрутизатор - одна функция, или чтото более сложное?

Mikhail Polykovskij
Маршрутизатор - одна функция, или чтото более слож...

Три. Одна получает весь список кнопок, которые есть и перебирает на соответствие. Формат такой 'settings.setTimeZone' => 'Указать таймзону'. Соответственно, если прилетело сообщение с этим текстом, то бот отдает ключ. Вторая на основе этого собирает путь до класса обработчика в формате Chat/Football/Settings/MessageHandler. И в нем дёргается команда, которая после точки, то есть setTimeZone. Это вспомогательные функции. Основная проверяет, есть ли такой пользователь (исключение команда старта), что вообще прилетело в бота. Есть ли там callback или только сообщение. Есть ли активное состояние у пользователя (если он нажимает на кнопку, то я отдаю сообщение, тип введите таймзону и перевожу в состояние ввода и бот ожидает, что придет верная таймзона). А дальше по сути передает данные в нужный обработчик. Если что то пошло не по плану, то отправляется сообщение о том, что либо введена неверная команда или данное меню ещё не создано/не работает.

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта