mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
Merge commit '6179c3a939aab6b713328d477e68fd27a5ed2f17'
This commit is contained in:
commit
b85183ad39
@ -17,8 +17,25 @@ extension ReplyMarkupButton {
|
|||||||
self.init(title: text, titleWhenForwarded: nil, action: .requestMap)
|
self.init(title: text, titleWhenForwarded: nil, action: .requestMap)
|
||||||
case let .keyboardButtonRequestPhone(text):
|
case let .keyboardButtonRequestPhone(text):
|
||||||
self.init(title: text, titleWhenForwarded: nil, action: .requestPhone)
|
self.init(title: text, titleWhenForwarded: nil, action: .requestPhone)
|
||||||
case let .keyboardButtonSwitchInline(flags, text, query, _):
|
case let .keyboardButtonSwitchInline(flags, text, query, types):
|
||||||
self.init(title: text, titleWhenForwarded: nil, action: .switchInline(samePeer: (flags & (1 << 0)) != 0, query: query))
|
var peerTypes = ReplyMarkupButtonAction.PeerTypes()
|
||||||
|
if let types = types {
|
||||||
|
for type in types {
|
||||||
|
switch type {
|
||||||
|
case .inlineQueryPeerTypePM:
|
||||||
|
peerTypes.insert(.users)
|
||||||
|
case .inlineQueryPeerTypeBotPM:
|
||||||
|
peerTypes.insert(.bots)
|
||||||
|
case .inlineQueryPeerTypeBroadcast:
|
||||||
|
peerTypes.insert(.channels)
|
||||||
|
case .inlineQueryPeerTypeChat, .inlineQueryPeerTypeMegagroup:
|
||||||
|
peerTypes.insert(.groups)
|
||||||
|
case .inlineQueryPeerTypeSameBotPM:
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
self.init(title: text, titleWhenForwarded: nil, action: .switchInline(samePeer: (flags & (1 << 0)) != 0, query: query, peerTypes: peerTypes))
|
||||||
case let .keyboardButtonUrl(text, url):
|
case let .keyboardButtonUrl(text, url):
|
||||||
self.init(title: text, titleWhenForwarded: nil, action: .url(url))
|
self.init(title: text, titleWhenForwarded: nil, action: .url(url))
|
||||||
case let .keyboardButtonGame(text):
|
case let .keyboardButtonGame(text):
|
||||||
|
@ -181,12 +181,50 @@ public enum ReplyMarkupButtonRequestPeerType: Codable, Equatable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public enum ReplyMarkupButtonAction: PostboxCoding, Equatable {
|
public enum ReplyMarkupButtonAction: PostboxCoding, Equatable {
|
||||||
|
public struct PeerTypes: OptionSet {
|
||||||
|
public var rawValue: Int32
|
||||||
|
|
||||||
|
public init(rawValue: Int32) {
|
||||||
|
self.rawValue = rawValue
|
||||||
|
}
|
||||||
|
|
||||||
|
public init() {
|
||||||
|
self.rawValue = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
public static let users = PeerTypes(rawValue: 1 << 0)
|
||||||
|
public static let bots = PeerTypes(rawValue: 1 << 1)
|
||||||
|
public static let channels = PeerTypes(rawValue: 1 << 2)
|
||||||
|
public static let groups = PeerTypes(rawValue: 1 << 3)
|
||||||
|
|
||||||
|
public var requestPeerTypes: [ReplyMarkupButtonRequestPeerType]? {
|
||||||
|
if self.isEmpty {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
var types: [ReplyMarkupButtonRequestPeerType] = []
|
||||||
|
if self.contains(.users) {
|
||||||
|
types.append(.user(.init(isBot: false, isPremium: nil)))
|
||||||
|
}
|
||||||
|
if self.contains(.bots) {
|
||||||
|
types.append(.user(.init(isBot: true, isPremium: nil)))
|
||||||
|
}
|
||||||
|
if self.contains(.channels) {
|
||||||
|
types.append(.channel(.init(isCreator: false, hasUsername: nil, userAdminRights: nil, botAdminRights: nil)))
|
||||||
|
}
|
||||||
|
if self.contains(.groups) {
|
||||||
|
types.append(.group(.init(isCreator: false, hasUsername: nil, isForum: nil, botParticipant: false, userAdminRights: nil, botAdminRights: nil)))
|
||||||
|
}
|
||||||
|
return types
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
case text
|
case text
|
||||||
case url(String)
|
case url(String)
|
||||||
case callback(requiresPassword: Bool, data: MemoryBuffer)
|
case callback(requiresPassword: Bool, data: MemoryBuffer)
|
||||||
case requestPhone
|
case requestPhone
|
||||||
case requestMap
|
case requestMap
|
||||||
case switchInline(samePeer: Bool, query: String)
|
case switchInline(samePeer: Bool, query: String, peerTypes: PeerTypes)
|
||||||
case openWebApp
|
case openWebApp
|
||||||
case payment
|
case payment
|
||||||
case urlAuth(url: String, buttonId: Int32)
|
case urlAuth(url: String, buttonId: Int32)
|
||||||
@ -208,7 +246,7 @@ public enum ReplyMarkupButtonAction: PostboxCoding, Equatable {
|
|||||||
case 4:
|
case 4:
|
||||||
self = .requestMap
|
self = .requestMap
|
||||||
case 5:
|
case 5:
|
||||||
self = .switchInline(samePeer: decoder.decodeInt32ForKey("s", orElse: 0) != 0, query: decoder.decodeStringForKey("q", orElse: ""))
|
self = .switchInline(samePeer: decoder.decodeInt32ForKey("s", orElse: 0) != 0, query: decoder.decodeStringForKey("q", orElse: ""), peerTypes: PeerTypes(rawValue: decoder.decodeInt32ForKey("pt", orElse: 0)))
|
||||||
case 6:
|
case 6:
|
||||||
self = .openWebApp
|
self = .openWebApp
|
||||||
case 7:
|
case 7:
|
||||||
@ -243,10 +281,11 @@ public enum ReplyMarkupButtonAction: PostboxCoding, Equatable {
|
|||||||
encoder.encodeInt32(3, forKey: "v")
|
encoder.encodeInt32(3, forKey: "v")
|
||||||
case .requestMap:
|
case .requestMap:
|
||||||
encoder.encodeInt32(4, forKey: "v")
|
encoder.encodeInt32(4, forKey: "v")
|
||||||
case let .switchInline(samePeer, query):
|
case let .switchInline(samePeer, query, peerTypes):
|
||||||
encoder.encodeInt32(5, forKey: "v")
|
encoder.encodeInt32(5, forKey: "v")
|
||||||
encoder.encodeInt32(samePeer ? 1 : 0, forKey: "s")
|
encoder.encodeInt32(samePeer ? 1 : 0, forKey: "s")
|
||||||
encoder.encodeString(query, forKey: "q")
|
encoder.encodeString(query, forKey: "q")
|
||||||
|
encoder.encodeInt32(peerTypes.rawValue, forKey: "pt")
|
||||||
case .openWebApp:
|
case .openWebApp:
|
||||||
encoder.encodeInt32(6, forKey: "v")
|
encoder.encodeInt32(6, forKey: "v")
|
||||||
case .payment:
|
case .payment:
|
||||||
|
@ -105,7 +105,7 @@ public final class ChatControllerInteraction {
|
|||||||
public let sendBotContextResultAsGif: (ChatContextResultCollection, ChatContextResult, UIView, CGRect, Bool, Bool) -> Bool
|
public let sendBotContextResultAsGif: (ChatContextResultCollection, ChatContextResult, UIView, CGRect, Bool, Bool) -> Bool
|
||||||
public let requestMessageActionCallback: (MessageId, MemoryBuffer?, Bool, Bool) -> Void
|
public let requestMessageActionCallback: (MessageId, MemoryBuffer?, Bool, Bool) -> Void
|
||||||
public let requestMessageActionUrlAuth: (String, MessageActionUrlSubject) -> Void
|
public let requestMessageActionUrlAuth: (String, MessageActionUrlSubject) -> Void
|
||||||
public let activateSwitchInline: (PeerId?, String) -> Void
|
public let activateSwitchInline: (PeerId?, String, ReplyMarkupButtonAction.PeerTypes?) -> Void
|
||||||
public let openUrl: (String, Bool, Bool?, Message?) -> Void
|
public let openUrl: (String, Bool, Bool?, Message?) -> Void
|
||||||
public let shareCurrentLocation: () -> Void
|
public let shareCurrentLocation: () -> Void
|
||||||
public let shareAccountContact: () -> Void
|
public let shareAccountContact: () -> Void
|
||||||
@ -217,7 +217,7 @@ public final class ChatControllerInteraction {
|
|||||||
sendBotContextResultAsGif: @escaping (ChatContextResultCollection, ChatContextResult, UIView, CGRect, Bool, Bool) -> Bool,
|
sendBotContextResultAsGif: @escaping (ChatContextResultCollection, ChatContextResult, UIView, CGRect, Bool, Bool) -> Bool,
|
||||||
requestMessageActionCallback: @escaping (MessageId, MemoryBuffer?, Bool, Bool) -> Void,
|
requestMessageActionCallback: @escaping (MessageId, MemoryBuffer?, Bool, Bool) -> Void,
|
||||||
requestMessageActionUrlAuth: @escaping (String, MessageActionUrlSubject) -> Void,
|
requestMessageActionUrlAuth: @escaping (String, MessageActionUrlSubject) -> Void,
|
||||||
activateSwitchInline: @escaping (PeerId?, String) -> Void,
|
activateSwitchInline: @escaping (PeerId?, String, ReplyMarkupButtonAction.PeerTypes?) -> Void,
|
||||||
openUrl: @escaping (String, Bool, Bool?, Message?) -> Void,
|
openUrl: @escaping (String, Bool, Bool?, Message?) -> Void,
|
||||||
shareCurrentLocation: @escaping () -> Void,
|
shareCurrentLocation: @escaping () -> Void,
|
||||||
shareAccountContact: @escaping () -> Void,
|
shareAccountContact: @escaping () -> Void,
|
||||||
|
@ -391,7 +391,7 @@ final class ChatButtonKeyboardInputNode: ChatInputNode {
|
|||||||
if let message = self.message {
|
if let message = self.message {
|
||||||
self.controllerInteraction.requestMessageActionCallback(message.id, data, false, requiresPassword)
|
self.controllerInteraction.requestMessageActionCallback(message.id, data, false, requiresPassword)
|
||||||
}
|
}
|
||||||
case let .switchInline(samePeer, query):
|
case let .switchInline(samePeer, query, _):
|
||||||
if let message = message {
|
if let message = message {
|
||||||
var botPeer: Peer?
|
var botPeer: Peer?
|
||||||
|
|
||||||
|
@ -2512,7 +2512,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
|||||||
}
|
}
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
}, activateSwitchInline: { [weak self] peerId, inputString in
|
}, activateSwitchInline: { [weak self] peerId, inputString, peerTypes in
|
||||||
guard let strongSelf = self else {
|
guard let strongSelf = self else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -2536,7 +2536,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
strongSelf.openPeer(peer: nil, navigation: .chat(textInputState: ChatTextInputState(inputText: NSAttributedString(string: inputString)), subject: nil, peekData: nil), fromMessage: nil)
|
strongSelf.openPeer(peer: nil, navigation: .chat(textInputState: ChatTextInputState(inputText: NSAttributedString(string: inputString)), subject: nil, peekData: nil), fromMessage: nil, peerTypes: peerTypes)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, openUrl: { [weak self] url, concealed, _, message in
|
}, openUrl: { [weak self] url, concealed, _, message in
|
||||||
@ -4226,12 +4226,12 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
|||||||
if let strongSelf = self {
|
if let strongSelf = self {
|
||||||
completion()
|
completion()
|
||||||
controller?.dismiss()
|
controller?.dismiss()
|
||||||
strongSelf.controllerInteraction?.activateSwitchInline(peer.id, "@\(botAddress) \(query)")
|
strongSelf.controllerInteraction?.activateSwitchInline(peer.id, "@\(botAddress) \(query)", nil)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
strongSelf.push(controller)
|
strongSelf.push(controller)
|
||||||
} else {
|
} else {
|
||||||
strongSelf.controllerInteraction?.activateSwitchInline(peerId, "@\(botAddress) \(query)")
|
strongSelf.controllerInteraction?.activateSwitchInline(peerId, "@\(botAddress) \(query)", nil)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, getNavigationController: { [weak self] in
|
}, getNavigationController: { [weak self] in
|
||||||
@ -12873,12 +12873,12 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
|||||||
if let strongSelf = self {
|
if let strongSelf = self {
|
||||||
completion()
|
completion()
|
||||||
controller?.dismiss()
|
controller?.dismiss()
|
||||||
strongSelf.controllerInteraction?.activateSwitchInline(peer.id, "@\(botAddress) \(query)")
|
strongSelf.controllerInteraction?.activateSwitchInline(peer.id, "@\(botAddress) \(query)", nil)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
strongSelf.push(controller)
|
strongSelf.push(controller)
|
||||||
} else {
|
} else {
|
||||||
strongSelf.controllerInteraction?.activateSwitchInline(peerId, "@\(botAddress) \(query)")
|
strongSelf.controllerInteraction?.activateSwitchInline(peerId, "@\(botAddress) \(query)", nil)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, completion: { [weak self] in
|
}, completion: { [weak self] in
|
||||||
@ -16716,7 +16716,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
private func openPeer(peer: EnginePeer?, navigation: ChatControllerInteractionNavigateToPeer, fromMessage: MessageReference?, fromReactionMessageId: MessageId? = nil, expandAvatar: Bool = false) {
|
private func openPeer(peer: EnginePeer?, navigation: ChatControllerInteractionNavigateToPeer, fromMessage: MessageReference?, fromReactionMessageId: MessageId? = nil, expandAvatar: Bool = false, peerTypes: ReplyMarkupButtonAction.PeerTypes? = nil) {
|
||||||
let _ = self.presentVoiceMessageDiscardAlert(action: {
|
let _ = self.presentVoiceMessageDiscardAlert(action: {
|
||||||
if case let .peer(currentPeerId) = self.chatLocation, peer?.id == currentPeerId {
|
if case let .peer(currentPeerId) = self.chatLocation, peer?.id == currentPeerId {
|
||||||
switch navigation {
|
switch navigation {
|
||||||
@ -16815,7 +16815,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
|||||||
break
|
break
|
||||||
case let .chat(textInputState, _, _):
|
case let .chat(textInputState, _, _):
|
||||||
if let textInputState = textInputState {
|
if let textInputState = textInputState {
|
||||||
let controller = self.context.sharedContext.makePeerSelectionController(PeerSelectionControllerParams(context: self.context, updatedPresentationData: self.updatedPresentationData, selectForumThreads: true))
|
let controller = self.context.sharedContext.makePeerSelectionController(PeerSelectionControllerParams(context: self.context, updatedPresentationData: self.updatedPresentationData, requestPeerType: peerTypes.flatMap { $0.requestPeerTypes }, selectForumThreads: true))
|
||||||
controller.peerSelected = { [weak self, weak controller] peer, threadId in
|
controller.peerSelected = { [weak self, weak controller] peer, threadId in
|
||||||
let peerId = peer.id
|
let peerId = peer.id
|
||||||
|
|
||||||
|
@ -860,7 +860,7 @@ public class ChatMessageItemView: ListViewItemNode, ChatMessageItemNodeProtocol
|
|||||||
item.controllerInteraction.requestMessageActionCallback(item.message.id, nil, true, false)
|
item.controllerInteraction.requestMessageActionCallback(item.message.id, nil, true, false)
|
||||||
case let .callback(requiresPassword, data):
|
case let .callback(requiresPassword, data):
|
||||||
item.controllerInteraction.requestMessageActionCallback(item.message.id, data, false, requiresPassword)
|
item.controllerInteraction.requestMessageActionCallback(item.message.id, data, false, requiresPassword)
|
||||||
case let .switchInline(samePeer, query):
|
case let .switchInline(samePeer, query, peerTypes):
|
||||||
var botPeer: Peer?
|
var botPeer: Peer?
|
||||||
|
|
||||||
var found = false
|
var found = false
|
||||||
@ -881,7 +881,7 @@ public class ChatMessageItemView: ListViewItemNode, ChatMessageItemNodeProtocol
|
|||||||
peerId = item.message.id.peerId
|
peerId = item.message.id.peerId
|
||||||
}
|
}
|
||||||
if let botPeer = botPeer, let addressName = botPeer.addressName {
|
if let botPeer = botPeer, let addressName = botPeer.addressName {
|
||||||
item.controllerInteraction.activateSwitchInline(peerId, "@\(addressName) \(query)")
|
item.controllerInteraction.activateSwitchInline(peerId, "@\(addressName) \(query)", peerTypes)
|
||||||
}
|
}
|
||||||
case .payment:
|
case .payment:
|
||||||
item.controllerInteraction.openCheckoutOrReceipt(item.message.id)
|
item.controllerInteraction.openCheckoutOrReceipt(item.message.id)
|
||||||
|
@ -863,7 +863,7 @@ final class ChatPinnedMessageTitlePanelNode: ChatTitleAccessoryPanelNode {
|
|||||||
controllerInteraction.requestMessageActionCallback(message.id, nil, true, false)
|
controllerInteraction.requestMessageActionCallback(message.id, nil, true, false)
|
||||||
case let .callback(requiresPassword, data):
|
case let .callback(requiresPassword, data):
|
||||||
controllerInteraction.requestMessageActionCallback(message.id, data, false, requiresPassword)
|
controllerInteraction.requestMessageActionCallback(message.id, data, false, requiresPassword)
|
||||||
case let .switchInline(samePeer, query):
|
case let .switchInline(samePeer, query, peerTypes):
|
||||||
var botPeer: Peer?
|
var botPeer: Peer?
|
||||||
|
|
||||||
var found = false
|
var found = false
|
||||||
@ -884,7 +884,7 @@ final class ChatPinnedMessageTitlePanelNode: ChatTitleAccessoryPanelNode {
|
|||||||
peerId = message.id.peerId
|
peerId = message.id.peerId
|
||||||
}
|
}
|
||||||
if let botPeer = botPeer, let addressName = botPeer.addressName {
|
if let botPeer = botPeer, let addressName = botPeer.addressName {
|
||||||
controllerInteraction.activateSwitchInline(peerId, "@\(addressName) \(query)")
|
controllerInteraction.activateSwitchInline(peerId, "@\(addressName) \(query)", peerTypes)
|
||||||
}
|
}
|
||||||
case .payment:
|
case .payment:
|
||||||
controllerInteraction.openCheckoutOrReceipt(message.id)
|
controllerInteraction.openCheckoutOrReceipt(message.id)
|
||||||
|
@ -274,7 +274,7 @@ final class ChatRecentActionsControllerNode: ViewControllerTracingNode {
|
|||||||
}, openMessageContextActions: { _, _, _, _ in
|
}, openMessageContextActions: { _, _, _, _ in
|
||||||
}, navigateToMessage: { _, _ in }, navigateToMessageStandalone: { _ in
|
}, navigateToMessage: { _, _ in }, navigateToMessageStandalone: { _ in
|
||||||
}, navigateToThreadMessage: { _, _, _ in
|
}, navigateToThreadMessage: { _, _, _ in
|
||||||
}, tapMessage: nil, clickThroughMessage: { }, toggleMessagesSelection: { _, _ in }, sendCurrentMessage: { _ in }, sendMessage: { _ in }, sendSticker: { _, _, _, _, _, _, _, _, _ in return false }, sendEmoji: { _, _, _ in }, sendGif: { _, _, _, _, _ in return false }, sendBotContextResultAsGif: { _, _, _, _, _, _ in return false }, requestMessageActionCallback: { _, _, _, _ in }, requestMessageActionUrlAuth: { _, _ in }, activateSwitchInline: { _, _ in }, openUrl: { [weak self] url, _, _, _ in
|
}, tapMessage: nil, clickThroughMessage: { }, toggleMessagesSelection: { _, _ in }, sendCurrentMessage: { _ in }, sendMessage: { _ in }, sendSticker: { _, _, _, _, _, _, _, _, _ in return false }, sendEmoji: { _, _, _ in }, sendGif: { _, _, _, _, _ in return false }, sendBotContextResultAsGif: { _, _, _, _, _, _ in return false }, requestMessageActionCallback: { _, _, _, _ in }, requestMessageActionUrlAuth: { _, _ in }, activateSwitchInline: { _, _, _ in }, openUrl: { [weak self] url, _, _, _ in
|
||||||
self?.openUrl(url)
|
self?.openUrl(url)
|
||||||
}, shareCurrentLocation: {}, shareAccountContact: {}, sendBotCommand: { _, _ in }, openInstantPage: { [weak self] message, associatedData in
|
}, shareCurrentLocation: {}, shareAccountContact: {}, sendBotCommand: { _, _ in }, openInstantPage: { [weak self] message, associatedData in
|
||||||
if let strongSelf = self, let navigationController = strongSelf.getNavigationController() {
|
if let strongSelf = self, let navigationController = strongSelf.getNavigationController() {
|
||||||
|
@ -97,7 +97,7 @@ final class OverlayAudioPlayerControllerNode: ViewControllerTracingNode, UIGestu
|
|||||||
return false
|
return false
|
||||||
}, requestMessageActionCallback: { _, _, _, _ in
|
}, requestMessageActionCallback: { _, _, _, _ in
|
||||||
}, requestMessageActionUrlAuth: { _, _ in
|
}, requestMessageActionUrlAuth: { _, _ in
|
||||||
}, activateSwitchInline: { _, _ in
|
}, activateSwitchInline: { _, _, _ in
|
||||||
}, openUrl: { _, _, _, _ in
|
}, openUrl: { _, _, _, _ in
|
||||||
}, shareCurrentLocation: {
|
}, shareCurrentLocation: {
|
||||||
}, shareAccountContact: {
|
}, shareAccountContact: {
|
||||||
|
@ -2678,7 +2678,7 @@ final class PeerInfoScreenNode: ViewControllerTracingNode, UIScrollViewDelegate
|
|||||||
return false
|
return false
|
||||||
}, requestMessageActionCallback: { _, _, _, _ in
|
}, requestMessageActionCallback: { _, _, _, _ in
|
||||||
}, requestMessageActionUrlAuth: { _, _ in
|
}, requestMessageActionUrlAuth: { _, _ in
|
||||||
}, activateSwitchInline: { _, _ in
|
}, activateSwitchInline: { _, _, _ in
|
||||||
}, openUrl: { [weak self] url, concealed, external, _ in
|
}, openUrl: { [weak self] url, concealed, external, _ in
|
||||||
guard let strongSelf = self else {
|
guard let strongSelf = self else {
|
||||||
return
|
return
|
||||||
|
@ -1457,7 +1457,7 @@ public final class SharedAccountContextImpl: SharedAccountContext {
|
|||||||
clickThroughMessage?()
|
clickThroughMessage?()
|
||||||
}, toggleMessagesSelection: { _, _ in }, sendCurrentMessage: { _ in }, sendMessage: { _ in }, sendSticker: { _, _, _, _, _, _, _, _, _ in return false }, sendEmoji: { _, _, _ in }, sendGif: { _, _, _, _, _ in return false }, sendBotContextResultAsGif: { _, _, _, _, _, _ in
|
}, toggleMessagesSelection: { _, _ in }, sendCurrentMessage: { _ in }, sendMessage: { _ in }, sendSticker: { _, _, _, _, _, _, _, _, _ in return false }, sendEmoji: { _, _, _ in }, sendGif: { _, _, _, _, _ in return false }, sendBotContextResultAsGif: { _, _, _, _, _, _ in
|
||||||
return false
|
return false
|
||||||
}, requestMessageActionCallback: { _, _, _, _ in }, requestMessageActionUrlAuth: { _, _ in }, activateSwitchInline: { _, _ in }, openUrl: { _, _, _, _ in }, shareCurrentLocation: {}, shareAccountContact: {}, sendBotCommand: { _, _ in }, openInstantPage: { _, _ in }, openWallpaper: { _ in }, openTheme: { _ in }, openHashtag: { _, _ in }, updateInputState: { _ in }, updateInputMode: { _ in }, openMessageShareMenu: { _ in
|
}, requestMessageActionCallback: { _, _, _, _ in }, requestMessageActionUrlAuth: { _, _ in }, activateSwitchInline: { _, _, _ in }, openUrl: { _, _, _, _ in }, shareCurrentLocation: {}, shareAccountContact: {}, sendBotCommand: { _, _ in }, openInstantPage: { _, _ in }, openWallpaper: { _ in }, openTheme: { _ in }, openHashtag: { _, _ in }, updateInputState: { _ in }, updateInputMode: { _ in }, openMessageShareMenu: { _ in
|
||||||
}, presentController: { _, _ in
|
}, presentController: { _, _ in
|
||||||
}, presentControllerInCurrent: { _, _ in
|
}, presentControllerInCurrent: { _, _ in
|
||||||
}, navigationController: {
|
}, navigationController: {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user