mirror of
https://github.com/InsanusMokrassar/TelegramBotAPI.git
synced 2024-11-25 11:38:45 +00:00
0.14.2
This commit is contained in:
parent
1e0bf9e66d
commit
84a086e7e4
@ -26,6 +26,12 @@ some default library
|
|||||||
* `UpdatesFilter` now have additional callback for polls
|
* `UpdatesFilter` now have additional callback for polls
|
||||||
* `StopPoll#replyMarkup` now is optional
|
* `StopPoll#replyMarkup` now is optional
|
||||||
|
|
||||||
|
### 0.14.2 MediaGroups edit hotfixes
|
||||||
|
|
||||||
|
* `convertWithMediaGroupUpdates` extension added
|
||||||
|
* All media group converting extensions are internal for now
|
||||||
|
* Fixes according to updates in converting of updates to media group updates
|
||||||
|
|
||||||
## 0.13.0 Telegram Polls
|
## 0.13.0 Telegram Polls
|
||||||
|
|
||||||
* Type `PollOption` and `AnonymousPollOption` added
|
* Type `PollOption` and `AnonymousPollOption` added
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
project.version = "0.14.1"
|
project.version = "0.14.2"
|
||||||
project.group = "com.github.insanusmokrassar"
|
project.group = "com.github.insanusmokrassar"
|
||||||
|
|
||||||
buildscript {
|
buildscript {
|
||||||
|
@ -6,7 +6,7 @@ import com.github.insanusmokrassar.TelegramBotAPI.types.update.abstracts.BaseMes
|
|||||||
|
|
||||||
data class ChannelPostMediaGroupUpdate(
|
data class ChannelPostMediaGroupUpdate(
|
||||||
override val origins: List<BaseMessageUpdate>
|
override val origins: List<BaseMessageUpdate>
|
||||||
) : MediaGroupUpdate {
|
) : SentMediaGroupUpdate {
|
||||||
override val updateId: UpdateIdentifier = origins.last().updateId
|
override val updateId: UpdateIdentifier = origins.last().updateId
|
||||||
override val data: List<MediaGroupMessage> = origins.mapNotNull { it.data as? MediaGroupMessage }
|
override val data: List<MediaGroupMessage> = origins.mapNotNull { it.data as? MediaGroupMessage }
|
||||||
}
|
}
|
||||||
|
@ -2,11 +2,12 @@ package com.github.insanusmokrassar.TelegramBotAPI.types.update.MediaGroupUpdate
|
|||||||
|
|
||||||
import com.github.insanusmokrassar.TelegramBotAPI.types.UpdateIdentifier
|
import com.github.insanusmokrassar.TelegramBotAPI.types.UpdateIdentifier
|
||||||
import com.github.insanusmokrassar.TelegramBotAPI.types.message.abstracts.MediaGroupMessage
|
import com.github.insanusmokrassar.TelegramBotAPI.types.message.abstracts.MediaGroupMessage
|
||||||
|
import com.github.insanusmokrassar.TelegramBotAPI.types.update.EditChannelPostUpdate
|
||||||
import com.github.insanusmokrassar.TelegramBotAPI.types.update.abstracts.BaseMessageUpdate
|
import com.github.insanusmokrassar.TelegramBotAPI.types.update.abstracts.BaseMessageUpdate
|
||||||
|
|
||||||
data class EditChannelPostMediaGroupUpdate(
|
data class EditChannelPostMediaGroupUpdate(
|
||||||
override val origins: List<BaseMessageUpdate>
|
override val origin: EditChannelPostUpdate
|
||||||
) : MediaGroupUpdate {
|
) : EditMediaGroupUpdate {
|
||||||
override val updateId: UpdateIdentifier = origins.last().updateId
|
override val updateId: UpdateIdentifier = origin.updateId
|
||||||
override val data: List<MediaGroupMessage> = origins.mapNotNull { it.data as? MediaGroupMessage }
|
override val data: MediaGroupMessage = origin.data as MediaGroupMessage
|
||||||
}
|
}
|
@ -2,11 +2,12 @@ package com.github.insanusmokrassar.TelegramBotAPI.types.update.MediaGroupUpdate
|
|||||||
|
|
||||||
import com.github.insanusmokrassar.TelegramBotAPI.types.UpdateIdentifier
|
import com.github.insanusmokrassar.TelegramBotAPI.types.UpdateIdentifier
|
||||||
import com.github.insanusmokrassar.TelegramBotAPI.types.message.abstracts.MediaGroupMessage
|
import com.github.insanusmokrassar.TelegramBotAPI.types.message.abstracts.MediaGroupMessage
|
||||||
|
import com.github.insanusmokrassar.TelegramBotAPI.types.update.EditMessageUpdate
|
||||||
import com.github.insanusmokrassar.TelegramBotAPI.types.update.abstracts.BaseMessageUpdate
|
import com.github.insanusmokrassar.TelegramBotAPI.types.update.abstracts.BaseMessageUpdate
|
||||||
|
|
||||||
data class EditMessageMediaGroupUpdate(
|
data class EditMessageMediaGroupUpdate(
|
||||||
override val origins: List<BaseMessageUpdate>
|
override val origin: EditMessageUpdate
|
||||||
) : MediaGroupUpdate {
|
) : EditMediaGroupUpdate {
|
||||||
override val updateId: UpdateIdentifier = origins.last().updateId
|
override val updateId: UpdateIdentifier = origin.updateId
|
||||||
override val data: List<MediaGroupMessage> = origins.mapNotNull { it.data as? MediaGroupMessage }
|
override val data: MediaGroupMessage = origin.data as MediaGroupMessage
|
||||||
}
|
}
|
||||||
|
@ -4,7 +4,14 @@ import com.github.insanusmokrassar.TelegramBotAPI.types.message.abstracts.MediaG
|
|||||||
import com.github.insanusmokrassar.TelegramBotAPI.types.update.abstracts.BaseMessageUpdate
|
import com.github.insanusmokrassar.TelegramBotAPI.types.update.abstracts.BaseMessageUpdate
|
||||||
import com.github.insanusmokrassar.TelegramBotAPI.types.update.abstracts.Update
|
import com.github.insanusmokrassar.TelegramBotAPI.types.update.abstracts.Update
|
||||||
|
|
||||||
interface MediaGroupUpdate: Update {
|
interface MediaGroupUpdate : Update
|
||||||
|
|
||||||
|
interface SentMediaGroupUpdate: MediaGroupUpdate {
|
||||||
override val data: List<MediaGroupMessage>
|
override val data: List<MediaGroupMessage>
|
||||||
val origins: List<BaseMessageUpdate>
|
val origins: List<BaseMessageUpdate>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interface EditMediaGroupUpdate : MediaGroupUpdate {
|
||||||
|
override val data: MediaGroupMessage
|
||||||
|
val origin: BaseMessageUpdate
|
||||||
|
}
|
||||||
|
@ -6,7 +6,7 @@ import com.github.insanusmokrassar.TelegramBotAPI.types.update.abstracts.BaseMes
|
|||||||
|
|
||||||
data class MessageMediaGroupUpdate(
|
data class MessageMediaGroupUpdate(
|
||||||
override val origins: List<BaseMessageUpdate>
|
override val origins: List<BaseMessageUpdate>
|
||||||
) : MediaGroupUpdate {
|
) : SentMediaGroupUpdate {
|
||||||
override val updateId: UpdateIdentifier = origins.last().updateId
|
override val updateId: UpdateIdentifier = origins.last().updateId
|
||||||
override val data: List<MediaGroupMessage> = origins.mapNotNull { it.data as? MediaGroupMessage }
|
override val data: List<MediaGroupMessage> = origins.mapNotNull { it.data as? MediaGroupMessage }
|
||||||
}
|
}
|
@ -50,9 +50,7 @@ data class UpdatesFilter(
|
|||||||
is EditMessageMediaGroupUpdate -> editedMessageMediaGroupCallback ?.also { receiver ->
|
is EditMessageMediaGroupUpdate -> editedMessageMediaGroupCallback ?.also { receiver ->
|
||||||
receiver(update)
|
receiver(update)
|
||||||
} ?: editedMessageCallback ?.also { receiver ->
|
} ?: editedMessageCallback ?.also { receiver ->
|
||||||
update.origins.mapNotNull { it as? EditMessageUpdate }.forEach {
|
receiver(update.origin)
|
||||||
receiver(it)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
is ChannelPostUpdate -> channelPostCallback ?.invoke(update)
|
is ChannelPostUpdate -> channelPostCallback ?.invoke(update)
|
||||||
is ChannelPostMediaGroupUpdate -> channelPostMediaGroupCallback ?.also { receiver ->
|
is ChannelPostMediaGroupUpdate -> channelPostMediaGroupCallback ?.also { receiver ->
|
||||||
@ -66,9 +64,7 @@ data class UpdatesFilter(
|
|||||||
is EditChannelPostMediaGroupUpdate -> editedChannelPostMediaGroupCallback ?.also { receiver ->
|
is EditChannelPostMediaGroupUpdate -> editedChannelPostMediaGroupCallback ?.also { receiver ->
|
||||||
receiver(update)
|
receiver(update)
|
||||||
} ?: editedChannelPostCallback ?.also { receiver ->
|
} ?: editedChannelPostCallback ?.also { receiver ->
|
||||||
update.origins.mapNotNull { it as? EditChannelPostUpdate }.forEach {
|
receiver(update.origin)
|
||||||
receiver(it)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
is ChosenInlineResultUpdate -> chosenInlineResultCallback ?.invoke(update)
|
is ChosenInlineResultUpdate -> chosenInlineResultCallback ?.invoke(update)
|
||||||
is InlineQueryUpdate -> inlineQueryCallback ?.invoke(update)
|
is InlineQueryUpdate -> inlineQueryCallback ?.invoke(update)
|
||||||
|
@ -7,10 +7,9 @@ import com.github.insanusmokrassar.TelegramBotAPI.types.UpdateIdentifier
|
|||||||
import com.github.insanusmokrassar.TelegramBotAPI.types.message.abstracts.MediaGroupMessage
|
import com.github.insanusmokrassar.TelegramBotAPI.types.message.abstracts.MediaGroupMessage
|
||||||
import com.github.insanusmokrassar.TelegramBotAPI.types.update.abstracts.BaseMessageUpdate
|
import com.github.insanusmokrassar.TelegramBotAPI.types.update.abstracts.BaseMessageUpdate
|
||||||
import com.github.insanusmokrassar.TelegramBotAPI.types.update.abstracts.Update
|
import com.github.insanusmokrassar.TelegramBotAPI.types.update.abstracts.Update
|
||||||
|
import com.github.insanusmokrassar.TelegramBotAPI.utils.*
|
||||||
import com.github.insanusmokrassar.TelegramBotAPI.utils.extensions.UpdateReceiver
|
import com.github.insanusmokrassar.TelegramBotAPI.utils.extensions.UpdateReceiver
|
||||||
import com.github.insanusmokrassar.TelegramBotAPI.utils.extensions.executeUnsafe
|
import com.github.insanusmokrassar.TelegramBotAPI.utils.extensions.executeUnsafe
|
||||||
import com.github.insanusmokrassar.TelegramBotAPI.utils.mediaGroupId
|
|
||||||
import com.github.insanusmokrassar.TelegramBotAPI.utils.toMediaGroupUpdate
|
|
||||||
import kotlinx.coroutines.*
|
import kotlinx.coroutines.*
|
||||||
import java.util.concurrent.Executors
|
import java.util.concurrent.Executors
|
||||||
|
|
||||||
@ -35,9 +34,7 @@ class UpdatesPoller(
|
|||||||
val inputMediaGroupId = (update ?.data as? MediaGroupMessage) ?.mediaGroupId
|
val inputMediaGroupId = (update ?.data as? MediaGroupMessage) ?.mediaGroupId
|
||||||
if (mediaGroup.isNotEmpty() && inputMediaGroupId ?.equals(mediaGroup.mediaGroupId) != true) {
|
if (mediaGroup.isNotEmpty() && inputMediaGroupId ?.equals(mediaGroup.mediaGroupId) != true) {
|
||||||
mediaGroup.sortBy { it.updateId }
|
mediaGroup.sortBy { it.updateId }
|
||||||
mediaGroup.toMediaGroupUpdate() ?.let {
|
mediaGroup.convertWithMediaGroupUpdates().forEach {
|
||||||
sendToBlock(it)
|
|
||||||
} ?: mediaGroup.forEach {
|
|
||||||
sendToBlock(it)
|
sendToBlock(it)
|
||||||
}
|
}
|
||||||
mediaGroup.clear()
|
mediaGroup.clear()
|
||||||
|
@ -1,16 +1,55 @@
|
|||||||
package com.github.insanusmokrassar.TelegramBotAPI.utils
|
package com.github.insanusmokrassar.TelegramBotAPI.utils
|
||||||
|
|
||||||
|
import com.github.insanusmokrassar.TelegramBotAPI.types.MediaGroupIdentifier
|
||||||
|
import com.github.insanusmokrassar.TelegramBotAPI.types.message.abstracts.MediaGroupMessage
|
||||||
import com.github.insanusmokrassar.TelegramBotAPI.types.update.*
|
import com.github.insanusmokrassar.TelegramBotAPI.types.update.*
|
||||||
import com.github.insanusmokrassar.TelegramBotAPI.types.update.MediaGroupUpdates.*
|
import com.github.insanusmokrassar.TelegramBotAPI.types.update.MediaGroupUpdates.*
|
||||||
import com.github.insanusmokrassar.TelegramBotAPI.types.update.abstracts.BaseMessageUpdate
|
import com.github.insanusmokrassar.TelegramBotAPI.types.update.abstracts.BaseMessageUpdate
|
||||||
|
import com.github.insanusmokrassar.TelegramBotAPI.types.update.abstracts.Update
|
||||||
|
|
||||||
fun List<BaseMessageUpdate>.toMediaGroupUpdate(): MediaGroupUpdate? = (this as? MediaGroupUpdate) ?: let {
|
private inline val Pair<MediaGroupMessage, *>.message
|
||||||
|
get() = first
|
||||||
|
|
||||||
|
internal fun List<BaseMessageUpdate>.convertWithMediaGroupUpdates(): List<Update> {
|
||||||
|
val resultUpdates = mutableListOf<Update>()
|
||||||
|
val mediaGroups = mutableMapOf<MediaGroupIdentifier, MutableList<BaseMessageUpdate>>()
|
||||||
|
for (update in this) {
|
||||||
|
val asEditMediaGroupMessage = update.toEditMediaGroupUpdate()
|
||||||
|
if (asEditMediaGroupMessage != null) {
|
||||||
|
resultUpdates.add(asEditMediaGroupMessage)
|
||||||
|
} else {
|
||||||
|
val data = update.data
|
||||||
|
if (data is MediaGroupMessage) {
|
||||||
|
(mediaGroups[data.mediaGroupId] ?: mutableListOf<BaseMessageUpdate>().also { mediaGroups[data.mediaGroupId] = it }).add(update)
|
||||||
|
} else {
|
||||||
|
resultUpdates.add(update)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
mediaGroups.values.map {
|
||||||
|
it.toSentMediaGroupUpdate() ?.let { mediaGroupUpdate ->
|
||||||
|
resultUpdates.add(mediaGroupUpdate)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return resultUpdates.sortedBy { it.updateId }
|
||||||
|
}
|
||||||
|
|
||||||
|
internal fun List<BaseMessageUpdate>.toSentMediaGroupUpdate(): SentMediaGroupUpdate? = (this as? SentMediaGroupUpdate) ?: let {
|
||||||
|
if (isEmpty()) {
|
||||||
|
return@let null
|
||||||
|
}
|
||||||
val resultList = sortedBy { it.updateId }
|
val resultList = sortedBy { it.updateId }
|
||||||
when (first()) {
|
when (first()) {
|
||||||
is MessageUpdate -> MessageMediaGroupUpdate(resultList)
|
is MessageUpdate -> MessageMediaGroupUpdate(resultList)
|
||||||
is EditMessageUpdate -> EditMessageMediaGroupUpdate(resultList)
|
|
||||||
is ChannelPostUpdate -> ChannelPostMediaGroupUpdate(resultList)
|
is ChannelPostUpdate -> ChannelPostMediaGroupUpdate(resultList)
|
||||||
is EditChannelPostUpdate -> EditChannelPostMediaGroupUpdate(resultList)
|
else -> null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
internal fun BaseMessageUpdate.toEditMediaGroupUpdate(): EditMediaGroupUpdate? = (this as? EditMediaGroupUpdate) ?: let {
|
||||||
|
when (this) {
|
||||||
|
is EditMessageUpdate -> EditMessageMediaGroupUpdate(this)
|
||||||
|
is EditChannelPostUpdate -> EditChannelPostMediaGroupUpdate(this)
|
||||||
else -> null
|
else -> null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,14 +3,15 @@ package com.github.insanusmokrassar.TelegramBotAPI.utils.extensions
|
|||||||
import com.github.insanusmokrassar.TelegramBotAPI.bot.RequestsExecutor
|
import com.github.insanusmokrassar.TelegramBotAPI.bot.RequestsExecutor
|
||||||
import com.github.insanusmokrassar.TelegramBotAPI.requests.abstracts.InputFile
|
import com.github.insanusmokrassar.TelegramBotAPI.requests.abstracts.InputFile
|
||||||
import com.github.insanusmokrassar.TelegramBotAPI.requests.webhook.SetWebhook
|
import com.github.insanusmokrassar.TelegramBotAPI.requests.webhook.SetWebhook
|
||||||
import com.github.insanusmokrassar.TelegramBotAPI.types.MediaGroupIdentifier
|
|
||||||
import com.github.insanusmokrassar.TelegramBotAPI.types.message.abstracts.MediaGroupMessage
|
import com.github.insanusmokrassar.TelegramBotAPI.types.message.abstracts.MediaGroupMessage
|
||||||
|
import com.github.insanusmokrassar.TelegramBotAPI.types.update.MediaGroupUpdates.MediaGroupUpdate
|
||||||
import com.github.insanusmokrassar.TelegramBotAPI.types.update.RawUpdate
|
import com.github.insanusmokrassar.TelegramBotAPI.types.update.RawUpdate
|
||||||
import com.github.insanusmokrassar.TelegramBotAPI.types.update.abstracts.BaseMessageUpdate
|
import com.github.insanusmokrassar.TelegramBotAPI.types.update.abstracts.BaseMessageUpdate
|
||||||
import com.github.insanusmokrassar.TelegramBotAPI.types.update.abstracts.Update
|
import com.github.insanusmokrassar.TelegramBotAPI.types.update.abstracts.Update
|
||||||
import com.github.insanusmokrassar.TelegramBotAPI.updateshandlers.UpdatesFilter
|
import com.github.insanusmokrassar.TelegramBotAPI.updateshandlers.UpdatesFilter
|
||||||
import com.github.insanusmokrassar.TelegramBotAPI.updateshandlers.webhook.WebhookPrivateKeyConfig
|
import com.github.insanusmokrassar.TelegramBotAPI.updateshandlers.webhook.WebhookPrivateKeyConfig
|
||||||
import com.github.insanusmokrassar.TelegramBotAPI.utils.toMediaGroupUpdate
|
import com.github.insanusmokrassar.TelegramBotAPI.utils.convertWithMediaGroupUpdates
|
||||||
|
import com.github.insanusmokrassar.TelegramBotAPI.utils.toSentMediaGroupUpdate
|
||||||
import io.ktor.application.call
|
import io.ktor.application.call
|
||||||
import io.ktor.request.receiveText
|
import io.ktor.request.receiveText
|
||||||
import io.ktor.response.respond
|
import io.ktor.response.respond
|
||||||
@ -61,7 +62,7 @@ suspend fun RequestsExecutor.setWebhook(
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
val updatesChannel = Channel<Update>(Channel.UNLIMITED)
|
val updatesChannel = Channel<Update>(Channel.UNLIMITED)
|
||||||
val mediaGroupChannel = Channel<Pair<MediaGroupIdentifier, BaseMessageUpdate>>(Channel.UNLIMITED)
|
val mediaGroupChannel = Channel<Pair<String, BaseMessageUpdate>>(Channel.UNLIMITED)
|
||||||
val mediaGroupAccumulatedChannel = mediaGroupChannel.accumulateByKey(
|
val mediaGroupAccumulatedChannel = mediaGroupChannel.accumulateByKey(
|
||||||
1000L,
|
1000L,
|
||||||
scope = scope
|
scope = scope
|
||||||
@ -110,17 +111,20 @@ suspend fun RequestsExecutor.setWebhook(
|
|||||||
launch {
|
launch {
|
||||||
for (update in updatesChannel) {
|
for (update in updatesChannel) {
|
||||||
val data = update.data
|
val data = update.data
|
||||||
|
if (data is MediaGroupUpdate) {
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
}
|
||||||
when (data) {
|
when (data) {
|
||||||
is MediaGroupMessage -> mediaGroupChannel.send(data.mediaGroupId to update as BaseMessageUpdate)
|
is MediaGroupMessage -> mediaGroupChannel.send("${data.mediaGroupId}${update::class.simpleName}" to update as BaseMessageUpdate)
|
||||||
else -> block(update)
|
else -> block(update)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
launch {
|
launch {
|
||||||
for (mediaGroupUpdate in mediaGroupAccumulatedChannel) {
|
for ((_, mediaGroup) in mediaGroupAccumulatedChannel) {
|
||||||
mediaGroupUpdate.second.toMediaGroupUpdate() ?.let {
|
mediaGroup.convertWithMediaGroupUpdates().forEach {
|
||||||
block(it)
|
|
||||||
} ?: mediaGroupUpdate.second.forEach {
|
|
||||||
block(it)
|
block(it)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user