2021-02-19 17:44:38 -08:00
/ * T h e A r t i f i c e r w a s b u i l t i n m e m o r y o f B a b k a
* With love , Ean
*
* December 21 , 2020
* /
import {
// Discordeno deps
2022-05-20 01:43:22 -07:00
cache ,
cacheHandlers ,
2022-05-04 23:49:06 -07:00
// Log4Deno deps
2022-05-27 21:48:34 -07:00
log ,
2022-05-20 01:43:22 -07:00
LT ,
} from '../deps.ts' ;
2022-06-25 13:26:48 -07:00
import { PastCommandCount } from './mod.d.ts' ;
import { dbClient } from './db.ts' ;
import utils from './utils.ts' ;
2022-05-20 01:43:22 -07:00
import config from '../config.ts' ;
2021-02-19 17:44:38 -08:00
2021-11-21 19:14:57 -08:00
// getRandomStatus() returns status as string
2021-02-19 17:44:38 -08:00
// Gets a new random status for the bot
2021-11-21 19:14:57 -08:00
const getRandomStatus = async ( ) : Promise < string > = > {
2022-05-20 01:43:22 -07:00
let status = '' ;
2021-02-19 17:44:38 -08:00
switch ( Math . floor ( ( Math . random ( ) * 4 ) + 1 ) ) {
case 1 :
status = ` ${ config . prefix } help for commands ` ;
break ;
case 2 :
status = ` Running V ${ config . version } ` ;
break ;
case 3 :
status = ` ${ config . prefix } info to learn more ` ;
break ;
2021-11-21 19:14:57 -08:00
default : {
2022-05-20 01:43:22 -07:00
const cachedCount = await cacheHandlers . size ( 'guilds' ) ;
2021-11-21 19:14:57 -08:00
status = ` Rolling dice for ${ cachedCount + cache . dispatchedGuildIds . size } servers ` ;
2021-02-19 17:44:38 -08:00
break ;
2021-11-21 19:14:57 -08:00
}
2021-02-19 17:44:38 -08:00
}
2022-05-20 01:43:22 -07:00
2021-02-19 17:44:38 -08:00
return status ;
} ;
2021-03-13 12:10:35 -08:00
// updateListStatistics(bot ID, current guild count) returns nothing
// Sends the current server count to all bot list sites we are listed on
2021-11-21 19:14:57 -08:00
const updateListStatistics = ( botID : bigint , serverCount : number ) : void = > {
2022-05-20 01:43:22 -07:00
config . botLists . forEach ( async ( e ) = > {
log ( LT . LOG , ` Updating statistics for ${ JSON . stringify ( e ) } ` ) ;
2021-03-13 12:10:35 -08:00
if ( e . enabled ) {
const tempHeaders = new Headers ( ) ;
tempHeaders . append ( e . headers [ 0 ] . header , e . headers [ 0 ] . value ) ;
2022-05-20 01:43:22 -07:00
tempHeaders . append ( 'Content-Type' , 'application/json' ) ;
2021-03-13 12:10:35 -08:00
// ?{} is a template used in config, just need to replace it with the real value
2022-05-20 01:43:22 -07:00
const response = await fetch ( e . apiUrl . replace ( '?{bot_id}' , botID . toString ( ) ) , {
'method' : 'POST' ,
'headers' : tempHeaders ,
'body' : JSON . stringify ( e . body ) . replace ( '"?{server_count}"' , serverCount . toString ( ) ) , // ?{server_count} needs the "" removed from around it aswell to make sure its sent as a number
2021-03-13 12:10:35 -08:00
} ) ;
2022-05-04 23:49:06 -07:00
log ( LT . INFO , ` Posted server count to ${ e . name } . Results: ${ JSON . stringify ( response ) } ` ) ;
2021-03-13 12:10:35 -08:00
}
} ) ;
} ;
2022-06-25 13:26:48 -07:00
// Keep one week of data
const hoursToKeep = 7 * 24 ;
const previousHours : Array < Array < PastCommandCount > > = [ ]
// updateHourlyRates() returns nothing
// Updates the hourlyRate for command usage
const updateHourlyRates = async ( ) = > {
try {
const newestHour = await dbClient . query ( ` SELECT command, count FROM command_cnt ORDER BY command; ` ) . catch ( ( e ) = > utils . commonLoggers . dbError ( 'intervals.ts:71' , 'query' , e ) ) ;
previousHours . push ( newestHour ) ;
if ( previousHours . length > 1 ) {
const oldestHour = previousHours [ 0 ] ;
const computedDiff : Array < PastCommandCount > = [ ]
for ( let i = 0 ; i < newestHour . length ; i ++ ) {
computedDiff . push ( {
command : newestHour [ i ] . command ,
count : ( newestHour [ i ] . count - oldestHour [ i ] . count ) ,
} ) ;
log ( LT . LOG , ` Updating hourlyRate | Computing diffs: ${ JSON . stringify ( computedDiff ) } ` ) ;
}
// Update DB
computedDiff . forEach ( async ( cmd ) = > {
log ( LT . LOG , ` Updating hourlyRate | Storing to DB: ${ JSON . stringify ( cmd ) } ` ) ;
await dbClient . execute ( ` UPDATE command_cnt SET hourlyRate = ? WHERE command = ? ` , [ ( cmd . count / previousHours . length ) , cmd . command ] ) . catch ( ( e ) = > utils . commonLoggers . dbError ( 'intervals.ts:88' , 'update' , e ) ) ;
} ) ;
}
if ( previousHours . length > hoursToKeep ) {
previousHours . unshift ( ) ;
}
} catch ( e ) {
log ( LT . ERROR , ` Something went wrong in previousHours interval | Error: ${ e . name } - ${ e . message } ` )
}
} ;
export default { getRandomStatus , updateListStatistics , updateHourlyRates } ;