10
10
10
1
1
10
10
Nemisid

Разработка telegram бота с использованием Spring

Рекомендованные сообщения

Идея заключается в следующем: слямзить архитектуру spring mvc и перенести на telegram api.
Выглядеть должно как-то так:

 

@BotController
public class SimpleOkayController {
    @BotRequestMapping(value = "/ok")
    public SendMessage ok(Update update) {
        return new SendMessage()
                .setChatId(update.getMessage().getChatId())
                .setText("okay bro, okay!");
    }
}

 

или

 

Пример с бинами

 

Это даёт следующие преимущества:

 

  • Не надо писать кастомную логику для выбора обработчика сообщения от пользователя
  • Возможность инжектить разлиные бины в наш @BotController
  • Как следствие из предыдущих двух пунктов — существенное сокращение объемов кода
  • Потенциально (хотя я этого еще не сделал) аргументы кастомного метода обработчика, могут быть выражены в виде тех аргументов, которые действительно нужны!
  • Возможность создавать серьезные энтерпрайз решения, используя spring

 

Давайте теперь посмотрим как это можно завести в нашем проекте

 

Аннотации

 

Создаем свой контейнер обработчиков в виде обычной HashMap

 

Контейнер

 

В контейнере будем хранить контроллеры обертки (для пары @BotController и @BotRequestMapping)

 

Контроллер обертка

 

Теперь когда у нас есть данная кодовая база возникает вопрос: как Spring заставить автоматически наполнять контейнер, чтобы мы могли им пользоваться?

 

Для этого реализуем специальный бин — BeanPostProcessor. Это дает возможность отлавливать бины во время их инициализации. Наши контроллеры имеют scope по умолчанию — синглтон, значит инициализироваться они будут со стартом контекста!

 

TelegramUpdateHandlerBeanPostProcessor

 

Инициализируем контекст, в котором прописаны все наши бины и — вуаля! Подбирать обработчики для сообщений можно, например, так:

 

Выбор обработчика

 

Постскриптум
Telegram развивается очень стремительно. Используя ботов мы можем организовывать свои магазины, давать команды различным своим интернет-вещам, организовывать блог-каналы и многое многое другое. А самое главное, что всё это в едином приложении!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

молодец, хорошо расписал

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

прикольно. как работает на практике?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

на этой основе нормаьно работает бот)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

хотелось бы более детально разобрать

не совсем понял

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

не плохая идея для создания

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас