@mtkruto/node 0.1.132 → 0.1.134

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 (194) hide show
  1. package/esm/3_errors.d.ts +519 -510
  2. package/esm/3_errors.js +521 -509
  3. package/esm/3_types.d.ts +19 -7
  4. package/esm/3_types.js +19 -7
  5. package/esm/4_constants.d.ts +2 -2
  6. package/esm/4_constants.js +2 -2
  7. package/esm/4_errors.d.ts +7 -12
  8. package/esm/4_errors.js +6 -7
  9. package/esm/5_client.d.ts +3 -3
  10. package/esm/5_client.js +3 -3
  11. package/esm/client/0_utilities.d.ts +30 -2
  12. package/esm/client/0_utilities.js +13 -5
  13. package/esm/client/1_composer.d.ts +30 -0
  14. package/esm/client/{4_composer.js → 1_composer.js} +15 -2
  15. package/esm/client/2_client_plain.d.ts +1 -1
  16. package/esm/client/2_client_plain.js +1 -1
  17. package/esm/client/{3_types.d.ts → 3_params.d.ts} +68 -172
  18. package/esm/client/3_params.js +1 -0
  19. package/esm/client/{5_client.d.ts → 4_client.d.ts} +89 -57
  20. package/esm/client/{5_client.js → 4_client.js} +499 -308
  21. package/esm/client/5_composer.d.ts +4 -0
  22. package/esm/client/5_composer.js +3 -0
  23. package/esm/storage/0_storage.d.ts +4 -1
  24. package/esm/storage/0_storage.js +36 -7
  25. package/esm/storage/1_storage_indexed_db.d.ts +6 -2
  26. package/esm/storage/1_storage_indexed_db.js +7 -5
  27. package/esm/storage/1_storage_local_storage.d.ts +1 -1
  28. package/esm/storage/1_storage_local_storage.js +1 -1
  29. package/esm/storage/1_storage_memory.d.ts +1 -1
  30. package/esm/storage/1_storage_memory.js +1 -1
  31. package/esm/storage/1_storage_session_storage.d.ts +1 -1
  32. package/esm/storage/1_storage_session_storage.js +1 -1
  33. package/esm/tl/2_types.d.ts +313 -24
  34. package/esm/tl/2_types.js +982 -46
  35. package/esm/tl/3_functions.d.ts +95 -32
  36. package/esm/tl/3_functions.js +227 -66
  37. package/esm/tl/3_utilities.d.ts +1 -0
  38. package/esm/tl/3_utilities.js +14 -0
  39. package/esm/tl/6_message.js +1 -1
  40. package/esm/types/0_authorization_state.d.ts +5 -0
  41. package/esm/types/0_authorization_state.js +1 -0
  42. package/esm/types/0_chat_photo.d.ts +22 -21
  43. package/esm/types/0_connection_state.d.ts +17 -0
  44. package/esm/types/0_connection_state.js +1 -0
  45. package/esm/types/0_giveaway_parameters.d.ts +9 -0
  46. package/esm/types/0_giveaway_parameters.js +9 -0
  47. package/esm/types/0_login_url.d.ts +0 -4
  48. package/esm/types/0_mask_position.d.ts +0 -4
  49. package/esm/types/0_message_entity.d.ts +91 -74
  50. package/esm/types/0_message_identifier.d.ts +4 -0
  51. package/esm/types/0_message_identifier.js +1 -0
  52. package/esm/types/0_network_statistics_entry.d.ts +4 -0
  53. package/esm/types/0_network_statistics_entry.js +1 -0
  54. package/esm/types/0_reaction.d.ts +14 -10
  55. package/esm/types/0_reaction.js +29 -1
  56. package/esm/types/1__getters.d.ts +3 -0
  57. package/esm/types/1_bot_command_scope.d.ts +32 -27
  58. package/esm/types/1_chat_p.d.ts +77 -68
  59. package/esm/types/1_giveaway.d.ts +8 -0
  60. package/esm/types/1_giveaway.js +7 -0
  61. package/esm/types/1_keyboard_button.d.ts +41 -57
  62. package/esm/types/1_keyboard_button.js +3 -0
  63. package/esm/types/1_message_reaction.d.ts +14 -0
  64. package/esm/types/1_message_reaction.js +22 -0
  65. package/esm/types/1_network_statistics.d.ts +5 -0
  66. package/esm/types/1_network_statistics.js +1 -0
  67. package/esm/types/1_poll.d.ts +0 -13
  68. package/esm/types/1_reaction_count.d.ts +7 -0
  69. package/esm/types/1_reaction_count.js +6 -0
  70. package/esm/types/1_user.d.ts +2 -2
  71. package/esm/types/2_game.d.ts +0 -7
  72. package/esm/types/2_inline_keyboard_button.d.ts +36 -37
  73. package/esm/types/2_inline_query.d.ts +0 -6
  74. package/esm/types/2_message_interactions.d.ts +8 -0
  75. package/esm/types/2_message_interactions.js +1 -0
  76. package/esm/types/2_message_reaction_count.d.ts +8 -0
  77. package/esm/types/2_message_reaction_count.js +1 -0
  78. package/esm/types/2_reply_keyboard_markup.d.ts +0 -7
  79. package/esm/types/3_inline_keyboard_markup.d.ts +0 -2
  80. package/esm/types/4_message.d.ts +457 -0
  81. package/esm/types/{3_message.js → 4_message.js} +216 -129
  82. package/{script/types/4_callback_query.d.ts → esm/types/5_callback_query.d.ts} +1 -1
  83. package/esm/types/5_chat.d.ts +37 -0
  84. package/esm/types/{4_chat.js → 5_chat.js} +2 -2
  85. package/esm/types/6_update.d.ts +134 -0
  86. package/esm/types/6_update.js +1 -0
  87. package/package.json +1 -1
  88. package/script/3_errors.d.ts +519 -510
  89. package/script/3_errors.js +533 -520
  90. package/script/3_types.d.ts +19 -7
  91. package/script/3_types.js +19 -7
  92. package/script/4_constants.d.ts +2 -2
  93. package/script/4_constants.js +2 -2
  94. package/script/4_errors.d.ts +7 -12
  95. package/script/4_errors.js +5 -6
  96. package/script/5_client.d.ts +3 -3
  97. package/script/5_client.js +3 -3
  98. package/script/client/0_utilities.d.ts +30 -2
  99. package/script/client/0_utilities.js +15 -6
  100. package/script/client/1_composer.d.ts +30 -0
  101. package/script/client/{4_composer.js → 1_composer.js} +17 -4
  102. package/script/client/2_client_plain.d.ts +1 -1
  103. package/script/client/2_client_plain.js +2 -2
  104. package/script/client/{3_types.d.ts → 3_params.d.ts} +68 -172
  105. package/script/client/3_params.js +2 -0
  106. package/script/client/{5_client.d.ts → 4_client.d.ts} +89 -57
  107. package/script/client/{5_client.js → 4_client.js} +505 -314
  108. package/script/client/5_composer.d.ts +4 -0
  109. package/script/client/{6_composer.js → 5_composer.js} +2 -2
  110. package/script/storage/0_storage.d.ts +4 -1
  111. package/script/storage/0_storage.js +36 -7
  112. package/script/storage/1_storage_indexed_db.d.ts +6 -2
  113. package/script/storage/1_storage_indexed_db.js +7 -5
  114. package/script/storage/1_storage_local_storage.d.ts +1 -1
  115. package/script/storage/1_storage_local_storage.js +1 -1
  116. package/script/storage/1_storage_memory.d.ts +1 -1
  117. package/script/storage/1_storage_memory.js +1 -1
  118. package/script/storage/1_storage_session_storage.d.ts +1 -1
  119. package/script/storage/1_storage_session_storage.js +1 -1
  120. package/script/tl/2_types.d.ts +313 -24
  121. package/script/tl/2_types.js +1169 -217
  122. package/script/tl/3_functions.d.ts +95 -32
  123. package/script/tl/3_functions.js +241 -77
  124. package/script/tl/3_utilities.d.ts +1 -0
  125. package/script/tl/3_utilities.js +16 -1
  126. package/script/tl/6_message.js +1 -1
  127. package/script/types/0_authorization_state.d.ts +5 -0
  128. package/script/types/0_authorization_state.js +2 -0
  129. package/script/types/0_chat_photo.d.ts +22 -21
  130. package/script/types/0_connection_state.d.ts +17 -0
  131. package/script/types/0_connection_state.js +2 -0
  132. package/script/types/0_giveaway_parameters.d.ts +9 -0
  133. package/script/types/0_giveaway_parameters.js +13 -0
  134. package/script/types/0_login_url.d.ts +0 -4
  135. package/script/types/0_mask_position.d.ts +0 -4
  136. package/script/types/0_message_entity.d.ts +91 -74
  137. package/script/types/0_message_identifier.d.ts +4 -0
  138. package/script/types/0_message_identifier.js +2 -0
  139. package/script/types/0_network_statistics_entry.d.ts +4 -0
  140. package/script/types/0_network_statistics_entry.js +2 -0
  141. package/script/types/0_reaction.d.ts +14 -10
  142. package/script/types/0_reaction.js +33 -0
  143. package/script/types/1__getters.d.ts +3 -0
  144. package/script/types/1_bot_command_scope.d.ts +32 -27
  145. package/script/types/1_chat_p.d.ts +77 -68
  146. package/script/types/1_giveaway.d.ts +8 -0
  147. package/script/types/1_giveaway.js +11 -0
  148. package/script/types/1_keyboard_button.d.ts +41 -57
  149. package/script/types/1_keyboard_button.js +3 -0
  150. package/script/types/1_message_reaction.d.ts +14 -0
  151. package/script/types/1_message_reaction.js +26 -0
  152. package/script/types/1_network_statistics.d.ts +5 -0
  153. package/script/types/1_network_statistics.js +2 -0
  154. package/script/types/1_poll.d.ts +0 -13
  155. package/script/types/1_reaction_count.d.ts +7 -0
  156. package/script/types/1_reaction_count.js +10 -0
  157. package/script/types/1_user.d.ts +2 -2
  158. package/script/types/2_game.d.ts +0 -7
  159. package/script/types/2_inline_keyboard_button.d.ts +36 -37
  160. package/script/types/2_inline_query.d.ts +0 -6
  161. package/script/types/2_message_interactions.d.ts +8 -0
  162. package/script/types/2_message_interactions.js +2 -0
  163. package/script/types/2_message_reaction_count.d.ts +8 -0
  164. package/script/types/2_message_reaction_count.js +2 -0
  165. package/script/types/2_reply_keyboard_markup.d.ts +0 -7
  166. package/script/types/3_inline_keyboard_markup.d.ts +0 -2
  167. package/script/types/4_message.d.ts +457 -0
  168. package/script/types/{3_message.js → 4_message.js} +218 -130
  169. package/{esm/types/4_callback_query.d.ts → script/types/5_callback_query.d.ts} +1 -1
  170. package/script/types/5_chat.d.ts +37 -0
  171. package/script/types/{4_chat.js → 5_chat.js} +3 -3
  172. package/script/types/6_update.d.ts +134 -0
  173. package/script/types/6_update.js +2 -0
  174. package/esm/client/3_types.js +0 -11
  175. package/esm/client/4_composer.d.ts +0 -31
  176. package/esm/client/6_composer.d.ts +0 -4
  177. package/esm/client/6_composer.js +0 -3
  178. package/esm/types/3_message.d.ts +0 -182
  179. package/esm/types/4_chat.d.ts +0 -34
  180. package/script/client/3_types.js +0 -15
  181. package/script/client/4_composer.d.ts +0 -31
  182. package/script/client/6_composer.d.ts +0 -4
  183. package/script/types/3_message.d.ts +0 -182
  184. package/script/types/4_chat.d.ts +0 -34
  185. /package/esm/client/{1_client_abstract.d.ts → 0_client_abstract.d.ts} +0 -0
  186. /package/esm/client/{1_client_abstract.js → 0_client_abstract.js} +0 -0
  187. /package/esm/types/{0_audio.d.ts → 1_audio.d.ts} +0 -0
  188. /package/esm/types/{0_audio.js → 1_audio.js} +0 -0
  189. /package/esm/types/{4_callback_query.js → 5_callback_query.js} +0 -0
  190. /package/script/client/{1_client_abstract.d.ts → 0_client_abstract.d.ts} +0 -0
  191. /package/script/client/{1_client_abstract.js → 0_client_abstract.js} +0 -0
  192. /package/script/types/{0_audio.d.ts → 1_audio.d.ts} +0 -0
  193. /package/script/types/{0_audio.js → 1_audio.js} +0 -0
  194. /package/script/types/{4_callback_query.js → 5_callback_query.js} +0 -0
@@ -2,7 +2,6 @@ import { debug } from "../0_deps.js";
2
2
  import { cleanObject, UNREACHABLE, ZERO_CHANNEL_ID } from "../1_utilities.js";
3
3
  import { as, types } from "../2_tl.js";
4
4
  import { FileID, FileType, FileUniqueID, FileUniqueType } from "./0__file_id.js";
5
- import { constructAudio } from "./0_audio.js";
6
5
  import { constructContact } from "./0_contact.js";
7
6
  import { constructDice } from "./0_dice.js";
8
7
  import { constructForceReply } from "./0_force_reply.js";
@@ -12,11 +11,14 @@ import { constructReplyKeyboardRemove } from "./0_reply_keyboard_remove.js";
12
11
  import { constructVenue } from "./0_venue.js";
13
12
  import { constructVoice } from "./0_voice.js";
14
13
  import { constructAnimation } from "./1_animation.js";
15
- import { constructReplyQuote } from "./1_reply_quote.js";
14
+ import { constructAudio } from "./1_audio.js";
16
15
  import { constructChatP } from "./1_chat_p.js";
17
16
  import { constructDocument } from "./1_document.js";
17
+ import { constructGiveaway } from "./1_giveaway.js";
18
+ import { constructMessageReaction } from "./1_message_reaction.js";
18
19
  import { constructPhoto } from "./1_photo.js";
19
20
  import { constructPoll } from "./1_poll.js";
21
+ import { constructReplyQuote } from "./1_reply_quote.js";
20
22
  import { constructSticker } from "./1_sticker.js";
21
23
  import { constructUser } from "./1_user.js";
22
24
  import { constructVideoNote } from "./1_video_note.js";
@@ -25,6 +27,54 @@ import { constructGame } from "./2_game.js";
25
27
  import { constructReplyKeyboardMarkup } from "./2_reply_keyboard_markup.js";
26
28
  import { constructInlineKeyboardMarkup } from "./3_inline_keyboard_markup.js";
27
29
  const d = debug("types/Message");
30
+ const keys = {
31
+ text: ["text"],
32
+ photo: ["photo"],
33
+ document: ["document"],
34
+ video: ["video"],
35
+ sticker: ["sticker"],
36
+ animation: ["animation"],
37
+ voice: ["voice"],
38
+ audio: ["audio"],
39
+ dice: ["dice"],
40
+ videoNote: ["videoNote"],
41
+ contact: ["contact"],
42
+ game: ["game"],
43
+ poll: ["poll"],
44
+ venue: ["venue"],
45
+ location: ["location"],
46
+ newChatMembers: ["newChatMembers"],
47
+ leftChatMember: ["leftChatMember"],
48
+ newChatTitle: ["newChatTitle"],
49
+ newChatPhoto: ["newChatPhoto"],
50
+ deletedChatPhoto: ["deletedChatPhoto"],
51
+ groupCreated: ["groupCreated", "newChatMembers"],
52
+ supergroupCreated: ["supergroupCreated"],
53
+ channelCreated: ["channelCreated"],
54
+ newAutoDeleteTime: ["newAutoDeleteTime"],
55
+ chatMigratedTo: ["chatMigratedTo"],
56
+ chatMigratedFrom: ["chatMigratedFrom"],
57
+ pinnedMessage: ["pinnedMessage"],
58
+ userShared: ["userShared"],
59
+ writeAccessAllowed: ["writeAccessAllowed"],
60
+ forumTopicCreated: ["forumTopicCreated"],
61
+ forumTopicEdited: ["forumTopicEdited"],
62
+ forumTopicClosed: ["forumTopicClosed"],
63
+ forumTopicReopened: ["forumTopicReopened"],
64
+ videoChatScheduled: ["videoChatScheduled"],
65
+ videoChatStarted: ["videoChatStarted"],
66
+ videoChatEnded: ["videoChatEnded"],
67
+ giveaway: ["giveaway"],
68
+ unsupported: ["unsupported"],
69
+ };
70
+ export function assertMessageType(message, type) {
71
+ for (const key of keys[type]) {
72
+ if (!(key in message) || message[key] === undefined) {
73
+ UNREACHABLE();
74
+ }
75
+ }
76
+ return message;
77
+ }
28
78
  async function getSender(message_, getEntity) {
29
79
  if (message_.from_id instanceof types.PeerUser) {
30
80
  const entity = await getEntity(message_.from_id);
@@ -71,116 +121,133 @@ async function constructServiceMessage(message_, chat, getEntity, getMessage) {
71
121
  };
72
122
  Object.assign(message, await getSender(message_, getEntity));
73
123
  if (message_.action instanceof types.MessageActionChatAddUser) {
74
- message.newChatMembers = [];
124
+ const newChatMembers = new Array();
75
125
  for (const user_ of message_.action.users) {
76
126
  const entity = await getEntity(new types.PeerUser({ user_id: user_ }));
77
127
  if (entity) {
78
128
  const user = constructUser(entity);
79
- message.newChatMembers.push(user);
129
+ newChatMembers.push(user);
80
130
  }
81
131
  else {
82
132
  UNREACHABLE();
83
133
  }
84
134
  }
135
+ return { ...message, newChatMembers };
85
136
  }
86
137
  else if (message_.action instanceof types.MessageActionChatDeleteUser) {
87
138
  const entity = await getEntity(new types.PeerUser({ user_id: message_.action.user_id }));
88
139
  if (entity) {
89
140
  const user = constructUser(entity);
90
- message.leftChatMember = user;
91
- }
92
- else {
93
- UNREACHABLE();
141
+ const leftChatMember = user;
142
+ return { ...message, leftChatMember };
94
143
  }
95
144
  }
96
145
  else if (message_.action instanceof types.MessageActionChatEditTitle) {
97
- message.newChatTitle = message_.action.title;
146
+ const newChatTitle = message_.action.title;
147
+ return { ...message, newChatTitle };
98
148
  }
99
149
  else if (message_.action instanceof types.MessageActionChatEditPhoto) {
100
- message.newChatPhoto = constructPhoto(message_.action.photo[as](types.Photo));
150
+ const newChatPhoto = constructPhoto(message_.action.photo[as](types.Photo));
151
+ return { ...message, newChatPhoto };
101
152
  }
102
153
  else if (message_.action instanceof types.MessageActionChatDeletePhoto) {
103
- message.deletedChatPhoto = true;
154
+ const deletedChatPhoto = true;
155
+ return { ...message, deletedChatPhoto };
104
156
  }
105
157
  else if (message_.action instanceof types.MessageActionChatCreate) {
106
- message.groupCreated = true;
107
- message.newChatMembers = [];
158
+ const groupCreated = true;
159
+ const newChatMembers = new Array();
108
160
  for (const user_ of message_.action.users) {
109
161
  const entity = await getEntity(new types.PeerUser({ user_id: user_ }));
110
162
  if (entity) {
111
163
  const user = constructUser(entity);
112
- message.newChatMembers.push(user);
113
- }
114
- else {
115
- UNREACHABLE();
164
+ newChatMembers.push(user);
116
165
  }
117
166
  }
167
+ return { ...message, groupCreated, newChatMembers };
118
168
  }
119
169
  else if (message_.action instanceof types.MessageActionChannelCreate) {
120
170
  if (message.chat.type == "channel") {
121
- message.channelCreated = true;
171
+ const channelCreated = true;
172
+ return { ...message, channelCreated };
122
173
  }
123
174
  else if (message.chat.type == "supergroup") {
124
- message.supergroupCreated = true;
175
+ const supergroupCreated = true;
176
+ return { ...message, supergroupCreated };
125
177
  }
126
178
  else {
127
- UNREACHABLE();
179
+ // UNREACHABLE();
128
180
  }
129
181
  }
130
182
  else if (message_.action instanceof types.MessageActionChatMigrateTo) {
131
- message.chatMigratedTo = ZERO_CHANNEL_ID + Number(-message_.action.channel_id);
183
+ const chatMigratedTo = ZERO_CHANNEL_ID + Number(-message_.action.channel_id);
184
+ return { ...message, chatMigratedTo };
132
185
  }
133
186
  else if (message_.action instanceof types.MessageActionChannelMigrateFrom) {
134
- message.chatMigratedFrom = Number(-message_.action.chat_id);
187
+ const chatMigratedFrom = Number(-message_.action.chat_id);
188
+ return { ...message, chatMigratedFrom };
135
189
  }
136
190
  else if (message_.action instanceof types.MessageActionPinMessage) {
137
191
  const { replyToMessage } = await getReply(message_, chat, getMessage);
138
- message.pinnedMessage = replyToMessage;
192
+ if (replyToMessage) {
193
+ const pinnedMessage = replyToMessage;
194
+ return { ...message, pinnedMessage };
195
+ }
139
196
  }
140
197
  else if (message_.action instanceof types.MessageActionRequestedPeer) {
141
- const user = message_.action.peer[as](types.PeerUser);
142
- message.userShared = { requestId: message_.action.button_id, userId: Number(user.user_id) };
198
+ const user = message_.action.peers[0][as](types.PeerUser);
199
+ const userShared = { requestId: message_.action.button_id, userId: Number(user.user_id) };
200
+ return { ...message, userShared };
143
201
  }
144
202
  else if (message_.action instanceof types.MessageActionBotAllowed) {
145
203
  const webAppName = message_.action.app ? message_.action.app[as](types.BotApp).title : undefined;
146
- message.writeAccessAllowed = { webAppName };
204
+ const writeAccessAllowed = { webAppName };
205
+ return { ...message, writeAccessAllowed };
147
206
  }
148
207
  else if (message_.action instanceof types.MessageActionTopicCreate) {
149
- message.forumTopicCreated = {
208
+ const forumTopicCreated = {
150
209
  name: message_.action.title,
151
210
  iconColor: "#" + message_.action.icon_color.toString(16).padStart(6, "0"),
152
211
  iconCutsomEmojiId: message_.action.icon_emoji_id ? String(message_.action.icon_emoji_id) : undefined,
153
212
  };
213
+ return { ...message, forumTopicCreated };
154
214
  }
155
215
  else if (message_.action instanceof types.MessageActionTopicEdit) {
156
216
  if (message_.action.closed) {
157
- message.forumTopicClosed = {};
217
+ const forumTopicClosed = true;
218
+ return { ...message, forumTopicClosed };
158
219
  }
159
220
  else if (message_.action.title || message_.action.icon_emoji_id) {
160
- message.forumTopicEdited = {
161
- name: message_.action.title,
221
+ const forumTopicEdited = {
222
+ name: message_.action.title ?? "",
162
223
  iconCutsomEmojiId: message_.action.icon_emoji_id ? String(message_.action.icon_emoji_id) : undefined,
163
224
  };
225
+ return { ...message, forumTopicEdited };
164
226
  }
165
227
  else {
166
- message.forumTopicReopened = {};
228
+ const forumTopicReopened = true;
229
+ return { ...message, forumTopicReopened };
167
230
  }
168
231
  }
169
232
  else if (message_.action instanceof types.MessageActionGroupCallScheduled) {
170
- message.videoChatScheduled = { startDate: new Date(message_.action.schedule_date * 1000) };
233
+ const videoChatScheduled = { startDate: new Date(message_.action.schedule_date * 1000) };
234
+ return { ...message, videoChatScheduled };
171
235
  }
172
236
  else if (message_.action instanceof types.MessageActionGroupCall) {
173
237
  if (message_.action.duration) {
174
- message.videoChatEnded = { duration: message_.action.duration };
238
+ const videoChatEnded = { duration: message_.action.duration };
239
+ return { ...message, videoChatEnded };
175
240
  }
176
241
  else {
177
- message.videoChatStarted = {};
242
+ const videoChatStarted = true;
243
+ return { ...message, videoChatStarted };
178
244
  }
179
245
  }
180
246
  else if (message_.action instanceof types.MessageActionSetMessagesTTL) {
181
- message.messageAutoDeleteTimerChanged = { messageAutoDeleteTime: message_.action.period || 0 };
247
+ const newAutoDeleteTime = message_.action.period || 0;
248
+ return { ...message, newAutoDeleteTime };
182
249
  }
183
- return cleanObject(message);
250
+ return { ...message, unsupported: true };
184
251
  }
185
252
  export async function constructMessage(message_, getEntity, getMessage, getStickerSetName, getReply_ = true) {
186
253
  if (!(message_ instanceof types.Message) && !(message_ instanceof types.MessageService)) {
@@ -229,9 +296,14 @@ export async function constructMessage(message_, getEntity, getMessage, getStick
229
296
  link,
230
297
  date: new Date(message_.date * 1000),
231
298
  views: message_.views,
299
+ forwards: message_.forwards,
232
300
  isTopicMessage: false,
233
301
  hasProtectedContent: message_.noforwards || false,
234
302
  };
303
+ if (message_.reactions) {
304
+ const recentReactions = message_.reactions.recent_reactions ?? [];
305
+ message.reactions = message_.reactions.results.map((v) => constructMessageReaction(v, recentReactions));
306
+ }
235
307
  if (message_.reply_to instanceof types.MessageReplyHeader && message_.reply_to.reply_to_msg_id) {
236
308
  if (message_.reply_to.quote) {
237
309
  message.replyQuote = constructReplyQuote(message_.reply_to.quote_text, message_.reply_to.quote_offset, message_.reply_to.quote_entities);
@@ -242,31 +314,6 @@ export async function constructMessage(message_, getEntity, getMessage, getStick
242
314
  Object.assign(message, await getReply(message_, chat_, getMessage));
243
315
  }
244
316
  Object.assign(message, await getSender(message_, getEntity));
245
- if (message_.media instanceof types.MessageMediaPhoto || message_.media instanceof types.MessageMediaDocument) {
246
- message.hasMediaSpoiler = message_.media.spoiler || false;
247
- }
248
- if (message_.grouped_id != undefined) {
249
- message.mediaGroupId = String(message_.grouped_id);
250
- }
251
- if (message_.message) {
252
- if (message_.media == undefined) {
253
- message.text = message_.message;
254
- }
255
- else {
256
- message.caption = message_.message;
257
- }
258
- }
259
- if (message_.entities != undefined) {
260
- if (message_.media == undefined) {
261
- message.entities = message_.entities.map(constructMessageEntity).filter((v) => v);
262
- }
263
- else {
264
- message.captionEntities = message_.entities.map(constructMessageEntity).filter((v) => v);
265
- }
266
- }
267
- if (message_.edit_date != undefined) {
268
- message.editDate = new Date(message_.edit_date * 1000);
269
- }
270
317
  if (message_.reply_markup) {
271
318
  if (message_.reply_markup instanceof types.ReplyKeyboardMarkup) {
272
319
  message.replyMarkup = constructReplyKeyboardMarkup(message_.reply_markup);
@@ -321,81 +368,121 @@ export async function constructMessage(message_, getEntity, getMessage, getStick
321
368
  }
322
369
  }
323
370
  }
324
- if (message_.media) {
325
- if (message_.media instanceof types.MessageMediaPhoto) {
326
- if (message_.media.photo instanceof types.Photo) {
327
- message.photo = constructPhoto(message_.media.photo);
328
- }
371
+ if (message_.grouped_id != undefined) {
372
+ message.mediaGroupId = String(message_.grouped_id);
373
+ }
374
+ if (message_.edit_date != undefined) {
375
+ message.editDate = new Date(message_.edit_date * 1000);
376
+ }
377
+ if (message_.message && message_.media === undefined) {
378
+ return {
379
+ ...message,
380
+ text: message_.message,
381
+ entities: message_.entities?.map(constructMessageEntity).filter((v) => !!v) ?? [],
382
+ };
383
+ }
384
+ const messageMedia = {
385
+ ...message,
386
+ caption: message_.message,
387
+ captionEntities: message_.entities?.map(constructMessageEntity).filter((v) => !!v) ?? [],
388
+ };
389
+ if (message_.media instanceof types.MessageMediaPhoto || message_.media instanceof types.MessageMediaDocument) {
390
+ messageMedia.hasMediaSpoiler = message_.media.spoiler || false;
391
+ }
392
+ let m = null;
393
+ if (message_.media instanceof types.MessageMediaPhoto) {
394
+ if (!message_.media.photo) {
395
+ UNREACHABLE();
329
396
  }
330
- else if (message_.media instanceof types.MessageMediaDice) {
331
- message.dice = constructDice(message_.media);
332
- }
333
- else if (message_.media instanceof types.MessageMediaDocument) {
334
- const { document } = message_.media;
335
- if (document instanceof types.Document) {
336
- const getFileId = (type) => new FileID(null, null, type, document.dc_id, {
337
- mediaId: document.id,
338
- accessHash: document.access_hash,
339
- fileReference: document.file_reference,
340
- }).encode();
341
- const fileUniqueId = new FileUniqueID(FileUniqueType.Document, { mediaId: document.id }).encode();
342
- const animated = document.attributes.find((v) => v instanceof types.DocumentAttributeAnimated);
343
- const audio = document.attributes.find((v) => v instanceof types.DocumentAttributeAudio);
344
- const fileName = document.attributes.find((v) => v instanceof types.DocumentAttributeFilename);
345
- const sticker = document.attributes.find((v) => v instanceof types.DocumentAttributeSticker);
346
- const video = document.attributes.find((v) => v instanceof types.DocumentAttributeVideo);
347
- if (animated) {
348
- message.animation = constructAnimation(document, video, fileName, getFileId(FileType.Animation), fileUniqueId);
349
- }
350
- else if (video) {
351
- if (video.round_message) {
352
- message.videoNote = constructVideoNote(document, video, getFileId(FileType.VideoNote), fileUniqueId);
353
- }
354
- else {
355
- message.video = constructVideo(document, video, fileName?.file_name, getFileId(FileType.Video), fileUniqueId);
356
- }
357
- }
358
- else if (audio) {
359
- if (audio.voice) {
360
- message.voice = constructVoice(document, audio, getFileId(FileType.Voice), fileUniqueId);
361
- }
362
- else {
363
- message.audio = constructAudio(document, audio, getFileId(FileType.Audio), fileUniqueId);
364
- }
397
+ const photo = constructPhoto(message_.media.photo[as](types.Photo));
398
+ m = { ...messageMedia, photo };
399
+ }
400
+ else if (message_.media instanceof types.MessageMediaDice) {
401
+ const dice = constructDice(message_.media);
402
+ m = { ...message, dice };
403
+ }
404
+ else if (message_.media instanceof types.MessageMediaDocument) {
405
+ const { document } = message_.media;
406
+ if (document instanceof types.Document) {
407
+ const getFileId = (type) => new FileID(null, null, type, document.dc_id, {
408
+ mediaId: document.id,
409
+ accessHash: document.access_hash,
410
+ fileReference: document.file_reference,
411
+ }).encode();
412
+ const fileUniqueId = new FileUniqueID(FileUniqueType.Document, { mediaId: document.id }).encode();
413
+ const animated = document.attributes.find((v) => v instanceof types.DocumentAttributeAnimated);
414
+ const audio = document.attributes.find((v) => v instanceof types.DocumentAttributeAudio);
415
+ const fileName = document.attributes.find((v) => v instanceof types.DocumentAttributeFilename);
416
+ const sticker = document.attributes.find((v) => v instanceof types.DocumentAttributeSticker);
417
+ const video = document.attributes.find((v) => v instanceof types.DocumentAttributeVideo);
418
+ if (animated) {
419
+ const animation = constructAnimation(document, video, fileName, getFileId(FileType.Animation), fileUniqueId);
420
+ m = { ...messageMedia, animation };
421
+ }
422
+ else if (video) {
423
+ if (video.round_message) {
424
+ const videoNote = constructVideoNote(document, video, getFileId(FileType.VideoNote), fileUniqueId);
425
+ m = { ...message, videoNote };
365
426
  }
366
- else if (sticker) {
367
- message.sticker = await constructSticker(document, getFileId(FileType.Sticker), fileUniqueId, getStickerSetName);
427
+ else {
428
+ const video_ = constructVideo(document, video, fileName?.file_name, getFileId(FileType.Video), fileUniqueId);
429
+ m = { ...messageMedia, video: video_ };
368
430
  }
369
- else if (fileName) {
370
- message.document = constructDocument(document, fileName, getFileId(FileType.Document), fileUniqueId);
431
+ }
432
+ else if (audio) {
433
+ if (audio.voice) {
434
+ const voice = constructVoice(document, audio, getFileId(FileType.Voice), fileUniqueId);
435
+ m = { ...messageMedia, voice };
371
436
  }
372
437
  else {
373
- message.document = constructDocument(document, new types.DocumentAttributeFilename({ file_name: "Unknown" }), getFileId(FileType.Document), fileUniqueId);
438
+ const audio_ = constructAudio(document, audio, getFileId(FileType.Audio), fileUniqueId);
439
+ m = { ...messageMedia, audio: audio_ };
374
440
  }
375
441
  }
442
+ else if (sticker) {
443
+ const sticker = await constructSticker(document, getFileId(FileType.Sticker), fileUniqueId, getStickerSetName);
444
+ m = { ...message, sticker };
445
+ }
446
+ else if (fileName) {
447
+ const document_ = constructDocument(document, fileName, getFileId(FileType.Document), fileUniqueId);
448
+ m = { ...messageMedia, document: document_ };
449
+ }
450
+ else {
451
+ const document_ = constructDocument(document, new types.DocumentAttributeFilename({ file_name: "Unknown" }), getFileId(FileType.Document), fileUniqueId);
452
+ m = { ...messageMedia, document: document_ };
453
+ }
376
454
  }
377
- else if (message_.media instanceof types.MessageMediaContact) {
378
- message.contact = constructContact(message_.media);
379
- }
380
- else if (message_.media instanceof types.MessageMediaGame) {
381
- message.game = constructGame(message_.media);
382
- }
383
- else if (message_.media instanceof types.MessageMediaPoll) {
384
- message.poll = constructPoll(message_.media);
385
- }
386
- else if (message_.media instanceof types.MessageMediaVenue) {
387
- message.venue = constructVenue(message_.media);
388
- }
389
- else if (message_.media instanceof types.MessageMediaGeo || message_.media instanceof types.MessageMediaGeoLive) {
390
- message.location = constructLocation(message_.media);
391
- }
392
- else if (message_.media instanceof types.MessageMediaWebPage) {
393
- //
394
- }
395
- else {
396
- // not implemented
397
- UNREACHABLE();
398
- }
399
455
  }
400
- return cleanObject(message);
456
+ else if (message_.media instanceof types.MessageMediaContact) {
457
+ const contact = constructContact(message_.media);
458
+ m = { ...messageMedia, contact };
459
+ }
460
+ else if (message_.media instanceof types.MessageMediaGame) {
461
+ const game = constructGame(message_.media);
462
+ m = { ...message, game };
463
+ }
464
+ else if (message_.media instanceof types.MessageMediaPoll) {
465
+ const poll = constructPoll(message_.media);
466
+ m = { ...message, poll };
467
+ }
468
+ else if (message_.media instanceof types.MessageMediaVenue) {
469
+ const venue = constructVenue(message_.media);
470
+ m = { ...message, venue };
471
+ }
472
+ else if (message_.media instanceof types.MessageMediaGeo || message_.media instanceof types.MessageMediaGeoLive) {
473
+ const location = constructLocation(message_.media);
474
+ m = { ...message, location };
475
+ }
476
+ else if (message_.media instanceof types.MessageMediaWebPage) {
477
+ // TODO: implement
478
+ }
479
+ else if (message_.media instanceof types.MessageMediaGiveaway) {
480
+ const giveaway = constructGiveaway(message_.media);
481
+ m = { ...message, giveaway };
482
+ }
483
+ if (m == null) {
484
+ const unsupported = true;
485
+ m = { ...message, unsupported };
486
+ }
487
+ return cleanObject(m);
401
488
  }
@@ -1,7 +1,7 @@
1
1
  import { types } from "../2_tl.js";
2
2
  import { EntityGetter } from "./1__getters.js";
3
3
  import { User } from "./1_user.js";
4
- import { Message, MessageGetter } from "./3_message.js";
4
+ import { Message, MessageGetter } from "./4_message.js";
5
5
  export interface CallbackQuery {
6
6
  id: string;
7
7
  from: User;
@@ -0,0 +1,37 @@
1
+ import { enums, types } from "../2_tl.js";
2
+ import { ChatPhotoChat, ChatPhotoUser } from "./0_chat_photo.js";
3
+ import { EntityGetter } from "./1__getters.js";
4
+ import { ChatPChannel, ChatPGroup, ChatPPrivate, ChatPSupergroup } from "./1_chat_p.js";
5
+ import { StickerSetNameGetter } from "./1_sticker.js";
6
+ import { Message, MessageGetter } from "./4_message.js";
7
+ /** @unlisted */
8
+ export interface ChatBase {
9
+ order: string;
10
+ lastMessage?: Omit<Message, "replyToMessage">;
11
+ pinned: number;
12
+ }
13
+ /** @unlisted */
14
+ export interface ChatChannel extends ChatBase, ChatPChannel {
15
+ also?: string[];
16
+ photo?: ChatPhotoChat;
17
+ }
18
+ /** @unlisted */
19
+ export interface ChatSupergroup extends ChatBase, ChatPSupergroup {
20
+ also?: string[];
21
+ photo?: ChatPhotoChat;
22
+ }
23
+ /** @unlisted */
24
+ export interface ChatGroup extends ChatBase, ChatPGroup {
25
+ photo?: ChatPhotoChat;
26
+ }
27
+ /** @unlisted */
28
+ export interface ChatPrivate extends ChatBase, ChatPPrivate {
29
+ also?: string[];
30
+ photo?: ChatPhotoUser;
31
+ }
32
+ export type Chat = ChatChannel | ChatSupergroup | ChatGroup | ChatPrivate;
33
+ export declare function getChatOrder(lastMessage: Omit<Message, "replyToMessage"> | undefined, pinned: number): string;
34
+ export declare function constructChat(dialog: enums.Dialog, dialogs: types.messages.Dialogs | types.messages.DialogsSlice, pinnedChats: number[], getEntity: EntityGetter, getMessage: MessageGetter, getStickerSetName: StickerSetNameGetter): Promise<Chat>;
35
+ export declare function constructChat2(entity: types.User | types.Chat | types.ChatForbidden | types.Channel | types.ChannelForbidden, pinned: number, lastMessage: Omit<Message, "replyToMessage"> | undefined): Chat;
36
+ export declare function constructChat3(chatId: number, pinned: number, lastMessage: Omit<Message, "replyToMessage"> | undefined, getEntity: EntityGetter): Promise<Chat | null>;
37
+ export declare function constructChat4(chatId: number, pinned: number, lastMessageId: number, getEntity: EntityGetter, getMessage: MessageGetter): Promise<Chat | null>;
@@ -1,8 +1,8 @@
1
1
  import { cleanObject, UNREACHABLE } from "../1_utilities.js";
2
2
  import { chatIdToPeer, peerToChatId, types } from "../2_tl.js";
3
- import { constructChatP } from "./1_chat_p.js";
4
3
  import { constructChatPhoto } from "./0_chat_photo.js";
5
- import { constructMessage } from "./3_message.js";
4
+ import { constructChatP } from "./1_chat_p.js";
5
+ import { constructMessage } from "./4_message.js";
6
6
  function getChatPAlsoPhoto(entity) {
7
7
  let chatP;
8
8
  let also = undefined;