subscriptionPeerId to be able to open the channel after subscribing

This commit is contained in:
Mikhail Filimonov 2024-08-09 09:51:57 -03:00
parent d17391ad9b
commit e6e0250405
2 changed files with 27 additions and 3 deletions

View File

@ -541,7 +541,7 @@ public enum SendBotPaymentFormError {
} }
public enum SendBotPaymentResult { public enum SendBotPaymentResult {
case done(receiptMessageId: MessageId?) case done(receiptMessageId: MessageId?, subscriptionPeerId: PeerId?)
case externalVerificationRequired(url: String) case externalVerificationRequired(url: String)
} }
@ -585,6 +585,17 @@ func _internal_sendBotPaymentForm(account: Account, formId: Int64, source: BotPa
case let .paymentResult(updates): case let .paymentResult(updates):
account.stateManager.addUpdates(updates) account.stateManager.addUpdates(updates)
var receiptMessageId: MessageId? var receiptMessageId: MessageId?
switch source {
case .starsChatSubscription:
let chats = updates.chats.compactMap { parseTelegramGroupOrChannel(chat: $0) }
if let first = chats.first {
return .done(receiptMessageId: nil, subscriptionPeerId: first.id)
}
default:
break
}
for apiMessage in updates.messages { for apiMessage in updates.messages {
if let message = StoreMessage(apiMessage: apiMessage, accountPeerId: account.peerId, peerIsForum: false) { if let message = StoreMessage(apiMessage: apiMessage, accountPeerId: account.peerId, peerIsForum: false) {
for media in message.media { for media in message.media {
@ -623,7 +634,7 @@ func _internal_sendBotPaymentForm(account: Account, formId: Int64, source: BotPa
} }
} }
} }
return .done(receiptMessageId: receiptMessageId) return .done(receiptMessageId: receiptMessageId, subscriptionPeerId: nil)
case let .paymentVerificationNeeded(url): case let .paymentVerificationNeeded(url):
return .externalVerificationRequired(url: url) return .externalVerificationRequired(url: url)
} }

View File

@ -1086,9 +1086,22 @@ func _internal_sendStarsPaymentForm(account: Account, formId: Int64, source: Bot
return account.network.request(Api.functions.payments.sendStarsForm(flags: flags, formId: formId, invoice: invoice)) return account.network.request(Api.functions.payments.sendStarsForm(flags: flags, formId: formId, invoice: invoice))
|> map { result -> SendBotPaymentResult in |> map { result -> SendBotPaymentResult in
switch result { switch result {
case let .paymentResult(updates): case let .paymentResult(updates):
account.stateManager.addUpdates(updates) account.stateManager.addUpdates(updates)
switch source {
case .starsChatSubscription:
let chats = updates.chats.compactMap { parseTelegramGroupOrChannel(chat: $0) }
if let first = chats.first {
return .done(receiptMessageId: nil, subscriptionPeerId: first.id)
}
default:
break
}
var receiptMessageId: MessageId? var receiptMessageId: MessageId?
for apiMessage in updates.messages { for apiMessage in updates.messages {
if let message = StoreMessage(apiMessage: apiMessage, accountPeerId: account.peerId, peerIsForum: false) { if let message = StoreMessage(apiMessage: apiMessage, accountPeerId: account.peerId, peerIsForum: false) {
@ -1130,7 +1143,7 @@ func _internal_sendStarsPaymentForm(account: Account, formId: Int64, source: Bot
} }
} }
} }
return .done(receiptMessageId: receiptMessageId) return .done(receiptMessageId: receiptMessageId, subscriptionPeerId: nil)
case let .paymentVerificationNeeded(url): case let .paymentVerificationNeeded(url):
return .externalVerificationRequired(url: url) return .externalVerificationRequired(url: url)
} }