diff --git a/submodules/TelegramCore/Sources/TelegramEngine/Messages/StoryListContext.swift b/submodules/TelegramCore/Sources/TelegramEngine/Messages/StoryListContext.swift index 296abd0c85..d92634a4df 100644 --- a/submodules/TelegramCore/Sources/TelegramEngine/Messages/StoryListContext.swift +++ b/submodules/TelegramCore/Sources/TelegramEngine/Messages/StoryListContext.swift @@ -2326,7 +2326,7 @@ public final class BotPreviewStoryListContext: StoryListContext { guard let peer, let inputUser = apiInputUser(peer) else { return .single((nil, nil)) } - return _internal_requestBotPreview(network: account.network, peerId: peerId, inputUser: inputUser, language: language) + return _internal_requestBotAdminPreview(network: account.network, peerId: peerId, inputUser: inputUser, language: language) |> map { botPreview in return (botPreview, peer) } diff --git a/submodules/TelegramCore/Sources/TelegramEngine/Peers/UpdateCachedPeerData.swift b/submodules/TelegramCore/Sources/TelegramEngine/Peers/UpdateCachedPeerData.swift index 4f09b015a3..8f1c5fa8e2 100644 --- a/submodules/TelegramCore/Sources/TelegramEngine/Peers/UpdateCachedPeerData.swift +++ b/submodules/TelegramCore/Sources/TelegramEngine/Peers/UpdateCachedPeerData.swift @@ -198,8 +198,12 @@ func _internal_fetchAndUpdateCachedPeerData(accountPeerId: PeerId, peerId rawPee } let botPreview: Signal - if let user = maybePeer as? TelegramUser, let _ = user.botInfo { - botPreview = _internal_requestBotPreview(network: network, peerId: user.id, inputUser: inputUser, language: nil) + if let user = maybePeer as? TelegramUser, let botInfo = user.botInfo { + if botInfo.flags.contains(.canEdit) { + botPreview = _internal_requestBotAdminPreview(network: network, peerId: user.id, inputUser: inputUser, language: nil) + } else { + botPreview = _internal_requestBotUserPreview(network: network, peerId: user.id, inputUser: inputUser) + } } else { botPreview = .single(nil) } @@ -835,7 +839,7 @@ extension CachedPeerAutoremoveTimeout.Value { } } -func _internal_requestBotPreview(network: Network, peerId: PeerId, inputUser: Api.InputUser, language: String?) -> Signal { +func _internal_requestBotAdminPreview(network: Network, peerId: PeerId, inputUser: Api.InputUser, language: String?) -> Signal { return network.request(Api.functions.bots.getPreviewInfo(bot: inputUser, langCode: language ?? "")) |> map(Optional.init) |> `catch` { _ -> Signal in @@ -864,3 +868,30 @@ func _internal_requestBotPreview(network: Network, peerId: PeerId, inputUser: Ap } } } + +func _internal_requestBotUserPreview(network: Network, peerId: PeerId, inputUser: Api.InputUser) -> Signal { + return network.request(Api.functions.bots.getPreviewMedias(bot: inputUser)) + |> map(Optional.init) + |> `catch` { _ -> Signal<[Api.BotPreviewMedia]?, NoError> in + return .single(nil) + } + |> map { result -> CachedUserData.BotPreview? in + guard let result else { + return nil + } + return CachedUserData.BotPreview( + items: result.compactMap { item -> CachedUserData.BotPreview.Item? in + switch item { + case let .botPreviewMedia(date, media): + let value = textMediaAndExpirationTimerFromApiMedia(media, peerId) + if let media = value.media { + return CachedUserData.BotPreview.Item(media: media, timestamp: date) + } else { + return nil + } + } + }, + alternativeLanguageCodes: [] + ) + } +}