@magicyan/discord 1.0.23 → 1.0.25
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/functions/components.cjs +1 -5
- package/dist/functions/components.mjs +3 -6
- package/dist/functions/embeds/author.cjs +1 -1
- package/dist/functions/embeds/author.mjs +1 -1
- package/dist/functions/embeds/embedplus.cjs +31 -48
- package/dist/functions/embeds/embedplus.mjs +31 -48
- package/dist/functions/embeds/fields.cjs +93 -0
- package/dist/functions/embeds/fields.mjs +91 -0
- package/dist/functions/members.cjs +7 -6
- package/dist/functions/members.mjs +7 -6
- package/dist/functions/modals.cjs +16 -0
- package/dist/functions/modals.mjs +13 -0
- package/dist/index.cjs +3 -1
- package/dist/index.d.cts +73 -29
- package/dist/index.d.mts +73 -29
- package/dist/index.d.ts +73 -29
- package/dist/index.mjs +2 -1
- package/package.json +2 -2
|
@@ -5,9 +5,6 @@ const discord_js = require('discord.js');
|
|
|
5
5
|
function createRow(...components) {
|
|
6
6
|
return new discord_js.ActionRowBuilder({ components });
|
|
7
7
|
}
|
|
8
|
-
function createModalInput(data) {
|
|
9
|
-
return createRow(new discord_js.TextInputBuilder(data));
|
|
10
|
-
}
|
|
11
8
|
function createLinkButton(data) {
|
|
12
9
|
if (!data.label)
|
|
13
10
|
data.label = data.url;
|
|
@@ -30,7 +27,7 @@ function createComponentsManager(components) {
|
|
|
30
27
|
(row) => row.components.filter((c) => c.type === discord_js.ComponentType.RoleSelect)
|
|
31
28
|
);
|
|
32
29
|
const mentionableSelects = components.flatMap(
|
|
33
|
-
(row) => row.components.filter((c) => c.type === discord_js.ComponentType.
|
|
30
|
+
(row) => row.components.filter((c) => c.type === discord_js.ComponentType.MentionableSelect)
|
|
34
31
|
);
|
|
35
32
|
return {
|
|
36
33
|
getButton(customId) {
|
|
@@ -64,5 +61,4 @@ function createComponentsManager(components) {
|
|
|
64
61
|
|
|
65
62
|
exports.createComponentsManager = createComponentsManager;
|
|
66
63
|
exports.createLinkButton = createLinkButton;
|
|
67
|
-
exports.createModalInput = createModalInput;
|
|
68
64
|
exports.createRow = createRow;
|
|
@@ -1,11 +1,8 @@
|
|
|
1
|
-
import { ActionRowBuilder,
|
|
1
|
+
import { ActionRowBuilder, ButtonBuilder, ButtonStyle, ComponentType } from 'discord.js';
|
|
2
2
|
|
|
3
3
|
function createRow(...components) {
|
|
4
4
|
return new ActionRowBuilder({ components });
|
|
5
5
|
}
|
|
6
|
-
function createModalInput(data) {
|
|
7
|
-
return createRow(new TextInputBuilder(data));
|
|
8
|
-
}
|
|
9
6
|
function createLinkButton(data) {
|
|
10
7
|
if (!data.label)
|
|
11
8
|
data.label = data.url;
|
|
@@ -28,7 +25,7 @@ function createComponentsManager(components) {
|
|
|
28
25
|
(row) => row.components.filter((c) => c.type === ComponentType.RoleSelect)
|
|
29
26
|
);
|
|
30
27
|
const mentionableSelects = components.flatMap(
|
|
31
|
-
(row) => row.components.filter((c) => c.type === ComponentType.
|
|
28
|
+
(row) => row.components.filter((c) => c.type === ComponentType.MentionableSelect)
|
|
32
29
|
);
|
|
33
30
|
return {
|
|
34
31
|
getButton(customId) {
|
|
@@ -60,4 +57,4 @@ function createComponentsManager(components) {
|
|
|
60
57
|
};
|
|
61
58
|
}
|
|
62
59
|
|
|
63
|
-
export { createComponentsManager, createLinkButton,
|
|
60
|
+
export { createComponentsManager, createLinkButton, createRow };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
function createEmbedAuthor(options) {
|
|
4
|
-
const { prefix, suffix, url, iconURL } = options;
|
|
4
|
+
const { prefix = "", suffix = "", url, iconURL } = options;
|
|
5
5
|
const { size = 512, extension, forceStatic } = options;
|
|
6
6
|
const avatarOptions = { size, extension, forceStatic };
|
|
7
7
|
if ("member" in options) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
function createEmbedAuthor(options) {
|
|
2
|
-
const { prefix, suffix, url, iconURL } = options;
|
|
2
|
+
const { prefix = "", suffix = "", url, iconURL } = options;
|
|
3
3
|
const { size = 512, extension, forceStatic } = options;
|
|
4
4
|
const avatarOptions = { size, extension, forceStatic };
|
|
5
5
|
if ("member" in options) {
|
|
@@ -4,36 +4,44 @@ const discord_js = require('discord.js');
|
|
|
4
4
|
const chars = require('../../constants/chars.cjs');
|
|
5
5
|
const assets = require('./assets.cjs');
|
|
6
6
|
const footer = require('./footer.cjs');
|
|
7
|
+
const fields = require('./fields.cjs');
|
|
7
8
|
|
|
9
|
+
var __defProp = Object.defineProperty;
|
|
10
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
11
|
+
var __publicField = (obj, key, value) => {
|
|
12
|
+
__defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
13
|
+
return value;
|
|
14
|
+
};
|
|
8
15
|
class EmbedPlusBuilder extends discord_js.EmbedBuilder {
|
|
9
16
|
constructor(data) {
|
|
10
17
|
const extendsEmbed = data.extends ? new EmbedPlusBuilder(
|
|
11
18
|
data.extends instanceof discord_js.Embed || data.extends instanceof discord_js.EmbedBuilder ? data.extends.data : data.extends
|
|
12
19
|
).data : {};
|
|
13
|
-
const { fields: extendsFields, ...
|
|
14
|
-
const
|
|
20
|
+
const { fields: extendsFields, ...extendData } = extendsEmbed;
|
|
21
|
+
const { mergeFields = true } = data;
|
|
22
|
+
const fields$1 = (mergeFields ? [extendsFields ?? [], data.fields ?? []].flat() : data.fields ?? extendsFields ?? []).map(({ name = chars.chars.invisible, value = chars.chars.invisible, inline }) => ({
|
|
15
23
|
name,
|
|
16
24
|
value,
|
|
17
25
|
inline
|
|
18
26
|
}));
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
});
|
|
30
|
-
if (data.timestamp)
|
|
27
|
+
const builderData = Object.assign({}, extendData, data, { fields: fields$1 });
|
|
28
|
+
const { color, footer: footer$1, image, thumbnail, timestamp } = data;
|
|
29
|
+
if (footer$1)
|
|
30
|
+
Object.assign(builderData, { footer: footer.createEmbedFooter(footer$1) });
|
|
31
|
+
if (image)
|
|
32
|
+
Object.assign(builderData, { image: assets.createEmbedAsset(image) });
|
|
33
|
+
if (thumbnail)
|
|
34
|
+
Object.assign(builderData, { thumbnail: assets.createEmbedAsset(thumbnail) });
|
|
35
|
+
const embed = new discord_js.EmbedBuilder(builderData);
|
|
36
|
+
if (timestamp)
|
|
31
37
|
embed.setTimestamp(
|
|
32
|
-
typeof
|
|
38
|
+
typeof timestamp === "string" ? new Date(timestamp) : timestamp
|
|
33
39
|
);
|
|
34
|
-
if (
|
|
35
|
-
embed.setColor(
|
|
40
|
+
if (color)
|
|
41
|
+
embed.setColor(color);
|
|
36
42
|
super(embed.data);
|
|
43
|
+
__publicField(this, "fields");
|
|
44
|
+
this.fields = new fields.EmbedPlusField(this);
|
|
37
45
|
}
|
|
38
46
|
has(property) {
|
|
39
47
|
return Boolean(this.data[property]);
|
|
@@ -44,31 +52,6 @@ class EmbedPlusBuilder extends discord_js.EmbedBuilder {
|
|
|
44
52
|
toString(space = 2) {
|
|
45
53
|
return JSON.stringify(this, null, space);
|
|
46
54
|
}
|
|
47
|
-
updateField(index, field) {
|
|
48
|
-
if (this.fields.at(index)) {
|
|
49
|
-
const fields = Array.from(this.fields);
|
|
50
|
-
if (field.name)
|
|
51
|
-
fields[index].name = field.name;
|
|
52
|
-
if (field.value)
|
|
53
|
-
fields[index].value = field.value;
|
|
54
|
-
if (field.inline)
|
|
55
|
-
fields[index].inline = field.inline;
|
|
56
|
-
this.setFields(fields);
|
|
57
|
-
}
|
|
58
|
-
return this;
|
|
59
|
-
}
|
|
60
|
-
deleteField(index) {
|
|
61
|
-
if (this.fields.at(index)) {
|
|
62
|
-
this.setFields(this.fields.toSpliced(index, 1));
|
|
63
|
-
}
|
|
64
|
-
return this;
|
|
65
|
-
}
|
|
66
|
-
popField() {
|
|
67
|
-
const fields = Array.from(this.fields);
|
|
68
|
-
const field = fields.pop();
|
|
69
|
-
this.setFields(fields);
|
|
70
|
-
return field;
|
|
71
|
-
}
|
|
72
55
|
setAsset(asset, source) {
|
|
73
56
|
const assetData = assets.createEmbedAsset(source);
|
|
74
57
|
if (!assetData?.url)
|
|
@@ -76,16 +59,16 @@ class EmbedPlusBuilder extends discord_js.EmbedBuilder {
|
|
|
76
59
|
asset === "image" ? this.setImage(assetData.url) : this.setThumbnail(assetData.url);
|
|
77
60
|
return this;
|
|
78
61
|
}
|
|
79
|
-
|
|
80
|
-
return
|
|
62
|
+
static fromInteraction(interaction, index = 0, data = {}) {
|
|
63
|
+
return EmbedPlusBuilder.fromMessage(interaction.message, index, data);
|
|
81
64
|
}
|
|
82
|
-
|
|
83
|
-
return
|
|
65
|
+
static fromMessage(message, index = 0, data = {}) {
|
|
66
|
+
return new EmbedPlusBuilder(Object.assign({ extends: message.embeds[index] }, data));
|
|
84
67
|
}
|
|
85
68
|
}
|
|
86
69
|
function createEmbed(options) {
|
|
87
|
-
const { array = false, ...data } = options;
|
|
88
|
-
const embed = new EmbedPlusBuilder(data);
|
|
70
|
+
const { array = false, interaction, ...data } = options;
|
|
71
|
+
const embed = interaction ? EmbedPlusBuilder.fromInteraction(interaction, 0, data) : new EmbedPlusBuilder(data);
|
|
89
72
|
return array ? [embed] : embed;
|
|
90
73
|
}
|
|
91
74
|
|
|
@@ -2,36 +2,44 @@ import { EmbedBuilder, Embed } from 'discord.js';
|
|
|
2
2
|
import { chars } from '../../constants/chars.mjs';
|
|
3
3
|
import { createEmbedAsset } from './assets.mjs';
|
|
4
4
|
import { createEmbedFooter } from './footer.mjs';
|
|
5
|
+
import { EmbedPlusField } from './fields.mjs';
|
|
5
6
|
|
|
7
|
+
var __defProp = Object.defineProperty;
|
|
8
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
9
|
+
var __publicField = (obj, key, value) => {
|
|
10
|
+
__defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
11
|
+
return value;
|
|
12
|
+
};
|
|
6
13
|
class EmbedPlusBuilder extends EmbedBuilder {
|
|
7
14
|
constructor(data) {
|
|
8
15
|
const extendsEmbed = data.extends ? new EmbedPlusBuilder(
|
|
9
16
|
data.extends instanceof Embed || data.extends instanceof EmbedBuilder ? data.extends.data : data.extends
|
|
10
17
|
).data : {};
|
|
11
|
-
const { fields: extendsFields, ...
|
|
12
|
-
const
|
|
18
|
+
const { fields: extendsFields, ...extendData } = extendsEmbed;
|
|
19
|
+
const { mergeFields = true } = data;
|
|
20
|
+
const fields = (mergeFields ? [extendsFields ?? [], data.fields ?? []].flat() : data.fields ?? extendsFields ?? []).map(({ name = chars.invisible, value = chars.invisible, inline }) => ({
|
|
13
21
|
name,
|
|
14
22
|
value,
|
|
15
23
|
inline
|
|
16
24
|
}));
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
});
|
|
28
|
-
if (data.timestamp)
|
|
25
|
+
const builderData = Object.assign({}, extendData, data, { fields });
|
|
26
|
+
const { color, footer, image, thumbnail, timestamp } = data;
|
|
27
|
+
if (footer)
|
|
28
|
+
Object.assign(builderData, { footer: createEmbedFooter(footer) });
|
|
29
|
+
if (image)
|
|
30
|
+
Object.assign(builderData, { image: createEmbedAsset(image) });
|
|
31
|
+
if (thumbnail)
|
|
32
|
+
Object.assign(builderData, { thumbnail: createEmbedAsset(thumbnail) });
|
|
33
|
+
const embed = new EmbedBuilder(builderData);
|
|
34
|
+
if (timestamp)
|
|
29
35
|
embed.setTimestamp(
|
|
30
|
-
typeof
|
|
36
|
+
typeof timestamp === "string" ? new Date(timestamp) : timestamp
|
|
31
37
|
);
|
|
32
|
-
if (
|
|
33
|
-
embed.setColor(
|
|
38
|
+
if (color)
|
|
39
|
+
embed.setColor(color);
|
|
34
40
|
super(embed.data);
|
|
41
|
+
__publicField(this, "fields");
|
|
42
|
+
this.fields = new EmbedPlusField(this);
|
|
35
43
|
}
|
|
36
44
|
has(property) {
|
|
37
45
|
return Boolean(this.data[property]);
|
|
@@ -42,31 +50,6 @@ class EmbedPlusBuilder extends EmbedBuilder {
|
|
|
42
50
|
toString(space = 2) {
|
|
43
51
|
return JSON.stringify(this, null, space);
|
|
44
52
|
}
|
|
45
|
-
updateField(index, field) {
|
|
46
|
-
if (this.fields.at(index)) {
|
|
47
|
-
const fields = Array.from(this.fields);
|
|
48
|
-
if (field.name)
|
|
49
|
-
fields[index].name = field.name;
|
|
50
|
-
if (field.value)
|
|
51
|
-
fields[index].value = field.value;
|
|
52
|
-
if (field.inline)
|
|
53
|
-
fields[index].inline = field.inline;
|
|
54
|
-
this.setFields(fields);
|
|
55
|
-
}
|
|
56
|
-
return this;
|
|
57
|
-
}
|
|
58
|
-
deleteField(index) {
|
|
59
|
-
if (this.fields.at(index)) {
|
|
60
|
-
this.setFields(this.fields.toSpliced(index, 1));
|
|
61
|
-
}
|
|
62
|
-
return this;
|
|
63
|
-
}
|
|
64
|
-
popField() {
|
|
65
|
-
const fields = Array.from(this.fields);
|
|
66
|
-
const field = fields.pop();
|
|
67
|
-
this.setFields(fields);
|
|
68
|
-
return field;
|
|
69
|
-
}
|
|
70
53
|
setAsset(asset, source) {
|
|
71
54
|
const assetData = createEmbedAsset(source);
|
|
72
55
|
if (!assetData?.url)
|
|
@@ -74,16 +57,16 @@ class EmbedPlusBuilder extends EmbedBuilder {
|
|
|
74
57
|
asset === "image" ? this.setImage(assetData.url) : this.setThumbnail(assetData.url);
|
|
75
58
|
return this;
|
|
76
59
|
}
|
|
77
|
-
|
|
78
|
-
return
|
|
60
|
+
static fromInteraction(interaction, index = 0, data = {}) {
|
|
61
|
+
return EmbedPlusBuilder.fromMessage(interaction.message, index, data);
|
|
79
62
|
}
|
|
80
|
-
|
|
81
|
-
return
|
|
63
|
+
static fromMessage(message, index = 0, data = {}) {
|
|
64
|
+
return new EmbedPlusBuilder(Object.assign({ extends: message.embeds[index] }, data));
|
|
82
65
|
}
|
|
83
66
|
}
|
|
84
67
|
function createEmbed(options) {
|
|
85
|
-
const { array = false, ...data } = options;
|
|
86
|
-
const embed = new EmbedPlusBuilder(data);
|
|
68
|
+
const { array = false, interaction, ...data } = options;
|
|
69
|
+
const embed = interaction ? EmbedPlusBuilder.fromInteraction(interaction, 0, data) : new EmbedPlusBuilder(data);
|
|
87
70
|
return array ? [embed] : embed;
|
|
88
71
|
}
|
|
89
72
|
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
5
|
+
var __publicField = (obj, key, value) => {
|
|
6
|
+
__defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
7
|
+
return value;
|
|
8
|
+
};
|
|
9
|
+
class EmbedPlusField {
|
|
10
|
+
constructor(embed) {
|
|
11
|
+
__publicField(this, "embed");
|
|
12
|
+
this.embed = embed;
|
|
13
|
+
}
|
|
14
|
+
set fields(fields) {
|
|
15
|
+
this.embed.setFields(fields);
|
|
16
|
+
}
|
|
17
|
+
get fields() {
|
|
18
|
+
return this.embed.data.fields ?? [];
|
|
19
|
+
}
|
|
20
|
+
[Symbol.iterator]() {
|
|
21
|
+
let pointer = 0;
|
|
22
|
+
const fields = this.fields;
|
|
23
|
+
return {
|
|
24
|
+
next() {
|
|
25
|
+
return {
|
|
26
|
+
done: pointer >= fields.length,
|
|
27
|
+
value: fields[pointer++] ?? null
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
get length() {
|
|
33
|
+
return this.fields.length;
|
|
34
|
+
}
|
|
35
|
+
get record() {
|
|
36
|
+
return this.fields.reduce(
|
|
37
|
+
(record, { name, value }) => Object.assign(record, { [name]: value }),
|
|
38
|
+
{}
|
|
39
|
+
);
|
|
40
|
+
}
|
|
41
|
+
get(query) {
|
|
42
|
+
const isIndex = typeof query == "number";
|
|
43
|
+
if (isIndex)
|
|
44
|
+
return this.fields[query];
|
|
45
|
+
return this.fields.find((f) => f.name === query);
|
|
46
|
+
}
|
|
47
|
+
find(predicate) {
|
|
48
|
+
return this.fields.find(predicate);
|
|
49
|
+
}
|
|
50
|
+
push(...fields) {
|
|
51
|
+
this.embed.addFields(fields);
|
|
52
|
+
}
|
|
53
|
+
set(...fields) {
|
|
54
|
+
this.embed.setFields(fields);
|
|
55
|
+
}
|
|
56
|
+
update(predicate, field) {
|
|
57
|
+
const index = this.getPredicateIndex(predicate);
|
|
58
|
+
if (index == -1)
|
|
59
|
+
return false;
|
|
60
|
+
const embedField = this.get(index);
|
|
61
|
+
if (!embedField)
|
|
62
|
+
return false;
|
|
63
|
+
this.embed.spliceFields(index, 1, Object.assign(embedField, field));
|
|
64
|
+
return true;
|
|
65
|
+
}
|
|
66
|
+
delete(predicate) {
|
|
67
|
+
const index = this.getPredicateIndex(predicate);
|
|
68
|
+
if (index == -1)
|
|
69
|
+
return false;
|
|
70
|
+
const embedField = this.get(index);
|
|
71
|
+
if (!embedField)
|
|
72
|
+
return false;
|
|
73
|
+
this.embed.spliceFields(index, 1);
|
|
74
|
+
return true;
|
|
75
|
+
}
|
|
76
|
+
toArray() {
|
|
77
|
+
return Array.from(this);
|
|
78
|
+
}
|
|
79
|
+
getPredicateIndex(predicate) {
|
|
80
|
+
switch (typeof predicate) {
|
|
81
|
+
case "function":
|
|
82
|
+
return this.fields.findIndex(predicate);
|
|
83
|
+
case "string":
|
|
84
|
+
return this.fields.findIndex((f) => f.name == predicate);
|
|
85
|
+
case "number":
|
|
86
|
+
return predicate;
|
|
87
|
+
default:
|
|
88
|
+
return -1;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
exports.EmbedPlusField = EmbedPlusField;
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
3
|
+
var __publicField = (obj, key, value) => {
|
|
4
|
+
__defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
5
|
+
return value;
|
|
6
|
+
};
|
|
7
|
+
class EmbedPlusField {
|
|
8
|
+
constructor(embed) {
|
|
9
|
+
__publicField(this, "embed");
|
|
10
|
+
this.embed = embed;
|
|
11
|
+
}
|
|
12
|
+
set fields(fields) {
|
|
13
|
+
this.embed.setFields(fields);
|
|
14
|
+
}
|
|
15
|
+
get fields() {
|
|
16
|
+
return this.embed.data.fields ?? [];
|
|
17
|
+
}
|
|
18
|
+
[Symbol.iterator]() {
|
|
19
|
+
let pointer = 0;
|
|
20
|
+
const fields = this.fields;
|
|
21
|
+
return {
|
|
22
|
+
next() {
|
|
23
|
+
return {
|
|
24
|
+
done: pointer >= fields.length,
|
|
25
|
+
value: fields[pointer++] ?? null
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
get length() {
|
|
31
|
+
return this.fields.length;
|
|
32
|
+
}
|
|
33
|
+
get record() {
|
|
34
|
+
return this.fields.reduce(
|
|
35
|
+
(record, { name, value }) => Object.assign(record, { [name]: value }),
|
|
36
|
+
{}
|
|
37
|
+
);
|
|
38
|
+
}
|
|
39
|
+
get(query) {
|
|
40
|
+
const isIndex = typeof query == "number";
|
|
41
|
+
if (isIndex)
|
|
42
|
+
return this.fields[query];
|
|
43
|
+
return this.fields.find((f) => f.name === query);
|
|
44
|
+
}
|
|
45
|
+
find(predicate) {
|
|
46
|
+
return this.fields.find(predicate);
|
|
47
|
+
}
|
|
48
|
+
push(...fields) {
|
|
49
|
+
this.embed.addFields(fields);
|
|
50
|
+
}
|
|
51
|
+
set(...fields) {
|
|
52
|
+
this.embed.setFields(fields);
|
|
53
|
+
}
|
|
54
|
+
update(predicate, field) {
|
|
55
|
+
const index = this.getPredicateIndex(predicate);
|
|
56
|
+
if (index == -1)
|
|
57
|
+
return false;
|
|
58
|
+
const embedField = this.get(index);
|
|
59
|
+
if (!embedField)
|
|
60
|
+
return false;
|
|
61
|
+
this.embed.spliceFields(index, 1, Object.assign(embedField, field));
|
|
62
|
+
return true;
|
|
63
|
+
}
|
|
64
|
+
delete(predicate) {
|
|
65
|
+
const index = this.getPredicateIndex(predicate);
|
|
66
|
+
if (index == -1)
|
|
67
|
+
return false;
|
|
68
|
+
const embedField = this.get(index);
|
|
69
|
+
if (!embedField)
|
|
70
|
+
return false;
|
|
71
|
+
this.embed.spliceFields(index, 1);
|
|
72
|
+
return true;
|
|
73
|
+
}
|
|
74
|
+
toArray() {
|
|
75
|
+
return Array.from(this);
|
|
76
|
+
}
|
|
77
|
+
getPredicateIndex(predicate) {
|
|
78
|
+
switch (typeof predicate) {
|
|
79
|
+
case "function":
|
|
80
|
+
return this.fields.findIndex(predicate);
|
|
81
|
+
case "string":
|
|
82
|
+
return this.fields.findIndex((f) => f.name == predicate);
|
|
83
|
+
case "number":
|
|
84
|
+
return predicate;
|
|
85
|
+
default:
|
|
86
|
+
return -1;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
export { EmbedPlusField };
|
|
@@ -1,24 +1,25 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
function findMember(guild) {
|
|
4
|
+
const cache = guild.members.cache;
|
|
4
5
|
return {
|
|
5
6
|
byGlobalName(globalName, and = () => true) {
|
|
6
|
-
return
|
|
7
|
+
return cache.find((member) => member.user.globalName == globalName && and(member));
|
|
7
8
|
},
|
|
8
9
|
byNickname(nickname, and = () => true) {
|
|
9
|
-
return
|
|
10
|
+
return cache.find((member) => member.nickname && member.nickname == nickname && and(member));
|
|
10
11
|
},
|
|
11
12
|
byUsername(username, and = () => true) {
|
|
12
|
-
return
|
|
13
|
+
return cache.find((member) => member.user.username === username && and(member));
|
|
13
14
|
},
|
|
14
15
|
byDisplayName(displayName, and = () => true) {
|
|
15
|
-
return
|
|
16
|
+
return cache.find((member) => member.displayName === displayName && and(member));
|
|
16
17
|
},
|
|
17
18
|
byId(id) {
|
|
18
|
-
return
|
|
19
|
+
return cache.get(id);
|
|
19
20
|
},
|
|
20
21
|
byFilter(filter) {
|
|
21
|
-
return
|
|
22
|
+
return cache.find(filter);
|
|
22
23
|
}
|
|
23
24
|
};
|
|
24
25
|
}
|
|
@@ -1,22 +1,23 @@
|
|
|
1
1
|
function findMember(guild) {
|
|
2
|
+
const cache = guild.members.cache;
|
|
2
3
|
return {
|
|
3
4
|
byGlobalName(globalName, and = () => true) {
|
|
4
|
-
return
|
|
5
|
+
return cache.find((member) => member.user.globalName == globalName && and(member));
|
|
5
6
|
},
|
|
6
7
|
byNickname(nickname, and = () => true) {
|
|
7
|
-
return
|
|
8
|
+
return cache.find((member) => member.nickname && member.nickname == nickname && and(member));
|
|
8
9
|
},
|
|
9
10
|
byUsername(username, and = () => true) {
|
|
10
|
-
return
|
|
11
|
+
return cache.find((member) => member.user.username === username && and(member));
|
|
11
12
|
},
|
|
12
13
|
byDisplayName(displayName, and = () => true) {
|
|
13
|
-
return
|
|
14
|
+
return cache.find((member) => member.displayName === displayName && and(member));
|
|
14
15
|
},
|
|
15
16
|
byId(id) {
|
|
16
|
-
return
|
|
17
|
+
return cache.get(id);
|
|
17
18
|
},
|
|
18
19
|
byFilter(filter) {
|
|
19
|
-
return
|
|
20
|
+
return cache.find(filter);
|
|
20
21
|
}
|
|
21
22
|
};
|
|
22
23
|
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const discord_js = require('discord.js');
|
|
4
|
+
const components = require('./components.cjs');
|
|
5
|
+
|
|
6
|
+
function createModalInput(data) {
|
|
7
|
+
return components.createRow(new discord_js.TextInputBuilder(data));
|
|
8
|
+
}
|
|
9
|
+
function createModalFields(data) {
|
|
10
|
+
return Object.entries(data).map(
|
|
11
|
+
([customId, data2]) => createModalInput(Object.assign({ customId }, data2))
|
|
12
|
+
);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
exports.createModalFields = createModalFields;
|
|
16
|
+
exports.createModalInput = createModalInput;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { TextInputBuilder } from 'discord.js';
|
|
2
|
+
import { createRow } from './components.mjs';
|
|
3
|
+
|
|
4
|
+
function createModalInput(data) {
|
|
5
|
+
return createRow(new TextInputBuilder(data));
|
|
6
|
+
}
|
|
7
|
+
function createModalFields(data) {
|
|
8
|
+
return Object.entries(data).map(
|
|
9
|
+
([customId, data2]) => createModalInput(Object.assign({ customId }, data2))
|
|
10
|
+
);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export { createModalFields, createModalInput };
|
package/dist/index.cjs
CHANGED
|
@@ -6,6 +6,7 @@ const misc = require('./functions/misc.cjs');
|
|
|
6
6
|
const channels = require('./functions/channels.cjs');
|
|
7
7
|
const commands = require('./functions/commands.cjs');
|
|
8
8
|
const components = require('./functions/components.cjs');
|
|
9
|
+
const modals = require('./functions/modals.cjs');
|
|
9
10
|
const emojis = require('./functions/emojis.cjs');
|
|
10
11
|
const format = require('./functions/format.cjs');
|
|
11
12
|
const members = require('./functions/members.cjs');
|
|
@@ -29,8 +30,9 @@ exports.getChannelUrlInfo = channels.getChannelUrlInfo;
|
|
|
29
30
|
exports.findCommand = commands.findCommand;
|
|
30
31
|
exports.createComponentsManager = components.createComponentsManager;
|
|
31
32
|
exports.createLinkButton = components.createLinkButton;
|
|
32
|
-
exports.createModalInput = components.createModalInput;
|
|
33
33
|
exports.createRow = components.createRow;
|
|
34
|
+
exports.createModalFields = modals.createModalFields;
|
|
35
|
+
exports.createModalInput = modals.createModalInput;
|
|
34
36
|
exports.findEmoji = emojis.findEmoji;
|
|
35
37
|
exports.formatedMention = format.formatedMention;
|
|
36
38
|
exports.findMember = members.findMember;
|
package/dist/index.d.cts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as discord_js from 'discord.js';
|
|
2
|
-
import { GatewayIntentBits, Partials, ChannelType, Guild, CommandInteractionOption, Client, ApplicationCommand, AnyComponentBuilder, ActionRowBuilder,
|
|
2
|
+
import { GatewayIntentBits, Partials, ChannelType, Guild, CommandInteractionOption, Client, ApplicationCommand, AnyComponentBuilder, ActionRowBuilder, ButtonBuilder, ActionRow, MessageActionRowComponent, LinkButtonComponentData, ButtonComponent, StringSelectMenuComponent, UserSelectMenuComponent, ChannelSelectMenuComponent, RoleSelectMenuComponent, MentionableSelectMenuComponent, TextInputBuilder, TextInputComponentData, GuildEmoji, GuildBasedChannel, Role, User, GuildMember, GuildTextBasedChannel, Message, Attachment, AttachmentBuilder, EmbedAssetData, EmbedAuthorData, ImageURLOptions, EmbedFooterData, APIEmbed, Embed, EmbedBuilder, EmbedData, ColorResolvable } from 'discord.js';
|
|
3
3
|
export * from '@magicyan/core';
|
|
4
4
|
|
|
5
5
|
declare const chars: {
|
|
@@ -58,9 +58,6 @@ declare function findCommand(guildOrClient: Guild | Client<true>): {
|
|
|
58
58
|
};
|
|
59
59
|
|
|
60
60
|
declare function createRow<Component extends AnyComponentBuilder>(...components: Component[]): ActionRowBuilder<Component>;
|
|
61
|
-
interface CreateModalInputData extends Omit<TextInputComponentData, "type"> {
|
|
62
|
-
}
|
|
63
|
-
declare function createModalInput(data: CreateModalInputData): ActionRowBuilder<TextInputBuilder>;
|
|
64
61
|
interface CreateLinkButtonData extends Omit<LinkButtonComponentData, "style" | "type"> {
|
|
65
62
|
}
|
|
66
63
|
declare function createLinkButton(data: CreateLinkButtonData): ButtonBuilder;
|
|
@@ -88,6 +85,12 @@ interface MessageComponentsManager {
|
|
|
88
85
|
}
|
|
89
86
|
declare function createComponentsManager(components: ActionRow<MessageActionRowComponent>[]): MessageComponentsManager;
|
|
90
87
|
|
|
88
|
+
type TextInputData = Omit<TextInputComponentData, "type">;
|
|
89
|
+
type CreateModalInputData = TextInputData;
|
|
90
|
+
declare function createModalInput(data: CreateModalInputData): ActionRowBuilder<TextInputBuilder>;
|
|
91
|
+
type ModalFieldsData = Record<string, Omit<TextInputData, "customId">>;
|
|
92
|
+
declare function createModalFields(data: ModalFieldsData): ActionRowBuilder<TextInputBuilder>[];
|
|
93
|
+
|
|
91
94
|
type FindEmojiFilter = (emoji: GuildEmoji) => boolean;
|
|
92
95
|
declare function findEmoji(guildOrClient: Guild | Client): {
|
|
93
96
|
byName(name: string, animated?: boolean, and?: FindEmojiFilter): GuildEmoji | undefined;
|
|
@@ -125,6 +128,16 @@ interface MessageUrlInfo {
|
|
|
125
128
|
declare function getMessageUrlInfo(url: string): MessageUrlInfo;
|
|
126
129
|
|
|
127
130
|
type FindRoleFilter = (role: Role) => boolean;
|
|
131
|
+
/**
|
|
132
|
+
*
|
|
133
|
+
* @param guild Discord guild
|
|
134
|
+
*
|
|
135
|
+
* ```ts
|
|
136
|
+
* const memberRole = findRole(guild).byName("Member");
|
|
137
|
+
* const adminRole = findRole(guild).byHexColor("#ff5454");
|
|
138
|
+
* const leaderRole = findRole(guild).byId("537818031728885771");
|
|
139
|
+
* ```
|
|
140
|
+
*/
|
|
128
141
|
declare function findRole(guild: Guild): {
|
|
129
142
|
byColor(color: number, and?: FindRoleFilter): Role | undefined;
|
|
130
143
|
byHexColor(hexColor: string, and?: FindRoleFilter): Role | undefined;
|
|
@@ -150,9 +163,9 @@ declare function findRole(guild: Guild): {
|
|
|
150
163
|
*/
|
|
151
164
|
declare function extractMentionId(mention: string): string | null;
|
|
152
165
|
|
|
166
|
+
type EmbedPlusAssetData = string | Attachment | AttachmentBuilder | EmbedAssetData | undefined | null;
|
|
153
167
|
type EmbedAssetOptions = Omit<EmbedAssetData, "url">;
|
|
154
|
-
|
|
155
|
-
declare function createEmbedAsset(source: AssetSource, options?: EmbedAssetOptions): EmbedAssetData | undefined;
|
|
168
|
+
declare function createEmbedAsset(source: EmbedPlusAssetData, options?: EmbedAssetOptions): EmbedAssetData | undefined;
|
|
156
169
|
|
|
157
170
|
interface UserAuthorOption {
|
|
158
171
|
user: User;
|
|
@@ -171,17 +184,48 @@ type CreateEmbedAuthorOptions = AuthorOption & ImageURLOptions & {
|
|
|
171
184
|
};
|
|
172
185
|
declare function createEmbedAuthor(options: CreateEmbedAuthorOptions): EmbedAuthorData;
|
|
173
186
|
|
|
174
|
-
type
|
|
175
|
-
|
|
187
|
+
type EmbedPlusFooterData = {
|
|
188
|
+
text?: string | null;
|
|
189
|
+
iconURL?: string | null;
|
|
190
|
+
};
|
|
191
|
+
declare function createEmbedFooter(options: EmbedPlusFooterData): EmbedFooterData | undefined;
|
|
192
|
+
|
|
176
193
|
type EmbedPlusFieldData = {
|
|
177
194
|
name: string;
|
|
178
195
|
value: string;
|
|
179
196
|
inline?: boolean;
|
|
180
197
|
};
|
|
181
|
-
type
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
198
|
+
type FieldPredicate = (field: EmbedPlusFieldData, index: number, obj: EmbedPlusFieldData[]) => boolean;
|
|
199
|
+
declare class EmbedPlusField {
|
|
200
|
+
private embed;
|
|
201
|
+
private set fields(value);
|
|
202
|
+
private get fields();
|
|
203
|
+
constructor(embed: EmbedPlusBuilder);
|
|
204
|
+
[Symbol.iterator](): {
|
|
205
|
+
next(): IteratorResult<EmbedPlusFieldData>;
|
|
206
|
+
};
|
|
207
|
+
get length(): number;
|
|
208
|
+
get record(): Record<string, string>;
|
|
209
|
+
/**
|
|
210
|
+
* Get a filed by index
|
|
211
|
+
* @param name Field name
|
|
212
|
+
*/
|
|
213
|
+
get(name: string): EmbedPlusFieldData | undefined;
|
|
214
|
+
/**
|
|
215
|
+
* Get a field by name
|
|
216
|
+
* @param index Field index
|
|
217
|
+
*/
|
|
218
|
+
get(index: number): EmbedPlusFieldData | undefined;
|
|
219
|
+
find(predicate: FieldPredicate): EmbedPlusFieldData | undefined;
|
|
220
|
+
push(...fields: EmbedPlusFieldData[]): void;
|
|
221
|
+
set(...fields: EmbedPlusFieldData[]): void;
|
|
222
|
+
update(predicate: string | number | FieldPredicate, field: Partial<EmbedPlusFieldData>): boolean;
|
|
223
|
+
delete(predicate: number | FieldPredicate): boolean;
|
|
224
|
+
toArray(): EmbedPlusFieldData[];
|
|
225
|
+
private getPredicateIndex;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
type EmbedPlusColorData = string & {} | ColorResolvable | null;
|
|
185
229
|
type EmbedPlusAuthorData = {
|
|
186
230
|
name: string;
|
|
187
231
|
url?: string;
|
|
@@ -192,40 +236,40 @@ interface EmbedPlusData {
|
|
|
192
236
|
color?: EmbedPlusColorData | null;
|
|
193
237
|
description?: string | null;
|
|
194
238
|
url?: string | null;
|
|
195
|
-
thumbnail?: EmbedPlusAssetData
|
|
196
|
-
image?: EmbedPlusAssetData
|
|
239
|
+
thumbnail?: EmbedPlusAssetData;
|
|
240
|
+
image?: EmbedPlusAssetData;
|
|
197
241
|
fields?: Partial<EmbedPlusFieldData>[] | null;
|
|
198
242
|
timestamp?: string | number | Date | null;
|
|
199
243
|
footer?: EmbedPlusFooterData;
|
|
200
244
|
author?: EmbedPlusAuthorData;
|
|
201
245
|
}
|
|
246
|
+
type AnyEmbed = APIEmbed | Embed | EmbedBuilder | EmbedData;
|
|
247
|
+
interface MessageWithEmbeds {
|
|
248
|
+
embeds: Array<Embed>;
|
|
249
|
+
}
|
|
250
|
+
interface InteractionWithEmbeds {
|
|
251
|
+
message: MessageWithEmbeds;
|
|
252
|
+
}
|
|
202
253
|
interface EmbedPlusOptions extends EmbedPlusData {
|
|
203
|
-
extends?: Omit<EmbedPlusData, keyof EmbedPlusOptions> |
|
|
254
|
+
extends?: Omit<EmbedPlusData, keyof EmbedPlusOptions> | AnyEmbed;
|
|
204
255
|
mergeFields?: boolean;
|
|
205
256
|
}
|
|
206
257
|
declare class EmbedPlusBuilder extends EmbedBuilder {
|
|
258
|
+
fields: EmbedPlusField;
|
|
207
259
|
constructor(data: EmbedPlusOptions);
|
|
208
260
|
has(property: keyof Omit<EmbedPlusData, keyof EmbedPlusOptions>): boolean;
|
|
209
|
-
toArray():
|
|
261
|
+
toArray(): EmbedPlusBuilder[];
|
|
210
262
|
toString(space?: number): string;
|
|
211
|
-
updateField(index: number, field: Partial<EmbedPlusFieldData>): this;
|
|
212
|
-
deleteField(index: number): this;
|
|
213
|
-
popField(): discord_js.APIEmbedField | undefined;
|
|
214
263
|
setAsset(asset: "thumbnail" | "image", source: EmbedPlusAssetData): this;
|
|
215
|
-
|
|
216
|
-
|
|
264
|
+
static fromInteraction(interaction: InteractionWithEmbeds, index?: number, data?: EmbedPlusData): EmbedPlusBuilder;
|
|
265
|
+
static fromMessage(message: MessageWithEmbeds, index?: number, data?: EmbedPlusData): EmbedPlusBuilder;
|
|
217
266
|
}
|
|
218
|
-
type
|
|
267
|
+
type EmbedPlusProperty<P extends keyof EmbedPlusData> = EmbedPlusData[P];
|
|
219
268
|
interface CreateEmbedOptions<B extends boolean> extends EmbedPlusOptions {
|
|
220
269
|
array?: B;
|
|
270
|
+
interaction?: InteractionWithEmbeds;
|
|
221
271
|
}
|
|
222
272
|
type CreateEmbedReturn<B> = undefined extends B ? EmbedPlusBuilder : false extends B ? EmbedPlusBuilder : EmbedPlusBuilder[];
|
|
223
273
|
declare function createEmbed<B extends boolean>(options: CreateEmbedOptions<B>): CreateEmbedReturn<B>;
|
|
224
274
|
|
|
225
|
-
|
|
226
|
-
text?: string | null;
|
|
227
|
-
iconURL?: string | null;
|
|
228
|
-
}
|
|
229
|
-
declare function createEmbedFooter(options: CreateEmbedFooterOptions): EmbedFooterData | undefined;
|
|
230
|
-
|
|
231
|
-
export { type AssetSource, CustomItents, CustomPartials, EmbedPlusBuilder, type EmbedPlusPropery, chars, createComponentsManager, createEmbed, createEmbedAsset, createEmbedAuthor, createEmbedFooter, createLinkButton, createModalInput, createRow, extractMentionId, findChannel, findCommand, findEmoji, findMember, findMessage, findRole, formatedMention, getChannelUrlInfo, getMessageUrlInfo, setMobileStatus };
|
|
275
|
+
export { type AnyEmbed, CustomItents, CustomPartials, type EmbedPlusAssetData, EmbedPlusBuilder, type EmbedPlusData, type EmbedPlusFooterData, type EmbedPlusProperty, chars, createComponentsManager, createEmbed, createEmbedAsset, createEmbedAuthor, createEmbedFooter, createLinkButton, createModalFields, createModalInput, createRow, extractMentionId, findChannel, findCommand, findEmoji, findMember, findMessage, findRole, formatedMention, getChannelUrlInfo, getMessageUrlInfo, setMobileStatus };
|
package/dist/index.d.mts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as discord_js from 'discord.js';
|
|
2
|
-
import { GatewayIntentBits, Partials, ChannelType, Guild, CommandInteractionOption, Client, ApplicationCommand, AnyComponentBuilder, ActionRowBuilder,
|
|
2
|
+
import { GatewayIntentBits, Partials, ChannelType, Guild, CommandInteractionOption, Client, ApplicationCommand, AnyComponentBuilder, ActionRowBuilder, ButtonBuilder, ActionRow, MessageActionRowComponent, LinkButtonComponentData, ButtonComponent, StringSelectMenuComponent, UserSelectMenuComponent, ChannelSelectMenuComponent, RoleSelectMenuComponent, MentionableSelectMenuComponent, TextInputBuilder, TextInputComponentData, GuildEmoji, GuildBasedChannel, Role, User, GuildMember, GuildTextBasedChannel, Message, Attachment, AttachmentBuilder, EmbedAssetData, EmbedAuthorData, ImageURLOptions, EmbedFooterData, APIEmbed, Embed, EmbedBuilder, EmbedData, ColorResolvable } from 'discord.js';
|
|
3
3
|
export * from '@magicyan/core';
|
|
4
4
|
|
|
5
5
|
declare const chars: {
|
|
@@ -58,9 +58,6 @@ declare function findCommand(guildOrClient: Guild | Client<true>): {
|
|
|
58
58
|
};
|
|
59
59
|
|
|
60
60
|
declare function createRow<Component extends AnyComponentBuilder>(...components: Component[]): ActionRowBuilder<Component>;
|
|
61
|
-
interface CreateModalInputData extends Omit<TextInputComponentData, "type"> {
|
|
62
|
-
}
|
|
63
|
-
declare function createModalInput(data: CreateModalInputData): ActionRowBuilder<TextInputBuilder>;
|
|
64
61
|
interface CreateLinkButtonData extends Omit<LinkButtonComponentData, "style" | "type"> {
|
|
65
62
|
}
|
|
66
63
|
declare function createLinkButton(data: CreateLinkButtonData): ButtonBuilder;
|
|
@@ -88,6 +85,12 @@ interface MessageComponentsManager {
|
|
|
88
85
|
}
|
|
89
86
|
declare function createComponentsManager(components: ActionRow<MessageActionRowComponent>[]): MessageComponentsManager;
|
|
90
87
|
|
|
88
|
+
type TextInputData = Omit<TextInputComponentData, "type">;
|
|
89
|
+
type CreateModalInputData = TextInputData;
|
|
90
|
+
declare function createModalInput(data: CreateModalInputData): ActionRowBuilder<TextInputBuilder>;
|
|
91
|
+
type ModalFieldsData = Record<string, Omit<TextInputData, "customId">>;
|
|
92
|
+
declare function createModalFields(data: ModalFieldsData): ActionRowBuilder<TextInputBuilder>[];
|
|
93
|
+
|
|
91
94
|
type FindEmojiFilter = (emoji: GuildEmoji) => boolean;
|
|
92
95
|
declare function findEmoji(guildOrClient: Guild | Client): {
|
|
93
96
|
byName(name: string, animated?: boolean, and?: FindEmojiFilter): GuildEmoji | undefined;
|
|
@@ -125,6 +128,16 @@ interface MessageUrlInfo {
|
|
|
125
128
|
declare function getMessageUrlInfo(url: string): MessageUrlInfo;
|
|
126
129
|
|
|
127
130
|
type FindRoleFilter = (role: Role) => boolean;
|
|
131
|
+
/**
|
|
132
|
+
*
|
|
133
|
+
* @param guild Discord guild
|
|
134
|
+
*
|
|
135
|
+
* ```ts
|
|
136
|
+
* const memberRole = findRole(guild).byName("Member");
|
|
137
|
+
* const adminRole = findRole(guild).byHexColor("#ff5454");
|
|
138
|
+
* const leaderRole = findRole(guild).byId("537818031728885771");
|
|
139
|
+
* ```
|
|
140
|
+
*/
|
|
128
141
|
declare function findRole(guild: Guild): {
|
|
129
142
|
byColor(color: number, and?: FindRoleFilter): Role | undefined;
|
|
130
143
|
byHexColor(hexColor: string, and?: FindRoleFilter): Role | undefined;
|
|
@@ -150,9 +163,9 @@ declare function findRole(guild: Guild): {
|
|
|
150
163
|
*/
|
|
151
164
|
declare function extractMentionId(mention: string): string | null;
|
|
152
165
|
|
|
166
|
+
type EmbedPlusAssetData = string | Attachment | AttachmentBuilder | EmbedAssetData | undefined | null;
|
|
153
167
|
type EmbedAssetOptions = Omit<EmbedAssetData, "url">;
|
|
154
|
-
|
|
155
|
-
declare function createEmbedAsset(source: AssetSource, options?: EmbedAssetOptions): EmbedAssetData | undefined;
|
|
168
|
+
declare function createEmbedAsset(source: EmbedPlusAssetData, options?: EmbedAssetOptions): EmbedAssetData | undefined;
|
|
156
169
|
|
|
157
170
|
interface UserAuthorOption {
|
|
158
171
|
user: User;
|
|
@@ -171,17 +184,48 @@ type CreateEmbedAuthorOptions = AuthorOption & ImageURLOptions & {
|
|
|
171
184
|
};
|
|
172
185
|
declare function createEmbedAuthor(options: CreateEmbedAuthorOptions): EmbedAuthorData;
|
|
173
186
|
|
|
174
|
-
type
|
|
175
|
-
|
|
187
|
+
type EmbedPlusFooterData = {
|
|
188
|
+
text?: string | null;
|
|
189
|
+
iconURL?: string | null;
|
|
190
|
+
};
|
|
191
|
+
declare function createEmbedFooter(options: EmbedPlusFooterData): EmbedFooterData | undefined;
|
|
192
|
+
|
|
176
193
|
type EmbedPlusFieldData = {
|
|
177
194
|
name: string;
|
|
178
195
|
value: string;
|
|
179
196
|
inline?: boolean;
|
|
180
197
|
};
|
|
181
|
-
type
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
198
|
+
type FieldPredicate = (field: EmbedPlusFieldData, index: number, obj: EmbedPlusFieldData[]) => boolean;
|
|
199
|
+
declare class EmbedPlusField {
|
|
200
|
+
private embed;
|
|
201
|
+
private set fields(value);
|
|
202
|
+
private get fields();
|
|
203
|
+
constructor(embed: EmbedPlusBuilder);
|
|
204
|
+
[Symbol.iterator](): {
|
|
205
|
+
next(): IteratorResult<EmbedPlusFieldData>;
|
|
206
|
+
};
|
|
207
|
+
get length(): number;
|
|
208
|
+
get record(): Record<string, string>;
|
|
209
|
+
/**
|
|
210
|
+
* Get a filed by index
|
|
211
|
+
* @param name Field name
|
|
212
|
+
*/
|
|
213
|
+
get(name: string): EmbedPlusFieldData | undefined;
|
|
214
|
+
/**
|
|
215
|
+
* Get a field by name
|
|
216
|
+
* @param index Field index
|
|
217
|
+
*/
|
|
218
|
+
get(index: number): EmbedPlusFieldData | undefined;
|
|
219
|
+
find(predicate: FieldPredicate): EmbedPlusFieldData | undefined;
|
|
220
|
+
push(...fields: EmbedPlusFieldData[]): void;
|
|
221
|
+
set(...fields: EmbedPlusFieldData[]): void;
|
|
222
|
+
update(predicate: string | number | FieldPredicate, field: Partial<EmbedPlusFieldData>): boolean;
|
|
223
|
+
delete(predicate: number | FieldPredicate): boolean;
|
|
224
|
+
toArray(): EmbedPlusFieldData[];
|
|
225
|
+
private getPredicateIndex;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
type EmbedPlusColorData = string & {} | ColorResolvable | null;
|
|
185
229
|
type EmbedPlusAuthorData = {
|
|
186
230
|
name: string;
|
|
187
231
|
url?: string;
|
|
@@ -192,40 +236,40 @@ interface EmbedPlusData {
|
|
|
192
236
|
color?: EmbedPlusColorData | null;
|
|
193
237
|
description?: string | null;
|
|
194
238
|
url?: string | null;
|
|
195
|
-
thumbnail?: EmbedPlusAssetData
|
|
196
|
-
image?: EmbedPlusAssetData
|
|
239
|
+
thumbnail?: EmbedPlusAssetData;
|
|
240
|
+
image?: EmbedPlusAssetData;
|
|
197
241
|
fields?: Partial<EmbedPlusFieldData>[] | null;
|
|
198
242
|
timestamp?: string | number | Date | null;
|
|
199
243
|
footer?: EmbedPlusFooterData;
|
|
200
244
|
author?: EmbedPlusAuthorData;
|
|
201
245
|
}
|
|
246
|
+
type AnyEmbed = APIEmbed | Embed | EmbedBuilder | EmbedData;
|
|
247
|
+
interface MessageWithEmbeds {
|
|
248
|
+
embeds: Array<Embed>;
|
|
249
|
+
}
|
|
250
|
+
interface InteractionWithEmbeds {
|
|
251
|
+
message: MessageWithEmbeds;
|
|
252
|
+
}
|
|
202
253
|
interface EmbedPlusOptions extends EmbedPlusData {
|
|
203
|
-
extends?: Omit<EmbedPlusData, keyof EmbedPlusOptions> |
|
|
254
|
+
extends?: Omit<EmbedPlusData, keyof EmbedPlusOptions> | AnyEmbed;
|
|
204
255
|
mergeFields?: boolean;
|
|
205
256
|
}
|
|
206
257
|
declare class EmbedPlusBuilder extends EmbedBuilder {
|
|
258
|
+
fields: EmbedPlusField;
|
|
207
259
|
constructor(data: EmbedPlusOptions);
|
|
208
260
|
has(property: keyof Omit<EmbedPlusData, keyof EmbedPlusOptions>): boolean;
|
|
209
|
-
toArray():
|
|
261
|
+
toArray(): EmbedPlusBuilder[];
|
|
210
262
|
toString(space?: number): string;
|
|
211
|
-
updateField(index: number, field: Partial<EmbedPlusFieldData>): this;
|
|
212
|
-
deleteField(index: number): this;
|
|
213
|
-
popField(): discord_js.APIEmbedField | undefined;
|
|
214
263
|
setAsset(asset: "thumbnail" | "image", source: EmbedPlusAssetData): this;
|
|
215
|
-
|
|
216
|
-
|
|
264
|
+
static fromInteraction(interaction: InteractionWithEmbeds, index?: number, data?: EmbedPlusData): EmbedPlusBuilder;
|
|
265
|
+
static fromMessage(message: MessageWithEmbeds, index?: number, data?: EmbedPlusData): EmbedPlusBuilder;
|
|
217
266
|
}
|
|
218
|
-
type
|
|
267
|
+
type EmbedPlusProperty<P extends keyof EmbedPlusData> = EmbedPlusData[P];
|
|
219
268
|
interface CreateEmbedOptions<B extends boolean> extends EmbedPlusOptions {
|
|
220
269
|
array?: B;
|
|
270
|
+
interaction?: InteractionWithEmbeds;
|
|
221
271
|
}
|
|
222
272
|
type CreateEmbedReturn<B> = undefined extends B ? EmbedPlusBuilder : false extends B ? EmbedPlusBuilder : EmbedPlusBuilder[];
|
|
223
273
|
declare function createEmbed<B extends boolean>(options: CreateEmbedOptions<B>): CreateEmbedReturn<B>;
|
|
224
274
|
|
|
225
|
-
|
|
226
|
-
text?: string | null;
|
|
227
|
-
iconURL?: string | null;
|
|
228
|
-
}
|
|
229
|
-
declare function createEmbedFooter(options: CreateEmbedFooterOptions): EmbedFooterData | undefined;
|
|
230
|
-
|
|
231
|
-
export { type AssetSource, CustomItents, CustomPartials, EmbedPlusBuilder, type EmbedPlusPropery, chars, createComponentsManager, createEmbed, createEmbedAsset, createEmbedAuthor, createEmbedFooter, createLinkButton, createModalInput, createRow, extractMentionId, findChannel, findCommand, findEmoji, findMember, findMessage, findRole, formatedMention, getChannelUrlInfo, getMessageUrlInfo, setMobileStatus };
|
|
275
|
+
export { type AnyEmbed, CustomItents, CustomPartials, type EmbedPlusAssetData, EmbedPlusBuilder, type EmbedPlusData, type EmbedPlusFooterData, type EmbedPlusProperty, chars, createComponentsManager, createEmbed, createEmbedAsset, createEmbedAuthor, createEmbedFooter, createLinkButton, createModalFields, createModalInput, createRow, extractMentionId, findChannel, findCommand, findEmoji, findMember, findMessage, findRole, formatedMention, getChannelUrlInfo, getMessageUrlInfo, setMobileStatus };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as discord_js from 'discord.js';
|
|
2
|
-
import { GatewayIntentBits, Partials, ChannelType, Guild, CommandInteractionOption, Client, ApplicationCommand, AnyComponentBuilder, ActionRowBuilder,
|
|
2
|
+
import { GatewayIntentBits, Partials, ChannelType, Guild, CommandInteractionOption, Client, ApplicationCommand, AnyComponentBuilder, ActionRowBuilder, ButtonBuilder, ActionRow, MessageActionRowComponent, LinkButtonComponentData, ButtonComponent, StringSelectMenuComponent, UserSelectMenuComponent, ChannelSelectMenuComponent, RoleSelectMenuComponent, MentionableSelectMenuComponent, TextInputBuilder, TextInputComponentData, GuildEmoji, GuildBasedChannel, Role, User, GuildMember, GuildTextBasedChannel, Message, Attachment, AttachmentBuilder, EmbedAssetData, EmbedAuthorData, ImageURLOptions, EmbedFooterData, APIEmbed, Embed, EmbedBuilder, EmbedData, ColorResolvable } from 'discord.js';
|
|
3
3
|
export * from '@magicyan/core';
|
|
4
4
|
|
|
5
5
|
declare const chars: {
|
|
@@ -58,9 +58,6 @@ declare function findCommand(guildOrClient: Guild | Client<true>): {
|
|
|
58
58
|
};
|
|
59
59
|
|
|
60
60
|
declare function createRow<Component extends AnyComponentBuilder>(...components: Component[]): ActionRowBuilder<Component>;
|
|
61
|
-
interface CreateModalInputData extends Omit<TextInputComponentData, "type"> {
|
|
62
|
-
}
|
|
63
|
-
declare function createModalInput(data: CreateModalInputData): ActionRowBuilder<TextInputBuilder>;
|
|
64
61
|
interface CreateLinkButtonData extends Omit<LinkButtonComponentData, "style" | "type"> {
|
|
65
62
|
}
|
|
66
63
|
declare function createLinkButton(data: CreateLinkButtonData): ButtonBuilder;
|
|
@@ -88,6 +85,12 @@ interface MessageComponentsManager {
|
|
|
88
85
|
}
|
|
89
86
|
declare function createComponentsManager(components: ActionRow<MessageActionRowComponent>[]): MessageComponentsManager;
|
|
90
87
|
|
|
88
|
+
type TextInputData = Omit<TextInputComponentData, "type">;
|
|
89
|
+
type CreateModalInputData = TextInputData;
|
|
90
|
+
declare function createModalInput(data: CreateModalInputData): ActionRowBuilder<TextInputBuilder>;
|
|
91
|
+
type ModalFieldsData = Record<string, Omit<TextInputData, "customId">>;
|
|
92
|
+
declare function createModalFields(data: ModalFieldsData): ActionRowBuilder<TextInputBuilder>[];
|
|
93
|
+
|
|
91
94
|
type FindEmojiFilter = (emoji: GuildEmoji) => boolean;
|
|
92
95
|
declare function findEmoji(guildOrClient: Guild | Client): {
|
|
93
96
|
byName(name: string, animated?: boolean, and?: FindEmojiFilter): GuildEmoji | undefined;
|
|
@@ -125,6 +128,16 @@ interface MessageUrlInfo {
|
|
|
125
128
|
declare function getMessageUrlInfo(url: string): MessageUrlInfo;
|
|
126
129
|
|
|
127
130
|
type FindRoleFilter = (role: Role) => boolean;
|
|
131
|
+
/**
|
|
132
|
+
*
|
|
133
|
+
* @param guild Discord guild
|
|
134
|
+
*
|
|
135
|
+
* ```ts
|
|
136
|
+
* const memberRole = findRole(guild).byName("Member");
|
|
137
|
+
* const adminRole = findRole(guild).byHexColor("#ff5454");
|
|
138
|
+
* const leaderRole = findRole(guild).byId("537818031728885771");
|
|
139
|
+
* ```
|
|
140
|
+
*/
|
|
128
141
|
declare function findRole(guild: Guild): {
|
|
129
142
|
byColor(color: number, and?: FindRoleFilter): Role | undefined;
|
|
130
143
|
byHexColor(hexColor: string, and?: FindRoleFilter): Role | undefined;
|
|
@@ -150,9 +163,9 @@ declare function findRole(guild: Guild): {
|
|
|
150
163
|
*/
|
|
151
164
|
declare function extractMentionId(mention: string): string | null;
|
|
152
165
|
|
|
166
|
+
type EmbedPlusAssetData = string | Attachment | AttachmentBuilder | EmbedAssetData | undefined | null;
|
|
153
167
|
type EmbedAssetOptions = Omit<EmbedAssetData, "url">;
|
|
154
|
-
|
|
155
|
-
declare function createEmbedAsset(source: AssetSource, options?: EmbedAssetOptions): EmbedAssetData | undefined;
|
|
168
|
+
declare function createEmbedAsset(source: EmbedPlusAssetData, options?: EmbedAssetOptions): EmbedAssetData | undefined;
|
|
156
169
|
|
|
157
170
|
interface UserAuthorOption {
|
|
158
171
|
user: User;
|
|
@@ -171,17 +184,48 @@ type CreateEmbedAuthorOptions = AuthorOption & ImageURLOptions & {
|
|
|
171
184
|
};
|
|
172
185
|
declare function createEmbedAuthor(options: CreateEmbedAuthorOptions): EmbedAuthorData;
|
|
173
186
|
|
|
174
|
-
type
|
|
175
|
-
|
|
187
|
+
type EmbedPlusFooterData = {
|
|
188
|
+
text?: string | null;
|
|
189
|
+
iconURL?: string | null;
|
|
190
|
+
};
|
|
191
|
+
declare function createEmbedFooter(options: EmbedPlusFooterData): EmbedFooterData | undefined;
|
|
192
|
+
|
|
176
193
|
type EmbedPlusFieldData = {
|
|
177
194
|
name: string;
|
|
178
195
|
value: string;
|
|
179
196
|
inline?: boolean;
|
|
180
197
|
};
|
|
181
|
-
type
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
198
|
+
type FieldPredicate = (field: EmbedPlusFieldData, index: number, obj: EmbedPlusFieldData[]) => boolean;
|
|
199
|
+
declare class EmbedPlusField {
|
|
200
|
+
private embed;
|
|
201
|
+
private set fields(value);
|
|
202
|
+
private get fields();
|
|
203
|
+
constructor(embed: EmbedPlusBuilder);
|
|
204
|
+
[Symbol.iterator](): {
|
|
205
|
+
next(): IteratorResult<EmbedPlusFieldData>;
|
|
206
|
+
};
|
|
207
|
+
get length(): number;
|
|
208
|
+
get record(): Record<string, string>;
|
|
209
|
+
/**
|
|
210
|
+
* Get a filed by index
|
|
211
|
+
* @param name Field name
|
|
212
|
+
*/
|
|
213
|
+
get(name: string): EmbedPlusFieldData | undefined;
|
|
214
|
+
/**
|
|
215
|
+
* Get a field by name
|
|
216
|
+
* @param index Field index
|
|
217
|
+
*/
|
|
218
|
+
get(index: number): EmbedPlusFieldData | undefined;
|
|
219
|
+
find(predicate: FieldPredicate): EmbedPlusFieldData | undefined;
|
|
220
|
+
push(...fields: EmbedPlusFieldData[]): void;
|
|
221
|
+
set(...fields: EmbedPlusFieldData[]): void;
|
|
222
|
+
update(predicate: string | number | FieldPredicate, field: Partial<EmbedPlusFieldData>): boolean;
|
|
223
|
+
delete(predicate: number | FieldPredicate): boolean;
|
|
224
|
+
toArray(): EmbedPlusFieldData[];
|
|
225
|
+
private getPredicateIndex;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
type EmbedPlusColorData = string & {} | ColorResolvable | null;
|
|
185
229
|
type EmbedPlusAuthorData = {
|
|
186
230
|
name: string;
|
|
187
231
|
url?: string;
|
|
@@ -192,40 +236,40 @@ interface EmbedPlusData {
|
|
|
192
236
|
color?: EmbedPlusColorData | null;
|
|
193
237
|
description?: string | null;
|
|
194
238
|
url?: string | null;
|
|
195
|
-
thumbnail?: EmbedPlusAssetData
|
|
196
|
-
image?: EmbedPlusAssetData
|
|
239
|
+
thumbnail?: EmbedPlusAssetData;
|
|
240
|
+
image?: EmbedPlusAssetData;
|
|
197
241
|
fields?: Partial<EmbedPlusFieldData>[] | null;
|
|
198
242
|
timestamp?: string | number | Date | null;
|
|
199
243
|
footer?: EmbedPlusFooterData;
|
|
200
244
|
author?: EmbedPlusAuthorData;
|
|
201
245
|
}
|
|
246
|
+
type AnyEmbed = APIEmbed | Embed | EmbedBuilder | EmbedData;
|
|
247
|
+
interface MessageWithEmbeds {
|
|
248
|
+
embeds: Array<Embed>;
|
|
249
|
+
}
|
|
250
|
+
interface InteractionWithEmbeds {
|
|
251
|
+
message: MessageWithEmbeds;
|
|
252
|
+
}
|
|
202
253
|
interface EmbedPlusOptions extends EmbedPlusData {
|
|
203
|
-
extends?: Omit<EmbedPlusData, keyof EmbedPlusOptions> |
|
|
254
|
+
extends?: Omit<EmbedPlusData, keyof EmbedPlusOptions> | AnyEmbed;
|
|
204
255
|
mergeFields?: boolean;
|
|
205
256
|
}
|
|
206
257
|
declare class EmbedPlusBuilder extends EmbedBuilder {
|
|
258
|
+
fields: EmbedPlusField;
|
|
207
259
|
constructor(data: EmbedPlusOptions);
|
|
208
260
|
has(property: keyof Omit<EmbedPlusData, keyof EmbedPlusOptions>): boolean;
|
|
209
|
-
toArray():
|
|
261
|
+
toArray(): EmbedPlusBuilder[];
|
|
210
262
|
toString(space?: number): string;
|
|
211
|
-
updateField(index: number, field: Partial<EmbedPlusFieldData>): this;
|
|
212
|
-
deleteField(index: number): this;
|
|
213
|
-
popField(): discord_js.APIEmbedField | undefined;
|
|
214
263
|
setAsset(asset: "thumbnail" | "image", source: EmbedPlusAssetData): this;
|
|
215
|
-
|
|
216
|
-
|
|
264
|
+
static fromInteraction(interaction: InteractionWithEmbeds, index?: number, data?: EmbedPlusData): EmbedPlusBuilder;
|
|
265
|
+
static fromMessage(message: MessageWithEmbeds, index?: number, data?: EmbedPlusData): EmbedPlusBuilder;
|
|
217
266
|
}
|
|
218
|
-
type
|
|
267
|
+
type EmbedPlusProperty<P extends keyof EmbedPlusData> = EmbedPlusData[P];
|
|
219
268
|
interface CreateEmbedOptions<B extends boolean> extends EmbedPlusOptions {
|
|
220
269
|
array?: B;
|
|
270
|
+
interaction?: InteractionWithEmbeds;
|
|
221
271
|
}
|
|
222
272
|
type CreateEmbedReturn<B> = undefined extends B ? EmbedPlusBuilder : false extends B ? EmbedPlusBuilder : EmbedPlusBuilder[];
|
|
223
273
|
declare function createEmbed<B extends boolean>(options: CreateEmbedOptions<B>): CreateEmbedReturn<B>;
|
|
224
274
|
|
|
225
|
-
|
|
226
|
-
text?: string | null;
|
|
227
|
-
iconURL?: string | null;
|
|
228
|
-
}
|
|
229
|
-
declare function createEmbedFooter(options: CreateEmbedFooterOptions): EmbedFooterData | undefined;
|
|
230
|
-
|
|
231
|
-
export { type AssetSource, CustomItents, CustomPartials, EmbedPlusBuilder, type EmbedPlusPropery, chars, createComponentsManager, createEmbed, createEmbedAsset, createEmbedAuthor, createEmbedFooter, createLinkButton, createModalInput, createRow, extractMentionId, findChannel, findCommand, findEmoji, findMember, findMessage, findRole, formatedMention, getChannelUrlInfo, getMessageUrlInfo, setMobileStatus };
|
|
275
|
+
export { type AnyEmbed, CustomItents, CustomPartials, type EmbedPlusAssetData, EmbedPlusBuilder, type EmbedPlusData, type EmbedPlusFooterData, type EmbedPlusProperty, chars, createComponentsManager, createEmbed, createEmbedAsset, createEmbedAuthor, createEmbedFooter, createLinkButton, createModalFields, createModalInput, createRow, extractMentionId, findChannel, findCommand, findEmoji, findMember, findMessage, findRole, formatedMention, getChannelUrlInfo, getMessageUrlInfo, setMobileStatus };
|
package/dist/index.mjs
CHANGED
|
@@ -3,7 +3,8 @@ export { CustomItents, CustomPartials } from './constants/client.mjs';
|
|
|
3
3
|
export { setMobileStatus } from './functions/misc.mjs';
|
|
4
4
|
export { findChannel, getChannelUrlInfo } from './functions/channels.mjs';
|
|
5
5
|
export { findCommand } from './functions/commands.mjs';
|
|
6
|
-
export { createComponentsManager, createLinkButton,
|
|
6
|
+
export { createComponentsManager, createLinkButton, createRow } from './functions/components.mjs';
|
|
7
|
+
export { createModalFields, createModalInput } from './functions/modals.mjs';
|
|
7
8
|
export { findEmoji } from './functions/emojis.mjs';
|
|
8
9
|
export { formatedMention } from './functions/format.mjs';
|
|
9
10
|
export { findMember } from './functions/members.mjs';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@magicyan/discord",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.25",
|
|
4
4
|
"description": "Simple functions to facilitate discord bot development",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
"unbuild": "^2.0.0"
|
|
40
40
|
},
|
|
41
41
|
"dependencies": {
|
|
42
|
-
"@magicyan/core": "^1.0.
|
|
42
|
+
"@magicyan/core": "^1.0.18"
|
|
43
43
|
},
|
|
44
44
|
"peerDependencies": {
|
|
45
45
|
"discord.js": "^14.14.1"
|