1
0
mirror of https://github.com/InsanusMokrassar/TelegramBotAPI.git synced 2025-09-08 01:29:30 +00:00

improvements and breaking changes in ChatMember hierarchy

This commit is contained in:
2024-08-29 17:54:00 +06:00
parent 2d40af21fe
commit 10d92c2fdb
15 changed files with 266 additions and 131 deletions

View File

@@ -1961,14 +1961,14 @@ inline fun ChatMember.asMemberChatMember(): MemberChatMember? = this as? MemberC
inline fun ChatMember.requireMemberChatMember(): MemberChatMember = this as MemberChatMember
@PreviewFeature
inline fun <T> ChatMember.whenRestrictedChatMember(block: (RestrictedChatMember) -> T) =
inline fun <T> ChatMember.whenRestrictedChatMember(block: (RestrictedMemberChatMember) -> T) =
asRestrictedChatMember()?.let(block)
@PreviewFeature
inline fun ChatMember.asRestrictedChatMember(): RestrictedChatMember? = this as? RestrictedChatMember
inline fun ChatMember.asRestrictedChatMember(): RestrictedMemberChatMember? = this as? RestrictedMemberChatMember
@PreviewFeature
inline fun ChatMember.requireRestrictedChatMember(): RestrictedChatMember = this as RestrictedChatMember
inline fun ChatMember.requireRestrictedChatMember(): RestrictedMemberChatMember = this as RestrictedMemberChatMember
@PreviewFeature
inline fun <T> ChatMember.whenAdministratorChatMember(block: (AdministratorChatMember) -> T) =
@@ -1981,13 +1981,13 @@ inline fun ChatMember.asAdministratorChatMember(): AdministratorChatMember? = th
inline fun ChatMember.requireAdministratorChatMember(): AdministratorChatMember = this as AdministratorChatMember
@PreviewFeature
inline fun <T> ChatMember.whenBannedChatMember(block: (BannedChatMember) -> T) = asBannedChatMember()?.let(block)
inline fun <T> ChatMember.whenBannedChatMember(block: (RestrictedChatMember) -> T) = asBannedChatMember()?.let(block)
@PreviewFeature
inline fun ChatMember.asBannedChatMember(): BannedChatMember? = this as? BannedChatMember
inline fun ChatMember.asBannedChatMember(): RestrictedChatMember? = this as? RestrictedChatMember
@PreviewFeature
inline fun ChatMember.requireBannedChatMember(): BannedChatMember = this as BannedChatMember
inline fun ChatMember.requireBannedChatMember(): RestrictedChatMember = this as RestrictedChatMember
@PreviewFeature
inline fun <T> ChatMember.whenSpecialRightsChatMember(block: (SpecialRightsChatMember) -> T) =

View File

@@ -161,7 +161,6 @@ import dev.inmo.tgbotapi.types.chat.UnknownExtendedChat
import dev.inmo.tgbotapi.types.chat.User
import dev.inmo.tgbotapi.types.chat.UsernameChat
import dev.inmo.tgbotapi.types.chat.member.AdministratorChatMember
import dev.inmo.tgbotapi.types.chat.member.BannedChatMember
import dev.inmo.tgbotapi.types.chat.member.ChatMember
import dev.inmo.tgbotapi.types.chat.member.ChatMemberUpdated
import dev.inmo.tgbotapi.types.chat.member.KickedChatMember
@@ -691,15 +690,6 @@ public inline fun <T>
OptionallyWithUser.ifAdministratorChatMember(block: (AdministratorChatMember) -> T): T? =
administratorChatMemberOrNull() ?.let(block)
public inline fun OptionallyWithUser.bannedChatMemberOrNull(): BannedChatMember? = this as?
dev.inmo.tgbotapi.types.chat.member.BannedChatMember
public inline fun OptionallyWithUser.bannedChatMemberOrThrow(): BannedChatMember = this as
dev.inmo.tgbotapi.types.chat.member.BannedChatMember
public inline fun <T> OptionallyWithUser.ifBannedChatMember(block: (BannedChatMember) -> T): T? =
bannedChatMemberOrNull() ?.let(block)
public inline fun OptionallyWithUser.chatMemberOrNull(): ChatMember? = this as?
dev.inmo.tgbotapi.types.chat.member.ChatMember

View File

@@ -0,0 +1,81 @@
package dev.inmo.tgbotapi.extensions.utils.extensions
import dev.inmo.tgbotapi.types.chat.member.*
/**
* Check if receiver object is [LeftChatMember]
*/
val ChatMember.isLeft: Boolean get() = this is LeftChatMember
/**
* Check if receiver object is [MemberChatMember]
*/
val ChatMember.isMember: Boolean get() = this is MemberChatMember
/**
* Check if receiver object is [RestrictedMemberChatMember]
*/
val ChatMember.isRestrictedMember: Boolean get() = this is RestrictedMemberChatMember
/**
* Check if receiver object is [MemberChatMemberImpl]
*/
val ChatMember.isCommonMember: Boolean get() = this is MemberChatMemberImpl
/**
* Check if receiver object is [SubscriptionMemberChatMember]
*/
val ChatMember.isSubscriberMember: Boolean get() = this is SubscriptionMemberChatMember
/**
* Check if receiver object is [RestrictedChatMember]
*/
val ChatMember.isRestricted: Boolean get() = this is RestrictedChatMember
/**
* Check if receiver object is [KickedChatMember]
*/
val ChatMember.isKicked: Boolean get() = this is KickedChatMember
/**
* Check if receiver object [isLeft] or [isKicked]
*/
val ChatMember.isLeftOrKicked: Boolean get() = isLeft || isKicked
/**
* Check if receiver object [isRestricted] and not [isKicked]
*/
val ChatMember.isRestrictedAndNotKicked: Boolean get() = isRestricted && !isKicked
/**
* Check if receiver object is [SpecialRightsChatMember]
*/
val ChatMember.isSpecialRightsMember: Boolean get() = this is SpecialRightsChatMember
/**
* Check if receiver object is [AdministratorChatMember]
*/
val ChatMember.isAdministrator: Boolean get() = this is AdministratorChatMember
/**
* Check if receiver object is [OwnerChatMember]
*/
val ChatMember.isOwner: Boolean get() = this is OwnerChatMember
/**
* Check if receiver object is [AdministratorChatMemberImpl]
*/
val ChatMember.isCommonAdministrator: Boolean get() = this is AdministratorChatMemberImpl
/**
* Check that member is [KickedChatMember]
*/
val ChatMember.isBanned: Boolean get() = this is KickedChatMember
/**
* Check that member is [RestrictedChatMember]
*/
val ChatMember.isKickedOrRestricted: Boolean get() = this is RestrictedChatMember

View File

@@ -0,0 +1,75 @@
package dev.inmo.tgbotapi.extensions.utils.extensions
import dev.inmo.tgbotapi.types.chat.member.*
/**
* User joined a chat
*/
val ChatMemberUpdated.joinedChat get() = oldChatMemberState.isLeftOrKicked && !newChatMemberState.isLeftOrKicked
/**
* Member left a chat for any reason
*/
val ChatMemberUpdated.leftChat get() = !oldChatMemberState.isLeftOrKicked && newChatMemberState.isLeftOrKicked
/**
* Member became a chat subscriber
*/
val ChatMemberUpdated.subscribed: Boolean get() = !oldChatMemberState.isSubscriberMember && newChatMemberState.isSubscriberMember
/**
* Member became a chat subscriber or renewed their subscription
*/
val ChatMemberUpdated.subscriptionUpdated: Boolean get() = newChatMemberState.isSubscriberMember
/**
* Member subscription was expired. User still can be a member
*
* @see unsubscribedAndLeft
*/
val ChatMemberUpdated.unsubscribed: Boolean get() = oldChatMemberState.isSubscriberMember && !newChatMemberState.isSubscriberMember
/**
* Member subscription was expired and user left the chat
*/
val ChatMemberUpdated.unsubscribedAndLeft: Boolean get() = oldChatMemberState.isSubscriberMember && !newChatMemberState.isMember
/**
* Member was promoted to chat administrator (or owner)
*/
val ChatMemberUpdated.gotPromoted: Boolean get() = !oldChatMemberState.isAdministrator && newChatMemberState.isAdministrator
/**
* Member was promoted to chat administrator (or owner) or got it permissions/title changed
*/
val ChatMemberUpdated.gotPromotionChanged: Boolean get() = newChatMemberState.isAdministrator
/**
* Member was demoted from administrators (or ceased chat ownership)
*/
val ChatMemberUpdated.gotDemoted: Boolean get() = oldChatMemberState.isAdministrator && !newChatMemberState.isAdministrator
/**
* Member became a chat owner
*/
val ChatMemberUpdated.becameOwner: Boolean get() = !oldChatMemberState.isOwner && newChatMemberState.isOwner
/**
* Member ceased their chat ownership
*/
val ChatMemberUpdated.ceasedOwnership: Boolean get() = oldChatMemberState.isOwner && !newChatMemberState.isOwner
/**
* Member was restricted or some restrictions have changed
*/
val ChatMemberUpdated.gotRestricted: Boolean get() = !oldChatMemberState.isRestricted && newChatMemberState.isRestricted
/**
* Member restrictions were changed (but not removed)
*/
val ChatMemberUpdated.gotRestrictionsChanged: Boolean get() = newChatMemberState.isRestricted
/**
* All member restrictions were removed
*/
val ChatMemberUpdated.gotUnrestricted: Boolean get() = oldChatMemberState.isRestricted && !newChatMemberState.isRestricted