mirror of
https://github.com/InsanusMokrassar/TelegramBotAPI.git
synced 2026-05-25 01:37:20 +00:00
Chat Management section realization
This commit is contained in:
@@ -6,6 +6,7 @@ import dev.inmo.tgbotapi.types.ChatIdentifier
|
||||
import dev.inmo.tgbotapi.types.chat.member.AdministratorChatMember
|
||||
import dev.inmo.tgbotapi.types.chat.member.AdministratorChatMemberSerializer
|
||||
import dev.inmo.tgbotapi.types.chatIdField
|
||||
import dev.inmo.tgbotapi.types.returnBotsField
|
||||
import kotlinx.serialization.*
|
||||
import kotlinx.serialization.builtins.ListSerializer
|
||||
|
||||
@@ -13,10 +14,23 @@ private val chatMembersListSerializer = ListSerializer(
|
||||
AdministratorChatMemberSerializer
|
||||
)
|
||||
|
||||
/**
|
||||
* Represents a request to retrieve a list of administrators in a chat.
|
||||
*
|
||||
* This class is used to get information about all administrators of a specific chat.
|
||||
* The response includes details about the administrators, such as their permissions.
|
||||
*
|
||||
* @property chatId Unique identifier for the target chat or username of the target supergroup or channel.
|
||||
* @property retrieveOtherBots (Serialized as `return_bots`) Optional flag indicating whether to include bot administrators other than the requesting bot.
|
||||
* @see ChatRequest
|
||||
* @see SimpleRequest
|
||||
*/
|
||||
@Serializable
|
||||
data class GetChatAdministrators(
|
||||
@SerialName(chatIdField)
|
||||
override val chatId: ChatIdentifier
|
||||
override val chatId: ChatIdentifier,
|
||||
@SerialName(returnBotsField)
|
||||
val retrieveOtherBots: Boolean? = null
|
||||
): ChatRequest, SimpleRequest<List<AdministratorChatMember>> {
|
||||
override fun method(): String = "getChatAdministrators"
|
||||
override val resultDeserializer: DeserializationStrategy<List<AdministratorChatMember>>
|
||||
|
||||
@@ -0,0 +1,53 @@
|
||||
package dev.inmo.tgbotapi.requests.send
|
||||
|
||||
import dev.inmo.micro_utils.common.Warning
|
||||
import dev.inmo.tgbotapi.abstracts.types.ChatRequest
|
||||
import dev.inmo.tgbotapi.requests.abstracts.SimpleRequest
|
||||
import dev.inmo.tgbotapi.types.*
|
||||
import dev.inmo.tgbotapi.utils.serializers.UnitFromBooleanSerializer
|
||||
import kotlinx.serialization.DeserializationStrategy
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
import kotlinx.serialization.SerializationStrategy
|
||||
|
||||
@Serializable
|
||||
data class DeleteAllMessageReactions @Warning(
|
||||
"Pass either userId or actorChatId, but not both. Prefer DeleteAllUserMessageReactions or DeleteAllActorChatMessageReactions factory functions"
|
||||
) constructor(
|
||||
@SerialName(chatIdField)
|
||||
override val chatId: ChatIdentifier,
|
||||
@Suppress("SERIALIZER_TYPE_INCOMPATIBLE")
|
||||
@SerialName(userIdField)
|
||||
val userId: UserId? = null,
|
||||
@Suppress("SERIALIZER_TYPE_INCOMPATIBLE")
|
||||
@SerialName(actorChatIdField)
|
||||
val actorChatId: ChatId? = null
|
||||
) : SimpleRequest<Unit>, ChatRequest {
|
||||
override fun method(): String = "deleteAllMessageReactions"
|
||||
|
||||
override val requestSerializer: SerializationStrategy<*>
|
||||
get() = serializer()
|
||||
|
||||
override val resultDeserializer: DeserializationStrategy<Unit>
|
||||
get() = UnitFromBooleanSerializer
|
||||
}
|
||||
|
||||
@OptIn(Warning::class)
|
||||
fun DeleteAllUserMessageReactions(
|
||||
chatId: ChatIdentifier,
|
||||
userId: UserId
|
||||
): DeleteAllMessageReactions = DeleteAllMessageReactions(
|
||||
chatId = chatId,
|
||||
userId = userId,
|
||||
actorChatId = null
|
||||
)
|
||||
|
||||
@OptIn(Warning::class)
|
||||
fun DeleteAllActorChatMessageReactions(
|
||||
chatId: ChatIdentifier,
|
||||
actorChatId: ChatId
|
||||
): DeleteAllMessageReactions = DeleteAllMessageReactions(
|
||||
chatId = chatId,
|
||||
userId = null,
|
||||
actorChatId = actorChatId
|
||||
)
|
||||
@@ -0,0 +1,59 @@
|
||||
package dev.inmo.tgbotapi.requests.send
|
||||
|
||||
import dev.inmo.micro_utils.common.Warning
|
||||
import dev.inmo.tgbotapi.abstracts.types.ChatRequest
|
||||
import dev.inmo.tgbotapi.requests.abstracts.SimpleRequest
|
||||
import dev.inmo.tgbotapi.types.*
|
||||
import dev.inmo.tgbotapi.utils.serializers.UnitFromBooleanSerializer
|
||||
import kotlinx.serialization.DeserializationStrategy
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
import kotlinx.serialization.SerializationStrategy
|
||||
|
||||
@Serializable
|
||||
data class DeleteMessageReaction @Warning(
|
||||
"Pass either userId or actorChatId, but not both. Prefer DeleteUserMessageReaction or DeleteActorChatMessageReaction factory functions"
|
||||
) constructor(
|
||||
@SerialName(chatIdField)
|
||||
override val chatId: ChatIdentifier,
|
||||
@SerialName(messageIdField)
|
||||
val messageId: MessageId,
|
||||
@Suppress("SERIALIZER_TYPE_INCOMPATIBLE")
|
||||
@SerialName(userIdField)
|
||||
val userId: UserId? = null,
|
||||
@Suppress("SERIALIZER_TYPE_INCOMPATIBLE")
|
||||
@SerialName(actorChatIdField)
|
||||
val actorChatId: ChatId? = null
|
||||
) : SimpleRequest<Unit>, ChatRequest {
|
||||
override fun method(): String = "deleteMessageReaction"
|
||||
|
||||
override val requestSerializer: SerializationStrategy<*>
|
||||
get() = serializer()
|
||||
|
||||
override val resultDeserializer: DeserializationStrategy<Unit>
|
||||
get() = UnitFromBooleanSerializer
|
||||
}
|
||||
|
||||
@OptIn(Warning::class)
|
||||
fun DeleteUserMessageReaction(
|
||||
chatId: ChatIdentifier,
|
||||
messageId: MessageId,
|
||||
userId: UserId
|
||||
): DeleteMessageReaction = DeleteMessageReaction(
|
||||
chatId = chatId,
|
||||
messageId = messageId,
|
||||
userId = userId,
|
||||
actorChatId = null
|
||||
)
|
||||
|
||||
@OptIn(Warning::class)
|
||||
fun DeleteActorChatMessageReaction(
|
||||
chatId: ChatIdentifier,
|
||||
messageId: MessageId,
|
||||
actorChatId: ChatId
|
||||
): DeleteMessageReaction = DeleteMessageReaction(
|
||||
chatId = chatId,
|
||||
messageId = messageId,
|
||||
userId = null,
|
||||
actorChatId = actorChatId
|
||||
)
|
||||
@@ -294,7 +294,10 @@ const val allowAddingOptionsField = "allow_adding_options"
|
||||
const val hideResultsUntilClosesField = "hide_results_until_closes"
|
||||
const val isAnonymousField = "is_anonymous"
|
||||
const val canManageTopicsField = "can_manage_topics"
|
||||
const val canReactToMessagesField = "can_react_to_messages"
|
||||
const val canEditTagField = "can_edit_tag"
|
||||
const val returnBotsField = "return_bots"
|
||||
const val actorChatIdField = "actor_chat_id"
|
||||
const val canPostStoriesField = "can_post_stories"
|
||||
const val canEditStoriesField = "can_edit_stories"
|
||||
const val canDeleteStoriesField = "can_delete_stories"
|
||||
|
||||
@@ -33,6 +33,7 @@ interface ChatPermissions {
|
||||
val canChangeInfo: Boolean?
|
||||
val canInviteUsers: Boolean?
|
||||
val canPinMessages: Boolean?
|
||||
val canReactToMessages: Boolean?
|
||||
val canEditTag: Boolean?
|
||||
@Transient
|
||||
val isGranular
|
||||
@@ -75,6 +76,8 @@ interface ChatPermissions {
|
||||
override val canInviteUsers: Boolean? = null,
|
||||
@SerialName(canPinMessagesField)
|
||||
override val canPinMessages: Boolean? = null,
|
||||
@SerialName(canReactToMessagesField)
|
||||
override val canReactToMessages: Boolean? = null,
|
||||
@SerialName(canEditTagField)
|
||||
override val canEditTag: Boolean = false,
|
||||
) : ChatPermissions {
|
||||
@@ -97,6 +100,8 @@ interface ChatPermissions {
|
||||
override val canInviteUsers: Boolean? = null,
|
||||
@SerialName(canPinMessagesField)
|
||||
override val canPinMessages: Boolean? = null,
|
||||
@SerialName(canReactToMessagesField)
|
||||
override val canReactToMessages: Boolean? = null,
|
||||
@SerialName(canEditTagField)
|
||||
override val canEditTag: Boolean = false,
|
||||
) : ChatPermissions {
|
||||
@@ -141,7 +146,8 @@ interface ChatPermissions {
|
||||
canAddWebPagePreviews: Boolean? = null,
|
||||
canChangeInfo: Boolean? = null,
|
||||
canInviteUsers: Boolean? = null,
|
||||
canPinMessages: Boolean? = null
|
||||
canPinMessages: Boolean? = null,
|
||||
canReactToMessages: Boolean? = null
|
||||
) = Granular(
|
||||
canSendMessages = canSendMessages,
|
||||
canSendAudios = canSendAudios,
|
||||
@@ -155,7 +161,8 @@ interface ChatPermissions {
|
||||
canAddWebPagePreviews = canAddWebPagePreviews,
|
||||
canChangeInfo = canChangeInfo,
|
||||
canInviteUsers = canInviteUsers,
|
||||
canPinMessages = canPinMessages
|
||||
canPinMessages = canPinMessages,
|
||||
canReactToMessages = canReactToMessages
|
||||
)
|
||||
|
||||
private val realSerializer = Granular.serializer()
|
||||
@@ -185,7 +192,8 @@ interface ChatPermissions {
|
||||
canAddWebPagePreviews = canAddWebPagePreviews,
|
||||
canChangeInfo = canChangeInfo,
|
||||
canInviteUsers = canInviteUsers,
|
||||
canPinMessages = canPinMessages
|
||||
canPinMessages = canPinMessages,
|
||||
canReactToMessages = canReactToMessages
|
||||
)
|
||||
}
|
||||
)
|
||||
@@ -209,7 +217,8 @@ interface ChatPermissions {
|
||||
canAddWebPagePreviews: Boolean? = this.canAddWebPagePreviews,
|
||||
canChangeInfo: Boolean? = this.canChangeInfo,
|
||||
canInviteUsers: Boolean? = this.canInviteUsers,
|
||||
canPinMessages: Boolean? = this.canPinMessages
|
||||
canPinMessages: Boolean? = this.canPinMessages,
|
||||
canReactToMessages: Boolean? = this.canReactToMessages
|
||||
): ChatPermissions = ChatPermissions(
|
||||
canSendMessages = canSendMessages,
|
||||
canSendAudios = canSendAudios,
|
||||
@@ -223,7 +232,8 @@ interface ChatPermissions {
|
||||
canAddWebPagePreviews = canAddWebPagePreviews,
|
||||
canChangeInfo = canChangeInfo,
|
||||
canInviteUsers = canInviteUsers,
|
||||
canPinMessages = canPinMessages
|
||||
canPinMessages = canPinMessages,
|
||||
canReactToMessages = canReactToMessages
|
||||
)
|
||||
|
||||
/**
|
||||
@@ -236,7 +246,8 @@ interface ChatPermissions {
|
||||
canAddWebPagePreviews: Boolean? = this.canAddWebPagePreviews,
|
||||
canChangeInfo: Boolean? = this.canChangeInfo,
|
||||
canInviteUsers: Boolean? = this.canInviteUsers,
|
||||
canPinMessages: Boolean? = this.canPinMessages
|
||||
canPinMessages: Boolean? = this.canPinMessages,
|
||||
canReactToMessages: Boolean? = this.canReactToMessages
|
||||
): ChatPermissions = ChatPermissions(
|
||||
canSendMessages = null,
|
||||
canSendAudios = null,
|
||||
@@ -250,7 +261,8 @@ interface ChatPermissions {
|
||||
canAddWebPagePreviews = canAddWebPagePreviews,
|
||||
canChangeInfo = canChangeInfo,
|
||||
canInviteUsers = canInviteUsers,
|
||||
canPinMessages = canPinMessages
|
||||
canPinMessages = canPinMessages,
|
||||
canReactToMessages = canReactToMessages
|
||||
)
|
||||
}
|
||||
|
||||
@@ -268,6 +280,7 @@ val LeftRestrictionsChatPermissions = ChatPermissions(
|
||||
canChangeInfo = true,
|
||||
canInviteUsers = true,
|
||||
canPinMessages = true,
|
||||
canReactToMessages = true,
|
||||
)
|
||||
|
||||
val RestrictionsChatPermissions = ChatPermissions(
|
||||
@@ -284,4 +297,5 @@ val RestrictionsChatPermissions = ChatPermissions(
|
||||
canChangeInfo = false,
|
||||
canInviteUsers = false,
|
||||
canPinMessages = false,
|
||||
canReactToMessages = false,
|
||||
)
|
||||
|
||||
@@ -15,7 +15,7 @@ sealed interface RestrictedChatMember : ChatMember, UntilDate, OptionallyTagged
|
||||
@Deprecated(
|
||||
"Renamed",
|
||||
ReplaceWith(
|
||||
"RestrictedChatMemberImpl(user, untilDate, isMember, canSendMessages, canSendAudios, canSendDocuments, canSendPhotos, canSendVideos, canSendVideoNotes, canSendVoiceNotes, canSendPolls, canSendOtherMessages, canAddWebPagePreviews, canChangeInfo, canInviteUsers, canPinMessages, canManageTopics)",
|
||||
"RestrictedChatMemberImpl(user, untilDate, isMember, canSendMessages, canSendAudios, canSendDocuments, canSendPhotos, canSendVideos, canSendVideoNotes, canSendVoiceNotes, canSendPolls, canSendOtherMessages, canAddWebPagePreviews, canChangeInfo, canInviteUsers, canPinMessages, canManageTopics, canReactToMessages)",
|
||||
"dev.inmo.tgbotapi.types.chat.members.RestrictedChatMemberImpl",
|
||||
)
|
||||
)
|
||||
@@ -36,7 +36,8 @@ sealed interface RestrictedChatMember : ChatMember, UntilDate, OptionallyTagged
|
||||
canChangeInfo: Boolean = false,
|
||||
canInviteUsers: Boolean = false,
|
||||
canPinMessages: Boolean = false,
|
||||
canManageTopics: Boolean = false
|
||||
canManageTopics: Boolean = false,
|
||||
canReactToMessages: Boolean = false
|
||||
) = RestrictedMemberChatMember(
|
||||
user = user,
|
||||
untilDate = untilDate,
|
||||
@@ -54,7 +55,8 @@ sealed interface RestrictedChatMember : ChatMember, UntilDate, OptionallyTagged
|
||||
canChangeInfo = canChangeInfo,
|
||||
canInviteUsers = canInviteUsers,
|
||||
canPinMessages = canPinMessages,
|
||||
canManageTopics = canManageTopics
|
||||
canManageTopics = canManageTopics,
|
||||
canReactToMessages = canReactToMessages
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -48,6 +48,8 @@ data class RestrictedMemberChatMember(
|
||||
override val canPinMessages: Boolean = false,
|
||||
@SerialName(canManageTopicsField)
|
||||
override val canManageTopics: Boolean = false,
|
||||
@SerialName(canReactToMessagesField)
|
||||
override val canReactToMessages: Boolean = false,
|
||||
@SerialName(canEditTagField)
|
||||
override val canEditTag: Boolean = false,
|
||||
@SerialName(tagField)
|
||||
|
||||
Reference in New Issue
Block a user