Fix bot preview api usage

(cherry picked from commit 32af470ffd00cc7f854964f66c9ad4f5a7a2a54c)
This commit is contained in:
Isaac 2024-08-02 11:31:56 +08:00
parent c4b406528a
commit 76c07d07c2
2 changed files with 35 additions and 4 deletions

View File

@ -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)
}

View File

@ -198,8 +198,12 @@ func _internal_fetchAndUpdateCachedPeerData(accountPeerId: PeerId, peerId rawPee
}
let botPreview: Signal<CachedUserData.BotPreview?, NoError>
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<CachedUserData.BotPreview?, NoError> {
func _internal_requestBotAdminPreview(network: Network, peerId: PeerId, inputUser: Api.InputUser, language: String?) -> Signal<CachedUserData.BotPreview?, NoError> {
return network.request(Api.functions.bots.getPreviewInfo(bot: inputUser, langCode: language ?? ""))
|> map(Optional.init)
|> `catch` { _ -> Signal<Api.bots.PreviewInfo?, NoError> 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<CachedUserData.BotPreview?, NoError> {
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: []
)
}
}