@mostfeatured/dbi 0.2.16 → 0.2.18

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.
Files changed (81) hide show
  1. package/dist/src/types/Components/HTMLComponentsV2/index.d.ts +4 -0
  2. package/dist/src/types/Components/HTMLComponentsV2/index.d.ts.map +1 -1
  3. package/dist/src/types/Components/HTMLComponentsV2/index.js +40 -5
  4. package/dist/src/types/Components/HTMLComponentsV2/index.js.map +1 -1
  5. package/dist/src/types/Event.d.ts +21 -13
  6. package/dist/src/types/Event.d.ts.map +1 -1
  7. package/dist/src/types/Event.js.map +1 -1
  8. package/dist/test/index.js +1 -1
  9. package/dist/test/index.js.map +1 -1
  10. package/generated/namespaceData.d.ts +3 -1
  11. package/package.json +6 -2
  12. package/.gitattributes +0 -2
  13. package/.hintrc +0 -8
  14. package/.vscode/settings.json +0 -3
  15. package/docs/ADVANCED_FEATURES.md +0 -840
  16. package/docs/API_REFERENCE.md +0 -929
  17. package/docs/CHAT_INPUT.md +0 -811
  18. package/docs/COMPONENTS.md +0 -1039
  19. package/docs/EVENTS.md +0 -568
  20. package/docs/GETTING_STARTED.md +0 -398
  21. package/docs/LOCALIZATION.md +0 -777
  22. package/docs/README.md +0 -345
  23. package/docs/SVELTE_COMPONENTS.md +0 -1111
  24. package/docs/llm/ADVANCED_FEATURES.txt +0 -521
  25. package/docs/llm/API_REFERENCE.txt +0 -659
  26. package/docs/llm/CHAT_INPUT.txt +0 -514
  27. package/docs/llm/COMPONENTS.txt +0 -595
  28. package/docs/llm/EVENTS.txt +0 -449
  29. package/docs/llm/GETTING_STARTED.txt +0 -296
  30. package/docs/llm/LOCALIZATION.txt +0 -501
  31. package/docs/llm/README.txt +0 -193
  32. package/docs/llm/SVELTE_COMPONENTS.txt +0 -566
  33. package/src/DBI.ts +0 -1007
  34. package/src/Events.ts +0 -189
  35. package/src/data/eventMap.json +0 -248
  36. package/src/index.ts +0 -23
  37. package/src/methods/handleMessageCommands.ts +0 -482
  38. package/src/methods/hookEventListeners.ts +0 -119
  39. package/src/methods/hookInteractionListeners.ts +0 -314
  40. package/src/methods/publishInteractions.ts +0 -256
  41. package/src/types/ApplicationRoleConnectionMetadata.ts +0 -19
  42. package/src/types/Builders/ButtonBuilder.ts +0 -53
  43. package/src/types/Builders/ChannelSelectMenuBuilder.ts +0 -53
  44. package/src/types/Builders/MentionableSelectMenuBuilder.ts +0 -53
  45. package/src/types/Builders/ModalBuilder.ts +0 -53
  46. package/src/types/Builders/RoleSelectMenuBuilder.ts +0 -53
  47. package/src/types/Builders/StringSelectMenuBuilder.ts +0 -53
  48. package/src/types/Builders/UserSelectMenuBuilder.ts +0 -53
  49. package/src/types/ChatInput/ChatInput.ts +0 -28
  50. package/src/types/ChatInput/ChatInputOptions.ts +0 -388
  51. package/src/types/Components/Button.ts +0 -39
  52. package/src/types/Components/ChannelSelectMenu.ts +0 -43
  53. package/src/types/Components/HTMLComponentsV2/HTMLComponentsV2Handlers.ts +0 -78
  54. package/src/types/Components/HTMLComponentsV2/index.ts +0 -761
  55. package/src/types/Components/HTMLComponentsV2/parser.ts +0 -649
  56. package/src/types/Components/HTMLComponentsV2/svelteParser.ts +0 -1503
  57. package/src/types/Components/HTMLComponentsV2/svelteRenderer.ts +0 -416
  58. package/src/types/Components/MentionableSelectMenu.ts +0 -43
  59. package/src/types/Components/Modal.ts +0 -46
  60. package/src/types/Components/RoleSelectMenu.ts +0 -43
  61. package/src/types/Components/StringSelectMenu.ts +0 -43
  62. package/src/types/Components/UserSelectMenu.ts +0 -43
  63. package/src/types/Event.ts +0 -145
  64. package/src/types/Interaction.ts +0 -100
  65. package/src/types/other/CustomEvent.ts +0 -19
  66. package/src/types/other/FakeMessageInteraction.ts +0 -408
  67. package/src/types/other/InteractionLocale.ts +0 -34
  68. package/src/types/other/Locale.ts +0 -70
  69. package/src/types/other/MessageContextMenu.ts +0 -27
  70. package/src/types/other/UserContextMenu.ts +0 -25
  71. package/src/utils/MemoryStore.ts +0 -28
  72. package/src/utils/UtilTypes.ts +0 -11
  73. package/src/utils/customId.ts +0 -49
  74. package/src/utils/permissions.ts +0 -5
  75. package/src/utils/recursiveImport.ts +0 -35
  76. package/src/utils/recursiveUnload.ts +0 -25
  77. package/src/utils/unloadModule.ts +0 -7
  78. package/test/index.ts +0 -176
  79. package/test/product-showcase.svelte +0 -558
  80. package/test/test.ts +0 -3
  81. package/tsconfig.json +0 -51
@@ -1,145 +0,0 @@
1
- import Discord from "discord.js";
2
- import { NamespaceEnums, NamespaceData } from "../../generated/namespaceData";
3
- import { DBI, TDBIClientData } from "../DBI";
4
- import { DBILocale } from "./other/Locale";
5
- export interface ClientEvents {
6
- applicationCommandPermissionsUpdate: { data: Discord.ApplicationCommandPermissionsUpdateData };
7
- cacheSweep: { message: string };
8
- channelCreate: { channel: Discord.NonThreadGuildBasedChannel };
9
- channelDelete: { channel: Discord.DMChannel | Discord.NonThreadGuildBasedChannel };
10
- channelPinsUpdate: { channel: Discord.TextBasedChannel, date: Date };
11
- channelUpdate: {
12
- oldChannel: Discord.DMChannel | Discord.NonThreadGuildBasedChannel,
13
- newChannel: Discord.DMChannel | Discord.NonThreadGuildBasedChannel,
14
- };
15
- debug: { message: string };
16
- warn: { message: string };
17
- emojiCreate: { emoji: Discord.GuildEmoji };
18
- emojiDelete: { emoji: Discord.GuildEmoji };
19
- emojiUpdate: { oldEmoji: Discord.GuildEmoji, newEmoji: Discord.GuildEmoji };
20
- error: { error: Error };
21
- guildBanAdd: { ban: Discord.GuildBan };
22
- guildBanRemove: { ban: Discord.GuildBan };
23
- guildCreate: { guild: Discord.Guild };
24
- guildDelete: { guild: Discord.Guild };
25
- guildUnavailable: { guild: Discord.Guild };
26
- guildIntegrationsUpdate: { guild: Discord.Guild };
27
- guildMemberAdd: { member: Discord.GuildMember };
28
- guildMemberAvailable: { member: Discord.GuildMember | Discord.PartialGuildMember };
29
- guildMemberRemove: { member: Discord.GuildMember | Discord.PartialGuildMember };
30
- guildMembersChunk: {
31
- members: Discord.Collection<Discord.Snowflake, Discord.GuildMember>,
32
- guild: Discord.Guild,
33
- data: { count: number; index: number; nonce: string | undefined },
34
- };
35
- guildMemberUpdate: { oldMember: Discord.GuildMember | Discord.PartialGuildMember, newMember: Discord.GuildMember };
36
- guildUpdate: { oldGuild: Discord.Guild, newGuild: Discord.Guild };
37
- inviteCreate: { invite: Discord.Invite };
38
- inviteDelete: { invite: Discord.Invite };
39
- messageCreate: { message: Discord.Message };
40
- messageDelete: { message: Discord.Message | Discord.PartialMessage };
41
- messageReactionRemoveAll: {
42
- message: Discord.Message | Discord.PartialMessage,
43
- reactions: Discord.Collection<string | Discord.Snowflake, Discord.MessageReaction>,
44
- };
45
- messageReactionRemoveEmoji: { reaction: Discord.MessageReaction | Discord.PartialMessageReaction };
46
- messageDeleteBulk: { messages: Discord.Collection<Discord.Snowflake, Discord.Message | Discord.PartialMessage>, channel: Discord.TextBasedChannel };
47
- messageReactionAdd: { reaction: Discord.MessageReaction | Discord.PartialMessageReaction, user: Discord.User | Discord.PartialUser };
48
- messageReactionRemove: { reaction: Discord.MessageReaction | Discord.PartialMessageReaction, user: Discord.User | Discord.PartialUser };
49
- messageUpdate: { oldMessage: Discord.Message | Discord.PartialMessage, newMessage: Discord.Message | Discord.PartialMessage };
50
- presenceUpdate: { oldPresence: Discord.Presence | null, newPresence: Discord.Presence };
51
- clientReady: { client: Discord.Client<true> };
52
- invalidated: {};
53
- roleCreate: { role: Discord.Role };
54
- roleDelete: { role: Discord.Role };
55
- roleUpdate: { oldRole: Discord.Role, newRole: Discord.Role };
56
- threadCreate: { thread: Discord.AnyThreadChannel, newlyCreated: boolean };
57
- threadDelete: { thread: Discord.AnyThreadChannel };
58
- threadListSync: { threads: Discord.Collection<Discord.Snowflake, Discord.AnyThreadChannel>, guild: Discord.Guild };
59
- threadMemberUpdate: { oldMember: Discord.ThreadMember, newMember: Discord.ThreadMember };
60
- threadMembersUpdate: {
61
- addedMembers: Discord.Collection<Discord.Snowflake, Discord.ThreadMember>,
62
- removedMembers: Discord.Collection<Discord.Snowflake, Discord.ThreadMember | Discord.PartialThreadMember>,
63
- thread: Discord.AnyThreadChannel,
64
- };
65
- threadUpdate: { oldThread: Discord.AnyThreadChannel, newThread: Discord.AnyThreadChannel };
66
- typingStart: { typing: Discord.Typing };
67
- userUpdate: { oldUser: Discord.User | Discord.PartialUser, newUser: Discord.User };
68
- voiceStateUpdate: { oldState: Discord.VoiceState, newState: Discord.VoiceState };
69
- webhooksUpdate: { channel: Discord.TextChannel | Discord.NewsChannel | Discord.VoiceChannel };
70
- interactionCreate: { interaction: Discord.Interaction };
71
- shardDisconnect: { closeEvent: Discord.CloseEvent, shardId: number };
72
- shardError: { error: Error, shardId: number };
73
- shardReady: { shardId: number, unavailableGuilds: Set<Discord.Snowflake> | undefined };
74
- shardReconnecting: { shardId: number };
75
- shardResume: { shardId: number, replayedEvents: number };
76
- stageInstanceCreate: { stageInstance: Discord.StageInstance };
77
- stageInstanceUpdate: { oldStageInstance: Discord.StageInstance | null, newStageInstance: Discord.StageInstance };
78
- stageInstanceDelete: { stageInstance: Discord.StageInstance };
79
- stickerCreate: { sticker: Discord.Sticker };
80
- stickerDelete: { sticker: Discord.Sticker };
81
- stickerUpdate: { oldSticker: Discord.Sticker, newSticker: Discord.Sticker };
82
- guildScheduledEventCreate: { guildScheduledEvent: Discord.GuildScheduledEvent };
83
- guildScheduledEventUpdate: {
84
- oldGuildScheduledEvent: Discord.GuildScheduledEvent | null,
85
- newGuildScheduledEvent: Discord.GuildScheduledEvent,
86
- };
87
- guildScheduledEventDelete: { guildScheduledEvent: Discord.GuildScheduledEvent };
88
- guildScheduledEventUserAdd: { guildScheduledEvent: Discord.GuildScheduledEvent, user: Discord.User };
89
- guildScheduledEventUserRemove: { guildScheduledEvent: Discord.GuildScheduledEvent, user: Discord.User };
90
- autoModerationRuleCreate: { autoModerationRule: Discord.AutoModerationRule; };
91
- autoModerationRuleDelete: { autoModerationRule: Discord.AutoModerationRule; };
92
- autoModerationRuleUpdate: { oldAutoModerationRule: Discord.AutoModerationRule | null; newAutoModerationRule: Discord.AutoModerationRule; };
93
- guildAuditLogEntryCreate: { auditLogEntry: Discord.GuildAuditLogsEntry, guild: Discord.Guild };
94
- }
95
-
96
- export type DBIEventCombinations<TNamespace extends NamespaceEnums> = {
97
- [K in keyof (ClientEvents & NamespaceData[TNamespace]["customEvents"])]: {
98
- name: K,
99
- onExecute: (ctx: (ClientEvents & NamespaceData[TNamespace]["customEvents"])[K] & { other: Record<string, any>, locale?: { guild: DBILocale<TNamespace> }, eventName: string, nextClient: TDBIClientData<TNamespace> }) => Promise<any> | any
100
- }
101
- }[keyof (ClientEvents) | keyof NamespaceData[TNamespace]["customEvents"]];
102
-
103
- export type TDBIEventOmitted<TNamespace extends NamespaceEnums> = Omit<DBIEvent<TNamespace>, "type" | "name" | "onExecute" | "client" | "dbi" | "toggle" | "disabled" | "at"> & { disabled?: boolean } & DBIEventCombinations<TNamespace>;
104
-
105
- export type TDBIEventOrder = {
106
- await?: boolean;
107
- delayBefore?: number;
108
- delayAfter?: number;
109
- }
110
-
111
- export class DBIEvent<TNamespace extends NamespaceEnums> {
112
- readonly type: "Event";
113
- other?: Record<string, any>;
114
- triggerType?: "OneByOne" | "OneByOneGlobal" | "Random" | "First";
115
- id?: string;
116
- name: string;
117
- onExecute: (...args: any[]) => any;
118
- ordered?: TDBIEventOrder;
119
- dbi: DBI<TNamespace>;
120
- disabled: boolean = false;
121
- flag?: string;
122
- at?: number;
123
- ttl?: number;
124
- constructor(dbi: DBI<TNamespace>, cfg: TDBIEventOmitted<TNamespace>) {
125
- this.dbi = dbi;
126
- this.type = "Event";
127
- this.id = cfg.id;
128
- this.other = cfg.other;
129
- this.name = cfg.name as any;
130
- this.onExecute = cfg.onExecute;
131
- this.ordered = cfg.ordered;
132
- this.triggerType = cfg.triggerType ?? "OneByOneGlobal";
133
- this.disabled ??= cfg.disabled;
134
- this.flag = cfg.flag;
135
- this.at = Date.now();
136
- this.ttl = cfg.ttl;
137
- }
138
-
139
- toggle(disabled?: boolean) {
140
- if (disabled === undefined) this.disabled = !this.disabled;
141
- else this.disabled = disabled;
142
- return this;
143
- }
144
-
145
- }
@@ -1,100 +0,0 @@
1
- import Discord from "discord.js";
2
- import { NamespaceEnums, NamespaceData } from "../../generated/namespaceData";
3
- import { DBI } from "../DBI";
4
- import { DBIButton } from "./Components/Button";
5
- import { DBIChatInput } from "./ChatInput/ChatInput";
6
- import { DBILocale } from "./other/Locale";
7
- import { DBIMessageContextMenu } from "./other/MessageContextMenu";
8
- import { DBIModal } from "./Components/Modal";
9
- import { DBIStringSelectMenu } from "./Components/StringSelectMenu";
10
- import { DBIUserContextMenu } from "./other/UserContextMenu";
11
- import { DBIHTMLComponentsV2 } from "./Components/HTMLComponentsV2";
12
-
13
- export type TDBIInteractions<TNamespace extends NamespaceEnums> = DBIChatInput<TNamespace> | DBIButton<TNamespace> | DBIStringSelectMenu<TNamespace> | DBIMessageContextMenu<TNamespace> | DBIUserContextMenu<TNamespace> | DBIModal<TNamespace> | DBIHTMLComponentsV2<TNamespace>;
14
-
15
- export interface IDBIBaseExecuteCtx<TNamespace extends NamespaceEnums> {
16
- interaction:
17
- | Discord.ChatInputCommandInteraction
18
- | Discord.UserContextMenuCommandInteraction
19
- | Discord.MessageContextMenuCommandInteraction
20
- | Discord.ModalSubmitInteraction
21
- | Discord.AutocompleteInteraction
22
- | Discord.AnySelectMenuInteraction
23
- | Discord.ButtonInteraction;
24
- locale: {
25
- user: DBILocale<TNamespace>,
26
- guild?: DBILocale<TNamespace>
27
- }
28
- dbi: DBI<TNamespace>;
29
- dbiInteraction: TDBIInteractions<TNamespace>;
30
- setRateLimit(type: TDBIRateLimitTypes, duration: number): Promise<any>;
31
- other: Record<string, any>;
32
- clientNamespace: NamespaceData[TNamespace]["clientNamespaces"];
33
- v2: boolean;
34
- }
35
-
36
- export type TDBIReferencedData = ({ [key: string]: any, $ref: string, $unRef(): boolean } | string | number);
37
-
38
- export type TDBIInteractionTypes =
39
- | "ChatInput"
40
- | "UserContextMenu"
41
- | "MessageContextMenu"
42
- | "Modal"
43
- | "Autocomplete"
44
- | "StringSelectMenu"
45
- | "UserSelectMenu"
46
- | "ChannelSelectMenu"
47
- | "MentionableSelectMenu"
48
- | "RoleSelectMenu"
49
- | "Button"
50
- | "HTMLComponentsV2";
51
-
52
- export type TDBIRateLimitTypes =
53
- | "User"
54
- | "Channel"
55
- | "Guild"
56
- | "Member"
57
- | "Message";
58
-
59
-
60
- export type DBIRateLimit = {
61
- type: TDBIRateLimitTypes;
62
- /**
63
- * Duration in milliseconds.
64
- */
65
- duration: number;
66
- }
67
-
68
- export class DBIBaseInteraction<TNamespace extends NamespaceEnums> {
69
- constructor(dbi: DBI<TNamespace>, cfg: Omit<DBIBaseInteraction<TNamespace>, "dbi" | "at">) {
70
- this.dbi = dbi;
71
- this.name = cfg.name;
72
- this.description = cfg.description;
73
- this.onExecute = cfg.onExecute;
74
- this.type = cfg.type;
75
- this.options = cfg.options;
76
- this.other = cfg.other;
77
- this.publish = cfg.publish ?? dbi.data.clients.first()?.namespace;
78
- this.rateLimits = cfg.rateLimits ?? [];
79
- this.flag = cfg.flag;
80
- this.at = Date.now();
81
- this.ttl = cfg.ttl;
82
- }
83
-
84
- publish?: NamespaceData[TNamespace]["clientNamespaces"];
85
- dbi: DBI<TNamespace>;
86
- name: string;
87
- description: string;
88
- readonly type: TDBIInteractionTypes;
89
- options?: any | any[];
90
- other?: Record<string, any> & { messageCommand?: { aliases?: string[], ignore?: boolean } };
91
- rateLimits?: DBIRateLimit[];
92
- flag?: string;
93
- ttl?: number;
94
- at?: number;
95
- toJSON(overrides?: any): any { }
96
-
97
- onExecute?(ctx: IDBIBaseExecuteCtx<TNamespace>): Promise<void> | void {
98
-
99
- }
100
- }
@@ -1,19 +0,0 @@
1
- import { NamespaceEnums, NamespaceData } from "../../../generated/namespaceData";
2
- import { DBI } from "../../DBI";
3
-
4
- export type TDBICustomEventOmitted<TNamespace extends NamespaceEnums, CEventName extends keyof NamespaceData[TNamespace]["customEvents"] = keyof NamespaceData[TNamespace]["customEvents"]> = Omit<DBICustomEvent<TNamespace, CEventName>, "type" | "dbi" | "toJSON" | "trigger">;
5
- export class DBICustomEvent<TNamespace extends NamespaceEnums, CEventName extends keyof NamespaceData[TNamespace]["customEvents"] = keyof NamespaceData[TNamespace]["customEvents"]> {
6
- dbi: DBI<TNamespace>;
7
- name: CEventName;
8
- map: {[key: string]: string};
9
- type: string;
10
- trigger(args: NamespaceData[TNamespace]["customEvents"][CEventName]) {
11
- return this.dbi.data.clients.first().client.emit(this.name as string, { ...args, _DIRECT_: true});
12
- }
13
- constructor(dbi: DBI<TNamespace>, cfg: TDBICustomEventOmitted<TNamespace, CEventName>) {
14
- this.dbi = dbi;
15
- this.name = cfg.name;
16
- this.map = cfg.map;
17
- this.type = "CustomEvent";
18
- }
19
- }
@@ -1,408 +0,0 @@
1
- import { Message, MessagePayload, ApplicationCommandType, ChatInputCommandInteraction, Locale, APIInteractionGuildMember, GuildMember, PermissionsBitField, CacheType, CommandInteractionOptionResolver, CommandOptionDataTypeResolvable, ApplicationCommandOptionType, User, Attachment, InteractionEditReplyOptions, InteractionReplyOptions } from 'discord.js';
2
- import { TDBIInteractions } from '../Interaction';
3
- import { plsParseArgs } from "plsargs";
4
- import { DBI } from '../../DBI';
5
- import { NamespaceEnums } from "../../../generated/namespaceData";
6
- import { ChannelType } from "discord-api-types/v10";
7
-
8
- export class FakeMessageInteraction /* implements ChatInputCommandInteraction */ {
9
- channelId: string;
10
- commandName: string;
11
- appPermissions: any;
12
- applicationId: string;
13
- channel: any;
14
- command: any;
15
- commandGuildId: string;
16
- commandId: any;
17
- commandType: ApplicationCommandType.ChatInput;
18
- // awaitModalSubmit: (...arr: any[]) => any;
19
- // fetchReply: () => Promise<any>;
20
- deferred: boolean = false;
21
- client: any;
22
- createdAt: Date;
23
- ephemeral: boolean = false;
24
- createdTimestamp: number;
25
- guild: any;
26
- guildId: string;
27
- guildLocale: Locale;
28
- id: string;
29
- user: User;
30
- private repliedMessage: Message | undefined;
31
- private lastFollowUp: Message | undefined;
32
- member: GuildMember | APIInteractionGuildMember;
33
- memberPermissions: Readonly<PermissionsBitField>;
34
- parsedArgs = new Map<string, FakeMessageInteractionArgument>();
35
- args: import("plsargs/src/Result").Result;
36
- usedCommandName: string;
37
- fullCommandName: string;
38
- options: any;
39
- dbiChatInput: TDBIInteractions<NamespaceEnums>;
40
- dbiChatInputOptions: any[];
41
- fake: boolean = true;
42
- _hoistedOptions: any;
43
- _initialized: boolean = false;
44
- _lastAction: string | undefined;
45
-
46
- constructor(public dbi: DBI<NamespaceEnums>, public message: Message, chatInput: TDBIInteractions<NamespaceEnums>, public locale: string, commandName: string, public usedPrefix: string) {
47
- const self = this;
48
-
49
- this.channelId = message.channel.id;
50
- this.commandName = chatInput.name.split(" ").at(0);
51
- this.appPermissions = message.guild?.members.me.permissionsIn(message.channel as any) ?? new PermissionsBitField(8n);
52
- this.applicationId = message.client.user.id;
53
- this.channel = message.channel as any;
54
- this.commandGuildId = message.guild.id;
55
- this.commandType = ApplicationCommandType.ChatInput;
56
-
57
- this.client = message.client;
58
- this.createdAt = message.createdAt;
59
- this.createdTimestamp = message.createdTimestamp;
60
- this.guild = message.guild;
61
- this.guildId = message.guild?.id;
62
- this.guildLocale = message.guild?.preferredLocale;
63
- this.id = message.guild?.commands.cache.find((cmd) => cmd.name === this.commandName)?.id ?? message.client.application.commands.cache.find((cmd) => cmd.name === this.commandName)?.id ?? "-1";
64
- this.locale = message.guild?.preferredLocale;
65
- this.member = message.member;
66
- this.memberPermissions = message.member?.permissions;
67
- this.user = message.author;
68
-
69
- this.usedCommandName = commandName;
70
- this.fullCommandName = chatInput.name;
71
- this.dbiChatInput = chatInput;
72
- this.dbiChatInputOptions = chatInput.options ? chatInput.options.map(i => ({ ...i })) : [];
73
-
74
- {
75
- const argContent = message.content.slice(usedPrefix.length + commandName.length).replace(/ +/, " ").trim();
76
- const args = plsParseArgs(argContent);
77
-
78
- this.args = args;
79
-
80
- const options = chatInput.options ?? [];
81
- const atchs = [...message.attachments.values()];
82
- for (let i = 0, attachmentIndex = 0, namedValueSize = 0; i < options.length; i++) {
83
- const option = options[i];
84
- if (!option) break;
85
- if (option.type === ApplicationCommandOptionType.Attachment) {
86
- this.parsedArgs.set(option.name, {
87
- name: option.name,
88
- type: option.type,
89
- value: atchs.at(attachmentIndex)?.url,
90
- attachment: atchs.at(attachmentIndex++)
91
- })
92
- continue;
93
- }
94
- const value = option.messageCommands?.rest ? args._.slice(i).join(" ") : (args.get(option.name) ?? args.get(i - attachmentIndex - namedValueSize));
95
- if (args.has(option.name)) namedValueSize++;
96
-
97
- const interactionChoicesLocale = this.dbi.data.interactionLocales.get(self.dbiChatInput.name)?.data?.[locale]?.options[option.name]?.choices;
98
-
99
- const localizedChoices = option.choices?.length ? option.choices.map(choice => ({
100
- ...choice,
101
- name: interactionChoicesLocale?.[choice.value] ?? choice.name
102
- })) : option._choices;
103
-
104
- this.parsedArgs.set(option.name, {
105
- name: option.name,
106
- type: option.type,
107
- value:
108
- localizedChoices?.find(c => c.value === value || c.name === value)?.value ??
109
- option.choices?.find(c => c.value === value || c.name === value)?.value ??
110
- value
111
- });
112
- }
113
- }
114
-
115
- this.options = {
116
- get(name: string) {
117
- const rawValue = self.getRawOptionValue(name);
118
- if (!rawValue) return null;
119
- return {
120
- value: rawValue,
121
- get boolean() { return self.options.getBoolean(name); },
122
- get channel() { return self.options.getChannel(name); },
123
- get string() { return self.options.getString(name); },
124
- get integer() { return self.options.getInteger(name); },
125
- get number() { return self.options.getNumber(name); },
126
- get user() { return self.options.getUser(name); },
127
- get member() { return self.options.getMember(name); },
128
- get role() { return self.options.getRole(name); },
129
- get mentionable() { return self.options.getMentionable(name); },
130
- get attachment() { return self.options.getAttachment(name); }
131
- };
132
- },
133
- get _hoistedOptions() {
134
- return self._hoistedOptions;
135
- },
136
- getSubcommand() {
137
- let splitted = self.fullCommandName.split(" ");
138
- if (splitted.length === 1) return null;
139
- return splitted.at(-1);
140
- },
141
- getSubcommandGroup() {
142
- let splitted = self.fullCommandName.split(" ");
143
- if (splitted.length === 3) return splitted[1];
144
- return null;
145
- },
146
- getBoolean(name: string) {
147
- const rawValue = self.getRawOptionValue(name);
148
- if (!rawValue) return null;
149
- return !!self.dbi.config.messageCommands.typeAliases.booleans[rawValue.toLowerCase()];
150
- },
151
- getChannel(name: string, _: any, channelType?: ChannelType | ChannelType[]) {
152
- const rawValue = self.getRawOptionValue(name);
153
- if (!rawValue) return null;
154
- let value = rawValue.replace(/<#|>/g, "");
155
- let channel = self.message.client.channels.cache.get(value);
156
- if (!channel) channel = self.message.client.channels.cache.find(c => {
157
- if (self.guildId && (c as any).guildId && (c as any).guildId !== self.guildId) return false;
158
- return (c as any).name === value;
159
- });
160
- // @ts-ignore
161
- if (channelType && channel?.type !== channelType && !channelType?.includes?.(channel?.type)) return null;
162
- return channel;
163
- },
164
- getString(name: string) {
165
- const dbiOption = self.getClonedDBIOption(name);
166
- let rawValue = `${self.getRawOptionValue(name)}`;
167
- let choices = dbiOption.choices ?? dbiOption._choices;
168
- if (choices) return choices.find(c => c.value === rawValue || c.name === rawValue)?.value ?? rawValue;
169
- return rawValue;
170
- },
171
- getInteger(name: string) {
172
- const dbiOption = self.getClonedDBIOption(name);
173
- let rawValue = self.getRawOptionValue(name);
174
- let parsedValue = parseInt(rawValue);
175
- let choices = dbiOption.choices ?? dbiOption._choices;
176
- if (choices) return choices.find(c => c.value === parsedValue || c.name === rawValue)?.value ?? rawValue;
177
- return rawValue;
178
- },
179
- getNumber(name: string) {
180
- const dbiOption = self.getClonedDBIOption(name);
181
- let rawValue = self.getRawOptionValue(name);
182
- let parsedValue = parseFloat(rawValue);
183
- let choices = dbiOption.choices ?? dbiOption._choices;
184
- if (choices) return choices.find(c => c.value === parsedValue || c.name === rawValue)?.value ?? rawValue;
185
- return rawValue;
186
- },
187
- getUser(name: string) {
188
- const rawValue = self.getRawOptionValue(name);
189
- if (!rawValue) return null;
190
- let value = rawValue.replace(/<@!?|>/g, "");
191
- let user = self.message.client.users.cache.get(value);
192
- if (!user) user = self.message.client.users.cache.find(u => u.username === value || u.tag === value);
193
- return user;
194
- },
195
- getUserId(name: string) {
196
- const rawValue = self.getRawOptionValue(name);
197
- if (!rawValue) return null;
198
- return rawValue.replace(/<@!?|>/g, "");
199
- },
200
- getMember(name: string) {
201
- const rawValue = self.getRawOptionValue(name);
202
- if (!rawValue) return null;
203
- let value = rawValue.replace(/<@!?|>/g, "");
204
- let member = self.message.guild?.members.cache.get(value);
205
- if (!member) member = self.message.guild?.members.cache.find(m => m.user.username === value || m.user.tag === value);
206
- return member;
207
- },
208
- getMemberId(name: string) {
209
- const rawValue = self.getRawOptionValue(name);
210
- if (!rawValue) return null;
211
- return rawValue.replace(/<@!?|>/g, "");
212
- },
213
- getRole(name: string) {
214
- const rawValue = self.getRawOptionValue(name);
215
- if (!rawValue) return null;
216
- let value = rawValue.replace(/<@&|>/g, "");
217
- let role = self.message.guild?.roles.cache.get(value);
218
- if (!role) role = self.message.guild?.roles.cache.find(r => r.name === value);
219
- return role;
220
- },
221
- getRoleId(name: string) {
222
- const rawValue = self.getRawOptionValue(name);
223
- if (!rawValue) return null;
224
- return rawValue.replace(/<@&|>/g, "");
225
- },
226
- getMentionable(name: string) {
227
- const rawValue = self.getRawOptionValue(name);
228
- if (!rawValue) return null;
229
- let value = rawValue.replace(/<(@|#)(!|&)?|>/g, "");
230
- let user = self.message.client.users.cache.get(value);
231
- if (!user) user = self.message.client.users.cache.find(u => u.username === value || u.tag === value);
232
- if (user) return user;
233
- let member = self.message.guild?.members.cache.get(value);
234
- if (!member) member = self.message.guild?.members.cache.find(m => m.user.username === value || m.user.tag === value);
235
- if (member) return member;
236
- let role = self.message.guild?.roles.cache.get(value);
237
- if (!role) role = self.message.guild?.roles.cache.find(r => r.name === value);
238
- if (role) return role;
239
- return null;
240
- },
241
- getMentionableId(name: string) {
242
- const rawValue = self.getRawOptionValue(name);
243
- if (!rawValue) return null;
244
- return rawValue.replace(/<@(!|&)?|>/g, "");
245
- },
246
- getMessage() {
247
- return self.message;
248
- },
249
- getAttachment(name: string) {
250
- let d = self.parsedArgs.get(name);
251
- return d?.attachment ?? null;
252
- },
253
- getChannelId(name: string) {
254
- const rawValue = self.getRawOptionValue(name);
255
- if (!rawValue) return null;
256
- let value = rawValue.replace(/<#|>/g, "");
257
- return value;
258
- }
259
- }
260
- }
261
-
262
- init() {
263
- if (this._initialized) return;
264
- this._initialized = true;
265
- this._hoistedOptionsInit();
266
- }
267
-
268
- _hoistedOptionsInit() {
269
- this._hoistedOptions = [...this.parsedArgs.values()].map(arg => {
270
- switch (arg.type) {
271
- case ApplicationCommandOptionType.String: {
272
- return { ...this.options.get(arg.name), value: this.options.getString(arg.name) };
273
- }
274
- case ApplicationCommandOptionType.Integer: {
275
- return { ...this.options.get(arg.name), value: this.options.getInteger(arg.name) };
276
- }
277
- case ApplicationCommandOptionType.Number: {
278
- return { ...this.options.get(arg.name), value: this.options.getNumber(arg.name) };
279
- }
280
- case ApplicationCommandOptionType.Boolean: {
281
- return { ...this.options.get(arg.name), value: this.options.getBoolean(arg.name) };
282
- }
283
- case ApplicationCommandOptionType.User: {
284
- return { ...this.options.get(arg.name), value: this.options.getUser(arg.name)?.id };
285
- }
286
- case ApplicationCommandOptionType.Channel: {
287
- return { ...this.options.get(arg.name), value: this.options.getChannel(arg.name)?.id };
288
- }
289
- case ApplicationCommandOptionType.Role: {
290
- return { ...this.options.get(arg.name), value: this.options.getRole(arg.name)?.id };
291
- }
292
- case ApplicationCommandOptionType.Mentionable: {
293
- return { ...this.options.get(arg.name), value: this.options.getMentionable(arg.name)?.id };
294
- }
295
- case ApplicationCommandOptionType.Attachment: {
296
- return { ...this.options.get(arg.name), value: this.options.getAttachment(arg.name)?.url };
297
- }
298
- case ApplicationCommandOptionType.Subcommand: {
299
- return { ...this.options.get(arg.name), value: this.options.getSubcommand() };
300
- }
301
- case ApplicationCommandOptionType.SubcommandGroup: {
302
- return { ...this.options.get(arg.name), value: this.options.getSubcommandGroup() };
303
- }
304
- }
305
- });
306
- }
307
-
308
- private getRawOptionValue(name: string): any {
309
- return this.parsedArgs.get(name)?.value;
310
- }
311
-
312
- private getClonedDBIOption(name: string): any {
313
- return this.dbiChatInputOptions.find(o => o.name === name);
314
- }
315
-
316
- inGuild() {
317
- return true;
318
- }
319
-
320
- async deferReply(options: any): Promise<any> {
321
- if (this.repliedMessage) throw new Error("Already deferred reply.");
322
- this.repliedMessage = await this.message.reply(options?.content ?? (await this.dbi.config.defaults.messageCommands.deferReplyContent({
323
- // @ts-ignore
324
- dbiInteraction: this.dbiChatInput,
325
- interaction: this,
326
- locale: {
327
- user: this.dbi.data.locales.get(this.locale) ||
328
- this.dbi.data.locales.get(this.dbi.config.defaults.locale.name),
329
- guild: this.message.guild?.preferredLocale
330
- ? this.dbi.data.locales.get(
331
- this.message.guild?.preferredLocale?.split("-")?.at(0)
332
- ) || this.dbi.data.locales.get(this.dbi.config.defaults.locale.name)
333
- : null,
334
- }
335
- })));
336
- this.deferred = true;
337
- this._lastAction = "deferReply";
338
- return this.repliedMessage;
339
- }
340
-
341
- async deleteReply() {
342
- if (!this.repliedMessage) throw new Error("No deferred reply.");
343
- await this.repliedMessage.delete();
344
- this.repliedMessage = undefined;
345
- this._lastAction = "deleteReply";
346
- }
347
-
348
- async followUp(content: string | MessagePayload) {
349
- if (!this.repliedMessage) throw new Error("No deferred reply.");
350
- if (!this.lastFollowUp) {
351
- this.lastFollowUp = await this.repliedMessage.reply(content);
352
- } else {
353
- this.lastFollowUp = await this.lastFollowUp.reply(content);
354
- }
355
- this._lastAction = "followUp";
356
- return this.lastFollowUp;
357
- }
358
-
359
- async editReply(content: string | MessagePayload | InteractionEditReplyOptions) {
360
- if (!this.repliedMessage) throw new Error("No deferred reply.");
361
- if (typeof content !== "string" && this._lastAction === "deferReply" && typeof (content as any).content === "undefined") {
362
- (content as any).content = null;
363
- }
364
- await this.repliedMessage.edit(content);
365
- this._lastAction = "editReply";
366
- return this.repliedMessage;
367
- }
368
-
369
- async reply(content: string | MessagePayload | InteractionReplyOptions): Promise<any> {
370
- if (this.repliedMessage) throw new Error("Already deferred reply.");
371
- this.repliedMessage = await this.message.reply(content as any);
372
- this._lastAction = "reply";
373
- return this.repliedMessage;
374
- }
375
-
376
- async awaitModalSubmit() {
377
- throw new Error("Method not implemented.");
378
- };
379
-
380
- async fetchReply() {
381
- return this.repliedMessage?.id && await this.message.channel.messages.fetch(this.repliedMessage.id);
382
- };
383
-
384
- isAnySelectMenu() { return false; }
385
- isAutocomplete() { return false; }
386
- isButton() { return false; }
387
- isChannelSelectMenu() { return false; }
388
- isChatInputCommand() { return true; }
389
- isCommand() { return true; }
390
- isContextMenuCommand() { return false; }
391
- isMentionableSelectMenu() { return false; }
392
- isMessageComponent() { return false; }
393
- isMessageContextMenuCommand() { return false; }
394
- isModalSubmit() { return false; }
395
- isRepliable() { return true; }
396
- isRoleSelectMenu() { return false; }
397
- isStringSelectMenu() { return false; }
398
- isUserContextMenuCommand() { return false; }
399
- isUserSelectMenu() { return false; }
400
- isSelectMenu() { return false; }
401
- }
402
-
403
- interface FakeMessageInteractionArgument {
404
- type: ApplicationCommandOptionType,
405
- value: any,
406
- attachment?: Attachment,
407
- name: string
408
- }