@mtcute/core 0.12.5 → 0.13.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.
Files changed (127) hide show
  1. package/cjs/highlevel/client.d.ts +83 -2
  2. package/cjs/highlevel/client.js +19 -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/dialogs/find-dialogs.d.ts +12 -0
  8. package/cjs/highlevel/methods/dialogs/find-dialogs.js +88 -0
  9. package/cjs/highlevel/methods/dialogs/find-dialogs.js.map +1 -0
  10. package/cjs/highlevel/methods/dialogs/get-peer-dialogs.js +2 -1
  11. package/cjs/highlevel/methods/dialogs/get-peer-dialogs.js.map +1 -1
  12. package/cjs/highlevel/methods/dialogs/iter-dialogs.js +3 -1
  13. package/cjs/highlevel/methods/dialogs/iter-dialogs.js.map +1 -1
  14. package/cjs/highlevel/methods/messages/_business-connection.d.ts +2 -1
  15. package/cjs/highlevel/methods/messages/_business-connection.js.map +1 -1
  16. package/cjs/highlevel/methods/messages/get-available-effects.d.ts +6 -0
  17. package/cjs/highlevel/methods/messages/get-available-effects.js +26 -0
  18. package/cjs/highlevel/methods/messages/get-available-effects.js.map +1 -0
  19. package/cjs/highlevel/methods/messages/get-fact-check.d.ts +11 -0
  20. package/cjs/highlevel/methods/messages/get-fact-check.js +27 -0
  21. package/cjs/highlevel/methods/messages/get-fact-check.js.map +1 -0
  22. package/cjs/highlevel/methods/messages/search-hashtag.d.ts +44 -0
  23. package/cjs/highlevel/methods/messages/search-hashtag.js +75 -0
  24. package/cjs/highlevel/methods/messages/search-hashtag.js.map +1 -0
  25. package/cjs/highlevel/methods/messages/send-common.d.ts +5 -0
  26. package/cjs/highlevel/methods/messages/send-common.js.map +1 -1
  27. package/cjs/highlevel/methods/messages/send-media-group.js +1 -0
  28. package/cjs/highlevel/methods/messages/send-media-group.js.map +1 -1
  29. package/cjs/highlevel/methods/messages/send-media.js +1 -0
  30. package/cjs/highlevel/methods/messages/send-media.js.map +1 -1
  31. package/cjs/highlevel/methods/messages/send-text.js +1 -0
  32. package/cjs/highlevel/methods/messages/send-text.js.map +1 -1
  33. package/cjs/highlevel/methods/misc/normalize-privacy-rules.js +2 -1
  34. package/cjs/highlevel/methods/misc/normalize-privacy-rules.js.map +1 -1
  35. package/cjs/highlevel/methods/users/resolve-peer-many.d.ts +6 -2
  36. package/cjs/highlevel/methods/users/resolve-peer-many.js +22 -6
  37. package/cjs/highlevel/methods/users/resolve-peer-many.js.map +1 -1
  38. package/cjs/highlevel/methods/users/resolve-peer.js +30 -11
  39. package/cjs/highlevel/methods/users/resolve-peer.js.map +1 -1
  40. package/cjs/highlevel/methods.d.ts +6 -0
  41. package/cjs/highlevel/methods.js +15 -4
  42. package/cjs/highlevel/methods.js.map +1 -1
  43. package/cjs/highlevel/types/conversation.js +1 -1
  44. package/cjs/highlevel/types/conversation.js.map +1 -1
  45. package/cjs/highlevel/types/messages/dialog.d.ts +2 -2
  46. package/cjs/highlevel/types/messages/dialog.js +2 -3
  47. package/cjs/highlevel/types/messages/dialog.js.map +1 -1
  48. package/cjs/highlevel/types/messages/fact-check.d.ts +30 -0
  49. package/cjs/highlevel/types/messages/fact-check.js +56 -0
  50. package/cjs/highlevel/types/messages/fact-check.js.map +1 -0
  51. package/cjs/highlevel/types/messages/index.d.ts +2 -0
  52. package/cjs/highlevel/types/messages/index.js +2 -0
  53. package/cjs/highlevel/types/messages/index.js.map +1 -1
  54. package/cjs/highlevel/types/messages/message-effect.d.ts +20 -0
  55. package/cjs/highlevel/types/messages/message-effect.js +69 -0
  56. package/cjs/highlevel/types/messages/message-effect.js.map +1 -0
  57. package/cjs/highlevel/types/messages/message-entity.d.ts +4 -1
  58. package/cjs/highlevel/types/messages/message-entity.js +1 -1
  59. package/cjs/highlevel/types/messages/message-entity.js.map +1 -1
  60. package/cjs/highlevel/types/messages/message.d.ts +12 -0
  61. package/cjs/highlevel/types/messages/message.js +23 -0
  62. package/cjs/highlevel/types/messages/message.js.map +1 -1
  63. package/cjs/network/network-manager.js +1 -1
  64. package/esm/highlevel/client.d.ts +83 -2
  65. package/esm/highlevel/client.js +19 -0
  66. package/esm/highlevel/client.js.map +1 -1
  67. package/esm/highlevel/methods/_imports.js.map +1 -1
  68. package/esm/highlevel/methods/chats/archive-chats.js +2 -1
  69. package/esm/highlevel/methods/chats/archive-chats.js.map +1 -1
  70. package/esm/highlevel/methods/dialogs/find-dialogs.d.ts +12 -0
  71. package/esm/highlevel/methods/dialogs/find-dialogs.js +84 -0
  72. package/esm/highlevel/methods/dialogs/find-dialogs.js.map +1 -0
  73. package/esm/highlevel/methods/dialogs/get-peer-dialogs.js +2 -1
  74. package/esm/highlevel/methods/dialogs/get-peer-dialogs.js.map +1 -1
  75. package/esm/highlevel/methods/dialogs/iter-dialogs.js +3 -1
  76. package/esm/highlevel/methods/dialogs/iter-dialogs.js.map +1 -1
  77. package/esm/highlevel/methods/messages/_business-connection.d.ts +2 -1
  78. package/esm/highlevel/methods/messages/_business-connection.js.map +1 -1
  79. package/esm/highlevel/methods/messages/get-available-effects.d.ts +6 -0
  80. package/esm/highlevel/methods/messages/get-available-effects.js +22 -0
  81. package/esm/highlevel/methods/messages/get-available-effects.js.map +1 -0
  82. package/esm/highlevel/methods/messages/get-fact-check.d.ts +11 -0
  83. package/esm/highlevel/methods/messages/get-fact-check.js +23 -0
  84. package/esm/highlevel/methods/messages/get-fact-check.js.map +1 -0
  85. package/esm/highlevel/methods/messages/search-hashtag.d.ts +44 -0
  86. package/esm/highlevel/methods/messages/search-hashtag.js +70 -0
  87. package/esm/highlevel/methods/messages/search-hashtag.js.map +1 -0
  88. package/esm/highlevel/methods/messages/send-common.d.ts +5 -0
  89. package/esm/highlevel/methods/messages/send-common.js.map +1 -1
  90. package/esm/highlevel/methods/messages/send-media-group.js +1 -0
  91. package/esm/highlevel/methods/messages/send-media-group.js.map +1 -1
  92. package/esm/highlevel/methods/messages/send-media.js +1 -0
  93. package/esm/highlevel/methods/messages/send-media.js.map +1 -1
  94. package/esm/highlevel/methods/messages/send-text.js +1 -0
  95. package/esm/highlevel/methods/messages/send-text.js.map +1 -1
  96. package/esm/highlevel/methods/misc/normalize-privacy-rules.js +2 -1
  97. package/esm/highlevel/methods/misc/normalize-privacy-rules.js.map +1 -1
  98. package/esm/highlevel/methods/users/resolve-peer-many.d.ts +6 -2
  99. package/esm/highlevel/methods/users/resolve-peer-many.js +22 -6
  100. package/esm/highlevel/methods/users/resolve-peer-many.js.map +1 -1
  101. package/esm/highlevel/methods/users/resolve-peer.js +30 -11
  102. package/esm/highlevel/methods/users/resolve-peer.js.map +1 -1
  103. package/esm/highlevel/methods.d.ts +6 -0
  104. package/esm/highlevel/methods.js +5 -0
  105. package/esm/highlevel/methods.js.map +1 -1
  106. package/esm/highlevel/types/conversation.js +1 -1
  107. package/esm/highlevel/types/conversation.js.map +1 -1
  108. package/esm/highlevel/types/messages/dialog.d.ts +2 -2
  109. package/esm/highlevel/types/messages/dialog.js +2 -3
  110. package/esm/highlevel/types/messages/dialog.js.map +1 -1
  111. package/esm/highlevel/types/messages/fact-check.d.ts +30 -0
  112. package/esm/highlevel/types/messages/fact-check.js +53 -0
  113. package/esm/highlevel/types/messages/fact-check.js.map +1 -0
  114. package/esm/highlevel/types/messages/index.d.ts +2 -0
  115. package/esm/highlevel/types/messages/index.js +2 -0
  116. package/esm/highlevel/types/messages/index.js.map +1 -1
  117. package/esm/highlevel/types/messages/message-effect.d.ts +20 -0
  118. package/esm/highlevel/types/messages/message-effect.js +66 -0
  119. package/esm/highlevel/types/messages/message-effect.js.map +1 -0
  120. package/esm/highlevel/types/messages/message-entity.d.ts +4 -1
  121. package/esm/highlevel/types/messages/message-entity.js +1 -1
  122. package/esm/highlevel/types/messages/message-entity.js.map +1 -1
  123. package/esm/highlevel/types/messages/message.d.ts +12 -0
  124. package/esm/highlevel/types/messages/message.js +23 -0
  125. package/esm/highlevel/types/messages/message.js.map +1 -1
  126. package/esm/network/network-manager.js +1 -1
  127. package/package.json +4 -4
@@ -50,6 +50,7 @@ export async function sendMedia(client, chatId, media, params) {
50
50
  sendAs: params.sendAs ? await resolvePeer(client, params.sendAs) : undefined,
51
51
  invertMedia: params.invert,
52
52
  quickReplyShortcut,
53
+ effect: params.effect,
53
54
  }, { chainId });
54
55
  const msg = _findMessageInUpdate(client, res, false, !params.shouldDispatch, false, randomId);
55
56
  return msg;
@@ -1 +1 @@
1
- {"version":3,"file":"send-media.js","sourceRoot":"","sources":["../../../../../src/highlevel/methods/messages/send-media.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAA;AAEzD,OAAO,EAAE,WAAW,EAAe,MAAM,qCAAqC,CAAA;AAK9E,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAA;AACxE,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AACtD,OAAO,EAAE,kCAAkC,EAAE,MAAM,2BAA2B,CAAA;AAC9E,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAE1D,OAAO,EAAE,4BAA4B,EAAoB,MAAM,kBAAkB,CAAA;AAEjF;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC3B,MAAuB,EACvB,MAAqB,EACrB,KAA8B,EAC9B,MAgCC;IAED,IAAI,CAAC,MAAM;QAAE,MAAM,GAAG,EAAE,CAAA;IAExB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC5B,KAAK,GAAG;YACJ,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,KAAK;SACd,CAAA;IACL,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,oBAAoB,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAA;IAEpE,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,MAAM,mBAAmB,CACjD,MAAM;IACN,yDAAyD;IACzD,oFAAoF;IACpF,MAAM,CAAC,OAAO,IAAK,KAAsD,CAAC,OAAO,CACpF,CAAA;IAED,MAAM,WAAW,GAAG,WAAW,CAAC,YAAY,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;IAChE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,kBAAkB,EAAE,GAAG,MAAM,4BAA4B,CACnG,MAAM,EACN,MAAM,EACN,MAAM,CACT,CAAA;IAED,MAAM,QAAQ,GAAG,UAAU,EAAE,CAAA;IAC7B,MAAM,GAAG,GAAG,MAAM,kCAAkC,CAChD,MAAM,EACN,MAAM,CAAC,oBAAoB,EAC3B;QACI,CAAC,EAAE,oBAAoB;QACvB,IAAI;QACJ,KAAK,EAAE,UAAU;QACjB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,OAAO;QACP,QAAQ;QACR,YAAY;QACZ,WAAW;QACX,OAAO;QACP,QAAQ;QACR,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,UAAU,EAAE,MAAM,CAAC,cAAc;QACjC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;QAC5E,WAAW,EAAE,MAAM,CAAC,MAAM;QAC1B,kBAAkB;KACrB,EACD,EAAE,OAAO,EAAE,CACd,CAAA;IAED,MAAM,GAAG,GAAG,oBAAoB,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,MAAM,CAAC,cAAc,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAA;IAE7F,OAAO,GAAG,CAAA;AACd,CAAC","sourcesContent":["import { randomLong } from '../../../utils/long-utils.js'\nimport { ITelegramClient } from '../../client.types.js'\nimport { BotKeyboard, ReplyMarkup } from '../../types/bots/keyboards/index.js'\nimport { InputMediaLike } from '../../types/media/input-media/types.js'\nimport { Message } from '../../types/messages/message.js'\nimport { InputText } from '../../types/misc/entities.js'\nimport { InputPeerLike } from '../../types/peers/index.js'\nimport { _normalizeInputMedia } from '../files/normalize-input-media.js'\nimport { _normalizeInputText } from '../misc/normalize-text.js'\nimport { resolvePeer } from '../users/resolve-peer.js'\nimport { _maybeInvokeWithBusinessConnection } from './_business-connection.js'\nimport { _findMessageInUpdate } from './find-in-update.js'\nimport { _getDiscussionMessage } from './get-discussion-message.js'\nimport { _processCommonSendParameters, CommonSendParams } from './send-common.js'\n\n/**\n * Send a single media (a photo or a document-based media)\n *\n * @param chatId ID of the chat, its username, phone or `\"me\"` or `\"self\"`\n * @param media\n * Media contained in the message. You can also pass TDLib\n * and Bot API compatible File ID, which will be wrapped\n * in {@link InputMedia.auto}\n * @param params Additional sending parameters\n * @link InputMedia\n */\nexport async function sendMedia(\n client: ITelegramClient,\n chatId: InputPeerLike,\n media: InputMediaLike | string,\n params?: CommonSendParams & {\n /**\n * For bots: inline or reply markup or an instruction\n * to hide a reply keyboard or to force a reply.\n */\n replyMarkup?: ReplyMarkup\n\n /**\n * Whether to invert media position.\n *\n * Currently only supported for web previews and makes the\n * client render the preview above the caption and not below.\n */\n invert?: boolean\n\n /**\n * Override caption for `media`.\n *\n * Can be used, for example. when using File IDs\n * or when using existing InputMedia objects.\n */\n caption?: InputText\n\n /**\n * Function that will be called after some part has been uploaded.\n * Only used when a file that requires uploading is passed,\n * and not used when uploading a thumbnail.\n *\n * @param uploaded Number of bytes already uploaded\n * @param total Total file size\n */\n progressCallback?: (uploaded: number, total: number) => void\n },\n): Promise<Message> {\n if (!params) params = {}\n\n if (typeof media === 'string') {\n media = {\n type: 'auto',\n file: media,\n }\n }\n\n const inputMedia = await _normalizeInputMedia(client, media, params)\n\n const [message, entities] = await _normalizeInputText(\n client,\n // some types dont have `caption` field, and ts warns us,\n // but since it's JS, they'll just be `undefined` and properly handled by the method\n params.caption || (media as Extract<typeof media, { caption?: unknown }>).caption,\n )\n\n const replyMarkup = BotKeyboard._convertToTl(params.replyMarkup)\n const { peer, replyTo, scheduleDate, chainId, quickReplyShortcut } = await _processCommonSendParameters(\n client,\n chatId,\n params,\n )\n\n const randomId = randomLong()\n const res = await _maybeInvokeWithBusinessConnection(\n client,\n params.businessConnectionId,\n {\n _: 'messages.sendMedia',\n peer,\n media: inputMedia,\n silent: params.silent,\n replyTo,\n randomId,\n scheduleDate,\n replyMarkup,\n message,\n entities,\n clearDraft: params.clearDraft,\n noforwards: params.forbidForwards,\n sendAs: params.sendAs ? await resolvePeer(client, params.sendAs) : undefined,\n invertMedia: params.invert,\n quickReplyShortcut,\n },\n { chainId },\n )\n\n const msg = _findMessageInUpdate(client, res, false, !params.shouldDispatch, false, randomId)\n\n return msg\n}\n"]}
1
+ {"version":3,"file":"send-media.js","sourceRoot":"","sources":["../../../../../src/highlevel/methods/messages/send-media.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAA;AAEzD,OAAO,EAAE,WAAW,EAAe,MAAM,qCAAqC,CAAA;AAK9E,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAA;AACxE,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AACtD,OAAO,EAAE,kCAAkC,EAAE,MAAM,2BAA2B,CAAA;AAC9E,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAE1D,OAAO,EAAE,4BAA4B,EAAoB,MAAM,kBAAkB,CAAA;AAEjF;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC3B,MAAuB,EACvB,MAAqB,EACrB,KAA8B,EAC9B,MAgCC;IAED,IAAI,CAAC,MAAM;QAAE,MAAM,GAAG,EAAE,CAAA;IAExB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC5B,KAAK,GAAG;YACJ,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,KAAK;SACd,CAAA;IACL,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,oBAAoB,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAA;IAEpE,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,MAAM,mBAAmB,CACjD,MAAM;IACN,yDAAyD;IACzD,oFAAoF;IACpF,MAAM,CAAC,OAAO,IAAK,KAAsD,CAAC,OAAO,CACpF,CAAA;IAED,MAAM,WAAW,GAAG,WAAW,CAAC,YAAY,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;IAChE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,kBAAkB,EAAE,GAAG,MAAM,4BAA4B,CACnG,MAAM,EACN,MAAM,EACN,MAAM,CACT,CAAA;IAED,MAAM,QAAQ,GAAG,UAAU,EAAE,CAAA;IAC7B,MAAM,GAAG,GAAG,MAAM,kCAAkC,CAChD,MAAM,EACN,MAAM,CAAC,oBAAoB,EAC3B;QACI,CAAC,EAAE,oBAAoB;QACvB,IAAI;QACJ,KAAK,EAAE,UAAU;QACjB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,OAAO;QACP,QAAQ;QACR,YAAY;QACZ,WAAW;QACX,OAAO;QACP,QAAQ;QACR,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,UAAU,EAAE,MAAM,CAAC,cAAc;QACjC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;QAC5E,WAAW,EAAE,MAAM,CAAC,MAAM;QAC1B,kBAAkB;QAClB,MAAM,EAAE,MAAM,CAAC,MAAM;KACxB,EACD,EAAE,OAAO,EAAE,CACd,CAAA;IAED,MAAM,GAAG,GAAG,oBAAoB,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,MAAM,CAAC,cAAc,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAA;IAE7F,OAAO,GAAG,CAAA;AACd,CAAC","sourcesContent":["import { randomLong } from '../../../utils/long-utils.js'\nimport { ITelegramClient } from '../../client.types.js'\nimport { BotKeyboard, ReplyMarkup } from '../../types/bots/keyboards/index.js'\nimport { InputMediaLike } from '../../types/media/input-media/types.js'\nimport { Message } from '../../types/messages/message.js'\nimport { InputText } from '../../types/misc/entities.js'\nimport { InputPeerLike } from '../../types/peers/index.js'\nimport { _normalizeInputMedia } from '../files/normalize-input-media.js'\nimport { _normalizeInputText } from '../misc/normalize-text.js'\nimport { resolvePeer } from '../users/resolve-peer.js'\nimport { _maybeInvokeWithBusinessConnection } from './_business-connection.js'\nimport { _findMessageInUpdate } from './find-in-update.js'\nimport { _getDiscussionMessage } from './get-discussion-message.js'\nimport { _processCommonSendParameters, CommonSendParams } from './send-common.js'\n\n/**\n * Send a single media (a photo or a document-based media)\n *\n * @param chatId ID of the chat, its username, phone or `\"me\"` or `\"self\"`\n * @param media\n * Media contained in the message. You can also pass TDLib\n * and Bot API compatible File ID, which will be wrapped\n * in {@link InputMedia.auto}\n * @param params Additional sending parameters\n * @link InputMedia\n */\nexport async function sendMedia(\n client: ITelegramClient,\n chatId: InputPeerLike,\n media: InputMediaLike | string,\n params?: CommonSendParams & {\n /**\n * For bots: inline or reply markup or an instruction\n * to hide a reply keyboard or to force a reply.\n */\n replyMarkup?: ReplyMarkup\n\n /**\n * Whether to invert media position.\n *\n * Currently only supported for web previews and makes the\n * client render the preview above the caption and not below.\n */\n invert?: boolean\n\n /**\n * Override caption for `media`.\n *\n * Can be used, for example. when using File IDs\n * or when using existing InputMedia objects.\n */\n caption?: InputText\n\n /**\n * Function that will be called after some part has been uploaded.\n * Only used when a file that requires uploading is passed,\n * and not used when uploading a thumbnail.\n *\n * @param uploaded Number of bytes already uploaded\n * @param total Total file size\n */\n progressCallback?: (uploaded: number, total: number) => void\n },\n): Promise<Message> {\n if (!params) params = {}\n\n if (typeof media === 'string') {\n media = {\n type: 'auto',\n file: media,\n }\n }\n\n const inputMedia = await _normalizeInputMedia(client, media, params)\n\n const [message, entities] = await _normalizeInputText(\n client,\n // some types dont have `caption` field, and ts warns us,\n // but since it's JS, they'll just be `undefined` and properly handled by the method\n params.caption || (media as Extract<typeof media, { caption?: unknown }>).caption,\n )\n\n const replyMarkup = BotKeyboard._convertToTl(params.replyMarkup)\n const { peer, replyTo, scheduleDate, chainId, quickReplyShortcut } = await _processCommonSendParameters(\n client,\n chatId,\n params,\n )\n\n const randomId = randomLong()\n const res = await _maybeInvokeWithBusinessConnection(\n client,\n params.businessConnectionId,\n {\n _: 'messages.sendMedia',\n peer,\n media: inputMedia,\n silent: params.silent,\n replyTo,\n randomId,\n scheduleDate,\n replyMarkup,\n message,\n entities,\n clearDraft: params.clearDraft,\n noforwards: params.forbidForwards,\n sendAs: params.sendAs ? await resolvePeer(client, params.sendAs) : undefined,\n invertMedia: params.invert,\n quickReplyShortcut,\n effect: params.effect,\n },\n { chainId },\n )\n\n const msg = _findMessageInUpdate(client, res, false, !params.shouldDispatch, false, randomId)\n\n return msg\n}\n"]}
@@ -42,6 +42,7 @@ export async function sendText(client, chatId, text, params) {
42
42
  sendAs: params.sendAs ? await resolvePeer(client, params.sendAs) : undefined,
43
43
  invertMedia: params.invertMedia,
44
44
  quickReplyShortcut,
45
+ effect: params.effect,
45
46
  }, { chainId });
46
47
  if (res._ === 'updateShortSentMessage') {
47
48
  // todo extract this to updates manager?
@@ -1 +1 @@
1
- {"version":3,"file":"send-text.js","sourceRoot":"","sources":["../../../../../src/highlevel/methods/messages/send-text.ts"],"names":[],"mappings":"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","sourcesContent":["import { tl } from '@mtcute/tl'\n\nimport { MtTypeAssertionError } from '../../../types/errors.js'\nimport { randomLong } from '../../../utils/long-utils.js'\nimport { getMarkedPeerId } from '../../../utils/peer-utils.js'\nimport { ITelegramClient } from '../../client.types.js'\nimport { BotKeyboard, ReplyMarkup } from '../../types/bots/keyboards/index.js'\nimport { Message } from '../../types/messages/message.js'\nimport { InputText } from '../../types/misc/entities.js'\nimport { InputPeerLike, PeersIndex } from '../../types/peers/index.js'\nimport { createDummyUpdate } from '../../updates/utils.js'\nimport { inputPeerToPeer } from '../../utils/peer-utils.js'\nimport { _getRawPeerBatched } from '../chats/batched-queries.js'\nimport { _normalizeInputText } from '../misc/normalize-text.js'\nimport { resolvePeer } from '../users/resolve-peer.js'\nimport { _maybeInvokeWithBusinessConnection } from './_business-connection.js'\nimport { _findMessageInUpdate } from './find-in-update.js'\nimport { _getDiscussionMessage } from './get-discussion-message.js'\nimport { _processCommonSendParameters, CommonSendParams } from './send-common.js'\n\n/**\n * Send a text message\n *\n * @param chatId ID of the chat, its username, phone or `\"me\"` or `\"self\"`\n * @param text Text of the message\n * @param params Additional sending parameters\n */\nexport async function sendText(\n client: ITelegramClient,\n chatId: InputPeerLike,\n text: InputText,\n params?: CommonSendParams & {\n /**\n * For bots: inline or reply markup or an instruction\n * to hide a reply keyboard or to force a reply.\n */\n replyMarkup?: ReplyMarkup\n\n /**\n * Whether to disable links preview in this message\n */\n disableWebPreview?: boolean\n\n /**\n * Whether to invert media position.\n *\n * Currently only supported for web previews and makes the\n * client render the preview above the caption and not below.\n */\n invertMedia?: boolean\n },\n): Promise<Message> {\n if (!params) params = {}\n\n const [message, entities] = await _normalizeInputText(client, text)\n\n const replyMarkup = BotKeyboard._convertToTl(params.replyMarkup)\n const { peer, replyTo, scheduleDate, chainId, quickReplyShortcut } = await _processCommonSendParameters(\n client,\n chatId,\n params,\n )\n\n const randomId = randomLong()\n const res = await _maybeInvokeWithBusinessConnection(\n client,\n params.businessConnectionId,\n {\n _: 'messages.sendMessage',\n peer,\n noWebpage: params.disableWebPreview,\n silent: params.silent,\n replyTo,\n randomId,\n scheduleDate,\n replyMarkup,\n message,\n entities,\n clearDraft: params.clearDraft,\n noforwards: params.forbidForwards,\n sendAs: params.sendAs ? await resolvePeer(client, params.sendAs) : undefined,\n invertMedia: params.invertMedia,\n quickReplyShortcut,\n },\n { chainId },\n )\n\n if (res._ === 'updateShortSentMessage') {\n // todo extract this to updates manager?\n const msg: tl.RawMessage = {\n _: 'message',\n id: res.id,\n peerId: inputPeerToPeer(peer),\n fromId: { _: 'peerUser', userId: client.storage.self.getCached()!.userId },\n message,\n date: res.date,\n out: res.out,\n replyMarkup,\n entities: res.entities,\n }\n\n // is this needed?\n // this._date = res.date\n client.handleClientUpdate(createDummyUpdate(res.pts, res.ptsCount))\n\n const peers = new PeersIndex()\n\n const fetchPeer = async (peer: tl.TypePeer | tl.TypeInputPeer): Promise<void> => {\n const id = getMarkedPeerId(peer)\n\n let cached = await client.storage.peers.getCompleteById(id)\n\n if (!cached) {\n cached = await _getRawPeerBatched(client, await resolvePeer(client, peer))\n }\n\n if (!cached) {\n throw new MtTypeAssertionError('sendText (@ getFullPeerById)', 'user | chat', 'null')\n }\n\n switch (cached._) {\n case 'user':\n peers.users.set(cached.id, cached)\n break\n case 'chat':\n case 'chatForbidden':\n case 'channel':\n case 'channelForbidden':\n peers.chats.set(cached.id, cached)\n break\n default:\n throw new MtTypeAssertionError(\n 'sendText (@ users.getUsers)',\n 'user | chat | channel', // not very accurate, but good enough\n cached._,\n )\n }\n }\n\n await Promise.all([fetchPeer(peer), fetchPeer(msg.fromId!)])\n\n const ret = new Message(msg, peers)\n\n return ret\n }\n\n const msg = _findMessageInUpdate(client, res, false, !params.shouldDispatch, false, randomId)\n\n return msg\n}\n"]}
1
+ {"version":3,"file":"send-text.js","sourceRoot":"","sources":["../../../../../src/highlevel/methods/messages/send-text.ts"],"names":[],"mappings":"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","sourcesContent":["import { tl } from '@mtcute/tl'\n\nimport { MtTypeAssertionError } from '../../../types/errors.js'\nimport { randomLong } from '../../../utils/long-utils.js'\nimport { getMarkedPeerId } from '../../../utils/peer-utils.js'\nimport { ITelegramClient } from '../../client.types.js'\nimport { BotKeyboard, ReplyMarkup } from '../../types/bots/keyboards/index.js'\nimport { Message } from '../../types/messages/message.js'\nimport { InputText } from '../../types/misc/entities.js'\nimport { InputPeerLike, PeersIndex } from '../../types/peers/index.js'\nimport { createDummyUpdate } from '../../updates/utils.js'\nimport { inputPeerToPeer } from '../../utils/peer-utils.js'\nimport { _getRawPeerBatched } from '../chats/batched-queries.js'\nimport { _normalizeInputText } from '../misc/normalize-text.js'\nimport { resolvePeer } from '../users/resolve-peer.js'\nimport { _maybeInvokeWithBusinessConnection } from './_business-connection.js'\nimport { _findMessageInUpdate } from './find-in-update.js'\nimport { _getDiscussionMessage } from './get-discussion-message.js'\nimport { _processCommonSendParameters, CommonSendParams } from './send-common.js'\n\n/**\n * Send a text message\n *\n * @param chatId ID of the chat, its username, phone or `\"me\"` or `\"self\"`\n * @param text Text of the message\n * @param params Additional sending parameters\n */\nexport async function sendText(\n client: ITelegramClient,\n chatId: InputPeerLike,\n text: InputText,\n params?: CommonSendParams & {\n /**\n * For bots: inline or reply markup or an instruction\n * to hide a reply keyboard or to force a reply.\n */\n replyMarkup?: ReplyMarkup\n\n /**\n * Whether to disable links preview in this message\n */\n disableWebPreview?: boolean\n\n /**\n * Whether to invert media position.\n *\n * Currently only supported for web previews and makes the\n * client render the preview above the caption and not below.\n */\n invertMedia?: boolean\n },\n): Promise<Message> {\n if (!params) params = {}\n\n const [message, entities] = await _normalizeInputText(client, text)\n\n const replyMarkup = BotKeyboard._convertToTl(params.replyMarkup)\n const { peer, replyTo, scheduleDate, chainId, quickReplyShortcut } = await _processCommonSendParameters(\n client,\n chatId,\n params,\n )\n\n const randomId = randomLong()\n const res = await _maybeInvokeWithBusinessConnection(\n client,\n params.businessConnectionId,\n {\n _: 'messages.sendMessage',\n peer,\n noWebpage: params.disableWebPreview,\n silent: params.silent,\n replyTo,\n randomId,\n scheduleDate,\n replyMarkup,\n message,\n entities,\n clearDraft: params.clearDraft,\n noforwards: params.forbidForwards,\n sendAs: params.sendAs ? await resolvePeer(client, params.sendAs) : undefined,\n invertMedia: params.invertMedia,\n quickReplyShortcut,\n effect: params.effect,\n },\n { chainId },\n )\n\n if (res._ === 'updateShortSentMessage') {\n // todo extract this to updates manager?\n const msg: tl.RawMessage = {\n _: 'message',\n id: res.id,\n peerId: inputPeerToPeer(peer),\n fromId: { _: 'peerUser', userId: client.storage.self.getCached()!.userId },\n message,\n date: res.date,\n out: res.out,\n replyMarkup,\n entities: res.entities,\n }\n\n // is this needed?\n // this._date = res.date\n client.handleClientUpdate(createDummyUpdate(res.pts, res.ptsCount))\n\n const peers = new PeersIndex()\n\n const fetchPeer = async (peer: tl.TypePeer | tl.TypeInputPeer): Promise<void> => {\n const id = getMarkedPeerId(peer)\n\n let cached = await client.storage.peers.getCompleteById(id)\n\n if (!cached) {\n cached = await _getRawPeerBatched(client, await resolvePeer(client, peer))\n }\n\n if (!cached) {\n throw new MtTypeAssertionError('sendText (@ getFullPeerById)', 'user | chat', 'null')\n }\n\n switch (cached._) {\n case 'user':\n peers.users.set(cached.id, cached)\n break\n case 'chat':\n case 'chatForbidden':\n case 'channel':\n case 'channelForbidden':\n peers.chats.set(cached.id, cached)\n break\n default:\n throw new MtTypeAssertionError(\n 'sendText (@ users.getUsers)',\n 'user | chat | channel', // not very accurate, but good enough\n cached._,\n )\n }\n }\n\n await Promise.all([fetchPeer(peer), fetchPeer(msg.fromId!)])\n\n const ret = new Message(msg, peers)\n\n return ret\n }\n\n const msg = _findMessageInUpdate(client, res, false, !params.shouldDispatch, false, randomId)\n\n return msg\n}\n"]}
@@ -1,3 +1,4 @@
1
+ import { isPresent } from '../../../utils/type-assertions.js';
1
2
  import { toInputUser } from '../../utils/index.js';
2
3
  import { resolvePeerMany } from '../users/resolve-peer-many.js';
3
4
  /**
@@ -23,7 +24,7 @@ export async function _normalizePrivacyRules(client, rules) {
23
24
  const chats = await resolvePeerMany(client, rule.chats);
24
25
  res.push({
25
26
  _: rule.allow ? 'inputPrivacyValueAllowChatParticipants' : 'inputPrivacyValueDisallowChatParticipants',
26
- chats: chats.map((peer) => {
27
+ chats: chats.filter(isPresent).map((peer) => {
27
28
  if ('channelId' in peer)
28
29
  return peer.channelId;
29
30
  if ('chatId' in peer)
@@ -1 +1 @@
1
- {"version":3,"file":"normalize-privacy-rules.js","sourceRoot":"","sources":["../../../../../src/highlevel/methods/misc/normalize-privacy-rules.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAE/D;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CACxC,MAAuB,EACvB,KAAyB;IAEzB,MAAM,GAAG,GAA8B,EAAE,CAAA;IAEzC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACvB,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;YACd,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACd,SAAQ;QACZ,CAAC;QAED,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;YAClB,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,CAAA;YAEpE,GAAG,CAAC,IAAI,CAAC;gBACL,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC,gCAAgC;gBAChF,KAAK;aACR,CAAC,CAAA;YACF,SAAQ;QACZ,CAAC;QAED,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;YAClB,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;YAEvD,GAAG,CAAC,IAAI,CAAC;gBACL,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,wCAAwC,CAAC,CAAC,CAAC,2CAA2C;gBACtG,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;oBACtB,IAAI,WAAW,IAAI,IAAI;wBAAE,OAAO,IAAI,CAAC,SAAS,CAAA;oBAC9C,IAAI,QAAQ,IAAI,IAAI;wBAAE,OAAO,IAAI,CAAC,MAAM,CAAA;oBAExC,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAA;gBAClC,CAAC,CAAC;aACL,CAAC,CAAA;YACF,SAAQ;QACZ,CAAC;IACL,CAAC;IAED,OAAO,GAAG,CAAA;AACd,CAAC","sourcesContent":["import { tl } from '@mtcute/tl'\n\nimport { ITelegramClient } from '../../client.types.js'\nimport { InputPrivacyRule } from '../../types/index.js'\nimport { toInputUser } from '../../utils/index.js'\nimport { resolvePeerMany } from '../users/resolve-peer-many.js'\n\n/**\n * Normalize {@link InputPrivacyRule}[] to `tl.TypeInputPrivacyRule`,\n * resolving the peers if needed.\n */\nexport async function _normalizePrivacyRules(\n client: ITelegramClient,\n rules: InputPrivacyRule[],\n): Promise<tl.TypeInputPrivacyRule[]> {\n const res: tl.TypeInputPrivacyRule[] = []\n\n for (const rule of rules) {\n if ('_' in rule) {\n res.push(rule)\n continue\n }\n\n if ('users' in rule) {\n const users = await resolvePeerMany(client, rule.users, toInputUser)\n\n res.push({\n _: rule.allow ? 'inputPrivacyValueAllowUsers' : 'inputPrivacyValueDisallowUsers',\n users,\n })\n continue\n }\n\n if ('chats' in rule) {\n const chats = await resolvePeerMany(client, rule.chats)\n\n res.push({\n _: rule.allow ? 'inputPrivacyValueAllowChatParticipants' : 'inputPrivacyValueDisallowChatParticipants',\n chats: chats.map((peer) => {\n if ('channelId' in peer) return peer.channelId\n if ('chatId' in peer) return peer.chatId\n\n throw new Error('UNREACHABLE')\n }),\n })\n continue\n }\n }\n\n return res\n}\n"]}
1
+ {"version":3,"file":"normalize-privacy-rules.js","sourceRoot":"","sources":["../../../../../src/highlevel/methods/misc/normalize-privacy-rules.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAA;AAG7D,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAE/D;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CACxC,MAAuB,EACvB,KAAyB;IAEzB,MAAM,GAAG,GAA8B,EAAE,CAAA;IAEzC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACvB,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;YACd,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACd,SAAQ;QACZ,CAAC;QAED,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;YAClB,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,CAAA;YAEpE,GAAG,CAAC,IAAI,CAAC;gBACL,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC,gCAAgC;gBAChF,KAAK;aACR,CAAC,CAAA;YACF,SAAQ;QACZ,CAAC;QAED,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;YAClB,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;YAEvD,GAAG,CAAC,IAAI,CAAC;gBACL,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,wCAAwC,CAAC,CAAC,CAAC,2CAA2C;gBACtG,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;oBACxC,IAAI,WAAW,IAAI,IAAI;wBAAE,OAAO,IAAI,CAAC,SAAS,CAAA;oBAC9C,IAAI,QAAQ,IAAI,IAAI;wBAAE,OAAO,IAAI,CAAC,MAAM,CAAA;oBAExC,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAA;gBAClC,CAAC,CAAC;aACL,CAAC,CAAA;YACF,SAAQ;QACZ,CAAC;IACL,CAAC;IAED,OAAO,GAAG,CAAA;AACd,CAAC","sourcesContent":["import { tl } from '@mtcute/tl'\n\nimport { isPresent } from '../../../utils/type-assertions.js'\nimport { ITelegramClient } from '../../client.types.js'\nimport { InputPrivacyRule } from '../../types/index.js'\nimport { toInputUser } from '../../utils/index.js'\nimport { resolvePeerMany } from '../users/resolve-peer-many.js'\n\n/**\n * Normalize {@link InputPrivacyRule}[] to `tl.TypeInputPrivacyRule`,\n * resolving the peers if needed.\n */\nexport async function _normalizePrivacyRules(\n client: ITelegramClient,\n rules: InputPrivacyRule[],\n): Promise<tl.TypeInputPrivacyRule[]> {\n const res: tl.TypeInputPrivacyRule[] = []\n\n for (const rule of rules) {\n if ('_' in rule) {\n res.push(rule)\n continue\n }\n\n if ('users' in rule) {\n const users = await resolvePeerMany(client, rule.users, toInputUser)\n\n res.push({\n _: rule.allow ? 'inputPrivacyValueAllowUsers' : 'inputPrivacyValueDisallowUsers',\n users,\n })\n continue\n }\n\n if ('chats' in rule) {\n const chats = await resolvePeerMany(client, rule.chats)\n\n res.push({\n _: rule.allow ? 'inputPrivacyValueAllowChatParticipants' : 'inputPrivacyValueDisallowChatParticipants',\n chats: chats.filter(isPresent).map((peer) => {\n if ('channelId' in peer) return peer.channelId\n if ('chatId' in peer) return peer.chatId\n\n throw new Error('UNREACHABLE')\n }),\n })\n continue\n }\n }\n\n return res\n}\n"]}
@@ -1,11 +1,13 @@
1
1
  import { tl } from '@mtcute/tl';
2
2
  import { ITelegramClient } from '../../client.types.js';
3
- import { InputPeerLike } from '../../types/index.js';
3
+ import { InputPeerLike } from '../../types/peers/index.js';
4
4
  /**
5
5
  * Get multiple `InputPeer`s at once,
6
6
  * while also normalizing and removing
7
7
  * peers that can't be normalized to that type.
8
8
  *
9
+ * If a peer was not found, it will be skipped.
10
+ *
9
11
  * Uses async pool internally, with a concurrent limit of 8
10
12
  *
11
13
  * @param peerIds Peer Ids
@@ -15,8 +17,10 @@ export declare function resolvePeerMany<T extends tl.TypeInputPeer | tl.TypeInpu
15
17
  /**
16
18
  * Get multiple `InputPeer`s at once.
17
19
  *
20
+ * If a peer was not found, `null` will be returned instead
21
+ *
18
22
  * Uses async pool internally, with a concurrent limit of 8
19
23
  *
20
24
  * @param peerIds Peer Ids
21
25
  */
22
- export declare function resolvePeerMany(client: ITelegramClient, peerIds: InputPeerLike[]): Promise<tl.TypeInputPeer[]>;
26
+ export declare function resolvePeerMany(client: ITelegramClient, peerIds: InputPeerLike[]): Promise<(tl.TypeInputPeer | null)[]>;
@@ -1,4 +1,5 @@
1
1
  import { ConditionVariable } from '../../../utils/condition-variable.js';
2
+ import { MtPeerNotFoundError } from '../../types/errors.js';
2
3
  import { resolvePeer } from './resolve-peer.js';
3
4
  /**
4
5
  * @internal
@@ -8,10 +9,17 @@ export async function resolvePeerMany(client, peerIds, normalizer) {
8
9
  const limit = 8;
9
10
  if (peerIds.length < limit) {
10
11
  // no point in using async pool for <limit peers
11
- const res = await Promise.all(peerIds.map((it) => resolvePeer(client, it)));
12
+ const res = await Promise.all(peerIds.map((it) => resolvePeer(client, it).catch((e) => {
13
+ if (e instanceof MtPeerNotFoundError) {
14
+ return null;
15
+ }
16
+ throw e;
17
+ })));
12
18
  if (!normalizer)
13
19
  return res;
14
20
  for (const value of res) {
21
+ if (!value)
22
+ continue;
15
23
  const norm = normalizer(value);
16
24
  if (norm) {
17
25
  ret.push(norm);
@@ -24,8 +32,17 @@ export async function resolvePeerMany(client, peerIds, normalizer) {
24
32
  let nextIdx = 0;
25
33
  let nextWorkerIdx = 0;
26
34
  const fetchNext = async (idx = nextWorkerIdx++) => {
27
- const result = await resolvePeer(client, peerIds[idx]);
28
- buffer[idx] = result;
35
+ try {
36
+ const result = await resolvePeer(client, peerIds[idx]);
37
+ buffer[idx] = result;
38
+ }
39
+ catch (e) {
40
+ if (e instanceof MtPeerNotFoundError) {
41
+ buffer[idx] = null;
42
+ }
43
+ else
44
+ throw e;
45
+ }
29
46
  if (nextIdx === idx) {
30
47
  cv.notify();
31
48
  }
@@ -48,12 +65,11 @@ export async function resolvePeerMany(client, peerIds, normalizer) {
48
65
  const buf = buffer[nextIdx];
49
66
  delete buffer[nextIdx];
50
67
  nextIdx++;
51
- if (!buf)
52
- continue;
53
68
  if (!normalizer) {
54
69
  ret.push(buf);
70
+ continue;
55
71
  }
56
- else {
72
+ if (buf !== null) {
57
73
  const norm = normalizer(buf);
58
74
  if (norm) {
59
75
  ret.push(norm);
@@ -1 +1 @@
1
- {"version":3,"file":"resolve-peer-many.js","sourceRoot":"","sources":["../../../../../src/highlevel/methods/users/resolve-peer-many.ts"],"names":[],"mappings":"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","sourcesContent":["import { tl } from '@mtcute/tl'\n\nimport { ConditionVariable } from '../../../utils/condition-variable.js'\nimport { ITelegramClient } from '../../client.types.js'\nimport { InputPeerLike } from '../../types/index.js'\nimport { resolvePeer } from './resolve-peer.js'\n\n/**\n * Get multiple `InputPeer`s at once,\n * while also normalizing and removing\n * peers that can't be normalized to that type.\n *\n * Uses async pool internally, with a concurrent limit of 8\n *\n * @param peerIds Peer Ids\n * @param normalizer Normalization function\n */\nexport async function resolvePeerMany<T extends tl.TypeInputPeer | tl.TypeInputUser | tl.TypeInputChannel>(\n client: ITelegramClient,\n peerIds: InputPeerLike[],\n normalizer: (obj: tl.TypeInputPeer) => T | null,\n): Promise<T[]>\n\n/**\n * Get multiple `InputPeer`s at once.\n *\n * Uses async pool internally, with a concurrent limit of 8\n *\n * @param peerIds Peer Ids\n */\nexport async function resolvePeerMany(client: ITelegramClient, peerIds: InputPeerLike[]): Promise<tl.TypeInputPeer[]>\n\n/**\n * @internal\n */\nexport async function resolvePeerMany(\n client: ITelegramClient,\n peerIds: InputPeerLike[],\n normalizer?: (obj: tl.TypeInputPeer) => tl.TypeInputPeer | tl.TypeInputUser | tl.TypeInputChannel | null,\n): Promise<(tl.TypeInputPeer | tl.TypeInputUser | tl.TypeInputChannel)[]> {\n const ret: (tl.TypeInputPeer | tl.TypeInputUser | tl.TypeInputChannel)[] = []\n\n const limit = 8\n\n if (peerIds.length < limit) {\n // no point in using async pool for <limit peers\n const res = await Promise.all(peerIds.map((it) => resolvePeer(client, it)))\n\n if (!normalizer) return res\n\n for (const value of res) {\n const norm = normalizer(value)\n\n if (norm) {\n ret.push(norm)\n }\n }\n\n return ret\n }\n\n const cv = new ConditionVariable()\n const buffer: Record<number, tl.TypeInputPeer | null> = {}\n\n let nextIdx = 0\n let nextWorkerIdx = 0\n\n const fetchNext = async (idx = nextWorkerIdx++): Promise<void> => {\n const result = await resolvePeer(client, peerIds[idx])\n\n buffer[idx] = result\n\n if (nextIdx === idx) {\n cv.notify()\n }\n\n if (nextWorkerIdx < peerIds.length) {\n await fetchNext(nextWorkerIdx++)\n }\n }\n\n let error: unknown = undefined\n void Promise.all(Array.from({ length: limit }, (_, i) => fetchNext(i))).catch((e) => {\n client.log.debug('resolvePeerMany errored: %s', e.message)\n error = e\n cv.notify()\n })\n\n while (nextIdx < peerIds.length) {\n await cv.wait()\n\n // eslint-disable-next-line @typescript-eslint/no-throw-literal\n if (error) throw error\n\n while (nextIdx in buffer) {\n const buf = buffer[nextIdx]\n delete buffer[nextIdx]\n\n nextIdx++\n\n if (!buf) continue\n\n if (!normalizer) {\n ret.push(buf)\n } else {\n const norm = normalizer(buf)\n\n if (norm) {\n ret.push(norm)\n }\n }\n }\n }\n\n return ret\n}\n"]}
1
+ {"version":3,"file":"resolve-peer-many.js","sourceRoot":"","sources":["../../../../../src/highlevel/methods/users/resolve-peer-many.ts"],"names":[],"mappings":"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","sourcesContent":["import { tl } from '@mtcute/tl'\n\nimport { ConditionVariable } from '../../../utils/condition-variable.js'\nimport { ITelegramClient } from '../../client.types.js'\nimport { MtPeerNotFoundError } from '../../types/errors.js'\nimport { InputPeerLike } from '../../types/peers/index.js'\nimport { resolvePeer } from './resolve-peer.js'\n\n/**\n * Get multiple `InputPeer`s at once,\n * while also normalizing and removing\n * peers that can't be normalized to that type.\n *\n * If a peer was not found, it will be skipped.\n *\n * Uses async pool internally, with a concurrent limit of 8\n *\n * @param peerIds Peer Ids\n * @param normalizer Normalization function\n */\nexport async function resolvePeerMany<T extends tl.TypeInputPeer | tl.TypeInputUser | tl.TypeInputChannel>(\n client: ITelegramClient,\n peerIds: InputPeerLike[],\n normalizer: (obj: tl.TypeInputPeer) => T | null,\n): Promise<T[]>\n\n/**\n * Get multiple `InputPeer`s at once.\n *\n * If a peer was not found, `null` will be returned instead\n *\n * Uses async pool internally, with a concurrent limit of 8\n *\n * @param peerIds Peer Ids\n */\nexport async function resolvePeerMany(\n client: ITelegramClient,\n peerIds: InputPeerLike[],\n): Promise<(tl.TypeInputPeer | null)[]>\n\n/**\n * @internal\n */\nexport async function resolvePeerMany(\n client: ITelegramClient,\n peerIds: InputPeerLike[],\n normalizer?: (obj: tl.TypeInputPeer) => tl.TypeInputPeer | tl.TypeInputUser | tl.TypeInputChannel | null,\n): Promise<(tl.TypeInputPeer | tl.TypeInputUser | tl.TypeInputChannel | null)[]> {\n const ret: (tl.TypeInputPeer | tl.TypeInputUser | tl.TypeInputChannel | null)[] = []\n\n const limit = 8\n\n if (peerIds.length < limit) {\n // no point in using async pool for <limit peers\n const res = await Promise.all(\n peerIds.map((it) =>\n resolvePeer(client, it).catch((e) => {\n if (e instanceof MtPeerNotFoundError) {\n return null\n }\n throw e\n }),\n ),\n )\n\n if (!normalizer) return res\n\n for (const value of res) {\n if (!value) continue\n const norm = normalizer(value)\n\n if (norm) {\n ret.push(norm)\n }\n }\n\n return ret\n }\n\n const cv = new ConditionVariable()\n const buffer: Record<number, tl.TypeInputPeer | null> = {}\n\n let nextIdx = 0\n let nextWorkerIdx = 0\n\n const fetchNext = async (idx = nextWorkerIdx++): Promise<void> => {\n try {\n const result = await resolvePeer(client, peerIds[idx])\n buffer[idx] = result\n } catch (e) {\n if (e instanceof MtPeerNotFoundError) {\n buffer[idx] = null\n } else throw e\n }\n\n if (nextIdx === idx) {\n cv.notify()\n }\n\n if (nextWorkerIdx < peerIds.length) {\n await fetchNext(nextWorkerIdx++)\n }\n }\n\n let error: unknown = undefined\n void Promise.all(Array.from({ length: limit }, (_, i) => fetchNext(i))).catch((e) => {\n client.log.debug('resolvePeerMany errored: %s', e.message)\n error = e\n cv.notify()\n })\n\n while (nextIdx < peerIds.length) {\n await cv.wait()\n\n // eslint-disable-next-line @typescript-eslint/no-throw-literal\n if (error) throw error\n\n while (nextIdx in buffer) {\n const buf = buffer[nextIdx]\n delete buffer[nextIdx]\n\n nextIdx++\n\n if (!normalizer) {\n ret.push(buf)\n continue\n }\n\n if (buf !== null) {\n const norm = normalizer(buf)\n\n if (norm) {\n ret.push(norm)\n }\n }\n }\n }\n\n return ret\n}\n"]}
@@ -53,10 +53,19 @@ export async function resolvePeer(client, peerId, force = false) {
53
53
  const fromStorage = await client.storage.peers.getByPhone(peerId);
54
54
  if (fromStorage)
55
55
  return fromStorage;
56
- res = await client.call({
57
- _: 'contacts.resolvePhone',
58
- phone: peerId,
59
- });
56
+ try {
57
+ res = await client.call({
58
+ _: 'contacts.resolvePhone',
59
+ phone: peerId,
60
+ });
61
+ }
62
+ catch (e) {
63
+ if (tl.RpcError.is(e, 'PHONE_NOT_OCCUPIED')) {
64
+ throw new MtPeerNotFoundError(`Peer with phone number ${peerId} was not found`);
65
+ }
66
+ else
67
+ throw e;
68
+ }
60
69
  }
61
70
  else {
62
71
  // username
@@ -65,10 +74,19 @@ export async function resolvePeer(client, peerId, force = false) {
65
74
  if (fromStorage)
66
75
  return fromStorage;
67
76
  }
68
- res = await client.call({
69
- _: 'contacts.resolveUsername',
70
- username: peerId,
71
- });
77
+ try {
78
+ res = await client.call({
79
+ _: 'contacts.resolveUsername',
80
+ username: peerId,
81
+ });
82
+ }
83
+ catch (e) {
84
+ if (tl.RpcError.is(e, 'USERNAME_NOT_OCCUPIED')) {
85
+ throw new MtPeerNotFoundError(`Peer with username ${peerId} was not found`);
86
+ }
87
+ else
88
+ throw e;
89
+ }
72
90
  }
73
91
  if (res.peer._ === 'peerUser') {
74
92
  const id = res.peer.userId;
@@ -114,11 +132,12 @@ export async function resolvePeer(client, peerId, force = false) {
114
132
  }
115
133
  throw new MtPeerNotFoundError(`Could not find a peer by ${peerId}`);
116
134
  }
117
- // in some cases, the server allows us to use access_hash=0.
118
- // particularly, when we're a bot or we're referencing a user
119
- // who we have "seen" recently
135
+ // in some cases, the server allows bots to use access_hash=0.
120
136
  // if it's not the case, we'll get an `PEER_ID_INVALID` error anyways
121
137
  const [peerType, bareId] = parseMarkedPeerId(peerId);
138
+ if (peerType !== 'chat' && !client.storage.self.getCached(true)?.isBot) {
139
+ throw new MtPeerNotFoundError(`Peer ${peerId} is not found in local cache`);
140
+ }
122
141
  switch (peerType) {
123
142
  case 'user':
124
143
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"resolve-peer.js","sourceRoot":"","sources":["../../../../../src/highlevel/methods/users/resolve-peer.ts"],"names":[],"mappings":"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","sourcesContent":["import Long from 'long'\n\nimport { tl } from '@mtcute/tl'\n\nimport { MtTypeAssertionError } from '../../../types/errors.js'\nimport { getMarkedPeerId, parseMarkedPeerId, toggleChannelIdMark } from '../../../utils/peer-utils.js'\nimport { ITelegramClient } from '../../client.types.js'\nimport { MtPeerNotFoundError } from '../../types/errors.js'\nimport { InputPeerLike } from '../../types/peers/index.js'\nimport { toInputChannel, toInputPeer, toInputUser } from '../../utils/peer-utils.js'\n\n// @available=both\n/**\n * Get the `InputPeer` of a known peer id.\n * Useful when an `InputPeer` is needed in Raw API.\n *\n * @param peerId The peer identifier that you want to extract the `InputPeer` from.\n * @param force Whether to force re-fetch the peer from the server (only for usernames and phone numbers)\n */\nexport async function resolvePeer(\n client: ITelegramClient,\n peerId: InputPeerLike,\n force = false,\n): Promise<tl.TypeInputPeer> {\n // for convenience we also accept tl and User/Chat objects directly\n if (typeof peerId === 'object') {\n if (tl.isAnyPeer(peerId)) {\n peerId = getMarkedPeerId(peerId)\n } else if ('inputPeer' in peerId) {\n // User | Chat\n peerId = peerId.inputPeer\n } else {\n peerId = toInputPeer(peerId)\n }\n }\n\n if (typeof peerId === 'object') {\n switch (peerId._) {\n case 'mtcute.dummyInputPeerMinUser':\n peerId = peerId.userId\n break\n case 'mtcute.dummyInputPeerMinChannel':\n peerId = toggleChannelIdMark(peerId.channelId)\n break\n default:\n return peerId\n }\n }\n\n if (typeof peerId === 'number' && !force) {\n const fromStorage = await client.storage.peers.getById(peerId)\n if (fromStorage) return fromStorage\n }\n\n if (typeof peerId === 'string') {\n if (peerId === 'self' || peerId === 'me') return { _: 'inputPeerSelf' }\n\n peerId = peerId.replace(/[@+\\s()]/g, '')\n\n let res\n\n if (peerId.match(/^\\d+$/)) {\n // phone number\n const fromStorage = await client.storage.peers.getByPhone(peerId)\n if (fromStorage) return fromStorage\n\n res = await client.call({\n _: 'contacts.resolvePhone',\n phone: peerId,\n })\n } else {\n // username\n if (!force) {\n const fromStorage = await client.storage.peers.getByUsername(peerId)\n if (fromStorage) return fromStorage\n }\n\n res = await client.call({\n _: 'contacts.resolveUsername',\n username: peerId,\n })\n }\n\n if (res.peer._ === 'peerUser') {\n const id = res.peer.userId\n\n const found = res.users.find((it) => it.id === id)\n\n if (found && found._ === 'user') {\n if (!found.accessHash) {\n // no access hash, we can't use it\n // this may happen when bot resolves a username\n // of a user who hasn't started a conversation with it\n throw new MtPeerNotFoundError(\n `Peer (user) with username ${peerId} was found, but it has no access hash`,\n )\n }\n\n return {\n _: 'inputPeerUser',\n userId: found.id,\n accessHash: found.accessHash,\n }\n }\n } else if (res.peer._ === 'peerChannel') {\n const id = res.peer.channelId\n const found = res.chats.find((it) => it.id === id)\n\n if (found) {\n if (!(found._ === 'channel' || found._ === 'channelForbidden')) {\n // chats can't have usernames\n // furthermore, our id is a channel id, so it must be a channel\n // this should never happen, unless Telegram goes crazy\n throw new MtTypeAssertionError('contacts.resolveUsername#chats', 'channel', found._)\n }\n\n if (!found.accessHash) {\n // shouldn't happen? but just in case\n throw new MtPeerNotFoundError(`Peer (channel) with ${peerId} was found, but it has no access hash`)\n }\n\n return {\n _: 'inputPeerChannel',\n channelId: found.id,\n accessHash: found.accessHash,\n }\n }\n } else {\n // chats can't have usernames\n throw new MtTypeAssertionError('contacts.resolveUsername', 'user or channel', res.peer._)\n }\n\n throw new MtPeerNotFoundError(`Could not find a peer by ${peerId}`)\n }\n\n // in some cases, the server allows us to use access_hash=0.\n // particularly, when we're a bot or we're referencing a user\n // who we have \"seen\" recently\n // if it's not the case, we'll get an `PEER_ID_INVALID` error anyways\n const [peerType, bareId] = parseMarkedPeerId(peerId)\n\n switch (peerType) {\n case 'user':\n return {\n _: 'inputPeerUser',\n userId: bareId,\n accessHash: Long.ZERO,\n }\n case 'chat':\n return {\n _: 'inputPeerChat',\n chatId: bareId,\n }\n case 'channel':\n return {\n _: 'inputPeerChannel',\n channelId: bareId,\n accessHash: Long.ZERO,\n }\n }\n}\n\n/**\n * Shorthand for `resolvePeer` that converts the input peer to `InputUser`.\n */\nexport async function resolveUser(\n client: ITelegramClient,\n peerId: InputPeerLike,\n force = false,\n): Promise<tl.TypeInputUser> {\n return toInputUser(await resolvePeer(client, peerId, force), peerId)\n}\n\n/**\n * Shorthand for `resolvePeer` that converts the input peer to `InputChannel`.\n */\nexport async function resolveChannel(\n client: ITelegramClient,\n peerId: InputPeerLike,\n force = false,\n): Promise<tl.TypeInputChannel> {\n return toInputChannel(await resolvePeer(client, peerId, force), peerId)\n}\n"]}
1
+ {"version":3,"file":"resolve-peer.js","sourceRoot":"","sources":["../../../../../src/highlevel/methods/users/resolve-peer.ts"],"names":[],"mappings":"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","sourcesContent":["import Long from 'long'\n\nimport { tl } from '@mtcute/tl'\n\nimport { MtTypeAssertionError } from '../../../types/errors.js'\nimport { getMarkedPeerId, parseMarkedPeerId, toggleChannelIdMark } from '../../../utils/peer-utils.js'\nimport { ITelegramClient } from '../../client.types.js'\nimport { MtPeerNotFoundError } from '../../types/errors.js'\nimport { InputPeerLike } from '../../types/peers/index.js'\nimport { toInputChannel, toInputPeer, toInputUser } from '../../utils/peer-utils.js'\n\n// @available=both\n/**\n * Get the `InputPeer` of a known peer id.\n * Useful when an `InputPeer` is needed in Raw API.\n *\n * @param peerId The peer identifier that you want to extract the `InputPeer` from.\n * @param force Whether to force re-fetch the peer from the server (only for usernames and phone numbers)\n */\nexport async function resolvePeer(\n client: ITelegramClient,\n peerId: InputPeerLike,\n force = false,\n): Promise<tl.TypeInputPeer> {\n // for convenience we also accept tl and User/Chat objects directly\n if (typeof peerId === 'object') {\n if (tl.isAnyPeer(peerId)) {\n peerId = getMarkedPeerId(peerId)\n } else if ('inputPeer' in peerId) {\n // User | Chat\n peerId = peerId.inputPeer\n } else {\n peerId = toInputPeer(peerId)\n }\n }\n\n if (typeof peerId === 'object') {\n switch (peerId._) {\n case 'mtcute.dummyInputPeerMinUser':\n peerId = peerId.userId\n break\n case 'mtcute.dummyInputPeerMinChannel':\n peerId = toggleChannelIdMark(peerId.channelId)\n break\n default:\n return peerId\n }\n }\n\n if (typeof peerId === 'number' && !force) {\n const fromStorage = await client.storage.peers.getById(peerId)\n if (fromStorage) return fromStorage\n }\n\n if (typeof peerId === 'string') {\n if (peerId === 'self' || peerId === 'me') return { _: 'inputPeerSelf' }\n\n peerId = peerId.replace(/[@+\\s()]/g, '')\n\n let res\n\n if (peerId.match(/^\\d+$/)) {\n // phone number\n const fromStorage = await client.storage.peers.getByPhone(peerId)\n if (fromStorage) return fromStorage\n\n try {\n res = await client.call({\n _: 'contacts.resolvePhone',\n phone: peerId,\n })\n } catch (e) {\n if (tl.RpcError.is(e, 'PHONE_NOT_OCCUPIED')) {\n throw new MtPeerNotFoundError(`Peer with phone number ${peerId} was not found`)\n } else throw e\n }\n } else {\n // username\n if (!force) {\n const fromStorage = await client.storage.peers.getByUsername(peerId)\n if (fromStorage) return fromStorage\n }\n\n try {\n res = await client.call({\n _: 'contacts.resolveUsername',\n username: peerId,\n })\n } catch (e) {\n if (tl.RpcError.is(e, 'USERNAME_NOT_OCCUPIED')) {\n throw new MtPeerNotFoundError(`Peer with username ${peerId} was not found`)\n } else throw e\n }\n }\n\n if (res.peer._ === 'peerUser') {\n const id = res.peer.userId\n\n const found = res.users.find((it) => it.id === id)\n\n if (found && found._ === 'user') {\n if (!found.accessHash) {\n // no access hash, we can't use it\n // this may happen when bot resolves a username\n // of a user who hasn't started a conversation with it\n throw new MtPeerNotFoundError(\n `Peer (user) with username ${peerId} was found, but it has no access hash`,\n )\n }\n\n return {\n _: 'inputPeerUser',\n userId: found.id,\n accessHash: found.accessHash,\n }\n }\n } else if (res.peer._ === 'peerChannel') {\n const id = res.peer.channelId\n const found = res.chats.find((it) => it.id === id)\n\n if (found) {\n if (!(found._ === 'channel' || found._ === 'channelForbidden')) {\n // chats can't have usernames\n // furthermore, our id is a channel id, so it must be a channel\n // this should never happen, unless Telegram goes crazy\n throw new MtTypeAssertionError('contacts.resolveUsername#chats', 'channel', found._)\n }\n\n if (!found.accessHash) {\n // shouldn't happen? but just in case\n throw new MtPeerNotFoundError(`Peer (channel) with ${peerId} was found, but it has no access hash`)\n }\n\n return {\n _: 'inputPeerChannel',\n channelId: found.id,\n accessHash: found.accessHash,\n }\n }\n } else {\n // chats can't have usernames\n throw new MtTypeAssertionError('contacts.resolveUsername', 'user or channel', res.peer._)\n }\n\n throw new MtPeerNotFoundError(`Could not find a peer by ${peerId}`)\n }\n\n // in some cases, the server allows bots to use access_hash=0.\n // if it's not the case, we'll get an `PEER_ID_INVALID` error anyways\n const [peerType, bareId] = parseMarkedPeerId(peerId)\n\n if (peerType !== 'chat' && !client.storage.self.getCached(true)?.isBot) {\n throw new MtPeerNotFoundError(`Peer ${peerId} is not found in local cache`)\n }\n\n switch (peerType) {\n case 'user':\n return {\n _: 'inputPeerUser',\n userId: bareId,\n accessHash: Long.ZERO,\n }\n case 'chat':\n return {\n _: 'inputPeerChat',\n chatId: bareId,\n }\n case 'channel':\n return {\n _: 'inputPeerChannel',\n channelId: bareId,\n accessHash: Long.ZERO,\n }\n }\n}\n\n/**\n * Shorthand for `resolvePeer` that converts the input peer to `InputUser`.\n */\nexport async function resolveUser(\n client: ITelegramClient,\n peerId: InputPeerLike,\n force = false,\n): Promise<tl.TypeInputUser> {\n return toInputUser(await resolvePeer(client, peerId, force), peerId)\n}\n\n/**\n * Shorthand for `resolvePeer` that converts the input peer to `InputChannel`.\n */\nexport async function resolveChannel(\n client: ITelegramClient,\n peerId: InputPeerLike,\n force = false,\n): Promise<tl.TypeInputChannel> {\n return toInputChannel(await resolvePeer(client, peerId, force), peerId)\n}\n"]}
@@ -80,6 +80,7 @@ export { importContacts } from './methods/contacts/import-contacts.js';
80
80
  export { createFolder } from './methods/dialogs/create-folder.js';
81
81
  export { deleteFolder } from './methods/dialogs/delete-folder.js';
82
82
  export { editFolder } from './methods/dialogs/edit-folder.js';
83
+ export { findDialogs } from './methods/dialogs/find-dialogs.js';
83
84
  export { findFolder } from './methods/dialogs/find-folder.js';
84
85
  export { getFolders } from './methods/dialogs/get-folders.js';
85
86
  export { getPeerDialogs } from './methods/dialogs/get-peer-dialogs.js';
@@ -128,8 +129,10 @@ export type { ForwardMessageOptions } from './methods/messages/forward-messages.
128
129
  export { forwardMessagesById } from './methods/messages/forward-messages.js';
129
130
  export { forwardMessages } from './methods/messages/forward-messages.js';
130
131
  export { getAllScheduledMessages } from './methods/messages/get-all-scheduled-messages.js';
132
+ export { getAvailableMessageEffects } from './methods/messages/get-available-effects.js';
131
133
  export { getCallbackQueryMessage } from './methods/messages/get-callback-query-message.js';
132
134
  export { getDiscussionMessage } from './methods/messages/get-discussion-message.js';
135
+ export { getFactCheck } from './methods/messages/get-fact-check.js';
133
136
  export type { GetHistoryOffset } from './methods/messages/get-history.js';
134
137
  export { getHistory } from './methods/messages/get-history.js';
135
138
  export { getMessageByLink } from './methods/messages/get-message-by-link.js';
@@ -151,6 +154,9 @@ export { readHistory } from './methods/messages/read-history.js';
151
154
  export { readReactions } from './methods/messages/read-reactions.js';
152
155
  export type { SearchGlobalOffset } from './methods/messages/search-global.js';
153
156
  export { searchGlobal } from './methods/messages/search-global.js';
157
+ export type { SearchHashtagOffset } from './methods/messages/search-hashtag.js';
158
+ export { searchHashtag } from './methods/messages/search-hashtag.js';
159
+ export { iterSearchHashtag } from './methods/messages/search-hashtag.js';
154
160
  export type { SearchMessagesOffset } from './methods/messages/search-messages.js';
155
161
  export { searchMessages } from './methods/messages/search-messages.js';
156
162
  export { answerText } from './methods/messages/send-answer.js';
@@ -80,6 +80,7 @@ export { importContacts } from './methods/contacts/import-contacts.js';
80
80
  export { createFolder } from './methods/dialogs/create-folder.js';
81
81
  export { deleteFolder } from './methods/dialogs/delete-folder.js';
82
82
  export { editFolder } from './methods/dialogs/edit-folder.js';
83
+ export { findDialogs } from './methods/dialogs/find-dialogs.js';
83
84
  export { findFolder } from './methods/dialogs/find-folder.js';
84
85
  export { getFolders } from './methods/dialogs/get-folders.js';
85
86
  export { getPeerDialogs } from './methods/dialogs/get-peer-dialogs.js';
@@ -124,8 +125,10 @@ export { editMessage } from './methods/messages/edit-message.js';
124
125
  export { forwardMessagesById } from './methods/messages/forward-messages.js';
125
126
  export { forwardMessages } from './methods/messages/forward-messages.js';
126
127
  export { getAllScheduledMessages } from './methods/messages/get-all-scheduled-messages.js';
128
+ export { getAvailableMessageEffects } from './methods/messages/get-available-effects.js';
127
129
  export { getCallbackQueryMessage } from './methods/messages/get-callback-query-message.js';
128
130
  export { getDiscussionMessage } from './methods/messages/get-discussion-message.js';
131
+ export { getFactCheck } from './methods/messages/get-fact-check.js';
129
132
  export { getHistory } from './methods/messages/get-history.js';
130
133
  export { getMessageByLink } from './methods/messages/get-message-by-link.js';
131
134
  export { getMessageGroup } from './methods/messages/get-message-group.js';
@@ -144,6 +147,8 @@ export { pinMessage } from './methods/messages/pin-message.js';
144
147
  export { readHistory } from './methods/messages/read-history.js';
145
148
  export { readReactions } from './methods/messages/read-reactions.js';
146
149
  export { searchGlobal } from './methods/messages/search-global.js';
150
+ export { searchHashtag } from './methods/messages/search-hashtag.js';
151
+ export { iterSearchHashtag } from './methods/messages/search-hashtag.js';
147
152
  export { searchMessages } from './methods/messages/search-messages.js';
148
153
  export { answerText } from './methods/messages/send-answer.js';
149
154
  export { answerMedia } from './methods/messages/send-answer.js';