@mtcute/core 0.11.0 → 0.12.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 (467) hide show
  1. package/cjs/highlevel/client.d.ts +198 -18
  2. package/cjs/highlevel/client.js +53 -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/auth/utils.d.ts +3 -0
  6. package/cjs/highlevel/methods/bots/normalize-command-scope.d.ts +5 -1
  7. package/cjs/highlevel/methods/chats/batched-queries.d.ts +10 -1
  8. package/cjs/highlevel/methods/chats/get-full-chat.d.ts +2 -2
  9. package/cjs/highlevel/methods/chats/get-full-chat.js +1 -1
  10. package/cjs/highlevel/methods/chats/get-full-chat.js.map +1 -1
  11. package/cjs/highlevel/methods/dialogs/get-folders.d.ts +3 -0
  12. package/cjs/highlevel/methods/files/normalize-file-to-document.d.ts +9 -1
  13. package/cjs/highlevel/methods/files/normalize-input-media.d.ts +1 -0
  14. package/cjs/highlevel/methods/files/normalize-input-media.js +11 -10
  15. package/cjs/highlevel/methods/files/normalize-input-media.js.map +1 -1
  16. package/cjs/highlevel/methods/messages/_business-connection.d.ts +7 -0
  17. package/cjs/highlevel/methods/messages/_business-connection.js +42 -0
  18. package/cjs/highlevel/methods/messages/_business-connection.js.map +1 -0
  19. package/cjs/highlevel/methods/messages/close-poll.js +1 -1
  20. package/cjs/highlevel/methods/messages/close-poll.js.map +1 -1
  21. package/cjs/highlevel/methods/messages/edit-message.d.ts +1 -0
  22. package/cjs/highlevel/methods/messages/edit-message.js +2 -1
  23. package/cjs/highlevel/methods/messages/edit-message.js.map +1 -1
  24. package/cjs/highlevel/methods/messages/find-in-update.d.ts +13 -1
  25. package/cjs/highlevel/methods/messages/find-in-update.js +7 -2
  26. package/cjs/highlevel/methods/messages/find-in-update.js.map +1 -1
  27. package/cjs/highlevel/methods/messages/forward-messages.d.ts +5 -0
  28. package/cjs/highlevel/methods/messages/forward-messages.js +2 -0
  29. package/cjs/highlevel/methods/messages/forward-messages.js.map +1 -1
  30. package/cjs/highlevel/methods/messages/get-all-scheduled-messages.d.ts +8 -0
  31. package/cjs/highlevel/methods/messages/get-all-scheduled-messages.js +32 -0
  32. package/cjs/highlevel/methods/messages/get-all-scheduled-messages.js.map +1 -0
  33. package/cjs/highlevel/methods/messages/get-discussion-message.d.ts +4 -0
  34. package/cjs/highlevel/methods/messages/iter-search-global.js +2 -1
  35. package/cjs/highlevel/methods/messages/iter-search-global.js.map +1 -1
  36. package/cjs/highlevel/methods/messages/search-global.d.ts +4 -0
  37. package/cjs/highlevel/methods/messages/search-global.js +2 -1
  38. package/cjs/highlevel/methods/messages/search-global.js.map +1 -1
  39. package/cjs/highlevel/methods/messages/send-common.d.ts +28 -0
  40. package/cjs/highlevel/methods/messages/send-common.js +21 -1
  41. package/cjs/highlevel/methods/messages/send-common.js.map +1 -1
  42. package/cjs/highlevel/methods/messages/send-media-group.js +5 -2
  43. package/cjs/highlevel/methods/messages/send-media-group.js.map +1 -1
  44. package/cjs/highlevel/methods/messages/send-media.js +4 -2
  45. package/cjs/highlevel/methods/messages/send-media.js.map +1 -1
  46. package/cjs/highlevel/methods/messages/send-text.js +4 -2
  47. package/cjs/highlevel/methods/messages/send-text.js.map +1 -1
  48. package/cjs/highlevel/methods/messages/send-typing.d.ts +4 -0
  49. package/cjs/highlevel/methods/messages/send-typing.js +2 -1
  50. package/cjs/highlevel/methods/messages/send-typing.js.map +1 -1
  51. package/cjs/highlevel/methods/misc/chain-id.d.ts +4 -1
  52. package/cjs/highlevel/methods/misc/get-collectible-info.d.ts +6 -0
  53. package/cjs/highlevel/methods/misc/get-collectible-info.js +26 -0
  54. package/cjs/highlevel/methods/misc/get-collectible-info.js.map +1 -0
  55. package/cjs/highlevel/methods/misc/normalize-text.d.ts +5 -1
  56. package/cjs/highlevel/methods/premium/create-business-chat-link.d.ts +12 -0
  57. package/cjs/highlevel/methods/premium/create-business-chat-link.js +26 -0
  58. package/cjs/highlevel/methods/premium/create-business-chat-link.js.map +1 -0
  59. package/cjs/highlevel/methods/premium/edit-business-chat-link.d.ts +20 -0
  60. package/cjs/highlevel/methods/premium/edit-business-chat-link.js +42 -0
  61. package/cjs/highlevel/methods/premium/edit-business-chat-link.js.map +1 -0
  62. package/cjs/highlevel/methods/premium/get-business-chat-links.d.ts +6 -0
  63. package/cjs/highlevel/methods/premium/get-business-chat-links.js +14 -0
  64. package/cjs/highlevel/methods/premium/get-business-chat-links.js.map +1 -0
  65. package/cjs/highlevel/methods/premium/get-business-connection.d.ts +8 -0
  66. package/cjs/highlevel/methods/premium/get-business-connection.js +25 -0
  67. package/cjs/highlevel/methods/premium/get-business-connection.js.map +1 -0
  68. package/cjs/highlevel/methods/premium/set-business-intro.d.ts +22 -0
  69. package/cjs/highlevel/methods/premium/set-business-intro.js +42 -0
  70. package/cjs/highlevel/methods/premium/set-business-intro.js.map +1 -0
  71. package/cjs/highlevel/methods/premium/set-business-work-hours.d.ts +18 -0
  72. package/cjs/highlevel/methods/premium/set-business-work-hours.js +33 -0
  73. package/cjs/highlevel/methods/premium/set-business-work-hours.js.map +1 -0
  74. package/cjs/highlevel/methods/stickers/_utils.d.ts +10 -0
  75. package/cjs/highlevel/methods/stickers/_utils.js +27 -0
  76. package/cjs/highlevel/methods/stickers/_utils.js.map +1 -0
  77. package/cjs/highlevel/methods/stickers/add-sticker-to-set.d.ts +1 -2
  78. package/cjs/highlevel/methods/stickers/add-sticker-to-set.js +3 -17
  79. package/cjs/highlevel/methods/stickers/add-sticker-to-set.js.map +1 -1
  80. package/cjs/highlevel/methods/stickers/create-sticker-set.d.ts +0 -3
  81. package/cjs/highlevel/methods/stickers/create-sticker-set.js +2 -19
  82. package/cjs/highlevel/methods/stickers/create-sticker-set.js.map +1 -1
  83. package/cjs/highlevel/methods/stickers/delete-sticker-from-set.d.ts +1 -2
  84. package/cjs/highlevel/methods/stickers/delete-sticker-from-set.js +1 -2
  85. package/cjs/highlevel/methods/stickers/delete-sticker-from-set.js.map +1 -1
  86. package/cjs/highlevel/methods/stickers/get-installed-stickers.d.ts +1 -2
  87. package/cjs/highlevel/methods/stickers/get-installed-stickers.js +1 -2
  88. package/cjs/highlevel/methods/stickers/get-installed-stickers.js.map +1 -1
  89. package/cjs/highlevel/methods/stickers/get-my-sticker-sets.d.ts +13 -0
  90. package/cjs/highlevel/methods/stickers/get-my-sticker-sets.js +24 -0
  91. package/cjs/highlevel/methods/stickers/get-my-sticker-sets.js.map +1 -0
  92. package/cjs/highlevel/methods/stickers/get-sticker-set.d.ts +2 -2
  93. package/cjs/highlevel/methods/stickers/get-sticker-set.js +2 -2
  94. package/cjs/highlevel/methods/stickers/get-sticker-set.js.map +1 -1
  95. package/cjs/highlevel/methods/stickers/move-sticker-in-set.d.ts +2 -3
  96. package/cjs/highlevel/methods/stickers/move-sticker-in-set.js +2 -3
  97. package/cjs/highlevel/methods/stickers/move-sticker-in-set.js.map +1 -1
  98. package/cjs/highlevel/methods/stickers/replace-sticker-in-set.d.ts +24 -0
  99. package/cjs/highlevel/methods/stickers/replace-sticker-in-set.js +32 -0
  100. package/cjs/highlevel/methods/stickers/replace-sticker-in-set.js.map +1 -0
  101. package/cjs/highlevel/methods/stories/find-in-update.d.ts +5 -1
  102. package/cjs/highlevel/methods/users/set-my-birthday.d.ts +12 -0
  103. package/cjs/highlevel/methods/users/set-my-birthday.js +22 -0
  104. package/cjs/highlevel/methods/users/set-my-birthday.js.map +1 -0
  105. package/cjs/highlevel/methods.d.ts +12 -0
  106. package/cjs/highlevel/methods.js +33 -3
  107. package/cjs/highlevel/methods.js.map +1 -1
  108. package/cjs/highlevel/storage/storage.d.ts +7 -2
  109. package/cjs/highlevel/types/auth/sent-code.d.ts +7 -2
  110. package/cjs/highlevel/types/auth/sent-code.js +14 -0
  111. package/cjs/highlevel/types/auth/sent-code.js.map +1 -1
  112. package/cjs/highlevel/types/bots/inline-message/factories.d.ts +5 -1
  113. package/cjs/highlevel/types/bots/inline-result/factories.d.ts +4 -1
  114. package/cjs/highlevel/types/bots/keyboards/factories.d.ts +7 -1
  115. package/cjs/highlevel/types/calls/discard-reason.d.ts +5 -0
  116. package/cjs/highlevel/types/files/uploaded-file.d.ts +2 -0
  117. package/cjs/highlevel/types/files/utils.d.ts +6 -5
  118. package/cjs/highlevel/types/files/utils.js.map +1 -1
  119. package/cjs/highlevel/types/media/document-utils.d.ts +5 -0
  120. package/cjs/highlevel/types/media/document-utils.js +9 -2
  121. package/cjs/highlevel/types/media/document-utils.js.map +1 -1
  122. package/cjs/highlevel/types/media/input-media/types.d.ts +2 -2
  123. package/cjs/highlevel/types/media/input-media/types.js.map +1 -1
  124. package/cjs/highlevel/types/media/poll.d.ts +17 -6
  125. package/cjs/highlevel/types/media/poll.js +65 -18
  126. package/cjs/highlevel/types/media/poll.js.map +1 -1
  127. package/cjs/highlevel/types/messages/dialog.js +1 -12
  128. package/cjs/highlevel/types/messages/dialog.js.map +1 -1
  129. package/cjs/highlevel/types/messages/input-message-id.d.ts +5 -0
  130. package/cjs/highlevel/types/messages/message-action.d.ts +19 -2
  131. package/cjs/highlevel/types/messages/message-action.js +6 -0
  132. package/cjs/highlevel/types/messages/message-action.js.map +1 -1
  133. package/cjs/highlevel/types/messages/message-media.d.ts +4 -0
  134. package/cjs/highlevel/types/messages/message.d.ts +59 -1
  135. package/cjs/highlevel/types/messages/message.js +96 -1
  136. package/cjs/highlevel/types/messages/message.js.map +1 -1
  137. package/cjs/highlevel/types/misc/collectible-info.d.ts +27 -0
  138. package/cjs/highlevel/types/misc/collectible-info.js +46 -0
  139. package/cjs/highlevel/types/misc/collectible-info.js.map +1 -0
  140. package/cjs/highlevel/types/misc/entities.d.ts +7 -0
  141. package/cjs/highlevel/types/misc/entities.js +15 -0
  142. package/cjs/highlevel/types/misc/entities.js.map +1 -1
  143. package/cjs/highlevel/types/misc/index.d.ts +1 -0
  144. package/cjs/highlevel/types/misc/index.js +1 -0
  145. package/cjs/highlevel/types/misc/index.js.map +1 -1
  146. package/cjs/highlevel/types/misc/sticker-set.d.ts +8 -1
  147. package/cjs/highlevel/types/misc/sticker-set.js +36 -5
  148. package/cjs/highlevel/types/misc/sticker-set.js.map +1 -1
  149. package/cjs/highlevel/types/peers/chat-event/actions.d.ts +3 -0
  150. package/cjs/highlevel/types/peers/chat-event/filters.d.ts +2 -0
  151. package/cjs/highlevel/types/peers/chat.d.ts +7 -93
  152. package/cjs/highlevel/types/peers/chat.js +2 -195
  153. package/cjs/highlevel/types/peers/chat.js.map +1 -1
  154. package/cjs/highlevel/types/peers/full-chat.d.ts +103 -0
  155. package/cjs/highlevel/types/peers/full-chat.js +237 -0
  156. package/cjs/highlevel/types/peers/full-chat.js.map +1 -0
  157. package/cjs/highlevel/types/peers/index.d.ts +1 -0
  158. package/cjs/highlevel/types/peers/index.js +1 -0
  159. package/cjs/highlevel/types/peers/index.js.map +1 -1
  160. package/cjs/highlevel/types/peers/user.d.ts +5 -0
  161. package/cjs/highlevel/types/peers/user.js +7 -0
  162. package/cjs/highlevel/types/peers/user.js.map +1 -1
  163. package/cjs/highlevel/types/premium/business-account.d.ts +19 -0
  164. package/cjs/highlevel/types/premium/business-account.js +45 -0
  165. package/cjs/highlevel/types/premium/business-account.js.map +1 -0
  166. package/cjs/highlevel/types/premium/business-chat-link.d.ts +19 -0
  167. package/cjs/highlevel/types/premium/business-chat-link.js +39 -0
  168. package/cjs/highlevel/types/premium/business-chat-link.js.map +1 -0
  169. package/cjs/highlevel/types/premium/business-connection.d.ts +23 -0
  170. package/cjs/highlevel/types/premium/business-connection.js +45 -0
  171. package/cjs/highlevel/types/premium/business-connection.js.map +1 -0
  172. package/cjs/highlevel/types/premium/business-intro.d.ts +22 -0
  173. package/cjs/highlevel/types/premium/business-intro.js +43 -0
  174. package/cjs/highlevel/types/premium/business-intro.js.map +1 -0
  175. package/cjs/highlevel/types/premium/business-location.d.ts +10 -0
  176. package/cjs/highlevel/types/premium/business-location.js +26 -0
  177. package/cjs/highlevel/types/premium/business-location.js.map +1 -0
  178. package/cjs/highlevel/types/premium/business-work-hours.d.ts +42 -0
  179. package/cjs/highlevel/types/premium/business-work-hours.js +141 -0
  180. package/cjs/highlevel/types/premium/business-work-hours.js.map +1 -0
  181. package/cjs/highlevel/types/premium/index.d.ts +5 -0
  182. package/cjs/highlevel/types/premium/index.js +5 -0
  183. package/cjs/highlevel/types/premium/index.js.map +1 -1
  184. package/cjs/highlevel/types/updates/business-message.d.ts +18 -0
  185. package/cjs/highlevel/types/updates/business-message.js +35 -0
  186. package/cjs/highlevel/types/updates/business-message.js.map +1 -0
  187. package/cjs/highlevel/types/updates/delete-business-message-update.d.ts +21 -0
  188. package/cjs/highlevel/types/updates/delete-business-message-update.js +37 -0
  189. package/cjs/highlevel/types/updates/delete-business-message-update.js.map +1 -0
  190. package/cjs/highlevel/types/updates/index.d.ts +19 -2
  191. package/cjs/highlevel/types/updates/index.js +5 -1
  192. package/cjs/highlevel/types/updates/index.js.map +1 -1
  193. package/cjs/highlevel/types/updates/parse-update.d.ts +4 -1
  194. package/cjs/highlevel/types/updates/parse-update.js +8 -0
  195. package/cjs/highlevel/types/updates/parse-update.js.map +1 -1
  196. package/cjs/highlevel/types/updates/poll-update.js +2 -2
  197. package/cjs/highlevel/types/updates/poll-update.js.map +1 -1
  198. package/cjs/highlevel/updates/manager.d.ts +0 -1
  199. package/cjs/highlevel/updates/manager.js +7 -2
  200. package/cjs/highlevel/updates/manager.js.map +1 -1
  201. package/cjs/highlevel/updates/parsed.js +8 -2
  202. package/cjs/highlevel/updates/parsed.js.map +1 -1
  203. package/cjs/highlevel/updates/types.d.ts +57 -0
  204. package/cjs/highlevel/updates/utils.d.ts +2 -0
  205. package/cjs/highlevel/utils/inspectable.js +7 -0
  206. package/cjs/highlevel/utils/inspectable.js.map +1 -1
  207. package/cjs/highlevel/worker/index.js +6 -0
  208. package/cjs/highlevel/worker/protocol.d.ts +0 -1
  209. package/cjs/index.js +6 -0
  210. package/cjs/network/client.d.ts +0 -1
  211. package/cjs/network/mtproto-session.d.ts +0 -1
  212. package/cjs/network/multi-session-connection.d.ts +0 -1
  213. package/cjs/network/network-manager.d.ts +8 -0
  214. package/cjs/network/network-manager.js +9 -4
  215. package/cjs/network/network-manager.js.map +1 -1
  216. package/cjs/network/persistent-connection.d.ts +0 -1
  217. package/cjs/network/session-connection.js +10 -0
  218. package/cjs/network/session-connection.js.map +1 -1
  219. package/cjs/network/transports/abstract.d.ts +0 -1
  220. package/cjs/network/transports/streamed.d.ts +0 -1
  221. package/cjs/network/transports/wrapped.d.ts +0 -1
  222. package/cjs/platform.js +6 -0
  223. package/cjs/storage/sqlite/repository/peers.js +1 -2
  224. package/cjs/storage/sqlite/repository/peers.js.map +1 -1
  225. package/cjs/storage/storage.d.ts +21 -0
  226. package/cjs/types/utils.d.ts +1 -0
  227. package/cjs/types/utils.js.map +1 -1
  228. package/cjs/utils/index.js +6 -0
  229. package/cjs/utils/reloadable.d.ts +0 -1
  230. package/client.d.ts +1 -0
  231. package/client.js +1 -0
  232. package/esm/highlevel/client.d.ts +198 -18
  233. package/esm/highlevel/client.js +47 -0
  234. package/esm/highlevel/client.js.map +1 -1
  235. package/esm/highlevel/methods/_imports.js.map +1 -1
  236. package/esm/highlevel/methods/auth/utils.d.ts +3 -0
  237. package/esm/highlevel/methods/bots/normalize-command-scope.d.ts +5 -1
  238. package/esm/highlevel/methods/chats/batched-queries.d.ts +10 -1
  239. package/esm/highlevel/methods/chats/get-full-chat.d.ts +2 -2
  240. package/esm/highlevel/methods/chats/get-full-chat.js +2 -2
  241. package/esm/highlevel/methods/chats/get-full-chat.js.map +1 -1
  242. package/esm/highlevel/methods/dialogs/get-folders.d.ts +3 -0
  243. package/esm/highlevel/methods/files/normalize-file-to-document.d.ts +9 -1
  244. package/esm/highlevel/methods/files/normalize-input-media.d.ts +1 -0
  245. package/esm/highlevel/methods/files/normalize-input-media.js +11 -10
  246. package/esm/highlevel/methods/files/normalize-input-media.js.map +1 -1
  247. package/esm/highlevel/methods/messages/_business-connection.d.ts +7 -0
  248. package/esm/highlevel/methods/messages/_business-connection.js +38 -0
  249. package/esm/highlevel/methods/messages/_business-connection.js.map +1 -0
  250. package/esm/highlevel/methods/messages/close-poll.js +1 -1
  251. package/esm/highlevel/methods/messages/close-poll.js.map +1 -1
  252. package/esm/highlevel/methods/messages/edit-message.d.ts +1 -0
  253. package/esm/highlevel/methods/messages/edit-message.js +2 -1
  254. package/esm/highlevel/methods/messages/edit-message.js.map +1 -1
  255. package/esm/highlevel/methods/messages/find-in-update.d.ts +13 -1
  256. package/esm/highlevel/methods/messages/find-in-update.js +7 -2
  257. package/esm/highlevel/methods/messages/find-in-update.js.map +1 -1
  258. package/esm/highlevel/methods/messages/forward-messages.d.ts +5 -0
  259. package/esm/highlevel/methods/messages/forward-messages.js +2 -0
  260. package/esm/highlevel/methods/messages/forward-messages.js.map +1 -1
  261. package/esm/highlevel/methods/messages/get-all-scheduled-messages.d.ts +8 -0
  262. package/esm/highlevel/methods/messages/get-all-scheduled-messages.js +25 -0
  263. package/esm/highlevel/methods/messages/get-all-scheduled-messages.js.map +1 -0
  264. package/esm/highlevel/methods/messages/get-discussion-message.d.ts +4 -0
  265. package/esm/highlevel/methods/messages/iter-search-global.js +2 -1
  266. package/esm/highlevel/methods/messages/iter-search-global.js.map +1 -1
  267. package/esm/highlevel/methods/messages/search-global.d.ts +4 -0
  268. package/esm/highlevel/methods/messages/search-global.js +2 -1
  269. package/esm/highlevel/methods/messages/search-global.js.map +1 -1
  270. package/esm/highlevel/methods/messages/send-common.d.ts +28 -0
  271. package/esm/highlevel/methods/messages/send-common.js +19 -0
  272. package/esm/highlevel/methods/messages/send-common.js.map +1 -1
  273. package/esm/highlevel/methods/messages/send-media-group.js +5 -2
  274. package/esm/highlevel/methods/messages/send-media-group.js.map +1 -1
  275. package/esm/highlevel/methods/messages/send-media.js +4 -2
  276. package/esm/highlevel/methods/messages/send-media.js.map +1 -1
  277. package/esm/highlevel/methods/messages/send-text.js +4 -2
  278. package/esm/highlevel/methods/messages/send-text.js.map +1 -1
  279. package/esm/highlevel/methods/messages/send-typing.d.ts +4 -0
  280. package/esm/highlevel/methods/messages/send-typing.js +2 -1
  281. package/esm/highlevel/methods/messages/send-typing.js.map +1 -1
  282. package/esm/highlevel/methods/misc/chain-id.d.ts +4 -1
  283. package/esm/highlevel/methods/misc/get-collectible-info.d.ts +6 -0
  284. package/esm/highlevel/methods/misc/get-collectible-info.js +22 -0
  285. package/esm/highlevel/methods/misc/get-collectible-info.js.map +1 -0
  286. package/esm/highlevel/methods/misc/normalize-text.d.ts +5 -1
  287. package/esm/highlevel/methods/premium/create-business-chat-link.d.ts +12 -0
  288. package/esm/highlevel/methods/premium/create-business-chat-link.js +22 -0
  289. package/esm/highlevel/methods/premium/create-business-chat-link.js.map +1 -0
  290. package/esm/highlevel/methods/premium/edit-business-chat-link.d.ts +20 -0
  291. package/esm/highlevel/methods/premium/edit-business-chat-link.js +37 -0
  292. package/esm/highlevel/methods/premium/edit-business-chat-link.js.map +1 -0
  293. package/esm/highlevel/methods/premium/get-business-chat-links.d.ts +6 -0
  294. package/esm/highlevel/methods/premium/get-business-chat-links.js +10 -0
  295. package/esm/highlevel/methods/premium/get-business-chat-links.js.map +1 -0
  296. package/esm/highlevel/methods/premium/get-business-connection.d.ts +8 -0
  297. package/esm/highlevel/methods/premium/get-business-connection.js +21 -0
  298. package/esm/highlevel/methods/premium/get-business-connection.js.map +1 -0
  299. package/esm/highlevel/methods/premium/set-business-intro.d.ts +22 -0
  300. package/esm/highlevel/methods/premium/set-business-intro.js +38 -0
  301. package/esm/highlevel/methods/premium/set-business-intro.js.map +1 -0
  302. package/esm/highlevel/methods/premium/set-business-work-hours.d.ts +18 -0
  303. package/esm/highlevel/methods/premium/set-business-work-hours.js +29 -0
  304. package/esm/highlevel/methods/premium/set-business-work-hours.js.map +1 -0
  305. package/esm/highlevel/methods/stickers/_utils.d.ts +10 -0
  306. package/esm/highlevel/methods/stickers/_utils.js +23 -0
  307. package/esm/highlevel/methods/stickers/_utils.js.map +1 -0
  308. package/esm/highlevel/methods/stickers/add-sticker-to-set.d.ts +1 -2
  309. package/esm/highlevel/methods/stickers/add-sticker-to-set.js +4 -18
  310. package/esm/highlevel/methods/stickers/add-sticker-to-set.js.map +1 -1
  311. package/esm/highlevel/methods/stickers/create-sticker-set.d.ts +0 -3
  312. package/esm/highlevel/methods/stickers/create-sticker-set.js +3 -20
  313. package/esm/highlevel/methods/stickers/create-sticker-set.js.map +1 -1
  314. package/esm/highlevel/methods/stickers/delete-sticker-from-set.d.ts +1 -2
  315. package/esm/highlevel/methods/stickers/delete-sticker-from-set.js +1 -2
  316. package/esm/highlevel/methods/stickers/delete-sticker-from-set.js.map +1 -1
  317. package/esm/highlevel/methods/stickers/get-installed-stickers.d.ts +1 -2
  318. package/esm/highlevel/methods/stickers/get-installed-stickers.js +1 -2
  319. package/esm/highlevel/methods/stickers/get-installed-stickers.js.map +1 -1
  320. package/esm/highlevel/methods/stickers/get-my-sticker-sets.d.ts +13 -0
  321. package/esm/highlevel/methods/stickers/get-my-sticker-sets.js +17 -0
  322. package/esm/highlevel/methods/stickers/get-my-sticker-sets.js.map +1 -0
  323. package/esm/highlevel/methods/stickers/get-sticker-set.d.ts +2 -2
  324. package/esm/highlevel/methods/stickers/get-sticker-set.js +2 -2
  325. package/esm/highlevel/methods/stickers/get-sticker-set.js.map +1 -1
  326. package/esm/highlevel/methods/stickers/move-sticker-in-set.d.ts +2 -3
  327. package/esm/highlevel/methods/stickers/move-sticker-in-set.js +2 -3
  328. package/esm/highlevel/methods/stickers/move-sticker-in-set.js.map +1 -1
  329. package/esm/highlevel/methods/stickers/replace-sticker-in-set.d.ts +24 -0
  330. package/esm/highlevel/methods/stickers/replace-sticker-in-set.js +28 -0
  331. package/esm/highlevel/methods/stickers/replace-sticker-in-set.js.map +1 -0
  332. package/esm/highlevel/methods/stories/find-in-update.d.ts +5 -1
  333. package/esm/highlevel/methods/users/set-my-birthday.d.ts +12 -0
  334. package/esm/highlevel/methods/users/set-my-birthday.js +18 -0
  335. package/esm/highlevel/methods/users/set-my-birthday.js.map +1 -0
  336. package/esm/highlevel/methods.d.ts +12 -0
  337. package/esm/highlevel/methods.js +12 -0
  338. package/esm/highlevel/methods.js.map +1 -1
  339. package/esm/highlevel/storage/storage.d.ts +7 -2
  340. package/esm/highlevel/types/auth/sent-code.d.ts +7 -2
  341. package/esm/highlevel/types/auth/sent-code.js +14 -0
  342. package/esm/highlevel/types/auth/sent-code.js.map +1 -1
  343. package/esm/highlevel/types/bots/inline-message/factories.d.ts +5 -1
  344. package/esm/highlevel/types/bots/inline-result/factories.d.ts +4 -1
  345. package/esm/highlevel/types/bots/keyboards/factories.d.ts +7 -1
  346. package/esm/highlevel/types/calls/discard-reason.d.ts +5 -0
  347. package/esm/highlevel/types/files/uploaded-file.d.ts +2 -0
  348. package/esm/highlevel/types/files/utils.d.ts +6 -5
  349. package/esm/highlevel/types/files/utils.js.map +1 -1
  350. package/esm/highlevel/types/media/document-utils.d.ts +5 -0
  351. package/esm/highlevel/types/media/document-utils.js +7 -1
  352. package/esm/highlevel/types/media/document-utils.js.map +1 -1
  353. package/esm/highlevel/types/media/input-media/types.d.ts +2 -2
  354. package/esm/highlevel/types/media/input-media/types.js.map +1 -1
  355. package/esm/highlevel/types/media/poll.d.ts +17 -6
  356. package/esm/highlevel/types/media/poll.js +64 -17
  357. package/esm/highlevel/types/media/poll.js.map +1 -1
  358. package/esm/highlevel/types/messages/dialog.js +1 -12
  359. package/esm/highlevel/types/messages/dialog.js.map +1 -1
  360. package/esm/highlevel/types/messages/input-message-id.d.ts +5 -0
  361. package/esm/highlevel/types/messages/message-action.d.ts +19 -2
  362. package/esm/highlevel/types/messages/message-action.js +6 -0
  363. package/esm/highlevel/types/messages/message-action.js.map +1 -1
  364. package/esm/highlevel/types/messages/message-media.d.ts +4 -0
  365. package/esm/highlevel/types/messages/message.d.ts +59 -1
  366. package/esm/highlevel/types/messages/message.js +96 -1
  367. package/esm/highlevel/types/messages/message.js.map +1 -1
  368. package/esm/highlevel/types/misc/collectible-info.d.ts +27 -0
  369. package/esm/highlevel/types/misc/collectible-info.js +43 -0
  370. package/esm/highlevel/types/misc/collectible-info.js.map +1 -0
  371. package/esm/highlevel/types/misc/entities.d.ts +7 -0
  372. package/esm/highlevel/types/misc/entities.js +13 -1
  373. package/esm/highlevel/types/misc/entities.js.map +1 -1
  374. package/esm/highlevel/types/misc/index.d.ts +1 -0
  375. package/esm/highlevel/types/misc/index.js +1 -0
  376. package/esm/highlevel/types/misc/index.js.map +1 -1
  377. package/esm/highlevel/types/misc/sticker-set.d.ts +8 -1
  378. package/esm/highlevel/types/misc/sticker-set.js +38 -7
  379. package/esm/highlevel/types/misc/sticker-set.js.map +1 -1
  380. package/esm/highlevel/types/peers/chat-event/actions.d.ts +3 -0
  381. package/esm/highlevel/types/peers/chat-event/filters.d.ts +2 -0
  382. package/esm/highlevel/types/peers/chat.d.ts +7 -93
  383. package/esm/highlevel/types/peers/chat.js +2 -195
  384. package/esm/highlevel/types/peers/chat.js.map +1 -1
  385. package/esm/highlevel/types/peers/full-chat.d.ts +103 -0
  386. package/esm/highlevel/types/peers/full-chat.js +234 -0
  387. package/esm/highlevel/types/peers/full-chat.js.map +1 -0
  388. package/esm/highlevel/types/peers/index.d.ts +1 -0
  389. package/esm/highlevel/types/peers/index.js +1 -0
  390. package/esm/highlevel/types/peers/index.js.map +1 -1
  391. package/esm/highlevel/types/peers/user.d.ts +5 -0
  392. package/esm/highlevel/types/peers/user.js +7 -0
  393. package/esm/highlevel/types/peers/user.js.map +1 -1
  394. package/esm/highlevel/types/premium/business-account.d.ts +19 -0
  395. package/esm/highlevel/types/premium/business-account.js +42 -0
  396. package/esm/highlevel/types/premium/business-account.js.map +1 -0
  397. package/esm/highlevel/types/premium/business-chat-link.d.ts +19 -0
  398. package/esm/highlevel/types/premium/business-chat-link.js +36 -0
  399. package/esm/highlevel/types/premium/business-chat-link.js.map +1 -0
  400. package/esm/highlevel/types/premium/business-connection.d.ts +23 -0
  401. package/esm/highlevel/types/premium/business-connection.js +42 -0
  402. package/esm/highlevel/types/premium/business-connection.js.map +1 -0
  403. package/esm/highlevel/types/premium/business-intro.d.ts +22 -0
  404. package/esm/highlevel/types/premium/business-intro.js +40 -0
  405. package/esm/highlevel/types/premium/business-intro.js.map +1 -0
  406. package/esm/highlevel/types/premium/business-location.d.ts +10 -0
  407. package/esm/highlevel/types/premium/business-location.js +23 -0
  408. package/esm/highlevel/types/premium/business-location.js.map +1 -0
  409. package/esm/highlevel/types/premium/business-work-hours.d.ts +42 -0
  410. package/esm/highlevel/types/premium/business-work-hours.js +137 -0
  411. package/esm/highlevel/types/premium/business-work-hours.js.map +1 -0
  412. package/esm/highlevel/types/premium/index.d.ts +5 -0
  413. package/esm/highlevel/types/premium/index.js +5 -0
  414. package/esm/highlevel/types/premium/index.js.map +1 -1
  415. package/esm/highlevel/types/updates/business-message.d.ts +18 -0
  416. package/esm/highlevel/types/updates/business-message.js +31 -0
  417. package/esm/highlevel/types/updates/business-message.js.map +1 -0
  418. package/esm/highlevel/types/updates/delete-business-message-update.d.ts +21 -0
  419. package/esm/highlevel/types/updates/delete-business-message-update.js +34 -0
  420. package/esm/highlevel/types/updates/delete-business-message-update.js.map +1 -0
  421. package/esm/highlevel/types/updates/index.d.ts +19 -2
  422. package/esm/highlevel/types/updates/index.js +3 -1
  423. package/esm/highlevel/types/updates/index.js.map +1 -1
  424. package/esm/highlevel/types/updates/parse-update.d.ts +4 -1
  425. package/esm/highlevel/types/updates/parse-update.js +9 -1
  426. package/esm/highlevel/types/updates/parse-update.js.map +1 -1
  427. package/esm/highlevel/types/updates/poll-update.js +2 -2
  428. package/esm/highlevel/types/updates/poll-update.js.map +1 -1
  429. package/esm/highlevel/updates/manager.d.ts +0 -1
  430. package/esm/highlevel/updates/manager.js +7 -2
  431. package/esm/highlevel/updates/manager.js.map +1 -1
  432. package/esm/highlevel/updates/parsed.js +8 -2
  433. package/esm/highlevel/updates/parsed.js.map +1 -1
  434. package/esm/highlevel/updates/types.d.ts +57 -0
  435. package/esm/highlevel/updates/utils.d.ts +2 -0
  436. package/esm/highlevel/utils/inspectable.js +4 -0
  437. package/esm/highlevel/utils/inspectable.js.map +1 -1
  438. package/esm/highlevel/worker/protocol.d.ts +0 -1
  439. package/esm/network/client.d.ts +0 -1
  440. package/esm/network/mtproto-session.d.ts +0 -1
  441. package/esm/network/multi-session-connection.d.ts +0 -1
  442. package/esm/network/network-manager.d.ts +8 -0
  443. package/esm/network/network-manager.js +9 -4
  444. package/esm/network/network-manager.js.map +1 -1
  445. package/esm/network/persistent-connection.d.ts +0 -1
  446. package/esm/network/session-connection.js +10 -0
  447. package/esm/network/session-connection.js.map +1 -1
  448. package/esm/network/transports/abstract.d.ts +0 -1
  449. package/esm/network/transports/streamed.d.ts +0 -1
  450. package/esm/network/transports/wrapped.d.ts +0 -1
  451. package/esm/storage/sqlite/repository/peers.js +1 -2
  452. package/esm/storage/sqlite/repository/peers.js.map +1 -1
  453. package/esm/storage/storage.d.ts +21 -0
  454. package/esm/types/utils.d.ts +1 -0
  455. package/esm/types/utils.js.map +1 -1
  456. package/esm/utils/reloadable.d.ts +0 -1
  457. package/index.d.ts +1 -0
  458. package/index.js +1 -0
  459. package/methods.d.ts +1 -0
  460. package/methods.js +1 -0
  461. package/package.json +5 -5
  462. package/platform.d.ts +1 -0
  463. package/platform.js +1 -0
  464. package/utils.d.ts +1 -0
  465. package/utils.js +1 -0
  466. package/worker.d.ts +1 -0
  467. package/worker.js +1 -0
@@ -20,3 +20,5 @@ export interface UploadedFile {
20
20
  */
21
21
  mime: string;
22
22
  }
23
+ /** @internal */
24
+ export declare function isUploadedFile(obj: unknown): obj is UploadedFile;
@@ -1,8 +1,6 @@
1
- /// <reference types="node" resolution-mode="require"/>
2
- /// <reference types="node" resolution-mode="require"/>
3
- import type { ReadStream } from 'node:fs';
4
1
  import { tdFileId } from '@mtcute/file-id';
5
2
  import { tl } from '@mtcute/tl';
3
+ import { AnyToNever } from '../../../types/utils.js';
6
4
  import { FileLocation } from './file-location.js';
7
5
  import { UploadedFile } from './uploaded-file.js';
8
6
  /**
@@ -12,13 +10,14 @@ import { UploadedFile } from './uploaded-file.js';
12
10
  * - `File`, `Blob` (from the Web API)
13
11
  * - `string`, which will be interpreted as file path (**non-browser only!**)
14
12
  * - `URL` (from the Web API, will be `fetch()`-ed; `file://` URLs are not available in browsers)
15
- * - `ReadStream` (for Node.js/Bun, from the `fs` module)
13
+ * - `ReadStream` (for Node.js/Bun, from the `node:fs` module)
16
14
  * - `BunFile` (from `Bun.file()`)
15
+ * - `Deno.FsFile` (from `Deno.open()` in Deno)
17
16
  * - `ReadableStream` (Web API readable stream)
18
17
  * - `Readable` (Node.js/Bun readable stream)
19
18
  * - `Response` (from `window.fetch`)
20
19
  */
21
- export type UploadFileLike = URL | Uint8Array | File | Blob | string | ReadStream | ReadableStream<Uint8Array> | NodeJS.ReadableStream | Response;
20
+ export type UploadFileLike = URL | Uint8Array | File | Blob | string | AnyToNever<import('node:fs').ReadStream> | AnyToNever<ReadableStream<Uint8Array>> | AnyToNever<NodeJS.ReadableStream> | AnyToNever<Response> | AnyToNever<Deno.FsFile>;
22
21
  /**
23
22
  * Describes types that can be used as an input
24
23
  * to any methods that send media (like {@link TelegramClient.sendPhoto})
@@ -29,6 +28,8 @@ export type UploadFileLike = URL | Uint8Array | File | Blob | string | ReadStrea
29
28
  * - `ReadStream` (for Node.js/Bun, from the `fs` module)
30
29
  * - `ReadableStream` (from the Web API, base readable stream)
31
30
  * - `Readable` (for Node.js/Bun, base readable stream)
31
+ * - `BunFile` (from `Bun.file()`)
32
+ * - `Deno.FsFile` (from `Deno.open()` in Deno)
32
33
  * - {@link UploadedFile} returned from {@link TelegramClient.uploadFile}
33
34
  * - `tl.TypeInputFile` and `tl.TypeInputMedia` TL objects
34
35
  * - `string` with a path to a local file prepended with `file:` (non-browser only) (e.g. `file:image.jpg`)
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../src/highlevel/types/files/utils.ts"],"names":[],"mappings":"","sourcesContent":["/* eslint-disable no-restricted-imports */\nimport type { ReadStream } from 'node:fs'\n\nimport { tdFileId } from '@mtcute/file-id'\nimport { tl } from '@mtcute/tl'\n\nimport { FileLocation } from './file-location.js'\nimport { UploadedFile } from './uploaded-file.js'\n\n/**\n * Describes types that can be used in {@link TelegramClient.uploadFile}\n * method. Can be one of:\n * - `Uint8Array`/`Buffer`, which will be interpreted as raw file contents\n * - `File`, `Blob` (from the Web API)\n * - `string`, which will be interpreted as file path (**non-browser only!**)\n * - `URL` (from the Web API, will be `fetch()`-ed; `file://` URLs are not available in browsers)\n * - `ReadStream` (for Node.js/Bun, from the `fs` module)\n * - `BunFile` (from `Bun.file()`)\n * - `ReadableStream` (Web API readable stream)\n * - `Readable` (Node.js/Bun readable stream)\n * - `Response` (from `window.fetch`)\n */\nexport type UploadFileLike =\n | URL\n | Uint8Array\n | File\n | Blob\n | string\n | ReadStream\n | ReadableStream<Uint8Array>\n | NodeJS.ReadableStream\n | Response\n\n/**\n * Describes types that can be used as an input\n * to any methods that send media (like {@link TelegramClient.sendPhoto})\n *\n * Can be one of:\n * - `Buffer`, which will be interpreted as raw file contents\n * - `File` (from the Web API)\n * - `ReadStream` (for Node.js/Bun, from the `fs` module)\n * - `ReadableStream` (from the Web API, base readable stream)\n * - `Readable` (for Node.js/Bun, base readable stream)\n * - {@link UploadedFile} returned from {@link TelegramClient.uploadFile}\n * - `tl.TypeInputFile` and `tl.TypeInputMedia` TL objects\n * - `string` with a path to a local file prepended with `file:` (non-browser only) (e.g. `file:image.jpg`)\n * - `string` with a URL to remote files (e.g. `https://example.com/image.jpg`)\n * - `string` with TDLib and Bot API compatible File ID.\n * - `URL` (from the Web API, will be `fetch()`-ed if needed; `file://` URLs are not available in browsers)\n * - `td.RawFullRemoteFileLocation` (parsed File ID)\n */\nexport type InputFileLike =\n | UploadFileLike\n | UploadedFile\n | tl.TypeInputFile\n | tl.TypeInputMedia\n | tdFileId.RawFullRemoteFileLocation\n\n/**\n * File location which should be downloaded.\n * You can also provide TDLib and Bot API compatible File ID\n */\nexport type FileDownloadLocation = tl.TypeInputFileLocation | tl.TypeInputWebFileLocation | FileLocation | string\n\nexport interface FileDownloadParameters {\n /**\n * Total file size, if known.\n * Used to determine upload part size.\n * In some cases can be inferred from `file` automatically.\n */\n fileSize?: number\n\n /**\n * Download part size (in KB).\n * By default, automatically selected depending on the file size\n * (or 64, if not provided). Must not be bigger than 512,\n * must not be a fraction, and must be divisible by 4.\n */\n partSize?: number\n\n /**\n * DC id from which the file will be downloaded.\n *\n * If provided DC is not the one storing the file,\n * redirection will be handled automatically.\n */\n dcId?: number\n\n /**\n * Offset in bytes. Must be divisible by 4096 (4 KB).\n */\n offset?: number\n\n /**\n * Number of bytes to be downloaded.\n * By default, downloads the entire file\n */\n limit?: number\n\n /**\n * Function that will be called after some part has been downloaded.\n *\n * @param uploaded Number of bytes already downloaded\n * @param total Total file size (`Infinity` if not available)\n */\n progressCallback?: (downloaded: number, total: number) => void\n\n /**\n * Abort signal that can be used to cancel the download.\n */\n abortSignal?: AbortSignal\n}\n"]}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../src/highlevel/types/files/utils.ts"],"names":[],"mappings":"","sourcesContent":["import { tdFileId } from '@mtcute/file-id'\nimport { tl } from '@mtcute/tl'\n\nimport { AnyToNever } from '../../../types/utils.js'\nimport { FileLocation } from './file-location.js'\nimport { UploadedFile } from './uploaded-file.js'\n\n/**\n * Describes types that can be used in {@link TelegramClient.uploadFile}\n * method. Can be one of:\n * - `Uint8Array`/`Buffer`, which will be interpreted as raw file contents\n * - `File`, `Blob` (from the Web API)\n * - `string`, which will be interpreted as file path (**non-browser only!**)\n * - `URL` (from the Web API, will be `fetch()`-ed; `file://` URLs are not available in browsers)\n * - `ReadStream` (for Node.js/Bun, from the `node:fs` module)\n * - `BunFile` (from `Bun.file()`)\n * - `Deno.FsFile` (from `Deno.open()` in Deno)\n * - `ReadableStream` (Web API readable stream)\n * - `Readable` (Node.js/Bun readable stream)\n * - `Response` (from `window.fetch`)\n */\nexport type UploadFileLike =\n | URL\n | Uint8Array\n | File\n | Blob\n | string\n | AnyToNever<import('node:fs').ReadStream>\n | AnyToNever<ReadableStream<Uint8Array>>\n | AnyToNever<NodeJS.ReadableStream>\n | AnyToNever<Response>\n | AnyToNever<Deno.FsFile>\n\n// AnyToNever in the above type ensures we don't make the entire type `any`\n// if some of the types are not available in the current environment\n\n/**\n * Describes types that can be used as an input\n * to any methods that send media (like {@link TelegramClient.sendPhoto})\n *\n * Can be one of:\n * - `Buffer`, which will be interpreted as raw file contents\n * - `File` (from the Web API)\n * - `ReadStream` (for Node.js/Bun, from the `fs` module)\n * - `ReadableStream` (from the Web API, base readable stream)\n * - `Readable` (for Node.js/Bun, base readable stream)\n * - `BunFile` (from `Bun.file()`)\n * - `Deno.FsFile` (from `Deno.open()` in Deno)\n * - {@link UploadedFile} returned from {@link TelegramClient.uploadFile}\n * - `tl.TypeInputFile` and `tl.TypeInputMedia` TL objects\n * - `string` with a path to a local file prepended with `file:` (non-browser only) (e.g. `file:image.jpg`)\n * - `string` with a URL to remote files (e.g. `https://example.com/image.jpg`)\n * - `string` with TDLib and Bot API compatible File ID.\n * - `URL` (from the Web API, will be `fetch()`-ed if needed; `file://` URLs are not available in browsers)\n * - `td.RawFullRemoteFileLocation` (parsed File ID)\n */\nexport type InputFileLike =\n | UploadFileLike\n | UploadedFile\n | tl.TypeInputFile\n | tl.TypeInputMedia\n | tdFileId.RawFullRemoteFileLocation\n\n/**\n * File location which should be downloaded.\n * You can also provide TDLib and Bot API compatible File ID\n */\nexport type FileDownloadLocation = tl.TypeInputFileLocation | tl.TypeInputWebFileLocation | FileLocation | string\n\nexport interface FileDownloadParameters {\n /**\n * Total file size, if known.\n * Used to determine upload part size.\n * In some cases can be inferred from `file` automatically.\n */\n fileSize?: number\n\n /**\n * Download part size (in KB).\n * By default, automatically selected depending on the file size\n * (or 64, if not provided). Must not be bigger than 512,\n * must not be a fraction, and must be divisible by 4.\n */\n partSize?: number\n\n /**\n * DC id from which the file will be downloaded.\n *\n * If provided DC is not the one storing the file,\n * redirection will be handled automatically.\n */\n dcId?: number\n\n /**\n * Offset in bytes. Must be divisible by 4096 (4 KB).\n */\n offset?: number\n\n /**\n * Number of bytes to be downloaded.\n * By default, downloads the entire file\n */\n limit?: number\n\n /**\n * Function that will be called after some part has been downloaded.\n *\n * @param uploaded Number of bytes already downloaded\n * @param total Total file size (`Infinity` if not available)\n */\n progressCallback?: (downloaded: number, total: number) => void\n\n /**\n * Abort signal that can be used to cancel the download.\n */\n abortSignal?: AbortSignal\n}\n"]}
@@ -1,6 +1,11 @@
1
+ import { tl } from '@mtcute/tl';
1
2
  import { Audio } from './audio.js';
2
3
  import { Document } from './document.js';
3
4
  import { Sticker } from './sticker.js';
4
5
  import { Video } from './video.js';
5
6
  import { Voice } from './voice.js';
6
7
  export type ParsedDocument = Sticker | Voice | Audio | Video | Document;
8
+ /** @internal */
9
+ export declare function parseSticker(doc: tl.RawDocument): Sticker | undefined;
10
+ /** @internal */
11
+ export declare function parseDocument(doc: tl.RawDocument, media?: tl.RawMessageMediaDocument): ParsedDocument;
@@ -4,12 +4,18 @@ import { Sticker } from './sticker.js';
4
4
  import { Video } from './video.js';
5
5
  import { Voice } from './voice.js';
6
6
  /** @internal */
7
- export function parseDocument(doc, media) {
7
+ export function parseSticker(doc) {
8
8
  const stickerAttr = doc.attributes.find((a) => a._ === 'documentAttributeSticker' || a._ === 'documentAttributeCustomEmoji');
9
9
  if (stickerAttr) {
10
10
  const sz = doc.attributes.find((it) => it._ === 'documentAttributeImageSize' || it._ === 'documentAttributeVideo');
11
11
  return new Sticker(doc, stickerAttr, sz);
12
12
  }
13
+ }
14
+ /** @internal */
15
+ export function parseDocument(doc, media) {
16
+ const sticker = parseSticker(doc);
17
+ if (sticker)
18
+ return sticker;
13
19
  for (const attr of doc.attributes) {
14
20
  switch (attr._) {
15
21
  case 'documentAttributeAudio':
@@ -1 +1 @@
1
- {"version":3,"file":"document-utils.js","sourceRoot":"","sources":["../../../../../src/highlevel/types/media/document-utils.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAIlC,gBAAgB;AAChB,MAAM,UAAU,aAAa,CAAC,GAAmB,EAAE,KAAkC;IACjF,MAAM,WAAW,GAAG,GAAG,CAAC,UAAU,CAAC,IAAI,CACnC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,0BAA0B,IAAI,CAAC,CAAC,CAAC,KAAK,8BAA8B,CACtF,CAAA;IAED,IAAI,WAAW,EAAE,CAAC;QACd,MAAM,EAAE,GAAG,GAAG,CAAC,UAAU,CAAC,IAAI,CAC1B,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,4BAA4B,IAAI,EAAE,CAAC,CAAC,KAAK,wBAAwB,CACjB,CAAA;QAErE,OAAO,IAAI,OAAO,CAAC,GAAG,EAAE,WAAkF,EAAE,EAAE,CAAC,CAAA;IACnH,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;QAChC,QAAQ,IAAI,CAAC,CAAC,EAAE,CAAC;YACb,KAAK,wBAAwB;gBACzB,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;oBACb,OAAO,IAAI,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;gBAC/B,CAAC;gBAED,OAAO,IAAI,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;YAE/B,KAAK,wBAAwB;gBACzB,OAAO,IAAI,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,CAAA;YAEtC,KAAK,4BAA4B;gBAC7B,aAAa;gBACb,IAAI,GAAG,CAAC,QAAQ,KAAK,WAAW,EAAE,CAAC;oBAC/B,OAAO,IAAI,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,CAAA;gBACtC,CAAC;QACT,CAAC;IACL,CAAC;IAED,OAAO,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAA;AAC5B,CAAC","sourcesContent":["import { tl } from '@mtcute/tl'\n\nimport { Audio } from './audio.js'\nimport { Document } from './document.js'\nimport { Sticker } from './sticker.js'\nimport { Video } from './video.js'\nimport { Voice } from './voice.js'\n\nexport type ParsedDocument = Sticker | Voice | Audio | Video | Document\n\n/** @internal */\nexport function parseDocument(doc: tl.RawDocument, media?: tl.RawMessageMediaDocument): ParsedDocument {\n const stickerAttr = doc.attributes.find(\n (a) => a._ === 'documentAttributeSticker' || a._ === 'documentAttributeCustomEmoji',\n )\n\n if (stickerAttr) {\n const sz = doc.attributes.find(\n (it) => it._ === 'documentAttributeImageSize' || it._ === 'documentAttributeVideo',\n )! as tl.RawDocumentAttributeImageSize | tl.RawDocumentAttributeVideo\n\n return new Sticker(doc, stickerAttr as tl.RawDocumentAttributeSticker | tl.RawDocumentAttributeCustomEmoji, sz)\n }\n\n for (const attr of doc.attributes) {\n switch (attr._) {\n case 'documentAttributeAudio':\n if (attr.voice) {\n return new Voice(doc, attr)\n }\n\n return new Audio(doc, attr)\n\n case 'documentAttributeVideo':\n return new Video(doc, attr, media)\n\n case 'documentAttributeImageSize':\n // legacy gif\n if (doc.mimeType === 'image/gif') {\n return new Video(doc, attr, media)\n }\n }\n }\n\n return new Document(doc)\n}\n"]}
1
+ {"version":3,"file":"document-utils.js","sourceRoot":"","sources":["../../../../../src/highlevel/types/media/document-utils.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAIlC,gBAAgB;AAChB,MAAM,UAAU,YAAY,CAAC,GAAmB;IAC5C,MAAM,WAAW,GAAG,GAAG,CAAC,UAAU,CAAC,IAAI,CACnC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,0BAA0B,IAAI,CAAC,CAAC,CAAC,KAAK,8BAA8B,CACtF,CAAA;IAED,IAAI,WAAW,EAAE,CAAC;QACd,MAAM,EAAE,GAAG,GAAG,CAAC,UAAU,CAAC,IAAI,CAC1B,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,4BAA4B,IAAI,EAAE,CAAC,CAAC,KAAK,wBAAwB,CACjB,CAAA;QAErE,OAAO,IAAI,OAAO,CAAC,GAAG,EAAE,WAAkF,EAAE,EAAE,CAAC,CAAA;IACnH,CAAC;AACL,CAAC;AAED,gBAAgB;AAChB,MAAM,UAAU,aAAa,CAAC,GAAmB,EAAE,KAAkC;IACjF,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,CAAA;IACjC,IAAI,OAAO;QAAE,OAAO,OAAO,CAAA;IAE3B,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;QAChC,QAAQ,IAAI,CAAC,CAAC,EAAE,CAAC;YACb,KAAK,wBAAwB;gBACzB,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;oBACb,OAAO,IAAI,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;gBAC/B,CAAC;gBAED,OAAO,IAAI,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;YAE/B,KAAK,wBAAwB;gBACzB,OAAO,IAAI,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,CAAA;YAEtC,KAAK,4BAA4B;gBAC7B,aAAa;gBACb,IAAI,GAAG,CAAC,QAAQ,KAAK,WAAW,EAAE,CAAC;oBAC/B,OAAO,IAAI,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,CAAA;gBACtC,CAAC;QACT,CAAC;IACL,CAAC;IAED,OAAO,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAA;AAC5B,CAAC","sourcesContent":["import { tl } from '@mtcute/tl'\n\nimport { Audio } from './audio.js'\nimport { Document } from './document.js'\nimport { Sticker } from './sticker.js'\nimport { Video } from './video.js'\nimport { Voice } from './voice.js'\n\nexport type ParsedDocument = Sticker | Voice | Audio | Video | Document\n\n/** @internal */\nexport function parseSticker(doc: tl.RawDocument) {\n const stickerAttr = doc.attributes.find(\n (a) => a._ === 'documentAttributeSticker' || a._ === 'documentAttributeCustomEmoji',\n )\n\n if (stickerAttr) {\n const sz = doc.attributes.find(\n (it) => it._ === 'documentAttributeImageSize' || it._ === 'documentAttributeVideo',\n )! as tl.RawDocumentAttributeImageSize | tl.RawDocumentAttributeVideo\n\n return new Sticker(doc, stickerAttr as tl.RawDocumentAttributeSticker | tl.RawDocumentAttributeCustomEmoji, sz)\n }\n}\n\n/** @internal */\nexport function parseDocument(doc: tl.RawDocument, media?: tl.RawMessageMediaDocument): ParsedDocument {\n const sticker = parseSticker(doc)\n if (sticker) return sticker\n\n for (const attr of doc.attributes) {\n switch (attr._) {\n case 'documentAttributeAudio':\n if (attr.voice) {\n return new Voice(doc, attr)\n }\n\n return new Audio(doc, attr)\n\n case 'documentAttributeVideo':\n return new Video(doc, attr, media)\n\n case 'documentAttributeImageSize':\n // legacy gif\n if (doc.mimeType === 'image/gif') {\n return new Video(doc, attr, media)\n }\n }\n }\n\n return new Document(doc)\n}\n"]}
@@ -392,7 +392,7 @@ export interface InputMediaPoll extends CaptionMixin {
392
392
  /**
393
393
  * Question of the poll (1-255 chars for users, 1-300 chars for bots)
394
394
  */
395
- question: string;
395
+ question: InputText;
396
396
  /**
397
397
  * Answers of the poll.
398
398
  *
@@ -402,7 +402,7 @@ export interface InputMediaPoll extends CaptionMixin {
402
402
  * objects, with a single=byte incrementing
403
403
  * `option` value.
404
404
  */
405
- answers: (string | tl.TypePollAnswer)[];
405
+ answers: (InputText | tl.TypePollAnswer)[];
406
406
  /**
407
407
  * Whether this is poll is closed
408
408
  * (i.e. nobody can vote anymore)
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../../src/highlevel/types/media/input-media/types.ts"],"names":[],"mappings":"","sourcesContent":["import { tl } from '@mtcute/tl'\n\nimport { MaybeArray } from '../../../../types/utils.js'\nimport { InputText } from '../../../types/misc/entities.js'\nimport { InputFileLike } from '../../files/index.js'\nimport { InputPeerLike } from '../../peers/index.js'\nimport { VenueSource } from '../venue.js'\n\nexport interface CaptionMixin {\n /**\n * Caption of the media\n */\n caption?: InputText\n}\n\nexport interface FileMixin {\n /**\n * File to be sent\n */\n file: InputFileLike\n\n /**\n * Override file name for the file.\n *\n * Only applicable to newly uploaded files.\n */\n fileName?: string\n\n /**\n * Override MIME type for the file\n *\n * Only applicable to newly uploaded files.\n */\n fileMime?: string\n\n /**\n * Override file size for the file\n *\n * Only applicable to newly uploaded files.\n */\n fileSize?: number\n\n /**\n * TTL for the media in seconds.\n *\n * Only applicable to some media types\n */\n ttlSeconds?: number\n}\n\n/**\n * Automatically detect media type based on file contents.\n *\n * Photo type is only inferred for reused files,\n * newly uploaded photos with `auto` will be\n * uploaded as a document\n */\nexport interface InputMediaAuto extends FileMixin, CaptionMixin {\n type: 'auto'\n}\n\n/**\n * An audio file or voice message to be sent\n */\nexport interface InputMediaAudio extends FileMixin, CaptionMixin {\n type: 'audio'\n\n /**\n * Thumbnail of the audio file album cover.\n *\n * The thumbnail should be in JPEG format and less than 200 KB in size.\n * A thumbnail's width and height should not exceed 320 pixels.\n * Thumbnails can't be reused and can be only uploaded as a new file.\n *\n * Only applicable to newly uploaded files.\n */\n thumb?: InputFileLike\n\n /**\n * Duration of the audio in seconds\n *\n * Only applicable to newly uploaded files.\n */\n duration?: number\n\n /**\n * Performer of the audio\n *\n * Only applicable to newly uploaded files.\n */\n performer?: string\n\n /**\n * Title of the audio\n *\n * Only applicable to newly uploaded files.\n */\n title?: string\n}\n\n/**\n * Voice message to be sent\n */\nexport interface InputMediaVoice extends FileMixin, CaptionMixin {\n type: 'voice'\n\n /**\n * Duration of the voice message in seconds\n *\n * Only applicable to newly uploaded files.\n */\n duration?: number\n\n /**\n * Waveform of the voice message.\n *\n * Represented with integers in range [0, 31],\n * usually has length of 100.\n * Generated by the server if omitted.\n *\n * Only applicable to newly uploaded files.\n */\n waveform?: number[]\n}\n\n/**\n * A generic file to be sent\n */\nexport interface InputMediaDocument extends FileMixin, CaptionMixin {\n type: 'document'\n\n /**\n * Thumbnail of the document.\n *\n * The thumbnail should be in JPEG format and less than 200 KB in size.\n * A thumbnail's width and height should not exceed 320 pixels.\n * Thumbnails can't be reused and can be only uploaded as a new file.\n *\n * Only applicable to newly uploaded files.\n */\n thumb?: InputFileLike\n}\n\n/**\n * A photo to be sent\n */\nexport interface InputMediaPhoto extends FileMixin, CaptionMixin {\n type: 'photo'\n\n /**\n * Whether this photo should be hidden with a spoiler\n */\n spoiler?: boolean\n}\n\n/**\n * A sticker to be sent\n */\nexport interface InputMediaSticker extends FileMixin, CaptionMixin {\n type: 'sticker'\n\n /**\n * Whether this sticker is animated?\n *\n * Note that animated stickers must be in TGS\n * format, which is Lottie JSON compressed using GZip\n *\n * Only applicable to newly uploaded files.\n *\n * @default false\n */\n isAnimated?: boolean\n\n /**\n * An emoji representing this sticker\n *\n * Only applicable to newly uploaded files,\n * for some reason doesn't work with animated stickers.\n */\n alt?: string\n}\n\n/**\n * A video to be sent\n */\nexport interface InputMediaVideo extends FileMixin, CaptionMixin {\n type: 'video'\n\n /**\n * Thumbnail of the video.\n *\n * The thumbnail should be in JPEG format and less than 200 KB in size.\n * A thumbnail's width and height should not exceed 320 pixels.\n * Thumbnails can't be reused and can be only uploaded as a new file.\n *\n * Only applicable to newly uploaded files.\n */\n thumb?: InputFileLike\n\n /**\n * Width of the video in pixels\n *\n * Only applicable to newly uploaded files.\n */\n width?: number\n\n /**\n * Height of the video in pixels\n *\n * Only applicable to newly uploaded files.\n */\n height?: number\n\n /**\n * Duration of the video in seconds\n *\n * Only applicable to newly uploaded files.\n */\n duration?: number\n\n /**\n * Whether the video is suitable for streaming\n *\n * Only applicable to newly uploaded files.\n */\n supportsStreaming?: boolean\n\n /**\n * Whether this video is an animated GIF\n *\n * Only applicable to newly uploaded files.\n */\n isAnimated?: boolean\n\n /**\n * Whether this video is a round message (aka video note)\n *\n * Only applicable to newly uploaded files.\n */\n isRound?: boolean\n\n /**\n * Whether this video should be hidden with a spoiler\n */\n spoiler?: boolean\n}\n\n/**\n * A geolocation to be sent\n */\nexport interface InputMediaGeo extends CaptionMixin {\n type: 'geo'\n\n /**\n * Latitude of the geolocation\n */\n latitude: number\n\n /**\n * Longitude of the geolocation\n */\n longitude: number\n\n /**\n * The estimated horizontal accuracy of the\n * geolocation, in meters (0-1500)\n */\n accuracy?: number\n}\n\n/**\n * A live geolocation to be sent\n */\nexport interface InputMediaGeoLive extends Omit<InputMediaGeo, 'type'> {\n type: 'geo_live'\n\n /**\n * Whether sending of the geolocation has stopped\n */\n stopped?: boolean\n\n /**\n * Direction in which the location moves, in degrees (1-360)\n */\n heading?: number\n\n /**\n * Validity period of the live location\n */\n period?: number\n\n /**\n * Maximum distance to another chat member for proximity\n * alerts, in meters (0-100000)\n */\n proximityNotificationRadius?: number\n}\n\n/**\n * An animated dice with a random value to be sent\n *\n * For convenience, known dice emojis are available\n * as static members of {@link Dice}.\n *\n * Note that dice result value is generated randomly on the server,\n * you can't influence it in any way!\n */\nexport interface InputMediaDice extends CaptionMixin {\n type: 'dice'\n\n /**\n * Emoji representing a dice\n */\n emoji: string\n}\n\n/**\n * A venue to be sent\n */\nexport interface InputMediaVenue extends CaptionMixin {\n type: 'venue'\n\n /**\n * Latitude of the geolocation\n */\n latitude: number\n\n /**\n * Longitude of the geolocation\n */\n longitude: number\n\n /**\n * Venue name\n */\n title: string\n\n /**\n * Venue address\n */\n address: string\n\n /**\n * When available, source from where this venue was acquired\n */\n source?: VenueSource\n}\n\n/**\n * A contact to be sent\n */\nexport interface InputMediaContact extends CaptionMixin {\n type: 'contact'\n\n /**\n * Contact's phone number\n */\n phone: string\n\n /**\n * Contact's first name\n */\n firstName: string\n\n /**\n * Contact's last name\n */\n lastName?: string\n\n /**\n * Additional data about the contact\n * as a vCard (0-2048 bytes)\n */\n vcard?: string\n}\n\n/**\n * A game to be sent\n */\nexport interface InputMediaGame extends CaptionMixin {\n type: 'game'\n\n /**\n * Game's short name, or a TL object with an input game\n */\n game: string | tl.TypeInputGame\n}\n\n/**\n * An invoice to be sent (see https://core.telegram.org/bots/payments)\n */\nexport interface InputMediaInvoice extends CaptionMixin {\n type: 'invoice'\n\n /**\n * Product name (1-32 chars)\n */\n title: string\n\n /**\n * Product description (1-255 chars)\n */\n description: string\n\n /**\n * The invoice itself\n */\n invoice: tl.TypeInvoice\n\n /**\n * Bot-defined invoice payload (1-128 bytes).\n *\n * Will not be displayed to the user and can be used\n * for internal processes\n */\n payload: Uint8Array\n\n /**\n * Payments provider token, obtained from\n * [@BotFather](//t.me/botfather)\n */\n token: string\n\n /**\n * Data about the invoice as a plain JS object, which\n * will be shared with the payment provider. A detailed\n * description of required fields should be provided by\n * the payment provider.\n */\n providerData: unknown\n\n /**\n * Start parameter for the bot\n */\n startParam: string\n\n /**\n * Product photo. Can be a photo of the goods or a marketing image for a service.\n *\n * Can be a URL, or a TL object with input web document\n */\n photo?: string | tl.TypeInputWebDocument\n\n /**\n * Extended media (i.e. media that will be available once the invoice is paid)\n */\n extendedMedia?: InputMediaLike\n}\n\n/**\n * A simple poll to be sent\n *\n * > **Note**: when using user account,\n * > the poll can't be sent to PMs, only to channels/groups,\n * > otherwise there will be `MEDIA_INVALID` error.\n */\nexport interface InputMediaPoll extends CaptionMixin {\n type: 'poll'\n\n /**\n * Question of the poll (1-255 chars for users, 1-300 chars for bots)\n */\n question: string\n\n /**\n * Answers of the poll.\n *\n * You can either provide a string, or a\n * TL object representing an answer.\n * Strings will be transformed to TL\n * objects, with a single=byte incrementing\n * `option` value.\n */\n answers: (string | tl.TypePollAnswer)[]\n\n /**\n * Whether this is poll is closed\n * (i.e. nobody can vote anymore)\n */\n closed?: boolean\n\n /**\n * Whether this is a public poll\n * (i.e. users who have voted are visible to everyone)\n */\n public?: boolean\n\n /**\n * Whether users can select multiple answers\n * as an answer\n */\n multiple?: boolean\n\n /**\n * Amount of time in seconds the poll will be active after creation (5-600).\n *\n * Can't be used together with `closeDate`.\n */\n closePeriod?: number\n\n /**\n * Point in time when the poll will be automatically closed.\n *\n * Must be at least 5 and no more than 600 seconds in the future,\n * can't be used together with `closePeriod`.\n *\n * When `number` is used, UNIX time in ms is expected\n */\n closeDate?: number | Date\n}\n\n/**\n * A quiz to be sent.\n *\n * Quiz is an extended version of a poll, but quizzes have\n * correct answers, and votes can't be retracted from them\n */\nexport interface InputMediaQuiz extends Omit<InputMediaPoll, 'type'> {\n type: 'quiz'\n\n /**\n * Correct answer ID(s) or index(es).\n *\n * > **Note**: even though quizzes can actually\n * > only have exactly one correct answer,\n * > the API itself has the possibility to pass\n * > multiple or zero correct answers,\n * > but that would result in `QUIZ_CORRECT_ANSWERS_TOO_MUCH`\n * > and `QUIZ_CORRECT_ANSWERS_EMPTY` errors respectively.\n * >\n * > But since the API has that option, we also provide it,\n * > maybe to future-proof this :shrug:\n */\n correct: MaybeArray<number | Uint8Array>\n\n /**\n * Explanation of the quiz solution\n */\n solution?: InputText\n}\n\n/**\n * A story to be sent\n */\nexport interface InputMediaStory extends CaptionMixin {\n type: 'story'\n\n /**\n * Owner of the story\n */\n peer: InputPeerLike\n\n /**\n * ID of the story\n */\n id: number\n}\n\n/** A webpage to be sent */\nexport interface InputMediaWebpage extends CaptionMixin {\n type: 'webpage'\n\n /**\n * Whether the link must be present in the message\n * for the preview to appear\n */\n required?: boolean\n\n /**\n * By default, size of the media in the preview\n * is determined based on content type.\n *\n * You can override this behaviour by passing the wanted size here\n */\n size?: 'large' | 'small'\n\n /** Webpage URL */\n url: string\n}\n\n/**\n * Input media that can be sent somewhere.\n *\n * Note that meta-fields (like `duration`) are only\n * applicable if `file` is {@link UploadFileLike},\n * otherwise they are ignored.\n *\n * @link InputMedia\n */\nexport type InputMediaLike =\n | InputMediaAudio\n | InputMediaVoice\n | InputMediaDocument\n | InputMediaPhoto\n | InputMediaVideo\n | InputMediaAuto\n | InputMediaSticker\n | InputMediaVenue\n | InputMediaGeo\n | InputMediaGeoLive\n | InputMediaDice\n | InputMediaContact\n | InputMediaGame\n | InputMediaInvoice\n | InputMediaPoll\n | InputMediaQuiz\n | InputMediaStory\n | InputMediaWebpage\n | tl.TypeInputMedia\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../../src/highlevel/types/media/input-media/types.ts"],"names":[],"mappings":"","sourcesContent":["import { tl } from '@mtcute/tl'\n\nimport { MaybeArray } from '../../../../types/utils.js'\nimport { InputText } from '../../../types/misc/entities.js'\nimport { InputFileLike } from '../../files/index.js'\nimport { InputPeerLike } from '../../peers/index.js'\nimport { VenueSource } from '../venue.js'\n\nexport interface CaptionMixin {\n /**\n * Caption of the media\n */\n caption?: InputText\n}\n\nexport interface FileMixin {\n /**\n * File to be sent\n */\n file: InputFileLike\n\n /**\n * Override file name for the file.\n *\n * Only applicable to newly uploaded files.\n */\n fileName?: string\n\n /**\n * Override MIME type for the file\n *\n * Only applicable to newly uploaded files.\n */\n fileMime?: string\n\n /**\n * Override file size for the file\n *\n * Only applicable to newly uploaded files.\n */\n fileSize?: number\n\n /**\n * TTL for the media in seconds.\n *\n * Only applicable to some media types\n */\n ttlSeconds?: number\n}\n\n/**\n * Automatically detect media type based on file contents.\n *\n * Photo type is only inferred for reused files,\n * newly uploaded photos with `auto` will be\n * uploaded as a document\n */\nexport interface InputMediaAuto extends FileMixin, CaptionMixin {\n type: 'auto'\n}\n\n/**\n * An audio file or voice message to be sent\n */\nexport interface InputMediaAudio extends FileMixin, CaptionMixin {\n type: 'audio'\n\n /**\n * Thumbnail of the audio file album cover.\n *\n * The thumbnail should be in JPEG format and less than 200 KB in size.\n * A thumbnail's width and height should not exceed 320 pixels.\n * Thumbnails can't be reused and can be only uploaded as a new file.\n *\n * Only applicable to newly uploaded files.\n */\n thumb?: InputFileLike\n\n /**\n * Duration of the audio in seconds\n *\n * Only applicable to newly uploaded files.\n */\n duration?: number\n\n /**\n * Performer of the audio\n *\n * Only applicable to newly uploaded files.\n */\n performer?: string\n\n /**\n * Title of the audio\n *\n * Only applicable to newly uploaded files.\n */\n title?: string\n}\n\n/**\n * Voice message to be sent\n */\nexport interface InputMediaVoice extends FileMixin, CaptionMixin {\n type: 'voice'\n\n /**\n * Duration of the voice message in seconds\n *\n * Only applicable to newly uploaded files.\n */\n duration?: number\n\n /**\n * Waveform of the voice message.\n *\n * Represented with integers in range [0, 31],\n * usually has length of 100.\n * Generated by the server if omitted.\n *\n * Only applicable to newly uploaded files.\n */\n waveform?: number[]\n}\n\n/**\n * A generic file to be sent\n */\nexport interface InputMediaDocument extends FileMixin, CaptionMixin {\n type: 'document'\n\n /**\n * Thumbnail of the document.\n *\n * The thumbnail should be in JPEG format and less than 200 KB in size.\n * A thumbnail's width and height should not exceed 320 pixels.\n * Thumbnails can't be reused and can be only uploaded as a new file.\n *\n * Only applicable to newly uploaded files.\n */\n thumb?: InputFileLike\n}\n\n/**\n * A photo to be sent\n */\nexport interface InputMediaPhoto extends FileMixin, CaptionMixin {\n type: 'photo'\n\n /**\n * Whether this photo should be hidden with a spoiler\n */\n spoiler?: boolean\n}\n\n/**\n * A sticker to be sent\n */\nexport interface InputMediaSticker extends FileMixin, CaptionMixin {\n type: 'sticker'\n\n /**\n * Whether this sticker is animated?\n *\n * Note that animated stickers must be in TGS\n * format, which is Lottie JSON compressed using GZip\n *\n * Only applicable to newly uploaded files.\n *\n * @default false\n */\n isAnimated?: boolean\n\n /**\n * An emoji representing this sticker\n *\n * Only applicable to newly uploaded files,\n * for some reason doesn't work with animated stickers.\n */\n alt?: string\n}\n\n/**\n * A video to be sent\n */\nexport interface InputMediaVideo extends FileMixin, CaptionMixin {\n type: 'video'\n\n /**\n * Thumbnail of the video.\n *\n * The thumbnail should be in JPEG format and less than 200 KB in size.\n * A thumbnail's width and height should not exceed 320 pixels.\n * Thumbnails can't be reused and can be only uploaded as a new file.\n *\n * Only applicable to newly uploaded files.\n */\n thumb?: InputFileLike\n\n /**\n * Width of the video in pixels\n *\n * Only applicable to newly uploaded files.\n */\n width?: number\n\n /**\n * Height of the video in pixels\n *\n * Only applicable to newly uploaded files.\n */\n height?: number\n\n /**\n * Duration of the video in seconds\n *\n * Only applicable to newly uploaded files.\n */\n duration?: number\n\n /**\n * Whether the video is suitable for streaming\n *\n * Only applicable to newly uploaded files.\n */\n supportsStreaming?: boolean\n\n /**\n * Whether this video is an animated GIF\n *\n * Only applicable to newly uploaded files.\n */\n isAnimated?: boolean\n\n /**\n * Whether this video is a round message (aka video note)\n *\n * Only applicable to newly uploaded files.\n */\n isRound?: boolean\n\n /**\n * Whether this video should be hidden with a spoiler\n */\n spoiler?: boolean\n}\n\n/**\n * A geolocation to be sent\n */\nexport interface InputMediaGeo extends CaptionMixin {\n type: 'geo'\n\n /**\n * Latitude of the geolocation\n */\n latitude: number\n\n /**\n * Longitude of the geolocation\n */\n longitude: number\n\n /**\n * The estimated horizontal accuracy of the\n * geolocation, in meters (0-1500)\n */\n accuracy?: number\n}\n\n/**\n * A live geolocation to be sent\n */\nexport interface InputMediaGeoLive extends Omit<InputMediaGeo, 'type'> {\n type: 'geo_live'\n\n /**\n * Whether sending of the geolocation has stopped\n */\n stopped?: boolean\n\n /**\n * Direction in which the location moves, in degrees (1-360)\n */\n heading?: number\n\n /**\n * Validity period of the live location\n */\n period?: number\n\n /**\n * Maximum distance to another chat member for proximity\n * alerts, in meters (0-100000)\n */\n proximityNotificationRadius?: number\n}\n\n/**\n * An animated dice with a random value to be sent\n *\n * For convenience, known dice emojis are available\n * as static members of {@link Dice}.\n *\n * Note that dice result value is generated randomly on the server,\n * you can't influence it in any way!\n */\nexport interface InputMediaDice extends CaptionMixin {\n type: 'dice'\n\n /**\n * Emoji representing a dice\n */\n emoji: string\n}\n\n/**\n * A venue to be sent\n */\nexport interface InputMediaVenue extends CaptionMixin {\n type: 'venue'\n\n /**\n * Latitude of the geolocation\n */\n latitude: number\n\n /**\n * Longitude of the geolocation\n */\n longitude: number\n\n /**\n * Venue name\n */\n title: string\n\n /**\n * Venue address\n */\n address: string\n\n /**\n * When available, source from where this venue was acquired\n */\n source?: VenueSource\n}\n\n/**\n * A contact to be sent\n */\nexport interface InputMediaContact extends CaptionMixin {\n type: 'contact'\n\n /**\n * Contact's phone number\n */\n phone: string\n\n /**\n * Contact's first name\n */\n firstName: string\n\n /**\n * Contact's last name\n */\n lastName?: string\n\n /**\n * Additional data about the contact\n * as a vCard (0-2048 bytes)\n */\n vcard?: string\n}\n\n/**\n * A game to be sent\n */\nexport interface InputMediaGame extends CaptionMixin {\n type: 'game'\n\n /**\n * Game's short name, or a TL object with an input game\n */\n game: string | tl.TypeInputGame\n}\n\n/**\n * An invoice to be sent (see https://core.telegram.org/bots/payments)\n */\nexport interface InputMediaInvoice extends CaptionMixin {\n type: 'invoice'\n\n /**\n * Product name (1-32 chars)\n */\n title: string\n\n /**\n * Product description (1-255 chars)\n */\n description: string\n\n /**\n * The invoice itself\n */\n invoice: tl.TypeInvoice\n\n /**\n * Bot-defined invoice payload (1-128 bytes).\n *\n * Will not be displayed to the user and can be used\n * for internal processes\n */\n payload: Uint8Array\n\n /**\n * Payments provider token, obtained from\n * [@BotFather](//t.me/botfather)\n */\n token: string\n\n /**\n * Data about the invoice as a plain JS object, which\n * will be shared with the payment provider. A detailed\n * description of required fields should be provided by\n * the payment provider.\n */\n providerData: unknown\n\n /**\n * Start parameter for the bot\n */\n startParam: string\n\n /**\n * Product photo. Can be a photo of the goods or a marketing image for a service.\n *\n * Can be a URL, or a TL object with input web document\n */\n photo?: string | tl.TypeInputWebDocument\n\n /**\n * Extended media (i.e. media that will be available once the invoice is paid)\n */\n extendedMedia?: InputMediaLike\n}\n\n/**\n * A simple poll to be sent\n *\n * > **Note**: when using user account,\n * > the poll can't be sent to PMs, only to channels/groups,\n * > otherwise there will be `MEDIA_INVALID` error.\n */\nexport interface InputMediaPoll extends CaptionMixin {\n type: 'poll'\n\n /**\n * Question of the poll (1-255 chars for users, 1-300 chars for bots)\n */\n question: InputText\n\n /**\n * Answers of the poll.\n *\n * You can either provide a string, or a\n * TL object representing an answer.\n * Strings will be transformed to TL\n * objects, with a single=byte incrementing\n * `option` value.\n */\n answers: (InputText | tl.TypePollAnswer)[]\n\n /**\n * Whether this is poll is closed\n * (i.e. nobody can vote anymore)\n */\n closed?: boolean\n\n /**\n * Whether this is a public poll\n * (i.e. users who have voted are visible to everyone)\n */\n public?: boolean\n\n /**\n * Whether users can select multiple answers\n * as an answer\n */\n multiple?: boolean\n\n /**\n * Amount of time in seconds the poll will be active after creation (5-600).\n *\n * Can't be used together with `closeDate`.\n */\n closePeriod?: number\n\n /**\n * Point in time when the poll will be automatically closed.\n *\n * Must be at least 5 and no more than 600 seconds in the future,\n * can't be used together with `closePeriod`.\n *\n * When `number` is used, UNIX time in ms is expected\n */\n closeDate?: number | Date\n}\n\n/**\n * A quiz to be sent.\n *\n * Quiz is an extended version of a poll, but quizzes have\n * correct answers, and votes can't be retracted from them\n */\nexport interface InputMediaQuiz extends Omit<InputMediaPoll, 'type'> {\n type: 'quiz'\n\n /**\n * Correct answer ID(s) or index(es).\n *\n * > **Note**: even though quizzes can actually\n * > only have exactly one correct answer,\n * > the API itself has the possibility to pass\n * > multiple or zero correct answers,\n * > but that would result in `QUIZ_CORRECT_ANSWERS_TOO_MUCH`\n * > and `QUIZ_CORRECT_ANSWERS_EMPTY` errors respectively.\n * >\n * > But since the API has that option, we also provide it,\n * > maybe to future-proof this :shrug:\n */\n correct: MaybeArray<number | Uint8Array>\n\n /**\n * Explanation of the quiz solution\n */\n solution?: InputText\n}\n\n/**\n * A story to be sent\n */\nexport interface InputMediaStory extends CaptionMixin {\n type: 'story'\n\n /**\n * Owner of the story\n */\n peer: InputPeerLike\n\n /**\n * ID of the story\n */\n id: number\n}\n\n/** A webpage to be sent */\nexport interface InputMediaWebpage extends CaptionMixin {\n type: 'webpage'\n\n /**\n * Whether the link must be present in the message\n * for the preview to appear\n */\n required?: boolean\n\n /**\n * By default, size of the media in the preview\n * is determined based on content type.\n *\n * You can override this behaviour by passing the wanted size here\n */\n size?: 'large' | 'small'\n\n /** Webpage URL */\n url: string\n}\n\n/**\n * Input media that can be sent somewhere.\n *\n * Note that meta-fields (like `duration`) are only\n * applicable if `file` is {@link UploadFileLike},\n * otherwise they are ignored.\n *\n * @link InputMedia\n */\nexport type InputMediaLike =\n | InputMediaAudio\n | InputMediaVoice\n | InputMediaDocument\n | InputMediaPhoto\n | InputMediaVideo\n | InputMediaAuto\n | InputMediaSticker\n | InputMediaVenue\n | InputMediaGeo\n | InputMediaGeoLive\n | InputMediaDice\n | InputMediaContact\n | InputMediaGame\n | InputMediaInvoice\n | InputMediaPoll\n | InputMediaQuiz\n | InputMediaStory\n | InputMediaWebpage\n | tl.TypeInputMedia\n"]}
@@ -1,34 +1,41 @@
1
1
  import { tl } from '@mtcute/tl';
2
2
  import { MessageEntity } from '../messages/message-entity.js';
3
3
  import { PeersIndex } from '../peers/peers-index.js';
4
- export interface PollAnswer {
4
+ export declare class PollAnswer {
5
+ readonly raw: tl.TypePollAnswer;
6
+ readonly result?: tl.RawPollAnswerVoters | undefined;
7
+ constructor(raw: tl.TypePollAnswer, result?: tl.RawPollAnswerVoters | undefined);
5
8
  /**
6
9
  * Answer text
7
10
  */
8
- text: string;
11
+ get text(): string;
12
+ /**
13
+ * Format entities for {@link text}, currently may only contain custom emojis
14
+ */
15
+ get textEntities(): ReadonlyArray<MessageEntity>;
9
16
  /**
10
17
  * Answer data, to be passed to
11
18
  * {@link TelegramClient.sendVote}
12
19
  */
13
- data: Uint8Array;
20
+ get data(): Uint8Array;
14
21
  /**
15
22
  * Number of people who has chosen this result.
16
23
  * If not available (i.e. not voted yet)
17
24
  *
18
25
  * @default `0`
19
26
  */
20
- voters: number;
27
+ get voters(): number;
21
28
  /**
22
29
  * Whether this answer was chosen by the current user
23
30
  */
24
- chosen: boolean;
31
+ get chosen(): boolean;
25
32
  /**
26
33
  * Whether this answer is correct (for quizzes).
27
34
  * Not available before choosing an answer
28
35
  *
29
36
  * @default `false`
30
37
  */
31
- correct: boolean;
38
+ get correct(): boolean;
32
39
  }
33
40
  export declare class Poll {
34
41
  readonly raw: tl.TypePoll;
@@ -44,6 +51,10 @@ export declare class Poll {
44
51
  * Poll question
45
52
  */
46
53
  get question(): string;
54
+ /**
55
+ * Format entities for {@link question} (currently may only contain custom emojis)
56
+ */
57
+ get questionEntities(): ReadonlyArray<MessageEntity>;
47
58
  /**
48
59
  * List of answers in this poll
49
60
  */
@@ -2,6 +2,59 @@ import Long from 'long';
2
2
  import { makeInspectable } from '../../utils/index.js';
3
3
  import { memoizeGetters } from '../../utils/memoize.js';
4
4
  import { MessageEntity } from '../messages/message-entity.js';
5
+ class PollAnswer {
6
+ raw;
7
+ result;
8
+ constructor(raw, result) {
9
+ this.raw = raw;
10
+ this.result = result;
11
+ }
12
+ /**
13
+ * Answer text
14
+ */
15
+ get text() {
16
+ return this.raw.text.text;
17
+ }
18
+ /**
19
+ * Format entities for {@link text}, currently may only contain custom emojis
20
+ */
21
+ get textEntities() {
22
+ return this.raw.text.entities.map((ent) => new MessageEntity(ent, this.raw.text.text));
23
+ }
24
+ /**
25
+ * Answer data, to be passed to
26
+ * {@link TelegramClient.sendVote}
27
+ */
28
+ get data() {
29
+ return this.raw.option;
30
+ }
31
+ /**
32
+ * Number of people who has chosen this result.
33
+ * If not available (i.e. not voted yet)
34
+ *
35
+ * @default `0`
36
+ */
37
+ get voters() {
38
+ return this.result?.voters ?? 0;
39
+ }
40
+ /**
41
+ * Whether this answer was chosen by the current user
42
+ */
43
+ get chosen() {
44
+ return Boolean(this.result?.chosen);
45
+ }
46
+ /**
47
+ * Whether this answer is correct (for quizzes).
48
+ * Not available before choosing an answer
49
+ *
50
+ * @default `false`
51
+ */
52
+ get correct() {
53
+ return Boolean(this.result?.correct);
54
+ }
55
+ }
56
+ const PollAnswer$1 = /*#__PURE__*/memoizeGetters(PollAnswer, ['textEntities']);
57
+ const PollAnswer$2 = /*#__PURE__*/makeInspectable(PollAnswer$1, );
5
58
  class Poll {
6
59
  raw;
7
60
  _peers;
@@ -22,7 +75,13 @@ class Poll {
22
75
  * Poll question
23
76
  */
24
77
  get question() {
25
- return this.raw.question;
78
+ return this.raw.question.text;
79
+ }
80
+ /**
81
+ * Format entities for {@link question} (currently may only contain custom emojis)
82
+ */
83
+ get questionEntities() {
84
+ return this.raw.question.entities.map((ent) => new MessageEntity(ent, this.raw.question.text));
26
85
  }
27
86
  /**
28
87
  * List of answers in this poll
@@ -31,22 +90,9 @@ class Poll {
31
90
  const results = this.results?.results;
32
91
  return this.raw.answers.map((ans, idx) => {
33
92
  if (results) {
34
- const res = results[idx];
35
- return {
36
- text: ans.text,
37
- data: ans.option,
38
- voters: res.voters,
39
- chosen: Boolean(res.chosen),
40
- correct: Boolean(res.correct),
41
- };
93
+ return new PollAnswer(ans, results[idx]);
42
94
  }
43
- return {
44
- text: ans.text,
45
- data: ans.option,
46
- voters: 0,
47
- chosen: false,
48
- correct: false,
49
- };
95
+ return new PollAnswer(ans);
50
96
  });
51
97
  }
52
98
  /**
@@ -135,7 +181,8 @@ class Poll {
135
181
  };
136
182
  }
137
183
  }
138
- const Poll$1 = /*#__PURE__*/memoizeGetters(Poll, ['answers', 'solutionEntities']);
184
+ const Poll$1 = /*#__PURE__*/memoizeGetters(Poll, ['answers', 'solutionEntities', 'questionEntities']);
139
185
  const Poll$2 = /*#__PURE__*/makeInspectable(Poll$1, undefined, ['inputMedia']);
140
186
  //# sourceMappingURL=poll.js.map
187
+ export { PollAnswer$2 as PollAnswer }
141
188
  export { Poll$2 as Poll }
@@ -1 +1 @@
1
- {"version":3,"file":"poll.js","sourceRoot":"","sources":["../../../../../src/highlevel/types/media/poll.ts"],"names":[],"mappings":"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","sourcesContent":["import Long from 'long'\n\nimport { tl } from '@mtcute/tl'\n\nimport { makeInspectable } from '../../utils/index.js'\nimport { memoizeGetters } from '../../utils/memoize.js'\nimport { MessageEntity } from '../messages/message-entity.js'\nimport { PeersIndex } from '../peers/peers-index.js'\n\nexport interface PollAnswer {\n /**\n * Answer text\n */\n text: string\n\n /**\n * Answer data, to be passed to\n * {@link TelegramClient.sendVote}\n */\n data: Uint8Array\n\n /**\n * Number of people who has chosen this result.\n * If not available (i.e. not voted yet)\n *\n * @default `0`\n */\n voters: number\n\n /**\n * Whether this answer was chosen by the current user\n */\n chosen: boolean\n\n /**\n * Whether this answer is correct (for quizzes).\n * Not available before choosing an answer\n *\n * @default `false`\n */\n correct: boolean\n}\n\nexport class Poll {\n readonly type = 'poll' as const\n\n constructor(\n readonly raw: tl.TypePoll,\n readonly _peers: PeersIndex,\n readonly results?: tl.TypePollResults,\n ) {}\n\n /**\n * Unique identifier of the poll\n */\n get id(): tl.Long {\n return this.raw.id\n }\n\n /**\n * Poll question\n */\n get question(): string {\n return this.raw.question\n }\n\n /**\n * List of answers in this poll\n */\n get answers(): ReadonlyArray<PollAnswer> {\n const results = this.results?.results\n\n return this.raw.answers.map((ans, idx) => {\n if (results) {\n const res = results[idx]\n\n return {\n text: ans.text,\n data: ans.option,\n voters: res.voters,\n chosen: Boolean(res.chosen),\n correct: Boolean(res.correct),\n }\n }\n\n return {\n text: ans.text,\n data: ans.option,\n voters: 0,\n chosen: false,\n correct: false,\n }\n })\n }\n\n /**\n * Total number of voters in this poll, if available\n */\n get voters(): number {\n return this.results?.totalVoters ?? 0\n }\n\n /**\n * Whether this poll is closed, i.e. does not\n * accept votes anymore\n */\n get isClosed(): boolean {\n return this.raw.closed!\n }\n\n /**\n * Whether this poll is public, i.e. you\n * list of voters is publicly available\n */\n get isPublic(): boolean {\n return this.raw.publicVoters!\n }\n\n /**\n * Whether this is a quiz\n */\n get isQuiz(): boolean {\n return this.raw.quiz!\n }\n\n /**\n * Whether this poll accepts multiple answers\n */\n get isMultiple(): boolean {\n return this.raw.multipleChoice!\n }\n\n /**\n * Solution for the quiz, only available\n * in case you have already answered\n */\n get solution(): string | null {\n return this.results?.solution ?? null\n }\n\n /**\n * Format entities for {@link solution}, only available\n * in case you have already answered\n */\n get solutionEntities(): ReadonlyArray<MessageEntity> | null {\n if (!this.results) return null\n\n const res: MessageEntity[] = []\n\n if (this.results.solutionEntities?.length) {\n for (const ent of this.results.solutionEntities) {\n res.push(new MessageEntity(ent, this.results.solution))\n }\n }\n\n return res\n }\n\n /**\n * Input media TL object generated from this object,\n * to be used inside {@link InputMediaLike} and\n * {@link TelegramClient.sendMedia}\n *\n * A few notes:\n * - Using this will result in an\n * independent poll, which will not\n * be auto-updated with the current.\n * - If this is a quiz, a normal poll\n * will be returned since the client does not\n * know the correct answer.\n * - This always returns a non-closed poll,\n * even if the current poll was closed\n */\n get inputMedia(): tl.TypeInputMedia {\n return {\n _: 'inputMediaPoll',\n poll: {\n _: 'poll',\n closed: false,\n id: Long.ZERO,\n publicVoters: this.raw.publicVoters,\n multipleChoice: this.raw.multipleChoice,\n question: this.raw.question,\n answers: this.raw.answers,\n closePeriod: this.raw.closePeriod,\n closeDate: this.raw.closeDate,\n },\n }\n }\n}\n\nmemoizeGetters(Poll, ['answers', 'solutionEntities'])\nmakeInspectable(Poll, undefined, ['inputMedia'])\n"]}
1
+ {"version":3,"file":"poll.js","sourceRoot":"","sources":["../../../../../src/highlevel/types/media/poll.ts"],"names":[],"mappings":"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","sourcesContent":["import Long from 'long'\n\nimport { tl } from '@mtcute/tl'\n\nimport { makeInspectable } from '../../utils/index.js'\nimport { memoizeGetters } from '../../utils/memoize.js'\nimport { MessageEntity } from '../messages/message-entity.js'\nimport { PeersIndex } from '../peers/peers-index.js'\n\nexport class PollAnswer {\n constructor(\n readonly raw: tl.TypePollAnswer,\n readonly result?: tl.TypePollAnswerVoters,\n ) {}\n /**\n * Answer text\n */\n get text(): string {\n return this.raw.text.text\n }\n\n /**\n * Format entities for {@link text}, currently may only contain custom emojis\n */\n get textEntities(): ReadonlyArray<MessageEntity> {\n return this.raw.text.entities.map((ent) => new MessageEntity(ent, this.raw.text.text))\n }\n\n /**\n * Answer data, to be passed to\n * {@link TelegramClient.sendVote}\n */\n get data(): Uint8Array {\n return this.raw.option\n }\n\n /**\n * Number of people who has chosen this result.\n * If not available (i.e. not voted yet)\n *\n * @default `0`\n */\n get voters(): number {\n return this.result?.voters ?? 0\n }\n\n /**\n * Whether this answer was chosen by the current user\n */\n get chosen(): boolean {\n return Boolean(this.result?.chosen)\n }\n\n /**\n * Whether this answer is correct (for quizzes).\n * Not available before choosing an answer\n *\n * @default `false`\n */\n get correct(): boolean {\n return Boolean(this.result?.correct)\n }\n}\n\nmemoizeGetters(PollAnswer, ['textEntities'])\nmakeInspectable(PollAnswer)\n\nexport class Poll {\n readonly type = 'poll' as const\n\n constructor(\n readonly raw: tl.TypePoll,\n readonly _peers: PeersIndex,\n readonly results?: tl.TypePollResults,\n ) {}\n\n /**\n * Unique identifier of the poll\n */\n get id(): tl.Long {\n return this.raw.id\n }\n\n /**\n * Poll question\n */\n get question(): string {\n return this.raw.question.text\n }\n\n /**\n * Format entities for {@link question} (currently may only contain custom emojis)\n */\n get questionEntities(): ReadonlyArray<MessageEntity> {\n return this.raw.question.entities.map((ent) => new MessageEntity(ent, this.raw.question.text))\n }\n\n /**\n * List of answers in this poll\n */\n get answers(): ReadonlyArray<PollAnswer> {\n const results = this.results?.results\n\n return this.raw.answers.map((ans, idx) => {\n if (results) {\n return new PollAnswer(ans, results[idx])\n }\n\n return new PollAnswer(ans)\n })\n }\n\n /**\n * Total number of voters in this poll, if available\n */\n get voters(): number {\n return this.results?.totalVoters ?? 0\n }\n\n /**\n * Whether this poll is closed, i.e. does not\n * accept votes anymore\n */\n get isClosed(): boolean {\n return this.raw.closed!\n }\n\n /**\n * Whether this poll is public, i.e. you\n * list of voters is publicly available\n */\n get isPublic(): boolean {\n return this.raw.publicVoters!\n }\n\n /**\n * Whether this is a quiz\n */\n get isQuiz(): boolean {\n return this.raw.quiz!\n }\n\n /**\n * Whether this poll accepts multiple answers\n */\n get isMultiple(): boolean {\n return this.raw.multipleChoice!\n }\n\n /**\n * Solution for the quiz, only available\n * in case you have already answered\n */\n get solution(): string | null {\n return this.results?.solution ?? null\n }\n\n /**\n * Format entities for {@link solution}, only available\n * in case you have already answered\n */\n get solutionEntities(): ReadonlyArray<MessageEntity> | null {\n if (!this.results) return null\n\n const res: MessageEntity[] = []\n\n if (this.results.solutionEntities?.length) {\n for (const ent of this.results.solutionEntities) {\n res.push(new MessageEntity(ent, this.results.solution))\n }\n }\n\n return res\n }\n\n /**\n * Input media TL object generated from this object,\n * to be used inside {@link InputMediaLike} and\n * {@link TelegramClient.sendMedia}\n *\n * A few notes:\n * - Using this will result in an\n * independent poll, which will not\n * be auto-updated with the current.\n * - If this is a quiz, a normal poll\n * will be returned since the client does not\n * know the correct answer.\n * - This always returns a non-closed poll,\n * even if the current poll was closed\n */\n get inputMedia(): tl.TypeInputMedia {\n return {\n _: 'inputMediaPoll',\n poll: {\n _: 'poll',\n closed: false,\n id: Long.ZERO,\n publicVoters: this.raw.publicVoters,\n multipleChoice: this.raw.multipleChoice,\n question: this.raw.question,\n answers: this.raw.answers,\n closePeriod: this.raw.closePeriod,\n closeDate: this.raw.closeDate,\n },\n }\n }\n}\n\nmemoizeGetters(Poll, ['answers', 'solutionEntities', 'questionEntities'])\nmakeInspectable(Poll, undefined, ['inputMedia'])\n"]}
@@ -166,18 +166,7 @@ class Dialog {
166
166
  * Chat that this dialog represents
167
167
  */
168
168
  get chat() {
169
- const peer = this.raw.peer;
170
- let chat;
171
- switch (peer._) {
172
- case 'peerChannel':
173
- case 'peerChat':
174
- chat = this._peers.chat(peer._ === 'peerChannel' ? peer.channelId : peer.chatId);
175
- break;
176
- default:
177
- chat = this._peers.user(peer.userId);
178
- break;
179
- }
180
- return new Chat(chat);
169
+ return Chat._parseFromPeer(this.raw.peer, this._peers);
181
170
  }
182
171
  /**
183
172
  * The latest message sent in this chat
@@ -1 +1 @@
1
- {"version":3,"file":"dialog.js","sourceRoot":"","sources":["../../../../../src/highlevel/types/messages/dialog.ts"],"names":[],"mappings":"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","sourcesContent":["import { tl } from '@mtcute/tl'\n\nimport { getMarkedPeerId } from '../../../utils/peer-utils.js'\nimport { assertTypeIsNot, hasValueAtKey } from '../../../utils/type-assertions.js'\nimport { makeInspectable } from '../../utils/index.js'\nimport { memoizeGetters } from '../../utils/memoize.js'\nimport { MtMessageNotFoundError } from '../errors.js'\nimport { Chat } from '../peers/chat.js'\nimport { PeersIndex } from '../peers/peers-index.js'\nimport { DraftMessage } from './draft-message.js'\nimport { Message } from './message.js'\n\n/**\n * Type used as an input for a folder in client methods\n *\n * You can pass folder object, id or title\n */\nexport type InputDialogFolder = string | number | tl.RawDialogFilter\n\n/**\n * A dialog.\n *\n * Think of it as something that is listed\n * in Telegram's main window.\n */\nexport class Dialog {\n constructor(\n readonly raw: tl.RawDialog,\n readonly _peers: PeersIndex,\n readonly _messages: Map<number, tl.TypeMessage>,\n ) {}\n\n /**\n * Parse a list of dialogs from a TL object\n *\n * @param client Client instance\n * @param dialogs TL object\n * @param limit Maximum number of dialogs to parse\n */\n static parseTlDialogs(dialogs: tl.messages.TypeDialogs | tl.messages.TypePeerDialogs, limit?: number): Dialog[] {\n assertTypeIsNot('parseDialogs', dialogs, 'messages.dialogsNotModified')\n\n const peers = PeersIndex.from(dialogs)\n\n const messages = new Map<number, tl.TypeMessage>()\n dialogs.messages.forEach((msg) => {\n if (!msg.peerId) return\n\n messages.set(getMarkedPeerId(msg.peerId), msg)\n })\n\n const arr = dialogs.dialogs.filter(hasValueAtKey('_', 'dialog')).map((it) => new Dialog(it, peers, messages))\n\n if (limit) {\n return arr.slice(0, limit)\n }\n\n return arr\n }\n\n /**\n * Find pinned dialogs from a list of dialogs\n *\n * @param dialogs Dialogs list\n * @param folder If passed, status of pin will be checked against this folder, and not globally\n */\n static findPinned(dialogs: Dialog[], folder?: tl.RawDialogFilter): Dialog[] {\n if (folder) {\n const index: Record<number, true> = {}\n folder.pinnedPeers.forEach((peer) => {\n index[getMarkedPeerId(peer)] = true\n })\n\n return dialogs.filter((i) => index[i.chat.id])\n }\n\n return dialogs.filter((i) => i.isPinned)\n }\n\n /**\n * Create a filter predicate for the given Folder.\n * Returned predicate can be used in `Array.filter()`\n *\n * @param folder Folder to filter for\n * @param excludePinned Whether to exclude pinned folders\n */\n static filterFolder(folder: tl.TypeDialogFilter, excludePinned = true): (val: Dialog) => boolean {\n if (folder._ === 'dialogFilterDefault') {\n return () => true\n }\n\n const pinned: Record<number, true> = {}\n const include: Record<number, true> = {}\n const exclude: Record<number, true> = {}\n\n // populate indices\n if (excludePinned) {\n folder.pinnedPeers.forEach((peer) => {\n pinned[getMarkedPeerId(peer)] = true\n })\n }\n folder.includePeers.forEach((peer) => {\n include[getMarkedPeerId(peer)] = true\n })\n\n if (folder._ === 'dialogFilterChatlist') {\n return (dialog) => {\n const chatId = dialog.chat.id\n\n if (excludePinned && pinned[chatId]) return false\n\n return include[chatId] || pinned[chatId]\n }\n }\n\n folder.excludePeers.forEach((peer) => {\n exclude[getMarkedPeerId(peer)] = true\n })\n\n return (dialog) => {\n const chat = dialog.chat\n const chatId = dialog.chat.id\n const chatType = dialog.chat.chatType\n\n // manual exclusion/inclusion and pins\n if (include[chatId]) return true\n\n if (exclude[chatId] || (excludePinned && pinned[chatId])) {\n return false\n }\n\n // exclusions based on status\n if (folder.excludeRead && !dialog.isUnread) return false\n if (folder.excludeMuted && dialog.isMuted) return false\n // even though this was handled in getDialogs, this method\n // could be used outside of it, so check again\n if (folder.excludeArchived && dialog.isArchived) return false\n\n // inclusions based on chat type\n if (folder.contacts && chatType === 'private' && chat.isContact) {\n return true\n }\n if (folder.nonContacts && chatType === 'private' && !chat.isContact) {\n return true\n }\n if (folder.groups && (chatType === 'group' || chatType === 'supergroup')) {\n return true\n }\n if (folder.broadcasts && chatType === 'channel') return true\n if (folder.bots && chatType === 'bot') return true\n\n return false\n }\n }\n\n /**\n * Whether this dialog is pinned\n */\n get isPinned(): boolean {\n return this.raw.pinned!\n }\n\n /**\n * Whether this chat was manually marked as unread\n */\n get isManuallyUnread(): boolean {\n return this.raw.unreadMark!\n }\n\n /**\n * Whether this chat should be considered unread\n * (i.e. has more than 1 unread message, or has\n * a \"manually unread\" mark)\n */\n get isUnread(): boolean {\n return this.raw.unreadMark || this.raw.unreadCount > 1\n }\n\n /**\n * Whether this dialog is muted\n */\n get isMuted(): boolean {\n return this.raw.notifySettings.silent!\n }\n\n /**\n * Whether this dialog is archived\n */\n get isArchived(): boolean {\n return this.raw.folderId === 1\n }\n\n /**\n * Chat that this dialog represents\n */\n get chat(): Chat {\n const peer = this.raw.peer\n\n let chat\n\n switch (peer._) {\n case 'peerChannel':\n case 'peerChat':\n chat = this._peers.chat(peer._ === 'peerChannel' ? peer.channelId : peer.chatId)\n break\n default:\n chat = this._peers.user(peer.userId)\n break\n }\n\n return new Chat(chat)\n }\n\n /**\n * The latest message sent in this chat\n */\n get lastMessage(): Message {\n const cid = this.chat.id\n\n if (this._messages.has(cid)) {\n return new Message(this._messages.get(cid)!, this._peers)\n }\n\n throw new MtMessageNotFoundError(cid, 0)\n }\n\n /**\n * ID of the last read outgoing message in this dialog\n */\n get lastReadOutgoing(): number {\n return this.raw.readOutboxMaxId\n }\n\n /**\n * ID of the last read ingoing message in this dialog\n */\n get lastReadIngoing(): number {\n return this.raw.readInboxMaxId\n }\n\n /**\n * ID of the last read message in this dialog\n */\n get lastRead(): number {\n return Math.max(this.raw.readOutboxMaxId, this.raw.readInboxMaxId)\n }\n\n /**\n * Number of unread messages\n */\n get unreadCount(): number {\n return this.raw.unreadCount\n }\n\n /**\n * Number of unread mentions\n */\n get unreadMentionsCount(): number {\n return this.raw.unreadMentionsCount\n }\n\n /**\n * Number of unread reactions\n */\n get unreadReactionsCount(): number {\n return this.raw.unreadReactionsCount\n }\n\n /**\n * Draft message in this dialog\n */\n get draftMessage(): DraftMessage | null {\n if (this.raw.draft?._ === 'draftMessage') {\n return new DraftMessage(this.raw.draft)\n }\n\n return null\n }\n\n /**\n * TTL period of all messages in this dialog\n */\n get ttlPeriod(): number | null {\n return this.raw.ttlPeriod ?? null\n }\n}\n\nmemoizeGetters(Dialog, ['chat', 'lastMessage', 'draftMessage'])\nmakeInspectable(Dialog)\n"]}
1
+ {"version":3,"file":"dialog.js","sourceRoot":"","sources":["../../../../../src/highlevel/types/messages/dialog.ts"],"names":[],"mappings":"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","sourcesContent":["import { tl } from '@mtcute/tl'\n\nimport { getMarkedPeerId } from '../../../utils/peer-utils.js'\nimport { assertTypeIsNot, hasValueAtKey } from '../../../utils/type-assertions.js'\nimport { makeInspectable } from '../../utils/index.js'\nimport { memoizeGetters } from '../../utils/memoize.js'\nimport { MtMessageNotFoundError } from '../errors.js'\nimport { Chat } from '../peers/chat.js'\nimport { PeersIndex } from '../peers/peers-index.js'\nimport { DraftMessage } from './draft-message.js'\nimport { Message } from './message.js'\n\n/**\n * Type used as an input for a folder in client methods\n *\n * You can pass folder object, id or title\n */\nexport type InputDialogFolder = string | number | tl.RawDialogFilter\n\n/**\n * A dialog.\n *\n * Think of it as something that is listed\n * in Telegram's main window.\n */\nexport class Dialog {\n constructor(\n readonly raw: tl.RawDialog,\n readonly _peers: PeersIndex,\n readonly _messages: Map<number, tl.TypeMessage>,\n ) {}\n\n /**\n * Parse a list of dialogs from a TL object\n *\n * @param client Client instance\n * @param dialogs TL object\n * @param limit Maximum number of dialogs to parse\n */\n static parseTlDialogs(dialogs: tl.messages.TypeDialogs | tl.messages.TypePeerDialogs, limit?: number): Dialog[] {\n assertTypeIsNot('parseDialogs', dialogs, 'messages.dialogsNotModified')\n\n const peers = PeersIndex.from(dialogs)\n\n const messages = new Map<number, tl.TypeMessage>()\n dialogs.messages.forEach((msg) => {\n if (!msg.peerId) return\n\n messages.set(getMarkedPeerId(msg.peerId), msg)\n })\n\n const arr = dialogs.dialogs.filter(hasValueAtKey('_', 'dialog')).map((it) => new Dialog(it, peers, messages))\n\n if (limit) {\n return arr.slice(0, limit)\n }\n\n return arr\n }\n\n /**\n * Find pinned dialogs from a list of dialogs\n *\n * @param dialogs Dialogs list\n * @param folder If passed, status of pin will be checked against this folder, and not globally\n */\n static findPinned(dialogs: Dialog[], folder?: tl.RawDialogFilter): Dialog[] {\n if (folder) {\n const index: Record<number, true> = {}\n folder.pinnedPeers.forEach((peer) => {\n index[getMarkedPeerId(peer)] = true\n })\n\n return dialogs.filter((i) => index[i.chat.id])\n }\n\n return dialogs.filter((i) => i.isPinned)\n }\n\n /**\n * Create a filter predicate for the given Folder.\n * Returned predicate can be used in `Array.filter()`\n *\n * @param folder Folder to filter for\n * @param excludePinned Whether to exclude pinned folders\n */\n static filterFolder(folder: tl.TypeDialogFilter, excludePinned = true): (val: Dialog) => boolean {\n if (folder._ === 'dialogFilterDefault') {\n return () => true\n }\n\n const pinned: Record<number, true> = {}\n const include: Record<number, true> = {}\n const exclude: Record<number, true> = {}\n\n // populate indices\n if (excludePinned) {\n folder.pinnedPeers.forEach((peer) => {\n pinned[getMarkedPeerId(peer)] = true\n })\n }\n folder.includePeers.forEach((peer) => {\n include[getMarkedPeerId(peer)] = true\n })\n\n if (folder._ === 'dialogFilterChatlist') {\n return (dialog) => {\n const chatId = dialog.chat.id\n\n if (excludePinned && pinned[chatId]) return false\n\n return include[chatId] || pinned[chatId]\n }\n }\n\n folder.excludePeers.forEach((peer) => {\n exclude[getMarkedPeerId(peer)] = true\n })\n\n return (dialog) => {\n const chat = dialog.chat\n const chatId = dialog.chat.id\n const chatType = dialog.chat.chatType\n\n // manual exclusion/inclusion and pins\n if (include[chatId]) return true\n\n if (exclude[chatId] || (excludePinned && pinned[chatId])) {\n return false\n }\n\n // exclusions based on status\n if (folder.excludeRead && !dialog.isUnread) return false\n if (folder.excludeMuted && dialog.isMuted) return false\n // even though this was handled in getDialogs, this method\n // could be used outside of it, so check again\n if (folder.excludeArchived && dialog.isArchived) return false\n\n // inclusions based on chat type\n if (folder.contacts && chatType === 'private' && chat.isContact) {\n return true\n }\n if (folder.nonContacts && chatType === 'private' && !chat.isContact) {\n return true\n }\n if (folder.groups && (chatType === 'group' || chatType === 'supergroup')) {\n return true\n }\n if (folder.broadcasts && chatType === 'channel') return true\n if (folder.bots && chatType === 'bot') return true\n\n return false\n }\n }\n\n /**\n * Whether this dialog is pinned\n */\n get isPinned(): boolean {\n return this.raw.pinned!\n }\n\n /**\n * Whether this chat was manually marked as unread\n */\n get isManuallyUnread(): boolean {\n return this.raw.unreadMark!\n }\n\n /**\n * Whether this chat should be considered unread\n * (i.e. has more than 1 unread message, or has\n * a \"manually unread\" mark)\n */\n get isUnread(): boolean {\n return this.raw.unreadMark || this.raw.unreadCount > 1\n }\n\n /**\n * Whether this dialog is muted\n */\n get isMuted(): boolean {\n return this.raw.notifySettings.silent!\n }\n\n /**\n * Whether this dialog is archived\n */\n get isArchived(): boolean {\n return this.raw.folderId === 1\n }\n\n /**\n * Chat that this dialog represents\n */\n get chat(): Chat {\n return Chat._parseFromPeer(this.raw.peer, this._peers)\n }\n\n /**\n * The latest message sent in this chat\n */\n get lastMessage(): Message {\n const cid = this.chat.id\n\n if (this._messages.has(cid)) {\n return new Message(this._messages.get(cid)!, this._peers)\n }\n\n throw new MtMessageNotFoundError(cid, 0)\n }\n\n /**\n * ID of the last read outgoing message in this dialog\n */\n get lastReadOutgoing(): number {\n return this.raw.readOutboxMaxId\n }\n\n /**\n * ID of the last read ingoing message in this dialog\n */\n get lastReadIngoing(): number {\n return this.raw.readInboxMaxId\n }\n\n /**\n * ID of the last read message in this dialog\n */\n get lastRead(): number {\n return Math.max(this.raw.readOutboxMaxId, this.raw.readInboxMaxId)\n }\n\n /**\n * Number of unread messages\n */\n get unreadCount(): number {\n return this.raw.unreadCount\n }\n\n /**\n * Number of unread mentions\n */\n get unreadMentionsCount(): number {\n return this.raw.unreadMentionsCount\n }\n\n /**\n * Number of unread reactions\n */\n get unreadReactionsCount(): number {\n return this.raw.unreadReactionsCount\n }\n\n /**\n * Draft message in this dialog\n */\n get draftMessage(): DraftMessage | null {\n if (this.raw.draft?._ === 'draftMessage') {\n return new DraftMessage(this.raw.draft)\n }\n\n return null\n }\n\n /**\n * TTL period of all messages in this dialog\n */\n get ttlPeriod(): number | null {\n return this.raw.ttlPeriod ?? null\n }\n}\n\nmemoizeGetters(Dialog, ['chat', 'lastMessage', 'draftMessage'])\nmakeInspectable(Dialog)\n"]}
@@ -13,3 +13,8 @@ export type InputMessageId = {
13
13
  };
14
14
  /** Remove {@link InputMessageId} type from the given type */
15
15
  export type OmitInputMessageId<T> = Omit<T, 'chatId' | 'message'>;
16
+ /** @internal */
17
+ export declare function normalizeInputMessageId(id: InputMessageId): {
18
+ chatId: InputPeerLike;
19
+ message: number;
20
+ };
@@ -2,6 +2,7 @@ import { tl } from '@mtcute/tl';
2
2
  import { CallDiscardReason } from '../calls/index.js';
3
3
  import { Photo } from '../media/photo.js';
4
4
  import { Peer } from '../peers/peer.js';
5
+ import type { Message } from './message.js';
5
6
  /** Group was created */
6
7
  export interface ActionChatCreated {
7
8
  readonly type: 'chat_created';
@@ -280,7 +281,21 @@ export interface ActionPhotoSuggested {
280
281
  /** Photo that was suggested */
281
282
  photo: Photo;
282
283
  }
283
- /** A peer was chosen by the user after clicking on a RequestPeer button */
284
+ /**
285
+ * A peer was chosen by the user after clicking on a RequestPeer button.
286
+ * The user-side version of {@link ActionPeerChosen}
287
+ */
288
+ export interface ActionPeerSent {
289
+ readonly type: 'peer_sent';
290
+ /** ID of the button passed earlier by the bot */
291
+ buttonId: number;
292
+ /** Brief information about the chosen peers */
293
+ peers: tl.TypeRequestedPeer[];
294
+ }
295
+ /**
296
+ * A peer was chosen by the user after clicking on a RequestPeer button
297
+ * The bot-side version of {@link ActionPeerSent}
298
+ */
284
299
  export interface ActionPeerChosen {
285
300
  readonly type: 'peer_chosen';
286
301
  /** ID of the button passed earlier by the bot */
@@ -329,4 +344,6 @@ export interface ActionBoostApply {
329
344
  /** Number of boosts applied */
330
345
  count: number;
331
346
  }
332
- export type MessageAction = ActionChatCreated | ActionChannelCreated | ActionChatMigrateTo | ActionChannelMigrateFrom | ActionMessagePinned | ActionHistoryCleared | ActionGameScore | ActionContactJoined | ActionTitleChanged | ActionPhotoChanged | ActionPhotoDeleted | ActionUsersAdded | ActionUserLeft | ActionUserRemoved | ActionUserJoinedLink | ActionPaymentReceived | ActionPaymentSent | ActionCall | ActionScreenshotTaken | ActionBotAllowed | ActionGeoProximity | ActionGroupCallStarted | ActionGroupCallEnded | ActionGroupCallScheduled | ActionGroupInvite | ActionTtlChanged | ActionTopicCreated | ActionTopicEdited | ActionCustom | ActionThemeChanged | ActionUserJoinedApproved | ActionWebviewDataSent | ActionWebviewDataReceived | ActionPremiumGifted | ActionPhotoSuggested | ActionPeerChosen | ActionWallpaperChanged | ActionGiftCode | ActionGiveawayStarted | ActionGiveawayEnded | ActionBoostApply | null;
347
+ export type MessageAction = ActionChatCreated | ActionChannelCreated | ActionChatMigrateTo | ActionChannelMigrateFrom | ActionMessagePinned | ActionHistoryCleared | ActionGameScore | ActionContactJoined | ActionTitleChanged | ActionPhotoChanged | ActionPhotoDeleted | ActionUsersAdded | ActionUserLeft | ActionUserRemoved | ActionUserJoinedLink | ActionPaymentReceived | ActionPaymentSent | ActionCall | ActionScreenshotTaken | ActionBotAllowed | ActionGeoProximity | ActionGroupCallStarted | ActionGroupCallEnded | ActionGroupCallScheduled | ActionGroupInvite | ActionTtlChanged | ActionTopicCreated | ActionTopicEdited | ActionCustom | ActionThemeChanged | ActionUserJoinedApproved | ActionWebviewDataSent | ActionWebviewDataReceived | ActionPremiumGifted | ActionPhotoSuggested | ActionPeerSent | ActionPeerChosen | ActionWallpaperChanged | ActionGiftCode | ActionGiveawayStarted | ActionGiveawayEnded | ActionBoostApply | null;
348
+ /** @internal */
349
+ export declare function _messageActionFromTl(this: Message, act: tl.TypeMessageAction): MessageAction;
@@ -211,6 +211,12 @@ export function _messageActionFromTl(act) {
211
211
  type: 'photo_suggested',
212
212
  photo: new Photo(act.photo),
213
213
  };
214
+ case 'messageActionRequestedPeerSentMe':
215
+ return {
216
+ type: 'peer_sent',
217
+ buttonId: act.buttonId,
218
+ peers: act.peers,
219
+ };
214
220
  case 'messageActionRequestedPeer':
215
221
  return {
216
222
  type: 'peer_chosen',