@magicyan/discord 1.0.28 → 1.0.29

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/README.md CHANGED
@@ -114,8 +114,37 @@ function run(interaction: ModalSubmitInteraction){
114
114
  console.log(fields.bio);
115
115
  }
116
116
  ```
117
+
117
118
  ## Embeds
118
- > soon
119
+ Easily create embeds with this function
120
+ ```ts
121
+ const embed = createEmbed({
122
+ title: "Welcome",
123
+ description: "Hello world",
124
+ color: "Random"
125
+ });
126
+ ```
127
+ You can set the thumbnail and image in a simple way
128
+ ```ts
129
+ const embed = createEmbed({
130
+ // ...
131
+ thumbnail: "https://github.com/rinckodev.png",
132
+ image: guild.iconURL()
133
+ });
134
+
135
+ // Or passing an options object
136
+ const embed = createEmbed({
137
+ // ...
138
+ image: { url: "imageurl", width: 400, height: 100 }
139
+ });
140
+
141
+ //Or passing an attachment
142
+ const attachment = new AttachmentBuilder(buffer, { name: "myimage.png" });
143
+ const embed = createEmbed({
144
+ // ...
145
+ image: attachment // attachment://myimage.png
146
+ });
147
+ ```
119
148
 
120
149
  ## Channels
121
150
  You can try to get information from a channel url
@@ -7,9 +7,9 @@ function createEmbedAsset(source, options) {
7
7
  return { url: `attachment://${source.name}`, ...options };
8
8
  }
9
9
  if (source && typeof source === "object" && "url" in source) {
10
- return source;
10
+ return Object.assign(source, options ?? (options = {}));
11
11
  }
12
- return source ? { url: source, ...options } : void 0;
12
+ return source ? Object.assign({ url: source }, options) : void 0;
13
13
  }
14
14
 
15
15
  exports.createEmbedAsset = createEmbedAsset;
@@ -5,9 +5,9 @@ function createEmbedAsset(source, options) {
5
5
  return { url: `attachment://${source.name}`, ...options };
6
6
  }
7
7
  if (source && typeof source === "object" && "url" in source) {
8
- return source;
8
+ return Object.assign(source, options ?? (options = {}));
9
9
  }
10
- return source ? { url: source, ...options } : void 0;
10
+ return source ? Object.assign({ url: source }, options) : void 0;
11
11
  }
12
12
 
13
13
  export { createEmbedAsset };
@@ -1,30 +1,33 @@
1
1
  'use strict';
2
2
 
3
- function createEmbedAuthor(options) {
4
- const { prefix = "", suffix = "", url, iconURL } = options;
5
- const { size = 512, extension, forceStatic } = options;
6
- const avatarOptions = { size, extension, forceStatic };
7
- if ("member" in options) {
8
- const { member, property: property2 = "displayName" } = options;
9
- const name = {
10
- id: member.id,
11
- username: member.user.username,
12
- displayName: member.displayName,
13
- globalName: member.user.globalName,
14
- nickname: member.nickname
15
- }[property2] ?? member.displayName;
16
- return {
17
- name: `${prefix}${name}${suffix}`,
18
- url,
19
- iconURL: iconURL || member.displayAvatarURL(avatarOptions)
20
- };
3
+ const discord_js = require('discord.js');
4
+
5
+ function createEmbedAuthor(type, options) {
6
+ const { prefix = "", suffix = "", url, iconURL: icon, extension, forceStatic, size = 1024 } = options ?? {};
7
+ let name = "";
8
+ let iconURL = icon;
9
+ const imageOptions = { extension, forceStatic, size };
10
+ switch (true) {
11
+ case type instanceof discord_js.User: {
12
+ const { property = "displayName" } = options ?? {};
13
+ name = type[property] ?? type.displayName;
14
+ iconURL = type.displayAvatarURL(imageOptions);
15
+ break;
16
+ }
17
+ case type instanceof discord_js.GuildMember: {
18
+ const { property = "displayName" } = options ?? {};
19
+ name = (property == "username" || property == "globalName" ? type.user[property] : type[property]) ?? type.displayName;
20
+ iconURL = type.displayAvatarURL(imageOptions);
21
+ break;
22
+ }
23
+ case type instanceof discord_js.Guild: {
24
+ const { property = "name" } = options ?? {};
25
+ name = type[property];
26
+ iconURL = type.iconURL(imageOptions) ?? void 0;
27
+ break;
28
+ }
21
29
  }
22
- const { property = "displayName", user } = options;
23
- return {
24
- name: `${prefix}${options.user[property]}${suffix}`,
25
- url,
26
- iconURL: iconURL || user.displayAvatarURL(avatarOptions)
27
- };
30
+ return { name: `${prefix}${name}${suffix}`, url: url ?? void 0, iconURL };
28
31
  }
29
32
 
30
33
  exports.createEmbedAuthor = createEmbedAuthor;
@@ -1,28 +1,31 @@
1
- function createEmbedAuthor(options) {
2
- const { prefix = "", suffix = "", url, iconURL } = options;
3
- const { size = 512, extension, forceStatic } = options;
4
- const avatarOptions = { size, extension, forceStatic };
5
- if ("member" in options) {
6
- const { member, property: property2 = "displayName" } = options;
7
- const name = {
8
- id: member.id,
9
- username: member.user.username,
10
- displayName: member.displayName,
11
- globalName: member.user.globalName,
12
- nickname: member.nickname
13
- }[property2] ?? member.displayName;
14
- return {
15
- name: `${prefix}${name}${suffix}`,
16
- url,
17
- iconURL: iconURL || member.displayAvatarURL(avatarOptions)
18
- };
1
+ import { Guild, GuildMember, User } from 'discord.js';
2
+
3
+ function createEmbedAuthor(type, options) {
4
+ const { prefix = "", suffix = "", url, iconURL: icon, extension, forceStatic, size = 1024 } = options ?? {};
5
+ let name = "";
6
+ let iconURL = icon;
7
+ const imageOptions = { extension, forceStatic, size };
8
+ switch (true) {
9
+ case type instanceof User: {
10
+ const { property = "displayName" } = options ?? {};
11
+ name = type[property] ?? type.displayName;
12
+ iconURL = type.displayAvatarURL(imageOptions);
13
+ break;
14
+ }
15
+ case type instanceof GuildMember: {
16
+ const { property = "displayName" } = options ?? {};
17
+ name = (property == "username" || property == "globalName" ? type.user[property] : type[property]) ?? type.displayName;
18
+ iconURL = type.displayAvatarURL(imageOptions);
19
+ break;
20
+ }
21
+ case type instanceof Guild: {
22
+ const { property = "name" } = options ?? {};
23
+ name = type[property];
24
+ iconURL = type.iconURL(imageOptions) ?? void 0;
25
+ break;
26
+ }
19
27
  }
20
- const { property = "displayName", user } = options;
21
- return {
22
- name: `${prefix}${options.user[property]}${suffix}`,
23
- url,
24
- iconURL: iconURL || user.displayAvatarURL(avatarOptions)
25
- };
28
+ return { name: `${prefix}${name}${suffix}`, url: url ?? void 0, iconURL };
26
29
  }
27
30
 
28
31
  export { createEmbedAuthor };
@@ -15,7 +15,7 @@ var __publicField = (obj, key, value) => {
15
15
  class EmbedPlusBuilder extends discord_js.EmbedBuilder {
16
16
  constructor(data) {
17
17
  const { mergeFields = false, extends: extendsEmbed, ...embedData } = data;
18
- const extendsEmbedData = extendsEmbed ? "data" in extendsEmbed ? extendsEmbed.data : data : {};
18
+ const extendsEmbedData = extendsEmbed ? "data" in extendsEmbed ? extendsEmbed.data : extendsEmbed : {};
19
19
  const { fields: extendsFields, ...extendsData } = extendsEmbedData;
20
20
  const fields$1 = (mergeFields ? [extendsFields ?? [], data.fields ?? []].flat() : data.fields ?? extendsFields ?? []).map((field) => Object.assign(
21
21
  { name: field.name ?? chars.chars.invisible, value: field.value ?? chars.chars.invisible },
@@ -51,22 +51,39 @@ class EmbedPlusBuilder extends discord_js.EmbedBuilder {
51
51
  toArray() {
52
52
  return Array.from([this]);
53
53
  }
54
+ /**
55
+ *
56
+ * @param data
57
+ * @param space Adds indentation, white space, and line break characters to the return-value JSON text to make it easier to read.
58
+ * @returns AttachmentBuilder
59
+ *
60
+ * Create a json attachment file from this embed
61
+ */
62
+ toAttachment(data, space = 2) {
63
+ return new discord_js.AttachmentBuilder(
64
+ Buffer.from(this.toString(space), "utf-8"),
65
+ data ?? (data = { name: "embed.json" })
66
+ );
67
+ }
54
68
  toString(space = 2) {
55
69
  return JSON.stringify(this, null, space);
56
70
  }
57
71
  setBorderColor(color) {
58
72
  if (color === null) {
59
73
  this.setColor("#2B2D31");
74
+ } else if (typeof color === "number") {
75
+ this.update({ color });
60
76
  } else {
61
77
  this.setColor(color);
62
78
  }
63
79
  return this;
64
80
  }
65
81
  setAsset(asset, source) {
66
- const assetData = assets.createEmbedAsset(source);
67
- if (!assetData?.url)
68
- return this;
69
- asset === "image" ? this.setImage(assetData.url) : this.setThumbnail(assetData.url);
82
+ if (source === null) {
83
+ asset === "image" ? this.setImage(source) : this.setThumbnail(source);
84
+ } else {
85
+ this.update({ [asset]: source });
86
+ }
70
87
  return this;
71
88
  }
72
89
  static fromInteraction(interaction, index = 0, data = {}) {
@@ -1,4 +1,4 @@
1
- import { EmbedBuilder } from 'discord.js';
1
+ import { EmbedBuilder, AttachmentBuilder } from 'discord.js';
2
2
  import { chars } from '../../constants/chars.mjs';
3
3
  import { createEmbedAsset } from './assets.mjs';
4
4
  import { EmbedPlusFields } from './fields.mjs';
@@ -13,7 +13,7 @@ var __publicField = (obj, key, value) => {
13
13
  class EmbedPlusBuilder extends EmbedBuilder {
14
14
  constructor(data) {
15
15
  const { mergeFields = false, extends: extendsEmbed, ...embedData } = data;
16
- const extendsEmbedData = extendsEmbed ? "data" in extendsEmbed ? extendsEmbed.data : data : {};
16
+ const extendsEmbedData = extendsEmbed ? "data" in extendsEmbed ? extendsEmbed.data : extendsEmbed : {};
17
17
  const { fields: extendsFields, ...extendsData } = extendsEmbedData;
18
18
  const fields = (mergeFields ? [extendsFields ?? [], data.fields ?? []].flat() : data.fields ?? extendsFields ?? []).map((field) => Object.assign(
19
19
  { name: field.name ?? chars.invisible, value: field.value ?? chars.invisible },
@@ -49,22 +49,39 @@ class EmbedPlusBuilder extends EmbedBuilder {
49
49
  toArray() {
50
50
  return Array.from([this]);
51
51
  }
52
+ /**
53
+ *
54
+ * @param data
55
+ * @param space Adds indentation, white space, and line break characters to the return-value JSON text to make it easier to read.
56
+ * @returns AttachmentBuilder
57
+ *
58
+ * Create a json attachment file from this embed
59
+ */
60
+ toAttachment(data, space = 2) {
61
+ return new AttachmentBuilder(
62
+ Buffer.from(this.toString(space), "utf-8"),
63
+ data ?? (data = { name: "embed.json" })
64
+ );
65
+ }
52
66
  toString(space = 2) {
53
67
  return JSON.stringify(this, null, space);
54
68
  }
55
69
  setBorderColor(color) {
56
70
  if (color === null) {
57
71
  this.setColor("#2B2D31");
72
+ } else if (typeof color === "number") {
73
+ this.update({ color });
58
74
  } else {
59
75
  this.setColor(color);
60
76
  }
61
77
  return this;
62
78
  }
63
79
  setAsset(asset, source) {
64
- const assetData = createEmbedAsset(source);
65
- if (!assetData?.url)
66
- return this;
67
- asset === "image" ? this.setImage(assetData.url) : this.setThumbnail(assetData.url);
80
+ if (source === null) {
81
+ asset === "image" ? this.setImage(source) : this.setThumbnail(source);
82
+ } else {
83
+ this.update({ [asset]: source });
84
+ }
68
85
  return this;
69
86
  }
70
87
  static fromInteraction(interaction, index = 0, data = {}) {
@@ -57,6 +57,9 @@ class EmbedPlusFields {
57
57
  set(...fields) {
58
58
  this.embed.setFields(fields);
59
59
  }
60
+ map(callback) {
61
+ return this.toArray().map(callback);
62
+ }
60
63
  update(predicate, field) {
61
64
  const index = this.getPredicateIndex(predicate);
62
65
  if (index == -1)
@@ -77,6 +80,13 @@ class EmbedPlusFields {
77
80
  this.embed.spliceFields(index, 1);
78
81
  return true;
79
82
  }
83
+ /**
84
+ * Remove all fields
85
+ */
86
+ clear() {
87
+ this.fields = [];
88
+ return this;
89
+ }
80
90
  toArray() {
81
91
  return Array.from(this);
82
92
  }
@@ -55,6 +55,9 @@ class EmbedPlusFields {
55
55
  set(...fields) {
56
56
  this.embed.setFields(fields);
57
57
  }
58
+ map(callback) {
59
+ return this.toArray().map(callback);
60
+ }
58
61
  update(predicate, field) {
59
62
  const index = this.getPredicateIndex(predicate);
60
63
  if (index == -1)
@@ -75,6 +78,13 @@ class EmbedPlusFields {
75
78
  this.embed.spliceFields(index, 1);
76
79
  return true;
77
80
  }
81
+ /**
82
+ * Remove all fields
83
+ */
84
+ clear() {
85
+ this.fields = [];
86
+ return this;
87
+ }
78
88
  toArray() {
79
89
  return Array.from(this);
80
90
  }
package/dist/index.cjs CHANGED
@@ -3,19 +3,19 @@
3
3
  const chars = require('./constants/chars.cjs');
4
4
  const client = require('./constants/client.cjs');
5
5
  const misc = require('./functions/misc.cjs');
6
+ const assets = require('./functions/embeds/assets.cjs');
7
+ const author = require('./functions/embeds/author.cjs');
8
+ const embedplus = require('./functions/embeds/embedplus.cjs');
9
+ const footer = require('./functions/embeds/footer.cjs');
10
+ const components = require('./functions/components.cjs');
6
11
  const channels = require('./functions/channels.cjs');
7
12
  const commands = require('./functions/commands.cjs');
8
- const components = require('./functions/components.cjs');
9
13
  const modals = require('./functions/modals.cjs');
10
14
  const emojis = require('./functions/emojis.cjs');
11
15
  const members = require('./functions/members.cjs');
12
16
  const message = require('./functions/message.cjs');
13
17
  const roles = require('./functions/roles.cjs');
14
18
  const regex = require('./functions/regex.cjs');
15
- const assets = require('./functions/embeds/assets.cjs');
16
- const author = require('./functions/embeds/author.cjs');
17
- const embedplus = require('./functions/embeds/embedplus.cjs');
18
- const footer = require('./functions/embeds/footer.cjs');
19
19
  const core = require('@magicyan/core');
20
20
 
21
21
 
@@ -24,11 +24,16 @@ exports.chars = chars.chars;
24
24
  exports.CustomItents = client.CustomItents;
25
25
  exports.CustomPartials = client.CustomPartials;
26
26
  exports.setMobileStatus = misc.setMobileStatus;
27
+ exports.createEmbedAsset = assets.createEmbedAsset;
28
+ exports.createEmbedAuthor = author.createEmbedAuthor;
29
+ exports.EmbedPlusBuilder = embedplus.EmbedPlusBuilder;
30
+ exports.createEmbed = embedplus.createEmbed;
31
+ exports.createEmbedFooter = footer.createEmbedFooter;
32
+ exports.createLinkButton = components.createLinkButton;
33
+ exports.createRow = components.createRow;
27
34
  exports.findChannel = channels.findChannel;
28
35
  exports.getChannelUrlInfo = channels.getChannelUrlInfo;
29
36
  exports.findCommand = commands.findCommand;
30
- exports.createLinkButton = components.createLinkButton;
31
- exports.createRow = components.createRow;
32
37
  exports.createModalFields = modals.createModalFields;
33
38
  exports.createModalInput = modals.createModalInput;
34
39
  exports.modalFieldsToRecord = modals.modalFieldsToRecord;
@@ -38,11 +43,6 @@ exports.findMessage = message.findMessage;
38
43
  exports.getMessageUrlInfo = message.getMessageUrlInfo;
39
44
  exports.findRole = roles.findRole;
40
45
  exports.extractMentionId = regex.extractMentionId;
41
- exports.createEmbedAsset = assets.createEmbedAsset;
42
- exports.createEmbedAuthor = author.createEmbedAuthor;
43
- exports.EmbedPlusBuilder = embedplus.EmbedPlusBuilder;
44
- exports.createEmbed = embedplus.createEmbed;
45
- exports.createEmbedFooter = footer.createEmbedFooter;
46
46
  Object.keys(core).forEach(function (k) {
47
47
  if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) exports[k] = core[k];
48
48
  });
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, ButtonBuilder, LinkButtonComponentData, TextInputBuilder, ModalSubmitFields, Collection, TextInputComponent, TextInputComponentData, GuildEmoji, GuildMember, GuildTextBasedChannel, Message, Role, Attachment, AttachmentBuilder, EmbedAssetData, EmbedAuthorData, ImageURLOptions, User, EmbedFooterData, APIEmbed, Embed, EmbedBuilder, EmbedData, ColorResolvable } from 'discord.js';
2
+ import { GatewayIntentBits, Partials, Attachment, AttachmentBuilder, EmbedAssetData, Guild, GuildMember, User, ImageURLOptions, EmbedFooterData, APIEmbed, Embed, EmbedData, EmbedBuilder, AttachmentData, ColorResolvable, AnyComponentBuilder, ActionRowBuilder, ButtonBuilder, LinkButtonComponentData, ChannelType, CommandInteractionOption, Client, ApplicationCommand, TextInputBuilder, ModalSubmitFields, Collection, TextInputComponent, TextInputComponentData, GuildEmoji, GuildTextBasedChannel, Message, Role } from 'discord.js';
3
3
  export * from '@magicyan/core';
4
4
 
5
5
  declare const chars: {
@@ -18,6 +18,141 @@ declare const CustomPartials: {
18
18
 
19
19
  declare function setMobileStatus(): void;
20
20
 
21
+ type EmbedPlusAssetData = string | Attachment | AttachmentBuilder | EmbedAssetData | undefined | null;
22
+ type EmbedAssetOptions = Omit<EmbedAssetData, "url">;
23
+ declare function createEmbedAsset(source: EmbedPlusAssetData, options?: EmbedAssetOptions): EmbedAssetData | undefined;
24
+
25
+ interface MemberAuthor {
26
+ property?: "username" | "displayName" | "id" | "globalName" | "nickname";
27
+ }
28
+ interface UserAuthor {
29
+ property?: "username" | "displayName" | "id" | "globalName";
30
+ }
31
+ interface GuildAuthor {
32
+ property?: "name" | "id";
33
+ }
34
+ type AuthorType = Guild | GuildMember | User;
35
+ type CreateEmbedAuthorOptions<T extends AuthorType> = {
36
+ iconURL?: string;
37
+ url?: string | null;
38
+ prefix?: string;
39
+ suffix?: string;
40
+ } & ImageURLOptions & (T extends User ? UserAuthor : T extends GuildMember ? MemberAuthor : T extends Guild ? GuildAuthor : never);
41
+ declare function createEmbedAuthor<T extends AuthorType>(type: T, options?: CreateEmbedAuthorOptions<T>): {
42
+ name: string;
43
+ url: string | undefined;
44
+ iconURL: string | undefined;
45
+ };
46
+
47
+ type EmbedPlusFieldData = {
48
+ name: string;
49
+ value: string;
50
+ inline?: boolean;
51
+ };
52
+ type FieldPredicate = (field: EmbedPlusFieldData, index: number, obj: EmbedPlusFieldData[]) => boolean;
53
+ declare class EmbedPlusFields {
54
+ private embed;
55
+ private set fields(value);
56
+ private get fields();
57
+ constructor(embed: EmbedPlusBuilder);
58
+ [Symbol.iterator](): {
59
+ next(): IteratorResult<EmbedPlusFieldData>;
60
+ };
61
+ get length(): number;
62
+ get record(): Record<string, string | undefined>;
63
+ /**
64
+ * Get a filed by index
65
+ * @param name Field name
66
+ */
67
+ get(name: string): EmbedPlusFieldData | undefined;
68
+ /**
69
+ * Get a field by name
70
+ * @param index Field index
71
+ */
72
+ get(index: number): EmbedPlusFieldData | undefined;
73
+ find(predicate: FieldPredicate): EmbedPlusFieldData | undefined;
74
+ push(...fields: EmbedPlusFieldData[]): void;
75
+ set(...fields: EmbedPlusFieldData[]): void;
76
+ map<U>(callback: (value: EmbedPlusFieldData, index: number, array: EmbedPlusFieldData[]) => U): U[];
77
+ update(predicate: string | number | FieldPredicate, field: Partial<EmbedPlusFieldData>): boolean;
78
+ delete(predicate: string | number | FieldPredicate): boolean;
79
+ /**
80
+ * Remove all fields
81
+ */
82
+ clear(): this;
83
+ toArray(): EmbedPlusFieldData[];
84
+ private getPredicateIndex;
85
+ }
86
+
87
+ type EmbedPlusFooterData = {
88
+ text?: string | null;
89
+ iconURL?: string | null;
90
+ };
91
+ declare function createEmbedFooter(options: EmbedPlusFooterData): EmbedFooterData | undefined;
92
+
93
+ type EmbedPlusColorData = string & {} | ColorResolvable | null;
94
+ type EmbedPlusAuthorData = {
95
+ name: string;
96
+ url?: string;
97
+ iconURL?: string;
98
+ };
99
+ interface EmbedPlusData {
100
+ title?: string | null;
101
+ color?: EmbedPlusColorData | null;
102
+ description?: string | null;
103
+ url?: string | null;
104
+ thumbnail?: EmbedPlusAssetData;
105
+ image?: EmbedPlusAssetData;
106
+ fields?: Partial<EmbedPlusFieldData>[] | null;
107
+ timestamp?: string | number | Date | null;
108
+ footer?: EmbedPlusFooterData;
109
+ author?: EmbedPlusAuthorData;
110
+ }
111
+ type AnyEmbedData = APIEmbed | Embed | EmbedData;
112
+ interface MessageWithEmbeds {
113
+ embeds: Array<Embed>;
114
+ }
115
+ interface InteractionWithEmbeds {
116
+ message: MessageWithEmbeds;
117
+ }
118
+ interface EmbedPlusOptions extends EmbedPlusData {
119
+ extends?: EmbedPlusData | AnyEmbedData | EmbedBuilder;
120
+ mergeFields?: boolean;
121
+ }
122
+ declare class EmbedPlusBuilder extends EmbedBuilder {
123
+ fields: EmbedPlusFields;
124
+ constructor(data: EmbedPlusOptions);
125
+ update(data: EmbedPlusData): this;
126
+ has(property: keyof EmbedPlusData): boolean;
127
+ toArray(): EmbedPlusBuilder[];
128
+ /**
129
+ *
130
+ * @param data
131
+ * @param space Adds indentation, white space, and line break characters to the return-value JSON text to make it easier to read.
132
+ * @returns AttachmentBuilder
133
+ *
134
+ * Create a json attachment file from this embed
135
+ */
136
+ toAttachment(data?: AttachmentData, space?: number): AttachmentBuilder;
137
+ toString(space?: number): string;
138
+ setBorderColor(color: EmbedPlusColorData | null): this;
139
+ setAsset(asset: "thumbnail" | "image", source: EmbedPlusAssetData): this;
140
+ static fromInteraction(interaction: InteractionWithEmbeds, index?: number, data?: EmbedPlusData): EmbedPlusBuilder;
141
+ static fromMessage(message: MessageWithEmbeds, index?: number, data?: EmbedPlusData): EmbedPlusBuilder;
142
+ }
143
+ type EmbedPlusProperty<P extends keyof EmbedPlusData> = EmbedPlusData[P];
144
+ interface CreateEmbedOptions<B extends boolean> extends EmbedPlusOptions {
145
+ array?: B;
146
+ interaction?: InteractionWithEmbeds;
147
+ }
148
+ type CreateEmbedReturn<B> = undefined extends B ? EmbedPlusBuilder : false extends B ? EmbedPlusBuilder : EmbedPlusBuilder[];
149
+ declare function createEmbed<B extends boolean>(options: CreateEmbedOptions<B>): CreateEmbedReturn<B>;
150
+
151
+ declare function createRow<Component extends AnyComponentBuilder>(...components: Component[]): ActionRowBuilder<Component>;
152
+ interface CreateLinkButtonData extends Omit<LinkButtonComponentData, "style" | "type"> {
153
+ }
154
+ declare function createLinkButton(data: CreateLinkButtonData): ButtonBuilder;
155
+
21
156
  type GuildChannelType = Exclude<ChannelType, ChannelType.DM>;
22
157
  type FindChannelFilter<T extends GuildChannelType> = (channel: GetChannelType<T>) => boolean;
23
158
  type GetChannelType<Type extends GuildChannelType> = Extract<NonNullable<CommandInteractionOption<"cached">["channel"]>, {
@@ -57,11 +192,6 @@ declare function findCommand(guildOrClient: Guild | Client<true>): {
57
192
  }> | undefined;
58
193
  };
59
194
 
60
- declare function createRow<Component extends AnyComponentBuilder>(...components: Component[]): ActionRowBuilder<Component>;
61
- interface CreateLinkButtonData extends Omit<LinkButtonComponentData, "style" | "type"> {
62
- }
63
- declare function createLinkButton(data: CreateLinkButtonData): ButtonBuilder;
64
-
65
195
  type TextInputData = Omit<TextInputComponentData, "type">;
66
196
  type CreateModalInputData = TextInputData;
67
197
  declare function createModalInput(data: CreateModalInputData): ActionRowBuilder<TextInputBuilder>;
@@ -140,115 +270,4 @@ declare function findRole(guild: Guild): {
140
270
  */
141
271
  declare function extractMentionId(mention: string): string | null;
142
272
 
143
- type EmbedPlusAssetData = string | Attachment | AttachmentBuilder | EmbedAssetData | undefined | null;
144
- type EmbedAssetOptions = Omit<EmbedAssetData, "url">;
145
- declare function createEmbedAsset(source: EmbedPlusAssetData, options?: EmbedAssetOptions): EmbedAssetData | undefined;
146
-
147
- interface UserAuthorOption {
148
- user: User;
149
- property?: "username" | "displayName" | "id" | "globalName";
150
- }
151
- interface MemberAuthorOption {
152
- member: GuildMember;
153
- property?: "username" | "displayName" | "id" | "globalName" | "nickname";
154
- }
155
- type AuthorOption = UserAuthorOption | MemberAuthorOption;
156
- type CreateEmbedAuthorOptions = AuthorOption & ImageURLOptions & {
157
- iconURL?: string;
158
- url?: string;
159
- prefix?: string;
160
- suffix?: string;
161
- };
162
- declare function createEmbedAuthor(options: CreateEmbedAuthorOptions): EmbedAuthorData;
163
-
164
- type EmbedPlusFieldData = {
165
- name: string;
166
- value: string;
167
- inline?: boolean;
168
- };
169
- type FieldPredicate = (field: EmbedPlusFieldData, index: number, obj: EmbedPlusFieldData[]) => boolean;
170
- declare class EmbedPlusFields {
171
- private embed;
172
- private set fields(value);
173
- private get fields();
174
- constructor(embed: EmbedPlusBuilder);
175
- [Symbol.iterator](): {
176
- next(): IteratorResult<EmbedPlusFieldData>;
177
- };
178
- get length(): number;
179
- get record(): Record<string, string | undefined>;
180
- /**
181
- * Get a filed by index
182
- * @param name Field name
183
- */
184
- get(name: string): EmbedPlusFieldData | undefined;
185
- /**
186
- * Get a field by name
187
- * @param index Field index
188
- */
189
- get(index: number): EmbedPlusFieldData | undefined;
190
- find(predicate: FieldPredicate): EmbedPlusFieldData | undefined;
191
- push(...fields: EmbedPlusFieldData[]): void;
192
- set(...fields: EmbedPlusFieldData[]): void;
193
- update(predicate: string | number | FieldPredicate, field: Partial<EmbedPlusFieldData>): boolean;
194
- delete(predicate: string | number | FieldPredicate): boolean;
195
- toArray(): EmbedPlusFieldData[];
196
- private getPredicateIndex;
197
- }
198
-
199
- type EmbedPlusFooterData = {
200
- text?: string | null;
201
- iconURL?: string | null;
202
- };
203
- declare function createEmbedFooter(options: EmbedPlusFooterData): EmbedFooterData | undefined;
204
-
205
- type EmbedPlusColorData = string & {} | ColorResolvable | null;
206
- type EmbedPlusAuthorData = {
207
- name: string;
208
- url?: string;
209
- iconURL?: string;
210
- };
211
- interface EmbedPlusData {
212
- title?: string | null;
213
- color?: EmbedPlusColorData | null;
214
- description?: string | null;
215
- url?: string | null;
216
- thumbnail?: EmbedPlusAssetData;
217
- image?: EmbedPlusAssetData;
218
- fields?: Partial<EmbedPlusFieldData>[] | null;
219
- timestamp?: string | number | Date | null;
220
- footer?: EmbedPlusFooterData;
221
- author?: EmbedPlusAuthorData;
222
- }
223
- type AnyEmbed = APIEmbed | Embed | EmbedBuilder | EmbedData;
224
- interface MessageWithEmbeds {
225
- embeds: Array<Embed>;
226
- }
227
- interface InteractionWithEmbeds {
228
- message: MessageWithEmbeds;
229
- }
230
- interface EmbedPlusOptions extends EmbedPlusData {
231
- extends?: Omit<EmbedPlusData, keyof EmbedPlusOptions> | AnyEmbed;
232
- mergeFields?: boolean;
233
- }
234
- declare class EmbedPlusBuilder extends EmbedBuilder {
235
- fields: EmbedPlusFields;
236
- constructor(data: EmbedPlusOptions);
237
- update(data: EmbedPlusData): this;
238
- has(property: keyof Omit<EmbedPlusData, keyof EmbedPlusOptions>): boolean;
239
- toArray(): EmbedPlusBuilder[];
240
- toString(space?: number): string;
241
- setBorderColor(color: EmbedPlusColorData | null): this;
242
- setAsset(asset: "thumbnail" | "image", source: EmbedPlusAssetData): this;
243
- static fromInteraction(interaction: InteractionWithEmbeds, index?: number, data?: EmbedPlusData): EmbedPlusBuilder;
244
- static fromMessage(message: MessageWithEmbeds, index?: number, data?: EmbedPlusData): EmbedPlusBuilder;
245
- }
246
- type EmbedPlusProperty<P extends keyof EmbedPlusData> = EmbedPlusData[P];
247
- interface CreateEmbedOptions<B extends boolean> extends EmbedPlusOptions {
248
- array?: B;
249
- interaction?: InteractionWithEmbeds;
250
- }
251
- type CreateEmbedReturn<B> = undefined extends B ? EmbedPlusBuilder : false extends B ? EmbedPlusBuilder : EmbedPlusBuilder[];
252
- declare function createEmbed<B extends boolean>(options: CreateEmbedOptions<B>): CreateEmbedReturn<B>;
253
-
254
- export { type AnyEmbed, CustomItents, CustomPartials, type EmbedPlusAssetData, EmbedPlusBuilder, type EmbedPlusData, type EmbedPlusFooterData, type EmbedPlusProperty, chars, createEmbed, createEmbedAsset, createEmbedAuthor, createEmbedFooter, createLinkButton, createModalFields, createModalInput, createRow, extractMentionId, findChannel, findCommand, findEmoji, findMember, findMessage, findRole, getChannelUrlInfo, getMessageUrlInfo, modalFieldsToRecord, setMobileStatus };
273
+ export { type AnyEmbedData, CustomItents, CustomPartials, type EmbedPlusAssetData, EmbedPlusBuilder, type EmbedPlusData, type EmbedPlusFooterData, type EmbedPlusProperty, chars, createEmbed, createEmbedAsset, createEmbedAuthor, createEmbedFooter, createLinkButton, createModalFields, createModalInput, createRow, extractMentionId, findChannel, findCommand, findEmoji, findMember, findMessage, findRole, getChannelUrlInfo, getMessageUrlInfo, modalFieldsToRecord, 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, ButtonBuilder, LinkButtonComponentData, TextInputBuilder, ModalSubmitFields, Collection, TextInputComponent, TextInputComponentData, GuildEmoji, GuildMember, GuildTextBasedChannel, Message, Role, Attachment, AttachmentBuilder, EmbedAssetData, EmbedAuthorData, ImageURLOptions, User, EmbedFooterData, APIEmbed, Embed, EmbedBuilder, EmbedData, ColorResolvable } from 'discord.js';
2
+ import { GatewayIntentBits, Partials, Attachment, AttachmentBuilder, EmbedAssetData, Guild, GuildMember, User, ImageURLOptions, EmbedFooterData, APIEmbed, Embed, EmbedData, EmbedBuilder, AttachmentData, ColorResolvable, AnyComponentBuilder, ActionRowBuilder, ButtonBuilder, LinkButtonComponentData, ChannelType, CommandInteractionOption, Client, ApplicationCommand, TextInputBuilder, ModalSubmitFields, Collection, TextInputComponent, TextInputComponentData, GuildEmoji, GuildTextBasedChannel, Message, Role } from 'discord.js';
3
3
  export * from '@magicyan/core';
4
4
 
5
5
  declare const chars: {
@@ -18,6 +18,141 @@ declare const CustomPartials: {
18
18
 
19
19
  declare function setMobileStatus(): void;
20
20
 
21
+ type EmbedPlusAssetData = string | Attachment | AttachmentBuilder | EmbedAssetData | undefined | null;
22
+ type EmbedAssetOptions = Omit<EmbedAssetData, "url">;
23
+ declare function createEmbedAsset(source: EmbedPlusAssetData, options?: EmbedAssetOptions): EmbedAssetData | undefined;
24
+
25
+ interface MemberAuthor {
26
+ property?: "username" | "displayName" | "id" | "globalName" | "nickname";
27
+ }
28
+ interface UserAuthor {
29
+ property?: "username" | "displayName" | "id" | "globalName";
30
+ }
31
+ interface GuildAuthor {
32
+ property?: "name" | "id";
33
+ }
34
+ type AuthorType = Guild | GuildMember | User;
35
+ type CreateEmbedAuthorOptions<T extends AuthorType> = {
36
+ iconURL?: string;
37
+ url?: string | null;
38
+ prefix?: string;
39
+ suffix?: string;
40
+ } & ImageURLOptions & (T extends User ? UserAuthor : T extends GuildMember ? MemberAuthor : T extends Guild ? GuildAuthor : never);
41
+ declare function createEmbedAuthor<T extends AuthorType>(type: T, options?: CreateEmbedAuthorOptions<T>): {
42
+ name: string;
43
+ url: string | undefined;
44
+ iconURL: string | undefined;
45
+ };
46
+
47
+ type EmbedPlusFieldData = {
48
+ name: string;
49
+ value: string;
50
+ inline?: boolean;
51
+ };
52
+ type FieldPredicate = (field: EmbedPlusFieldData, index: number, obj: EmbedPlusFieldData[]) => boolean;
53
+ declare class EmbedPlusFields {
54
+ private embed;
55
+ private set fields(value);
56
+ private get fields();
57
+ constructor(embed: EmbedPlusBuilder);
58
+ [Symbol.iterator](): {
59
+ next(): IteratorResult<EmbedPlusFieldData>;
60
+ };
61
+ get length(): number;
62
+ get record(): Record<string, string | undefined>;
63
+ /**
64
+ * Get a filed by index
65
+ * @param name Field name
66
+ */
67
+ get(name: string): EmbedPlusFieldData | undefined;
68
+ /**
69
+ * Get a field by name
70
+ * @param index Field index
71
+ */
72
+ get(index: number): EmbedPlusFieldData | undefined;
73
+ find(predicate: FieldPredicate): EmbedPlusFieldData | undefined;
74
+ push(...fields: EmbedPlusFieldData[]): void;
75
+ set(...fields: EmbedPlusFieldData[]): void;
76
+ map<U>(callback: (value: EmbedPlusFieldData, index: number, array: EmbedPlusFieldData[]) => U): U[];
77
+ update(predicate: string | number | FieldPredicate, field: Partial<EmbedPlusFieldData>): boolean;
78
+ delete(predicate: string | number | FieldPredicate): boolean;
79
+ /**
80
+ * Remove all fields
81
+ */
82
+ clear(): this;
83
+ toArray(): EmbedPlusFieldData[];
84
+ private getPredicateIndex;
85
+ }
86
+
87
+ type EmbedPlusFooterData = {
88
+ text?: string | null;
89
+ iconURL?: string | null;
90
+ };
91
+ declare function createEmbedFooter(options: EmbedPlusFooterData): EmbedFooterData | undefined;
92
+
93
+ type EmbedPlusColorData = string & {} | ColorResolvable | null;
94
+ type EmbedPlusAuthorData = {
95
+ name: string;
96
+ url?: string;
97
+ iconURL?: string;
98
+ };
99
+ interface EmbedPlusData {
100
+ title?: string | null;
101
+ color?: EmbedPlusColorData | null;
102
+ description?: string | null;
103
+ url?: string | null;
104
+ thumbnail?: EmbedPlusAssetData;
105
+ image?: EmbedPlusAssetData;
106
+ fields?: Partial<EmbedPlusFieldData>[] | null;
107
+ timestamp?: string | number | Date | null;
108
+ footer?: EmbedPlusFooterData;
109
+ author?: EmbedPlusAuthorData;
110
+ }
111
+ type AnyEmbedData = APIEmbed | Embed | EmbedData;
112
+ interface MessageWithEmbeds {
113
+ embeds: Array<Embed>;
114
+ }
115
+ interface InteractionWithEmbeds {
116
+ message: MessageWithEmbeds;
117
+ }
118
+ interface EmbedPlusOptions extends EmbedPlusData {
119
+ extends?: EmbedPlusData | AnyEmbedData | EmbedBuilder;
120
+ mergeFields?: boolean;
121
+ }
122
+ declare class EmbedPlusBuilder extends EmbedBuilder {
123
+ fields: EmbedPlusFields;
124
+ constructor(data: EmbedPlusOptions);
125
+ update(data: EmbedPlusData): this;
126
+ has(property: keyof EmbedPlusData): boolean;
127
+ toArray(): EmbedPlusBuilder[];
128
+ /**
129
+ *
130
+ * @param data
131
+ * @param space Adds indentation, white space, and line break characters to the return-value JSON text to make it easier to read.
132
+ * @returns AttachmentBuilder
133
+ *
134
+ * Create a json attachment file from this embed
135
+ */
136
+ toAttachment(data?: AttachmentData, space?: number): AttachmentBuilder;
137
+ toString(space?: number): string;
138
+ setBorderColor(color: EmbedPlusColorData | null): this;
139
+ setAsset(asset: "thumbnail" | "image", source: EmbedPlusAssetData): this;
140
+ static fromInteraction(interaction: InteractionWithEmbeds, index?: number, data?: EmbedPlusData): EmbedPlusBuilder;
141
+ static fromMessage(message: MessageWithEmbeds, index?: number, data?: EmbedPlusData): EmbedPlusBuilder;
142
+ }
143
+ type EmbedPlusProperty<P extends keyof EmbedPlusData> = EmbedPlusData[P];
144
+ interface CreateEmbedOptions<B extends boolean> extends EmbedPlusOptions {
145
+ array?: B;
146
+ interaction?: InteractionWithEmbeds;
147
+ }
148
+ type CreateEmbedReturn<B> = undefined extends B ? EmbedPlusBuilder : false extends B ? EmbedPlusBuilder : EmbedPlusBuilder[];
149
+ declare function createEmbed<B extends boolean>(options: CreateEmbedOptions<B>): CreateEmbedReturn<B>;
150
+
151
+ declare function createRow<Component extends AnyComponentBuilder>(...components: Component[]): ActionRowBuilder<Component>;
152
+ interface CreateLinkButtonData extends Omit<LinkButtonComponentData, "style" | "type"> {
153
+ }
154
+ declare function createLinkButton(data: CreateLinkButtonData): ButtonBuilder;
155
+
21
156
  type GuildChannelType = Exclude<ChannelType, ChannelType.DM>;
22
157
  type FindChannelFilter<T extends GuildChannelType> = (channel: GetChannelType<T>) => boolean;
23
158
  type GetChannelType<Type extends GuildChannelType> = Extract<NonNullable<CommandInteractionOption<"cached">["channel"]>, {
@@ -57,11 +192,6 @@ declare function findCommand(guildOrClient: Guild | Client<true>): {
57
192
  }> | undefined;
58
193
  };
59
194
 
60
- declare function createRow<Component extends AnyComponentBuilder>(...components: Component[]): ActionRowBuilder<Component>;
61
- interface CreateLinkButtonData extends Omit<LinkButtonComponentData, "style" | "type"> {
62
- }
63
- declare function createLinkButton(data: CreateLinkButtonData): ButtonBuilder;
64
-
65
195
  type TextInputData = Omit<TextInputComponentData, "type">;
66
196
  type CreateModalInputData = TextInputData;
67
197
  declare function createModalInput(data: CreateModalInputData): ActionRowBuilder<TextInputBuilder>;
@@ -140,115 +270,4 @@ declare function findRole(guild: Guild): {
140
270
  */
141
271
  declare function extractMentionId(mention: string): string | null;
142
272
 
143
- type EmbedPlusAssetData = string | Attachment | AttachmentBuilder | EmbedAssetData | undefined | null;
144
- type EmbedAssetOptions = Omit<EmbedAssetData, "url">;
145
- declare function createEmbedAsset(source: EmbedPlusAssetData, options?: EmbedAssetOptions): EmbedAssetData | undefined;
146
-
147
- interface UserAuthorOption {
148
- user: User;
149
- property?: "username" | "displayName" | "id" | "globalName";
150
- }
151
- interface MemberAuthorOption {
152
- member: GuildMember;
153
- property?: "username" | "displayName" | "id" | "globalName" | "nickname";
154
- }
155
- type AuthorOption = UserAuthorOption | MemberAuthorOption;
156
- type CreateEmbedAuthorOptions = AuthorOption & ImageURLOptions & {
157
- iconURL?: string;
158
- url?: string;
159
- prefix?: string;
160
- suffix?: string;
161
- };
162
- declare function createEmbedAuthor(options: CreateEmbedAuthorOptions): EmbedAuthorData;
163
-
164
- type EmbedPlusFieldData = {
165
- name: string;
166
- value: string;
167
- inline?: boolean;
168
- };
169
- type FieldPredicate = (field: EmbedPlusFieldData, index: number, obj: EmbedPlusFieldData[]) => boolean;
170
- declare class EmbedPlusFields {
171
- private embed;
172
- private set fields(value);
173
- private get fields();
174
- constructor(embed: EmbedPlusBuilder);
175
- [Symbol.iterator](): {
176
- next(): IteratorResult<EmbedPlusFieldData>;
177
- };
178
- get length(): number;
179
- get record(): Record<string, string | undefined>;
180
- /**
181
- * Get a filed by index
182
- * @param name Field name
183
- */
184
- get(name: string): EmbedPlusFieldData | undefined;
185
- /**
186
- * Get a field by name
187
- * @param index Field index
188
- */
189
- get(index: number): EmbedPlusFieldData | undefined;
190
- find(predicate: FieldPredicate): EmbedPlusFieldData | undefined;
191
- push(...fields: EmbedPlusFieldData[]): void;
192
- set(...fields: EmbedPlusFieldData[]): void;
193
- update(predicate: string | number | FieldPredicate, field: Partial<EmbedPlusFieldData>): boolean;
194
- delete(predicate: string | number | FieldPredicate): boolean;
195
- toArray(): EmbedPlusFieldData[];
196
- private getPredicateIndex;
197
- }
198
-
199
- type EmbedPlusFooterData = {
200
- text?: string | null;
201
- iconURL?: string | null;
202
- };
203
- declare function createEmbedFooter(options: EmbedPlusFooterData): EmbedFooterData | undefined;
204
-
205
- type EmbedPlusColorData = string & {} | ColorResolvable | null;
206
- type EmbedPlusAuthorData = {
207
- name: string;
208
- url?: string;
209
- iconURL?: string;
210
- };
211
- interface EmbedPlusData {
212
- title?: string | null;
213
- color?: EmbedPlusColorData | null;
214
- description?: string | null;
215
- url?: string | null;
216
- thumbnail?: EmbedPlusAssetData;
217
- image?: EmbedPlusAssetData;
218
- fields?: Partial<EmbedPlusFieldData>[] | null;
219
- timestamp?: string | number | Date | null;
220
- footer?: EmbedPlusFooterData;
221
- author?: EmbedPlusAuthorData;
222
- }
223
- type AnyEmbed = APIEmbed | Embed | EmbedBuilder | EmbedData;
224
- interface MessageWithEmbeds {
225
- embeds: Array<Embed>;
226
- }
227
- interface InteractionWithEmbeds {
228
- message: MessageWithEmbeds;
229
- }
230
- interface EmbedPlusOptions extends EmbedPlusData {
231
- extends?: Omit<EmbedPlusData, keyof EmbedPlusOptions> | AnyEmbed;
232
- mergeFields?: boolean;
233
- }
234
- declare class EmbedPlusBuilder extends EmbedBuilder {
235
- fields: EmbedPlusFields;
236
- constructor(data: EmbedPlusOptions);
237
- update(data: EmbedPlusData): this;
238
- has(property: keyof Omit<EmbedPlusData, keyof EmbedPlusOptions>): boolean;
239
- toArray(): EmbedPlusBuilder[];
240
- toString(space?: number): string;
241
- setBorderColor(color: EmbedPlusColorData | null): this;
242
- setAsset(asset: "thumbnail" | "image", source: EmbedPlusAssetData): this;
243
- static fromInteraction(interaction: InteractionWithEmbeds, index?: number, data?: EmbedPlusData): EmbedPlusBuilder;
244
- static fromMessage(message: MessageWithEmbeds, index?: number, data?: EmbedPlusData): EmbedPlusBuilder;
245
- }
246
- type EmbedPlusProperty<P extends keyof EmbedPlusData> = EmbedPlusData[P];
247
- interface CreateEmbedOptions<B extends boolean> extends EmbedPlusOptions {
248
- array?: B;
249
- interaction?: InteractionWithEmbeds;
250
- }
251
- type CreateEmbedReturn<B> = undefined extends B ? EmbedPlusBuilder : false extends B ? EmbedPlusBuilder : EmbedPlusBuilder[];
252
- declare function createEmbed<B extends boolean>(options: CreateEmbedOptions<B>): CreateEmbedReturn<B>;
253
-
254
- export { type AnyEmbed, CustomItents, CustomPartials, type EmbedPlusAssetData, EmbedPlusBuilder, type EmbedPlusData, type EmbedPlusFooterData, type EmbedPlusProperty, chars, createEmbed, createEmbedAsset, createEmbedAuthor, createEmbedFooter, createLinkButton, createModalFields, createModalInput, createRow, extractMentionId, findChannel, findCommand, findEmoji, findMember, findMessage, findRole, getChannelUrlInfo, getMessageUrlInfo, modalFieldsToRecord, setMobileStatus };
273
+ export { type AnyEmbedData, CustomItents, CustomPartials, type EmbedPlusAssetData, EmbedPlusBuilder, type EmbedPlusData, type EmbedPlusFooterData, type EmbedPlusProperty, chars, createEmbed, createEmbedAsset, createEmbedAuthor, createEmbedFooter, createLinkButton, createModalFields, createModalInput, createRow, extractMentionId, findChannel, findCommand, findEmoji, findMember, findMessage, findRole, getChannelUrlInfo, getMessageUrlInfo, modalFieldsToRecord, 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, ButtonBuilder, LinkButtonComponentData, TextInputBuilder, ModalSubmitFields, Collection, TextInputComponent, TextInputComponentData, GuildEmoji, GuildMember, GuildTextBasedChannel, Message, Role, Attachment, AttachmentBuilder, EmbedAssetData, EmbedAuthorData, ImageURLOptions, User, EmbedFooterData, APIEmbed, Embed, EmbedBuilder, EmbedData, ColorResolvable } from 'discord.js';
2
+ import { GatewayIntentBits, Partials, Attachment, AttachmentBuilder, EmbedAssetData, Guild, GuildMember, User, ImageURLOptions, EmbedFooterData, APIEmbed, Embed, EmbedData, EmbedBuilder, AttachmentData, ColorResolvable, AnyComponentBuilder, ActionRowBuilder, ButtonBuilder, LinkButtonComponentData, ChannelType, CommandInteractionOption, Client, ApplicationCommand, TextInputBuilder, ModalSubmitFields, Collection, TextInputComponent, TextInputComponentData, GuildEmoji, GuildTextBasedChannel, Message, Role } from 'discord.js';
3
3
  export * from '@magicyan/core';
4
4
 
5
5
  declare const chars: {
@@ -18,6 +18,141 @@ declare const CustomPartials: {
18
18
 
19
19
  declare function setMobileStatus(): void;
20
20
 
21
+ type EmbedPlusAssetData = string | Attachment | AttachmentBuilder | EmbedAssetData | undefined | null;
22
+ type EmbedAssetOptions = Omit<EmbedAssetData, "url">;
23
+ declare function createEmbedAsset(source: EmbedPlusAssetData, options?: EmbedAssetOptions): EmbedAssetData | undefined;
24
+
25
+ interface MemberAuthor {
26
+ property?: "username" | "displayName" | "id" | "globalName" | "nickname";
27
+ }
28
+ interface UserAuthor {
29
+ property?: "username" | "displayName" | "id" | "globalName";
30
+ }
31
+ interface GuildAuthor {
32
+ property?: "name" | "id";
33
+ }
34
+ type AuthorType = Guild | GuildMember | User;
35
+ type CreateEmbedAuthorOptions<T extends AuthorType> = {
36
+ iconURL?: string;
37
+ url?: string | null;
38
+ prefix?: string;
39
+ suffix?: string;
40
+ } & ImageURLOptions & (T extends User ? UserAuthor : T extends GuildMember ? MemberAuthor : T extends Guild ? GuildAuthor : never);
41
+ declare function createEmbedAuthor<T extends AuthorType>(type: T, options?: CreateEmbedAuthorOptions<T>): {
42
+ name: string;
43
+ url: string | undefined;
44
+ iconURL: string | undefined;
45
+ };
46
+
47
+ type EmbedPlusFieldData = {
48
+ name: string;
49
+ value: string;
50
+ inline?: boolean;
51
+ };
52
+ type FieldPredicate = (field: EmbedPlusFieldData, index: number, obj: EmbedPlusFieldData[]) => boolean;
53
+ declare class EmbedPlusFields {
54
+ private embed;
55
+ private set fields(value);
56
+ private get fields();
57
+ constructor(embed: EmbedPlusBuilder);
58
+ [Symbol.iterator](): {
59
+ next(): IteratorResult<EmbedPlusFieldData>;
60
+ };
61
+ get length(): number;
62
+ get record(): Record<string, string | undefined>;
63
+ /**
64
+ * Get a filed by index
65
+ * @param name Field name
66
+ */
67
+ get(name: string): EmbedPlusFieldData | undefined;
68
+ /**
69
+ * Get a field by name
70
+ * @param index Field index
71
+ */
72
+ get(index: number): EmbedPlusFieldData | undefined;
73
+ find(predicate: FieldPredicate): EmbedPlusFieldData | undefined;
74
+ push(...fields: EmbedPlusFieldData[]): void;
75
+ set(...fields: EmbedPlusFieldData[]): void;
76
+ map<U>(callback: (value: EmbedPlusFieldData, index: number, array: EmbedPlusFieldData[]) => U): U[];
77
+ update(predicate: string | number | FieldPredicate, field: Partial<EmbedPlusFieldData>): boolean;
78
+ delete(predicate: string | number | FieldPredicate): boolean;
79
+ /**
80
+ * Remove all fields
81
+ */
82
+ clear(): this;
83
+ toArray(): EmbedPlusFieldData[];
84
+ private getPredicateIndex;
85
+ }
86
+
87
+ type EmbedPlusFooterData = {
88
+ text?: string | null;
89
+ iconURL?: string | null;
90
+ };
91
+ declare function createEmbedFooter(options: EmbedPlusFooterData): EmbedFooterData | undefined;
92
+
93
+ type EmbedPlusColorData = string & {} | ColorResolvable | null;
94
+ type EmbedPlusAuthorData = {
95
+ name: string;
96
+ url?: string;
97
+ iconURL?: string;
98
+ };
99
+ interface EmbedPlusData {
100
+ title?: string | null;
101
+ color?: EmbedPlusColorData | null;
102
+ description?: string | null;
103
+ url?: string | null;
104
+ thumbnail?: EmbedPlusAssetData;
105
+ image?: EmbedPlusAssetData;
106
+ fields?: Partial<EmbedPlusFieldData>[] | null;
107
+ timestamp?: string | number | Date | null;
108
+ footer?: EmbedPlusFooterData;
109
+ author?: EmbedPlusAuthorData;
110
+ }
111
+ type AnyEmbedData = APIEmbed | Embed | EmbedData;
112
+ interface MessageWithEmbeds {
113
+ embeds: Array<Embed>;
114
+ }
115
+ interface InteractionWithEmbeds {
116
+ message: MessageWithEmbeds;
117
+ }
118
+ interface EmbedPlusOptions extends EmbedPlusData {
119
+ extends?: EmbedPlusData | AnyEmbedData | EmbedBuilder;
120
+ mergeFields?: boolean;
121
+ }
122
+ declare class EmbedPlusBuilder extends EmbedBuilder {
123
+ fields: EmbedPlusFields;
124
+ constructor(data: EmbedPlusOptions);
125
+ update(data: EmbedPlusData): this;
126
+ has(property: keyof EmbedPlusData): boolean;
127
+ toArray(): EmbedPlusBuilder[];
128
+ /**
129
+ *
130
+ * @param data
131
+ * @param space Adds indentation, white space, and line break characters to the return-value JSON text to make it easier to read.
132
+ * @returns AttachmentBuilder
133
+ *
134
+ * Create a json attachment file from this embed
135
+ */
136
+ toAttachment(data?: AttachmentData, space?: number): AttachmentBuilder;
137
+ toString(space?: number): string;
138
+ setBorderColor(color: EmbedPlusColorData | null): this;
139
+ setAsset(asset: "thumbnail" | "image", source: EmbedPlusAssetData): this;
140
+ static fromInteraction(interaction: InteractionWithEmbeds, index?: number, data?: EmbedPlusData): EmbedPlusBuilder;
141
+ static fromMessage(message: MessageWithEmbeds, index?: number, data?: EmbedPlusData): EmbedPlusBuilder;
142
+ }
143
+ type EmbedPlusProperty<P extends keyof EmbedPlusData> = EmbedPlusData[P];
144
+ interface CreateEmbedOptions<B extends boolean> extends EmbedPlusOptions {
145
+ array?: B;
146
+ interaction?: InteractionWithEmbeds;
147
+ }
148
+ type CreateEmbedReturn<B> = undefined extends B ? EmbedPlusBuilder : false extends B ? EmbedPlusBuilder : EmbedPlusBuilder[];
149
+ declare function createEmbed<B extends boolean>(options: CreateEmbedOptions<B>): CreateEmbedReturn<B>;
150
+
151
+ declare function createRow<Component extends AnyComponentBuilder>(...components: Component[]): ActionRowBuilder<Component>;
152
+ interface CreateLinkButtonData extends Omit<LinkButtonComponentData, "style" | "type"> {
153
+ }
154
+ declare function createLinkButton(data: CreateLinkButtonData): ButtonBuilder;
155
+
21
156
  type GuildChannelType = Exclude<ChannelType, ChannelType.DM>;
22
157
  type FindChannelFilter<T extends GuildChannelType> = (channel: GetChannelType<T>) => boolean;
23
158
  type GetChannelType<Type extends GuildChannelType> = Extract<NonNullable<CommandInteractionOption<"cached">["channel"]>, {
@@ -57,11 +192,6 @@ declare function findCommand(guildOrClient: Guild | Client<true>): {
57
192
  }> | undefined;
58
193
  };
59
194
 
60
- declare function createRow<Component extends AnyComponentBuilder>(...components: Component[]): ActionRowBuilder<Component>;
61
- interface CreateLinkButtonData extends Omit<LinkButtonComponentData, "style" | "type"> {
62
- }
63
- declare function createLinkButton(data: CreateLinkButtonData): ButtonBuilder;
64
-
65
195
  type TextInputData = Omit<TextInputComponentData, "type">;
66
196
  type CreateModalInputData = TextInputData;
67
197
  declare function createModalInput(data: CreateModalInputData): ActionRowBuilder<TextInputBuilder>;
@@ -140,115 +270,4 @@ declare function findRole(guild: Guild): {
140
270
  */
141
271
  declare function extractMentionId(mention: string): string | null;
142
272
 
143
- type EmbedPlusAssetData = string | Attachment | AttachmentBuilder | EmbedAssetData | undefined | null;
144
- type EmbedAssetOptions = Omit<EmbedAssetData, "url">;
145
- declare function createEmbedAsset(source: EmbedPlusAssetData, options?: EmbedAssetOptions): EmbedAssetData | undefined;
146
-
147
- interface UserAuthorOption {
148
- user: User;
149
- property?: "username" | "displayName" | "id" | "globalName";
150
- }
151
- interface MemberAuthorOption {
152
- member: GuildMember;
153
- property?: "username" | "displayName" | "id" | "globalName" | "nickname";
154
- }
155
- type AuthorOption = UserAuthorOption | MemberAuthorOption;
156
- type CreateEmbedAuthorOptions = AuthorOption & ImageURLOptions & {
157
- iconURL?: string;
158
- url?: string;
159
- prefix?: string;
160
- suffix?: string;
161
- };
162
- declare function createEmbedAuthor(options: CreateEmbedAuthorOptions): EmbedAuthorData;
163
-
164
- type EmbedPlusFieldData = {
165
- name: string;
166
- value: string;
167
- inline?: boolean;
168
- };
169
- type FieldPredicate = (field: EmbedPlusFieldData, index: number, obj: EmbedPlusFieldData[]) => boolean;
170
- declare class EmbedPlusFields {
171
- private embed;
172
- private set fields(value);
173
- private get fields();
174
- constructor(embed: EmbedPlusBuilder);
175
- [Symbol.iterator](): {
176
- next(): IteratorResult<EmbedPlusFieldData>;
177
- };
178
- get length(): number;
179
- get record(): Record<string, string | undefined>;
180
- /**
181
- * Get a filed by index
182
- * @param name Field name
183
- */
184
- get(name: string): EmbedPlusFieldData | undefined;
185
- /**
186
- * Get a field by name
187
- * @param index Field index
188
- */
189
- get(index: number): EmbedPlusFieldData | undefined;
190
- find(predicate: FieldPredicate): EmbedPlusFieldData | undefined;
191
- push(...fields: EmbedPlusFieldData[]): void;
192
- set(...fields: EmbedPlusFieldData[]): void;
193
- update(predicate: string | number | FieldPredicate, field: Partial<EmbedPlusFieldData>): boolean;
194
- delete(predicate: string | number | FieldPredicate): boolean;
195
- toArray(): EmbedPlusFieldData[];
196
- private getPredicateIndex;
197
- }
198
-
199
- type EmbedPlusFooterData = {
200
- text?: string | null;
201
- iconURL?: string | null;
202
- };
203
- declare function createEmbedFooter(options: EmbedPlusFooterData): EmbedFooterData | undefined;
204
-
205
- type EmbedPlusColorData = string & {} | ColorResolvable | null;
206
- type EmbedPlusAuthorData = {
207
- name: string;
208
- url?: string;
209
- iconURL?: string;
210
- };
211
- interface EmbedPlusData {
212
- title?: string | null;
213
- color?: EmbedPlusColorData | null;
214
- description?: string | null;
215
- url?: string | null;
216
- thumbnail?: EmbedPlusAssetData;
217
- image?: EmbedPlusAssetData;
218
- fields?: Partial<EmbedPlusFieldData>[] | null;
219
- timestamp?: string | number | Date | null;
220
- footer?: EmbedPlusFooterData;
221
- author?: EmbedPlusAuthorData;
222
- }
223
- type AnyEmbed = APIEmbed | Embed | EmbedBuilder | EmbedData;
224
- interface MessageWithEmbeds {
225
- embeds: Array<Embed>;
226
- }
227
- interface InteractionWithEmbeds {
228
- message: MessageWithEmbeds;
229
- }
230
- interface EmbedPlusOptions extends EmbedPlusData {
231
- extends?: Omit<EmbedPlusData, keyof EmbedPlusOptions> | AnyEmbed;
232
- mergeFields?: boolean;
233
- }
234
- declare class EmbedPlusBuilder extends EmbedBuilder {
235
- fields: EmbedPlusFields;
236
- constructor(data: EmbedPlusOptions);
237
- update(data: EmbedPlusData): this;
238
- has(property: keyof Omit<EmbedPlusData, keyof EmbedPlusOptions>): boolean;
239
- toArray(): EmbedPlusBuilder[];
240
- toString(space?: number): string;
241
- setBorderColor(color: EmbedPlusColorData | null): this;
242
- setAsset(asset: "thumbnail" | "image", source: EmbedPlusAssetData): this;
243
- static fromInteraction(interaction: InteractionWithEmbeds, index?: number, data?: EmbedPlusData): EmbedPlusBuilder;
244
- static fromMessage(message: MessageWithEmbeds, index?: number, data?: EmbedPlusData): EmbedPlusBuilder;
245
- }
246
- type EmbedPlusProperty<P extends keyof EmbedPlusData> = EmbedPlusData[P];
247
- interface CreateEmbedOptions<B extends boolean> extends EmbedPlusOptions {
248
- array?: B;
249
- interaction?: InteractionWithEmbeds;
250
- }
251
- type CreateEmbedReturn<B> = undefined extends B ? EmbedPlusBuilder : false extends B ? EmbedPlusBuilder : EmbedPlusBuilder[];
252
- declare function createEmbed<B extends boolean>(options: CreateEmbedOptions<B>): CreateEmbedReturn<B>;
253
-
254
- export { type AnyEmbed, CustomItents, CustomPartials, type EmbedPlusAssetData, EmbedPlusBuilder, type EmbedPlusData, type EmbedPlusFooterData, type EmbedPlusProperty, chars, createEmbed, createEmbedAsset, createEmbedAuthor, createEmbedFooter, createLinkButton, createModalFields, createModalInput, createRow, extractMentionId, findChannel, findCommand, findEmoji, findMember, findMessage, findRole, getChannelUrlInfo, getMessageUrlInfo, modalFieldsToRecord, setMobileStatus };
273
+ export { type AnyEmbedData, CustomItents, CustomPartials, type EmbedPlusAssetData, EmbedPlusBuilder, type EmbedPlusData, type EmbedPlusFooterData, type EmbedPlusProperty, chars, createEmbed, createEmbedAsset, createEmbedAuthor, createEmbedFooter, createLinkButton, createModalFields, createModalInput, createRow, extractMentionId, findChannel, findCommand, findEmoji, findMember, findMessage, findRole, getChannelUrlInfo, getMessageUrlInfo, modalFieldsToRecord, setMobileStatus };
package/dist/index.mjs CHANGED
@@ -1,17 +1,17 @@
1
1
  export { chars } from './constants/chars.mjs';
2
2
  export { CustomItents, CustomPartials } from './constants/client.mjs';
3
3
  export { setMobileStatus } from './functions/misc.mjs';
4
+ export { createEmbedAsset } from './functions/embeds/assets.mjs';
5
+ export { createEmbedAuthor } from './functions/embeds/author.mjs';
6
+ export { EmbedPlusBuilder, createEmbed } from './functions/embeds/embedplus.mjs';
7
+ export { createEmbedFooter } from './functions/embeds/footer.mjs';
8
+ export { createLinkButton, createRow } from './functions/components.mjs';
4
9
  export { findChannel, getChannelUrlInfo } from './functions/channels.mjs';
5
10
  export { findCommand } from './functions/commands.mjs';
6
- export { createLinkButton, createRow } from './functions/components.mjs';
7
11
  export { createModalFields, createModalInput, modalFieldsToRecord } from './functions/modals.mjs';
8
12
  export { findEmoji } from './functions/emojis.mjs';
9
13
  export { findMember } from './functions/members.mjs';
10
14
  export { findMessage, getMessageUrlInfo } from './functions/message.mjs';
11
15
  export { findRole } from './functions/roles.mjs';
12
16
  export { extractMentionId } from './functions/regex.mjs';
13
- export { createEmbedAsset } from './functions/embeds/assets.mjs';
14
- export { createEmbedAuthor } from './functions/embeds/author.mjs';
15
- export { EmbedPlusBuilder, createEmbed } from './functions/embeds/embedplus.mjs';
16
- export { createEmbedFooter } from './functions/embeds/footer.mjs';
17
17
  export * from '@magicyan/core';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@magicyan/discord",
3
- "version": "1.0.28",
3
+ "version": "1.0.29",
4
4
  "description": "Simple functions to facilitate discord bot development",
5
5
  "license": "MIT",
6
6
  "type": "module",