feat(client): support pre-checkout queries
This commit is contained in:
parent
e75ac9fa5d
commit
70b09903f1
9 changed files with 183 additions and 2 deletions
|
@ -14,3 +14,4 @@ history_read = HistoryReadUpdate
|
|||
bot_stopped = BotStoppedUpdate
|
||||
bot_chat_join_request = BotChatJoinRequestUpdate
|
||||
chat_join_request = ChatJoinRequestUpdate
|
||||
pre_checkout_query = PreCheckoutQuery
|
||||
|
|
|
@ -43,6 +43,7 @@ import {
|
|||
Poll,
|
||||
PollUpdate,
|
||||
PollVoteUpdate,
|
||||
PreCheckoutQuery,
|
||||
RawDocument,
|
||||
ReplyMarkup,
|
||||
SentCode,
|
||||
|
@ -83,6 +84,7 @@ import { startTest } from './methods/auth/start-test'
|
|||
import { start } from './methods/auth/start'
|
||||
import { answerCallbackQuery } from './methods/bots/answer-callback-query'
|
||||
import { answerInlineQuery } from './methods/bots/answer-inline-query'
|
||||
import { answerPreCheckoutQuery } from './methods/bots/answer-pre-checkout-query'
|
||||
import { deleteMyCommands } from './methods/bots/delete-my-commands'
|
||||
import { getBotMenuButton } from './methods/bots/get-bot-menu-button'
|
||||
import { getCallbackAnswer } from './methods/bots/get-callback-answer'
|
||||
|
@ -412,6 +414,16 @@ export interface TelegramClient extends BaseTelegramClient {
|
|||
name: 'chat_join_request',
|
||||
handler: (upd: ChatJoinRequestUpdate) => void
|
||||
): this
|
||||
/**
|
||||
* Register a pre checkout query handler
|
||||
*
|
||||
* @param name Event name
|
||||
* @param handler Pre checkout query handler
|
||||
*/
|
||||
on(
|
||||
name: 'pre_checkout_query',
|
||||
handler: (upd: PreCheckoutQuery) => void
|
||||
): this
|
||||
/**
|
||||
* Accept the given TOS
|
||||
*
|
||||
|
@ -830,6 +842,13 @@ export interface TelegramClient extends BaseTelegramClient {
|
|||
parseMode?: string | null
|
||||
}
|
||||
): Promise<void>
|
||||
/**
|
||||
* Answer a pre-checkout query.
|
||||
*
|
||||
* @param queryId Pre-checkout query ID
|
||||
* @param error If pre-checkout is rejected, error message to show to the user
|
||||
*/
|
||||
answerPreCheckoutQuery(queryId: tl.Long, error?: string): Promise<void>
|
||||
/**
|
||||
* Delete commands for the current bot and the given scope.
|
||||
*
|
||||
|
@ -4100,6 +4119,7 @@ export class TelegramClient extends BaseTelegramClient {
|
|||
start = start
|
||||
answerCallbackQuery = answerCallbackQuery
|
||||
answerInlineQuery = answerInlineQuery
|
||||
answerPreCheckoutQuery = answerPreCheckoutQuery
|
||||
deleteMyCommands = deleteMyCommands
|
||||
getBotMenuButton = getBotMenuButton
|
||||
getCallbackAnswer = getCallbackAnswer
|
||||
|
|
|
@ -57,7 +57,8 @@ import {
|
|||
ChatJoinRequestUpdate,
|
||||
PeerReaction,
|
||||
MessageReactions,
|
||||
Sticker
|
||||
Sticker,
|
||||
PreCheckoutQuery
|
||||
} from '../types'
|
||||
|
||||
// @copy
|
||||
|
|
|
@ -0,0 +1,23 @@
|
|||
import { tl } from '@mtcute/tl'
|
||||
|
||||
import { TelegramClient } from '../../client'
|
||||
|
||||
/**
|
||||
* Answer a pre-checkout query.
|
||||
*
|
||||
* @param queryId Pre-checkout query ID
|
||||
* @param error If pre-checkout is rejected, error message to show to the user
|
||||
* @internal
|
||||
*/
|
||||
export async function answerPreCheckoutQuery(
|
||||
this: TelegramClient,
|
||||
queryId: tl.Long,
|
||||
error?: string
|
||||
): Promise<void> {
|
||||
await this.call({
|
||||
_: 'messages.setBotPrecheckoutResults',
|
||||
queryId,
|
||||
success: !error,
|
||||
error,
|
||||
})
|
||||
}
|
|
@ -11,6 +11,7 @@ import { HistoryReadUpdate } from './history-read-update'
|
|||
import { BotStoppedUpdate } from './bot-stopped'
|
||||
import { BotChatJoinRequestUpdate } from './bot-chat-join-request'
|
||||
import { ChatJoinRequestUpdate } from './chat-join-request'
|
||||
import { PreCheckoutQuery } from './pre-checkout-query'
|
||||
|
||||
export {
|
||||
DeleteMessageUpdate,
|
||||
|
@ -24,6 +25,7 @@ export {
|
|||
BotStoppedUpdate,
|
||||
BotChatJoinRequestUpdate,
|
||||
ChatJoinRequestUpdate,
|
||||
PreCheckoutQuery,
|
||||
}
|
||||
|
||||
// begin-codegen
|
||||
|
@ -43,5 +45,6 @@ export type ParsedUpdate =
|
|||
| { name: 'bot_stopped'; data: BotStoppedUpdate }
|
||||
| { name: 'bot_chat_join_request'; data: BotChatJoinRequestUpdate }
|
||||
| { name: 'chat_join_request'; data: ChatJoinRequestUpdate }
|
||||
| { name: 'pre_checkout_query'; data: PreCheckoutQuery }
|
||||
|
||||
// end-codegen
|
||||
|
|
|
@ -18,6 +18,7 @@ import {
|
|||
PollVoteUpdate,
|
||||
UserStatusUpdate,
|
||||
UserTypingUpdate,
|
||||
PreCheckoutQuery
|
||||
} from '../index'
|
||||
|
||||
type ParserFunction = (
|
||||
|
@ -123,6 +124,10 @@ const PARSERS: Partial<
|
|||
(client, upd, peers) =>
|
||||
new ChatJoinRequestUpdate(client, upd as any, peers),
|
||||
],
|
||||
updateBotPrecheckoutQuery: [
|
||||
'pre_checkout_query',
|
||||
(client, upd, peers) => new PreCheckoutQuery(client, upd as any, peers),
|
||||
]
|
||||
}
|
||||
|
||||
/** @internal */
|
||||
|
|
85
packages/client/src/types/updates/pre-checkout-query.ts
Normal file
85
packages/client/src/types/updates/pre-checkout-query.ts
Normal file
|
@ -0,0 +1,85 @@
|
|||
import { tl } from '@mtcute/tl'
|
||||
|
||||
import { TelegramClient } from '../../client'
|
||||
import { makeInspectable } from '../utils'
|
||||
import { PeersIndex, User } from '../peers'
|
||||
|
||||
export class PreCheckoutQuery {
|
||||
constructor(
|
||||
public readonly client: TelegramClient,
|
||||
public readonly raw: tl.RawUpdateBotPrecheckoutQuery,
|
||||
public readonly _peers: PeersIndex
|
||||
) {}
|
||||
|
||||
/**
|
||||
* ID of the query
|
||||
*/
|
||||
get queryId(): tl.Long {
|
||||
return this.raw.queryId
|
||||
}
|
||||
|
||||
/**
|
||||
* ID of the user who sent the query
|
||||
*/
|
||||
get userId(): number {
|
||||
return this.raw.userId
|
||||
}
|
||||
|
||||
private _user?: User
|
||||
/**
|
||||
* User who sent the query
|
||||
*/
|
||||
get user(): User {
|
||||
if (!this._user) {
|
||||
this._user = new User(this.client, this._peers.user(this.userId))
|
||||
}
|
||||
|
||||
return this._user
|
||||
}
|
||||
|
||||
/**
|
||||
* Bot-defined payload of the original invoice
|
||||
* (see {@link InputMediaInvoice.payload})
|
||||
*/
|
||||
get payload(): Buffer {
|
||||
return this.raw.payload
|
||||
}
|
||||
|
||||
/**
|
||||
* User-provided payment info (like name, phone, shipping address, etc.)
|
||||
*/
|
||||
get paymentInfo(): tl.RawPaymentRequestedInfo | null {
|
||||
if (!this.raw.info) return null
|
||||
return this.raw.info
|
||||
}
|
||||
|
||||
/**
|
||||
* Currency of the payment
|
||||
*/
|
||||
get currency(): string {
|
||||
return this.raw.currency
|
||||
}
|
||||
|
||||
/**
|
||||
* Total price of the payment
|
||||
*/
|
||||
get totalAmount(): tl.Long {
|
||||
return this.raw.totalAmount
|
||||
}
|
||||
|
||||
/**
|
||||
* Approve the query
|
||||
*/
|
||||
approve(): Promise<void> {
|
||||
return this.client.answerPreCheckoutQuery(this.queryId)
|
||||
}
|
||||
|
||||
/**
|
||||
* Reject the query
|
||||
*/
|
||||
reject(error = ''): Promise<void> {
|
||||
return this.client.answerPreCheckoutQuery(this.queryId, error)
|
||||
}
|
||||
}
|
||||
|
||||
makeInspectable(PreCheckoutQuery)
|
|
@ -19,6 +19,7 @@ import {
|
|||
BotStoppedUpdate,
|
||||
BotChatJoinRequestUpdate,
|
||||
ChatJoinRequestUpdate,
|
||||
PreCheckoutQuery,
|
||||
} from '@mtcute/client'
|
||||
import { tl } from '@mtcute/tl'
|
||||
|
||||
|
@ -41,6 +42,7 @@ import {
|
|||
BotStoppedHandler,
|
||||
BotChatJoinRequestHandler,
|
||||
ChatJoinRequestHandler,
|
||||
PreCheckoutQueryHandler,
|
||||
} from './handler'
|
||||
// end-codegen-imports
|
||||
|
||||
|
@ -1554,5 +1556,36 @@ export class Dispatcher<State = never, SceneName extends string = string> {
|
|||
this._addKnownHandler('chat_join_request', filter, handler, group)
|
||||
}
|
||||
|
||||
/**
|
||||
* Register a pre checkout query handler without any filters
|
||||
*
|
||||
* @param handler Pre checkout query handler
|
||||
* @param group Handler group index
|
||||
*/
|
||||
onPreCheckoutQuery(
|
||||
handler: PreCheckoutQueryHandler['callback'],
|
||||
group?: number
|
||||
): void
|
||||
|
||||
/**
|
||||
* Register a pre checkout query handler with a filter
|
||||
*
|
||||
* @param filter Update filter
|
||||
* @param handler Pre checkout query handler
|
||||
* @param group Handler group index
|
||||
*/
|
||||
onPreCheckoutQuery<Mod>(
|
||||
filter: UpdateFilter<PreCheckoutQuery, Mod>,
|
||||
handler: PreCheckoutQueryHandler<
|
||||
filters.Modify<PreCheckoutQuery, Mod>
|
||||
>['callback'],
|
||||
group?: number
|
||||
): void
|
||||
|
||||
/** @internal */
|
||||
onPreCheckoutQuery(filter: any, handler?: any, group?: number): void {
|
||||
this._addKnownHandler('pre_checkout_query', filter, handler, group)
|
||||
}
|
||||
|
||||
// end-codegen
|
||||
}
|
||||
|
|
|
@ -16,6 +16,7 @@ import {
|
|||
BotStoppedUpdate,
|
||||
BotChatJoinRequestUpdate,
|
||||
ChatJoinRequestUpdate,
|
||||
PreCheckoutQuery,
|
||||
} from '@mtcute/client'
|
||||
import { tl } from '@mtcute/tl'
|
||||
|
||||
|
@ -28,7 +29,11 @@ export interface BaseUpdateHandler<Name, Handler, Checker> {
|
|||
check?: Checker
|
||||
}
|
||||
|
||||
export type ParsedUpdateHandler<Name, Update, State = never> = BaseUpdateHandler<
|
||||
export type ParsedUpdateHandler<
|
||||
Name,
|
||||
Update,
|
||||
State = never
|
||||
> = BaseUpdateHandler<
|
||||
Name,
|
||||
(update: Update, state: State) => MaybeAsync<void | PropagationAction>,
|
||||
(update: Update, state: State) => MaybeAsync<boolean>
|
||||
|
@ -102,6 +107,10 @@ export type BotChatJoinRequestHandler<T = BotChatJoinRequestUpdate> =
|
|||
ParsedUpdateHandler<'bot_chat_join_request', T>
|
||||
export type ChatJoinRequestHandler<T = ChatJoinRequestUpdate> =
|
||||
ParsedUpdateHandler<'chat_join_request', T>
|
||||
export type PreCheckoutQueryHandler<T = PreCheckoutQuery> = ParsedUpdateHandler<
|
||||
'pre_checkout_query',
|
||||
T
|
||||
>
|
||||
|
||||
export type UpdateHandler =
|
||||
| RawUpdateHandler
|
||||
|
@ -120,5 +129,6 @@ export type UpdateHandler =
|
|||
| BotStoppedHandler
|
||||
| BotChatJoinRequestHandler
|
||||
| ChatJoinRequestHandler
|
||||
| PreCheckoutQueryHandler
|
||||
|
||||
// end-codegen
|
||||
|
|
Loading…
Reference in a new issue