Einführung
Als Teil dieses Artikels erstellen wir unseren eigenen Bot, der in der Lage ist, vom Benutzer gesendete Nachrichten unter Berücksichtigung von Formatierung und Medien erneut zu senden.
Das Thema Bots wurde von vielen Blogs, Posts, Blogposts und anderen Programmierern ins Loch geschlagen. Zum größten Teil handelt es sich jedoch um bedingte Python / JS / PHP-Bots, in denen Sie normalerweise so vorgehen können, wie es geht, und alles scheint sogar zu funktionieren. Zu einer Zeit habe ich diese Sprachen (fast) in der Welt der starken Typisierung und Objektorientierung in Java und später in Kotlin verlassen. Zu der Zeit, als ich daran interessiert war, meinen ersten Bot zu schreiben, war auf dem Github- Markt nur die Bibliothek pengrad / java-telegram-bot-api vorhanden , aber für mich persönlich hatte sie einen fatalen Nachteil: Zu dieser Zeit wurde das Telegramm vollständig dupliziert Bot API . Das heißt, es war in der Tat eine Dichtung, die neben der Interaktion durch Java-Klassen nichts anderes gab.
So kam mir die Idee, eine eigene Bibliothek für die Telegram Bot API zu schreiben . Die erste Version, die die Haupt-API abdeckte, dauerte einen Monat, aber es kamen Updates heraus, Benutzer schlugen Verbesserungsvorschläge vor, und ich mochte es oft nicht, Dinge ständig mit meinen Händen zu tun. Infolgedessen entwickelt sich die Bibliothek bis heute weiter, sie verfügt über eine praktische API, ein eigenes DSL, aber vor allem hat sie ihre ursprüngliche Idee, die Arbeit mit der Telegramm-Bot-API streng zu tippen, nicht verloren.
Wie Telegramm-Bots im Allgemeinen funktionieren
Telegramm-Bots unterliegen vielen Einschränkungen. Sie können schöne Zahlen sehen oft hier , aber in kurzen (Link zu BotFather , um nicht zu wiederholen sich ) (wahrscheinlich wird es wieder aufgefüllt werden , um Ihren Horizont zu erweitern):
- ( 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
erstelltTextSource
Text aus der Liste , der für den Benutzer unabhängig von der Formatierung sichtbar ist
Fazit
Also haben wir einen Bot erstellt, der:
Kann auf einfache Befehle reagieren
/start
und/help
Kann empfangene Nachrichten erneut an den Absender senden
Wählt Textnachrichten aus und führt Vorgänge mit ihrem Inhalt aus
Weiterhin bleibt es nur, den Bot so weit zu entwickeln, wie es die Vorstellungskraft ausreicht. Zum Beispiel können Sie Module in Funktionen / Plugins unterteilen, wie ich es in meinem PlaguBot e getan habe .
Weitere Informationen zum Projekt finden Sie auf der Hauptseite , im Wiki , im Projekt mit Beispielen und in unserem Telegrammkanal .