@Lexvalyaev

Telegram bot на Kotlin + Spring через webhook, есть свежий мануал или пример зеркального бота?

Пытаюсь сейчас переписать своего старого пет-бота с java на Kotlin, используя webhook и Spring Boot (в основном для саморазвития)

столкнулся со следующим:
1. В инете примеры только TelegramLongPollingBot

2. Везде в примерах со спринг используется ApiContextInitializer.init() для инициализации бота.
Однако в библиотеке, начиная с версии 5.0 этот класс был выпилен
и как теперь его запускать через Spring я не понимаю...

ApiContextInitializer.init(); has been removed and is not required anymore, instead:

    TelegramBotsApi telegramBotsApi = new TelegramBotsApi(DefaultBotSession.class);

    // When using webhook, create your own version of DefaultWebhook with all your parameters set.
    TelegramBotsApi telegramBotsApi = new TelegramBotsApi(DefaultBotSession.class, defaultWebhookInstance);
b

И появился даже отдельный класс:

When using Spring with a webhook bot, make your bot inherit form SpringWebhookBot instead of WebhookBot and provide your SetWebhook method in the constructor:

   // Extend correct class
   public class TestSpringWebhookBot extends SpringWebhookBot {
   
           public TestSpringWebhookBot(SetWebhook setWebhook) {
               super(setWebhook);
           }
   
           public TestSpringWebhookBot(DefaultBotOptions options, SetWebhook setWebhook) {
               super(options, setWebhook);
           }
   
           @Override
           public String getBotUsername() {
               return null;
           }
   
           @Override
           public String getBotToken() {
               return null;
           }
   
           @Override
           public BotApiMethod onWebhookUpdateReceived(Update update) {
               return null;
           }
   
           @Override
           public String getBotPath() {
               return null;
           }
       }

   // Create your SetWebhook method
   @Bean
   public SetWebhook setWebhookInstance() {
       return SetWebhook.builder()....build();
   }

   // Create it as
   @Bean
   public TestSpringWebhookBot testSpringWebhookBot(SetWebhook setWebhookInstance) {
       return new TestSpringWebhookBot(setWebhookInstance);
   }


я примерно представляю, как это можно использовать на Java, но вот Spring и Kotlin пока только изучаю...

Может есть у кого-нибудь простейший эхо-бот, использующий всё выше перечисленное?
А то у меня даже эхо-бот работать не хочет

Готов даже оплатить менторство по разьяснению данного вопроса...
  • Вопрос задан
  • 709 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Lexvalyaev Автор вопроса
OtBotSpringApplication.kt
package ru.lex.OtBotSpring

import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.runApplication

@SpringBootApplication
class OtBotSpringApplication

fun main(args: Array<String>) {
	runApplication<OtBotSpringApplication>(*args)
}


OtBot.kt
package ru.lex.OtBotSpring.service

import org.springframework.beans.factory.annotation.Value
import org.springframework.stereotype.Component
import org.telegram.telegrambots.bots.TelegramWebhookBot
import org.telegram.telegrambots.meta.api.methods.BotApiMethod
import org.telegram.telegrambots.meta.api.methods.send.SendMessage
import org.telegram.telegrambots.meta.api.objects.Update

@Component
class OtBot : TelegramWebhookBot() {

    @Value("\${telegrambot.botname}")
    private val botName: String= ""

    @Value("\${telegrambot.bottoken}")
    private val botToken : String =""

    @Value("\${telegrambot.webhookpath}")
    private val botWebHook : String=""

    override fun getBotToken(): String = botToken

    override fun getBotUsername(): String = botName

    override fun onWebhookUpdateReceived(update: Update?): BotApiMethod<*>? {
        if (update != null) {
            if (update.hasMessage())
            {
                val sendMsg = SendMessage()
                val message = update.message
                val chatId = message.chatId
                val responseText = if (message.hasText()) {
                    val messageText = message.text
                    when {
                        messageText == "/start" -> "Добро пожаловать!"
                        else -> "Вы написали: *$messageText*"
                    }
                } else {
                    "Я понимаю только текст"
                }
                sendMsg.text = responseText
                sendMsg.chatId = chatId.toString()
                return sendMsg

            }
        }
        return null;
    }

    override fun getBotPath(): String = botWebHook
}


ну и application.properties

server.port=8443

telegrambot.bottoken=
telegrambot.botname=test_my_super_puper_bot
telegrambot.webhookpath=https://26e9b1e5ff85.ngrok.io


соттветственно, убрал боттокен и изменил ботнейм.

60f8415ea193d540583355.jpeg

не работает бот.. где я туплю?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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