2018-12-26 08:07:24 +00:00
|
|
|
package com.github.insanusmokrassar.TelegramBotAPI.types.actions
|
|
|
|
|
|
|
|
import kotlinx.serialization.*
|
|
|
|
|
|
|
|
private val actions = listOf(
|
|
|
|
TypingAction,
|
|
|
|
UploadPhotoAction,
|
|
|
|
RecordVideoAction,
|
|
|
|
UploadVideoAction,
|
|
|
|
RecordAudioAction,
|
|
|
|
UploadAudioAction,
|
|
|
|
UploadDocumentAction,
|
|
|
|
FindLocationAction
|
|
|
|
)
|
|
|
|
|
|
|
|
@Serializable(BotActionSerializer::class)
|
|
|
|
sealed class BotAction {
|
|
|
|
abstract val actionName: String
|
|
|
|
}
|
|
|
|
|
|
|
|
@Serializer(BotAction::class)
|
|
|
|
class BotActionSerializer: KSerializer<BotAction> {
|
2019-02-21 06:21:33 +00:00
|
|
|
override fun serialize(encoder: Encoder, obj: BotAction) {
|
|
|
|
encoder.encodeString(obj.actionName)
|
2018-12-26 08:07:24 +00:00
|
|
|
}
|
|
|
|
|
2019-02-21 06:21:33 +00:00
|
|
|
override fun deserialize(decoder: Decoder): BotAction {
|
|
|
|
val actionName = decoder.decodeString()
|
2018-12-26 08:07:24 +00:00
|
|
|
return actions.firstOrNull { it.actionName == actionName } ?: throw IllegalStateException("Unknown action type: $actionName")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Use BotAction objects realisations to notify user about bot actions
|
|
|
|
*/
|
|
|
|
|
|
|
|
@Serializable(BotActionSerializer::class)
|
|
|
|
object TypingAction : BotAction() {
|
|
|
|
override val actionName: String = "typing"
|
|
|
|
}
|
|
|
|
|
|
|
|
@Serializable(BotActionSerializer::class)
|
|
|
|
object UploadPhotoAction : BotAction() {
|
|
|
|
override val actionName: String = "upload_photo"
|
|
|
|
}
|
|
|
|
|
|
|
|
@Serializable(BotActionSerializer::class)
|
|
|
|
object RecordVideoAction : BotAction() {
|
|
|
|
override val actionName: String = "record_video"
|
|
|
|
}
|
|
|
|
|
|
|
|
@Serializable(BotActionSerializer::class)
|
|
|
|
object UploadVideoAction : BotAction() {
|
|
|
|
override val actionName: String = "upload_video"
|
|
|
|
}
|
|
|
|
|
|
|
|
@Serializable(BotActionSerializer::class)
|
|
|
|
object RecordAudioAction : BotAction() {
|
|
|
|
override val actionName: String = "record_audio"
|
|
|
|
}
|
|
|
|
|
|
|
|
@Serializable(BotActionSerializer::class)
|
|
|
|
object UploadAudioAction : BotAction() {
|
|
|
|
override val actionName: String = "upload_audio"
|
|
|
|
}
|
|
|
|
|
|
|
|
@Serializable(BotActionSerializer::class)
|
|
|
|
object UploadDocumentAction : BotAction() {
|
|
|
|
override val actionName: String = "upload_document"
|
|
|
|
}
|
|
|
|
|
|
|
|
@Serializable(BotActionSerializer::class)
|
|
|
|
object FindLocationAction : BotAction() {
|
|
|
|
override val actionName: String = "find_location"
|
|
|
|
}
|