From fa8bc0eb6c4ecd2ed58d4b0f26642404b1fefa22 Mon Sep 17 00:00:00 2001 From: DJj123dj <80536295+DJj123dj@users.noreply.github.com> Date: Fri, 3 Apr 2026 11:18:59 +0200 Subject: [PATCH] (v4.2) Open Discord Framework Update (Part 2) Replaced all "Default" classes & types with ID mappings & improved types. Updated Interactive Setup CLI & certain events, renamed ODStat's to ODStatistics. Moved many classes, types & interfaces to the framework --- package.json | 6 +- src/actions/claimTicket.ts | 4 +- src/actions/closeTicket.ts | 4 +- src/actions/createTicket.ts | 6 +- src/actions/createTranscript.ts | 4 +- src/actions/deleteTicket.ts | 4 +- src/actions/moveTicket.ts | 4 +- src/actions/pinTicket.ts | 4 +- src/actions/reopenTicket.ts | 4 +- src/actions/transferTicket.ts | 4 +- src/builders/embeds.ts | 12 +- src/commands/blacklist.ts | 4 +- src/commands/stats.ts | 2 +- src/core/api.ts | 41 + src/core/api/api.ts | 42 - src/core/api/{openticket => }/blacklist.ts | 0 src/core/api/defaults/base.ts | 45 - src/core/api/defaults/checker.ts | 384 ------- src/core/api/defaults/client.ts | 206 ---- src/core/api/defaults/code.ts | 56 -- src/core/api/defaults/console.ts | 41 - src/core/api/defaults/cooldown.ts | 41 - src/core/api/defaults/database.ts | 256 ----- src/core/api/defaults/event.ts | 384 ------- src/core/api/defaults/flag.ts | 56 -- src/core/api/defaults/helpmenu.ts | 337 ------- src/core/api/defaults/permission.ts | 30 - src/core/api/defaults/plugin.ts | 76 -- src/core/api/defaults/post.ts | 43 - src/core/api/defaults/progressbar.ts | 169 ---- src/core/api/defaults/responder.ts | 354 ------- src/core/api/defaults/session.ts | 41 - src/core/api/defaults/startscreen.ts | 47 - src/core/api/defaults/stat.ts | 471 --------- src/core/api/defaults/worker.ts | 33 - src/core/api/{openticket => }/option.ts | 8 +- src/core/api/{openticket => }/panel.ts | 4 +- src/core/api/{openticket => }/priority.ts | 55 +- src/core/api/{openticket => }/question.ts | 0 src/core/api/{openticket => }/role.ts | 0 src/core/api/{openticket => }/ticket.ts | 5 +- src/core/api/{openticket => }/transcript.ts | 87 +- src/core/cli/cli.ts | 73 +- src/core/cli/editConfig.ts | 933 ------------------ src/core/cli/quickSetup.ts | 105 +- src/core/{api => }/main.ts | 105 +- src/core/{api/defaults => mappings}/action.ts | 64 +- src/core/mappings/base.ts | 21 + .../{api/defaults => mappings}/builder.ts | 369 ++----- src/core/mappings/checker.ts | 145 +++ src/core/mappings/client.ts | 109 ++ src/core/mappings/code.ts | 32 + src/core/{api/defaults => mappings}/config.ts | 411 ++++---- src/core/mappings/console.ts | 17 + src/core/mappings/cooldown.ts | 17 + src/core/mappings/database.ts | 88 ++ src/core/mappings/event.ts | 339 +++++++ src/core/mappings/flag.ts | 32 + src/core/{api/defaults => mappings}/fuse.ts | 2 +- src/core/mappings/helpmenu.ts | 151 +++ .../{api/defaults => mappings}/language.ts | 72 +- src/core/mappings/permission.ts | 30 + src/core/mappings/plugin.ts | 30 + src/core/mappings/post.ts | 19 + src/core/mappings/progressbar.ts | 40 + src/core/mappings/responder.ts | 139 +++ src/core/mappings/session.ts | 17 + src/core/mappings/startscreen.ts | 24 + src/core/mappings/statistic.ts | 139 +++ .../{api/defaults => mappings}/verifybar.ts | 51 +- src/data/framework/checkerLoader.ts | 6 +- src/data/framework/codeLoader.ts | 8 +- src/data/framework/eventLoader.ts | 16 +- src/data/framework/progressBarLoader.ts | 26 +- .../{statLoader.ts => statisticLoader.ts} | 98 +- src/data/openticket/optionLoader.ts | 6 +- src/data/openticket/panelLoader.ts | 2 +- src/data/openticket/questionLoader.ts | 4 +- src/index.ts | 41 +- 79 files changed, 2044 insertions(+), 5111 deletions(-) create mode 100644 src/core/api.ts delete mode 100644 src/core/api/api.ts rename src/core/api/{openticket => }/blacklist.ts (100%) delete mode 100644 src/core/api/defaults/base.ts delete mode 100644 src/core/api/defaults/checker.ts delete mode 100644 src/core/api/defaults/client.ts delete mode 100644 src/core/api/defaults/code.ts delete mode 100644 src/core/api/defaults/console.ts delete mode 100644 src/core/api/defaults/cooldown.ts delete mode 100644 src/core/api/defaults/database.ts delete mode 100644 src/core/api/defaults/event.ts delete mode 100644 src/core/api/defaults/flag.ts delete mode 100644 src/core/api/defaults/helpmenu.ts delete mode 100644 src/core/api/defaults/permission.ts delete mode 100644 src/core/api/defaults/plugin.ts delete mode 100644 src/core/api/defaults/post.ts delete mode 100644 src/core/api/defaults/progressbar.ts delete mode 100644 src/core/api/defaults/responder.ts delete mode 100644 src/core/api/defaults/session.ts delete mode 100644 src/core/api/defaults/startscreen.ts delete mode 100644 src/core/api/defaults/stat.ts delete mode 100644 src/core/api/defaults/worker.ts rename src/core/api/{openticket => }/option.ts (98%) rename src/core/api/{openticket => }/panel.ts (96%) rename src/core/api/{openticket => }/priority.ts (76%) rename src/core/api/{openticket => }/question.ts (100%) rename src/core/api/{openticket => }/role.ts (100%) rename src/core/api/{openticket => }/ticket.ts (98%) rename src/core/api/{openticket => }/transcript.ts (96%) delete mode 100644 src/core/cli/editConfig.ts rename src/core/{api => }/main.ts (51%) rename src/core/{api/defaults => mappings}/action.ts (77%) create mode 100644 src/core/mappings/base.ts rename src/core/{api/defaults => mappings}/builder.ts (74%) create mode 100644 src/core/mappings/checker.ts create mode 100644 src/core/mappings/client.ts create mode 100644 src/core/mappings/code.ts rename src/core/{api/defaults => mappings}/config.ts (69%) create mode 100644 src/core/mappings/console.ts create mode 100644 src/core/mappings/cooldown.ts create mode 100644 src/core/mappings/database.ts create mode 100644 src/core/mappings/event.ts create mode 100644 src/core/mappings/flag.ts rename src/core/{api/defaults => mappings}/fuse.ts (97%) create mode 100644 src/core/mappings/helpmenu.ts rename src/core/{api/defaults => mappings}/language.ts (89%) create mode 100644 src/core/mappings/permission.ts create mode 100644 src/core/mappings/plugin.ts create mode 100644 src/core/mappings/post.ts create mode 100644 src/core/mappings/progressbar.ts create mode 100644 src/core/mappings/responder.ts create mode 100644 src/core/mappings/session.ts create mode 100644 src/core/mappings/startscreen.ts create mode 100644 src/core/mappings/statistic.ts rename src/core/{api/defaults => mappings}/verifybar.ts (57%) rename src/data/framework/{statLoader.ts => statisticLoader.ts} (56%) diff --git a/package.json b/package.json index 5768e21..759cc3a 100644 --- a/package.json +++ b/package.json @@ -25,12 +25,12 @@ "type": "commonjs", "license": "GPL-3.0-only", "dependencies": { - "@discordjs/rest": "^2.6.0", - "@open-discord-bots/framework": "^0.1.2", + "@discordjs/rest": "^2.6.1", + "@open-discord-bots/framework": "^0.2.8", "@types/node": "^22.5.0", "@types/terminal-kit": "^2.5.7", "ansis": "^4.2.0", - "discord.js": "^14.24.2", + "discord.js": "^14.26.0", "formatted-json-stringify": "^1.2.1", "terminal-kit": "^3.1.2", "typescript": "^5.9.3" diff --git a/src/actions/claimTicket.ts b/src/actions/claimTicket.ts index 502db01..9ba221b 100644 --- a/src/actions/claimTicket.ts +++ b/src/actions/claimTicket.ts @@ -22,8 +22,8 @@ export const registerActions = async () => { ticket.get("opendiscord:busy").value = true //update stats - await opendiscord.stats.get("opendiscord:global").setStat("opendiscord:tickets-claimed",1,"increase") - await opendiscord.stats.get("opendiscord:user").setStat("opendiscord:tickets-claimed",user.id,1,"increase") + await opendiscord.statistics.get("opendiscord:global").setStat("opendiscord:tickets-claimed",1,"increase") + await opendiscord.statistics.get("opendiscord:user").setStat("opendiscord:tickets-claimed",user.id,1,"increase") //update category if (typeof params.allowCategoryChange == "boolean" ? params.allowCategoryChange : true){ diff --git a/src/actions/closeTicket.ts b/src/actions/closeTicket.ts index e09bb2c..857b836 100644 --- a/src/actions/closeTicket.ts +++ b/src/actions/closeTicket.ts @@ -30,8 +30,8 @@ export const registerActions = async () => { ticket.get("opendiscord:busy").value = true //update stats - await opendiscord.stats.get("opendiscord:global").setStat("opendiscord:tickets-closed",1,"increase") - await opendiscord.stats.get("opendiscord:user").setStat("opendiscord:tickets-closed",user.id,1,"increase") + await opendiscord.statistics.get("opendiscord:global").setStat("opendiscord:tickets-closed",1,"increase") + await opendiscord.statistics.get("opendiscord:user").setStat("opendiscord:tickets-closed",user.id,1,"increase") //update category if (typeof params.allowCategoryChange == "boolean" ? params.allowCategoryChange : true){ diff --git a/src/actions/createTicket.ts b/src/actions/createTicket.ts index 2e62699..8760aa2 100644 --- a/src/actions/createTicket.ts +++ b/src/actions/createTicket.ts @@ -184,8 +184,8 @@ export const registerActions = async () => { ]) //manage stats - await opendiscord.stats.get("opendiscord:global").setStat("opendiscord:tickets-created",1,"increase") - await opendiscord.stats.get("opendiscord:user").setStat("opendiscord:tickets-created",user.id,1,"increase") + await opendiscord.statistics.get("opendiscord:global").setStat("opendiscord:tickets-created",1,"increase") + await opendiscord.statistics.get("opendiscord:user").setStat("opendiscord:tickets-created",user.id,1,"increase") //manage bot permissions await opendiscord.events.get("onTicketPermissionsCreated").emit([option,opendiscord.permissions,channel,user]) @@ -215,7 +215,7 @@ export const registerActions = async () => { if (generalConfig.data.system.pinFirstTicketMessage && msg.pinnable) await msg.pin("Ticket Message") //manage stats - await opendiscord.stats.get("opendiscord:ticket").setStat("opendiscord:messages-sent",ticket.id.value,1,"increase") + await opendiscord.statistics.get("opendiscord:ticket").setStat("opendiscord:messages-sent",ticket.id.value,1,"increase") await opendiscord.events.get("afterTicketMainMessageCreated").emit([ticket,msg,channel,user]) }catch(err){ diff --git a/src/actions/createTranscript.ts b/src/actions/createTranscript.ts index 825a142..546c391 100644 --- a/src/actions/createTranscript.ts +++ b/src/actions/createTranscript.ts @@ -149,8 +149,8 @@ export const registerActions = async () => { }) //update stats - await opendiscord.stats.get("opendiscord:global").setStat("opendiscord:transcripts-created",1,"increase") - await opendiscord.stats.get("opendiscord:user").setStat("opendiscord:transcripts-created",params.user.id,1,"increase") + await opendiscord.statistics.get("opendiscord:global").setStat("opendiscord:transcripts-created",1,"increase") + await opendiscord.statistics.get("opendiscord:user").setStat("opendiscord:transcripts-created",params.user.id,1,"increase") await opendiscord.events.get("afterTranscriptCreated").emit([opendiscord.transcripts,instance.result.ticket,instance.result.channel,instance.result.user]) }), new api.ODWorker("opendiscord:logs",0,(instance,params,source,cancel) => { diff --git a/src/actions/deleteTicket.ts b/src/actions/deleteTicket.ts index 68b0d16..9c186ca 100644 --- a/src/actions/deleteTicket.ts +++ b/src/actions/deleteTicket.ts @@ -59,8 +59,8 @@ export const registerActions = async () => { } //update stats - await opendiscord.stats.get("opendiscord:global").setStat("opendiscord:tickets-deleted",1,"increase") - await opendiscord.stats.get("opendiscord:user").setStat("opendiscord:tickets-deleted",user.id,1,"increase") + await opendiscord.statistics.get("opendiscord:global").setStat("opendiscord:tickets-deleted",1,"increase") + await opendiscord.statistics.get("opendiscord:user").setStat("opendiscord:tickets-deleted",user.id,1,"increase") //delete ticket from manager opendiscord.tickets.remove(ticket.id) diff --git a/src/actions/moveTicket.ts b/src/actions/moveTicket.ts index 591aef6..7df30a2 100644 --- a/src/actions/moveTicket.ts +++ b/src/actions/moveTicket.ts @@ -17,8 +17,8 @@ export const registerActions = async () => { ticket.option = data //update stats - await opendiscord.stats.get("opendiscord:global").setStat("opendiscord:tickets-moved",1,"increase") - await opendiscord.stats.get("opendiscord:user").setStat("opendiscord:tickets-moved",user.id,1,"increase") + await opendiscord.statistics.get("opendiscord:global").setStat("opendiscord:tickets-moved",1,"increase") + await opendiscord.statistics.get("opendiscord:user").setStat("opendiscord:tickets-moved",user.id,1,"increase") //get new channel properties const channelPrefix = ticket.option.get("opendiscord:channel-prefix").value diff --git a/src/actions/pinTicket.ts b/src/actions/pinTicket.ts index a388ae0..01f6dce 100644 --- a/src/actions/pinTicket.ts +++ b/src/actions/pinTicket.ts @@ -22,8 +22,8 @@ export const registerActions = async () => { ticket.get("opendiscord:busy").value = true //update stats - await opendiscord.stats.get("opendiscord:global").setStat("opendiscord:tickets-pinned",1,"increase") - await opendiscord.stats.get("opendiscord:user").setStat("opendiscord:tickets-pinned",user.id,1,"increase") + await opendiscord.statistics.get("opendiscord:global").setStat("opendiscord:tickets-pinned",1,"increase") + await opendiscord.statistics.get("opendiscord:user").setStat("opendiscord:tickets-pinned",user.id,1,"increase") //move to top of category if (channel.parent){ diff --git a/src/actions/reopenTicket.ts b/src/actions/reopenTicket.ts index 5112f66..ab719b0 100644 --- a/src/actions/reopenTicket.ts +++ b/src/actions/reopenTicket.ts @@ -35,8 +35,8 @@ export const registerActions = async () => { } //update stats - await opendiscord.stats.get("opendiscord:global").setStat("opendiscord:tickets-reopened",1,"increase") - await opendiscord.stats.get("opendiscord:user").setStat("opendiscord:tickets-reopened",user.id,1,"increase") + await opendiscord.statistics.get("opendiscord:global").setStat("opendiscord:tickets-reopened",1,"increase") + await opendiscord.statistics.get("opendiscord:user").setStat("opendiscord:tickets-reopened",user.id,1,"increase") //update category if (typeof params.allowCategoryChange == "boolean" ? params.allowCategoryChange : true){ diff --git a/src/actions/transferTicket.ts b/src/actions/transferTicket.ts index 85887dc..43a99f1 100644 --- a/src/actions/transferTicket.ts +++ b/src/actions/transferTicket.ts @@ -33,8 +33,8 @@ export const registerActions = async () => { } //update stats - await opendiscord.stats.get("opendiscord:global").setStat("opendiscord:tickets-transferred",1,"increase") - await opendiscord.stats.get("opendiscord:user").setStat("opendiscord:tickets-transferred",user.id,1,"increase") + await opendiscord.statistics.get("opendiscord:global").setStat("opendiscord:tickets-transferred",1,"increase") + await opendiscord.statistics.get("opendiscord:user").setStat("opendiscord:tickets-transferred",user.id,1,"increase") //get new channel properties const channelPrefix = ticket.option.get("opendiscord:channel-prefix").value diff --git a/src/builders/embeds.ts b/src/builders/embeds.ts index 5d7cc2c..06dc9cb 100644 --- a/src/builders/embeds.ts +++ b/src/builders/embeds.ts @@ -387,7 +387,7 @@ const statsEmbeds = () => { new api.ODWorker("opendiscord:stats-global",0,async (instance,params) => { const {guild,channel,user} = params - const scope = opendiscord.stats.get("opendiscord:global") + const scope = opendiscord.statistics.get("opendiscord:global") if (!scope) return const data = await scope.render("GLOBAL",guild,channel,user) @@ -397,7 +397,7 @@ const statsEmbeds = () => { if (opendiscord.permissions.hasPermissions("owner",await opendiscord.permissions.getPermissions(user,channel,guild))){ //show system data when owner or developer - const systemScope = opendiscord.stats.get("opendiscord:system") + const systemScope = opendiscord.statistics.get("opendiscord:system") if (!systemScope) return const systemData = await systemScope.render("GLOBAL",guild,channel,user) instance.addFields({name:systemScope.name,value:systemData,inline:false}) @@ -411,9 +411,9 @@ const statsEmbeds = () => { new api.ODWorker("opendiscord:stats-ticket",0,async (instance,params) => { const {guild,channel,user,scopeData} = params - const scope = opendiscord.stats.get("opendiscord:ticket") - const participantsScope = opendiscord.stats.get("opendiscord:participants") - const messagesScope = opendiscord.stats.get("opendiscord:messages") + const scope = opendiscord.statistics.get("opendiscord:ticket") + const participantsScope = opendiscord.statistics.get("opendiscord:participants") + const messagesScope = opendiscord.statistics.get("opendiscord:messages") if (!scope || !participantsScope || !messagesScope) return const data = await scope.render(scopeData.id.value,guild,channel,user) const participantsData = await participantsScope.render(scopeData.id.value,guild,channel,user) @@ -433,7 +433,7 @@ const statsEmbeds = () => { new api.ODWorker("opendiscord:stats-user",0,async (instance,params) => { const {guild,channel,user,scopeData} = params - const scope = opendiscord.stats.get("opendiscord:user") + const scope = opendiscord.statistics.get("opendiscord:user") if (!scope) return const data = await scope.render(scopeData.id,guild,channel,user) diff --git a/src/commands/blacklist.ts b/src/commands/blacklist.ts index 16e8548..afbe0c1 100644 --- a/src/commands/blacklist.ts +++ b/src/commands/blacklist.ts @@ -51,8 +51,8 @@ export const registerCommandResponders = async () => { ]) //manage stats - await opendiscord.stats.get("opendiscord:global").setStat("opendiscord:users-blacklisted",1,"increase") - await opendiscord.stats.get("opendiscord:user").setStat("opendiscord:users-blacklisted",user.id,1,"increase") + await opendiscord.statistics.get("opendiscord:global").setStat("opendiscord:users-blacklisted",1,"increase") + await opendiscord.statistics.get("opendiscord:user").setStat("opendiscord:users-blacklisted",user.id,1,"increase") await instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:blacklist-add").build(source,{guild,channel,user,data,reason})) diff --git a/src/commands/stats.ts b/src/commands/stats.ts index 46be1fb..e9c6a7f 100644 --- a/src/commands/stats.ts +++ b/src/commands/stats.ts @@ -106,7 +106,7 @@ export const registerCommandResponders = async () => { }else if (scope == "reset"){ const reason = instance.options.getString("reason",false) - opendiscord.stats.reset() + opendiscord.statistics.reset() await instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:stats-reset").build(source,{guild,channel,user,reason})) } diff --git a/src/core/api.ts b/src/core/api.ts new file mode 100644 index 0000000..72ff9c1 --- /dev/null +++ b/src/core/api.ts @@ -0,0 +1,41 @@ +//EXPORT FRAMEWORK +export * from "@open-discord-bots/framework/api" + +//EXPORT OPEN TICKET MAPPINGS +export * from "./mappings/action" +export * from "./mappings/base" +export * from "./mappings/builder" +export * from "./mappings/checker" +export * from "./mappings/client" +export * from "./mappings/code" +export * from "./mappings/config" +export * from "./mappings/console" +export * from "./mappings/cooldown" +export * from "./mappings/database" +export * from "./mappings/event" +export * from "./mappings/flag" +export * from "./mappings/fuse" +export * from "./mappings/helpmenu" +export * from "./mappings/language" +export * from "./mappings/permission" +export * from "./mappings/plugin" +export * from "./mappings/post" +export * from "./mappings/progressbar" +export * from "./mappings/responder" +export * from "./mappings/session" +export * from "./mappings/startscreen" +export * from "./mappings/statistic" +export * from "./mappings/verifybar" + +//EXPORT OPENTICKET MODULES +export * from "./api/blacklist" +export * from "./api/option" +export * from "./api/panel" +export * from "./api/priority" +export * from "./api/question" +export * from "./api/role" +export * from "./api/ticket" +export * from "./api/transcript" + +//EXPORT MAIN MODULE +export { ODOpenTicketMain } from "./main" \ No newline at end of file diff --git a/src/core/api/api.ts b/src/core/api/api.ts deleted file mode 100644 index 5ec6201..0000000 --- a/src/core/api/api.ts +++ /dev/null @@ -1,42 +0,0 @@ -//EXPORT FRAMEWORK -export * from "@open-discord-bots/framework/api" - -//EXPORT DEFAULT MODULES -export * from "./defaults/base" -export * from "./defaults/event" -export * from "./defaults/config" -export * from "./defaults/database" -export * from "./defaults/plugin" -export * from "./defaults/checker" -export * from "./defaults/client" -export * from "./defaults/language" -export * from "./defaults/builder" -export * from "./defaults/responder" -export * from "./defaults/action" -export * from "./defaults/flag" -export * from "./defaults/permission" -export * from "./defaults/helpmenu" -export * from "./defaults/session" -export * from "./defaults/stat" -export * from "./defaults/worker" -export * from "./defaults/code" -export * from "./defaults/cooldown" -export * from "./defaults/post" -export * from "./defaults/progressbar" -export * from "./defaults/startscreen" -export * from "./defaults/console" -export * from "./defaults/verifybar" -export * from "./defaults/fuse" - -//EXPORT OPENTICKET MODULES -export * from "./openticket/question" -export * from "./openticket/option" -export * from "./openticket/panel" -export * from "./openticket/ticket" -export * from "./openticket/blacklist" -export * from "./openticket/transcript" -export * from "./openticket/role" -export * from "./openticket/priority" - -//EXPORT MAIN MODULE -export { ODOpenTicketMain } from "./main" \ No newline at end of file diff --git a/src/core/api/openticket/blacklist.ts b/src/core/api/blacklist.ts similarity index 100% rename from src/core/api/openticket/blacklist.ts rename to src/core/api/blacklist.ts diff --git a/src/core/api/defaults/base.ts b/src/core/api/defaults/base.ts deleted file mode 100644 index cca2608..0000000 --- a/src/core/api/defaults/base.ts +++ /dev/null @@ -1,45 +0,0 @@ -/////////////////////////////////////// -//BASE MODULE -/////////////////////////////////////// -import * as api from "@open-discord-bots/framework/api" - -/**## ODVersionManagerIds_Default `interface` - * This interface is a list of ids available in the `ODVersionManager` class. - * It's used to generate typescript declarations for this class. - */ -export interface ODVersionManagerIds_Default { - "opendiscord:version":api.ODVersion, - "opendiscord:last-version":api.ODVersion, - "opendiscord:api":api.ODVersion, - "opendiscord:transcripts":api.ODVersion, - "opendiscord:livestatus":api.ODVersion -} - -/**## ODFlagManager_Default `default_class` - * This is a special class that adds type definitions & typescript to the ODFlagManager class. - * It doesn't add any extra features! - * - * This default class is made for the global variable `opendiscord.flags`! - */ -export class ODVersionManager_Default extends api.ODVersionManager { - get(id:VersionId): ODVersionManagerIds_Default[VersionId] - get(id:api.ODValidId): api.ODVersion|null - - get(id:api.ODValidId): api.ODVersion|null { - return super.get(id) - } - - remove(id:VersionId): ODVersionManagerIds_Default[VersionId] - remove(id:api.ODValidId): api.ODVersion|null - - remove(id:api.ODValidId): api.ODVersion|null { - return super.remove(id) - } - - exists(id:keyof ODVersionManagerIds_Default): boolean - exists(id:api.ODValidId): boolean - - exists(id:api.ODValidId): boolean { - return super.exists(id) - } -} \ No newline at end of file diff --git a/src/core/api/defaults/checker.ts b/src/core/api/defaults/checker.ts deleted file mode 100644 index 1ca332b..0000000 --- a/src/core/api/defaults/checker.ts +++ /dev/null @@ -1,384 +0,0 @@ -/////////////////////////////////////// -//DEFAULT CONFIG CHECKER MODULE -/////////////////////////////////////// -import * as api from "@open-discord-bots/framework/api" -import { ODLanguageManager_Default } from "./language" -import ansis from "ansis" - -/**## ODCheckerManagerIds_Default `interface` - * This interface is a list of ids available in the `ODCheckerManager_Default` class. - * It's used to generate typescript declarations for this class. - */ -export interface ODCheckerManagerIds_Default { - "opendiscord:general":api.ODChecker, - "opendiscord:questions":api.ODChecker, - "opendiscord:options":api.ODChecker, - "opendiscord:panels":api.ODChecker, - "opendiscord:transcripts":api.ODChecker -} - -/**## ODCheckerManager_Default `default_class` - * This is a special class that adds type definitions & typescript to the ODCheckerManager class. - * It doesn't add any extra features! - * - * This default class is made for the global variable `opendiscord.checkers`! - */ -export class ODCheckerManager_Default extends api.ODCheckerManager { - declare translation: ODCheckerTranslationRegister_Default - declare renderer: ODCheckerRenderer_Default - declare functions: ODCheckerFunctionManager_Default - - get(id:CheckerId): ODCheckerManagerIds_Default[CheckerId] - get(id:api.ODValidId): api.ODChecker|null - - get(id:api.ODValidId): api.ODChecker|null { - return super.get(id) - } - - remove(id:CheckerId): ODCheckerManagerIds_Default[CheckerId] - remove(id:api.ODValidId): api.ODChecker|null - - remove(id:api.ODValidId): api.ODChecker|null { - return super.remove(id) - } - - exists(id:keyof ODCheckerManagerIds_Default): boolean - exists(id:api.ODValidId): boolean - - exists(id:api.ODValidId): boolean { - return super.exists(id) - } -} - -/**## ODCheckerRenderer_Default `default_class` - * This is a special class that adds type definitions & features to the ODCheckerRenderer class. - * It contains the code that renders the default config checker. - * - * This default class is made for the global variable `opendiscord.checkers.renderer`! - */ -export class ODCheckerRenderer_Default extends api.ODCheckerRenderer { - extraHeaderText: string[] = [] - extraFooterText: string[] = [] - extraTopText: string[] = [] - extraBottomText: string[] = [] - - horizontalFiller: string = "=" - verticalFiller: string = "|" - descriptionSeparator: string = " => " - headerSeparator: string = " => " - footerTipPrefix: string = "=> " - - disableHeader: boolean = false - disableFooter: boolean = false - - getComponents(compact:boolean, renderEmpty:boolean, translation:ODCheckerTranslationRegister_Default, data:api.ODCheckerResult): string[] { - const tm = translation - const t = { - headerOpenticket:tm.get("other","opendiscord:header-openticket") ?? "OPEN TICKET", - headerConfigchecker:tm.get("other","opendiscord:header-configchecker") ?? "CONFIG CHECKER", - headerDescription:tm.get("other","opendiscord:header-description") ?? "check for errors in your config files!", - footerError:tm.get("other","opendiscord:footer-error") ?? "the bot won't start until all {0}'s are fixed!", - footerWarning:tm.get("other","opendiscord:footer-warning") ?? "it's recommended to fix all {0}'s before starting!", - footerSupport:tm.get("other","opendiscord:footer-support") ?? "SUPPORT: {0} - DOCS: {1}", - error:tm.get("other","opendiscord:type-error") ?? "[ERROR]", - warning:tm.get("other","opendiscord:type-warning") ?? "[WARNING]", - info:tm.get("other","opendiscord:type-info") ?? "[INFO]", - compactInfo:tm.get("other","opendiscord:compact-information") ?? "use {0} for more information!", - dataPath:tm.get("other","opendiscord:data-path") ?? "path", - dataDocs:tm.get("other","opendiscord:data-docs") ?? "docs", - dataMessage:tm.get("other","opendiscord:data-message") ?? "message" - } - const hasErrors = data.messages.filter((m) => m.type == "error").length > 0 - const hasWarnings = data.messages.filter((m) => m.type == "warning").length > 0 - const hasInfo = data.messages.filter((m) => m.type == "info").length > 0 - - if (!renderEmpty && !hasErrors && !hasWarnings && (!hasInfo || compact)) return [] - - const headerText = ansis.bold.hex("#f8ba00")(t.headerOpenticket)+" "+t.headerConfigchecker+this.headerSeparator+ansis.hex("#f8ba00")(t.headerDescription) - const footerErrorText = (hasErrors) ? this.footerTipPrefix+ansis.gray(tm.insertTranslationParams(t.footerError,[ansis.bold.red(t.error)])) : "" - const footerWarningText = (hasWarnings) ? this.footerTipPrefix+ansis.gray(tm.insertTranslationParams(t.footerWarning,[ansis.bold.yellow(t.warning)])) : "" - const footerSupportText = tm.insertTranslationParams(t.footerSupport,[ansis.green("https://discord.dj-dj.be"),ansis.green("https://otdocs.dj-dj.be")]) - const bottomCompactInfo = (compact) ? ansis.gray(tm.insertTranslationParams(t.compactInfo,[ansis.bold.green("npm start -- --checker")])) : "" - - const finalHeader = [headerText,...this.extraHeaderText] - const finalFooter = [footerErrorText,footerWarningText,footerSupportText,...this.extraFooterText] - const finalTop = [...this.extraTopText] - const finalBottom = [bottomCompactInfo,...this.extraBottomText] - const borderLength = this.#getLongestLength([...finalHeader,...finalFooter]) - - const finalComponents: string[] = [] - - //header - if (!this.disableHeader){ - finalHeader.forEach((text) => { - if (text.length < 1) return - finalComponents.push(this.#createBlockFromText(text,borderLength)) - }) - } - finalComponents.push(this.#getHorizontalDivider(borderLength+4)) - - //top - finalTop.forEach((text) => { - if (text.length < 1) return - finalComponents.push(this.verticalFiller+" "+text) - }) - finalComponents.push(this.verticalFiller) - - //messages - if (compact){ - //use compact messages - data.messages.forEach((msg,index) => { - //compact mode doesn't render info - if (msg.type == "info") return - - //check if translation available & use it if possible - const rawTranslation = tm.get("message",msg.messageId.value) - const translatedMessage = (rawTranslation) ? tm.insertTranslationParams(rawTranslation,msg.translationParams) : msg.message - - if (msg.type == "error") finalComponents.push(this.verticalFiller+" "+ansis.bold.red(`${t.error} ${translatedMessage}`)) - else if (msg.type == "warning") finalComponents.push(this.verticalFiller+" "+ansis.bold.yellow(`${t.warning} ${translatedMessage}`)) - - const pathSplitter = msg.path ? ":" : "" - finalComponents.push(this.verticalFiller+ansis.bold(this.descriptionSeparator)+ansis.cyan(`${ansis.magenta(msg.filepath+pathSplitter)} ${msg.path}`)) - if (index != data.messages.length-1) finalComponents.push(this.verticalFiller) - }) - }else{ - //use full messages - data.messages.forEach((msg,index) => { - //check if translation available & use it if possible - const rawTranslation = tm.get("message",msg.messageId.value) - const translatedMessage = (rawTranslation) ? tm.insertTranslationParams(rawTranslation,msg.translationParams) : msg.message - - if (msg.type == "error") finalComponents.push(this.verticalFiller+" "+ansis.bold.red(`${t.error} ${translatedMessage}`)) - else if (msg.type == "warning") finalComponents.push(this.verticalFiller+" "+ansis.bold.yellow(`${t.warning} ${translatedMessage}`)) - else if (msg.type == "info") finalComponents.push(this.verticalFiller+" "+ansis.bold.blue(`${t.info} ${translatedMessage}`)) - - const pathSplitter = msg.path ? ":" : "" - finalComponents.push(this.verticalFiller+" "+ansis.bold((t.dataPath)+this.descriptionSeparator)+ansis.cyan(`${ansis.magenta(msg.filepath+pathSplitter)} ${msg.path}`)) - if (msg.locationDocs) finalComponents.push(this.verticalFiller+" "+ansis.bold(t.dataDocs+this.descriptionSeparator)+ansis.italic.gray(msg.locationDocs)) - if (msg.messageDocs) finalComponents.push(this.verticalFiller+" "+ansis.bold(t.dataMessage+this.descriptionSeparator)+ansis.italic.gray(msg.messageDocs)) - if (index != data.messages.length-1) finalComponents.push(this.verticalFiller) - }) - } - - //bottom - finalComponents.push(this.verticalFiller) - finalBottom.forEach((text) => { - if (text.length < 1) return - finalComponents.push(this.verticalFiller+" "+text) - }) - - //footer - finalComponents.push(this.#getHorizontalDivider(borderLength+4)) - if (!this.disableFooter){ - finalFooter.forEach((text) => { - if (text.length < 1) return - finalComponents.push(this.#createBlockFromText(text,borderLength)) - }) - finalComponents.push(this.#getHorizontalDivider(borderLength+4)) - } - - //return all components - return finalComponents - } - /**Get the length of the longest string in the array. */ - #getLongestLength(texts:string[]): number { - return Math.max(...texts.map((t) => ansis.strip(t).length)) - } - /**Get a horizontal divider used between different parts of the config checker result. */ - #getHorizontalDivider(width:number): string { - if (width > 2) width = width-2 - else return this.verticalFiller+this.verticalFiller - let divider = this.verticalFiller + this.horizontalFiller.repeat(width) + this.verticalFiller - return divider - } - /**Create a block of text with a vertical divider on the left & right side. */ - #createBlockFromText(text:string,width:number): string { - if (width < 3) return this.verticalFiller+this.verticalFiller - let newWidth = width-ansis.strip(text).length+1 - let final = this.verticalFiller+" "+text+" ".repeat(newWidth)+this.verticalFiller - return final - } -} - -/**## ODCheckerTranslationRegisterOtherIds_Default `interface` - * This interface is a list of ids available in the `ODCheckerTranslationRegister_Default` class. - * It's used to generate typescript declarations for this class. - */ -export type ODCheckerTranslationRegisterOtherIds_Default = ( - "opendiscord:header-openticket"| - "opendiscord:header-configchecker"| - "opendiscord:header-description"| - "opendiscord:type-error"| - "opendiscord:type-warning"| - "opendiscord:type-info"| - "opendiscord:data-path"| - "opendiscord:data-docs"| - "opendiscord:data-message"| - "opendiscord:compact-information"| - "opendiscord:footer-error"| - "opendiscord:footer-warning"| - "opendiscord:footer-support" -) - -/**## ODCheckerTranslationRegisterMessageIds_Default `interface` - * This interface is a list of ids available in the `ODCheckerTranslationRegister_Default` class. - * It's used to generate typescript declarations for this class. - */ -export type ODCheckerTranslationRegisterMessageIds_Default = ( - "opendiscord:invalid-type"| - "opendiscord:property-missing"| - "opendiscord:property-optional"| - "opendiscord:object-disabled"| - "opendiscord:null-invalid"| - "opendiscord:switch-invalid-type"| - "opendiscord:object-switch-invalid-type"| - - "opendiscord:string-too-short"| - "opendiscord:string-too-long"| - "opendiscord:string-length-invalid"| - "opendiscord:string-starts-with"| - "opendiscord:string-ends-with"| - "opendiscord:string-contains"| - "opendiscord:string-inverted-contains"| - "opendiscord:string-choices"| - "opendiscord:string-lowercase"| - "opendiscord:string-uppercase"| - "opendiscord:string-special-characters"| - "opendiscord:string-no-spaces"| - "opendiscord:string-regex"| - "opendiscord:string-capital-word"| - "opendiscord:string-capital-sentence"| - "opendiscord:string-punctuation"| - - "opendiscord:number-nan"| - "opendiscord:number-too-short"| - "opendiscord:number-too-long"| - "opendiscord:number-length-invalid"| - "opendiscord:number-too-small"| - "opendiscord:number-too-large"| - "opendiscord:number-not-equal"| - "opendiscord:number-step"| - "opendiscord:number-step-offset"| - "opendiscord:number-starts-with"| - "opendiscord:number-ends-with"| - "opendiscord:number-contains"| - "opendiscord:number-inverted-contains"| - "opendiscord:number-choices"| - "opendiscord:number-float"| - "opendiscord:number-negative"| - "opendiscord:number-positive"| - "opendiscord:number-zero"| - - "opendiscord:boolean-true"| - "opendiscord:boolean-false"| - - "opendiscord:array-empty-disabled"| - "opendiscord:array-empty-required"| - "opendiscord:array-too-short"| - "opendiscord:array-too-long"| - "opendiscord:array-length-invalid"| - "opendiscord:array-invalid-types"| - "opendiscord:array-double"| - - "opendiscord:discord-invalid-id"| - "opendiscord:discord-invalid-id-options"| - "opendiscord:discord-invalid-token"| - "opendiscord:color-invalid"| - "opendiscord:emoji-too-short"| - "opendiscord:emoji-too-long"| - "opendiscord:emoji-custom"| - "opendiscord:emoji-invalid"| - "opendiscord:url-invalid"| - "opendiscord:url-invalid-http"| - "opendiscord:url-invalid-protocol"| - "opendiscord:url-invalid-hostname"| - "opendiscord:url-invalid-extension"| - "opendiscord:url-invalid-path"| - "opendiscord:id-not-unique"| - "opendiscord:id-non-existent"| - - "opendiscord:invalid-language"| - "opendiscord:invalid-button"| - "opendiscord:unused-option"| - "opendiscord:unused-question"| - "opendiscord:dropdown-option" -) - -/**## ODCheckerTranslationRegister_Default `default_class` - * This is a special class that adds type definitions & typescript to the ODCheckerTranslationRegister class. - * It doesn't add any extra features! - * - * This default class is made for the global variable `opendiscord.checkers.translation`! - */ -export class ODCheckerTranslationRegister_Default extends api.ODCheckerTranslationRegister { - get(type:"other", id:ODCheckerTranslationRegisterOtherIds_Default): string - get(type:"message", id:ODCheckerTranslationRegisterMessageIds_Default): string - get(type:"message"|"other", id:string): string|null - - get(type:"message"|"other", id:string): string|null { - return super.get(type,id) - } - - set(type:"other", id:ODCheckerTranslationRegisterOtherIds_Default, translation:string): boolean - set(type:"message", id:ODCheckerTranslationRegisterMessageIds_Default, translation:string): boolean - set(type:"message"|"other", id:string, translation:string): boolean - - set(type:"message"|"other", id:string, translation:string): boolean { - return super.set(type,id,translation) - } - - delete(type:"other", id:ODCheckerTranslationRegisterOtherIds_Default): boolean - delete(type:"message", id:ODCheckerTranslationRegisterMessageIds_Default): boolean - delete(type:"message"|"other", id:string): boolean - - delete(type:"message"|"other", id:string): boolean { - return super.delete(type,id) - } - - quickTranslate(manager:ODLanguageManager_Default, translationId:string, type:"other"|"message", id:ODCheckerTranslationRegisterOtherIds_Default|ODCheckerTranslationRegisterMessageIds_Default) - quickTranslate(manager:ODLanguageManager_Default, translationId:string, type:"other"|"message", id:string) - - quickTranslate(manager:ODLanguageManager_Default, translationId:string, type:"other"|"message", id:ODCheckerTranslationRegisterOtherIds_Default|ODCheckerTranslationRegisterMessageIds_Default|string){ - super.quickTranslate(manager,translationId,type,id) - } -} - -/**## ODCheckerFunctionManagerIds_Default `interface` - * This interface is a list of ids available in the `ODCheckerFunctionManager_Default` class. - * It's used to generate typescript declarations for this class. - */ -export interface ODCheckerFunctionManagerIds_Default { - "opendiscord:unused-options":api.ODCheckerFunction, - "opendiscord:unused-questions":api.ODCheckerFunction, - "opendiscord:dropdown-options":api.ODCheckerFunction -} - -/**## ODCheckerFunctionManager_Default `default_class` - * This is a special class that adds type definitions & typescript to the ODCheckerFunctionManager class. - * It doesn't add any extra features! - * - * This default class is made for the global variable `opendiscord.checkers.functions`! - */ -export class ODCheckerFunctionManager_Default extends api.ODCheckerFunctionManager { - get(id:CheckerFunctionId): ODCheckerFunctionManagerIds_Default[CheckerFunctionId] - get(id:api.ODValidId): api.ODCheckerFunction|null - - get(id:api.ODValidId): api.ODCheckerFunction|null { - return super.get(id) - } - - remove(id:CheckerFunctionId): ODCheckerFunctionManagerIds_Default[CheckerFunctionId] - remove(id:api.ODValidId): api.ODCheckerFunction|null - - remove(id:api.ODValidId): api.ODCheckerFunction|null { - return super.remove(id) - } - - exists(id:keyof ODCheckerFunctionManagerIds_Default): boolean - exists(id:api.ODValidId): boolean - - exists(id:api.ODValidId): boolean { - return super.exists(id) - } -} \ No newline at end of file diff --git a/src/core/api/defaults/client.ts b/src/core/api/defaults/client.ts deleted file mode 100644 index 8cfcaab..0000000 --- a/src/core/api/defaults/client.ts +++ /dev/null @@ -1,206 +0,0 @@ -/////////////////////////////////////// -//DEFAULT CLIENT MODULE -/////////////////////////////////////// -import * as api from "@open-discord-bots/framework/api" - -/** (CONTRIBUTOR GUIDE) HOW TO ADD NEW COMMANDS? - * - Register the command in loadAllSlashCommands() & loadAllTextCommands() in (./src/data/framework/commandLoader.ts) - * - Add autocomplete for the command in OD(Slash/Text)CommandManagerIds_Default in (./src/core/api/defaults/client.ts) - * - Add the command to the help menu in (./src/data/framework/helpMenuLoader.ts) - * - If required, new config variables should be added (incl. logs, dm-logs & permissions). - * - Update the Open Ticket Documentation. - * - If the command contains complex logic or can be executed from a button/dropdown, it should be placed inside an `ODAction`. - * - Check all files, test the bot carefully & try a lot of different scenario's with different settings. - */ - -/**## ODClientManager_Default `default_class` - * This is a special class that adds type definitions & typescript to the ODClientManager class. - * It doesn't add any extra features! - * - * This default class is made for the global variable `opendiscord.client`! - */ -export class ODClientManager_Default extends api.ODClientManager { - declare slashCommands: ODSlashCommandManager_Default - declare textCommands: ODTextCommandManager_Default - declare contextMenus: ODContextMenuManager_Default -} - -/**## ODSlashCommandManagerIds_Default `interface` - * This interface is a list of ids available in the `ODSlashCommandManager_Default` class. - * It's used to generate typescript declarations for this class. - */ -export interface ODSlashCommandManagerIds_Default { - "opendiscord:help":api.ODSlashCommand, - "opendiscord:panel":api.ODSlashCommand, - "opendiscord:ticket":api.ODSlashCommand, - "opendiscord:close":api.ODSlashCommand, - "opendiscord:delete":api.ODSlashCommand, - "opendiscord:reopen":api.ODSlashCommand, - "opendiscord:claim":api.ODSlashCommand, - "opendiscord:unclaim":api.ODSlashCommand, - "opendiscord:pin":api.ODSlashCommand, - "opendiscord:unpin":api.ODSlashCommand, - "opendiscord:move":api.ODSlashCommand, - "opendiscord:rename":api.ODSlashCommand, - "opendiscord:add":api.ODSlashCommand, - "opendiscord:remove":api.ODSlashCommand, - "opendiscord:blacklist":api.ODSlashCommand, - "opendiscord:stats":api.ODSlashCommand, - "opendiscord:clear":api.ODSlashCommand, - "opendiscord:autoclose":api.ODSlashCommand, - "opendiscord:autodelete":api.ODSlashCommand, - "opendiscord:topic":api.ODSlashCommand, - "opendiscord:priority":api.ODSlashCommand, - "opendiscord:transfer":api.ODSlashCommand, -} - -/**## ODSlashCommandManager_Default `default_class` - * This is a special class that adds type definitions & typescript to the ODSlashCommandManager class. - * It doesn't add any extra features! - * - * This default class is made for the global variable `opendiscord.client.slashCommands`! - */ -export class ODSlashCommandManager_Default extends api.ODSlashCommandManager { - get(id:SlashCommandId): ODSlashCommandManagerIds_Default[SlashCommandId] - get(id:api.ODValidId): api.ODSlashCommand|null - - get(id:api.ODValidId): api.ODSlashCommand|null { - return super.get(id) - } - - remove(id:SlashCommandId): ODSlashCommandManagerIds_Default[SlashCommandId] - remove(id:api.ODValidId): api.ODSlashCommand|null - - remove(id:api.ODValidId): api.ODSlashCommand|null { - return super.remove(id) - } - - exists(id:keyof ODSlashCommandManagerIds_Default): boolean - exists(id:api.ODValidId): boolean - - exists(id:api.ODValidId): boolean { - return super.exists(id) - } - - onInteraction(commandName:keyof ODSlashCommandManagerIds_Default, callback:api.ODSlashCommandInteractionCallback): void - onInteraction(commandName:string|RegExp, callback:api.ODSlashCommandInteractionCallback): void - - onInteraction(commandName:string|RegExp, callback:api.ODSlashCommandInteractionCallback): void { - return super.onInteraction(commandName,callback) - } -} - -/**## ODTextCommandManagerIds_Default `interface` - * This interface is a list of ids available in the `ODTextCommandManager_Default` class. - * It's used to generate typescript declarations for this class. - */ -export interface ODTextCommandManagerIds_Default { - "opendiscord:dump":api.ODTextCommand, - "opendiscord:help":api.ODTextCommand, - "opendiscord:panel":api.ODTextCommand, - "opendiscord:close":api.ODTextCommand, - "opendiscord:delete":api.ODTextCommand, - "opendiscord:reopen":api.ODTextCommand, - "opendiscord:claim":api.ODTextCommand, - "opendiscord:unclaim":api.ODTextCommand, - "opendiscord:pin":api.ODTextCommand, - "opendiscord:unpin":api.ODTextCommand, - "opendiscord:move":api.ODTextCommand, - "opendiscord:rename":api.ODTextCommand, - "opendiscord:add":api.ODTextCommand, - "opendiscord:remove":api.ODTextCommand, - "opendiscord:blacklist-view":api.ODTextCommand, - "opendiscord:blacklist-add":api.ODTextCommand, - "opendiscord:blacklist-remove":api.ODTextCommand, - "opendiscord:blacklist-get":api.ODTextCommand, - "opendiscord:stats-global":api.ODTextCommand, - "opendiscord:stats-reset":api.ODTextCommand, - "opendiscord:stats-ticket":api.ODTextCommand, - "opendiscord:stats-user":api.ODTextCommand, - "opendiscord:clear":api.ODTextCommand, - "opendiscord:autoclose-disable":api.ODTextCommand, - "opendiscord:autoclose-enable":api.ODTextCommand, - "opendiscord:autodelete-disable":api.ODTextCommand, - "opendiscord:autodelete-enable":api.ODTextCommand, - "opendiscord:topic-set":api.ODTextCommand, - "opendiscord:priority-set":api.ODTextCommand, - "opendiscord:priority-get":api.ODTextCommand, - "opendiscord:transfer":api.ODTextCommand, -} - -/**## ODTextCommandManager_Default `default_class` - * This is a special class that adds type definitions & typescript to the ODTextCommandManager class. - * It doesn't add any extra features! - * - * This default class is made for the global variable `opendiscord.client.textCommands`! - */ -export class ODTextCommandManager_Default extends api.ODTextCommandManager { - get(id:TextCommandId): ODTextCommandManagerIds_Default[TextCommandId] - get(id:api.ODValidId): api.ODTextCommand|null - - get(id:api.ODValidId): api.ODTextCommand|null { - return super.get(id) - } - - remove(id:TextCommandId): ODTextCommandManagerIds_Default[TextCommandId] - remove(id:api.ODValidId): api.ODTextCommand|null - - remove(id:api.ODValidId): api.ODTextCommand|null { - return super.remove(id) - } - - exists(id:keyof ODTextCommandManagerIds_Default): boolean - exists(id:api.ODValidId): boolean - - exists(id:api.ODValidId): boolean { - return super.exists(id) - } - - onInteraction(commandPrefix:string, commandName:string|RegExp, callback:api.ODTextCommandInteractionCallback): void { - return super.onInteraction(commandPrefix,commandName,callback) - } -} - -/**## ODContextMenuManagerIds_Default `interface` - * This interface is a list of ids available in the `ODContextMenuManager_Default` class. - * It's used to generate typescript declarations for this class. - */ -export interface ODContextMenuManagerIds_Default { - //"opendiscord:test-menu":ODContextMenu -} - -/**## ODContextMenuManager_Default `default_class` - * This is a special class that adds type definitions & typescript to the ODContextMenuManager class. - * It doesn't add any extra features! - * - * This default class is made for the global variable `opendiscord.client.contextMenus`! - */ -export class ODContextMenuManager_Default extends api.ODContextMenuManager { - get(id:ContextMenuId): ODContextMenuManagerIds_Default[ContextMenuId] - get(id:api.ODValidId): api.ODContextMenu|null - - get(id:api.ODValidId): api.ODContextMenu|null { - return super.get(id) - } - - remove(id:ContextMenuId): ODContextMenuManagerIds_Default[ContextMenuId] - remove(id:api.ODValidId): api.ODContextMenu|null - - remove(id:api.ODValidId): api.ODContextMenu|null { - return super.remove(id) - } - - exists(id:keyof ODContextMenuManagerIds_Default): boolean - exists(id:api.ODValidId): boolean - - exists(id:api.ODValidId): boolean { - return super.exists(id) - } - - onInteraction(menuName:keyof ODContextMenuManagerIds_Default, callback:api.ODContextMenuInteractionCallback): void - onInteraction(menuName:string|RegExp, callback:api.ODContextMenuInteractionCallback): void - - onInteraction(menuName:string|RegExp, callback:api.ODContextMenuInteractionCallback): void { - return super.onInteraction(menuName,callback) - } -} \ No newline at end of file diff --git a/src/core/api/defaults/code.ts b/src/core/api/defaults/code.ts deleted file mode 100644 index edb0db9..0000000 --- a/src/core/api/defaults/code.ts +++ /dev/null @@ -1,56 +0,0 @@ -/////////////////////////////////////// -//DEFAULT CODE MODULE -/////////////////////////////////////// -import * as api from "@open-discord-bots/framework/api" - -/**## ODCodeManagerIds_Default `interface` - * This interface is a list of ids available in the `ODCodeManager_Default` class. - * It's used to generate typescript declarations for this class. - */ -export interface ODCodeManagerIds_Default { - "opendiscord:command-error-handling":api.ODCode, - "opendiscord:start-listening-interactions":api.ODCode, - "opendiscord:panel-database-cleaner":api.ODCode, - "opendiscord:suffix-database-cleaner":api.ODCode, - "opendiscord:option-database-cleaner":api.ODCode, - "opendiscord:user-database-cleaner":api.ODCode, - "opendiscord:ticket-database-cleaner":api.ODCode, - "opendiscord:panel-auto-update":api.ODCode, - "opendiscord:ticket-saver":api.ODCode, - "opendiscord:blacklist-saver":api.ODCode, - "opendiscord:auto-role-on-join":api.ODCode, - "opendiscord:autoclose-timeout":api.ODCode, - "opendiscord:autoclose-leave":api.ODCode, - "opendiscord:autodelete-timeout":api.ODCode, - "opendiscord:autodelete-leave":api.ODCode, - "opendiscord:ticket-anti-busy":api.ODCode, -} - -/**## ODCodeManager_Default `default_class` - * This is a special class that adds type definitions & typescript to the ODCodeManager class. - * It doesn't add any extra features! - * - * This default class is made for the global variable `opendiscord.code`! - */ -export class ODCodeManager_Default extends api.ODCodeManager { - get(id:CodeId): ODCodeManagerIds_Default[CodeId] - get(id:api.ODValidId): api.ODCode|null - - get(id:api.ODValidId): api.ODCode|null { - return super.get(id) - } - - remove(id:CodeId): ODCodeManagerIds_Default[CodeId] - remove(id:api.ODValidId): api.ODCode|null - - remove(id:api.ODValidId): api.ODCode|null { - return super.remove(id) - } - - exists(id:keyof ODCodeManagerIds_Default): boolean - exists(id:api.ODValidId): boolean - - exists(id:api.ODValidId): boolean { - return super.exists(id) - } -} \ No newline at end of file diff --git a/src/core/api/defaults/console.ts b/src/core/api/defaults/console.ts deleted file mode 100644 index 22e7089..0000000 --- a/src/core/api/defaults/console.ts +++ /dev/null @@ -1,41 +0,0 @@ -/////////////////////////////////////// -//DEFAULT CONSOLE MODULE -/////////////////////////////////////// -import * as api from "@open-discord-bots/framework/api" - -/**## ODLiveStatusManagerIds_Default `interface` - * This interface is a list of ids available in the `ODLiveStatusManager_Default` class. - * It's used to generate typescript declarations for this class. - */ -export interface ODLiveStatusManagerIds_Default { - "opendiscord:default-djdj-dev":api.ODLiveStatusUrlSource -} - -/**## ODLiveStatusManager_Default `default_class` - * This is a special class that adds type definitions & typescript to the ODLiveStatusManager class. - * It doesn't add any extra features! - * - * This default class is made for the global variable `opendiscord.livestatus`! - */ -export class ODLiveStatusManager_Default extends api.ODLiveStatusManager { - get(id:LiveStatusId): ODLiveStatusManagerIds_Default[LiveStatusId] - get(id:api.ODValidId): api.ODLiveStatusSource|null - - get(id:api.ODValidId): api.ODLiveStatusSource|null { - return super.get(id) - } - - remove(id:LiveStatusId): ODLiveStatusManagerIds_Default[LiveStatusId] - remove(id:api.ODValidId): api.ODLiveStatusSource|null - - remove(id:api.ODValidId): api.ODLiveStatusSource|null { - return super.remove(id) - } - - exists(id:keyof ODLiveStatusManagerIds_Default): boolean - exists(id:api.ODValidId): boolean - - exists(id:api.ODValidId): boolean { - return super.exists(id) - } -} \ No newline at end of file diff --git a/src/core/api/defaults/cooldown.ts b/src/core/api/defaults/cooldown.ts deleted file mode 100644 index 29a4ab9..0000000 --- a/src/core/api/defaults/cooldown.ts +++ /dev/null @@ -1,41 +0,0 @@ -/////////////////////////////////////// -//DEFAULT COOLDOWN MODULE -/////////////////////////////////////// -import * as api from "@open-discord-bots/framework/api" - -/**## ODCooldownManagerIds_Default `interface` - * This interface is a list of ids available in the `ODCooldownManager_Default` class. - * It's used to generate typescript declarations for this class. - */ -export interface ODCooldownManagerIds_Default { - -} - -/**## ODCooldownManager_Default `default_class` - * This is a special class that adds type definitions & typescript to the ODCooldownManager class. - * It doesn't add any extra features! - * - * This default class is made for the global variable `opendiscord.cooldowns`! - */ -export class ODCooldownManager_Default extends api.ODCooldownManager { - get(id:CooldownId): ODCooldownManagerIds_Default[CooldownId] - get(id:api.ODValidId): api.ODCooldown|null - - get(id:api.ODValidId): api.ODCooldown|null { - return super.get(id) - } - - remove(id:CooldownId): ODCooldownManagerIds_Default[CooldownId] - remove(id:api.ODValidId): api.ODCooldown|null - - remove(id:api.ODValidId): api.ODCooldown|null { - return super.remove(id) - } - - exists(id:keyof ODCooldownManagerIds_Default): boolean - exists(id:api.ODValidId): boolean - - exists(id:api.ODValidId): boolean { - return super.exists(id) - } -} \ No newline at end of file diff --git a/src/core/api/defaults/database.ts b/src/core/api/defaults/database.ts deleted file mode 100644 index a4183c4..0000000 --- a/src/core/api/defaults/database.ts +++ /dev/null @@ -1,256 +0,0 @@ -/////////////////////////////////////// -//DEFAULT DATABASE MODULE -/////////////////////////////////////// -import * as api from "@open-discord-bots/framework/api" -import { ODTicketJson } from "../openticket/ticket" -import { ODOptionJson } from "../openticket/option" - -/**## ODDatabaseManagerIds_Default `interface` - * This interface is a list of ids available in the `ODDatabaseManager_Default` class. - * It's used to generate typescript declarations for this class. - */ -export interface ODDatabaseManagerIds_Default { - "opendiscord:global":ODFormattedJsonDatabase_DefaultGlobal, - "opendiscord:stats":api.ODFormattedJsonDatabase, - "opendiscord:tickets":ODFormattedJsonDatabase_DefaultTickets, - "opendiscord:users":ODFormattedJsonDatabase_DefaultUsers, - "opendiscord:options":ODFormattedJsonDatabase_DefaultOptions, -} - -/**## ODDatabaseManager_Default `default_class` - * This is a special class that adds type definitions & typescript to the ODDatabaseManager class. - * It doesn't add any extra features! - * - * This default class is made for the global variable `opendiscord.databases`! - */ -export class ODDatabaseManager_Default extends api.ODDatabaseManager { - get(id:DatabaseId): ODDatabaseManagerIds_Default[DatabaseId] - get(id:api.ODValidId): api.ODDatabase|null - - get(id:api.ODValidId): api.ODDatabase|null { - return super.get(id) - } - - remove(id:DatabaseId): ODDatabaseManagerIds_Default[DatabaseId] - remove(id:api.ODValidId): api.ODDatabase|null - - remove(id:api.ODValidId): api.ODDatabase|null { - return super.remove(id) - } - - exists(id:keyof ODDatabaseManagerIds_Default): boolean - exists(id:api.ODValidId): boolean - - exists(id:api.ODValidId): boolean { - return super.exists(id) - } -} - -/**## ODFormattedJsonDatabaseIds_DefaultGlobal `type` - * This interface is a list of ids available in the `ODFormattedJsonDatabase_DefaultGlobal` class. - * It's used to generate typescript declarations for this class. - */ -export interface ODFormattedJsonDatabaseIds_DefaultGlobal { - "opendiscord:panel-message":string, - "opendiscord:panel-update":string, - "opendiscord:option-suffix-counter":number, - "opendiscord:option-suffix-history":string[], - "opendiscord:last-version":string -} - -/**## ODFormattedJsonDatabase_DefaultGlobal `default_class` - * This is a special class that adds type definitions & typescript to the ODFormattedJsonDatabase class. - * It doesn't add any extra features! - * - * This default class is made for the `global.json` database! - */ -export class ODFormattedJsonDatabase_DefaultGlobal extends api.ODFormattedJsonDatabase { - set(category:CategoryId, key:string, value:ODFormattedJsonDatabaseIds_DefaultGlobal[CategoryId]): api.ODOptionalPromise - set(category:string, key:string, value:api.ODValidJsonType): api.ODOptionalPromise - - set(category:string, key:string, value:api.ODValidJsonType): api.ODOptionalPromise { - return super.set(category,key,value) - } - - get(category:CategoryId, key:string): api.ODOptionalPromise - get(category:string, key:string): api.ODOptionalPromise - - get(category:string, key:string): api.ODOptionalPromise { - return super.get(category,key) - } - - delete(category:CategoryId, key:string): api.ODOptionalPromise - delete(category:string, key:string): api.ODOptionalPromise - - delete(category:string, key:string): api.ODOptionalPromise { - return super.delete(category,key) - } - - exists(category:keyof ODFormattedJsonDatabaseIds_DefaultGlobal, key:string): api.ODOptionalPromise - exists(category:string, key:string): api.ODOptionalPromise - - exists(category:string, key:string): api.ODOptionalPromise { - return super.exists(category,key) - } - - getCategory(category:CategoryId): api.ODOptionalPromise<{key:string, value:ODFormattedJsonDatabaseIds_DefaultGlobal[CategoryId]}[]|undefined> - getCategory(category:string): api.ODOptionalPromise<{key:string, value:api.ODValidJsonType}[]|undefined> - - getCategory(category:string): api.ODOptionalPromise<{key:string, value:api.ODValidJsonType}[]|undefined> { - return super.getCategory(category) - } -} - -/**## ODFormattedJsonDatabaseIds_DefaultTickets `type` - * This interface is a list of ids available in the `ODDatabaseManager_Default` class. - * It's used to generate typescript declarations for this class. - */ -export interface ODFormattedJsonDatabaseIds_DefaultTickets { - "opendiscord:ticket":ODTicketJson -} - -/**## ODFormattedJsonDatabase_DefaultTickets `default_class` - * This is a special class that adds type definitions & typescript to the ODFormattedJsonDatabase class. - * It doesn't add any extra features! - * - * This default class is made for the `tickets.json` database! - */ -export class ODFormattedJsonDatabase_DefaultTickets extends api.ODFormattedJsonDatabase { - set(category:CategoryId, key:string, value:ODFormattedJsonDatabaseIds_DefaultTickets[CategoryId]): api.ODOptionalPromise - set(category:string, key:string, value:api.ODValidJsonType): api.ODOptionalPromise - - set(category:string, key:string, value:api.ODValidJsonType): api.ODOptionalPromise { - return super.set(category,key,value) - } - - get(category:CategoryId, key:string): api.ODOptionalPromise - get(category:string, key:string): api.ODOptionalPromise - - get(category:string, key:string): api.ODOptionalPromise { - return super.get(category,key) - } - - delete(category:CategoryId, key:string): api.ODOptionalPromise - delete(category:string, key:string): api.ODOptionalPromise - - delete(category:string, key:string): api.ODOptionalPromise { - return super.delete(category,key) - } - - exists(category:keyof ODFormattedJsonDatabaseIds_DefaultTickets, key:string): api.ODOptionalPromise - exists(category:string, key:string): api.ODOptionalPromise - - exists(category:string, key:string): api.ODOptionalPromise { - return super.exists(category,key) - } - - getCategory(category:CategoryId): api.ODOptionalPromise<{key:string, value:ODFormattedJsonDatabaseIds_DefaultTickets[CategoryId]}[]|undefined> - getCategory(category:string): api.ODOptionalPromise<{key:string, value:api.ODValidJsonType}[]|undefined> - - getCategory(category:string): api.ODOptionalPromise<{key:string, value:api.ODValidJsonType}[]|undefined> { - return super.getCategory(category) - } -} - -/**## ODFormattedJsonDatabaseIds_DefaultUsers `type` - * This interface is a list of ids available in the `ODDatabaseManager_Default` class. - * It's used to generate typescript declarations for this class. - */ -export interface ODFormattedJsonDatabaseIds_DefaultUsers { - "opendiscord:blacklist":ODTicketJson -} - -/**## ODFormattedJsonDatabase_DefaultUsers `default_class` - * This is a special class that adds type definitions & typescript to the ODFormattedJsonDatabase class. - * It doesn't add any extra features! - * - * This default class is made for the `users.json` database! - */ -export class ODFormattedJsonDatabase_DefaultUsers extends api.ODFormattedJsonDatabase { - set(category:CategoryId, key:string, value:ODFormattedJsonDatabaseIds_DefaultUsers[CategoryId]): api.ODOptionalPromise - set(category:string, key:string, value:api.ODValidJsonType): api.ODOptionalPromise - - set(category:string, key:string, value:api.ODValidJsonType): api.ODOptionalPromise { - return super.set(category,key,value) - } - - get(category:CategoryId, key:string): api.ODOptionalPromise - get(category:string, key:string): api.ODOptionalPromise - - get(category:string, key:string): api.ODOptionalPromise { - return super.get(category,key) - } - - delete(category:CategoryId, key:string): api.ODOptionalPromise - delete(category:string, key:string): api.ODOptionalPromise - - delete(category:string, key:string): api.ODOptionalPromise { - return super.delete(category,key) - } - - exists(category:keyof ODFormattedJsonDatabaseIds_DefaultUsers, key:string): api.ODOptionalPromise - exists(category:string, key:string): api.ODOptionalPromise - - exists(category:string, key:string): api.ODOptionalPromise { - return super.exists(category,key) - } - - getCategory(category:CategoryId): api.ODOptionalPromise<{key:string, value:ODFormattedJsonDatabaseIds_DefaultUsers[CategoryId]}[]|undefined> - getCategory(category:string): api.ODOptionalPromise<{key:string, value:api.ODValidJsonType}[]|undefined> - - getCategory(category:string): api.ODOptionalPromise<{key:string, value:api.ODValidJsonType}[]|undefined> { - return super.getCategory(category) - } -} - - -/**## ODFormattedJsonDatabaseIds_DefaultOptions `type` - * This interface is a list of ids available in the `ODDatabaseManager_Default` class. - * It's used to generate typescript declarations for this class. - */ -export interface ODFormattedJsonDatabaseIds_DefaultOptions { - "opendiscord:used-option":ODOptionJson -} - -/**## ODFormattedJsonDatabase_DefaultOptions `default_class` - * This is a special class that adds type definitions & typescript to the ODFormattedJsonDatabase class. - * It doesn't add any extra features! - * - * This default class is made for the `options.json` database! - */ -export class ODFormattedJsonDatabase_DefaultOptions extends api.ODFormattedJsonDatabase { - set(category:CategoryId, key:string, value:ODFormattedJsonDatabaseIds_DefaultOptions[CategoryId]): api.ODOptionalPromise - set(category:string, key:string, value:api.ODValidJsonType): api.ODOptionalPromise - - set(category:string, key:string, value:api.ODValidJsonType): api.ODOptionalPromise { - return super.set(category,key,value) - } - - get(category:CategoryId, key:string): api.ODOptionalPromise - get(category:string, key:string): api.ODOptionalPromise - - get(category:string, key:string): api.ODOptionalPromise { - return super.get(category,key) - } - - delete(category:CategoryId, key:string): api.ODOptionalPromise - delete(category:string, key:string): api.ODOptionalPromise - - delete(category:string, key:string): api.ODOptionalPromise { - return super.delete(category,key) - } - - exists(category:keyof ODFormattedJsonDatabaseIds_DefaultOptions, key:string): api.ODOptionalPromise - exists(category:string, key:string): api.ODOptionalPromise - - exists(category:string, key:string): api.ODOptionalPromise { - return super.exists(category,key) - } - - getCategory(category:CategoryId): api.ODOptionalPromise<{key:string, value:ODFormattedJsonDatabaseIds_DefaultOptions[CategoryId]}[]|undefined> - getCategory(category:string): api.ODOptionalPromise<{key:string, value:api.ODValidJsonType}[]|undefined> - - getCategory(category:string): api.ODOptionalPromise<{key:string, value:api.ODValidJsonType}[]|undefined> { - return super.getCategory(category) - } -} \ No newline at end of file diff --git a/src/core/api/defaults/event.ts b/src/core/api/defaults/event.ts deleted file mode 100644 index 2dbc9fc..0000000 --- a/src/core/api/defaults/event.ts +++ /dev/null @@ -1,384 +0,0 @@ -/////////////////////////////////////// -//DEFAULT EVENT MODULE -/////////////////////////////////////// -//BASE MODULES -import * as api from "@open-discord-bots/framework/api" -import * as discord from "discord.js" - -//DEFAULT MODULES -import { ODPluginClassManager_Default, ODPluginManager_Default } from "./plugin" -import { ODConfigManager_Default} from "./config" -import { ODDatabaseManager_Default } from "./database" -import { ODFlagManager_Default } from "./flag" -import { ODSessionManager_Default } from "./session" -import { ODLanguageManager_Default } from "./language" -import { ODCheckerFunctionManager_Default, ODCheckerManager_Default, ODCheckerRenderer_Default, ODCheckerTranslationRegister_Default } from "./checker" -import { ODClientManager_Default, ODContextMenuManager_Default, ODSlashCommandManager_Default, ODTextCommandManager_Default } from "./client" -import { ODBuilderManager_Default, ODButtonManager_Default, ODDropdownManager_Default, ODEmbedManager_Default, ODFileManager_Default, ODMessageManager_Default, ODModalManager_Default } from "./builder" -import { ODAutocompleteResponderManager_Default, ODButtonResponderManager_Default, ODCommandResponderManager_Default, ODContextMenuResponderManager_Default, ODDropdownResponderManager_Default, ODModalResponderManager_Default, ODResponderManager_Default } from "./responder" -import { ODActionManager_Default } from "./action" -import { ODPermissionManager_Default } from "./permission" -import { ODHelpMenuManager_Default } from "./helpmenu" -import { ODStatsManager_Default } from "./stat" -import { ODCodeManager_Default } from "./code" -import { ODCooldownManager_Default } from "./cooldown" -import { ODPostManager_Default } from "./post" -import { ODVerifyBarManager_Default } from "./verifybar" -import { ODStartScreenManager_Default } from "./startscreen" -import { ODLiveStatusManager_Default } from "./console" -import { ODProgressBarManager_Default, ODProgressBarRendererManager_Default } from "./progressbar" - -//OPEN TICKET MODULES -import { ODOptionManager, ODTicketOption } from "../openticket/option" -import { ODPanel, ODPanelManager } from "../openticket/panel" -import { ODTicket, ODTicketClearFilter, ODTicketManager } from "../openticket/ticket" -import { ODQuestionManager } from "../openticket/question" -import { ODBlacklistManager } from "../openticket/blacklist" -import { ODTranscriptManager_Default } from "../openticket/transcript" -import { ODRole, ODRoleManager } from "../openticket/role" -import { ODPriorityLevel, ODPriorityManager_Default } from "../openticket/priority" - -/**## ODEventIds_Default `interface` - * This interface is a list of ids available in the `ODEvent_Default` class. - * It's used to generate typescript declarations for this class. - */ -export interface ODEventIds_Default { - //error handling - "onErrorHandling": ODEvent_Default<(error:Error, origin:NodeJS.UncaughtExceptionOrigin) => api.ODPromiseVoid> - "afterErrorHandling": ODEvent_Default<(error:Error, origin:NodeJS.UncaughtExceptionOrigin, message:api.ODError) => api.ODPromiseVoid> - - //plugins - "afterPluginsLoaded": ODEvent_Default<(plugins:ODPluginManager_Default) => api.ODPromiseVoid> - "onPluginClassLoad": ODEvent_Default<(classes:ODPluginClassManager_Default, plugins:ODPluginManager_Default) => api.ODPromiseVoid> - "afterPluginClassesLoaded": ODEvent_Default<(classes:ODPluginClassManager_Default, plugins:ODPluginManager_Default) => api.ODPromiseVoid> - - //flags - "onFlagLoad": ODEvent_Default<(flags:ODFlagManager_Default) => api.ODPromiseVoid> - "afterFlagsLoaded": ODEvent_Default<(flags:ODFlagManager_Default) => api.ODPromiseVoid> - "onFlagInit": ODEvent_Default<(flags:ODFlagManager_Default) => api.ODPromiseVoid> - "afterFlagsInitiated": ODEvent_Default<(flags:ODFlagManager_Default) => api.ODPromiseVoid> - - //progress bars - "onProgressBarRendererLoad": ODEvent_Default<(renderers:ODProgressBarRendererManager_Default) => api.ODPromiseVoid> - "afterProgressBarRenderersLoaded": ODEvent_Default<(renderers:ODProgressBarRendererManager_Default) => api.ODPromiseVoid> - "onProgressBarLoad": ODEvent_Default<(progressbars:ODProgressBarManager_Default) => api.ODPromiseVoid> - "afterProgressBarsLoaded": ODEvent_Default<(progressbars:ODProgressBarManager_Default) => api.ODPromiseVoid> - - //configs - "onConfigLoad": ODEvent_Default<(configs:ODConfigManager_Default) => api.ODPromiseVoid> - "afterConfigsLoaded": ODEvent_Default<(configs:ODConfigManager_Default) => api.ODPromiseVoid> - "onConfigInit": ODEvent_Default<(configs:ODConfigManager_Default) => api.ODPromiseVoid> - "afterConfigsInitiated": ODEvent_Default<(configs:ODConfigManager_Default) => api.ODPromiseVoid> - - //databases - "onDatabaseLoad": ODEvent_Default<(databases:ODDatabaseManager_Default) => api.ODPromiseVoid> - "afterDatabasesLoaded": ODEvent_Default<(databases:ODDatabaseManager_Default) => api.ODPromiseVoid> - "onDatabaseInit": ODEvent_Default<(databases:ODDatabaseManager_Default) => api.ODPromiseVoid> - "afterDatabasesInitiated": ODEvent_Default<(databases:ODDatabaseManager_Default) => api.ODPromiseVoid> - - //languages - "onLanguageLoad": ODEvent_Default<(languages:ODLanguageManager_Default) => api.ODPromiseVoid> - "afterLanguagesLoaded": ODEvent_Default<(languages:ODLanguageManager_Default) => api.ODPromiseVoid> - "onLanguageInit": ODEvent_Default<(languages:ODLanguageManager_Default) => api.ODPromiseVoid> - "afterLanguagesInitiated": ODEvent_Default<(languages:ODLanguageManager_Default) => api.ODPromiseVoid> - "onLanguageSelect": ODEvent_Default<(languages:ODLanguageManager_Default) => api.ODPromiseVoid> - "afterLanguagesSelected": ODEvent_Default<(main:api.ODLanguage|null, backup:api.ODLanguage|null, languages:ODLanguageManager_Default) => api.ODPromiseVoid> - - //sessions - "onSessionLoad": ODEvent_Default<(languages:ODSessionManager_Default) => api.ODPromiseVoid> - "afterSessionsLoaded": ODEvent_Default<(languages:ODSessionManager_Default) => api.ODPromiseVoid> - - //config checkers - "onCheckerLoad": ODEvent_Default<(checkers:ODCheckerManager_Default) => api.ODPromiseVoid> - "afterCheckersLoaded": ODEvent_Default<(checkers:ODCheckerManager_Default) => api.ODPromiseVoid> - "onCheckerFunctionLoad": ODEvent_Default<(functions:ODCheckerFunctionManager_Default, checkers:ODCheckerManager_Default) => api.ODPromiseVoid> - "afterCheckerFunctionsLoaded": ODEvent_Default<(functions:ODCheckerFunctionManager_Default, checkers:ODCheckerManager_Default) => api.ODPromiseVoid> - "onCheckerExecute": ODEvent_Default<(checkers:ODCheckerManager_Default) => api.ODPromiseVoid> - "afterCheckersExecuted": ODEvent_Default<(result:api.ODCheckerResult, checkers:ODCheckerManager_Default) => api.ODPromiseVoid> - "onCheckerTranslationLoad": ODEvent_Default<(translations:ODCheckerTranslationRegister_Default, enabled:boolean, checkers:ODCheckerManager_Default) => api.ODPromiseVoid> - "afterCheckerTranslationsLoaded": ODEvent_Default<(translations:ODCheckerTranslationRegister_Default, checkers:ODCheckerManager_Default) => api.ODPromiseVoid> - "onCheckerRender": ODEvent_Default<(renderer:ODCheckerRenderer_Default, checkers:ODCheckerManager_Default) => api.ODPromiseVoid> - "afterCheckersRendered": ODEvent_Default<(renderer:ODCheckerRenderer_Default, checkers:ODCheckerManager_Default) => api.ODPromiseVoid> - "onCheckerQuit": ODEvent_Default<(checkers:ODCheckerManager_Default) => api.ODPromiseVoid> - - //plugin loading before client - "onPluginBeforeClientLoad": ODEvent_Default<() => api.ODPromiseVoid>, - "afterPluginBeforeClientLoaded": ODEvent_Default<() => api.ODPromiseVoid>, - - //client configuration - "onClientLoad": ODEvent_Default<(client:ODClientManager_Default) => api.ODPromiseVoid> - "afterClientLoaded": ODEvent_Default<(client:ODClientManager_Default) => api.ODPromiseVoid> - "onClientInit": ODEvent_Default<(client:ODClientManager_Default) => api.ODPromiseVoid> - "afterClientInitiated": ODEvent_Default<(client:ODClientManager_Default) => api.ODPromiseVoid> - "onClientReady": ODEvent_Default<(client:ODClientManager_Default) => api.ODPromiseVoid> - "afterClientReady": ODEvent_Default<(client:ODClientManager_Default) => api.ODPromiseVoid> - "onClientActivityLoad": ODEvent_Default<(activity:api.ODClientActivityManager, client:ODClientManager_Default) => api.ODPromiseVoid> - "afterClientActivityLoaded": ODEvent_Default<(activity:api.ODClientActivityManager, client:ODClientManager_Default) => api.ODPromiseVoid> - "onClientActivityInit": ODEvent_Default<(activity:api.ODClientActivityManager, client:ODClientManager_Default) => api.ODPromiseVoid> - "afterClientActivityInitiated": ODEvent_Default<(activity:api.ODClientActivityManager, client:ODClientManager_Default) => api.ODPromiseVoid> - - //priority levels - "onPriorityLoad": ODEvent_Default<(priorities:ODPriorityManager_Default) => api.ODPromiseVoid> - "afterPrioritiesLoaded": ODEvent_Default<(priorities:ODPriorityManager_Default) => api.ODPromiseVoid> - - //client slash commands - "onSlashCommandLoad": ODEvent_Default<(slash:ODSlashCommandManager_Default, client:ODClientManager_Default) => api.ODPromiseVoid> - "afterSlashCommandsLoaded": ODEvent_Default<(slash:ODSlashCommandManager_Default, client:ODClientManager_Default) => api.ODPromiseVoid> - "onSlashCommandRegister": ODEvent_Default<(slash:ODSlashCommandManager_Default, client:ODClientManager_Default) => api.ODPromiseVoid> - "afterSlashCommandsRegistered": ODEvent_Default<(slash:ODSlashCommandManager_Default, client:ODClientManager_Default) => api.ODPromiseVoid> - - //client context menus - "onContextMenuLoad": ODEvent_Default<(menu:ODContextMenuManager_Default, client:ODClientManager_Default) => api.ODPromiseVoid> - "afterContextMenusLoaded": ODEvent_Default<(menu:ODContextMenuManager_Default, client:ODClientManager_Default) => api.ODPromiseVoid> - "onContextMenuRegister": ODEvent_Default<(menu:ODContextMenuManager_Default, client:ODClientManager_Default) => api.ODPromiseVoid> - "afterContextMenusRegistered": ODEvent_Default<(menu:ODContextMenuManager_Default, client:ODClientManager_Default) => api.ODPromiseVoid> - - //client text commands - "onTextCommandLoad": ODEvent_Default<(text:ODTextCommandManager_Default, client:ODClientManager_Default,) => api.ODPromiseVoid> - "afterTextCommandsLoaded": ODEvent_Default<(text:ODTextCommandManager_Default, client:ODClientManager_Default) => api.ODPromiseVoid> - - //plugin loading before managers - "onPluginBeforeManagerLoad": ODEvent_Default<() => api.ODPromiseVoid>, - "afterPluginBeforeManagerLoaded": ODEvent_Default<() => api.ODPromiseVoid>, - - //questions - "onQuestionLoad": ODEvent_Default<(questions:ODQuestionManager) => api.ODPromiseVoid> - "afterQuestionsLoaded": ODEvent_Default<(questions:ODQuestionManager) => api.ODPromiseVoid> - - //options - "onOptionLoad": ODEvent_Default<(options:ODOptionManager) => api.ODPromiseVoid> - "afterOptionsLoaded": ODEvent_Default<(options:ODOptionManager) => api.ODPromiseVoid> - - //panels - "onPanelLoad": ODEvent_Default<(panels:ODPanelManager) => api.ODPromiseVoid> - "afterPanelsLoaded": ODEvent_Default<(panels:ODPanelManager) => api.ODPromiseVoid> - "onPanelSpawn": ODEvent_Default<(panel:ODPanel) => api.ODPromiseVoid> - "afterPanelSpawned": ODEvent_Default<(panel:ODPanel) => api.ODPromiseVoid> - - //tickets - "onTicketLoad": ODEvent_Default<(tickets:ODTicketManager) => api.ODPromiseVoid> - "afterTicketsLoaded": ODEvent_Default<(tickets:ODTicketManager) => api.ODPromiseVoid> - - //ticket creation - "onTicketChannelCreation": ODEvent_Default<(option:ODTicketOption, user:discord.User) => api.ODPromiseVoid> - "afterTicketChannelCreated": ODEvent_Default<(option:ODTicketOption, channel:discord.GuildTextBasedChannel, user:discord.User) => api.ODPromiseVoid> - "onTicketChannelDeletion": ODEvent_Default<(ticket:ODTicket, channel:discord.GuildTextBasedChannel, user:discord.User) => api.ODPromiseVoid> - "afterTicketChannelDeleted": ODEvent_Default<(ticket:ODTicket, user:discord.User) => api.ODPromiseVoid> - "onTicketPermissionsCreated": ODEvent_Default<(option:ODTicketOption, permissions:ODPermissionManager_Default, channel:discord.GuildTextBasedChannel, user:discord.User) => api.ODPromiseVoid> - "afterTicketPermissionsCreated": ODEvent_Default<(option:ODTicketOption, permissions:ODPermissionManager_Default, channel:discord.GuildTextBasedChannel, user:discord.User) => api.ODPromiseVoid> - "onTicketMainMessageCreated": ODEvent_Default<(ticket:ODTicket, channel:discord.GuildTextBasedChannel, user:discord.User) => api.ODPromiseVoid> - "afterTicketMainMessageCreated": ODEvent_Default<(ticket:ODTicket, message:discord.Message, channel:discord.GuildTextBasedChannel, user:discord.User) => api.ODPromiseVoid> - - //ticket actions - "onTicketCreate": ODEvent_Default<(creator:discord.User) => api.ODPromiseVoid> - "afterTicketCreated": ODEvent_Default<(ticket:ODTicket, creator:discord.User, channel:discord.GuildTextBasedChannel) => api.ODPromiseVoid> - "onTicketClose": ODEvent_Default<(ticket:ODTicket, closer:discord.User, channel:discord.GuildTextBasedChannel, reason:string|null) => api.ODPromiseVoid> - "afterTicketClosed": ODEvent_Default<(ticket:ODTicket, closer:discord.User, channel:discord.GuildTextBasedChannel, reason:string|null) => api.ODPromiseVoid> - "onTicketReopen": ODEvent_Default<(ticket:ODTicket, reopener:discord.User, channel:discord.GuildTextBasedChannel, reason:string|null) => api.ODPromiseVoid> - "afterTicketReopened": ODEvent_Default<(ticket:ODTicket, reopener:discord.User, channel:discord.GuildTextBasedChannel, reason:string|null) => api.ODPromiseVoid> - "onTicketDelete": ODEvent_Default<(ticket:ODTicket, deleter:discord.User, channel:discord.GuildTextBasedChannel, reason:string|null) => api.ODPromiseVoid> - "afterTicketDeleted": ODEvent_Default<(ticket:ODTicket, deleter:discord.User, reason:string|null) => api.ODPromiseVoid> - "onTicketMove": ODEvent_Default<(ticket:ODTicket, mover:discord.User, channel:discord.GuildTextBasedChannel, reason:string|null) => api.ODPromiseVoid> - "afterTicketMoved": ODEvent_Default<(ticket:ODTicket, mover:discord.User, channel:discord.GuildTextBasedChannel, reason:string|null) => api.ODPromiseVoid> - "onTicketClaim": ODEvent_Default<(ticket:ODTicket, claimer:discord.User, channel:discord.GuildTextBasedChannel, reason:string|null) => api.ODPromiseVoid> - "afterTicketClaimed": ODEvent_Default<(ticket:ODTicket, claimer:discord.User, channel:discord.GuildTextBasedChannel, reason:string|null) => api.ODPromiseVoid> - "onTicketUnclaim": ODEvent_Default<(ticket:ODTicket, unclaimer:discord.User, channel:discord.GuildTextBasedChannel, reason:string|null) => api.ODPromiseVoid> - "afterTicketUnclaimed": ODEvent_Default<(ticket:ODTicket, unclaimer:discord.User, channel:discord.GuildTextBasedChannel, reason:string|null) => api.ODPromiseVoid> - "onTicketPin": ODEvent_Default<(ticket:ODTicket, pinner:discord.User, channel:discord.GuildTextBasedChannel, reason:string|null) => api.ODPromiseVoid> - "afterTicketPinned": ODEvent_Default<(ticket:ODTicket, pinner:discord.User, channel:discord.GuildTextBasedChannel, reason:string|null) => api.ODPromiseVoid> - "onTicketUnpin": ODEvent_Default<(ticket:ODTicket, unpinner:discord.User, channel:discord.GuildTextBasedChannel, reason:string|null) => api.ODPromiseVoid> - "afterTicketUnpinned": ODEvent_Default<(ticket:ODTicket, unpinner:discord.User, channel:discord.GuildTextBasedChannel, reason:string|null) => api.ODPromiseVoid> - "onTicketUserAdd": ODEvent_Default<(ticket:ODTicket, adder:discord.User, user:discord.User, channel:discord.GuildTextBasedChannel, reason:string|null) => api.ODPromiseVoid> - "afterTicketUserAdded": ODEvent_Default<(ticket:ODTicket, adder:discord.User, user:discord.User, channel:discord.GuildTextBasedChannel, reason:string|null) => api.ODPromiseVoid> - "onTicketUserRemove": ODEvent_Default<(ticket:ODTicket, remover:discord.User, user:discord.User, channel:discord.GuildTextBasedChannel, reason:string|null) => api.ODPromiseVoid> - "afterTicketUserRemoved": ODEvent_Default<(ticket:ODTicket, remover:discord.User, user:discord.User, channel:discord.GuildTextBasedChannel, reason:string|null) => api.ODPromiseVoid> - "onTicketRename": ODEvent_Default<(ticket:ODTicket, renamer:discord.User, channel:discord.GuildTextBasedChannel, reason:string|null) => api.ODPromiseVoid> - "afterTicketRenamed": ODEvent_Default<(ticket:ODTicket, renamer:discord.User, channel:discord.GuildTextBasedChannel, reason:string|null) => api.ODPromiseVoid> - "onTicketsClear": ODEvent_Default<(tickets:ODTicket[], clearer:discord.User, channel:discord.GuildTextBasedChannel, filter:ODTicketClearFilter) => api.ODPromiseVoid> - "afterTicketsCleared": ODEvent_Default<(tickets:ODTicket[], clearer:discord.User, channel:discord.GuildTextBasedChannel, filter:ODTicketClearFilter) => api.ODPromiseVoid> - "onTicketTopicChange": ODEvent_Default<(ticket:ODTicket, changer:discord.User, channel:discord.GuildTextBasedChannel, oldTopic:string, newTopic:string) => api.ODPromiseVoid> - "afterTicketTopicChanged": ODEvent_Default<(ticket:ODTicket, changer:discord.User, channel:discord.GuildTextBasedChannel, oldTopic:string, newTopic:string) => api.ODPromiseVoid> - "onTicketPriorityChange": ODEvent_Default<(ticket:ODTicket, changer:discord.User, channel:discord.GuildTextBasedChannel, oldPriority:ODPriorityLevel, newPriority:ODPriorityLevel, reason:string|null) => api.ODPromiseVoid> - "afterTicketPriorityChanged": ODEvent_Default<(ticket:ODTicket, changer:discord.User, channel:discord.GuildTextBasedChannel, oldPriority:ODPriorityLevel, newPriority:ODPriorityLevel, reason:string|null) => api.ODPromiseVoid> - "onTicketTransfer": ODEvent_Default<(ticket:ODTicket, changer:discord.User, channel:discord.GuildTextBasedChannel, oldCreator:discord.User, newCreator:discord.User, reason:string|null) => api.ODPromiseVoid> - "afterTicketTransferred": ODEvent_Default<(ticket:ODTicket, changer:discord.User, channel:discord.GuildTextBasedChannel, oldCreator:discord.User, newCreator:discord.User, reason:string|null) => api.ODPromiseVoid> - - //roles - "onRoleLoad": ODEvent_Default<(roles:ODRoleManager) => api.ODPromiseVoid> - "afterRolesLoaded": ODEvent_Default<(roles:ODRoleManager) => api.ODPromiseVoid> - "onRoleUpdate": ODEvent_Default<(user:discord.User,role:ODRole) => api.ODPromiseVoid> - "afterRolesUpdated": ODEvent_Default<(user:discord.User,role:ODRole) => api.ODPromiseVoid> - - //blacklist - "onBlacklistLoad": ODEvent_Default<(blacklist:ODBlacklistManager) => api.ODPromiseVoid> - "afterBlacklistLoaded": ODEvent_Default<(blacklist:ODBlacklistManager) => api.ODPromiseVoid> - - //transcripts - "onTranscriptCompilerLoad": ODEvent_Default<(transcripts:ODTranscriptManager_Default) => api.ODPromiseVoid> - "afterTranscriptCompilersLoaded": ODEvent_Default<(transcripts:ODTranscriptManager_Default) => api.ODPromiseVoid> - "onTranscriptHistoryLoad": ODEvent_Default<(transcripts:ODTranscriptManager_Default) => api.ODPromiseVoid> - "afterTranscriptHistoryLoaded": ODEvent_Default<(transcripts:ODTranscriptManager_Default) => api.ODPromiseVoid> - - //transcript creation - "onTranscriptCreate": ODEvent_Default<(transcripts:ODTranscriptManager_Default,ticket:ODTicket,channel:discord.TextChannel,user:discord.User) => api.ODPromiseVoid> - "afterTranscriptCreated": ODEvent_Default<(transcripts:ODTranscriptManager_Default,ticket:ODTicket,channel:discord.TextChannel,user:discord.User) => api.ODPromiseVoid> - "onTranscriptInit": ODEvent_Default<(transcripts:ODTranscriptManager_Default,ticket:ODTicket,channel:discord.TextChannel,user:discord.User) => api.ODPromiseVoid> - "afterTranscriptInitiated": ODEvent_Default<(transcripts:ODTranscriptManager_Default,ticket:ODTicket,channel:discord.TextChannel,user:discord.User) => api.ODPromiseVoid> - "onTranscriptCompile": ODEvent_Default<(transcripts:ODTranscriptManager_Default,ticket:ODTicket,channel:discord.TextChannel,user:discord.User) => api.ODPromiseVoid> - "afterTranscriptCompiled": ODEvent_Default<(transcripts:ODTranscriptManager_Default,ticket:ODTicket,channel:discord.TextChannel,user:discord.User) => api.ODPromiseVoid> - "onTranscriptReady": ODEvent_Default<(transcripts:ODTranscriptManager_Default,ticket:ODTicket,channel:discord.TextChannel,user:discord.User) => api.ODPromiseVoid> - "afterTranscriptReady": ODEvent_Default<(transcripts:ODTranscriptManager_Default,ticket:ODTicket,channel:discord.TextChannel,user:discord.User) => api.ODPromiseVoid> - - //plugin loading before builders - "onPluginBeforeBuilderLoad": ODEvent_Default<() => api.ODPromiseVoid>, - "afterPluginBeforeBuilderLoaded": ODEvent_Default<() => api.ODPromiseVoid>, - - //builders - "onButtonBuilderLoad": ODEvent_Default<(buttons:ODButtonManager_Default, builders:ODBuilderManager_Default, actions:ODActionManager_Default) => api.ODPromiseVoid> - "afterButtonBuildersLoaded": ODEvent_Default<(buttons:ODButtonManager_Default, builders:ODBuilderManager_Default, actions:ODActionManager_Default) => api.ODPromiseVoid> - "onDropdownBuilderLoad": ODEvent_Default<(dropdowns:ODDropdownManager_Default, builders:ODBuilderManager_Default, actions:ODActionManager_Default) => api.ODPromiseVoid> - "afterDropdownBuildersLoaded": ODEvent_Default<(dropdowns:ODDropdownManager_Default, builders:ODBuilderManager_Default, actions:ODActionManager_Default) => api.ODPromiseVoid> - "onFileBuilderLoad": ODEvent_Default<(files:ODFileManager_Default, builders:ODBuilderManager_Default, actions:ODActionManager_Default) => api.ODPromiseVoid> - "afterFileBuildersLoaded": ODEvent_Default<(files:ODFileManager_Default, builders:ODBuilderManager_Default, actions:ODActionManager_Default) => api.ODPromiseVoid> - "onEmbedBuilderLoad": ODEvent_Default<(embeds:ODEmbedManager_Default, builders:ODBuilderManager_Default, actions:ODActionManager_Default) => api.ODPromiseVoid> - "afterEmbedBuildersLoaded": ODEvent_Default<(embeds:ODEmbedManager_Default, builders:ODBuilderManager_Default, actions:ODActionManager_Default) => api.ODPromiseVoid> - "onMessageBuilderLoad": ODEvent_Default<(messages:ODMessageManager_Default, builders:ODBuilderManager_Default, actions:ODActionManager_Default) => api.ODPromiseVoid> - "afterMessageBuildersLoaded": ODEvent_Default<(messages:ODMessageManager_Default, builders:ODBuilderManager_Default, actions:ODActionManager_Default) => api.ODPromiseVoid> - "onModalBuilderLoad": ODEvent_Default<(modals:ODModalManager_Default, builders:ODBuilderManager_Default, actions:ODActionManager_Default) => api.ODPromiseVoid> - "afterModalBuildersLoaded": ODEvent_Default<(modals:ODModalManager_Default, builders:ODBuilderManager_Default, actions:ODActionManager_Default) => api.ODPromiseVoid> - - //plugin loading before responders - "onPluginBeforeResponderLoad": ODEvent_Default<() => api.ODPromiseVoid>, - "afterPluginBeforeResponderLoaded": ODEvent_Default<() => api.ODPromiseVoid>, - - //responders - "onCommandResponderLoad": ODEvent_Default<(commands:ODCommandResponderManager_Default, responders:ODResponderManager_Default, actions:ODActionManager_Default) => api.ODPromiseVoid> - "afterCommandRespondersLoaded": ODEvent_Default<(commands:ODCommandResponderManager_Default, responders:ODResponderManager_Default, actions:ODActionManager_Default) => api.ODPromiseVoid> - "onButtonResponderLoad": ODEvent_Default<(buttons:ODButtonResponderManager_Default, responders:ODResponderManager_Default, actions:ODActionManager_Default) => api.ODPromiseVoid> - "afterButtonRespondersLoaded": ODEvent_Default<(buttons:ODButtonResponderManager_Default, responders:ODResponderManager_Default, actions:ODActionManager_Default) => api.ODPromiseVoid> - "onDropdownResponderLoad": ODEvent_Default<(dropdowns:ODDropdownResponderManager_Default, responders:ODResponderManager_Default, actions:ODActionManager_Default) => api.ODPromiseVoid> - "afterDropdownRespondersLoaded": ODEvent_Default<(dropdowns:ODDropdownResponderManager_Default, responders:ODResponderManager_Default, actions:ODActionManager_Default) => api.ODPromiseVoid> - "onModalResponderLoad": ODEvent_Default<(modals:ODModalResponderManager_Default, responders:ODResponderManager_Default, actions:ODActionManager_Default) => api.ODPromiseVoid> - "afterModalRespondersLoaded": ODEvent_Default<(modals:ODModalResponderManager_Default, responders:ODResponderManager_Default, actions:ODActionManager_Default) => api.ODPromiseVoid> - "onContextMenuResponderLoad": ODEvent_Default<(menus:ODContextMenuResponderManager_Default, responders:ODResponderManager_Default, actions:ODActionManager_Default) => api.ODPromiseVoid> - "afterContextMenuRespondersLoaded": ODEvent_Default<(menus:ODContextMenuResponderManager_Default, responders:ODResponderManager_Default, actions:ODActionManager_Default) => api.ODPromiseVoid> - "onAutocompleteResponderLoad": ODEvent_Default<(autocomplete:ODAutocompleteResponderManager_Default, responders:ODResponderManager_Default, actions:ODActionManager_Default) => api.ODPromiseVoid> - "afterAutocompleteRespondersLoaded": ODEvent_Default<(autocomplete:ODAutocompleteResponderManager_Default, responders:ODResponderManager_Default, actions:ODActionManager_Default) => api.ODPromiseVoid> - - //plugin loading before finalizations - "onPluginBeforeFinalizationLoad": ODEvent_Default<() => api.ODPromiseVoid>, - "afterPluginBeforeFinalizationLoaded": ODEvent_Default<() => api.ODPromiseVoid>, - - //actions - "onActionLoad": ODEvent_Default<(actions:ODActionManager_Default) => api.ODPromiseVoid> - "afterActionsLoaded": ODEvent_Default<(actions:ODActionManager_Default) => api.ODPromiseVoid> - - //verifybars - "onVerifyBarLoad": ODEvent_Default<(verifybars:ODVerifyBarManager_Default) => api.ODPromiseVoid> - "afterVerifyBarsLoaded": ODEvent_Default<(verifybars:ODVerifyBarManager_Default) => api.ODPromiseVoid> - - //permissions - "onPermissionLoad": ODEvent_Default<(permissions:ODPermissionManager_Default) => api.ODPromiseVoid> - "afterPermissionsLoaded": ODEvent_Default<(permissions:ODPermissionManager_Default) => api.ODPromiseVoid> - - //posts - "onPostLoad": ODEvent_Default<(posts:ODPostManager_Default) => api.ODPromiseVoid> - "afterPostsLoaded": ODEvent_Default<(posts:ODPostManager_Default) => api.ODPromiseVoid> - "onPostInit": ODEvent_Default<(posts:ODPostManager_Default) => api.ODPromiseVoid> - "afterPostsInitiated": ODEvent_Default<(posts:ODPostManager_Default) => api.ODPromiseVoid> - - //cooldowns - "onCooldownLoad": ODEvent_Default<(cooldowns:ODCooldownManager_Default) => api.ODPromiseVoid> - "afterCooldownsLoaded": ODEvent_Default<(cooldowns:ODCooldownManager_Default) => api.ODPromiseVoid> - "onCooldownInit": ODEvent_Default<(cooldowns:ODCooldownManager_Default) => api.ODPromiseVoid> - "afterCooldownsInitiated": ODEvent_Default<(cooldowns:ODCooldownManager_Default) => api.ODPromiseVoid> - - //help menu - "onHelpMenuCategoryLoad": ODEvent_Default<(menu:ODHelpMenuManager_Default) => api.ODPromiseVoid> - "afterHelpMenuCategoriesLoaded": ODEvent_Default<(menu:ODHelpMenuManager_Default) => api.ODPromiseVoid> - "onHelpMenuComponentLoad": ODEvent_Default<(menu:ODHelpMenuManager_Default) => api.ODPromiseVoid> - "afterHelpMenuComponentsLoaded": ODEvent_Default<(menu:ODHelpMenuManager_Default) => api.ODPromiseVoid> - - //stats - "onStatScopeLoad": ODEvent_Default<(stats:ODStatsManager_Default) => api.ODPromiseVoid> - "afterStatScopesLoaded": ODEvent_Default<(stats:ODStatsManager_Default) => api.ODPromiseVoid> - "onStatLoad": ODEvent_Default<(stats:ODStatsManager_Default) => api.ODPromiseVoid> - "afterStatsLoaded": ODEvent_Default<(stats:ODStatsManager_Default) => api.ODPromiseVoid> - "onStatInit": ODEvent_Default<(stats:ODStatsManager_Default) => api.ODPromiseVoid> - "afterStatsInitiated": ODEvent_Default<(stats:ODStatsManager_Default) => api.ODPromiseVoid> - - //plugin loading before code - "onPluginBeforeCodeLoad": ODEvent_Default<() => api.ODPromiseVoid>, - "afterPluginBeforeCodeLoaded": ODEvent_Default<() => api.ODPromiseVoid>, - - //code - "onCodeLoad": ODEvent_Default<(code:ODCodeManager_Default) => api.ODPromiseVoid> - "afterCodeLoaded": ODEvent_Default<(code:ODCodeManager_Default) => api.ODPromiseVoid> - "onCodeExecute": ODEvent_Default<(code:ODCodeManager_Default) => api.ODPromiseVoid> - "afterCodeExecuted": ODEvent_Default<(code:ODCodeManager_Default) => api.ODPromiseVoid> - - //livestatus - "onLiveStatusSourceLoad": ODEvent_Default<(livestatus:ODLiveStatusManager_Default) => api.ODPromiseVoid> - "afterLiveStatusSourcesLoaded": ODEvent_Default<(livestatus:ODLiveStatusManager_Default) => api.ODPromiseVoid> - - //startscreen - "onStartScreenLoad": ODEvent_Default<(startscreen:ODStartScreenManager_Default) => api.ODPromiseVoid> - "afterStartScreensLoaded": ODEvent_Default<(startscreen:ODStartScreenManager_Default) => api.ODPromiseVoid> - "onStartScreenRender": ODEvent_Default<(startscreen:ODStartScreenManager_Default) => api.ODPromiseVoid> - "afterStartScreensRendered": ODEvent_Default<(startscreen:ODStartScreenManager_Default) => api.ODPromiseVoid> - - //ready - "beforeReadyForUsage": ODEvent_Default<() => api.ODPromiseVoid> - "onReadyForUsage": ODEvent_Default<() => api.ODPromiseVoid> -} - -/**## ODEventManager_Default `default_class` - * This is a special class that adds type definitions & typescript to the ODEvent class. - * It doesn't add any extra features! - * - * This default class is made for the global variable `opendiscord.events`! - */ -export class ODEventManager_Default extends api.ODEventManager { - get(id:StartScreenId): ODEventIds_Default[StartScreenId] - get(id:api.ODValidId): api.ODEvent|null - - get(id:api.ODValidId): api.ODEvent|null { - return super.get(id) - } - - remove(id:StartScreenId): ODEventIds_Default[StartScreenId] - remove(id:api.ODValidId): api.ODEvent|null - - remove(id:api.ODValidId): api.ODEvent|null { - return super.remove(id) - } - - exists(id:keyof ODEventIds_Default): boolean - exists(id:api.ODValidId): boolean - - exists(id:api.ODValidId): boolean { - return super.exists(id) - } -} - -/**## ODEventManager_Default `default_class` - * This is a special class that adds type definitions & typescript to the ODEvent class. - * It doesn't add any extra features! - * - * This default class is made for the global variable `opendiscord.events`! - */ -export class ODEvent_Default api.ODPromiseVoid)> extends api.ODEvent { - listen(callback:Callback): void { - return super.listen(callback) - } - listenOnce(callback:Callback): void { - return super.listenOnce(callback) - } - wait(): Promise> - wait(): Promise { - return super.wait() - } - emit(params:Parameters): Promise { - return super.emit(params) - } -} \ No newline at end of file diff --git a/src/core/api/defaults/flag.ts b/src/core/api/defaults/flag.ts deleted file mode 100644 index 5e68b13..0000000 --- a/src/core/api/defaults/flag.ts +++ /dev/null @@ -1,56 +0,0 @@ -/////////////////////////////////////// -//DEFAULT PROCESS MODULE -/////////////////////////////////////// -import * as api from "@open-discord-bots/framework/api" - -/**## ODFlagManagerIds_Default `interface` - * This interface is a list of ids available in the `ODFlagManager_Default` class. - * It's used to generate typescript declarations for this class. - */ -export interface ODFlagManagerIds_Default { - "opendiscord:no-migration":api.ODFlag, - "opendiscord:dev-config":api.ODFlag, - "opendiscord:dev-database":api.ODFlag, - "opendiscord:debug":api.ODFlag, - "opendiscord:crash":api.ODFlag, - "opendiscord:no-transcripts":api.ODFlag, - "opendiscord:no-checker":api.ODFlag, - "opendiscord:checker":api.ODFlag, - "opendiscord:no-easter":api.ODFlag, - "opendiscord:no-plugins":api.ODFlag, - "opendiscord:soft-plugins":api.ODFlag, - "opendiscord:force-slash-update":api.ODFlag, - "opendiscord:no-compile":api.ODFlag, - "opendiscord:compile-only":api.ODFlag, - "opendiscord:silent":api.ODFlag, - "opendiscord:cli":api.ODFlag, -} - -/**## ODFlagManager_Default `default_class` - * This is a special class that adds type definitions & typescript to the ODFlagManager class. - * It doesn't add any extra features! - * - * This default class is made for the global variable `opendiscord.flags`! - */ -export class ODFlagManager_Default extends api.ODFlagManager { - get(id:FlagId): ODFlagManagerIds_Default[FlagId] - get(id:api.ODValidId): api.ODFlag|null - - get(id:api.ODValidId): api.ODFlag|null { - return super.get(id) - } - - remove(id:FlagId): ODFlagManagerIds_Default[FlagId] - remove(id:api.ODValidId): api.ODFlag|null - - remove(id:api.ODValidId): api.ODFlag|null { - return super.remove(id) - } - - exists(id:keyof ODFlagManagerIds_Default): boolean - exists(id:api.ODValidId): boolean - - exists(id:api.ODValidId): boolean { - return super.exists(id) - } -} \ No newline at end of file diff --git a/src/core/api/defaults/helpmenu.ts b/src/core/api/defaults/helpmenu.ts deleted file mode 100644 index 673d2c9..0000000 --- a/src/core/api/defaults/helpmenu.ts +++ /dev/null @@ -1,337 +0,0 @@ -/////////////////////////////////////// -//DEFAULT HELP MODULE -/////////////////////////////////////// -import * as api from "@open-discord-bots/framework/api" - -/** (CONTRIBUTOR GUIDE) HOW TO ADD NEW COMMANDS? - * - Register the command in loadAllSlashCommands() & loadAllTextCommands() in (./src/data/framework/commandLoader.ts) - * - Add autocomplete for the command in OD(Slash/Text)CommandManagerIds_Default in (./src/core/api/defaults/client.ts) - * - Add the command to the help menu in (./src/data/framework/helpMenuLoader.ts) - * - If required, new config variables should be added (incl. logs, dm-logs & permissions). - * - Update the Open Ticket Documentation. - * - If the command contains complex logic or can be executed from a button/dropdown, it should be placed inside an `ODAction`. - * - Check all files, test the bot carefully & try a lot of different scenario's with different settings. - */ - -/**## ODHelpMenuManagerIds_Default `interface` - * This interface is a list of ids available in the `ODHelpMenuManager_Default` class. - * It's used to generate typescript declarations for this class. - */ -export interface ODHelpMenuManagerIds_Default { - "opendiscord:general":ODHelpMenuCategory_DefaultGeneral, - "opendiscord:ticket-basic":ODHelpMenuCategory_DefaultTicketBasic, - "opendiscord:ticket-advanced":ODHelpMenuCategory_DefaultTicketAdvanced, - "opendiscord:ticket-user":ODHelpMenuCategory_DefaultTicketUser, - "opendiscord:admin":ODHelpMenuCategory_DefaultAdmin, - "opendiscord:advanced":ODHelpMenuCategory_DefaultAdvanced, - "opendiscord:extra":ODHelpMenuCategory_DefaultExtra -} - -/**## ODHelpMenuManager_Default `default_class` - * This is a special class that adds type definitions & typescript to the ODHelpMenuManager class. - * It doesn't add any extra features! - * - * This default class is made for the global variable `opendiscord.helpmenu`! - */ -export class ODHelpMenuManager_Default extends api.ODHelpMenuManager { - get(id:HelpMenuCategoryId): ODHelpMenuManagerIds_Default[HelpMenuCategoryId] - get(id:api.ODValidId): api.ODHelpMenuCategory|null - - get(id:api.ODValidId): api.ODHelpMenuCategory|null { - return super.get(id) - } - - remove(id:HelpMenuCategoryId): ODHelpMenuManagerIds_Default[HelpMenuCategoryId] - remove(id:api.ODValidId): api.ODHelpMenuCategory|null - - remove(id:api.ODValidId): api.ODHelpMenuCategory|null { - return super.remove(id) - } - - exists(id:keyof ODHelpMenuManagerIds_Default): boolean - exists(id:api.ODValidId): boolean - - exists(id:api.ODValidId): boolean { - return super.exists(id) - } -} - -/**## ODHelpMenuManagerCategoryIds_DefaultGeneral `type` - * This interface is a list of ids available in the `ODHelpMenuCategory_DefaultGeneral` class. - * It's used to generate typescript declarations for this class. - */ -export interface ODHelpMenuManagerCategoryIds_DefaultGeneral { - "opendiscord:help":api.ODHelpMenuCommandComponent, - "opendiscord:ticket":api.ODHelpMenuCommandComponent|null -} - -/**## ODHelpMenuCategory_DefaultGeneral `default_class` - * This is a special class that adds type definitions & typescript to the ODHelpMenuManager class. - * It doesn't add any extra features! - * - * This default class is made for the `opendiscord:general` category in `opendiscord.helpmenu`! - */ -export class ODHelpMenuCategory_DefaultGeneral extends api.ODHelpMenuCategory { - get(id:HelpMenuCategoryId): ODHelpMenuManagerCategoryIds_DefaultGeneral[HelpMenuCategoryId] - get(id:api.ODValidId): api.ODHelpMenuComponent|null - - get(id:api.ODValidId): api.ODHelpMenuComponent|null { - return super.get(id) - } - - remove(id:HelpMenuCategoryId): ODHelpMenuManagerCategoryIds_DefaultGeneral[HelpMenuCategoryId] - remove(id:api.ODValidId): api.ODHelpMenuComponent|null - - remove(id:api.ODValidId): api.ODHelpMenuComponent|null { - return super.remove(id) - } - - exists(id:keyof ODHelpMenuManagerCategoryIds_DefaultGeneral): boolean - exists(id:api.ODValidId): boolean - - exists(id:api.ODValidId): boolean { - return super.exists(id) - } -} - -/**## ODHelpMenuManagerCategoryIds_DefaultTicketBasic `type` - * This interface is a list of ids available in the `ODHelpMenuCategory_DefaultTicketBasic` class. - * It's used to generate typescript declarations for this class. - */ -export interface ODHelpMenuManagerCategoryIds_DefaultTicketBasic { - "opendiscord:close":api.ODHelpMenuCommandComponent, - "opendiscord:delete":api.ODHelpMenuCommandComponent, - "opendiscord:reopen":api.ODHelpMenuCommandComponent -} - -/**## ODHelpMenuCategory_DefaultTicketBasic `default_class` - * This is a special class that adds type definitions & typescript to the ODHelpMenuManager class. - * It doesn't add any extra features! - * - * This default class is made for the `opendiscord:ticket` category in `opendiscord.helpmenu`! - */ -export class ODHelpMenuCategory_DefaultTicketBasic extends api.ODHelpMenuCategory { - get(id:HelpMenuCategoryId): ODHelpMenuManagerCategoryIds_DefaultTicketBasic[HelpMenuCategoryId] - get(id:api.ODValidId): api.ODHelpMenuComponent|null - - get(id:api.ODValidId): api.ODHelpMenuComponent|null { - return super.get(id) - } - - remove(id:HelpMenuCategoryId): ODHelpMenuManagerCategoryIds_DefaultTicketBasic[HelpMenuCategoryId] - remove(id:api.ODValidId): api.ODHelpMenuComponent|null - - remove(id:api.ODValidId): api.ODHelpMenuComponent|null { - return super.remove(id) - } - - exists(id:keyof ODHelpMenuManagerCategoryIds_DefaultTicketBasic): boolean - exists(id:api.ODValidId): boolean - - exists(id:api.ODValidId): boolean { - return super.exists(id) - } -} - -/**## ODHelpMenuManagerCategoryIds_DefaultTicketAdvanced `type` - * This interface is a list of ids available in the `ODHelpMenuCategory_DefaultTicketAdvanced` class. - * It's used to generate typescript declarations for this class. - */ -export interface ODHelpMenuManagerCategoryIds_DefaultTicketAdvanced { - "opendiscord:pin":api.ODHelpMenuCommandComponent, - "opendiscord:unpin":api.ODHelpMenuCommandComponent, - "opendiscord:move":api.ODHelpMenuCommandComponent, - "opendiscord:rename":api.ODHelpMenuCommandComponent -} - -/**## ODHelpMenuCategory_DefaultTicketAdvanced `default_class` - * This is a special class that adds type definitions & typescript to the ODHelpMenuManager class. - * It doesn't add any extra features! - * - * This default class is made for the `opendiscord:ticket` category in `opendiscord.helpmenu`! - */ -export class ODHelpMenuCategory_DefaultTicketAdvanced extends api.ODHelpMenuCategory { - get(id:HelpMenuCategoryId): ODHelpMenuManagerCategoryIds_DefaultTicketAdvanced[HelpMenuCategoryId] - get(id:api.ODValidId): api.ODHelpMenuComponent|null - - get(id:api.ODValidId): api.ODHelpMenuComponent|null { - return super.get(id) - } - - remove(id:HelpMenuCategoryId): ODHelpMenuManagerCategoryIds_DefaultTicketAdvanced[HelpMenuCategoryId] - remove(id:api.ODValidId): api.ODHelpMenuComponent|null - - remove(id:api.ODValidId): api.ODHelpMenuComponent|null { - return super.remove(id) - } - - exists(id:keyof ODHelpMenuManagerCategoryIds_DefaultTicketAdvanced): boolean - exists(id:api.ODValidId): boolean - - exists(id:api.ODValidId): boolean { - return super.exists(id) - } -} - -/**## ODHelpMenuManagerCategoryIds_DefaultTicketUser `type` - * This interface is a list of ids available in the `ODHelpMenuCategory_DefaultTicketUser` class. - * It's used to generate typescript declarations for this class. - */ -export interface ODHelpMenuManagerCategoryIds_DefaultTicketUser { - "opendiscord:claim":api.ODHelpMenuCommandComponent, - "opendiscord:unclaim":api.ODHelpMenuCommandComponent, - "opendiscord:add":api.ODHelpMenuCommandComponent, - "opendiscord:remove":api.ODHelpMenuCommandComponent, - "opendiscord:transfer":api.ODHelpMenuCommandComponent, -} - -/**## ODHelpMenuCategory_DefaultTicketUser `default_class` - * This is a special class that adds type definitions & typescript to the ODHelpMenuManager class. - * It doesn't add any extra features! - * - * This default class is made for the `opendiscord:ticket` category in `opendiscord.helpmenu`! - */ -export class ODHelpMenuCategory_DefaultTicketUser extends api.ODHelpMenuCategory { - get(id:HelpMenuCategoryId): ODHelpMenuManagerCategoryIds_DefaultTicketUser[HelpMenuCategoryId] - get(id:api.ODValidId): api.ODHelpMenuComponent|null - - get(id:api.ODValidId): api.ODHelpMenuComponent|null { - return super.get(id) - } - - remove(id:HelpMenuCategoryId): ODHelpMenuManagerCategoryIds_DefaultTicketUser[HelpMenuCategoryId] - remove(id:api.ODValidId): api.ODHelpMenuComponent|null - - remove(id:api.ODValidId): api.ODHelpMenuComponent|null { - return super.remove(id) - } - - exists(id:keyof ODHelpMenuManagerCategoryIds_DefaultTicketUser): boolean - exists(id:api.ODValidId): boolean - - exists(id:api.ODValidId): boolean { - return super.exists(id) - } -} - -/**## ODHelpMenuManagerCategoryIds_DefaultAdmin `type` - * This interface is a list of ids available in the `ODHelpMenuCategory_DefaultAdmin` class. - * It's used to generate typescript declarations for this class. - */ -export interface ODHelpMenuManagerCategoryIds_DefaultAdmin { - "opendiscord:panel":api.ODHelpMenuCommandComponent, - "opendiscord:blacklist-view":api.ODHelpMenuCommandComponent, - "opendiscord:blacklist-add":api.ODHelpMenuCommandComponent, - "opendiscord:blacklist-remove":api.ODHelpMenuCommandComponent, - "opendiscord:blacklist-get":api.ODHelpMenuCommandComponent -} - -/**## ODHelpMenuCategory_DefaultAdmin `default_class` - * This is a special class that adds type definitions & typescript to the ODHelpMenuManager class. - * It doesn't add any extra features! - * - * This default class is made for the `opendiscord:admin` category in `opendiscord.helpmenu`! - */ -export class ODHelpMenuCategory_DefaultAdmin extends api.ODHelpMenuCategory { - get(id:HelpMenuCategoryId): ODHelpMenuManagerCategoryIds_DefaultAdmin[HelpMenuCategoryId] - get(id:api.ODValidId): api.ODHelpMenuComponent|null - - get(id:api.ODValidId): api.ODHelpMenuComponent|null { - return super.get(id) - } - - remove(id:HelpMenuCategoryId): ODHelpMenuManagerCategoryIds_DefaultAdmin[HelpMenuCategoryId] - remove(id:api.ODValidId): api.ODHelpMenuComponent|null - - remove(id:api.ODValidId): api.ODHelpMenuComponent|null { - return super.remove(id) - } - - exists(id:keyof ODHelpMenuManagerCategoryIds_DefaultAdmin): boolean - exists(id:api.ODValidId): boolean - - exists(id:api.ODValidId): boolean { - return super.exists(id) - } -} - -/**## ODHelpMenuManagerCategoryIds_DefaultAdvanced `type` - * This interface is a list of ids available in the `ODHelpMenuCategory_DefaultAdvanced` class. - * It's used to generate typescript declarations for this class. - */ -export interface ODHelpMenuManagerCategoryIds_DefaultAdvanced { - "opendiscord:stats-global":api.ODHelpMenuCommandComponent, - "opendiscord:stats-reset":api.ODHelpMenuCommandComponent, - "opendiscord:stats-ticket":api.ODHelpMenuCommandComponent, - "opendiscord:stats-user":api.ODHelpMenuCommandComponent, - "opendiscord:autoclose-disable":api.ODHelpMenuCommandComponent, - "opendiscord:autoclose-enable":api.ODHelpMenuCommandComponent, - "opendiscord:autodelete-disable":api.ODHelpMenuCommandComponent, - "opendiscord:autodelete-enable":api.ODHelpMenuCommandComponent, - "opendiscord:topic-set":api.ODHelpMenuCommandComponent, - "opendiscord:priority-set":api.ODHelpMenuCommandComponent, -} - -/**## ODHelpMenuCategory_DefaultAdvanced `default_class` - * This is a special class that adds type definitions & typescript to the ODHelpMenuManager class. - * It doesn't add any extra features! - * - * This default class is made for the `opendiscord:advanced` category in `opendiscord.helpmenu`! - */ -export class ODHelpMenuCategory_DefaultAdvanced extends api.ODHelpMenuCategory { - get(id:HelpMenuCategoryId): ODHelpMenuManagerCategoryIds_DefaultAdvanced[HelpMenuCategoryId] - get(id:api.ODValidId): api.ODHelpMenuComponent|null - - get(id:api.ODValidId): api.ODHelpMenuComponent|null { - return super.get(id) - } - - remove(id:HelpMenuCategoryId): ODHelpMenuManagerCategoryIds_DefaultAdvanced[HelpMenuCategoryId] - remove(id:api.ODValidId): api.ODHelpMenuComponent|null - - remove(id:api.ODValidId): api.ODHelpMenuComponent|null { - return super.remove(id) - } - - exists(id:keyof ODHelpMenuManagerCategoryIds_DefaultAdvanced): boolean - exists(id:api.ODValidId): boolean - - exists(id:api.ODValidId): boolean { - return super.exists(id) - } -} - -/**## ODHelpMenuManagerCategoryIds_DefaultExtra `type` - * This interface is a list of ids available in the `ODHelpMenuCategory_DefaultExtra` class. - * It's used to generate typescript declarations for this class. - */ -export interface ODHelpMenuManagerCategoryIds_DefaultExtra {} - -/**## ODHelpMenuCategory_DefaultExtra `default_class` - * This is a special class that adds type definitions & typescript to the ODHelpMenuManager class. - * It doesn't add any extra features! - * - * This default class is made for the `opendiscord:general` category in `opendiscord.helpmenu`! - */ -export class ODHelpMenuCategory_DefaultExtra extends api.ODHelpMenuCategory { - get(id:HelpMenuCategoryId): ODHelpMenuManagerCategoryIds_DefaultExtra[HelpMenuCategoryId] - get(id:api.ODValidId): api.ODHelpMenuComponent|null - - get(id:api.ODValidId): api.ODHelpMenuComponent|null { - return super.get(id) - } - - remove(id:HelpMenuCategoryId): ODHelpMenuManagerCategoryIds_DefaultExtra[HelpMenuCategoryId] - remove(id:api.ODValidId): api.ODHelpMenuComponent|null - - remove(id:api.ODValidId): api.ODHelpMenuComponent|null { - return super.remove(id) - } - - exists(id:keyof ODHelpMenuManagerCategoryIds_DefaultExtra): boolean - exists(id:api.ODValidId): boolean - - exists(id:api.ODValidId): boolean { - return super.exists(id) - } -} \ No newline at end of file diff --git a/src/core/api/defaults/permission.ts b/src/core/api/defaults/permission.ts deleted file mode 100644 index 119d407..0000000 --- a/src/core/api/defaults/permission.ts +++ /dev/null @@ -1,30 +0,0 @@ -/////////////////////////////////////// -//DEFAULT PERMISSION MODULE -/////////////////////////////////////// -import * as api from "@open-discord-bots/framework/api" -import { ODClientManager_Default } from "./client" - -/**## ODPermissionManager_Default `default_class` - * This is a special class that adds type definitions & typescript to the ODPermissionManager class. - * It doesn't add any extra features! - * - * This default class is made for the global variable `opendiscord.permissions`! - */ -export class ODPermissionManager_Default extends api.ODPermissionManager { - constructor(debug:api.ODDebugger,client:ODClientManager_Default){ - super(debug,client,true) - } -} - -/**## ODPermissionEmbedType `type` - * This type contains all types available in the `opendiscord:no-permissions` embed. - */ -export type ODPermissionEmbedType = ( - "developer"| - "owner"| - "admin"| - "moderator"| - "support"| - "member"| - "discord-administrator" -) \ No newline at end of file diff --git a/src/core/api/defaults/plugin.ts b/src/core/api/defaults/plugin.ts deleted file mode 100644 index 03df1ec..0000000 --- a/src/core/api/defaults/plugin.ts +++ /dev/null @@ -1,76 +0,0 @@ -/////////////////////////////////////// -//DEFAULT POST MODULE -/////////////////////////////////////// -import * as api from "@open-discord-bots/framework/api" - -/**## ODPluginManagerIds_Default `interface` - * This interface is a list of ids available in the `ODPluginManager_Default` class. - * It's used to generate typescript declarations for this class. - */ -export interface ODPluginManagerIds_Default {} - -/**## ODPluginManager_Default `default_class` - * This is a special class that adds type definitions & typescript to the ODPluginManager class. - * It doesn't add any extra features! - * - * This default class is made for the global variable `opendiscord.plugins`! - */ -export class ODPluginManager_Default extends api.ODPluginManager { - declare classes: ODPluginClassManager_Default - - get(id:PluginId): ODPluginManagerIds_Default[PluginId] - get(id:api.ODValidId): api.ODPlugin|null - - get(id:api.ODValidId): api.ODPlugin|null { - return super.get(id) - } - - remove(id:PluginId): ODPluginManagerIds_Default[PluginId] - remove(id:api.ODValidId): api.ODPlugin|null - - remove(id:api.ODValidId): api.ODPlugin|null { - return super.remove(id) - } - - exists(id:keyof ODPluginManagerIds_Default): boolean - exists(id:api.ODValidId): boolean - - exists(id:api.ODValidId): boolean { - return super.exists(id) - } -} - -/**## ODPluginClassManagerIds_Default `interface` - * This interface is a list of ids available in the `ODPluginClassManager_Default` class. - * It's used to generate typescript declarations for this class. - */ -export interface ODPluginClassManagerIds_Default {} - -/**## ODPluginClassManager_Default `default_class` - * This is a special class that adds type definitions & typescript to the ODPluginClassManager class. - * It doesn't add any extra features! - * - * This default class is made for the global variable `opendiscord.plugins.classes`! - */ -export class ODPluginClassManager_Default extends api.ODPluginClassManager { - get(id:PluginClassId): ODPluginClassManagerIds_Default[PluginClassId] - get(id:api.ODValidId): api.ODManagerData|null - - get(id:api.ODValidId): api.ODManagerData|null { - return super.get(id) - } - - remove(id:PluginClassId): ODPluginClassManagerIds_Default[PluginClassId] - remove(id:api.ODValidId): api.ODManagerData|null - - remove(id:api.ODValidId): api.ODManagerData|null { - return super.remove(id) - } - - exists(id:keyof ODPluginClassManagerIds_Default): boolean - exists(id:api.ODValidId): boolean - - exists(id:api.ODValidId): boolean { - return super.exists(id) - } -} \ No newline at end of file diff --git a/src/core/api/defaults/post.ts b/src/core/api/defaults/post.ts deleted file mode 100644 index c0e4ab3..0000000 --- a/src/core/api/defaults/post.ts +++ /dev/null @@ -1,43 +0,0 @@ -/////////////////////////////////////// -//DEFAULT POST MODULE -/////////////////////////////////////// -import * as api from "@open-discord-bots/framework/api" -import * as discord from "discord.js" - -/**## ODPostManagerIds_Default `interface` - * This interface is a list of ids available in the `ODPostManager_Default` class. - * It's used to generate typescript declarations for this class. - */ -export interface ODPostManagerIds_Default { - "opendiscord:logs":api.ODPost|null, - "opendiscord:transcripts":api.ODPost|null -} - -/**## ODPostManager_Default `default_class` - * This is a special class that adds type definitions & typescript to the ODPostManager class. - * It doesn't add any extra features! - * - * This default class is made for the global variable `opendiscord.code`! - */ -export class ODPostManager_Default extends api.ODPostManager { - get(id:PostId): ODPostManagerIds_Default[PostId] - get(id:api.ODValidId): api.ODPost|null - - get(id:api.ODValidId): api.ODPost|null { - return super.get(id) - } - - remove(id:PostId): ODPostManagerIds_Default[PostId] - remove(id:api.ODValidId): api.ODPost|null - - remove(id:api.ODValidId): api.ODPost|null { - return super.remove(id) - } - - exists(id:keyof ODPostManagerIds_Default): boolean - exists(id:api.ODValidId): boolean - - exists(id:api.ODValidId): boolean { - return super.exists(id) - } -} \ No newline at end of file diff --git a/src/core/api/defaults/progressbar.ts b/src/core/api/defaults/progressbar.ts deleted file mode 100644 index 2963b0d..0000000 --- a/src/core/api/defaults/progressbar.ts +++ /dev/null @@ -1,169 +0,0 @@ -/////////////////////////////////////// -//DEFAULT PROGRESS BAR MODULE -/////////////////////////////////////// -import * as api from "@open-discord-bots/framework/api" -import ansis from "ansis" - -/**## ODProgressBarRenderer_DefaultSettingsLabel `type` - * All available label types for the default progress bar renderer - */ -export type ODProgressBarRenderer_DefaultSettingsLabel = "value"|"percentage"|"fraction"|"time-ms"|"time-sec"|"time-min" - -/**## ODProgressBarRenderer_DefaultSettings `interface` - * This interface contains the settings for the default progress bar renderer. - */ -export interface ODProgressBarRenderer_DefaultSettings { - /**The color of the progress bar border. */ - borderColor:api.ODValidConsoleColor|"openticket", - /**The color of the progress bar (filled side). */ - filledBarColor:api.ODValidConsoleColor|"openticket", - /**The color of the progress bar (empty side). */ - emptyBarColor:api.ODValidConsoleColor|"openticket", - /**The color of the text before the progress bar. */ - prefixColor:api.ODValidConsoleColor|"openticket", - /**The color of the text after the progress bar. */ - suffixColor:api.ODValidConsoleColor|"openticket", - /**The color of the progress bar label. */ - labelColor:api.ODValidConsoleColor|"openticket", - - /**The character used in the left border. */ - leftBorderChar:string, - /**The character used in the right border. */ - rightBorderChar:string, - /**The character used in the filled side of the progress bar. */ - filledBarChar:string, - /**The character used in the empty side of the progress bar. */ - emptyBarChar:string, - /**The label type. (will show a number related to the progress) */ - labelType:ODProgressBarRenderer_DefaultSettingsLabel, - /**The position of the label. */ - labelPosition:"start"|"end", - /**The width of the bar. (50 characters by default) */ - barWidth:number, - - /**Show the bar. */ - showBar:boolean, - /**Show the label. */ - showLabel:boolean, - /**Show the border. */ - showBorder:boolean, -} - -export class ODProgressBarRenderer_Default extends api.ODProgressBarRenderer { - constructor(id:api.ODValidId,settings:ODProgressBarRenderer_DefaultSettings){ - super(id,(settings,min,max,value,rawPrefix,rawSuffix) => { - const percentage = (value-min)/(max-min) - const barLevel = Math.round(percentage*settings.barWidth) - - const borderAnsis = (settings.borderColor == "openticket") ? ansis.hex("#f8ba00") : ansis[settings.borderColor] - const filledBarAnsis = (settings.filledBarColor == "openticket") ? ansis.hex("#f8ba00") : ansis[settings.filledBarColor] - const emptyBarAnsis = (settings.emptyBarColor == "openticket") ? ansis.hex("#f8ba00") : ansis[settings.emptyBarColor] - const labelAnsis = (settings.labelColor == "openticket") ? ansis.hex("#f8ba00") : ansis[settings.labelColor] - const prefixAnsis = (settings.prefixColor == "openticket") ? ansis.hex("#f8ba00") : ansis[settings.prefixColor] - const suffixAnsis = (settings.suffixColor == "openticket") ? ansis.hex("#f8ba00") : ansis[settings.suffixColor] - - const leftBorder = (settings.showBorder) ? borderAnsis(settings.leftBorderChar) : "" - const rightBorder = (settings.showBorder) ? borderAnsis(settings.rightBorderChar) : "" - const bar = (settings.showBar) ? filledBarAnsis(settings.filledBarChar.repeat(barLevel))+emptyBarAnsis(settings.emptyBarChar.repeat(settings.barWidth-barLevel)) : "" - const prefix = (rawPrefix) ? prefixAnsis(rawPrefix)+" " : "" - const suffix = (rawSuffix) ? " "+suffixAnsis(rawSuffix) : "" - let label: string - if (!settings.showLabel) label = "" - if (settings.labelType == "fraction") label = labelAnsis(value+"/"+max) - else if (settings.labelType == "percentage") label = labelAnsis(Math.round(percentage*100)+"%") - else if (settings.labelType == "time-ms") label = labelAnsis(value+"ms") - else if (settings.labelType == "time-sec") label = labelAnsis(Math.round(value*10)/10+"sec") - else if (settings.labelType == "time-min") label = labelAnsis(Math.round(value*10)/10+"min") - else label = labelAnsis(value.toString()) - - const labelWithPrefixAndSuffix = prefix+label+suffix - return (settings.labelPosition == "start") ? labelWithPrefixAndSuffix+" "+leftBorder+bar+rightBorder : leftBorder+bar+rightBorder+" "+labelWithPrefixAndSuffix - },settings) - } -} - -/**## ODProgressBarRendererManagerIds_Default `interface` - * This interface is a list of ids available in the `ODProgressBarRendererManager_Default` class. - * It's used to generate typescript declarations for this class. - */ -export interface ODProgressBarRendererManagerIds_Default { - "opendiscord:value-renderer":ODProgressBarRenderer_Default, - "opendiscord:fraction-renderer":ODProgressBarRenderer_Default, - "opendiscord:percentage-renderer":ODProgressBarRenderer_Default, - "opendiscord:time-ms-renderer":ODProgressBarRenderer_Default, - "opendiscord:time-sec-renderer":ODProgressBarRenderer_Default, - "opendiscord:time-min-renderer":ODProgressBarRenderer_Default, -} - -/**## ODProgressBarRendererManager_Default `default_class` - * This is a special class that adds type definitions & typescript to the ODProgressBarRendererManager class. - * It doesn't add any extra features! - * - * This default class is made for the global variable `opendiscord.progressbars.renderers`! - */ -export class ODProgressBarRendererManager_Default extends api.ODProgressBarRendererManager { - get(id:ProgressBarId): ODProgressBarRendererManagerIds_Default[ProgressBarId] - get(id:api.ODValidId): api.ODProgressBarRenderer<{}>|null - - get(id:api.ODValidId): api.ODProgressBarRenderer<{}>|null { - return super.get(id) - } - - remove(id:ProgressBarId): ODProgressBarRendererManagerIds_Default[ProgressBarId] - remove(id:api.ODValidId): api.ODProgressBarRenderer<{}>|null - - remove(id:api.ODValidId): api.ODProgressBarRenderer<{}>|null { - return super.remove(id) - } - - exists(id:keyof ODProgressBarRendererManagerIds_Default): boolean - exists(id:api.ODValidId): boolean - - exists(id:api.ODValidId): boolean { - return super.exists(id) - } -} - -/**## ODProgressBarManagerIds_Default `interface` - * This interface is a list of ids available in the `ODProgressBarManager_Default` class. - * It's used to generate typescript declarations for this class. - */ -export interface ODProgressBarManagerIds_Default { - "opendiscord:slash-command-remove":api.ODManualProgressBar, - "opendiscord:slash-command-create":api.ODManualProgressBar, - "opendiscord:slash-command-update":api.ODManualProgressBar, - "opendiscord:context-menu-remove":api.ODManualProgressBar, - "opendiscord:context-menu-create":api.ODManualProgressBar, - "opendiscord:context-menu-update":api.ODManualProgressBar, -} - -/**## ODProgressBarManager_Default `default_class` - * This is a special class that adds type definitions & typescript to the ODProgressBarManager class. - * It doesn't add any extra features! - * - * This default class is made for the global variable `opendiscord.progressbars`! - */ -export class ODProgressBarManager_Default extends api.ODProgressBarManager { - declare renderers: ODProgressBarRendererManager_Default - - get(id:ProgressBarId): ODProgressBarManagerIds_Default[ProgressBarId] - get(id:api.ODValidId): api.ODProgressBar|null - - get(id:api.ODValidId): api.ODProgressBar|null { - return super.get(id) - } - - remove(id:ProgressBarId): ODProgressBarManagerIds_Default[ProgressBarId] - remove(id:api.ODValidId): api.ODProgressBar|null - - remove(id:api.ODValidId): api.ODProgressBar|null { - return super.remove(id) - } - - exists(id:keyof ODProgressBarManagerIds_Default): boolean - exists(id:api.ODValidId): boolean - - exists(id:api.ODValidId): boolean { - return super.exists(id) - } -} \ No newline at end of file diff --git a/src/core/api/defaults/responder.ts b/src/core/api/defaults/responder.ts deleted file mode 100644 index c7db244..0000000 --- a/src/core/api/defaults/responder.ts +++ /dev/null @@ -1,354 +0,0 @@ -/////////////////////////////////////// -//DEFAULT RESPONDER MODULE -/////////////////////////////////////// -import * as api from "@open-discord-bots/framework/api" -import { ODWorkerManager_Default } from "./worker" - -/**## ODResponderManager_Default `default_class` - * This is a special class that adds type definitions & typescript to the ODResponderManager class. - * It doesn't add any extra features! - * - * This default class is made for the global variable `opendiscord.responders`! - */ -export class ODResponderManager_Default extends api.ODResponderManager { - declare commands: ODCommandResponderManager_Default - declare buttons: ODButtonResponderManager_Default - declare dropdowns: ODDropdownResponderManager_Default - declare modals: ODModalResponderManager_Default - declare contextMenus: ODContextMenuResponderManager_Default - declare autocomplete: ODAutocompleteResponderManager_Default -} - -/**## ODCommandResponderManagerIds_Default `interface` - * This interface is a list of ids available in the `ODCommandResponderManager_Default` class. - * It's used to generate typescript declarations for this class. - */ -export interface ODCommandResponderManagerIds_Default { - "opendiscord:help":{source:"slash"|"text",params:{},workers:"opendiscord:permissions"|"opendiscord:help"|"opendiscord:logs"}, - "opendiscord:stats":{source:"slash"|"text",params:{},workers:"opendiscord:permissions"|"opendiscord:stats"|"opendiscord:logs"}, - "opendiscord:panel":{source:"slash"|"text",params:{},workers:"opendiscord:permissions"|"opendiscord:panel"|"opendiscord:logs"}, - "opendiscord:ticket":{source:"slash"|"text",params:{},workers:"opendiscord:permissions"|"opendiscord:ticket"|"opendiscord:logs"}, - "opendiscord:blacklist":{source:"slash"|"text",params:{},workers:"opendiscord:permissions"|"opendiscord:blacklist"|"opendiscord:discord-logs"|"opendiscord:logs"}, - - "opendiscord:close":{source:"slash"|"text",params:{},workers:"opendiscord:permissions"|"opendiscord:close"|"opendiscord:logs"}, - "opendiscord:reopen":{source:"slash"|"text",params:{},workers:"opendiscord:permissions"|"opendiscord:reopen"|"opendiscord:logs"}, - "opendiscord:delete":{source:"slash"|"text",params:{},workers:"opendiscord:permissions"|"opendiscord:delete"|"opendiscord:logs"}, - "opendiscord:claim":{source:"slash"|"text",params:{},workers:"opendiscord:permissions"|"opendiscord:claim"|"opendiscord:logs"}, - "opendiscord:unclaim":{source:"slash"|"text",params:{},workers:"opendiscord:permissions"|"opendiscord:unclaim"|"opendiscord:logs"}, - "opendiscord:pin":{source:"slash"|"text",params:{},workers:"opendiscord:permissions"|"opendiscord:pin"|"opendiscord:logs"}, - "opendiscord:unpin":{source:"slash"|"text",params:{},workers:"opendiscord:permissions"|"opendiscord:unpin"|"opendiscord:logs"}, - - "opendiscord:rename":{source:"slash"|"text",params:{},workers:"opendiscord:permissions"|"opendiscord:rename"|"opendiscord:logs"}, - "opendiscord:move":{source:"slash"|"text",params:{},workers:"opendiscord:permissions"|"opendiscord:move"|"opendiscord:logs"}, - "opendiscord:add":{source:"slash"|"text",params:{},workers:"opendiscord:permissions"|"opendiscord:add"|"opendiscord:logs"}, - "opendiscord:remove":{source:"slash"|"text",params:{},workers:"opendiscord:permissions"|"opendiscord:remove"|"opendiscord:logs"}, - "opendiscord:clear":{source:"slash"|"text",params:{},workers:"opendiscord:permissions"|"opendiscord:clear"|"opendiscord:logs"}, - "opendiscord:topic":{source:"slash"|"text",params:{},workers:"opendiscord:permissions"|"opendiscord:topic"|"opendiscord:logs"}, - "opendiscord:priority":{source:"slash"|"text",params:{},workers:"opendiscord:permissions"|"opendiscord:priority"|"opendiscord:logs"}, - "opendiscord:transfer":{source:"slash"|"text",params:{},workers:"opendiscord:permissions"|"opendiscord:transfer"|"opendiscord:logs"}, - - "opendiscord:autoclose":{source:"slash"|"text",params:{},workers:"opendiscord:permissions"|"opendiscord:autoclose"|"opendiscord:logs"}, - "opendiscord:autodelete":{source:"slash"|"text",params:{},workers:"opendiscord:permissions"|"opendiscord:autodelete"|"opendiscord:logs"}, -} - -/**## ODCommandResponderManager_Default `default_class` - * This is a special class that adds type definitions & typescript to the ODCommandResponderManager class. - * It doesn't add any extra features! - * - * This default class is made for the global variable `opendiscord.responders.commands`! - */ -export class ODCommandResponderManager_Default extends api.ODCommandResponderManager { - get(id:CommandResponderId): ODCommandResponder_Default - get(id:api.ODValidId): api.ODCommandResponder<"slash"|"text",any>|null - - get(id:api.ODValidId): api.ODCommandResponder<"slash"|"text",any>|null { - return super.get(id) - } - - remove(id:CommandResponderId): ODCommandResponder_Default - remove(id:api.ODValidId): api.ODCommandResponder<"slash"|"text",any>|null - - remove(id:api.ODValidId): api.ODCommandResponder<"slash"|"text",any>|null { - return super.remove(id) - } - - exists(id:keyof ODCommandResponderManagerIds_Default): boolean - exists(id:api.ODValidId): boolean - - exists(id:api.ODValidId): boolean { - return super.exists(id) - } -} - -/**## ODCommandResponder_Default `default_class` - * This is a special class that adds type definitions & typescript to the ODCommandResponder class. - * It doesn't add any extra features! - * - * This default class is made for the default `ODCommandResponder`'s! - */ -export class ODCommandResponder_Default extends api.ODCommandResponder { - declare workers: ODWorkerManager_Default -} - -/**## ODButtonResponderManagerIds_Default `interface` - * This interface is a list of ids available in the `ODButtonResponderManager_Default` class. - * It's used to generate typescript declarations for this class. - */ -export interface ODButtonResponderManagerIds_Default { - "opendiscord:verifybar-success":{source:"button",params:{},workers:"opendiscord:handle-verifybar"}, - "opendiscord:verifybar-failure":{source:"button",params:{},workers:"opendiscord:handle-verifybar"}, - - "opendiscord:help-menu-switch":{source:"button",params:{},workers:"opendiscord:update-help-menu"}, - "opendiscord:help-menu-previous":{source:"button",params:{},workers:"opendiscord:update-help-menu"}, - "opendiscord:help-menu-next":{source:"button",params:{},workers:"opendiscord:update-help-menu"}, - - "opendiscord:ticket-option":{source:"button",params:{},workers:"opendiscord:ticket-option"}, - "opendiscord:role-option":{source:"button",params:{},workers:"opendiscord:role-option"}, - - "opendiscord:claim-ticket":{source:"button",params:{},workers:"opendiscord:claim-ticket"}, - "opendiscord:unclaim-ticket":{source:"button",params:{},workers:"opendiscord:unclaim-ticket"}, - "opendiscord:pin-ticket":{source:"button",params:{},workers:"opendiscord:pin-ticket"}, - "opendiscord:unpin-ticket":{source:"button",params:{},workers:"opendiscord:unpin-ticket"}, - "opendiscord:close-ticket":{source:"button",params:{},workers:"opendiscord:close-ticket"}, - "opendiscord:reopen-ticket":{source:"button",params:{},workers:"opendiscord:reopen-ticket"}, - "opendiscord:delete-ticket":{source:"button",params:{},workers:"opendiscord:delete-ticket"}, - - "opendiscord:transcript-error-retry":{source:"button",params:{},workers:"opendiscord:permissions"|"opendiscord:delete-ticket"|"opendiscord:logs"}, - "opendiscord:transcript-error-continue":{source:"button",params:{},workers:"opendiscord:permissions"|"opendiscord:delete-ticket"|"opendiscord:logs"}, - "opendiscord:clear-continue":{source:"button",params:{},workers:"opendiscord:clear-continue"}, -} - -/**## ODButtonResponderManager_Default `default_class` - * This is a special class that adds type definitions & typescript to the ODButtonResponderManager class. - * It doesn't add any extra features! - * - * This default class is made for the global variable `opendiscord.responders.buttons`! - */ -export class ODButtonResponderManager_Default extends api.ODButtonResponderManager { - get(id:ButtonResponderId): ODButtonResponder_Default - get(id:api.ODValidId): api.ODButtonResponder<"button",any>|null - - get(id:api.ODValidId): api.ODButtonResponder<"button",any>|null { - return super.get(id) - } - - remove(id:ButtonResponderId): ODButtonResponder_Default - remove(id:api.ODValidId): api.ODButtonResponder<"button",any>|null - - remove(id:api.ODValidId): api.ODButtonResponder<"button",any>|null { - return super.remove(id) - } - - exists(id:keyof ODButtonResponderManagerIds_Default): boolean - exists(id:api.ODValidId): boolean - - exists(id:api.ODValidId): boolean { - return super.exists(id) - } -} - -/**## ODButtonResponder_Default `default_class` - * This is a special class that adds type definitions & typescript to the ODButtonResponder class. - * It doesn't add any extra features! - * - * This default class is made for the default `ODButtonResponder`'s! - */ -export class ODButtonResponder_Default extends api.ODButtonResponder { - declare workers: ODWorkerManager_Default -} - -/**## ODDropdownResponderManagerIds_Default `interface` - * This interface is a list of ids available in the `ODDropdownResponderManager_Default` class. - * It's used to generate typescript declarations for this class. - */ -export interface ODDropdownResponderManagerIds_Default { - "opendiscord:panel-dropdown-tickets":{source:"dropdown",params:{},workers:"opendiscord:panel-dropdown-tickets"}, -} - -/**## ODDropdownResponderManager_Default `default_class` - * This is a special class that adds type definitions & typescript to the ODDropdownResponderManager class. - * It doesn't add any extra features! - * - * This default class is made for the global variable `opendiscord.responders.dropdowns`! - */ -export class ODDropdownResponderManager_Default extends api.ODDropdownResponderManager { - get(id:DropdownResponderId): ODDropdownResponder_Default - get(id:api.ODValidId): api.ODDropdownResponder<"dropdown",any>|null - - get(id:api.ODValidId): api.ODDropdownResponder<"dropdown",any>|null { - return super.get(id) - } - - remove(id:DropdownResponderId): ODDropdownResponder_Default - remove(id:api.ODValidId): api.ODDropdownResponder<"dropdown",any>|null - - remove(id:api.ODValidId): api.ODDropdownResponder<"dropdown",any>|null { - return super.remove(id) - } - - exists(id:keyof ODDropdownResponderManagerIds_Default): boolean - exists(id:api.ODValidId): boolean - - exists(id:api.ODValidId): boolean { - return super.exists(id) - } -} - -/**## ODDropdownResponder_Default `default_class` - * This is a special class that adds type definitions & typescript to the ODDropdownResponder class. - * It doesn't add any extra features! - * - * This default class is made for the default `ODDropdownResponder`'s! - */ -export class ODDropdownResponder_Default extends api.ODDropdownResponder { - declare workers: ODWorkerManager_Default -} - -/**## ODModalResponderManagerIds_Default `interface` - * This interface is a list of ids available in the `ODModalResponderManager_Default` class. - * It's used to generate typescript declarations for this class. - */ -export interface ODModalResponderManagerIds_Default { - "opendiscord:ticket-questions":{source:"modal",params:{},workers:"opendiscord:ticket-questions"}, - "opendiscord:close-ticket-reason":{source:"modal",params:{},workers:"opendiscord:close-ticket-reason"}, - "opendiscord:reopen-ticket-reason":{source:"modal",params:{},workers:"opendiscord:reopen-ticket-reason"}, - "opendiscord:delete-ticket-reason":{source:"modal",params:{},workers:"opendiscord:delete-ticket-reason"}, - "opendiscord:claim-ticket-reason":{source:"modal",params:{},workers:"opendiscord:claim-ticket-reason"}, - "opendiscord:unclaim-ticket-reason":{source:"modal",params:{},workers:"opendiscord:unclaim-ticket-reason"}, - "opendiscord:pin-ticket-reason":{source:"modal",params:{},workers:"opendiscord:pin-ticket-reason"}, - "opendiscord:unpin-ticket-reason":{source:"modal",params:{},workers:"opendiscord:unpin-ticket-reason"}, -} - -/**## ODModalResponderManager_Default `default_class` - * This is a special class that adds type definitions & typescript to the ODModalResponderManager class. - * It doesn't add any extra features! - * - * This default class is made for the global variable `opendiscord.responders.dropdowns`! - */ -export class ODModalResponderManager_Default extends api.ODModalResponderManager { - get(id:ModalResponderId): ODModalResponder_Default - get(id:api.ODValidId): api.ODModalResponder<"modal",any>|null - - get(id:api.ODValidId): api.ODModalResponder<"modal",any>|null { - return super.get(id) - } - - remove(id:ModalResponderId): ODModalResponder_Default - remove(id:api.ODValidId): api.ODModalResponder<"modal",any>|null - - remove(id:api.ODValidId): api.ODModalResponder<"modal",any>|null { - return super.remove(id) - } - - exists(id:keyof ODModalResponderManagerIds_Default): boolean - exists(id:api.ODValidId): boolean - - exists(id:api.ODValidId): boolean { - return super.exists(id) - } -} - -/**## ODModalResponder_Default `default_class` - * This is a special class that adds type definitions & typescript to the ODModalResponder class. - * It doesn't add any extra features! - * - * This default class is made for the default `ODModalResponder`'s! - */ -export class ODModalResponder_Default extends api.ODModalResponder { - declare workers: ODWorkerManager_Default -} - -/**## ODContextMenuResponderManagerIds_Default `interface` - * This interface is a list of ids available in the `ODContextMenuResponderManager_Default` class. - * It's used to generate typescript declarations for this class. - */ -export interface ODContextMenuResponderManagerIds_Default { - //"opendiscord:example":{source:"context-menu",params:{},workers:"opendiscord:example"}, -} - -/**## ODContextMenuResponderManager_Default `default_class` - * This is a special class that adds type definitions & typescript to the ODContextMenuResponderManager class. - * It doesn't add any extra features! - * - * This default class is made for the global variable `opendiscord.responders.contextMenus`! - */ -export class ODContextMenuResponderManager_Default extends api.ODContextMenuResponderManager { - get(id:ModalResponderId): ODContextMenuResponder_Default - get(id:api.ODValidId): api.ODContextMenuResponder<"context-menu",any>|null - - get(id:api.ODValidId): api.ODContextMenuResponder<"context-menu",any>|null { - return super.get(id) - } - - remove(id:ModalResponderId): ODContextMenuResponder_Default - remove(id:api.ODValidId): api.ODContextMenuResponder<"context-menu",any>|null - - remove(id:api.ODValidId): api.ODContextMenuResponder<"context-menu",any>|null { - return super.remove(id) - } - - exists(id:keyof ODContextMenuResponderManagerIds_Default): boolean - exists(id:api.ODValidId): boolean - - exists(id:api.ODValidId): boolean { - return super.exists(id) - } -} - -/**## ODContextMenuResponder_Default `default_class` - * This is a special class that adds type definitions & typescript to the ODContextMenuResponder class. - * It doesn't add any extra features! - * - * This default class is made for the default `ODContextMenuResponder`'s! - */ -export class ODContextMenuResponder_Default extends api.ODContextMenuResponder { - declare workers: ODWorkerManager_Default -} - -/**## ODAutocompleteResponderManagerIds_Default `interface` - * This interface is a list of ids available in the `ODAutocompleteResponderManager_Default` class. - * It's used to generate typescript declarations for this class. - */ -export interface ODAutocompleteResponderManagerIds_Default { - "opendiscord:panel-id":{source:"autocomplete",params:{},workers:"opendiscord:panel-id"}, - "opendiscord:option-id":{source:"autocomplete",params:{},workers:"opendiscord:option-id"} -} - -/**## ODAutocompleteResponderManager_Default `default_class` - * This is a special class that adds type definitions & typescript to the ODAutocompleteResponderManager class. - * It doesn't add any extra features! - * - * This default class is made for the global variable `opendiscord.responders.autocomplete`! - */ -export class ODAutocompleteResponderManager_Default extends api.ODAutocompleteResponderManager { - get(id:ModalResponderId): ODAutocompleteResponder_Default - get(id:api.ODValidId): api.ODAutocompleteResponder<"autocomplete",any>|null - - get(id:api.ODValidId): api.ODAutocompleteResponder<"autocomplete",any>|null { - return super.get(id) - } - - remove(id:ModalResponderId): ODAutocompleteResponder_Default - remove(id:api.ODValidId): api.ODAutocompleteResponder<"autocomplete",any>|null - - remove(id:api.ODValidId): api.ODAutocompleteResponder<"autocomplete",any>|null { - return super.remove(id) - } - - exists(id:keyof ODAutocompleteResponderManagerIds_Default): boolean - exists(id:api.ODValidId): boolean - - exists(id:api.ODValidId): boolean { - return super.exists(id) - } -} - -/**## ODAutocompleteResponder_Default `default_class` - * This is a special class that adds type definitions & typescript to the ODAutocompleteResponder class. - * It doesn't add any extra features! - * - * This default class is made for the default `ODAutocompleteResponder`'s! - */ -export class ODAutocompleteResponder_Default extends api.ODAutocompleteResponder { - declare workers: ODWorkerManager_Default -} \ No newline at end of file diff --git a/src/core/api/defaults/session.ts b/src/core/api/defaults/session.ts deleted file mode 100644 index 1c46e56..0000000 --- a/src/core/api/defaults/session.ts +++ /dev/null @@ -1,41 +0,0 @@ -/////////////////////////////////////// -//DEFAULT SESSION MODULE -/////////////////////////////////////// -import * as api from "@open-discord-bots/framework/api" - -/**## ODSessionManagerIds_Default `interface` - * This interface is a list of ids available in the `ODSessionManager_Default` class. - * It's used to generate typescript declarations for this class. - */ -export interface ODSessionManagerIds_Default { - //"test-session":ODSession -} - -/**## ODSessionManager_Default `default_class` - * This is a special class that adds type definitions & typescript to the ODSessionManager class. - * It doesn't add any extra features! - * - * This default class is made for the global variable `opendiscord.sessions`! - */ -export class ODSessionManager_Default extends api.ODSessionManager { - get(id:SessionId): ODSessionManagerIds_Default[SessionId] - get(id:api.ODValidId): api.ODSession|null - - get(id:api.ODValidId): api.ODSession|null { - return super.get(id) - } - - remove(id:SessionId): ODSessionManagerIds_Default[SessionId] - remove(id:api.ODValidId): api.ODSession|null - - remove(id:api.ODValidId): api.ODSession|null { - return super.remove(id) - } - - exists(id:keyof ODSessionManagerIds_Default): boolean - exists(id:api.ODValidId): boolean - - exists(id:api.ODValidId): boolean { - return super.exists(id) - } -} \ No newline at end of file diff --git a/src/core/api/defaults/startscreen.ts b/src/core/api/defaults/startscreen.ts deleted file mode 100644 index 19b43d7..0000000 --- a/src/core/api/defaults/startscreen.ts +++ /dev/null @@ -1,47 +0,0 @@ -/////////////////////////////////////// -//DEFAULT STARTSCREEN MODULE -/////////////////////////////////////// -import * as api from "@open-discord-bots/framework/api" - -/**## ODStartScreenManagerIds_Default `interface` - * This interface is a list of ids available in the `ODStartScreenManager_Default` class. - * It's used to generate typescript declarations for this class. - */ -export interface ODStartScreenManagerIds_Default { - "opendiscord:logo":api.ODStartScreenLogoComponent, - "opendiscord:header":api.ODStartScreenHeaderComponent, - "opendiscord:flags":api.ODStartScreenFlagsCategoryComponent, - "opendiscord:plugins":api.ODStartScreenPluginsCategoryComponent, - "opendiscord:stats":api.ODStartScreenPropertiesCategoryComponent, - "opendiscord:livestatus":api.ODStartScreenLiveStatusCategoryComponent, - "opendiscord:logs":api.ODStartScreenCategoryComponent -} - -/**## ODStartScreenManager_Default `default_class` - * This is a special class that adds type definitions & typescript to the ODStartScreenManager class. - * It doesn't add any extra features! - * - * This default class is made for the global variable `opendiscord.startscreen`! - */ -export class ODStartScreenManager_Default extends api.ODStartScreenManager { - get(id:StartScreenId): ODStartScreenManagerIds_Default[StartScreenId] - get(id:api.ODValidId): api.ODStartScreenComponent|null - - get(id:api.ODValidId): api.ODStartScreenComponent|null { - return super.get(id) - } - - remove(id:StartScreenId): ODStartScreenManagerIds_Default[StartScreenId] - remove(id:api.ODValidId): api.ODStartScreenComponent|null - - remove(id:api.ODValidId): api.ODStartScreenComponent|null { - return super.remove(id) - } - - exists(id:keyof ODStartScreenManagerIds_Default): boolean - exists(id:api.ODValidId): boolean - - exists(id:api.ODValidId): boolean { - return super.exists(id) - } -} \ No newline at end of file diff --git a/src/core/api/defaults/stat.ts b/src/core/api/defaults/stat.ts deleted file mode 100644 index 98b918d..0000000 --- a/src/core/api/defaults/stat.ts +++ /dev/null @@ -1,471 +0,0 @@ -/////////////////////////////////////// -//DEFAULT SESSION MODULE -/////////////////////////////////////// -import * as api from "@open-discord-bots/framework/api" - -/**## ODStatsManagerIds_Default `interface` - * This interface is a list of ids available in the `ODStatsManager_Default` class. - * It's used to generate typescript declarations for this class. - */ -export interface ODStatsManagerIds_Default { - "opendiscord:global":ODStatGlobalScope_DefaultGlobal, - "opendiscord:system":ODStatGlobalScope_DefaultSystem, - "opendiscord:user":ODStatScope_DefaultUser, - "opendiscord:ticket":ODStatScope_DefaultTicket, - "opendiscord:participants":ODStatScope_DefaultParticipants, - "opendiscord:messages":ODStatScope_DefaultMessages, -} - -/**## ODStatsManager_Default `default_class` - * This is a special class that adds type definitions & typescript to the ODStatsManager class. - * It doesn't add any extra features! - * - * This default class is made for the global variable `opendiscord.stats`! - */ -export class ODStatsManager_Default extends api.ODStatsManager { - get(id:StatsId): ODStatsManagerIds_Default[StatsId] - get(id:api.ODValidId): api.ODStatScope|null - - get(id:api.ODValidId): api.ODStatScope|null { - return super.get(id) - } - - remove(id:StatsId): ODStatsManagerIds_Default[StatsId] - remove(id:api.ODValidId): api.ODStatScope|null - - remove(id:api.ODValidId): api.ODStatScope|null { - return super.remove(id) - } - - exists(id:keyof ODStatsManagerIds_Default): boolean - exists(id:api.ODValidId): boolean - - exists(id:api.ODValidId): boolean { - return super.exists(id) - } -} - -/**## ODStatGlobalScopeIds_DefaultGlobal `type` - * This interface is a list of ids available in the `ODStatGlobalScope_DefaultGlobal` class. - * It's used to generate typescript declarations for this class. - */ -export interface ODStatGlobalScopeIds_DefaultGlobal { - "opendiscord:tickets-created":api.ODBasicStat, - "opendiscord:tickets-closed":api.ODBasicStat, - "opendiscord:tickets-deleted":api.ODBasicStat, - "opendiscord:tickets-reopened":api.ODBasicStat, - "opendiscord:tickets-autoclosed":api.ODBasicStat, - "opendiscord:tickets-autodeleted":api.ODBasicStat, - "opendiscord:tickets-claimed":api.ODBasicStat, - "opendiscord:tickets-pinned":api.ODBasicStat, - "opendiscord:tickets-moved":api.ODBasicStat, - "opendiscord:tickets-transferred":api.ODBasicStat, - "opendiscord:users-blacklisted":api.ODBasicStat, - "opendiscord:transcripts-created":api.ODBasicStat, - "opendiscord:ticket-volume":api.ODDynamicStat, - "opendiscord:average-tickets":api.ODDynamicStat, -} - -/**## ODStatGlobalScope_DefaultGlobal `default_class` - * This is a special class that adds type definitions & typescript to the ODStatsManager class. - * It doesn't add any extra features! - * - * This default class is made for the `opendiscord:global` category in `opendiscord.stats`! - */ -export class ODStatGlobalScope_DefaultGlobal extends api.ODStatGlobalScope { - get(id:StatsId): ODStatGlobalScopeIds_DefaultGlobal[StatsId] - get(id:api.ODValidId): api.ODStat|null - - get(id:api.ODValidId): api.ODStat|null { - return super.get(id) - } - - remove(id:StatsId): ODStatGlobalScopeIds_DefaultGlobal[StatsId] - remove(id:api.ODValidId): api.ODStat|null - - remove(id:api.ODValidId): api.ODStat|null { - return super.remove(id) - } - - exists(id:keyof ODStatGlobalScopeIds_DefaultGlobal): boolean - exists(id:api.ODValidId): boolean - - exists(id:api.ODValidId): boolean { - return super.exists(id) - } - - getStat(id:StatsId): Promise - getStat(id:api.ODValidId): Promise - - getStat(id:api.ODValidId): Promise { - return super.getStat(id) - } - - getAllStats(id:StatsId): Promise<{id:string,value:api.ODValidStatValue}[]> - getAllStats(id:api.ODValidId): Promise<{id:string,value:api.ODValidStatValue}[]> - - getAllStats(id:api.ODValidId): Promise<{id:string,value:api.ODValidStatValue}[]> { - return super.getAllStats(id) - } - - setStat(id:StatsId, value:api.ODValidStatValue, mode:api.ODStatScopeSetMode): Promise - setStat(id:api.ODValidId, value:api.ODValidStatValue, mode:api.ODStatScopeSetMode): Promise - - setStat(id:api.ODValidId, value:api.ODValidStatValue, mode:api.ODStatScopeSetMode): Promise { - return super.setStat(id,value,mode) - } - - resetStat(id:api.ODValidId): Promise - resetStat(id:api.ODValidId): Promise - - resetStat(id:api.ODValidId): Promise { - return super.resetStat(id) - } -} - -/**## ODStatGlobalScopeIds_DefaultSystem `type` - * This interface is a list of ids available in the `ODStatScope_DefaultSystem` class. - * It's used to generate typescript declarations for this class. - */ -export interface ODStatGlobalScopeIds_DefaultSystem { - "opendiscord:startup-date":api.ODDynamicStat, - "opendiscord:system-uptime":api.ODDynamicStat, - "opendiscord:version":api.ODDynamicStat -} - -/**## ODStatGlobalScope_DefaultSystem `default_class` - * This is a special class that adds type definitions & typescript to the ODStatsManager class. - * It doesn't add any extra features! - * - * This default class is made for the `opendiscord:system` category in `opendiscord.stats`! - */ -export class ODStatGlobalScope_DefaultSystem extends api.ODStatGlobalScope { - get(id:StatsId): ODStatGlobalScopeIds_DefaultSystem[StatsId] - get(id:api.ODValidId): api.ODStat|null - - get(id:api.ODValidId): api.ODStat|null { - return super.get(id) - } - - remove(id:StatsId): ODStatGlobalScopeIds_DefaultSystem[StatsId] - remove(id:api.ODValidId): api.ODStat|null - - remove(id:api.ODValidId): api.ODStat|null { - return super.remove(id) - } - - exists(id:keyof ODStatGlobalScopeIds_DefaultSystem): boolean - exists(id:api.ODValidId): boolean - - exists(id:api.ODValidId): boolean { - return super.exists(id) - } - - getStat(id:StatsId): Promise - getStat(id:api.ODValidId): Promise - - getStat(id:api.ODValidId): Promise { - return super.getStat(id) - } - - getAllStats(id:StatsId): Promise<{id:string,value:api.ODValidStatValue}[]> - getAllStats(id:api.ODValidId): Promise<{id:string,value:api.ODValidStatValue}[]> - - getAllStats(id:api.ODValidId): Promise<{id:string,value:api.ODValidStatValue}[]> { - return super.getAllStats(id) - } - - setStat(id:StatsId, value:api.ODValidStatValue, mode:api.ODStatScopeSetMode): Promise - setStat(id:api.ODValidId, value:api.ODValidStatValue, mode:api.ODStatScopeSetMode): Promise - - setStat(id:api.ODValidId, value:api.ODValidStatValue, mode:api.ODStatScopeSetMode): Promise { - return super.setStat(id,value,mode) - } - - resetStat(id:api.ODValidId): Promise - resetStat(id:api.ODValidId): Promise - - resetStat(id:api.ODValidId): Promise { - return super.resetStat(id) - } -} - -/**## ODStatScopeIds_DefaultUser `type` - * This interface is a list of ids available in the `ODStatScope_DefaultUser` class. - * It's used to generate typescript declarations for this class. - */ -export interface ODStatScopeIds_DefaultUser { - "opendiscord:name":api.ODDynamicStat, - "opendiscord:role":api.ODDynamicStat, - "opendiscord:tickets-created":api.ODBasicStat, - "opendiscord:tickets-closed":api.ODBasicStat, - "opendiscord:tickets-deleted":api.ODBasicStat, - "opendiscord:tickets-reopened":api.ODBasicStat, - "opendiscord:tickets-claimed":api.ODBasicStat, - "opendiscord:tickets-pinned":api.ODBasicStat, - "opendiscord:tickets-moved":api.ODBasicStat, - "opendiscord:tickets-transferred":api.ODBasicStat, - "opendiscord:users-blacklisted":api.ODBasicStat, - "opendiscord:transcripts-created":api.ODBasicStat, - "opendiscord:current-tickets":api.ODDynamicStat, -} - -/**## ODStatScope_DefaultUser `default_class` - * This is a special class that adds type definitions & typescript to the ODStatsManager class. - * It doesn't add any extra features! - * - * This default class is made for the `opendiscord:user` category in `opendiscord.stats`! - */ -export class ODStatScope_DefaultUser extends api.ODStatScope { - get(id:StatsId): ODStatScopeIds_DefaultUser[StatsId] - get(id:api.ODValidId): api.ODStat|null - - get(id:api.ODValidId): api.ODStat|null { - return super.get(id) - } - - remove(id:StatsId): ODStatScopeIds_DefaultUser[StatsId] - remove(id:api.ODValidId): api.ODStat|null - - remove(id:api.ODValidId): api.ODStat|null { - return super.remove(id) - } - - exists(id:keyof ODStatScopeIds_DefaultUser): boolean - exists(id:api.ODValidId): boolean - - exists(id:api.ODValidId): boolean { - return super.exists(id) - } - - getStat(id:StatsId, scopeId:string): Promise - getStat(id:api.ODValidId, scopeId:string): Promise - - getStat(id:api.ODValidId, scopeId:string): Promise { - return super.getStat(id,scopeId) - } - - getAllStats(id:StatsId): Promise<{id:string,value:api.ODValidStatValue}[]> - getAllStats(id:api.ODValidId): Promise<{id:string,value:api.ODValidStatValue}[]> - - getAllStats(id:api.ODValidId): Promise<{id:string,value:api.ODValidStatValue}[]> { - return super.getAllStats(id) - } - - setStat(id:StatsId, scopeId:string, value:api.ODValidStatValue, mode:api.ODStatScopeSetMode): Promise - setStat(id:api.ODValidId, scopeId:string, value:api.ODValidStatValue, mode:api.ODStatScopeSetMode): Promise - - setStat(id:api.ODValidId, scopeId:string, value:api.ODValidStatValue, mode:api.ODStatScopeSetMode): Promise { - return super.setStat(id,scopeId,value,mode) - } - - resetStat(id:api.ODValidId, scopeId:string): Promise - resetStat(id:api.ODValidId, scopeId:string): Promise - - resetStat(id:api.ODValidId, scopeId:string): Promise { - return super.resetStat(id,scopeId) - } -} - -/**## ODStatScopeIds_DefaultTicket `type` - * This interface is a list of ids available in the `ODStatScope_DefaultTicket` class. - * It's used to generate typescript declarations for this class. - */ -export interface ODStatScopeIds_DefaultTicket { - "opendiscord:name":api.ODDynamicStat, - "opendiscord:status":api.ODDynamicStat, - "opendiscord:claimed":api.ODDynamicStat, - "opendiscord:pinned":api.ODDynamicStat, - "opendiscord:creation-date":api.ODDynamicStat, - "opendiscord:creator":api.ODDynamicStat, - "opendiscord:ticket-age":api.ODDynamicStat, - "opendiscord:response-time":api.ODDynamicStat, - "opendiscord:resolution-time":api.ODDynamicStat, -} - -/**## ODStatScope_DefaultTicket `default_class` - * This is a special class that adds type definitions & typescript to the ODStatsManager class. - * It doesn't add any extra features! - * - * This default class is made for the `opendiscord:ticket` category in `opendiscord.stats`! - */ -export class ODStatScope_DefaultTicket extends api.ODStatScope { - get(id:StatsId): ODStatScopeIds_DefaultTicket[StatsId] - get(id:api.ODValidId): api.ODStat|null - - get(id:api.ODValidId): api.ODStat|null { - return super.get(id) - } - - remove(id:StatsId): ODStatScopeIds_DefaultTicket[StatsId] - remove(id:api.ODValidId): api.ODStat|null - - remove(id:api.ODValidId): api.ODStat|null { - return super.remove(id) - } - - exists(id:keyof ODStatScopeIds_DefaultTicket): boolean - exists(id:api.ODValidId): boolean - - exists(id:api.ODValidId): boolean { - return super.exists(id) - } - - getStat(id:StatsId, scopeId:string): Promise - getStat(id:api.ODValidId, scopeId:string): Promise - - getStat(id:api.ODValidId, scopeId:string): Promise { - return super.getStat(id,scopeId) - } - - getAllStats(id:StatsId): Promise<{id:string,value:api.ODValidStatValue}[]> - getAllStats(id:api.ODValidId): Promise<{id:string,value:api.ODValidStatValue}[]> - - getAllStats(id:api.ODValidId): Promise<{id:string,value:api.ODValidStatValue}[]> { - return super.getAllStats(id) - } - - setStat(id:StatsId, scopeId:string, value:api.ODValidStatValue, mode:api.ODStatScopeSetMode): Promise - setStat(id:api.ODValidId, scopeId:string, value:api.ODValidStatValue, mode:api.ODStatScopeSetMode): Promise - - setStat(id:api.ODValidId, scopeId:string, value:api.ODValidStatValue, mode:api.ODStatScopeSetMode): Promise { - return super.setStat(id,scopeId,value,mode) - } - - resetStat(id:api.ODValidId, scopeId:string): Promise - resetStat(id:api.ODValidId, scopeId:string): Promise - - resetStat(id:api.ODValidId, scopeId:string): Promise { - return super.resetStat(id,scopeId) - } -} - -/**## ODStatScopeIds_DefaultParticipants `type` - * This interface is a list of ids available in the `ODStatScope_DefaultParticipants` class. - * It's used to generate typescript declarations for this class. - */ -export interface ODStatScopeIds_DefaultParticipants { - "opendiscord:participants":api.ODDynamicStat -} - -/**## ODStatScope_DefaultParticipants `default_class` - * This is a special class that adds type definitions & typescript to the ODStatsManager class. - * It doesn't add any extra features! - * - * This default class is made for the `opendiscord:participants` category in `opendiscord.stats`! - */ -export class ODStatScope_DefaultParticipants extends api.ODStatScope { - get(id:StatsId): ODStatScopeIds_DefaultParticipants[StatsId] - get(id:api.ODValidId): api.ODStat|null - - get(id:api.ODValidId): api.ODStat|null { - return super.get(id) - } - - remove(id:StatsId): ODStatScopeIds_DefaultParticipants[StatsId] - remove(id:api.ODValidId): api.ODStat|null - - remove(id:api.ODValidId): api.ODStat|null { - return super.remove(id) - } - - exists(id:keyof ODStatScopeIds_DefaultParticipants): boolean - exists(id:api.ODValidId): boolean - - exists(id:api.ODValidId): boolean { - return super.exists(id) - } - - getStat(id:StatsId, scopeId:string): Promise - getStat(id:api.ODValidId, scopeId:string): Promise - - getStat(id:api.ODValidId, scopeId:string): Promise { - return super.getStat(id,scopeId) - } - - getAllStats(id:StatsId): Promise<{id:string,value:api.ODValidStatValue}[]> - getAllStats(id:api.ODValidId): Promise<{id:string,value:api.ODValidStatValue}[]> - - getAllStats(id:api.ODValidId): Promise<{id:string,value:api.ODValidStatValue}[]> { - return super.getAllStats(id) - } - - setStat(id:StatsId, scopeId:string, value:api.ODValidStatValue, mode:api.ODStatScopeSetMode): Promise - setStat(id:api.ODValidId, scopeId:string, value:api.ODValidStatValue, mode:api.ODStatScopeSetMode): Promise - - setStat(id:api.ODValidId, scopeId:string, value:api.ODValidStatValue, mode:api.ODStatScopeSetMode): Promise { - return super.setStat(id,scopeId,value,mode) - } - - resetStat(id:api.ODValidId, scopeId:string): Promise - resetStat(id:api.ODValidId, scopeId:string): Promise - - resetStat(id:api.ODValidId, scopeId:string): Promise { - return super.resetStat(id,scopeId) - } -} - -/**## ODStatScopeIds_DefaultMessages `type` - * This interface is a list of ids available in the `ODStatScope_DefaultMessages` class. - * It's used to generate typescript declarations for this class. - */ -export interface ODStatScopeIds_DefaultMessages { - "opendiscord:count":api.ODDynamicStat -} - -/**## ODStatScope_DefaultMessages `default_class` - * This is a special class that adds type definitions & typescript to the ODStatsManager class. - * It doesn't add any extra features! - * - * This default class is made for the `opendiscord:participants` category in `opendiscord.stats`! - */ -export class ODStatScope_DefaultMessages extends api.ODStatScope { - get(id:StatsId): ODStatScopeIds_DefaultMessages[StatsId] - get(id:api.ODValidId): api.ODStat|null - - get(id:api.ODValidId): api.ODStat|null { - return super.get(id) - } - - remove(id:StatsId): ODStatScopeIds_DefaultMessages[StatsId] - remove(id:api.ODValidId): api.ODStat|null - - remove(id:api.ODValidId): api.ODStat|null { - return super.remove(id) - } - - exists(id:keyof ODStatScopeIds_DefaultMessages): boolean - exists(id:api.ODValidId): boolean - - exists(id:api.ODValidId): boolean { - return super.exists(id) - } - - getStat(id:StatsId, scopeId:string): Promise - getStat(id:api.ODValidId, scopeId:string): Promise - - getStat(id:api.ODValidId, scopeId:string): Promise { - return super.getStat(id,scopeId) - } - - getAllStats(id:StatsId): Promise<{id:string,value:api.ODValidStatValue}[]> - getAllStats(id:api.ODValidId): Promise<{id:string,value:api.ODValidStatValue}[]> - - getAllStats(id:api.ODValidId): Promise<{id:string,value:api.ODValidStatValue}[]> { - return super.getAllStats(id) - } - - setStat(id:StatsId, scopeId:string, value:api.ODValidStatValue, mode:api.ODStatScopeSetMode): Promise - setStat(id:api.ODValidId, scopeId:string, value:api.ODValidStatValue, mode:api.ODStatScopeSetMode): Promise - - setStat(id:api.ODValidId, scopeId:string, value:api.ODValidStatValue, mode:api.ODStatScopeSetMode): Promise { - return super.setStat(id,scopeId,value,mode) - } - - resetStat(id:api.ODValidId, scopeId:string): Promise - resetStat(id:api.ODValidId, scopeId:string): Promise - - resetStat(id:api.ODValidId, scopeId:string): Promise { - return super.resetStat(id,scopeId) - } -} \ No newline at end of file diff --git a/src/core/api/defaults/worker.ts b/src/core/api/defaults/worker.ts deleted file mode 100644 index 621f5da..0000000 --- a/src/core/api/defaults/worker.ts +++ /dev/null @@ -1,33 +0,0 @@ -/////////////////////////////////////// -//DEFAULT WORKER MODULE -/////////////////////////////////////// -import * as api from "@open-discord-bots/framework/api" - -/**## ODWorkerManager_Default `default_class` - * This is a special class that adds type definitions & typescript to the ODWorkerManager class. - * It doesn't add any extra features! - * - * This default class is made for the worker manager in actions, builders & responders! - */ -export class ODWorkerManager_Default extends api.ODWorkerManager { - get(id:WorkerIds): api.ODWorker - get(id:api.ODValidId): api.ODWorker|null - - get(id:api.ODValidId): api.ODWorker|null { - return super.get(id) - } - - remove(id:WorkerIds): api.ODWorker - remove(id:api.ODValidId): api.ODWorker|null - - remove(id:api.ODValidId): api.ODWorker|null { - return super.remove(id) - } - - exists(id:WorkerIds): boolean - exists(id:api.ODValidId): boolean - - exists(id:api.ODValidId): boolean { - return super.exists(id) - } -} \ No newline at end of file diff --git a/src/core/api/openticket/option.ts b/src/core/api/option.ts similarity index 98% rename from src/core/api/openticket/option.ts rename to src/core/api/option.ts index 6ca7dcb..adcd137 100644 --- a/src/core/api/openticket/option.ts +++ b/src/core/api/option.ts @@ -2,9 +2,9 @@ //OPENTICKET OPTION MODULE /////////////////////////////////////// import * as api from "@open-discord-bots/framework/api" -import { ODJsonConfig_DefaultOptionEmbedSettingsType, ODJsonConfig_DefaultOptionPingSettingsType } from "../defaults/config" import * as discord from "discord.js" import * as crypto from "crypto" +import { ODOptionsJsonConfig_TicketOptionEmbedSettings, ODOptionsJsonConfig_TicketOptionPingSettings } from "../mappings/config" import { ODRoleUpdateMode } from "./role" /**## ODOptionManager `class` @@ -158,12 +158,12 @@ export interface ODTicketOptionIds { "opendiscord:dm-message-enabled":ODOptionData, "opendiscord:dm-message-text":ODOptionData, - "opendiscord:dm-message-embed":ODOptionData, + "opendiscord:dm-message-embed":ODOptionData, "opendiscord:ticket-message-enabled":ODOptionData, "opendiscord:ticket-message-text":ODOptionData, - "opendiscord:ticket-message-embed":ODOptionData, - "opendiscord:ticket-message-ping":ODOptionData, + "opendiscord:ticket-message-embed":ODOptionData, + "opendiscord:ticket-message-ping":ODOptionData, "opendiscord:autoclose-enable-hours":ODOptionData, "opendiscord:autoclose-enable-leave":ODOptionData, diff --git a/src/core/api/openticket/panel.ts b/src/core/api/panel.ts similarity index 96% rename from src/core/api/openticket/panel.ts rename to src/core/api/panel.ts index 68bb888..7409fc5 100644 --- a/src/core/api/openticket/panel.ts +++ b/src/core/api/panel.ts @@ -2,7 +2,7 @@ //OPENTICKET PANEL MODULE /////////////////////////////////////// import * as api from "@open-discord-bots/framework/api" -import { ODJsonConfig_DefaultPanelEmbedSettingsType } from "../defaults/config" +import { ODPanelsJsonConfig_PanelEmbedSettings } from "../mappings/config" /**## ODPanelManager `class` * This is an Open Ticket panel manager. @@ -58,7 +58,7 @@ export interface ODPanelIds { "opendiscord:dropdown":ODPanelData, "opendiscord:text":ODPanelData, - "opendiscord:embed":ODPanelData, + "opendiscord:embed":ODPanelData, "opendiscord:dropdown-placeholder":ODPanelData, diff --git a/src/core/api/openticket/priority.ts b/src/core/api/priority.ts similarity index 76% rename from src/core/api/openticket/priority.ts rename to src/core/api/priority.ts index c69fd15..cddf87e 100644 --- a/src/core/api/openticket/priority.ts +++ b/src/core/api/priority.ts @@ -2,7 +2,25 @@ //OPENTICKET PRIORITY MODULE /////////////////////////////////////// import * as api from "@open-discord-bots/framework/api" -import * as discord from "discord.js" + +/**## ODPriorityManagerIdConstraint `type` + * The constraint/layout for id mappings/interfaces of the `ODPriorityManager` class. + */ +export type ODPriorityManagerIdConstraint = Record + +/**## ODPriorityManagerIdMappings `interface` + * A list of all available IDs in the default `ODPriorityManager` class in `opendiscord`. + * It's used to generate typescript declarations for this class. + */ +export interface ODPriorityManagerIdMappings extends ODPriorityManagerIdConstraint { + "opendiscord:urgent":ODPriorityLevel, + "opendiscord:very-high":ODPriorityLevel, + "opendiscord:high":ODPriorityLevel, + "opendiscord:normal":ODPriorityLevel, + "opendiscord:low":ODPriorityLevel, + "opendiscord:very-low":ODPriorityLevel, + "opendiscord:none":ODPriorityLevel, +} /**## ODPriorityManager `class` * This is an Open Ticket priority manager. @@ -11,7 +29,7 @@ import * as discord from "discord.js" * * Priorities levels can be changed/updated/translated by plugins to allow for more customisability. */ -export class ODPriorityManager extends api.ODManager { +export class ODPriorityManager extends api.ODManager { /**A reference to the Open Ticket debugger. */ #debug: api.ODDebugger @@ -28,44 +46,22 @@ export class ODPriorityManager extends api.ODManager { listAvailableLevels(){ return this.getAll().map((lvl) => lvl.priority) } -} -/**## ODPriorityManagerIds `type` - * This interface is a list of ids available in the `ODPriorityManager` class. - * It's used to generate typescript declarations for this class. - */ -export interface ODPriorityManagerIds { - "opendiscord:urgent":ODPriorityLevel, - "opendiscord:very-high":ODPriorityLevel, - "opendiscord:high":ODPriorityLevel, - "opendiscord:normal":ODPriorityLevel, - "opendiscord:low":ODPriorityLevel, - "opendiscord:very-low":ODPriorityLevel, - "opendiscord:none":ODPriorityLevel, -} - -/**## ODPriorityManager_Default `default_class` - * This is a special class that adds type definitions & typescript to the ODPriorityManager class. - * It doesn't add any extra features! - * - * This default class is made for the global variable `opendiscord.priorities`! - */ -export class ODPriorityManager_Default extends ODPriorityManager { - get(id:PriorityId): ODPriorityManagerIds[PriorityId] + get>(id:PriorityId): IdList[PriorityId] get(id:api.ODValidId): ODPriorityLevel|null get(id:api.ODValidId): ODPriorityLevel|null { return super.get(id) } - remove(id:PriorityId): ODPriorityManagerIds[PriorityId] + remove>(id:PriorityId): IdList[PriorityId] remove(id:api.ODValidId): ODPriorityLevel|null remove(id:api.ODValidId): ODPriorityLevel|null { return super.remove(id) } - exists(id:keyof ODPriorityManagerIds): boolean + exists(id:keyof api.ODNoGeneric): boolean exists(id:api.ODValidId): boolean exists(id:api.ODValidId): boolean { @@ -73,6 +69,11 @@ export class ODPriorityManager_Default extends ODPriorityManager { } } +/**## ODMappedPriorityManager `class + * A special class with types for the Open Ticket `ODPriorityManager` class. + */ +export class ODMappedPriorityManager extends ODPriorityManager {} + /**## ODPriorityLevel `class` * This is an Open Ticket priority level. * diff --git a/src/core/api/openticket/question.ts b/src/core/api/question.ts similarity index 100% rename from src/core/api/openticket/question.ts rename to src/core/api/question.ts diff --git a/src/core/api/openticket/role.ts b/src/core/api/role.ts similarity index 100% rename from src/core/api/openticket/role.ts rename to src/core/api/role.ts diff --git a/src/core/api/openticket/ticket.ts b/src/core/api/ticket.ts similarity index 98% rename from src/core/api/openticket/ticket.ts rename to src/core/api/ticket.ts index 57de978..4ae162b 100644 --- a/src/core/api/openticket/ticket.ts +++ b/src/core/api/ticket.ts @@ -2,7 +2,6 @@ //OPENTICKET TICKET MODULE /////////////////////////////////////// import * as api from "@open-discord-bots/framework/api" -import { ODClientManager_Default } from "../defaults/client" import { ODTicketOption } from "./option" import * as discord from "discord.js" @@ -17,11 +16,11 @@ export class ODTicketManager extends api.ODManager { /**A reference to the main server of the bot */ #guild: discord.Guild|null = null /**A reference to the Open Ticket client manager. */ - #client: ODClientManager_Default + #client: api.ODClientManager /**A reference to the Open Ticket debugger. */ #debug: api.ODDebugger - constructor(debug:api.ODDebugger, client:ODClientManager_Default){ + constructor(debug:api.ODDebugger, client:api.ODClientManager){ super(debug,"ticket") this.#debug = debug this.#client = client diff --git a/src/core/api/openticket/transcript.ts b/src/core/api/transcript.ts similarity index 96% rename from src/core/api/openticket/transcript.ts rename to src/core/api/transcript.ts index b99690a..f620c65 100644 --- a/src/core/api/openticket/transcript.ts +++ b/src/core/api/transcript.ts @@ -2,10 +2,23 @@ //OPENTICKET TRANSCRIPT MODULE /////////////////////////////////////// import * as api from "@open-discord-bots/framework/api" -import { ODPermissionManager_Default } from "../defaults/permission" import { ODTicket, ODTicketManager } from "./ticket" import * as discord from "discord.js" +/**## ODTranscriptManagerIdConstraint `type` + * The constraint/layout for id mappings/interfaces of the `ODTranscriptManager` class. + */ +export type ODTranscriptManagerIdConstraint = Record> + +/**## ODTranscriptManagerIdMappings `interface` + * A list of all available IDs in the default `ODTranscriptManager` class in `opendiscord`. + * It's used to generate typescript declarations for this class. + */ +export interface ODTranscriptManagerIdMappings extends ODTranscriptManagerIdConstraint { + "opendiscord:html-compiler":ODTranscriptCompiler<{url:string,availableUntil:Date},{auth:string}>, + "opendiscord:text-compiler":ODTranscriptCompiler<{contents:string},null>, +} + /**## ODTranscriptManager `class` * This is an Open Ticket transcript manager. * @@ -13,19 +26,45 @@ import * as discord from "discord.js" * * The 2 default built-in transcript generators are: `opendiscord:html-compiler` & `opendiscord:text-compiler`. */ -export class ODTranscriptManager extends api.ODManager> { +export class ODTranscriptManager extends api.ODManager> { /**The manager responsible for collecting all messages in a channel. */ collector: ODTranscriptCollector /**Alias for the client manager. */ #client: api.ODClientManager - constructor(debug:api.ODDebugger, tickets:ODTicketManager, client:api.ODClientManager, permissions:ODPermissionManager_Default){ + constructor(debug:api.ODDebugger, tickets:ODTicketManager, client:api.ODClientManager, permissions:api.ODPermissionManager){ super(debug,"transcript compiler") this.#client = client this.collector = new ODTranscriptCollector(tickets,client,permissions) } + + get>(id:CompilerId): IdList[CompilerId] + get(id:api.ODValidId): ODTranscriptCompiler|null + + get(id:api.ODValidId): ODTranscriptCompiler|null { + return super.get(id) + } + + remove>(id:CompilerId): IdList[CompilerId] + remove(id:api.ODValidId): ODTranscriptCompiler|null + + remove(id:api.ODValidId): ODTranscriptCompiler|null { + return super.remove(id) + } + + exists(id:keyof api.ODNoGeneric): boolean + exists(id:api.ODValidId): boolean + + exists(id:api.ODValidId): boolean { + return super.exists(id) + } } +/**## ODMappedTranscriptManager `class + * A special class with types for the Open Ticket `ODTranscriptManager` class. + */ +export class ODMappedTranscriptManager extends ODTranscriptManager {} + /**## ODTranscriptCompilerInitFunction `type` * This function will initiate/prepare the transcript system for an incoming transcript. */ @@ -114,44 +153,6 @@ export class ODTranscriptCompiler, - "opendiscord:text-compiler":ODTranscriptCompiler<{contents:string},null>, -} - -/**## ODTranscriptManager_Default `default_class` - * This is a special class that adds type definitions & typescript to the ODTranscriptManager class. - * It doesn't add any extra features! - * - * This default class is made for the global variable `opendiscord.transcripts`! - */ -export class ODTranscriptManager_Default extends ODTranscriptManager { - get(id:CompilerId): ODTranscriptCompilerIds[CompilerId] - get(id:api.ODValidId): ODTranscriptCompiler|null - - get(id:api.ODValidId): ODTranscriptCompiler|null { - return super.get(id) - } - - remove(id:CompilerId): ODTranscriptCompilerIds[CompilerId] - remove(id:api.ODValidId): ODTranscriptCompiler|null - - remove(id:api.ODValidId): ODTranscriptCompiler|null { - return super.remove(id) - } - - exists(id:keyof ODTranscriptCompilerIds): boolean - exists(id:api.ODValidId): boolean - - exists(id:api.ODValidId): boolean { - return super.exists(id) - } -} - /**## ODTranscriptCollector `class` * This is an Open Ticket transcript collector. * @@ -165,9 +166,9 @@ export class ODTranscriptCollector { /**Alias for the client manager. */ #client: api.ODClientManager /**Alias for the permissions manager. */ - #permissions: ODPermissionManager_Default + #permissions: api.ODPermissionManager - constructor(tickets:ODTicketManager,client:api.ODClientManager,permissions:ODPermissionManager_Default){ + constructor(tickets:ODTicketManager,client:api.ODClientManager,permissions:api.ODPermissionManager){ this.#tickets = tickets this.#client = client this.#permissions = permissions diff --git a/src/core/cli/cli.ts b/src/core/cli/cli.ts index 6fcb2ce..6565f6f 100644 --- a/src/core/cli/cli.ts +++ b/src/core/cli/cli.ts @@ -1,8 +1,7 @@ import {opendiscord, api, utilities} from "../../index" -import {Terminal, terminal} from "terminal-kit" -import ansis from "ansis" +import * as cli from "@open-discord-bots/framework/cli" -const logo = [ +export const logo = [ " ██████╗ ██████╗ ███████╗███╗ ██╗ ████████╗██╗ ██████╗██╗ ██╗███████╗████████╗ ", " ██╔═══██╗██╔══██╗██╔════╝████╗ ██║ ╚══██╔══╝██║██╔════╝██║ ██╔╝██╔════╝╚══██╔══╝ ", " ██║ ██║██████╔╝█████╗ ██╔██╗ ██║ ██║ ██║██║ █████╔╝ █████╗ ██║ ", @@ -10,66 +9,16 @@ const logo = [ " ╚██████╔╝██║ ███████╗██║ ╚████║ ██║ ██║╚██████╗██║ ██╗███████╗ ██║ ", " ╚═════╝ ╚═╝ ╚══════╝╚═╝ ╚═══╝ ╚═╝ ╚═╝ ╚═════╝╚═╝ ╚═╝╚══════╝ ╚═╝ " ] - -/**A utility function to center text to a certain width. */ -export function centerText(text:string,width:number){ - if (width < text.length) return text - let newWidth = width-ansis.strip(text).length+1 - let final = " ".repeat(newWidth/2)+text - return final -} - -/**A utility function to terminate the interactive CLI. */ -export async function terminate(){ - terminal.grabInput(false) - terminal.clear() - terminal.green("👋 Exited the Open Ticket Interactive Setup CLI.\n") - process.exit(0) -} -terminal.on("key",(name,matches,data) => { - if (name == "CTRL_C") terminate() -}) - -/**Render the header of the interactive CLI. */ -export function renderHeader(path:(string|number)[]|string){ - terminal.grabInput(true) - terminal.clear().moveTo(1,1) - terminal(ansis.hex("#f8ba00")(logo.join("\n")+"\n")) - terminal.bold(centerText("Interactive Setup CLI - Version: "+opendiscord.versions.get("opendiscord:version").toString()+" - Support: https://discord.dj-dj.be\n",88)) - if (typeof path == "string") terminal.cyan(centerText(path+"\n\n",88)) - else if (path.length < 1) terminal.cyan(centerText("👋 Hi! Welcome to the Open Ticket Interactive Setup CLI! 👋\n\n",88)) - else terminal.cyan(centerText("🌐 Current Location: "+path.map((v,i) => { - if (i == 0) return v.toString() - else if (typeof v == "string") return ".\""+v+"\"" - else if (typeof v == "number") return "."+v - }).join("")+"\n\n",88)) -} - -async function renderCliModeSelector(backFn:(() => api.ODPromiseVoid)){ - renderHeader([]) - terminal(ansis.bold.green("Please select what CLI module you want to use.\n")+ansis.italic.gray("(use arrow keys to navigate, exit using escape)\n")) - - const answer = await terminal.singleColumnMenu([ - "✏️ Edit Config "+ansis.gray("=> Edit the current config, add/remove new tickets/questions/panels & more!"), - "⏱️ Quick Setup "+ansis.gray("=> A quick and easy way of setting up the bot in your Discord server."), - ],{ - leftPadding:"> ", - style:terminal.cyan, - selectedStyle:terminal.bgDefaultColor.bold, - submittedStyle:terminal.bgBlue, - extraLines:2, - cancelable:true - }).promise - - if (answer.canceled) return await backFn() - else if (answer.selectedIndex == 0) await (await import("./editConfig.js")).renderEditConfig(async () => {await renderCliModeSelector(backFn)}) - else if (answer.selectedIndex == 1) await (await import("./quickSetup.js")).renderQuickSetup(async () => {await renderCliModeSelector(backFn)}) +export const headerOpts: cli.ODCliHeaderOpts = { + logo, + projectColor:"#f8ba00", + projectName:"Open Ticket", + projectVersion:opendiscord.versions.get("opendiscord:version") } export async function execute(){ - if (terminal.width < 100 || terminal.height < 35){ - terminal(ansis.red.bold("\n\nMake sure your console or cmd window has a "+ansis.cyan("minimum width & height")+" of "+ansis.cyan("100x35")+" characters.")) - terminal(ansis.red.bold("\nOtherwise the Open Ticket Interactive Setup CLI will be rendered incorrectly.")) - terminal(ansis.red.bold("\nThe current terminal dimensions are: "+ansis.cyan(terminal.width+"x"+terminal.height)+".")) - }else await renderCliModeSelector(terminate) + const editConfig = new cli.ODCliEditConfigInstance(headerOpts,opendiscord) + const renderQuickSetup = (await import("./quickSetup.js")).renderQuickSetup + + await cli.execute(headerOpts,editConfig.renderEditConfig,renderQuickSetup) } \ No newline at end of file diff --git a/src/core/cli/editConfig.ts b/src/core/cli/editConfig.ts deleted file mode 100644 index 9e78b53..0000000 --- a/src/core/cli/editConfig.ts +++ /dev/null @@ -1,933 +0,0 @@ -import {opendiscord, utilities, api } from "../../index" -import {Terminal, terminal} from "terminal-kit" -import ansis from "ansis" -import {renderHeader} from "./cli" - -export async function renderEditConfig(backFn:(() => api.ODPromiseVoid)){ - renderHeader([]) - terminal(ansis.bold.green("Please select which config you would like to edit.\n")+ansis.italic.gray("(use arrow keys to navigate, go back using escape)\n")) - - const checkerList = opendiscord.checkers.getAll() - const checkerNameList = checkerList.map((checker) => (checker.options.cliDisplayName ? checker.options.cliDisplayName+" ("+checker.config.file+")" : checker.config.file)) - const checkerNameLength = utilities.getLongestLength(checkerNameList) - const finalCheckerNameList = checkerNameList.map((name,index) => name.padEnd(checkerNameLength+5," ")+ansis.gray(checkerList[index].options.cliDisplayDescription ? "=> "+checkerList[index].options.cliDisplayDescription : "")) - - const answer = await terminal.singleColumnMenu(finalCheckerNameList,{ - leftPadding:"> ", - style:terminal.cyan, - selectedStyle:terminal.bgDefaultColor.bold, - submittedStyle:terminal.bgBlue, - extraLines:2, - cancelable:true - }).promise - - if (answer.canceled) return await backFn() - const checker = checkerList[answer.selectedIndex] - const configData = checker.config.data as api.ODValidJsonType - await chooseConfigStructure(checker,async () => {await renderEditConfig(backFn)},checker.structure,configData,{},NaN,["("+checker.config.path+")"]) -} - -async function chooseConfigStructure(checker:api.ODChecker,backFn:(() => api.ODPromiseVoid),structure:api.ODCheckerStructure,data:api.ODValidJsonType,parent:object|any[],parentIndex:string|number,path:(string|number)[]){ - if (structure instanceof api.ODCheckerObjectStructure && typeof data == "object" && !Array.isArray(data) && data) await renderConfigObjectStructureSelector(checker,backFn,structure,data,parent,parentIndex,path) - else if (structure instanceof api.ODCheckerEnabledObjectStructure && typeof data == "object" && !Array.isArray(data) && data) await renderConfigEnabledObjectStructureSelector(checker,backFn,structure,data,parent,parentIndex,path) - else if (structure instanceof api.ODCheckerObjectSwitchStructure && typeof data == "object" && !Array.isArray(data) && data) await renderConfigObjectSwitchStructureSelector(checker,backFn,structure,data,parent,parentIndex,path) - else if (structure instanceof api.ODCheckerArrayStructure && Array.isArray(data)) await renderConfigArrayStructureSelector(checker,backFn,structure,data,parent,parentIndex,path) - else if (structure instanceof api.ODCheckerBooleanStructure && typeof data == "boolean") await renderConfigBooleanStructureEditor(checker,backFn,structure,data,parent,parentIndex,path) - else if (structure instanceof api.ODCheckerNumberStructure && typeof data == "number") await renderConfigNumberStructureEditor(checker,backFn,structure,data,parent,parentIndex,path) - else if (structure instanceof api.ODCheckerStringStructure && typeof data == "string") await renderConfigStringStructureEditor(checker,backFn,structure,data,parent,parentIndex,path) - else if (structure instanceof api.ODCheckerNullStructure && data === null) await renderConfigNullStructureEditor(checker,backFn,structure,data,parent,parentIndex,path) - else if (structure instanceof api.ODCheckerTypeSwitchStructure) await renderConfigTypeSwitchStructureEditor(checker,backFn,structure,data,parent,parentIndex,path) - else terminal.red.bold("❌ Unable to detect type of variable! Please try to edit this property in the JSON file itself!") -} - -async function renderConfigObjectStructureSelector(checker:api.ODChecker,backFn:(() => api.ODPromiseVoid),structure:api.ODCheckerObjectStructure,data:object,parent:object,parentIndex:string|number,path:(string|number)[]){ - if (typeof data != "object" || Array.isArray(data)) throw new api.ODSystemError("OT CLI => Property is not of the type 'object'. Please check your config for possible errors. (index: "+parentIndex+", path: "+path.join(".")+")") - renderHeader(path) - terminal(ansis.bold.green("Please select which variable you would like to edit.\n")+ansis.italic.gray("(use arrow keys to navigate, go back using escape)\n")) - if (!structure.options.children) return await backFn() - - if (structure.options.cliDisplayName){ - terminal.gray("\nProperty: "+ansis.bold.blue(structure.options.cliDisplayName)+"\n") - terminal.gray("Description: "+ansis.bold(structure.options.cliDisplayDescription ?? "/")+"\n") - } - - const list = structure.options.children.filter((child) => !child.cliHideInEditMode) - const nameList = list.map((child) => (child.checker.options.cliDisplayName ? child.checker.options.cliDisplayName : child.key)) - const nameLength = utilities.getLongestLength(nameList) - const finalnameList = nameList.map((name,index) => name.padEnd(nameLength+5," ")+ansis.gray((!list[index].checker.options.cliHideDescriptionInParent && list[index].checker.options.cliDisplayDescription) ? "=> "+list[index].checker.options.cliDisplayDescription : "")) - - const answer = await terminal.singleColumnMenu(finalnameList,{ - leftPadding:"> ", - style:terminal.cyan, - selectedStyle:terminal.bgDefaultColor.bold.defaultColor, - submittedStyle:terminal.bgBlue, - extraLines:2, - cancelable:true - }).promise - - if (answer.canceled) return await backFn() - const subStructure = list[answer.selectedIndex] - const subData = data[subStructure.key] - await chooseConfigStructure(checker,async () => {await renderConfigObjectStructureSelector(checker,backFn,structure,data,parent,parentIndex,path)},subStructure.checker,subData,data,subStructure.key,[...path,subStructure.key]) -} - -async function renderConfigEnabledObjectStructureSelector(checker:api.ODChecker,backFn:(() => api.ODPromiseVoid),structure:api.ODCheckerEnabledObjectStructure,data:object,parent:object,parentIndex:string|number,path:(string|number)[]){ - if (typeof data != "object" || Array.isArray(data)) throw new api.ODSystemError("OT CLI => Property is not of the type 'object'. Please check your config for possible errors. (index: "+parentIndex+", path: "+path.join(".")+")") - const enabledProperty = structure.options.property - const subStructure = structure.options.checker - if (!enabledProperty || !subStructure || !subStructure.options.children) return await backFn() - - if (!subStructure.options.children.find((child) => child.key === structure.options.property)){ - if (typeof structure.options.enabledValue == "string") subStructure.options.children.unshift({key:enabledProperty,optional:false,priority:1,checker:new api.ODCheckerStringStructure("opendiscord:CLI-checker-enabled-object-structure",{})}) - else if (typeof structure.options.enabledValue == "number") subStructure.options.children.unshift({key:enabledProperty,optional:false,priority:1,checker:new api.ODCheckerNumberStructure("opendiscord:CLI-checker-enabled-object-structure",{})}) - else if (typeof structure.options.enabledValue == "boolean") subStructure.options.children.unshift({key:enabledProperty,optional:false,priority:1,checker:new api.ODCheckerBooleanStructure("opendiscord:CLI-checker-enabled-object-structure",{})}) - } - - await chooseConfigStructure(checker,backFn,subStructure,data,parent,parentIndex,path) -} - -async function renderConfigObjectSwitchStructureSelector(checker:api.ODChecker,backFn:(() => api.ODPromiseVoid),structure:api.ODCheckerObjectSwitchStructure,data:object,parent:object,parentIndex:string|number,path:(string|number)[]){ - if (typeof data != "object" || Array.isArray(data)) throw new api.ODSystemError("OT CLI => Property is not of the type 'object'. Please check your config for possible errors. (index: "+parentIndex+", path: "+path.join(".")+")") - if (!structure.options.objects) return await backFn() - - let didMatch: boolean = false - for (const objectTemplate of structure.options.objects){ - if (objectTemplate.properties.every((prop) => data[prop.key] === prop.value)){ - //object template matches data - const subStructure = objectTemplate.checker - didMatch = true - await chooseConfigStructure(checker,backFn,subStructure,data,parent,parentIndex,path) - } - } - if (!didMatch) throw new api.ODSystemError("OT CLI => Unable to detect type of object in the object switch. Please check your config for possible errors. (index: "+parentIndex+", path: "+path.join(".")+")") -} - -async function renderConfigArrayStructureSelector(checker:api.ODChecker,backFn:(() => api.ODPromiseVoid),structure:api.ODCheckerArrayStructure,data:any[],parent:object,parentIndex:string|number,path:(string|number)[]){ - if (!Array.isArray(data)) throw new api.ODSystemError("OT CLI => Property is not of the type 'array'. Please check your config for possible errors. (index: "+parentIndex+", path: "+path.join(".")+")") - renderHeader(path) - terminal(ansis.bold.green("Please select what you would like to do.\n")+ansis.italic.gray("(use arrow keys to navigate, go back using escape)\n")) - if (!structure.options.propertyChecker) return await backFn() - - if (structure.options.cliDisplayName || typeof parentIndex == "string" || !isNaN(parentIndex)){ - terminal.gray("\nProperty: "+ansis.bold.blue(structure.options.cliDisplayName ?? parentIndex.toString())+"\n") - terminal.gray("Description: "+ansis.bold(structure.options.cliDisplayDescription ?? "/")+"\n") - } - - const propertyName = structure.options.cliDisplayPropertyName ?? "index" - const answer = await terminal.singleColumnMenu(data.length < 1 ? ["Add "+propertyName] : [ - "Add "+propertyName, - "Edit "+propertyName, - "Move "+propertyName, - "Remove "+propertyName, - "Duplicate "+propertyName - ],{ - leftPadding:"> ", - style:terminal.cyan, - selectedStyle:terminal.bgDefaultColor.bold, - submittedStyle:terminal.bgBlue, - extraLines:2, - cancelable:true - }).promise - - const backFnFunc = async () => {await renderConfigArrayStructureSelector(checker,backFn,structure,data,parent,parentIndex,path)} - - if (answer.canceled) return await backFn() - if (answer.selectedIndex == 0) await chooseAdditionConfigStructure(checker,backFnFunc,async (newData) => { - data[data.length] = newData - await checker.config.save() - await backFnFunc() - },structure.options.propertyChecker,data,data.length,path,[]) - else if (answer.selectedIndex == 1) await renderConfigArrayStructureEditSelector(checker,backFnFunc,structure,structure.options.propertyChecker,data,parent,parentIndex,path) - else if (answer.selectedIndex == 2) await renderconfigArrayStructureMoveSelector(checker,backFnFunc,structure,structure.options.propertyChecker,data,parent,parentIndex,path) - else if (answer.selectedIndex == 3) await renderconfigArrayStructureRemoveSelector(checker,backFnFunc,structure,structure.options.propertyChecker,data,parent,parentIndex,path) - else if (answer.selectedIndex == 4) await renderConfigArrayStructureDuplicateSelector(checker,backFnFunc,structure,structure.options.propertyChecker,data,parent,parentIndex,path) -} - -async function renderConfigArrayStructureEditSelector(checker:api.ODChecker,backFn:(() => api.ODPromiseVoid),arrayStructure:api.ODCheckerArrayStructure,structure:api.ODCheckerStructure,data:any[],parent:object,parentIndex:string|number,path:(string|number)[]){ - const propertyName = arrayStructure.options.cliDisplayPropertyName ?? "index" - renderHeader(path) - terminal(ansis.bold.green("Please select the "+propertyName+" you would like to edit.\n")+ansis.italic.gray("(use arrow keys to navigate, go back using escape)\n")) - - const longestDataListName = Math.max(...data.map((d,i) => getArrayPreviewStructureNameLength(structure,d,data,i))) - const dataList = data.map((d,i) => (i+1)+". "+getArrayPreviewFromStructure(structure,d,data,i,longestDataListName)) - const dataAnswer = await terminal.singleColumnMenu(dataList,{ - leftPadding:"> ", - style:terminal.cyan, - selectedStyle:terminal.bgDefaultColor.bold, - submittedStyle:terminal.bgBlue, - extraLines:2, - cancelable:true - }).promise - - if (dataAnswer.canceled) return await backFn() - const subData = data[dataAnswer.selectedIndex] - await chooseConfigStructure(checker,async () => {await renderConfigArrayStructureEditSelector(checker,backFn,arrayStructure,structure,data,parent,parentIndex,path)},structure,subData,data,dataAnswer.selectedIndex,[...path,dataAnswer.selectedIndex]) -} - -async function renderconfigArrayStructureMoveSelector(checker:api.ODChecker,backFn:(() => api.ODPromiseVoid),arrayStructure:api.ODCheckerArrayStructure,structure:api.ODCheckerStructure,data:any[],parent:object,parentIndex:string|number,path:(string|number)[]){ - const propertyName = arrayStructure.options.cliDisplayPropertyName ?? "index" - renderHeader(path) - terminal(ansis.bold.green("Please select the "+propertyName+" you would like to move.\n")+ansis.italic.gray("(use arrow keys to navigate, go back using escape)\n")) - - const longestDataListName = Math.max(...data.map((d,i) => getArrayPreviewStructureNameLength(structure,d,data,i))) - const dataList = data.map((d,i) => (i+1)+". "+getArrayPreviewFromStructure(structure,d,data,i,longestDataListName)) - const dataAnswer = await terminal.singleColumnMenu(dataList,{ - leftPadding:"> ", - style:terminal.cyan, - selectedStyle:terminal.bgDefaultColor.bold, - submittedStyle:terminal.bgBlue, - extraLines:2, - cancelable:true - }).promise - - if (dataAnswer.canceled) return await backFn() - - renderHeader([...path,dataAnswer.selectedIndex]) - terminal(ansis.bold.green("Please select the position you would like to move to.\n")+ansis.italic.gray("(use arrow keys to navigate, go back using escape)\n")) - - const moveAnswer = await terminal.singleColumnMenu(data.map((d,i) => "Position "+(i+1)),{ - leftPadding:"> ", - style:terminal.cyan, - selectedStyle:terminal.bgDefaultColor.bold, - submittedStyle:terminal.bgBlue, - extraLines:2, - cancelable:true - }).promise - - if (moveAnswer.canceled) return await renderconfigArrayStructureMoveSelector(checker,backFn,arrayStructure,structure,data,parent,parentIndex,path) - - const subData = data[dataAnswer.selectedIndex] - const slicedData = [...data.slice(0,dataAnswer.selectedIndex),...data.slice(dataAnswer.selectedIndex+1)] - const insertedData = [...slicedData.slice(0,moveAnswer.selectedIndex),subData,...slicedData.slice(moveAnswer.selectedIndex)] - insertedData.forEach((d,i) => data[i] = d) - - await checker.config.save() - terminal.bold.blue("\n\n✅ Property moved succesfully!") - await utilities.timer(400) - await backFn() -} - -async function renderconfigArrayStructureRemoveSelector(checker:api.ODChecker,backFn:(() => api.ODPromiseVoid),arrayStructure:api.ODCheckerArrayStructure,structure:api.ODCheckerStructure,data:any[],parent:object,parentIndex:string|number,path:(string|number)[]){ - const propertyName = arrayStructure.options.cliDisplayPropertyName ?? "index" - renderHeader(path) - terminal(ansis.bold.green("Please select the "+propertyName+" you would like to delete.\n")+ansis.italic.gray("(use arrow keys to navigate, go back using escape)\n")) - - const longestDataListName = Math.max(...data.map((d,i) => getArrayPreviewStructureNameLength(structure,d,data,i))) - const dataList = data.map((d,i) => (i+1)+". "+getArrayPreviewFromStructure(structure,d,data,i,longestDataListName)) - const dataAnswer = await terminal.singleColumnMenu(dataList,{ - leftPadding:"> ", - style:terminal.cyan, - selectedStyle:terminal.bgDefaultColor.bold, - submittedStyle:terminal.bgBlue, - extraLines:2, - cancelable:true - }).promise - - if (dataAnswer.canceled) return await backFn() - data.splice(dataAnswer.selectedIndex,1) - - await checker.config.save() - terminal.bold.blue("\n\n✅ Property deleted succesfully!") - await utilities.timer(400) - await backFn() -} - -async function renderConfigArrayStructureDuplicateSelector(checker:api.ODChecker,backFn:(() => api.ODPromiseVoid),arrayStructure:api.ODCheckerArrayStructure,structure:api.ODCheckerStructure,data:any[],parent:object,parentIndex:string|number,path:(string|number)[]){ - const propertyName = arrayStructure.options.cliDisplayPropertyName ?? "index" - renderHeader(path) - terminal(ansis.bold.green("Please select the "+propertyName+" you would like to duplicate.\n")+ansis.italic.gray("(use arrow keys to navigate, go back using escape)\n")) - - const longestDataListName = Math.max(...data.map((d,i) => getArrayPreviewStructureNameLength(structure,d,data,i))) - const dataList = data.map((d,i) => (i+1)+". "+getArrayPreviewFromStructure(structure,d,data,i,longestDataListName)) - const dataAnswer = await terminal.singleColumnMenu(dataList,{ - leftPadding:"> ", - style:terminal.cyan, - selectedStyle:terminal.bgDefaultColor.bold, - submittedStyle:terminal.bgBlue, - extraLines:2, - cancelable:true - }).promise - - if (dataAnswer.canceled) return await backFn() - data.push(JSON.parse(JSON.stringify(data[dataAnswer.selectedIndex]))) - - await checker.config.save() - terminal.bold.blue("\n\n✅ Property duplicated succesfully!") - await utilities.timer(400) - await backFn() -} - -async function renderConfigBooleanStructureEditor(checker:api.ODChecker,backFn:(() => api.ODPromiseVoid),structure:api.ODCheckerBooleanStructure,data:boolean,parent:object,parentIndex:string|number,path:(string|number)[]){ - if (typeof data != "boolean") throw new api.ODSystemError("OT CLI => Property is not of the type 'boolean'. Please check your config for possible errors. (index: "+parentIndex+", path: "+path.join(".")+")") - renderHeader(path) - terminal(ansis.bold.green("You are now editing "+(typeof parentIndex == "string" ? "the boolean property "+ansis.blue("\""+parentIndex+"\"") : "boolean property "+ansis.blue("#"+(parentIndex+1)))+".\n")+ansis.italic.gray("(use arrow keys to navigate, go back using escape)\n")) - - terminal.gray("\nCurrent value: "+ansis.bold[data ? "green" : "red"](data.toString())+"\n") - terminal.gray("Description: "+ansis.bold(structure.options.cliDisplayDescription ?? "/")+"\n") - - const answer = await terminal.singleColumnMenu(["false (Disabled)","true (Enabled)"],{ - leftPadding:"> ", - style:terminal.cyan, - selectedStyle:terminal.bgDefaultColor.bold, - submittedStyle:terminal.bgBlue, - extraLines:2, - cancelable:true - }).promise - - if (answer.canceled) return await backFn() - - //run config checker - const newValue = (answer.selectedIndex == 0) ? false : true - const newPath = [...path] - newPath.shift() - checker.messages = [] //manually clear previous messages - const isDataValid = structure.check(checker,newValue,newPath) - - if (isDataValid){ - parent[parentIndex] = newValue - - await checker.config.save() - terminal.bold.blue("\n\n✅ Variable saved succesfully!") - await utilities.timer(400) - await backFn() - }else{ - const messages = checker.messages.map((msg) => "=> ["+msg.type.toUpperCase()+"] "+msg.message).join("\n") - terminal.bold.blue("\n\n❌ Variable is invalid! Please try again!") - terminal.gray("\n"+messages) - await utilities.timer(1000+(2000*checker.messages.length)) - await renderConfigBooleanStructureEditor(checker,backFn,structure,data,parent,parentIndex,path) - } -} - -async function renderConfigNumberStructureEditor(checker:api.ODChecker,backFn:(() => api.ODPromiseVoid),structure:api.ODCheckerNumberStructure,data:number,parent:object,parentIndex:string|number,path:(string|number)[],prefillValue?:string){ - if (typeof data != "number") throw new api.ODSystemError("OT CLI => Property is not of the type 'number'. Please check your config for possible errors. (index: "+parentIndex+", path: "+path.join(".")+")") - renderHeader(path) - terminal(ansis.bold.green("You are now editing "+(typeof parentIndex == "string" ? "the number property "+ansis.blue("\""+parentIndex+"\"") : "number property "+ansis.blue("#"+(parentIndex+1)))+".\n")+ansis.italic.gray("(insert a new value and press enter, go back using escape)\n")) - - terminal.gray("\nCurrent value: "+ansis.bold.blue(data.toString())+"\n") - terminal.gray("Description: "+ansis.bold(structure.options.cliDisplayDescription ?? "/")+"\n") - - const answer = await terminal.inputField({ - default:prefillValue, - style:terminal.cyan, - cancelable:true - }).promise - - if (typeof answer != "string") return await backFn() - - //run config checker - const newValue = Number(answer.replaceAll(",",".")) - const newPath = [...path] - newPath.shift() - checker.messages = [] //manually clear previous messages - const isDataValid = structure.check(checker,newValue,newPath) - - if (isDataValid){ - parent[parentIndex] = newValue - - await checker.config.save() - terminal.bold.blue("\n\n✅ Variable saved succesfully!") - await utilities.timer(400) - await backFn() - }else{ - const messages = checker.messages.map((msg) => "=> ["+msg.type.toUpperCase()+"] "+msg.message).join("\n") - terminal.bold.blue("\n\n❌ Variable is invalid! Please try again!") - terminal.red("\n"+messages) - await utilities.timer(1000+(2000*checker.messages.length)) - await renderConfigNumberStructureEditor(checker,backFn,structure,data,parent,parentIndex,path,answer) - } -} - -async function renderConfigStringStructureEditor(checker:api.ODChecker,backFn:(() => api.ODPromiseVoid),structure:api.ODCheckerStringStructure,data:string,parent:object,parentIndex:string|number,path:(string|number)[],prefillValue?:string){ - if (typeof data != "string") throw new api.ODSystemError("OT CLI => Property is not of the type 'string'. Please check your config for possible errors. (index: "+parentIndex+", path: "+path.join(".")+")") - renderHeader(path) - terminal(ansis.bold.green("You are now editing "+(typeof parentIndex == "string" ? "the string property "+ansis.blue("\""+parentIndex+"\"") : "string property "+ansis.blue("#"+(parentIndex+1)))+".\n")+ansis.italic.gray("(insert a new value and press enter, go back using escape)\n")) - - terminal.gray("\nCurrent value:"+(data.includes("\n") ? "\n" : " \"")+ansis.bold.blue(data)+ansis.gray(!data.includes("\n") ? "\"\n" : "\n")) - terminal.gray("Description: "+ansis.bold(structure.options.cliDisplayDescription ?? "/")+"\n") - - const customExtraOptions = (structure instanceof api.ODCheckerCustomStructure_DiscordId) ? structure.extraOptions : undefined - const customAutocompleteFunc = structure.options.cliAutocompleteFunc ? await structure.options.cliAutocompleteFunc() : null - const autocompleteList = ((customAutocompleteFunc ?? structure.options.cliAutocompleteList) ?? customExtraOptions) ?? structure.options.choices - const autoCompleteMenuOpts: Terminal.SingleLineMenuOptions = { - style:terminal.white, - selectedStyle:terminal.bgBlue.white - } - - const input = terminal.inputField({ - default:prefillValue, - style:terminal.cyan, - hintStyle:terminal.gray, - cancelable:false, - autoComplete:autocompleteList, - autoCompleteHint:(!!autocompleteList), - autoCompleteMenu:(autocompleteList) ? autoCompleteMenuOpts as Terminal.Autocompletion : false - }) - - terminal.on("key",async (name:string,matches:string[],data:object) => { - if (name == "ESCAPE"){ - terminal.removeListener("key","cli-render-string-structure-edit") - input.abort() - await backFn() - } - },({id:"cli-render-string-structure-edit"} as any)) - - const answer = await input.promise - terminal.removeListener("key","cli-render-string-structure-edit") - if (typeof answer != "string") return - - //run config checker - const newValue = answer.replaceAll("\\n","\n") - const newPath = [...path] - newPath.shift() - checker.messages = [] //manually clear previous messages - const isDataValid = structure.check(checker,newValue,newPath) - - if (isDataValid){ - parent[parentIndex] = newValue - - await checker.config.save() - terminal.bold.blue("\n\n✅ Variable saved succesfully!") - await utilities.timer(400) - await backFn() - }else{ - const messages = checker.messages.map((msg) => "=> ["+msg.type.toUpperCase()+"] "+msg.message).join("\n") - terminal.bold.blue("\n\n❌ Variable is invalid! Please try again!") - terminal.red("\n"+messages) - await utilities.timer(1000+(2000*checker.messages.length)) - await renderConfigStringStructureEditor(checker,backFn,structure,data,parent,parentIndex,path,answer) - } -} - -async function renderConfigNullStructureEditor(checker:api.ODChecker,backFn:(() => api.ODPromiseVoid),structure:api.ODCheckerNullStructure,data:null,parent:object,parentIndex:string|number,path:(string|number)[]){ - if (data !== null) throw new api.ODSystemError("OT CLI => Property is not of the type 'null'. Please check your config for possible errors. (index: "+parentIndex+", path: "+path.join(".")+")") - renderHeader(path) - terminal(ansis.bold.green("You are now editing "+(typeof parentIndex == "string" ? "the null property "+ansis.blue("\""+parentIndex+"\"") : "null property "+ansis.blue("#"+(parentIndex+1)))+".\n")+ansis.italic.gray("(use arrow keys to navigate, go back using escape)\n")) - - terminal.gray("\nCurrent value: "+ansis.bold.blue("null")+"\n") - terminal.gray("Description: "+ansis.bold(structure.options.cliDisplayDescription ?? "/")+"\n") - - const answer = await terminal.singleColumnMenu(["null"],{ - leftPadding:"> ", - style:terminal.cyan, - selectedStyle:terminal.bgDefaultColor.bold, - submittedStyle:terminal.bgBlue, - extraLines:2, - cancelable:true - }).promise - - if (answer.canceled) return await backFn() - - //run config checker - const newValue = null - const newPath = [...path] - newPath.shift() - checker.messages = [] //manually clear previous messages - const isDataValid = structure.check(checker,newValue,newPath) - - if (isDataValid){ - parent[parentIndex] = newValue - - await checker.config.save() - terminal.bold.blue("\n\n✅ Variable saved succesfully!") - await utilities.timer(400) - await backFn() - }else{ - const messages = checker.messages.map((msg) => "=> ["+msg.type.toUpperCase()+"] "+msg.message).join("\n") - terminal.bold.blue("\n\n❌ Variable is invalid! Please try again!") - terminal.red("\n"+messages) - await utilities.timer(1000+(2000*checker.messages.length)) - await renderConfigNullStructureEditor(checker,backFn,structure,data,parent,parentIndex,path) - } -} - -async function renderConfigTypeSwitchStructureEditor(checker:api.ODChecker,backFn:(() => api.ODPromiseVoid),structure:api.ODCheckerTypeSwitchStructure,data:any,parent:object,parentIndex:string|number,path:(string|number)[]){ - renderHeader(path) - terminal(ansis.bold.green("You are now editing "+(typeof parentIndex == "string" ? "the property "+ansis.blue("\""+parentIndex+"\"") : "property "+ansis.blue("#"+(parentIndex+1)))+".\n")+ansis.italic.gray("(use arrow keys to navigate, go back using escape)\n")) - - terminal.gray("\nCurrent value: "+ansis.bold.blue(data.toString())+"\n") - terminal.gray("Description: "+ansis.bold(structure.options.cliDisplayDescription ?? "/")+"\n") - - const actionsList: string[] = [] - if (structure.options.boolean) actionsList.push("Edit as boolean") - if (structure.options.string) actionsList.push("Edit as string") - if (structure.options.number) actionsList.push("Edit as number") - if (structure.options.object) actionsList.push("Edit as object") - if (structure.options.array) actionsList.push("Edit as array/list") - if (structure.options.null) actionsList.push("Edit as null") - - const answer = await terminal.singleColumnMenu(actionsList,{ - leftPadding:"> ", - style:terminal.cyan, - selectedStyle:terminal.bgDefaultColor.bold, - submittedStyle:terminal.bgBlue, - extraLines:2, - cancelable:true - }).promise - - if (answer.canceled) return await backFn() - - //run selected structure editor (untested) - if (answer.selectedText.startsWith("Edit as boolean") && structure.options.boolean) await renderConfigBooleanStructureEditor(checker,async () => {await renderConfigTypeSwitchStructureEditor(checker,backFn,structure,data,parent,parentIndex,path)},structure.options.boolean,false,parent,parentIndex,path) - else if (answer.selectedText.startsWith("Edit as string") && structure.options.string) await renderConfigStringStructureEditor(checker,async () => {await renderConfigTypeSwitchStructureEditor(checker,backFn,structure,data,parent,parentIndex,path)},structure.options.string,data.toString(),parent,parentIndex,path) - else if (answer.selectedText.startsWith("Edit as number") && structure.options.number) await renderConfigNumberStructureEditor(checker,async () => {await renderConfigTypeSwitchStructureEditor(checker,backFn,structure,data,parent,parentIndex,path)},structure.options.number,0,parent,parentIndex,path) - else if (answer.selectedText.startsWith("Edit as object") && structure.options.object) await renderConfigObjectStructureSelector(checker,async () => {await renderConfigTypeSwitchStructureEditor(checker,backFn,structure,data,parent,parentIndex,path)},structure.options.object,data,parent,parentIndex,path) - else if (answer.selectedText.startsWith("Edit as array/list") && structure.options.array) await renderConfigArrayStructureSelector(checker,async () => {await renderConfigTypeSwitchStructureEditor(checker,backFn,structure,data,parent,parentIndex,path)},structure.options.array,data,parent,parentIndex,path) - else if (answer.selectedText.startsWith("Edit as null") && structure.options.null) await renderConfigNullStructureEditor(checker,async () => {await renderConfigTypeSwitchStructureEditor(checker,backFn,structure,data,parent,parentIndex,path)},structure.options.null,null,parent,parentIndex,path) -} - -function getArrayPreviewStructureNameLength(structure:api.ODCheckerStructure,data:api.ODValidJsonType,parent:object,parentIndex:string|number): number { - if (structure instanceof api.ODCheckerBooleanStructure && typeof data == "boolean") return data.toString().length - else if (structure instanceof api.ODCheckerNumberStructure && typeof data == "number") return data.toString().length - else if (structure instanceof api.ODCheckerStringStructure && typeof data == "string") return data.length - else if (structure instanceof api.ODCheckerNullStructure && data === null) return "Null".length - else if (structure instanceof api.ODCheckerArrayStructure && Array.isArray(data)) return "Array".length - else if (structure instanceof api.ODCheckerObjectStructure && typeof data == "object" && !Array.isArray(data) && data){ - if (!structure.options.cliDisplayKeyInParentArray) return "Object".length - else return data[structure.options.cliDisplayKeyInParentArray].toString().length - - }else if (structure instanceof api.ODCheckerEnabledObjectStructure && typeof data == "object" && !Array.isArray(data) && data){ - const subStructure = structure.options.checker - if (!subStructure) return "".length - return getArrayPreviewStructureNameLength(subStructure,data,parent,parentIndex) - - }else if (structure instanceof api.ODCheckerObjectSwitchStructure && typeof data == "object" && !Array.isArray(data) && data){ - for (const objectTemplate of (structure.options.objects ?? [])){ - if (objectTemplate.properties.every((prop) => data[prop.key] === prop.value)){ - //object template matches data - const subStructure = objectTemplate.checker - return getArrayPreviewStructureNameLength(subStructure,data,parent,parentIndex) - } - } - return "".length - - }else if (structure instanceof api.ODCheckerTypeSwitchStructure){ - if (typeof data == "boolean" && structure.options.boolean) return getArrayPreviewStructureNameLength(structure.options.boolean,data,parent,parentIndex) - else if (typeof data == "number" && structure.options.number) return getArrayPreviewStructureNameLength(structure.options.number,data,parent,parentIndex) - else if (typeof data == "string" && structure.options.string) return getArrayPreviewStructureNameLength(structure.options.string,data,parent,parentIndex) - else if (typeof data == "object" && !Array.isArray(data) && data && structure.options.object) return getArrayPreviewStructureNameLength(structure.options.object,data,parent,parentIndex) - else if (Array.isArray(data) && structure.options.array) return getArrayPreviewStructureNameLength(structure.options.array,data,parent,parentIndex) - else if (data === null && structure.options.null) return getArrayPreviewStructureNameLength(structure.options.null,data,parent,parentIndex) - else return "".length - }else return "".length -} - -function getArrayPreviewFromStructure(structure:api.ODCheckerStructure,data:api.ODValidJsonType,parent:object,parentIndex:string|number,nameLength:number): string { - if (structure instanceof api.ODCheckerBooleanStructure && typeof data == "boolean") return data.toString() - else if (structure instanceof api.ODCheckerNumberStructure && typeof data == "number") return data.toString() - else if (structure instanceof api.ODCheckerStringStructure && typeof data == "string") return data - else if (structure instanceof api.ODCheckerNullStructure && data === null) return "Null" - else if (structure instanceof api.ODCheckerArrayStructure && Array.isArray(data)) return "Array" - else if (structure instanceof api.ODCheckerObjectStructure && typeof data == "object" && !Array.isArray(data) && data){ - const additionalKeys = (structure.options.cliDisplayAdditionalKeysInParentArray ?? []).map((key) => key+": "+data[key].toString()).join(", ") - if (!structure.options.cliDisplayKeyInParentArray) return "Object" - else return data[structure.options.cliDisplayKeyInParentArray].toString().padEnd(nameLength+5," ")+ansis.gray(additionalKeys.length > 0 ? "("+additionalKeys+")" : "") - - }else if (structure instanceof api.ODCheckerEnabledObjectStructure && typeof data == "object" && !Array.isArray(data) && data){ - const subStructure = structure.options.checker - if (!subStructure) return "" - return getArrayPreviewFromStructure(subStructure,data,parent,parentIndex,nameLength) - - }else if (structure instanceof api.ODCheckerObjectSwitchStructure && typeof data == "object" && !Array.isArray(data) && data){ - for (const objectTemplate of (structure.options.objects ?? [])){ - if (objectTemplate.properties.every((prop) => data[prop.key] === prop.value)){ - //object template matches data - const subStructure = objectTemplate.checker - return getArrayPreviewFromStructure(subStructure,data,parent,parentIndex,nameLength) - } - } - return "" - - }else if (structure instanceof api.ODCheckerTypeSwitchStructure){ - if (typeof data == "boolean" && structure.options.boolean) return getArrayPreviewFromStructure(structure.options.boolean,data,parent,parentIndex,nameLength) - else if (typeof data == "number" && structure.options.number) return getArrayPreviewFromStructure(structure.options.number,data,parent,parentIndex,nameLength) - else if (typeof data == "string" && structure.options.string) return getArrayPreviewFromStructure(structure.options.string,data,parent,parentIndex,nameLength) - else if (typeof data == "object" && !Array.isArray(data) && data && structure.options.object) return getArrayPreviewFromStructure(structure.options.object,data,parent,parentIndex,nameLength) - else if (Array.isArray(data) && structure.options.array) return getArrayPreviewFromStructure(structure.options.array,data,parent,parentIndex,nameLength) - else if (data === null && structure.options.null) return getArrayPreviewFromStructure(structure.options.null,data,parent,parentIndex,nameLength) - else return "" - }else return "" -} - -async function chooseAdditionConfigStructure(checker:api.ODChecker,backFn:(() => api.ODPromiseVoid),nextFn:((data:any) => api.ODPromiseVoid),structure:api.ODCheckerStructure,parent:object|any[],parentIndex:string|number,path:(string|number)[],localPath:(string|number)[]){ - if (structure instanceof api.ODCheckerObjectStructure) await renderAdditionConfigObjectStructure(checker,backFn,nextFn,structure,parent,parentIndex,path,localPath) - else if (structure instanceof api.ODCheckerBooleanStructure) await renderAdditionConfigBooleanStructure(checker,backFn,nextFn,structure,parent,parentIndex,path,localPath) - else if (structure instanceof api.ODCheckerNumberStructure) await renderAdditionConfigNumberStructure(checker,backFn,nextFn,structure,parent,parentIndex,path,localPath) - else if (structure instanceof api.ODCheckerStringStructure) await renderAdditionConfigStringStructure(checker,backFn,nextFn,structure,parent,parentIndex,path,localPath) - else if (structure instanceof api.ODCheckerNullStructure) await renderAdditionConfigNullStructure(checker,backFn,nextFn,structure,parent,parentIndex,path,localPath) - else if (structure instanceof api.ODCheckerEnabledObjectStructure) await renderAdditionConfigEnabledObjectStructure(checker,backFn,nextFn,structure,parent,parentIndex,path,localPath) - else if (structure instanceof api.ODCheckerObjectSwitchStructure) await renderAdditionConfigObjectSwitchStructure(checker,backFn,nextFn,structure,parent,parentIndex,path,localPath) - else if (structure instanceof api.ODCheckerArrayStructure) await renderAdditionConfigArrayStructureSelector(checker,backFn,nextFn,structure,parent,parentIndex,path,localPath) - else if (structure instanceof api.ODCheckerTypeSwitchStructure) await renderAdditionConfigTypeSwitchStructure(checker,backFn,nextFn,structure,parent,parentIndex,path,localPath) - else await backFn() -} - -async function renderAdditionConfigObjectStructure(checker:api.ODChecker,backFn:(() => api.ODPromiseVoid),nextFn:((data:any) => api.ODPromiseVoid),structure:api.ODCheckerObjectStructure,parent:object|any[],parentIndex:string|number,path:(string|number)[],localPath:(string|number)[],localData:object={}){ - const children = structure.options.children ?? [] - const skipKeys = (structure.options.cliInitSkipKeys ?? []) - //add skipped properties - for (const key of skipKeys){ - const childStructure = children.find((c) => c.key == key) - if (childStructure){ - const defaultValue = childStructure.checker.options.cliInitDefaultValue - if (childStructure.checker instanceof api.ODCheckerBooleanStructure) localData[key] = (typeof defaultValue == "boolean" ? defaultValue : false) - else if (childStructure.checker instanceof api.ODCheckerNumberStructure) localData[key] = (typeof defaultValue == "number" ? defaultValue : 0) - else if (childStructure.checker instanceof api.ODCheckerStringStructure) localData[key] = (typeof defaultValue == "string" ? defaultValue : "") - else if (childStructure.checker instanceof api.ODCheckerNullStructure) localData[key] = (defaultValue === null ? defaultValue : null) - else if (childStructure.checker instanceof api.ODCheckerArrayStructure) localData[key] = (Array.isArray(defaultValue) ? JSON.parse(JSON.stringify(defaultValue)) : []) - else if (childStructure.checker instanceof api.ODCheckerObjectStructure) localData[key] = ((typeof defaultValue == "object" && !Array.isArray(defaultValue) && defaultValue) ? JSON.parse(JSON.stringify(defaultValue)) : {}) - else if (childStructure.checker instanceof api.ODCheckerObjectSwitchStructure) localData[key] = ((typeof defaultValue == "object" && !Array.isArray(defaultValue) && defaultValue) ? JSON.parse(JSON.stringify(defaultValue)) : {}) - else if (childStructure.checker instanceof api.ODCheckerEnabledObjectStructure) localData[key] = ((typeof defaultValue == "object" && !Array.isArray(defaultValue) && defaultValue) ? JSON.parse(JSON.stringify(defaultValue)) : {}) - else if (childStructure.checker instanceof api.ODCheckerTypeSwitchStructure && typeof defaultValue != "undefined") localData[key] = JSON.parse(JSON.stringify(defaultValue)) - else throw new api.ODSystemError("OT CLI => Object skip key has an invalid checker structure! key: "+key) - } - } - - //add properties that need to be configured - const configChildren = children.filter((c) => !skipKeys.includes(c.key)).map((c) => {return {key:c.key,checker:c.checker}}) - await configureAdditionObjectProperties(checker,configChildren,0,localData,[...path,parentIndex],(typeof parentIndex == "number") ? [...localPath] : [...localPath,parentIndex],async () => { - //go back to previous screen - await backFn() - },async () => { - //finish setup - terminal.bold.blue("\n\n✅ Variable saved succesfully!") - await utilities.timer(400) - await nextFn(localData) - }) -} - -async function configureAdditionObjectProperties(checker:api.ODChecker,children:{key:string,checker:api.ODCheckerStructure}[],currentIndex:number,localData:object,path:(string|number)[],localPath:(string|number)[],backFn:(() => api.ODPromiseVoid),nextFn:(() => api.ODPromiseVoid)){ - if (children.length < 1) return await nextFn() - - const child = children[currentIndex] - await chooseAdditionConfigStructure(checker,async () => { - if (children[currentIndex-1]) await configureAdditionObjectProperties(checker,children,currentIndex-1,localData,path,localPath,backFn,nextFn) - else await backFn() - },async (data) => { - localData[child.key] = data - if (children[currentIndex+1]) await configureAdditionObjectProperties(checker,children,currentIndex+1,localData,path,localPath,backFn,nextFn) - else await nextFn() - },child.checker,localData,child.key,path,localPath) -} - -async function renderAdditionConfigEnabledObjectStructure(checker:api.ODChecker,backFn:(() => api.ODPromiseVoid),nextFn:((data:any) => api.ODPromiseVoid),structure:api.ODCheckerEnabledObjectStructure,parent:object|any[],parentIndex:string|number,path:(string|number)[],localPath:(string|number)[]){ - const enabledProperty = structure.options.property - const enabledValue = structure.options.enabledValue - const subStructure = structure.options.checker - if (!enabledProperty || !subStructure || !subStructure.options.children) return await backFn() - - let propertyStructure: api.ODCheckerBooleanStructure|api.ODCheckerNumberStructure|api.ODCheckerStringStructure - if (typeof enabledValue == "string") propertyStructure = new api.ODCheckerStringStructure("opendiscord:CLI-checker-enabled-object-structure",{}) - else if (typeof enabledValue == "number") propertyStructure = new api.ODCheckerNumberStructure("opendiscord:CLI-checker-enabled-object-structure",{}) - else if (typeof enabledValue == "boolean") propertyStructure = new api.ODCheckerBooleanStructure("opendiscord:CLI-checker-enabled-object-structure",{}) - else throw new Error("OT CLI => enabled object structure has an invalid type of enabledProperty. It must be a primitive boolean/number/string.") - - const localData = {} - await chooseAdditionConfigStructure(checker,backFn,async (data) => { - if (data === enabledValue) await renderAdditionConfigObjectStructure(checker,async () => {await renderAdditionConfigEnabledObjectStructure(checker,backFn,nextFn,structure,parent,parentIndex,path,localPath)},nextFn,subStructure,parent,parentIndex,path,localPath,localData) - else{ - localData[enabledProperty] = data - //copy old object checker to new object checker => all options get de-referenced (this is needed for the new object skip keys are temporary) - const newStructure = new api.ODCheckerObjectStructure(subStructure.id,{children:[]}) - - //copy all options over to the new checker - newStructure.options.children = [...subStructure.options.children] - newStructure.options.cliInitSkipKeys = subStructure.options.children.map((child) => child.key) - for (const key of Object.keys(subStructure.options)){ - if (key != "children" && key != "cliInitSkipKeys") newStructure.options[key] = subStructure.options[key] - } - - //adds all properties to object as "skipKeys", then continues to next function - await renderAdditionConfigObjectStructure(checker,async () => {await renderAdditionConfigEnabledObjectStructure(checker,backFn,nextFn,structure,parent,parentIndex,path,localPath)},nextFn,newStructure,parent,parentIndex,path,localPath,localData) - await nextFn(localData) - } - },propertyStructure,localData,enabledProperty,[...path,parentIndex],[...localPath,parentIndex]) -} - -async function renderAdditionConfigObjectSwitchStructure(checker:api.ODChecker,backFn:(() => api.ODPromiseVoid),nextFn:((data:any) => api.ODPromiseVoid),structure:api.ODCheckerObjectSwitchStructure,parent:object|any[],parentIndex:string|number,path:(string|number)[],localPath:(string|number)[]){ - renderHeader([...path,parentIndex]) - terminal(ansis.bold.green("What type of object would you like to add?\n")+ansis.italic.gray("(use arrow keys to navigate, go back using escape)\n")) - - const answer = await terminal.singleColumnMenu(structure.options.objects.map((obj) => obj.name),{ - leftPadding:"> ", - style:terminal.cyan, - selectedStyle:terminal.bgDefaultColor.bold, - submittedStyle:terminal.bgBlue, - extraLines:2, - cancelable:true - }).promise - - if (answer.canceled) return await backFn() - const objectTemplate = structure.options.objects[answer.selectedIndex] - - //copy old object checker to new object checker => all options get de-referenced (this is needed for the new object switch properties which are temporary) - const oldStructure = objectTemplate.checker - const newStructure = new api.ODCheckerObjectStructure(oldStructure.id,{children:[]}) - - //copy all options over to the new checker - newStructure.options.children = [...oldStructure.options.children] - newStructure.options.cliInitSkipKeys = [...(oldStructure.options.cliInitSkipKeys ?? [])] - for (const key of Object.keys(oldStructure.options)){ - if (key != "children" && key != "cliInitSkipKeys") newStructure.options[key] = oldStructure.options[key] - } - - //add the keys of the object switch properties to the 'cliInitSkipKeys' because they need to be skipped. - objectTemplate.properties.map((p) => p.key).forEach((p) => { - if (!newStructure.options.cliInitSkipKeys) newStructure.options.cliInitSkipKeys = [p] - else if (!newStructure.options.cliInitSkipKeys.includes(p)) newStructure.options.cliInitSkipKeys.push(p) - }) - - //add structure checkers for all properties - for (const prop of objectTemplate.properties){ - if (!newStructure.options.children.find((child) => child.key === prop.key)){ - if (typeof prop.value == "string") newStructure.options.children.unshift({key:prop.key,optional:false,priority:1,checker:new api.ODCheckerStringStructure("opendiscord:CLI-checker-object-switch-structure",{cliInitDefaultValue:prop.value})}) - else if (typeof prop.value == "number") newStructure.options.children.unshift({key:prop.key,optional:false,priority:1,checker:new api.ODCheckerNumberStructure("opendiscord:CLI-checker-object-switch-structure",{cliInitDefaultValue:prop.value})}) - else if (typeof prop.value == "boolean") newStructure.options.children.unshift({key:prop.key,optional:false,priority:1,checker:new api.ODCheckerBooleanStructure("opendiscord:CLI-checker-object-switch-structure",{cliInitDefaultValue:prop.value})}) - } - } - - await chooseAdditionConfigStructure(checker,backFn,nextFn,newStructure,parent,parentIndex,path,localPath) -} - -async function renderAdditionConfigBooleanStructure(checker:api.ODChecker,backFn:(() => api.ODPromiseVoid),nextFn:((data:any) => api.ODPromiseVoid),structure:api.ODCheckerBooleanStructure,parent:object|any[],parentIndex:string|number,path:(string|number)[],localPath:(string|number)[]){ - renderHeader([...path,parentIndex]) - terminal(ansis.bold.green("You are now creating "+(typeof parentIndex == "string" ? "the boolean property "+ansis.blue("\""+parentIndex+"\"") : "boolean property "+ansis.blue("#"+(parentIndex+1)))+".\n")+ansis.italic.gray("(use arrow keys to navigate, go back using escape)\n")) - - terminal.gray("\nProperty: "+ansis.bold.blue(structure.options.cliDisplayName ?? [...localPath,parentIndex].join("."))+"\n") - terminal.gray("Description: "+ansis.bold(structure.options.cliDisplayDescription ?? "/")+"\n") - - const answer = await terminal.singleColumnMenu(["false (Disabled)","true (Enabled)"],{ - leftPadding:"> ", - style:terminal.cyan, - selectedStyle:terminal.bgDefaultColor.bold, - submittedStyle:terminal.bgBlue, - extraLines:2, - cancelable:true - }).promise - - if (answer.canceled) return await backFn() - - //run config checker - const newValue = (answer.selectedIndex == 0) ? false : true - const newPath = [...path] - newPath.shift() - checker.messages = [] //manually clear previous messages - const isDataValid = structure.check(checker,newValue,newPath) - - if (isDataValid){ - terminal.bold.blue("\n\n✅ Variable saved succesfully!") - await utilities.timer(400) - await nextFn(newValue) - }else{ - const messages = checker.messages.map((msg) => "=> ["+msg.type.toUpperCase()+"] "+msg.message).join("\n") - terminal.bold.blue("\n\n❌ Variable is invalid! Please try again!") - terminal.gray("\n"+messages) - await utilities.timer(1000+(2000*checker.messages.length)) - await renderAdditionConfigBooleanStructure(checker,backFn,nextFn,structure,parent,parentIndex,path,localPath) - } -} - -async function renderAdditionConfigNumberStructure(checker:api.ODChecker,backFn:(() => api.ODPromiseVoid),nextFn:((data:any) => api.ODPromiseVoid),structure:api.ODCheckerNumberStructure,parent:object|any[],parentIndex:string|number,path:(string|number)[],localPath:(string|number)[],prefillValue?:string){ - renderHeader([...path,parentIndex]) - terminal(ansis.bold.green("You are now creating "+(typeof parentIndex == "string" ? "the number property "+ansis.blue("\""+parentIndex+"\"") : "number property "+ansis.blue("#"+(parentIndex+1)))+".\n")+ansis.italic.gray("(insert a new value and press enter, go back using escape)\n")) - - terminal.gray("\nProperty: "+ansis.bold.blue(structure.options.cliDisplayName ?? [...localPath,parentIndex].join("."))+"\n") - terminal.gray("Description: "+ansis.bold(structure.options.cliDisplayDescription ?? "/")+"\n") - - const answer = await terminal.inputField({ - default:prefillValue, - style:terminal.cyan, - cancelable:true - }).promise - - if (typeof answer != "string") return await backFn() - - //run config checker - const newValue = Number(answer.replaceAll(",",".")) - const newPath = [...path] - newPath.shift() - checker.messages = [] //manually clear previous messages - const isDataValid = structure.check(checker,newValue,newPath) - - if (isDataValid){ - terminal.bold.blue("\n\n✅ Variable saved succesfully!") - await utilities.timer(400) - await nextFn(newValue) - }else{ - const messages = checker.messages.map((msg) => "=> ["+msg.type.toUpperCase()+"] "+msg.message).join("\n") - terminal.bold.blue("\n\n❌ Variable is invalid! Please try again!") - terminal.red("\n"+messages) - await utilities.timer(1000+(2000*checker.messages.length)) - await renderAdditionConfigNumberStructure(checker,backFn,nextFn,structure,parent,parentIndex,path,localPath,answer) - } -} - -async function renderAdditionConfigStringStructure(checker:api.ODChecker,backFn:(() => api.ODPromiseVoid),nextFn:((data:any) => api.ODPromiseVoid),structure:api.ODCheckerStringStructure,parent:object|any[],parentIndex:string|number,path:(string|number)[],localPath:(string|number)[],prefillValue?:string){ - renderHeader([...path,parentIndex]) - terminal(ansis.bold.green("You are now creating "+(typeof parentIndex == "string" ? "the string property "+ansis.blue("\""+parentIndex+"\"") : "string property "+ansis.blue("#"+(parentIndex+1)))+".\n")+ansis.italic.gray("(insert a new value and press enter, go back using escape)\n")) - - terminal.gray("\nProperty: "+ansis.bold.blue(structure.options.cliDisplayName ?? [...localPath,parentIndex].join("."))+"\n") - terminal.gray("Description: "+ansis.bold(structure.options.cliDisplayDescription ?? "/")+"\n") - - const customExtraOptions = (structure instanceof api.ODCheckerCustomStructure_DiscordId) ? structure.extraOptions : undefined - const customAutocompleteFunc = structure.options.cliAutocompleteFunc ? await structure.options.cliAutocompleteFunc() : null - const autocompleteList = ((customAutocompleteFunc ?? structure.options.cliAutocompleteList) ?? customExtraOptions) ?? structure.options.choices - const autoCompleteMenuOpts: Terminal.SingleLineMenuOptions = { - style:terminal.white, - selectedStyle:terminal.bgBlue.white - } - - const input = terminal.inputField({ - default:prefillValue, - style:terminal.cyan, - hintStyle:terminal.gray, - cancelable:false, - autoComplete:autocompleteList, - autoCompleteHint:(!!autocompleteList), - autoCompleteMenu:(autocompleteList) ? autoCompleteMenuOpts as Terminal.Autocompletion : false - }) - - terminal.on("key",async (name:string,matches:string[],data:object) => { - if (name == "ESCAPE"){ - terminal.removeListener("key","cli-render-string-structure-add") - input.abort() - await backFn() - } - },({id:"cli-render-string-structure-add"} as any)) - - const answer = await input.promise - terminal.removeListener("key","cli-render-string-structure-add") - if (typeof answer != "string") return - - //run config checker - const newValue = answer.replaceAll("\\n","\n") - const newPath = [...path] - newPath.shift() - checker.messages = [] //manually clear previous messages - const isDataValid = structure.check(checker,newValue,newPath) - - if (isDataValid){ - terminal.bold.blue("\n\n✅ Variable saved succesfully!") - await utilities.timer(400) - await nextFn(newValue) - }else{ - const messages = checker.messages.map((msg) => "=> ["+msg.type.toUpperCase()+"] "+msg.message).join("\n") - terminal.bold.blue("\n\n❌ Variable is invalid! Please try again!") - terminal.red("\n"+messages) - await utilities.timer(1000+(2000*checker.messages.length)) - await renderAdditionConfigStringStructure(checker,backFn,nextFn,structure,parent,parentIndex,path,localPath,answer) - } -} - -async function renderAdditionConfigNullStructure(checker:api.ODChecker,backFn:(() => api.ODPromiseVoid),nextFn:((data:any) => api.ODPromiseVoid),structure:api.ODCheckerNullStructure,parent:object|any[],parentIndex:string|number,path:(string|number)[],localPath:(string|number)[]){ - renderHeader([...path,parentIndex]) - terminal(ansis.bold.green("You are now creating "+(typeof parentIndex == "string" ? "the null property "+ansis.blue("\""+parentIndex+"\"") : "null property "+ansis.blue("#"+(parentIndex+1)))+".\n")+ansis.italic.gray("(use arrow keys to navigate, go back using escape)\n")) - - terminal.gray("\nProperty: "+ansis.bold.blue(structure.options.cliDisplayName ?? [...localPath,parentIndex].join("."))+"\n") - terminal.gray("Description: "+ansis.bold(structure.options.cliDisplayDescription ?? "/")+"\n") - - const answer = await terminal.singleColumnMenu(["null"],{ - leftPadding:"> ", - style:terminal.cyan, - selectedStyle:terminal.bgDefaultColor.bold, - submittedStyle:terminal.bgBlue, - extraLines:2, - cancelable:true - }).promise - - if (answer.canceled) return await backFn() - - //run config checker - const newValue = null - const newPath = [...path] - newPath.shift() - checker.messages = [] //manually clear previous messages - const isDataValid = structure.check(checker,newValue,newPath) - - if (isDataValid){ - terminal.bold.blue("\n\n✅ Variable saved succesfully!") - await utilities.timer(400) - await nextFn(newValue) - }else{ - const messages = checker.messages.map((msg) => "=> ["+msg.type.toUpperCase()+"] "+msg.message).join("\n") - terminal.bold.blue("\n\n❌ Variable is invalid! Please try again!") - terminal.red("\n"+messages) - await utilities.timer(1000+(2000*checker.messages.length)) - await renderAdditionConfigNullStructure(checker,backFn,nextFn,structure,parent,parentIndex,path,localPath) - } -} - -async function renderAdditionConfigArrayStructureSelector(checker:api.ODChecker,backFn:(() => api.ODPromiseVoid),nextFn:((data:any) => api.ODPromiseVoid),structure:api.ODCheckerArrayStructure,parent:object|any[],parentIndex:string|number,path:(string|number)[],localPath:(string|number)[],localData:any[]=[]){ - renderHeader([...path,parentIndex]) - terminal(ansis.bold.green("Please select what you would like to do with the new array.\n")+ansis.italic.gray("(use arrow keys to navigate, go back using escape)\n")) - if (!structure.options.propertyChecker) return await backFn() - - terminal.gray("\nProperty: "+ansis.bold.blue(structure.options.cliDisplayName ?? [...localPath,parentIndex].join("."))+"\n") - terminal.gray("Description: "+ansis.bold(structure.options.cliDisplayDescription ?? "/")+"\n") - - const propertyName = structure.options.cliDisplayPropertyName ?? "index" - const answer = await terminal.singleColumnMenu(localData.length < 1 ? [ansis.magenta("-> Continue to next variable"),"Add "+propertyName] : [ - ansis.magenta("-> Continue to next variable"), - "Add "+propertyName, - "Edit "+propertyName, - "Move "+propertyName, - "Remove "+propertyName, - "Duplicate "+propertyName, - - ],{ - leftPadding:"> ", - style:terminal.cyan, - selectedStyle:terminal.bgDefaultColor.bold, - submittedStyle:terminal.bgBlue, - extraLines:2, - cancelable:true - }).promise - - const backFnFunc = async () => {await renderAdditionConfigArrayStructureSelector(checker,backFn,nextFn,structure,parent,parentIndex,path,localPath,localData)} - - if (answer.canceled) return await backFn() - if (answer.selectedIndex == 0) await nextFn(localData) - else if (answer.selectedIndex == 1) await chooseAdditionConfigStructure(checker,backFnFunc,async (newData) => { - localData[localData.length] = newData - await backFnFunc() - },structure.options.propertyChecker,localData,localData.length,path,[]) - else if (answer.selectedIndex == 2) await renderConfigArrayStructureEditSelector(checker,backFnFunc,structure,structure.options.propertyChecker,localData,parent,parentIndex,path) - else if (answer.selectedIndex == 3) await renderconfigArrayStructureMoveSelector(checker,backFnFunc,structure,structure.options.propertyChecker,localData,parent,parentIndex,path) - else if (answer.selectedIndex == 4) await renderconfigArrayStructureRemoveSelector(checker,backFnFunc,structure,structure.options.propertyChecker,localData,parent,parentIndex,path) - else if (answer.selectedIndex == 5) await renderConfigArrayStructureDuplicateSelector(checker,backFnFunc,structure,structure.options.propertyChecker,localData,parent,parentIndex,path) -} - -async function renderAdditionConfigTypeSwitchStructure(checker:api.ODChecker,backFn:(() => api.ODPromiseVoid),nextFn:((data:any) => api.ODPromiseVoid),structure:api.ODCheckerTypeSwitchStructure,parent:object|any[],parentIndex:string|number,path:(string|number)[],localPath:(string|number)[]){ - renderHeader(path) - terminal(ansis.bold.green("You are now creating "+(typeof parentIndex == "string" ? "the property "+ansis.blue("\""+parentIndex+"\"") : "property "+ansis.blue("#"+(parentIndex+1)))+".\n")+ansis.italic.gray("(use arrow keys to navigate, go back using escape)\n")) - - terminal.gray("\nProperty: "+ansis.bold.blue(structure.options.cliDisplayName ?? [...localPath,parentIndex].join("."))+"\n") - terminal.gray("Description: "+ansis.bold(structure.options.cliDisplayDescription ?? "/")+"\n") - - const actionsList: string[] = [] - if (structure.options.boolean) actionsList.push("Create as boolean") - if (structure.options.string) actionsList.push("Create as string") - if (structure.options.number) actionsList.push("Create as number") - if (structure.options.object) actionsList.push("Create as object") - if (structure.options.array) actionsList.push("Create as array/list") - if (structure.options.null) actionsList.push("Create as null") - - const answer = await terminal.singleColumnMenu(actionsList,{ - leftPadding:"> ", - style:terminal.cyan, - selectedStyle:terminal.bgDefaultColor.bold, - submittedStyle:terminal.bgBlue, - extraLines:2, - cancelable:true - }).promise - - if (answer.canceled) return await backFn() - - //run selected structure editor (untested) - if (answer.selectedText.startsWith("Create as boolean") && structure.options.boolean) await renderAdditionConfigBooleanStructure(checker,async () => {await renderAdditionConfigTypeSwitchStructure(checker,backFn,nextFn,structure,parent,parentIndex,path,localPath)},nextFn,structure.options.boolean,parent,parentIndex,path,localPath) - else if (answer.selectedText.startsWith("Create as string") && structure.options.string) await renderAdditionConfigStringStructure(checker,async () => {await renderAdditionConfigTypeSwitchStructure(checker,backFn,nextFn,structure,parent,parentIndex,path,localPath)},nextFn,structure.options.string,parent,parentIndex,path,localPath) - else if (answer.selectedText.startsWith("Create as number") && structure.options.number) await renderAdditionConfigNumberStructure(checker,async () => {await renderAdditionConfigTypeSwitchStructure(checker,backFn,nextFn,structure,parent,parentIndex,path,localPath)},nextFn,structure.options.number,parent,parentIndex,path,localPath) - else if (answer.selectedText.startsWith("Create as object") && structure.options.object) await renderAdditionConfigObjectStructure(checker,async () => {await renderAdditionConfigTypeSwitchStructure(checker,backFn,nextFn,structure,parent,parentIndex,path,localPath)},nextFn,structure.options.object,parent,parentIndex,path,localPath) - else if (answer.selectedText.startsWith("Create as array/list") && structure.options.array) await renderAdditionConfigArrayStructureSelector(checker,async () => {await renderAdditionConfigTypeSwitchStructure(checker,backFn,nextFn,structure,parent,parentIndex,path,localPath)},nextFn,structure.options.array,parent,parentIndex,path,localPath) - else if (answer.selectedText.startsWith("Create as null") && structure.options.null) await renderAdditionConfigNullStructure(checker,async () => {await renderAdditionConfigTypeSwitchStructure(checker,backFn,nextFn,structure,parent,parentIndex,path,localPath)},nextFn,structure.options.null,parent,parentIndex,path,localPath) -} \ No newline at end of file diff --git a/src/core/cli/quickSetup.ts b/src/core/cli/quickSetup.ts index 3d4b9e0..6908612 100644 --- a/src/core/cli/quickSetup.ts +++ b/src/core/cli/quickSetup.ts @@ -1,16 +1,9 @@ import {opendiscord, api, utilities} from "../../index" +import * as cli from "@open-discord-bots/framework/cli" import {Terminal, terminal} from "terminal-kit" import ansis from "ansis" import * as discord from "discord.js" -import crypto from "crypto" -import {renderHeader, terminate} from "./cli" - -function generateUniqueIdFromName(name:string){ - //id only allows a-z, 0-9 & dash characters (& replace spaces with dashes) - const filteredChars = name.toLowerCase().replaceAll(" ","-").split("").filter((ch) => /^[a-zA-Z0-9-]{1}$/.test(ch)) - const randomSuffix = "-"+crypto.randomBytes(4).toString("hex") - return filteredChars.join("")+randomSuffix -} +import { headerOpts } from "./cli" interface ODQuickSetupVariables { client?:api.ODClientManager, @@ -20,7 +13,7 @@ interface ODQuickSetupVariables { language?:string, slashCommands?:boolean, textCommands?:boolean, - status?:api.ODJsonConfig_DefaultStatusType, + status?:api.ODGeneralJsonConfig_Status, logChannel?:string|null, ticketCategory?:string|null, ticketOptions:({ @@ -30,7 +23,7 @@ interface ODQuickSetupVariables { buttonColor:api.ODValidButtonColor, buttonEmoji:string|null, channelPrefix:string, - channelSuffix:api.ODJsonConfig_DefaultOptionTicketChannelType["suffix"] + channelSuffix:api.ODOptionsJsonConfig_TicketOptionChannelSettings["suffix"] }|null)[], optionIdStorage:string[], autocloseHours?:number|null, @@ -38,7 +31,7 @@ interface ODQuickSetupVariables { globalUserLimit?:number|null, removeParticipantsOnClose?:boolean, ticketMessageLayout?:"embed"|"text"|null, - emojiStyle?:api.ODJsonConfig_DefaultSystem["emojiStyle"], + emojiStyle?:api.ODGeneralJsonConfig_System["emojiStyle"], panelName?:string, panelDescription?:string, panelDropdown?:boolean, @@ -113,7 +106,7 @@ function quickSetupRequiresReset(): boolean { } async function renderQuickSetupWarning(backFn:() => api.ODPromiseVoid) { - renderHeader("⏱️ Open Ticket Quick Setup: Warning") + cli.renderHeader(headerOpts,"⏱️ Open Ticket Quick Setup: Warning") terminal.bold(ansis.yellow("WARNING! ")+ansis.red("By using the 'Quick Setup' feature, your current config will be completely resetted!")) terminal.gray("\nAre you sure you want to continue?\n") @@ -135,7 +128,7 @@ async function renderQuickSetupWarning(backFn:() => api.ODPromiseVoid) { } async function renderQuickSetupWelcome(backFn:() => api.ODPromiseVoid){ - renderHeader("⏱️ Open Ticket Quick Setup: Introduction") + cli.renderHeader(headerOpts,"⏱️ Open Ticket Quick Setup: Introduction") terminal.bold.underline.blue("Open Ticket: Quick Setup\n") terminal.gray([ @@ -165,7 +158,7 @@ async function renderQuickSetupWelcome(backFn:() => api.ODPromiseVoid){ } async function renderQuickSetupDevPortal(backFn:() => api.ODPromiseVoid){ - renderHeader("⏱️ Open Ticket Quick Setup: Discord Bot & Developer Portal") + cli.renderHeader(headerOpts,"⏱️ Open Ticket Quick Setup: Discord Bot & Developer Portal") terminal.bold.blue(stepCount(1)+"Have you already created a Discord bot you can use for Open Ticket?\n") @@ -189,7 +182,7 @@ async function renderQuickSetupDevPortal(backFn:() => api.ODPromiseVoid){ } async function renderQuickSetupDevPortalGuide(variation:0|1,backFn:() => api.ODPromiseVoid){ - renderHeader("⏱️ Open Ticket Quick Setup: Discord Bot & Developer Portal") + cli.renderHeader(headerOpts,"⏱️ Open Ticket Quick Setup: Discord Bot & Developer Portal") if (variation == 0){ terminal.bold.blue(stepCount(1.1)+"You've mentioned that you don't know how to create a Discord bot.\n\n") @@ -238,7 +231,7 @@ async function quickSetupLogin(token:string): Promise } async function renderQuickSetupBotToken(backFn:() => api.ODPromiseVoid){ - renderHeader("⏱️ Open Ticket Quick Setup: Bot Token") + cli.renderHeader(headerOpts,"⏱️ Open Ticket Quick Setup: Bot Token") terminal.bold.blue(stepCount(2)+"Please insert the token of your discord bot.\n") terminal.gray("This is used to configure the bot and is then stored securely in the './config/general.json' file.\n\n> ") @@ -275,7 +268,7 @@ async function renderQuickSetupServer(backFn:() => api.ODPromiseVoid){ const {client} = quickSetupStorage if (!client) return - renderHeader("⏱️ Open Ticket Quick Setup: Discord Server") + cli.renderHeader(headerOpts,"⏱️ Open Ticket Quick Setup: Discord Server") terminal.bold.blue(stepCount(3)+"Please select a Discord Server to use.\n") terminal.gray("The bot will only work in this server.\n\n") @@ -305,7 +298,7 @@ async function renderQuickSetupAdminRoles(selectedAdmins:string[],backFn:() => a const {client,guild} = quickSetupStorage if (!client || !guild) return - renderHeader("⏱️ Open Ticket Quick Setup: Admin Roles") + cli.renderHeader(headerOpts,"⏱️ Open Ticket Quick Setup: Admin Roles") terminal.bold.blue(stepCount(4)+"Please select all 'Global Admins' roles to use.\n") terminal.gray("Users with one of these roles will be able to access & interact with all tickets.\n\n") @@ -341,7 +334,7 @@ async function renderQuickSetupColorPicker(backFn:() => api.ODPromiseVoid){ const {client,guild,globalAdmins} = quickSetupStorage if (!client || !guild || !globalAdmins) return - renderHeader("⏱️ Open Ticket Quick Setup: Main Color") + cli.renderHeader(headerOpts,"⏱️ Open Ticket Quick Setup: Main Color") terminal.bold.blue(stepCount(5)+"Please insert a valid hex-color to use in all embeds.\n") terminal.gray("You can also choose from existing presets. (e.g. red, green, blue, ...)\n\n> ") @@ -375,7 +368,7 @@ async function renderQuickSetupColorPicker(backFn:() => api.ODPromiseVoid){ } async function renderQuickSetupLanguage(backFn:() => api.ODPromiseVoid){ - renderHeader("⏱️ Open Ticket Quick Setup: Language") + cli.renderHeader(headerOpts,"⏱️ Open Ticket Quick Setup: Language") terminal.bold.blue(stepCount(6)+"What language would you like to use in the bot?\n") terminal.gray("View a list of available languages here: https://otgithub.dj-dj.be#-translators\n\n> ") @@ -403,7 +396,7 @@ async function renderQuickSetupLanguage(backFn:() => api.ODPromiseVoid){ } async function renderQuickSetupCommandTypes(backFn:() => api.ODPromiseVoid){ - renderHeader("⏱️ Open Ticket Quick Setup: Command Types") + cli.renderHeader(headerOpts,"⏱️ Open Ticket Quick Setup: Command Types") terminal.bold.blue(stepCount(7)+"Would you like to use slash commands, text commands or both?\n") terminal.gray("Slash commands are recommended.\n\n") @@ -436,7 +429,7 @@ async function renderQuickSetupCommandTypes(backFn:() => api.ODPromiseVoid){ } async function renderQuickSetupStatusType(backFn:() => api.ODPromiseVoid){ - renderHeader("⏱️ Open Ticket Quick Setup: Status Type") + cli.renderHeader(headerOpts,"⏱️ Open Ticket Quick Setup: Status Type") terminal.bold.blue(stepCount(8)+"Please select the type of status you want to use.\n") terminal.gray("The status will be shown below the bot name in the userlist.\n\n") @@ -471,7 +464,7 @@ async function renderQuickSetupStatusText(backFn:() => api.ODPromiseVoid){ const {status} = quickSetupStorage if (!status) return - renderHeader("⏱️ Open Ticket Quick Setup: Status Text") + cli.renderHeader(headerOpts,"⏱️ Open Ticket Quick Setup: Status Text") terminal.bold.blue(stepCount(8.1)+"What text would you like to display in the status?\n") terminal.gray("This will be appended after the type you have chosen in the previous question.\n\n> ") @@ -494,7 +487,7 @@ async function renderQuickSetupLogs(backFn:() => api.ODPromiseVoid){ const {client,guild} = quickSetupStorage if (!client || !guild) return - renderHeader("⏱️ Open Ticket Quick Setup: Channel Logs") + cli.renderHeader(headerOpts,"⏱️ Open Ticket Quick Setup: Channel Logs") terminal.bold.blue(stepCount(9)+"Please select the 'Text Channel' to use for logs.\n") terminal.gray("All logs of the bot will be sent here. Make sure only admins can access this channel.\n\n") @@ -531,7 +524,7 @@ async function renderQuickSetupTicketCategory(backFn:() => api.ODPromiseVoid){ const {client,guild} = quickSetupStorage if (!client || !guild) return - renderHeader("⏱️ Open Ticket Quick Setup: Ticket Category") + cli.renderHeader(headerOpts,"⏱️ Open Ticket Quick Setup: Ticket Category") terminal.bold.blue(stepCount(10)+"Please select which 'Category' you would like tickets to be created in.\n") terminal.gray("When no category is selected, tickets will appear at the top of the channel list.\n\n") @@ -564,7 +557,7 @@ async function renderQuickSetupTicketCategory(backFn:() => api.ODPromiseVoid){ } async function renderQuickSetupTicketCount(backFn:() => api.ODPromiseVoid){ - renderHeader("⏱️ Open Ticket Quick Setup: Ticket Configuration") + cli.renderHeader(headerOpts,"⏱️ Open Ticket Quick Setup: Ticket Configuration") terminal.bold.blue(stepCount(11)+"How many ticket options/types would you like to create?\n") terminal.gray("You can always add more ticket options/types in the config afterwards.\n\n") @@ -601,7 +594,7 @@ async function renderQuickSetupTicketCount(backFn:() => api.ODPromiseVoid){ } async function renderQuickSetupCreateTicketName(ticketIndex:number,requiredTickets:number,backFn:() => api.ODPromiseVoid){ - renderHeader("⏱️ Open Ticket Quick Setup: Ticket Configuration (Ticket "+(ticketIndex+1)+"/"+requiredTickets+")") + cli.renderHeader(headerOpts,"⏱️ Open Ticket Quick Setup: Ticket Configuration (Ticket "+(ticketIndex+1)+"/"+requiredTickets+")") terminal.bold.blue("("+utilities.ordinalNumber(ticketIndex+1)+" Ticket) Please insert the name of this ticket option.\n") terminal.gray("Recommendation: Clean, short, obvious name, not more than ±30 characters.\n\n> ") @@ -635,7 +628,7 @@ async function renderQuickSetupCreateTicketName(ticketIndex:number,requiredTicke } async function renderQuickSetupCreateTicketDescription(ticketIndex:number,requiredTickets:number,backFn:() => api.ODPromiseVoid){ - renderHeader("⏱️ Open Ticket Quick Setup: Ticket Configuration (Ticket "+(ticketIndex+1)+"/"+requiredTickets+")") + cli.renderHeader(headerOpts,"⏱️ Open Ticket Quick Setup: Ticket Configuration (Ticket "+(ticketIndex+1)+"/"+requiredTickets+")") terminal.bold.blue("("+utilities.ordinalNumber(ticketIndex+1)+" Ticket) Please insert the description of this ticket option.\n") terminal.gray("Recommendation: Use '\\n' (backslash-n) for a newline.\n\n> ") @@ -655,7 +648,7 @@ async function renderQuickSetupCreateTicketDescription(ticketIndex:number,requir } async function renderQuickSetupCreateTicketButtonType(ticketIndex:number,requiredTickets:number,backFn:() => api.ODPromiseVoid){ - renderHeader("⏱️ Open Ticket Quick Setup: Ticket Configuration (Ticket "+(ticketIndex+1)+"/"+requiredTickets+")") + cli.renderHeader(headerOpts,"⏱️ Open Ticket Quick Setup: Ticket Configuration (Ticket "+(ticketIndex+1)+"/"+requiredTickets+")") terminal.bold.blue("("+utilities.ordinalNumber(ticketIndex+1)+" Ticket) How would you like to display the ticket name in the button/dropdown?\n") terminal.gray("You will be able to choose between dropdown/buttons when configuring panels.\n\n") @@ -686,7 +679,7 @@ async function renderQuickSetupCreateTicketButtonType(ticketIndex:number,require } async function renderQuickSetupCreateTicketButtonEmoji(ticketIndex:number,requiredTickets:number,backFn:() => api.ODPromiseVoid){ - renderHeader("⏱️ Open Ticket Quick Setup: Ticket Configuration (Ticket "+(ticketIndex+1)+"/"+requiredTickets+")") + cli.renderHeader(headerOpts,"⏱️ Open Ticket Quick Setup: Ticket Configuration (Ticket "+(ticketIndex+1)+"/"+requiredTickets+")") terminal.bold.blue("("+utilities.ordinalNumber(ticketIndex+1)+" Ticket) Please insert the button emoji of this ticket option.\n") terminal.gray("Only 1 emoji allowed. Tip: Insert custom emoji's via the following syntax: <:12345678910:emoji_name>\n\n> ") @@ -714,7 +707,7 @@ async function renderQuickSetupCreateTicketButtonEmoji(ticketIndex:number,requir } async function renderQuickSetupCreateTicketButtonColor(ticketIndex:number,requiredTickets:number,backFn:() => api.ODPromiseVoid){ - renderHeader("⏱️ Open Ticket Quick Setup: Ticket Configuration (Ticket "+(ticketIndex+1)+"/"+requiredTickets+")") + cli.renderHeader(headerOpts,"⏱️ Open Ticket Quick Setup: Ticket Configuration (Ticket "+(ticketIndex+1)+"/"+requiredTickets+")") terminal.bold.blue("("+utilities.ordinalNumber(ticketIndex+1)+" Ticket) What color would you like the button to be?\n") terminal.gray("This will not apply when choosing 'dropdown' mode in the panel configuration.\n\n") @@ -742,7 +735,7 @@ async function renderQuickSetupCreateTicketButtonColor(ticketIndex:number,requir } async function renderQuickSetupCreateTicketChannelPrefix(ticketIndex:number,requiredTickets:number,backFn:() => api.ODPromiseVoid){ - renderHeader("⏱️ Open Ticket Quick Setup: Ticket Configuration (Ticket "+(ticketIndex+1)+"/"+requiredTickets+")") + cli.renderHeader(headerOpts,"⏱️ Open Ticket Quick Setup: Ticket Configuration (Ticket "+(ticketIndex+1)+"/"+requiredTickets+")") terminal.bold.blue("("+utilities.ordinalNumber(ticketIndex+1)+" Ticket) Please insert the channel prefix of this ticket option.\n") terminal.gray("Examples: 'ticket-', 'question-', 'test-channel-', ...\n\n> ") @@ -766,7 +759,7 @@ async function renderQuickSetupCreateTicketChannelPrefix(ticketIndex:number,requ } async function renderQuickSetupCreateTicketChannelSuffix(ticketIndex:number,requiredTickets:number,backFn:() => api.ODPromiseVoid){ - renderHeader("⏱️ Open Ticket Quick Setup: Ticket Configuration (Ticket "+(ticketIndex+1)+"/"+requiredTickets+")") + cli.renderHeader(headerOpts,"⏱️ Open Ticket Quick Setup: Ticket Configuration (Ticket "+(ticketIndex+1)+"/"+requiredTickets+")") terminal.bold.blue("("+utilities.ordinalNumber(ticketIndex+1)+" Ticket) Please select the channel suffix mode of this ticket option.\n") terminal.gray("The suffix is appended after the prefix and will be generated on ticket creation.\n\n") @@ -806,7 +799,7 @@ async function renderQuickSetupCreateTicketChannelSuffix(ticketIndex:number,requ } async function renderQuickSetupAutoclose(backFn:() => api.ODPromiseVoid){ - renderHeader("⏱️ Open Ticket Quick Setup: Ticket Autoclose") + cli.renderHeader(headerOpts,"⏱️ Open Ticket Quick Setup: Ticket Autoclose") terminal.bold.blue(stepCount(12)+"Would you like to enable autoclosing tickets?\n") terminal.gray("Applies to all created tickets. You can always change/disable autoclose per ticket-option in the config afterwards.\n\n") @@ -839,7 +832,7 @@ async function renderQuickSetupAutoclose(backFn:() => api.ODPromiseVoid){ } async function renderQuickSetupCooldown(backFn:() => api.ODPromiseVoid){ - renderHeader("⏱️ Open Ticket Quick Setup: Ticket Cooldown") + cli.renderHeader(headerOpts,"⏱️ Open Ticket Quick Setup: Ticket Cooldown") terminal.bold.blue(stepCount(13)+"Would you like to enable ticket creation cooldown?\n") terminal.gray("Applies to all created tickets. You can always change/disable cooldown per ticket-option in the config afterwards.\n\n") @@ -873,7 +866,7 @@ async function renderQuickSetupCooldown(backFn:() => api.ODPromiseVoid){ } async function renderQuickSetupLimits(backFn:() => api.ODPromiseVoid){ - renderHeader("⏱️ Open Ticket Quick Setup: Ticket Limits") + cli.renderHeader(headerOpts,"⏱️ Open Ticket Quick Setup: Ticket Limits") terminal.bold.blue(stepCount(14)+"Would you like to enable user ticket creation limits?\n") terminal.gray("Applies to all created tickets. You can always change/disable limits globally or per ticket-option in the config afterwards.\n\n") @@ -904,7 +897,7 @@ async function renderQuickSetupLimits(backFn:() => api.ODPromiseVoid){ } async function renderQuickSetupCloseParticipants(backFn:() => api.ODPromiseVoid){ - renderHeader("⏱️ Open Ticket Quick Setup: Ticket Close Configuration") + cli.renderHeader(headerOpts,"⏱️ Open Ticket Quick Setup: Ticket Close Configuration") terminal.bold.blue(stepCount(15)+"Would you like to remove all ticket participants when closing the ticket?\n") terminal.gray("When a ticket is closed, only admins can read/write in the ticket. Reopen ticket to restore read/write perms.\n\n") @@ -929,7 +922,7 @@ async function renderQuickSetupCloseParticipants(backFn:() => api.ODPromiseVoid) } async function renderQuickSetupTicketMessageLayout(backFn:() => api.ODPromiseVoid){ - renderHeader("⏱️ Open Ticket Quick Setup: Ticket Message Configuration") + cli.renderHeader(headerOpts,"⏱️ Open Ticket Quick Setup: Ticket Message Configuration") terminal.bold.blue(stepCount(16)+"How would you like the (initial) ticket message to be displayed?\n") terminal.gray("This message is sent by the bot when creating a ticket and contains buttons like closing, claiming & deleting.\n\n") @@ -955,7 +948,7 @@ async function renderQuickSetupTicketMessageLayout(backFn:() => api.ODPromiseVoi } async function renderQuickSetupEmojiStyle(backFn:() => api.ODPromiseVoid){ - renderHeader("⏱️ Open Ticket Quick Setup: Emoji Style") + cli.renderHeader(headerOpts,"⏱️ Open Ticket Quick Setup: Emoji Style") terminal.bold.blue(stepCount(17)+"How would you like emojis to be displayed in messages?\n") terminal.gray("This will affect emojis in all messages of the bot, but does not apply to buttons & dropdowns.\n\n") @@ -982,7 +975,7 @@ async function renderQuickSetupEmojiStyle(backFn:() => api.ODPromiseVoid){ } async function renderQuickSetupPanelName(backFn:() => api.ODPromiseVoid){ - renderHeader("⏱️ Open Ticket Quick Setup: Panel Name") + cli.renderHeader(headerOpts,"⏱️ Open Ticket Quick Setup: Panel Name") terminal.bold.blue(stepCount(18)+"Please insert the name of the ticket panel.\n") terminal.gray("This will be shown as the title of the panel message where all tickets are located.\n\n> ") @@ -1005,7 +998,7 @@ async function renderQuickSetupPanelName(backFn:() => api.ODPromiseVoid){ } async function renderQuickSetupPanelDescription(backFn:() => api.ODPromiseVoid){ - renderHeader("⏱️ Open Ticket Quick Setup: Panel Description") + cli.renderHeader(headerOpts,"⏱️ Open Ticket Quick Setup: Panel Description") terminal.bold.blue(stepCount(19)+"Please insert the description of the ticket panel.\n") terminal.gray("Shown below the title. Can be used to explain some info/rules about the ticket system.\n\n> ") @@ -1024,7 +1017,7 @@ async function renderQuickSetupPanelDescription(backFn:() => api.ODPromiseVoid){ } async function renderQuickSetupPanelDropdown(backFn:() => api.ODPromiseVoid){ - renderHeader("⏱️ Open Ticket Quick Setup: Panel Mode") + cli.renderHeader(headerOpts,"⏱️ Open Ticket Quick Setup: Panel Mode") terminal.bold.blue(stepCount(20)+"Do you want to show the tickets as buttons or a dropdown?\n") terminal.gray("Dropdown doesn't support colors and cannot contain option types other than 'tickets' (e.g. website/url or reaction roles).\n\n") @@ -1049,7 +1042,7 @@ async function renderQuickSetupPanelDropdown(backFn:() => api.ODPromiseVoid){ } async function renderQuickSetupPanelLayout(backFn:() => api.ODPromiseVoid){ - renderHeader("⏱️ Open Ticket Quick Setup: Panel Layout") + cli.renderHeader(headerOpts,"⏱️ Open Ticket Quick Setup: Panel Layout") terminal.bold.blue(stepCount(21)+"How would you like the panel message to be displayed?\n") terminal.gray("Most of the time embeds are used. But for a simpler solution, you can choose the text layout.\n\n") @@ -1074,7 +1067,7 @@ async function renderQuickSetupPanelLayout(backFn:() => api.ODPromiseVoid){ } async function renderQuickSetupPanelDescribeOptions(backFn:() => api.ODPromiseVoid){ - renderHeader("⏱️ Open Ticket Quick Setup: Panel Option Descriptions") + cli.renderHeader(headerOpts,"⏱️ Open Ticket Quick Setup: Panel Option Descriptions") terminal.bold.blue(stepCount(22)+"Would you like the panel to have auto-generated (ticket-)option descriptions?\n") terminal.gray("It will use the 'name' & 'description' of each ticket option and displays it below the panel description.\n\n") @@ -1101,7 +1094,7 @@ async function renderQuickSetupPanelDescribeOptions(backFn:() => api.ODPromiseVo } async function renderQuickSetupPanelMaxTicketsWarning(backFn:() => api.ODPromiseVoid){ - renderHeader("⏱️ Open Ticket Quick Setup: Ticket Close Configuration") + cli.renderHeader(headerOpts,"⏱️ Open Ticket Quick Setup: Ticket Close Configuration") terminal.bold.blue(stepCount(23)+"Would you like to show the maximum amount of tickets a user can create in the panel?\n") terminal.gray("This will show the amount of tickets a user can create at the same time when limits are enabled.\n\n") @@ -1126,7 +1119,7 @@ async function renderQuickSetupPanelMaxTicketsWarning(backFn:() => api.ODPromise } async function renderQuickSetupReady(backFn:() => api.ODPromiseVoid){ - renderHeader("😎 Open Ticket Quick Setup: Overview") + cli.renderHeader(headerOpts,"😎 Open Ticket Quick Setup: Overview") terminal.bold.blue(stepCount(24)+"This is the overview of your ticket bot configuration!\n") terminal.gray("Press 'Enter' to save the result to the config.\n\n") @@ -1171,7 +1164,7 @@ async function renderQuickSetupReady(backFn:() => api.ODPromiseVoid){ } async function renderQuickSetupFinished(){ - renderHeader("✅ Open Ticket Quick Setup: Ready") + cli.renderHeader(headerOpts,"✅ Open Ticket Quick Setup: Ready") terminal.bold.green("The config has been saved succesfully and the bot is now ready for usage!\n") terminal.gray("Press 'Enter' to exit the Quick Setup CLI.\n\n") @@ -1203,13 +1196,13 @@ async function renderQuickSetupFinished(){ }).promise //stop CLI - return await terminate() + return await cli.terminate(headerOpts) } async function saveQuickSetupConfig(){ //GENERAL CONFIG const generalConfig = opendiscord.configs.get("opendiscord:general") - const generalConfigData: api.ODJsonConfig_DefaultGeneralData = { + const generalConfigData: api.ODGeneralJsonConfig_GeneralData = { _INFO:{ support:"https://otdocs.dj-dj.be", discord:"https://discord.dj-dj.be", @@ -1333,7 +1326,7 @@ async function saveQuickSetupConfig(){ //QUESTIONS CONFIG => no configuration needed (coming soonTM) const questionsConfig = opendiscord.configs.get("opendiscord:questions") - const questionsConfigData: api.ODJsonConfig_DefaultQuestionsData = [ + const questionsConfigData: api.ODQuestionsJsonConfig_QuestionsData = [ { id:"example-question-1", name:"Example Question 1", @@ -1366,8 +1359,8 @@ async function saveQuickSetupConfig(){ //OPTIONS CONFIG const optionsConfig = opendiscord.configs.get("opendiscord:options") - const optionsConfigData: api.ODJsonConfig_DefaultOptionsData = quickSetupStorage.ticketOptions.filter((ticket) => ticket !== null).map((ticket) => { - const id = generateUniqueIdFromName(ticket.name) + const optionsConfigData: api.ODOptionsJsonConfig_OptionsData = quickSetupStorage.ticketOptions.filter((ticket) => ticket !== null).map((ticket) => { + const id = cli.generateUniqueIdFromName(ticket.name) quickSetupStorage.optionIdStorage.push(id) return { @@ -1464,9 +1457,9 @@ async function saveQuickSetupConfig(){ //PANELS CONFIG const panelsConfig = opendiscord.configs.get("opendiscord:panels") - const panelsConfigData: api.ODJsonConfig_DefaultPanelsData = [ + const panelsConfigData: api.ODPanelsJsonConfig_PanelsData = [ { - id:generateUniqueIdFromName(quickSetupStorage.panelName ?? "ticket-panel"), + id:cli.generateUniqueIdFromName(quickSetupStorage.panelName ?? "ticket-panel"), name:quickSetupStorage.panelName ?? "Ticket Panel", dropdown:quickSetupStorage.panelDropdown ?? false, options:quickSetupStorage.optionIdStorage, @@ -1506,7 +1499,7 @@ async function saveQuickSetupConfig(){ //TRANSCRIPTS CONFIG => no configuration needed (coming soonTM) const transcriptsConfig = opendiscord.configs.get("opendiscord:transcripts") - const transcriptsConfigData: api.ODJsonConfig_DefaultTranscriptsData = { + const transcriptsConfigData: api.ODTranscriptsJsonConfig_TranscriptsData = { general:{ enabled:(typeof quickSetupStorage.logChannel == "string"), diff --git a/src/core/api/main.ts b/src/core/main.ts similarity index 51% rename from src/core/api/main.ts rename to src/core/main.ts index 3eeb687..32d1e10 100644 --- a/src/core/api/main.ts +++ b/src/core/main.ts @@ -5,32 +5,32 @@ import * as api from "./api" import * as utilities from "@open-discord-bots/framework/utilities" export class ODOpenTicketMain extends api.ODMain { - declare versions: api.ODVersionManager_Default - declare events: api.ODEventManager_Default + declare versions: api.ODMappedVersionManager + declare events: api.ODMappedEventManager - declare plugins: api.ODPluginManager_Default - declare flags: api.ODFlagManager_Default - declare progressbars: api.ODProgressBarManager_Default - declare configs: api.ODConfigManager_Default - declare databases: api.ODDatabaseManager_Default - declare sessions: api.ODSessionManager_Default - declare languages: api.ODLanguageManager_Default + declare plugins: api.ODMappedPluginManager + declare flags: api.ODMappedFlagManager + declare progressbars: api.ODMappedProgressBarManager + declare configs: api.ODMappedConfigManager + declare databases: api.ODMappedDatabaseManager + declare sessions: api.ODMappedSessionManager + declare languages: api.ODMappedLanguageManager - declare checkers: api.ODCheckerManager_Default - declare builders: api.ODBuilderManager_Default - declare responders: api.ODResponderManager_Default - declare actions: api.ODActionManager_Default - declare verifybars: api.ODVerifyBarManager_Default - declare permissions: api.ODPermissionManager_Default - declare cooldowns: api.ODCooldownManager_Default - declare helpmenu: api.ODHelpMenuManager_Default - declare stats: api.ODStatsManager_Default - declare code: api.ODCodeManager_Default - declare posts: api.ODPostManager_Default + declare checkers: api.ODMappedCheckerManager + declare builders: api.ODMappedBuilderManager + declare responders: api.ODMappedResponderManager + declare actions: api.ODMappedActionManager + declare verifybars: api.ODMappedVerifyBarManager + declare permissions: api.ODMappedPermissionManager + declare cooldowns: api.ODMappedCooldownManager + declare helpmenu: api.ODMappedHelpMenuManager + declare statistics: api.ODMappedStatisticManager + declare code: api.ODMappedCodeManager + declare posts: api.ODMappedPostManager - declare client: api.ODClientManager_Default - declare livestatus: api.ODLiveStatusManager_Default - declare startscreen: api.ODStartScreenManager_Default + declare client: api.ODMappedClientManager + declare livestatus: api.ODMappedLiveStatusManager + declare startscreen: api.ODMappedStartScreenManager ///////////////////// //// OPEN TICKET //// @@ -49,53 +49,58 @@ export class ODOpenTicketMain extends api.ODMain { /**The manager that manages the ticket blacklist. (people who are blacklisted can't create a ticket) */ blacklist: api.ODBlacklistManager /**The manager that manages the ticket transcripts. (both the history & compilers) */ - transcripts: api.ODTranscriptManager_Default + transcripts: api.ODMappedTranscriptManager /**The manager that manages all reaction roles in the bot. (here, you can add additional data to roles) */ roles: api.ODRoleManager /**The manager that manages all priority levels in the bot. (register/edit ticket priority levels) */ - priorities: api.ODPriorityManager_Default + priorities: api.ODMappedPriorityManager constructor(){ const version = api.ODVersion.fromString("opendiscord:version","v4.1.3") const debugfile = new api.ODDebugFileManager("./","otdebug.txt",5000,version) const console = new api.ODConsoleManager(100,debugfile) const debug = new api.ODDebugger(console) - const client = new api.ODClientManager_Default(debug) - const livestatus = new api.ODLiveStatusManager_Default(debug,console) - const permissions = new api.ODPermissionManager_Default(debug,client) + const client = new api.ODMappedClientManager(debug) + const livestatus = new api.ODMappedLiveStatusManager(debug,console) + const permissions = new api.ODMappedPermissionManager(debug,client) super({ - versions:new api.ODVersionManager_Default(), + versions:new api.ODMappedVersionManager(), debugfile,console,debug, - events:new api.ODEventManager_Default(debug), + events:new api.ODMappedEventManager(debug), processStartupDate:new Date(), readyStartupDate:null, - plugins:new api.ODPluginManager_Default(debug), - flags:new api.ODFlagManager_Default(debug), - progressbars:new api.ODProgressBarManager_Default(debug), - configs:new api.ODConfigManager_Default(debug), - databases:new api.ODDatabaseManager_Default(debug), - sessions:new api.ODSessionManager_Default(debug), - languages:new api.ODLanguageManager_Default(debug,false), + plugins:new api.ODMappedPluginManager(debug), + flags:new api.ODMappedFlagManager(debug), + progressbars:new api.ODMappedProgressBarManager(debug), + configs:new api.ODMappedConfigManager(debug), + databases:new api.ODMappedDatabaseManager(debug), + sessions:new api.ODMappedSessionManager(debug), + languages:new api.ODMappedLanguageManager(debug,false), - checkers:new api.ODCheckerManager_Default(debug,new api.ODCheckerStorage(),new api.ODCheckerRenderer_Default(),new api.ODCheckerTranslationRegister_Default(),new api.ODCheckerFunctionManager_Default(debug)), - builders:new api.ODBuilderManager_Default(debug), + checkers:new api.ODMappedCheckerManager(debug, + new api.ODCheckerStorage(), + new api.ODDefaultCheckerRenderer("#f8ba00","https://discord.dj-dj.be","https://otdocs.dj-dj.be"), + new api.ODMappedCheckerTranslationRegister(), + new api.ODMappedCheckerFunctionManager(debug) + ), + builders:new api.ODMappedBuilderManager(debug), client, - responders:new api.ODResponderManager_Default(debug,client), - actions:new api.ODActionManager_Default(debug), - verifybars:new api.ODVerifyBarManager_Default(debug), + responders:new api.ODMappedResponderManager(debug,client), + actions:new api.ODMappedActionManager(debug), + verifybars:new api.ODMappedVerifyBarManager(debug), permissions, - cooldowns:new api.ODCooldownManager_Default(debug), - helpmenu:new api.ODHelpMenuManager_Default(debug), - stats:new api.ODStatsManager_Default(debug), - code:new api.ODCodeManager_Default(debug), - posts:new api.ODPostManager_Default(debug), + cooldowns:new api.ODMappedCooldownManager(debug), + helpmenu:new api.ODMappedHelpMenuManager(debug), + statistics:new api.ODMappedStatisticManager(debug), + code:new api.ODMappedCodeManager(debug), + posts:new api.ODMappedPostManager(debug), sharedFuses:utilities.sharedFuses, env:new api.ODEnvHelper(), livestatus, - startscreen:new api.ODStartScreenManager_Default(debug,livestatus), + startscreen:new api.ODMappedStartScreenManager(debug,livestatus), },"openticket") this.livestatus.useMain(this) @@ -120,8 +125,8 @@ export class ODOpenTicketMain extends api.ODMain { this.panels = new api.ODPanelManager(debug) this.tickets = new api.ODTicketManager(debug,client) this.blacklist = new api.ODBlacklistManager(debug) - this.transcripts = new api.ODTranscriptManager_Default(debug,this.tickets,client,permissions) + this.transcripts = new api.ODMappedTranscriptManager(debug,this.tickets,client,permissions) this.roles = new api.ODRoleManager(debug) - this.priorities = new api.ODPriorityManager_Default(debug) + this.priorities = new api.ODMappedPriorityManager(debug) } } \ No newline at end of file diff --git a/src/core/api/defaults/action.ts b/src/core/mappings/action.ts similarity index 77% rename from src/core/api/defaults/action.ts rename to src/core/mappings/action.ts index 607b584..5d6ea98 100644 --- a/src/core/api/defaults/action.ts +++ b/src/core/mappings/action.ts @@ -1,20 +1,19 @@ /////////////////////////////////////// -//DEFAULT ACTION MODULE +//OPEN TICKET ACTION MAPPINGS /////////////////////////////////////// import * as api from "@open-discord-bots/framework/api" -import { ODWorkerManager_Default } from "./worker" import * as discord from "discord.js" -import { ODRoleOption, ODTicketOption } from "../openticket/option" -import { ODTicket, ODTicketClearFilter } from "../openticket/ticket" -import { ODTranscriptCompiler, ODTranscriptCompilerCompileResult } from "../openticket/transcript" -import { ODRole, ODRoleUpdateMode, ODRoleUpdateResult } from "../openticket/role" -import { ODPriorityLevel } from "../openticket/priority" +import { ODRoleOption, ODTicketOption } from "../api/option" +import { ODTicket, ODTicketClearFilter } from "../api/ticket" +import { ODTranscriptCompiler, ODTranscriptCompilerCompileResult } from "../api/transcript" +import { ODRole, ODRoleUpdateMode, ODRoleUpdateResult } from "../api/role" +import { ODPriorityLevel } from "../api/priority" -/**## ODActionManagerIds_Default `interface` - * This interface is a list of ids available in the `ODActionManager_Default` class. +/**## ODActionManagerIdMappings `interface` + * A list of all available IDs in the default `ODActionManager` class in `opendiscord`. * It's used to generate typescript declarations for this class. */ -export interface ODActionManagerIds_Default { +export interface ODActionManagerIdMappings extends api.ODActionManagerIdConstraint { "opendiscord:create-ticket-permissions":{ source:"panel-button"|"panel-dropdown"|"slash"|"text"|"other", params:{guild:discord.Guild,user:discord.User,option:ODTicketOption}, @@ -131,41 +130,16 @@ export interface ODActionManagerIds_Default { }, } -/**## ODActionManager_Default `default_class` - * This is a special class that adds type definitions & typescript to the ODActionManager class. - * It doesn't add any extra features! - * - * This default class is made for the global variable `opendiscord.actions`! - */ -export class ODActionManager_Default extends api.ODActionManager { - get(id:ActionId): ODAction_Default - get(id:api.ODValidId): api.ODAction|null - - get(id:api.ODValidId): api.ODAction|null { - return super.get(id) - } - - remove(id:ActionId): ODAction_Default - remove(id:api.ODValidId): api.ODAction|null - - remove(id:api.ODValidId): api.ODAction|null { - return super.remove(id) - } - - exists(id:keyof ODActionManagerIds_Default): boolean - exists(id:api.ODValidId): boolean - - exists(id:api.ODValidId): boolean { - return super.exists(id) - } +type ODNoGeneric> = { + [K in keyof T as string extends K ? never : number extends K ? never : symbol extends K ? never : K]: T[K] +} +export type ODActionManagerMappingsModifier = { + [K in keyof T]: api.ODAction } -/**## ODAction_Default `default_class` - * This is a special class that adds type definitions & typescript to the ODAction class. - * It doesn't add any extra features! - * - * This default class is made for the default `ODAction`'s! +type test = ODActionManagerMappingsModifier + +/**## ODMappedActionManager `class + * A special class with types for the Open Ticket `ODActionManager` class. */ -export class ODAction_Default extends api.ODAction { - declare workers: ODWorkerManager_Default -} \ No newline at end of file +export class ODMappedActionManager extends api.ODActionManager {} \ No newline at end of file diff --git a/src/core/mappings/base.ts b/src/core/mappings/base.ts new file mode 100644 index 0000000..0441f69 --- /dev/null +++ b/src/core/mappings/base.ts @@ -0,0 +1,21 @@ +/////////////////////////////////////// +//BASE MAPPINGS +/////////////////////////////////////// +import * as api from "@open-discord-bots/framework/api" + +/**## ODVersionManagerIdMappings `interface` + * A list of all available IDs in the default `ODVersionManager` class in `opendiscord`. + * It's used to generate typescript declarations for this class. + */ +export interface ODVersionManagerIdMappings extends api.ODVersionManagerIdConstraint { + "opendiscord:version":api.ODVersion, + "opendiscord:last-version":api.ODVersion, + "opendiscord:api":api.ODVersion, + "opendiscord:transcripts":api.ODVersion, + "opendiscord:livestatus":api.ODVersion +} + +/**## ODMappedVersionManager `class + * A special class with types for the Open Ticket `ODVersionManager` class. + */ +export class ODMappedVersionManager extends api.ODVersionManager {} \ No newline at end of file diff --git a/src/core/api/defaults/builder.ts b/src/core/mappings/builder.ts similarity index 74% rename from src/core/api/defaults/builder.ts rename to src/core/mappings/builder.ts index edb0728..79aeda9 100644 --- a/src/core/api/defaults/builder.ts +++ b/src/core/mappings/builder.ts @@ -1,37 +1,21 @@ /////////////////////////////////////// -//DEFAULT BUILDER MODULE +//OPEN TICKET BUILDER MAPPINGS /////////////////////////////////////// import * as api from "@open-discord-bots/framework/api" -import { ODWorkerManager_Default } from "./worker" import { ODPermissionEmbedType } from "./permission" -import { ODTranscriptCompiler, ODTranscriptCompilerCompileResult } from "../openticket/transcript" -import { ODRoleOption, ODTicketOption, ODWebsiteOption } from "../openticket/option" -import { ODTicket, ODTicketClearFilter } from "../openticket/ticket" -import { ODRole, ODRoleUpdateResult } from "../openticket/role" -import { ODPriorityLevel } from "../openticket/priority" -import { ODPanel } from "../openticket/panel" +import { ODTranscriptCompiler, ODTranscriptCompilerCompileResult } from "../api/transcript" +import { ODRoleOption, ODTicketOption, ODWebsiteOption } from "../api/option" +import { ODTicket, ODTicketClearFilter } from "../api/ticket" +import { ODRole, ODRoleUpdateResult } from "../api/role" +import { ODPriorityLevel } from "../api/priority" +import { ODPanel } from "../api/panel" import * as discord from "discord.js" -/**## ODBuilderManager_Default `default_class` - * This is a special class that adds type definitions & typescript to the ODBuilderManager class. - * It doesn't add any extra features! - * - * This default class is made for the global variable `opendiscord.builders`! - */ -export class ODBuilderManager_Default extends api.ODBuilderManager { - declare buttons: ODButtonManager_Default - declare dropdowns: ODDropdownManager_Default - declare files: ODFileManager_Default - declare embeds: ODEmbedManager_Default - declare messages: ODMessageManager_Default - declare modals: ODModalManager_Default -} - -/**## ODButtonManagerIds_Default `interface` - * This interface is a list of ids available in the `ODButtonManager_Default` class. +/**## ODButtonManagerIdMappings `interface` + * A list of all available IDs in the default `ODButtonManager` class in `opendiscord`. * It's used to generate typescript declarations for this class. */ -export interface ODButtonManagerIds_Default { +export interface ODButtonManagerIdMappings extends api.ODButtonManagerIdConstraint { "opendiscord:verifybar-success":{source:"verifybar"|"other",params:{guild:discord.Guild|null,channel:discord.TextBasedChannel,user:discord.User,verifybar:api.ODVerifyBar,customData?:string,customColor?:api.ODValidButtonColor,customLabel?:string,customEmoji?:string},workers:"opendiscord:verifybar-success"}, "opendiscord:verifybar-failure":{source:"verifybar"|"other",params:{guild:discord.Guild|null,channel:discord.TextBasedChannel,user:discord.User,verifybar:api.ODVerifyBar,customData?:string,customColor?:api.ODValidButtonColor,customLabel?:string,customEmoji?:string},workers:"opendiscord:verifybar-failure"}, @@ -63,165 +47,27 @@ export interface ODButtonManagerIds_Default { "opendiscord:clear-continue":{source:"slash"|"text"|"other",params:{guild:discord.Guild,channel:discord.GuildTextBasedChannel,user:discord.User,filter:ODTicketClearFilter,list:string[]},workers:"opendiscord:clear-continue"}, } -/**## ODButtonManager_Default `default_class` - * This is a special class that adds type definitions & typescript to the ODButtonManager class. - * It doesn't add any extra features! - * - * This default class is made for the global variable `opendiscord.builders.buttons`! - */ -export class ODButtonManager_Default extends api.ODButtonManager { - get(id:ButtonId): ODButton_Default - get(id:api.ODValidId): api.ODButton|null - - get(id:api.ODValidId): api.ODButton|null { - return super.get(id) - } - - remove(id:ButtonId): ODButton_Default - remove(id:api.ODValidId): api.ODButton|null - - remove(id:api.ODValidId): api.ODButton|null { - return super.remove(id) - } - - exists(id:keyof ODButtonManagerIds_Default): boolean - exists(id:api.ODValidId): boolean - - exists(id:api.ODValidId): boolean { - return super.exists(id) - } - - getSafe(id:ButtonId): ODButton_Default - getSafe(id:api.ODValidId): api.ODButton - - getSafe(id:api.ODValidId): api.ODButton { - return super.getSafe(id) - } -} - -/**## ODButton_Default `default_class` - * This is a special class that adds type definitions & typescript to the ODButton class. - * It doesn't add any extra features! - * - * This default class is made for the default `ODButton`'s! - */ -export class ODButton_Default extends api.ODButton { - declare workers: ODWorkerManager_Default -} - -/**## ODDropdownManagerIds_Default `interface` - * This interface is a list of ids available in the `ODDropdownManager_Default` class. +/**## ODDropdownManagerIdMappings `interface` + * A list of all available IDs in the default `ODDropdownManager` class in `opendiscord`. * It's used to generate typescript declarations for this class. */ -export interface ODDropdownManagerIds_Default { +export interface ODDropdownManagerIdMappings extends api.ODDropdownManagerIdConstraint { "opendiscord:panel-dropdown-tickets":{source:"slash"|"text"|"auto-update"|"other",params:{guild:discord.Guild,channel:discord.TextBasedChannel,user:discord.User,panel:ODPanel,options:ODTicketOption[]},workers:"opendiscord:panel-dropdown-tickets"} } -/**## ODDropdownManager_Default `default_class` - * This is a special class that adds type definitions & typescript to the ODDropdownManager class. - * It doesn't add any extra features! - * - * This default class is made for the global variable `opendiscord.builders.dropdowns`! - */ -export class ODDropdownManager_Default extends api.ODDropdownManager { - get(id:DropdownId): ODDropdown_Default - get(id:api.ODValidId): api.ODDropdown|null - - get(id:api.ODValidId): api.ODDropdown|null { - return super.get(id) - } - - remove(id:DropdownId): ODDropdown_Default - remove(id:api.ODValidId): api.ODDropdown|null - - remove(id:api.ODValidId): api.ODDropdown|null { - return super.remove(id) - } - - exists(id:keyof ODDropdownManagerIds_Default): boolean - exists(id:api.ODValidId): boolean - - exists(id:api.ODValidId): boolean { - return super.exists(id) - } - - getSafe(id:DropdownId): ODDropdown_Default - getSafe(id:api.ODValidId): api.ODDropdown - - getSafe(id:api.ODValidId): api.ODDropdown { - return super.getSafe(id) - } -} - -/**## ODDropdown_Default `default_class` - * This is a special class that adds type definitions & typescript to the ODDropdown class. - * It doesn't add any extra features! - * - * This default class is made for the default `ODDropdown`'s! - */ -export class ODDropdown_Default extends api.ODDropdown { - declare workers: ODWorkerManager_Default -} - -/**## ODFileManagerIds_Default `interface` - * This interface is a list of ids available in the `ODFileManager_Default` class. +/**## ODFileManagerIdMappings `interface` + * A list of all available IDs in the default `ODFileManager` class in `opendiscord`. * It's used to generate typescript declarations for this class. */ -export interface ODFileManagerIds_Default { +export interface ODFileManagerIdMappings extends api.ODFileManagerIdConstraint { "opendiscord:text-transcript":{source:"channel"|"creator-dm"|"participant-dm"|"active-admin-dm"|"every-admin-dm"|"other",params:{guild:discord.Guild,channel:discord.GuildTextBasedChannel,user:discord.User,ticket:ODTicket,compiler:ODTranscriptCompiler,result:ODTranscriptCompilerCompileResult},workers:"opendiscord:text-transcript"} } -/**## ODFileManager_Default `default_class` - * This is a special class that adds type definitions & typescript to the ODFileManager class. - * It doesn't add any extra features! - * - * This default class is made for the global variable `opendiscord.builders.files`! - */ -export class ODFileManager_Default extends api.ODFileManager { - get(id:FileId): ODFile_Default - get(id:api.ODValidId): api.ODFile|null - - get(id:api.ODValidId): api.ODFile|null { - return super.get(id) - } - - remove(id:FileId): ODFile_Default - remove(id:api.ODValidId): api.ODFile|null - - remove(id:api.ODValidId): api.ODFile|null { - return super.remove(id) - } - - exists(id:keyof ODFileManagerIds_Default): boolean - exists(id:api.ODValidId): boolean - - exists(id:api.ODValidId): boolean { - return super.exists(id) - } - - getSafe(id:FileId): ODFile_Default - getSafe(id:api.ODValidId): api.ODFile - - getSafe(id:api.ODValidId): api.ODFile { - return super.getSafe(id) - } -} - -/**## ODFile_Default `default_class` - * This is a special class that adds type definitions & typescript to the ODFile class. - * It doesn't add any extra features! - * - * This default class is made for the default `ODFile`'s! - */ -export class ODFile_Default extends api.ODFile { - declare workers: ODWorkerManager_Default -} - -/**## ODEmbedManagerIds_Default `interface` - * This interface is a list of ids available in the `ODEmbedManager_Default` class. +/**## ODEmbedManagerIdMappings `interface` + * A list of all available IDs in the default `ODEmbedManager` class in `opendiscord`. * It's used to generate typescript declarations for this class. */ -export interface ODEmbedManagerIds_Default { +export interface ODEmbedManagerIdMappings extends api.ODEmbedManagerIdConstraint { "opendiscord:error":{source:"slash"|"text"|"button"|"dropdown"|"modal"|"other",params:{guild:discord.Guild|null,channel:discord.TextBasedChannel,user:discord.User,error:string,layout:"simple"|"advanced",customTitle?:string},workers:"opendiscord:error"}, "opendiscord:error-option-missing":{source:"slash"|"text"|"other",params:{guild:discord.Guild|null,channel:discord.TextBasedChannel,user:discord.User,error:api.ODTextCommandErrorMissingOption},workers:"opendiscord:error-option-missing"}, "opendiscord:error-option-invalid":{source:"slash"|"text"|"other",params:{guild:discord.Guild|null,channel:discord.TextBasedChannel,user:discord.User,error:api.ODTextCommandErrorInvalidOption},workers:"opendiscord:error-option-invalid"}, @@ -299,57 +145,11 @@ export interface ODEmbedManagerIds_Default { "opendiscord:transfer-message":{source:"slash"|"text"|"other",params:{guild:discord.Guild,channel:discord.GuildTextBasedChannel,user:discord.User,ticket:ODTicket,oldCreator:discord.User,newCreator:discord.User,reason:string|null},workers:"opendiscord:transfer-message"}, } -/**## ODEmbedManager_Default `default_class` - * This is a special class that adds type definitions & typescript to the ODEmbedManager class. - * It doesn't add any extra features! - * - * This default class is made for the global variable `opendiscord.builders.embeds`! - */ -export class ODEmbedManager_Default extends api.ODEmbedManager { - get(id:EmbedId): ODEmbed_Default - get(id:api.ODValidId): api.ODEmbed|null - - get(id:api.ODValidId): api.ODEmbed|null { - return super.get(id) - } - - remove(id:EmbedId): ODEmbed_Default - remove(id:api.ODValidId): api.ODEmbed|null - - remove(id:api.ODValidId): api.ODEmbed|null { - return super.remove(id) - } - - exists(id:keyof ODEmbedManagerIds_Default): boolean - exists(id:api.ODValidId): boolean - - exists(id:api.ODValidId): boolean { - return super.exists(id) - } - - getSafe(id:EmbedId): ODEmbed_Default - getSafe(id:api.ODValidId): api.ODEmbed - - getSafe(id:api.ODValidId): api.ODEmbed { - return super.getSafe(id) - } -} - -/**## ODEmbed_Default `default_class` - * This is a special class that adds type definitions & typescript to the ODEmbed class. - * It doesn't add any extra features! - * - * This default class is made for the default `ODEmbed`'s! - */ -export class ODEmbed_Default extends api.ODEmbed { - declare workers: ODWorkerManager_Default -} - -/**## ODMessageManagerIds_Default `interface` - * This interface is a list of ids available in the `ODMessageManager_Default` class. +/**## ODMessageManagerIdMappings `interface` + * A list of all available IDs in the default `ODMessageManager` class in `opendiscord`. * It's used to generate typescript declarations for this class. */ -export interface ODMessageManagerIds_Default { +export interface ODMessageManagerIdMappings extends api.ODMessageManagerIdConstraint { "opendiscord:verifybar-ticket-message":{source:"verifybar",params:{guild:discord.Guild|null,channel:discord.TextBasedChannel,user:discord.User,verifybar:api.ODVerifyBar,originalMessage:discord.Message},workers:"opendiscord:verifybar-ticket-message"}, "opendiscord:verifybar-close-message":{source:"verifybar",params:{guild:discord.Guild|null,channel:discord.TextBasedChannel,user:discord.User,verifybar:api.ODVerifyBar,originalMessage:discord.Message},workers:"opendiscord:verifybar-close-message"}, "opendiscord:verifybar-reopen-message":{source:"verifybar",params:{guild:discord.Guild|null,channel:discord.TextBasedChannel,user:discord.User,verifybar:api.ODVerifyBar,originalMessage:discord.Message},workers:"opendiscord:verifybar-reopen-message"}, @@ -438,57 +238,11 @@ export interface ODMessageManagerIds_Default { "opendiscord:transfer-message":{source:"slash"|"text"|"other",params:{guild:discord.Guild,channel:discord.GuildTextBasedChannel,user:discord.User,ticket:ODTicket,oldCreator:discord.User,newCreator:discord.User,reason:string|null},workers:"opendiscord:transfer-message"}, } -/**## ODMessageManager_Default `default_class` - * This is a special class that adds type definitions & typescript to the ODMessageManager class. - * It doesn't add any extra features! - * - * This default class is made for the global variable `opendiscord.builders.messages`! - */ -export class ODMessageManager_Default extends api.ODMessageManager { - get(id:MessageId): ODMessage_Default - get(id:api.ODValidId): api.ODMessage|null - - get(id:api.ODValidId): api.ODMessage|null { - return super.get(id) - } - - remove(id:MessageId): ODMessage_Default - remove(id:api.ODValidId): api.ODMessage|null - - remove(id:api.ODValidId): api.ODMessage|null { - return super.remove(id) - } - - exists(id:keyof ODMessageManagerIds_Default): boolean - exists(id:api.ODValidId): boolean - - exists(id:api.ODValidId): boolean { - return super.exists(id) - } - - getSafe(id:MessageId): ODMessage_Default - getSafe(id:api.ODValidId): api.ODMessage - - getSafe(id:api.ODValidId): api.ODMessage { - return super.getSafe(id) - } -} - -/**## ODMessage_Default `default_class` - * This is a special class that adds type definitions & typescript to the ODMessage class. - * It doesn't add any extra features! - * - * This default class is made for the default `ODMessage`'s! - */ -export class ODMessage_Default extends api.ODMessage { - declare workers: ODWorkerManager_Default -} - -/**## ODModalManagerIds_Default `interface` - * This interface is a list of ids available in the `ODModalManager_Default` class. +/**## ODModalManagerIdMappings `interface` + * A list of all available IDs in the default `ODModalManager` class in `opendiscord`. * It's used to generate typescript declarations for this class. */ -export interface ODModalManagerIds_Default { +export interface ODModalManagerIdMappings extends api.ODModalManagerIdConstraint { "opendiscord:ticket-questions":{source:"panel-button"|"panel-dropdown"|"slash"|"text"|"other",params:{guild:discord.Guild,channel:discord.TextBasedChannel,user:discord.User,option:ODTicketOption},workers:"opendiscord:ticket-questions"} "opendiscord:close-ticket-reason":{source:"ticket-message"|"reopen-message"|"other",params:{guild:discord.Guild,channel:discord.TextBasedChannel,user:discord.User,ticket:ODTicket},workers:"opendiscord:close-ticket-reason"} "opendiscord:reopen-ticket-reason":{source:"ticket-message"|"close-message"|"autoclose-message"|"other",params:{guild:discord.Guild,channel:discord.TextBasedChannel,user:discord.User,ticket:ODTicket},workers:"opendiscord:reopen-ticket-reason"} @@ -499,48 +253,37 @@ export interface ODModalManagerIds_Default { "opendiscord:unpin-ticket-reason":{source:"ticket-message"|"pin-message"|"other",params:{guild:discord.Guild,channel:discord.TextBasedChannel,user:discord.User,ticket:ODTicket},workers:"opendiscord:unpin-ticket-reason"} } -/**## ODModalManager_Default `default_class` - * This is a special class that adds type definitions & typescript to the ODModalManager class. - * It doesn't add any extra features! - * - * This default class is made for the global variable `opendiscord.builders.modals`! +/**## ODMappedButtonManager `class + * A special class with types for the Open Ticket `ODButtonManager` class. */ -export class ODModalManager_Default extends api.ODModalManager { - get(id:ModalId): ODModal_Default - get(id:api.ODValidId): api.ODModal|null - - get(id:api.ODValidId): api.ODModal|null { - return super.get(id) - } +export class ODMappedButtonManager extends api.ODButtonManager {} - remove(id:ModalId): ODModal_Default - remove(id:api.ODValidId): api.ODModal|null - - remove(id:api.ODValidId): api.ODModal|null { - return super.remove(id) - } - - exists(id:keyof ODModalManagerIds_Default): boolean - exists(id:api.ODValidId): boolean - - exists(id:api.ODValidId): boolean { - return super.exists(id) - } - - getSafe(id:ModalId): ODModal_Default - getSafe(id:api.ODValidId): api.ODModal - - getSafe(id:api.ODValidId): api.ODModal { - return super.getSafe(id) - } -} - -/**## ODModal_Default `default_class` - * This is a special class that adds type definitions & typescript to the ODModal class. - * It doesn't add any extra features! - * - * This default class is made for the default `ODModal`'s! +/**## ODMappedDropdownManager `class + * A special class with types for the Open Ticket `ODDropdownManager` class. */ -export class ODModal_Default extends api.ODModal { - declare workers: ODWorkerManager_Default -} \ No newline at end of file +export class ODMappedDropdownManager extends api.ODDropdownManager {} + +/**## ODMappedFileManager `class + * A special class with types for the Open Ticket `ODFileManager` class. + */ +export class ODMappedFileManager extends api.ODFileManager {} + +/**## ODMappedEmbedManager `class + * A special class with types for the Open Ticket `ODEmbedManager` class. + */ +export class ODMappedEmbedManager extends api.ODEmbedManager {} + +/**## ODMappedMessageManager `class + * A special class with types for the Open Ticket `ODMessageManager` class. + */ +export class ODMappedMessageManager extends api.ODMessageManager {} + +/**## ODMappedModalManager `class + * A special class with types for the Open Ticket `ODModalManager` class. + */ +export class ODMappedModalManager extends api.ODModalManager {} + +/**## ODMappedBuilderManager `class + * A special class with types for the Open Ticket `ODBuilderManager` class. + */ +export class ODMappedBuilderManager extends api.ODBuilderManager {} \ No newline at end of file diff --git a/src/core/mappings/checker.ts b/src/core/mappings/checker.ts new file mode 100644 index 0000000..d29beac --- /dev/null +++ b/src/core/mappings/checker.ts @@ -0,0 +1,145 @@ +/////////////////////////////////////// +//OPEN TICKET CONFIG CHECKER MAPPINGS +/////////////////////////////////////// +import * as api from "@open-discord-bots/framework/api" + +/**## ODBCheckerManagerIdMappings `interface` + * A list of all available IDs in the default `ODBCheckerManager` class in `opendiscord`. + * It's used to generate typescript declarations for this class. + */ +export interface ODCheckerManagerIdMappings extends api.ODCheckerManagerIdConstraint { + "opendiscord:general":api.ODChecker, + "opendiscord:questions":api.ODChecker, + "opendiscord:options":api.ODChecker, + "opendiscord:panels":api.ODChecker, + "opendiscord:transcripts":api.ODChecker +} + +/**## ODCheckerTranslationRegisterOtherIdMappings `type` + * A list of all available IDs in the default `ODCheckerTranslationRegister` class in `opendiscord`. + * It's used to generate typescript declarations for this class. + */ +export type ODCheckerTranslationRegisterOtherIdMappings = ( + "opendiscord:header-openticket"| + "opendiscord:header-configchecker"| + "opendiscord:header-description"| + "opendiscord:type-error"| + "opendiscord:type-warning"| + "opendiscord:type-info"| + "opendiscord:data-path"| + "opendiscord:data-docs"| + "opendiscord:data-message"| + "opendiscord:compact-information"| + "opendiscord:footer-error"| + "opendiscord:footer-warning"| + "opendiscord:footer-support" +) + +/**## ODCheckerTranslationRegisterMessageIdMappings `type` + * A list of all available IDs in the default `ODCheckerTranslationRegister` class in `opendiscord`. + * It's used to generate typescript declarations for this class. + */ +export type ODCheckerTranslationRegisterMessageIdMappings = ( + "opendiscord:invalid-type"| + "opendiscord:property-missing"| + "opendiscord:property-optional"| + "opendiscord:object-disabled"| + "opendiscord:null-invalid"| + "opendiscord:switch-invalid-type"| + "opendiscord:object-switch-invalid-type"| + + "opendiscord:string-too-short"| + "opendiscord:string-too-long"| + "opendiscord:string-length-invalid"| + "opendiscord:string-starts-with"| + "opendiscord:string-ends-with"| + "opendiscord:string-contains"| + "opendiscord:string-inverted-contains"| + "opendiscord:string-choices"| + "opendiscord:string-lowercase"| + "opendiscord:string-uppercase"| + "opendiscord:string-special-characters"| + "opendiscord:string-no-spaces"| + "opendiscord:string-regex"| + "opendiscord:string-capital-word"| + "opendiscord:string-capital-sentence"| + "opendiscord:string-punctuation"| + + "opendiscord:number-nan"| + "opendiscord:number-too-short"| + "opendiscord:number-too-long"| + "opendiscord:number-length-invalid"| + "opendiscord:number-too-small"| + "opendiscord:number-too-large"| + "opendiscord:number-not-equal"| + "opendiscord:number-step"| + "opendiscord:number-step-offset"| + "opendiscord:number-starts-with"| + "opendiscord:number-ends-with"| + "opendiscord:number-contains"| + "opendiscord:number-inverted-contains"| + "opendiscord:number-choices"| + "opendiscord:number-float"| + "opendiscord:number-negative"| + "opendiscord:number-positive"| + "opendiscord:number-zero"| + + "opendiscord:boolean-true"| + "opendiscord:boolean-false"| + + "opendiscord:array-empty-disabled"| + "opendiscord:array-empty-required"| + "opendiscord:array-too-short"| + "opendiscord:array-too-long"| + "opendiscord:array-length-invalid"| + "opendiscord:array-invalid-types"| + "opendiscord:array-double"| + + "opendiscord:discord-invalid-id"| + "opendiscord:discord-invalid-id-options"| + "opendiscord:discord-invalid-token"| + "opendiscord:color-invalid"| + "opendiscord:emoji-too-short"| + "opendiscord:emoji-too-long"| + "opendiscord:emoji-custom"| + "opendiscord:emoji-invalid"| + "opendiscord:url-invalid"| + "opendiscord:url-invalid-http"| + "opendiscord:url-invalid-protocol"| + "opendiscord:url-invalid-hostname"| + "opendiscord:url-invalid-extension"| + "opendiscord:url-invalid-path"| + "opendiscord:id-not-unique"| + "opendiscord:id-non-existent"| + + "opendiscord:invalid-language"| + "opendiscord:invalid-button"| + "opendiscord:unused-option"| + "opendiscord:unused-question"| + "opendiscord:dropdown-option" +) + +/**## ODCheckerFunctionManagerIdMappings `type` + * A list of all available IDs in the default `ODCheckerFunctionManager` class in `opendiscord`. + * It's used to generate typescript declarations for this class. + */ +export interface ODCheckerFunctionManagerIdMappings extends api.ODCheckerFunctionManagerIdConstraint { + "opendiscord:unused-options":api.ODCheckerFunction, + "opendiscord:unused-questions":api.ODCheckerFunction, + "opendiscord:dropdown-options":api.ODCheckerFunction +} + +/**## ODMappedCheckerManager `class + * A special class with types for the Open Ticket `ODCheckerManager` class. + */ +export class ODMappedCheckerManager extends api.ODCheckerManager {} + +/**## ODMappedCheckerFunctionManager `class + * A special class with types for the Open Ticket `ODCheckerFunctionManager` class. + */ +export class ODMappedCheckerFunctionManager extends api.ODCheckerFunctionManager {} + +/**## ODMappedCheckerTranslationRegister `class + * A special class with types for the Open Ticket `ODCheckerTranslationRegister` class. + */ +export class ODMappedCheckerTranslationRegister extends api.ODCheckerTranslationRegister {} \ No newline at end of file diff --git a/src/core/mappings/client.ts b/src/core/mappings/client.ts new file mode 100644 index 0000000..59a7c46 --- /dev/null +++ b/src/core/mappings/client.ts @@ -0,0 +1,109 @@ +/////////////////////////////////////// +//OPEN TICKET CLIENT MAPPINGS +/////////////////////////////////////// +import * as api from "@open-discord-bots/framework/api" + +/** (CONTRIBUTOR GUIDE) HOW TO ADD NEW COMMANDS? + * - Register the command in loadAllSlashCommands() & loadAllTextCommands() in (./src/data/framework/commandLoader.ts) + * - Add autocomplete for the command in OD(Slash/Text)CommandManagerIds_Default in (./src/core/api/defaults/client.ts) + * - Add the command to the help menu in (./src/data/framework/helpMenuLoader.ts) + * - If required, new config variables should be added (incl. logs, dm-logs & permissions). + * - Update the Open Ticket Documentation. + * - If the command contains complex logic or can be executed from a button/dropdown, it should be placed inside an `ODAction`. + * - Check all files, test the bot carefully & try a lot of different scenario's with different settings. + */ + +/**## ODSlashCommandManagerIdMappings `interface` + * A list of all available IDs in the default `ODSlashCommandManager` class in `opendiscord`. + * It's used to generate typescript declarations for this class. + */ +export interface ODSlashCommandManagerIdMappings extends api.ODSlashCommandManagerIdConstraint { + "opendiscord:help":api.ODSlashCommand, + "opendiscord:panel":api.ODSlashCommand, + "opendiscord:ticket":api.ODSlashCommand, + "opendiscord:close":api.ODSlashCommand, + "opendiscord:delete":api.ODSlashCommand, + "opendiscord:reopen":api.ODSlashCommand, + "opendiscord:claim":api.ODSlashCommand, + "opendiscord:unclaim":api.ODSlashCommand, + "opendiscord:pin":api.ODSlashCommand, + "opendiscord:unpin":api.ODSlashCommand, + "opendiscord:move":api.ODSlashCommand, + "opendiscord:rename":api.ODSlashCommand, + "opendiscord:add":api.ODSlashCommand, + "opendiscord:remove":api.ODSlashCommand, + "opendiscord:blacklist":api.ODSlashCommand, + "opendiscord:stats":api.ODSlashCommand, + "opendiscord:clear":api.ODSlashCommand, + "opendiscord:autoclose":api.ODSlashCommand, + "opendiscord:autodelete":api.ODSlashCommand, + "opendiscord:topic":api.ODSlashCommand, + "opendiscord:priority":api.ODSlashCommand, + "opendiscord:transfer":api.ODSlashCommand, +} + +/**## ODTextCommandManagerIdMappings `interface` + * A list of all available IDs in the default `ODTextCommandManager` class in `opendiscord`. + * It's used to generate typescript declarations for this class. + */ +export interface ODTextCommandManagerIdMappings extends api.ODTextCommandManagerIdConstraint { + "opendiscord:dump":api.ODTextCommand, + "opendiscord:help":api.ODTextCommand, + "opendiscord:panel":api.ODTextCommand, + "opendiscord:close":api.ODTextCommand, + "opendiscord:delete":api.ODTextCommand, + "opendiscord:reopen":api.ODTextCommand, + "opendiscord:claim":api.ODTextCommand, + "opendiscord:unclaim":api.ODTextCommand, + "opendiscord:pin":api.ODTextCommand, + "opendiscord:unpin":api.ODTextCommand, + "opendiscord:move":api.ODTextCommand, + "opendiscord:rename":api.ODTextCommand, + "opendiscord:add":api.ODTextCommand, + "opendiscord:remove":api.ODTextCommand, + "opendiscord:blacklist-view":api.ODTextCommand, + "opendiscord:blacklist-add":api.ODTextCommand, + "opendiscord:blacklist-remove":api.ODTextCommand, + "opendiscord:blacklist-get":api.ODTextCommand, + "opendiscord:stats-global":api.ODTextCommand, + "opendiscord:stats-reset":api.ODTextCommand, + "opendiscord:stats-ticket":api.ODTextCommand, + "opendiscord:stats-user":api.ODTextCommand, + "opendiscord:clear":api.ODTextCommand, + "opendiscord:autoclose-disable":api.ODTextCommand, + "opendiscord:autoclose-enable":api.ODTextCommand, + "opendiscord:autodelete-disable":api.ODTextCommand, + "opendiscord:autodelete-enable":api.ODTextCommand, + "opendiscord:topic-set":api.ODTextCommand, + "opendiscord:priority-set":api.ODTextCommand, + "opendiscord:priority-get":api.ODTextCommand, + "opendiscord:transfer":api.ODTextCommand, +} + +/**## ODContextMenuManagerIdMappings `interface` + * A list of all available IDs in the default `ODContextMenuManager` class in `opendiscord`. + * It's used to generate typescript declarations for this class. + */ +export interface ODContextMenuManagerIdMappings extends api.ODContextMenuManagerIdConstraint { + //"opendiscord:test-menu":ODContextMenu +} + +/**## ODMappedClientManager `class + * A special class with types for the Open Ticket `ODClientManager` class. + */ +export class ODMappedClientManager extends api.ODClientManager {} + +/**## ODMappedSlashCommandManager `class + * A special class with types for the Open Ticket `ODSlashCommandManager` class. + */ +export class ODMappedSlashCommandManager extends api.ODSlashCommandManager {} + +/**## ODMappedTextCommandManager `class + * A special class with types for the Open Ticket `ODTextCommandManager` class. + */ +export class ODMappedTextCommandManager extends api.ODTextCommandManager {} + +/**## ODMappedContextMenuManager `class + * A special class with types for the Open Ticket `ODContextMenuManager` class. + */ +export class ODMappedContextMenuManager extends api.ODContextMenuManager {} diff --git a/src/core/mappings/code.ts b/src/core/mappings/code.ts new file mode 100644 index 0000000..0243a85 --- /dev/null +++ b/src/core/mappings/code.ts @@ -0,0 +1,32 @@ +/////////////////////////////////////// +//OPEN TICKET CODE MAPPINGS +/////////////////////////////////////// +import * as api from "@open-discord-bots/framework/api" + +/**## ODCodeManagerIdMappings `interface` + * A list of all available IDs in the default `ODCodeManager` class in `opendiscord`. + * It's used to generate typescript declarations for this class. + */ +export interface ODCodeManagerIdMappings extends api.ODCodeManagerIdConstraint { + "opendiscord:command-error-handling":api.ODCode, + "opendiscord:start-listening-interactions":api.ODCode, + "opendiscord:panel-database-cleaner":api.ODCode, + "opendiscord:suffix-database-cleaner":api.ODCode, + "opendiscord:option-database-cleaner":api.ODCode, + "opendiscord:user-database-cleaner":api.ODCode, + "opendiscord:ticket-database-cleaner":api.ODCode, + "opendiscord:panel-auto-update":api.ODCode, + "opendiscord:ticket-saver":api.ODCode, + "opendiscord:blacklist-saver":api.ODCode, + "opendiscord:auto-role-on-join":api.ODCode, + "opendiscord:autoclose-timeout":api.ODCode, + "opendiscord:autoclose-leave":api.ODCode, + "opendiscord:autodelete-timeout":api.ODCode, + "opendiscord:autodelete-leave":api.ODCode, + "opendiscord:ticket-anti-busy":api.ODCode, +} + +/**## ODMappedCodeManager `class + * A special class with types for the Open Ticket `ODCodeManager` class. + */ +export class ODMappedCodeManager extends api.ODCodeManager {} \ No newline at end of file diff --git a/src/core/api/defaults/config.ts b/src/core/mappings/config.ts similarity index 69% rename from src/core/api/defaults/config.ts rename to src/core/mappings/config.ts index ad85394..61831df 100644 --- a/src/core/api/defaults/config.ts +++ b/src/core/mappings/config.ts @@ -1,9 +1,9 @@ /////////////////////////////////////// -//DEFAULT CONFIG MODULE +//OPEN TICKET CONFIG MAPPINGS /////////////////////////////////////// import * as api from "@open-discord-bots/framework/api" import * as discord from "discord.js" -import { ODRoleUpdateMode } from "../openticket/role" +import { ODRoleUpdateMode } from "../api/role" /** (CONTRIBUTOR GUIDE) HOW TO ADD NEW CONFIG VARIABLES? * - Make the change to the config file in (./config/) and be aware of the following things: @@ -25,51 +25,57 @@ import { ODRoleUpdateMode } from "../openticket/role" * - Check (./src/builders), (./src/actions), (./src/data) & (./src/commands) in general in the areas that were changed. */ -/**## ODConfigManagerIds_Default `interface` - * This interface is a list of ids available in the `ODConfigManager_Default` class. +/**## ODConfigManagerIdMappings `interface` + * A list of all available IDs in the default `ODConfigManager` class in `opendiscord`. * It's used to generate typescript declarations for this class. */ -export interface ODConfigManagerIds_Default { - "opendiscord:general":ODJsonConfig_DefaultGeneral, - "opendiscord:questions":ODJsonConfig_DefaultQuestions, - "opendiscord:options":ODJsonConfig_DefaultOptions, - "opendiscord:panels":ODJsonConfig_DefaultPanels, - "opendiscord:transcripts":ODJsonConfig_DefaultTranscripts +export interface ODConfigManagerIdMappings extends api.ODConfigManagerIdConstraint { + "opendiscord:general":ODGeneralJsonConfig, + "opendiscord:questions":ODQuestionsJsonConfig, + "opendiscord:options":ODOptionsJsonConfig, + "opendiscord:panels":ODPanelsJsonConfig, + "opendiscord:transcripts":ODTranscriptsJsonConfig } -/**## ODConfigManager_Default `default_class` - * This is a special class that adds type definitions & typescript to the ODConfigManager class. - * It doesn't add any extra features! - * - * This default class is made for the global variable `opendiscord.configs`! +/**## ODMappedConfigManager `class + * A special class with types for the Open Ticket `ODConfigManager` class. */ -export class ODConfigManager_Default extends api.ODConfigManager { - get(id:ConfigId): ODConfigManagerIds_Default[ConfigId] - get(id:api.ODValidId): api.ODConfig|null - - get(id:api.ODValidId): api.ODConfig|null { - return super.get(id) - } - - remove(id:ConfigId): ODConfigManagerIds_Default[ConfigId] - remove(id:api.ODValidId): api.ODConfig|null - - remove(id:api.ODValidId): api.ODConfig|null { - return super.remove(id) - } +export class ODMappedConfigManager extends api.ODConfigManager {} - exists(id:keyof ODConfigManagerIds_Default): boolean - exists(id:api.ODValidId): boolean - - exists(id:api.ODValidId): boolean { - return super.exists(id) - } -} +/**## ODGeneralJsonConfig `class + * A special class with types for the Open Ticket `config/general.json` config file + */ +export class ODGeneralJsonConfig extends api.ODJsonConfig {} -/**## ODJsonConfig_DefaultStatusType `interface` +/**## ODQuestionsJsonConfig `class + * A special class with types for the Open Ticket `config/questions.json` config file + */ +export class ODQuestionsJsonConfig extends api.ODJsonConfig {} + +/**## ODOptionsJsonConfig `class + * A special class with types for the Open Ticket `config/options.json` config file + */ +export class ODOptionsJsonConfig extends api.ODJsonConfig {} + +/**## ODPanelsJsonConfig `class + * A special class with types for the Open Ticket `config/panels.json` config file + */ +export class ODPanelsJsonConfig extends api.ODJsonConfig {} + +/**## ODTranscriptsJsonConfig `class + * A special class with types for the Open Ticket `config/transcripts.json` config file + */ +export class ODTranscriptsJsonConfig extends api.ODJsonConfig {} + +/////////////////////////////////////// +// CONFIG STRUCTURES, VALUES & TYPES +// --> general.json +/////////////////////////////////////// + +/**## ODGeneralJsonConfig_Status `interface` * This interface is an object which has all properties for the status object in the `general.json` config! */ -export interface ODJsonConfig_DefaultStatusType { +export interface ODGeneralJsonConfig_Status { /**Is the status enabled? */ enabled:boolean, /**The type of status (e.g. playing, listening, custom, ...) */ @@ -82,25 +88,25 @@ export interface ODJsonConfig_DefaultStatusType { state:string, } -/**## ODJsonConfig_DefaultMessageSettingsType `interface` +/**## ODGeneralJsonConfig_MessageSettings `interface` * This interface is an object which has all properties for the "system"."messages".... object in the `general.json` config! */ -export interface ODJsonConfig_DefaultMessageSettingsType { +export interface ODGeneralJsonConfig_MessageSettings { /**Enable sending DM logs to the ticket creator for this action. */ dm:boolean, /**Enable sending logsto the log channel for this action. */ logs:boolean } -/**## ODJsonConfig_DefaultCmdPermissionSettingsType `type` +/**## ODGeneralJsonConfig_CmdPermissionSettingsType `type` * This type is a collection of command permission settings for the "system"."permissions".... object in the `general.json` config! */ -export type ODJsonConfig_DefaultCmdPermissionSettingsType = "admin"|"everyone"|"none"|string +export type ODGeneralJsonConfig_CmdPermissionSettingsType = "admin"|"everyone"|"none"|string -/**## ODJsonConfig_DefaultInfo `interface` +/**## ODGeneralJsonConfig_Info `interface` * This object contains a few URLs and metadata for the config. */ -export interface ODJsonConfig_DefaultInfo { +export interface ODGeneralJsonConfig_Info { /**A link to the Open Ticket documentation. */ support:string, /**A link to the DJdj Development discord server. */ @@ -109,20 +115,20 @@ export interface ODJsonConfig_DefaultInfo { version:string } -/**## ODJsonConfig_DefaultSystemLogs `interface` +/**## ODGeneralJsonConfig_SystemLogs `interface` * All settings related to the log channel. */ -export interface ODJsonConfig_DefaultSystemLogs { +export interface ODGeneralJsonConfig_SystemLogs { /**Enable logging. Individual actions should still be added via the `"system"."messages"..."logs"` */ enabled:boolean, /**The channel to send logs to. */ channel:string } -/**## ODJsonConfig_DefaultSystemLimits `interface` +/**## ODGeneralJsonConfig_SystemLimits `interface` * All settings related to global ticket limits. */ -export interface ODJsonConfig_DefaultSystemLimits { +export interface ODGeneralJsonConfig_SystemLimits { /**Enable global ticket limits. */ enabled:boolean, /**The maximum amount of tickets that are allowed in the server at the same time. */ @@ -131,10 +137,10 @@ export interface ODJsonConfig_DefaultSystemLimits { userMaximum:number } -/**## ODJsonConfig_DefaultSystemChannelTopic `interface` +/**## ODGeneralJsonConfig_SystemChannelTopic `interface` * All global channel topic settings. */ -export interface ODJsonConfig_DefaultSystemChannelTopic { +export interface ODGeneralJsonConfig_SystemChannelTopic { /**Show the option name in the channel topic. */ showOptionName:boolean, /**Show the option description in the channel topic. */ @@ -155,59 +161,59 @@ export interface ODJsonConfig_DefaultSystemChannelTopic { showParticipants:boolean } -/**## ODJsonConfig_DefaultSystemPermissions `interface` +/**## ODGeneralJsonConfig_SystemPermissions `interface` * Configure permissions for all Open Ticket commands & actions. */ -export interface ODJsonConfig_DefaultSystemPermissions { - help:ODJsonConfig_DefaultCmdPermissionSettingsType, - panel:ODJsonConfig_DefaultCmdPermissionSettingsType, - ticket:ODJsonConfig_DefaultCmdPermissionSettingsType, - close:ODJsonConfig_DefaultCmdPermissionSettingsType, - delete:ODJsonConfig_DefaultCmdPermissionSettingsType, - reopen:ODJsonConfig_DefaultCmdPermissionSettingsType, - claim:ODJsonConfig_DefaultCmdPermissionSettingsType, - unclaim:ODJsonConfig_DefaultCmdPermissionSettingsType, - pin:ODJsonConfig_DefaultCmdPermissionSettingsType, - unpin:ODJsonConfig_DefaultCmdPermissionSettingsType, - move:ODJsonConfig_DefaultCmdPermissionSettingsType, - rename:ODJsonConfig_DefaultCmdPermissionSettingsType, - add:ODJsonConfig_DefaultCmdPermissionSettingsType, - remove:ODJsonConfig_DefaultCmdPermissionSettingsType, - blacklist:ODJsonConfig_DefaultCmdPermissionSettingsType, - stats:ODJsonConfig_DefaultCmdPermissionSettingsType, - clear:ODJsonConfig_DefaultCmdPermissionSettingsType, - autoclose:ODJsonConfig_DefaultCmdPermissionSettingsType, - autodelete:ODJsonConfig_DefaultCmdPermissionSettingsType, - transfer:ODJsonConfig_DefaultCmdPermissionSettingsType, - topic:ODJsonConfig_DefaultCmdPermissionSettingsType, - priority:ODJsonConfig_DefaultCmdPermissionSettingsType, +export interface ODGeneralJsonConfig_SystemPermissions { + help:ODGeneralJsonConfig_CmdPermissionSettingsType, + panel:ODGeneralJsonConfig_CmdPermissionSettingsType, + ticket:ODGeneralJsonConfig_CmdPermissionSettingsType, + close:ODGeneralJsonConfig_CmdPermissionSettingsType, + delete:ODGeneralJsonConfig_CmdPermissionSettingsType, + reopen:ODGeneralJsonConfig_CmdPermissionSettingsType, + claim:ODGeneralJsonConfig_CmdPermissionSettingsType, + unclaim:ODGeneralJsonConfig_CmdPermissionSettingsType, + pin:ODGeneralJsonConfig_CmdPermissionSettingsType, + unpin:ODGeneralJsonConfig_CmdPermissionSettingsType, + move:ODGeneralJsonConfig_CmdPermissionSettingsType, + rename:ODGeneralJsonConfig_CmdPermissionSettingsType, + add:ODGeneralJsonConfig_CmdPermissionSettingsType, + remove:ODGeneralJsonConfig_CmdPermissionSettingsType, + blacklist:ODGeneralJsonConfig_CmdPermissionSettingsType, + stats:ODGeneralJsonConfig_CmdPermissionSettingsType, + clear:ODGeneralJsonConfig_CmdPermissionSettingsType, + autoclose:ODGeneralJsonConfig_CmdPermissionSettingsType, + autodelete:ODGeneralJsonConfig_CmdPermissionSettingsType, + transfer:ODGeneralJsonConfig_CmdPermissionSettingsType, + topic:ODGeneralJsonConfig_CmdPermissionSettingsType, + priority:ODGeneralJsonConfig_CmdPermissionSettingsType, } -/**## ODJsonConfig_DefaultSystemMessages `interface` +/**## ODGeneralJsonConfig_SystemMessages `interface` * Configure dm & log messages for all Open Ticket commands & actions. */ -export interface ODJsonConfig_DefaultSystemMessages { - creation:ODJsonConfig_DefaultMessageSettingsType, - closing:ODJsonConfig_DefaultMessageSettingsType, - deleting:ODJsonConfig_DefaultMessageSettingsType, - reopening:ODJsonConfig_DefaultMessageSettingsType, - claiming:ODJsonConfig_DefaultMessageSettingsType, - pinning:ODJsonConfig_DefaultMessageSettingsType, - adding:ODJsonConfig_DefaultMessageSettingsType, - removing:ODJsonConfig_DefaultMessageSettingsType, - renaming:ODJsonConfig_DefaultMessageSettingsType, - moving:ODJsonConfig_DefaultMessageSettingsType, - blacklisting:ODJsonConfig_DefaultMessageSettingsType, - transferring:ODJsonConfig_DefaultMessageSettingsType, - topicChange:ODJsonConfig_DefaultMessageSettingsType, - priorityChange:ODJsonConfig_DefaultMessageSettingsType, - reactionRole:ODJsonConfig_DefaultMessageSettingsType, +export interface ODGeneralJsonConfig_SystemMessages { + creation:ODGeneralJsonConfig_MessageSettings, + closing:ODGeneralJsonConfig_MessageSettings, + deleting:ODGeneralJsonConfig_MessageSettings, + reopening:ODGeneralJsonConfig_MessageSettings, + claiming:ODGeneralJsonConfig_MessageSettings, + pinning:ODGeneralJsonConfig_MessageSettings, + adding:ODGeneralJsonConfig_MessageSettings, + removing:ODGeneralJsonConfig_MessageSettings, + renaming:ODGeneralJsonConfig_MessageSettings, + moving:ODGeneralJsonConfig_MessageSettings, + blacklisting:ODGeneralJsonConfig_MessageSettings, + transferring:ODGeneralJsonConfig_MessageSettings, + topicChange:ODGeneralJsonConfig_MessageSettings, + priorityChange:ODGeneralJsonConfig_MessageSettings, + reactionRole:ODGeneralJsonConfig_MessageSettings, } -/**## ODJsonConfig_DefaultSystem `interface` +/**## ODGeneralJsonConfig_System `interface` * All settings related to the ticket system. */ -export interface ODJsonConfig_DefaultSystem { +export interface ODGeneralJsonConfig_System { /**Prefer slash-commands over text-commands when displaying them in menu's and messages. */ preferSlashOverText:boolean, /**Reply with "unknown command" when the prefix is used without a valid command. */ @@ -266,27 +272,27 @@ export interface ODJsonConfig_DefaultSystem { enableDeleteWithoutTranscript:boolean, /**All settings related to the log channel. */ - logs:ODJsonConfig_DefaultSystemLogs, + logs:ODGeneralJsonConfig_SystemLogs, /**All settings related to global ticket limits. */ - limits:ODJsonConfig_DefaultSystemLimits, + limits:ODGeneralJsonConfig_SystemLimits, /**All global channel topic settings. */ - channelTopic:ODJsonConfig_DefaultSystemChannelTopic, + channelTopic:ODGeneralJsonConfig_SystemChannelTopic, /**Configure permissions for all Open Ticket commands & actions. */ - permissions:ODJsonConfig_DefaultSystemPermissions, + permissions:ODGeneralJsonConfig_SystemPermissions, /**Configure dm & log messages for all Open Ticket commands & actions. */ - messages:ODJsonConfig_DefaultSystemMessages + messages:ODGeneralJsonConfig_SystemMessages } -/**## ODJsonConfig_DefaultGeneralData `interface` +/**## ODGeneralJsonConfig_GeneralData `interface` * All contents of the `general.json` config file. */ -export interface ODJsonConfig_DefaultGeneralData { +export interface ODGeneralJsonConfig_GeneralData { /**This object contains a few URLs and metadata for the config. */ - _INFO:ODJsonConfig_DefaultInfo, + _INFO:ODGeneralJsonConfig_Info, /**The token of the bot. (Empty when using `tokenFromENV`) */ token:string, @@ -310,26 +316,21 @@ export interface ODJsonConfig_DefaultGeneralData { textCommands:boolean, /**All settings related to the status of the bot. */ - status:ODJsonConfig_DefaultStatusType, + status:ODGeneralJsonConfig_Status, /**All settings related to the ticket system. */ - system:ODJsonConfig_DefaultSystem + system:ODGeneralJsonConfig_System } -/**## ODJsonConfig_DefaultGeneral `default_class` - * This is a special class that adds type definitions & typescript to the ODJsonConfig class. - * It doesn't add any extra features! - * - * This default class is made for the `general.json` config! - */ -export class ODJsonConfig_DefaultGeneral extends api.ODJsonConfig { - declare data: ODJsonConfig_DefaultGeneralData -} +/////////////////////////////////////// +// CONFIG STRUCTURES, VALUES & TYPES +// --> options.json +/////////////////////////////////////// -/**## ODJsonConfig_DefaultOptionType `interface` +/**## ODOptionsJsonConfig_BaseOption `interface` * This interface is an object which has all basic properties for options in the `options.json` config! */ -export interface ODJsonConfig_DefaultOptionType { +export interface ODOptionsJsonConfig_BaseOption { /**The id of this option. */ id:string, /**The name of this option. */ @@ -347,10 +348,10 @@ export interface ODJsonConfig_DefaultOptionType { } } -/**## ODJsonConfig_DefaultOptionButtonSettingsType `interface` +/**## ODOptionsJsonConfig_OptionButtonSettings `interface` * This interface is an object which has all button settings for ticket & reaction role options in the `options.json` config! */ -export interface ODJsonConfig_DefaultOptionButtonSettingsType { +export interface ODOptionsJsonConfig_OptionButtonSettings { /**The emoji of the button. (can also be empty) */ emoji:string, /**The label of the button (can also be empty) */ @@ -359,10 +360,10 @@ export interface ODJsonConfig_DefaultOptionButtonSettingsType { color:api.ODValidButtonColor } -/**## ODJsonConfig_DefaultOptionEmbedSettingsType `interface` +/**## ODOptionsJsonConfig_TicketOptionEmbedSettings `interface` * This interface is an object which has all message embed settings for ticket options in the `options.json` config! */ -export interface ODJsonConfig_DefaultOptionEmbedSettingsType { +export interface ODOptionsJsonConfig_TicketOptionEmbedSettings { /**Is this embed enabled? */ enabled:boolean, /**The title of the embed. */ @@ -388,10 +389,10 @@ export interface ODJsonConfig_DefaultOptionEmbedSettingsType { timestamp:boolean } -/**## ODJsonConfig_DefaultOptionPingSettingsType `interface` +/**## ODOptionsJsonConfig_TicketOptionPingSettings `interface` * This interface is an object which has all message ping settings for ticket options in the `options.json` config! */ -export interface ODJsonConfig_DefaultOptionPingSettingsType { +export interface ODOptionsJsonConfig_TicketOptionPingSettings { /**Ping `@here`. */ "@here":boolean, /**Ping `@everyone`. */ @@ -400,10 +401,10 @@ export interface ODJsonConfig_DefaultOptionPingSettingsType { custom:string[] } -/**## ODJsonConfig_DefaultOptionTicketChannelType `interface` +/**## ODOptionsJsonConfig_TicketOptionChannelSettings `interface` * All settings related to the ticket channel itself in a ticket option. */ -export interface ODJsonConfig_DefaultOptionTicketChannelType { +export interface ODOptionsJsonConfig_TicketOptionChannelSettings { /**The prefix used in the name of this ticket channel. */ prefix:string, /**The type of suffix used in the name of this ticket channel. */ @@ -425,12 +426,12 @@ export interface ODJsonConfig_DefaultOptionTicketChannelType { topic:string } -/**## ODJsonConfig_DefaultOptionTicketType `interface` +/**## ODOptionsJsonConfig_TicketOption `interface` * This interface is an object which has all ticket properties for options in the `options.json` config! */ -export interface ODJsonConfig_DefaultOptionTicketType extends ODJsonConfig_DefaultOptionType { +export interface ODOptionsJsonConfig_TicketOption extends ODOptionsJsonConfig_BaseOption { type:"ticket", - button:ODJsonConfig_DefaultOptionButtonSettingsType, + button:ODOptionsJsonConfig_OptionButtonSettings, /**A list of discord role ids which are able to access this ticket type & use commands. */ ticketAdmins:string[], /**A list of discord role ids which are able to access this ticket type but can't write in the chat. */ @@ -440,7 +441,7 @@ export interface ODJsonConfig_DefaultOptionTicketType extends ODJsonConfig_Defau /**A list of valid question ids from the `questions.json` config. */ questions:string[], /**All settings related to the ticket channel itself. */ - channel:ODJsonConfig_DefaultOptionTicketChannelType, + channel:ODOptionsJsonConfig_TicketOptionChannelSettings, /**All settings related to the message sent in DM to the creator when the ticket is created. */ dmMessage:{ /**Enable this message. */ @@ -448,7 +449,7 @@ export interface ODJsonConfig_DefaultOptionTicketType extends ODJsonConfig_Defau /**The raw text contents of this message. (empty for embed only) */ text:string, /**The embed of this message. */ - embed:ODJsonConfig_DefaultOptionEmbedSettingsType + embed:ODOptionsJsonConfig_TicketOptionEmbedSettings }, /**All settings related to the message sent in the ticket channel when the ticket is created. */ ticketMessage:{ @@ -457,9 +458,9 @@ export interface ODJsonConfig_DefaultOptionTicketType extends ODJsonConfig_Defau /**The raw text contents of this message. (empty for embed only) */ text:string, /**The embed of this message. */ - embed:ODJsonConfig_DefaultOptionEmbedSettingsType, + embed:ODOptionsJsonConfig_TicketOptionEmbedSettings, /**Additional ping/mention settings for this ticket channel. */ - ping:ODJsonConfig_DefaultOptionPingSettingsType + ping:ODOptionsJsonConfig_TicketOptionPingSettings }, /**All settings related to autoclosing this ticket type. */ autoclose:{ @@ -508,21 +509,21 @@ export interface ODJsonConfig_DefaultOptionTicketType extends ODJsonConfig_Defau } } -/**## ODJsonConfig_DefaultOptionWebsiteType `interface` +/**## ODOptionsJsonConfig_WebsiteOption `interface` * This interface is an object which has all website properties for options in the `options.json` config! */ -export interface ODJsonConfig_DefaultOptionWebsiteType extends ODJsonConfig_DefaultOptionType { +export interface ODOptionsJsonConfig_WebsiteOption extends ODOptionsJsonConfig_BaseOption { type:"website", /**The URL this button will point to. */ url:string } -/**## ODJsonConfig_DefaultOptionRoleType `interface` +/**## ODOptionsJsonConfig_RoleOption `interface` * This interface is an object which has all reaction role properties for options in the `options.json` config! */ -export interface ODJsonConfig_DefaultOptionRoleType extends ODJsonConfig_DefaultOptionType { +export interface ODOptionsJsonConfig_RoleOption extends ODOptionsJsonConfig_BaseOption { type:"role", - button:ODJsonConfig_DefaultOptionButtonSettingsType, + button:ODOptionsJsonConfig_OptionButtonSettings, /**All roles which will be affected by this button. */ roles:string[], /**The mode determines what will happen with the affected roles on the user. */ @@ -533,25 +534,20 @@ export interface ODJsonConfig_DefaultOptionRoleType extends ODJsonConfig_Default addOnMemberJoin:boolean } -/**## ODJsonConfig_DefaultOptionsData `type` +/**## ODOptionsJsonConfig_OptionsData `type` * All contents of the `options.json` config file. */ -export type ODJsonConfig_DefaultOptionsData = (ODJsonConfig_DefaultOptionTicketType|ODJsonConfig_DefaultOptionWebsiteType|ODJsonConfig_DefaultOptionRoleType)[] +export type ODOptionsJsonConfig_OptionsData = (ODOptionsJsonConfig_TicketOption|ODOptionsJsonConfig_WebsiteOption|ODOptionsJsonConfig_RoleOption)[] -/**## ODJsonConfig_DefaultOptions `default_class` - * This is a special class that adds type definitions & typescript to the ODJsonConfig class. - * It doesn't add any extra features! - * - * This default class is made for the `options.json` config! - */ -export class ODJsonConfig_DefaultOptions extends api.ODJsonConfig { - declare data: ODJsonConfig_DefaultOptionsData -} +/////////////////////////////////////// +// CONFIG STRUCTURES, VALUES & TYPES +// --> panels.json +/////////////////////////////////////// -/**## ODJsonConfig_DefaultPanelEmbedSettingsType `interface` +/**## ODPanelsJsonConfig_PanelEmbedSettings `interface` * This interface is an object which has all message embed settings for panels in the `panels.json` config! */ -export interface ODJsonConfig_DefaultPanelEmbedSettingsType { +export interface ODPanelsJsonConfig_PanelEmbedSettings { /**Is this embed enabled? */ enabled:boolean, /**The title of the embed. */ @@ -583,10 +579,10 @@ export interface ODJsonConfig_DefaultPanelEmbedSettingsType { timestamp:boolean } -/**## ODJsonConfig_DefaultPanelSettingsType `interface` +/**## ODPanelsJsonConfig_PanelSettings `interface` * This interface is a collection of additional settings for extra customisation in a panel. */ -export interface ODJsonConfig_DefaultPanelSettingsType { +export interface ODPanelsJsonConfig_PanelSettings { /**The placeholder used in the dropdown when enabled. */ dropdownPlaceholder:string, @@ -607,10 +603,10 @@ export interface ODJsonConfig_DefaultPanelSettingsType { describeOptionsInEmbedDescription:boolean } -/**## ODJsonConfig_DefaultPanelType `interface` +/**## ODPanelsJsonConfig_Panel `interface` * This interface is an object which has all properties for panels in the `panels.json` config! */ -export interface ODJsonConfig_DefaultPanelType { +export interface ODPanelsJsonConfig_Panel { /**The id of this panel. */ id:string, /**The name of this panel. */ @@ -623,30 +619,25 @@ export interface ODJsonConfig_DefaultPanelType { /**The raw text contents of this panel. (empty for embed only) */ text:string, /**The embed of this panel. */ - embed:ODJsonConfig_DefaultPanelEmbedSettingsType, + embed:ODPanelsJsonConfig_PanelEmbedSettings, /**A collection of additional settings for extra customisation in a panel. */ - settings:ODJsonConfig_DefaultPanelSettingsType + settings:ODPanelsJsonConfig_PanelSettings } -/**## ODJsonConfig_DefaultPanelsData `type` +/**## ODPanelsJsonConfig_PanelsData `type` * All contents of the `panels.json` config file. */ -export type ODJsonConfig_DefaultPanelsData = ODJsonConfig_DefaultPanelType[] +export type ODPanelsJsonConfig_PanelsData = ODPanelsJsonConfig_Panel[] -/**## ODJsonConfig_DefaultPanels `default_class` - * This is a special class that adds type definitions & typescript to the ODJsonConfig class. - * It doesn't add any extra features! - * - * This default class is made for the `panels.json` config! - */ -export class ODJsonConfig_DefaultPanels extends api.ODJsonConfig { - declare data: ODJsonConfig_DefaultPanelsData -} +/////////////////////////////////////// +// CONFIG STRUCTURES, VALUES & TYPES +// --> questions.json +/////////////////////////////////////// -/**## ODJSonConfig_DefaultQuestionLengthSettings `interface` +/**## ODQuestionsJsonConfig_QuestionLengthSettings `interface` * This interface is a collection of settings related to length validation in a question. */ -export interface ODJSonConfig_DefaultQuestionLengthSettings { +export interface ODQuestionsJsonConfig_QuestionLengthSettings { /**Enable text length verification. */ enabled:boolean, /**The minimum text input length. */ @@ -655,63 +646,54 @@ export interface ODJSonConfig_DefaultQuestionLengthSettings { max:number } -/**## ODJsonConfig_DefaultShortQuestionType `interface` +/**## ODQuestionsJsonConfig_BaseQuestion `interface` + * This interface is an object which has all universal properties for questions in the `questions.json` config! + */ +export interface ODQuestionsJsonConfig_BaseQuestion { + /**The id of this question. */ + id:string, + /**The name of this question. */ + name:string, + /**The type of this question. */ + type:"short"|"paragraph", + /**Is this question required? */ + required:boolean, +} + +/**## ODQuestionsJsonConfig_ShortQuestion `interface` * This interface is an object which has all properties for short questions in the `questions.json` config! */ -export interface ODJsonConfig_DefaultShortQuestionType { - /**The id of this question. */ - id:string, - /**The name of this question. */ - name:string, - /**The type of this question. */ - type:"short", - - /**Is this question required? */ - required:boolean, +export interface ODQuestionsJsonConfig_ShortQuestion extends ODQuestionsJsonConfig_BaseQuestion { /**A placeholder for the question. */ placeholder:string, /**A collection of settings related to length validation in a question. */ - length:ODJSonConfig_DefaultQuestionLengthSettings + length:ODQuestionsJsonConfig_QuestionLengthSettings } -/**## ODJsonConfig_DefaultParagraphQuestionType `interface` +/**## ODQuestionsJsonConfig_ParagraphQuestion `interface` * This interface is an object which has all properties for paragraph questions in the `questions.json` config! */ -export interface ODJsonConfig_DefaultParagraphQuestionType { - /**The id of this question. */ - id:string, - /**The name of this question. */ - name:string, - /**The type of this question. */ - type:"paragraph", - - /**Is this question required? */ - required:boolean, +export interface ODQuestionsJsonConfig_ParagraphQuestion extends ODQuestionsJsonConfig_BaseQuestion { /**A placeholder for the question. */ placeholder:string, /**A collection of settings related to length validation in a question. */ - length:ODJSonConfig_DefaultQuestionLengthSettings + length:ODQuestionsJsonConfig_QuestionLengthSettings } -/**## ODJsonConfig_DefaultQuestionsData `type` +/**## ODQuestionsJsonConfig_QuestionsData `type` * All contents of the `questions.json` config file. */ -export type ODJsonConfig_DefaultQuestionsData = (ODJsonConfig_DefaultShortQuestionType|ODJsonConfig_DefaultParagraphQuestionType)[] +export type ODQuestionsJsonConfig_QuestionsData = (ODQuestionsJsonConfig_ShortQuestion|ODQuestionsJsonConfig_ParagraphQuestion)[] -/**## ODJsonConfig_DefaultQuestions `default_class` - * This is a special class that adds type definitions & typescript to the ODJsonConfig class. - * It doesn't add any extra features! - * - * This default class is made for the `questions.json` config! - */ -export class ODJsonConfig_DefaultQuestions extends api.ODJsonConfig { - declare data: ODJsonConfig_DefaultQuestionsData -} +/////////////////////////////////////// +// CONFIG STRUCTURES, VALUES & TYPES +// --> transcripts.json +/////////////////////////////////////// -/**## ODJsonConfig_DefaultTranscriptsTextLayout `interface` +/**## ODTranscriptsJsonConfig_TranscriptsTextLayout `interface` * This interface contains the layout of the text transcripts. */ -export interface ODJsonConfig_DefaultTranscriptsTextLayout { +export interface ODTranscriptsJsonConfig_TranscriptsTextLayout { /**The layout/complexity of the text transcripts. */ layout:"simple"|"normal"|"detailed", /**Include stats in the transcript. */ @@ -731,10 +713,10 @@ export interface ODJsonConfig_DefaultTranscriptsTextLayout { customFileName:string } -/**## ODJsonConfig_DefaultTranscriptsHtmlLayout `interface` +/**## ODTranscriptsJsonConfig_TranscriptsHtmlLayout `interface` * This interface contains the layout of the HTML transcripts. */ -export interface ODJsonConfig_DefaultTranscriptsHtmlLayout { +export interface ODTranscriptsJsonConfig_TranscriptsHtmlLayout { /**Settings related to the background. */ background:{ /**Enable a custom background. */ @@ -779,10 +761,10 @@ export interface ODJsonConfig_DefaultTranscriptsHtmlLayout { } } -/**## ODJsonConfig_DefaultTranscriptsData `interface` +/**## ODTranscriptsJsonConfig_TranscriptsData `interface` * All contents of the `transcripts.json` config file. */ -export interface ODJsonConfig_DefaultTranscriptsData { +export interface ODTranscriptsJsonConfig_TranscriptsData { /**All general settings related to transcripts. */ general:{ /**Are transcripts enabled? */ @@ -814,18 +796,7 @@ export interface ODJsonConfig_DefaultTranscriptsData { includeTicketStats:boolean }, /**The layout of the text transcripts. */ - textTranscriptStyle:ODJsonConfig_DefaultTranscriptsTextLayout, + textTranscriptStyle:ODTranscriptsJsonConfig_TranscriptsTextLayout, /**The layout of the HTML transcripts. */ - htmlTranscriptStyle:ODJsonConfig_DefaultTranscriptsHtmlLayout -} - - -/**## ODJsonConfig_DefaultTranscripts `default_class` - * This is a special class that adds type definitions & typescript to the ODJsonConfig class. - * It doesn't add any extra features! - * - * This default class is made for the `transcripts.json` config! - */ -export class ODJsonConfig_DefaultTranscripts extends api.ODJsonConfig { - declare data: ODJsonConfig_DefaultTranscriptsData + htmlTranscriptStyle:ODTranscriptsJsonConfig_TranscriptsHtmlLayout } \ No newline at end of file diff --git a/src/core/mappings/console.ts b/src/core/mappings/console.ts new file mode 100644 index 0000000..bd95af7 --- /dev/null +++ b/src/core/mappings/console.ts @@ -0,0 +1,17 @@ +/////////////////////////////////////// +//OPEN TICKET CONSOLE MAPPINGS +/////////////////////////////////////// +import * as api from "@open-discord-bots/framework/api" + +/**## ODLiveStatusManagerIdMappings `interface` + * A list of all available IDs in the default `ODLiveStatusManager` class in `opendiscord`. + * It's used to generate typescript declarations for this class. + */ +export interface ODLiveStatusManagerIdMappings extends api.ODLiveStatusManagerIdConstraint { + "opendiscord:default-djdj-dev":api.ODLiveStatusUrlSource +} + +/**## ODMappedLiveStatusManager `class + * A special class with types for the Open Ticket `ODLiveStatusManager` class. + */ +export class ODMappedLiveStatusManager extends api.ODLiveStatusManager {} \ No newline at end of file diff --git a/src/core/mappings/cooldown.ts b/src/core/mappings/cooldown.ts new file mode 100644 index 0000000..4dc9bd0 --- /dev/null +++ b/src/core/mappings/cooldown.ts @@ -0,0 +1,17 @@ +/////////////////////////////////////// +//OPEN TICKET COOLDOWN MAPPINGS +/////////////////////////////////////// +import * as api from "@open-discord-bots/framework/api" + +/**## ODCooldownManagerIdMappings `interface` + * A list of all available IDs in the default `ODCooldownManager` class in `opendiscord`. + * It's used to generate typescript declarations for this class. + */ +export interface ODCooldownManagerIdMappings extends api.ODCooldownManagerIdConstraint { + //"opendiscord:cooldown":api.ODCooldown +} + +/**## ODMappedCooldownManager `class + * A special class with types for the Open Ticket `ODCooldownManager` class. + */ +export class ODMappedCooldownManager extends api.ODCooldownManager {} \ No newline at end of file diff --git a/src/core/mappings/database.ts b/src/core/mappings/database.ts new file mode 100644 index 0000000..627c805 --- /dev/null +++ b/src/core/mappings/database.ts @@ -0,0 +1,88 @@ +/////////////////////////////////////// +//OPEN TICKET DATABASE MAPPINGS +/////////////////////////////////////// +import * as api from "@open-discord-bots/framework/api" +import { ODTicketJson } from "../api/ticket" +import { ODOptionJson } from "../api/option" + +/**## ODDatabaseManagerIdMappings `interface` + * A list of all available IDs in the default `ODDatabaseManager` class in `opendiscord`. + * It's used to generate typescript declarations for this class. + */ +export interface ODDatabaseManagerIdMappings extends api.ODDatabaseManagerIdConstraint { + "opendiscord:global":ODGlobalDatabase, + "opendiscord:stats":ODStatsDatabase, + "opendiscord:tickets":ODTicketsDatabase, + "opendiscord:users":ODUsersDatabase, + "opendiscord:options":ODOptionsDatabase, +} + +/**## ODMappedDatabaseManager `class + * A special class with types for the Open Ticket `ODDatabaseManager` class. + */ +export class ODMappedDatabaseManager extends api.ODDatabaseManager {} + +/**## ODGlobalDatabase `class + * A special class with types for the Open Ticket `database/global.json` database file + */ +export class ODGlobalDatabase extends api.ODFormattedJsonDatabase {} + +/**## ODStatsDatabase `class + * A special class with types for the Open Ticket `database/stats.json` database file + */ +export class ODStatsDatabase extends api.ODFormattedJsonDatabase {} + +/**## ODTicketsDatabase `class + * A special class with types for the Open Ticket `database/tickets.json` database file + */ +export class ODTicketsDatabase extends api.ODFormattedJsonDatabase {} + +/**## ODUsersDatabase `class + * A special class with types for the Open Ticket `database/users.json` database file + */ +export class ODUsersDatabase extends api.ODFormattedJsonDatabase {} + +/**## ODOptionsDatabase `class + * A special class with types for the Open Ticket `database/options.json` database file + */ +export class ODOptionsDatabase extends api.ODFormattedJsonDatabase {} + +///////////////////////////////////////// +// DATABASE MAPPINGS, CATEGORIES & TYPES +///////////////////////////////////////// + +/**## ODGlobalDatabaseIdMappings `interface` + * A list of all available IDs in the default `ODGlobalDatabase` class in `opendiscord`. + * It's used to generate typescript declarations for this class. + */ +export interface ODGlobalDatabaseIdMappings extends api.ODDatabaseIdConstraint { + "opendiscord:panel-message":string, + "opendiscord:panel-update":string, + "opendiscord:option-suffix-counter":number, + "opendiscord:option-suffix-history":string[], + "opendiscord:last-version":string +} + +/**## ODTicketsDatabaseIdMappings `interface` + * A list of all available IDs in the default `ODTicketsDatabase` class in `opendiscord`. + * It's used to generate typescript declarations for this class. + */ +export interface ODTicketsDatabaseIdMappings extends api.ODDatabaseIdConstraint { + "opendiscord:ticket":ODTicketJson +} + +/**## ODUsersDatabaseIdMappings `interface` + * A list of all available IDs in the default `ODUsersDatabase` class in `opendiscord`. + * It's used to generate typescript declarations for this class. + */ +export interface ODUsersDatabaseIdMappings extends api.ODDatabaseIdConstraint { + "opendiscord:blacklist":ODTicketJson +} + +/**## ODOptionsDatabaseIdMappings `interface` + * A list of all available IDs in the default `ODOptionsDatabase` class in `opendiscord`. + * It's used to generate typescript declarations for this class. + */ +export interface ODOptionsDatabaseIdMappings extends api.ODDatabaseIdConstraint { + "opendiscord:used-option":ODOptionJson +} \ No newline at end of file diff --git a/src/core/mappings/event.ts b/src/core/mappings/event.ts new file mode 100644 index 0000000..be69246 --- /dev/null +++ b/src/core/mappings/event.ts @@ -0,0 +1,339 @@ +/////////////////////////////////////// +//OPEN TICKET EVENT MAPPINGS +/////////////////////////////////////// + +//BASE MAPPINGSS +import * as api from "@open-discord-bots/framework/api" +import * as discord from "discord.js" + +//OPEN TICKET MAPPINGS +import { ODMappedPluginClassManager, ODMappedPluginManager } from "./plugin" +import { ODMappedConfigManager} from "./config" +import { ODMappedDatabaseManager } from "./database" +import { ODMappedFlagManager } from "./flag" +import { ODMappedSessionManager } from "./session" +import { ODMappedLanguageManager } from "./language" +import { ODMappedCheckerFunctionManager, ODMappedCheckerManager, ODMappedCheckerTranslationRegister } from "./checker" +import { ODMappedClientManager, ODMappedContextMenuManager, ODMappedSlashCommandManager, ODMappedTextCommandManager } from "./client" +import { ODMappedBuilderManager, ODMappedButtonManager, ODMappedDropdownManager, ODMappedEmbedManager, ODMappedFileManager, ODMappedMessageManager, ODMappedModalManager } from "./builder" +import { ODMappedAutocompleteResponderManager, ODMappedButtonResponderManager, ODMappedCommandResponderManager, ODMappedContextMenuResponderManager, ODMappedDropdownResponderManager, ODMappedModalResponderManager, ODMappedResponderManager } from "./responder" +import { ODMappedActionManager } from "./action" +import { ODMappedPermissionManager } from "./permission" +import { ODMappedHelpMenuManager } from "./helpmenu" +import { ODMappedStatisticManager } from "./statistic" +import { ODMappedCodeManager } from "./code" +import { ODMappedCooldownManager } from "./cooldown" +import { ODMappedPostManager } from "./post" +import { ODMappedVerifyBarManager } from "./verifybar" +import { ODMappedStartScreenManager } from "./startscreen" +import { ODMappedLiveStatusManager } from "./console" +import { ODMappedProgressBarManager, ODMappedProgressBarRendererManager } from "./progressbar" + +//OPEN TICKET MAPPINGSS +import { ODOptionManager, ODTicketOption } from "../api/option" +import { ODPanel, ODPanelManager } from "../api/panel" +import { ODTicket, ODTicketClearFilter, ODTicketManager } from "../api/ticket" +import { ODQuestionManager } from "../api/question" +import { ODBlacklistManager } from "../api/blacklist" +import { ODMappedTranscriptManager } from "../api/transcript" +import { ODRole, ODRoleManager } from "../api/role" +import { ODMappedPriorityManager, ODPriorityLevel } from "../api/priority" + +/**## ODEventManagerIdMappings `interface` + * A list of all available IDs in the default `ODEventManager` class in `opendiscord`. + * It's used to generate typescript declarations for this class. + */ +export interface ODEventManagerIdMappings extends api.ODEventManagerIdConstraint { + //error handling + "onErrorHandling": api.ODEvent<(error:Error, origin:NodeJS.UncaughtExceptionOrigin) => api.ODPromiseVoid> + "afterErrorHandling": api.ODEvent<(error:Error, origin:NodeJS.UncaughtExceptionOrigin, message:api.ODError) => api.ODPromiseVoid> + + //plugins + "afterPluginsLoaded": api.ODEvent<(plugins:ODMappedPluginManager) => api.ODPromiseVoid> + "onPluginClassLoad": api.ODEvent<(classes:ODMappedPluginClassManager, plugins:ODMappedPluginManager) => api.ODPromiseVoid> + "afterPluginClassesLoaded": api.ODEvent<(classes:ODMappedPluginClassManager, plugins:ODMappedPluginManager) => api.ODPromiseVoid> + + //flags + "onFlagLoad": api.ODEvent<(flags:ODMappedFlagManager) => api.ODPromiseVoid> + "afterFlagsLoaded": api.ODEvent<(flags:ODMappedFlagManager) => api.ODPromiseVoid> + "onFlagInit": api.ODEvent<(flags:ODMappedFlagManager) => api.ODPromiseVoid> + "afterFlagsInitiated": api.ODEvent<(flags:ODMappedFlagManager) => api.ODPromiseVoid> + + //progress bars + "onProgressBarRendererLoad": api.ODEvent<(renderers:ODMappedProgressBarRendererManager) => api.ODPromiseVoid> + "afterProgressBarRenderersLoaded": api.ODEvent<(renderers:ODMappedProgressBarRendererManager) => api.ODPromiseVoid> + "onProgressBarLoad": api.ODEvent<(progressbars:ODMappedProgressBarManager) => api.ODPromiseVoid> + "afterProgressBarsLoaded": api.ODEvent<(progressbars:ODMappedProgressBarManager) => api.ODPromiseVoid> + + //configs + "onConfigLoad": api.ODEvent<(configs:ODMappedConfigManager) => api.ODPromiseVoid> + "afterConfigsLoaded": api.ODEvent<(configs:ODMappedConfigManager) => api.ODPromiseVoid> + "onConfigInit": api.ODEvent<(configs:ODMappedConfigManager) => api.ODPromiseVoid> + "afterConfigsInitiated": api.ODEvent<(configs:ODMappedConfigManager) => api.ODPromiseVoid> + + //databases + "onDatabaseLoad": api.ODEvent<(databases:ODMappedDatabaseManager) => api.ODPromiseVoid> + "afterDatabasesLoaded": api.ODEvent<(databases:ODMappedDatabaseManager) => api.ODPromiseVoid> + "onDatabaseInit": api.ODEvent<(databases:ODMappedDatabaseManager) => api.ODPromiseVoid> + "afterDatabasesInitiated": api.ODEvent<(databases:ODMappedDatabaseManager) => api.ODPromiseVoid> + + //languages + "onLanguageLoad": api.ODEvent<(languages:ODMappedLanguageManager) => api.ODPromiseVoid> + "afterLanguagesLoaded": api.ODEvent<(languages:ODMappedLanguageManager) => api.ODPromiseVoid> + "onLanguageInit": api.ODEvent<(languages:ODMappedLanguageManager) => api.ODPromiseVoid> + "afterLanguagesInitiated": api.ODEvent<(languages:ODMappedLanguageManager) => api.ODPromiseVoid> + "onLanguageSelect": api.ODEvent<(languages:ODMappedLanguageManager) => api.ODPromiseVoid> + "afterLanguagesSelected": api.ODEvent<(main:api.ODLanguage|null, backup:api.ODLanguage|null, languages:ODMappedLanguageManager) => api.ODPromiseVoid> + + //sessions + "onSessionLoad": api.ODEvent<(languages:ODMappedSessionManager) => api.ODPromiseVoid> + "afterSessionsLoaded": api.ODEvent<(languages:ODMappedSessionManager) => api.ODPromiseVoid> + + //config checkers + "onCheckerLoad": api.ODEvent<(checkers:ODMappedCheckerManager) => api.ODPromiseVoid> + "afterCheckersLoaded": api.ODEvent<(checkers:ODMappedCheckerManager) => api.ODPromiseVoid> + "onCheckerFunctionLoad": api.ODEvent<(functions:ODMappedCheckerFunctionManager, checkers:ODMappedCheckerManager) => api.ODPromiseVoid> + "afterCheckerFunctionsLoaded": api.ODEvent<(functions:ODMappedCheckerFunctionManager, checkers:ODMappedCheckerManager) => api.ODPromiseVoid> + "onCheckerExecute": api.ODEvent<(checkers:ODMappedCheckerManager) => api.ODPromiseVoid> + "afterCheckersExecuted": api.ODEvent<(result:api.ODCheckerResult, checkers:ODMappedCheckerManager) => api.ODPromiseVoid> + "onCheckerTranslationLoad": api.ODEvent<(translations:ODMappedCheckerTranslationRegister, enabled:boolean, checkers:ODMappedCheckerManager) => api.ODPromiseVoid> + "afterCheckerTranslationsLoaded": api.ODEvent<(translations:ODMappedCheckerTranslationRegister, checkers:ODMappedCheckerManager) => api.ODPromiseVoid> + "onCheckerRender": api.ODEvent<(renderer:api.ODCheckerRenderer, checkers:ODMappedCheckerManager) => api.ODPromiseVoid> + "afterCheckersRendered": api.ODEvent<(renderer:api.ODCheckerRenderer, checkers:ODMappedCheckerManager) => api.ODPromiseVoid> + "onCheckerQuit": api.ODEvent<(checkers:ODMappedCheckerManager) => api.ODPromiseVoid> + + //plugin loading before client + "onPluginBeforeClientLoad": api.ODEvent<() => api.ODPromiseVoid>, + "afterPluginBeforeClientLoaded": api.ODEvent<() => api.ODPromiseVoid>, + + //client configuration + "onClientLoad": api.ODEvent<(client:ODMappedClientManager) => api.ODPromiseVoid> + "afterClientLoaded": api.ODEvent<(client:ODMappedClientManager) => api.ODPromiseVoid> + "onClientInit": api.ODEvent<(client:ODMappedClientManager) => api.ODPromiseVoid> + "afterClientInitiated": api.ODEvent<(client:ODMappedClientManager) => api.ODPromiseVoid> + "onClientReady": api.ODEvent<(client:ODMappedClientManager) => api.ODPromiseVoid> + "afterClientReady": api.ODEvent<(client:ODMappedClientManager) => api.ODPromiseVoid> + "onClientActivityLoad": api.ODEvent<(activity:api.ODClientActivityManager, client:ODMappedClientManager) => api.ODPromiseVoid> + "afterClientActivityLoaded": api.ODEvent<(activity:api.ODClientActivityManager, client:ODMappedClientManager) => api.ODPromiseVoid> + "onClientActivityInit": api.ODEvent<(activity:api.ODClientActivityManager, client:ODMappedClientManager) => api.ODPromiseVoid> + "afterClientActivityInitiated": api.ODEvent<(activity:api.ODClientActivityManager, client:ODMappedClientManager) => api.ODPromiseVoid> + + //priority levels + "onPriorityLoad": api.ODEvent<(priorities:ODMappedPriorityManager) => api.ODPromiseVoid> + "afterPrioritiesLoaded": api.ODEvent<(priorities:ODMappedPriorityManager) => api.ODPromiseVoid> + + //client slash commands + "onSlashCommandLoad": api.ODEvent<(slash:ODMappedSlashCommandManager, client:ODMappedClientManager) => api.ODPromiseVoid> + "afterSlashCommandsLoaded": api.ODEvent<(slash:ODMappedSlashCommandManager, client:ODMappedClientManager) => api.ODPromiseVoid> + "onSlashCommandRegister": api.ODEvent<(slash:ODMappedSlashCommandManager, client:ODMappedClientManager) => api.ODPromiseVoid> + "afterSlashCommandsRegistered": api.ODEvent<(slash:ODMappedSlashCommandManager, client:ODMappedClientManager) => api.ODPromiseVoid> + + //client context menus + "onContextMenuLoad": api.ODEvent<(menu:ODMappedContextMenuManager, client:ODMappedClientManager) => api.ODPromiseVoid> + "afterContextMenusLoaded": api.ODEvent<(menu:ODMappedContextMenuManager, client:ODMappedClientManager) => api.ODPromiseVoid> + "onContextMenuRegister": api.ODEvent<(menu:ODMappedContextMenuManager, client:ODMappedClientManager) => api.ODPromiseVoid> + "afterContextMenusRegistered": api.ODEvent<(menu:ODMappedContextMenuManager, client:ODMappedClientManager) => api.ODPromiseVoid> + + //client text commands + "onTextCommandLoad": api.ODEvent<(text:ODMappedTextCommandManager, client:ODMappedClientManager) => api.ODPromiseVoid> + "afterTextCommandsLoaded": api.ODEvent<(text:ODMappedTextCommandManager, client:ODMappedClientManager) => api.ODPromiseVoid> + + //plugin loading before managers + "onPluginBeforeManagerLoad": api.ODEvent<() => api.ODPromiseVoid>, + "afterPluginBeforeManagerLoaded": api.ODEvent<() => api.ODPromiseVoid>, + + //questions + "onQuestionLoad": api.ODEvent<(questions:ODQuestionManager) => api.ODPromiseVoid> + "afterQuestionsLoaded": api.ODEvent<(questions:ODQuestionManager) => api.ODPromiseVoid> + + //options + "onOptionLoad": api.ODEvent<(options:ODOptionManager) => api.ODPromiseVoid> + "afterOptionsLoaded": api.ODEvent<(options:ODOptionManager) => api.ODPromiseVoid> + + //panels + "onPanelLoad": api.ODEvent<(panels:ODPanelManager) => api.ODPromiseVoid> + "afterPanelsLoaded": api.ODEvent<(panels:ODPanelManager) => api.ODPromiseVoid> + "onPanelSpawn": api.ODEvent<(panel:ODPanel) => api.ODPromiseVoid> + "afterPanelSpawned": api.ODEvent<(panel:ODPanel) => api.ODPromiseVoid> + + //tickets + "onTicketLoad": api.ODEvent<(tickets:ODTicketManager) => api.ODPromiseVoid> + "afterTicketsLoaded": api.ODEvent<(tickets:ODTicketManager) => api.ODPromiseVoid> + + //ticket creation + "onTicketChannelCreation": api.ODEvent<(option:ODTicketOption, user:discord.User) => api.ODPromiseVoid> + "afterTicketChannelCreated": api.ODEvent<(option:ODTicketOption, channel:discord.GuildTextBasedChannel, user:discord.User) => api.ODPromiseVoid> + "onTicketChannelDeletion": api.ODEvent<(ticket:ODTicket, channel:discord.GuildTextBasedChannel, user:discord.User) => api.ODPromiseVoid> + "afterTicketChannelDeleted": api.ODEvent<(ticket:ODTicket, user:discord.User) => api.ODPromiseVoid> + "onTicketPermissionsCreated": api.ODEvent<(option:ODTicketOption, permissions:ODMappedPermissionManager, channel:discord.GuildTextBasedChannel, user:discord.User) => api.ODPromiseVoid> + "afterTicketPermissionsCreated": api.ODEvent<(option:ODTicketOption, permissions:ODMappedPermissionManager, channel:discord.GuildTextBasedChannel, user:discord.User) => api.ODPromiseVoid> + "onTicketMainMessageCreated": api.ODEvent<(ticket:ODTicket, channel:discord.GuildTextBasedChannel, user:discord.User) => api.ODPromiseVoid> + "afterTicketMainMessageCreated": api.ODEvent<(ticket:ODTicket, message:discord.Message, channel:discord.GuildTextBasedChannel, user:discord.User) => api.ODPromiseVoid> + + //ticket actions + "onTicketCreate": api.ODEvent<(creator:discord.User) => api.ODPromiseVoid> + "afterTicketCreated": api.ODEvent<(ticket:ODTicket, creator:discord.User, channel:discord.GuildTextBasedChannel) => api.ODPromiseVoid> + "onTicketClose": api.ODEvent<(ticket:ODTicket, closer:discord.User, channel:discord.GuildTextBasedChannel, reason:string|null) => api.ODPromiseVoid> + "afterTicketClosed": api.ODEvent<(ticket:ODTicket, closer:discord.User, channel:discord.GuildTextBasedChannel, reason:string|null) => api.ODPromiseVoid> + "onTicketReopen": api.ODEvent<(ticket:ODTicket, reopener:discord.User, channel:discord.GuildTextBasedChannel, reason:string|null) => api.ODPromiseVoid> + "afterTicketReopened": api.ODEvent<(ticket:ODTicket, reopener:discord.User, channel:discord.GuildTextBasedChannel, reason:string|null) => api.ODPromiseVoid> + "onTicketDelete": api.ODEvent<(ticket:ODTicket, deleter:discord.User, channel:discord.GuildTextBasedChannel, reason:string|null) => api.ODPromiseVoid> + "afterTicketDeleted": api.ODEvent<(ticket:ODTicket, deleter:discord.User, reason:string|null) => api.ODPromiseVoid> + "onTicketMove": api.ODEvent<(ticket:ODTicket, mover:discord.User, channel:discord.GuildTextBasedChannel, reason:string|null) => api.ODPromiseVoid> + "afterTicketMoved": api.ODEvent<(ticket:ODTicket, mover:discord.User, channel:discord.GuildTextBasedChannel, reason:string|null) => api.ODPromiseVoid> + "onTicketClaim": api.ODEvent<(ticket:ODTicket, claimer:discord.User, channel:discord.GuildTextBasedChannel, reason:string|null) => api.ODPromiseVoid> + "afterTicketClaimed": api.ODEvent<(ticket:ODTicket, claimer:discord.User, channel:discord.GuildTextBasedChannel, reason:string|null) => api.ODPromiseVoid> + "onTicketUnclaim": api.ODEvent<(ticket:ODTicket, unclaimer:discord.User, channel:discord.GuildTextBasedChannel, reason:string|null) => api.ODPromiseVoid> + "afterTicketUnclaimed": api.ODEvent<(ticket:ODTicket, unclaimer:discord.User, channel:discord.GuildTextBasedChannel, reason:string|null) => api.ODPromiseVoid> + "onTicketPin": api.ODEvent<(ticket:ODTicket, pinner:discord.User, channel:discord.GuildTextBasedChannel, reason:string|null) => api.ODPromiseVoid> + "afterTicketPinned": api.ODEvent<(ticket:ODTicket, pinner:discord.User, channel:discord.GuildTextBasedChannel, reason:string|null) => api.ODPromiseVoid> + "onTicketUnpin": api.ODEvent<(ticket:ODTicket, unpinner:discord.User, channel:discord.GuildTextBasedChannel, reason:string|null) => api.ODPromiseVoid> + "afterTicketUnpinned": api.ODEvent<(ticket:ODTicket, unpinner:discord.User, channel:discord.GuildTextBasedChannel, reason:string|null) => api.ODPromiseVoid> + "onTicketUserAdd": api.ODEvent<(ticket:ODTicket, adder:discord.User, user:discord.User, channel:discord.GuildTextBasedChannel, reason:string|null) => api.ODPromiseVoid> + "afterTicketUserAdded": api.ODEvent<(ticket:ODTicket, adder:discord.User, user:discord.User, channel:discord.GuildTextBasedChannel, reason:string|null) => api.ODPromiseVoid> + "onTicketUserRemove": api.ODEvent<(ticket:ODTicket, remover:discord.User, user:discord.User, channel:discord.GuildTextBasedChannel, reason:string|null) => api.ODPromiseVoid> + "afterTicketUserRemoved": api.ODEvent<(ticket:ODTicket, remover:discord.User, user:discord.User, channel:discord.GuildTextBasedChannel, reason:string|null) => api.ODPromiseVoid> + "onTicketRename": api.ODEvent<(ticket:ODTicket, renamer:discord.User, channel:discord.GuildTextBasedChannel, reason:string|null) => api.ODPromiseVoid> + "afterTicketRenamed": api.ODEvent<(ticket:ODTicket, renamer:discord.User, channel:discord.GuildTextBasedChannel, reason:string|null) => api.ODPromiseVoid> + "onTicketsClear": api.ODEvent<(tickets:ODTicket[], clearer:discord.User, channel:discord.GuildTextBasedChannel, filter:ODTicketClearFilter) => api.ODPromiseVoid> + "afterTicketsCleared": api.ODEvent<(tickets:ODTicket[], clearer:discord.User, channel:discord.GuildTextBasedChannel, filter:ODTicketClearFilter) => api.ODPromiseVoid> + "onTicketTopicChange": api.ODEvent<(ticket:ODTicket, changer:discord.User, channel:discord.GuildTextBasedChannel, oldTopic:string, newTopic:string) => api.ODPromiseVoid> + "afterTicketTopicChanged": api.ODEvent<(ticket:ODTicket, changer:discord.User, channel:discord.GuildTextBasedChannel, oldTopic:string, newTopic:string) => api.ODPromiseVoid> + "onTicketPriorityChange": api.ODEvent<(ticket:ODTicket, changer:discord.User, channel:discord.GuildTextBasedChannel, oldPriority:ODPriorityLevel, newPriority:ODPriorityLevel, reason:string|null) => api.ODPromiseVoid> + "afterTicketPriorityChanged": api.ODEvent<(ticket:ODTicket, changer:discord.User, channel:discord.GuildTextBasedChannel, oldPriority:ODPriorityLevel, newPriority:ODPriorityLevel, reason:string|null) => api.ODPromiseVoid> + "onTicketTransfer": api.ODEvent<(ticket:ODTicket, changer:discord.User, channel:discord.GuildTextBasedChannel, oldCreator:discord.User, newCreator:discord.User, reason:string|null) => api.ODPromiseVoid> + "afterTicketTransferred": api.ODEvent<(ticket:ODTicket, changer:discord.User, channel:discord.GuildTextBasedChannel, oldCreator:discord.User, newCreator:discord.User, reason:string|null) => api.ODPromiseVoid> + + //roles + "onRoleLoad": api.ODEvent<(roles:ODRoleManager) => api.ODPromiseVoid> + "afterRolesLoaded": api.ODEvent<(roles:ODRoleManager) => api.ODPromiseVoid> + "onRoleUpdate": api.ODEvent<(user:discord.User,role:ODRole) => api.ODPromiseVoid> + "afterRolesUpdated": api.ODEvent<(user:discord.User,role:ODRole) => api.ODPromiseVoid> + + //blacklist + "onBlacklistLoad": api.ODEvent<(blacklist:ODBlacklistManager) => api.ODPromiseVoid> + "afterBlacklistLoaded": api.ODEvent<(blacklist:ODBlacklistManager) => api.ODPromiseVoid> + + //transcripts + "onTranscriptCompilerLoad": api.ODEvent<(transcripts:ODMappedTranscriptManager) => api.ODPromiseVoid> + "afterTranscriptCompilersLoaded": api.ODEvent<(transcripts:ODMappedTranscriptManager) => api.ODPromiseVoid> + "onTranscriptHistoryLoad": api.ODEvent<(transcripts:ODMappedTranscriptManager) => api.ODPromiseVoid> + "afterTranscriptHistoryLoaded": api.ODEvent<(transcripts:ODMappedTranscriptManager) => api.ODPromiseVoid> + + //transcript creation + "onTranscriptCreate": api.ODEvent<(transcripts:ODMappedTranscriptManager,ticket:ODTicket,channel:discord.TextChannel,user:discord.User) => api.ODPromiseVoid> + "afterTranscriptCreated": api.ODEvent<(transcripts:ODMappedTranscriptManager,ticket:ODTicket,channel:discord.TextChannel,user:discord.User) => api.ODPromiseVoid> + "onTranscriptInit": api.ODEvent<(transcripts:ODMappedTranscriptManager,ticket:ODTicket,channel:discord.TextChannel,user:discord.User) => api.ODPromiseVoid> + "afterTranscriptInitiated": api.ODEvent<(transcripts:ODMappedTranscriptManager,ticket:ODTicket,channel:discord.TextChannel,user:discord.User) => api.ODPromiseVoid> + "onTranscriptCompile": api.ODEvent<(transcripts:ODMappedTranscriptManager,ticket:ODTicket,channel:discord.TextChannel,user:discord.User) => api.ODPromiseVoid> + "afterTranscriptCompiled": api.ODEvent<(transcripts:ODMappedTranscriptManager,ticket:ODTicket,channel:discord.TextChannel,user:discord.User) => api.ODPromiseVoid> + "onTranscriptReady": api.ODEvent<(transcripts:ODMappedTranscriptManager,ticket:ODTicket,channel:discord.TextChannel,user:discord.User) => api.ODPromiseVoid> + "afterTranscriptReady": api.ODEvent<(transcripts:ODMappedTranscriptManager,ticket:ODTicket,channel:discord.TextChannel,user:discord.User) => api.ODPromiseVoid> + + //plugin loading before builders + "onPluginBeforeBuilderLoad": api.ODEvent<() => api.ODPromiseVoid>, + "afterPluginBeforeBuilderLoaded": api.ODEvent<() => api.ODPromiseVoid>, + + //builders + "onButtonBuilderLoad": api.ODEvent<(buttons:ODMappedButtonManager, builders:ODMappedBuilderManager, actions:ODMappedActionManager) => api.ODPromiseVoid> + "afterButtonBuildersLoaded": api.ODEvent<(buttons:ODMappedButtonManager, builders:ODMappedBuilderManager, actions:ODMappedActionManager) => api.ODPromiseVoid> + "onDropdownBuilderLoad": api.ODEvent<(dropdowns:ODMappedDropdownManager, builders:ODMappedBuilderManager, actions:ODMappedActionManager) => api.ODPromiseVoid> + "afterDropdownBuildersLoaded": api.ODEvent<(dropdowns:ODMappedDropdownManager, builders:ODMappedBuilderManager, actions:ODMappedActionManager) => api.ODPromiseVoid> + "onFileBuilderLoad": api.ODEvent<(files:ODMappedFileManager, builders:ODMappedBuilderManager, actions:ODMappedActionManager) => api.ODPromiseVoid> + "afterFileBuildersLoaded": api.ODEvent<(files:ODMappedFileManager, builders:ODMappedBuilderManager, actions:ODMappedActionManager) => api.ODPromiseVoid> + "onEmbedBuilderLoad": api.ODEvent<(embeds:ODMappedEmbedManager, builders:ODMappedBuilderManager, actions:ODMappedActionManager) => api.ODPromiseVoid> + "afterEmbedBuildersLoaded": api.ODEvent<(embeds:ODMappedEmbedManager, builders:ODMappedBuilderManager, actions:ODMappedActionManager) => api.ODPromiseVoid> + "onMessageBuilderLoad": api.ODEvent<(messages:ODMappedMessageManager, builders:ODMappedBuilderManager, actions:ODMappedActionManager) => api.ODPromiseVoid> + "afterMessageBuildersLoaded": api.ODEvent<(messages:ODMappedMessageManager, builders:ODMappedBuilderManager, actions:ODMappedActionManager) => api.ODPromiseVoid> + "onModalBuilderLoad": api.ODEvent<(modals:ODMappedModalManager, builders:ODMappedBuilderManager, actions:ODMappedActionManager) => api.ODPromiseVoid> + "afterModalBuildersLoaded": api.ODEvent<(modals:ODMappedModalManager, builders:ODMappedBuilderManager, actions:ODMappedActionManager) => api.ODPromiseVoid> + + //plugin loading before responders + "onPluginBeforeResponderLoad": api.ODEvent<() => api.ODPromiseVoid>, + "afterPluginBeforeResponderLoaded": api.ODEvent<() => api.ODPromiseVoid>, + + //responders + "onCommandResponderLoad": api.ODEvent<(commands:ODMappedCommandResponderManager, responders:ODMappedResponderManager, actions:ODMappedActionManager) => api.ODPromiseVoid> + "afterCommandRespondersLoaded": api.ODEvent<(commands:ODMappedCommandResponderManager, responders:ODMappedResponderManager, actions:ODMappedActionManager) => api.ODPromiseVoid> + "onButtonResponderLoad": api.ODEvent<(buttons:ODMappedButtonResponderManager, responders:ODMappedResponderManager, actions:ODMappedActionManager) => api.ODPromiseVoid> + "afterButtonRespondersLoaded": api.ODEvent<(buttons:ODMappedButtonResponderManager, responders:ODMappedResponderManager, actions:ODMappedActionManager) => api.ODPromiseVoid> + "onDropdownResponderLoad": api.ODEvent<(dropdowns:ODMappedDropdownResponderManager, responders:ODMappedResponderManager, actions:ODMappedActionManager) => api.ODPromiseVoid> + "afterDropdownRespondersLoaded": api.ODEvent<(dropdowns:ODMappedDropdownResponderManager, responders:ODMappedResponderManager, actions:ODMappedActionManager) => api.ODPromiseVoid> + "onModalResponderLoad": api.ODEvent<(modals:ODMappedModalResponderManager, responders:ODMappedResponderManager, actions:ODMappedActionManager) => api.ODPromiseVoid> + "afterModalRespondersLoaded": api.ODEvent<(modals:ODMappedModalResponderManager, responders:ODMappedResponderManager, actions:ODMappedActionManager) => api.ODPromiseVoid> + "onContextMenuResponderLoad": api.ODEvent<(menus:ODMappedContextMenuResponderManager, responders:ODMappedResponderManager, actions:ODMappedActionManager) => api.ODPromiseVoid> + "afterContextMenuRespondersLoaded": api.ODEvent<(menus:ODMappedContextMenuResponderManager, responders:ODMappedResponderManager, actions:ODMappedActionManager) => api.ODPromiseVoid> + "onAutocompleteResponderLoad": api.ODEvent<(autocomplete:ODMappedAutocompleteResponderManager, responders:ODMappedResponderManager, actions:ODMappedActionManager) => api.ODPromiseVoid> + "afterAutocompleteRespondersLoaded": api.ODEvent<(autocomplete:ODMappedAutocompleteResponderManager, responders:ODMappedResponderManager, actions:ODMappedActionManager) => api.ODPromiseVoid> + + //plugin loading before finalizations + "onPluginBeforeFinalizationLoad": api.ODEvent<() => api.ODPromiseVoid>, + "afterPluginBeforeFinalizationLoaded": api.ODEvent<() => api.ODPromiseVoid>, + + //actions + "onActionLoad": api.ODEvent<(actions:ODMappedActionManager) => api.ODPromiseVoid> + "afterActionsLoaded": api.ODEvent<(actions:ODMappedActionManager) => api.ODPromiseVoid> + + //verifybars + "onVerifyBarLoad": api.ODEvent<(verifybars:ODMappedVerifyBarManager) => api.ODPromiseVoid> + "afterVerifyBarsLoaded": api.ODEvent<(verifybars:ODMappedVerifyBarManager) => api.ODPromiseVoid> + + //permissions + "onPermissionLoad": api.ODEvent<(permissions:ODMappedPermissionManager) => api.ODPromiseVoid> + "afterPermissionsLoaded": api.ODEvent<(permissions:ODMappedPermissionManager) => api.ODPromiseVoid> + + //posts + "onPostLoad": api.ODEvent<(posts:ODMappedPostManager) => api.ODPromiseVoid> + "afterPostsLoaded": api.ODEvent<(posts:ODMappedPostManager) => api.ODPromiseVoid> + "onPostInit": api.ODEvent<(posts:ODMappedPostManager) => api.ODPromiseVoid> + "afterPostsInitiated": api.ODEvent<(posts:ODMappedPostManager) => api.ODPromiseVoid> + + //cooldowns + "onCooldownLoad": api.ODEvent<(cooldowns:ODMappedCooldownManager) => api.ODPromiseVoid> + "afterCooldownsLoaded": api.ODEvent<(cooldowns:ODMappedCooldownManager) => api.ODPromiseVoid> + "onCooldownInit": api.ODEvent<(cooldowns:ODMappedCooldownManager) => api.ODPromiseVoid> + "afterCooldownsInitiated": api.ODEvent<(cooldowns:ODMappedCooldownManager) => api.ODPromiseVoid> + + //help menu + "onHelpMenuCategoryLoad": api.ODEvent<(menu:ODMappedHelpMenuManager) => api.ODPromiseVoid> + "afterHelpMenuCategoriesLoaded": api.ODEvent<(menu:ODMappedHelpMenuManager) => api.ODPromiseVoid> + "onHelpMenuComponentLoad": api.ODEvent<(menu:ODMappedHelpMenuManager) => api.ODPromiseVoid> + "afterHelpMenuComponentsLoaded": api.ODEvent<(menu:ODMappedHelpMenuManager) => api.ODPromiseVoid> + + //stats + "onStatisticScopeLoad": api.ODEvent<(stats:ODMappedStatisticManager) => api.ODPromiseVoid> + "afterStatisticScopesLoaded": api.ODEvent<(stats:ODMappedStatisticManager) => api.ODPromiseVoid> + "onStatisticLoad": api.ODEvent<(stats:ODMappedStatisticManager) => api.ODPromiseVoid> + "afterStatisticsLoaded": api.ODEvent<(stats:ODMappedStatisticManager) => api.ODPromiseVoid> + "onStatisticInit": api.ODEvent<(stats:ODMappedStatisticManager) => api.ODPromiseVoid> + "afterStatisticsInitiated": api.ODEvent<(stats:ODMappedStatisticManager) => api.ODPromiseVoid> + + //plugin loading before code + "onPluginBeforeCodeLoad": api.ODEvent<() => api.ODPromiseVoid>, + "afterPluginBeforeCodeLoaded": api.ODEvent<() => api.ODPromiseVoid>, + + //code + "onCodeLoad": api.ODEvent<(code:ODMappedCodeManager) => api.ODPromiseVoid> + "afterCodeLoaded": api.ODEvent<(code:ODMappedCodeManager) => api.ODPromiseVoid> + "onCodeExecute": api.ODEvent<(code:ODMappedCodeManager) => api.ODPromiseVoid> + "afterCodeExecuted": api.ODEvent<(code:ODMappedCodeManager) => api.ODPromiseVoid> + + //livestatus + "onLiveStatusSourceLoad": api.ODEvent<(livestatus:ODMappedLiveStatusManager) => api.ODPromiseVoid> + "afterLiveStatusSourcesLoaded": api.ODEvent<(livestatus:ODMappedLiveStatusManager) => api.ODPromiseVoid> + + //startscreen + "onStartScreenLoad": api.ODEvent<(startscreen:ODMappedStartScreenManager) => api.ODPromiseVoid> + "afterStartScreensLoaded": api.ODEvent<(startscreen:ODMappedStartScreenManager) => api.ODPromiseVoid> + "onStartScreenRender": api.ODEvent<(startscreen:ODMappedStartScreenManager) => api.ODPromiseVoid> + "afterStartScreensRendered": api.ODEvent<(startscreen:ODMappedStartScreenManager) => api.ODPromiseVoid> + + //ready + "beforeReadyForUsage": api.ODEvent<() => api.ODPromiseVoid> + "onReadyForUsage": api.ODEvent<() => api.ODPromiseVoid> +} + +/**## ODMappedEventManager `class + * A special class with types for the Open Ticket `ODEventManager` class. + */ +export class ODMappedEventManager extends api.ODEventManager {} \ No newline at end of file diff --git a/src/core/mappings/flag.ts b/src/core/mappings/flag.ts new file mode 100644 index 0000000..ac5600a --- /dev/null +++ b/src/core/mappings/flag.ts @@ -0,0 +1,32 @@ +/////////////////////////////////////// +//OPEN TICKET PROCESS MAPPINGS +/////////////////////////////////////// +import * as api from "@open-discord-bots/framework/api" + +/**## ODFlagManagerIdMappings `interface` + * A list of all available IDs in the default `ODFlagManager` class in `opendiscord`. + * It's used to generate typescript declarations for this class. + */ +export interface ODFlagManagerIdMappings extends api.ODFlagManagerIdConstraint { + "opendiscord:no-migration":api.ODFlag, + "opendiscord:dev-config":api.ODFlag, + "opendiscord:dev-database":api.ODFlag, + "opendiscord:debug":api.ODFlag, + "opendiscord:crash":api.ODFlag, + "opendiscord:no-transcripts":api.ODFlag, + "opendiscord:no-checker":api.ODFlag, + "opendiscord:checker":api.ODFlag, + "opendiscord:no-easter":api.ODFlag, + "opendiscord:no-plugins":api.ODFlag, + "opendiscord:soft-plugins":api.ODFlag, + "opendiscord:force-slash-update":api.ODFlag, + "opendiscord:no-compile":api.ODFlag, + "opendiscord:compile-only":api.ODFlag, + "opendiscord:silent":api.ODFlag, + "opendiscord:cli":api.ODFlag, +} + +/**## ODMappedFlagManager `class + * A special class with types for the Open Ticket `ODFlagManager` class. + */ +export class ODMappedFlagManager extends api.ODFlagManager {} \ No newline at end of file diff --git a/src/core/api/defaults/fuse.ts b/src/core/mappings/fuse.ts similarity index 97% rename from src/core/api/defaults/fuse.ts rename to src/core/mappings/fuse.ts index bf77248..180f5af 100644 --- a/src/core/api/defaults/fuse.ts +++ b/src/core/mappings/fuse.ts @@ -1,5 +1,5 @@ /////////////////////////////////////// -//DEFAULT FUSE MODULE +//OPEN TICKET FUSE MAPPINGS /////////////////////////////////////// import * as api from "@open-discord-bots/framework/api" diff --git a/src/core/mappings/helpmenu.ts b/src/core/mappings/helpmenu.ts new file mode 100644 index 0000000..b537e13 --- /dev/null +++ b/src/core/mappings/helpmenu.ts @@ -0,0 +1,151 @@ +/////////////////////////////////////// +//OPEN TICKET HELP MAPPINGS +/////////////////////////////////////// +import * as api from "@open-discord-bots/framework/api" + +/** (CONTRIBUTOR GUIDE) HOW TO ADD NEW COMMANDS? + * - Register the command in loadAllSlashCommands() & loadAllTextCommands() in (./src/data/framework/commandLoader.ts) + * - Add autocomplete for the command in OD(Slash/Text)CommandManagerIds_Default in (./src/core/api/defaults/client.ts) + * - Add the command to the help menu in (./src/data/framework/helpMenuLoader.ts) + * - If required, new config variables should be added (incl. logs, dm-logs & permissions). + * - Update the Open Ticket Documentation. + * - If the command contains complex logic or can be executed from a button/dropdown, it should be placed inside an `ODAction`. + * - Check all files, test the bot carefully & try a lot of different scenario's with different settings. + */ + +/**## ODHelpMenuManagerIdMappings `interface` + * A list of all available IDs in the default `ODHelpMenuManager` class in `opendiscord`. + * It's used to generate typescript declarations for this class. + */ +export interface ODHelpMenuManagerIdMappings extends api.ODHelpMenuManagerIdConstraint { + "opendiscord:general":ODGeneralHelpMenuCategory, + "opendiscord:ticket-basic":ODBasicTicketHelpMenuCategory, + "opendiscord:ticket-advanced":ODAdvancedTicketHelpMenuCategory, + "opendiscord:ticket-user":ODUserTicketHelpMenuCategory, + "opendiscord:admin":ODAdminHelpMenuCategory, + "opendiscord:advanced":ODAdvancedHelpMenuCategory, + "opendiscord:extra":ODExtraHelpMenuCategory +} + +/**## ODMappedHelpMenuManager `class + * A special class with types for the Open Ticket `ODHelpMenuManager` class. + */ +export class ODMappedHelpMenuManager extends api.ODHelpMenuManager {} + +/**## ODGeneralHelpMenuCategory `class + * A special class with types for the Open Ticket `General Commands` help menu category. + */ +export class ODGeneralHelpMenuCategory extends api.ODHelpMenuCategory {} + +/**## ODBasicTicketHelpMenuCategory `class + * A special class with types for the Open Ticket `Basic Ticket Commands` help menu category. + */ +export class ODBasicTicketHelpMenuCategory extends api.ODHelpMenuCategory {} + +/**## ODAdvancedTicketHelpMenuCategory `class + * A special class with types for the Open Ticket `Advanced Ticket Commands` help menu category. + */ +export class ODAdvancedTicketHelpMenuCategory extends api.ODHelpMenuCategory {} + +/**## ODUserTicketHelpMenuCategory `class + * A special class with types for the Open Ticket `User ticket Commands` help menu category. + */ +export class ODUserTicketHelpMenuCategory extends api.ODHelpMenuCategory {} + +/**## ODAdminHelpMenuCategory `class + * A special class with types for the Open Ticket `Admin Commands` help menu category. + */ +export class ODAdminHelpMenuCategory extends api.ODHelpMenuCategory {} + +/**## ODAdvancedHelpMenuCategory `class + * A special class with types for the Open Ticket `Advanced Commands` help menu category. + */ +export class ODAdvancedHelpMenuCategory extends api.ODHelpMenuCategory {} + +/**## ODExtraHelpMenuCategory `class + * A special class with types for the Open Ticket `Extra Commands` help menu category. + */ +export class ODExtraHelpMenuCategory extends api.ODHelpMenuCategory {} + +///////////////////////////////////////// +// HELP MENU MAPPINGS, CATEGORIES & TYPES +///////////////////////////////////////// + +/**## ODGeneralHelpMenuCategoryIdMappings `interface` + * A list of all available IDs in the default `ODGeneralHelpMenuCategory` class in `opendiscord`. + * It's used to generate typescript declarations for this class. + */ +export interface ODGeneralHelpMenuCategoryIdMappings extends api.ODHelpMenuCategoryIdConstraint { + "opendiscord:help":api.ODHelpMenuCommandComponent, + "opendiscord:ticket":api.ODHelpMenuCommandComponent|null +} + +/**## ODBasicTicketHelpMenuCategoryIdMappings `interface` + * A list of all available IDs in the default `ODBasicTicketHelpMenuCategory` class in `opendiscord`. + * It's used to generate typescript declarations for this class. + */ +export interface ODBasicTicketHelpMenuCategoryIdMappings extends api.ODHelpMenuCategoryIdConstraint { + "opendiscord:close":api.ODHelpMenuCommandComponent, + "opendiscord:delete":api.ODHelpMenuCommandComponent, + "opendiscord:reopen":api.ODHelpMenuCommandComponent +} + +/**## ODAdvancedTicketHelpMenuCategoryIdMappings `interface` + * A list of all available IDs in the default `ODAdvancedTicketHelpMenuCategory` class in `opendiscord`. + * It's used to generate typescript declarations for this class. + */ +export interface ODAdvancedTicketHelpMenuCategoryIdMappings extends api.ODHelpMenuCategoryIdConstraint { + "opendiscord:pin":api.ODHelpMenuCommandComponent, + "opendiscord:unpin":api.ODHelpMenuCommandComponent, + "opendiscord:move":api.ODHelpMenuCommandComponent, + "opendiscord:rename":api.ODHelpMenuCommandComponent +} + +/**## ODUserTicketHelpMenuCategoryIdMappings `interface` + * A list of all available IDs in the default `ODUserTicketHelpMenuCategory` class in `opendiscord`. + * It's used to generate typescript declarations for this class. + */ +export interface ODUserTicketHelpMenuCategoryIdMappings extends api.ODHelpMenuCategoryIdConstraint { + "opendiscord:claim":api.ODHelpMenuCommandComponent, + "opendiscord:unclaim":api.ODHelpMenuCommandComponent, + "opendiscord:add":api.ODHelpMenuCommandComponent, + "opendiscord:remove":api.ODHelpMenuCommandComponent, + "opendiscord:transfer":api.ODHelpMenuCommandComponent, +} + +/**## ODAdminHelpMenuCategoryIdMappings `interface` + * A list of all available IDs in the default `ODAdminHelpMenuCategory` class in `opendiscord`. + * It's used to generate typescript declarations for this class. + */ +export interface ODAdminHelpMenuCategoryIdMappings extends api.ODHelpMenuCategoryIdConstraint { + "opendiscord:panel":api.ODHelpMenuCommandComponent, + "opendiscord:blacklist-view":api.ODHelpMenuCommandComponent, + "opendiscord:blacklist-add":api.ODHelpMenuCommandComponent, + "opendiscord:blacklist-remove":api.ODHelpMenuCommandComponent, + "opendiscord:blacklist-get":api.ODHelpMenuCommandComponent +} + +/**## ODAdvancedHelpMenuCategoryIdMappings `interface` + * A list of all available IDs in the default `ODAdvancedHelpMenuCategory` class in `opendiscord`. + * It's used to generate typescript declarations for this class. + */ +export interface ODAdvancedHelpMenuCategoryIdMappings extends api.ODHelpMenuCategoryIdConstraint { + "opendiscord:stats-global":api.ODHelpMenuCommandComponent, + "opendiscord:stats-reset":api.ODHelpMenuCommandComponent, + "opendiscord:stats-ticket":api.ODHelpMenuCommandComponent, + "opendiscord:stats-user":api.ODHelpMenuCommandComponent, + "opendiscord:autoclose-disable":api.ODHelpMenuCommandComponent, + "opendiscord:autoclose-enable":api.ODHelpMenuCommandComponent, + "opendiscord:autodelete-disable":api.ODHelpMenuCommandComponent, + "opendiscord:autodelete-enable":api.ODHelpMenuCommandComponent, + "opendiscord:topic-set":api.ODHelpMenuCommandComponent, + "opendiscord:priority-set":api.ODHelpMenuCommandComponent, +} + +/**## ODExtraHelpMenuCategoryIdMappings `interface` + * A list of all available IDs in the default `ODExtraHelpMenuCategory` class in `opendiscord`. + * It's used to generate typescript declarations for this class. + */ +export interface ODExtraHelpMenuCategoryIdMappings extends api.ODHelpMenuCategoryIdConstraint { + //"opendiscord:help-component":api.ODHelpMenuCommandComponent +} \ No newline at end of file diff --git a/src/core/api/defaults/language.ts b/src/core/mappings/language.ts similarity index 89% rename from src/core/api/defaults/language.ts rename to src/core/mappings/language.ts index 5595253..9f40264 100644 --- a/src/core/api/defaults/language.ts +++ b/src/core/mappings/language.ts @@ -1,5 +1,5 @@ /////////////////////////////////////// -//DEFAULT LANGUAGE MODULE +//OPEN TICKET LANGUAGE MAPPINGS /////////////////////////////////////// import * as api from "@open-discord-bots/framework/api" @@ -12,11 +12,11 @@ import * as api from "@open-discord-bots/framework/api" * - Update the Open Ticket Documentation. */ -/**## ODLanguageManagerIds_Default `interface` - * This interface is a list of ids available in the `ODLanguageManager_Default` class. +/**## ODLanguageManagerIdMappings `interface` + * A list of all available IDs in the default `ODLanguageManager` class in `opendiscord`. * It's used to generate typescript declarations for this class. */ -export interface ODLanguageManagerIds_Default { +export interface ODLanguageManagerIdMappings extends api.ODLanguageManagerIdConstraint { "opendiscord:custom":api.ODLanguage, "opendiscord:english":api.ODLanguage, "opendiscord:dutch":api.ODLanguage, @@ -58,11 +58,11 @@ export interface ODLanguageManagerIds_Default { //ADD NEW LANGUAGES HERE!!! } -/**## ODLanguageManagerTranslations_Default `type` - * This interface is a list of ids available in the `ODLanguageManager_Default` class. +/**## ODLanguageManagerTranslationIdMappings `type` + * A list of all available translation IDs in the default `ODLanguageManager` class in `opendiscord`. * It's used to generate typescript declarations for this class. */ -export type ODLanguageManagerTranslations_Default = ( +export type ODLanguageManagerTranslationIdMappings = ( "checker.system.headerOpenTicket"| "checker.system.typeError"| "checker.system.typeWarning"| @@ -622,59 +622,7 @@ export type ODLanguageManagerTranslations_Default = ( "priorities.none" ) -/**## ODLanguageManager_Default `default_class` - * This is a special class that adds type definitions & typescript to the ODLanguageManager class. - * It doesn't add any extra features! - * - * This default class is made for the global variable `opendiscord.languages`! +/**## ODMappedLanguageManager `class + * A special class with types for the Open Ticket `ODLanguageManager` class. */ -export class ODLanguageManager_Default extends api.ODLanguageManager { - get(id:LanguageId): ODLanguageManagerIds_Default[LanguageId] - get(id:api.ODValidId): api.ODLanguage|null - - get(id:api.ODValidId): api.ODLanguage|null { - return super.get(id) - } - - remove(id:LanguageId): ODLanguageManagerIds_Default[LanguageId] - remove(id:api.ODValidId): api.ODLanguage|null - - remove(id:api.ODValidId): api.ODLanguage|null { - return super.remove(id) - } - - exists(id:keyof ODLanguageManagerIds_Default): boolean - exists(id:api.ODValidId): boolean - - exists(id:api.ODValidId): boolean { - return super.exists(id) - } - - getTranslation(id:ODLanguageManagerTranslations_Default): string - getTranslation(id:string): string|null - - getTranslation(id:string): string|null { - return super.getTranslation(id) - } - - setCurrentLanguage(id:keyof ODLanguageManagerIds_Default): void - setCurrentLanguage(id:api.ODValidId): void - - setCurrentLanguage(id:api.ODValidId): void { - return super.setCurrentLanguage(id) - } - - setBackupLanguage(id:keyof ODLanguageManagerIds_Default): void - setBackupLanguage(id:api.ODValidId): void - - setBackupLanguage(id:api.ODValidId): void { - return super.setBackupLanguage(id) - } - - getTranslationWithParams(id:ODLanguageManagerTranslations_Default, params:string[]): string - getTranslationWithParams(id:string, params:string[]): string|null - - getTranslationWithParams(id:string, params:string[]): string|null { - return super.getTranslationWithParams(id,params) - } -} \ No newline at end of file +export class ODMappedLanguageManager extends api.ODLanguageManager {} \ No newline at end of file diff --git a/src/core/mappings/permission.ts b/src/core/mappings/permission.ts new file mode 100644 index 0000000..31a5e38 --- /dev/null +++ b/src/core/mappings/permission.ts @@ -0,0 +1,30 @@ +/////////////////////////////////////// +//OPEN TICKET PERMISSION MAPPINGS +/////////////////////////////////////// +import * as api from "@open-discord-bots/framework/api" + +/**## ODPermissionManagerIdMappings `interface` + * A list of all available IDs in the default `ODPermissionManager` class in `opendiscord`. + * It's used to generate typescript declarations for this class. + */ +export interface ODPermissionManagerIdMappings extends api.ODPermissionManagerIdConstraint { + //"opendiscord:test-permission":api.ODPermission +} + +/**## ODMappedPermissionManager `class + * A special class with types for the Open Ticket `ODPermissionManager` class. + */ +export class ODMappedPermissionManager extends api.ODPermissionManager {} + +/**## ODPermissionEmbedType `type` + * A collection of all types available in the `opendiscord:no-permissions` embed. + */ +export type ODPermissionEmbedType = ( + "developer"| + "owner"| + "admin"| + "moderator"| + "support"| + "member"| + "discord-administrator" +) \ No newline at end of file diff --git a/src/core/mappings/plugin.ts b/src/core/mappings/plugin.ts new file mode 100644 index 0000000..e67e05d --- /dev/null +++ b/src/core/mappings/plugin.ts @@ -0,0 +1,30 @@ +/////////////////////////////////////// +//OPEN TICKET POST MAPPINGS +/////////////////////////////////////// +import * as api from "@open-discord-bots/framework/api" + +/**## ODPluginManagerIdMappings `interface` + * A list of all available IDs in the default `ODPluginManager` class in `opendiscord`. + * It's used to generate typescript declarations for this class. + */ +export interface ODPluginManagerIdMappings extends api.ODPluginManagerIdConstraint { + //"opendiscord:example-plugin":api.ODPlugin +} + +/**## ODPluginClassManagerIdMappings `interface` + * A list of all available IDs in the default `ODPluginClassManager` class in `opendiscord`. + * It's used to generate typescript declarations for this class. + */ +export interface ODPluginClassManagerIdMappings extends api.ODPluginClassManagerIdConstraint { + //"opendiscord:example-plugin":any +} + +/**## ODMappedPluginManager `class + * A special class with types for the Open Ticket `ODPluginManager` class. + */ +export class ODMappedPluginManager extends api.ODPluginManager {} + +/**## ODMappedPluginClassManager `class + * A special class with types for the Open Ticket `ODPluginClassManager` class. + */ +export class ODMappedPluginClassManager extends api.ODPluginClassManager {} \ No newline at end of file diff --git a/src/core/mappings/post.ts b/src/core/mappings/post.ts new file mode 100644 index 0000000..1498945 --- /dev/null +++ b/src/core/mappings/post.ts @@ -0,0 +1,19 @@ +/////////////////////////////////////// +//OPEN TICKET POST MAPPINGS +/////////////////////////////////////// +import * as api from "@open-discord-bots/framework/api" +import * as discord from "discord.js" + +/**## ODPostManagerIdMappings `interface` + * A list of all available IDs in the default `ODPostManager` class in `opendiscord`. + * It's used to generate typescript declarations for this class. + */ +export interface ODPostManagerIdMappings extends api.ODPostManagerIdConstraint { + "opendiscord:logs":api.ODPost|null, + "opendiscord:transcripts":api.ODPost|null +} + +/**## ODMappedPostManager `class + * A special class with types for the Open Ticket `ODPostManager` class. + */ +export class ODMappedPostManager extends api.ODPostManager {} \ No newline at end of file diff --git a/src/core/mappings/progressbar.ts b/src/core/mappings/progressbar.ts new file mode 100644 index 0000000..cfaa130 --- /dev/null +++ b/src/core/mappings/progressbar.ts @@ -0,0 +1,40 @@ +/////////////////////////////////////// +//OPEN TICKET PROGRESS BAR MAPPINGS +/////////////////////////////////////// +import * as api from "@open-discord-bots/framework/api" + +/**## ODProgressBarManagerIdMappings `interface` + * A list of all available IDs in the default `ODProgressBarManager` class in `opendiscord`. + * It's used to generate typescript declarations for this class. + */ +export interface ODProgressBarManagerIdMappings extends api.ODProgressBarManagerIdConstraint { + "opendiscord:slash-command-remove":api.ODManualProgressBar, + "opendiscord:slash-command-create":api.ODManualProgressBar, + "opendiscord:slash-command-update":api.ODManualProgressBar, + "opendiscord:context-menu-remove":api.ODManualProgressBar, + "opendiscord:context-menu-create":api.ODManualProgressBar, + "opendiscord:context-menu-update":api.ODManualProgressBar, +} + +/**## ODProgressBarRendererManagerIdMappings `interface` + * A list of all available IDs in the default `ODProgressBarRendererManager` class in `opendiscord`. + * It's used to generate typescript declarations for this class. + */ +export interface ODProgressBarRendererManagerIdMappings extends api.ODProgressBarRendererManagerIdConstraint { + "opendiscord:value-renderer":api.ODDefaultProgressBarRenderer, + "opendiscord:fraction-renderer":api.ODDefaultProgressBarRenderer, + "opendiscord:percentage-renderer":api.ODDefaultProgressBarRenderer, + "opendiscord:time-ms-renderer":api.ODDefaultProgressBarRenderer, + "opendiscord:time-sec-renderer":api.ODDefaultProgressBarRenderer, + "opendiscord:time-min-renderer":api.ODDefaultProgressBarRenderer, +} + +/**## ODMappedProgressBarManager `class + * A special class with types for the Open Ticket `ODProgressBarManager` class. + */ +export class ODMappedProgressBarManager extends api.ODProgressBarManager {} + +/**## ODMappedProgressBarRendererManager `class + * A special class with types for the Open Ticket `ODProgressBarRendererManager` class. + */ +export class ODMappedProgressBarRendererManager extends api.ODProgressBarRendererManager {} \ No newline at end of file diff --git a/src/core/mappings/responder.ts b/src/core/mappings/responder.ts new file mode 100644 index 0000000..e03d9a6 --- /dev/null +++ b/src/core/mappings/responder.ts @@ -0,0 +1,139 @@ +/////////////////////////////////////// +//OPEN TICKET RESPONDER MAPPINGS +/////////////////////////////////////// +import * as api from "@open-discord-bots/framework/api" + +/**## ODCommandResponderManagerIdMappings `interface` + * A list of all available IDs in the default `ODCommandResponderManager` class in `opendiscord`. + * It's used to generate typescript declarations for this class. + */ +export interface ODCommandResponderManagerIdMappings extends api.ODCommandResponderManagerIdConstraint { + "opendiscord:help":{source:"slash"|"text",params:{},workers:"opendiscord:permissions"|"opendiscord:help"|"opendiscord:logs"}, + "opendiscord:stats":{source:"slash"|"text",params:{},workers:"opendiscord:permissions"|"opendiscord:stats"|"opendiscord:logs"}, + "opendiscord:panel":{source:"slash"|"text",params:{},workers:"opendiscord:permissions"|"opendiscord:panel"|"opendiscord:logs"}, + "opendiscord:ticket":{source:"slash"|"text",params:{},workers:"opendiscord:permissions"|"opendiscord:ticket"|"opendiscord:logs"}, + "opendiscord:blacklist":{source:"slash"|"text",params:{},workers:"opendiscord:permissions"|"opendiscord:blacklist"|"opendiscord:discord-logs"|"opendiscord:logs"}, + + "opendiscord:close":{source:"slash"|"text",params:{},workers:"opendiscord:permissions"|"opendiscord:close"|"opendiscord:logs"}, + "opendiscord:reopen":{source:"slash"|"text",params:{},workers:"opendiscord:permissions"|"opendiscord:reopen"|"opendiscord:logs"}, + "opendiscord:delete":{source:"slash"|"text",params:{},workers:"opendiscord:permissions"|"opendiscord:delete"|"opendiscord:logs"}, + "opendiscord:claim":{source:"slash"|"text",params:{},workers:"opendiscord:permissions"|"opendiscord:claim"|"opendiscord:logs"}, + "opendiscord:unclaim":{source:"slash"|"text",params:{},workers:"opendiscord:permissions"|"opendiscord:unclaim"|"opendiscord:logs"}, + "opendiscord:pin":{source:"slash"|"text",params:{},workers:"opendiscord:permissions"|"opendiscord:pin"|"opendiscord:logs"}, + "opendiscord:unpin":{source:"slash"|"text",params:{},workers:"opendiscord:permissions"|"opendiscord:unpin"|"opendiscord:logs"}, + + "opendiscord:rename":{source:"slash"|"text",params:{},workers:"opendiscord:permissions"|"opendiscord:rename"|"opendiscord:logs"}, + "opendiscord:move":{source:"slash"|"text",params:{},workers:"opendiscord:permissions"|"opendiscord:move"|"opendiscord:logs"}, + "opendiscord:add":{source:"slash"|"text",params:{},workers:"opendiscord:permissions"|"opendiscord:add"|"opendiscord:logs"}, + "opendiscord:remove":{source:"slash"|"text",params:{},workers:"opendiscord:permissions"|"opendiscord:remove"|"opendiscord:logs"}, + "opendiscord:clear":{source:"slash"|"text",params:{},workers:"opendiscord:permissions"|"opendiscord:clear"|"opendiscord:logs"}, + "opendiscord:topic":{source:"slash"|"text",params:{},workers:"opendiscord:permissions"|"opendiscord:topic"|"opendiscord:logs"}, + "opendiscord:priority":{source:"slash"|"text",params:{},workers:"opendiscord:permissions"|"opendiscord:priority"|"opendiscord:logs"}, + "opendiscord:transfer":{source:"slash"|"text",params:{},workers:"opendiscord:permissions"|"opendiscord:transfer"|"opendiscord:logs"}, + + "opendiscord:autoclose":{source:"slash"|"text",params:{},workers:"opendiscord:permissions"|"opendiscord:autoclose"|"opendiscord:logs"}, + "opendiscord:autodelete":{source:"slash"|"text",params:{},workers:"opendiscord:permissions"|"opendiscord:autodelete"|"opendiscord:logs"}, +} + +/**## ODButtonResponderManagerIdMappings `interface` + * A list of all available IDs in the default `ODButtonResponderManager` class in `opendiscord`. + * It's used to generate typescript declarations for this class. + */ +export interface ODButtonResponderManagerIdMappings extends api.ODButtonResponderManagerIdConstraint { + "opendiscord:verifybar-success":{source:"button",params:{},workers:"opendiscord:handle-verifybar"}, + "opendiscord:verifybar-failure":{source:"button",params:{},workers:"opendiscord:handle-verifybar"}, + + "opendiscord:help-menu-switch":{source:"button",params:{},workers:"opendiscord:update-help-menu"}, + "opendiscord:help-menu-previous":{source:"button",params:{},workers:"opendiscord:update-help-menu"}, + "opendiscord:help-menu-next":{source:"button",params:{},workers:"opendiscord:update-help-menu"}, + + "opendiscord:ticket-option":{source:"button",params:{},workers:"opendiscord:ticket-option"}, + "opendiscord:role-option":{source:"button",params:{},workers:"opendiscord:role-option"}, + + "opendiscord:claim-ticket":{source:"button",params:{},workers:"opendiscord:claim-ticket"}, + "opendiscord:unclaim-ticket":{source:"button",params:{},workers:"opendiscord:unclaim-ticket"}, + "opendiscord:pin-ticket":{source:"button",params:{},workers:"opendiscord:pin-ticket"}, + "opendiscord:unpin-ticket":{source:"button",params:{},workers:"opendiscord:unpin-ticket"}, + "opendiscord:close-ticket":{source:"button",params:{},workers:"opendiscord:close-ticket"}, + "opendiscord:reopen-ticket":{source:"button",params:{},workers:"opendiscord:reopen-ticket"}, + "opendiscord:delete-ticket":{source:"button",params:{},workers:"opendiscord:delete-ticket"}, + + "opendiscord:transcript-error-retry":{source:"button",params:{},workers:"opendiscord:permissions"|"opendiscord:delete-ticket"|"opendiscord:logs"}, + "opendiscord:transcript-error-continue":{source:"button",params:{},workers:"opendiscord:permissions"|"opendiscord:delete-ticket"|"opendiscord:logs"}, + "opendiscord:clear-continue":{source:"button",params:{},workers:"opendiscord:clear-continue"}, +} + +/**## ODDropdownResponderManagerIdMappings `interface` + * A list of all available IDs in the default `ODDropdownResponderManager` class in `opendiscord`. + * It's used to generate typescript declarations for this class. + */ +export interface ODDropdownResponderManagerIdMappings extends api.ODDropdownResponderManagerIdConstraint { + "opendiscord:panel-dropdown-tickets":{source:"dropdown",params:{},workers:"opendiscord:panel-dropdown-tickets"}, +} + +/**## ODModalResponderManagerIdMappings `interface` + * A list of all available IDs in the default `ODModalResponderManager` class in `opendiscord`. + * It's used to generate typescript declarations for this class. + */ +export interface ODModalResponderManagerIdMappings extends api.ODModalResponderManagerIdConstraint { + "opendiscord:ticket-questions":{source:"modal",params:{},workers:"opendiscord:ticket-questions"}, + "opendiscord:close-ticket-reason":{source:"modal",params:{},workers:"opendiscord:close-ticket-reason"}, + "opendiscord:reopen-ticket-reason":{source:"modal",params:{},workers:"opendiscord:reopen-ticket-reason"}, + "opendiscord:delete-ticket-reason":{source:"modal",params:{},workers:"opendiscord:delete-ticket-reason"}, + "opendiscord:claim-ticket-reason":{source:"modal",params:{},workers:"opendiscord:claim-ticket-reason"}, + "opendiscord:unclaim-ticket-reason":{source:"modal",params:{},workers:"opendiscord:unclaim-ticket-reason"}, + "opendiscord:pin-ticket-reason":{source:"modal",params:{},workers:"opendiscord:pin-ticket-reason"}, + "opendiscord:unpin-ticket-reason":{source:"modal",params:{},workers:"opendiscord:unpin-ticket-reason"}, +} + +/**## ODContextMenuResponderManagerIdMappings `interface` + * A list of all available IDs in the default `ODContextMenuResponderManager` class in `opendiscord`. + * It's used to generate typescript declarations for this class. + */ +export interface ODContextMenuResponderManagerIdMappings extends api.ODContextMenuResponderManagerIdConstraint { + //"opendiscord:example":{source:"context-menu",params:{},workers:"opendiscord:example"}, +} + +/**## ODAutocompleteResponderManagerIdMappings `interface` + * A list of all available IDs in the default `ODAutocompleteResponderManager` class in `opendiscord`. + * It's used to generate typescript declarations for this class. + */ +export interface ODAutocompleteResponderManagerIdMappings extends api.ODAutocompleteResponderManagerIdConstraint { + "opendiscord:panel-id":{source:"autocomplete",params:{},workers:"opendiscord:panel-id"}, + "opendiscord:option-id":{source:"autocomplete",params:{},workers:"opendiscord:option-id"} +} + +/**## ODMappedCommandResponderManager `class + * A special class with types for the Open Ticket `ODCommandResponderManager` class. + */ +export class ODMappedCommandResponderManager extends api.ODCommandResponderManager {} + +/**## ODMappedButtonResponderManager `class + * A special class with types for the Open Ticket `ODButtonResponderManager` class. + */ +export class ODMappedButtonResponderManager extends api.ODButtonResponderManager {} + +/**## ODMappedDropdownResponderManager `class + * A special class with types for the Open Ticket `ODDropdownResponderManager` class. + */ +export class ODMappedDropdownResponderManager extends api.ODDropdownResponderManager {} + +/**## ODMappedModalResponderManager `class + * A special class with types for the Open Ticket `ODModalResponderManager` class. + */ +export class ODMappedModalResponderManager extends api.ODModalResponderManager {} + +/**## ODMappedContextMenuResponderManager `class + * A special class with types for the Open Ticket `ODContextMenuResponderManager` class. + */ +export class ODMappedContextMenuResponderManager extends api.ODContextMenuResponderManager {} + +/**## ODMappedAutocompleteResponderManager `class + * A special class with types for the Open Ticket `ODAutocompleteResponderManager` class. + */ +export class ODMappedAutocompleteResponderManager extends api.ODAutocompleteResponderManager {} + +/**## ODMappedResponderManager `class + * A special class with types for the Open Ticket `ODResponderManager` class. + */ +export class ODMappedResponderManager extends api.ODResponderManager {} \ No newline at end of file diff --git a/src/core/mappings/session.ts b/src/core/mappings/session.ts new file mode 100644 index 0000000..16f1fb6 --- /dev/null +++ b/src/core/mappings/session.ts @@ -0,0 +1,17 @@ +/////////////////////////////////////// +//OPEN TICKET SESSION MAPPINGS +/////////////////////////////////////// +import * as api from "@open-discord-bots/framework/api" + +/**## ODSessionManagerIdMappings `interface` + * A list of all available IDs in the default `ODSessionManager` class in `opendiscord`. + * It's used to generate typescript declarations for this class. + */ +export interface ODSessionManagerIdMappings extends api.ODSessionManagerIdConstraint { + //"opendiscord:example-session":api.ODSession +} + +/**## ODMappedSessionManager `class + * A special class with types for the Open Ticket `ODSessionManager` class. + */ +export class ODMappedSessionManager extends api.ODSessionManager {} \ No newline at end of file diff --git a/src/core/mappings/startscreen.ts b/src/core/mappings/startscreen.ts new file mode 100644 index 0000000..bb7b3a0 --- /dev/null +++ b/src/core/mappings/startscreen.ts @@ -0,0 +1,24 @@ +/////////////////////////////////////// +//OPEN TICKET STARTSCREEN MAPPINGS +/////////////////////////////////////// +import * as api from "@open-discord-bots/framework/api" +import { ODLiveStatusManagerIdMappings } from "./console" + +/**## ODStartScreenManagerIdMappings `interface` + * A list of all available IDs in the default `ODStartScreenManager` class in `opendiscord`. + * It's used to generate typescript declarations for this class. + */ +export interface ODStartScreenManagerIdMappings extends api.ODStartScreenManagerIdConstraint { + "opendiscord:logo":api.ODStartScreenLogoComponent, + "opendiscord:header":api.ODStartScreenHeaderComponent, + "opendiscord:flags":api.ODStartScreenFlagsCategoryComponent, + "opendiscord:plugins":api.ODStartScreenPluginsCategoryComponent, + "opendiscord:stats":api.ODStartScreenPropertiesCategoryComponent, + "opendiscord:livestatus":api.ODStartScreenLiveStatusCategoryComponent>, + "opendiscord:logs":api.ODStartScreenCategoryComponent +} + +/**## ODMappedStartScreenManager `class + * A special class with types for the Open Ticket `ODStartScreenManager` class. + */ +export class ODMappedStartScreenManager extends api.ODStartScreenManager {} \ No newline at end of file diff --git a/src/core/mappings/statistic.ts b/src/core/mappings/statistic.ts new file mode 100644 index 0000000..8179ed1 --- /dev/null +++ b/src/core/mappings/statistic.ts @@ -0,0 +1,139 @@ +/////////////////////////////////////// +//OPEN TICKET STATISTICS MAPPINGS +/////////////////////////////////////// +import * as api from "@open-discord-bots/framework/api" + +/**## ODStatisticManagerIdMappings `interface` + * A list of all available IDs in the default `ODStatisticManager` class in `opendiscord`. + * It's used to generate typescript declarations for this class. + */ +export interface ODStatisticManagerIdMappings extends api.ODStatisticManagerIdConstraint { + "opendiscord:global":ODGlobalStatisticScope, + "opendiscord:system":ODSystemStatisticScope, + "opendiscord:user":ODUserStatisticScope, + "opendiscord:ticket":ODTicketStatisticScope, + "opendiscord:participants":ODParticipantsStatisticScope, + "opendiscord:messages":ODMessagesStatisticScope, +} + +/**## ODMappedStatisticManager `class + * A special class with types for the Open Ticket `ODStatisticManager` class. + */ +export class ODMappedStatisticManager extends api.ODStatisticManager {} + +/**## ODGlobalStatisticScope `class + * A special class with types for the Open Ticket `Global` statistics category/scope. + */ +export class ODGlobalStatisticScope extends api.ODStatisticGlobalScope {} + +/**## ODSystemStatisticScope `class + * A special class with types for the Open Ticket `System` statistics category/scope. + */ +export class ODSystemStatisticScope extends api.ODStatisticGlobalScope {} + +/**## ODUserStatisticScope `class + * A special class with types for the Open Ticket `User` statistics category/scope. + */ +export class ODUserStatisticScope extends api.ODStatisticScope {} + +/**## ODTicketStatisticScope `class + * A special class with types for the Open Ticket `Ticket` statistics category/scope. + */ +export class ODTicketStatisticScope extends api.ODStatisticScope {} + +/**## ODParticipantsStatisticScope `class + * A special class with types for the Open Ticket `Participants` statistics category/scope. + */ +export class ODParticipantsStatisticScope extends api.ODStatisticScope {} + +/**## ODMessagesStatisticScope `class + * A special class with types for the Open Ticket `Messages` statistics category/scope. + */ +export class ODMessagesStatisticScope extends api.ODStatisticScope {} + +///////////////////////////////////////// +// STATISTICS MAPPINGS, CATEGORIES & TYPES +///////////////////////////////////////// + +/**## ODGlobalStatisticScopeIdMappings `interface` + * A list of all available IDs in the default `ODGlobalStatisticScope` class in `opendiscord`. + * It's used to generate typescript declarations for this class. + */ +export interface ODGlobalStatisticScopeIdMappings extends api.ODStatisticScopeIdConstraint { + "opendiscord:tickets-created":api.ODBaseStatistic, + "opendiscord:tickets-closed":api.ODBaseStatistic, + "opendiscord:tickets-deleted":api.ODBaseStatistic, + "opendiscord:tickets-reopened":api.ODBaseStatistic, + "opendiscord:tickets-autoclosed":api.ODBaseStatistic, + "opendiscord:tickets-autodeleted":api.ODBaseStatistic, + "opendiscord:tickets-claimed":api.ODBaseStatistic, + "opendiscord:tickets-pinned":api.ODBaseStatistic, + "opendiscord:tickets-moved":api.ODBaseStatistic, + "opendiscord:tickets-transferred":api.ODBaseStatistic, + "opendiscord:users-blacklisted":api.ODBaseStatistic, + "opendiscord:transcripts-created":api.ODBaseStatistic, + "opendiscord:ticket-volume":api.ODDynamicStatistic, + "opendiscord:average-tickets":api.ODDynamicStatistic, +} + +/**## ODSystemStatisticScopeIdMappings `interface` + * A list of all available IDs in the default `ODSystemStatisticScope` class in `opendiscord`. + * It's used to generate typescript declarations for this class. + */ +export interface ODSystemStatisticScopeIdMappings extends api.ODStatisticScopeIdConstraint { + "opendiscord:startup-date":api.ODDynamicStatistic, + "opendiscord:system-uptime":api.ODDynamicStatistic, + "opendiscord:version":api.ODDynamicStatistic +} + +/**## ODUserStatisticScopeIdMappings `interface` + * A list of all available IDs in the default `ODUserStatisticScope` class in `opendiscord`. + * It's used to generate typescript declarations for this class. + */ +export interface ODUserStatisticScopeIdMappings extends api.ODStatisticScopeIdConstraint { + "opendiscord:name":api.ODDynamicStatistic, + "opendiscord:role":api.ODDynamicStatistic, + "opendiscord:tickets-created":api.ODBaseStatistic, + "opendiscord:tickets-closed":api.ODBaseStatistic, + "opendiscord:tickets-deleted":api.ODBaseStatistic, + "opendiscord:tickets-reopened":api.ODBaseStatistic, + "opendiscord:tickets-claimed":api.ODBaseStatistic, + "opendiscord:tickets-pinned":api.ODBaseStatistic, + "opendiscord:tickets-moved":api.ODBaseStatistic, + "opendiscord:tickets-transferred":api.ODBaseStatistic, + "opendiscord:users-blacklisted":api.ODBaseStatistic, + "opendiscord:transcripts-created":api.ODBaseStatistic, + "opendiscord:current-tickets":api.ODDynamicStatistic, +} + +/**## ODTicketStatisticScopeIdMappings `interface` + * A list of all available IDs in the default `ODTicketStatisticScope` class in `opendiscord`. + * It's used to generate typescript declarations for this class. + */ +export interface ODTicketStatisticScopeIdMappings extends api.ODStatisticScopeIdConstraint { + "opendiscord:name":api.ODDynamicStatistic, + "opendiscord:status":api.ODDynamicStatistic, + "opendiscord:claimed":api.ODDynamicStatistic, + "opendiscord:pinned":api.ODDynamicStatistic, + "opendiscord:creation-date":api.ODDynamicStatistic, + "opendiscord:creator":api.ODDynamicStatistic, + "opendiscord:ticket-age":api.ODDynamicStatistic, + "opendiscord:response-time":api.ODDynamicStatistic, + "opendiscord:resolution-time":api.ODDynamicStatistic, +} + +/**## ODParticipantsStatisticScopeIdMappings `interface` + * A list of all available IDs in the default `ODParticipantsStatisticScope` class in `opendiscord`. + * It's used to generate typescript declarations for this class. + */ +export interface ODParticipantsStatisticScopeIdMappings extends api.ODStatisticScopeIdConstraint { + "opendiscord:participants":api.ODDynamicStatistic +} + +/**## ODMessagesStatisticScopeIdMappings `interface` + * A list of all available IDs in the default `ODMessagesStatisticScope` class in `opendiscord`. + * It's used to generate typescript declarations for this class. + */ +export interface ODMessagesStatisticScopeIdMappings extends api.ODStatisticScopeIdConstraint { + "opendiscord:count":api.ODDynamicStatistic +} \ No newline at end of file diff --git a/src/core/api/defaults/verifybar.ts b/src/core/mappings/verifybar.ts similarity index 57% rename from src/core/api/defaults/verifybar.ts rename to src/core/mappings/verifybar.ts index 84c1d05..7ee3637 100644 --- a/src/core/api/defaults/verifybar.ts +++ b/src/core/mappings/verifybar.ts @@ -1,15 +1,13 @@ /////////////////////////////////////// -//DEFAULT VERIFYBAR MODULE +//OPEN TICKET VERIFYBAR MAPPINGS /////////////////////////////////////// import * as api from "@open-discord-bots/framework/api" -import { ODWorkerManager_Default } from "../defaults/worker" -import * as discord from "discord.js" -/**## ODVerifyBarManagerIds_Default `interface` - * This interface is a list of ids available in the `ODVerifyBarManager_Default` class. +/**## ODVerifyBarManagerIdMappings `interface` + * A list of all available IDs in the default `ODVerifyBarManager` class in `opendiscord`. * It's used to generate typescript declarations for this class. */ -export interface ODVerifyBarManagerIds_Default { +export interface ODVerifyBarManagerIdMappings extends api.ODVerifyBarManagerIdConstraint { "opendiscord:claim-ticket-ticket-message":{successWorkerIds:"opendiscord:permissions"|"opendiscord:claim-ticket",failureWorkerIds:"opendiscord:back-to-ticket-message"}, "opendiscord:claim-ticket-unclaim-message":{successWorkerIds:"opendiscord:permissions"|"opendiscord:claim-ticket",failureWorkerIds:"opendiscord:back-to-unclaim-message"}, "opendiscord:unclaim-ticket-ticket-message":{successWorkerIds:"opendiscord:permissions"|"opendiscord:unclaim-ticket",failureWorkerIds:"opendiscord:back-to-ticket-message"}, @@ -29,42 +27,7 @@ export interface ODVerifyBarManagerIds_Default { "opendiscord:delete-ticket-autoclose-message":{successWorkerIds:"opendiscord:permissions"|"opendiscord:delete-ticket",failureWorkerIds:"opendiscord:back-to-autoclose-message"} } -/**## ODVerifyBarManager_Default `default_class` - * This is a special class that adds type definitions & typescript to the ODVerifyBarManager class. - * It doesn't add any extra features! - * - * This default class is made for the global variable `opendiscord.verifybars`! +/**## ODMappedVerifyBarManager `class + * A special class with types for the Open Ticket `ODVerifyBarManager` class. */ -export class ODVerifyBarManager_Default extends api.ODVerifyBarManager { - get(id:VerifyBarId): ODVerifyBar_Default - get(id:api.ODValidId): api.ODVerifyBar|null - - get(id:api.ODValidId): api.ODVerifyBar|null { - return super.get(id) - } - - remove(id:VerifyBarId): ODVerifyBar_Default - remove(id:api.ODValidId): api.ODVerifyBar|null - - remove(id:api.ODValidId): api.ODVerifyBar|null { - return super.remove(id) - } - - exists(id:keyof ODVerifyBarManagerIds_Default): boolean - exists(id:api.ODValidId): boolean - - exists(id:api.ODValidId): boolean { - return super.exists(id) - } -} - -/**## ODVerifyBar_Default `default_class` - * This is a special class that adds type definitions & typescript to the ODVerifyBar class. - * It doesn't add any extra features! - * - * This default class is made for the default `ODVerifyBar`'s! - */ -export class ODVerifyBar_Default extends api.ODVerifyBar { - declare success: ODWorkerManager_Default|null},SuccessWorkerIds> - declare failure: ODWorkerManager_Default|null},FailureWorkerIds> -} \ No newline at end of file +export class ODMappedVerifyBarManager extends api.ODVerifyBarManager {} \ No newline at end of file diff --git a/src/data/framework/checkerLoader.ts b/src/data/framework/checkerLoader.ts index 49c47b5..7f55e98 100644 --- a/src/data/framework/checkerLoader.ts +++ b/src/data/framework/checkerLoader.ts @@ -45,7 +45,7 @@ export const loadAllConfigCheckerTranslations = async () => { } //GLOBAL FUNCTIONS -export const registerDefaultCheckerSystemTranslations = (tm:api.ODCheckerTranslationRegister_Default,lm:api.ODLanguageManager_Default) => { +export const registerDefaultCheckerSystemTranslations = (tm:api.ODMappedCheckerTranslationRegister,lm:api.ODMappedLanguageManager) => { //SYSTEM //tm.quickTranslate(lm,"checker.system.headerOpenTicket","other","opendiscord:header-openticket") //OPEN TICKET (ignore) tm.quickTranslate(lm,"checker.system.typeError","other","opendiscord:type-error") // [ERROR] (ignore) @@ -62,7 +62,7 @@ export const registerDefaultCheckerSystemTranslations = (tm:api.ODCheckerTransla tm.quickTranslate(lm,"checker.system.dataMessages","other","opendiscord:data-message") // message } -export const registerDefaultCheckerMessageTranslations = (tm:api.ODCheckerTranslationRegister_Default,lm:api.ODLanguageManager_Default) => { +export const registerDefaultCheckerMessageTranslations = (tm:api.ODMappedCheckerTranslationRegister,lm:api.ODMappedLanguageManager) => { //STRUCTURES tm.quickTranslate(lm,"checker.messages.invalidType","message","opendiscord:invalid-type") // This property needs to be the type: {0}! tm.quickTranslate(lm,"checker.messages.propertyMissing","message","opendiscord:property-missing") // The property {0} is missing from this object! @@ -137,7 +137,7 @@ export const registerDefaultCheckerMessageTranslations = (tm:api.ODCheckerTransl tm.quickTranslate(lm,"checker.messages.idNonExistent","message","opendiscord:id-non-existent") // The id {0} doesn't exist! } -export const registerDefaultCheckerCustomTranslations = (tm:api.ODCheckerTranslationRegister_Default,lm:api.ODLanguageManager_Default) => { +export const registerDefaultCheckerCustomTranslations = (tm:api.ODMappedCheckerTranslationRegister,lm:api.ODMappedLanguageManager) => { //CUSTOM tm.quickTranslate(lm,"checker.messages.invalidLanguage","message","opendiscord:invalid-language") // This is an invalid language! tm.quickTranslate(lm,"checker.messages.invalidButton","message","opendiscord:invalid-button") // This button needs to have at least an {0} or {1}! diff --git a/src/data/framework/codeLoader.ts b/src/data/framework/codeLoader.ts index e189703..50e8d0c 100644 --- a/src/data/framework/codeLoader.ts +++ b/src/data/framework/codeLoader.ts @@ -402,7 +402,7 @@ const loadAutoCode = () => { await opendiscord.actions.get("opendiscord:close-ticket").run("autoclose",{guild:channel.guild,channel,user:opendiscord.client.client.user,ticket,reason:"Autoclose",sendMessage:false}) await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:autoclose-message").build("timeout",{guild:channel.guild,channel,user:opendiscord.client.client.user,ticket})).message) count++ - await opendiscord.stats.get("opendiscord:global").setStat("opendiscord:tickets-autoclosed",1,"increase") + await opendiscord.statistics.get("opendiscord:global").setStat("opendiscord:tickets-autoclosed",1,"increase") } } } @@ -428,7 +428,7 @@ const loadAutoCode = () => { //autoclose ticket await opendiscord.actions.get("opendiscord:close-ticket").run("autoclose",{guild:channel.guild,channel,user:opendiscord.client.client.user,ticket,reason:"Autoclose",sendMessage:false}) await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:autoclose-message").build("leave",{guild:channel.guild,channel,user:opendiscord.client.client.user,ticket})).message) - await opendiscord.stats.get("opendiscord:global").setStat("opendiscord:tickets-autoclosed",1,"increase") + await opendiscord.statistics.get("opendiscord:global").setStat("opendiscord:tickets-autoclosed",1,"increase") } } } @@ -457,7 +457,7 @@ const loadAutoCode = () => { await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:autodelete-message").build("timeout",{guild:channel.guild,channel,user:opendiscord.client.client.user,ticket})).message) await opendiscord.actions.get("opendiscord:delete-ticket").run("autodelete",{guild:channel.guild,channel,user:opendiscord.client.client.user,ticket,reason:"Autodelete",sendMessage:false,withoutTranscript:false}) count++ - await opendiscord.stats.get("opendiscord:global").setStat("opendiscord:tickets-autodeleted",1,"increase") + await opendiscord.statistics.get("opendiscord:global").setStat("opendiscord:tickets-autodeleted",1,"increase") } } } @@ -484,7 +484,7 @@ const loadAutoCode = () => { //autodelete ticket await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:autodelete-message").build("leave",{guild:channel.guild,channel,user:opendiscord.client.client.user,ticket})).message) await opendiscord.actions.get("opendiscord:delete-ticket").run("autodelete",{guild:channel.guild,channel,user:opendiscord.client.client.user,ticket,reason:"Autodelete",sendMessage:false,withoutTranscript:false}) - await opendiscord.stats.get("opendiscord:global").setStat("opendiscord:tickets-autodeleted",1,"increase") + await opendiscord.statistics.get("opendiscord:global").setStat("opendiscord:tickets-autodeleted",1,"increase") } } } diff --git a/src/data/framework/eventLoader.ts b/src/data/framework/eventLoader.ts index cd195c5..9299d91 100644 --- a/src/data/framework/eventLoader.ts +++ b/src/data/framework/eventLoader.ts @@ -1,7 +1,7 @@ import {opendiscord, api, utilities} from "../../index" export const loadAllEvents = () => { - const eventList: (keyof api.ODEventIds_Default)[] = [ + const eventList: (keyof api.ODNoGeneric)[] = [ //error handling "onErrorHandling", "afterErrorHandling", @@ -258,13 +258,13 @@ export const loadAllEvents = () => { "onHelpMenuComponentLoad", "afterHelpMenuComponentsLoaded", - //stats - "onStatScopeLoad", - "afterStatScopesLoaded", - "onStatLoad", - "afterStatsLoaded", - "onStatInit", - "afterStatsInitiated", + //statistics + "onStatisticScopeLoad", + "afterStatisticScopesLoaded", + "onStatisticLoad", + "afterStatisticsLoaded", + "onStatisticInit", + "afterStatisticsInitiated", //plugin loading before code "onPluginBeforeCodeLoad", diff --git a/src/data/framework/progressBarLoader.ts b/src/data/framework/progressBarLoader.ts index 63eacb1..028e0d4 100644 --- a/src/data/framework/progressBarLoader.ts +++ b/src/data/framework/progressBarLoader.ts @@ -1,7 +1,7 @@ import {opendiscord, api, utilities} from "../../index" export const loadAllProgressBarRenderers = async () => { - const defaultSettings: api.ODProgressBarRenderer_DefaultSettings = { + const defaultSettings: api.ODDefaultProgressBarRendererSettings = { borderColor:"gray", filledBarColor:"openticket", emptyBarColor:"gray", @@ -23,34 +23,34 @@ export const loadAllProgressBarRenderers = async () => { } //VALUE RENDERER - const valueRendererSettings: api.ODProgressBarRenderer_DefaultSettings = {...defaultSettings} + const valueRendererSettings: api.ODDefaultProgressBarRendererSettings = {...defaultSettings} valueRendererSettings.labelType = "value" - opendiscord.progressbars.renderers.add(new api.ODProgressBarRenderer_Default("opendiscord:value-renderer",valueRendererSettings)) + opendiscord.progressbars.renderers.add(new api.ODDefaultProgressBarRenderer("opendiscord:value-renderer",valueRendererSettings)) //FRACTION RENDERER - const fractionRendererSettings: api.ODProgressBarRenderer_DefaultSettings = {...defaultSettings} + const fractionRendererSettings: api.ODDefaultProgressBarRendererSettings = {...defaultSettings} fractionRendererSettings.labelType = "fraction" - opendiscord.progressbars.renderers.add(new api.ODProgressBarRenderer_Default("opendiscord:fraction-renderer",fractionRendererSettings)) + opendiscord.progressbars.renderers.add(new api.ODDefaultProgressBarRenderer("opendiscord:fraction-renderer",fractionRendererSettings)) //PERCENTAGE RENDERER - const percentageRendererSettings: api.ODProgressBarRenderer_DefaultSettings = {...defaultSettings} + const percentageRendererSettings: api.ODDefaultProgressBarRendererSettings = {...defaultSettings} percentageRendererSettings.labelType = "percentage" - opendiscord.progressbars.renderers.add(new api.ODProgressBarRenderer_Default("opendiscord:percentage-renderer",percentageRendererSettings)) + opendiscord.progressbars.renderers.add(new api.ODDefaultProgressBarRenderer("opendiscord:percentage-renderer",percentageRendererSettings)) //TIME MS RENDERER - const timeMsRendererSettings: api.ODProgressBarRenderer_DefaultSettings = {...defaultSettings} + const timeMsRendererSettings: api.ODDefaultProgressBarRendererSettings = {...defaultSettings} timeMsRendererSettings.labelType = "time-ms" - opendiscord.progressbars.renderers.add(new api.ODProgressBarRenderer_Default("opendiscord:time-ms-renderer",timeMsRendererSettings)) + opendiscord.progressbars.renderers.add(new api.ODDefaultProgressBarRenderer("opendiscord:time-ms-renderer",timeMsRendererSettings)) //TIME SEC RENDERER - const timeSecRendererSettings: api.ODProgressBarRenderer_DefaultSettings = {...defaultSettings} + const timeSecRendererSettings: api.ODDefaultProgressBarRendererSettings = {...defaultSettings} timeSecRendererSettings.labelType = "time-sec" - opendiscord.progressbars.renderers.add(new api.ODProgressBarRenderer_Default("opendiscord:time-sec-renderer",timeSecRendererSettings)) + opendiscord.progressbars.renderers.add(new api.ODDefaultProgressBarRenderer("opendiscord:time-sec-renderer",timeSecRendererSettings)) //TIME MIN RENDERER - const timeMinRendererSettings: api.ODProgressBarRenderer_DefaultSettings = {...defaultSettings} + const timeMinRendererSettings: api.ODDefaultProgressBarRendererSettings = {...defaultSettings} timeMinRendererSettings.labelType = "time-min" - opendiscord.progressbars.renderers.add(new api.ODProgressBarRenderer_Default("opendiscord:time-min-renderer",timeMinRendererSettings)) + opendiscord.progressbars.renderers.add(new api.ODDefaultProgressBarRenderer("opendiscord:time-min-renderer",timeMinRendererSettings)) } export const loadAllProgressBars = async () => { diff --git a/src/data/framework/statLoader.ts b/src/data/framework/statisticLoader.ts similarity index 56% rename from src/data/framework/statLoader.ts rename to src/data/framework/statisticLoader.ts index 9392c5f..5929698 100644 --- a/src/data/framework/statLoader.ts +++ b/src/data/framework/statisticLoader.ts @@ -1,41 +1,41 @@ import {opendiscord, api, utilities} from "../../index" import * as discord from "discord.js" -const stats = opendiscord.stats +const stats = opendiscord.statistics const lang = opendiscord.languages -export const loadAllStatScopes = async () => { - stats.add(new api.ODStatGlobalScope("opendiscord:global",utilities.emojiTitle("📊",lang.getTranslation("stats.scopes.global")))) - stats.add(new api.ODStatGlobalScope("opendiscord:system",utilities.emojiTitle("⚙️",lang.getTranslation("stats.scopes.system")))) - stats.add(new api.ODStatScope("opendiscord:user",utilities.emojiTitle("📊",lang.getTranslation("stats.scopes.user")))) - stats.add(new api.ODStatScope("opendiscord:ticket",utilities.emojiTitle("📊",lang.getTranslation("stats.scopes.ticket")))) - stats.add(new api.ODStatScope("opendiscord:participants",utilities.emojiTitle("👥",lang.getTranslation("stats.scopes.participants")))) - stats.add(new api.ODStatScope("opendiscord:messages",utilities.emojiTitle("💬",lang.getTranslation("stats.scopes.messages")))) +export const loadAllStatisticScopes = async () => { + stats.add(new api.ODStatisticGlobalScope("opendiscord:global",utilities.emojiTitle("📊",lang.getTranslation("stats.scopes.global")))) + stats.add(new api.ODStatisticGlobalScope("opendiscord:system",utilities.emojiTitle("⚙️",lang.getTranslation("stats.scopes.system")))) + stats.add(new api.ODStatisticScope("opendiscord:user",utilities.emojiTitle("📊",lang.getTranslation("stats.scopes.user")))) + stats.add(new api.ODStatisticScope("opendiscord:ticket",utilities.emojiTitle("📊",lang.getTranslation("stats.scopes.ticket")))) + stats.add(new api.ODStatisticScope("opendiscord:participants",utilities.emojiTitle("👥",lang.getTranslation("stats.scopes.participants")))) + stats.add(new api.ODStatisticScope("opendiscord:messages",utilities.emojiTitle("💬",lang.getTranslation("stats.scopes.messages")))) } -export const loadAllStats = async () => { +export const loadAllStatistics = async () => { const generalConfig = opendiscord.configs.get("opendiscord:general") if (!generalConfig) return const global = stats.get("opendiscord:global") if (global){ - global.add(new api.ODBasicStat("opendiscord:tickets-created",13,lang.getTranslation("stats.properties.ticketsCreated"),0)) - global.add(new api.ODBasicStat("opendiscord:tickets-closed",12,lang.getTranslation("stats.properties.ticketsClosed"),0)) - global.add(new api.ODBasicStat("opendiscord:tickets-deleted",11,lang.getTranslation("stats.properties.ticketsDeleted"),0)) - global.add(new api.ODBasicStat("opendiscord:tickets-reopened",10,lang.getTranslation("stats.properties.ticketsReopened"),0)) - global.add(new api.ODBasicStat("opendiscord:tickets-autoclosed",9,lang.getTranslation("stats.properties.ticketsAutoclosed"),0)) - global.add(new api.ODBasicStat("opendiscord:tickets-autodeleted",8,lang.getTranslation("stats.properties.ticketsAutodeleted"),0)) - global.add(new api.ODBasicStat("opendiscord:tickets-claimed",7,lang.getTranslation("stats.properties.ticketsClaimed"),0)) - global.add(new api.ODBasicStat("opendiscord:tickets-pinned",6,lang.getTranslation("stats.properties.ticketsPinned"),0)) - global.add(new api.ODBasicStat("opendiscord:tickets-moved",5,lang.getTranslation("stats.properties.ticketsMoved"),0)) - global.add(new api.ODBasicStat("opendiscord:tickets-transferred",4,lang.getTranslation("stats.properties.ticketsTransferred"),0)) - global.add(new api.ODBasicStat("opendiscord:users-blacklisted",3,lang.getTranslation("stats.properties.usersBlacklisted"),0)) - global.add(new api.ODBasicStat("opendiscord:transcripts-created",2,lang.getTranslation("stats.properties.transcriptsCreated"),0)) - global.add(new api.ODDynamicStat("opendiscord:ticket-volume",1,() => { + global.add(new api.ODBaseStatistic("opendiscord:tickets-created",13,lang.getTranslation("stats.properties.ticketsCreated"),0)) + global.add(new api.ODBaseStatistic("opendiscord:tickets-closed",12,lang.getTranslation("stats.properties.ticketsClosed"),0)) + global.add(new api.ODBaseStatistic("opendiscord:tickets-deleted",11,lang.getTranslation("stats.properties.ticketsDeleted"),0)) + global.add(new api.ODBaseStatistic("opendiscord:tickets-reopened",10,lang.getTranslation("stats.properties.ticketsReopened"),0)) + global.add(new api.ODBaseStatistic("opendiscord:tickets-autoclosed",9,lang.getTranslation("stats.properties.ticketsAutoclosed"),0)) + global.add(new api.ODBaseStatistic("opendiscord:tickets-autodeleted",8,lang.getTranslation("stats.properties.ticketsAutodeleted"),0)) + global.add(new api.ODBaseStatistic("opendiscord:tickets-claimed",7,lang.getTranslation("stats.properties.ticketsClaimed"),0)) + global.add(new api.ODBaseStatistic("opendiscord:tickets-pinned",6,lang.getTranslation("stats.properties.ticketsPinned"),0)) + global.add(new api.ODBaseStatistic("opendiscord:tickets-moved",5,lang.getTranslation("stats.properties.ticketsMoved"),0)) + global.add(new api.ODBaseStatistic("opendiscord:tickets-transferred",4,lang.getTranslation("stats.properties.ticketsTransferred"),0)) + global.add(new api.ODBaseStatistic("opendiscord:users-blacklisted",3,lang.getTranslation("stats.properties.usersBlacklisted"),0)) + global.add(new api.ODBaseStatistic("opendiscord:transcripts-created",2,lang.getTranslation("stats.properties.transcriptsCreated"),0)) + global.add(new api.ODDynamicStatistic("opendiscord:ticket-volume",1,() => { return lang.getTranslation("stats.properties.ticketVolume")+": `"+opendiscord.tickets.getLength()+"`" })) - global.add(new api.ODDynamicStat("opendiscord:average-tickets",0,async () => { - const userTicketsCreated = await opendiscord.stats.get("opendiscord:user").getAllStats("opendiscord:tickets-created") + global.add(new api.ODDynamicStatistic("opendiscord:average-tickets",0,async () => { + const userTicketsCreated = await opendiscord.statistics.get("opendiscord:user").getAllStats("opendiscord:tickets-created") const average = userTicketsCreated.map((s) => s.value as number).filter((t) => t > 0).reduce((prev,curr) => prev+curr,0)/userTicketsCreated.length const roundedAverage = Math.round(average*1000)/1000 return lang.getTranslation("stats.properties.averageTickets")+": `"+roundedAverage+"`" @@ -44,23 +44,23 @@ export const loadAllStats = async () => { const system = stats.get("opendiscord:system") if (system){ - system.add(new api.ODDynamicStat("opendiscord:startup-date",2,() => { + system.add(new api.ODDynamicStatistic("opendiscord:startup-date",2,() => { return lang.getTranslation("params.uppercase.startupDate")+": "+discord.time(opendiscord.processStartupDate,"f") })) - system.add(new api.ODDynamicStat("opendiscord:system-uptime",1,() => { + system.add(new api.ODDynamicStatistic("opendiscord:system-uptime",1,() => { return lang.getTranslation("params.uppercase.uptime")+": "+discord.time(opendiscord.processStartupDate,"R") })) - system.add(new api.ODDynamicStat("opendiscord:version",0,() => { + system.add(new api.ODDynamicStatistic("opendiscord:version",0,() => { return lang.getTranslation("params.uppercase.version")+": `"+opendiscord.versions.get("opendiscord:version").toString()+"`" })) } const user = stats.get("opendiscord:user") if (user){ - user.add(new api.ODDynamicStat("opendiscord:name",11,async (scopeId,guild,channel,user) => { + user.add(new api.ODDynamicStatistic("opendiscord:name",11,async (scopeId,guild,channel,user) => { return lang.getTranslation("params.uppercase.name")+": "+discord.userMention(scopeId) })) - user.add(new api.ODDynamicStat("opendiscord:role",10,async (scopeId,guild,channel,user) => { + user.add(new api.ODDynamicStatistic("opendiscord:role",10,async (scopeId,guild,channel,user) => { const scopeMember = await opendiscord.client.fetchGuildMember(guild,scopeId) if (!scopeMember) return "" @@ -72,27 +72,27 @@ export const loadAllStats = async () => { if (permissions.type == "support") return lang.getTranslation("params.uppercase.role")+": 💬 `"+lang.getTranslation("stats.roles.support")+"`" else return lang.getTranslation("params.uppercase.role")+": 👤 `"+lang.getTranslation("stats.roles.member")+"`" })) - user.add(new api.ODBasicStat("opendiscord:tickets-created",10,lang.getTranslation("stats.properties.ticketsCreated"),0)) - user.add(new api.ODBasicStat("opendiscord:tickets-closed",9,lang.getTranslation("stats.properties.ticketsClosed"),0)) - user.add(new api.ODBasicStat("opendiscord:tickets-deleted",8,lang.getTranslation("stats.properties.ticketsDeleted"),0)) - user.add(new api.ODBasicStat("opendiscord:tickets-reopened",7,lang.getTranslation("stats.properties.ticketsReopened"),0)) - user.add(new api.ODBasicStat("opendiscord:tickets-claimed",6,lang.getTranslation("stats.properties.ticketsClaimed"),0)) - user.add(new api.ODBasicStat("opendiscord:tickets-pinned",5,lang.getTranslation("stats.properties.ticketsPinned"),0)) - user.add(new api.ODBasicStat("opendiscord:tickets-moved",4,lang.getTranslation("stats.properties.ticketsMoved"),0)) - user.add(new api.ODBasicStat("opendiscord:tickets-transferred",3,lang.getTranslation("stats.properties.ticketsTransferred"),0)) - user.add(new api.ODBasicStat("opendiscord:users-blacklisted",2,lang.getTranslation("stats.properties.usersBlacklisted"),0)) - user.add(new api.ODBasicStat("opendiscord:transcripts-created",1,lang.getTranslation("stats.properties.transcriptsCreated"),0)) - user.add(new api.ODDynamicStat("opendiscord:current-tickets",0,async (scopeId,guild,channel,user) => { + user.add(new api.ODBaseStatistic("opendiscord:tickets-created",10,lang.getTranslation("stats.properties.ticketsCreated"),0)) + user.add(new api.ODBaseStatistic("opendiscord:tickets-closed",9,lang.getTranslation("stats.properties.ticketsClosed"),0)) + user.add(new api.ODBaseStatistic("opendiscord:tickets-deleted",8,lang.getTranslation("stats.properties.ticketsDeleted"),0)) + user.add(new api.ODBaseStatistic("opendiscord:tickets-reopened",7,lang.getTranslation("stats.properties.ticketsReopened"),0)) + user.add(new api.ODBaseStatistic("opendiscord:tickets-claimed",6,lang.getTranslation("stats.properties.ticketsClaimed"),0)) + user.add(new api.ODBaseStatistic("opendiscord:tickets-pinned",5,lang.getTranslation("stats.properties.ticketsPinned"),0)) + user.add(new api.ODBaseStatistic("opendiscord:tickets-moved",4,lang.getTranslation("stats.properties.ticketsMoved"),0)) + user.add(new api.ODBaseStatistic("opendiscord:tickets-transferred",3,lang.getTranslation("stats.properties.ticketsTransferred"),0)) + user.add(new api.ODBaseStatistic("opendiscord:users-blacklisted",2,lang.getTranslation("stats.properties.usersBlacklisted"),0)) + user.add(new api.ODBaseStatistic("opendiscord:transcripts-created",1,lang.getTranslation("stats.properties.transcriptsCreated"),0)) + user.add(new api.ODDynamicStatistic("opendiscord:current-tickets",0,async (scopeId,guild,channel,user) => { return lang.getTranslation("stats.properties.currentTickets")+": `"+opendiscord.tickets.getFiltered((t) => t.get("opendiscord:opened-by").value === scopeId).length+"`" })) } const ticket = stats.get("opendiscord:ticket") if (ticket){ - ticket.add(new api.ODDynamicStat("opendiscord:name",5,async (scopeId,guild,channel,user) => { + ticket.add(new api.ODDynamicStatistic("opendiscord:name",5,async (scopeId,guild,channel,user) => { return lang.getTranslation("params.uppercase.ticket")+": "+discord.channelMention(scopeId) })) - ticket.add(new api.ODDynamicStat("opendiscord:status",4,async (scopeId,guild,channel,user) => { + ticket.add(new api.ODDynamicStatistic("opendiscord:status",4,async (scopeId,guild,channel,user) => { const ticket = opendiscord.tickets.get(scopeId) if (!ticket) return "" @@ -100,35 +100,35 @@ export const loadAllStats = async () => { return closed ? lang.getTranslation("params.uppercase.status")+": 🔒 `"+lang.getTranslation("params.uppercase.closed")+"`" : lang.getTranslation("params.uppercase.status")+": 🔓 `"+lang.getTranslation("params.uppercase.open")+"`" })) - ticket.add(new api.ODDynamicStat("opendiscord:claimed",3,async (scopeId,guild,channel,user) => { + ticket.add(new api.ODDynamicStatistic("opendiscord:claimed",3,async (scopeId,guild,channel,user) => { const ticket = opendiscord.tickets.get(scopeId) if (!ticket) return "" const claimed = ticket.exists("opendiscord:claimed") ? ticket.get("opendiscord:claimed").value : false return claimed ? lang.getTranslation("params.uppercase.claimed")+": 🟢 `"+lang.getTranslation("params.uppercase.yes")+"`" : lang.getTranslation("params.uppercase.claimed")+": 🔴 `"+lang.getTranslation("params.uppercase.no")+"`" })) - ticket.add(new api.ODDynamicStat("opendiscord:pinned",2,async (scopeId,guild,channel,user) => { + ticket.add(new api.ODDynamicStatistic("opendiscord:pinned",2,async (scopeId,guild,channel,user) => { const ticket = opendiscord.tickets.get(scopeId) if (!ticket) return "" const pinned = ticket.exists("opendiscord:pinned") ? ticket.get("opendiscord:pinned").value : false return pinned ? lang.getTranslation("params.uppercase.pinned")+": 🟢 `"+lang.getTranslation("params.uppercase.yes")+"`" : lang.getTranslation("params.uppercase.pinned")+": 🔴 `"+lang.getTranslation("params.uppercase.no")+"`" })) - ticket.add(new api.ODDynamicStat("opendiscord:creation-date",1,async (scopeId,guild,channel,user) => { + ticket.add(new api.ODDynamicStatistic("opendiscord:creation-date",1,async (scopeId,guild,channel,user) => { const ticket = opendiscord.tickets.get(scopeId) if (!ticket) return "" const rawDate = ticket.get("opendiscord:opened-on").value ?? new Date().getTime() return lang.getTranslation("params.uppercase.creationDate")+": "+discord.time(new Date(rawDate),"f") })) - ticket.add(new api.ODDynamicStat("opendiscord:creator",0,async (scopeId,guild,channel,user) => { + ticket.add(new api.ODDynamicStatistic("opendiscord:creator",0,async (scopeId,guild,channel,user) => { const ticket = opendiscord.tickets.get(scopeId) if (!ticket) return "" const creator = ticket.get("opendiscord:opened-by").value return lang.getTranslation("params.uppercase.creator")+": "+ (creator ? discord.userMention(creator) : "`unknown`") })) - ticket.add(new api.ODDynamicStat("opendiscord:ticket-age",-1,async (scopeId,guild,channel,user) => { + ticket.add(new api.ODDynamicStatistic("opendiscord:ticket-age",-1,async (scopeId,guild,channel,user) => { const ticket = opendiscord.tickets.get(scopeId) if (!ticket) return "" @@ -142,7 +142,7 @@ export const loadAllStats = async () => { const participants = stats.get("opendiscord:participants") if (participants){ - participants.add(new api.ODDynamicStat("opendiscord:participants",0,async (scopeId,guild,channel,user) => { + participants.add(new api.ODDynamicStatistic("opendiscord:participants",0,async (scopeId,guild,channel,user) => { const ticket = opendiscord.tickets.get(scopeId) if (!ticket) return "" @@ -157,7 +157,7 @@ export const loadAllStats = async () => { const messages = stats.get("opendiscord:messages") if (messages){ - messages.add(new api.ODDynamicStat("opendiscord:count",0,async (scopeId,guild,channel,user) => { + messages.add(new api.ODDynamicStatistic("opendiscord:count",0,async (scopeId,guild,channel,user) => { const ticket = opendiscord.tickets.get(scopeId) if (!ticket) return "" diff --git a/src/data/openticket/optionLoader.ts b/src/data/openticket/optionLoader.ts index 38dd5de..b56a7ad 100644 --- a/src/data/openticket/optionLoader.ts +++ b/src/data/openticket/optionLoader.ts @@ -54,7 +54,7 @@ export const loadAllOptions = async () => { }) } -export const loadTicketOption = (option:api.ODJsonConfig_DefaultOptionTicketType): api.ODTicketOption => { +export const loadTicketOption = (option:api.ODOptionsJsonConfig_TicketOption): api.ODTicketOption => { return new api.ODTicketOption(option.id,[ new api.ODOptionData("opendiscord:name",option.name), new api.ODOptionData("opendiscord:description",option.description), @@ -107,7 +107,7 @@ export const loadTicketOption = (option:api.ODJsonConfig_DefaultOptionTicketType ]) } -export const loadWebsiteOption = (opt:api.ODJsonConfig_DefaultOptionWebsiteType): api.ODWebsiteOption => { +export const loadWebsiteOption = (opt:api.ODOptionsJsonConfig_WebsiteOption): api.ODWebsiteOption => { return new api.ODWebsiteOption(opt.id,[ new api.ODOptionData("opendiscord:name",opt.name), new api.ODOptionData("opendiscord:description",opt.description), @@ -119,7 +119,7 @@ export const loadWebsiteOption = (opt:api.ODJsonConfig_DefaultOptionWebsiteType) ]) } -export const loadRoleOption = (opt:api.ODJsonConfig_DefaultOptionRoleType): api.ODRoleOption => { +export const loadRoleOption = (opt:api.ODOptionsJsonConfig_RoleOption): api.ODRoleOption => { return new api.ODRoleOption(opt.id,[ new api.ODOptionData("opendiscord:name",opt.name), new api.ODOptionData("opendiscord:description",opt.description), diff --git a/src/data/openticket/panelLoader.ts b/src/data/openticket/panelLoader.ts index 7d902cf..30b0146 100644 --- a/src/data/openticket/panelLoader.ts +++ b/src/data/openticket/panelLoader.ts @@ -23,7 +23,7 @@ export const loadAllPanels = async () => { }) } -export const loadPanel = (panel:api.ODJsonConfig_DefaultPanelType) => { +export const loadPanel = (panel:api.ODPanelsJsonConfig_Panel) => { return new api.ODPanel(panel.id,[ new api.ODPanelData("opendiscord:name",panel.name), new api.ODPanelData("opendiscord:options",panel.options), diff --git a/src/data/openticket/questionLoader.ts b/src/data/openticket/questionLoader.ts index 5a2f0be..40a4c0d 100644 --- a/src/data/openticket/questionLoader.ts +++ b/src/data/openticket/questionLoader.ts @@ -28,7 +28,7 @@ export const loadAllQuestions = async () => { }) } -export const loadShortQuestion = (option:api.ODJsonConfig_DefaultShortQuestionType) => { +export const loadShortQuestion = (option:api.ODQuestionsJsonConfig_ShortQuestion) => { return new api.ODShortQuestion(option.id,[ new api.ODQuestionData("opendiscord:name",option.name), new api.ODQuestionData("opendiscord:required",option.required), @@ -40,7 +40,7 @@ export const loadShortQuestion = (option:api.ODJsonConfig_DefaultShortQuestionTy ]) } -export const loadParagraphQuestion = (option:api.ODJsonConfig_DefaultParagraphQuestionType) => { +export const loadParagraphQuestion = (option:api.ODQuestionsJsonConfig_ParagraphQuestion) => { return new api.ODParagraphQuestion(option.id,[ new api.ODQuestionData("opendiscord:name",option.name), new api.ODQuestionData("opendiscord:required",option.required), diff --git a/src/index.ts b/src/index.ts index 3a5aa23..d897ebd 100644 --- a/src/index.ts +++ b/src/index.ts @@ -37,11 +37,12 @@ //initialize API & check npm libraries import { loadDumpCommand, loadAllPlugins, loadErrorHandling } from "@open-discord-bots/framework" import * as utilities from "@open-discord-bots/framework/utilities" -import * as api from "./core/api/api" -export * as utilities from "@open-discord-bots/framework/utilities" -export * as api from "./core/api/api" +import * as api from "./core/api" import ansis from "ansis" +export * as utilities from "@open-discord-bots/framework/utilities" +export * as api from "./core/api" + utilities.checkNodeVersion("openticket") utilities.moduleInstalled("@open-discord-bots/framework",true) @@ -822,27 +823,27 @@ const main = async () => { await opendiscord.events.get("onHelpMenuComponentLoad").emit([opendiscord.helpmenu]) await opendiscord.events.get("afterHelpMenuComponentsLoaded").emit([opendiscord.helpmenu]) - //load stat scopes - opendiscord.log("Loading stats...","system") - if (opendiscord.sharedFuses.getFuse("statScopesLoading")){ - opendiscord.stats.useDatabase(opendiscord.databases.get("opendiscord:stats")) - await (await import("./data/framework/statLoader.js")).loadAllStatScopes() + //load statistic scopes + opendiscord.log("Loading statistics...","system") + if (opendiscord.sharedFuses.getFuse("statisticScopesLoading")){ + opendiscord.statistics.useDatabase(opendiscord.databases.get("opendiscord:stats")) + await (await import("./data/framework/statisticLoader.js")).loadAllStatisticScopes() } - await opendiscord.events.get("onStatScopeLoad").emit([opendiscord.stats]) - await opendiscord.events.get("afterStatScopesLoaded").emit([opendiscord.stats]) + await opendiscord.events.get("onStatisticScopeLoad").emit([opendiscord.statistics]) + await opendiscord.events.get("afterStatisticScopesLoaded").emit([opendiscord.statistics]) - //load stats - if (opendiscord.sharedFuses.getFuse("statLoading")){ - await (await import("./data/framework/statLoader.js")).loadAllStats() + //load statistics + if (opendiscord.sharedFuses.getFuse("statisticLoading")){ + await (await import("./data/framework/statisticLoader.js")).loadAllStatistics() } - await opendiscord.events.get("onStatLoad").emit([opendiscord.stats]) - await opendiscord.events.get("afterStatsLoaded").emit([opendiscord.stats]) + await opendiscord.events.get("onStatisticLoad").emit([opendiscord.statistics]) + await opendiscord.events.get("afterStatisticsLoaded").emit([opendiscord.statistics]) - //init stats - await opendiscord.events.get("onStatInit").emit([opendiscord.stats]) - if (opendiscord.sharedFuses.getFuse("statInitiating")){ - await opendiscord.stats.init() - await opendiscord.events.get("afterStatsInitiated").emit([opendiscord.stats]) + //init statistics + await opendiscord.events.get("onStatisticInit").emit([opendiscord.statistics]) + if (opendiscord.sharedFuses.getFuse("statisticInitiating")){ + await opendiscord.statistics.init() + await opendiscord.events.get("afterStatisticsInitiated").emit([opendiscord.statistics]) } //plugin loading before code