@mtcute/core 0.12.5 → 0.13.1

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.
Files changed (175) hide show
  1. package/cjs/highlevel/client.d.ts +104 -2
  2. package/cjs/highlevel/client.js +27 -0
  3. package/cjs/highlevel/client.js.map +1 -1
  4. package/cjs/highlevel/methods/_imports.js.map +1 -1
  5. package/cjs/highlevel/methods/chats/archive-chats.js +2 -1
  6. package/cjs/highlevel/methods/chats/archive-chats.js.map +1 -1
  7. package/cjs/highlevel/methods/chats/get-nearby-chats.js +1 -1
  8. package/cjs/highlevel/methods/chats/get-nearby-chats.js.map +1 -1
  9. package/cjs/highlevel/methods/dialogs/find-dialogs.d.ts +12 -0
  10. package/cjs/highlevel/methods/dialogs/find-dialogs.js +88 -0
  11. package/cjs/highlevel/methods/dialogs/find-dialogs.js.map +1 -0
  12. package/cjs/highlevel/methods/dialogs/get-chatlist-preview.d.ts +8 -0
  13. package/cjs/highlevel/methods/dialogs/get-chatlist-preview.js +18 -0
  14. package/cjs/highlevel/methods/dialogs/get-chatlist-preview.js.map +1 -0
  15. package/cjs/highlevel/methods/dialogs/get-peer-dialogs.js +2 -1
  16. package/cjs/highlevel/methods/dialogs/get-peer-dialogs.js.map +1 -1
  17. package/cjs/highlevel/methods/dialogs/iter-dialogs.js +55 -4
  18. package/cjs/highlevel/methods/dialogs/iter-dialogs.js.map +1 -1
  19. package/cjs/highlevel/methods/dialogs/join-chatlist.d.ts +15 -0
  20. package/cjs/highlevel/methods/dialogs/join-chatlist.js +42 -0
  21. package/cjs/highlevel/methods/dialogs/join-chatlist.js.map +1 -0
  22. package/cjs/highlevel/methods/messages/_business-connection.d.ts +2 -1
  23. package/cjs/highlevel/methods/messages/_business-connection.js.map +1 -1
  24. package/cjs/highlevel/methods/messages/get-available-effects.d.ts +6 -0
  25. package/cjs/highlevel/methods/messages/get-available-effects.js +26 -0
  26. package/cjs/highlevel/methods/messages/get-available-effects.js.map +1 -0
  27. package/cjs/highlevel/methods/messages/get-fact-check.d.ts +11 -0
  28. package/cjs/highlevel/methods/messages/get-fact-check.js +27 -0
  29. package/cjs/highlevel/methods/messages/get-fact-check.js.map +1 -0
  30. package/cjs/highlevel/methods/messages/get-message-reactions.js +1 -0
  31. package/cjs/highlevel/methods/messages/get-message-reactions.js.map +1 -1
  32. package/cjs/highlevel/methods/messages/search-hashtag.d.ts +44 -0
  33. package/cjs/highlevel/methods/messages/search-hashtag.js +75 -0
  34. package/cjs/highlevel/methods/messages/search-hashtag.js.map +1 -0
  35. package/cjs/highlevel/methods/messages/send-common.d.ts +5 -0
  36. package/cjs/highlevel/methods/messages/send-common.js.map +1 -1
  37. package/cjs/highlevel/methods/messages/send-media-group.js +1 -0
  38. package/cjs/highlevel/methods/messages/send-media-group.js.map +1 -1
  39. package/cjs/highlevel/methods/messages/send-media.js +1 -0
  40. package/cjs/highlevel/methods/messages/send-media.js.map +1 -1
  41. package/cjs/highlevel/methods/messages/send-text.js +1 -0
  42. package/cjs/highlevel/methods/messages/send-text.js.map +1 -1
  43. package/cjs/highlevel/methods/misc/normalize-privacy-rules.js +2 -1
  44. package/cjs/highlevel/methods/misc/normalize-privacy-rules.js.map +1 -1
  45. package/cjs/highlevel/methods/premium/get-business-connection.js +1 -0
  46. package/cjs/highlevel/methods/premium/get-business-connection.js.map +1 -1
  47. package/cjs/highlevel/methods/users/resolve-peer-many.d.ts +6 -2
  48. package/cjs/highlevel/methods/users/resolve-peer-many.js +22 -6
  49. package/cjs/highlevel/methods/users/resolve-peer-many.js.map +1 -1
  50. package/cjs/highlevel/methods/users/resolve-peer.js +30 -11
  51. package/cjs/highlevel/methods/users/resolve-peer.js.map +1 -1
  52. package/cjs/highlevel/methods.d.ts +8 -0
  53. package/cjs/highlevel/methods.js +19 -4
  54. package/cjs/highlevel/methods.js.map +1 -1
  55. package/cjs/highlevel/types/conversation.js +1 -1
  56. package/cjs/highlevel/types/conversation.js.map +1 -1
  57. package/cjs/highlevel/types/messages/dialog.d.ts +2 -2
  58. package/cjs/highlevel/types/messages/dialog.js +2 -3
  59. package/cjs/highlevel/types/messages/dialog.js.map +1 -1
  60. package/cjs/highlevel/types/messages/fact-check.d.ts +30 -0
  61. package/cjs/highlevel/types/messages/fact-check.js +56 -0
  62. package/cjs/highlevel/types/messages/fact-check.js.map +1 -0
  63. package/cjs/highlevel/types/messages/index.d.ts +2 -0
  64. package/cjs/highlevel/types/messages/index.js +2 -0
  65. package/cjs/highlevel/types/messages/index.js.map +1 -1
  66. package/cjs/highlevel/types/messages/message-effect.d.ts +20 -0
  67. package/cjs/highlevel/types/messages/message-effect.js +69 -0
  68. package/cjs/highlevel/types/messages/message-effect.js.map +1 -0
  69. package/cjs/highlevel/types/messages/message-entity.d.ts +4 -1
  70. package/cjs/highlevel/types/messages/message-entity.js +1 -1
  71. package/cjs/highlevel/types/messages/message-entity.js.map +1 -1
  72. package/cjs/highlevel/types/messages/message.d.ts +12 -0
  73. package/cjs/highlevel/types/messages/message.js +23 -0
  74. package/cjs/highlevel/types/messages/message.js.map +1 -1
  75. package/cjs/highlevel/types/peers/chat.d.ts +2 -0
  76. package/cjs/highlevel/types/peers/chat.js +4 -0
  77. package/cjs/highlevel/types/peers/chat.js.map +1 -1
  78. package/cjs/highlevel/types/peers/chatlist-preview.d.ts +21 -0
  79. package/cjs/highlevel/types/peers/chatlist-preview.js +49 -0
  80. package/cjs/highlevel/types/peers/chatlist-preview.js.map +1 -0
  81. package/cjs/highlevel/types/peers/index.d.ts +1 -0
  82. package/cjs/highlevel/types/peers/index.js +1 -0
  83. package/cjs/highlevel/types/peers/index.js.map +1 -1
  84. package/cjs/network/network-manager.js +1 -1
  85. package/cjs/utils/links/misc.d.ts +6 -0
  86. package/cjs/utils/links/misc.js +24 -1
  87. package/cjs/utils/links/misc.js.map +1 -1
  88. package/esm/highlevel/client.d.ts +104 -2
  89. package/esm/highlevel/client.js +27 -0
  90. package/esm/highlevel/client.js.map +1 -1
  91. package/esm/highlevel/methods/_imports.js.map +1 -1
  92. package/esm/highlevel/methods/chats/archive-chats.js +2 -1
  93. package/esm/highlevel/methods/chats/archive-chats.js.map +1 -1
  94. package/esm/highlevel/methods/chats/get-nearby-chats.js +1 -1
  95. package/esm/highlevel/methods/chats/get-nearby-chats.js.map +1 -1
  96. package/esm/highlevel/methods/dialogs/find-dialogs.d.ts +12 -0
  97. package/esm/highlevel/methods/dialogs/find-dialogs.js +84 -0
  98. package/esm/highlevel/methods/dialogs/find-dialogs.js.map +1 -0
  99. package/esm/highlevel/methods/dialogs/get-chatlist-preview.d.ts +8 -0
  100. package/esm/highlevel/methods/dialogs/get-chatlist-preview.js +14 -0
  101. package/esm/highlevel/methods/dialogs/get-chatlist-preview.js.map +1 -0
  102. package/esm/highlevel/methods/dialogs/get-peer-dialogs.js +2 -1
  103. package/esm/highlevel/methods/dialogs/get-peer-dialogs.js.map +1 -1
  104. package/esm/highlevel/methods/dialogs/iter-dialogs.js +56 -5
  105. package/esm/highlevel/methods/dialogs/iter-dialogs.js.map +1 -1
  106. package/esm/highlevel/methods/dialogs/join-chatlist.d.ts +15 -0
  107. package/esm/highlevel/methods/dialogs/join-chatlist.js +38 -0
  108. package/esm/highlevel/methods/dialogs/join-chatlist.js.map +1 -0
  109. package/esm/highlevel/methods/messages/_business-connection.d.ts +2 -1
  110. package/esm/highlevel/methods/messages/_business-connection.js.map +1 -1
  111. package/esm/highlevel/methods/messages/get-available-effects.d.ts +6 -0
  112. package/esm/highlevel/methods/messages/get-available-effects.js +22 -0
  113. package/esm/highlevel/methods/messages/get-available-effects.js.map +1 -0
  114. package/esm/highlevel/methods/messages/get-fact-check.d.ts +11 -0
  115. package/esm/highlevel/methods/messages/get-fact-check.js +23 -0
  116. package/esm/highlevel/methods/messages/get-fact-check.js.map +1 -0
  117. package/esm/highlevel/methods/messages/get-message-reactions.js +1 -0
  118. package/esm/highlevel/methods/messages/get-message-reactions.js.map +1 -1
  119. package/esm/highlevel/methods/messages/search-hashtag.d.ts +44 -0
  120. package/esm/highlevel/methods/messages/search-hashtag.js +70 -0
  121. package/esm/highlevel/methods/messages/search-hashtag.js.map +1 -0
  122. package/esm/highlevel/methods/messages/send-common.d.ts +5 -0
  123. package/esm/highlevel/methods/messages/send-common.js.map +1 -1
  124. package/esm/highlevel/methods/messages/send-media-group.js +1 -0
  125. package/esm/highlevel/methods/messages/send-media-group.js.map +1 -1
  126. package/esm/highlevel/methods/messages/send-media.js +1 -0
  127. package/esm/highlevel/methods/messages/send-media.js.map +1 -1
  128. package/esm/highlevel/methods/messages/send-text.js +1 -0
  129. package/esm/highlevel/methods/messages/send-text.js.map +1 -1
  130. package/esm/highlevel/methods/misc/normalize-privacy-rules.js +2 -1
  131. package/esm/highlevel/methods/misc/normalize-privacy-rules.js.map +1 -1
  132. package/esm/highlevel/methods/premium/get-business-connection.js +1 -0
  133. package/esm/highlevel/methods/premium/get-business-connection.js.map +1 -1
  134. package/esm/highlevel/methods/users/resolve-peer-many.d.ts +6 -2
  135. package/esm/highlevel/methods/users/resolve-peer-many.js +22 -6
  136. package/esm/highlevel/methods/users/resolve-peer-many.js.map +1 -1
  137. package/esm/highlevel/methods/users/resolve-peer.js +30 -11
  138. package/esm/highlevel/methods/users/resolve-peer.js.map +1 -1
  139. package/esm/highlevel/methods.d.ts +8 -0
  140. package/esm/highlevel/methods.js +7 -0
  141. package/esm/highlevel/methods.js.map +1 -1
  142. package/esm/highlevel/types/conversation.js +1 -1
  143. package/esm/highlevel/types/conversation.js.map +1 -1
  144. package/esm/highlevel/types/messages/dialog.d.ts +2 -2
  145. package/esm/highlevel/types/messages/dialog.js +2 -3
  146. package/esm/highlevel/types/messages/dialog.js.map +1 -1
  147. package/esm/highlevel/types/messages/fact-check.d.ts +30 -0
  148. package/esm/highlevel/types/messages/fact-check.js +53 -0
  149. package/esm/highlevel/types/messages/fact-check.js.map +1 -0
  150. package/esm/highlevel/types/messages/index.d.ts +2 -0
  151. package/esm/highlevel/types/messages/index.js +2 -0
  152. package/esm/highlevel/types/messages/index.js.map +1 -1
  153. package/esm/highlevel/types/messages/message-effect.d.ts +20 -0
  154. package/esm/highlevel/types/messages/message-effect.js +66 -0
  155. package/esm/highlevel/types/messages/message-effect.js.map +1 -0
  156. package/esm/highlevel/types/messages/message-entity.d.ts +4 -1
  157. package/esm/highlevel/types/messages/message-entity.js +1 -1
  158. package/esm/highlevel/types/messages/message-entity.js.map +1 -1
  159. package/esm/highlevel/types/messages/message.d.ts +12 -0
  160. package/esm/highlevel/types/messages/message.js +23 -0
  161. package/esm/highlevel/types/messages/message.js.map +1 -1
  162. package/esm/highlevel/types/peers/chat.d.ts +2 -0
  163. package/esm/highlevel/types/peers/chat.js +4 -0
  164. package/esm/highlevel/types/peers/chat.js.map +1 -1
  165. package/esm/highlevel/types/peers/chatlist-preview.d.ts +21 -0
  166. package/esm/highlevel/types/peers/chatlist-preview.js +46 -0
  167. package/esm/highlevel/types/peers/chatlist-preview.js.map +1 -0
  168. package/esm/highlevel/types/peers/index.d.ts +1 -0
  169. package/esm/highlevel/types/peers/index.js +1 -0
  170. package/esm/highlevel/types/peers/index.js.map +1 -1
  171. package/esm/network/network-manager.js +1 -1
  172. package/esm/utils/links/misc.d.ts +6 -0
  173. package/esm/utils/links/misc.js +23 -0
  174. package/esm/utils/links/misc.js.map +1 -1
  175. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"_imports.js","sourceRoot":"","sources":["../../../../src/highlevel/methods/_imports.ts"],"names":[],"mappings":"AAAA,sDAAsD","sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\n\n// @copy\nimport { tdFileId } from '@mtcute/file-id'\n// @copy\nimport { tl } from '@mtcute/tl'\n\n// @copy\nimport { RpcCallOptions } from '../../network/index.js'\n// @copy\nimport { MaybeArray, MaybePromise, MtUnsupportedError, PartialExcept, PartialOnly } from '../../types/index.js'\n// @copy\nimport { BaseTelegramClient, BaseTelegramClientOptions } from '../base.js'\n// @copy\nimport { ITelegramClient } from '../client.types.js'\n// @copy\nimport {\n AllStories,\n ArrayPaginated,\n ArrayWithTotal,\n Boost,\n BoostSlot,\n BoostStats,\n BotChatJoinRequestUpdate,\n BotCommands,\n BotReactionCountUpdate,\n BotReactionUpdate,\n BotStoppedUpdate,\n BusinessChatLink,\n BusinessConnection,\n BusinessMessage,\n BusinessWorkHoursDay,\n CallbackQuery,\n Chat,\n ChatEvent,\n ChatInviteLink,\n ChatInviteLinkMember,\n ChatJoinRequestUpdate,\n ChatMember,\n ChatMemberUpdate,\n ChatPreview,\n ChosenInlineResult,\n CollectibleInfo,\n DeleteBusinessMessageUpdate,\n DeleteMessageUpdate,\n DeleteStoryUpdate,\n Dialog,\n FileDownloadLocation,\n FileDownloadParameters,\n ForumTopic,\n FullChat,\n GameHighScore,\n HistoryReadUpdate,\n InlineCallbackQuery,\n InlineQuery,\n InputChatEventFilters,\n InputDialogFolder,\n InputFileLike,\n InputInlineResult,\n InputMediaLike,\n InputMediaSticker,\n InputMessageId,\n InputPeerLike,\n InputPrivacyRule,\n InputReaction,\n InputStickerSet,\n InputStickerSetItem,\n InputText,\n MaybeDynamic,\n Message,\n MessageMedia,\n MessageReactions,\n ParametersSkip2,\n ParsedUpdate,\n PeerReaction,\n PeersIndex,\n PeerStories,\n Photo,\n Poll,\n PollUpdate,\n PollVoteUpdate,\n PreCheckoutQuery,\n RawDocument,\n ReplyMarkup,\n SentCode,\n Sticker,\n StickerSet,\n StickerSourceType,\n StickerType,\n StoriesStealthMode,\n Story,\n StoryInteractions,\n StoryUpdate,\n StoryViewer,\n StoryViewersList,\n TakeoutSession,\n TextWithEntities,\n TypingStatus,\n UploadedFile,\n UploadFileLike,\n User,\n UserStatusUpdate,\n UserTypingUpdate,\n} from '../types/index.js'\n// @copy\nimport { StringSessionData } from '../utils/string-session.js'\n"]}
1
+ {"version":3,"file":"_imports.js","sourceRoot":"","sources":["../../../../src/highlevel/methods/_imports.ts"],"names":[],"mappings":"AAAA,sDAAsD","sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\n\n// @copy\nimport { tdFileId } from '@mtcute/file-id'\n// @copy\nimport { tl } from '@mtcute/tl'\n\n// @copy\nimport { RpcCallOptions } from '../../network/index.js'\n// @copy\nimport { MaybeArray, MaybePromise, MtUnsupportedError, PartialExcept, PartialOnly } from '../../types/index.js'\n// @copy\nimport { BaseTelegramClient, BaseTelegramClientOptions } from '../base.js'\n// @copy\nimport { ITelegramClient } from '../client.types.js'\n// @copy\nimport {\n AllStories,\n ArrayPaginated,\n ArrayWithTotal,\n Boost,\n BoostSlot,\n BoostStats,\n BotChatJoinRequestUpdate,\n BotCommands,\n BotReactionCountUpdate,\n BotReactionUpdate,\n BotStoppedUpdate,\n BusinessChatLink,\n BusinessConnection,\n BusinessMessage,\n BusinessWorkHoursDay,\n CallbackQuery,\n Chat,\n ChatEvent,\n ChatInviteLink,\n ChatInviteLinkMember,\n ChatJoinRequestUpdate,\n ChatlistPreview,\n ChatMember,\n ChatMemberUpdate,\n ChatPreview,\n ChosenInlineResult,\n CollectibleInfo,\n DeleteBusinessMessageUpdate,\n DeleteMessageUpdate,\n DeleteStoryUpdate,\n Dialog,\n FactCheck,\n FileDownloadLocation,\n FileDownloadParameters,\n ForumTopic,\n FullChat,\n GameHighScore,\n HistoryReadUpdate,\n InlineCallbackQuery,\n InlineQuery,\n InputChatEventFilters,\n InputDialogFolder,\n InputFileLike,\n InputInlineResult,\n InputMediaLike,\n InputMediaSticker,\n InputMessageId,\n InputPeerLike,\n InputPrivacyRule,\n InputReaction,\n InputStickerSet,\n InputStickerSetItem,\n InputText,\n MaybeDynamic,\n Message,\n MessageEffect,\n MessageMedia,\n MessageReactions,\n ParametersSkip2,\n ParsedUpdate,\n PeerReaction,\n PeersIndex,\n PeerStories,\n Photo,\n Poll,\n PollUpdate,\n PollVoteUpdate,\n PreCheckoutQuery,\n RawDocument,\n ReplyMarkup,\n SentCode,\n Sticker,\n StickerSet,\n StickerSourceType,\n StickerType,\n StoriesStealthMode,\n Story,\n StoryInteractions,\n StoryUpdate,\n StoryViewer,\n StoryViewersList,\n TakeoutSession,\n TextWithEntities,\n TypingStatus,\n UploadedFile,\n UploadFileLike,\n User,\n UserStatusUpdate,\n UserTypingUpdate,\n} from '../types/index.js'\n// @copy\nimport { StringSessionData } from '../utils/string-session.js'\n"]}
@@ -1,3 +1,4 @@
1
+ import { isPresent } from '../../../utils/type-assertions.js';
1
2
  import { resolvePeerMany } from '../users/resolve-peer-many.js';
2
3
  /**
3
4
  * Archive one or more chats
@@ -10,7 +11,7 @@ export async function archiveChats(client, chats) {
10
11
  const resolvedPeers = await resolvePeerMany(client, chats);
11
12
  const updates = await client.call({
12
13
  _: 'folders.editPeerFolders',
13
- folderPeers: resolvedPeers.map((peer) => ({
14
+ folderPeers: resolvedPeers.filter(isPresent).map((peer) => ({
14
15
  _: 'inputFolderPeer',
15
16
  peer,
16
17
  folderId: 1,
@@ -1 +1 @@
1
- {"version":3,"file":"archive-chats.js","sourceRoot":"","sources":["../../../../../src/highlevel/methods/chats/archive-chats.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAE/D;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,MAAuB,EAAE,KAAgC;IACxF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,KAAK,GAAG,CAAC,KAAK,CAAC,CAAA;IAE1C,MAAM,aAAa,GAAG,MAAM,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;IAE1D,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC;QAC9B,CAAC,EAAE,yBAAyB;QAC5B,WAAW,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACtC,CAAC,EAAE,iBAAiB;YACpB,IAAI;YACJ,QAAQ,EAAE,CAAC;SACd,CAAC,CAAC;KACN,CAAC,CAAA;IACF,MAAM,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAA;AACtC,CAAC","sourcesContent":["import { MaybeArray } from '../../../types/utils.js'\nimport { ITelegramClient } from '../../client.types.js'\nimport { InputPeerLike } from '../../types/index.js'\nimport { resolvePeerMany } from '../users/resolve-peer-many.js'\n\n/**\n * Archive one or more chats\n *\n * @param chats Chat ID(s), username(s), phone number(s), `\"me\"` or `\"self\"`\n */\nexport async function archiveChats(client: ITelegramClient, chats: MaybeArray<InputPeerLike>): Promise<void> {\n if (!Array.isArray(chats)) chats = [chats]\n\n const resolvedPeers = await resolvePeerMany(client, chats)\n\n const updates = await client.call({\n _: 'folders.editPeerFolders',\n folderPeers: resolvedPeers.map((peer) => ({\n _: 'inputFolderPeer',\n peer,\n folderId: 1,\n })),\n })\n client.handleClientUpdate(updates)\n}\n"]}
1
+ {"version":3,"file":"archive-chats.js","sourceRoot":"","sources":["../../../../../src/highlevel/methods/chats/archive-chats.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAA;AAG7D,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAE/D;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,MAAuB,EAAE,KAAgC;IACxF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,KAAK,GAAG,CAAC,KAAK,CAAC,CAAA;IAE1C,MAAM,aAAa,GAAG,MAAM,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;IAE1D,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC;QAC9B,CAAC,EAAE,yBAAyB;QAC5B,WAAW,EAAE,aAAa,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACxD,CAAC,EAAE,iBAAiB;YACpB,IAAI;YACJ,QAAQ,EAAE,CAAC;SACd,CAAC,CAAC;KACN,CAAC,CAAA;IACF,MAAM,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAA;AACtC,CAAC","sourcesContent":["import { MaybeArray } from '../../../types/utils.js'\nimport { isPresent } from '../../../utils/type-assertions.js'\nimport { ITelegramClient } from '../../client.types.js'\nimport { InputPeerLike } from '../../types/index.js'\nimport { resolvePeerMany } from '../users/resolve-peer-many.js'\n\n/**\n * Archive one or more chats\n *\n * @param chats Chat ID(s), username(s), phone number(s), `\"me\"` or `\"self\"`\n */\nexport async function archiveChats(client: ITelegramClient, chats: MaybeArray<InputPeerLike>): Promise<void> {\n if (!Array.isArray(chats)) chats = [chats]\n\n const resolvedPeers = await resolvePeerMany(client, chats)\n\n const updates = await client.call({\n _: 'folders.editPeerFolders',\n folderPeers: resolvedPeers.filter(isPresent).map((peer) => ({\n _: 'inputFolderPeer',\n peer,\n folderId: 1,\n })),\n })\n client.handleClientUpdate(updates)\n}\n"]}
@@ -18,7 +18,7 @@ export async function getNearbyChats(client, latitude, longitude) {
18
18
  },
19
19
  });
20
20
  assertIsUpdatesGroup('contacts.getLocated', res);
21
- // client.handleClientUpdate(res, true)
21
+ client.handleClientUpdate(res, true);
22
22
  if (!res.updates.length)
23
23
  return [];
24
24
  assertTypeIs('contacts.getLocated (@ .updates[0])', res.updates[0], 'updatePeerLocated');
@@ -1 +1 @@
1
- {"version":3,"file":"get-nearby-chats.js","sourceRoot":"","sources":["../../../../../src/highlevel/methods/chats/get-nearby-chats.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAA;AAEhE,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAA;AAC3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAE7D;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,MAAuB,EAAE,QAAgB,EAAE,SAAiB;IAC7F,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC;QAC1B,CAAC,EAAE,qBAAqB;QACxB,QAAQ,EAAE;YACN,CAAC,EAAE,eAAe;YAClB,GAAG,EAAE,QAAQ;YACb,IAAI,EAAE,SAAS;SAClB;KACJ,CAAC,CAAA;IAEF,oBAAoB,CAAC,qBAAqB,EAAE,GAAG,CAAC,CAAA;IAChD,uCAAuC;IAEvC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM;QAAE,OAAO,EAAE,CAAA;IAElC,YAAY,CAAC,qCAAqC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAA;IAExF,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;IAEjD,MAAM,KAAK,GAAyB,EAAE,CAAA;IACtC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;IAEvC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QAClC,IAAI,IAAI,CAAC,CAAC,KAAK,iBAAiB;YAAE,OAAM;QAExC,MAAM,EAAE,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAErC,IAAI,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;YACX,KAAK,CAAC,EAAE,CAAsB,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAA;QAC5D,CAAC;IACL,CAAC,CAAC,CAAA;IAEF,OAAO,KAAK,CAAA;AAChB,CAAC","sourcesContent":["import { tl } from '@mtcute/tl'\n\nimport { getMarkedPeerId } from '../../../utils/peer-utils.js'\nimport { assertTypeIs } from '../../../utils/type-assertions.js'\nimport { ITelegramClient } from '../../client.types.js'\nimport { Chat } from '../../types/index.js'\nimport { assertIsUpdatesGroup } from '../../updates/utils.js'\n\n/**\n * Get nearby chats\n *\n * @param latitude Latitude of the location\n * @param longitude Longitude of the location\n */\nexport async function getNearbyChats(client: ITelegramClient, latitude: number, longitude: number): Promise<Chat[]> {\n const res = await client.call({\n _: 'contacts.getLocated',\n geoPoint: {\n _: 'inputGeoPoint',\n lat: latitude,\n long: longitude,\n },\n })\n\n assertIsUpdatesGroup('contacts.getLocated', res)\n // client.handleClientUpdate(res, true)\n\n if (!res.updates.length) return []\n\n assertTypeIs('contacts.getLocated (@ .updates[0])', res.updates[0], 'updatePeerLocated')\n\n const chats = res.chats.map((it) => new Chat(it))\n\n const index: Record<number, Chat> = {}\n chats.forEach((c) => (index[c.id] = c))\n\n res.updates[0].peers.forEach((peer) => {\n if (peer._ === 'peerSelfLocated') return\n\n const id = getMarkedPeerId(peer.peer)\n\n if (index[id]) {\n (index[id] as tl.Mutable<Chat>).distance = peer.distance\n }\n })\n\n return chats\n}\n"]}
1
+ {"version":3,"file":"get-nearby-chats.js","sourceRoot":"","sources":["../../../../../src/highlevel/methods/chats/get-nearby-chats.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAA;AAEhE,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAA;AAC3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAE7D;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,MAAuB,EAAE,QAAgB,EAAE,SAAiB;IAC7F,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC;QAC1B,CAAC,EAAE,qBAAqB;QACxB,QAAQ,EAAE;YACN,CAAC,EAAE,eAAe;YAClB,GAAG,EAAE,QAAQ;YACb,IAAI,EAAE,SAAS;SAClB;KACJ,CAAC,CAAA;IAEF,oBAAoB,CAAC,qBAAqB,EAAE,GAAG,CAAC,CAAA;IAChD,MAAM,CAAC,kBAAkB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;IAEpC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM;QAAE,OAAO,EAAE,CAAA;IAElC,YAAY,CAAC,qCAAqC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAA;IAExF,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;IAEjD,MAAM,KAAK,GAAyB,EAAE,CAAA;IACtC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;IAEvC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QAClC,IAAI,IAAI,CAAC,CAAC,KAAK,iBAAiB;YAAE,OAAM;QAExC,MAAM,EAAE,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAErC,IAAI,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;YACX,KAAK,CAAC,EAAE,CAAsB,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAA;QAC5D,CAAC;IACL,CAAC,CAAC,CAAA;IAEF,OAAO,KAAK,CAAA;AAChB,CAAC","sourcesContent":["import { tl } from '@mtcute/tl'\n\nimport { getMarkedPeerId } from '../../../utils/peer-utils.js'\nimport { assertTypeIs } from '../../../utils/type-assertions.js'\nimport { ITelegramClient } from '../../client.types.js'\nimport { Chat } from '../../types/index.js'\nimport { assertIsUpdatesGroup } from '../../updates/utils.js'\n\n/**\n * Get nearby chats\n *\n * @param latitude Latitude of the location\n * @param longitude Longitude of the location\n */\nexport async function getNearbyChats(client: ITelegramClient, latitude: number, longitude: number): Promise<Chat[]> {\n const res = await client.call({\n _: 'contacts.getLocated',\n geoPoint: {\n _: 'inputGeoPoint',\n lat: latitude,\n long: longitude,\n },\n })\n\n assertIsUpdatesGroup('contacts.getLocated', res)\n client.handleClientUpdate(res, true)\n\n if (!res.updates.length) return []\n\n assertTypeIs('contacts.getLocated (@ .updates[0])', res.updates[0], 'updatePeerLocated')\n\n const chats = res.chats.map((it) => new Chat(it))\n\n const index: Record<number, Chat> = {}\n chats.forEach((c) => (index[c.id] = c))\n\n res.updates[0].peers.forEach((peer) => {\n if (peer._ === 'peerSelfLocated') return\n\n const id = getMarkedPeerId(peer.peer)\n\n if (index[id]) {\n (index[id] as tl.Mutable<Chat>).distance = peer.distance\n }\n })\n\n return chats\n}\n"]}
@@ -0,0 +1,12 @@
1
+ import { MaybeArray } from '../../../types/utils.js';
2
+ import { ITelegramClient } from '../../client.types.js';
3
+ import { Dialog } from '../../types/messages/dialog.js';
4
+ /**
5
+ * Try to find a dialog (dialogs) with a given peer (peers) by their ID, username or phone number.
6
+ *
7
+ * This might be an expensive call, as it will potentially iterate over all
8
+ * dialogs to find the one with the given peer
9
+ *
10
+ * @throws {MtPeerNotFoundError} If a dialog with any of the given peers was not found
11
+ */
12
+ export declare function findDialogs(client: ITelegramClient, peers: MaybeArray<string | number>): Promise<Dialog[]>;
@@ -0,0 +1,84 @@
1
+ import { MtPeerNotFoundError } from '../../types/errors.js';
2
+ import { resolvePeerMany } from '../users/resolve-peer-many.js';
3
+ import { getPeerDialogs } from './get-peer-dialogs.js';
4
+ import { iterDialogs } from './iter-dialogs.js';
5
+ // @available=user
6
+ /**
7
+ * Try to find a dialog (dialogs) with a given peer (peers) by their ID, username or phone number.
8
+ *
9
+ * This might be an expensive call, as it will potentially iterate over all
10
+ * dialogs to find the one with the given peer
11
+ *
12
+ * @throws {MtPeerNotFoundError} If a dialog with any of the given peers was not found
13
+ */
14
+ export async function findDialogs(client, peers) {
15
+ if (!Array.isArray(peers))
16
+ peers = [peers];
17
+ const resolved = await resolvePeerMany(client, peers);
18
+ // now we need to split `peers` into two parts: ids that we could resolve and those we couldn't
19
+ // those that we couldn't we'll iterate over all dialogs and try to find them by username/id
20
+ // those that we could we'll use getPeerDialogs
21
+ // id -> idx
22
+ const notFoundIds = new Map();
23
+ // username -> idx
24
+ const notFoundUsernames = new Map();
25
+ let notFoundCount = 0;
26
+ const foundInputPeers = [];
27
+ const foundIdxToOriginalIdx = new Map();
28
+ for (let i = 0; i < peers.length; i++) {
29
+ const input = peers[i];
30
+ const resolvedPeer = resolved[i];
31
+ if (!resolvedPeer) {
32
+ if (typeof input === 'number') {
33
+ notFoundIds.set(input, i);
34
+ }
35
+ else {
36
+ notFoundUsernames.set(input, i);
37
+ }
38
+ notFoundCount += 1;
39
+ continue;
40
+ }
41
+ foundInputPeers.push(resolvedPeer);
42
+ foundIdxToOriginalIdx.set(foundInputPeers.length - 1, i);
43
+ }
44
+ const dialogs = await getPeerDialogs(client, foundInputPeers);
45
+ if (foundInputPeers.length === peers.length) {
46
+ return dialogs;
47
+ }
48
+ const ret = new Array(peers.length);
49
+ // populate found dialogs
50
+ for (const [idx, origIdx] of foundIdxToOriginalIdx) {
51
+ ret[origIdx] = dialogs[idx];
52
+ }
53
+ // now we need to iterate over all dialogs and try to find the rest
54
+ for await (const dialog of iterDialogs(client, {
55
+ archived: 'keep',
56
+ })) {
57
+ const chat = dialog.chat;
58
+ const idxById = notFoundIds.get(chat.id);
59
+ if (idxById !== undefined) {
60
+ ret[idxById] = dialog;
61
+ notFoundIds.delete(chat.id);
62
+ notFoundCount -= 1;
63
+ }
64
+ if (notFoundCount === 0)
65
+ break;
66
+ if (!chat.username)
67
+ continue;
68
+ const idxByUsername = notFoundUsernames.get(chat.username);
69
+ if (idxByUsername !== undefined) {
70
+ ret[idxByUsername] = dialog;
71
+ notFoundUsernames.delete(chat.username);
72
+ notFoundCount -= 1;
73
+ }
74
+ if (notFoundCount === 0)
75
+ break;
76
+ }
77
+ // if we still have some dialogs that we couldn't find, fail
78
+ if (notFoundCount > 0) {
79
+ const notFound = [...notFoundIds.keys(), ...notFoundUsernames.keys()];
80
+ throw new MtPeerNotFoundError(`Could not find dialogs with peers: ${notFound.join(', ')}`);
81
+ }
82
+ return ret;
83
+ }
84
+ //# sourceMappingURL=find-dialogs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find-dialogs.js","sourceRoot":"","sources":["../../../../../src/highlevel/methods/dialogs/find-dialogs.ts"],"names":[],"mappings":"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","sourcesContent":["import { tl } from '@mtcute/tl'\n\nimport { MaybeArray } from '../../../types/utils.js'\nimport { ITelegramClient } from '../../client.types.js'\nimport { MtPeerNotFoundError } from '../../types/errors.js'\nimport { Dialog } from '../../types/messages/dialog.js'\nimport { resolvePeerMany } from '../users/resolve-peer-many.js'\nimport { getPeerDialogs } from './get-peer-dialogs.js'\nimport { iterDialogs } from './iter-dialogs.js'\n\n// @available=user\n/**\n * Try to find a dialog (dialogs) with a given peer (peers) by their ID, username or phone number.\n *\n * This might be an expensive call, as it will potentially iterate over all\n * dialogs to find the one with the given peer\n *\n * @throws {MtPeerNotFoundError} If a dialog with any of the given peers was not found\n */\nexport async function findDialogs(client: ITelegramClient, peers: MaybeArray<string | number>): Promise<Dialog[]> {\n if (!Array.isArray(peers)) peers = [peers]\n const resolved = await resolvePeerMany(client, peers)\n\n // now we need to split `peers` into two parts: ids that we could resolve and those we couldn't\n // those that we couldn't we'll iterate over all dialogs and try to find them by username/id\n // those that we could we'll use getPeerDialogs\n\n // id -> idx\n const notFoundIds = new Map<number, number>()\n // username -> idx\n const notFoundUsernames = new Map<string, number>()\n let notFoundCount = 0\n\n const foundInputPeers: tl.TypeInputPeer[] = []\n const foundIdxToOriginalIdx = new Map<number, number>()\n\n for (let i = 0; i < peers.length; i++) {\n const input = peers[i]\n const resolvedPeer = resolved[i]\n\n if (!resolvedPeer) {\n if (typeof input === 'number') {\n notFoundIds.set(input, i)\n } else {\n notFoundUsernames.set(input, i)\n }\n\n notFoundCount += 1\n\n continue\n }\n\n foundInputPeers.push(resolvedPeer)\n foundIdxToOriginalIdx.set(foundInputPeers.length - 1, i)\n }\n\n const dialogs = await getPeerDialogs(client, foundInputPeers)\n\n if (foundInputPeers.length === peers.length) {\n return dialogs\n }\n\n const ret = new Array<Dialog>(peers.length)\n\n // populate found dialogs\n for (const [idx, origIdx] of foundIdxToOriginalIdx) {\n ret[origIdx] = dialogs[idx]\n }\n\n // now we need to iterate over all dialogs and try to find the rest\n for await (const dialog of iterDialogs(client, {\n archived: 'keep',\n })) {\n const chat = dialog.chat\n\n const idxById = notFoundIds.get(chat.id)\n\n if (idxById !== undefined) {\n ret[idxById] = dialog\n notFoundIds.delete(chat.id)\n notFoundCount -= 1\n }\n\n if (notFoundCount === 0) break\n\n if (!chat.username) continue\n\n const idxByUsername = notFoundUsernames.get(chat.username)\n\n if (idxByUsername !== undefined) {\n ret[idxByUsername] = dialog\n notFoundUsernames.delete(chat.username)\n notFoundCount -= 1\n }\n\n if (notFoundCount === 0) break\n }\n\n // if we still have some dialogs that we couldn't find, fail\n\n if (notFoundCount > 0) {\n const notFound = [...notFoundIds.keys(), ...notFoundUsernames.keys()]\n throw new MtPeerNotFoundError(`Could not find dialogs with peers: ${notFound.join(', ')}`)\n }\n\n return ret\n}\n"]}
@@ -0,0 +1,8 @@
1
+ import { ITelegramClient } from '../../client.types.js';
2
+ import { ChatlistPreview } from '../../types/index.js';
3
+ /**
4
+ * Get a preview of a chatlist by its invite link
5
+ *
6
+ * @param link Invite link
7
+ */
8
+ export declare function getChatlistPreview(client: ITelegramClient, link: string): Promise<ChatlistPreview>;
@@ -0,0 +1,14 @@
1
+ import { ChatlistPreview } from '../../types/index.js';
2
+ /**
3
+ * Get a preview of a chatlist by its invite link
4
+ *
5
+ * @param link Invite link
6
+ */
7
+ export async function getChatlistPreview(client, link) {
8
+ const res = await client.call({
9
+ _: 'chatlists.checkChatlistInvite',
10
+ slug: link,
11
+ });
12
+ return new ChatlistPreview(res);
13
+ }
14
+ //# sourceMappingURL=get-chatlist-preview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-chatlist-preview.js","sourceRoot":"","sources":["../../../../../src/highlevel/methods/dialogs/get-chatlist-preview.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAEtD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,MAAuB,EAAE,IAAY;IAC1E,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC;QAC1B,CAAC,EAAE,+BAA+B;QAClC,IAAI,EAAE,IAAI;KACb,CAAC,CAAA;IAEF,OAAO,IAAI,eAAe,CAAC,GAAG,CAAC,CAAA;AACnC,CAAC","sourcesContent":["import { ITelegramClient } from '../../client.types.js'\nimport { ChatlistPreview } from '../../types/index.js'\n\n/**\n * Get a preview of a chatlist by its invite link\n *\n * @param link Invite link\n */\nexport async function getChatlistPreview(client: ITelegramClient, link: string): Promise<ChatlistPreview> {\n const res = await client.call({\n _: 'chatlists.checkChatlistInvite',\n slug: link,\n })\n\n return new ChatlistPreview(res)\n}\n"]}
@@ -1,3 +1,4 @@
1
+ import { isPresent } from '../../../utils/type-assertions.js';
1
2
  import { Dialog } from '../../types/messages/dialog.js';
2
3
  import { resolvePeerMany } from '../users/resolve-peer-many.js';
3
4
  /**
@@ -10,7 +11,7 @@ export async function getPeerDialogs(client, peers) {
10
11
  peers = [peers];
11
12
  const res = await client.call({
12
13
  _: 'messages.getPeerDialogs',
13
- peers: await resolvePeerMany(client, peers).then((peers) => peers.map((it) => ({
14
+ peers: await resolvePeerMany(client, peers).then((peers) => peers.filter(isPresent).map((it) => ({
14
15
  _: 'inputDialogPeer',
15
16
  peer: it,
16
17
  }))),
@@ -1 +1 @@
1
- {"version":3,"file":"get-peer-dialogs.js","sourceRoot":"","sources":["../../../../../src/highlevel/methods/dialogs/get-peer-dialogs.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,gCAAgC,CAAA;AAEvD,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAE/D;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,MAAuB,EAAE,KAAgC;IAC1F,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,KAAK,GAAG,CAAC,KAAK,CAAC,CAAA;IAE1C,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC;QAC1B,CAAC,EAAE,yBAAyB;QAC5B,KAAK,EAAE,MAAM,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CACvD,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACf,CAAC,EAAE,iBAAiB;YACpB,IAAI,EAAE,EAAE;SACX,CAAC,CAAC,CACN;KACJ,CAAC,CAAA;IAEF,OAAO,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAA;AACrC,CAAC","sourcesContent":["import { MaybeArray } from '../../../types/utils.js'\nimport { ITelegramClient } from '../../client.types.js'\nimport { Dialog } from '../../types/messages/dialog.js'\nimport { InputPeerLike } from '../../types/peers/index.js'\nimport { resolvePeerMany } from '../users/resolve-peer-many.js'\n\n/**\n * Get dialogs with certain peers.\n *\n * @param peers Peers for which to fetch dialogs.\n */\nexport async function getPeerDialogs(client: ITelegramClient, peers: MaybeArray<InputPeerLike>): Promise<Dialog[]> {\n if (!Array.isArray(peers)) peers = [peers]\n\n const res = await client.call({\n _: 'messages.getPeerDialogs',\n peers: await resolvePeerMany(client, peers).then((peers) =>\n peers.map((it) => ({\n _: 'inputDialogPeer',\n peer: it,\n })),\n ),\n })\n\n return Dialog.parseTlDialogs(res)\n}\n"]}
1
+ {"version":3,"file":"get-peer-dialogs.js","sourceRoot":"","sources":["../../../../../src/highlevel/methods/dialogs/get-peer-dialogs.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAA;AAE7D,OAAO,EAAE,MAAM,EAAE,MAAM,gCAAgC,CAAA;AAEvD,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAE/D;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,MAAuB,EAAE,KAAgC;IAC1F,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,KAAK,GAAG,CAAC,KAAK,CAAC,CAAA;IAE1C,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC;QAC1B,CAAC,EAAE,yBAAyB;QAC5B,KAAK,EAAE,MAAM,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CACvD,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACjC,CAAC,EAAE,iBAAiB;YACpB,IAAI,EAAE,EAAE;SACX,CAAC,CAAC,CACN;KACJ,CAAC,CAAA;IAEF,OAAO,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAA;AACrC,CAAC","sourcesContent":["import { MaybeArray } from '../../../types/utils.js'\nimport { isPresent } from '../../../utils/type-assertions.js'\nimport { ITelegramClient } from '../../client.types.js'\nimport { Dialog } from '../../types/messages/dialog.js'\nimport { InputPeerLike } from '../../types/peers/index.js'\nimport { resolvePeerMany } from '../users/resolve-peer-many.js'\n\n/**\n * Get dialogs with certain peers.\n *\n * @param peers Peers for which to fetch dialogs.\n */\nexport async function getPeerDialogs(client: ITelegramClient, peers: MaybeArray<InputPeerLike>): Promise<Dialog[]> {\n if (!Array.isArray(peers)) peers = [peers]\n\n const res = await client.call({\n _: 'messages.getPeerDialogs',\n peers: await resolvePeerMany(client, peers).then((peers) =>\n peers.filter(isPresent).map((it) => ({\n _: 'inputDialogPeer',\n peer: it,\n })),\n ),\n })\n\n return Dialog.parseTlDialogs(res)\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import Long from 'long';
2
- import { MtUnsupportedError } from '../../../types/errors.js';
2
+ import { MtArgumentError } from '../../../types/errors.js';
3
3
  import { Dialog } from '../../types/index.js';
4
4
  import { normalizeDate } from '../../utils/misc-utils.js';
5
5
  import { _normalizeInputFolder } from './get-folders.js';
@@ -45,10 +45,59 @@ export async function* iterDialogs(client, params) {
45
45
  if (localFilters_?._ === 'dialogFilterDefault') {
46
46
  localFilters_ = undefined;
47
47
  }
48
- if (localFilters_?._ === 'dialogFilterChatlist') {
49
- throw new MtUnsupportedError('Shared chat folders are not supported yet');
50
- }
51
48
  const localFilters = localFilters_;
49
+ if (localFilters?._ === 'dialogFilterChatlist') {
50
+ if (offsetId !== 0 || offsetDate !== 0 || offsetPeer._ !== 'inputPeerEmpty') {
51
+ throw new MtArgumentError('Cannot use offset parameters with chatlist filters');
52
+ }
53
+ // we only need to fetch pinnedPeers and includePeers
54
+ // instead of fetching the entire dialog list, we can shortcut
55
+ // and just fetch the peer dialogs
56
+ let remaining = Math.min(limit, localFilters.includePeers.length + localFilters.pinnedPeers.length);
57
+ if (pinned === 'include' || pinned === 'only') {
58
+ // yield pinned dialogs
59
+ const peers = [];
60
+ for (const peer of localFilters.pinnedPeers) {
61
+ if (remaining <= 0)
62
+ break;
63
+ remaining--;
64
+ peers.push({
65
+ _: 'inputDialogPeer',
66
+ peer,
67
+ });
68
+ }
69
+ const res = await client.call({
70
+ _: 'messages.getPeerDialogs',
71
+ peers,
72
+ });
73
+ res.dialogs.forEach((dialog) => (dialog.pinned = true));
74
+ yield* Dialog.parseTlDialogs(res);
75
+ }
76
+ if (pinned === 'only' || remaining <= 0) {
77
+ return;
78
+ }
79
+ // yield non-pinned dialogs
80
+ let offset = 0;
81
+ while (remaining > 0) {
82
+ const peers = [];
83
+ for (let i = 0; i < chunkSize; i++) {
84
+ if (remaining <= 0)
85
+ break;
86
+ remaining--;
87
+ peers.push({
88
+ _: 'inputDialogPeer',
89
+ peer: localFilters.includePeers[offset + i],
90
+ });
91
+ }
92
+ offset += chunkSize;
93
+ const res = await client.call({
94
+ _: 'messages.getPeerDialogs',
95
+ peers,
96
+ });
97
+ yield* Dialog.parseTlDialogs(res);
98
+ }
99
+ return;
100
+ }
52
101
  if (localFilters) {
53
102
  archived = localFilters.excludeArchived ? 'exclude' : 'keep';
54
103
  }
@@ -128,7 +177,9 @@ export async function* iterDialogs(client, params) {
128
177
  const last = dialogs[dialogs.length - 1];
129
178
  offsetPeer = last.chat.inputPeer;
130
179
  offsetId = last.raw.topMessage;
131
- offsetDate = last.lastMessage.raw.date;
180
+ if (last.lastMessage) {
181
+ offsetDate = last.lastMessage.raw.date;
182
+ }
132
183
  for (const d of dialogs) {
133
184
  if (filterFolder && !filterFolder(d))
134
185
  continue;
@@ -1 +1 @@
1
- {"version":3,"file":"iter-dialogs.js","sourceRoot":"","sources":["../../../../../src/highlevel/methods/dialogs/iter-dialogs.ts"],"names":[],"mappings":"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","sourcesContent":["import Long from 'long'\n\nimport { tl } from '@mtcute/tl'\n\nimport { MtUnsupportedError } from '../../../types/errors.js'\nimport { ITelegramClient } from '../../client.types.js'\nimport { Dialog, InputDialogFolder } from '../../types/index.js'\nimport { normalizeDate } from '../../utils/misc-utils.js'\nimport { _normalizeInputFolder } from './get-folders.js'\n\n/**\n * Iterate over dialogs.\n *\n * Note that due to Telegram API limitations,\n * ordering here can only be anti-chronological\n * (i.e. newest - first), and draft update date\n * is not considered when sorting.\n *\n * @param params Fetch parameters\n */\nexport async function* iterDialogs(\n client: ITelegramClient,\n params?: {\n /**\n * Offset message date used as an anchor for pagination.\n */\n offsetDate?: Date | number\n\n /**\n * Offset message ID used as an anchor for pagination\n */\n offsetId?: number\n\n /**\n * Offset peer used as an anchor for pagination\n */\n offsetPeer?: tl.TypeInputPeer\n\n /**\n * Limits the number of dialogs to be received.\n *\n * @default `Infinity`, i.e. all dialogs are fetched\n */\n limit?: number\n\n /**\n * Chunk size which will be passed to `messages.getDialogs`.\n * You shouldn't usually care about this.\n *\n * @default 100.\n */\n chunkSize?: number\n\n /**\n * How to handle pinned dialogs?\n *\n * Whether to `include` them at the start of the list,\n * `exclude` them at all, or `only` return pinned dialogs.\n *\n * Additionally, for folders you can specify\n * `keep`, which will return pinned dialogs\n * ordered by date among other non-pinned dialogs.\n *\n * > **Note**: When using `include` mode with folders,\n * > pinned dialogs will only be fetched if all offset\n * > parameters are unset.\n *\n * @default `include`.\n */\n pinned?: 'include' | 'exclude' | 'only' | 'keep'\n\n /**\n * How to handle archived chats?\n *\n * Whether to `keep` them among other dialogs,\n * `exclude` them from the list, or `only`\n * return archived dialogs\n *\n * Ignored for folders, since folders\n * themselves contain information about archived chats.\n *\n * > **Note**: when `pinned=only`, `archived=keep` will act as `only`\n * > because of Telegram API limitations.\n *\n * @default `exclude`\n */\n archived?: 'keep' | 'exclude' | 'only'\n\n /**\n * Folder from which the dialogs will be fetched.\n *\n * You can pass folder object, id or title\n *\n * Note that passing anything except object will\n * cause the list of the folders to be fetched,\n * and passing a title may fetch from\n * a wrong folder if you have multiple with the same title.\n *\n * Also note that fetching dialogs in a folder is\n * *orders of magnitudes* slower than normal because\n * of Telegram API limitations - we have to fetch all dialogs\n * and filter the ones we need manually. If possible,\n * use {@link Dialog.filterFolder} instead.\n *\n * When a folder with given ID or title is not found,\n * {@link MtArgumentError} is thrown\n *\n * @default <empty> (fetches from \"All\" folder)\n */\n folder?: InputDialogFolder\n\n /**\n * Additional filtering for the dialogs.\n *\n * If `folder` is not provided, this filter is used instead.\n * If `folder` is provided, fields from this object are used\n * to override filters inside the folder.\n */\n filter?: Partial<Omit<tl.RawDialogFilter, '_' | 'id' | 'title'>>\n },\n): AsyncIterableIterator<Dialog> {\n if (!params) params = {}\n\n const { limit = Infinity, chunkSize = 100, folder, filter, pinned = 'include' } = params\n\n let { offsetId = 0, offsetPeer = { _: 'inputPeerEmpty' }, archived = 'exclude' } = params\n\n let offsetDate = normalizeDate(params.offsetDate) ?? 0\n\n let localFilters_: tl.TypeDialogFilter | undefined\n\n if (folder) {\n localFilters_ = await _normalizeInputFolder(client, folder)\n }\n\n if (filter) {\n if (localFilters_ && localFilters_._ !== 'dialogFilterDefault') {\n localFilters_ = {\n ...localFilters_,\n ...filter,\n }\n } else {\n localFilters_ = {\n _: 'dialogFilter',\n id: 0,\n title: '',\n pinnedPeers: [],\n includePeers: [],\n excludePeers: [],\n ...params.filter,\n }\n }\n }\n\n if (localFilters_?._ === 'dialogFilterDefault') {\n localFilters_ = undefined\n }\n\n if (localFilters_?._ === 'dialogFilterChatlist') {\n throw new MtUnsupportedError('Shared chat folders are not supported yet')\n }\n\n const localFilters = localFilters_\n\n if (localFilters) {\n archived = localFilters.excludeArchived ? 'exclude' : 'keep'\n }\n\n const fetchPinnedDialogsFromFolder = async (): Promise<tl.messages.RawPeerDialogs | null> => {\n if (!localFilters || !localFilters.pinnedPeers.length) {\n return null\n }\n const res = await client.call({\n _: 'messages.getPeerDialogs',\n peers: localFilters.pinnedPeers.map((peer) => ({\n _: 'inputDialogPeer' as const,\n peer,\n })),\n })\n\n res.dialogs.forEach((dialog: tl.Mutable<tl.TypeDialog>) => (dialog.pinned = true))\n\n return res\n }\n\n if (pinned === 'only') {\n let res\n\n if (localFilters) {\n res = await fetchPinnedDialogsFromFolder()\n } else {\n res = await client.call({\n _: 'messages.getPinnedDialogs',\n folderId: archived === 'exclude' ? 0 : 1,\n })\n }\n if (res) yield* Dialog.parseTlDialogs(res, limit)\n\n return\n }\n\n let current = 0\n\n if (\n localFilters?.pinnedPeers.length &&\n pinned === 'include' &&\n offsetId === 0 &&\n offsetDate === 0 &&\n offsetPeer._ === 'inputPeerEmpty'\n ) {\n const res = await fetchPinnedDialogsFromFolder()\n\n if (res) {\n const dialogs = Dialog.parseTlDialogs(res, limit)\n\n for (const d of dialogs) {\n yield d\n if (++current >= limit) return\n }\n }\n }\n // if pinned is `only`, this wouldn't be reached\n // if pinned is `exclude`, we want to exclude them\n // if pinned is `include`, we already yielded them, so we also want to exclude them\n // if pinned is `keep`, we want to keep them\n const filterFolder = localFilters ? Dialog.filterFolder(localFilters, pinned !== 'keep') : undefined\n\n let folderId\n\n if (archived === 'keep') {\n folderId = undefined\n } else if (archived === 'only') {\n folderId = 1\n } else {\n folderId = 0\n }\n\n for (;;) {\n const dialogs = Dialog.parseTlDialogs(\n await client.call({\n _: 'messages.getDialogs',\n excludePinned: params.pinned === 'exclude',\n folderId,\n offsetDate,\n offsetId,\n offsetPeer,\n limit: filterFolder ? chunkSize : Math.min(limit - current, chunkSize),\n hash: Long.ZERO,\n }),\n )\n if (!dialogs.length) return\n\n const last = dialogs[dialogs.length - 1]\n offsetPeer = last.chat.inputPeer\n offsetId = last.raw.topMessage\n offsetDate = last.lastMessage.raw.date\n\n for (const d of dialogs) {\n if (filterFolder && !filterFolder(d)) continue\n\n yield d\n if (++current >= limit) return\n }\n }\n}\n"]}
1
+ {"version":3,"file":"iter-dialogs.js","sourceRoot":"","sources":["../../../../../src/highlevel/methods/dialogs/iter-dialogs.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAA;AAIvB,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAE1D,OAAO,EAAE,MAAM,EAAqB,MAAM,sBAAsB,CAAA;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAA;AAExD;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,WAAW,CAC9B,MAAuB,EACvB,MAiGC;IAED,IAAI,CAAC,MAAM;QAAE,MAAM,GAAG,EAAE,CAAA;IAExB,MAAM,EAAE,KAAK,GAAG,QAAQ,EAAE,SAAS,GAAG,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,MAAM,CAAA;IAExF,IAAI,EAAE,QAAQ,GAAG,CAAC,EAAE,UAAU,GAAG,EAAE,CAAC,EAAE,gBAAgB,EAAE,EAAE,QAAQ,GAAG,SAAS,EAAE,GAAG,MAAM,CAAA;IAEzF,IAAI,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;IAEtD,IAAI,aAA8C,CAAA;IAElD,IAAI,MAAM,EAAE,CAAC;QACT,aAAa,GAAG,MAAM,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/D,CAAC;IAED,IAAI,MAAM,EAAE,CAAC;QACT,IAAI,aAAa,IAAI,aAAa,CAAC,CAAC,KAAK,qBAAqB,EAAE,CAAC;YAC7D,aAAa,GAAG;gBACZ,GAAG,aAAa;gBAChB,GAAG,MAAM;aACZ,CAAA;QACL,CAAC;aAAM,CAAC;YACJ,aAAa,GAAG;gBACZ,CAAC,EAAE,cAAc;gBACjB,EAAE,EAAE,CAAC;gBACL,KAAK,EAAE,EAAE;gBACT,WAAW,EAAE,EAAE;gBACf,YAAY,EAAE,EAAE;gBAChB,YAAY,EAAE,EAAE;gBAChB,GAAG,MAAM,CAAC,MAAM;aACnB,CAAA;QACL,CAAC;IACL,CAAC;IAED,IAAI,aAAa,EAAE,CAAC,KAAK,qBAAqB,EAAE,CAAC;QAC7C,aAAa,GAAG,SAAS,CAAA;IAC7B,CAAC;IAED,MAAM,YAAY,GAAG,aAAa,CAAA;IAElC,IAAI,YAAY,EAAE,CAAC,KAAK,sBAAsB,EAAE,CAAC;QAC7C,IAAI,QAAQ,KAAK,CAAC,IAAI,UAAU,KAAK,CAAC,IAAI,UAAU,CAAC,CAAC,KAAK,gBAAgB,EAAE,CAAC;YAC1E,MAAM,IAAI,eAAe,CAAC,oDAAoD,CAAC,CAAA;QACnF,CAAC;QAED,qDAAqD;QACrD,8DAA8D;QAC9D,kCAAkC;QAElC,IAAI,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,YAAY,CAAC,YAAY,CAAC,MAAM,GAAG,YAAY,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;QAEnG,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YAC5C,uBAAuB;YAEvB,MAAM,KAAK,GAA6B,EAAE,CAAA;YAE1C,KAAK,MAAM,IAAI,IAAI,YAAY,CAAC,WAAW,EAAE,CAAC;gBAC1C,IAAI,SAAS,IAAI,CAAC;oBAAE,MAAK;gBACzB,SAAS,EAAE,CAAA;gBACX,KAAK,CAAC,IAAI,CAAC;oBACP,CAAC,EAAE,iBAAiB;oBACpB,IAAI;iBACP,CAAC,CAAA;YACN,CAAC;YAED,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC;gBAC1B,CAAC,EAAE,yBAAyB;gBAC5B,KAAK;aACR,CAAC,CAAA;YAEF,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAiC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAA;YAElF,KAAK,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAA;QACrC,CAAC;QAED,IAAI,MAAM,KAAK,MAAM,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;YACtC,OAAM;QACV,CAAC;QAED,2BAA2B;QAE3B,IAAI,MAAM,GAAG,CAAC,CAAA;QAEd,OAAO,SAAS,GAAG,CAAC,EAAE,CAAC;YACnB,MAAM,KAAK,GAA6B,EAAE,CAAA;YAE1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;gBACjC,IAAI,SAAS,IAAI,CAAC;oBAAE,MAAK;gBACzB,SAAS,EAAE,CAAA;gBACX,KAAK,CAAC,IAAI,CAAC;oBACP,CAAC,EAAE,iBAAiB;oBACpB,IAAI,EAAE,YAAY,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;iBAC9C,CAAC,CAAA;YACN,CAAC;YAED,MAAM,IAAI,SAAS,CAAA;YAEnB,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC;gBAC1B,CAAC,EAAE,yBAAyB;gBAC5B,KAAK;aACR,CAAC,CAAA;YAEF,KAAK,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAA;QACrC,CAAC;QAED,OAAM;IACV,CAAC;IAED,IAAI,YAAY,EAAE,CAAC;QACf,QAAQ,GAAG,YAAY,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAA;IAChE,CAAC;IAED,MAAM,4BAA4B,GAAG,KAAK,IAAgD,EAAE;QACxF,IAAI,CAAC,YAAY,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;YACpD,OAAO,IAAI,CAAA;QACf,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC;YAC1B,CAAC,EAAE,yBAAyB;YAC5B,KAAK,EAAE,YAAY,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBAC3C,CAAC,EAAE,iBAA0B;gBAC7B,IAAI;aACP,CAAC,CAAC;SACN,CAAC,CAAA;QAEF,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAiC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAA;QAElF,OAAO,GAAG,CAAA;IACd,CAAC,CAAA;IAED,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACpB,IAAI,GAAG,CAAA;QAEP,IAAI,YAAY,EAAE,CAAC;YACf,GAAG,GAAG,MAAM,4BAA4B,EAAE,CAAA;QAC9C,CAAC;aAAM,CAAC;YACJ,GAAG,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC;gBACpB,CAAC,EAAE,2BAA2B;gBAC9B,QAAQ,EAAE,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aAC3C,CAAC,CAAA;QACN,CAAC;QACD,IAAI,GAAG;YAAE,KAAK,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;QAEjD,OAAM;IACV,CAAC;IAED,IAAI,OAAO,GAAG,CAAC,CAAA;IAEf,IACI,YAAY,EAAE,WAAW,CAAC,MAAM;QAChC,MAAM,KAAK,SAAS;QACpB,QAAQ,KAAK,CAAC;QACd,UAAU,KAAK,CAAC;QAChB,UAAU,CAAC,CAAC,KAAK,gBAAgB,EACnC,CAAC;QACC,MAAM,GAAG,GAAG,MAAM,4BAA4B,EAAE,CAAA;QAEhD,IAAI,GAAG,EAAE,CAAC;YACN,MAAM,OAAO,GAAG,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;YAEjD,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;gBACtB,MAAM,CAAC,CAAA;gBACP,IAAI,EAAE,OAAO,IAAI,KAAK;oBAAE,OAAM;YAClC,CAAC;QACL,CAAC;IACL,CAAC;IACD,gDAAgD;IAChD,kDAAkD;IAClD,mFAAmF;IACnF,4CAA4C;IAC5C,MAAM,YAAY,GAAG,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IAEpG,IAAI,QAAQ,CAAA;IAEZ,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;QACtB,QAAQ,GAAG,SAAS,CAAA;IACxB,CAAC;SAAM,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;QAC7B,QAAQ,GAAG,CAAC,CAAA;IAChB,CAAC;SAAM,CAAC;QACJ,QAAQ,GAAG,CAAC,CAAA;IAChB,CAAC;IAED,SAAS,CAAC;QACN,MAAM,OAAO,GAAG,MAAM,CAAC,cAAc,CACjC,MAAM,MAAM,CAAC,IAAI,CAAC;YACd,CAAC,EAAE,qBAAqB;YACxB,aAAa,EAAE,MAAM,CAAC,MAAM,KAAK,SAAS;YAC1C,QAAQ;YACR,UAAU;YACV,QAAQ;YACR,UAAU;YACV,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,OAAO,EAAE,SAAS,CAAC;YACtE,IAAI,EAAE,IAAI,CAAC,IAAI;SAClB,CAAC,CACL,CAAA;QACD,IAAI,CAAC,OAAO,CAAC,MAAM;YAAE,OAAM;QAE3B,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;QACxC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAA;QAChC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAA;QAE9B,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAA;QAC1C,CAAC;QAED,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACtB,IAAI,YAAY,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;gBAAE,SAAQ;YAE9C,MAAM,CAAC,CAAA;YACP,IAAI,EAAE,OAAO,IAAI,KAAK;gBAAE,OAAM;QAClC,CAAC;IACL,CAAC;AACL,CAAC","sourcesContent":["import Long from 'long'\n\nimport { tl } from '@mtcute/tl'\n\nimport { MtArgumentError } from '../../../types/errors.js'\nimport { ITelegramClient } from '../../client.types.js'\nimport { Dialog, InputDialogFolder } from '../../types/index.js'\nimport { normalizeDate } from '../../utils/misc-utils.js'\nimport { _normalizeInputFolder } from './get-folders.js'\n\n/**\n * Iterate over dialogs.\n *\n * Note that due to Telegram API limitations,\n * ordering here can only be anti-chronological\n * (i.e. newest - first), and draft update date\n * is not considered when sorting.\n *\n * @param params Fetch parameters\n */\nexport async function* iterDialogs(\n client: ITelegramClient,\n params?: {\n /**\n * Offset message date used as an anchor for pagination.\n */\n offsetDate?: Date | number\n\n /**\n * Offset message ID used as an anchor for pagination\n */\n offsetId?: number\n\n /**\n * Offset peer used as an anchor for pagination\n */\n offsetPeer?: tl.TypeInputPeer\n\n /**\n * Limits the number of dialogs to be received.\n *\n * @default `Infinity`, i.e. all dialogs are fetched\n */\n limit?: number\n\n /**\n * Chunk size which will be passed to `messages.getDialogs`.\n * You shouldn't usually care about this.\n *\n * @default 100.\n */\n chunkSize?: number\n\n /**\n * How to handle pinned dialogs?\n *\n * Whether to `include` them at the start of the list,\n * `exclude` them at all, or `only` return pinned dialogs.\n *\n * Additionally, for folders you can specify\n * `keep`, which will return pinned dialogs\n * ordered by date among other non-pinned dialogs.\n *\n * > **Note**: When using `include` mode with folders,\n * > pinned dialogs will only be fetched if all offset\n * > parameters are unset.\n *\n * @default `include`.\n */\n pinned?: 'include' | 'exclude' | 'only' | 'keep'\n\n /**\n * How to handle archived chats?\n *\n * Whether to `keep` them among other dialogs,\n * `exclude` them from the list, or `only`\n * return archived dialogs\n *\n * Ignored for folders, since folders\n * themselves contain information about archived chats.\n *\n * > **Note**: when `pinned=only`, `archived=keep` will act as `only`\n * > because of Telegram API limitations.\n *\n * @default `exclude`\n */\n archived?: 'keep' | 'exclude' | 'only'\n\n /**\n * Folder from which the dialogs will be fetched.\n *\n * You can pass folder object, id or title\n *\n * Note that passing anything except object will\n * cause the list of the folders to be fetched,\n * and passing a title may fetch from\n * a wrong folder if you have multiple with the same title.\n *\n * Also note that fetching dialogs in a folder is\n * *orders of magnitudes* slower than normal because\n * of Telegram API limitations - we have to fetch all dialogs\n * and filter the ones we need manually. If possible,\n * use {@link Dialog.filterFolder} instead.\n *\n * When a folder with given ID or title is not found,\n * {@link MtArgumentError} is thrown\n *\n * @default <empty> (fetches from \"All\" folder)\n */\n folder?: InputDialogFolder\n\n /**\n * Additional filtering for the dialogs.\n *\n * If `folder` is not provided, this filter is used instead.\n * If `folder` is provided, fields from this object are used\n * to override filters inside the folder.\n */\n filter?: Partial<Omit<tl.RawDialogFilter, '_' | 'id' | 'title'>>\n },\n): AsyncIterableIterator<Dialog> {\n if (!params) params = {}\n\n const { limit = Infinity, chunkSize = 100, folder, filter, pinned = 'include' } = params\n\n let { offsetId = 0, offsetPeer = { _: 'inputPeerEmpty' }, archived = 'exclude' } = params\n\n let offsetDate = normalizeDate(params.offsetDate) ?? 0\n\n let localFilters_: tl.TypeDialogFilter | undefined\n\n if (folder) {\n localFilters_ = await _normalizeInputFolder(client, folder)\n }\n\n if (filter) {\n if (localFilters_ && localFilters_._ !== 'dialogFilterDefault') {\n localFilters_ = {\n ...localFilters_,\n ...filter,\n }\n } else {\n localFilters_ = {\n _: 'dialogFilter',\n id: 0,\n title: '',\n pinnedPeers: [],\n includePeers: [],\n excludePeers: [],\n ...params.filter,\n }\n }\n }\n\n if (localFilters_?._ === 'dialogFilterDefault') {\n localFilters_ = undefined\n }\n\n const localFilters = localFilters_\n\n if (localFilters?._ === 'dialogFilterChatlist') {\n if (offsetId !== 0 || offsetDate !== 0 || offsetPeer._ !== 'inputPeerEmpty') {\n throw new MtArgumentError('Cannot use offset parameters with chatlist filters')\n }\n\n // we only need to fetch pinnedPeers and includePeers\n // instead of fetching the entire dialog list, we can shortcut\n // and just fetch the peer dialogs\n\n let remaining = Math.min(limit, localFilters.includePeers.length + localFilters.pinnedPeers.length)\n\n if (pinned === 'include' || pinned === 'only') {\n // yield pinned dialogs\n\n const peers: tl.TypeInputDialogPeer[] = []\n\n for (const peer of localFilters.pinnedPeers) {\n if (remaining <= 0) break\n remaining--\n peers.push({\n _: 'inputDialogPeer',\n peer,\n })\n }\n\n const res = await client.call({\n _: 'messages.getPeerDialogs',\n peers,\n })\n\n res.dialogs.forEach((dialog: tl.Mutable<tl.TypeDialog>) => (dialog.pinned = true))\n\n yield* Dialog.parseTlDialogs(res)\n }\n\n if (pinned === 'only' || remaining <= 0) {\n return\n }\n\n // yield non-pinned dialogs\n\n let offset = 0\n\n while (remaining > 0) {\n const peers: tl.TypeInputDialogPeer[] = []\n\n for (let i = 0; i < chunkSize; i++) {\n if (remaining <= 0) break\n remaining--\n peers.push({\n _: 'inputDialogPeer',\n peer: localFilters.includePeers[offset + i],\n })\n }\n\n offset += chunkSize\n\n const res = await client.call({\n _: 'messages.getPeerDialogs',\n peers,\n })\n\n yield* Dialog.parseTlDialogs(res)\n }\n\n return\n }\n\n if (localFilters) {\n archived = localFilters.excludeArchived ? 'exclude' : 'keep'\n }\n\n const fetchPinnedDialogsFromFolder = async (): Promise<tl.messages.RawPeerDialogs | null> => {\n if (!localFilters || !localFilters.pinnedPeers.length) {\n return null\n }\n const res = await client.call({\n _: 'messages.getPeerDialogs',\n peers: localFilters.pinnedPeers.map((peer) => ({\n _: 'inputDialogPeer' as const,\n peer,\n })),\n })\n\n res.dialogs.forEach((dialog: tl.Mutable<tl.TypeDialog>) => (dialog.pinned = true))\n\n return res\n }\n\n if (pinned === 'only') {\n let res\n\n if (localFilters) {\n res = await fetchPinnedDialogsFromFolder()\n } else {\n res = await client.call({\n _: 'messages.getPinnedDialogs',\n folderId: archived === 'exclude' ? 0 : 1,\n })\n }\n if (res) yield* Dialog.parseTlDialogs(res, limit)\n\n return\n }\n\n let current = 0\n\n if (\n localFilters?.pinnedPeers.length &&\n pinned === 'include' &&\n offsetId === 0 &&\n offsetDate === 0 &&\n offsetPeer._ === 'inputPeerEmpty'\n ) {\n const res = await fetchPinnedDialogsFromFolder()\n\n if (res) {\n const dialogs = Dialog.parseTlDialogs(res, limit)\n\n for (const d of dialogs) {\n yield d\n if (++current >= limit) return\n }\n }\n }\n // if pinned is `only`, this wouldn't be reached\n // if pinned is `exclude`, we want to exclude them\n // if pinned is `include`, we already yielded them, so we also want to exclude them\n // if pinned is `keep`, we want to keep them\n const filterFolder = localFilters ? Dialog.filterFolder(localFilters, pinned !== 'keep') : undefined\n\n let folderId\n\n if (archived === 'keep') {\n folderId = undefined\n } else if (archived === 'only') {\n folderId = 1\n } else {\n folderId = 0\n }\n\n for (;;) {\n const dialogs = Dialog.parseTlDialogs(\n await client.call({\n _: 'messages.getDialogs',\n excludePinned: params.pinned === 'exclude',\n folderId,\n offsetDate,\n offsetId,\n offsetPeer,\n limit: filterFolder ? chunkSize : Math.min(limit - current, chunkSize),\n hash: Long.ZERO,\n }),\n )\n if (!dialogs.length) return\n\n const last = dialogs[dialogs.length - 1]\n offsetPeer = last.chat.inputPeer\n offsetId = last.raw.topMessage\n\n if (last.lastMessage) {\n offsetDate = last.lastMessage.raw.date\n }\n\n for (const d of dialogs) {\n if (filterFolder && !filterFolder(d)) continue\n\n yield d\n if (++current >= limit) return\n }\n }\n}\n"]}
@@ -0,0 +1,15 @@
1
+ import { tl } from '@mtcute/tl';
2
+ import { MaybeArray } from '../../../types/utils.js';
3
+ import { ITelegramClient } from '../../client.types.js';
4
+ import { InputPeerLike } from '../../types/index.js';
5
+ /**
6
+ * Join a chatlist by its link
7
+ *
8
+ * @param link Invite link to the chatlist
9
+ * @param params Additional parameters
10
+ * @returns Folder representing the chatlist
11
+ */
12
+ export declare function joinChatlist(client: ITelegramClient, link: string, params?: {
13
+ /** Chats to join from the chatlist (all by default) */
14
+ peers?: MaybeArray<InputPeerLike>;
15
+ }): Promise<tl.RawDialogFilterChatlist>;
@@ -0,0 +1,38 @@
1
+ import { MtTypeAssertionError } from '../../../types/errors.js';
2
+ import { assertTypeIs, isPresent } from '../../../utils/type-assertions.js';
3
+ import { assertIsUpdatesGroup } from '../../updates/utils.js';
4
+ import { resolvePeerMany } from '../users/resolve-peer-many.js';
5
+ import { getChatlistPreview } from './get-chatlist-preview.js';
6
+ /**
7
+ * Join a chatlist by its link
8
+ *
9
+ * @param link Invite link to the chatlist
10
+ * @param params Additional parameters
11
+ * @returns Folder representing the chatlist
12
+ */
13
+ export async function joinChatlist(client, link, params) {
14
+ let peers;
15
+ if (params?.peers) {
16
+ const inputs = Array.isArray(params.peers) ? params.peers : [params.peers];
17
+ const all = await resolvePeerMany(client, inputs);
18
+ peers = all.filter(isPresent);
19
+ }
20
+ else {
21
+ const preview = await getChatlistPreview(client, link);
22
+ peers = preview.chats.filter((it) => !it.isUnavailable).map((it) => it.inputPeer);
23
+ }
24
+ const res = await client.call({
25
+ _: 'chatlists.joinChatlistInvite',
26
+ slug: link,
27
+ peers,
28
+ });
29
+ assertIsUpdatesGroup('joinChatlist', res);
30
+ client.handleClientUpdate(res);
31
+ const filter = res.updates.find((it) => it._ === 'updateDialogFilter');
32
+ if (!filter?.filter) {
33
+ throw new MtTypeAssertionError('joinChatlist', 'updateDialogFilter', 'nothing');
34
+ }
35
+ assertTypeIs('joinChatlist', filter.filter, 'dialogFilterChatlist');
36
+ return filter.filter;
37
+ }
38
+ //# sourceMappingURL=join-chatlist.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"join-chatlist.js","sourceRoot":"","sources":["../../../../../src/highlevel/methods/dialogs/join-chatlist.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAA;AAE/D,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAA;AAG3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAE9D;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAC9B,MAAuB,EACvB,IAAY,EACZ,MAGC;IAED,IAAI,KAAyB,CAAA;IAE7B,IAAI,MAAM,EAAE,KAAK,EAAE,CAAC;QAChB,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAC1E,MAAM,GAAG,GAAG,MAAM,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QACjD,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;IACjC,CAAC;SAAM,CAAC;QACJ,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;QACtD,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,CAAA;IACrF,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC;QAC1B,CAAC,EAAE,8BAA8B;QACjC,IAAI,EAAE,IAAI;QACV,KAAK;KACR,CAAC,CAAA;IAEF,oBAAoB,CAAC,cAAc,EAAE,GAAG,CAAC,CAAA;IACzC,MAAM,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAA;IAE9B,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,oBAAoB,CAA6B,CAAA;IAElG,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;QAClB,MAAM,IAAI,oBAAoB,CAAC,cAAc,EAAE,oBAAoB,EAAE,SAAS,CAAC,CAAA;IACnF,CAAC;IAED,YAAY,CAAC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAA;IAEnE,OAAO,MAAM,CAAC,MAAM,CAAA;AACxB,CAAC","sourcesContent":["import { tl } from '@mtcute/tl'\n\nimport { MtTypeAssertionError } from '../../../types/errors.js'\nimport { MaybeArray } from '../../../types/utils.js'\nimport { assertTypeIs, isPresent } from '../../../utils/type-assertions.js'\nimport { ITelegramClient } from '../../client.types.js'\nimport { InputPeerLike } from '../../types/index.js'\nimport { assertIsUpdatesGroup } from '../../updates/utils.js'\nimport { resolvePeerMany } from '../users/resolve-peer-many.js'\nimport { getChatlistPreview } from './get-chatlist-preview.js'\n\n/**\n * Join a chatlist by its link\n *\n * @param link Invite link to the chatlist\n * @param params Additional parameters\n * @returns Folder representing the chatlist\n */\nexport async function joinChatlist(\n client: ITelegramClient,\n link: string,\n params?: {\n /** Chats to join from the chatlist (all by default) */\n peers?: MaybeArray<InputPeerLike>\n },\n): Promise<tl.RawDialogFilterChatlist> {\n let peers: tl.TypeInputPeer[]\n\n if (params?.peers) {\n const inputs = Array.isArray(params.peers) ? params.peers : [params.peers]\n const all = await resolvePeerMany(client, inputs)\n peers = all.filter(isPresent)\n } else {\n const preview = await getChatlistPreview(client, link)\n peers = preview.chats.filter((it) => !it.isUnavailable).map((it) => it.inputPeer)\n }\n\n const res = await client.call({\n _: 'chatlists.joinChatlistInvite',\n slug: link,\n peers,\n })\n\n assertIsUpdatesGroup('joinChatlist', res)\n client.handleClientUpdate(res)\n\n const filter = res.updates.find((it) => it._ === 'updateDialogFilter') as tl.RawUpdateDialogFilter\n\n if (!filter?.filter) {\n throw new MtTypeAssertionError('joinChatlist', 'updateDialogFilter', 'nothing')\n }\n\n assertTypeIs('joinChatlist', filter.filter, 'dialogFilterChatlist')\n\n return filter.filter\n}\n"]}
@@ -1,7 +1,8 @@
1
1
  import { tl } from '@mtcute/tl';
2
2
  import { RpcCallOptions } from '../../../network/network-manager.js';
3
+ import { MustEqual } from '../../../types/utils.js';
3
4
  import { ITelegramClient } from '../../client.types.js';
4
5
  /**
5
6
  * @internal
6
7
  */
7
- export declare function _maybeInvokeWithBusinessConnection<T extends tl.RpcMethod>(client: ITelegramClient, businessConnectionId: string | undefined, request: T, params?: RpcCallOptions): Promise<tl.RpcCallReturn[T['_']]>;
8
+ export declare function _maybeInvokeWithBusinessConnection<T extends tl.RpcMethod>(client: ITelegramClient, businessConnectionId: string | undefined, request: MustEqual<T, tl.RpcMethod>, params?: RpcCallOptions): Promise<tl.RpcCallReturn[T['_']]>;
@@ -1 +1 @@
1
- {"version":3,"file":"_business-connection.js","sourceRoot":"","sources":["../../../../../src/highlevel/methods/messages/_business-connection.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AAElD,OAAO,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAA;AAE7E,qBAAqB;AACrB,oEAAoE;AACpE,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA;AAErC,MAAM,QAAQ,GAAG,CAAC,MAAuB,EAA0B,EAAE;IACjE,MAAM,OAAO,GAAG,MAAsE,CAAA;IAEtF,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,aAAa,CAAC,GAAG,IAAI,MAAM,CAAC,EAAE,CAAC,CAAA;IAC3C,CAAC;IAED,OAAO,OAAO,CAAC,aAAa,CAAC,CAAA;AACjC,CAAC,CAAA;AAED,kBAAkB;AAClB;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,kCAAkC,CACpD,MAAuB,EACvB,oBAAwC,EACxC,OAAU,EACV,MAAuB;IAEvB,IAAI,CAAC,oBAAoB,EAAE,CAAC;QACxB,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IACvC,CAAC;IAED,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAA;IAE9B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,oBAAoB,CAAC,EAAE,CAAC;QACnC,MAAM,GAAG,GAAG,MAAM,qBAAqB,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAA;QAErE,KAAK,CAAC,GAAG,CAAC,oBAAoB,EAAE,GAAG,CAAC,IAAI,CAAC,CAAA;IAC7C,CAAC;IAED,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,oBAAoB,CAAE,CAAA;IAE7C,+DAA+D;IAC/D,OAAO,MAAM,CAAC,IAAI,CACd;QACI,CAAC,EAAE,8BAA8B;QACjC,YAAY,EAAE,oBAAoB;QAClC,KAAK,EAAE,OAAO;KACjB,EACD;QACI,GAAG,MAAM;QACT,YAAY,EAAE,IAAI,EAAE,eAAe;QACnC,IAAI;KACP,CACJ,CAAA;AACL,CAAC","sourcesContent":["import { tl } from '@mtcute/tl'\n\nimport { RpcCallOptions } from '../../../network/network-manager.js'\nimport { LruMap } from '../../../utils/lru-map.js'\nimport { ITelegramClient } from '../../client.types.js'\nimport { getBusinessConnection } from '../premium/get-business-connection.js'\n\n// temporary solution\n// todo – rework once we have either a more generic caching solution\nconst DC_MAP_SYMBOL = Symbol('dcMap')\n\nconst getDcMap = (client: ITelegramClient): LruMap<string, number> => {\n const client_ = client as typeof client & { [DC_MAP_SYMBOL]?: LruMap<string, number> }\n\n if (!client_[DC_MAP_SYMBOL]) {\n client_[DC_MAP_SYMBOL] = new LruMap(50)\n }\n\n return client_[DC_MAP_SYMBOL]\n}\n\n// @available=both\n/**\n * @internal\n */\nexport async function _maybeInvokeWithBusinessConnection<T extends tl.RpcMethod>(\n client: ITelegramClient,\n businessConnectionId: string | undefined,\n request: T,\n params?: RpcCallOptions,\n): Promise<tl.RpcCallReturn[T['_']]> {\n if (!businessConnectionId) {\n return client.call(request, params)\n }\n\n const dcMap = getDcMap(client)\n\n if (!dcMap.has(businessConnectionId)) {\n const res = await getBusinessConnection(client, businessConnectionId)\n\n dcMap.set(businessConnectionId, res.dcId)\n }\n\n const dcId = dcMap.get(businessConnectionId)!\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return client.call(\n {\n _: 'invokeWithBusinessConnection',\n connectionId: businessConnectionId,\n query: request,\n },\n {\n ...params,\n localMigrate: true, // just in case\n dcId,\n },\n )\n}\n"]}
1
+ {"version":3,"file":"_business-connection.js","sourceRoot":"","sources":["../../../../../src/highlevel/methods/messages/_business-connection.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AAElD,OAAO,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAA;AAE7E,qBAAqB;AACrB,oEAAoE;AACpE,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA;AAErC,MAAM,QAAQ,GAAG,CAAC,MAAuB,EAA0B,EAAE;IACjE,MAAM,OAAO,GAAG,MAAsE,CAAA;IAEtF,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,aAAa,CAAC,GAAG,IAAI,MAAM,CAAC,EAAE,CAAC,CAAA;IAC3C,CAAC;IAED,OAAO,OAAO,CAAC,aAAa,CAAC,CAAA;AACjC,CAAC,CAAA;AAED,kBAAkB;AAClB;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,kCAAkC,CACpD,MAAuB,EACvB,oBAAwC,EACxC,OAAmC,EACnC,MAAuB;IAEvB,IAAI,CAAC,oBAAoB,EAAE,CAAC;QACxB,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IACvC,CAAC;IAED,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAA;IAE9B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,oBAAoB,CAAC,EAAE,CAAC;QACnC,MAAM,GAAG,GAAG,MAAM,qBAAqB,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAA;QAErE,KAAK,CAAC,GAAG,CAAC,oBAAoB,EAAE,GAAG,CAAC,IAAI,CAAC,CAAA;IAC7C,CAAC;IAED,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,oBAAoB,CAAE,CAAA;IAE7C,+DAA+D;IAC/D,OAAO,MAAM,CAAC,IAAI,CACd;QACI,CAAC,EAAE,8BAA8B;QACjC,YAAY,EAAE,oBAAoB;QAClC,KAAK,EAAE,OAAO;KACjB,EACD;QACI,GAAG,MAAM;QACT,YAAY,EAAE,IAAI,EAAE,eAAe;QACnC,IAAI;KACP,CACJ,CAAA;AACL,CAAC","sourcesContent":["import { tl } from '@mtcute/tl'\n\nimport { RpcCallOptions } from '../../../network/network-manager.js'\nimport { MustEqual } from '../../../types/utils.js'\nimport { LruMap } from '../../../utils/lru-map.js'\nimport { ITelegramClient } from '../../client.types.js'\nimport { getBusinessConnection } from '../premium/get-business-connection.js'\n\n// temporary solution\n// todo – rework once we have either a more generic caching solution\nconst DC_MAP_SYMBOL = Symbol('dcMap')\n\nconst getDcMap = (client: ITelegramClient): LruMap<string, number> => {\n const client_ = client as typeof client & { [DC_MAP_SYMBOL]?: LruMap<string, number> }\n\n if (!client_[DC_MAP_SYMBOL]) {\n client_[DC_MAP_SYMBOL] = new LruMap(50)\n }\n\n return client_[DC_MAP_SYMBOL]\n}\n\n// @available=both\n/**\n * @internal\n */\nexport async function _maybeInvokeWithBusinessConnection<T extends tl.RpcMethod>(\n client: ITelegramClient,\n businessConnectionId: string | undefined,\n request: MustEqual<T, tl.RpcMethod>,\n params?: RpcCallOptions,\n): Promise<tl.RpcCallReturn[T['_']]> {\n if (!businessConnectionId) {\n return client.call(request, params)\n }\n\n const dcMap = getDcMap(client)\n\n if (!dcMap.has(businessConnectionId)) {\n const res = await getBusinessConnection(client, businessConnectionId)\n\n dcMap.set(businessConnectionId, res.dcId)\n }\n\n const dcId = dcMap.get(businessConnectionId)!\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return client.call(\n {\n _: 'invokeWithBusinessConnection',\n connectionId: businessConnectionId,\n query: request,\n },\n {\n ...params,\n localMigrate: true, // just in case\n dcId,\n },\n )\n}\n"]}
@@ -0,0 +1,6 @@
1
+ import { ITelegramClient } from '../../client.types.js';
2
+ import { MessageEffect } from '../../types/index.js';
3
+ /**
4
+ * Get a list of available message effects
5
+ */
6
+ export declare function getAvailableMessageEffects(client: ITelegramClient): Promise<MessageEffect[]>;
@@ -0,0 +1,22 @@
1
+ import { LongMap } from '../../../utils/long-utils.js';
2
+ import { assertTypeIsNot } from '../../../utils/type-assertions.js';
3
+ import { MessageEffect } from '../../types/index.js';
4
+ // @available=user
5
+ /**
6
+ * Get a list of available message effects
7
+ */
8
+ export async function getAvailableMessageEffects(client) {
9
+ const res = await client.call({
10
+ _: 'messages.getAvailableEffects',
11
+ hash: 0,
12
+ });
13
+ assertTypeIsNot('getAvailableMessageEffects', res, 'messages.availableEffectsNotModified');
14
+ const documentsMap = new LongMap();
15
+ for (const doc of res.documents) {
16
+ if (doc._ !== 'document')
17
+ continue;
18
+ documentsMap.set(doc.id, doc);
19
+ }
20
+ return res.effects.map((effect) => new MessageEffect(effect, documentsMap));
21
+ }
22
+ //# sourceMappingURL=get-available-effects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-available-effects.js","sourceRoot":"","sources":["../../../../../src/highlevel/methods/messages/get-available-effects.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAA;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAA;AAEnE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAEpD,kBAAkB;AAClB;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAAC,MAAuB;IACpE,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC;QAC1B,CAAC,EAAE,8BAA8B;QACjC,IAAI,EAAE,CAAC;KACV,CAAC,CAAA;IAEF,eAAe,CAAC,4BAA4B,EAAE,GAAG,EAAE,sCAAsC,CAAC,CAAA;IAE1F,MAAM,YAAY,GAAG,IAAI,OAAO,EAAkB,CAAA;IAElD,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;QAC9B,IAAI,GAAG,CAAC,CAAC,KAAK,UAAU;YAAE,SAAQ;QAClC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAA;IACjC,CAAC;IAED,OAAO,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,aAAa,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAA;AAC/E,CAAC","sourcesContent":["import { tl } from '@mtcute/tl'\n\nimport { LongMap } from '../../../utils/long-utils.js'\nimport { assertTypeIsNot } from '../../../utils/type-assertions.js'\nimport { ITelegramClient } from '../../client.types.js'\nimport { MessageEffect } from '../../types/index.js'\n\n// @available=user\n/**\n * Get a list of available message effects\n */\nexport async function getAvailableMessageEffects(client: ITelegramClient): Promise<MessageEffect[]> {\n const res = await client.call({\n _: 'messages.getAvailableEffects',\n hash: 0,\n })\n\n assertTypeIsNot('getAvailableMessageEffects', res, 'messages.availableEffectsNotModified')\n\n const documentsMap = new LongMap<tl.RawDocument>()\n\n for (const doc of res.documents) {\n if (doc._ !== 'document') continue\n documentsMap.set(doc.id, doc)\n }\n\n return res.effects.map((effect) => new MessageEffect(effect, documentsMap))\n}\n"]}
@@ -0,0 +1,11 @@
1
+ import { MaybeArray } from '../../../types/utils.js';
2
+ import { ITelegramClient } from '../../client.types.js';
3
+ import { InputPeerLike } from '../../types/index.js';
4
+ import { FactCheck } from '../../types/messages/fact-check.js';
5
+ /**
6
+ * Get fact check information for one or more messages in a chat
7
+ *
8
+ * @param chatId Chat where the messages are located
9
+ * @param msgIds One or more message IDs
10
+ */
11
+ export declare function getFactCheck(client: ITelegramClient, chatId: InputPeerLike, msgIds: MaybeArray<number>): Promise<(FactCheck | null)[]>;
@@ -0,0 +1,23 @@
1
+ import { FactCheck } from '../../types/messages/fact-check.js';
2
+ import { resolvePeer } from '../users/resolve-peer.js';
3
+ // @available=user
4
+ /**
5
+ * Get fact check information for one or more messages in a chat
6
+ *
7
+ * @param chatId Chat where the messages are located
8
+ * @param msgIds One or more message IDs
9
+ */
10
+ export async function getFactCheck(client, chatId, msgIds) {
11
+ const res = await client.call({
12
+ _: 'messages.getFactCheck',
13
+ peer: await resolvePeer(client, chatId),
14
+ msgId: Array.isArray(msgIds) ? msgIds : [msgIds],
15
+ });
16
+ return res.map((x) => {
17
+ if (x.hash.isZero()) {
18
+ return null;
19
+ }
20
+ return new FactCheck(x);
21
+ });
22
+ }
23
+ //# sourceMappingURL=get-fact-check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-fact-check.js","sourceRoot":"","sources":["../../../../../src/highlevel/methods/messages/get-fact-check.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,oCAAoC,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAEtD,kBAAkB;AAClB;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAC9B,MAAuB,EACvB,MAAqB,EACrB,MAA0B;IAE1B,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC;QAC1B,CAAC,EAAE,uBAAuB;QAC1B,IAAI,EAAE,MAAM,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC;QACvC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;KACnD,CAAC,CAAA;IAEF,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACjB,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;YAClB,OAAO,IAAI,CAAA;QACf,CAAC;QAED,OAAO,IAAI,SAAS,CAAC,CAAC,CAAC,CAAA;IAC3B,CAAC,CAAC,CAAA;AACN,CAAC","sourcesContent":["import { MaybeArray } from '../../../types/utils.js'\nimport { ITelegramClient } from '../../client.types.js'\nimport { InputPeerLike } from '../../types/index.js'\nimport { FactCheck } from '../../types/messages/fact-check.js'\nimport { resolvePeer } from '../users/resolve-peer.js'\n\n// @available=user\n/**\n * Get fact check information for one or more messages in a chat\n *\n * @param chatId Chat where the messages are located\n * @param msgIds One or more message IDs\n */\nexport async function getFactCheck(\n client: ITelegramClient,\n chatId: InputPeerLike,\n msgIds: MaybeArray<number>,\n): Promise<(FactCheck | null)[]> {\n const res = await client.call({\n _: 'messages.getFactCheck',\n peer: await resolvePeer(client, chatId),\n msgId: Array.isArray(msgIds) ? msgIds : [msgIds],\n })\n\n return res.map((x) => {\n if (x.hash.isZero()) {\n return null\n }\n\n return new FactCheck(x)\n })\n}\n"]}
@@ -21,6 +21,7 @@ export async function getMessageReactionsById(client, chatId, messages) {
21
21
  id: messages,
22
22
  });
23
23
  assertIsUpdatesGroup('messages.getMessagesReactions', res);
24
+ client.handleClientUpdate(res);
24
25
  // normally the group contains updateMessageReactions
25
26
  // for each message requested that has reactions
26
27
  //
@@ -1 +1 @@
1
- {"version":3,"file":"get-message-reactions.js","sourceRoot":"","sources":["../../../../../src/highlevel/methods/messages/get-message-reactions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAA;AAEhE,OAAO,EAA0B,gBAAgB,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAC3F,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAEtD;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CACzC,MAAuB,EACvB,MAAqB,EACrB,QAAkB;IAElB,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC;QAC1B,CAAC,EAAE,+BAA+B;QAClC,IAAI,EAAE,MAAM,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC;QACvC,EAAE,EAAE,QAAQ;KACf,CAAC,CAAA;IAEF,oBAAoB,CAAC,+BAA+B,EAAE,GAAG,CAAC,CAAA;IAE1D,qDAAqD;IACrD,gDAAgD;IAChD,EAAE;IACF,+CAA+C;IAC/C,+CAA+C;IAE/C,MAAM,KAAK,GAAqC,EAAE,CAAA;IAElD,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAElC,KAAK,MAAM,MAAM,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;QAC/B,YAAY,CAAC,+BAA+B,EAAE,MAAM,EAAE,wBAAwB,CAAC,CAAA;QAE/E,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,gBAAgB,CAAC,MAAM,CAAC,KAAK,EAAE,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;IACnH,CAAC;IAED,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,CAAA;AAChE,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACrC,MAAuB,EACvB,QAAmB;IAEnB,OAAO,uBAAuB,CAC1B,MAAM,EACN,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,EAC1B,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAC9B,CAAA;AACL,CAAC","sourcesContent":["import { getMarkedPeerId } from '../../../utils/peer-utils.js'\nimport { assertTypeIs } from '../../../utils/type-assertions.js'\nimport { ITelegramClient } from '../../client.types.js'\nimport { InputPeerLike, Message, MessageReactions, PeersIndex } from '../../types/index.js'\nimport { assertIsUpdatesGroup } from '../../updates/utils.js'\nimport { resolvePeer } from '../users/resolve-peer.js'\n\n/**\n * Get reactions to messages by their IDs.\n *\n * > Apps should short-poll reactions for visible messages\n * > (that weren't sent by the user) once every 15-30 seconds,\n * > but only if `message.reactions` is set\n *\n * @param chatId ID of the chat with messages\n * @param messages Message IDs\n * @returns Reactions to corresponding messages, or `null` if there are none\n */\nexport async function getMessageReactionsById(\n client: ITelegramClient,\n chatId: InputPeerLike,\n messages: number[],\n): Promise<(MessageReactions | null)[]> {\n const res = await client.call({\n _: 'messages.getMessagesReactions',\n peer: await resolvePeer(client, chatId),\n id: messages,\n })\n\n assertIsUpdatesGroup('messages.getMessagesReactions', res)\n\n // normally the group contains updateMessageReactions\n // for each message requested that has reactions\n //\n // these updates are not ordered in any way, so\n // we don't need to pass them to updates engine\n\n const index: Record<number, MessageReactions> = {}\n\n const peers = PeersIndex.from(res)\n\n for (const update of res.updates) {\n assertTypeIs('messages.getMessagesReactions', update, 'updateMessageReactions')\n\n index[update.msgId] = new MessageReactions(update.msgId, getMarkedPeerId(update.peer), update.reactions, peers)\n }\n\n return messages.map((messageId) => index[messageId] ?? null)\n}\n\n/**\n * Get reactions to {@link Message}s.\n *\n * > **Note**: messages must all be from the same chat.\n *\n * > Apps should short-poll reactions for visible messages\n * > (that weren't sent by the user) once every 15-30 seconds,\n * > but only if `message.reactions` is set\n *\n * @param chatId ID of the chat with messages\n * @param messages Message IDs\n * @returns Reactions to corresponding messages, or `null` if there are none\n */\nexport async function getMessageReactions(\n client: ITelegramClient,\n messages: Message[],\n): Promise<(MessageReactions | null)[]> {\n return getMessageReactionsById(\n client,\n messages[0].chat.inputPeer,\n messages.map((it) => it.id),\n )\n}\n"]}
1
+ {"version":3,"file":"get-message-reactions.js","sourceRoot":"","sources":["../../../../../src/highlevel/methods/messages/get-message-reactions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAA;AAEhE,OAAO,EAA0B,gBAAgB,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAC3F,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAEtD;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CACzC,MAAuB,EACvB,MAAqB,EACrB,QAAkB;IAElB,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC;QAC1B,CAAC,EAAE,+BAA+B;QAClC,IAAI,EAAE,MAAM,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC;QACvC,EAAE,EAAE,QAAQ;KACf,CAAC,CAAA;IAEF,oBAAoB,CAAC,+BAA+B,EAAE,GAAG,CAAC,CAAA;IAC1D,MAAM,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAA;IAE9B,qDAAqD;IACrD,gDAAgD;IAChD,EAAE;IACF,+CAA+C;IAC/C,+CAA+C;IAE/C,MAAM,KAAK,GAAqC,EAAE,CAAA;IAElD,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAElC,KAAK,MAAM,MAAM,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;QAC/B,YAAY,CAAC,+BAA+B,EAAE,MAAM,EAAE,wBAAwB,CAAC,CAAA;QAE/E,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,gBAAgB,CAAC,MAAM,CAAC,KAAK,EAAE,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;IACnH,CAAC;IAED,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,CAAA;AAChE,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACrC,MAAuB,EACvB,QAAmB;IAEnB,OAAO,uBAAuB,CAC1B,MAAM,EACN,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,EAC1B,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAC9B,CAAA;AACL,CAAC","sourcesContent":["import { getMarkedPeerId } from '../../../utils/peer-utils.js'\nimport { assertTypeIs } from '../../../utils/type-assertions.js'\nimport { ITelegramClient } from '../../client.types.js'\nimport { InputPeerLike, Message, MessageReactions, PeersIndex } from '../../types/index.js'\nimport { assertIsUpdatesGroup } from '../../updates/utils.js'\nimport { resolvePeer } from '../users/resolve-peer.js'\n\n/**\n * Get reactions to messages by their IDs.\n *\n * > Apps should short-poll reactions for visible messages\n * > (that weren't sent by the user) once every 15-30 seconds,\n * > but only if `message.reactions` is set\n *\n * @param chatId ID of the chat with messages\n * @param messages Message IDs\n * @returns Reactions to corresponding messages, or `null` if there are none\n */\nexport async function getMessageReactionsById(\n client: ITelegramClient,\n chatId: InputPeerLike,\n messages: number[],\n): Promise<(MessageReactions | null)[]> {\n const res = await client.call({\n _: 'messages.getMessagesReactions',\n peer: await resolvePeer(client, chatId),\n id: messages,\n })\n\n assertIsUpdatesGroup('messages.getMessagesReactions', res)\n client.handleClientUpdate(res)\n\n // normally the group contains updateMessageReactions\n // for each message requested that has reactions\n //\n // these updates are not ordered in any way, so\n // we don't need to pass them to updates engine\n\n const index: Record<number, MessageReactions> = {}\n\n const peers = PeersIndex.from(res)\n\n for (const update of res.updates) {\n assertTypeIs('messages.getMessagesReactions', update, 'updateMessageReactions')\n\n index[update.msgId] = new MessageReactions(update.msgId, getMarkedPeerId(update.peer), update.reactions, peers)\n }\n\n return messages.map((messageId) => index[messageId] ?? null)\n}\n\n/**\n * Get reactions to {@link Message}s.\n *\n * > **Note**: messages must all be from the same chat.\n *\n * > Apps should short-poll reactions for visible messages\n * > (that weren't sent by the user) once every 15-30 seconds,\n * > but only if `message.reactions` is set\n *\n * @param chatId ID of the chat with messages\n * @param messages Message IDs\n * @returns Reactions to corresponding messages, or `null` if there are none\n */\nexport async function getMessageReactions(\n client: ITelegramClient,\n messages: Message[],\n): Promise<(MessageReactions | null)[]> {\n return getMessageReactionsById(\n client,\n messages[0].chat.inputPeer,\n messages.map((it) => it.id),\n )\n}\n"]}