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

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

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

16 ответов

5 просмотров

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

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 или только сообщение. Есть ли активное состояние у пользователя (если он нажимает на кнопку, то я отдаю сообщение, тип введите таймзону и перевожу в состояние ввода и бот ожидает, что придет верная таймзона). А дальше по сути передает данные в нужный обработчик. Если что то пошло не по плану, то отправляется сообщение о том, что либо введена неверная команда или данное меню ещё не создано/не работает.

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

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

Типа вызывать GetParent и проверять на соответствие GetModuleHandle?
The Bird of Hermes
67
Do any of you guys have interesting projects one could join? I'm a Middle Full-Stack developer (JS/TS, React & Node)
Lev Shapiro
40
$res = json_decode($наша строка из респонса); $res1 = array_map(fn($o) => $o->name, $res->breadcrumbs[0]->entities); Как такое будет на Хаскеле?.. В начале весь джейсон, в ко...
Хаскель Моисеевич Гопник
27
В чем сила брат, в NASM или FASM?
Isaac Kleiner
18
Вопрос по диагностике ошибок (я знаю в чем, в данном конкретном примере, я знаю, как исправить, пример модельный, понятно, что в реальности бывает намного запутаннее). module...
ⰄⰎⰋⰐⰐⰑⰛⰤⰧⰧⰩⰄ ⰊⰑⰁⰓⰡⰛⰦⰕⰫ
11
Хтось використовував Vapor на Windows?
Jaroshevskii
15
А чем вам питонисты не угодили?😂
.
79
Есть какой-нибудь для Delphi/FPC T*Compression(Decompression)Stream на базе LZ4/Zstd/любой другой быстрый(и хорошо сжимающий) алгоритм А ещё лучше в pure pascal А ещё лучше од...
notme
52
Тут кста кто-нибудь NeoVim использует?
Simple Sorcerer
13
Оба варианта в целом подходят, но скорее создание конфликтной ситуации (на пустой основе). В прошлый раз он сказал мне про ESP32, я забыл про этот микроконтроллер, ошибся, я п...
КТ315
4
Карта сайта