Added 9 new statistics in the /stats command

Ticket volume, Average tickets/user, System uptime, Current tickets, Ticket age, Message/Embed/File/Component amount.
This commit is contained in:
DJj123dj
2025-08-28 11:20:02 +02:00
parent 82f2aeaa90
commit 706006e319
5 changed files with 226 additions and 41 deletions
+112 -4
View File
@@ -13,7 +13,8 @@ export interface ODStatsManagerIds_Default {
"opendiscord:system":ODStatGlobalScope_DefaultSystem,
"opendiscord:user":ODStatScope_DefaultUser,
"opendiscord:ticket":ODStatScope_DefaultTicket,
"opendiscord:participants":ODStatScope_DefaultParticipants
"opendiscord:participants":ODStatScope_DefaultParticipants,
"opendiscord:messages":ODStatScope_DefaultMessages,
}
/**## ODStatsManager_Default `default_class`
@@ -60,7 +61,9 @@ export interface ODStatGlobalScopeIds_DefaultGlobal {
"opendiscord:tickets-pinned":ODBasicStat,
"opendiscord:tickets-moved":ODBasicStat,
"opendiscord:users-blacklisted":ODBasicStat,
"opendiscord:transcripts-created":ODBasicStat
"opendiscord:transcripts-created":ODBasicStat,
"opendiscord:ticket-volume":ODDynamicStat,
"opendiscord:average-tickets":ODDynamicStat,
}
/**## ODStatGlobalScope_DefaultGlobal `default_class`
@@ -98,6 +101,13 @@ export class ODStatGlobalScope_DefaultGlobal extends ODStatGlobalScope {
return super.getStat(id)
}
getAllStats<StatsId extends keyof ODStatGlobalScopeIds_DefaultGlobal>(id:StatsId): Promise<{id:string,value:ODValidStatValue}[]>
getAllStats(id:ODValidId): Promise<{id:string,value:ODValidStatValue}[]>
getAllStats(id:ODValidId): Promise<{id:string,value:ODValidStatValue}[]> {
return super.getAllStats(id)
}
setStat<StatsId extends keyof ODStatGlobalScopeIds_DefaultGlobal>(id:StatsId, value:ODValidStatValue, mode:ODStatScopeSetMode): Promise<boolean>
setStat(id:ODValidId, value:ODValidStatValue, mode:ODStatScopeSetMode): Promise<boolean>
@@ -119,6 +129,7 @@ export class ODStatGlobalScope_DefaultGlobal extends ODStatGlobalScope {
*/
export interface ODStatGlobalScopeIds_DefaultSystem {
"opendiscord:startup-date":ODDynamicStat,
"opendiscord:system-uptime":ODDynamicStat,
"opendiscord:version":ODDynamicStat
}
@@ -157,6 +168,13 @@ export class ODStatGlobalScope_DefaultSystem extends ODStatGlobalScope {
return super.getStat(id)
}
getAllStats<StatsId extends keyof ODStatGlobalScopeIds_DefaultSystem>(id:StatsId): Promise<{id:string,value:ODValidStatValue}[]>
getAllStats(id:ODValidId): Promise<{id:string,value:ODValidStatValue}[]>
getAllStats(id:ODValidId): Promise<{id:string,value:ODValidStatValue}[]> {
return super.getAllStats(id)
}
setStat<StatsId extends keyof ODStatGlobalScopeIds_DefaultSystem>(id:StatsId, value:ODValidStatValue, mode:ODStatScopeSetMode): Promise<boolean>
setStat(id:ODValidId, value:ODValidStatValue, mode:ODStatScopeSetMode): Promise<boolean>
@@ -187,7 +205,8 @@ export interface ODStatScopeIds_DefaultUser {
"opendiscord:tickets-pinned":ODBasicStat,
"opendiscord:tickets-moved":ODBasicStat,
"opendiscord:users-blacklisted":ODBasicStat,
"opendiscord:transcripts-created":ODBasicStat
"opendiscord:transcripts-created":ODBasicStat,
"opendiscord:current-tickets":ODDynamicStat,
}
/**## ODStatScope_DefaultUser `default_class`
@@ -225,6 +244,13 @@ export class ODStatScope_DefaultUser extends ODStatScope {
return super.getStat(id,scopeId)
}
getAllStats<StatsId extends keyof ODStatScopeIds_DefaultUser>(id:StatsId): Promise<{id:string,value:ODValidStatValue}[]>
getAllStats(id:ODValidId): Promise<{id:string,value:ODValidStatValue}[]>
getAllStats(id:ODValidId): Promise<{id:string,value:ODValidStatValue}[]> {
return super.getAllStats(id)
}
setStat<StatsId extends keyof ODStatScopeIds_DefaultUser>(id:StatsId, scopeId:string, value:ODValidStatValue, mode:ODStatScopeSetMode): Promise<boolean>
setStat(id:ODValidId, scopeId:string, value:ODValidStatValue, mode:ODStatScopeSetMode): Promise<boolean>
@@ -250,7 +276,10 @@ export interface ODStatScopeIds_DefaultTicket {
"opendiscord:claimed":ODDynamicStat,
"opendiscord:pinned":ODDynamicStat,
"opendiscord:creation-date":ODDynamicStat,
"opendiscord:creator":ODDynamicStat
"opendiscord:creator":ODDynamicStat,
"opendiscord:ticket-age":ODDynamicStat,
"opendiscord:response-time":ODDynamicStat,
"opendiscord:resolution-time":ODDynamicStat,
}
/**## ODStatScope_DefaultTicket `default_class`
@@ -288,6 +317,13 @@ export class ODStatScope_DefaultTicket extends ODStatScope {
return super.getStat(id,scopeId)
}
getAllStats<StatsId extends keyof ODStatScopeIds_DefaultTicket>(id:StatsId): Promise<{id:string,value:ODValidStatValue}[]>
getAllStats(id:ODValidId): Promise<{id:string,value:ODValidStatValue}[]>
getAllStats(id:ODValidId): Promise<{id:string,value:ODValidStatValue}[]> {
return super.getAllStats(id)
}
setStat<StatsId extends keyof ODStatScopeIds_DefaultTicket>(id:StatsId, scopeId:string, value:ODValidStatValue, mode:ODStatScopeSetMode): Promise<boolean>
setStat(id:ODValidId, scopeId:string, value:ODValidStatValue, mode:ODStatScopeSetMode): Promise<boolean>
@@ -346,6 +382,13 @@ export class ODStatScope_DefaultParticipants extends ODStatScope {
return super.getStat(id,scopeId)
}
getAllStats<StatsId extends keyof ODStatScopeIds_DefaultParticipants>(id:StatsId): Promise<{id:string,value:ODValidStatValue}[]>
getAllStats(id:ODValidId): Promise<{id:string,value:ODValidStatValue}[]>
getAllStats(id:ODValidId): Promise<{id:string,value:ODValidStatValue}[]> {
return super.getAllStats(id)
}
setStat<StatsId extends keyof ODStatScopeIds_DefaultParticipants>(id:StatsId, scopeId:string, value:ODValidStatValue, mode:ODStatScopeSetMode): Promise<boolean>
setStat(id:ODValidId, scopeId:string, value:ODValidStatValue, mode:ODStatScopeSetMode): Promise<boolean>
@@ -356,6 +399,71 @@ export class ODStatScope_DefaultParticipants extends ODStatScope {
resetStat<StatsId extends keyof ODStatScopeIds_DefaultParticipants>(id:ODValidId, scopeId:string): Promise<ODValidStatValue|null>
resetStat(id:ODValidId, scopeId:string): Promise<ODValidStatValue|null>
resetStat(id:ODValidId, scopeId:string): Promise<ODValidStatValue|null> {
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":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 ODStatScope {
get<StatsId extends keyof ODStatScopeIds_DefaultMessages>(id:StatsId): ODStatScopeIds_DefaultMessages[StatsId]
get(id:ODValidId): ODStat|null
get(id:ODValidId): ODStat|null {
return super.get(id)
}
remove<StatsId extends keyof ODStatScopeIds_DefaultMessages>(id:StatsId): ODStatScopeIds_DefaultMessages[StatsId]
remove(id:ODValidId): ODStat|null
remove(id:ODValidId): ODStat|null {
return super.remove(id)
}
exists(id:keyof ODStatScopeIds_DefaultMessages): boolean
exists(id:ODValidId): boolean
exists(id:ODValidId): boolean {
return super.exists(id)
}
getStat<StatsId extends keyof ODStatScopeIds_DefaultMessages>(id:StatsId, scopeId:string): Promise<ODValidStatValue|null>
getStat(id:ODValidId, scopeId:string): Promise<ODValidStatValue|null>
getStat(id:ODValidId, scopeId:string): Promise<ODValidStatValue|null> {
return super.getStat(id,scopeId)
}
getAllStats<StatsId extends keyof ODStatScopeIds_DefaultMessages>(id:StatsId): Promise<{id:string,value:ODValidStatValue}[]>
getAllStats(id:ODValidId): Promise<{id:string,value:ODValidStatValue}[]>
getAllStats(id:ODValidId): Promise<{id:string,value:ODValidStatValue}[]> {
return super.getAllStats(id)
}
setStat<StatsId extends keyof ODStatScopeIds_DefaultMessages>(id:StatsId, scopeId:string, value:ODValidStatValue, mode:ODStatScopeSetMode): Promise<boolean>
setStat(id:ODValidId, scopeId:string, value:ODValidStatValue, mode:ODStatScopeSetMode): Promise<boolean>
setStat(id:ODValidId, scopeId:string, value:ODValidStatValue, mode:ODStatScopeSetMode): Promise<boolean> {
return super.setStat(id,scopeId,value,mode)
}
resetStat<StatsId extends keyof ODStatScopeIds_DefaultMessages>(id:ODValidId, scopeId:string): Promise<ODValidStatValue|null>
resetStat(id:ODValidId, scopeId:string): Promise<ODValidStatValue|null>
resetStat(id:ODValidId, scopeId:string): Promise<ODValidStatValue|null> {
return super.resetStat(id,scopeId)
}
+1 -1
View File
@@ -132,7 +132,7 @@ export class ODMain {
this.versions = new ODVersionManager_Default()
this.versions.add(ODVersion.fromString("opendiscord:version","v4.1.0"))
this.versions.add(ODVersion.fromString("opendiscord:api","v1.0.0"))
this.versions.add(ODVersion.fromString("opendiscord:transcripts","v2.0.0"))
this.versions.add(ODVersion.fromString("opendiscord:transcripts","v2.1.0"))
this.versions.add(ODVersion.fromString("opendiscord:livestatus","v2.0.0"))
this.debugfile = new ODDebugFileManager("./","otdebug.txt",5000,this.versions.get("opendiscord:version"))
+20
View File
@@ -140,6 +140,23 @@ export class ODStatScope extends ODManager<ODStat> {
//return null on error
return null
}
/**Get the value of a statistic for all `scopeId`'s. The `scopeId` is the unique id of the user, channel, role, etc that the stats are related to. */
async getAllStats(id:ODValidId): Promise<{id:string,value:ODValidStatValue}[]> {
if (!this.database) return []
const newId = new ODId(id)
const data = await this.database.getCategory(this.id.value+"_"+newId.value) ?? []
const output: {id:string,value:ODValidStatValue}[] = []
for (const stat of data){
if (typeof stat.value == "string" || typeof stat.value == "boolean" || typeof stat.value == "number"){
//return value received from database
output.push({id:stat.key,value:stat.value})
}
}
//return null on error
return output
}
/**Set, increase or decrease the value of a statistic. The `scopeId` is the unique id of the user, channel, role, etc that the stats are related to. */
async setStat(id:ODValidId, scopeId:string, value:ODValidStatValue, mode:ODStatScopeSetMode): Promise<boolean> {
if (!this.database) return false
@@ -213,6 +230,9 @@ export class ODStatGlobalScope extends ODStatScope {
getStat(id:ODValidId): Promise<ODValidStatValue|null> {
return super.getStat(id,"GLOBAL")
}
getAllStats(id:ODValidId): Promise<{id:string,value:ODValidStatValue}[]> {
return super.getAllStats(id)
}
setStat(id:ODValidId, value:ODValidStatValue, mode:ODStatScopeSetMode): Promise<boolean> {
return super.setStat(id,"GLOBAL",value,mode)
}