introduction
Dans le cadre de cet article, nous allons créer notre propre bot capable de renvoyer les messages envoyés par l'utilisateur, en tenant compte du formatage et des médias.
Le sujet des robots a été mis à rude épreuve par de nombreux blogs, articles, articles de blog et autres codeurs. Cependant, pour la plupart, ce sont des bots Python / JS / PHP conditionnels, dans lesquels vous pouvez généralement faire comme ça et tout semble même fonctionner. À un moment donné, j'ai (presque) laissé ces langages dans le monde du typage fort et de l'orientation objet en Java, et plus tard en Kotlin. A l'époque où j'étais intéressé par l'écriture de mon premier bot, seule la bibliothèque pengrad / java-telegram-bot-api était présente sur le marché github , mais pour moi personnellement, elle avait un inconvénient fatal: à cette époque, elle dupliquait complètement le Telegram Bot API, c'est-à-dire qu'il s'agissait d'un joint, qui, en plus de l'interaction via les classes Java, ne donnait rien d'autre.
J'ai donc eu l'idée d'écrire ma propre bibliothèque pour l'API Telegram Bot. La première version couvrant l'API principale m'a pris un mois, mais des mises à jour sont sorties, les utilisateurs ont suggéré des idées d'amélioration et je n'aimais souvent pas faire les choses avec mes mains de manière continue. En conséquence, la bibliothèque se développe à ce jour, elle dispose d'une API pratique, son propre DSL, mais surtout, elle n'a pas perdu son idée originale de travailler strictement avec l'API Telegram Bot.
Comment fonctionnent généralement les robots Telegram
Les robots Telegram ont de nombreuses restrictions. Vous pouvez souvent regarder de beaux chiffres ici , mais en bref (lien vers BotFather , pour ne pas vous répéter) (très probablement, il sera reconstitué pour élargir vos horizons):
- ( group privacy BotFather)
- . - , , . , ( BotFather)
, - , - ,
API . . .
:
-
BotFather
/newbot
,
-
,
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
}
.
args.first()
, BotFather
CoroutineScope
. , -
.
buildBehaviour
:
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
créera duTextSource
texte à partir de la liste qui sera visible par l'utilisateur sans égard au formatage
Conclusion
Nous avons donc créé un bot qui:
Peut répondre à des commandes simples
/start
et/help
Sait comment renvoyer les messages reçus à l'expéditeur
Sélectionne les messages texte et effectue des opérations avec leur contenu
De plus, il ne reste plus qu'à développer le bot dans la mesure où l'imagination suffit. Par exemple, vous pouvez séparer les modules en fonctions / plugins, comme je l'ai fait dans mon PlaguBot e.
Pour des informations plus détaillées sur le projet, vous pouvez voir sa page principale , son wiki , son projet avec des exemples et jeter un œil à notre chaîne de télégrammes .