@mtcute/core 0.30.3 → 0.32.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/client.cjs +85 -0
- package/client.js +85 -0
- package/highlevel/client.d.cts +411 -116
- package/highlevel/client.d.ts +411 -116
- package/highlevel/methods/auth/sign-in-qr.cjs +2 -0
- package/highlevel/methods/auth/sign-in-qr.js +2 -0
- package/highlevel/methods/auth/sign-in-qr.test.d.cts +1 -0
- package/highlevel/methods/auth/sign-in-qr.test.d.ts +1 -0
- package/highlevel/methods/chats/build-peers-index.cjs +45 -0
- package/highlevel/methods/chats/build-peers-index.d.cts +13 -0
- package/highlevel/methods/chats/build-peers-index.d.ts +13 -0
- package/highlevel/methods/chats/build-peers-index.js +40 -0
- package/highlevel/methods/chats/join-chat.cjs +1 -1
- package/highlevel/methods/chats/join-chat.d.cts +2 -1
- package/highlevel/methods/chats/join-chat.d.ts +2 -1
- package/highlevel/methods/chats/join-chat.js +1 -1
- package/highlevel/methods/chats/transfer-chat-ownership.cjs +6 -17
- package/highlevel/methods/chats/transfer-chat-ownership.js +6 -17
- package/highlevel/methods/communities/ban-community-participant.cjs +30 -0
- package/highlevel/methods/communities/ban-community-participant.d.cts +20 -0
- package/highlevel/methods/communities/ban-community-participant.d.ts +20 -0
- package/highlevel/methods/communities/ban-community-participant.js +25 -0
- package/highlevel/methods/communities/create-community.cjs +29 -0
- package/highlevel/methods/communities/create-community.d.cts +22 -0
- package/highlevel/methods/communities/create-community.d.ts +22 -0
- package/highlevel/methods/communities/create-community.js +24 -0
- package/highlevel/methods/communities/get-community-link-requests.cjs +27 -0
- package/highlevel/methods/communities/get-community-link-requests.d.cts +17 -0
- package/highlevel/methods/communities/get-community-link-requests.d.ts +17 -0
- package/highlevel/methods/communities/get-community-link-requests.js +22 -0
- package/highlevel/methods/communities/get-community-participant-chats.cjs +24 -0
- package/highlevel/methods/communities/get-community-participant-chats.d.cts +17 -0
- package/highlevel/methods/communities/get-community-participant-chats.d.ts +17 -0
- package/highlevel/methods/communities/get-community-participant-chats.js +19 -0
- package/highlevel/methods/communities/get-joined-communities.cjs +21 -0
- package/highlevel/methods/communities/get-joined-communities.d.cts +6 -0
- package/highlevel/methods/communities/get-joined-communities.d.ts +6 -0
- package/highlevel/methods/communities/get-joined-communities.js +16 -0
- package/highlevel/methods/communities/hide-community-link-request.cjs +30 -0
- package/highlevel/methods/communities/hide-community-link-request.d.cts +22 -0
- package/highlevel/methods/communities/hide-community-link-request.d.ts +22 -0
- package/highlevel/methods/communities/hide-community-link-request.js +25 -0
- package/highlevel/methods/communities/link-community-peer.cjs +32 -0
- package/highlevel/methods/communities/link-community-peer.d.cts +22 -0
- package/highlevel/methods/communities/link-community-peer.d.ts +22 -0
- package/highlevel/methods/communities/link-community-peer.js +27 -0
- package/highlevel/methods/communities/toggle-community-collapsed.cjs +18 -0
- package/highlevel/methods/communities/toggle-community-collapsed.d.cts +16 -0
- package/highlevel/methods/communities/toggle-community-collapsed.d.ts +16 -0
- package/highlevel/methods/communities/toggle-community-collapsed.js +13 -0
- package/highlevel/methods/ephemeral/delete-all-welcome-messages.cjs +17 -0
- package/highlevel/methods/ephemeral/delete-all-welcome-messages.d.cts +8 -0
- package/highlevel/methods/ephemeral/delete-all-welcome-messages.d.ts +8 -0
- package/highlevel/methods/ephemeral/delete-all-welcome-messages.js +12 -0
- package/highlevel/methods/ephemeral/delete-ephemeral-message.cjs +20 -0
- package/highlevel/methods/ephemeral/delete-ephemeral-message.d.cts +13 -0
- package/highlevel/methods/ephemeral/delete-ephemeral-message.d.ts +13 -0
- package/highlevel/methods/ephemeral/delete-ephemeral-message.js +15 -0
- package/highlevel/methods/ephemeral/delete-welcome-message.cjs +18 -0
- package/highlevel/methods/ephemeral/delete-welcome-message.d.cts +9 -0
- package/highlevel/methods/ephemeral/delete-welcome-message.d.ts +9 -0
- package/highlevel/methods/ephemeral/delete-welcome-message.js +13 -0
- package/highlevel/methods/ephemeral/edit-ephemeral-message.cjs +41 -0
- package/highlevel/methods/ephemeral/edit-ephemeral-message.d.cts +39 -0
- package/highlevel/methods/ephemeral/edit-ephemeral-message.d.ts +39 -0
- package/highlevel/methods/ephemeral/edit-ephemeral-message.js +36 -0
- package/highlevel/methods/ephemeral/find-in-update.cjs +27 -0
- package/highlevel/methods/ephemeral/find-in-update.d.cts +8 -0
- package/highlevel/methods/ephemeral/find-in-update.d.ts +8 -0
- package/highlevel/methods/ephemeral/find-in-update.js +22 -0
- package/highlevel/methods/ephemeral/get-ephemeral-callback-answer.cjs +31 -0
- package/highlevel/methods/ephemeral/get-ephemeral-callback-answer.d.cts +29 -0
- package/highlevel/methods/ephemeral/get-ephemeral-callback-answer.d.ts +29 -0
- package/highlevel/methods/ephemeral/get-ephemeral-callback-answer.js +26 -0
- package/highlevel/methods/ephemeral/get-welcome-messages.cjs +29 -0
- package/highlevel/methods/ephemeral/get-welcome-messages.d.cts +8 -0
- package/highlevel/methods/ephemeral/get-welcome-messages.d.ts +8 -0
- package/highlevel/methods/ephemeral/get-welcome-messages.js +24 -0
- package/highlevel/methods/ephemeral/send-ephemeral-message.cjs +48 -0
- package/highlevel/methods/ephemeral/send-ephemeral-message.d.cts +47 -0
- package/highlevel/methods/ephemeral/send-ephemeral-message.d.ts +47 -0
- package/highlevel/methods/ephemeral/send-ephemeral-message.js +43 -0
- package/highlevel/methods/files/download-iterable.cjs +7 -2
- package/highlevel/methods/files/download-iterable.js +7 -2
- package/highlevel/methods/files/download-iterable.test.d.cts +1 -0
- package/highlevel/methods/files/download-iterable.test.d.ts +1 -0
- package/highlevel/methods/files/download-stream.cjs +5 -6
- package/highlevel/methods/files/download-stream.js +5 -6
- package/highlevel/methods/files/normalize-input-media.cjs +25 -4
- package/highlevel/methods/files/normalize-input-media.js +25 -4
- package/highlevel/methods/forums/create-forum-topic.d.cts +7 -0
- package/highlevel/methods/forums/create-forum-topic.d.ts +7 -0
- package/highlevel/methods/forums/delete-forum-topic-history.d.cts +1 -1
- package/highlevel/methods/forums/delete-forum-topic-history.d.ts +1 -1
- package/highlevel/methods/forums/edit-forum-topic.cjs +2 -2
- package/highlevel/methods/forums/edit-forum-topic.d.cts +2 -2
- package/highlevel/methods/forums/edit-forum-topic.d.ts +2 -2
- package/highlevel/methods/forums/edit-forum-topic.js +2 -2
- package/highlevel/methods/forums/get-forum-topics-by-id.cjs +5 -1
- package/highlevel/methods/forums/get-forum-topics-by-id.d.cts +9 -1
- package/highlevel/methods/forums/get-forum-topics-by-id.d.ts +9 -1
- package/highlevel/methods/forums/get-forum-topics-by-id.js +5 -1
- package/highlevel/methods/forums/get-forum-topics-by-id.test.d.cts +1 -0
- package/highlevel/methods/forums/get-forum-topics-by-id.test.d.ts +1 -0
- package/highlevel/methods/forums/get-forum-topics.cjs +1 -1
- package/highlevel/methods/forums/get-forum-topics.js +1 -1
- package/highlevel/methods/forums/toggle-forum-topic-closed.cjs +1 -1
- package/highlevel/methods/forums/toggle-forum-topic-closed.d.cts +1 -1
- package/highlevel/methods/forums/toggle-forum-topic-closed.d.ts +1 -1
- package/highlevel/methods/forums/toggle-forum-topic-closed.js +1 -1
- package/highlevel/methods/forums/toggle-forum-topic-pinned.d.cts +1 -1
- package/highlevel/methods/forums/toggle-forum-topic-pinned.d.ts +1 -1
- package/highlevel/methods/forums/toggle-general-topic-hidden.cjs +3 -3
- package/highlevel/methods/forums/toggle-general-topic-hidden.js +4 -4
- package/highlevel/methods/gifts/buy-resale-gift.cjs +5 -2
- package/highlevel/methods/gifts/buy-resale-gift.d.cts +11 -1
- package/highlevel/methods/gifts/buy-resale-gift.d.ts +11 -1
- package/highlevel/methods/gifts/buy-resale-gift.js +5 -2
- package/highlevel/methods/messages/forward-messages.cjs +1 -0
- package/highlevel/methods/messages/forward-messages.d.cts +2 -0
- package/highlevel/methods/messages/forward-messages.d.ts +2 -0
- package/highlevel/methods/messages/forward-messages.js +1 -0
- package/highlevel/methods/messages/normalize-rich-message.cjs +3 -0
- package/highlevel/methods/messages/normalize-rich-message.js +3 -0
- package/highlevel/methods/messages/send-common.d.cts +7 -1
- package/highlevel/methods/messages/send-common.d.ts +7 -1
- package/highlevel/methods/messages/send-text.cjs +70 -35
- package/highlevel/methods/messages/send-text.js +70 -35
- package/highlevel/methods/messages/send-typing.d.cts +3 -3
- package/highlevel/methods/messages/send-typing.d.ts +3 -3
- package/highlevel/methods/messages/set-typing.cjs +1 -1
- package/highlevel/methods/messages/set-typing.d.cts +2 -2
- package/highlevel/methods/messages/set-typing.d.ts +2 -2
- package/highlevel/methods/messages/set-typing.js +1 -1
- package/highlevel/methods/users/resolve-peer.cjs +11 -1
- package/highlevel/methods/users/resolve-peer.js +11 -1
- package/highlevel/methods.d.cts +19 -0
- package/highlevel/methods.d.ts +19 -0
- package/highlevel/storage/service/peers.cjs +25 -0
- package/highlevel/storage/service/peers.js +25 -0
- package/highlevel/storage/service/peers.test.d.cts +1 -0
- package/highlevel/storage/service/peers.test.d.ts +1 -0
- package/highlevel/types/bots/keyboards/builder.cjs +5 -5
- package/highlevel/types/bots/keyboards/builder.d.cts +8 -9
- package/highlevel/types/bots/keyboards/builder.d.ts +8 -9
- package/highlevel/types/bots/keyboards/builder.js +5 -5
- package/highlevel/types/bots/keyboards/factories.cjs +51 -103
- package/highlevel/types/bots/keyboards/factories.d.cts +58 -89
- package/highlevel/types/bots/keyboards/factories.d.ts +58 -89
- package/highlevel/types/bots/keyboards/factories.js +51 -103
- package/highlevel/types/bots/keyboards/index.d.cts +3 -3
- package/highlevel/types/bots/keyboards/index.d.ts +3 -3
- package/highlevel/types/bots/keyboards/normalize.cjs +131 -0
- package/highlevel/types/bots/keyboards/normalize.d.cts +10 -0
- package/highlevel/types/bots/keyboards/normalize.d.ts +10 -0
- package/highlevel/types/bots/keyboards/normalize.js +126 -0
- package/highlevel/types/bots/keyboards/types.d.cts +160 -4
- package/highlevel/types/bots/keyboards/types.d.ts +160 -4
- package/highlevel/types/conversation.cjs +8 -0
- package/highlevel/types/conversation.d.cts +1 -0
- package/highlevel/types/conversation.d.ts +1 -0
- package/highlevel/types/conversation.js +10 -2
- package/highlevel/types/conversation.test.d.cts +1 -0
- package/highlevel/types/conversation.test.d.ts +1 -0
- package/highlevel/types/messages/dialog.cjs +8 -1
- package/highlevel/types/messages/dialog.d.cts +3 -0
- package/highlevel/types/messages/dialog.d.ts +3 -0
- package/highlevel/types/messages/dialog.js +8 -1
- package/highlevel/types/messages/dialog.test.d.cts +1 -0
- package/highlevel/types/messages/dialog.test.d.ts +1 -0
- package/highlevel/types/messages/ephemeral-message.cjs +135 -0
- package/highlevel/types/messages/ephemeral-message.d.cts +75 -0
- package/highlevel/types/messages/ephemeral-message.d.ts +75 -0
- package/highlevel/types/messages/ephemeral-message.js +130 -0
- package/highlevel/types/messages/index.d.cts +1 -0
- package/highlevel/types/messages/index.d.ts +1 -0
- package/highlevel/types/messages/message-action.cjs +14 -1
- package/highlevel/types/messages/message-action.d.cts +18 -1
- package/highlevel/types/messages/message-action.d.ts +18 -1
- package/highlevel/types/messages/message-action.js +14 -1
- package/highlevel/types/messages/message.cjs +7 -2
- package/highlevel/types/messages/message.d.cts +2 -2
- package/highlevel/types/messages/message.d.ts +2 -2
- package/highlevel/types/messages/message.js +8 -3
- package/highlevel/types/messages/replied-message.cjs +5 -1
- package/highlevel/types/messages/replied-message.d.cts +5 -1
- package/highlevel/types/messages/replied-message.d.ts +5 -1
- package/highlevel/types/messages/replied-message.js +5 -1
- package/highlevel/types/messages/rich/inner.cjs +37 -0
- package/highlevel/types/messages/rich/inner.d.cts +19 -0
- package/highlevel/types/messages/rich/inner.d.ts +19 -0
- package/highlevel/types/messages/rich/inner.js +37 -0
- package/highlevel/types/peers/chat.cjs +23 -3
- package/highlevel/types/peers/chat.d.cts +8 -3
- package/highlevel/types/peers/chat.d.ts +8 -3
- package/highlevel/types/peers/chat.js +24 -4
- package/highlevel/types/peers/community-peer.cjs +60 -0
- package/highlevel/types/peers/community-peer.d.cts +37 -0
- package/highlevel/types/peers/community-peer.d.ts +37 -0
- package/highlevel/types/peers/community-peer.js +55 -0
- package/highlevel/types/peers/full-chat.cjs +24 -5
- package/highlevel/types/peers/full-chat.d.cts +7 -0
- package/highlevel/types/peers/full-chat.d.ts +7 -0
- package/highlevel/types/peers/full-chat.js +24 -5
- package/highlevel/types/peers/index.d.cts +1 -0
- package/highlevel/types/peers/index.d.ts +1 -0
- package/highlevel/types/peers/peer.cjs +2 -0
- package/highlevel/types/peers/peer.js +2 -0
- package/highlevel/types/peers/typing-status.d.cts +4 -1
- package/highlevel/types/peers/typing-status.d.ts +4 -1
- package/highlevel/types/peers/user.cjs +6 -0
- package/highlevel/types/peers/user.d.cts +2 -0
- package/highlevel/types/peers/user.d.ts +2 -0
- package/highlevel/types/peers/user.js +6 -0
- package/highlevel/types/updates/delete-ephemeral-messages-update.cjs +27 -0
- package/highlevel/types/updates/delete-ephemeral-messages-update.d.cts +15 -0
- package/highlevel/types/updates/delete-ephemeral-messages-update.d.ts +15 -0
- package/highlevel/types/updates/delete-ephemeral-messages-update.js +22 -0
- package/highlevel/types/updates/ephemeral-callback-query.cjs +69 -0
- package/highlevel/types/updates/ephemeral-callback-query.d.cts +44 -0
- package/highlevel/types/updates/ephemeral-callback-query.d.ts +44 -0
- package/highlevel/types/updates/ephemeral-callback-query.js +64 -0
- package/highlevel/types/updates/index.d.cts +16 -2
- package/highlevel/types/updates/index.d.ts +16 -2
- package/highlevel/types/updates/parse-update.cjs +12 -1
- package/highlevel/types/updates/parse-update.js +12 -1
- package/highlevel/types/updates/user-typing-update.cjs +18 -0
- package/highlevel/types/updates/user-typing-update.d.cts +9 -0
- package/highlevel/types/updates/user-typing-update.d.ts +9 -0
- package/highlevel/types/updates/user-typing-update.js +18 -0
- package/highlevel/updates/manager.cjs +71 -41
- package/highlevel/updates/manager.d.cts +1 -0
- package/highlevel/updates/manager.d.ts +1 -0
- package/highlevel/updates/manager.js +71 -41
- package/highlevel/updates/manager.test.d.cts +1 -0
- package/highlevel/updates/manager.test.d.ts +1 -0
- package/highlevel/utils/stream-utils.cjs +8 -4
- package/highlevel/utils/stream-utils.js +8 -4
- package/highlevel/utils/stream-utils.test.d.cts +1 -0
- package/highlevel/utils/stream-utils.test.d.ts +1 -0
- package/highlevel/utils/walk-page-blocks.cjs +9 -0
- package/highlevel/utils/walk-page-blocks.js +9 -0
- package/index.cjs +10 -0
- package/index.js +11 -1
- package/methods.cjs +33 -0
- package/methods.js +33 -0
- package/network/client.cjs +4 -3
- package/network/client.d.cts +1 -0
- package/network/client.d.ts +1 -0
- package/network/client.js +4 -3
- package/network/middlewares/flood-waiter.cjs +2 -2
- package/network/middlewares/flood-waiter.js +2 -2
- package/network/middlewares/internal-errors.cjs +1 -1
- package/network/middlewares/internal-errors.js +1 -1
- package/network/middlewares/media-throttle.cjs +1 -1
- package/network/middlewares/media-throttle.js +1 -1
- package/network/mtproto-session.cjs +9 -2
- package/network/mtproto-session.d.cts +3 -1
- package/network/mtproto-session.d.ts +3 -1
- package/network/mtproto-session.js +9 -2
- package/network/mtproxy/index.cjs +4 -3
- package/network/mtproxy/index.d.cts +2 -2
- package/network/mtproxy/index.d.ts +2 -2
- package/network/mtproxy/index.js +4 -3
- package/network/network-manager.cjs +44 -16
- package/network/network-manager.d.cts +10 -3
- package/network/network-manager.d.ts +10 -3
- package/network/network-manager.js +45 -17
- package/network/network-manager.test.d.cts +1 -0
- package/network/network-manager.test.d.ts +1 -0
- package/network/persistent-connection.cjs +10 -2
- package/network/persistent-connection.js +10 -2
- package/network/session-connection.cjs +15 -6
- package/network/session-connection.js +15 -6
- package/network/session-connection.test.d.cts +1 -0
- package/network/session-connection.test.d.ts +1 -0
- package/network/transports/abstract.cjs +16 -0
- package/network/transports/abstract.d.cts +8 -2
- package/network/transports/abstract.d.ts +8 -2
- package/network/transports/abstract.js +17 -1
- package/network/transports/obfuscated.cjs +3 -1
- package/network/transports/obfuscated.js +3 -1
- package/package.json +6 -6
- package/tl/api-schema.json +1 -1
- package/tl/binary/reader.cjs +221 -103
- package/tl/binary/reader.js +221 -103
- package/tl/binary/writer.cjs +693 -277
- package/tl/binary/writer.js +693 -277
- package/tl/compat/reader.cjs +93 -0
- package/tl/compat/reader.js +93 -0
- package/tl/index.d.cts +12529 -4762
- package/tl/index.d.ts +12529 -4762
- package/tl/inner-tl.cjs +90 -24
- package/tl/inner-tl.js +90 -24
- package/tl/raw-errors.json +1 -1
- package/tl/rpc-error.test.d.cts +1 -0
- package/tl/rpc-error.test.d.ts +1 -0
- package/utils/abort-signal.cjs +1 -12
- package/utils/abort-signal.js +1 -12
- package/utils/abort-signal.test.d.cts +1 -0
- package/utils/abort-signal.test.d.ts +1 -0
- package/utils/binary/compat.cjs +189 -29
- package/utils/binary/compat.js +189 -29
- package/utils/early-timer.cjs +3 -11
- package/utils/early-timer.js +3 -11
- package/utils/early-timer.test.d.cts +1 -0
- package/utils/early-timer.test.d.ts +1 -0
- package/utils/function-utils.cjs +9 -4
- package/utils/function-utils.js +9 -4
- package/utils/links/bots.cjs +10 -2
- package/utils/links/bots.js +10 -2
- package/utils/peer-utils.cjs +8 -0
- package/utils/peer-utils.js +8 -0
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { tl } from '../../../../tl/index.js';
|
|
2
|
+
import { BotKeyboardButton, BotKeyboardButtonStyle, InputInlineKeyboardButton, InputReplyKeyboardButton } from './types.js';
|
|
3
|
+
/** @internal */
|
|
4
|
+
export declare function _toRichButtonStyle(style?: BotKeyboardButtonStyle): tl.RawRichButtonStyle | undefined;
|
|
5
|
+
/** @internal */
|
|
6
|
+
export declare function _toInlineButtonType(btn: BotKeyboardButton): tl.TypeInlineButtonType;
|
|
7
|
+
/** @internal */
|
|
8
|
+
export declare function _toInlineButton(btn: InputInlineKeyboardButton): tl.TypeKeyboardInlineButton;
|
|
9
|
+
/** @internal */
|
|
10
|
+
export declare function _toReplyButton(btn: InputReplyKeyboardButton): tl.TypeKeyboardButton;
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { MtArgumentError } from "../../../../types/errors.js";
|
|
2
|
+
function toKeyboardStyle(style) {
|
|
3
|
+
if (!style) return void 0;
|
|
4
|
+
return {
|
|
5
|
+
_: "keyboardButtonStyle",
|
|
6
|
+
bgPrimary: style.bgPrimary,
|
|
7
|
+
bgDanger: style.bgDanger,
|
|
8
|
+
bgSuccess: style.bgSuccess,
|
|
9
|
+
icon: style.icon
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
function _toRichButtonStyle(style) {
|
|
13
|
+
if (!style) return void 0;
|
|
14
|
+
return {
|
|
15
|
+
_: "richButtonStyle",
|
|
16
|
+
bgPrimary: style.bgPrimary,
|
|
17
|
+
bgDanger: style.bgDanger,
|
|
18
|
+
bgSuccess: style.bgSuccess,
|
|
19
|
+
link: style.link
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
function _toInlineButtonType(btn) {
|
|
23
|
+
switch (btn.type) {
|
|
24
|
+
case "url":
|
|
25
|
+
return { _: "inlineButtonTypeUrl", url: btn.url };
|
|
26
|
+
case "webview":
|
|
27
|
+
return { _: "inlineButtonTypeWebView", url: btn.url };
|
|
28
|
+
case "callback":
|
|
29
|
+
return { _: "inlineButtonTypeCallback", data: btn.data, requiresPassword: btn.requiresPassword };
|
|
30
|
+
case "switch_inline":
|
|
31
|
+
return {
|
|
32
|
+
_: "inlineButtonTypeSwitchInline",
|
|
33
|
+
samePeer: btn.currentChat,
|
|
34
|
+
query: btn.query ?? "",
|
|
35
|
+
peerTypes: btn.peerTypes
|
|
36
|
+
};
|
|
37
|
+
case "game":
|
|
38
|
+
return { _: "inlineButtonTypeGame" };
|
|
39
|
+
case "pay":
|
|
40
|
+
return { _: "inlineButtonTypeBuy" };
|
|
41
|
+
case "url_auth":
|
|
42
|
+
return {
|
|
43
|
+
_: "inputInlineButtonTypeUrlAuth",
|
|
44
|
+
url: btn.url,
|
|
45
|
+
fwdText: btn.fwdText,
|
|
46
|
+
requestWriteAccess: btn.requestWriteAccess,
|
|
47
|
+
bot: btn.bot ?? { _: "inputUserSelf" }
|
|
48
|
+
};
|
|
49
|
+
case "user_profile":
|
|
50
|
+
return { _: "inputInlineButtonTypeUserProfile", userId: btn.user };
|
|
51
|
+
case "copy":
|
|
52
|
+
return { _: "inlineButtonTypeCopy", copyText: btn.copyText ?? btn.text };
|
|
53
|
+
case "disabled":
|
|
54
|
+
return { _: "inlineButtonTypeDisabled" };
|
|
55
|
+
default:
|
|
56
|
+
throw new MtArgumentError(`"${btn.type}" buttons can only be used in reply keyboards`);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
function toReplyButtonType(btn) {
|
|
60
|
+
switch (btn.type) {
|
|
61
|
+
case "text":
|
|
62
|
+
return { _: "buttonTypeDefault" };
|
|
63
|
+
case "request_contact":
|
|
64
|
+
return { _: "buttonTypeRequestPhone" };
|
|
65
|
+
case "request_geo":
|
|
66
|
+
return { _: "buttonTypeRequestGeoLocation" };
|
|
67
|
+
case "request_poll":
|
|
68
|
+
return { _: "buttonTypeRequestPoll", quiz: btn.quiz };
|
|
69
|
+
case "webview":
|
|
70
|
+
return { _: "buttonTypeSimpleWebView", url: btn.url };
|
|
71
|
+
case "request_peer":
|
|
72
|
+
if (btn.nameRequested || btn.usernameRequested || btn.photoRequested) {
|
|
73
|
+
return {
|
|
74
|
+
_: "inputButtonTypeRequestPeer",
|
|
75
|
+
nameRequested: btn.nameRequested,
|
|
76
|
+
usernameRequested: btn.usernameRequested,
|
|
77
|
+
photoRequested: btn.photoRequested,
|
|
78
|
+
buttonId: btn.buttonId,
|
|
79
|
+
peerType: btn.peerType,
|
|
80
|
+
maxQuantity: btn.count ?? 1
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
return {
|
|
84
|
+
_: "buttonTypeRequestPeer",
|
|
85
|
+
buttonId: btn.buttonId,
|
|
86
|
+
peerType: btn.peerType,
|
|
87
|
+
maxQuantity: btn.count ?? 1
|
|
88
|
+
};
|
|
89
|
+
default:
|
|
90
|
+
throw new MtArgumentError(`"${btn.type}" buttons can only be used in inline keyboards`);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
function _toInlineButton(btn) {
|
|
94
|
+
if ("_" in btn) {
|
|
95
|
+
if (btn._ !== "keyboardInlineButton") {
|
|
96
|
+
throw new MtArgumentError("reply keyboard buttons cannot be used in inline keyboards");
|
|
97
|
+
}
|
|
98
|
+
return btn;
|
|
99
|
+
}
|
|
100
|
+
return {
|
|
101
|
+
_: "keyboardInlineButton",
|
|
102
|
+
text: btn.text,
|
|
103
|
+
type: _toInlineButtonType(btn),
|
|
104
|
+
style: toKeyboardStyle(btn.style)
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
function _toReplyButton(btn) {
|
|
108
|
+
if ("_" in btn) {
|
|
109
|
+
if (btn._ !== "keyboardButton") {
|
|
110
|
+
throw new MtArgumentError("inline keyboard buttons cannot be used in reply keyboards");
|
|
111
|
+
}
|
|
112
|
+
return btn;
|
|
113
|
+
}
|
|
114
|
+
return {
|
|
115
|
+
_: "keyboardButton",
|
|
116
|
+
text: btn.text,
|
|
117
|
+
type: toReplyButtonType(btn),
|
|
118
|
+
style: toKeyboardStyle(btn.style)
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
export {
|
|
122
|
+
_toInlineButton,
|
|
123
|
+
_toInlineButtonType,
|
|
124
|
+
_toReplyButton,
|
|
125
|
+
_toRichButtonStyle
|
|
126
|
+
};
|
|
@@ -1,13 +1,166 @@
|
|
|
1
1
|
import { tl } from '../../../../tl/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Style of a bot keyboard button.
|
|
4
|
+
*
|
|
5
|
+
* Note that not every field is supported everywhere: {@link icon} is only
|
|
6
|
+
* used in keyboards, and {@link link} is only used in rich messages.
|
|
7
|
+
* Unsupported fields are silently dropped.
|
|
8
|
+
*/
|
|
9
|
+
export interface BotKeyboardButtonStyle {
|
|
10
|
+
/** Render the button with the primary background color */
|
|
11
|
+
bgPrimary?: boolean;
|
|
12
|
+
/** Render the button with the "danger" background color */
|
|
13
|
+
bgDanger?: boolean;
|
|
14
|
+
/** Render the button with the "success" background color */
|
|
15
|
+
bgSuccess?: boolean;
|
|
16
|
+
/** Custom emoji to be shown on the button (keyboards only) */
|
|
17
|
+
icon?: tl.Long;
|
|
18
|
+
/** Render the button as a link (rich messages only) */
|
|
19
|
+
link?: boolean;
|
|
20
|
+
}
|
|
21
|
+
interface BotKeyboardButtonBase {
|
|
22
|
+
/** Text of the button */
|
|
23
|
+
text: string;
|
|
24
|
+
/** Style of the button */
|
|
25
|
+
style?: BotKeyboardButtonStyle;
|
|
26
|
+
}
|
|
27
|
+
/** A text-only button (reply keyboards only) */
|
|
28
|
+
export interface TextButton extends BotKeyboardButtonBase {
|
|
29
|
+
readonly type: 'text';
|
|
30
|
+
}
|
|
31
|
+
/** A button requesting the user's phone number (reply keyboards only) */
|
|
32
|
+
export interface RequestContactButton extends BotKeyboardButtonBase {
|
|
33
|
+
readonly type: 'request_contact';
|
|
34
|
+
}
|
|
35
|
+
/** A button requesting the user's geolocation (reply keyboards only) */
|
|
36
|
+
export interface RequestGeoButton extends BotKeyboardButtonBase {
|
|
37
|
+
readonly type: 'request_geo';
|
|
38
|
+
}
|
|
39
|
+
/** A button requesting the user to create a poll (reply keyboards only) */
|
|
40
|
+
export interface RequestPollButton extends BotKeyboardButtonBase {
|
|
41
|
+
readonly type: 'request_poll';
|
|
42
|
+
/** If set, only quiz polls can be sent */
|
|
43
|
+
quiz?: boolean;
|
|
44
|
+
}
|
|
45
|
+
/** A button requesting the user to choose a peer (reply keyboards only) */
|
|
46
|
+
export interface RequestPeerButton extends BotKeyboardButtonBase {
|
|
47
|
+
readonly type: 'request_peer';
|
|
48
|
+
/** ID of the button, later passed to the service message */
|
|
49
|
+
buttonId: number;
|
|
50
|
+
/** Peer type, along with filters */
|
|
51
|
+
peerType: tl.TypeRequestPeerType;
|
|
52
|
+
/**
|
|
53
|
+
* Maximum number of peers to be selected
|
|
54
|
+
*
|
|
55
|
+
* @default 1
|
|
56
|
+
*/
|
|
57
|
+
count?: number;
|
|
58
|
+
/** Whether to request the name of the peer */
|
|
59
|
+
nameRequested?: boolean;
|
|
60
|
+
/** Whether to request the username of the peer */
|
|
61
|
+
usernameRequested?: boolean;
|
|
62
|
+
/** Whether to request the photo of the peer */
|
|
63
|
+
photoRequested?: boolean;
|
|
64
|
+
}
|
|
65
|
+
/** A button opening a webview. Usable in both inline and reply keyboards */
|
|
66
|
+
export interface WebViewButton extends BotKeyboardButtonBase {
|
|
67
|
+
readonly type: 'webview';
|
|
68
|
+
/** URL of the webview */
|
|
69
|
+
url: string;
|
|
70
|
+
}
|
|
71
|
+
/** A button opening a link */
|
|
72
|
+
export interface UrlButton extends BotKeyboardButtonBase {
|
|
73
|
+
readonly type: 'url';
|
|
74
|
+
/** URL to open */
|
|
75
|
+
url: string;
|
|
76
|
+
}
|
|
77
|
+
/** A button sending a callback query to the bot */
|
|
78
|
+
export interface CallbackButton extends BotKeyboardButtonBase {
|
|
79
|
+
readonly type: 'callback';
|
|
80
|
+
/** Callback data (1-64 bytes) */
|
|
81
|
+
data: Uint8Array;
|
|
82
|
+
/** Whether the user should verify their identity by entering their 2FA password */
|
|
83
|
+
requiresPassword?: boolean;
|
|
84
|
+
}
|
|
85
|
+
/** A button prompting the user to switch to inline mode */
|
|
86
|
+
export interface SwitchInlineButton extends BotKeyboardButtonBase {
|
|
87
|
+
readonly type: 'switch_inline';
|
|
88
|
+
/** Inline query (can be empty) */
|
|
89
|
+
query?: string;
|
|
90
|
+
/** Whether to insert the query in the current chat instead of prompting for one */
|
|
91
|
+
currentChat?: boolean;
|
|
92
|
+
/** Types of the peers that can be chosen by the user */
|
|
93
|
+
peerTypes?: tl.TypeInlineQueryPeerType[];
|
|
94
|
+
}
|
|
95
|
+
/** A button starting a game. Must be the first button in the first row */
|
|
96
|
+
export interface GameButton extends BotKeyboardButtonBase {
|
|
97
|
+
readonly type: 'game';
|
|
98
|
+
}
|
|
99
|
+
/** A button paying for a product. Must be the first button in the first row */
|
|
100
|
+
export interface PayButton extends BotKeyboardButtonBase {
|
|
101
|
+
readonly type: 'pay';
|
|
102
|
+
}
|
|
103
|
+
/** A button authorizing the user on a website */
|
|
104
|
+
export interface UrlAuthButton extends BotKeyboardButtonBase {
|
|
105
|
+
readonly type: 'url_auth';
|
|
106
|
+
/** Authorization URL */
|
|
107
|
+
url: string;
|
|
108
|
+
/** Button label when forwarded */
|
|
109
|
+
fwdText?: string;
|
|
110
|
+
/** Whether to request the permission for the bot to send messages to the user */
|
|
111
|
+
requestWriteAccess?: boolean;
|
|
112
|
+
/**
|
|
113
|
+
* Bot which will be used for user authorization.
|
|
114
|
+
*
|
|
115
|
+
* @default current bot
|
|
116
|
+
*/
|
|
117
|
+
bot?: tl.TypeInputUser;
|
|
118
|
+
}
|
|
119
|
+
/** A button opening a user's profile */
|
|
120
|
+
export interface UserProfileButton extends BotKeyboardButtonBase {
|
|
121
|
+
readonly type: 'user_profile';
|
|
122
|
+
/** User whose profile should be opened */
|
|
123
|
+
user: tl.TypeInputUser;
|
|
124
|
+
}
|
|
125
|
+
/** A button copying text to the user's clipboard */
|
|
126
|
+
export interface CopyButton extends BotKeyboardButtonBase {
|
|
127
|
+
readonly type: 'copy';
|
|
128
|
+
/** Text to be copied (defaults to the button text) */
|
|
129
|
+
copyText?: string;
|
|
130
|
+
}
|
|
131
|
+
/** A button that does nothing when pressed */
|
|
132
|
+
export interface DisabledButton extends BotKeyboardButtonBase {
|
|
133
|
+
readonly type: 'disabled';
|
|
134
|
+
}
|
|
135
|
+
/** A button usable in reply keyboards */
|
|
136
|
+
export type ReplyBotKeyboardButton = TextButton | RequestContactButton | RequestGeoButton | RequestPollButton | RequestPeerButton | WebViewButton;
|
|
137
|
+
/** A button usable in inline keyboards (and in rich messages) */
|
|
138
|
+
export type InlineBotKeyboardButton = WebViewButton | UrlButton | CallbackButton | SwitchInlineButton | GameButton | PayButton | UrlAuthButton | UserProfileButton | CopyButton | DisabledButton;
|
|
139
|
+
/** A bot keyboard button */
|
|
140
|
+
export type BotKeyboardButton = ReplyBotKeyboardButton | InlineBotKeyboardButton;
|
|
141
|
+
/**
|
|
142
|
+
* A button accepted by the reply keyboard factories.
|
|
143
|
+
*
|
|
144
|
+
* Raw TL objects are passed through as-is.
|
|
145
|
+
*/
|
|
146
|
+
export type InputReplyKeyboardButton = ReplyBotKeyboardButton | tl.TypeKeyboardButton;
|
|
147
|
+
/**
|
|
148
|
+
* A button accepted by the inline keyboard and rich message factories.
|
|
149
|
+
*
|
|
150
|
+
* Raw TL objects are passed through as-is.
|
|
151
|
+
*/
|
|
152
|
+
export type InputInlineKeyboardButton = InlineBotKeyboardButton | tl.TypeKeyboardInlineButton;
|
|
153
|
+
/** A button accepted by any of the keyboard factories */
|
|
154
|
+
export type InputBotKeyboardButton = InputReplyKeyboardButton | InputInlineKeyboardButton;
|
|
2
155
|
/**
|
|
3
156
|
* Reply keyboard markup
|
|
4
157
|
*/
|
|
5
|
-
export interface ReplyKeyboardMarkup extends Omit<tl.RawReplyKeyboardMarkup, '_' | 'rows'> {
|
|
158
|
+
export interface ReplyKeyboardMarkup<Button = InputReplyKeyboardButton> extends Omit<tl.RawReplyKeyboardMarkup, '_' | 'rows'> {
|
|
6
159
|
readonly type: 'reply';
|
|
7
160
|
/**
|
|
8
161
|
* Two-dimensional array of buttons
|
|
9
162
|
*/
|
|
10
|
-
readonly buttons:
|
|
163
|
+
readonly buttons: Button[][];
|
|
11
164
|
}
|
|
12
165
|
/**
|
|
13
166
|
* Hide previously sent bot keyboard
|
|
@@ -24,11 +177,14 @@ export interface ReplyKeyboardForceReply extends Omit<tl.RawReplyKeyboardForceRe
|
|
|
24
177
|
/**
|
|
25
178
|
* Inline keyboard markup
|
|
26
179
|
*/
|
|
27
|
-
export interface InlineKeyboardMarkup {
|
|
180
|
+
export interface InlineKeyboardMarkup<Button = InputInlineKeyboardButton> extends Omit<tl.RawReplyInlineMarkup, '_' | 'rows'> {
|
|
28
181
|
readonly type: 'inline';
|
|
29
182
|
/**
|
|
30
183
|
* Two-dimensional array of buttons
|
|
31
184
|
*/
|
|
32
|
-
readonly buttons:
|
|
185
|
+
readonly buttons: Button[][];
|
|
33
186
|
}
|
|
34
187
|
export type ReplyMarkup = ReplyKeyboardMarkup | ReplyKeyboardHide | ReplyKeyboardForceReply | InlineKeyboardMarkup | tl.TypeReplyMarkup;
|
|
188
|
+
/** Reply markup as parsed from an existing message */
|
|
189
|
+
export type ParsedReplyMarkup = ReplyKeyboardMarkup<tl.TypeKeyboardButton> | ReplyKeyboardHide | ReplyKeyboardForceReply | InlineKeyboardMarkup<tl.TypeKeyboardInlineButton>;
|
|
190
|
+
export {};
|
|
@@ -1,13 +1,166 @@
|
|
|
1
1
|
import { tl } from '../../../../tl/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Style of a bot keyboard button.
|
|
4
|
+
*
|
|
5
|
+
* Note that not every field is supported everywhere: {@link icon} is only
|
|
6
|
+
* used in keyboards, and {@link link} is only used in rich messages.
|
|
7
|
+
* Unsupported fields are silently dropped.
|
|
8
|
+
*/
|
|
9
|
+
export interface BotKeyboardButtonStyle {
|
|
10
|
+
/** Render the button with the primary background color */
|
|
11
|
+
bgPrimary?: boolean;
|
|
12
|
+
/** Render the button with the "danger" background color */
|
|
13
|
+
bgDanger?: boolean;
|
|
14
|
+
/** Render the button with the "success" background color */
|
|
15
|
+
bgSuccess?: boolean;
|
|
16
|
+
/** Custom emoji to be shown on the button (keyboards only) */
|
|
17
|
+
icon?: tl.Long;
|
|
18
|
+
/** Render the button as a link (rich messages only) */
|
|
19
|
+
link?: boolean;
|
|
20
|
+
}
|
|
21
|
+
interface BotKeyboardButtonBase {
|
|
22
|
+
/** Text of the button */
|
|
23
|
+
text: string;
|
|
24
|
+
/** Style of the button */
|
|
25
|
+
style?: BotKeyboardButtonStyle;
|
|
26
|
+
}
|
|
27
|
+
/** A text-only button (reply keyboards only) */
|
|
28
|
+
export interface TextButton extends BotKeyboardButtonBase {
|
|
29
|
+
readonly type: 'text';
|
|
30
|
+
}
|
|
31
|
+
/** A button requesting the user's phone number (reply keyboards only) */
|
|
32
|
+
export interface RequestContactButton extends BotKeyboardButtonBase {
|
|
33
|
+
readonly type: 'request_contact';
|
|
34
|
+
}
|
|
35
|
+
/** A button requesting the user's geolocation (reply keyboards only) */
|
|
36
|
+
export interface RequestGeoButton extends BotKeyboardButtonBase {
|
|
37
|
+
readonly type: 'request_geo';
|
|
38
|
+
}
|
|
39
|
+
/** A button requesting the user to create a poll (reply keyboards only) */
|
|
40
|
+
export interface RequestPollButton extends BotKeyboardButtonBase {
|
|
41
|
+
readonly type: 'request_poll';
|
|
42
|
+
/** If set, only quiz polls can be sent */
|
|
43
|
+
quiz?: boolean;
|
|
44
|
+
}
|
|
45
|
+
/** A button requesting the user to choose a peer (reply keyboards only) */
|
|
46
|
+
export interface RequestPeerButton extends BotKeyboardButtonBase {
|
|
47
|
+
readonly type: 'request_peer';
|
|
48
|
+
/** ID of the button, later passed to the service message */
|
|
49
|
+
buttonId: number;
|
|
50
|
+
/** Peer type, along with filters */
|
|
51
|
+
peerType: tl.TypeRequestPeerType;
|
|
52
|
+
/**
|
|
53
|
+
* Maximum number of peers to be selected
|
|
54
|
+
*
|
|
55
|
+
* @default 1
|
|
56
|
+
*/
|
|
57
|
+
count?: number;
|
|
58
|
+
/** Whether to request the name of the peer */
|
|
59
|
+
nameRequested?: boolean;
|
|
60
|
+
/** Whether to request the username of the peer */
|
|
61
|
+
usernameRequested?: boolean;
|
|
62
|
+
/** Whether to request the photo of the peer */
|
|
63
|
+
photoRequested?: boolean;
|
|
64
|
+
}
|
|
65
|
+
/** A button opening a webview. Usable in both inline and reply keyboards */
|
|
66
|
+
export interface WebViewButton extends BotKeyboardButtonBase {
|
|
67
|
+
readonly type: 'webview';
|
|
68
|
+
/** URL of the webview */
|
|
69
|
+
url: string;
|
|
70
|
+
}
|
|
71
|
+
/** A button opening a link */
|
|
72
|
+
export interface UrlButton extends BotKeyboardButtonBase {
|
|
73
|
+
readonly type: 'url';
|
|
74
|
+
/** URL to open */
|
|
75
|
+
url: string;
|
|
76
|
+
}
|
|
77
|
+
/** A button sending a callback query to the bot */
|
|
78
|
+
export interface CallbackButton extends BotKeyboardButtonBase {
|
|
79
|
+
readonly type: 'callback';
|
|
80
|
+
/** Callback data (1-64 bytes) */
|
|
81
|
+
data: Uint8Array;
|
|
82
|
+
/** Whether the user should verify their identity by entering their 2FA password */
|
|
83
|
+
requiresPassword?: boolean;
|
|
84
|
+
}
|
|
85
|
+
/** A button prompting the user to switch to inline mode */
|
|
86
|
+
export interface SwitchInlineButton extends BotKeyboardButtonBase {
|
|
87
|
+
readonly type: 'switch_inline';
|
|
88
|
+
/** Inline query (can be empty) */
|
|
89
|
+
query?: string;
|
|
90
|
+
/** Whether to insert the query in the current chat instead of prompting for one */
|
|
91
|
+
currentChat?: boolean;
|
|
92
|
+
/** Types of the peers that can be chosen by the user */
|
|
93
|
+
peerTypes?: tl.TypeInlineQueryPeerType[];
|
|
94
|
+
}
|
|
95
|
+
/** A button starting a game. Must be the first button in the first row */
|
|
96
|
+
export interface GameButton extends BotKeyboardButtonBase {
|
|
97
|
+
readonly type: 'game';
|
|
98
|
+
}
|
|
99
|
+
/** A button paying for a product. Must be the first button in the first row */
|
|
100
|
+
export interface PayButton extends BotKeyboardButtonBase {
|
|
101
|
+
readonly type: 'pay';
|
|
102
|
+
}
|
|
103
|
+
/** A button authorizing the user on a website */
|
|
104
|
+
export interface UrlAuthButton extends BotKeyboardButtonBase {
|
|
105
|
+
readonly type: 'url_auth';
|
|
106
|
+
/** Authorization URL */
|
|
107
|
+
url: string;
|
|
108
|
+
/** Button label when forwarded */
|
|
109
|
+
fwdText?: string;
|
|
110
|
+
/** Whether to request the permission for the bot to send messages to the user */
|
|
111
|
+
requestWriteAccess?: boolean;
|
|
112
|
+
/**
|
|
113
|
+
* Bot which will be used for user authorization.
|
|
114
|
+
*
|
|
115
|
+
* @default current bot
|
|
116
|
+
*/
|
|
117
|
+
bot?: tl.TypeInputUser;
|
|
118
|
+
}
|
|
119
|
+
/** A button opening a user's profile */
|
|
120
|
+
export interface UserProfileButton extends BotKeyboardButtonBase {
|
|
121
|
+
readonly type: 'user_profile';
|
|
122
|
+
/** User whose profile should be opened */
|
|
123
|
+
user: tl.TypeInputUser;
|
|
124
|
+
}
|
|
125
|
+
/** A button copying text to the user's clipboard */
|
|
126
|
+
export interface CopyButton extends BotKeyboardButtonBase {
|
|
127
|
+
readonly type: 'copy';
|
|
128
|
+
/** Text to be copied (defaults to the button text) */
|
|
129
|
+
copyText?: string;
|
|
130
|
+
}
|
|
131
|
+
/** A button that does nothing when pressed */
|
|
132
|
+
export interface DisabledButton extends BotKeyboardButtonBase {
|
|
133
|
+
readonly type: 'disabled';
|
|
134
|
+
}
|
|
135
|
+
/** A button usable in reply keyboards */
|
|
136
|
+
export type ReplyBotKeyboardButton = TextButton | RequestContactButton | RequestGeoButton | RequestPollButton | RequestPeerButton | WebViewButton;
|
|
137
|
+
/** A button usable in inline keyboards (and in rich messages) */
|
|
138
|
+
export type InlineBotKeyboardButton = WebViewButton | UrlButton | CallbackButton | SwitchInlineButton | GameButton | PayButton | UrlAuthButton | UserProfileButton | CopyButton | DisabledButton;
|
|
139
|
+
/** A bot keyboard button */
|
|
140
|
+
export type BotKeyboardButton = ReplyBotKeyboardButton | InlineBotKeyboardButton;
|
|
141
|
+
/**
|
|
142
|
+
* A button accepted by the reply keyboard factories.
|
|
143
|
+
*
|
|
144
|
+
* Raw TL objects are passed through as-is.
|
|
145
|
+
*/
|
|
146
|
+
export type InputReplyKeyboardButton = ReplyBotKeyboardButton | tl.TypeKeyboardButton;
|
|
147
|
+
/**
|
|
148
|
+
* A button accepted by the inline keyboard and rich message factories.
|
|
149
|
+
*
|
|
150
|
+
* Raw TL objects are passed through as-is.
|
|
151
|
+
*/
|
|
152
|
+
export type InputInlineKeyboardButton = InlineBotKeyboardButton | tl.TypeKeyboardInlineButton;
|
|
153
|
+
/** A button accepted by any of the keyboard factories */
|
|
154
|
+
export type InputBotKeyboardButton = InputReplyKeyboardButton | InputInlineKeyboardButton;
|
|
2
155
|
/**
|
|
3
156
|
* Reply keyboard markup
|
|
4
157
|
*/
|
|
5
|
-
export interface ReplyKeyboardMarkup extends Omit<tl.RawReplyKeyboardMarkup, '_' | 'rows'> {
|
|
158
|
+
export interface ReplyKeyboardMarkup<Button = InputReplyKeyboardButton> extends Omit<tl.RawReplyKeyboardMarkup, '_' | 'rows'> {
|
|
6
159
|
readonly type: 'reply';
|
|
7
160
|
/**
|
|
8
161
|
* Two-dimensional array of buttons
|
|
9
162
|
*/
|
|
10
|
-
readonly buttons:
|
|
163
|
+
readonly buttons: Button[][];
|
|
11
164
|
}
|
|
12
165
|
/**
|
|
13
166
|
* Hide previously sent bot keyboard
|
|
@@ -24,11 +177,14 @@ export interface ReplyKeyboardForceReply extends Omit<tl.RawReplyKeyboardForceRe
|
|
|
24
177
|
/**
|
|
25
178
|
* Inline keyboard markup
|
|
26
179
|
*/
|
|
27
|
-
export interface InlineKeyboardMarkup {
|
|
180
|
+
export interface InlineKeyboardMarkup<Button = InputInlineKeyboardButton> extends Omit<tl.RawReplyInlineMarkup, '_' | 'rows'> {
|
|
28
181
|
readonly type: 'inline';
|
|
29
182
|
/**
|
|
30
183
|
* Two-dimensional array of buttons
|
|
31
184
|
*/
|
|
32
|
-
readonly buttons:
|
|
185
|
+
readonly buttons: Button[][];
|
|
33
186
|
}
|
|
34
187
|
export type ReplyMarkup = ReplyKeyboardMarkup | ReplyKeyboardHide | ReplyKeyboardForceReply | InlineKeyboardMarkup | tl.TypeReplyMarkup;
|
|
188
|
+
/** Reply markup as parsed from an existing message */
|
|
189
|
+
export type ParsedReplyMarkup = ReplyKeyboardMarkup<tl.TypeKeyboardButton> | ReplyKeyboardHide | ReplyKeyboardForceReply | InlineKeyboardMarkup<tl.TypeKeyboardInlineButton>;
|
|
190
|
+
export {};
|
|
@@ -145,6 +145,10 @@ class Conversation {
|
|
|
145
145
|
state.pendingConversations.delete(this._chatId);
|
|
146
146
|
}
|
|
147
147
|
state.hasConversations = Boolean(state.pendingConversations.size);
|
|
148
|
+
const error = new errors.MtcuteError("Conversation stopped");
|
|
149
|
+
for (const it of this._queuedNewMessage) this._rejectPending(it, error);
|
|
150
|
+
for (const it of this._pendingEditMessage.values()) this._rejectPending(it, error);
|
|
151
|
+
for (const it of this._pendingRead.values()) this._rejectPending(it, error);
|
|
148
152
|
this._queuedNewMessage.clear();
|
|
149
153
|
this._pendingNewMessages.clear();
|
|
150
154
|
this._pendingEditMessage.clear();
|
|
@@ -152,6 +156,10 @@ class Conversation {
|
|
|
152
156
|
this._pendingRead.clear();
|
|
153
157
|
this._started = false;
|
|
154
158
|
}
|
|
159
|
+
_rejectPending(it, error) {
|
|
160
|
+
if (it.timeout) utils.timers.clearTimeout(it.timeout);
|
|
161
|
+
it.promise.reject(error);
|
|
162
|
+
}
|
|
155
163
|
_recordMessage(msg, incoming = false) {
|
|
156
164
|
this._lastMessage = msg.id;
|
|
157
165
|
if (incoming) this._lastReceivedMessage = msg.id;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Deque, AsyncLock,
|
|
2
|
-
import { MtArgumentError, MtTimeoutError } from "../../types/errors.js";
|
|
1
|
+
import { Deque, AsyncLock, timers, Deferred, unknownToError } from "@fuman/utils";
|
|
2
|
+
import { MtArgumentError, MtcuteError, MtTimeoutError } from "../../types/errors.js";
|
|
3
3
|
import { getMarkedPeerId } from "../../utils/peer-utils.js";
|
|
4
4
|
import { getPeerDialogs } from "../methods/dialogs/get-peer-dialogs.js";
|
|
5
5
|
import { readHistory } from "../methods/messages/read-history.js";
|
|
@@ -138,6 +138,10 @@ class Conversation {
|
|
|
138
138
|
state.pendingConversations.delete(this._chatId);
|
|
139
139
|
}
|
|
140
140
|
state.hasConversations = Boolean(state.pendingConversations.size);
|
|
141
|
+
const error = new MtcuteError("Conversation stopped");
|
|
142
|
+
for (const it of this._queuedNewMessage) this._rejectPending(it, error);
|
|
143
|
+
for (const it of this._pendingEditMessage.values()) this._rejectPending(it, error);
|
|
144
|
+
for (const it of this._pendingRead.values()) this._rejectPending(it, error);
|
|
141
145
|
this._queuedNewMessage.clear();
|
|
142
146
|
this._pendingNewMessages.clear();
|
|
143
147
|
this._pendingEditMessage.clear();
|
|
@@ -145,6 +149,10 @@ class Conversation {
|
|
|
145
149
|
this._pendingRead.clear();
|
|
146
150
|
this._started = false;
|
|
147
151
|
}
|
|
152
|
+
_rejectPending(it, error) {
|
|
153
|
+
if (it.timeout) timers.clearTimeout(it.timeout);
|
|
154
|
+
it.promise.reject(error);
|
|
155
|
+
}
|
|
148
156
|
_recordMessage(msg, incoming = false) {
|
|
149
157
|
this._lastMessage = msg.id;
|
|
150
158
|
if (incoming) this._lastReceivedMessage = msg.id;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -135,10 +135,17 @@ class Dialog {
|
|
|
135
135
|
/**
|
|
136
136
|
* Whether this dialog is muted.
|
|
137
137
|
*
|
|
138
|
+
* Accounts for both the `silent` flag and the `muteUntil` timestamp
|
|
139
|
+
* (a peer muted until a future date is considered muted).
|
|
140
|
+
*
|
|
138
141
|
* If `null`, the default account-level setting should be used.
|
|
139
142
|
*/
|
|
140
143
|
get isMuted() {
|
|
141
|
-
|
|
144
|
+
const { silent, muteUntil } = this.raw.notifySettings;
|
|
145
|
+
if (muteUntil !== void 0) {
|
|
146
|
+
return muteUntil > Date.now() / 1e3;
|
|
147
|
+
}
|
|
148
|
+
return silent ?? null;
|
|
142
149
|
}
|
|
143
150
|
/**
|
|
144
151
|
* Whether this dialog is archived
|
|
@@ -60,6 +60,9 @@ export declare class Dialog {
|
|
|
60
60
|
/**
|
|
61
61
|
* Whether this dialog is muted.
|
|
62
62
|
*
|
|
63
|
+
* Accounts for both the `silent` flag and the `muteUntil` timestamp
|
|
64
|
+
* (a peer muted until a future date is considered muted).
|
|
65
|
+
*
|
|
63
66
|
* If `null`, the default account-level setting should be used.
|
|
64
67
|
*/
|
|
65
68
|
get isMuted(): boolean | null;
|
|
@@ -60,6 +60,9 @@ export declare class Dialog {
|
|
|
60
60
|
/**
|
|
61
61
|
* Whether this dialog is muted.
|
|
62
62
|
*
|
|
63
|
+
* Accounts for both the `silent` flag and the `muteUntil` timestamp
|
|
64
|
+
* (a peer muted until a future date is considered muted).
|
|
65
|
+
*
|
|
63
66
|
* If `null`, the default account-level setting should be used.
|
|
64
67
|
*/
|
|
65
68
|
get isMuted(): boolean | null;
|
|
@@ -128,10 +128,17 @@ class Dialog {
|
|
|
128
128
|
/**
|
|
129
129
|
* Whether this dialog is muted.
|
|
130
130
|
*
|
|
131
|
+
* Accounts for both the `silent` flag and the `muteUntil` timestamp
|
|
132
|
+
* (a peer muted until a future date is considered muted).
|
|
133
|
+
*
|
|
131
134
|
* If `null`, the default account-level setting should be used.
|
|
132
135
|
*/
|
|
133
136
|
get isMuted() {
|
|
134
|
-
|
|
137
|
+
const { silent, muteUntil } = this.raw.notifySettings;
|
|
138
|
+
if (muteUntil !== void 0) {
|
|
139
|
+
return muteUntil > Date.now() / 1e3;
|
|
140
|
+
}
|
|
141
|
+
return silent ?? null;
|
|
135
142
|
}
|
|
136
143
|
/**
|
|
137
144
|
* Whether this dialog is archived
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|