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`:
|
||||
* **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
|
||||
|
||||
|
||||
@@ -23,6 +23,10 @@ data class TelegramDate(
|
||||
val asDate: DateTime = DateTime(
|
||||
date * 1000
|
||||
)
|
||||
|
||||
companion object {
|
||||
val Start = TelegramDate(0)
|
||||
}
|
||||
}
|
||||
|
||||
fun DateTime.toTelegramDate(): TelegramDate = TelegramDate(this)
|
||||
|
||||
@@ -104,8 +104,8 @@ sealed interface ChecklistTask : TextedInput {
|
||||
}
|
||||
|
||||
@Suppress("SERIALIZER_TYPE_INCOMPATIBLE")
|
||||
@Serializable(Created.Serializer::class)
|
||||
data class Undone(
|
||||
@Serializable(Serializer::class)
|
||||
data class Uncompleted(
|
||||
@SerialName(idField)
|
||||
override val id: ChecklistTaskId,
|
||||
@SerialName(textEntitiesField)
|
||||
@@ -125,49 +125,72 @@ sealed interface ChecklistTask : TextedInput {
|
||||
)
|
||||
}
|
||||
|
||||
@Serializable(Serializer::class)
|
||||
sealed interface Created : ChecklistTask {
|
||||
val completedByUser: PreviewUser?
|
||||
get() = null
|
||||
val completedByChat: PreviewChat?
|
||||
get() = null
|
||||
val completionDate: TelegramDate?
|
||||
get() = null
|
||||
}
|
||||
|
||||
@Suppress("SERIALIZER_TYPE_INCOMPATIBLE")
|
||||
@Serializable(Created.Serializer::class)
|
||||
data class Done(
|
||||
@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(completedByChatField)
|
||||
val completedByChat: PreviewChat? = null,
|
||||
@SerialName(completionDateField)
|
||||
override val completionDate: TelegramDate,
|
||||
@SerialName(textEntitiesField)
|
||||
override val textSources: List<TextSource> = emptyList()
|
||||
) : ChecklistTask.Created {
|
||||
) : Completed {
|
||||
@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 {
|
||||
val completedByUser: PreviewUser?
|
||||
get() = null
|
||||
val completionDate: TelegramDate?
|
||||
get() = null
|
||||
@Suppress("SERIALIZER_TYPE_INCOMPATIBLE")
|
||||
@Serializable(Serializer::class)
|
||||
data class ByChat(
|
||||
@SerialName(idField)
|
||||
override val id: ChecklistTaskId,
|
||||
@SerialName(completedByChatField)
|
||||
override val completedByChat: PreviewChat,
|
||||
@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()
|
||||
}
|
||||
@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> {
|
||||
@@ -185,7 +208,7 @@ sealed interface ChecklistTask : TextedInput {
|
||||
@SerialName(completedByChatField)
|
||||
val completedByChat: PreviewChat? = null,
|
||||
@SerialName(completionDateField)
|
||||
val completionDate: TelegramDate = TelegramDate(0), // TelegramDate(0) is the default according to https://core.telegram.org/bots/api#checklisttask
|
||||
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
|
||||
|
||||
@@ -195,15 +218,25 @@ sealed interface ChecklistTask : TextedInput {
|
||||
)
|
||||
|
||||
return when {
|
||||
raw.completedByUser != null -> Done(
|
||||
raw.completionDate == TelegramDate.Start -> Uncompleted(
|
||||
id = raw.id,
|
||||
textSources = raw.textSources.asTextSources(raw.text),
|
||||
)
|
||||
raw.completedByChat != null -> Completed.ByChat(
|
||||
id = raw.id,
|
||||
completedByUser = raw.completedByUser,
|
||||
completedByChat = raw.completedByChat,
|
||||
completionDate = raw.completionDate,
|
||||
textSources = raw.textSources.asTextSources(raw.text),
|
||||
)
|
||||
else -> Undone(
|
||||
raw.completedByUser != null -> Completed.ByUser(
|
||||
id = raw.id,
|
||||
completedByUser = raw.completedByUser,
|
||||
completionDate = raw.completionDate,
|
||||
textSources = raw.textSources.asTextSources(raw.text),
|
||||
)
|
||||
else -> Completed.Common(
|
||||
id = raw.id,
|
||||
completionDate = raw.completionDate,
|
||||
textSources = raw.textSources.asTextSources(raw.text),
|
||||
)
|
||||
}
|
||||
@@ -216,12 +249,11 @@ sealed interface ChecklistTask : TextedInput {
|
||||
id = value.id,
|
||||
text = value.text,
|
||||
completedByUser = value.completedByUser,
|
||||
completedByChat = (value as? Done)?.completedByChat,
|
||||
completionDate = value.completionDate ?: TelegramDate(0),
|
||||
completedByChat = value.completedByChat,
|
||||
completionDate = value.completionDate ?: TelegramDate.Start,
|
||||
textSources = value.textSources.toRawMessageEntities()
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user