mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-15 21:45:19 +00:00
292 lines
12 KiB
Swift
292 lines
12 KiB
Swift
import Foundation
|
|
import Postbox
|
|
|
|
|
|
public enum TelegramChannelPermission {
|
|
case sendText
|
|
case sendPhoto
|
|
case sendVideo
|
|
case sendSomething
|
|
case pinMessages
|
|
case manageTopics
|
|
case createTopics
|
|
case inviteMembers
|
|
case editAllMessages
|
|
case deleteAllMessages
|
|
case banMembers
|
|
case addAdmins
|
|
case changeInfo
|
|
case canBeAnonymous
|
|
case manageCalls
|
|
case postStories
|
|
case editStories
|
|
case deleteStories
|
|
}
|
|
|
|
public extension TelegramChannel {
|
|
func hasPermission(_ permission: TelegramChannelPermission, ignoreDefault: Bool = false) -> Bool {
|
|
if self.flags.contains(.isCreator) {
|
|
if case .canBeAnonymous = permission {
|
|
if let adminRights = self.adminRights {
|
|
return adminRights.rights.contains(.canBeAnonymous)
|
|
} else {
|
|
return false
|
|
}
|
|
}
|
|
return true
|
|
}
|
|
switch permission {
|
|
case .sendText:
|
|
if case .broadcast = self.info {
|
|
if let adminRights = self.adminRights {
|
|
return adminRights.rights.contains(.canPostMessages)
|
|
} else {
|
|
return false
|
|
}
|
|
} else {
|
|
if let _ = self.adminRights {
|
|
return true
|
|
}
|
|
if let bannedRights = self.bannedRights, bannedRights.flags.contains(.banSendText) {
|
|
return false
|
|
}
|
|
if let defaultBannedRights = self.defaultBannedRights, defaultBannedRights.flags.contains(.banSendText) && !ignoreDefault {
|
|
return false
|
|
}
|
|
return true
|
|
}
|
|
case .sendPhoto:
|
|
if case .broadcast = self.info {
|
|
if let adminRights = self.adminRights {
|
|
return adminRights.rights.contains(.canPostMessages)
|
|
} else {
|
|
return false
|
|
}
|
|
} else {
|
|
if let _ = self.adminRights {
|
|
return true
|
|
}
|
|
if let bannedRights = self.bannedRights, bannedRights.flags.contains(.banSendPhotos) {
|
|
return false
|
|
}
|
|
if let defaultBannedRights = self.defaultBannedRights, defaultBannedRights.flags.contains(.banSendPhotos) && !ignoreDefault {
|
|
return false
|
|
}
|
|
return true
|
|
}
|
|
case .sendVideo:
|
|
if case .broadcast = self.info {
|
|
if let adminRights = self.adminRights {
|
|
return adminRights.rights.contains(.canPostMessages)
|
|
} else {
|
|
return false
|
|
}
|
|
} else {
|
|
if let _ = self.adminRights {
|
|
return true
|
|
}
|
|
if let bannedRights = self.bannedRights, bannedRights.flags.contains(.banSendVideos) {
|
|
return false
|
|
}
|
|
if let defaultBannedRights = self.defaultBannedRights, defaultBannedRights.flags.contains(.banSendVideos) && !ignoreDefault {
|
|
return false
|
|
}
|
|
return true
|
|
}
|
|
case .sendSomething:
|
|
if case .broadcast = self.info {
|
|
if let adminRights = self.adminRights {
|
|
return adminRights.rights.contains(.canPostMessages)
|
|
} else {
|
|
return false
|
|
}
|
|
} else {
|
|
if let _ = self.adminRights {
|
|
return true
|
|
}
|
|
|
|
let flags: TelegramChatBannedRightsFlags = [
|
|
.banSendText,
|
|
.banSendInstantVideos,
|
|
.banSendVoice,
|
|
.banSendPhotos,
|
|
.banSendVideos,
|
|
.banSendStickers,
|
|
.banSendPolls,
|
|
.banSendFiles,
|
|
.banSendInline,
|
|
.banSendMusic
|
|
]
|
|
|
|
if let bannedRights = self.bannedRights, bannedRights.flags.intersection(flags) == flags {
|
|
return false
|
|
}
|
|
if let defaultBannedRights = self.defaultBannedRights, defaultBannedRights.flags.intersection(flags) == flags && !ignoreDefault {
|
|
return false
|
|
}
|
|
return true
|
|
}
|
|
case .pinMessages:
|
|
if case .broadcast = self.info {
|
|
if let adminRights = self.adminRights {
|
|
return adminRights.rights.contains(.canPinMessages) || adminRights.rights.contains(.canEditMessages)
|
|
} else {
|
|
return false
|
|
}
|
|
} else {
|
|
if let adminRights = self.adminRights, adminRights.rights.contains(.canPinMessages) {
|
|
return true
|
|
}
|
|
if let bannedRights = self.bannedRights, bannedRights.flags.contains(.banPinMessages) {
|
|
return false
|
|
}
|
|
if let defaultBannedRights = self.defaultBannedRights, defaultBannedRights.flags.contains(.banPinMessages) {
|
|
return false
|
|
}
|
|
return true
|
|
}
|
|
case .manageTopics:
|
|
if self.flags.contains(.isCreator) {
|
|
return true
|
|
}
|
|
if self.adminRights == nil {
|
|
return false
|
|
}
|
|
if let adminRights = self.adminRights, adminRights.rights.contains(.canManageTopics) {
|
|
return true
|
|
}
|
|
return false
|
|
case .createTopics:
|
|
if self.flags.contains(.isCreator) {
|
|
return true
|
|
}
|
|
if let adminRights = self.adminRights, adminRights.rights.contains(.canManageTopics) {
|
|
return true
|
|
}
|
|
if let bannedRights = self.bannedRights, bannedRights.flags.contains(.banManageTopics) {
|
|
return false
|
|
}
|
|
if let defaultBannedRights = self.defaultBannedRights, defaultBannedRights.flags.contains(.banManageTopics) {
|
|
return false
|
|
}
|
|
return true
|
|
case .inviteMembers:
|
|
if case .broadcast = self.info {
|
|
if let adminRights = self.adminRights {
|
|
return adminRights.rights.contains(.canInviteUsers)
|
|
} else {
|
|
return false
|
|
}
|
|
} else {
|
|
if let adminRights = self.adminRights, adminRights.rights.contains(.canInviteUsers) {
|
|
return true
|
|
}
|
|
if let bannedRights = self.bannedRights, bannedRights.flags.contains(.banAddMembers) {
|
|
return false
|
|
}
|
|
if let defaultBannedRights = self.defaultBannedRights, defaultBannedRights.flags.contains(.banAddMembers) {
|
|
return false
|
|
}
|
|
return true
|
|
}
|
|
case .editAllMessages:
|
|
if let adminRights = self.adminRights, adminRights.rights.contains(.canEditMessages) {
|
|
return true
|
|
}
|
|
return false
|
|
case .deleteAllMessages:
|
|
if let adminRights = self.adminRights, adminRights.rights.contains(.canDeleteMessages) {
|
|
return true
|
|
}
|
|
return false
|
|
case .banMembers:
|
|
if let adminRights = self.adminRights, adminRights.rights.contains(.canBanUsers) {
|
|
return true
|
|
}
|
|
return false
|
|
case .changeInfo:
|
|
if case .broadcast = self.info {
|
|
if let adminRights = self.adminRights {
|
|
return adminRights.rights.contains(.canChangeInfo)
|
|
} else {
|
|
return false
|
|
}
|
|
} else {
|
|
if let adminRights = self.adminRights, adminRights.rights.contains(.canChangeInfo) {
|
|
return true
|
|
}
|
|
if let bannedRights = self.bannedRights, bannedRights.flags.contains(.banChangeInfo) {
|
|
return false
|
|
}
|
|
if let defaultBannedRights = self.defaultBannedRights, defaultBannedRights.flags.contains(.banChangeInfo) {
|
|
return false
|
|
}
|
|
return true
|
|
}
|
|
case .addAdmins:
|
|
if let adminRights = self.adminRights, adminRights.rights.contains(.canAddAdmins) {
|
|
return true
|
|
}
|
|
return false
|
|
case .manageCalls:
|
|
if let adminRights = self.adminRights, adminRights.rights.contains(.canManageCalls) {
|
|
return true
|
|
}
|
|
return false
|
|
case .canBeAnonymous:
|
|
if let adminRights = self.adminRights, adminRights.rights.contains(.canBeAnonymous) {
|
|
return true
|
|
}
|
|
return false
|
|
case .postStories:
|
|
if let adminRights = self.adminRights {
|
|
return adminRights.rights.contains(.canPostStories)
|
|
} else {
|
|
return false
|
|
}
|
|
case .editStories:
|
|
if let adminRights = self.adminRights {
|
|
return adminRights.rights.contains(.canEditStories)
|
|
} else {
|
|
return false
|
|
}
|
|
case .deleteStories:
|
|
if let adminRights = self.adminRights {
|
|
return adminRights.rights.contains(.canDeleteStories)
|
|
} else {
|
|
return false
|
|
}
|
|
}
|
|
}
|
|
|
|
func hasBannedPermission(_ rights: TelegramChatBannedRightsFlags, ignoreDefault: Bool = false) -> (Int32, Bool)? {
|
|
if self.flags.contains(.isCreator) {
|
|
return nil
|
|
}
|
|
if let _ = self.adminRights {
|
|
return nil
|
|
}
|
|
if let defaultBannedRights = self.defaultBannedRights, defaultBannedRights.flags.contains(rights) && !ignoreDefault {
|
|
return (Int32.max, false)
|
|
}
|
|
if let bannedRights = self.bannedRights, bannedRights.flags.contains(rights) {
|
|
return (bannedRights.untilDate, true)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
var isRestrictedBySlowmode: Bool {
|
|
if self.flags.contains(.isCreator) {
|
|
return false
|
|
}
|
|
if let _ = self.adminRights {
|
|
return false
|
|
}
|
|
if case let .group(group) = self.info {
|
|
return group.flags.contains(.slowModeEnabled)
|
|
} else {
|
|
return false
|
|
}
|
|
}
|
|
}
|