@mostfeatured/dbi 0.1.32 → 0.1.34
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/DBI.d.ts +4 -0
- package/dist/DBI.d.ts.map +1 -1
- package/dist/DBI.js +15 -71
- package/dist/DBI.js.map +1 -1
- package/dist/methods/hookInteractionListeners.d.ts.map +1 -1
- package/dist/methods/hookInteractionListeners.js +62 -20
- package/dist/methods/hookInteractionListeners.js.map +1 -1
- package/dist/types/ChatInput/ChatInputOptions.d.ts +1 -1
- package/dist/types/ChatInput/ChatInputOptions.d.ts.map +1 -1
- package/dist/types/ChatInput/ChatInputOptions.js.map +1 -1
- package/dist/types/Components/HTMLComponentsV2/HTMLComponentsV2Handlers.d.ts +53 -0
- package/dist/types/Components/HTMLComponentsV2/HTMLComponentsV2Handlers.d.ts.map +1 -0
- package/dist/types/Components/HTMLComponentsV2/HTMLComponentsV2Handlers.js +60 -0
- package/dist/types/Components/HTMLComponentsV2/HTMLComponentsV2Handlers.js.map +1 -0
- package/dist/types/Components/HTMLComponentsV2/index.d.ts +19 -0
- package/dist/types/Components/HTMLComponentsV2/index.d.ts.map +1 -0
- package/dist/types/Components/HTMLComponentsV2/index.js +28 -0
- package/dist/types/Components/HTMLComponentsV2/index.js.map +1 -0
- package/dist/types/Components/HTMLComponentsV2/parser.d.ts +4 -0
- package/dist/types/Components/HTMLComponentsV2/parser.d.ts.map +1 -0
- package/dist/types/Components/HTMLComponentsV2/parser.js +260 -0
- package/dist/types/Components/HTMLComponentsV2/parser.js.map +1 -0
- package/dist/types/Interaction.d.ts +6 -4
- package/dist/types/Interaction.d.ts.map +1 -1
- package/dist/types/Interaction.js.map +1 -1
- package/dist/utils/customId.d.ts +2 -1
- package/dist/utils/customId.d.ts.map +1 -1
- package/dist/utils/customId.js +6 -2
- package/dist/utils/customId.js.map +1 -1
- package/package.json +7 -4
- package/src/DBI.ts +30 -113
- package/src/methods/hookInteractionListeners.ts +79 -34
- package/src/types/ChatInput/ChatInputOptions.ts +6 -6
- package/src/types/Components/HTMLComponentsV2/HTMLComponentsV2Handlers.ts +78 -0
- package/src/types/Components/HTMLComponentsV2/index.ts +43 -0
- package/src/types/Components/HTMLComponentsV2/parser.ts +279 -0
- package/src/types/Interaction.ts +7 -4
- package/src/utils/customId.ts +6 -3
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseHTMLComponentsV2 = parseHTMLComponentsV2;
|
|
4
|
+
const jsdom_1 = require("jsdom");
|
|
5
|
+
const eta_1 = require("eta");
|
|
6
|
+
const discord_js_1 = require("discord.js");
|
|
7
|
+
const customId_1 = require("../../../utils/customId");
|
|
8
|
+
const eta = new eta_1.Eta();
|
|
9
|
+
function parseElementDataAttributes(attributes) {
|
|
10
|
+
let list = Array.from(attributes)
|
|
11
|
+
.filter(attr => attr.nodeName.startsWith("data-"))
|
|
12
|
+
.map(attr => {
|
|
13
|
+
let splited = attr.nodeName.slice(5).split(":");
|
|
14
|
+
let index = parseInt(splited[0]);
|
|
15
|
+
let value;
|
|
16
|
+
switch (splited[1]) {
|
|
17
|
+
case "number":
|
|
18
|
+
value = Number(attr.nodeValue);
|
|
19
|
+
break;
|
|
20
|
+
case "boolean":
|
|
21
|
+
value = attr.nodeValue === "true";
|
|
22
|
+
break;
|
|
23
|
+
case "json":
|
|
24
|
+
value = JSON.parse(attr.nodeValue);
|
|
25
|
+
break;
|
|
26
|
+
case "string":
|
|
27
|
+
default:
|
|
28
|
+
value = attr.nodeValue;
|
|
29
|
+
break;
|
|
30
|
+
}
|
|
31
|
+
return {
|
|
32
|
+
index,
|
|
33
|
+
value
|
|
34
|
+
};
|
|
35
|
+
})
|
|
36
|
+
.sort((a, b) => a.index - b.index)
|
|
37
|
+
.map(i => i.value);
|
|
38
|
+
let data = attributes.getNamedItem("data")?.nodeValue;
|
|
39
|
+
return list.length ? list : data ? [data] : [];
|
|
40
|
+
}
|
|
41
|
+
function parseCustomIdAttributes(dbi, dbiName, element) {
|
|
42
|
+
let customId = element.getAttribute("custom-id");
|
|
43
|
+
if (!customId) {
|
|
44
|
+
let name = element.getAttribute("name");
|
|
45
|
+
if (!name)
|
|
46
|
+
throw new Error("String Select Menu must have a name or custom-id attribute.");
|
|
47
|
+
customId = (0, customId_1.buildCustomId)(dbi, dbiName, [
|
|
48
|
+
name,
|
|
49
|
+
...parseElementDataAttributes(element.attributes),
|
|
50
|
+
], element.hasAttribute("ttl") ? parseInt(element.getAttribute("ttl")) : undefined, true);
|
|
51
|
+
}
|
|
52
|
+
return customId;
|
|
53
|
+
}
|
|
54
|
+
function parseActionRow(dbi, dbiName, actionRow) {
|
|
55
|
+
return {
|
|
56
|
+
type: discord_js_1.ComponentType.ActionRow,
|
|
57
|
+
components: Array.from(actionRow.children).map((element) => {
|
|
58
|
+
return parseElement(dbi, dbiName, element);
|
|
59
|
+
})
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
function parseButton(dbi, dbiName, button) {
|
|
63
|
+
return {
|
|
64
|
+
type: discord_js_1.ComponentType.Button,
|
|
65
|
+
style: discord_js_1.ButtonStyle[button.getAttribute("button-style") || button.getAttribute("style") || "Primary"],
|
|
66
|
+
label: button.textContent?.trim(),
|
|
67
|
+
emoji: button.getAttribute("emoji"),
|
|
68
|
+
custom_id: parseCustomIdAttributes(dbi, dbiName, button),
|
|
69
|
+
disabled: button.hasAttribute("disabled"),
|
|
70
|
+
url: button.getAttribute("url"),
|
|
71
|
+
sku_id: button.getAttribute("sku-id"),
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
function parseStringSelect(dbi, dbiName, stringSelect) {
|
|
75
|
+
let minValues = parseInt(stringSelect.getAttribute("min-values"));
|
|
76
|
+
let maxValues = parseInt(stringSelect.getAttribute("max-values"));
|
|
77
|
+
let options = Array.from(stringSelect.querySelectorAll("option")).map(option => {
|
|
78
|
+
return {
|
|
79
|
+
label: option.textContent?.trim(),
|
|
80
|
+
value: option.getAttribute("value"),
|
|
81
|
+
description: option.getAttribute("description"),
|
|
82
|
+
emoji: option.getAttribute("emoji"),
|
|
83
|
+
default: option.hasAttribute("default")
|
|
84
|
+
};
|
|
85
|
+
});
|
|
86
|
+
return {
|
|
87
|
+
type: discord_js_1.ComponentType.StringSelect,
|
|
88
|
+
custom_id: parseCustomIdAttributes(dbi, dbiName, stringSelect),
|
|
89
|
+
placeholder: stringSelect.getAttribute("placeholder"),
|
|
90
|
+
min_values: !isNaN(minValues) ? minValues : undefined,
|
|
91
|
+
max_values: !isNaN(maxValues) ? maxValues : undefined,
|
|
92
|
+
disabled: stringSelect.hasAttribute("disabled"),
|
|
93
|
+
options
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
function parseNonStringSelect(dbi, dbiName, userSelect, type) {
|
|
97
|
+
let minValues = parseInt(userSelect.getAttribute("min-values"));
|
|
98
|
+
let maxValues = parseInt(userSelect.getAttribute("max-values"));
|
|
99
|
+
let options = Array.from(userSelect.querySelectorAll("option")).map(option => {
|
|
100
|
+
return {
|
|
101
|
+
id: option.textContent?.trim() || option.getAttribute("id"),
|
|
102
|
+
type: option.getAttribute("type")
|
|
103
|
+
};
|
|
104
|
+
});
|
|
105
|
+
return {
|
|
106
|
+
type,
|
|
107
|
+
custom_id: parseCustomIdAttributes(dbi, dbiName, userSelect),
|
|
108
|
+
placeholder: userSelect.getAttribute("placeholder"),
|
|
109
|
+
min_values: !isNaN(minValues) ? minValues : undefined,
|
|
110
|
+
max_values: !isNaN(maxValues) ? maxValues : undefined,
|
|
111
|
+
disabled: userSelect.hasAttribute("disabled"),
|
|
112
|
+
options
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
function parseSection(dbi, dbiName, sectionElement) {
|
|
116
|
+
const childs = [...sectionElement.children];
|
|
117
|
+
const components = childs.find(el => el.tagName === "COMPONENTS");
|
|
118
|
+
const children = Array.from(components?.children || []);
|
|
119
|
+
const accessory = childs.find(el => el.tagName === "ACCESSORY")?.children?.[0];
|
|
120
|
+
return {
|
|
121
|
+
type: discord_js_1.ComponentType.Section,
|
|
122
|
+
components: children.map((element) => {
|
|
123
|
+
return parseElement(dbi, dbiName, element);
|
|
124
|
+
}),
|
|
125
|
+
...(accessory ? { accessory: parseElement(dbi, dbiName, accessory) } : {})
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
function parseTextDisplay(dbi, dbiName, textDisplayElement) {
|
|
129
|
+
return {
|
|
130
|
+
type: discord_js_1.ComponentType.TextDisplay,
|
|
131
|
+
content: textDisplayElement.textContent?.trim() || "",
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
function parseThumbnail(dbi, dbiName, thumbnailElement) {
|
|
135
|
+
return {
|
|
136
|
+
type: discord_js_1.ComponentType.Thumbnail,
|
|
137
|
+
media: {
|
|
138
|
+
url: thumbnailElement.getAttribute("url")
|
|
139
|
+
}
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
function parseMediaGallery(dbi, dbiName, mediaGalleryElement) {
|
|
143
|
+
return {
|
|
144
|
+
type: discord_js_1.ComponentType.MediaGallery,
|
|
145
|
+
items: Array.from(mediaGalleryElement.querySelectorAll("item")).map(item => {
|
|
146
|
+
return {
|
|
147
|
+
media: {
|
|
148
|
+
url: item.getAttribute("url")
|
|
149
|
+
},
|
|
150
|
+
description: item.textContent?.trim() || item.getAttribute("description") || "",
|
|
151
|
+
spoiler: item.hasAttribute("spoiler"),
|
|
152
|
+
};
|
|
153
|
+
})
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
function parseFile(dbi, dbiName, fileElement) {
|
|
157
|
+
return {
|
|
158
|
+
type: discord_js_1.ComponentType.File,
|
|
159
|
+
file: {
|
|
160
|
+
url: fileElement.getAttribute("url"),
|
|
161
|
+
},
|
|
162
|
+
spoiler: fileElement.hasAttribute("spoiler"),
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
function parseSeparator(dbi, dbiName, separatorElement) {
|
|
166
|
+
return {
|
|
167
|
+
type: discord_js_1.ComponentType.Separator,
|
|
168
|
+
divider: separatorElement.hasAttribute("divider"),
|
|
169
|
+
spacing: parseInt(separatorElement.getAttribute("spacing") || '1'),
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
function parseContainer(dbi, dbiName, containerElement) {
|
|
173
|
+
const components = [...containerElement.children].find(el => el.tagName === "COMPONENTS");
|
|
174
|
+
const children = Array.from(components?.children || []);
|
|
175
|
+
return {
|
|
176
|
+
type: discord_js_1.ComponentType.Container,
|
|
177
|
+
components: children.map((element) => {
|
|
178
|
+
return parseElement(dbi, dbiName, element);
|
|
179
|
+
}),
|
|
180
|
+
accent_color: parseColor(containerElement.getAttribute("accent-color") || ""),
|
|
181
|
+
spoiler: containerElement.hasAttribute("spoiler"),
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
function parseTextInput(dbi, dbiName, textInputSelect) {
|
|
185
|
+
let minLength = parseInt(textInputSelect.getAttribute("min-length"));
|
|
186
|
+
let maxLength = parseInt(textInputSelect.getAttribute("max-length"));
|
|
187
|
+
return {
|
|
188
|
+
type: discord_js_1.ComponentType.TextInput,
|
|
189
|
+
custom_id: textInputSelect.getAttribute("custom-id") || textInputSelect.getAttribute("id"),
|
|
190
|
+
style: discord_js_1.TextInputStyle[textInputSelect.getAttribute("input-style") || textInputSelect.getAttribute("style") || "Short"],
|
|
191
|
+
label: textInputSelect.getAttribute("label"),
|
|
192
|
+
placeholder: textInputSelect.getAttribute("placeholder"),
|
|
193
|
+
min_length: !isNaN(minLength) ? minLength : undefined,
|
|
194
|
+
max_length: !isNaN(maxLength) ? maxLength : undefined,
|
|
195
|
+
required: textInputSelect.hasAttribute("required"),
|
|
196
|
+
value: textInputSelect.textContent?.trim() || textInputSelect.getAttribute("value"),
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
function parseColor(color) {
|
|
200
|
+
if (!color)
|
|
201
|
+
return;
|
|
202
|
+
if (/\d{3,6}/.test(color))
|
|
203
|
+
return parseInt(color, 10);
|
|
204
|
+
if (color.startsWith("#"))
|
|
205
|
+
return parseInt(color.slice(1), 16);
|
|
206
|
+
if (color.startsWith("0x"))
|
|
207
|
+
return parseInt(color.slice(2), 16);
|
|
208
|
+
if (color.startsWith("rgb(")) {
|
|
209
|
+
const rgb = color.slice(4, -1).split(",").map(Number);
|
|
210
|
+
return (rgb[0] << 16) + (rgb[1] << 8) + rgb[2];
|
|
211
|
+
}
|
|
212
|
+
return parseInt(color, 16);
|
|
213
|
+
}
|
|
214
|
+
function parseElement(dbi, dbiName, element) {
|
|
215
|
+
switch (element.tagName) {
|
|
216
|
+
case "ACTION-ROW":
|
|
217
|
+
return parseActionRow(dbi, dbiName, element);
|
|
218
|
+
case "BUTTON":
|
|
219
|
+
return parseButton(dbi, dbiName, element);
|
|
220
|
+
case "STRING-SELECT":
|
|
221
|
+
return parseStringSelect(dbi, dbiName, element);
|
|
222
|
+
case "USER-SELECT":
|
|
223
|
+
return parseNonStringSelect(dbi, dbiName, element, discord_js_1.ComponentType.UserSelect);
|
|
224
|
+
case "ROLE-SELECT":
|
|
225
|
+
return parseNonStringSelect(dbi, dbiName, element, discord_js_1.ComponentType.RoleSelect);
|
|
226
|
+
case "MENTIONABLE-SELECT":
|
|
227
|
+
return parseNonStringSelect(dbi, dbiName, element, discord_js_1.ComponentType.MentionableSelect);
|
|
228
|
+
case "CHANNEL-SELECT":
|
|
229
|
+
return parseNonStringSelect(dbi, dbiName, element, discord_js_1.ComponentType.ChannelSelect);
|
|
230
|
+
case "SECTION":
|
|
231
|
+
return parseSection(dbi, dbiName, element);
|
|
232
|
+
case "TEXT-DISPLAY":
|
|
233
|
+
return parseTextDisplay(dbi, dbiName, element);
|
|
234
|
+
case "THUMBNAIL":
|
|
235
|
+
return parseThumbnail(dbi, dbiName, element);
|
|
236
|
+
case "MEDIA-GALLERY":
|
|
237
|
+
return parseMediaGallery(dbi, dbiName, element);
|
|
238
|
+
case "FILE":
|
|
239
|
+
return parseFile(dbi, dbiName, element);
|
|
240
|
+
case "SEPARATOR":
|
|
241
|
+
return parseSeparator(dbi, dbiName, element);
|
|
242
|
+
case "CONTAINER":
|
|
243
|
+
return parseContainer(dbi, dbiName, element);
|
|
244
|
+
case "TEXT-INPUT":
|
|
245
|
+
return parseTextInput(dbi, dbiName, element);
|
|
246
|
+
default:
|
|
247
|
+
throw new Error(`Unknown HTML component: ${element.tagName}`);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
function parseHTMLComponentsV2(dbi, template, dbiName, { data } = {}) {
|
|
251
|
+
const { window: { document } } = new jsdom_1.JSDOM(eta.renderString(template, data));
|
|
252
|
+
const components = [...document.body.children].find(el => el.tagName === "COMPONENTS");
|
|
253
|
+
const children = Array.from(components?.children || []);
|
|
254
|
+
if (!children.length)
|
|
255
|
+
throw new Error("No components found in the provided HTML template.");
|
|
256
|
+
return children.map((element) => {
|
|
257
|
+
return parseElement(dbi, dbiName, element);
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
//# sourceMappingURL=parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../../src/types/Components/HTMLComponentsV2/parser.ts"],"names":[],"mappings":"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","sourcesContent":["import { JSDOM } from \"jsdom\";\r\nimport { Eta } from \"eta\";\r\nimport { DBI } from \"../../../DBI\";\r\nimport { NamespaceEnums } from \"../../../../generated/namespaceData\";\r\nimport { ButtonStyle, ComponentType, TextInputStyle } from \"discord.js\";\r\nimport { buildCustomId } from \"../../../utils/customId\";\r\n\r\nconst eta = new Eta();\r\n\r\nfunction parseElementDataAttributes(attributes: NamedNodeMap): any[] {\r\n let list = Array.from(attributes)\r\n .filter(attr => attr.nodeName.startsWith(\"data-\"))\r\n .map(attr => {\r\n let splited = attr.nodeName.slice(5).split(\":\");\r\n let index = parseInt(splited[0]);\r\n let value;\r\n switch (splited[1]) {\r\n case \"number\": value = Number(attr.nodeValue!); break;\r\n case \"boolean\": value = attr.nodeValue === \"true\"; break;\r\n case \"json\": value = JSON.parse(attr.nodeValue!); break;\r\n case \"string\":\r\n default: value = attr.nodeValue; break;\r\n }\r\n return {\r\n index,\r\n value\r\n };\r\n })\r\n .sort((a, b) => a.index - b.index)\r\n .map(i => i.value);\r\n let data = attributes.getNamedItem(\"data\")?.nodeValue;\r\n return list.length ? list : data ? [data] : [];\r\n}\r\n\r\nfunction parseCustomIdAttributes(dbi: DBI<NamespaceEnums>, dbiName: string, element: Element): string {\r\n let customId = element.getAttribute(\"custom-id\");\r\n if (!customId) {\r\n let name = element.getAttribute(\"name\");\r\n if (!name) throw new Error(\"String Select Menu must have a name or custom-id attribute.\");\r\n customId = buildCustomId(\r\n dbi,\r\n dbiName,\r\n [\r\n name,\r\n ...parseElementDataAttributes(element.attributes),\r\n ],\r\n element.hasAttribute(\"ttl\") ? parseInt(element.getAttribute(\"ttl\")!) : undefined,\r\n true\r\n );\r\n }\r\n return customId;\r\n}\r\n\r\nfunction parseActionRow(dbi: DBI<NamespaceEnums>, dbiName: string, actionRow: Element) {\r\n return {\r\n type: ComponentType.ActionRow,\r\n components: Array.from(actionRow.children).map((element) => {\r\n return parseElement(dbi, dbiName, element);\r\n })\r\n }\r\n}\r\n\r\nfunction parseButton(dbi: DBI<NamespaceEnums>, dbiName: string, button: Element) {\r\n return {\r\n type: ComponentType.Button,\r\n style: ButtonStyle[button.getAttribute(\"button-style\") || button.getAttribute(\"style\") || \"Primary\"],\r\n label: button.textContent?.trim(),\r\n emoji: button.getAttribute(\"emoji\"),\r\n custom_id: parseCustomIdAttributes(dbi, dbiName, button),\r\n disabled: button.hasAttribute(\"disabled\"),\r\n url: button.getAttribute(\"url\"),\r\n sku_id: button.getAttribute(\"sku-id\"),\r\n }\r\n}\r\n\r\nfunction parseStringSelect(dbi: DBI<NamespaceEnums>, dbiName: string, stringSelect: Element) {\r\n let minValues = parseInt(stringSelect.getAttribute(\"min-values\"));\r\n let maxValues = parseInt(stringSelect.getAttribute(\"max-values\"));\r\n\r\n let options = Array.from(stringSelect.querySelectorAll(\"option\")).map(option => {\r\n return {\r\n label: option.textContent?.trim(),\r\n value: option.getAttribute(\"value\"),\r\n description: option.getAttribute(\"description\"),\r\n emoji: option.getAttribute(\"emoji\"),\r\n default: option.hasAttribute(\"default\")\r\n }\r\n });\r\n\r\n return {\r\n type: ComponentType.StringSelect,\r\n custom_id: parseCustomIdAttributes(dbi, dbiName, stringSelect),\r\n placeholder: stringSelect.getAttribute(\"placeholder\"),\r\n min_values: !isNaN(minValues) ? minValues : undefined,\r\n max_values: !isNaN(maxValues) ? maxValues : undefined,\r\n disabled: stringSelect.hasAttribute(\"disabled\"),\r\n options\r\n }\r\n}\r\n\r\nfunction parseNonStringSelect(dbi: DBI<NamespaceEnums>, dbiName: string, userSelect: Element, type: ComponentType) {\r\n let minValues = parseInt(userSelect.getAttribute(\"min-values\"));\r\n let maxValues = parseInt(userSelect.getAttribute(\"max-values\"));\r\n\r\n let options = Array.from(userSelect.querySelectorAll(\"option\")).map(option => {\r\n return {\r\n id: option.textContent?.trim() || option.getAttribute(\"id\"),\r\n type: option.getAttribute(\"type\")\r\n }\r\n });\r\n\r\n return {\r\n type,\r\n custom_id: parseCustomIdAttributes(dbi, dbiName, userSelect),\r\n placeholder: userSelect.getAttribute(\"placeholder\"),\r\n min_values: !isNaN(minValues) ? minValues : undefined,\r\n max_values: !isNaN(maxValues) ? maxValues : undefined,\r\n disabled: userSelect.hasAttribute(\"disabled\"),\r\n options\r\n }\r\n}\r\n\r\nfunction parseSection(dbi: DBI<NamespaceEnums>, dbiName: string, sectionElement: Element) {\r\n const childs = [...sectionElement.children];\r\n const components = childs.find(el => el.tagName === \"COMPONENTS\");\r\n const children = Array.from(components?.children || []);\r\n\r\n const accessory = childs.find(el => el.tagName === \"ACCESSORY\")?.children?.[0];\r\n\r\n return {\r\n type: ComponentType.Section,\r\n components: children.map((element) => {\r\n return parseElement(dbi, dbiName, element);\r\n }),\r\n ...(accessory ? { accessory: parseElement(dbi, dbiName, accessory) } : {})\r\n }\r\n}\r\n\r\nfunction parseTextDisplay(dbi: DBI<NamespaceEnums>, dbiName: string, textDisplayElement: Element) {\r\n return {\r\n type: ComponentType.TextDisplay,\r\n content: textDisplayElement.textContent?.trim() || \"\",\r\n }\r\n}\r\n\r\nfunction parseThumbnail(dbi: DBI<NamespaceEnums>, dbiName: string, thumbnailElement: Element) {\r\n return {\r\n type: ComponentType.Thumbnail,\r\n media: {\r\n url: thumbnailElement.getAttribute(\"url\")\r\n }\r\n }\r\n}\r\n\r\nfunction parseMediaGallery(dbi: DBI<NamespaceEnums>, dbiName: string, mediaGalleryElement: Element) {\r\n return {\r\n type: ComponentType.MediaGallery,\r\n items: Array.from(mediaGalleryElement.querySelectorAll(\"item\")).map(item => {\r\n return {\r\n media: {\r\n url: item.getAttribute(\"url\")\r\n },\r\n description: item.textContent?.trim() || item.getAttribute(\"description\") || \"\",\r\n spoiler: item.hasAttribute(\"spoiler\"),\r\n };\r\n })\r\n }\r\n}\r\n\r\nfunction parseFile(dbi: DBI<NamespaceEnums>, dbiName: string, fileElement: Element) {\r\n return {\r\n type: ComponentType.File,\r\n file: {\r\n url: fileElement.getAttribute(\"url\"),\r\n },\r\n spoiler: fileElement.hasAttribute(\"spoiler\"),\r\n }\r\n}\r\n\r\nfunction parseSeparator(dbi: DBI<NamespaceEnums>, dbiName: string, separatorElement: Element) {\r\n return {\r\n type: ComponentType.Separator,\r\n divider: separatorElement.hasAttribute(\"divider\"),\r\n spacing: parseInt(separatorElement.getAttribute(\"spacing\") || '1'),\r\n }\r\n}\r\n\r\nfunction parseContainer(dbi: DBI<NamespaceEnums>, dbiName: string, containerElement: Element) {\r\n const components = [...containerElement.children].find(el => el.tagName === \"COMPONENTS\");\r\n const children = Array.from(components?.children || []);\r\n\r\n return {\r\n type: ComponentType.Container,\r\n components: children.map((element) => {\r\n return parseElement(dbi, dbiName, element);\r\n }),\r\n accent_color: parseColor(containerElement.getAttribute(\"accent-color\") || \"\"),\r\n spoiler: containerElement.hasAttribute(\"spoiler\"),\r\n }\r\n}\r\n\r\nfunction parseTextInput(dbi: DBI<NamespaceEnums>, dbiName: string, textInputSelect: Element) {\r\n let minLength = parseInt(textInputSelect.getAttribute(\"min-length\"));\r\n let maxLength = parseInt(textInputSelect.getAttribute(\"max-length\"));\r\n\r\n return {\r\n type: ComponentType.TextInput,\r\n custom_id: textInputSelect.getAttribute(\"custom-id\") || textInputSelect.getAttribute(\"id\"),\r\n style: TextInputStyle[textInputSelect.getAttribute(\"input-style\") || textInputSelect.getAttribute(\"style\") || \"Short\"],\r\n label: textInputSelect.getAttribute(\"label\"),\r\n placeholder: textInputSelect.getAttribute(\"placeholder\"),\r\n min_length: !isNaN(minLength) ? minLength : undefined,\r\n max_length: !isNaN(maxLength) ? maxLength : undefined,\r\n required: textInputSelect.hasAttribute(\"required\"),\r\n value: textInputSelect.textContent?.trim() || textInputSelect.getAttribute(\"value\"),\r\n }\r\n}\r\n\r\nfunction parseColor(color: string) {\r\n if (!color) return;\r\n if (/\\d{3,6}/.test(color)) return parseInt(color, 10);\r\n if (color.startsWith(\"#\")) return parseInt(color.slice(1), 16);\r\n if (color.startsWith(\"0x\")) return parseInt(color.slice(2), 16);\r\n if (color.startsWith(\"rgb(\")) {\r\n const rgb = color.slice(4, -1).split(\",\").map(Number);\r\n return (rgb[0] << 16) + (rgb[1] << 8) + rgb[2];\r\n }\r\n return parseInt(color, 16);\r\n}\r\n\r\nfunction parseElement(dbi: DBI<NamespaceEnums>, dbiName: string, element: Element) {\r\n switch (element.tagName) {\r\n case \"ACTION-ROW\":\r\n return parseActionRow(dbi, dbiName, element);\r\n case \"BUTTON\":\r\n return parseButton(dbi, dbiName, element);\r\n case \"STRING-SELECT\":\r\n return parseStringSelect(dbi, dbiName, element);\r\n case \"USER-SELECT\":\r\n return parseNonStringSelect(dbi, dbiName, element, ComponentType.UserSelect);\r\n case \"ROLE-SELECT\":\r\n return parseNonStringSelect(dbi, dbiName, element, ComponentType.RoleSelect);\r\n case \"MENTIONABLE-SELECT\":\r\n return parseNonStringSelect(dbi, dbiName, element, ComponentType.MentionableSelect);\r\n case \"CHANNEL-SELECT\":\r\n return parseNonStringSelect(dbi, dbiName, element, ComponentType.ChannelSelect);\r\n case \"SECTION\":\r\n return parseSection(dbi, dbiName, element);\r\n case \"TEXT-DISPLAY\":\r\n return parseTextDisplay(dbi, dbiName, element);\r\n case \"THUMBNAIL\":\r\n return parseThumbnail(dbi, dbiName, element);\r\n case \"MEDIA-GALLERY\":\r\n return parseMediaGallery(dbi, dbiName, element);\r\n case \"FILE\":\r\n return parseFile(dbi, dbiName, element);\r\n case \"SEPARATOR\":\r\n return parseSeparator(dbi, dbiName, element);\r\n case \"CONTAINER\":\r\n return parseContainer(dbi, dbiName, element);\r\n case \"TEXT-INPUT\":\r\n return parseTextInput(dbi, dbiName, element);\r\n default:\r\n throw new Error(`Unknown HTML component: ${element.tagName}`);\r\n }\r\n}\r\n\r\nexport function parseHTMLComponentsV2(dbi: DBI<NamespaceEnums>, template: string, dbiName: string, { data }: any = {}) {\r\n const { window: { document } } = new JSDOM(eta.renderString(template, data));\r\n\r\n const components = [...document.body.children].find(el => el.tagName === \"COMPONENTS\");\r\n const children = Array.from(components?.children || []);\r\n\r\n if (!children.length) throw new Error(\"No components found in the provided HTML template.\");\r\n\r\n return children.map((element) => {\r\n return parseElement(dbi, dbiName, element);\r\n });\r\n}"]}
|
|
@@ -8,7 +8,8 @@ import { DBIMessageContextMenu } from "./other/MessageContextMenu";
|
|
|
8
8
|
import { DBIModal } from "./Components/Modal";
|
|
9
9
|
import { DBIStringSelectMenu } from "./Components/StringSelectMenu";
|
|
10
10
|
import { DBIUserContextMenu } from "./other/UserContextMenu";
|
|
11
|
-
|
|
11
|
+
import { DBIHTMLComponentsV2 } from "./Components/HTMLComponentsV2";
|
|
12
|
+
export type TDBIInteractions<TNamespace extends NamespaceEnums> = DBIChatInput<TNamespace> | DBIButton<TNamespace> | DBIStringSelectMenu<TNamespace> | DBIMessageContextMenu<TNamespace> | DBIUserContextMenu<TNamespace> | DBIModal<TNamespace> | DBIHTMLComponentsV2<TNamespace>;
|
|
12
13
|
export interface IDBIBaseExecuteCtx<TNamespace extends NamespaceEnums> {
|
|
13
14
|
interaction: Discord.ChatInputCommandInteraction | Discord.UserContextMenuCommandInteraction | Discord.MessageContextMenuCommandInteraction | Discord.ModalSubmitInteraction | Discord.AutocompleteInteraction | Discord.AnySelectMenuInteraction | Discord.ButtonInteraction;
|
|
14
15
|
locale: {
|
|
@@ -20,13 +21,14 @@ export interface IDBIBaseExecuteCtx<TNamespace extends NamespaceEnums> {
|
|
|
20
21
|
setRateLimit(type: TDBIRateLimitTypes, duration: number): Promise<any>;
|
|
21
22
|
other: Record<string, any>;
|
|
22
23
|
clientNamespace: NamespaceData[TNamespace]["clientNamespaces"];
|
|
24
|
+
v2: boolean;
|
|
23
25
|
}
|
|
24
26
|
export type TDBIReferencedData = ({
|
|
25
27
|
[key: string]: any;
|
|
26
28
|
$ref: string;
|
|
27
29
|
$unRef(): boolean;
|
|
28
30
|
} | string | number);
|
|
29
|
-
export type TDBIInteractionTypes = "ChatInput" | "UserContextMenu" | "MessageContextMenu" | "Modal" | "Autocomplete" | "StringSelectMenu" | "UserSelectMenu" | "ChannelSelectMenu" | "MentionableSelectMenu" | "RoleSelectMenu" | "Button";
|
|
31
|
+
export type TDBIInteractionTypes = "ChatInput" | "UserContextMenu" | "MessageContextMenu" | "Modal" | "Autocomplete" | "StringSelectMenu" | "UserSelectMenu" | "ChannelSelectMenu" | "MentionableSelectMenu" | "RoleSelectMenu" | "Button" | "HTMLComponentsV2";
|
|
30
32
|
export type TDBIRateLimitTypes = "User" | "Channel" | "Guild" | "Member" | "Message";
|
|
31
33
|
export type DBIRateLimit = {
|
|
32
34
|
type: TDBIRateLimitTypes;
|
|
@@ -53,7 +55,7 @@ export declare class DBIBaseInteraction<TNamespace extends NamespaceEnums> {
|
|
|
53
55
|
flag?: string;
|
|
54
56
|
ttl?: number;
|
|
55
57
|
at?: number;
|
|
56
|
-
toJSON(overrides
|
|
57
|
-
onExecute(ctx: IDBIBaseExecuteCtx<TNamespace>): Promise<void> | void;
|
|
58
|
+
toJSON(overrides?: any): any;
|
|
59
|
+
onExecute?(ctx: IDBIBaseExecuteCtx<TNamespace>): Promise<void> | void;
|
|
58
60
|
}
|
|
59
61
|
//# sourceMappingURL=Interaction.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Interaction.d.ts","sourceRoot":"","sources":["../../src/types/Interaction.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9E,OAAO,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"Interaction.d.ts","sourceRoot":"","sources":["../../src/types/Interaction.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Interaction.js","sourceRoot":"","sources":["../../src/types/Interaction.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"Interaction.js","sourceRoot":"","sources":["../../src/types/Interaction.ts"],"names":[],"mappings":";;;AAmEA,MAAa,kBAAkB;IAC7B,YAAY,GAAoB,EAAE,GAAuD;QACvF,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;QACrB,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC,WAAW,CAAC;QACnC,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC;QAC/B,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;QAC3B,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;QACvB,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,SAAS,CAAC;QAClE,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC;QACvC,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;QACrB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACrB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;IACrB,CAAC;IAED,OAAO,CAAiD;IACxD,GAAG,CAAkB;IACrB,IAAI,CAAS;IACb,WAAW,CAAS;IACX,IAAI,CAAuB;IACpC,OAAO,CAAe;IACtB,KAAK,CAAuF;IAC5F,UAAU,CAAkB;IAC5B,IAAI,CAAU;IACd,GAAG,CAAU;IACb,EAAE,CAAU;IACZ,MAAM,CAAC,SAAe,IAAS,CAAC;IAEhC,SAAS,CAAE,GAAmC;IAE9C,CAAC;CACF;AAhCD,gDAgCC","sourcesContent":["import Discord from \"discord.js\";\r\nimport { NamespaceEnums, NamespaceData } from \"../../generated/namespaceData\";\r\nimport { DBI } from \"../DBI\";\r\nimport { DBIButton } from \"./Components/Button\";\r\nimport { DBIChatInput } from \"./ChatInput/ChatInput\";\r\nimport { DBILocale } from \"./other/Locale\";\r\nimport { DBIMessageContextMenu } from \"./other/MessageContextMenu\";\r\nimport { DBIModal } from \"./Components/Modal\";\r\nimport { DBIStringSelectMenu } from \"./Components/StringSelectMenu\";\r\nimport { DBIUserContextMenu } from \"./other/UserContextMenu\";\r\nimport { DBIHTMLComponentsV2 } from \"./Components/HTMLComponentsV2\";\r\n\r\nexport type TDBIInteractions<TNamespace extends NamespaceEnums> = DBIChatInput<TNamespace> | DBIButton<TNamespace> | DBIStringSelectMenu<TNamespace> | DBIMessageContextMenu<TNamespace> | DBIUserContextMenu<TNamespace> | DBIModal<TNamespace> | DBIHTMLComponentsV2<TNamespace>;\r\n\r\nexport interface IDBIBaseExecuteCtx<TNamespace extends NamespaceEnums> {\r\n interaction:\r\n | Discord.ChatInputCommandInteraction\r\n | Discord.UserContextMenuCommandInteraction\r\n | Discord.MessageContextMenuCommandInteraction\r\n | Discord.ModalSubmitInteraction\r\n | Discord.AutocompleteInteraction\r\n | Discord.AnySelectMenuInteraction\r\n | Discord.ButtonInteraction;\r\n locale: {\r\n user: DBILocale<TNamespace>,\r\n guild?: DBILocale<TNamespace>\r\n }\r\n dbi: DBI<TNamespace>;\r\n dbiInteraction: TDBIInteractions<TNamespace>;\r\n setRateLimit(type: TDBIRateLimitTypes, duration: number): Promise<any>;\r\n other: Record<string, any>;\r\n clientNamespace: NamespaceData[TNamespace][\"clientNamespaces\"];\r\n v2: boolean;\r\n}\r\n\r\nexport type TDBIReferencedData = ({ [key: string]: any, $ref: string, $unRef(): boolean } | string | number);\r\n\r\nexport type TDBIInteractionTypes =\r\n | \"ChatInput\"\r\n | \"UserContextMenu\"\r\n | \"MessageContextMenu\"\r\n | \"Modal\"\r\n | \"Autocomplete\"\r\n | \"StringSelectMenu\"\r\n | \"UserSelectMenu\"\r\n | \"ChannelSelectMenu\"\r\n | \"MentionableSelectMenu\"\r\n | \"RoleSelectMenu\"\r\n | \"Button\"\r\n | \"HTMLComponentsV2\";\r\n\r\nexport type TDBIRateLimitTypes =\r\n | \"User\"\r\n | \"Channel\"\r\n | \"Guild\"\r\n | \"Member\"\r\n | \"Message\";\r\n\r\n\r\nexport type DBIRateLimit = {\r\n type: TDBIRateLimitTypes;\r\n /**\r\n * Duration in milliseconds.\r\n */\r\n duration: number;\r\n}\r\n\r\nexport class DBIBaseInteraction<TNamespace extends NamespaceEnums> {\r\n constructor(dbi: DBI<TNamespace>, cfg: Omit<DBIBaseInteraction<TNamespace>, \"dbi\" | \"at\">) {\r\n this.dbi = dbi;\r\n this.name = cfg.name;\r\n this.description = cfg.description;\r\n this.onExecute = cfg.onExecute;\r\n this.type = cfg.type;\r\n this.options = cfg.options;\r\n this.other = cfg.other;\r\n this.publish = cfg.publish ?? dbi.data.clients.first()?.namespace;\r\n this.rateLimits = cfg.rateLimits ?? [];\r\n this.flag = cfg.flag;\r\n this.at = Date.now();\r\n this.ttl = cfg.ttl;\r\n }\r\n\r\n publish?: NamespaceData[TNamespace][\"clientNamespaces\"];\r\n dbi: DBI<TNamespace>;\r\n name: string;\r\n description: string;\r\n readonly type: TDBIInteractionTypes;\r\n options?: any | any[];\r\n other?: Record<string, any> & { messageCommand?: { aliases?: string[], ignore?: boolean } };\r\n rateLimits?: DBIRateLimit[];\r\n flag?: string;\r\n ttl?: number;\r\n at?: number;\r\n toJSON(overrides?: any): any { }\r\n\r\n onExecute?(ctx: IDBIBaseExecuteCtx<TNamespace>): Promise<void> | void {\r\n\r\n }\r\n}"]}
|
package/dist/utils/customId.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { DBI } from "../DBI";
|
|
2
2
|
import { NamespaceEnums } from "../../generated/namespaceData";
|
|
3
|
-
export declare function buildCustomId(dbi: DBI<NamespaceEnums>, name: string, data: any[], ttl?: number): string;
|
|
3
|
+
export declare function buildCustomId(dbi: DBI<NamespaceEnums>, name: string, data: any[], ttl?: number, v2?: boolean): string;
|
|
4
4
|
export declare function parseCustomId(dbi: DBI<NamespaceEnums>, customId: string): {
|
|
5
5
|
name: string;
|
|
6
6
|
data: any[];
|
|
7
|
+
v2: boolean;
|
|
7
8
|
};
|
|
8
9
|
//# sourceMappingURL=customId.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"customId.d.ts","sourceRoot":"","sources":["../../src/utils/customId.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AAE7B,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,wBAAgB,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,cAAc,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"customId.d.ts","sourceRoot":"","sources":["../../src/utils/customId.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AAE7B,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,wBAAgB,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,cAAc,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,EAAE,UAAQ,GAAG,MAAM,CAsBnH;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,cAAc,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,GAAG,EAAE,CAAC;IAAC,EAAE,EAAE,OAAO,CAAA;CAAE,CAmBpH"}
|
package/dist/utils/customId.js
CHANGED
|
@@ -4,9 +4,9 @@ exports.buildCustomId = buildCustomId;
|
|
|
4
4
|
exports.parseCustomId = parseCustomId;
|
|
5
5
|
const tslib_1 = require("tslib");
|
|
6
6
|
const stuffs = tslib_1.__importStar(require("stuffs"));
|
|
7
|
-
function buildCustomId(dbi, name, data, ttl) {
|
|
7
|
+
function buildCustomId(dbi, name, data, ttl, v2 = false) {
|
|
8
8
|
let customId = [
|
|
9
|
-
name
|
|
9
|
+
`${v2 ? 'v2:' : ''}${name}`,
|
|
10
10
|
...data.map(value => {
|
|
11
11
|
if (typeof value == "string")
|
|
12
12
|
return value;
|
|
@@ -38,6 +38,9 @@ function buildCustomId(dbi, name, data, ttl) {
|
|
|
38
38
|
function parseCustomId(dbi, customId) {
|
|
39
39
|
let splitted = customId.split("—");
|
|
40
40
|
let name = splitted.shift();
|
|
41
|
+
let v2 = name.startsWith("v2:");
|
|
42
|
+
if (v2)
|
|
43
|
+
name = name.slice(3);
|
|
41
44
|
let data = splitted.map(value => {
|
|
42
45
|
if (value.startsWith("π"))
|
|
43
46
|
return Number(value.slice(1));
|
|
@@ -54,6 +57,7 @@ function parseCustomId(dbi, customId) {
|
|
|
54
57
|
return value;
|
|
55
58
|
});
|
|
56
59
|
return {
|
|
60
|
+
v2,
|
|
57
61
|
name,
|
|
58
62
|
data
|
|
59
63
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"customId.js","sourceRoot":"","sources":["../../src/utils/customId.ts"],"names":[],"mappings":";;AAIA,sCAsBC;AAED,
|
|
1
|
+
{"version":3,"file":"customId.js","sourceRoot":"","sources":["../../src/utils/customId.ts"],"names":[],"mappings":"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","sourcesContent":["import { DBI } from \"../DBI\";\r\nimport * as stuffs from \"stuffs\";\r\nimport { NamespaceEnums } from \"../../generated/namespaceData\";\r\n\r\nexport function buildCustomId(dbi: DBI<NamespaceEnums>, name: string, data: any[], ttl?: number, v2 = false): string {\r\n let customId = [\r\n `${v2 ? 'v2:' : ''}${name}`,\r\n ...data.map(value => {\r\n if (typeof value == \"string\") return value;\r\n if (typeof value == \"number\") return `π${value}`;\r\n if (typeof value == \"bigint\") return `ᙖ${value.toString()}`;\r\n if (typeof value == \"boolean\") return `𝞫${value ? 1 : 0}`;\r\n if (typeof value == \"undefined\") return \"🗶u\";\r\n if (value === null) return \"🗶n\";\r\n let id = stuffs.randomString(8);\r\n Object.assign(value, {\r\n $ref: id,\r\n $unRef() { return dbi.data.refs.delete(id); },\r\n })\r\n dbi.data.refs.set(id, { at: Date.now(), value, ttl });\r\n return `¤${id}`;\r\n })\r\n ].join(\"—\");\r\n if (!dbi.config.strict) customId = customId.slice(0, 100);\r\n if (customId.length > 100) throw new Error(\"Custom id cannot be longer than 100 characters.\")\r\n return customId;\r\n}\r\n\r\nexport function parseCustomId(dbi: DBI<NamespaceEnums>, customId: string): { name: string, data: any[], v2: boolean } {\r\n let splitted = customId.split(\"—\");\r\n let name = splitted.shift();\r\n let v2 = name.startsWith(\"v2:\");\r\n if (v2) name = name.slice(3);\r\n let data = splitted.map(value => {\r\n if (value.startsWith(\"π\")) return Number(value.slice(1));\r\n if (value.startsWith(\"𝞫\")) return !!Number(value.slice(1));\r\n if (value.startsWith(\"ᙖ\")) return BigInt(value.slice(1));\r\n if (value.startsWith(\"¤\")) return dbi.data.refs.get(value.slice(1))?.value;\r\n if (value == \"🗶u\") return undefined;\r\n if (value == \"🗶n\") return null;\r\n return value;\r\n });\r\n return {\r\n v2,\r\n name,\r\n data\r\n }\r\n}"]}
|
package/package.json
CHANGED
|
@@ -1,18 +1,20 @@
|
|
|
1
1
|
{
|
|
2
2
|
"dependencies": {
|
|
3
|
-
"@discordjs/rest": "^2.
|
|
3
|
+
"@discordjs/rest": "^2.5.1",
|
|
4
4
|
"async-and-quick": "^1.0.2",
|
|
5
5
|
"discord-api-types": "^0.37.100",
|
|
6
6
|
"discord-hybrid-sharding": "^2.2.6",
|
|
7
|
-
"discord.js": "^14.
|
|
7
|
+
"discord.js": "^14.22.0",
|
|
8
|
+
"eta": "^3.5.0",
|
|
9
|
+
"jsdom": "^26.1.0",
|
|
8
10
|
"lodash": "^4.17.21",
|
|
9
11
|
"plsargs": "^0.1.6",
|
|
10
12
|
"snakecase-keys": "^8.0.1",
|
|
11
|
-
"stuffs": "^0.1.
|
|
13
|
+
"stuffs": "^0.1.43",
|
|
12
14
|
"tslib": "^2.6.3"
|
|
13
15
|
},
|
|
14
16
|
"name": "@mostfeatured/dbi",
|
|
15
|
-
"version": "0.1.
|
|
17
|
+
"version": "0.1.34",
|
|
16
18
|
"main": "dist/index.js",
|
|
17
19
|
"type": "commonjs",
|
|
18
20
|
"private": false,
|
|
@@ -35,6 +37,7 @@
|
|
|
35
37
|
"homepage": "https://github.com/MostFeatured/DiscordBotInfrastructure#readme",
|
|
36
38
|
"description": "",
|
|
37
39
|
"devDependencies": {
|
|
40
|
+
"@types/jsdom": "^21.1.7",
|
|
38
41
|
"@types/lodash": "^4.14.182",
|
|
39
42
|
"typescript": "^5.2.2"
|
|
40
43
|
},
|