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_stopped = BotStoppedUpdate
|
||||||
bot_chat_join_request = BotChatJoinRequestUpdate
|
bot_chat_join_request = BotChatJoinRequestUpdate
|
||||||
chat_join_request = ChatJoinRequestUpdate
|
chat_join_request = ChatJoinRequestUpdate
|
||||||
|
pre_checkout_query = PreCheckoutQuery
|
||||||
|
|
|
@ -43,6 +43,7 @@ import {
|
||||||
Poll,
|
Poll,
|
||||||
PollUpdate,
|
PollUpdate,
|
||||||
PollVoteUpdate,
|
PollVoteUpdate,
|
||||||
|
PreCheckoutQuery,
|
||||||
RawDocument,
|
RawDocument,
|
||||||
ReplyMarkup,
|
ReplyMarkup,
|
||||||
SentCode,
|
SentCode,
|
||||||
|
@ -83,6 +84,7 @@ import { startTest } from './methods/auth/start-test'
|
||||||
import { start } from './methods/auth/start'
|
import { start } from './methods/auth/start'
|
||||||
import { answerCallbackQuery } from './methods/bots/answer-callback-query'
|
import { answerCallbackQuery } from './methods/bots/answer-callback-query'
|
||||||
import { answerInlineQuery } from './methods/bots/answer-inline-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 { deleteMyCommands } from './methods/bots/delete-my-commands'
|
||||||
import { getBotMenuButton } from './methods/bots/get-bot-menu-button'
|
import { getBotMenuButton } from './methods/bots/get-bot-menu-button'
|
||||||
import { getCallbackAnswer } from './methods/bots/get-callback-answer'
|
import { getCallbackAnswer } from './methods/bots/get-callback-answer'
|
||||||
|
@ -412,6 +414,16 @@ export interface TelegramClient extends BaseTelegramClient {
|
||||||
name: 'chat_join_request',
|
name: 'chat_join_request',
|
||||||
handler: (upd: ChatJoinRequestUpdate) => void
|
handler: (upd: ChatJoinRequestUpdate) => void
|
||||||
): this
|
): 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
|
* Accept the given TOS
|
||||||
*
|
*
|
||||||
|
@ -830,6 +842,13 @@ export interface TelegramClient extends BaseTelegramClient {
|
||||||
parseMode?: string | null
|
parseMode?: string | null
|
||||||
}
|
}
|
||||||
): Promise<void>
|
): 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.
|
* Delete commands for the current bot and the given scope.
|
||||||
*
|
*
|
||||||
|
@ -4100,6 +4119,7 @@ export class TelegramClient extends BaseTelegramClient {
|
||||||
start = start
|
start = start
|
||||||
answerCallbackQuery = answerCallbackQuery
|
answerCallbackQuery = answerCallbackQuery
|
||||||
answerInlineQuery = answerInlineQuery
|
answerInlineQuery = answerInlineQuery
|
||||||
|
answerPreCheckoutQuery = answerPreCheckoutQuery
|
||||||
deleteMyCommands = deleteMyCommands
|
deleteMyCommands = deleteMyCommands
|
||||||
getBotMenuButton = getBotMenuButton
|
getBotMenuButton = getBotMenuButton
|
||||||
getCallbackAnswer = getCallbackAnswer
|
getCallbackAnswer = getCallbackAnswer
|
||||||
|
|
|
@ -57,7 +57,8 @@ import {
|
||||||
ChatJoinRequestUpdate,
|
ChatJoinRequestUpdate,
|
||||||
PeerReaction,
|
PeerReaction,
|
||||||
MessageReactions,
|
MessageReactions,
|
||||||
Sticker
|
Sticker,
|
||||||
|
PreCheckoutQuery
|
||||||
} from '../types'
|
} from '../types'
|
||||||
|
|
||||||
// @copy
|
// @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 { BotStoppedUpdate } from './bot-stopped'
|
||||||
import { BotChatJoinRequestUpdate } from './bot-chat-join-request'
|
import { BotChatJoinRequestUpdate } from './bot-chat-join-request'
|
||||||
import { ChatJoinRequestUpdate } from './chat-join-request'
|
import { ChatJoinRequestUpdate } from './chat-join-request'
|
||||||
|
import { PreCheckoutQuery } from './pre-checkout-query'
|
||||||
|
|
||||||
export {
|
export {
|
||||||
DeleteMessageUpdate,
|
DeleteMessageUpdate,
|
||||||
|
@ -24,6 +25,7 @@ export {
|
||||||
BotStoppedUpdate,
|
BotStoppedUpdate,
|
||||||
BotChatJoinRequestUpdate,
|
BotChatJoinRequestUpdate,
|
||||||
ChatJoinRequestUpdate,
|
ChatJoinRequestUpdate,
|
||||||
|
PreCheckoutQuery,
|
||||||
}
|
}
|
||||||
|
|
||||||
// begin-codegen
|
// begin-codegen
|
||||||
|
@ -43,5 +45,6 @@ export type ParsedUpdate =
|
||||||
| { name: 'bot_stopped'; data: BotStoppedUpdate }
|
| { name: 'bot_stopped'; data: BotStoppedUpdate }
|
||||||
| { name: 'bot_chat_join_request'; data: BotChatJoinRequestUpdate }
|
| { name: 'bot_chat_join_request'; data: BotChatJoinRequestUpdate }
|
||||||
| { name: 'chat_join_request'; data: ChatJoinRequestUpdate }
|
| { name: 'chat_join_request'; data: ChatJoinRequestUpdate }
|
||||||
|
| { name: 'pre_checkout_query'; data: PreCheckoutQuery }
|
||||||
|
|
||||||
// end-codegen
|
// end-codegen
|
||||||
|
|
|
@ -18,6 +18,7 @@ import {
|
||||||
PollVoteUpdate,
|
PollVoteUpdate,
|
||||||
UserStatusUpdate,
|
UserStatusUpdate,
|
||||||
UserTypingUpdate,
|
UserTypingUpdate,
|
||||||
|
PreCheckoutQuery
|
||||||
} from '../index'
|
} from '../index'
|
||||||
|
|
||||||
type ParserFunction = (
|
type ParserFunction = (
|
||||||
|
@ -123,6 +124,10 @@ const PARSERS: Partial<
|
||||||
(client, upd, peers) =>
|
(client, upd, peers) =>
|
||||||
new ChatJoinRequestUpdate(client, upd as any, peers),
|
new ChatJoinRequestUpdate(client, upd as any, peers),
|
||||||
],
|
],
|
||||||
|
updateBotPrecheckoutQuery: [
|
||||||
|
'pre_checkout_query',
|
||||||
|
(client, upd, peers) => new PreCheckoutQuery(client, upd as any, peers),
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @internal */
|
/** @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,
|
BotStoppedUpdate,
|
||||||
BotChatJoinRequestUpdate,
|
BotChatJoinRequestUpdate,
|
||||||
ChatJoinRequestUpdate,
|
ChatJoinRequestUpdate,
|
||||||
|
PreCheckoutQuery,
|
||||||
} from '@mtcute/client'
|
} from '@mtcute/client'
|
||||||
import { tl } from '@mtcute/tl'
|
import { tl } from '@mtcute/tl'
|
||||||
|
|
||||||
|
@ -41,6 +42,7 @@ import {
|
||||||
BotStoppedHandler,
|
BotStoppedHandler,
|
||||||
BotChatJoinRequestHandler,
|
BotChatJoinRequestHandler,
|
||||||
ChatJoinRequestHandler,
|
ChatJoinRequestHandler,
|
||||||
|
PreCheckoutQueryHandler,
|
||||||
} from './handler'
|
} from './handler'
|
||||||
// end-codegen-imports
|
// end-codegen-imports
|
||||||
|
|
||||||
|
@ -1554,5 +1556,36 @@ export class Dispatcher<State = never, SceneName extends string = string> {
|
||||||
this._addKnownHandler('chat_join_request', filter, handler, group)
|
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
|
// end-codegen
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,6 +16,7 @@ import {
|
||||||
BotStoppedUpdate,
|
BotStoppedUpdate,
|
||||||
BotChatJoinRequestUpdate,
|
BotChatJoinRequestUpdate,
|
||||||
ChatJoinRequestUpdate,
|
ChatJoinRequestUpdate,
|
||||||
|
PreCheckoutQuery,
|
||||||
} from '@mtcute/client'
|
} from '@mtcute/client'
|
||||||
import { tl } from '@mtcute/tl'
|
import { tl } from '@mtcute/tl'
|
||||||
|
|
||||||
|
@ -28,7 +29,11 @@ export interface BaseUpdateHandler<Name, Handler, Checker> {
|
||||||
check?: Checker
|
check?: Checker
|
||||||
}
|
}
|
||||||
|
|
||||||
export type ParsedUpdateHandler<Name, Update, State = never> = BaseUpdateHandler<
|
export type ParsedUpdateHandler<
|
||||||
|
Name,
|
||||||
|
Update,
|
||||||
|
State = never
|
||||||
|
> = BaseUpdateHandler<
|
||||||
Name,
|
Name,
|
||||||
(update: Update, state: State) => MaybeAsync<void | PropagationAction>,
|
(update: Update, state: State) => MaybeAsync<void | PropagationAction>,
|
||||||
(update: Update, state: State) => MaybeAsync<boolean>
|
(update: Update, state: State) => MaybeAsync<boolean>
|
||||||
|
@ -102,6 +107,10 @@ export type BotChatJoinRequestHandler<T = BotChatJoinRequestUpdate> =
|
||||||
ParsedUpdateHandler<'bot_chat_join_request', T>
|
ParsedUpdateHandler<'bot_chat_join_request', T>
|
||||||
export type ChatJoinRequestHandler<T = ChatJoinRequestUpdate> =
|
export type ChatJoinRequestHandler<T = ChatJoinRequestUpdate> =
|
||||||
ParsedUpdateHandler<'chat_join_request', T>
|
ParsedUpdateHandler<'chat_join_request', T>
|
||||||
|
export type PreCheckoutQueryHandler<T = PreCheckoutQuery> = ParsedUpdateHandler<
|
||||||
|
'pre_checkout_query',
|
||||||
|
T
|
||||||
|
>
|
||||||
|
|
||||||
export type UpdateHandler =
|
export type UpdateHandler =
|
||||||
| RawUpdateHandler
|
| RawUpdateHandler
|
||||||
|
@ -120,5 +129,6 @@ export type UpdateHandler =
|
||||||
| BotStoppedHandler
|
| BotStoppedHandler
|
||||||
| BotChatJoinRequestHandler
|
| BotChatJoinRequestHandler
|
||||||
| ChatJoinRequestHandler
|
| ChatJoinRequestHandler
|
||||||
|
| PreCheckoutQueryHandler
|
||||||
|
|
||||||
// end-codegen
|
// end-codegen
|
||||||
|
|
Loading…
Reference in a new issue