mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-23 22:55:00 +00:00
Bot apps implementation
This commit is contained in:
@@ -71,6 +71,7 @@ public enum ParsedInternalPeerUrlParameter {
|
||||
case channelMessage(Int32, Double?)
|
||||
case replyThread(Int32, Int32)
|
||||
case voiceChat(String?)
|
||||
case appStart(String, String?)
|
||||
}
|
||||
|
||||
public enum ParsedInternalUrl {
|
||||
@@ -510,6 +511,19 @@ public func parseInternalUrl(query: String) -> ParsedInternalUrl? {
|
||||
} else {
|
||||
return .peer(.name(peerName), .channelMessage(value, timecode))
|
||||
}
|
||||
} else if pathComponents.count == 2 {
|
||||
let appName = pathComponents[1]
|
||||
var startApp: String?
|
||||
if let queryItems = components.queryItems {
|
||||
for queryItem in queryItems {
|
||||
if let value = queryItem.value {
|
||||
if queryItem.name == "startApp"{
|
||||
startApp = value
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return .peer(.name(peerName), .appStart(appName, startApp))
|
||||
} else {
|
||||
return nil
|
||||
}
|
||||
@@ -598,6 +612,20 @@ private func resolveInternalUrl(context: AccountContext, url: ParsedInternalUrl)
|
||||
return .single(.peer(peer, .chat(textInputState: nil, subject: nil, peekData: nil)))
|
||||
}
|
||||
}
|
||||
case let .appStart(name, payload):
|
||||
return context.engine.messages.getBotApp(botId: peer.id, shortName: name, cached: false)
|
||||
|> map(Optional.init)
|
||||
|> `catch` { _ -> Signal<BotApp?, NoError> in
|
||||
return .single(nil)
|
||||
}
|
||||
|> take(1)
|
||||
|> mapToSignal { botApp -> Signal<ResolvedUrl?, NoError> in
|
||||
if let botApp {
|
||||
return .single(.peer(peer, .withBotApp(ChatControllerInitialBotAppStart(botApp: botApp, payload: payload, justInstalled: false))))
|
||||
} else {
|
||||
return .single(.peer(peer, .chat(textInputState: nil, subject: nil, peekData: nil)))
|
||||
}
|
||||
}
|
||||
case let .channelMessage(id, timecode):
|
||||
if let channel = peer as? TelegramChannel, channel.flags.contains(.isForum) {
|
||||
let messageId = MessageId(peerId: channel.id, namespace: Namespaces.Message.Cloud, id: id)
|
||||
|
||||
Reference in New Issue
Block a user