1
0
mirror of https://github.com/InsanusMokrassar/TelegramBotAPI.git synced 2025-12-26 16:15:52 +00:00

Compare commits

...

8 Commits

6 changed files with 663 additions and 270 deletions

View File

@@ -6,12 +6,15 @@ import dev.inmo.tgbotapi.types.ChatIdentifier
import dev.inmo.tgbotapi.types.MessageId
import dev.inmo.tgbotapi.types.chat.Chat
import dev.inmo.tgbotapi.types.message.abstracts.AccessibleMessage
import dev.inmo.tgbotapi.types.message.abstracts.Message
import dev.inmo.tgbotapi.types.reactions.Reaction
import kotlin.js.JsName
import kotlin.jvm.JvmName
suspend fun TelegramBot.setMessageReactions(
chatId: ChatIdentifier,
messageId: MessageId,
reactions: List<Reaction>,
reactions: List<Reaction> = emptyList(),
big: Boolean = false
) = execute(
SetMessageReactions(chatId, messageId, reactions, big)
@@ -20,32 +23,100 @@ suspend fun TelegramBot.setMessageReactions(
suspend fun TelegramBot.setMessageReaction(
chatId: ChatIdentifier,
messageId: MessageId,
reaction: Reaction?,
reaction: Reaction? = null,
big: Boolean = false
) = setMessageReactions(chatId, messageId, listOfNotNull(reaction), big)
suspend fun TelegramBot.setMessageReactions(
chat: Chat,
messageId: MessageId,
reactions: List<Reaction>,
reactions: List<Reaction> = emptyList(),
big: Boolean = false
) = setMessageReactions(chat.id, messageId, reactions, big)
suspend fun TelegramBot.setMessageReaction(
chat: Chat,
messageId: MessageId,
reaction: Reaction?,
reaction: Reaction? = null,
big: Boolean = false
) = setMessageReaction(chat.id, messageId, reaction, big)
suspend fun TelegramBot.setMessageReactions(
message: AccessibleMessage,
reactions: List<Reaction>,
meta: Message.MetaInfo,
reactions: List<Reaction> = emptyList(),
big: Boolean = false
) = setMessageReactions(message.chat, message.messageId, reactions, big)
) = setMessageReactions(meta.chatId, meta.messageId, reactions, big)
suspend fun TelegramBot.setMessageReaction(
meta: Message.MetaInfo,
reaction: Reaction? = null,
big: Boolean = false
) = setMessageReaction(meta.chatId, meta.messageId, reaction, big)
suspend fun TelegramBot.setMessageReactions(
message: AccessibleMessage,
reactions: List<Reaction> = emptyList(),
big: Boolean = false
) = setMessageReactions(message.metaInfo, reactions, big)
suspend fun TelegramBot.setMessageReaction(
message: AccessibleMessage,
reaction: Reaction?,
reaction: Reaction? = null,
big: Boolean = false
) = setMessageReaction(message.chat, message.messageId, reaction, big)
) = setMessageReaction(message.metaInfo, reaction, big)
@JvmName("setMessageReactionsStrings")
suspend fun TelegramBot.setMessageReactions(
chatId: ChatIdentifier,
messageId: MessageId,
emojis: List<String>,
big: Boolean = false
) = setMessageReactions(chatId, messageId, emojis.map { Reaction.Emoji(it) }, big)
suspend fun TelegramBot.setMessageReaction(
chatId: ChatIdentifier,
messageId: MessageId,
emoji: String?,
big: Boolean = false
) = setMessageReaction(chatId, messageId, emoji ?.let { Reaction.Emoji(it) }, big)
@JvmName("setMessageReactionsStrings")
suspend fun TelegramBot.setMessageReactions(
chat: Chat,
messageId: MessageId,
emojis: List<String>,
big: Boolean = false
) = setMessageReactions(chat, messageId, emojis.map { Reaction.Emoji(it) }, big)
suspend fun TelegramBot.setMessageReaction(
chat: Chat,
messageId: MessageId,
emoji: String?,
big: Boolean = false
) = setMessageReaction(chat, messageId, emoji ?.let { Reaction.Emoji(it) }, big)
@JvmName("setMessageReactionsStrings")
suspend fun TelegramBot.setMessageReactions(
meta: Message.MetaInfo,
emojis: List<String>,
big: Boolean = false
) = setMessageReactions(meta, emojis.map { Reaction.Emoji(it) }, big)
suspend fun TelegramBot.setMessageReaction(
meta: Message.MetaInfo,
emoji: String?,
big: Boolean = false
) = setMessageReaction(meta, emoji ?.let { Reaction.Emoji(it) }, big)
@JvmName("setMessageReactionsStrings")
suspend fun TelegramBot.setMessageReactions(
message: AccessibleMessage,
emojis: List<String>,
big: Boolean = false
) = setMessageReactions(message, emojis.map { Reaction.Emoji(it) }, big)
suspend fun TelegramBot.setMessageReaction(
message: AccessibleMessage,
emoji: String?,
big: Boolean = false
) = setMessageReaction(message, emoji ?.let { Reaction.Emoji(it) }, big)

View File

@@ -1,10 +1,14 @@
package dev.inmo.tgbotapi.types
import kotlinx.serialization.KSerializer
import kotlinx.serialization.Required
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import kotlinx.serialization.descriptors.SerialDescriptor
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder
@Serializable
@Serializable(LinkPreviewOptions.Companion::class)
sealed interface LinkPreviewOptions {
val isDisabled: Boolean
val url: String?
@@ -76,4 +80,46 @@ sealed interface LinkPreviewOptions {
override val preferLargeMedia: Boolean
get() = false
}
@Serializable
private data class Surrogate(
@SerialName(isDisabledField)
val isDisabled: Boolean = true,
@SerialName(urlField)
val url: String? = null,
@SerialName(preferSmallMediaField)
val preferSmallMedia: Boolean = false,
@SerialName(preferLargeMediaField)
val preferLargeMedia: Boolean = false,
@SerialName(showAboveTextField)
val showAboveText: Boolean = false,
) {
}
companion object : KSerializer<LinkPreviewOptions> {
override val descriptor: SerialDescriptor
get() = Surrogate.serializer().descriptor
override fun deserialize(decoder: Decoder): LinkPreviewOptions {
val surrogate = Surrogate.serializer().deserialize(decoder)
return when {
surrogate.isDisabled -> Disabled
surrogate.preferLargeMedia -> Large(surrogate.url, surrogate.showAboveText)
surrogate.preferSmallMedia -> Small(surrogate.url, surrogate.showAboveText)
else -> Medium(surrogate.url, surrogate.showAboveText)
}
}
override fun serialize(encoder: Encoder, value: LinkPreviewOptions) {
when (value) {
is Disabled -> Disabled.serializer().serialize(encoder, value)
is Large -> Large.serializer().serialize(encoder, value)
is Medium -> Medium.serializer().serialize(encoder, value)
is Small -> Small.serializer().serialize(encoder, value)
}
}
}
}

View File

@@ -21,7 +21,7 @@ data class TextQuote private constructor(
val isManual: Boolean = false
) : TextedInput {
override val textSources: List<TextSource> by lazy {
entities ?.asTextSources(text) ?: emptyList()
(entities ?: emptyList()).asTextSources(text)
}
companion object {

View File

@@ -1,7 +1,7 @@
package dev.inmo.tgbotapi.types.reactions
import dev.inmo.tgbotapi.types.CustomEmojiId
import dev.inmo.tgbotapi.types.customEmojiField
import dev.inmo.tgbotapi.types.customEmojiIdField
import dev.inmo.tgbotapi.types.emojiField
import dev.inmo.tgbotapi.utils.internal.ClassCastsIncluded
import kotlinx.serialization.KSerializer
@@ -12,6 +12,7 @@ import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder
import kotlinx.serialization.json.JsonDecoder
import kotlinx.serialization.json.JsonElement
import kotlin.jvm.JvmInline
@Serializable(Reaction.Companion::class)
@ClassCastsIncluded
@@ -19,7 +20,8 @@ sealed interface Reaction {
val type: String
@Serializable(Reaction.Companion::class)
data class Emoji(
@JvmInline
value class Emoji(
val emoji: String
) : Reaction {
override val type: String
@@ -30,8 +32,9 @@ sealed interface Reaction {
}
@Serializable(Reaction.Companion::class)
data class CustomEmoji(
val customEmoji: CustomEmojiId
@JvmInline
value class CustomEmoji(
val customEmojiId: CustomEmojiId
) : Reaction {
override val type: String
get() = Companion.type
@@ -51,8 +54,8 @@ sealed interface Reaction {
val type: String,
@SerialName(emojiField)
val emoji: String? = null,
@SerialName(customEmojiField)
val customEmoji: CustomEmojiId? = null
@SerialName(customEmojiIdField)
val customEmojiId: CustomEmojiId? = null
)
companion object : KSerializer<Reaction> {
@@ -69,7 +72,7 @@ sealed interface Reaction {
return when {
surrogate.emoji != null -> Emoji(surrogate.emoji)
surrogate.customEmoji != null -> CustomEmoji(surrogate.customEmoji)
surrogate.customEmojiId != null -> CustomEmoji(surrogate.customEmojiId)
else -> Unknown(surrogate.type, json)
}
}
@@ -83,7 +86,7 @@ sealed interface Reaction {
Surrogate(
type = value.type,
emoji = (value as? Emoji) ?.emoji,
customEmoji = (value as? CustomEmoji) ?.customEmoji,
customEmojiId = (value as? CustomEmoji) ?.customEmojiId,
)
)
}