Bot gema untuk Telegram di Kotlin

pengantar

Sebagai bagian dari artikel ini, kami akan membuat bot kami sendiri yang mampu mengirim ulang pesan yang dikirim oleh pengguna, dengan mempertimbangkan format dan media akun.





Topik bot telah dibobol oleh banyak blog, posting, posting blog, dan pembuat kode lainnya. Namun, untuk sebagian besar, ini adalah bot Python / JS / PHP bersyarat, di mana Anda biasanya dapat melakukan bagaimana kelanjutannya dan semuanya tampak bekerja. Pada suatu waktu, saya (hampir) meninggalkan bahasa-bahasa ini di dunia pengetikan dan orientasi objek yang kuat di Java, dan kemudian di Kotlin. Pada saat saya tertarik untuk menulis bot pertama saya, hanya pustaka pengrad / java-telegram-bot-api yang hadir di pasar github , tetapi bagi saya pribadi ada satu kelemahan fatal: pada saat itu ia sepenuhnya menduplikasi Telegram Bot API , pada kenyataannya, itu adalah paking, yang, selain interaksi melalui kelas-kelas Java, tidak memberikan hal lain.





Jadi saya mendapatkan ide untuk menulis perpustakaan saya sendiri untuk Telegram Bot API. Versi pertama yang mencakup API utama membutuhkan waktu sebulan, tetapi pembaruan keluar, pengguna menyarankan ide untuk perbaikan, dan saya sering tidak suka melakukan sesuatu dengan tangan saya secara berkelanjutan. Akibatnya, perpustakaan berkembang hingga hari ini, ia memiliki API yang nyaman, DSL-nya sendiri, tetapi yang terpenting, ia tidak kehilangan ide aslinya untuk mengetik secara ketat pekerjaan dengan Telegram Bot API.





Cara kerja bot Telegram secara umum

Bot Telegram memiliki banyak batasan. Anda sering dapat melihat angka-angka indah di sini , tetapi singkatnya (tautkan ke BotFather , agar tidak mengulangi diri Anda sendiri ) (kemungkinan besar, itu akan diisi ulang untuk memperluas wawasan Anda):





  • - ( 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



    akan membuat TextSource



    teks dari daftar yang akan terlihat oleh pengguna tanpa memperhatikan pemformatan





Kesimpulan

Jadi, kami telah membuat bot yang:





  • Dapat menanggapi perintah sederhana /start



    dan/help







  • Tahu bagaimana mengirim ulang pesan yang diterima ke pengirim





  • Memilih pesan teks dan melakukan operasi dengan isinya





Selanjutnya, tetap hanya mengembangkan bot sejauh imajinasi cukup. Misalnya, Anda dapat memisahkan modul menjadi fungsi / plugin, seperti yang saya lakukan di PlaguBot e.






Untuk informasi lebih rinci tentang proyek ini, Anda dapat melihat halaman utamanya , wiki , proyek dengan contoh-contoh dan lihat saluran telegram kami .








All Articles