活动与处理器
介绍¶
在本库的术语中,Activity
是一个抽象实体,作为一个概念,代表了 @CommandHandler
、@InputHandler
、@UnprocessedHandler
和 @CommonHandler
等实体的概括。
还可以查看 处理器文章。
收集活动¶
活动在编译时被收集和准备所有上下文。
如果您想限制搜索包的区域,可以向插件传递一个参数:
或者通过 ksp 而不使用插件:
请注意,在这种情况下,为了使收集的操作能够正确处理,您还必须在实例本身中指定包。
fun main() = runBlocking {
val bot = TelegramBot("BOT_TOKEN", "com.example.mybot")
bot.handleUpdates()
// 启动长轮询监听器
}
此选项的添加是为了能够运行多个机器人实例:
或者如果您不使用插件来指定不同的包,则需要使用 ;
分隔符指定它们:
处理器¶
您有两种类型的流处理更新:
功能性¶
您通过 lambda 参数函数 bot.handleUpdates() {}
或通过 bot.update.setListener
建立处理行为。
您可以在 相关文章 中阅读更多关于功能性处理的信息。
fun main() = runBlocking {
val bot = TelegramBot("BOT_TOKEN")
bot.handleUpdates {
onMessage {
message { update.text }.send(update.user, bot)
}
}
}
注解¶
注解取决于所选的处理模式:
Webhooks¶
在您的控制器(或处理 webhook
的其他地方),您调用: bot.update.parseAndHandle(webhookString)
默认情况下,它将使用注解处理器,但如果您想要一些自定义行为,也可以通过 setBehaviour
设置(在控制器本身中不必每次都分配行为,只需在配置期间分配一次即可):
长轮询¶
调用: bot.handleUpdates()
或通过 bot.update.setListener { handle(it) }
两者¶
此外,如果需要,这两种方法可以结合使用相同的 setListener {}
,在这种方法中,即使相同的命令也可以被处理两次,处理将按照调用的顺序进行。
fun main() = runBlocking {
val bot = TelegramBot("BOT_TOKEN", "eu.vendeli.samples.controller")
bot.update.setListener {
handle(it) // 在这里我们发送更新进行注解处理。
handle(it) { // 在这里我们随后进行功能性处理。
onMessage {
message { update.text }.send(update.user, bot)
}
}
}
或者在 webhook 处理时,您可以像之前描述的那样通过 setBehaviour
设置。