lunibee 0.2.0 → 0.2.1
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/builders/components.d.ts +25 -2
- package/dist/builders/embed.d.ts +7 -7
- package/dist/builders/index.d.ts +1 -1
- package/dist/builders/index.js +39 -7
- package/dist/builders/index.js.map +5 -5
- package/dist/core/index.d.ts +4 -2
- package/dist/core/index.js +241 -32
- package/dist/core/index.js.map +15 -15
- package/dist/index.js +468 -38
- package/dist/index.js.map +20 -19
- package/dist/managers/guild-resources.d.ts +22 -2
- package/dist/managers/guild.d.ts +3 -1
- package/dist/managers/index.d.ts +2 -2
- package/dist/managers/index.js +142 -24
- package/dist/managers/index.js.map +12 -12
- package/dist/managers/member.d.ts +13 -12
- package/dist/managers/message.d.ts +11 -3
- package/dist/rest/index.js +2 -2
- package/dist/rest/index.js.map +1 -1
- package/dist/sharding/index.js +2 -2
- package/dist/sharding/index.js.map +1 -1
- package/dist/structures/base.d.ts +36 -0
- package/dist/structures/index.d.ts +29 -0
- package/dist/structures/index.js +116 -8
- package/dist/structures/index.js.map +10 -10
- package/dist/structures/interactions.d.ts +26 -2
- package/dist/structures/options.d.ts +2 -0
- package/dist/structures/resources.d.ts +29 -3
- package/dist/types/index.d.ts +12 -0
- package/dist/types/index.js.map +2 -2
- package/dist/utils/args.d.ts +79 -0
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.js +190 -2
- package/dist/utils/index.js.map +5 -4
- package/package.json +14 -14
package/dist/utils/index.js
CHANGED
|
@@ -1,4 +1,185 @@
|
|
|
1
1
|
// @bun
|
|
2
|
+
// packages/utils/src/args.ts
|
|
3
|
+
var SNOWFLAKE = /^\d{16,22}$/;
|
|
4
|
+
var TRUE_WORDS = new Set([
|
|
5
|
+
"true",
|
|
6
|
+
"yes",
|
|
7
|
+
"y",
|
|
8
|
+
"on",
|
|
9
|
+
"1",
|
|
10
|
+
"enable",
|
|
11
|
+
"enabled"
|
|
12
|
+
]);
|
|
13
|
+
var FALSE_WORDS = new Set([
|
|
14
|
+
"false",
|
|
15
|
+
"no",
|
|
16
|
+
"n",
|
|
17
|
+
"off",
|
|
18
|
+
"0",
|
|
19
|
+
"disable",
|
|
20
|
+
"disabled"
|
|
21
|
+
]);
|
|
22
|
+
function tokenizeArgs(input) {
|
|
23
|
+
const args = [];
|
|
24
|
+
let current = "";
|
|
25
|
+
let quote = null;
|
|
26
|
+
let started = false;
|
|
27
|
+
for (let index = 0;index < input.length; index++) {
|
|
28
|
+
const character = input[index];
|
|
29
|
+
if (character === "\\" && index + 1 < input.length) {
|
|
30
|
+
current += input[++index];
|
|
31
|
+
started = true;
|
|
32
|
+
} else if (quote) {
|
|
33
|
+
if (character === quote)
|
|
34
|
+
quote = null;
|
|
35
|
+
else
|
|
36
|
+
current += character;
|
|
37
|
+
} else if (character === '"' || character === "'") {
|
|
38
|
+
if (started)
|
|
39
|
+
current += character;
|
|
40
|
+
else {
|
|
41
|
+
quote = character;
|
|
42
|
+
started = true;
|
|
43
|
+
}
|
|
44
|
+
} else if (/\s/.test(character)) {
|
|
45
|
+
if (started)
|
|
46
|
+
args.push(current);
|
|
47
|
+
current = "";
|
|
48
|
+
started = false;
|
|
49
|
+
} else {
|
|
50
|
+
current += character;
|
|
51
|
+
started = true;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
if (started)
|
|
55
|
+
args.push(current);
|
|
56
|
+
return args;
|
|
57
|
+
}
|
|
58
|
+
function parseUserMention(value) {
|
|
59
|
+
const id = /^<@!?(\d{16,22})>$/.exec(value)?.[1] ?? value;
|
|
60
|
+
return SNOWFLAKE.test(id) ? id : null;
|
|
61
|
+
}
|
|
62
|
+
function parseRoleMention(value) {
|
|
63
|
+
const id = /^<@&(\d{16,22})>$/.exec(value)?.[1] ?? value;
|
|
64
|
+
return SNOWFLAKE.test(id) ? id : null;
|
|
65
|
+
}
|
|
66
|
+
function parseChannelMention(value) {
|
|
67
|
+
const id = /^<#(\d{16,22})>$/.exec(value)?.[1] ?? value;
|
|
68
|
+
return SNOWFLAKE.test(id) ? id : null;
|
|
69
|
+
}
|
|
70
|
+
function parseMentionable(value) {
|
|
71
|
+
const role = /^<@&(\d{16,22})>$/.exec(value)?.[1];
|
|
72
|
+
if (role)
|
|
73
|
+
return { id: role, type: "role" };
|
|
74
|
+
const user = parseUserMention(value);
|
|
75
|
+
return user ? { id: user, type: "user" } : null;
|
|
76
|
+
}
|
|
77
|
+
function readOne(spec, raw) {
|
|
78
|
+
switch (spec.type) {
|
|
79
|
+
case "string":
|
|
80
|
+
case "rest":
|
|
81
|
+
if (spec.maxLength !== undefined && raw.length > spec.maxLength)
|
|
82
|
+
return {
|
|
83
|
+
error: `must be at most ${spec.maxLength} characters`
|
|
84
|
+
};
|
|
85
|
+
if (spec.choices && !spec.choices.some((choice) => String(choice).toLowerCase() === raw.toLowerCase()))
|
|
86
|
+
return { error: `must be one of: ${spec.choices.join(", ")}` };
|
|
87
|
+
return { value: raw };
|
|
88
|
+
case "integer":
|
|
89
|
+
case "number": {
|
|
90
|
+
const value = Number(raw);
|
|
91
|
+
if (!Number.isFinite(value) || raw.trim() === "")
|
|
92
|
+
return { error: "must be a number" };
|
|
93
|
+
if (spec.type === "integer" && !Number.isSafeInteger(value))
|
|
94
|
+
return { error: "must be a whole number" };
|
|
95
|
+
if (spec.min !== undefined && value < spec.min)
|
|
96
|
+
return { error: `must be at least ${spec.min}` };
|
|
97
|
+
if (spec.max !== undefined && value > spec.max)
|
|
98
|
+
return { error: `must be at most ${spec.max}` };
|
|
99
|
+
if (spec.choices && !spec.choices.includes(value))
|
|
100
|
+
return { error: `must be one of: ${spec.choices.join(", ")}` };
|
|
101
|
+
return { value };
|
|
102
|
+
}
|
|
103
|
+
case "boolean": {
|
|
104
|
+
const word = raw.toLowerCase();
|
|
105
|
+
if (TRUE_WORDS.has(word))
|
|
106
|
+
return { value: true };
|
|
107
|
+
if (FALSE_WORDS.has(word))
|
|
108
|
+
return { value: false };
|
|
109
|
+
return { error: "must be yes or no" };
|
|
110
|
+
}
|
|
111
|
+
case "user": {
|
|
112
|
+
const id = parseUserMention(raw);
|
|
113
|
+
return id ? { value: id } : { error: "must be a user mention or ID" };
|
|
114
|
+
}
|
|
115
|
+
case "role": {
|
|
116
|
+
const id = parseRoleMention(raw);
|
|
117
|
+
return id ? { value: id } : { error: "must be a role mention or ID" };
|
|
118
|
+
}
|
|
119
|
+
case "channel": {
|
|
120
|
+
const id = parseChannelMention(raw);
|
|
121
|
+
return id ? { value: id } : { error: "must be a channel mention or ID" };
|
|
122
|
+
}
|
|
123
|
+
case "mentionable": {
|
|
124
|
+
const value = parseMentionable(raw);
|
|
125
|
+
return value ? { value } : { error: "must be a user or role mention" };
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
function parsePrefixArgs(input, specs) {
|
|
130
|
+
const args = typeof input === "string" ? tokenizeArgs(input) : [...input];
|
|
131
|
+
const values = {};
|
|
132
|
+
let position = 0;
|
|
133
|
+
for (const [index, spec] of specs.entries()) {
|
|
134
|
+
if (spec.type === "rest" && index !== specs.length - 1)
|
|
135
|
+
throw new TypeError(`The rest argument "${spec.name}" must be the last one.`);
|
|
136
|
+
const raw = spec.type === "rest" ? args.slice(position).join(" ") : args[position];
|
|
137
|
+
if (raw === undefined || raw === "") {
|
|
138
|
+
if (spec.required)
|
|
139
|
+
return { ok: false, arg: spec.name, error: "is required" };
|
|
140
|
+
values[spec.name] = undefined;
|
|
141
|
+
continue;
|
|
142
|
+
}
|
|
143
|
+
const read = readOne(spec, raw);
|
|
144
|
+
if ("error" in read)
|
|
145
|
+
return { ok: false, arg: spec.name, error: read.error };
|
|
146
|
+
values[spec.name] = read.value;
|
|
147
|
+
position += spec.type === "rest" ? args.length : 1;
|
|
148
|
+
}
|
|
149
|
+
return { ok: true, values };
|
|
150
|
+
}
|
|
151
|
+
var OPTION_TYPES = {
|
|
152
|
+
3: "string",
|
|
153
|
+
4: "integer",
|
|
154
|
+
5: "boolean",
|
|
155
|
+
6: "user",
|
|
156
|
+
7: "channel",
|
|
157
|
+
8: "role",
|
|
158
|
+
9: "mentionable",
|
|
159
|
+
10: "number"
|
|
160
|
+
};
|
|
161
|
+
function argsFromCommandOptions(options, restLast = false) {
|
|
162
|
+
const specs = [];
|
|
163
|
+
for (const option of options) {
|
|
164
|
+
const type = OPTION_TYPES[option.type];
|
|
165
|
+
if (!type)
|
|
166
|
+
continue;
|
|
167
|
+
specs.push({
|
|
168
|
+
name: option.name,
|
|
169
|
+
type,
|
|
170
|
+
required: option.required,
|
|
171
|
+
min: option.min_value,
|
|
172
|
+
max: option.max_value,
|
|
173
|
+
maxLength: option.max_length,
|
|
174
|
+
choices: option.choices?.map((choice) => choice.value)
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
const last = specs[specs.length - 1];
|
|
178
|
+
if (restLast && last?.type === "string")
|
|
179
|
+
last.type = "rest";
|
|
180
|
+
return specs;
|
|
181
|
+
}
|
|
182
|
+
|
|
2
183
|
// packages/utils/src/index.ts
|
|
3
184
|
function sleep(ms) {
|
|
4
185
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
@@ -10,9 +191,16 @@ function isSnowflake(value) {
|
|
|
10
191
|
return /^\d{16,22}$/.test(value);
|
|
11
192
|
}
|
|
12
193
|
export {
|
|
194
|
+
argsFromCommandOptions,
|
|
13
195
|
isSnowflake,
|
|
196
|
+
parseChannelMention,
|
|
197
|
+
parseMentionable,
|
|
198
|
+
parsePrefixArgs,
|
|
199
|
+
parseRoleMention,
|
|
200
|
+
parseUserMention,
|
|
14
201
|
randomInt,
|
|
15
|
-
sleep
|
|
202
|
+
sleep,
|
|
203
|
+
tokenizeArgs
|
|
16
204
|
};
|
|
17
205
|
|
|
18
|
-
//# debugId=
|
|
206
|
+
//# debugId=3EBA957FB9AD89B264756E2164756E21
|
package/dist/utils/index.js.map
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../packages/utils/src/index.ts"],
|
|
3
|
+
"sources": ["../../packages/utils/src/args.ts", "../../packages/utils/src/index.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"/** Returns a promise that resolves after the specified duration. */\nexport function sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n/** Returns an integer between the supplied inclusive bounds. */\nexport function randomInt(min: number, max: number): number {\n return Math.floor(Math.random() * (max - min + 1)) + min;\n}\n\n/** Tests whether a value is a Discord snowflake-like ID. */\nexport function isSnowflake(value: string): boolean {\n return /^\\d{16,22}$/.test(value);\n}\n"
|
|
5
|
+
"/**\n * Prefix-command arguments: split a message into arguments and read them as\n * typed values, the way slash-command options are read.\n */\n\n/** What an argument is read as. `rest` takes everything left, as one string. */\nexport type PrefixArgType =\n | \"string\"\n | \"integer\"\n | \"number\"\n | \"boolean\"\n | \"user\"\n | \"role\"\n | \"channel\"\n | \"mentionable\"\n | \"rest\";\n\n/** One expected argument. */\nexport interface PrefixArgSpec {\n name: string;\n type: PrefixArgType;\n required?: boolean;\n /** For `string` and `rest`: the longest accepted value. */\n maxLength?: number;\n /** For `integer` and `number`: the accepted range. */\n min?: number;\n max?: number;\n /** Accepted values (compared case-insensitively for strings). */\n choices?: readonly (string | number)[];\n}\n\n/** A mentionable argument: which kind of mention it was. An unmarked ID reads as a user. */\nexport interface MentionableArg {\n id: string;\n type: \"user\" | \"role\";\n}\n\nexport type PrefixArgValue = string | number | boolean | MentionableArg;\n\nexport type PrefixArgsResult =\n | { ok: true; values: Record<string, PrefixArgValue | undefined> }\n | { ok: false; arg: string; error: string };\n\nconst SNOWFLAKE = /^\\d{16,22}$/;\nconst TRUE_WORDS = new Set([\n \"true\",\n \"yes\",\n \"y\",\n \"on\",\n \"1\",\n \"enable\",\n \"enabled\",\n]);\nconst FALSE_WORDS = new Set([\n \"false\",\n \"no\",\n \"n\",\n \"off\",\n \"0\",\n \"disable\",\n \"disabled\",\n]);\n\n/**\n * Splits text into arguments on whitespace. \"Double quotes\" or 'single quotes'\n * keep spaces inside one argument; a backslash escapes the next character.\n * @example tokenizeArgs(`ban @user \"being rude\"`) // [\"ban\", \"@user\", \"being rude\"]\n */\nexport function tokenizeArgs(input: string): string[] {\n const args: string[] = [];\n let current = \"\";\n let quote: string | null = null;\n let started = false;\n for (let index = 0; index < input.length; index++) {\n const character = input[index]!;\n if (character === \"\\\\\" && index + 1 < input.length) {\n current += input[++index];\n started = true;\n } else if (quote) {\n if (character === quote) quote = null;\n else current += character;\n } else if (character === '\"' || character === \"'\") {\n // A quote opens a quoted part only at the start of an argument.\n if (started) current += character;\n else {\n quote = character;\n started = true;\n }\n } else if (/\\s/.test(character)) {\n if (started) args.push(current);\n current = \"\";\n started = false;\n } else {\n current += character;\n started = true;\n }\n }\n if (started) args.push(current);\n return args;\n}\n\n/** The user ID in `<@id>`, `<@!id>` or a bare ID; null otherwise. */\nexport function parseUserMention(value: string): string | null {\n const id = /^<@!?(\\d{16,22})>$/.exec(value)?.[1] ?? value;\n return SNOWFLAKE.test(id) ? id : null;\n}\n\n/** The role ID in `<@&id>` or a bare ID; null otherwise. */\nexport function parseRoleMention(value: string): string | null {\n const id = /^<@&(\\d{16,22})>$/.exec(value)?.[1] ?? value;\n return SNOWFLAKE.test(id) ? id : null;\n}\n\n/** The channel ID in `<#id>` or a bare ID; null otherwise. */\nexport function parseChannelMention(value: string): string | null {\n const id = /^<#(\\d{16,22})>$/.exec(value)?.[1] ?? value;\n return SNOWFLAKE.test(id) ? id : null;\n}\n\n/** A user or role mention; a bare ID reads as a user. Null otherwise. */\nexport function parseMentionable(value: string): MentionableArg | null {\n const role = /^<@&(\\d{16,22})>$/.exec(value)?.[1];\n if (role) return { id: role, type: \"role\" };\n const user = parseUserMention(value);\n return user ? { id: user, type: \"user\" } : null;\n}\n\nfunction readOne(\n spec: PrefixArgSpec,\n raw: string,\n): { value: PrefixArgValue } | { error: string } {\n switch (spec.type) {\n case \"string\":\n case \"rest\":\n if (spec.maxLength !== undefined && raw.length > spec.maxLength)\n return {\n error: `must be at most ${spec.maxLength} characters`,\n };\n if (\n spec.choices &&\n !spec.choices.some(\n (choice) =>\n String(choice).toLowerCase() === raw.toLowerCase(),\n )\n )\n return { error: `must be one of: ${spec.choices.join(\", \")}` };\n return { value: raw };\n case \"integer\":\n case \"number\": {\n const value = Number(raw);\n if (!Number.isFinite(value) || raw.trim() === \"\")\n return { error: \"must be a number\" };\n if (spec.type === \"integer\" && !Number.isSafeInteger(value))\n return { error: \"must be a whole number\" };\n if (spec.min !== undefined && value < spec.min)\n return { error: `must be at least ${spec.min}` };\n if (spec.max !== undefined && value > spec.max)\n return { error: `must be at most ${spec.max}` };\n if (spec.choices && !spec.choices.includes(value))\n return { error: `must be one of: ${spec.choices.join(\", \")}` };\n return { value };\n }\n case \"boolean\": {\n const word = raw.toLowerCase();\n if (TRUE_WORDS.has(word)) return { value: true };\n if (FALSE_WORDS.has(word)) return { value: false };\n return { error: \"must be yes or no\" };\n }\n case \"user\": {\n const id = parseUserMention(raw);\n return id\n ? { value: id }\n : { error: \"must be a user mention or ID\" };\n }\n case \"role\": {\n const id = parseRoleMention(raw);\n return id\n ? { value: id }\n : { error: \"must be a role mention or ID\" };\n }\n case \"channel\": {\n const id = parseChannelMention(raw);\n return id\n ? { value: id }\n : { error: \"must be a channel mention or ID\" };\n }\n case \"mentionable\": {\n const value = parseMentionable(raw);\n return value\n ? { value }\n : { error: \"must be a user or role mention\" };\n }\n }\n}\n\n/**\n * Reads prefix-command arguments by position, as typed values. IDs come back\n * as strings (user, role, channel); a mentionable says which it was. The first\n * problem is reported, with the argument's name, instead of throwing.\n * @param input The text after the command name, or already-split arguments.\n * @param specs The expected arguments in order; a `rest` argument must be last.\n * @example\n * const result = parsePrefixArgs(`@user 10 spamming links`, [\n * { name: \"user\", type: \"user\", required: true },\n * { name: \"minutes\", type: \"integer\", min: 1, max: 40320 },\n * { name: \"reason\", type: \"rest\" },\n * ]);\n * if (!result.ok) return message.reply(`\\`${result.arg}\\` ${result.error}.`);\n */\nexport function parsePrefixArgs(\n input: string | readonly string[],\n specs: readonly PrefixArgSpec[],\n): PrefixArgsResult {\n const args = typeof input === \"string\" ? tokenizeArgs(input) : [...input];\n const values: Record<string, PrefixArgValue | undefined> = {};\n let position = 0;\n for (const [index, spec] of specs.entries()) {\n if (spec.type === \"rest\" && index !== specs.length - 1)\n throw new TypeError(\n `The rest argument \"${spec.name}\" must be the last one.`,\n );\n const raw =\n spec.type === \"rest\"\n ? args.slice(position).join(\" \")\n : args[position];\n if (raw === undefined || raw === \"\") {\n if (spec.required)\n return { ok: false, arg: spec.name, error: \"is required\" };\n values[spec.name] = undefined;\n continue;\n }\n const read = readOne(spec, raw);\n if (\"error\" in read)\n return { ok: false, arg: spec.name, error: read.error };\n values[spec.name] = read.value;\n position += spec.type === \"rest\" ? args.length : 1;\n }\n return { ok: true, values };\n}\n\n/** Discord application-command option types, as numbers (this package has no dependencies). */\nconst OPTION_TYPES: Readonly<Record<number, PrefixArgType>> = {\n 3: \"string\",\n 4: \"integer\",\n 5: \"boolean\",\n 6: \"user\",\n 7: \"channel\",\n 8: \"role\",\n 9: \"mentionable\",\n 10: \"number\",\n};\n\n/**\n * Argument specs from a slash command's options, so one definition serves both\n * `/command` and the prefix command. Subcommands and attachments are left out.\n * @param options The command's (or subcommand's) `options` as sent to Discord.\n * @param restLast Read the last string option as the rest of the message (handy for reasons).\n */\nexport function argsFromCommandOptions(\n options: readonly {\n name: string;\n type: number;\n required?: boolean;\n min_value?: number;\n max_value?: number;\n max_length?: number;\n choices?: readonly { value: string | number }[];\n }[],\n restLast = false,\n): PrefixArgSpec[] {\n const specs: PrefixArgSpec[] = [];\n for (const option of options) {\n const type = OPTION_TYPES[option.type];\n if (!type) continue;\n specs.push({\n name: option.name,\n type,\n required: option.required,\n min: option.min_value,\n max: option.max_value,\n maxLength: option.max_length,\n choices: option.choices?.map((choice) => choice.value),\n });\n }\n const last = specs[specs.length - 1];\n if (restLast && last?.type === \"string\") last.type = \"rest\";\n return specs;\n}\n",
|
|
6
|
+
"/** Returns a promise that resolves after the specified duration. */\nexport function sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n/** Returns an integer between the supplied inclusive bounds. */\nexport function randomInt(min: number, max: number): number {\n return Math.floor(Math.random() * (max - min + 1)) + min;\n}\n\n/** Tests whether a value is a Discord snowflake-like ID. */\nexport function isSnowflake(value: string): boolean {\n return /^\\d{16,22}$/.test(value);\n}\n\nexport {\n tokenizeArgs,\n parsePrefixArgs,\n argsFromCommandOptions,\n parseUserMention,\n parseRoleMention,\n parseChannelMention,\n parseMentionable,\n type PrefixArgType,\n type PrefixArgSpec,\n type PrefixArgValue,\n type PrefixArgsResult,\n type MentionableArg,\n} from \"./args.js\";\n"
|
|
6
7
|
],
|
|
7
|
-
"mappings": ";;
|
|
8
|
-
"debugId": "
|
|
8
|
+
"mappings": "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",
|
|
9
|
+
"debugId": "3EBA957FB9AD89B264756E2164756E21",
|
|
9
10
|
"names": []
|
|
10
11
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lunibee",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "A lightweight, Bun-first Discord API library.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -103,19 +103,19 @@
|
|
|
103
103
|
"publish:all": "bun run scripts/publish.ts"
|
|
104
104
|
},
|
|
105
105
|
"dependencies": {
|
|
106
|
-
"@lunibee/builders": "^0.2.
|
|
107
|
-
"@lunibee/collection": "^0.2.
|
|
108
|
-
"@lunibee/core": "^0.2.
|
|
109
|
-
"@lunibee/formatters": "^0.2.
|
|
110
|
-
"@lunibee/handlers": "^0.2.
|
|
111
|
-
"@lunibee/managers": "^0.2.
|
|
112
|
-
"@lunibee/rest": "^0.2.
|
|
113
|
-
"@lunibee/sharding": "^0.2.
|
|
114
|
-
"@lunibee/structures": "^0.2.
|
|
115
|
-
"@lunibee/types": "^0.2.
|
|
116
|
-
"@lunibee/utils": "^0.2.
|
|
117
|
-
"@lunibee/voice": "^0.2.
|
|
118
|
-
"@lunibee/ws": "^0.2.
|
|
106
|
+
"@lunibee/builders": "^0.2.1",
|
|
107
|
+
"@lunibee/collection": "^0.2.1",
|
|
108
|
+
"@lunibee/core": "^0.2.1",
|
|
109
|
+
"@lunibee/formatters": "^0.2.1",
|
|
110
|
+
"@lunibee/handlers": "^0.2.1",
|
|
111
|
+
"@lunibee/managers": "^0.2.1",
|
|
112
|
+
"@lunibee/rest": "^0.2.1",
|
|
113
|
+
"@lunibee/sharding": "^0.2.1",
|
|
114
|
+
"@lunibee/structures": "^0.2.1",
|
|
115
|
+
"@lunibee/types": "^0.2.1",
|
|
116
|
+
"@lunibee/utils": "^0.2.1",
|
|
117
|
+
"@lunibee/voice": "^0.2.1",
|
|
118
|
+
"@lunibee/ws": "^0.2.1"
|
|
119
119
|
},
|
|
120
120
|
"devDependencies": {
|
|
121
121
|
"@types/bun": "^1.4.1",
|