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.
- package/dist/assets/asset.d.ts +46 -0
- package/dist/assets/asset.js +86 -0
- package/dist/assets/public.d.ts +19 -0
- package/dist/assets/public.js +120 -0
- package/dist/cache/cache.d.ts +62 -0
- package/dist/cache/cache.js +80 -0
- package/dist/cache/store.d.ts +45 -0
- package/dist/cache/store.js +53 -0
- package/dist/cli/build.d.ts +41 -0
- package/dist/cli/build.js +205 -0
- package/dist/cli/cli.js +108 -25
- package/dist/cli/cluster.d.ts +70 -0
- package/dist/cli/cluster.js +213 -0
- package/dist/cli/dev.d.ts +18 -1
- package/dist/cli/dev.js +253 -198
- package/dist/cli/env.d.ts +31 -0
- package/dist/cli/env.js +93 -0
- package/dist/cli/log.d.ts +13 -0
- package/dist/cli/log.js +17 -0
- package/dist/cli/node-version.d.ts +8 -0
- package/dist/cli/node-version.js +13 -0
- package/dist/cli/preflight.d.ts +36 -0
- package/dist/cli/preflight.js +122 -0
- package/dist/cli/project.d.ts +135 -0
- package/dist/cli/project.js +517 -0
- package/dist/cli/start.d.ts +25 -0
- package/dist/cli/start.js +225 -0
- package/dist/commands/autocomplete.d.ts +13 -0
- package/dist/commands/autocomplete.js +159 -0
- package/dist/commands/command.d.ts +360 -0
- package/dist/commands/command.js +28 -0
- package/dist/commands/declaration.d.ts +77 -0
- package/dist/commands/declaration.js +492 -0
- package/dist/commands/register.d.ts +18 -0
- package/dist/commands/register.js +42 -0
- package/dist/commands/router.d.ts +20 -0
- package/dist/commands/router.js +228 -0
- package/dist/commands/tree.d.ts +47 -0
- package/dist/commands/tree.js +216 -0
- package/dist/commands/twins.d.ts +15 -0
- package/dist/commands/twins.js +78 -0
- package/dist/components/button.d.ts +79 -0
- package/dist/components/button.js +106 -0
- package/dist/components/component.d.ts +140 -0
- package/dist/components/component.js +39 -0
- package/dist/components/custom-id.d.ts +72 -0
- package/dist/components/custom-id.js +128 -0
- package/dist/components/declaration.d.ts +42 -0
- package/dist/components/declaration.js +342 -0
- package/dist/components/declared.d.ts +29 -0
- package/dist/components/declared.js +49 -0
- package/dist/components/embed.d.ts +29 -0
- package/dist/components/embed.js +11 -0
- package/dist/components/instance.d.ts +100 -0
- package/dist/components/instance.js +86 -0
- package/dist/components/layout.d.ts +103 -0
- package/dist/components/layout.js +279 -0
- package/dist/components/modal.d.ts +245 -0
- package/dist/components/modal.js +398 -0
- package/dist/components/options.d.ts +41 -0
- package/dist/components/options.js +101 -0
- package/dist/components/render.d.ts +12 -0
- package/dist/components/render.js +58 -0
- package/dist/components/router.d.ts +19 -0
- package/dist/components/router.js +251 -0
- package/dist/components/select.d.ts +146 -0
- package/dist/components/select.js +179 -0
- package/dist/core/bot.d.ts +99 -0
- package/dist/core/bot.js +174 -0
- package/dist/core/memory.d.ts +66 -0
- package/dist/core/memory.js +115 -0
- package/dist/discord/api.d.ts +112 -0
- package/dist/discord/api.js +115 -0
- package/dist/discord/cdn.d.ts +67 -0
- package/dist/discord/cdn.js +100 -0
- package/dist/discord/codes.d.ts +171 -0
- package/dist/discord/codes.js +421 -0
- package/dist/discord/endpoint.d.ts +56 -0
- package/dist/discord/endpoint.js +53 -0
- package/dist/discord/endpoints.d.ts +1529 -0
- package/dist/discord/endpoints.js +1139 -0
- package/dist/discord/formatting.d.ts +67 -0
- package/dist/discord/formatting.js +87 -0
- package/dist/discord/index.d.ts +10 -0
- package/dist/discord/index.js +13 -0
- package/dist/discord/intents.d.ts +48 -0
- package/dist/discord/intents.js +128 -0
- package/dist/discord/permissions.d.ts +94 -0
- package/dist/discord/permissions.js +185 -0
- package/dist/discord/snowflake.d.ts +21 -0
- package/dist/discord/snowflake.js +36 -0
- package/dist/discord/types/application-command.d.ts +332 -0
- package/dist/discord/types/application-command.js +48 -0
- package/dist/discord/types/application-role-connection-metadata.d.ts +42 -0
- package/dist/discord/types/application-role-connection-metadata.js +22 -0
- package/dist/discord/types/application.d.ts +208 -0
- package/dist/discord/types/application.js +48 -0
- package/dist/discord/types/audit-log.d.ts +255 -0
- package/dist/discord/types/audit-log.js +144 -0
- package/dist/discord/types/auto-moderation.d.ts +167 -0
- package/dist/discord/types/auto-moderation.js +52 -0
- package/dist/discord/types/channel.d.ts +557 -0
- package/dist/discord/types/channel.js +88 -0
- package/dist/discord/types/common.d.ts +54 -0
- package/dist/discord/types/common.js +38 -0
- package/dist/discord/types/component.d.ts +775 -0
- package/dist/discord/types/component.js +76 -0
- package/dist/discord/types/emoji.d.ts +74 -0
- package/dist/discord/types/emoji.js +1 -0
- package/dist/discord/types/entitlement.d.ts +84 -0
- package/dist/discord/types/entitlement.js +22 -0
- package/dist/discord/types/gateway-events.d.ts +1148 -0
- package/dist/discord/types/gateway-events.js +54 -0
- package/dist/discord/types/gateway.d.ts +38 -0
- package/dist/discord/types/gateway.js +1 -0
- package/dist/discord/types/guild-scheduled-event.d.ts +257 -0
- package/dist/discord/types/guild-scheduled-event.js +68 -0
- package/dist/discord/types/guild-template.d.ts +51 -0
- package/dist/discord/types/guild-template.js +1 -0
- package/dist/discord/types/guild.d.ts +910 -0
- package/dist/discord/types/guild.js +153 -0
- package/dist/discord/types/index.d.ts +31 -0
- package/dist/discord/types/index.js +31 -0
- package/dist/discord/types/interaction.d.ts +321 -0
- package/dist/discord/types/interaction.js +47 -0
- package/dist/discord/types/invite.d.ts +158 -0
- package/dist/discord/types/invite.js +39 -0
- package/dist/discord/types/message.d.ts +834 -0
- package/dist/discord/types/message.js +159 -0
- package/dist/discord/types/oauth2.d.ts +22 -0
- package/dist/discord/types/oauth2.js +1 -0
- package/dist/discord/types/permissions.d.ts +183 -0
- package/dist/discord/types/permissions.js +118 -0
- package/dist/discord/types/poll.d.ts +106 -0
- package/dist/discord/types/poll.js +8 -0
- package/dist/discord/types/sku.d.ts +47 -0
- package/dist/discord/types/sku.js +26 -0
- package/dist/discord/types/soundboard.d.ts +71 -0
- package/dist/discord/types/soundboard.js +1 -0
- package/dist/discord/types/stage-instance.d.ts +58 -0
- package/dist/discord/types/stage-instance.js +10 -0
- package/dist/discord/types/sticker.d.ts +115 -0
- package/dist/discord/types/sticker.js +20 -0
- package/dist/discord/types/subscription.d.ts +54 -0
- package/dist/discord/types/subscription.js +12 -0
- package/dist/discord/types/team.d.ts +55 -0
- package/dist/discord/types/team.js +21 -0
- package/dist/discord/types/user.d.ts +273 -0
- package/dist/discord/types/user.js +83 -0
- package/dist/discord/types/voice.d.ts +72 -0
- package/dist/discord/types/voice.js +1 -0
- package/dist/discord/types/webhook.d.ts +184 -0
- package/dist/discord/types/webhook.js +12 -0
- package/dist/events/declaration.d.ts +16 -0
- package/dist/events/declaration.js +80 -0
- package/dist/events/event.d.ts +45 -0
- package/dist/events/event.js +34 -0
- package/dist/events/registry.d.ts +697 -0
- package/dist/events/registry.js +839 -0
- package/dist/events/router.d.ts +46 -0
- package/dist/events/router.js +133 -0
- package/dist/gateway/errors.d.ts +18 -0
- package/dist/gateway/errors.js +47 -0
- package/dist/gateway/gateway.d.ts +64 -0
- package/dist/gateway/gateway.js +117 -0
- package/dist/gateway/identify-queue.d.ts +25 -0
- package/dist/gateway/identify-queue.js +29 -0
- package/dist/gateway/shard.d.ts +94 -0
- package/dist/gateway/shard.js +414 -0
- package/dist/gateway/state.d.ts +11 -0
- package/dist/gateway/state.js +184 -0
- package/dist/index.d.ts +57 -18
- package/dist/index.js +40 -12
- package/dist/interactions/cooldown.d.ts +33 -0
- package/dist/interactions/cooldown.js +74 -0
- package/dist/interactions/dispatch.d.ts +91 -0
- package/dist/interactions/dispatch.js +110 -0
- package/dist/loader/generated.d.ts +10 -0
- package/dist/loader/generated.js +80 -0
- package/dist/loader/hot.d.ts +13 -0
- package/dist/loader/hot.js +85 -0
- package/dist/loader/loader.d.ts +85 -0
- package/dist/loader/loader.js +119 -0
- package/dist/loader/locate.d.ts +10 -0
- package/dist/loader/locate.js +36 -0
- package/dist/loader/watch.d.ts +17 -0
- package/dist/loader/watch.js +66 -0
- package/dist/main.d.ts +2 -0
- package/dist/main.js +5 -0
- package/dist/messages/commands.d.ts +23 -0
- package/dist/messages/commands.js +142 -0
- package/dist/messages/declaration.d.ts +89 -0
- package/dist/messages/declaration.js +455 -0
- package/dist/messages/messages.d.ts +241 -0
- package/dist/messages/messages.js +31 -0
- package/dist/messages/phrases.d.ts +23 -0
- package/dist/messages/phrases.js +44 -0
- package/dist/messages/translate.d.ts +100 -0
- package/dist/messages/translate.js +249 -0
- package/dist/presence/declaration.d.ts +19 -0
- package/dist/presence/declaration.js +118 -0
- package/dist/presence/presence.d.ts +57 -0
- package/dist/presence/presence.js +27 -0
- package/dist/rest/errors.d.ts +55 -0
- package/dist/rest/errors.js +92 -0
- package/dist/rest/rate-limiter.d.ts +46 -0
- package/dist/rest/rate-limiter.js +153 -0
- package/dist/rest/rest.d.ts +63 -0
- package/dist/rest/rest.js +194 -0
- package/dist/structures/base.d.ts +48 -0
- package/dist/structures/base.js +84 -0
- package/dist/structures/channel.d.ts +380 -0
- package/dist/structures/channel.js +627 -0
- package/dist/structures/context.d.ts +30 -0
- package/dist/structures/context.js +7 -0
- package/dist/structures/emoji.d.ts +46 -0
- package/dist/structures/emoji.js +65 -0
- package/dist/structures/entities.d.ts +62 -0
- package/dist/structures/entities.js +226 -0
- package/dist/structures/guild.d.ts +348 -0
- package/dist/structures/guild.js +466 -0
- package/dist/structures/interaction.d.ts +197 -0
- package/dist/structures/interaction.js +396 -0
- package/dist/structures/invite.d.ts +38 -0
- package/dist/structures/invite.js +57 -0
- package/dist/structures/known.d.ts +28 -0
- package/dist/structures/known.js +58 -0
- package/dist/structures/member.d.ts +140 -0
- package/dist/structures/member.js +260 -0
- package/dist/structures/message.d.ts +197 -0
- package/dist/structures/message.js +268 -0
- package/dist/structures/payload.d.ts +91 -0
- package/dist/structures/payload.js +184 -0
- package/dist/structures/role.d.ts +69 -0
- package/dist/structures/role.js +112 -0
- package/dist/structures/user.d.ts +59 -0
- package/dist/structures/user.js +94 -0
- package/dist/structures/webhook.d.ts +46 -0
- package/dist/structures/webhook.js +79 -0
- package/dist/tasks/declaration.d.ts +16 -0
- package/dist/tasks/declaration.js +56 -0
- package/dist/tasks/schedule.d.ts +54 -0
- package/dist/tasks/schedule.js +236 -0
- package/dist/tasks/scheduler.d.ts +35 -0
- package/dist/tasks/scheduler.js +107 -0
- package/dist/tasks/task.d.ts +75 -0
- package/dist/tasks/task.js +27 -0
- package/dist/util/case.d.ts +13 -0
- package/dist/util/case.js +54 -0
- package/dist/util/duration.d.ts +8 -0
- package/dist/util/duration.js +29 -0
- package/dist/util/websocket.d.ts +9 -0
- package/dist/util/websocket.js +31 -0
- package/dist/voice/connection.d.ts +90 -0
- package/dist/voice/connection.js +494 -0
- package/dist/voice/dave.d.ts +109 -0
- package/dist/voice/dave.js +245 -0
- package/dist/voice/opus.d.ts +19 -0
- package/dist/voice/opus.js +273 -0
- package/dist/voice/session.d.ts +55 -0
- package/dist/voice/session.js +405 -0
- package/dist/voice/source.d.ts +22 -0
- package/dist/voice/source.js +195 -0
- package/dist/voice/transport.d.ts +43 -0
- package/dist/voice/transport.js +140 -0
- package/dist/voice/usage.d.ts +4 -0
- package/dist/voice/usage.js +33 -0
- package/package.json +26 -7
- package/vendor/dave/LICENSE +231 -0
- package/vendor/dave/libdave.d.mts +99 -0
- package/vendor/dave/libdave.mjs +2 -0
- package/vendor/dave/libdave.wasm +0 -0
- package/dist/components.d.ts +0 -97
- package/dist/components.js +0 -260
- package/dist/context.d.ts +0 -72
- package/dist/context.js +0 -273
- package/dist/discord/client.d.ts +0 -35
- package/dist/discord/client.js +0 -66
- package/dist/discord/constants.d.ts +0 -49
- package/dist/discord/constants.js +0 -61
- package/dist/discord/events.d.ts +0 -129
- package/dist/discord/events.js +0 -102
- package/dist/discord/gateway.d.ts +0 -61
- package/dist/discord/gateway.js +0 -320
- package/dist/discord/payloads.d.ts +0 -275
- package/dist/discord/payloads.js +0 -3
- package/dist/discord/presence.d.ts +0 -42
- package/dist/discord/presence.js +0 -51
- package/dist/discord/rest.d.ts +0 -49
- package/dist/discord/rest.js +0 -271
- package/dist/discord/types.d.ts +0 -334
- package/dist/discord/types.js +0 -4
- package/dist/events.d.ts +0 -94
- package/dist/events.js +0 -255
- package/dist/presence.d.ts +0 -92
- package/dist/presence.js +0 -250
- package/dist/structures/Channel.d.ts +0 -110
- package/dist/structures/Channel.js +0 -171
- package/dist/structures/Guild.d.ts +0 -70
- package/dist/structures/Guild.js +0 -105
- package/dist/structures/Interaction.d.ts +0 -113
- package/dist/structures/Interaction.js +0 -274
- package/dist/structures/Member.d.ts +0 -70
- package/dist/structures/Member.js +0 -124
- package/dist/structures/Message.d.ts +0 -87
- package/dist/structures/Message.js +0 -182
- package/dist/structures/Reaction.d.ts +0 -38
- package/dist/structures/Reaction.js +0 -64
- package/dist/structures/Role.d.ts +0 -43
- package/dist/structures/Role.js +0 -77
- package/dist/structures/User.d.ts +0 -41
- package/dist/structures/User.js +0 -79
- package/dist/structures/utils.d.ts +0 -72
- package/dist/structures/utils.js +0 -59
- package/dist/utils/errors.d.ts +0 -5
- package/dist/utils/errors.js +0 -28
- package/dist/utils/modules.d.ts +0 -39
- package/dist/utils/modules.js +0 -156
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
// What a file declares with `event()`, checked when it loads: the event
|
|
2
|
+
// exists, the options are the ones of that event, `run` is a function. A
|
|
3
|
+
// mistake is explained before the bot even connects.
|
|
4
|
+
import { isEventDeclaration } from './event.js';
|
|
5
|
+
import { EVENT_NAMES, EVENTS, isEventName, } from './registry.js';
|
|
6
|
+
const fail = message => {
|
|
7
|
+
throw new TypeError(message);
|
|
8
|
+
};
|
|
9
|
+
const isRecord = (value) => typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
10
|
+
/** Checks the options written next to `name` against what the event accepts. */
|
|
11
|
+
function readOptions(name, options) {
|
|
12
|
+
const allowed = EVENTS[name].options ?? {};
|
|
13
|
+
const names = Object.keys(allowed);
|
|
14
|
+
const list = names.length === 0
|
|
15
|
+
? `${name} has no options: an event has a name, a run function, and nothing else.`
|
|
16
|
+
: `Options of ${name} are: ${names.join(', ')}.`;
|
|
17
|
+
for (const [key, value] of Object.entries(options)) {
|
|
18
|
+
if (!Object.hasOwn(allowed, key)) {
|
|
19
|
+
fail(`"${key}" is not an option of ${name}. ${list}`);
|
|
20
|
+
}
|
|
21
|
+
const kind = allowed[key];
|
|
22
|
+
const got = JSON.stringify(value) ?? typeof value;
|
|
23
|
+
if (kind === 'boolean') {
|
|
24
|
+
if (typeof value !== 'boolean') {
|
|
25
|
+
fail(`The option ${key} of ${name} is true or false, got ${got}.`);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
else if (!kind.includes(value)) {
|
|
29
|
+
fail(`The option ${key} of ${name} is ${kind
|
|
30
|
+
.map(word => `'${word}'`)
|
|
31
|
+
.join(', ')
|
|
32
|
+
.replace(/, ([^,]*)$/, ' or $1')}, got ${got}.`);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return Object.freeze({ ...options });
|
|
36
|
+
}
|
|
37
|
+
/** " Did you mean "x"?" when a name is close to a real one. */
|
|
38
|
+
function suggest(name) {
|
|
39
|
+
const wanted = name.toLowerCase().replace(/[^a-z]/g, '');
|
|
40
|
+
if (wanted === '')
|
|
41
|
+
return '';
|
|
42
|
+
const close = EVENT_NAMES.find(event => {
|
|
43
|
+
const real = event.toLowerCase();
|
|
44
|
+
return real === wanted || real.includes(wanted) || wanted.includes(real);
|
|
45
|
+
});
|
|
46
|
+
return close ? ` Did you mean "${close}"?` : '';
|
|
47
|
+
}
|
|
48
|
+
const EXAMPLE = `event({ name: 'messageCreate', run({ message }) { ... } })`;
|
|
49
|
+
/**
|
|
50
|
+
* An event, declared anywhere in `src/` with `event()`: its `name` is the
|
|
51
|
+
* event, the rest its options and what to do. A file may declare several,
|
|
52
|
+
* of the same event or not.
|
|
53
|
+
*/
|
|
54
|
+
export const eventDeclaration = {
|
|
55
|
+
one: 'event',
|
|
56
|
+
many: 'events',
|
|
57
|
+
is: isEventDeclaration,
|
|
58
|
+
list: true,
|
|
59
|
+
read(value) {
|
|
60
|
+
const { config } = value;
|
|
61
|
+
if (!isRecord(config)) {
|
|
62
|
+
return fail(`event() needs an object: ${EXAMPLE}`);
|
|
63
|
+
}
|
|
64
|
+
const { name, run, ...options } = config;
|
|
65
|
+
if (name === undefined) {
|
|
66
|
+
fail(`This event has no "name": the event to react to, like ${EXAMPLE}. Events are: ${EVENT_NAMES.join(', ')}.`);
|
|
67
|
+
}
|
|
68
|
+
if (!isEventName(name)) {
|
|
69
|
+
fail(`${JSON.stringify(name) ?? typeof name} is not an event.${typeof name === 'string' ? suggest(name) : ''} Events are: ${EVENT_NAMES.join(', ')}.`);
|
|
70
|
+
}
|
|
71
|
+
if (typeof run !== 'function') {
|
|
72
|
+
fail(`This ${name} event has no "run": the function to run when it happens, like ${EXAMPLE}`);
|
|
73
|
+
}
|
|
74
|
+
return Object.freeze({
|
|
75
|
+
name,
|
|
76
|
+
handler: run,
|
|
77
|
+
options: readOptions(name, options),
|
|
78
|
+
});
|
|
79
|
+
},
|
|
80
|
+
};
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { ContextOf, EventName, OptionsOf } from './registry.js';
|
|
2
|
+
/** The options written next to `name` and `run`, as written. */
|
|
3
|
+
type OptionsWritten<Options> = {
|
|
4
|
+
[Key in keyof Options as Key extends 'name' | 'run' ? never : Key]: Options[Key];
|
|
5
|
+
};
|
|
6
|
+
/**
|
|
7
|
+
* What a file gives to `event()`: the event, its options when it has
|
|
8
|
+
* some, and what to do. What `run` receives follows the options: what an
|
|
9
|
+
* option lets through is only there to handle when the option is on.
|
|
10
|
+
*/
|
|
11
|
+
export type EventConfig<Name extends EventName = EventName, Options extends object = {}> = {
|
|
12
|
+
/** The event to react to: `'messageCreate'`, `'memberJoin'`... */
|
|
13
|
+
name: Name;
|
|
14
|
+
/** What to do when the event happens. */
|
|
15
|
+
run: (context: ContextOf<Name, OptionsWritten<Options>>) => unknown;
|
|
16
|
+
} & Partial<OptionsOf<Name>> & {
|
|
17
|
+
[Key in keyof Options]: Key extends 'name' | 'run' ? unknown : Key extends keyof OptionsOf<Name> ? Options[Key] : never;
|
|
18
|
+
};
|
|
19
|
+
/** What `event()` returns: a declaration the framework finds in the exports of a file. */
|
|
20
|
+
export interface EventDeclaration<Name extends EventName = EventName> {
|
|
21
|
+
/** What the file gave to `event()`, not checked yet. */
|
|
22
|
+
readonly config: EventConfig<Name, never>;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Declares what to do when an event happens. Export the result from any
|
|
26
|
+
* file of `src/`; `name` says which event, and types what `run` receives:
|
|
27
|
+
*
|
|
28
|
+
* ```ts
|
|
29
|
+
* import { event } from 'chapterjs';
|
|
30
|
+
*
|
|
31
|
+
* export const welcome = event({
|
|
32
|
+
* name: 'memberJoin',
|
|
33
|
+
* async run({ member, guild }) {
|
|
34
|
+
* await member.send(`Welcome to ${guild.name}!`);
|
|
35
|
+
* },
|
|
36
|
+
* });
|
|
37
|
+
* ```
|
|
38
|
+
*
|
|
39
|
+
* Some events have options, written next to `name` (`bots: true`, `where:
|
|
40
|
+
* 'dm'`): what `run` receives follows them.
|
|
41
|
+
*/
|
|
42
|
+
export declare function event<Name extends EventName, const Options extends Partial<OptionsOf<Name>> & object = {}>(config: EventConfig<Name, Options>): EventDeclaration<Name>;
|
|
43
|
+
/** Whether a value was made by `event()`. */
|
|
44
|
+
export declare function isEventDeclaration(value: unknown): value is EventDeclaration;
|
|
45
|
+
export {};
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
// `event()`, as user files import it from 'chapterjs': what to do when
|
|
2
|
+
// something happens on Discord. The `name` of the event types the rest: what
|
|
3
|
+
// `run` receives, and the options the event has.
|
|
4
|
+
const BRAND = Symbol.for('chapterjs.event');
|
|
5
|
+
/**
|
|
6
|
+
* Declares what to do when an event happens. Export the result from any
|
|
7
|
+
* file of `src/`; `name` says which event, and types what `run` receives:
|
|
8
|
+
*
|
|
9
|
+
* ```ts
|
|
10
|
+
* import { event } from 'chapterjs';
|
|
11
|
+
*
|
|
12
|
+
* export const welcome = event({
|
|
13
|
+
* name: 'memberJoin',
|
|
14
|
+
* async run({ member, guild }) {
|
|
15
|
+
* await member.send(`Welcome to ${guild.name}!`);
|
|
16
|
+
* },
|
|
17
|
+
* });
|
|
18
|
+
* ```
|
|
19
|
+
*
|
|
20
|
+
* Some events have options, written next to `name` (`bots: true`, `where:
|
|
21
|
+
* 'dm'`): what `run` receives follows them.
|
|
22
|
+
*/
|
|
23
|
+
export function event(config) {
|
|
24
|
+
return Object.freeze({
|
|
25
|
+
[BRAND]: true,
|
|
26
|
+
config,
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
/** Whether a value was made by `event()`. */
|
|
30
|
+
export function isEventDeclaration(value) {
|
|
31
|
+
return (typeof value === 'object' &&
|
|
32
|
+
value !== null &&
|
|
33
|
+
value[BRAND] === true);
|
|
34
|
+
}
|