@kevlid/discordmenus 0.0.2
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/LICENSE +15 -0
- package/README.md +60 -0
- package/index.d.ts +255 -0
- package/package.json +27 -0
- package/src/builder.js +50 -0
- package/src/handle/component.js +379 -0
- package/src/handle/modal.js +231 -0
- package/src/index.js +19 -0
- package/src/menuBuilder.js +157 -0
- package/src/menuInstance.js +334 -0
- package/src/menuManager.js +83 -0
- package/src/options/boolean.js +38 -0
- package/src/options/category.js +27 -0
- package/src/options/list.js +105 -0
- package/src/options/number.js +50 -0
- package/src/options/object.js +74 -0
- package/src/options/selectMenu.js +132 -0
- package/src/options/string.js +50 -0
- package/src/render/list.js +347 -0
- package/src/render/modal.js +76 -0
- package/src/render/object.js +417 -0
- package/src/render/page.js +142 -0
- package/src/render/selectMenu.js +1 -0
- package/src/render/types.js +1 -0
- package/src/render/utils.js +60 -0
- package/src/utils/adapters.js +98 -0
- package/src/utils/componentsValidate.js +23 -0
- package/src/utils/constants.js +11 -0
- package/src/utils/customIds.js +67 -0
- package/src/utils/formatKey.js +1 -0
- package/src/utils/helpers.js +100 -0
- package/src/utils/parseModal.js +1 -0
- package/src/utils/storage.js +131 -0
- package/src/utils/types.js +34 -0
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
const { Builder } = require("../builder");
|
|
2
|
+
const { OptionTypes } = require("../utils/types");
|
|
3
|
+
const { BooleanBuilder } = require("./boolean");
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class ListBuilder extends Builder {
|
|
7
|
+
constructor(itemType) {
|
|
8
|
+
super(OptionTypes.List);
|
|
9
|
+
this.itemType = itemType;
|
|
10
|
+
this.itemConfig = {};
|
|
11
|
+
this.preview = true;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
setPreview(enabled) {
|
|
15
|
+
this.preview = Boolean(enabled);
|
|
16
|
+
return this;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
build() {
|
|
20
|
+
const base = super.build();
|
|
21
|
+
return {
|
|
22
|
+
...base,
|
|
23
|
+
itemType: this.itemType,
|
|
24
|
+
itemCost: this.itemCost,
|
|
25
|
+
itemConfig: this.itemConfig,
|
|
26
|
+
preview: this.preview,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
class StringListBuilder extends ListBuilder {
|
|
34
|
+
constructor() {
|
|
35
|
+
super(OptionTypes.String);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
setMinLength(length) {
|
|
39
|
+
this.itemConfig.minLength = Number(length);
|
|
40
|
+
return this;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
setMaxLength(length) {
|
|
44
|
+
this.itemConfig.maxLength = Number(length);
|
|
45
|
+
return this;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
class NumberListBuilder extends ListBuilder {
|
|
52
|
+
constructor() {
|
|
53
|
+
super(OptionTypes.Number);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
setMinValue(value) {
|
|
57
|
+
this.itemConfig.minValue = Number(value);
|
|
58
|
+
return this;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
setMaxValue(value) {
|
|
62
|
+
this.itemConfig.maxValue = Number(value);
|
|
63
|
+
return this;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
class ObjectListBuilder extends ListBuilder {
|
|
70
|
+
constructor() {
|
|
71
|
+
super(OptionTypes.Object);
|
|
72
|
+
this.options = [];
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
addString(callback) {
|
|
76
|
+
const builder = new StringListBuilder();
|
|
77
|
+
callback(builder);
|
|
78
|
+
this.options.push(builder);
|
|
79
|
+
return this;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
addNumber(callback) {
|
|
83
|
+
const builder = new NumberListBuilder();
|
|
84
|
+
callback(builder);
|
|
85
|
+
this.options.push(builder);
|
|
86
|
+
return this;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
addBoolean(callback) {
|
|
90
|
+
const builder = new BooleanBuilder();
|
|
91
|
+
callback(builder);
|
|
92
|
+
this.options.push(builder);
|
|
93
|
+
return this;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
build() {
|
|
97
|
+
const base = super.build();
|
|
98
|
+
base.itemConfig.properties = this.options.map(option => option.build());
|
|
99
|
+
return base;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
module.exports = { StringListBuilder, NumberListBuilder, ObjectListBuilder };
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
const { Builder } = require("../builder");
|
|
2
|
+
const { OptionTypes } = require("../utils/types");
|
|
3
|
+
|
|
4
|
+
class NumberBuilder extends Builder {
|
|
5
|
+
constructor() {
|
|
6
|
+
super(OptionTypes.Number);
|
|
7
|
+
this.preview = false;
|
|
8
|
+
this.maxValue = 2147483647;
|
|
9
|
+
this.minValue = -2147483648;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
setPreview(enabled) {
|
|
13
|
+
enabled = Boolean(enabled);
|
|
14
|
+
if (typeof enabled !== "boolean") throw new TypeError("Preview must be a boolean");
|
|
15
|
+
this.preview = enabled;
|
|
16
|
+
return this;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
setMaxValue(value) {
|
|
20
|
+
value = Number(value);
|
|
21
|
+
if (typeof value !== "number" || isNaN(value)) throw new TypeError("Max value must be a number");
|
|
22
|
+
if (value < -2147483648) throw new RangeError("Max value cannot be less than -2147483648");
|
|
23
|
+
if (value > 2147483647) throw new RangeError("Max value cannot exceed 2147483647");
|
|
24
|
+
this.maxValue = value;
|
|
25
|
+
return this;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
setMinValue(value) {
|
|
29
|
+
value = Number(value);
|
|
30
|
+
if (typeof value !== "number" || isNaN(value)) throw new TypeError("Min value must be a number");
|
|
31
|
+
if (value < -2147483648) throw new RangeError("Min value cannot be less than -2147483648");
|
|
32
|
+
if (value > 2147483647) throw new RangeError("Min value cannot exceed 2147483647");
|
|
33
|
+
this.minValue = value;
|
|
34
|
+
return this;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
build() {
|
|
38
|
+
const base = super.build();
|
|
39
|
+
return {
|
|
40
|
+
...base,
|
|
41
|
+
preview: this.preview,
|
|
42
|
+
maxValue: this.maxValue,
|
|
43
|
+
minValue: this.minValue,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
module.exports = {
|
|
49
|
+
NumberBuilder
|
|
50
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
const { Builder } = require("../builder");
|
|
2
|
+
const { OptionTypes } = require("../utils/types");
|
|
3
|
+
const { StringBuilder } = require("./string");
|
|
4
|
+
const { NumberBuilder } = require("./number");
|
|
5
|
+
const { BooleanBuilder } = require("./boolean");
|
|
6
|
+
const { StringListBuilder, NumberListBuilder } = require("./list");
|
|
7
|
+
|
|
8
|
+
class ObjectBuilder extends Builder {
|
|
9
|
+
constructor() {
|
|
10
|
+
super(OptionTypes.Object);
|
|
11
|
+
this.preview = false;
|
|
12
|
+
this.options = [];
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
setPreview(enabled) {
|
|
16
|
+
enabled = Boolean(enabled);
|
|
17
|
+
this.preview = enabled;
|
|
18
|
+
return this;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
#addOptions(options) {
|
|
22
|
+
for (const builder of options) {
|
|
23
|
+
this.options.push(builder);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
addString(callback) {
|
|
28
|
+
const builder = new StringBuilder();
|
|
29
|
+
callback(builder);
|
|
30
|
+
this.#addOptions([builder]);
|
|
31
|
+
return this;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
addNumber(callback) {
|
|
35
|
+
const builder = new NumberBuilder();
|
|
36
|
+
callback(builder);
|
|
37
|
+
this.#addOptions([builder]);
|
|
38
|
+
return this;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
addBoolean(callback) {
|
|
42
|
+
const builder = new BooleanBuilder();
|
|
43
|
+
callback(builder);
|
|
44
|
+
this.#addOptions([builder]);
|
|
45
|
+
return this;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
addStringList(callback) {
|
|
49
|
+
const builder = new StringListBuilder();
|
|
50
|
+
callback(builder);
|
|
51
|
+
this.#addOptions([builder]);
|
|
52
|
+
return this;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
addNumberList(callback) {
|
|
56
|
+
const builder = new NumberListBuilder();
|
|
57
|
+
callback(builder);
|
|
58
|
+
this.#addOptions([builder]);
|
|
59
|
+
return this;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
build() {
|
|
63
|
+
const base = super.build();
|
|
64
|
+
return {
|
|
65
|
+
...base,
|
|
66
|
+
preview: this.preview,
|
|
67
|
+
options: this.options.map(option => option.build()),
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
module.exports = {
|
|
73
|
+
ObjectBuilder,
|
|
74
|
+
};
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
const { Builder } = require("../builder");
|
|
2
|
+
const { OptionTypes } = require("../utils/types");
|
|
3
|
+
const { ComponentTypes } = require("../render/types");
|
|
4
|
+
|
|
5
|
+
class SelectMenuBuilder extends Builder {
|
|
6
|
+
constructor(optionType, selectComponentType) {
|
|
7
|
+
super(optionType);
|
|
8
|
+
this.selectType = selectComponentType;
|
|
9
|
+
this.placeholder = null;
|
|
10
|
+
this.minValues = 1;
|
|
11
|
+
this.maxValues = 1;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
setPlaceholder(text) {
|
|
15
|
+
this.placeholder = String(text);
|
|
16
|
+
return this;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
setMinValues(n) {
|
|
20
|
+
this.minValues = Number(n);
|
|
21
|
+
return this;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
setMaxValues(n) {
|
|
25
|
+
this.maxValues = Number(n);
|
|
26
|
+
return this;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
build() {
|
|
30
|
+
const base = super.build();
|
|
31
|
+
return {
|
|
32
|
+
...base,
|
|
33
|
+
selectType: this.selectType,
|
|
34
|
+
placeholder: this.placeholder,
|
|
35
|
+
minValues: this.minValues,
|
|
36
|
+
maxValues: this.maxValues,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
class StringSelectBuilder extends SelectMenuBuilder {
|
|
42
|
+
constructor() {
|
|
43
|
+
super(OptionTypes.StringSelect, ComponentTypes.StringSelect);
|
|
44
|
+
this.choices = [];
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
addChoice(label, value, callback) {
|
|
48
|
+
const builder = new StringSelectChoiceBuilder(label, value);
|
|
49
|
+
if (callback) {
|
|
50
|
+
callback(builder);
|
|
51
|
+
}
|
|
52
|
+
this.choices.push(builder);
|
|
53
|
+
return this;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
build() {
|
|
57
|
+
const base = super.build();
|
|
58
|
+
return {
|
|
59
|
+
...base,
|
|
60
|
+
choices: this.choices.map(c => c.build()),
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
class StringSelectChoiceBuilder {
|
|
66
|
+
constructor(label, value) {
|
|
67
|
+
this.label = label;
|
|
68
|
+
this.value = value;
|
|
69
|
+
this.description = null;
|
|
70
|
+
this.isDefault = false;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
setDescription(desc) {
|
|
74
|
+
this.description = String(desc);
|
|
75
|
+
return this;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
build() {
|
|
79
|
+
return {
|
|
80
|
+
label: this.label,
|
|
81
|
+
value: this.value,
|
|
82
|
+
description: this.description,
|
|
83
|
+
default: this.isDefault,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
class UserSelectBuilder extends SelectMenuBuilder {
|
|
89
|
+
constructor() {
|
|
90
|
+
super(OptionTypes.UserSelect, ComponentTypes.UserSelect);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
class RoleSelectBuilder extends SelectMenuBuilder {
|
|
95
|
+
constructor() {
|
|
96
|
+
super(OptionTypes.RoleSelect, ComponentTypes.RoleSelect);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
class MentionableSelectBuilder extends SelectMenuBuilder {
|
|
101
|
+
constructor() {
|
|
102
|
+
super(OptionTypes.MentionableSelect, ComponentTypes.MentionableSelect);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
class ChannelSelectBuilder extends SelectMenuBuilder {
|
|
107
|
+
constructor() {
|
|
108
|
+
super(OptionTypes.ChannelSelect, ComponentTypes.ChannelSelect);
|
|
109
|
+
this.channelTypes = [];
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
addChannelType(channelType) {
|
|
113
|
+
this.channelTypes.push(Number(channelType));
|
|
114
|
+
return this;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
build() {
|
|
118
|
+
const base = super.build();
|
|
119
|
+
return {
|
|
120
|
+
...base,
|
|
121
|
+
channelTypes: this.channelTypes,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
module.exports = {
|
|
127
|
+
StringSelectBuilder,
|
|
128
|
+
UserSelectBuilder,
|
|
129
|
+
RoleSelectBuilder,
|
|
130
|
+
MentionableSelectBuilder,
|
|
131
|
+
ChannelSelectBuilder,
|
|
132
|
+
};
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
const { Builder } = require("../builder");
|
|
2
|
+
const { OptionTypes } = require("../utils/types");
|
|
3
|
+
|
|
4
|
+
class StringBuilder extends Builder {
|
|
5
|
+
constructor() {
|
|
6
|
+
super(OptionTypes.String);
|
|
7
|
+
this.preview = false;
|
|
8
|
+
this.maxLength = 4000;
|
|
9
|
+
this.minLength = 0;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
setPreview(enabled) {
|
|
13
|
+
enabled = Boolean(enabled);
|
|
14
|
+
if (typeof enabled !== "boolean") throw new TypeError("Preview must be a boolean");
|
|
15
|
+
this.preview = enabled;
|
|
16
|
+
return this;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
setMaxLength(length) {
|
|
20
|
+
length = Number(length);
|
|
21
|
+
if (typeof length !== "number" || isNaN(length)) throw new TypeError("Max length must be a number");
|
|
22
|
+
if (length < 1) throw new RangeError("Max length must be at least 1");
|
|
23
|
+
if (length > 4000) throw new RangeError("Max length cannot exceed 4000");
|
|
24
|
+
this.maxLength = length;
|
|
25
|
+
return this;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
setMinLength(length) {
|
|
29
|
+
length = Number(length);
|
|
30
|
+
if (typeof length !== "number" || isNaN(length)) throw new TypeError("Min length must be a number");
|
|
31
|
+
if (length < 0) throw new RangeError("Min length cannot be negative");
|
|
32
|
+
if (length > 4000) throw new RangeError("Min length cannot exceed 4000");
|
|
33
|
+
this.minLength = length;
|
|
34
|
+
return this;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
build() {
|
|
38
|
+
const base = super.build();
|
|
39
|
+
return {
|
|
40
|
+
...base,
|
|
41
|
+
preview: this.preview,
|
|
42
|
+
maxLength: this.maxLength,
|
|
43
|
+
minLength: this.minLength,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
module.exports = {
|
|
49
|
+
StringBuilder
|
|
50
|
+
}
|