chapterjs 0.1.2 → 0.2.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 (318) hide show
  1. package/dist/assets/asset.d.ts +46 -0
  2. package/dist/assets/asset.js +86 -0
  3. package/dist/assets/public.d.ts +19 -0
  4. package/dist/assets/public.js +120 -0
  5. package/dist/cache/cache.d.ts +62 -0
  6. package/dist/cache/cache.js +80 -0
  7. package/dist/cache/store.d.ts +45 -0
  8. package/dist/cache/store.js +53 -0
  9. package/dist/cli/build.d.ts +41 -0
  10. package/dist/cli/build.js +205 -0
  11. package/dist/cli/cli.js +108 -25
  12. package/dist/cli/cluster.d.ts +70 -0
  13. package/dist/cli/cluster.js +213 -0
  14. package/dist/cli/dev.d.ts +18 -1
  15. package/dist/cli/dev.js +253 -198
  16. package/dist/cli/env.d.ts +31 -0
  17. package/dist/cli/env.js +93 -0
  18. package/dist/cli/log.d.ts +13 -0
  19. package/dist/cli/log.js +17 -0
  20. package/dist/cli/node-version.d.ts +8 -0
  21. package/dist/cli/node-version.js +13 -0
  22. package/dist/cli/preflight.d.ts +36 -0
  23. package/dist/cli/preflight.js +122 -0
  24. package/dist/cli/project.d.ts +135 -0
  25. package/dist/cli/project.js +517 -0
  26. package/dist/cli/start.d.ts +25 -0
  27. package/dist/cli/start.js +225 -0
  28. package/dist/commands/autocomplete.d.ts +13 -0
  29. package/dist/commands/autocomplete.js +159 -0
  30. package/dist/commands/command.d.ts +360 -0
  31. package/dist/commands/command.js +28 -0
  32. package/dist/commands/declaration.d.ts +77 -0
  33. package/dist/commands/declaration.js +492 -0
  34. package/dist/commands/register.d.ts +18 -0
  35. package/dist/commands/register.js +42 -0
  36. package/dist/commands/router.d.ts +20 -0
  37. package/dist/commands/router.js +228 -0
  38. package/dist/commands/tree.d.ts +47 -0
  39. package/dist/commands/tree.js +216 -0
  40. package/dist/commands/twins.d.ts +15 -0
  41. package/dist/commands/twins.js +78 -0
  42. package/dist/components/button.d.ts +79 -0
  43. package/dist/components/button.js +106 -0
  44. package/dist/components/component.d.ts +140 -0
  45. package/dist/components/component.js +39 -0
  46. package/dist/components/custom-id.d.ts +72 -0
  47. package/dist/components/custom-id.js +128 -0
  48. package/dist/components/declaration.d.ts +42 -0
  49. package/dist/components/declaration.js +342 -0
  50. package/dist/components/declared.d.ts +29 -0
  51. package/dist/components/declared.js +49 -0
  52. package/dist/components/embed.d.ts +29 -0
  53. package/dist/components/embed.js +11 -0
  54. package/dist/components/instance.d.ts +100 -0
  55. package/dist/components/instance.js +86 -0
  56. package/dist/components/layout.d.ts +103 -0
  57. package/dist/components/layout.js +279 -0
  58. package/dist/components/modal.d.ts +245 -0
  59. package/dist/components/modal.js +398 -0
  60. package/dist/components/options.d.ts +41 -0
  61. package/dist/components/options.js +101 -0
  62. package/dist/components/render.d.ts +12 -0
  63. package/dist/components/render.js +58 -0
  64. package/dist/components/router.d.ts +19 -0
  65. package/dist/components/router.js +251 -0
  66. package/dist/components/select.d.ts +146 -0
  67. package/dist/components/select.js +179 -0
  68. package/dist/core/bot.d.ts +99 -0
  69. package/dist/core/bot.js +174 -0
  70. package/dist/core/memory.d.ts +66 -0
  71. package/dist/core/memory.js +115 -0
  72. package/dist/discord/api.d.ts +112 -0
  73. package/dist/discord/api.js +115 -0
  74. package/dist/discord/cdn.d.ts +67 -0
  75. package/dist/discord/cdn.js +100 -0
  76. package/dist/discord/codes.d.ts +171 -0
  77. package/dist/discord/codes.js +421 -0
  78. package/dist/discord/endpoint.d.ts +56 -0
  79. package/dist/discord/endpoint.js +53 -0
  80. package/dist/discord/endpoints.d.ts +1529 -0
  81. package/dist/discord/endpoints.js +1139 -0
  82. package/dist/discord/formatting.d.ts +67 -0
  83. package/dist/discord/formatting.js +87 -0
  84. package/dist/discord/index.d.ts +10 -0
  85. package/dist/discord/index.js +13 -0
  86. package/dist/discord/intents.d.ts +48 -0
  87. package/dist/discord/intents.js +128 -0
  88. package/dist/discord/permissions.d.ts +94 -0
  89. package/dist/discord/permissions.js +185 -0
  90. package/dist/discord/snowflake.d.ts +21 -0
  91. package/dist/discord/snowflake.js +36 -0
  92. package/dist/discord/types/application-command.d.ts +332 -0
  93. package/dist/discord/types/application-command.js +48 -0
  94. package/dist/discord/types/application-role-connection-metadata.d.ts +42 -0
  95. package/dist/discord/types/application-role-connection-metadata.js +22 -0
  96. package/dist/discord/types/application.d.ts +208 -0
  97. package/dist/discord/types/application.js +48 -0
  98. package/dist/discord/types/audit-log.d.ts +255 -0
  99. package/dist/discord/types/audit-log.js +144 -0
  100. package/dist/discord/types/auto-moderation.d.ts +167 -0
  101. package/dist/discord/types/auto-moderation.js +52 -0
  102. package/dist/discord/types/channel.d.ts +557 -0
  103. package/dist/discord/types/channel.js +88 -0
  104. package/dist/discord/types/common.d.ts +54 -0
  105. package/dist/discord/types/common.js +38 -0
  106. package/dist/discord/types/component.d.ts +775 -0
  107. package/dist/discord/types/component.js +76 -0
  108. package/dist/discord/types/emoji.d.ts +74 -0
  109. package/dist/discord/types/emoji.js +1 -0
  110. package/dist/discord/types/entitlement.d.ts +84 -0
  111. package/dist/discord/types/entitlement.js +22 -0
  112. package/dist/discord/types/gateway-events.d.ts +1148 -0
  113. package/dist/discord/types/gateway-events.js +54 -0
  114. package/dist/discord/types/gateway.d.ts +38 -0
  115. package/dist/discord/types/gateway.js +1 -0
  116. package/dist/discord/types/guild-scheduled-event.d.ts +257 -0
  117. package/dist/discord/types/guild-scheduled-event.js +68 -0
  118. package/dist/discord/types/guild-template.d.ts +51 -0
  119. package/dist/discord/types/guild-template.js +1 -0
  120. package/dist/discord/types/guild.d.ts +910 -0
  121. package/dist/discord/types/guild.js +153 -0
  122. package/dist/discord/types/index.d.ts +31 -0
  123. package/dist/discord/types/index.js +31 -0
  124. package/dist/discord/types/interaction.d.ts +321 -0
  125. package/dist/discord/types/interaction.js +47 -0
  126. package/dist/discord/types/invite.d.ts +158 -0
  127. package/dist/discord/types/invite.js +39 -0
  128. package/dist/discord/types/message.d.ts +834 -0
  129. package/dist/discord/types/message.js +159 -0
  130. package/dist/discord/types/oauth2.d.ts +22 -0
  131. package/dist/discord/types/oauth2.js +1 -0
  132. package/dist/discord/types/permissions.d.ts +183 -0
  133. package/dist/discord/types/permissions.js +118 -0
  134. package/dist/discord/types/poll.d.ts +106 -0
  135. package/dist/discord/types/poll.js +8 -0
  136. package/dist/discord/types/sku.d.ts +47 -0
  137. package/dist/discord/types/sku.js +26 -0
  138. package/dist/discord/types/soundboard.d.ts +71 -0
  139. package/dist/discord/types/soundboard.js +1 -0
  140. package/dist/discord/types/stage-instance.d.ts +58 -0
  141. package/dist/discord/types/stage-instance.js +10 -0
  142. package/dist/discord/types/sticker.d.ts +115 -0
  143. package/dist/discord/types/sticker.js +20 -0
  144. package/dist/discord/types/subscription.d.ts +54 -0
  145. package/dist/discord/types/subscription.js +12 -0
  146. package/dist/discord/types/team.d.ts +55 -0
  147. package/dist/discord/types/team.js +21 -0
  148. package/dist/discord/types/user.d.ts +273 -0
  149. package/dist/discord/types/user.js +83 -0
  150. package/dist/discord/types/voice.d.ts +72 -0
  151. package/dist/discord/types/voice.js +1 -0
  152. package/dist/discord/types/webhook.d.ts +184 -0
  153. package/dist/discord/types/webhook.js +12 -0
  154. package/dist/events/declaration.d.ts +16 -0
  155. package/dist/events/declaration.js +80 -0
  156. package/dist/events/event.d.ts +45 -0
  157. package/dist/events/event.js +34 -0
  158. package/dist/events/registry.d.ts +697 -0
  159. package/dist/events/registry.js +839 -0
  160. package/dist/events/router.d.ts +46 -0
  161. package/dist/events/router.js +133 -0
  162. package/dist/gateway/errors.d.ts +18 -0
  163. package/dist/gateway/errors.js +47 -0
  164. package/dist/gateway/gateway.d.ts +64 -0
  165. package/dist/gateway/gateway.js +117 -0
  166. package/dist/gateway/identify-queue.d.ts +25 -0
  167. package/dist/gateway/identify-queue.js +29 -0
  168. package/dist/gateway/shard.d.ts +94 -0
  169. package/dist/gateway/shard.js +414 -0
  170. package/dist/gateway/state.d.ts +11 -0
  171. package/dist/gateway/state.js +184 -0
  172. package/dist/index.d.ts +57 -18
  173. package/dist/index.js +40 -12
  174. package/dist/interactions/cooldown.d.ts +33 -0
  175. package/dist/interactions/cooldown.js +74 -0
  176. package/dist/interactions/dispatch.d.ts +91 -0
  177. package/dist/interactions/dispatch.js +110 -0
  178. package/dist/loader/generated.d.ts +10 -0
  179. package/dist/loader/generated.js +80 -0
  180. package/dist/loader/hot.d.ts +13 -0
  181. package/dist/loader/hot.js +85 -0
  182. package/dist/loader/loader.d.ts +85 -0
  183. package/dist/loader/loader.js +119 -0
  184. package/dist/loader/locate.d.ts +10 -0
  185. package/dist/loader/locate.js +36 -0
  186. package/dist/loader/watch.d.ts +17 -0
  187. package/dist/loader/watch.js +66 -0
  188. package/dist/main.d.ts +2 -0
  189. package/dist/main.js +5 -0
  190. package/dist/messages/commands.d.ts +23 -0
  191. package/dist/messages/commands.js +142 -0
  192. package/dist/messages/declaration.d.ts +89 -0
  193. package/dist/messages/declaration.js +455 -0
  194. package/dist/messages/messages.d.ts +241 -0
  195. package/dist/messages/messages.js +31 -0
  196. package/dist/messages/phrases.d.ts +23 -0
  197. package/dist/messages/phrases.js +44 -0
  198. package/dist/messages/translate.d.ts +100 -0
  199. package/dist/messages/translate.js +249 -0
  200. package/dist/presence/declaration.d.ts +19 -0
  201. package/dist/presence/declaration.js +118 -0
  202. package/dist/presence/presence.d.ts +57 -0
  203. package/dist/presence/presence.js +27 -0
  204. package/dist/rest/errors.d.ts +55 -0
  205. package/dist/rest/errors.js +92 -0
  206. package/dist/rest/rate-limiter.d.ts +46 -0
  207. package/dist/rest/rate-limiter.js +153 -0
  208. package/dist/rest/rest.d.ts +63 -0
  209. package/dist/rest/rest.js +194 -0
  210. package/dist/structures/base.d.ts +48 -0
  211. package/dist/structures/base.js +84 -0
  212. package/dist/structures/channel.d.ts +380 -0
  213. package/dist/structures/channel.js +627 -0
  214. package/dist/structures/context.d.ts +30 -0
  215. package/dist/structures/context.js +7 -0
  216. package/dist/structures/emoji.d.ts +46 -0
  217. package/dist/structures/emoji.js +65 -0
  218. package/dist/structures/entities.d.ts +62 -0
  219. package/dist/structures/entities.js +226 -0
  220. package/dist/structures/guild.d.ts +348 -0
  221. package/dist/structures/guild.js +466 -0
  222. package/dist/structures/interaction.d.ts +197 -0
  223. package/dist/structures/interaction.js +396 -0
  224. package/dist/structures/invite.d.ts +38 -0
  225. package/dist/structures/invite.js +57 -0
  226. package/dist/structures/known.d.ts +28 -0
  227. package/dist/structures/known.js +58 -0
  228. package/dist/structures/member.d.ts +140 -0
  229. package/dist/structures/member.js +260 -0
  230. package/dist/structures/message.d.ts +197 -0
  231. package/dist/structures/message.js +268 -0
  232. package/dist/structures/payload.d.ts +91 -0
  233. package/dist/structures/payload.js +184 -0
  234. package/dist/structures/role.d.ts +69 -0
  235. package/dist/structures/role.js +112 -0
  236. package/dist/structures/user.d.ts +59 -0
  237. package/dist/structures/user.js +94 -0
  238. package/dist/structures/webhook.d.ts +46 -0
  239. package/dist/structures/webhook.js +79 -0
  240. package/dist/tasks/declaration.d.ts +16 -0
  241. package/dist/tasks/declaration.js +56 -0
  242. package/dist/tasks/schedule.d.ts +54 -0
  243. package/dist/tasks/schedule.js +236 -0
  244. package/dist/tasks/scheduler.d.ts +35 -0
  245. package/dist/tasks/scheduler.js +107 -0
  246. package/dist/tasks/task.d.ts +75 -0
  247. package/dist/tasks/task.js +27 -0
  248. package/dist/util/case.d.ts +13 -0
  249. package/dist/util/case.js +54 -0
  250. package/dist/util/duration.d.ts +8 -0
  251. package/dist/util/duration.js +29 -0
  252. package/dist/util/websocket.d.ts +9 -0
  253. package/dist/util/websocket.js +31 -0
  254. package/dist/voice/connection.d.ts +90 -0
  255. package/dist/voice/connection.js +494 -0
  256. package/dist/voice/dave.d.ts +109 -0
  257. package/dist/voice/dave.js +245 -0
  258. package/dist/voice/opus.d.ts +19 -0
  259. package/dist/voice/opus.js +273 -0
  260. package/dist/voice/session.d.ts +55 -0
  261. package/dist/voice/session.js +405 -0
  262. package/dist/voice/source.d.ts +22 -0
  263. package/dist/voice/source.js +195 -0
  264. package/dist/voice/transport.d.ts +43 -0
  265. package/dist/voice/transport.js +140 -0
  266. package/dist/voice/usage.d.ts +4 -0
  267. package/dist/voice/usage.js +33 -0
  268. package/package.json +26 -7
  269. package/vendor/dave/LICENSE +231 -0
  270. package/vendor/dave/libdave.d.mts +99 -0
  271. package/vendor/dave/libdave.mjs +2 -0
  272. package/vendor/dave/libdave.wasm +0 -0
  273. package/dist/components.d.ts +0 -97
  274. package/dist/components.js +0 -260
  275. package/dist/context.d.ts +0 -72
  276. package/dist/context.js +0 -273
  277. package/dist/discord/client.d.ts +0 -35
  278. package/dist/discord/client.js +0 -66
  279. package/dist/discord/constants.d.ts +0 -49
  280. package/dist/discord/constants.js +0 -61
  281. package/dist/discord/events.d.ts +0 -129
  282. package/dist/discord/events.js +0 -102
  283. package/dist/discord/gateway.d.ts +0 -61
  284. package/dist/discord/gateway.js +0 -320
  285. package/dist/discord/payloads.d.ts +0 -275
  286. package/dist/discord/payloads.js +0 -3
  287. package/dist/discord/presence.d.ts +0 -42
  288. package/dist/discord/presence.js +0 -51
  289. package/dist/discord/rest.d.ts +0 -49
  290. package/dist/discord/rest.js +0 -271
  291. package/dist/discord/types.d.ts +0 -334
  292. package/dist/discord/types.js +0 -4
  293. package/dist/events.d.ts +0 -94
  294. package/dist/events.js +0 -255
  295. package/dist/presence.d.ts +0 -92
  296. package/dist/presence.js +0 -250
  297. package/dist/structures/Channel.d.ts +0 -110
  298. package/dist/structures/Channel.js +0 -171
  299. package/dist/structures/Guild.d.ts +0 -70
  300. package/dist/structures/Guild.js +0 -105
  301. package/dist/structures/Interaction.d.ts +0 -113
  302. package/dist/structures/Interaction.js +0 -274
  303. package/dist/structures/Member.d.ts +0 -70
  304. package/dist/structures/Member.js +0 -124
  305. package/dist/structures/Message.d.ts +0 -87
  306. package/dist/structures/Message.js +0 -182
  307. package/dist/structures/Reaction.d.ts +0 -38
  308. package/dist/structures/Reaction.js +0 -64
  309. package/dist/structures/Role.d.ts +0 -43
  310. package/dist/structures/Role.js +0 -77
  311. package/dist/structures/User.d.ts +0 -41
  312. package/dist/structures/User.js +0 -79
  313. package/dist/structures/utils.d.ts +0 -72
  314. package/dist/structures/utils.js +0 -59
  315. package/dist/utils/errors.d.ts +0 -5
  316. package/dist/utils/errors.js +0 -28
  317. package/dist/utils/modules.d.ts +0 -39
  318. package/dist/utils/modules.js +0 -156
@@ -0,0 +1,36 @@
1
+ import { type GatewayIntentName } from '../discord/intents.js';
2
+ import { type RawApplication } from '../discord/types/application.js';
3
+ import type { RawGuild } from '../discord/types/guild.js';
4
+ import type { Rest } from '../rest/rest.js';
5
+ import type { Log } from './log.js';
6
+ export interface PreflightOptions {
7
+ rest: Rest;
8
+ log: Log;
9
+ /** Whether a person is watching: problems are then waited out. */
10
+ interactive: boolean;
11
+ /** How often a fix is looked for while waiting, in milliseconds. */
12
+ pollInterval: number;
13
+ /** Stops waiting (the user pressed Ctrl+C). */
14
+ signal: AbortSignal;
15
+ }
16
+ /** A problem that was explained and that stops the command. */
17
+ export declare class PreflightFailure extends Error {
18
+ }
19
+ /** The privileged intents among `intents` that the application lacks. */
20
+ export declare function missingPrivilegedIntents(intents: number, application: Pick<RawApplication, 'flags'>): GatewayIntentName[];
21
+ /**
22
+ * The link that adds the bot to one server.
23
+ * @see https://docs.discord.com/developers/topics/oauth2#bot-authorization-flow
24
+ */
25
+ export declare function inviteUrl(applicationId: string, guildId: string): string;
26
+ /** Checks the token and returns the application of the bot. */
27
+ export declare function fetchApplication(rest: Rest): Promise<RawApplication>;
28
+ /** Makes sure the bot is in the dev server, and returns that server. */
29
+ export declare function ensureInDevGuild(options: PreflightOptions, applicationId: string, guildId: string): Promise<RawGuild>;
30
+ /**
31
+ * Makes sure the privileged intents the project needs are enabled.
32
+ * `filesByIntent` says which files need each intent.
33
+ */
34
+ export declare function ensurePrivilegedIntents(options: PreflightOptions, application: RawApplication, intents: number, filesByIntent: (intent: GatewayIntentName) => string[]): Promise<void>;
35
+ /** The intents a number contains, as the docs name them, for messages. */
36
+ export declare function describeIntents(intents: number): string;
@@ -0,0 +1,122 @@
1
+ // What is checked before connecting: each problem is explained with how to
2
+ // fix it, and when a person is there, the CLI waits for the fix instead of
3
+ // making them start it again.
4
+ import { setTimeout as sleep } from 'node:timers/promises';
5
+ import { GetCurrentApplication, GetGuild } from '../discord/endpoints.js';
6
+ import { intentNames, PRIVILEGED_INTENTS, } from '../discord/intents.js';
7
+ import { ApplicationFlags, } from '../discord/types/application.js';
8
+ import { PermissionFlags } from '../discord/types/permissions.js';
9
+ import { DiscordApiError } from '../rest/errors.js';
10
+ /** A problem that was explained and that stops the command. */
11
+ export class PreflightFailure extends Error {
12
+ }
13
+ /**
14
+ * The flags an application has when a privileged intent is enabled for it:
15
+ * the plain one once Discord approved it for a verified bot, the "limited"
16
+ * one for a bot in fewer than 100 servers.
17
+ * @see https://docs.discord.com/developers/resources/application#application-object-application-flags
18
+ */
19
+ const INTENT_FLAGS = {
20
+ GuildPresences: ApplicationFlags.GatewayPresence | ApplicationFlags.GatewayPresenceLimited,
21
+ GuildMembers: ApplicationFlags.GatewayGuildMembers |
22
+ ApplicationFlags.GatewayGuildMembersLimited,
23
+ MessageContent: ApplicationFlags.GatewayMessageContent |
24
+ ApplicationFlags.GatewayMessageContentLimited,
25
+ };
26
+ /** What the Developer Portal calls each privileged intent. */
27
+ const PORTAL_NAMES = {
28
+ GuildPresences: 'Presence Intent',
29
+ GuildMembers: 'Server Members Intent',
30
+ MessageContent: 'Message Content Intent',
31
+ };
32
+ /** The privileged intents among `intents` that the application lacks. */
33
+ export function missingPrivilegedIntents(intents, application) {
34
+ const flags = application.flags ?? 0;
35
+ return intentNames(intents).filter(name => PRIVILEGED_INTENTS.includes(name) && (flags & INTENT_FLAGS[name]) === 0);
36
+ }
37
+ /**
38
+ * The link that adds the bot to one server.
39
+ * @see https://docs.discord.com/developers/topics/oauth2#bot-authorization-flow
40
+ */
41
+ export function inviteUrl(applicationId, guildId) {
42
+ const query = new URLSearchParams({
43
+ client_id: applicationId,
44
+ scope: 'bot applications.commands',
45
+ // A dev server is a playground: the bot can do everything there.
46
+ permissions: PermissionFlags.Administrator.toString(),
47
+ guild_id: guildId,
48
+ disable_guild_select: 'true',
49
+ });
50
+ return `https://discord.com/oauth2/authorize?${query}`;
51
+ }
52
+ /** Checks the token and returns the application of the bot. */
53
+ export function fetchApplication(rest) {
54
+ return rest.request(GetCurrentApplication, []);
55
+ }
56
+ async function waitFor(options, check) {
57
+ for (;;) {
58
+ await sleep(options.pollInterval, undefined, { signal: options.signal });
59
+ const result = await check();
60
+ if (result !== null)
61
+ return result;
62
+ }
63
+ }
64
+ /** Makes sure the bot is in the dev server, and returns that server. */
65
+ export async function ensureInDevGuild(options, applicationId, guildId) {
66
+ const fetch = async () => {
67
+ try {
68
+ return await options.rest.request(GetGuild, [guildId]);
69
+ }
70
+ catch (error) {
71
+ // 10004 Unknown Guild, 50001 Missing Access: the bot is not in it.
72
+ if (error instanceof DiscordApiError &&
73
+ (error.code === 10004 || error.code === 50001)) {
74
+ return null;
75
+ }
76
+ throw error;
77
+ }
78
+ };
79
+ const guild = await fetch();
80
+ if (guild)
81
+ return guild;
82
+ const explanation = `Your bot is not in your dev server yet (DEV_GUILD_ID=${guildId}).\nOpen this link to add it:\n${inviteUrl(applicationId, guildId)}\nIf the link shows another server, DEV_GUILD_ID is not the ID of a server you manage.`;
83
+ if (!options.interactive) {
84
+ options.log.error(explanation);
85
+ throw new PreflightFailure();
86
+ }
87
+ options.log.warn(`${explanation}\nWaiting for the bot to be added...`);
88
+ const joined = await waitFor(options, fetch);
89
+ options.log.success(`The bot joined ${joined.name}`);
90
+ return joined;
91
+ }
92
+ /**
93
+ * Makes sure the privileged intents the project needs are enabled.
94
+ * `filesByIntent` says which files need each intent.
95
+ */
96
+ export async function ensurePrivilegedIntents(options, application, intents, filesByIntent) {
97
+ let missing = missingPrivilegedIntents(intents, application);
98
+ if (missing.length === 0)
99
+ return;
100
+ const list = missing
101
+ .map(name => `- ${PORTAL_NAMES[name]}, needed by ${filesByIntent(name).join(', ')}`)
102
+ .join('\n');
103
+ const explanation = `Your files need ${missing.length === 1 ? 'an option that is' : 'options that are'} not enabled for your bot:\n${list}\nEnable ${missing.length === 1 ? 'it' : 'them'} under "Privileged Gateway Intents", then save:\nhttps://discord.com/developers/applications/${application.id}/bot`;
104
+ if (!options.interactive) {
105
+ options.log.error(explanation);
106
+ throw new PreflightFailure();
107
+ }
108
+ options.log.warn(`${explanation}\nWaiting for you to enable ${missing.length === 1 ? 'it' : 'them'}...`);
109
+ await waitFor(options, async () => {
110
+ missing = missingPrivilegedIntents(intents, await fetchApplication(options.rest));
111
+ return missing.length === 0 ? true : null;
112
+ });
113
+ options.log.success('Privileged intents enabled');
114
+ }
115
+ /** The intents a number contains, as the docs name them, for messages. */
116
+ export function describeIntents(intents) {
117
+ return intentNames(intents)
118
+ .map(name => name
119
+ .replace(/[A-Z]/g, (letter, index) => index === 0 ? letter : `_${letter}`)
120
+ .toUpperCase())
121
+ .join(', ');
122
+ }
@@ -0,0 +1,135 @@
1
+ import { type CommandEntry } from '../commands/tree.js';
2
+ import { type ComponentEntry } from '../components/router.js';
3
+ import { type LoadedPresence } from '../presence/declaration.js';
4
+ import { type DeclaredCommand, type DeclaredLanguage } from '../messages/declaration.js';
5
+ import { type LoadedMessages } from '../messages/translate.js';
6
+ import type { Locale } from '../discord/types/common.js';
7
+ import { type TaskEntry } from '../tasks/scheduler.js';
8
+ import { type Bot, type BotOptions } from '../core/bot.js';
9
+ import { type GatewayIntentName } from '../discord/intents.js';
10
+ import { type LoadedEvent } from '../events/router.js';
11
+ import { type BuiltFile, type Declaration, type FailedFile } from '../loader/loader.js';
12
+ import type { Log } from './log.js';
13
+ export interface ProjectOptions {
14
+ /** The folder of the project. */
15
+ cwd: string;
16
+ /** The version of the framework. */
17
+ version: string;
18
+ log: Log;
19
+ /**
20
+ * The files of the project as `chapterjs build` kept them. Without it,
21
+ * they are read from the `src` folder.
22
+ */
23
+ built?: readonly BuiltFile[];
24
+ /**
25
+ * Whether the files join voice channels, as `chapterjs build` found.
26
+ * Without it, the files of `src` are read on every load.
27
+ */
28
+ joinsVoice?: boolean;
29
+ /** Only tests change this. */
30
+ deferAfter?: number;
31
+ }
32
+ /** What the types of a project are written from, once its files ran. */
33
+ export interface TypesInfo {
34
+ /** Every language declared, with where. */
35
+ languages: readonly DeclaredLanguage[];
36
+ /** The language `t` is typed from, when known. */
37
+ defaultLocale?: Locale;
38
+ /** The languages that say `default: true`, as they are now. */
39
+ languageDefaults: readonly Locale[];
40
+ /** Every command, and whether its file describes it. */
41
+ commands: readonly DeclaredCommand[];
42
+ }
43
+ /**
44
+ * Writes the types of a project (`.chapterjs/`): what the project adds to
45
+ * 'chapterjs', like the files of `public/`, its languages and its
46
+ * commands. With the project as it loaded (`info`), a language only
47
+ * offers the commands without `description`, `t` is typed from the
48
+ * default language and `default: true` is refused in every language that
49
+ * says it when another one does; without it (`sync`, which runs nothing),
50
+ * the commands and the languages are found by reading the files, every
51
+ * command is offered, and the first language or the one that says
52
+ * `default: true` types `t`.
53
+ * @returns how many files were written
54
+ */
55
+ export declare function writeTypes(cwd: string, info?: TypesInfo): Promise<number>;
56
+ /** The kinds of declarations a project is made of: one per feature. */
57
+ export declare const DECLARATIONS: readonly Declaration<unknown>[];
58
+ /** What a bot of the project is connected with. */
59
+ export interface ConnectOptions {
60
+ token: string;
61
+ /** Another REST API than Discord's: only tests use it. */
62
+ apiUrl?: string | undefined;
63
+ guildFilter?: BotOptions['guildFilter'];
64
+ /** Whether what happens outside servers is for this bot. */
65
+ privateEvents?: boolean;
66
+ shards?: BotOptions['shards'];
67
+ identifyGate?: BotOptions['identifyGate'];
68
+ /** The share of the requests per second this process may send. */
69
+ globalLimit?: number | undefined;
70
+ /** Only tests change this. */
71
+ identifyInterval?: number | undefined;
72
+ /** Discord refused the bot for good. */
73
+ onFatal: (bot: Bot) => void;
74
+ }
75
+ /** The files of a project, and what runs them. */
76
+ export interface Project {
77
+ /**
78
+ * The last version of each declaration that loaded, by the file and the
79
+ * export it comes from (`src/ping.ts#default`): what the bot runs.
80
+ */
81
+ readonly events: ReadonlyMap<string, LoadedEvent>;
82
+ readonly commands: ReadonlyMap<string, CommandEntry>;
83
+ readonly components: ReadonlyMap<string, ComponentEntry>;
84
+ readonly tasks: ReadonlyMap<string, TaskEntry>;
85
+ /** The presence declared, or `null` without one. */
86
+ readonly presence: LoadedPresence | null;
87
+ /** The languages of the project, assembled, or `null` without any. */
88
+ readonly messages: LoadedMessages | null;
89
+ /** What the types of the project are written from, as it loaded. */
90
+ typesInfo(): TypesInfo;
91
+ /**
92
+ * Loads every file (again). A declaration that fails is returned; it
93
+ * keeps its last working version when it had one.
94
+ */
95
+ load(): Promise<FailedFile[]>;
96
+ /** Shows a failure with its file (and export) and line. */
97
+ report(failure: FailedFile): void;
98
+ /** "2 commands, 3 events, 4 components, a presence loaded". */
99
+ summary(): string;
100
+ isEmpty(): boolean;
101
+ /** The files that make an intent necessary. */
102
+ filesNeeding(intent: GatewayIntentName): string[];
103
+ /**
104
+ * The intents the files need right now. Without `privateEvents`, what
105
+ * only serves private messages is left out: nothing is asked to Discord
106
+ * for what the bot will not listen to.
107
+ */
108
+ intents(privateEvents?: boolean): number;
109
+ /** Creates a bot that runs the files, and connects it. */
110
+ connect(options: ConnectOptions): Promise<Bot>;
111
+ /** Runs the files of the `ready` event: the bot knows its servers. */
112
+ ready(bot: Bot): void;
113
+ /**
114
+ * Gives the bot the presence of the project as it is now (Discord's
115
+ * default without a presence file). Nothing is sent when it did not
116
+ * change since the bot was given one.
117
+ */
118
+ applyPresence(bot: Bot): boolean;
119
+ /**
120
+ * Starts the tasks of the project, with the bot `current` returns (none
121
+ * while it reconnects). Only one process of a bot runs them.
122
+ */
123
+ startTasks(current: () => Bot | null): void;
124
+ /** Stops the tasks: nothing runs after this. */
125
+ stopTasks(): void;
126
+ /** Looks after the memory of the bot `current` returns. */
127
+ watchMemory(current: () => Bot | null): {
128
+ stop(): void;
129
+ };
130
+ }
131
+ /** Whether the folder is a project: it has a `src` folder. */
132
+ export declare function hasSources(cwd: string, log: Log): Promise<boolean>;
133
+ export declare function createProject(options: ProjectOptions): Project;
134
+ /** Says what went wrong in words the developer can act on. */
135
+ export declare function explain(error: unknown, log: Log): void;