@magicyan/discord 1.0.17 → 1.0.19

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.
@@ -0,0 +1,7 @@
1
+ 'use strict';
2
+
3
+ const chars = {
4
+ invisible: "\u200B"
5
+ };
6
+
7
+ exports.chars = chars;
@@ -0,0 +1,5 @@
1
+ const chars = {
2
+ invisible: "\u200B"
3
+ };
4
+
5
+ export { chars };
@@ -6,9 +6,9 @@ function findChannel(guild, type) {
6
6
  const channelType = type ?? discord_js.ChannelType.GuildText;
7
7
  const cache = guild.channels.cache;
8
8
  return {
9
- byName(name) {
9
+ byName(name, filter = () => true) {
10
10
  return cache.find(
11
- (c) => c.name === name && c.type === channelType
11
+ (c) => c.name === name && c.type === channelType && filter
12
12
  );
13
13
  },
14
14
  byId(id) {
@@ -16,30 +16,43 @@ function findChannel(guild, type) {
16
16
  (c) => c.id === id && c.type === channelType
17
17
  );
18
18
  },
19
+ byFilter(filter) {
20
+ return cache.find((c) => c.type == type && filter);
21
+ },
19
22
  inCategoryId(id) {
20
23
  return {
21
- byName(name) {
24
+ byName(name, filter = () => true) {
25
+ return cache.find(
26
+ (c) => c.name === name && c.type === channelType && c.parentId == id && filter
27
+ );
28
+ },
29
+ byId(id2, filter = () => true) {
22
30
  return cache.find(
23
- (c) => c.name === name && c.type === channelType && c.parentId == id
31
+ (c) => c.id === id2 && c.type === channelType && c.parentId == id2 && filter
24
32
  );
25
33
  },
26
- byId(id2) {
34
+ byFilter(filter) {
27
35
  return cache.find(
28
- (c) => c.id === id2 && c.type === channelType && c.parentId == id2
36
+ (c) => c.type === channelType && c.parent?.id == id && filter
29
37
  );
30
38
  }
31
39
  };
32
40
  },
33
41
  inCategoryName(name) {
34
42
  return {
35
- byName(name2) {
43
+ byName(name2, filter = () => true) {
44
+ return cache.find(
45
+ (c) => c.name === name2 && c.type === channelType && c.parent?.name == name2 && filter
46
+ );
47
+ },
48
+ byId(id, filter = () => true) {
36
49
  return cache.find(
37
- (c) => c.name === name2 && c.type === channelType && c.parent?.name == name2
50
+ (c) => c.id === id && c.type === channelType && c.parent?.name == name && filter
38
51
  );
39
52
  },
40
- byId(id) {
53
+ byFilter(filter) {
41
54
  return cache.find(
42
- (c) => c.id === id && c.type === channelType && c.parent?.name == name
55
+ (c) => c.type === channelType && c.parent?.name == name && filter
43
56
  );
44
57
  }
45
58
  };
@@ -4,9 +4,9 @@ function findChannel(guild, type) {
4
4
  const channelType = type ?? ChannelType.GuildText;
5
5
  const cache = guild.channels.cache;
6
6
  return {
7
- byName(name) {
7
+ byName(name, filter = () => true) {
8
8
  return cache.find(
9
- (c) => c.name === name && c.type === channelType
9
+ (c) => c.name === name && c.type === channelType && filter
10
10
  );
11
11
  },
12
12
  byId(id) {
@@ -14,30 +14,43 @@ function findChannel(guild, type) {
14
14
  (c) => c.id === id && c.type === channelType
15
15
  );
16
16
  },
17
+ byFilter(filter) {
18
+ return cache.find((c) => c.type == type && filter);
19
+ },
17
20
  inCategoryId(id) {
18
21
  return {
19
- byName(name) {
22
+ byName(name, filter = () => true) {
23
+ return cache.find(
24
+ (c) => c.name === name && c.type === channelType && c.parentId == id && filter
25
+ );
26
+ },
27
+ byId(id2, filter = () => true) {
20
28
  return cache.find(
21
- (c) => c.name === name && c.type === channelType && c.parentId == id
29
+ (c) => c.id === id2 && c.type === channelType && c.parentId == id2 && filter
22
30
  );
23
31
  },
24
- byId(id2) {
32
+ byFilter(filter) {
25
33
  return cache.find(
26
- (c) => c.id === id2 && c.type === channelType && c.parentId == id2
34
+ (c) => c.type === channelType && c.parent?.id == id && filter
27
35
  );
28
36
  }
29
37
  };
30
38
  },
31
39
  inCategoryName(name) {
32
40
  return {
33
- byName(name2) {
41
+ byName(name2, filter = () => true) {
42
+ return cache.find(
43
+ (c) => c.name === name2 && c.type === channelType && c.parent?.name == name2 && filter
44
+ );
45
+ },
46
+ byId(id, filter = () => true) {
34
47
  return cache.find(
35
- (c) => c.name === name2 && c.type === channelType && c.parent?.name == name2
48
+ (c) => c.id === id && c.type === channelType && c.parent?.name == name && filter
36
49
  );
37
50
  },
38
- byId(id) {
51
+ byFilter(filter) {
39
52
  return cache.find(
40
- (c) => c.id === id && c.type === channelType && c.parent?.name == name
53
+ (c) => c.type === channelType && c.parent?.name == name && filter
41
54
  );
42
55
  }
43
56
  };
@@ -2,6 +2,17 @@
2
2
 
3
3
  const discord_js = require('discord.js');
4
4
 
5
+ function createRow(...components) {
6
+ return new discord_js.ActionRowBuilder({ components });
7
+ }
8
+ function createModalInput(data) {
9
+ return createRow(new discord_js.TextInputBuilder(data));
10
+ }
11
+ function createLinkButton(data) {
12
+ if (!data.label)
13
+ data.label = data.url;
14
+ return new discord_js.ButtonBuilder({ style: discord_js.ButtonStyle.Link, ...data });
15
+ }
5
16
  function createComponentsManager(components) {
6
17
  const buttons = components.flatMap(
7
18
  (row) => row.components.filter((c) => c.type === discord_js.ComponentType.Button)
@@ -52,3 +63,6 @@ function createComponentsManager(components) {
52
63
  }
53
64
 
54
65
  exports.createComponentsManager = createComponentsManager;
66
+ exports.createLinkButton = createLinkButton;
67
+ exports.createModalInput = createModalInput;
68
+ exports.createRow = createRow;
@@ -1,5 +1,16 @@
1
- import { ComponentType } from 'discord.js';
1
+ import { ActionRowBuilder, TextInputBuilder, ButtonBuilder, ButtonStyle, ComponentType } from 'discord.js';
2
2
 
3
+ function createRow(...components) {
4
+ return new ActionRowBuilder({ components });
5
+ }
6
+ function createModalInput(data) {
7
+ return createRow(new TextInputBuilder(data));
8
+ }
9
+ function createLinkButton(data) {
10
+ if (!data.label)
11
+ data.label = data.url;
12
+ return new ButtonBuilder({ style: ButtonStyle.Link, ...data });
13
+ }
3
14
  function createComponentsManager(components) {
4
15
  const buttons = components.flatMap(
5
16
  (row) => row.components.filter((c) => c.type === ComponentType.Button)
@@ -49,4 +60,4 @@ function createComponentsManager(components) {
49
60
  };
50
61
  }
51
62
 
52
- export { createComponentsManager };
63
+ export { createComponentsManager, createLinkButton, createModalInput, createRow };
@@ -2,6 +2,7 @@
2
2
 
3
3
  const core = require('@magicyan/core');
4
4
  const discord_js = require('discord.js');
5
+ const chars = require('../constants/chars.cjs');
5
6
 
6
7
  function createEmbedAuthor(options) {
7
8
  const {
@@ -14,38 +15,121 @@ function createEmbedAuthor(options) {
14
15
  suffix = ""
15
16
  } = options;
16
17
  return {
17
- name: `${prefix}${user[property]}${suffix}`,
18
+ name: prefix + user[property] + suffix,
18
19
  url,
19
20
  iconURL: iconURL || user.displayAvatarURL({ size })
20
21
  };
21
22
  }
22
23
  function createEmbedFooter(options) {
23
24
  const { text, iconURL } = options;
24
- return { text: text ?? "\u200B", iconURL: core.notFound(iconURL) };
25
+ return !text && !iconURL ? void 0 : { text: text ?? "\u200B", iconURL: core.notFound(iconURL) };
25
26
  }
26
27
  function createEmbedAsset(source, options) {
27
28
  if (source instanceof discord_js.Attachment || source instanceof discord_js.AttachmentBuilder) {
28
29
  return { url: `attachment://${source.name}`, ...options };
29
30
  }
31
+ if (source && typeof source === "object" && "url" in source) {
32
+ return source;
33
+ }
30
34
  return source ? { url: source, ...options } : void 0;
31
35
  }
32
- function createEmbed(options) {
33
- const { extend: extendRaw = {}, ...embedRaw } = options;
34
- const { color: embedColor, modify, ...embedData } = embedRaw;
35
- const { color: extendColor, ...extendData } = extendRaw;
36
- const data = { ...extendData, ...embedData };
37
- const builder = new discord_js.EmbedBuilder(data);
38
- if (extendColor)
39
- builder.setColor(extendColor);
40
- if (embedColor)
41
- builder.setColor(embedColor);
42
- if (modify?.fields && typeof modify.fields == "function") {
43
- const fields = modify.fields(builder.data.fields || []);
44
- builder.setFields(fields);
45
- }
46
- return builder;
36
+ class EmbedBuilderPlus extends discord_js.EmbedBuilder {
37
+ constructor(data) {
38
+ const fields = (data.mergeFields ? [data.extend?.fields ?? [], data.fields ?? []].flat() : data.fields ?? []).map(({ name = chars.chars.invisible, value = chars.chars.invisible, inline }) => ({
39
+ name,
40
+ value,
41
+ inline
42
+ }));
43
+ const extend = data.extend ? new EmbedBuilderPlus(
44
+ data.extend instanceof discord_js.Embed ? data.extend.data : data.extend instanceof discord_js.EmbedBuilder ? data.extend.data : data.extend
45
+ ).data : {};
46
+ const { fields: _, ...exetendData } = extend;
47
+ const embed = new discord_js.EmbedBuilder({
48
+ ...exetendData,
49
+ ...data.title ? { title: data.title } : {},
50
+ ...data.description ? { description: data.description } : {},
51
+ ...data.url ? { url: data.url } : {},
52
+ ...data.footer ? { footer: createEmbedFooter(data.footer) } : {},
53
+ ...data.author ? { author: data.author } : {},
54
+ ...data.image ? { image: createEmbedAsset(data.image) } : {},
55
+ ...data.thumbnail ? { thumbnail: createEmbedAsset(data.thumbnail) } : {},
56
+ ...fields.length > 0 ? { fields } : {}
57
+ });
58
+ if (data.timestamp)
59
+ embed.setTimestamp(
60
+ typeof data.timestamp === "string" ? new Date(data.timestamp) : data.timestamp
61
+ );
62
+ if (data.color)
63
+ embed.setColor(data.color);
64
+ super(embed.data);
65
+ }
66
+ has(property) {
67
+ return Object.hasOwn(this, property);
68
+ }
69
+ toArray() {
70
+ return [this];
71
+ }
72
+ toString(space = 2) {
73
+ return JSON.stringify(this, null, space);
74
+ }
75
+ updateField(index, field) {
76
+ if (this.fields.at(index)) {
77
+ const fields = Array.from(this.fields);
78
+ if (field.name)
79
+ fields[index].name = field.name;
80
+ if (field.value)
81
+ fields[index].value = field.value;
82
+ if (field.inline)
83
+ fields[index].inline = field.inline;
84
+ this.setFields(fields);
85
+ }
86
+ return this;
87
+ }
88
+ deleteField(index) {
89
+ if (this.fields.at(index)) {
90
+ this.setFields(this.fields.toSpliced(index, 1));
91
+ }
92
+ return this;
93
+ }
94
+ popField() {
95
+ const fields = Array.from(this.fields);
96
+ const field = fields.pop();
97
+ this.setFields(fields);
98
+ return field;
99
+ }
100
+ setAsset(asset, source) {
101
+ let url = void 0;
102
+ if (source instanceof discord_js.Attachment || source instanceof discord_js.AttachmentBuilder) {
103
+ url = `attachment://${source.name}`;
104
+ }
105
+ if (source && typeof source === "object" && "url" in source) {
106
+ url = source.url;
107
+ }
108
+ if (!url)
109
+ return this;
110
+ if (asset === "thumbnail") {
111
+ this.setImage(url);
112
+ } else {
113
+ this.setThumbnail(url);
114
+ }
115
+ return this;
116
+ }
117
+ get fieldsLength() {
118
+ return this.data.fields?.length ?? 0;
119
+ }
120
+ get fields() {
121
+ return this.data.fields ?? [];
122
+ }
123
+ createFromThis(data = {}) {
124
+ data.extend = this;
125
+ return new EmbedBuilderPlus(data);
126
+ }
127
+ }
128
+ function createEmbed(data) {
129
+ return new EmbedBuilderPlus(data);
47
130
  }
48
131
 
132
+ exports.EmbedBuilderPlus = EmbedBuilderPlus;
49
133
  exports.createEmbed = createEmbed;
50
134
  exports.createEmbedAsset = createEmbedAsset;
51
135
  exports.createEmbedAuthor = createEmbedAuthor;
@@ -1,5 +1,6 @@
1
1
  import { notFound } from '@magicyan/core';
2
- import { Attachment, AttachmentBuilder, EmbedBuilder } from 'discord.js';
2
+ import { Attachment, AttachmentBuilder, EmbedBuilder, Embed } from 'discord.js';
3
+ import { chars } from '../constants/chars.mjs';
3
4
 
4
5
  function createEmbedAuthor(options) {
5
6
  const {
@@ -12,36 +13,118 @@ function createEmbedAuthor(options) {
12
13
  suffix = ""
13
14
  } = options;
14
15
  return {
15
- name: `${prefix}${user[property]}${suffix}`,
16
+ name: prefix + user[property] + suffix,
16
17
  url,
17
18
  iconURL: iconURL || user.displayAvatarURL({ size })
18
19
  };
19
20
  }
20
21
  function createEmbedFooter(options) {
21
22
  const { text, iconURL } = options;
22
- return { text: text ?? "\u200B", iconURL: notFound(iconURL) };
23
+ return !text && !iconURL ? void 0 : { text: text ?? "\u200B", iconURL: notFound(iconURL) };
23
24
  }
24
25
  function createEmbedAsset(source, options) {
25
26
  if (source instanceof Attachment || source instanceof AttachmentBuilder) {
26
27
  return { url: `attachment://${source.name}`, ...options };
27
28
  }
29
+ if (source && typeof source === "object" && "url" in source) {
30
+ return source;
31
+ }
28
32
  return source ? { url: source, ...options } : void 0;
29
33
  }
30
- function createEmbed(options) {
31
- const { extend: extendRaw = {}, ...embedRaw } = options;
32
- const { color: embedColor, modify, ...embedData } = embedRaw;
33
- const { color: extendColor, ...extendData } = extendRaw;
34
- const data = { ...extendData, ...embedData };
35
- const builder = new EmbedBuilder(data);
36
- if (extendColor)
37
- builder.setColor(extendColor);
38
- if (embedColor)
39
- builder.setColor(embedColor);
40
- if (modify?.fields && typeof modify.fields == "function") {
41
- const fields = modify.fields(builder.data.fields || []);
42
- builder.setFields(fields);
43
- }
44
- return builder;
34
+ class EmbedBuilderPlus extends EmbedBuilder {
35
+ constructor(data) {
36
+ const fields = (data.mergeFields ? [data.extend?.fields ?? [], data.fields ?? []].flat() : data.fields ?? []).map(({ name = chars.invisible, value = chars.invisible, inline }) => ({
37
+ name,
38
+ value,
39
+ inline
40
+ }));
41
+ const extend = data.extend ? new EmbedBuilderPlus(
42
+ data.extend instanceof Embed ? data.extend.data : data.extend instanceof EmbedBuilder ? data.extend.data : data.extend
43
+ ).data : {};
44
+ const { fields: _, ...exetendData } = extend;
45
+ const embed = new EmbedBuilder({
46
+ ...exetendData,
47
+ ...data.title ? { title: data.title } : {},
48
+ ...data.description ? { description: data.description } : {},
49
+ ...data.url ? { url: data.url } : {},
50
+ ...data.footer ? { footer: createEmbedFooter(data.footer) } : {},
51
+ ...data.author ? { author: data.author } : {},
52
+ ...data.image ? { image: createEmbedAsset(data.image) } : {},
53
+ ...data.thumbnail ? { thumbnail: createEmbedAsset(data.thumbnail) } : {},
54
+ ...fields.length > 0 ? { fields } : {}
55
+ });
56
+ if (data.timestamp)
57
+ embed.setTimestamp(
58
+ typeof data.timestamp === "string" ? new Date(data.timestamp) : data.timestamp
59
+ );
60
+ if (data.color)
61
+ embed.setColor(data.color);
62
+ super(embed.data);
63
+ }
64
+ has(property) {
65
+ return Object.hasOwn(this, property);
66
+ }
67
+ toArray() {
68
+ return [this];
69
+ }
70
+ toString(space = 2) {
71
+ return JSON.stringify(this, null, space);
72
+ }
73
+ updateField(index, field) {
74
+ if (this.fields.at(index)) {
75
+ const fields = Array.from(this.fields);
76
+ if (field.name)
77
+ fields[index].name = field.name;
78
+ if (field.value)
79
+ fields[index].value = field.value;
80
+ if (field.inline)
81
+ fields[index].inline = field.inline;
82
+ this.setFields(fields);
83
+ }
84
+ return this;
85
+ }
86
+ deleteField(index) {
87
+ if (this.fields.at(index)) {
88
+ this.setFields(this.fields.toSpliced(index, 1));
89
+ }
90
+ return this;
91
+ }
92
+ popField() {
93
+ const fields = Array.from(this.fields);
94
+ const field = fields.pop();
95
+ this.setFields(fields);
96
+ return field;
97
+ }
98
+ setAsset(asset, source) {
99
+ let url = void 0;
100
+ if (source instanceof Attachment || source instanceof AttachmentBuilder) {
101
+ url = `attachment://${source.name}`;
102
+ }
103
+ if (source && typeof source === "object" && "url" in source) {
104
+ url = source.url;
105
+ }
106
+ if (!url)
107
+ return this;
108
+ if (asset === "thumbnail") {
109
+ this.setImage(url);
110
+ } else {
111
+ this.setThumbnail(url);
112
+ }
113
+ return this;
114
+ }
115
+ get fieldsLength() {
116
+ return this.data.fields?.length ?? 0;
117
+ }
118
+ get fields() {
119
+ return this.data.fields ?? [];
120
+ }
121
+ createFromThis(data = {}) {
122
+ data.extend = this;
123
+ return new EmbedBuilderPlus(data);
124
+ }
125
+ }
126
+ function createEmbed(data) {
127
+ return new EmbedBuilderPlus(data);
45
128
  }
46
129
 
47
- export { createEmbed, createEmbedAsset, createEmbedAuthor, createEmbedFooter };
130
+ export { EmbedBuilderPlus, createEmbed, createEmbedAsset, createEmbedAuthor, createEmbedFooter };
@@ -2,15 +2,8 @@
2
2
 
3
3
  const discord_js = require('discord.js');
4
4
 
5
- const formated = {
6
- mention(type, ref, alt = "") {
7
- const id = ref?.toString();
8
- return {
9
- channel: id ? discord_js.channelMention(id) : alt,
10
- user: id ? discord_js.userMention(id) : alt,
11
- role: id ? discord_js.roleMention(id) : alt
12
- }[type];
13
- }
14
- };
5
+ function formatedMention(ref, alt = "") {
6
+ return ref instanceof discord_js.Role ? discord_js.roleMention(ref.id) : ref instanceof discord_js.User ? discord_js.userMention(ref.id) : ref ? discord_js.channelMention(ref.id) : alt;
7
+ }
15
8
 
16
- exports.formated = formated;
9
+ exports.formatedMention = formatedMention;
@@ -1,14 +1,7 @@
1
- import { channelMention, userMention, roleMention } from 'discord.js';
1
+ import { Role, roleMention, User, userMention, channelMention } from 'discord.js';
2
2
 
3
- const formated = {
4
- mention(type, ref, alt = "") {
5
- const id = ref?.toString();
6
- return {
7
- channel: id ? channelMention(id) : alt,
8
- user: id ? userMention(id) : alt,
9
- role: id ? roleMention(id) : alt
10
- }[type];
11
- }
12
- };
3
+ function formatedMention(ref, alt = "") {
4
+ return ref instanceof Role ? roleMention(ref.id) : ref instanceof User ? userMention(ref.id) : ref ? channelMention(ref.id) : alt;
5
+ }
13
6
 
14
- export { formated };
7
+ export { formatedMention };
@@ -0,0 +1,27 @@
1
+ 'use strict';
2
+
3
+ const core = require('@magicyan/core');
4
+
5
+ function findMessage(channel) {
6
+ const messages = channel.messages.cache;
7
+ return {
8
+ byId(id) {
9
+ return messages.get(id);
10
+ },
11
+ byContent() {
12
+ return {
13
+ equals(content, ignoreCase = false) {
14
+ return ignoreCase ? messages.find((m) => m.content === content) : messages.find((m) => core.equalsIgnoreCase(m.content, content));
15
+ },
16
+ include(content, ignoreCase = false) {
17
+ return ignoreCase ? messages.find((m) => m.content.includes(content)) : messages.find((m) => core.includesIgnoreCase(m.content, content));
18
+ }
19
+ };
20
+ },
21
+ byFilter(filter) {
22
+ return messages.find(filter);
23
+ }
24
+ };
25
+ }
26
+
27
+ exports.findMessage = findMessage;
@@ -0,0 +1,25 @@
1
+ import { equalsIgnoreCase, includesIgnoreCase } from '@magicyan/core';
2
+
3
+ function findMessage(channel) {
4
+ const messages = channel.messages.cache;
5
+ return {
6
+ byId(id) {
7
+ return messages.get(id);
8
+ },
9
+ byContent() {
10
+ return {
11
+ equals(content, ignoreCase = false) {
12
+ return ignoreCase ? messages.find((m) => m.content === content) : messages.find((m) => equalsIgnoreCase(m.content, content));
13
+ },
14
+ include(content, ignoreCase = false) {
15
+ return ignoreCase ? messages.find((m) => m.content.includes(content)) : messages.find((m) => includesIgnoreCase(m.content, content));
16
+ }
17
+ };
18
+ },
19
+ byFilter(filter) {
20
+ return messages.find(filter);
21
+ }
22
+ };
23
+ }
24
+
25
+ export { findMessage };
package/dist/index.cjs CHANGED
@@ -1,5 +1,6 @@
1
1
  'use strict';
2
2
 
3
+ const chars = require('./constants/chars.cjs');
3
4
  const client = require('./constants/client.cjs');
4
5
  const channels = require('./functions/channels.cjs');
5
6
  const commands = require('./functions/commands.cjs');
@@ -8,28 +9,31 @@ const embeds = require('./functions/embeds.cjs');
8
9
  const emojis = require('./functions/emojis.cjs');
9
10
  const format = require('./functions/format.cjs');
10
11
  const members = require('./functions/members.cjs');
12
+ const message = require('./functions/message.cjs');
11
13
  const roles = require('./functions/roles.cjs');
12
- const utils = require('./functions/utils.cjs');
13
14
  const core = require('@magicyan/core');
14
15
 
15
16
 
16
17
 
18
+ exports.chars = chars.chars;
17
19
  exports.CustomItents = client.CustomItents;
18
20
  exports.CustomPartials = client.CustomPartials;
19
21
  exports.findChannel = channels.findChannel;
20
22
  exports.findCommand = commands.findCommand;
21
23
  exports.createComponentsManager = components.createComponentsManager;
24
+ exports.createLinkButton = components.createLinkButton;
25
+ exports.createModalInput = components.createModalInput;
26
+ exports.createRow = components.createRow;
27
+ exports.EmbedBuilderPlus = embeds.EmbedBuilderPlus;
22
28
  exports.createEmbed = embeds.createEmbed;
23
29
  exports.createEmbedAsset = embeds.createEmbedAsset;
24
30
  exports.createEmbedAuthor = embeds.createEmbedAuthor;
25
31
  exports.createEmbedFooter = embeds.createEmbedFooter;
26
32
  exports.findEmoji = emojis.findEmoji;
27
- exports.formated = format.formated;
33
+ exports.formatedMention = format.formatedMention;
28
34
  exports.findMember = members.findMember;
35
+ exports.findMessage = message.findMessage;
29
36
  exports.findRole = roles.findRole;
30
- exports.createLinkButton = utils.createLinkButton;
31
- exports.createModalInput = utils.createModalInput;
32
- exports.createRow = utils.createRow;
33
37
  Object.keys(core).forEach(function (k) {
34
38
  if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) exports[k] = core[k];
35
39
  });
package/dist/index.d.cts CHANGED
@@ -1,7 +1,11 @@
1
1
  import * as discord_js from 'discord.js';
2
- import { GatewayIntentBits, Partials, ChannelType, Guild, CommandInteractionOption, Client, ApplicationCommand, ActionRow, MessageActionRowComponent, ButtonComponent, StringSelectMenuComponent, UserSelectMenuComponent, ChannelSelectMenuComponent, RoleSelectMenuComponent, MentionableSelectMenuComponent, EmbedAuthorData, EmbedFooterData, EmbedAssetData, EmbedBuilder, User, ImageURLOptions, Attachment, AttachmentBuilder, ColorResolvable, GuildEmoji, GuildBasedChannel, Role, GuildMember, AnyComponentBuilder, ActionRowBuilder, TextInputBuilder, ButtonBuilder, TextInputComponentData, LinkButtonComponentData } from 'discord.js';
2
+ import { GatewayIntentBits, Partials, ChannelType, Guild, CommandInteractionOption, Client, ApplicationCommand, AnyComponentBuilder, ActionRowBuilder, TextInputBuilder, ButtonBuilder, ActionRow, MessageActionRowComponent, TextInputComponentData, LinkButtonComponentData, ButtonComponent, StringSelectMenuComponent, UserSelectMenuComponent, ChannelSelectMenuComponent, RoleSelectMenuComponent, MentionableSelectMenuComponent, EmbedAuthorData, EmbedFooterData, EmbedAssetData, EmbedBuilder, User, ImageURLOptions, Attachment, AttachmentBuilder, EmbedData, APIEmbed, Embed, ColorResolvable, GuildEmoji, GuildBasedChannel, Role, GuildMember, GuildTextBasedChannel, Message } from 'discord.js';
3
3
  export * from '@magicyan/core';
4
4
 
5
+ declare const chars: {
6
+ invisible: string;
7
+ };
8
+
5
9
  declare const CustomItents: {
6
10
  Messages: GatewayIntentBits[];
7
11
  Guild: GatewayIntentBits[];
@@ -12,19 +16,23 @@ declare const CustomPartials: {
12
16
  All: Partials[];
13
17
  };
14
18
 
19
+ type FindChannelFilter<T extends ChannelType> = (channel: GetChannelType<T>) => boolean;
15
20
  type GetChannelType<Type extends ChannelType> = Extract<NonNullable<CommandInteractionOption<"cached">["channel"]>, {
16
21
  type: Type extends ChannelType.PublicThread | ChannelType.AnnouncementThread ? ChannelType.PublicThread | ChannelType.AnnouncementThread : Type;
17
22
  }>;
18
23
  declare function findChannel<Type extends Exclude<ChannelType, ChannelType.DM> = ChannelType.GuildText>(guild: Guild, type?: Type): {
19
- byName(name: string): GetChannelType<Type> | undefined;
24
+ byName(name: string, filter?: FindChannelFilter<Type>): GetChannelType<Type> | undefined;
20
25
  byId(id: string): GetChannelType<Type> | undefined;
26
+ byFilter(filter: FindChannelFilter<Type>): discord_js.GuildBasedChannel | undefined;
21
27
  inCategoryId(id: string): {
22
- byName(name: string): GetChannelType<Type> | undefined;
23
- byId(id: string): GetChannelType<Type> | undefined;
28
+ byName(name: string, filter?: FindChannelFilter<Type>): GetChannelType<Type> | undefined;
29
+ byId(id: string, filter?: FindChannelFilter<Type>): GetChannelType<Type> | undefined;
30
+ byFilter(filter: FindChannelFilter<Type>): discord_js.GuildBasedChannel | undefined;
24
31
  };
25
32
  inCategoryName(name: string): {
26
- byName(name: string): GetChannelType<Type> | undefined;
27
- byId(id: string): GetChannelType<Type> | undefined;
33
+ byName(name: string, filter?: FindChannelFilter<Type>): GetChannelType<Type> | undefined;
34
+ byId(id: string, filter?: FindChannelFilter<Type>): GetChannelType<Type> | undefined;
35
+ byFilter(filter: FindChannelFilter<Type>): discord_js.GuildBasedChannel | undefined;
28
36
  };
29
37
  };
30
38
 
@@ -41,6 +49,13 @@ declare function findCommand(guildOrClient: Guild | Client<true>): {
41
49
  }> | undefined;
42
50
  };
43
51
 
52
+ declare function createRow<Component extends AnyComponentBuilder>(...components: Component[]): ActionRowBuilder<Component>;
53
+ interface CreateModalInputData extends Omit<TextInputComponentData, "type"> {
54
+ }
55
+ declare function createModalInput(data: CreateModalInputData): ActionRowBuilder<TextInputBuilder>;
56
+ interface CreateLinkButtonData extends Omit<LinkButtonComponentData, "style" | "type"> {
57
+ }
58
+ declare function createLinkButton(data: CreateLinkButtonData): ButtonBuilder;
44
59
  interface MessageComponentsManager {
45
60
  getButton(customId: string): ButtonComponent | undefined;
46
61
  getButton(customId: string, required: true): ButtonComponent;
@@ -79,35 +94,57 @@ interface CreateEmbedFooterOptions {
79
94
  text?: string | null;
80
95
  iconURL?: string | null;
81
96
  }
82
- declare function createEmbedFooter(options: CreateEmbedFooterOptions): EmbedFooterData;
97
+ declare function createEmbedFooter(options: CreateEmbedFooterOptions): EmbedFooterData | undefined;
83
98
  type EmbedAssetOptions = Omit<EmbedAssetData, "url">;
84
- type AssetSource = string | null | Attachment | AttachmentBuilder;
85
- declare function createEmbedAsset(source?: AssetSource, options?: EmbedAssetOptions): EmbedAssetData | undefined;
86
- type EmbedColor = ColorResolvable | (string & {});
87
- type BaseEmbedField = {
99
+ type AssetSource = string | Attachment | AttachmentBuilder | EmbedAssetData | undefined | null;
100
+ declare function createEmbedAsset(source: AssetSource, options?: EmbedAssetOptions): EmbedAssetData | undefined;
101
+ type EmbedBuilderPlusAssetData = AssetSource;
102
+ type EmbedBuilderPlusColorData = string & {} | ColorResolvable | null;
103
+ type EmbedBuilderPlusFieldData = {
88
104
  name: string;
89
105
  value: string;
90
106
  inline?: boolean;
91
107
  };
92
- type BaseEmbedData = {
93
- title?: string;
94
- color?: EmbedColor;
95
- description?: string;
96
- url?: string;
97
- timestamp?: string | number | Date;
98
- footer?: EmbedFooterData;
99
- image?: EmbedAssetData;
100
- thumbnail?: EmbedAssetData;
101
- author?: EmbedAuthorData;
102
- fields?: BaseEmbedField[];
108
+ type EmbedBuilderPlusFooterData = {
109
+ text?: string | null;
110
+ iconURL?: string | null;
103
111
  };
104
- type CreateEmbedOptions = BaseEmbedData & {
105
- extend?: BaseEmbedData;
106
- modify?: {
107
- fields?(fields: BaseEmbedField[]): BaseEmbedField[];
108
- };
112
+ type EmbedBuilderPlusAuthorData = {
113
+ name: string;
114
+ url?: string;
115
+ iconURL?: string;
109
116
  };
110
- declare function createEmbed(options: CreateEmbedOptions): EmbedBuilder;
117
+ interface EmbedBuilderPlusOptions {
118
+ extend?: Omit<EmbedBuilderPlusData, keyof EmbedBuilderPlusOptions> | EmbedData | APIEmbed | Embed;
119
+ mergeFields?: boolean;
120
+ }
121
+ interface EmbedBuilderPlusData extends EmbedBuilderPlusOptions {
122
+ title?: string | null;
123
+ color?: EmbedBuilderPlusColorData | null;
124
+ description?: string | null;
125
+ url?: string | null;
126
+ thumbnail?: EmbedBuilderPlusAssetData | null;
127
+ image?: EmbedBuilderPlusAssetData | null;
128
+ fields?: Partial<EmbedBuilderPlusFieldData>[] | null;
129
+ timestamp?: string | number | Date | null;
130
+ footer?: EmbedBuilderPlusFooterData;
131
+ author?: EmbedBuilderPlusAuthorData;
132
+ }
133
+ declare class EmbedBuilderPlus extends EmbedBuilder {
134
+ constructor(data: EmbedBuilderPlusData);
135
+ has(property: keyof Omit<EmbedBuilderPlusData, keyof EmbedBuilderPlusOptions>): boolean;
136
+ toArray(): this[];
137
+ toString(space?: number): string;
138
+ updateField(index: number, field: Partial<EmbedBuilderPlusFieldData>): this;
139
+ deleteField(index: number): this;
140
+ popField(): discord_js.APIEmbedField | undefined;
141
+ setAsset(asset: "thumbnail" | "image", source: EmbedBuilderPlusAssetData): this;
142
+ get fieldsLength(): number;
143
+ get fields(): discord_js.APIEmbedField[];
144
+ createFromThis(data?: EmbedBuilderPlusData): EmbedBuilderPlus;
145
+ }
146
+ type EmbedPropery<T extends keyof EmbedBuilderPlusData> = EmbedBuilderPlusData[T];
147
+ declare function createEmbed(data: EmbedBuilderPlusData): EmbedBuilderPlus;
111
148
 
112
149
  type FindEmojiFilter = (emoji: GuildEmoji) => boolean;
113
150
  declare function findEmoji(guildOrClient: Guild | Client): {
@@ -116,15 +153,7 @@ declare function findEmoji(guildOrClient: Guild | Client): {
116
153
  byFilter(filter: FindEmojiFilter): GuildEmoji | undefined;
117
154
  };
118
155
 
119
- type MentionType = "channel" | "role" | "user";
120
- type GetMentionType<T extends MentionType> = string | null | undefined | (T extends "channel" ? GuildBasedChannel : T extends "role" ? Role : T extends "user" ? User : never);
121
- declare const formated: {
122
- mention<T extends MentionType>(type: T, ref: GetMentionType<T>, alt?: string): {
123
- channel: string;
124
- user: string;
125
- role: string;
126
- }[T];
127
- };
156
+ declare function formatedMention(ref: GuildBasedChannel | Role | User | undefined | null, alt?: string): string;
128
157
 
129
158
  type FindMemberFilter = (member: GuildMember) => boolean;
130
159
  declare function findMember(guild: Guild): {
@@ -136,6 +165,16 @@ declare function findMember(guild: Guild): {
136
165
  byFilter(filter: FindMemberFilter): GuildMember | undefined;
137
166
  };
138
167
 
168
+ type FindMessageFilter = (role: Message<true>) => boolean;
169
+ declare function findMessage(channel: GuildTextBasedChannel): {
170
+ byId(id: string): Message<true> | undefined;
171
+ byContent(): {
172
+ equals(content: string, ignoreCase?: boolean): Message<true> | undefined;
173
+ include(content: string, ignoreCase?: boolean): Message<true> | undefined;
174
+ };
175
+ byFilter(filter: FindMessageFilter): Message<true> | undefined;
176
+ };
177
+
139
178
  type FindRoleFilter = (role: Role) => boolean;
140
179
  declare function findRole(guild: Guild): {
141
180
  byColor(color: number, and?: FindRoleFilter): Role | undefined;
@@ -145,10 +184,4 @@ declare function findRole(guild: Guild): {
145
184
  byFilter(filter: FindRoleFilter): Role | undefined;
146
185
  };
147
186
 
148
- declare function createRow<Component extends AnyComponentBuilder>(...components: Component[]): ActionRowBuilder<Component>;
149
- type CreateModalInputData = Omit<TextInputComponentData, "type">;
150
- declare function createModalInput(data: CreateModalInputData): ActionRowBuilder<TextInputBuilder>;
151
- type CreateLinkButtonData = Omit<LinkButtonComponentData, "style" | "type">;
152
- declare function createLinkButton(data: CreateLinkButtonData): ButtonBuilder;
153
-
154
- export { CustomItents, CustomPartials, createComponentsManager, createEmbed, createEmbedAsset, createEmbedAuthor, createEmbedFooter, createLinkButton, createModalInput, createRow, findChannel, findCommand, findEmoji, findMember, findRole, formated };
187
+ export { CustomItents, CustomPartials, EmbedBuilderPlus, type EmbedPropery, chars, createComponentsManager, createEmbed, createEmbedAsset, createEmbedAuthor, createEmbedFooter, createLinkButton, createModalInput, createRow, findChannel, findCommand, findEmoji, findMember, findMessage, findRole, formatedMention };
package/dist/index.d.mts CHANGED
@@ -1,7 +1,11 @@
1
1
  import * as discord_js from 'discord.js';
2
- import { GatewayIntentBits, Partials, ChannelType, Guild, CommandInteractionOption, Client, ApplicationCommand, ActionRow, MessageActionRowComponent, ButtonComponent, StringSelectMenuComponent, UserSelectMenuComponent, ChannelSelectMenuComponent, RoleSelectMenuComponent, MentionableSelectMenuComponent, EmbedAuthorData, EmbedFooterData, EmbedAssetData, EmbedBuilder, User, ImageURLOptions, Attachment, AttachmentBuilder, ColorResolvable, GuildEmoji, GuildBasedChannel, Role, GuildMember, AnyComponentBuilder, ActionRowBuilder, TextInputBuilder, ButtonBuilder, TextInputComponentData, LinkButtonComponentData } from 'discord.js';
2
+ import { GatewayIntentBits, Partials, ChannelType, Guild, CommandInteractionOption, Client, ApplicationCommand, AnyComponentBuilder, ActionRowBuilder, TextInputBuilder, ButtonBuilder, ActionRow, MessageActionRowComponent, TextInputComponentData, LinkButtonComponentData, ButtonComponent, StringSelectMenuComponent, UserSelectMenuComponent, ChannelSelectMenuComponent, RoleSelectMenuComponent, MentionableSelectMenuComponent, EmbedAuthorData, EmbedFooterData, EmbedAssetData, EmbedBuilder, User, ImageURLOptions, Attachment, AttachmentBuilder, EmbedData, APIEmbed, Embed, ColorResolvable, GuildEmoji, GuildBasedChannel, Role, GuildMember, GuildTextBasedChannel, Message } from 'discord.js';
3
3
  export * from '@magicyan/core';
4
4
 
5
+ declare const chars: {
6
+ invisible: string;
7
+ };
8
+
5
9
  declare const CustomItents: {
6
10
  Messages: GatewayIntentBits[];
7
11
  Guild: GatewayIntentBits[];
@@ -12,19 +16,23 @@ declare const CustomPartials: {
12
16
  All: Partials[];
13
17
  };
14
18
 
19
+ type FindChannelFilter<T extends ChannelType> = (channel: GetChannelType<T>) => boolean;
15
20
  type GetChannelType<Type extends ChannelType> = Extract<NonNullable<CommandInteractionOption<"cached">["channel"]>, {
16
21
  type: Type extends ChannelType.PublicThread | ChannelType.AnnouncementThread ? ChannelType.PublicThread | ChannelType.AnnouncementThread : Type;
17
22
  }>;
18
23
  declare function findChannel<Type extends Exclude<ChannelType, ChannelType.DM> = ChannelType.GuildText>(guild: Guild, type?: Type): {
19
- byName(name: string): GetChannelType<Type> | undefined;
24
+ byName(name: string, filter?: FindChannelFilter<Type>): GetChannelType<Type> | undefined;
20
25
  byId(id: string): GetChannelType<Type> | undefined;
26
+ byFilter(filter: FindChannelFilter<Type>): discord_js.GuildBasedChannel | undefined;
21
27
  inCategoryId(id: string): {
22
- byName(name: string): GetChannelType<Type> | undefined;
23
- byId(id: string): GetChannelType<Type> | undefined;
28
+ byName(name: string, filter?: FindChannelFilter<Type>): GetChannelType<Type> | undefined;
29
+ byId(id: string, filter?: FindChannelFilter<Type>): GetChannelType<Type> | undefined;
30
+ byFilter(filter: FindChannelFilter<Type>): discord_js.GuildBasedChannel | undefined;
24
31
  };
25
32
  inCategoryName(name: string): {
26
- byName(name: string): GetChannelType<Type> | undefined;
27
- byId(id: string): GetChannelType<Type> | undefined;
33
+ byName(name: string, filter?: FindChannelFilter<Type>): GetChannelType<Type> | undefined;
34
+ byId(id: string, filter?: FindChannelFilter<Type>): GetChannelType<Type> | undefined;
35
+ byFilter(filter: FindChannelFilter<Type>): discord_js.GuildBasedChannel | undefined;
28
36
  };
29
37
  };
30
38
 
@@ -41,6 +49,13 @@ declare function findCommand(guildOrClient: Guild | Client<true>): {
41
49
  }> | undefined;
42
50
  };
43
51
 
52
+ declare function createRow<Component extends AnyComponentBuilder>(...components: Component[]): ActionRowBuilder<Component>;
53
+ interface CreateModalInputData extends Omit<TextInputComponentData, "type"> {
54
+ }
55
+ declare function createModalInput(data: CreateModalInputData): ActionRowBuilder<TextInputBuilder>;
56
+ interface CreateLinkButtonData extends Omit<LinkButtonComponentData, "style" | "type"> {
57
+ }
58
+ declare function createLinkButton(data: CreateLinkButtonData): ButtonBuilder;
44
59
  interface MessageComponentsManager {
45
60
  getButton(customId: string): ButtonComponent | undefined;
46
61
  getButton(customId: string, required: true): ButtonComponent;
@@ -79,35 +94,57 @@ interface CreateEmbedFooterOptions {
79
94
  text?: string | null;
80
95
  iconURL?: string | null;
81
96
  }
82
- declare function createEmbedFooter(options: CreateEmbedFooterOptions): EmbedFooterData;
97
+ declare function createEmbedFooter(options: CreateEmbedFooterOptions): EmbedFooterData | undefined;
83
98
  type EmbedAssetOptions = Omit<EmbedAssetData, "url">;
84
- type AssetSource = string | null | Attachment | AttachmentBuilder;
85
- declare function createEmbedAsset(source?: AssetSource, options?: EmbedAssetOptions): EmbedAssetData | undefined;
86
- type EmbedColor = ColorResolvable | (string & {});
87
- type BaseEmbedField = {
99
+ type AssetSource = string | Attachment | AttachmentBuilder | EmbedAssetData | undefined | null;
100
+ declare function createEmbedAsset(source: AssetSource, options?: EmbedAssetOptions): EmbedAssetData | undefined;
101
+ type EmbedBuilderPlusAssetData = AssetSource;
102
+ type EmbedBuilderPlusColorData = string & {} | ColorResolvable | null;
103
+ type EmbedBuilderPlusFieldData = {
88
104
  name: string;
89
105
  value: string;
90
106
  inline?: boolean;
91
107
  };
92
- type BaseEmbedData = {
93
- title?: string;
94
- color?: EmbedColor;
95
- description?: string;
96
- url?: string;
97
- timestamp?: string | number | Date;
98
- footer?: EmbedFooterData;
99
- image?: EmbedAssetData;
100
- thumbnail?: EmbedAssetData;
101
- author?: EmbedAuthorData;
102
- fields?: BaseEmbedField[];
108
+ type EmbedBuilderPlusFooterData = {
109
+ text?: string | null;
110
+ iconURL?: string | null;
103
111
  };
104
- type CreateEmbedOptions = BaseEmbedData & {
105
- extend?: BaseEmbedData;
106
- modify?: {
107
- fields?(fields: BaseEmbedField[]): BaseEmbedField[];
108
- };
112
+ type EmbedBuilderPlusAuthorData = {
113
+ name: string;
114
+ url?: string;
115
+ iconURL?: string;
109
116
  };
110
- declare function createEmbed(options: CreateEmbedOptions): EmbedBuilder;
117
+ interface EmbedBuilderPlusOptions {
118
+ extend?: Omit<EmbedBuilderPlusData, keyof EmbedBuilderPlusOptions> | EmbedData | APIEmbed | Embed;
119
+ mergeFields?: boolean;
120
+ }
121
+ interface EmbedBuilderPlusData extends EmbedBuilderPlusOptions {
122
+ title?: string | null;
123
+ color?: EmbedBuilderPlusColorData | null;
124
+ description?: string | null;
125
+ url?: string | null;
126
+ thumbnail?: EmbedBuilderPlusAssetData | null;
127
+ image?: EmbedBuilderPlusAssetData | null;
128
+ fields?: Partial<EmbedBuilderPlusFieldData>[] | null;
129
+ timestamp?: string | number | Date | null;
130
+ footer?: EmbedBuilderPlusFooterData;
131
+ author?: EmbedBuilderPlusAuthorData;
132
+ }
133
+ declare class EmbedBuilderPlus extends EmbedBuilder {
134
+ constructor(data: EmbedBuilderPlusData);
135
+ has(property: keyof Omit<EmbedBuilderPlusData, keyof EmbedBuilderPlusOptions>): boolean;
136
+ toArray(): this[];
137
+ toString(space?: number): string;
138
+ updateField(index: number, field: Partial<EmbedBuilderPlusFieldData>): this;
139
+ deleteField(index: number): this;
140
+ popField(): discord_js.APIEmbedField | undefined;
141
+ setAsset(asset: "thumbnail" | "image", source: EmbedBuilderPlusAssetData): this;
142
+ get fieldsLength(): number;
143
+ get fields(): discord_js.APIEmbedField[];
144
+ createFromThis(data?: EmbedBuilderPlusData): EmbedBuilderPlus;
145
+ }
146
+ type EmbedPropery<T extends keyof EmbedBuilderPlusData> = EmbedBuilderPlusData[T];
147
+ declare function createEmbed(data: EmbedBuilderPlusData): EmbedBuilderPlus;
111
148
 
112
149
  type FindEmojiFilter = (emoji: GuildEmoji) => boolean;
113
150
  declare function findEmoji(guildOrClient: Guild | Client): {
@@ -116,15 +153,7 @@ declare function findEmoji(guildOrClient: Guild | Client): {
116
153
  byFilter(filter: FindEmojiFilter): GuildEmoji | undefined;
117
154
  };
118
155
 
119
- type MentionType = "channel" | "role" | "user";
120
- type GetMentionType<T extends MentionType> = string | null | undefined | (T extends "channel" ? GuildBasedChannel : T extends "role" ? Role : T extends "user" ? User : never);
121
- declare const formated: {
122
- mention<T extends MentionType>(type: T, ref: GetMentionType<T>, alt?: string): {
123
- channel: string;
124
- user: string;
125
- role: string;
126
- }[T];
127
- };
156
+ declare function formatedMention(ref: GuildBasedChannel | Role | User | undefined | null, alt?: string): string;
128
157
 
129
158
  type FindMemberFilter = (member: GuildMember) => boolean;
130
159
  declare function findMember(guild: Guild): {
@@ -136,6 +165,16 @@ declare function findMember(guild: Guild): {
136
165
  byFilter(filter: FindMemberFilter): GuildMember | undefined;
137
166
  };
138
167
 
168
+ type FindMessageFilter = (role: Message<true>) => boolean;
169
+ declare function findMessage(channel: GuildTextBasedChannel): {
170
+ byId(id: string): Message<true> | undefined;
171
+ byContent(): {
172
+ equals(content: string, ignoreCase?: boolean): Message<true> | undefined;
173
+ include(content: string, ignoreCase?: boolean): Message<true> | undefined;
174
+ };
175
+ byFilter(filter: FindMessageFilter): Message<true> | undefined;
176
+ };
177
+
139
178
  type FindRoleFilter = (role: Role) => boolean;
140
179
  declare function findRole(guild: Guild): {
141
180
  byColor(color: number, and?: FindRoleFilter): Role | undefined;
@@ -145,10 +184,4 @@ declare function findRole(guild: Guild): {
145
184
  byFilter(filter: FindRoleFilter): Role | undefined;
146
185
  };
147
186
 
148
- declare function createRow<Component extends AnyComponentBuilder>(...components: Component[]): ActionRowBuilder<Component>;
149
- type CreateModalInputData = Omit<TextInputComponentData, "type">;
150
- declare function createModalInput(data: CreateModalInputData): ActionRowBuilder<TextInputBuilder>;
151
- type CreateLinkButtonData = Omit<LinkButtonComponentData, "style" | "type">;
152
- declare function createLinkButton(data: CreateLinkButtonData): ButtonBuilder;
153
-
154
- export { CustomItents, CustomPartials, createComponentsManager, createEmbed, createEmbedAsset, createEmbedAuthor, createEmbedFooter, createLinkButton, createModalInput, createRow, findChannel, findCommand, findEmoji, findMember, findRole, formated };
187
+ export { CustomItents, CustomPartials, EmbedBuilderPlus, type EmbedPropery, chars, createComponentsManager, createEmbed, createEmbedAsset, createEmbedAuthor, createEmbedFooter, createLinkButton, createModalInput, createRow, findChannel, findCommand, findEmoji, findMember, findMessage, findRole, formatedMention };
package/dist/index.d.ts CHANGED
@@ -1,7 +1,11 @@
1
1
  import * as discord_js from 'discord.js';
2
- import { GatewayIntentBits, Partials, ChannelType, Guild, CommandInteractionOption, Client, ApplicationCommand, ActionRow, MessageActionRowComponent, ButtonComponent, StringSelectMenuComponent, UserSelectMenuComponent, ChannelSelectMenuComponent, RoleSelectMenuComponent, MentionableSelectMenuComponent, EmbedAuthorData, EmbedFooterData, EmbedAssetData, EmbedBuilder, User, ImageURLOptions, Attachment, AttachmentBuilder, ColorResolvable, GuildEmoji, GuildBasedChannel, Role, GuildMember, AnyComponentBuilder, ActionRowBuilder, TextInputBuilder, ButtonBuilder, TextInputComponentData, LinkButtonComponentData } from 'discord.js';
2
+ import { GatewayIntentBits, Partials, ChannelType, Guild, CommandInteractionOption, Client, ApplicationCommand, AnyComponentBuilder, ActionRowBuilder, TextInputBuilder, ButtonBuilder, ActionRow, MessageActionRowComponent, TextInputComponentData, LinkButtonComponentData, ButtonComponent, StringSelectMenuComponent, UserSelectMenuComponent, ChannelSelectMenuComponent, RoleSelectMenuComponent, MentionableSelectMenuComponent, EmbedAuthorData, EmbedFooterData, EmbedAssetData, EmbedBuilder, User, ImageURLOptions, Attachment, AttachmentBuilder, EmbedData, APIEmbed, Embed, ColorResolvable, GuildEmoji, GuildBasedChannel, Role, GuildMember, GuildTextBasedChannel, Message } from 'discord.js';
3
3
  export * from '@magicyan/core';
4
4
 
5
+ declare const chars: {
6
+ invisible: string;
7
+ };
8
+
5
9
  declare const CustomItents: {
6
10
  Messages: GatewayIntentBits[];
7
11
  Guild: GatewayIntentBits[];
@@ -12,19 +16,23 @@ declare const CustomPartials: {
12
16
  All: Partials[];
13
17
  };
14
18
 
19
+ type FindChannelFilter<T extends ChannelType> = (channel: GetChannelType<T>) => boolean;
15
20
  type GetChannelType<Type extends ChannelType> = Extract<NonNullable<CommandInteractionOption<"cached">["channel"]>, {
16
21
  type: Type extends ChannelType.PublicThread | ChannelType.AnnouncementThread ? ChannelType.PublicThread | ChannelType.AnnouncementThread : Type;
17
22
  }>;
18
23
  declare function findChannel<Type extends Exclude<ChannelType, ChannelType.DM> = ChannelType.GuildText>(guild: Guild, type?: Type): {
19
- byName(name: string): GetChannelType<Type> | undefined;
24
+ byName(name: string, filter?: FindChannelFilter<Type>): GetChannelType<Type> | undefined;
20
25
  byId(id: string): GetChannelType<Type> | undefined;
26
+ byFilter(filter: FindChannelFilter<Type>): discord_js.GuildBasedChannel | undefined;
21
27
  inCategoryId(id: string): {
22
- byName(name: string): GetChannelType<Type> | undefined;
23
- byId(id: string): GetChannelType<Type> | undefined;
28
+ byName(name: string, filter?: FindChannelFilter<Type>): GetChannelType<Type> | undefined;
29
+ byId(id: string, filter?: FindChannelFilter<Type>): GetChannelType<Type> | undefined;
30
+ byFilter(filter: FindChannelFilter<Type>): discord_js.GuildBasedChannel | undefined;
24
31
  };
25
32
  inCategoryName(name: string): {
26
- byName(name: string): GetChannelType<Type> | undefined;
27
- byId(id: string): GetChannelType<Type> | undefined;
33
+ byName(name: string, filter?: FindChannelFilter<Type>): GetChannelType<Type> | undefined;
34
+ byId(id: string, filter?: FindChannelFilter<Type>): GetChannelType<Type> | undefined;
35
+ byFilter(filter: FindChannelFilter<Type>): discord_js.GuildBasedChannel | undefined;
28
36
  };
29
37
  };
30
38
 
@@ -41,6 +49,13 @@ declare function findCommand(guildOrClient: Guild | Client<true>): {
41
49
  }> | undefined;
42
50
  };
43
51
 
52
+ declare function createRow<Component extends AnyComponentBuilder>(...components: Component[]): ActionRowBuilder<Component>;
53
+ interface CreateModalInputData extends Omit<TextInputComponentData, "type"> {
54
+ }
55
+ declare function createModalInput(data: CreateModalInputData): ActionRowBuilder<TextInputBuilder>;
56
+ interface CreateLinkButtonData extends Omit<LinkButtonComponentData, "style" | "type"> {
57
+ }
58
+ declare function createLinkButton(data: CreateLinkButtonData): ButtonBuilder;
44
59
  interface MessageComponentsManager {
45
60
  getButton(customId: string): ButtonComponent | undefined;
46
61
  getButton(customId: string, required: true): ButtonComponent;
@@ -79,35 +94,57 @@ interface CreateEmbedFooterOptions {
79
94
  text?: string | null;
80
95
  iconURL?: string | null;
81
96
  }
82
- declare function createEmbedFooter(options: CreateEmbedFooterOptions): EmbedFooterData;
97
+ declare function createEmbedFooter(options: CreateEmbedFooterOptions): EmbedFooterData | undefined;
83
98
  type EmbedAssetOptions = Omit<EmbedAssetData, "url">;
84
- type AssetSource = string | null | Attachment | AttachmentBuilder;
85
- declare function createEmbedAsset(source?: AssetSource, options?: EmbedAssetOptions): EmbedAssetData | undefined;
86
- type EmbedColor = ColorResolvable | (string & {});
87
- type BaseEmbedField = {
99
+ type AssetSource = string | Attachment | AttachmentBuilder | EmbedAssetData | undefined | null;
100
+ declare function createEmbedAsset(source: AssetSource, options?: EmbedAssetOptions): EmbedAssetData | undefined;
101
+ type EmbedBuilderPlusAssetData = AssetSource;
102
+ type EmbedBuilderPlusColorData = string & {} | ColorResolvable | null;
103
+ type EmbedBuilderPlusFieldData = {
88
104
  name: string;
89
105
  value: string;
90
106
  inline?: boolean;
91
107
  };
92
- type BaseEmbedData = {
93
- title?: string;
94
- color?: EmbedColor;
95
- description?: string;
96
- url?: string;
97
- timestamp?: string | number | Date;
98
- footer?: EmbedFooterData;
99
- image?: EmbedAssetData;
100
- thumbnail?: EmbedAssetData;
101
- author?: EmbedAuthorData;
102
- fields?: BaseEmbedField[];
108
+ type EmbedBuilderPlusFooterData = {
109
+ text?: string | null;
110
+ iconURL?: string | null;
103
111
  };
104
- type CreateEmbedOptions = BaseEmbedData & {
105
- extend?: BaseEmbedData;
106
- modify?: {
107
- fields?(fields: BaseEmbedField[]): BaseEmbedField[];
108
- };
112
+ type EmbedBuilderPlusAuthorData = {
113
+ name: string;
114
+ url?: string;
115
+ iconURL?: string;
109
116
  };
110
- declare function createEmbed(options: CreateEmbedOptions): EmbedBuilder;
117
+ interface EmbedBuilderPlusOptions {
118
+ extend?: Omit<EmbedBuilderPlusData, keyof EmbedBuilderPlusOptions> | EmbedData | APIEmbed | Embed;
119
+ mergeFields?: boolean;
120
+ }
121
+ interface EmbedBuilderPlusData extends EmbedBuilderPlusOptions {
122
+ title?: string | null;
123
+ color?: EmbedBuilderPlusColorData | null;
124
+ description?: string | null;
125
+ url?: string | null;
126
+ thumbnail?: EmbedBuilderPlusAssetData | null;
127
+ image?: EmbedBuilderPlusAssetData | null;
128
+ fields?: Partial<EmbedBuilderPlusFieldData>[] | null;
129
+ timestamp?: string | number | Date | null;
130
+ footer?: EmbedBuilderPlusFooterData;
131
+ author?: EmbedBuilderPlusAuthorData;
132
+ }
133
+ declare class EmbedBuilderPlus extends EmbedBuilder {
134
+ constructor(data: EmbedBuilderPlusData);
135
+ has(property: keyof Omit<EmbedBuilderPlusData, keyof EmbedBuilderPlusOptions>): boolean;
136
+ toArray(): this[];
137
+ toString(space?: number): string;
138
+ updateField(index: number, field: Partial<EmbedBuilderPlusFieldData>): this;
139
+ deleteField(index: number): this;
140
+ popField(): discord_js.APIEmbedField | undefined;
141
+ setAsset(asset: "thumbnail" | "image", source: EmbedBuilderPlusAssetData): this;
142
+ get fieldsLength(): number;
143
+ get fields(): discord_js.APIEmbedField[];
144
+ createFromThis(data?: EmbedBuilderPlusData): EmbedBuilderPlus;
145
+ }
146
+ type EmbedPropery<T extends keyof EmbedBuilderPlusData> = EmbedBuilderPlusData[T];
147
+ declare function createEmbed(data: EmbedBuilderPlusData): EmbedBuilderPlus;
111
148
 
112
149
  type FindEmojiFilter = (emoji: GuildEmoji) => boolean;
113
150
  declare function findEmoji(guildOrClient: Guild | Client): {
@@ -116,15 +153,7 @@ declare function findEmoji(guildOrClient: Guild | Client): {
116
153
  byFilter(filter: FindEmojiFilter): GuildEmoji | undefined;
117
154
  };
118
155
 
119
- type MentionType = "channel" | "role" | "user";
120
- type GetMentionType<T extends MentionType> = string | null | undefined | (T extends "channel" ? GuildBasedChannel : T extends "role" ? Role : T extends "user" ? User : never);
121
- declare const formated: {
122
- mention<T extends MentionType>(type: T, ref: GetMentionType<T>, alt?: string): {
123
- channel: string;
124
- user: string;
125
- role: string;
126
- }[T];
127
- };
156
+ declare function formatedMention(ref: GuildBasedChannel | Role | User | undefined | null, alt?: string): string;
128
157
 
129
158
  type FindMemberFilter = (member: GuildMember) => boolean;
130
159
  declare function findMember(guild: Guild): {
@@ -136,6 +165,16 @@ declare function findMember(guild: Guild): {
136
165
  byFilter(filter: FindMemberFilter): GuildMember | undefined;
137
166
  };
138
167
 
168
+ type FindMessageFilter = (role: Message<true>) => boolean;
169
+ declare function findMessage(channel: GuildTextBasedChannel): {
170
+ byId(id: string): Message<true> | undefined;
171
+ byContent(): {
172
+ equals(content: string, ignoreCase?: boolean): Message<true> | undefined;
173
+ include(content: string, ignoreCase?: boolean): Message<true> | undefined;
174
+ };
175
+ byFilter(filter: FindMessageFilter): Message<true> | undefined;
176
+ };
177
+
139
178
  type FindRoleFilter = (role: Role) => boolean;
140
179
  declare function findRole(guild: Guild): {
141
180
  byColor(color: number, and?: FindRoleFilter): Role | undefined;
@@ -145,10 +184,4 @@ declare function findRole(guild: Guild): {
145
184
  byFilter(filter: FindRoleFilter): Role | undefined;
146
185
  };
147
186
 
148
- declare function createRow<Component extends AnyComponentBuilder>(...components: Component[]): ActionRowBuilder<Component>;
149
- type CreateModalInputData = Omit<TextInputComponentData, "type">;
150
- declare function createModalInput(data: CreateModalInputData): ActionRowBuilder<TextInputBuilder>;
151
- type CreateLinkButtonData = Omit<LinkButtonComponentData, "style" | "type">;
152
- declare function createLinkButton(data: CreateLinkButtonData): ButtonBuilder;
153
-
154
- export { CustomItents, CustomPartials, createComponentsManager, createEmbed, createEmbedAsset, createEmbedAuthor, createEmbedFooter, createLinkButton, createModalInput, createRow, findChannel, findCommand, findEmoji, findMember, findRole, formated };
187
+ export { CustomItents, CustomPartials, EmbedBuilderPlus, type EmbedPropery, chars, createComponentsManager, createEmbed, createEmbedAsset, createEmbedAuthor, createEmbedFooter, createLinkButton, createModalInput, createRow, findChannel, findCommand, findEmoji, findMember, findMessage, findRole, formatedMention };
package/dist/index.mjs CHANGED
@@ -1,11 +1,12 @@
1
+ export { chars } from './constants/chars.mjs';
1
2
  export { CustomItents, CustomPartials } from './constants/client.mjs';
2
3
  export { findChannel } from './functions/channels.mjs';
3
4
  export { findCommand } from './functions/commands.mjs';
4
- export { createComponentsManager } from './functions/components.mjs';
5
- export { createEmbed, createEmbedAsset, createEmbedAuthor, createEmbedFooter } from './functions/embeds.mjs';
5
+ export { createComponentsManager, createLinkButton, createModalInput, createRow } from './functions/components.mjs';
6
+ export { EmbedBuilderPlus, createEmbed, createEmbedAsset, createEmbedAuthor, createEmbedFooter } from './functions/embeds.mjs';
6
7
  export { findEmoji } from './functions/emojis.mjs';
7
- export { formated } from './functions/format.mjs';
8
+ export { formatedMention } from './functions/format.mjs';
8
9
  export { findMember } from './functions/members.mjs';
10
+ export { findMessage } from './functions/message.mjs';
9
11
  export { findRole } from './functions/roles.mjs';
10
- export { createLinkButton, createModalInput, createRow } from './functions/utils.mjs';
11
12
  export * from '@magicyan/core';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@magicyan/discord",
3
- "version": "1.0.17",
3
+ "version": "1.0.19",
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.15"
42
+ "@magicyan/core": "^1.0.17"
43
43
  },
44
44
  "peerDependencies": {
45
45
  "discord.js": "^14.14.1"
@@ -1,19 +0,0 @@
1
- 'use strict';
2
-
3
- const discord_js = require('discord.js');
4
-
5
- function createRow(...components) {
6
- return new discord_js.ActionRowBuilder({ components });
7
- }
8
- function createModalInput(data) {
9
- return createRow(new discord_js.TextInputBuilder(data));
10
- }
11
- function createLinkButton(data) {
12
- if (!data.label)
13
- data.label = data.url;
14
- return new discord_js.ButtonBuilder({ style: discord_js.ButtonStyle.Link, ...data });
15
- }
16
-
17
- exports.createLinkButton = createLinkButton;
18
- exports.createModalInput = createModalInput;
19
- exports.createRow = createRow;
@@ -1,15 +0,0 @@
1
- import { ActionRowBuilder, TextInputBuilder, ButtonBuilder, ButtonStyle } from 'discord.js';
2
-
3
- function createRow(...components) {
4
- return new ActionRowBuilder({ components });
5
- }
6
- function createModalInput(data) {
7
- return createRow(new TextInputBuilder(data));
8
- }
9
- function createLinkButton(data) {
10
- if (!data.label)
11
- data.label = data.url;
12
- return new ButtonBuilder({ style: ButtonStyle.Link, ...data });
13
- }
14
-
15
- export { createLinkButton, createModalInput, createRow };