Echo bot para Telegram en Kotlin

Introducción

Como parte de este artículo, crearemos nuestro propio bot capaz de reenviar los mensajes enviados por el usuario, teniendo en cuenta el formato y los medios.





El tema de los bots se ha convertido en agujeros en muchos blogs, publicaciones, publicaciones de blogs y otros programadores. Sin embargo, en su mayor parte, se trata de bots condicionales de Python / JS / PHP, en los que normalmente puedes hacer cómo va y todo parece funcionar. En un momento, (casi) dejé estos lenguajes en el mundo de la escritura fuerte y la orientación a objetos en Java, y más tarde en Kotlin. En el momento en que estaba interesado en escribir mi primer bot, solo la biblioteca pengrad / java-telegram-bot-api estaba presente en el mercado de github , pero para mí personalmente tenía un inconveniente fatal: en ese momento duplicaba por completo el Telegram. Bot API . Es decir, de hecho, era una junta, que, además de la interacción a través de clases de Java, no daba nada más.





Así que se me ocurrió la idea de escribir mi propia biblioteca para la API de Telegram Bot. La primera versión que cubre la API principal me llevó un mes, pero aparecieron actualizaciones, los usuarios sugirieron ideas para mejorar y, a menudo, no me gustaba hacer cosas con las manos de forma continua. Como resultado, la biblioteca se está desarrollando hasta el día de hoy, tiene una API conveniente, su propio DSL, pero lo más importante es que no ha perdido su idea original de escribir estrictamente el trabajo con la API de Telegram Bot.





Cómo funcionan generalmente los bots de Telegram

Los bots de Telegram tienen muchas restricciones. A menudo puede ver números hermosos aquí , pero en resumen (enlace a BotFather , para no repetirse) (lo más probable es que se reponga para expandir sus horizontes):





  • - ( group privacy BotFather)





  • - . - , , . , ( BotFather)





    • , - , - ,





  • API . . .





:









  • BotFather /newbot







  • ,









,

  1. BotFather /newbot











Readme , App.kt



. , :





suspend fun main(args: Array<String>) {
    val bot = telegramBot(args.first()) // 1
    val scope = CoroutineScope(Dispatchers.Default) // 2

    bot.buildBehaviour(scope) { // 3
        val me = getMe()

        onCommand("start", requireOnlyCommandInMessage = true) {
            reply(it, "Hello, I am ${me.firstName}")
        }
    }.join() // 4
}
      
      



  1. . args.first()



    , BotFather





  2. CoroutineScope



    . , -





  3. . buildBehaviour











:





onContentMessage { // 1
    execute( // 2
      	it.content.createResend(it.chat.id) // 3
    )
}
      
      



? , :





  1. : , , ..





  2. execute



    - . . , ,





  3. createResend , . -





- -. :





onCommand("start") { // 1
  reply(it, ",       ,    !") // 2
}
onCommand("help") {
  reply(it, "   ,      ?")
}
      
      



  1. /start



    , ,





  2. . it







onContentMessage



, :





fun save(sources: List<TextSource>) {
  //     
  println(sources.makeString()) // 3
}

onContentMessage {
  it.content.asTextContent() ?.let { content -> // 1
    save(content.textSources) // 2
  }
  execute(it.content.createResend(it.chat.id))
}
      
      



  1. asTextContent()



    , let



    ,





  2. content.textSources



    TextSource



    , :





    1. ( TextSource



      kotlinx.serialization



      )





    2. , ,





    3. -





  3. makeString



    creará TextSource



    texto de la lista que será visible para el usuario sin tener en cuenta el formato





Conclusión

Entonces, hemos creado un bot que:





  • Puede responder a comandos simples /start



    y/help







  • Sabe cómo reenviar los mensajes recibidos al remitente.





  • Selecciona mensajes de texto y realiza operaciones con su contenido





Además, solo queda desarrollar el bot en la medida en que la imaginación sea suficiente. Por ejemplo, puede separar módulos en funciones / complementos, como hice en mi PlaguBot e.






Para obtener información más detallada sobre el proyecto, puede ver su página principal , wiki , proyecto con ejemplos y echar un vistazo a nuestro canal de telegramas .








All Articles