Introdução
Como parte deste artigo, criaremos nosso próprio bot capaz de reenviar as mensagens enviadas pelo usuário, levando em consideração a formatação e a mídia.
O tópico dos bots foi destruído por muitos blogs, posts, posts de blog e outros programadores. No entanto, na maioria das vezes, são bots Python / JS / PHP condicionais, nos quais você geralmente pode fazer como vai e tudo parece até mesmo funcionar. Ao mesmo tempo, eu (quase) deixei essas linguagens no mundo da forte digitação e orientação a objetos em Java e, posteriormente, em Kotlin. Na época em que eu estava interessado em escrever meu primeiro bot, apenas a biblioteca pengrad / java-telegram-bot-api estava presente no mercado de github , mas para mim pessoalmente tinha uma desvantagem fatal: naquela época, ela duplicou completamente o Telegram API de bot . Ou seja, era, na verdade, uma gaxeta, que, além da interação por meio de classes Java, não dava mais nada.
Então, tive a ideia de escrever minha própria biblioteca para a API do Telegram Bot. A primeira versão cobrindo a API principal levou um mês, mas surgiram atualizações, os usuários sugeriram ideias para melhorias e eu geralmente não gostava de fazer coisas com as mãos continuamente. Como resultado, a biblioteca está se desenvolvendo até hoje, tem uma API conveniente, sua própria DSL, mas o mais importante, ela não perdeu sua ideia original de trabalho de digitação estrito com a API do Telegram Bot.
Como os bots do Telegram geralmente funcionam
Os bots do Telegram têm muitas restrições. Muitas vezes você pode olhar para belos números aqui , mas em resumo (link para BotFather , para não se repetir) (provavelmente, ele será reabastecido para expandir seus horizontes):
- ( group privacy BotFather)
- . - , , . , ( BotFather)
, - , - ,
API . . .
:
-
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
}
:
onContentMessage { // 1
execute( // 2
it.content.createResend(it.chat.id) // 3
)
}
? , :
: , , ..
execute
- . . , ,
createResend , . -
- -. :
onCommand("start") { // 1
reply(it, ", , !") // 2
}
onCommand("help") {
reply(it, " , ?")
}
/start
, ,
.
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))
}
asTextContent()
,let
,
content.textSources
TextSource
, :
(
TextSource
kotlinx.serialization
)
, ,
-
makeString
irácriarTextSource
texto da lista que serávisível para o usuário, independentemente da formatação
Conclusão
Então, criamos um bot que:
Pode responder a comandos simples
/start
e/help
Sabe como reenviar mensagens recebidas ao remetente
Seleciona mensagens de texto e realiza operações com seu conteúdo
Além disso, resta apenas desenvolver o bot na medida em que a imaginação for suficiente. Por exemplo, você pode separar os módulos em funções / plug-ins, como fiz no meu PlaguBot e.
Para informações mais detalhadas sobre o projeto, você pode ver sua página principal , wiki , projeto com exemplos e dar uma olhada em nosso canal de telegramas .