From a0e03be103860c7400b47ed83ff48014a3ddf429 Mon Sep 17 00:00:00 2001 From: JasperAtSchool Date: Tue, 29 Apr 2025 09:47:29 +0200 Subject: [PATCH 1/3] Added ordinal numbers to config checker. --- src/core/api/modules/checker.ts | 15 +++++++++++++-- src/core/startup/init.ts | 18 ++++++++++++++++-- 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/src/core/api/modules/checker.ts b/src/core/api/modules/checker.ts index 26af713..6588475 100644 --- a/src/core/api/modules/checker.ts +++ b/src/core/api/modules/checker.ts @@ -332,6 +332,17 @@ export class ODChecker extends ODManagerData { this.options = options ?? {} } + /**Get a human-readable number string. */ + #ordinalNumber(num:number){ + const i = Math.abs(Math.round(num)) + const cent = i % 100 + if (cent >= 10 && cent <= 20) return i+'th' + const dec = i % 10 + if (dec === 1) return i+'st' + if (dec === 2) return i+'nd' + if (dec === 3) return i+'rd' + return i+'th' + } /**Run this checker. Returns all errors*/ check(): ODCheckerResult { this.messages = [] @@ -343,12 +354,12 @@ export class ODChecker extends ODManagerData { messages:this.messages } } - /**Create a string from the location trace (path)*/ + /**Create a string from the location trace/path in a human readable format. */ locationTraceToString(trace:ODCheckerLocationTrace){ const final: ODCheckerLocationTrace = [] trace.forEach((t) => { if (typeof t == "number"){ - final.push(`:${t}`) + final.push(`:(${this.#ordinalNumber(t+1)})`) }else{ final.push(`."${t}"`) } diff --git a/src/core/startup/init.ts b/src/core/startup/init.ts index 66279de..a243ebe 100644 --- a/src/core/startup/init.ts +++ b/src/core/startup/init.ts @@ -117,7 +117,11 @@ export interface ODUtilities { * * It shouldn't be used by plugins because this is an internal API feature! */ - ODVersionMigration:new (version:api.ODVersion,func:() => void|Promise,afterInitFunc:() => void|Promise) => ODVersionMigration + ODVersionMigration:new (version:api.ODVersion,func:() => void|Promise,afterInitFunc:() => void|Promise) => ODVersionMigration, + /**## ordinalNumber `utility function` + * Get a human readable ordinal number (e.g. 1st, 2nd, 3rd, 4th, ...) from a Javascript number. + */ + ordinalNumber(num:number): string, } /**## ODVersionMigration `utility class` @@ -252,5 +256,15 @@ export const utilities: ODUtilities = { "LOREMIPSUM", //TODO ] }, - ODVersionMigration + ODVersionMigration, + ordinalNumber(num:number){ + const i = Math.abs(Math.round(num)) + const cent = i % 100 + if (cent >= 10 && cent <= 20) return i+'th' + const dec = i % 10 + if (dec === 1) return i+'st' + if (dec === 2) return i+'nd' + if (dec === 3) return i+'rd' + return i+'th' + } } \ No newline at end of file From 35fdafb21d7a07be94f679ce5bcaeaa7e2be692c Mon Sep 17 00:00:00 2001 From: JasperAtSchool Date: Tue, 29 Apr 2025 09:54:48 +0200 Subject: [PATCH 2/3] Removed deprecated API classes + properties --- src/core/api/modules/base.ts | 100 ++------------------------------- src/core/api/modules/client.ts | 2 - 2 files changed, 6 insertions(+), 96 deletions(-) diff --git a/src/core/api/modules/base.ts b/src/core/api/modules/base.ts index 1c5d2db..96633ff 100644 --- a/src/core/api/modules/base.ts +++ b/src/core/api/modules/base.ts @@ -63,16 +63,6 @@ export class ODId { get value(){ return this.#value } - /**The source of the id (text before `:`). (e.g. `openticket` for all built-in ids) - * - * @deprecated Replaced with `getNamespace()` and will be removed in `v4.1.0`. - */ - source: string - /**The identifier of the id (text after `:`). - * - * @deprecated Replaced with `getIdentifier()` and will be removed in `v4.1.0`. - */ - identifier: string /**The change listener for the parent `ODManager` of this `ODId`. */ #change: ((oldId:string,newId:string) => void)|null = null @@ -92,21 +82,9 @@ export class ODId { if (result.length > 0) this.#value = result.join("") else throw new ODSystemError("invalid ID at 'new ODID(id: "+id+")'") - - const splitted = this.#value.split(":") - if (splitted.length > 1){ - this.source = splitted[0] - splitted.shift() - this.identifier = splitted.join(":") - }else{ - this.identifier = splitted.join(":") - this.source = "" - } }else{ //id is ODId this.#value = id.#value - this.source = id.source - this.identifier = id.identifier } } @@ -171,47 +149,6 @@ export class ODManagerChangeHelper { } } -/**## ODManagerRedirectHelper `class` - * @deprecated ### Will be removed in Open Ticket `v4.1.0`! - * - * This is Open Ticket ticket manager redirect helper. - * - * It is used to redirect a source to another source when the id isn't found. - * - * It will be used in **Open Discord** to allow plugins from all projects to work seamlessly! - * ## **(❌ SYSTEM ONLY!!)** - */ -export class ODManagerRedirectHelper { - #data: {fromSource:string,toSource:string}[] = [] - - /****(❌ SYSTEM ONLY!!)** Add a redirect to this manager. Returns `true` when overwritten. */ - add(fromSource:string, toSource:string){ - const index = this.#data.findIndex((data) => data.fromSource === fromSource) - if (index > -1){ - //already exists - this.#data[index] = {fromSource,toSource} - return true - }else{ - //doesn't exist - this.#data.push({fromSource,toSource}) - return false - } - } - /****(❌ SYSTEM ONLY!!)** Remove a redirect from this manager. Returns `true` when it existed. */ - remove(fromSource:string, toSource:string){ - const index = this.#data.findIndex((data) => data.fromSource === fromSource && data.toSource == toSource) - if (index > -1){ - //already exists - this.#data.splice(index,1) - return true - }else return false - } - /**List all redirects from this manager. */ - list(){ - return [...this.#data] - } -} - /**## ODManagerData `class` * This is Open Ticket manager data. * @@ -261,11 +198,9 @@ export class ODManager extends ODManagerChangeHe #changeListeners: ODManagerCallback[] = [] /**An array storing all listeners when data is removed. */ #removeListeners: ODManagerCallback[] = [] - /**Handle all redirects in this `ODManager` */ - redirects: ODManagerRedirectHelper = new ODManagerRedirectHelper() - + constructor(debug?:ODDebugger, debugname?:string){ - super() + super() this.#debug = debug this.#debugname = debugname } @@ -333,15 +268,7 @@ export class ODManager extends ODManagerChangeHe const newId = new ODId(id) const data = this.#data.get(newId.value) if (data) return data - else{ - //DEPRECATED!!! - const redirect = this.redirects.list().find((redirect) => redirect.fromSource === newId.getNamespace()) - if (!redirect) return null - else{ - const redirectId = new ODId(redirect.toSource+":"+newId.getIdentifier()) - return this.get(redirectId) - } - } + else return null } /**Remove data that matches the `ODId`. Returns the removed data. */ remove(id:ODValidId): DataType|null { @@ -349,15 +276,8 @@ export class ODManager extends ODManagerChangeHe const data = this.#data.get(newId.value) if (!data){ - //DEPRECATED!!! - const redirect = this.redirects.list().find((redirect) => redirect.fromSource === newId.getNamespace()) - if (!redirect){ - if (this.#debug) this.#debug.debug("Removed "+this.#debugname+" from manager",[{key:"id",value:newId.value},{key:"found",value:"false"}]) - return null - }else{ - const redirectId = new ODId(redirect.toSource+":"+newId.getIdentifier()) - return this.remove(redirectId) - } + if (this.#debug) this.#debug.debug("Removed "+this.#debugname+" from manager",[{key:"id",value:newId.value},{key:"found",value:"false"}]) + return null }else{ this.#data.delete(newId.value) if (this.#debug) this.#debug.debug("Removed "+this.#debugname+" from manager",[{key:"id",value:newId.value},{key:"found",value:"true"}]) @@ -385,15 +305,7 @@ export class ODManager extends ODManagerChangeHe exists(id:ODValidId): boolean { const newId = new ODId(id) if (this.#data.has(newId.value)) return true - else{ - //DEPRECATED!!! - const redirect = this.redirects.list().find((redirect) => redirect.fromSource === newId.getNamespace()) - if (!redirect) return false - else{ - const redirectId = new ODId(redirect.toSource+":"+newId.getIdentifier()) - return this.exists(redirectId) - } - } + else return false } /**Get all data inside this manager*/ getAll(): DataType[] { diff --git a/src/core/api/modules/client.ts b/src/core/api/modules/client.ts index 7175de1..94e8667 100644 --- a/src/core/api/modules/client.ts +++ b/src/core/api/modules/client.ts @@ -516,8 +516,6 @@ export interface ODSlashCommandUniversalCommand { * The builder for slash commands. Here you can add options to the command. */ export interface ODSlashCommandBuilder extends discord.ChatInputApplicationCommandData { - /**@deprecated `dmPermission` is deprecated. Use `context` instead! (Not using contexts might result in the slash command being re-registered on every startup!) */ - dmPermission?:boolean /**This field is required in Open Ticket for future compatibility. */ integrationTypes:discord.ApplicationIntegrationType[], /**This field is required in Open Ticket for future compatibility. */ From 83080a6e4dd85593c1a387a92d1970b40ccb387a Mon Sep 17 00:00:00 2001 From: JasperAtSchool Date: Tue, 29 Apr 2025 09:58:36 +0200 Subject: [PATCH 3/3] Removed openticket -> opendiscord migration utils --- src/core/api/modules/database.ts | 34 ++------------------------------ 1 file changed, 2 insertions(+), 32 deletions(-) diff --git a/src/core/api/modules/database.ts b/src/core/api/modules/database.ts index 1e1dbad..ab6d601 100644 --- a/src/core/api/modules/database.ts +++ b/src/core/api/modules/database.ts @@ -7,30 +7,6 @@ import nodepath from "path" import { ODDebugger } from "./console" import * as fjs from "formatted-json-stringify" -///////////////////////////////////////////////////////// -//TEMPORARY OPENTICKET => OPENDISCORD MIGRATION UTILITIES -///////////////////////////////////////////////////////// - -/** ## ❌ Temporary function. Will be removed on full OTv4 release! */ -export function TEMP_migrateDatabaseIdPrefix(id:string): string { - if (!id.startsWith("openticket:")) return id - return id.replaceAll("openticket:","opendiscord:") -} -/** ## ❌ Temporary function. Will be removed on full OTv4 release! */ -export function TEMP_migrateDatabaseValuePrefix(value:string): string { - return value.replaceAll('"openticket:','"opendiscord:') -} -/** ## ❌ Temporary function. Will be removed on full OTv4 release! */ -export function TEMP_migrateDatabaseStructurePrefix(structure:ODJsonDatabaseStructure): ODJsonDatabaseStructure { - return structure.map((data) => { - return { - category:TEMP_migrateDatabaseIdPrefix(data.category), - key:TEMP_migrateDatabaseIdPrefix(data.key), - value:JSON.parse(TEMP_migrateDatabaseValuePrefix(JSON.stringify(data.value))) - } - }) -} - /**## ODDatabaseManager `class` * This is an Open Ticket database manager. * @@ -118,10 +94,7 @@ export class ODJsonDatabase extends ODDatabase { /**Init the database. */ init(): ODPromiseVoid { - //this.#system.getData() - //TEMPORARY!!! - const newData = TEMP_migrateDatabaseStructurePrefix(this.#system.getData()) - this.#system.setData(newData) + this.#system.getData() } /**Set/overwrite the value of `category` & `key`. Returns `true` when overwritten! * @example @@ -226,10 +199,7 @@ export class ODFormattedJsonDatabase extends ODDatabase { /**Init the database. */ init(): ODPromiseVoid { - //this.#system.getData() - //TEMPORARY!!! - const newData = TEMP_migrateDatabaseStructurePrefix(this.#system.getData()) - this.#system.setData(newData) + this.#system.getData() } /**Set/overwrite the value of `category` & `key`. Returns `true` when overwritten! * @example