mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-10-09 03:20:48 +00:00
Bot peer request improvements
This commit is contained in:
parent
ce08d17d29
commit
0c5cfa6aac
@ -8684,9 +8684,14 @@ Sorry for the inconvenience.";
|
||||
"RequestPeer.Requirement.Channel.Rights.Anonymous" = "remain anonymous";
|
||||
"RequestPeer.Requirement.Channel.Rights.AddAdmins" = "add new admins";
|
||||
|
||||
"RequestPeer.SelectionConfirmationText" = "Are you sure you want to send %1$@ to %2$@?";
|
||||
"RequestPeer.SelectionConfirmationInviteText" = "Are you sure you want to send %1$@ to %2$@? This will also add %3$@ to %4$@.";
|
||||
"RequestPeer.SelectionConfirmationInviteWithRightsText" = "Are you sure you want to send %1$@ to %2$@? This will also add %3$@ to %4$@ with the following rights: %5$@.";
|
||||
|
||||
"CreateGroup.PublicLinkTitle" = "SET A PUBLIC LINK";
|
||||
"CreateGroup.PublicLinkInfo" = "You can use **a-z**, **0-9** and underscores. Minimum length is **5** characters.";
|
||||
|
||||
"Notification.RequestedPeer" = "You shared %@ with the bot.";
|
||||
|
||||
"Conversation.ViewInChannel" = "View in Channel";
|
||||
|
||||
|
@ -1648,6 +1648,9 @@ final class ChatListSearchListPaneNode: ASDisplayNode, ChatListSearchPaneNode {
|
||||
|
||||
let filteredPeer: (EnginePeer, EnginePeer) -> Bool = { peer, accountPeer in
|
||||
if let peerType = requestPeerType {
|
||||
guard !peer.isDeleted else {
|
||||
return false
|
||||
}
|
||||
switch peerType {
|
||||
case let .user(userType):
|
||||
if case let .user(user) = peer {
|
||||
@ -1695,18 +1698,21 @@ final class ChatListSearchListPaneNode: ASDisplayNode, ChatListSearchPaneNode {
|
||||
return false
|
||||
}
|
||||
}
|
||||
if let isForum = groupType.isForum, isForum {
|
||||
if let isForum = groupType.isForum {
|
||||
if isForum != channel.flags.contains(.isForum) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
if let hasUsername = groupType.hasUsername, hasUsername {
|
||||
if let hasUsername = groupType.hasUsername {
|
||||
if hasUsername != (channel.addressName != nil) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
if let userAdminRights = groupType.userAdminRights {
|
||||
if channel.flags.contains(.isCreator) {
|
||||
if let rights = channel.adminRights, rights.rights.contains(.canBeAnonymous) != userAdminRights.rights.contains(.canBeAnonymous) {
|
||||
return false
|
||||
}
|
||||
} else if let rights = channel.adminRights {
|
||||
if rights.rights.intersection(userAdminRights.rights) != userAdminRights.rights {
|
||||
return false
|
||||
@ -1731,6 +1737,19 @@ final class ChatListSearchListPaneNode: ASDisplayNode, ChatListSearchPaneNode {
|
||||
return false
|
||||
}
|
||||
}
|
||||
if let userAdminRights = channelType.userAdminRights {
|
||||
if channel.flags.contains(.isCreator) {
|
||||
if let rights = channel.adminRights, rights.rights.contains(.canBeAnonymous) != userAdminRights.rights.contains(.canBeAnonymous) {
|
||||
return false
|
||||
}
|
||||
} else if let rights = channel.adminRights {
|
||||
if rights.rights.intersection(userAdminRights.rights) != userAdminRights.rights {
|
||||
return false
|
||||
}
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
}
|
||||
return true
|
||||
} else {
|
||||
return false
|
||||
|
@ -1675,7 +1675,7 @@ public final class ChatListNode: ListView {
|
||||
isEmpty = false
|
||||
return true
|
||||
case let .peerType(peerType):
|
||||
if let peer = peer.peer {
|
||||
if let peer = peer.peer, !peer.isDeleted {
|
||||
switch peerType {
|
||||
case let .user(userType):
|
||||
if case let .user(user) = peer {
|
||||
@ -1725,18 +1725,21 @@ public final class ChatListNode: ListView {
|
||||
return false
|
||||
}
|
||||
}
|
||||
if let isForum = groupType.isForum, isForum {
|
||||
if let isForum = groupType.isForum {
|
||||
if isForum != channel.flags.contains(.isForum) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
if let hasUsername = groupType.hasUsername, hasUsername {
|
||||
if let hasUsername = groupType.hasUsername {
|
||||
if hasUsername != (channel.addressName != nil) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
if let userAdminRights = groupType.userAdminRights {
|
||||
if channel.flags.contains(.isCreator) {
|
||||
if let rights = channel.adminRights, rights.rights.contains(.canBeAnonymous) != userAdminRights.rights.contains(.canBeAnonymous) {
|
||||
return false
|
||||
}
|
||||
} else if let rights = channel.adminRights {
|
||||
if rights.rights.intersection(userAdminRights.rights) != userAdminRights.rights {
|
||||
return false
|
||||
@ -1762,6 +1765,19 @@ public final class ChatListNode: ListView {
|
||||
return false
|
||||
}
|
||||
}
|
||||
if let userAdminRights = channelType.userAdminRights {
|
||||
if channel.flags.contains(.isCreator) {
|
||||
if let rights = channel.adminRights, rights.rights.contains(.canBeAnonymous) != userAdminRights.rights.contains(.canBeAnonymous) {
|
||||
return false
|
||||
}
|
||||
} else if let rights = channel.adminRights {
|
||||
if rights.rights.intersection(userAdminRights.rights) != userAdminRights.rights {
|
||||
return false
|
||||
}
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
}
|
||||
isEmpty = false
|
||||
return true
|
||||
} else {
|
||||
|
@ -4135,16 +4135,42 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
||||
guard let self else {
|
||||
return
|
||||
}
|
||||
let botName = self.presentationInterfaceState.renderedPeer?.peer.flatMap { EnginePeer($0) }?.compactDisplayTitle ?? ""
|
||||
let context = self.context
|
||||
let peerId = self.chatLocation.peerId
|
||||
var createNewGroupImpl: (() -> Void)?
|
||||
let controller = self.context.sharedContext.makePeerSelectionController(PeerSelectionControllerParams(context: self.context, filter: [.excludeRecent], requestPeerType: peerType, hasContactSelector: false, createNewGroup: {
|
||||
let controller = self.context.sharedContext.makePeerSelectionController(PeerSelectionControllerParams(context: self.context, filter: [.excludeRecent, .doNotSearchMessages], requestPeerType: peerType, hasContactSelector: false, createNewGroup: {
|
||||
createNewGroupImpl?()
|
||||
}))
|
||||
controller.peerSelected = { [weak controller] peer, _ in
|
||||
let _ = context.engine.peers.sendBotRequestedPeer(messageId: messageId, buttonId: buttonId, requestedPeerId: peer.id).start()
|
||||
controller.peerSelected = { [weak self, weak controller] peer, _ in
|
||||
guard let strongSelf = self else {
|
||||
return
|
||||
}
|
||||
let peerName = EnginePeer(peer).displayTitle(strings: strongSelf.presentationData.strings, displayOrder: strongSelf.presentationData.nameDisplayOrder)
|
||||
let text: String
|
||||
if case .user = peerType {
|
||||
text = strongSelf.presentationData.strings.RequestPeer_SelectionConfirmationText(peerName, botName).string
|
||||
} else {
|
||||
var botAdminRights: TelegramChatAdminRights?
|
||||
switch peerType {
|
||||
case let .group(group):
|
||||
botAdminRights = group.botAdminRights
|
||||
case let .channel(channel):
|
||||
botAdminRights = channel.botAdminRights
|
||||
default:
|
||||
break
|
||||
}
|
||||
if let botAdminRights {
|
||||
text = strongSelf.presentationData.strings.RequestPeer_SelectionConfirmationInviteWithRightsText(peerName, botName, botName, peerName, stringForAdminRights(strings: strongSelf.presentationData.strings, adminRights: botAdminRights)).string
|
||||
} else {
|
||||
text = strongSelf.presentationData.strings.RequestPeer_SelectionConfirmationInviteText(peerName, botName, botName, peerName).string
|
||||
}
|
||||
}
|
||||
|
||||
controller?.dismiss()
|
||||
strongSelf.present(textAlertController(context: strongSelf.context, updatedPresentationData: strongSelf.updatedPresentationData, title: nil, text: text, actions: [TextAlertAction(type: .genericAction, title: strongSelf.presentationData.strings.Common_Cancel, action: {}), TextAlertAction(type: .defaultAction, title: strongSelf.presentationData.strings.RequestPeer_SelectionConfirmationSend, action: { [weak controller] in
|
||||
let _ = context.engine.peers.sendBotRequestedPeer(messageId: messageId, buttonId: buttonId, requestedPeerId: peer.id).start()
|
||||
controller?.dismiss()
|
||||
})]), in: .window(.root))
|
||||
}
|
||||
createNewGroupImpl = { [weak controller] in
|
||||
switch peerType {
|
||||
|
@ -1060,6 +1060,48 @@ final class PeerSelectionControllerNode: ASDisplayNode {
|
||||
}
|
||||
}
|
||||
|
||||
func stringForAdminRights(strings: PresentationStrings, adminRights: TelegramChatAdminRights) -> String {
|
||||
var rights: [String] = []
|
||||
if adminRights.rights.contains(.canChangeInfo) {
|
||||
rights.append(strings.RequestPeer_Requirement_Group_Rights_Info)
|
||||
}
|
||||
if adminRights.rights.contains(.canPostMessages) {
|
||||
rights.append(strings.RequestPeer_Requirement_Group_Rights_Send)
|
||||
}
|
||||
if adminRights.rights.contains(.canDeleteMessages) {
|
||||
rights.append(strings.RequestPeer_Requirement_Group_Rights_Delete)
|
||||
}
|
||||
if adminRights.rights.contains(.canEditMessages) {
|
||||
rights.append(strings.RequestPeer_Requirement_Group_Rights_Edit)
|
||||
}
|
||||
if adminRights.rights.contains(.canBanUsers) {
|
||||
rights.append(strings.RequestPeer_Requirement_Group_Rights_Ban)
|
||||
}
|
||||
if adminRights.rights.contains(.canInviteUsers) {
|
||||
rights.append(strings.RequestPeer_Requirement_Group_Rights_Invite)
|
||||
}
|
||||
if adminRights.rights.contains(.canPinMessages) {
|
||||
rights.append(strings.RequestPeer_Requirement_Group_Rights_Pin)
|
||||
}
|
||||
if adminRights.rights.contains(.canManageTopics) {
|
||||
rights.append(strings.RequestPeer_Requirement_Group_Rights_Topics)
|
||||
}
|
||||
if adminRights.rights.contains(.canManageCalls) {
|
||||
rights.append(strings.RequestPeer_Requirement_Group_Rights_VideoChats)
|
||||
}
|
||||
if adminRights.rights.contains(.canBeAnonymous) {
|
||||
rights.append(strings.RequestPeer_Requirement_Group_Rights_Anonymous)
|
||||
}
|
||||
if adminRights.rights.contains(.canAddAdmins) {
|
||||
rights.append(strings.RequestPeer_Requirement_Group_Rights_AddAdmins)
|
||||
}
|
||||
if !rights.isEmpty {
|
||||
return String(rights.joined(separator: ", "))
|
||||
} else {
|
||||
return ""
|
||||
}
|
||||
}
|
||||
|
||||
private func stringForRequestPeerType(strings: PresentationStrings, peerType: ReplyMarkupButtonRequestPeerType, offset: Bool) -> String? {
|
||||
var lines: [String] = []
|
||||
|
||||
@ -1098,7 +1140,7 @@ private func stringForRequestPeerType(strings: PresentationStrings, peerType: Re
|
||||
append(strings.RequestPeer_Requirement_Group_ForumOff)
|
||||
}
|
||||
}
|
||||
if let adminRights = group.userAdminRights {
|
||||
if let adminRights = group.userAdminRights, !group.isCreator {
|
||||
var rights: [String] = []
|
||||
if adminRights.rights.contains(.canChangeInfo) {
|
||||
rights.append(strings.RequestPeer_Requirement_Group_Rights_Info)
|
||||
@ -1149,6 +1191,46 @@ private func stringForRequestPeerType(strings: PresentationStrings, peerType: Re
|
||||
append(strings.RequestPeer_Requirement_Channel_HasUsernameOff)
|
||||
}
|
||||
}
|
||||
if let adminRights = channel.userAdminRights, !channel.isCreator {
|
||||
var rights: [String] = []
|
||||
if adminRights.rights.contains(.canChangeInfo) {
|
||||
rights.append(strings.RequestPeer_Requirement_Channel_Rights_Info)
|
||||
}
|
||||
if adminRights.rights.contains(.canPostMessages) {
|
||||
rights.append(strings.RequestPeer_Requirement_Channel_Rights_Send)
|
||||
}
|
||||
if adminRights.rights.contains(.canDeleteMessages) {
|
||||
rights.append(strings.RequestPeer_Requirement_Channel_Rights_Delete)
|
||||
}
|
||||
if adminRights.rights.contains(.canEditMessages) {
|
||||
rights.append(strings.RequestPeer_Requirement_Channel_Rights_Edit)
|
||||
}
|
||||
if adminRights.rights.contains(.canBanUsers) {
|
||||
rights.append(strings.RequestPeer_Requirement_Channel_Rights_Ban)
|
||||
}
|
||||
if adminRights.rights.contains(.canInviteUsers) {
|
||||
rights.append(strings.RequestPeer_Requirement_Channel_Rights_Invite)
|
||||
}
|
||||
if adminRights.rights.contains(.canPinMessages) {
|
||||
rights.append(strings.RequestPeer_Requirement_Channel_Rights_Pin)
|
||||
}
|
||||
if adminRights.rights.contains(.canManageTopics) {
|
||||
rights.append(strings.RequestPeer_Requirement_Channel_Rights_Topics)
|
||||
}
|
||||
if adminRights.rights.contains(.canManageCalls) {
|
||||
rights.append(strings.RequestPeer_Requirement_Channel_Rights_VideoChats)
|
||||
}
|
||||
if adminRights.rights.contains(.canBeAnonymous) {
|
||||
rights.append(strings.RequestPeer_Requirement_Channel_Rights_Anonymous)
|
||||
}
|
||||
if adminRights.rights.contains(.canAddAdmins) {
|
||||
rights.append(strings.RequestPeer_Requirement_Channel_Rights_AddAdmins)
|
||||
}
|
||||
if !rights.isEmpty {
|
||||
let rightsString = strings.RequestPeer_Requirement_Group_Rights(String(rights.joined(separator: ", "))).string
|
||||
append(rightsString)
|
||||
}
|
||||
}
|
||||
}
|
||||
if lines.isEmpty {
|
||||
return nil
|
||||
|
Loading…
x
Reference in New Issue
Block a user