chapterjs 0.1.1 → 0.1.4

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 (320) 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 +206 -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 +252 -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 +122 -0
  25. package/dist/cli/project.js +452 -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 +346 -0
  31. package/dist/commands/command.js +28 -0
  32. package/dist/commands/convention.d.ts +64 -0
  33. package/dist/commands/convention.js +464 -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 +43 -0
  39. package/dist/commands/tree.js +206 -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 +108 -0
  44. package/dist/components/component.d.ts +140 -0
  45. package/dist/components/component.js +39 -0
  46. package/dist/components/convention.d.ts +35 -0
  47. package/dist/components/convention.js +339 -0
  48. package/dist/components/custom-id.d.ts +72 -0
  49. package/dist/components/custom-id.js +128 -0
  50. package/dist/components/embed.d.ts +28 -0
  51. package/dist/components/embed.js +11 -0
  52. package/dist/components/file.d.ts +30 -0
  53. package/dist/components/file.js +52 -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 +244 -0
  59. package/dist/components/modal.js +399 -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 +18 -0
  65. package/dist/components/router.js +256 -0
  66. package/dist/components/select.d.ts +144 -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/convention.d.ts +25 -0
  155. package/dist/events/convention.js +97 -0
  156. package/dist/events/event.d.ts +8 -0
  157. package/dist/events/event.js +20 -0
  158. package/dist/events/registry.d.ts +706 -0
  159. package/dist/events/registry.js +839 -0
  160. package/dist/events/router.d.ts +45 -0
  161. package/dist/events/router.js +133 -0
  162. package/dist/events/types.d.ts +7 -0
  163. package/dist/events/types.js +48 -0
  164. package/dist/gateway/errors.d.ts +18 -0
  165. package/dist/gateway/errors.js +47 -0
  166. package/dist/gateway/gateway.d.ts +64 -0
  167. package/dist/gateway/gateway.js +117 -0
  168. package/dist/gateway/identify-queue.d.ts +25 -0
  169. package/dist/gateway/identify-queue.js +29 -0
  170. package/dist/gateway/shard.d.ts +94 -0
  171. package/dist/gateway/shard.js +414 -0
  172. package/dist/gateway/state.d.ts +11 -0
  173. package/dist/gateway/state.js +184 -0
  174. package/dist/index.d.ts +55 -18
  175. package/dist/index.js +38 -12
  176. package/dist/interactions/cooldown.d.ts +33 -0
  177. package/dist/interactions/cooldown.js +74 -0
  178. package/dist/interactions/dispatch.d.ts +91 -0
  179. package/dist/interactions/dispatch.js +110 -0
  180. package/dist/loader/generated.d.ts +37 -0
  181. package/dist/loader/generated.js +114 -0
  182. package/dist/loader/hot.d.ts +13 -0
  183. package/dist/loader/hot.js +85 -0
  184. package/dist/loader/loader.d.ts +72 -0
  185. package/dist/loader/loader.js +135 -0
  186. package/dist/loader/locate.d.ts +10 -0
  187. package/dist/loader/locate.js +36 -0
  188. package/dist/loader/watch.d.ts +17 -0
  189. package/dist/loader/watch.js +66 -0
  190. package/dist/main.d.ts +3 -0
  191. package/dist/main.js +6 -0
  192. package/dist/messages/commands.d.ts +23 -0
  193. package/dist/messages/commands.js +123 -0
  194. package/dist/messages/convention.d.ts +89 -0
  195. package/dist/messages/convention.js +347 -0
  196. package/dist/messages/messages.d.ts +219 -0
  197. package/dist/messages/messages.js +30 -0
  198. package/dist/messages/phrases.d.ts +23 -0
  199. package/dist/messages/phrases.js +44 -0
  200. package/dist/messages/translate.d.ts +100 -0
  201. package/dist/messages/translate.js +249 -0
  202. package/dist/presence/convention.d.ts +26 -0
  203. package/dist/presence/convention.js +133 -0
  204. package/dist/presence/presence.d.ts +57 -0
  205. package/dist/presence/presence.js +27 -0
  206. package/dist/rest/errors.d.ts +55 -0
  207. package/dist/rest/errors.js +92 -0
  208. package/dist/rest/rate-limiter.d.ts +46 -0
  209. package/dist/rest/rate-limiter.js +153 -0
  210. package/dist/rest/rest.d.ts +63 -0
  211. package/dist/rest/rest.js +194 -0
  212. package/dist/structures/base.d.ts +48 -0
  213. package/dist/structures/base.js +84 -0
  214. package/dist/structures/channel.d.ts +380 -0
  215. package/dist/structures/channel.js +627 -0
  216. package/dist/structures/context.d.ts +30 -0
  217. package/dist/structures/context.js +7 -0
  218. package/dist/structures/emoji.d.ts +46 -0
  219. package/dist/structures/emoji.js +65 -0
  220. package/dist/structures/entities.d.ts +62 -0
  221. package/dist/structures/entities.js +226 -0
  222. package/dist/structures/guild.d.ts +348 -0
  223. package/dist/structures/guild.js +466 -0
  224. package/dist/structures/interaction.d.ts +197 -0
  225. package/dist/structures/interaction.js +396 -0
  226. package/dist/structures/invite.d.ts +38 -0
  227. package/dist/structures/invite.js +57 -0
  228. package/dist/structures/known.d.ts +28 -0
  229. package/dist/structures/known.js +58 -0
  230. package/dist/structures/member.d.ts +140 -0
  231. package/dist/structures/member.js +260 -0
  232. package/dist/structures/message.d.ts +197 -0
  233. package/dist/structures/message.js +268 -0
  234. package/dist/structures/payload.d.ts +91 -0
  235. package/dist/structures/payload.js +184 -0
  236. package/dist/structures/role.d.ts +69 -0
  237. package/dist/structures/role.js +112 -0
  238. package/dist/structures/user.d.ts +59 -0
  239. package/dist/structures/user.js +94 -0
  240. package/dist/structures/webhook.d.ts +46 -0
  241. package/dist/structures/webhook.js +79 -0
  242. package/dist/tasks/convention.d.ts +26 -0
  243. package/dist/tasks/convention.js +78 -0
  244. package/dist/tasks/schedule.d.ts +54 -0
  245. package/dist/tasks/schedule.js +236 -0
  246. package/dist/tasks/scheduler.d.ts +33 -0
  247. package/dist/tasks/scheduler.js +107 -0
  248. package/dist/tasks/task.d.ts +76 -0
  249. package/dist/tasks/task.js +28 -0
  250. package/dist/util/case.d.ts +13 -0
  251. package/dist/util/case.js +54 -0
  252. package/dist/util/duration.d.ts +8 -0
  253. package/dist/util/duration.js +29 -0
  254. package/dist/util/websocket.d.ts +9 -0
  255. package/dist/util/websocket.js +31 -0
  256. package/dist/voice/connection.d.ts +90 -0
  257. package/dist/voice/connection.js +494 -0
  258. package/dist/voice/dave.d.ts +109 -0
  259. package/dist/voice/dave.js +245 -0
  260. package/dist/voice/opus.d.ts +19 -0
  261. package/dist/voice/opus.js +273 -0
  262. package/dist/voice/session.d.ts +55 -0
  263. package/dist/voice/session.js +405 -0
  264. package/dist/voice/source.d.ts +22 -0
  265. package/dist/voice/source.js +195 -0
  266. package/dist/voice/transport.d.ts +43 -0
  267. package/dist/voice/transport.js +140 -0
  268. package/dist/voice/usage.d.ts +4 -0
  269. package/dist/voice/usage.js +33 -0
  270. package/package.json +26 -7
  271. package/vendor/dave/LICENSE +231 -0
  272. package/vendor/dave/libdave.d.mts +99 -0
  273. package/vendor/dave/libdave.mjs +2 -0
  274. package/vendor/dave/libdave.wasm +0 -0
  275. package/dist/components.d.ts +0 -97
  276. package/dist/components.js +0 -260
  277. package/dist/context.d.ts +0 -72
  278. package/dist/context.js +0 -273
  279. package/dist/discord/client.d.ts +0 -35
  280. package/dist/discord/client.js +0 -66
  281. package/dist/discord/constants.d.ts +0 -49
  282. package/dist/discord/constants.js +0 -61
  283. package/dist/discord/events.d.ts +0 -129
  284. package/dist/discord/events.js +0 -102
  285. package/dist/discord/gateway.d.ts +0 -61
  286. package/dist/discord/gateway.js +0 -320
  287. package/dist/discord/payloads.d.ts +0 -275
  288. package/dist/discord/payloads.js +0 -3
  289. package/dist/discord/presence.d.ts +0 -42
  290. package/dist/discord/presence.js +0 -51
  291. package/dist/discord/rest.d.ts +0 -49
  292. package/dist/discord/rest.js +0 -271
  293. package/dist/discord/types.d.ts +0 -334
  294. package/dist/discord/types.js +0 -4
  295. package/dist/events.d.ts +0 -94
  296. package/dist/events.js +0 -255
  297. package/dist/presence.d.ts +0 -92
  298. package/dist/presence.js +0 -250
  299. package/dist/structures/Channel.d.ts +0 -110
  300. package/dist/structures/Channel.js +0 -171
  301. package/dist/structures/Guild.d.ts +0 -70
  302. package/dist/structures/Guild.js +0 -105
  303. package/dist/structures/Interaction.d.ts +0 -113
  304. package/dist/structures/Interaction.js +0 -274
  305. package/dist/structures/Member.d.ts +0 -70
  306. package/dist/structures/Member.js +0 -124
  307. package/dist/structures/Message.d.ts +0 -87
  308. package/dist/structures/Message.js +0 -182
  309. package/dist/structures/Reaction.d.ts +0 -38
  310. package/dist/structures/Reaction.js +0 -64
  311. package/dist/structures/Role.d.ts +0 -43
  312. package/dist/structures/Role.js +0 -77
  313. package/dist/structures/User.d.ts +0 -41
  314. package/dist/structures/User.js +0 -79
  315. package/dist/structures/utils.d.ts +0 -72
  316. package/dist/structures/utils.js +0 -59
  317. package/dist/utils/errors.d.ts +0 -5
  318. package/dist/utils/errors.js +0 -28
  319. package/dist/utils/modules.d.ts +0 -39
  320. 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,122 @@
1
+ import { type CommandEntry } from '../commands/tree.js';
2
+ import { type ComponentEntry } from '../components/router.js';
3
+ import { type LoadedPresence } from '../presence/convention.js';
4
+ import { type LoadedMessages } from '../messages/translate.js';
5
+ import { type TaskEntry } from '../tasks/scheduler.js';
6
+ import { type Bot, type BotOptions } from '../core/bot.js';
7
+ import { type GatewayIntentName } from '../discord/intents.js';
8
+ import { type LoadedEvent } from '../events/router.js';
9
+ import { type BuiltFile, type FailedFile } from '../loader/loader.js';
10
+ import type { Log } from './log.js';
11
+ export interface ProjectOptions {
12
+ /** The folder of the project. */
13
+ cwd: string;
14
+ /** The version of the framework. */
15
+ version: string;
16
+ log: Log;
17
+ /**
18
+ * The files of the project as `chapterjs build` kept them. Without it,
19
+ * they are read from the `src` folder.
20
+ */
21
+ built?: readonly BuiltFile[];
22
+ /**
23
+ * Whether the files join voice channels, as `chapterjs build` found.
24
+ * Without it, the files of `src` are read on every load.
25
+ */
26
+ joinsVoice?: boolean;
27
+ /** Only tests change this. */
28
+ deferAfter?: number;
29
+ }
30
+ /**
31
+ * Writes the types of a project (`.chapterjs/`): one project per typed
32
+ * folder (every event, every language file), and what every file gets,
33
+ * like the files of `public/`. With the commands and the languages as
34
+ * they loaded, a language file only offers the ones without `description`
35
+ * in their file, `t` is typed from the default language and `default:
36
+ * true` is refused in every file when another one says it (`defaults`,
37
+ * the files that do); without them (`sync`, which runs nothing),
38
+ * every command is offered and the first language file types `t`.
39
+ * @returns how many files were written
40
+ */
41
+ export declare function writeTypes(cwd: string, commands?: ReadonlyMap<string, CommandEntry>, messages?: LoadedMessages | null, defaults?: readonly string[]): Promise<number>;
42
+ /** The conventional folders of a project: one per feature. */
43
+ export declare const CONVENTIONS: readonly [import("../loader/loader.js").Convention<import("../events/convention.js").EventHandler<keyof import("../events/registry.js").EventContexts>>, import("../loader/loader.js").Convention<import("../commands/convention.js").LoadedCommand>, import("../loader/loader.js").Convention<import("../components/convention.js").LoadedComponent>, import("../loader/loader.js").Convention<import("../tasks/convention.js").LoadedTask>, import("../loader/loader.js").Convention<LoadedPresence>, import("../loader/loader.js").Convention<import("../messages/convention.js").LoadedLanguage>];
44
+ /** What a bot of the project is connected with. */
45
+ export interface ConnectOptions {
46
+ token: string;
47
+ /** Another REST API than Discord's: only tests use it. */
48
+ apiUrl?: string | undefined;
49
+ guildFilter?: BotOptions['guildFilter'];
50
+ /** Whether what happens outside servers is for this bot. */
51
+ privateEvents?: boolean;
52
+ shards?: BotOptions['shards'];
53
+ identifyGate?: BotOptions['identifyGate'];
54
+ /** The share of the requests per second this process may send. */
55
+ globalLimit?: number | undefined;
56
+ /** Only tests change this. */
57
+ identifyInterval?: number | undefined;
58
+ /** Discord refused the bot for good. */
59
+ onFatal: (bot: Bot) => void;
60
+ }
61
+ /** The files of a project, and what runs them. */
62
+ export interface Project {
63
+ /** The last version of each file that loaded: what the bot runs. */
64
+ readonly events: ReadonlyMap<string, LoadedEvent>;
65
+ readonly commands: ReadonlyMap<string, CommandEntry>;
66
+ readonly components: ReadonlyMap<string, ComponentEntry>;
67
+ readonly tasks: ReadonlyMap<string, TaskEntry>;
68
+ /** What `src/presence.ts` declares, or `null` without that file. */
69
+ readonly presence: LoadedPresence | null;
70
+ /** The languages of `src/messages/`, assembled, or `null` without any. */
71
+ readonly messages: LoadedMessages | null;
72
+ /**
73
+ * The language files that say `default: true`, as they are now: a file
74
+ * left out because a second one says it is counted, so that both are
75
+ * underlined in the editor.
76
+ */
77
+ readonly languageDefaults: readonly string[];
78
+ /**
79
+ * Loads every file (again). A file that fails is returned; it keeps its
80
+ * last working version when it had one.
81
+ */
82
+ load(): Promise<FailedFile[]>;
83
+ /** Shows a failure with its file and line. */
84
+ report(failure: FailedFile): void;
85
+ /** "2 commands, 3 events, 4 components, a presence loaded". */
86
+ summary(): string;
87
+ isEmpty(): boolean;
88
+ /** The files that make an intent necessary. */
89
+ filesNeeding(intent: GatewayIntentName): string[];
90
+ /**
91
+ * The intents the files need right now. Without `privateEvents`, what
92
+ * only serves private messages is left out: nothing is asked to Discord
93
+ * for what the bot will not listen to.
94
+ */
95
+ intents(privateEvents?: boolean): number;
96
+ /** Creates a bot that runs the files, and connects it. */
97
+ connect(options: ConnectOptions): Promise<Bot>;
98
+ /** Runs the files of the `ready` event: the bot knows its servers. */
99
+ ready(bot: Bot): void;
100
+ /**
101
+ * Gives the bot the presence of the project as it is now (Discord's
102
+ * default without a presence file). Nothing is sent when it did not
103
+ * change since the bot was given one.
104
+ */
105
+ applyPresence(bot: Bot): boolean;
106
+ /**
107
+ * Starts the tasks of the project, with the bot `current` returns (none
108
+ * while it reconnects). Only one process of a bot runs them.
109
+ */
110
+ startTasks(current: () => Bot | null): void;
111
+ /** Stops the tasks: nothing runs after this. */
112
+ stopTasks(): void;
113
+ /** Looks after the memory of the bot `current` returns. */
114
+ watchMemory(current: () => Bot | null): {
115
+ stop(): void;
116
+ };
117
+ }
118
+ /** Whether the folder is a project: it has a `src` folder. */
119
+ export declare function hasSources(cwd: string, log: Log): Promise<boolean>;
120
+ export declare function createProject(options: ProjectOptions): Project;
121
+ /** Says what went wrong in words the developer can act on. */
122
+ export declare function explain(error: unknown, log: Log): void;