mirror of
https://github.com/InsanusMokrassar/TelegramBotAPI.git
synced 2026-03-03 17:32:23 +00:00
completed by chat and completed by user support
This commit is contained in:
@@ -4,6 +4,10 @@
|
|||||||
|
|
||||||
* `Core`:
|
* `Core`:
|
||||||
* **THIS IS BREAKING CHANGE** All media files with sizes changed type of `fileSize` field from `Long` to `FileSize` (value class)
|
* **THIS IS BREAKING CHANGE** All media files with sizes changed type of `fileSize` field from `Long` to `FileSize` (value class)
|
||||||
|
* **THIS IS BREAKING CHANGE** For `CheclistTask` have been made several changes:
|
||||||
|
* `ChecklistTask.Done` -> `ChecklistTask.Completed`
|
||||||
|
* `ChecklistTask.Undone` -> `ChecklistTask.Uncompleted`
|
||||||
|
* Added several inheritors of `ChecklistTask.Completed` - for completed by chat, by user or just completed tasks
|
||||||
|
|
||||||
## 30.0.2
|
## 30.0.2
|
||||||
|
|
||||||
|
|||||||
@@ -23,6 +23,10 @@ data class TelegramDate(
|
|||||||
val asDate: DateTime = DateTime(
|
val asDate: DateTime = DateTime(
|
||||||
date * 1000
|
date * 1000
|
||||||
)
|
)
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
val Start = TelegramDate(0)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun DateTime.toTelegramDate(): TelegramDate = TelegramDate(this)
|
fun DateTime.toTelegramDate(): TelegramDate = TelegramDate(this)
|
||||||
|
|||||||
@@ -104,8 +104,8 @@ sealed interface ChecklistTask : TextedInput {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Suppress("SERIALIZER_TYPE_INCOMPATIBLE")
|
@Suppress("SERIALIZER_TYPE_INCOMPATIBLE")
|
||||||
@Serializable(Created.Serializer::class)
|
@Serializable(Serializer::class)
|
||||||
data class Undone(
|
data class Uncompleted(
|
||||||
@SerialName(idField)
|
@SerialName(idField)
|
||||||
override val id: ChecklistTaskId,
|
override val id: ChecklistTaskId,
|
||||||
@SerialName(textEntitiesField)
|
@SerialName(textEntitiesField)
|
||||||
@@ -125,103 +125,135 @@ sealed interface ChecklistTask : TextedInput {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Suppress("SERIALIZER_TYPE_INCOMPATIBLE")
|
@Serializable(Serializer::class)
|
||||||
@Serializable(Created.Serializer::class)
|
|
||||||
data class Done(
|
|
||||||
@SerialName(idField)
|
|
||||||
override val id: ChecklistTaskId,
|
|
||||||
@SerialName(completedByUserField)
|
|
||||||
override val completedByUser: PreviewUser,
|
|
||||||
@SerialName(completedByChatField)
|
|
||||||
val completedByChat: PreviewChat? = null,
|
|
||||||
@SerialName(completionDateField)
|
|
||||||
override val completionDate: TelegramDate,
|
|
||||||
@SerialName(textEntitiesField)
|
|
||||||
override val textSources: List<TextSource> = emptyList()
|
|
||||||
) : ChecklistTask.Created {
|
|
||||||
@OptIn(ExperimentalSerializationApi::class)
|
|
||||||
@EncodeDefault
|
|
||||||
@Serializable
|
|
||||||
@SerialName(textField)
|
|
||||||
override val text: String = textSources.makeSourceString()
|
|
||||||
|
|
||||||
constructor(
|
|
||||||
id: ChecklistTaskId,
|
|
||||||
text: String,
|
|
||||||
completedByUser: PreviewUser,
|
|
||||||
completedByChat: PreviewChat? = null,
|
|
||||||
completionDate: TelegramDate,
|
|
||||||
): this(
|
|
||||||
id,
|
|
||||||
completedByUser,
|
|
||||||
completedByChat,
|
|
||||||
completionDate,
|
|
||||||
listOf(
|
|
||||||
RegularTextSource(text)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
@Serializable(Created.Serializer::class)
|
|
||||||
sealed interface Created : ChecklistTask {
|
sealed interface Created : ChecklistTask {
|
||||||
val completedByUser: PreviewUser?
|
val completedByUser: PreviewUser?
|
||||||
get() = null
|
get() = null
|
||||||
|
val completedByChat: PreviewChat?
|
||||||
|
get() = null
|
||||||
val completionDate: TelegramDate?
|
val completionDate: TelegramDate?
|
||||||
get() = null
|
get() = null
|
||||||
|
}
|
||||||
|
|
||||||
@RiskFeature
|
@Suppress("SERIALIZER_TYPE_INCOMPATIBLE")
|
||||||
object Serializer : KSerializer<Created> {
|
@Serializable(Serializer::class)
|
||||||
|
sealed interface Completed : Created {
|
||||||
|
@Suppress("SERIALIZER_TYPE_INCOMPATIBLE")
|
||||||
|
@Serializable(Serializer::class)
|
||||||
|
data class ByUser(
|
||||||
|
@SerialName(idField)
|
||||||
|
override val id: ChecklistTaskId,
|
||||||
|
@SerialName(completedByUserField)
|
||||||
|
override val completedByUser: PreviewUser,
|
||||||
|
@SerialName(completionDateField)
|
||||||
|
override val completionDate: TelegramDate,
|
||||||
|
@SerialName(textEntitiesField)
|
||||||
|
override val textSources: List<TextSource> = emptyList()
|
||||||
|
) : Completed {
|
||||||
|
@OptIn(ExperimentalSerializationApi::class)
|
||||||
|
@EncodeDefault
|
||||||
@Serializable
|
@Serializable
|
||||||
private data class RawCreatedChecklistTask(
|
@SerialName(textField)
|
||||||
@SerialName(idField)
|
override val text: String = textSources.makeSourceString()
|
||||||
val id: ChecklistTaskId,
|
}
|
||||||
@SerialName(textField)
|
@Suppress("SERIALIZER_TYPE_INCOMPATIBLE")
|
||||||
val text: String,
|
@Serializable(Serializer::class)
|
||||||
@SerialName(textEntitiesField)
|
data class ByChat(
|
||||||
val textSources: List<RawMessageEntity> = emptyList(),
|
@SerialName(idField)
|
||||||
@Suppress("SERIALIZER_TYPE_INCOMPATIBLE")
|
override val id: ChecklistTaskId,
|
||||||
@SerialName(completedByUserField)
|
@SerialName(completedByChatField)
|
||||||
val completedByUser: PreviewUser? = null,
|
override val completedByChat: PreviewChat,
|
||||||
@SerialName(completedByChatField)
|
@SerialName(completionDateField)
|
||||||
val completedByChat: PreviewChat? = null,
|
override val completionDate: TelegramDate,
|
||||||
@SerialName(completionDateField)
|
@SerialName(textEntitiesField)
|
||||||
val completionDate: TelegramDate = TelegramDate(0), // TelegramDate(0) is the default according to https://core.telegram.org/bots/api#checklisttask
|
override val textSources: List<TextSource> = emptyList()
|
||||||
|
) : Completed {
|
||||||
|
@OptIn(ExperimentalSerializationApi::class)
|
||||||
|
@EncodeDefault
|
||||||
|
@Serializable
|
||||||
|
@SerialName(textField)
|
||||||
|
override val text: String = textSources.makeSourceString()
|
||||||
|
}
|
||||||
|
@Suppress("SERIALIZER_TYPE_INCOMPATIBLE")
|
||||||
|
@Serializable(Serializer::class)
|
||||||
|
data class Common(
|
||||||
|
@SerialName(idField)
|
||||||
|
override val id: ChecklistTaskId,
|
||||||
|
@SerialName(completionDateField)
|
||||||
|
override val completionDate: TelegramDate,
|
||||||
|
@SerialName(textEntitiesField)
|
||||||
|
override val textSources: List<TextSource> = emptyList()
|
||||||
|
) : Completed {
|
||||||
|
@OptIn(ExperimentalSerializationApi::class)
|
||||||
|
@EncodeDefault
|
||||||
|
@Serializable
|
||||||
|
@SerialName(textField)
|
||||||
|
override val text: String = textSources.makeSourceString()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@RiskFeature
|
||||||
|
object Serializer : KSerializer<Created> {
|
||||||
|
@Serializable
|
||||||
|
private data class RawCreatedChecklistTask(
|
||||||
|
@SerialName(idField)
|
||||||
|
val id: ChecklistTaskId,
|
||||||
|
@SerialName(textField)
|
||||||
|
val text: String,
|
||||||
|
@SerialName(textEntitiesField)
|
||||||
|
val textSources: List<RawMessageEntity> = emptyList(),
|
||||||
|
@Suppress("SERIALIZER_TYPE_INCOMPATIBLE")
|
||||||
|
@SerialName(completedByUserField)
|
||||||
|
val completedByUser: PreviewUser? = null,
|
||||||
|
@SerialName(completedByChatField)
|
||||||
|
val completedByChat: PreviewChat? = null,
|
||||||
|
@SerialName(completionDateField)
|
||||||
|
val completionDate: TelegramDate = TelegramDate.Start, // TelegramDate(0) is the default according to https://core.telegram.org/bots/api#checklisttask
|
||||||
|
)
|
||||||
|
override val descriptor: SerialDescriptor = RawCreatedChecklistTask.serializer().descriptor
|
||||||
|
|
||||||
|
override fun deserialize(decoder: Decoder): Created {
|
||||||
|
val raw = RawCreatedChecklistTask.serializer().deserialize(
|
||||||
|
decoder
|
||||||
)
|
)
|
||||||
override val descriptor: SerialDescriptor = RawCreatedChecklistTask.serializer().descriptor
|
|
||||||
|
|
||||||
override fun deserialize(decoder: Decoder): Created {
|
return when {
|
||||||
val raw = RawCreatedChecklistTask.serializer().deserialize(
|
raw.completionDate == TelegramDate.Start -> Uncompleted(
|
||||||
decoder
|
id = raw.id,
|
||||||
|
textSources = raw.textSources.asTextSources(raw.text),
|
||||||
)
|
)
|
||||||
|
raw.completedByChat != null -> Completed.ByChat(
|
||||||
return when {
|
id = raw.id,
|
||||||
raw.completedByUser != null -> Done(
|
completedByChat = raw.completedByChat,
|
||||||
id = raw.id,
|
completionDate = raw.completionDate,
|
||||||
completedByUser = raw.completedByUser,
|
textSources = raw.textSources.asTextSources(raw.text),
|
||||||
completedByChat = raw.completedByChat,
|
)
|
||||||
completionDate = raw.completionDate,
|
raw.completedByUser != null -> Completed.ByUser(
|
||||||
textSources = raw.textSources.asTextSources(raw.text),
|
id = raw.id,
|
||||||
)
|
completedByUser = raw.completedByUser,
|
||||||
else -> Undone(
|
completionDate = raw.completionDate,
|
||||||
id = raw.id,
|
textSources = raw.textSources.asTextSources(raw.text),
|
||||||
textSources = raw.textSources.asTextSources(raw.text),
|
)
|
||||||
)
|
else -> Completed.Common(
|
||||||
}
|
id = raw.id,
|
||||||
}
|
completionDate = raw.completionDate,
|
||||||
|
textSources = raw.textSources.asTextSources(raw.text),
|
||||||
override fun serialize(encoder: Encoder, value: Created) {
|
|
||||||
RawCreatedChecklistTask.serializer().serialize(
|
|
||||||
encoder,
|
|
||||||
RawCreatedChecklistTask(
|
|
||||||
id = value.id,
|
|
||||||
text = value.text,
|
|
||||||
completedByUser = value.completedByUser,
|
|
||||||
completedByChat = (value as? Done)?.completedByChat,
|
|
||||||
completionDate = value.completionDate ?: TelegramDate(0),
|
|
||||||
textSources = value.textSources.toRawMessageEntities()
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun serialize(encoder: Encoder, value: Created) {
|
||||||
|
RawCreatedChecklistTask.serializer().serialize(
|
||||||
|
encoder,
|
||||||
|
RawCreatedChecklistTask(
|
||||||
|
id = value.id,
|
||||||
|
text = value.text,
|
||||||
|
completedByUser = value.completedByUser,
|
||||||
|
completedByChat = value.completedByChat,
|
||||||
|
completionDate = value.completionDate ?: TelegramDate.Start,
|
||||||
|
textSources = value.textSources.toRawMessageEntities()
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user