Как стать автором
Обновить

Комментарии 17

При этом подходе, если бот будет заниматься чем-то «тяжелым» — все остальные пользователи будут ждать пока не обработается сообщение первого, т.е. бот будет не отзывчивый.
Либо асинхронную обработку включать, либо вебхуки.

Самое сложное в ботах — реализация конечного автомата, оно же FSM и управление контекстом с привязкой к chat id
Все верно.
На примере моего бота по фильмам расскажу, что у него работа с апи, подборы фильмов занимают очень приличный кусок времени. Все это связано с тем, что в апишку я могу делать запросы не так часто, ответы получаю не быстро.

В данной статье заложен базис под бота. А дальше я хочу показать как разделить потоки. Как обработку входящий сообщений отделить от отправки, как запустить выполнение различных задачь так же в разные потоки, которые не будут мешать друг другу.

Спасибо за комментарий
а почему на java? обычно же выбирают питон
Я джавист, мне джава ближе :)
я тоже) но я думала, что выбор языка более обоснован будет))

А куда уж более? Люблю этот язык, работаю на нем — естественно и ботов на нем писать начал :)

«Обычно» не означает, что Python подходит лучше. Это лишь может означать, что ботов пишут в основном питонисты, не более. Нет никаких преимуществ у питона перед остальными языками в написании ботов. Вообще нет.
та не, просто работа со структурами данных, да и я язык в целом позволяют лаконичнее писать выражения (проще и короче), без бойлерплейта (я джавист)
Какие структуры данных применяются при написании ботов? Везде одна и та же паста из if/else в любых ботах, какие я видел. Ну если в этом смысле, то да, питон лаконичнее, но я не думаю, что это преимущество языка. Это недостаток разработчиков.
Ну про структуры данных же можно говорить в зависимости от функционала бота. Понятно, что если это простейшие команды на искуственном интеллекте обычных if/else — то никакой структуры по данным то и не нужно.

А если хочешь какую-то легко расширяемуя систему, легкое добавление команд, какую-то хитрую обработку — тут уже без данных не обойтись.
Если ты что-то сохранять и фиксировать начинаешь — тоже стуктуры уже нужны.

Тот же мой бот, что события считать умеет. Да, можно все сделать топорно. А можно красиво завести через сущности. Привязать к нему гибернейте, дать какую-то гибкость для развертывания.

А это уже достаточно полноценное приложение.

Я считаю, что выбор языка в первую очередь зависит от того, на чем программисту удобнее работать. Если ты можешь выдать качественный продукт, который потом легко поддерживать, код легко читать и понять — почему нужно упираться в то, что в основном ботов пишут на питоне? У телеграма есть библиотека под джаву. Сделана она качественно, пользоваться её одно удовольствие и не вижу никакой проблемы в том, что бот работает на джаве.
Хотя на другом ресурсе мне один нудот в коментариях начал писать зачем-то, что я микроскопом гвозди забиваю.
Я с вами полностью согласен. Я к этому и веду, что питон не является самым лучшим языком в данном случае, но часто вижу, как автора бота спрашивают: «а почему не на питоне?». И все примеры ботов, которые были на питоне, были выполнены в духе if/else, а вот на джаве и пхп мне попадались очень неплохие проекты, в которых код можно было очень легко расширять, добавив в коллекцию команду, которую хэндлер сам вызовет при обращении к боту.
сложность начинается при создании fsm, кнопки назад, работе с контекстом.
кнопки назад

Храните последнюю команду в базе.
работе с контекстом

С каким контекстом?
>>Храните последнюю команду в базе.
ну нет же, это как кнопка Undo

>>С каким контекстом?
при диалоге с пользователем, введеные параметры хранятся в контексте, оно же сессия.
Спасибо за мануал. Ждем еще на эту тему!
Огромное спасибо за туториал, надеюсь будет много статей на эту тему именно по джаве(круто если б еще и на котлин). И вообще про мл на джаве/котлин
Ну возможно до ML доберемся )))) Всякое бывает. Когда начинал заниматься ботом была идея сделать самообучающегося чат-бота. Потому чем черт не шутит, возможно в эту тему и полезем с помощью хабра :)

Спасибо вам за комментарий :)
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.