2023-09-13 03:38:54 +02:00
module . exports . run = async ( ws , user , db , msg , fun , users , connections ) => {
if ( typeof msg . message !== "string" ) return ;
if ( ! user . channel ) return ;
if ( ! user . connected ) return
if ( ! users [ user . _id ] . chatbypass && ! user . quotas . chat . try ( ) ) return ;
Object . values ( connections ) . filter ( f => f . user . channel === user . channel ) . forEach ( f => f . sendData ( { m : "a" , a : msg . message . substr ( 0 , 1023 ) , p : users [ user . _id ] . p , t : Date . now ( ) } ) )
chat [ user . channel ] . push ( { m : "a" , a : msg . message . substr ( 0 , 1023 ) , p : users [ user . _id ] . p , t : Date . now ( ) } )
if ( chat [ user . channel ] . length > 32 ) chat [ user . channel ] . splice ( 0 , 1 )
user . quotas . chat . spend ( 1 )
var cmd = msg . message . trim ( ) . split ( ' ' ) [ 0 ]
var args = msg . message . trim ( ) . substr ( cmd . length ) . trim ( )
var rank = users [ user . _id ] . rank
var say = ( message ) => ws . sendData ( { m : "a" , p : { name : "Server" , _id : "server" , id : "server" , color : "#5555ff" } , a : message , t : Date . now ( ) } )
if ( cmd === "~help" ) {
2023-09-15 21:46:32 +02:00
var cmds = { "~help" : 0 , "~gentoken" : 2 , "~setrank" : 2 , "~clearchat" : 1 , "~settag" : 1 , "~removetag" : 1 , "~endprocess" : 2 , "~notebypass" : 2 , "~custombypass" : 2 , "~chatbypass" : 2 , "~info" : 1 , "~js" : 3 , "~unban" : 2 , "~token" : 3 , "~baninfo" : 2 , "~usersetothers" : 3 , "~announce" : 2 }
2023-09-13 03:38:54 +02:00
var availablecmds = Object . keys ( cmds ) . filter ( a => cmds [ a ] <= users [ user . _id ] . rank )
return say ( ` Commands: ${ availablecmds . join ( ', ' ) } ` )
}
if ( cmd === "~gentoken" && rank >= 2 ) {
var token = ""
for ( var i = 0 ; i < 48 ; i ++ ) token += [ "0" , "1" , "2" , "3" , "4" , "5" , "6" , "7" , "8" , "9" , "a" , "b" , "c" , "d" , "e" , "f" ] [ Math . floor ( Math . random ( ) * 16 ) ]
var _id = ""
for ( var i = 0 ; i < 24 ; i ++ ) _id += [ "0" , "1" , "2" , "3" , "4" , "5" , "6" , "7" , "8" , "9" , "a" , "b" , "c" , "d" , "e" , "f" ] [ Math . floor ( Math . random ( ) * 16 ) ]
var color = "#"
for ( var i = 0 ; i < 6 ; i ++ ) color += [ "0" , "1" , "2" , "3" , "4" , "5" , "6" , "7" , "8" , "9" , "a" , "b" , "c" , "d" , "e" , "f" ] [ Math . floor ( Math . random ( ) * 16 ) ]
var part = { rank : 0 , p : { m : "p" , name : "Anonymous" , _id : _id , id : _id , color : color } }
db . tokens . put ( token , _id )
db . users . put ( _id , JSON . stringify ( part ) )
say ( ` Token successfully generated! \` ${ token } , ${ _id } \` ` )
}
if ( cmd === "~settag" && rank >= 1 ) {
if ( args . length == 0 ) return say ( 'Usage: ~settag (_id) (Hex Color) (Tag)' )
var argsplit = args . split ( ' ' )
try {
var user = await db . users . get ( argsplit [ 0 ] )
user = JSON . parse ( user )
} catch ( error ) {
return say ( ` There was an error getting info about \` ${ argsplit [ 0 ] } \` . ` )
}
var color = argsplit [ 1 ]
if ( ! ( typeof color === "string" && color . length == 7 && color . startsWith ( '#' ) ) ) return say ( ` \` ${ color } \` is not a valid color. ` )
argsplit . splice ( 0 , 2 )
user . p . tag = { color : color , text : argsplit . join ( ' ' ) }
await db . users . put ( user . p . _id , JSON . stringify ( user ) )
connections . filter ( a => a . user . _id === user . p . _id ) . forEach ( a => a . close ( ) )
say ( 'Success.' )
}
if ( cmd === "~setrank" && rank >= 2 ) {
if ( args . length == 0 ) return say ( "Usage: ~setrank (_id) (number)" )
var argsplit = args . split ( ' ' )
try {
var user = await db . users . get ( argsplit [ 0 ] )
user = JSON . parse ( user )
} catch ( error ) {
return say ( ` There was an error getting info about \` ${ argsplit [ 0 ] } \` . ` )
}
if ( ! ( argsplit [ 1 ] === "0" || argsplit [ 1 ] === "1" || argsplit [ 1 ] === "2" || argsplit [ 1 ] === "3" ) ) return say ( ` \` ${ argsplit [ 1 ] } \` is not a valid rank. ` )
if ( user . rank >= rank ) return say ( ` This user has a similar or higher rank than you: \` You: ${ rank } \` , \` Them: ${ user . rank } \` ` )
if ( Number ( argsplit [ 1 ] ) >= rank ) return say ( ` This rank is higher than yours! Your rank: \` ${ rank } \` ` )
user . rank = Number ( argsplit [ 1 ] )
if ( users [ argsplit [ 0 ] ] ) users [ argsplit [ 0 ] ] . rank = user . rank
await db . users . put ( user . p . _id , JSON . stringify ( user ) )
say ( "Success." )
}
if ( cmd === "~removetag" && rank >= 1 ) {
if ( args . length == 0 ) return say ( 'Usage: ~removetag (_id)' )
try {
var user = await db . users . get ( args )
user = JSON . parse ( user )
} catch ( error ) {
return say ( ` There was an error getting info about \` ${ args } \` . ` )
}
if ( ! user . p . tag ) return say ( 'This user already has no tag!' )
delete user . p . tag
await db . users . put ( user . p . _id , JSON . stringify ( user ) )
connections . filter ( a => a . user . _id === user . p . _id ) . forEach ( a => a . close ( ) )
say ( 'Success.' )
}
if ( cmd === "~clearchat" && rank >= 1 ) {
chat [ user . channel ] = [ ]
connections . filter ( a => a . user . channel === user . channel ) . forEach ( a => a . sendData ( { m : "c" , c : [ ] } ) )
}
if ( cmd === "~endprocess" && rank >= 2 ) {
connections . filter ( a => a . user . connected ) . forEach ( a => a . sendData ( { "m" : "notification" , title : "Notice" , text : "The server is restarting, you will be right back!" , duration : 10000 } ) )
setTimeout ( ( ) => process . exit ( ) , 1000 )
}
if ( cmd === "~muhe" ) say ( 'MUHE!!!' )
if ( cmd === "~mure" ) say ( 'MURE!!!' )
if ( cmd === "~smoki" ) say ( 'SMOKI!!!' )
if ( cmd === "~notebypass" && rank >= 2 ) {
if ( args . length == 0 ) return say ( 'Usage: ~notebypass (_ID) (boolean)' )
var argsplit = args . split ( ' ' )
if ( argsplit [ 1 ] === "true" ) var boo = true
if ( argsplit [ 1 ] === "false" ) var boo = false
if ( boo === undefined ) return say ( 'Invalid Boolean' )
try {
var info = await db . users . get ( argsplit [ 0 ] )
info = JSON . parse ( info )
} catch ( error ) {
return say ( ` There was an error getting info about \` ${ argsplit [ 0 ] } \` . ` )
}
info . notebypass = boo
if ( users [ info . p . _id ] ) users [ info . p . _id ] . notebypass = boo
await db . users . put ( info . p . _id , JSON . stringify ( info ) )
say ( ` Set note bypass for \` ${ info . p . _id } \` to \` ${ boo } \` ` )
}
if ( cmd === "~custombypass" && rank >= 2 ) {
if ( args . length == 0 ) return say ( 'Usage: ~custombypass (_ID) (boolean)' )
var argsplit = args . split ( ' ' )
if ( argsplit [ 1 ] === "true" ) var boo = true
if ( argsplit [ 1 ] === "false" ) var boo = false
if ( boo === undefined ) return say ( 'Invalid Boolean' )
try {
var info = await db . users . get ( argsplit [ 0 ] )
info = JSON . parse ( info )
} catch ( error ) {
return say ( ` There was an error getting info about \` ${ argsplit [ 0 ] } \` . ` )
}
info . custombypass = boo
if ( users [ info . p . _id ] ) users [ info . p . _id ] . custombypass = boo
await db . users . put ( info . p . _id , JSON . stringify ( info ) )
say ( ` Set custom bypass for \` ${ info . p . _id } \` to \` ${ boo } \` ` )
}
if ( cmd === "~info" && rank >= 1 ) {
if ( args . length == 0 ) return say ( 'Usage: ~info (_id)' )
try {
var info = await db . users . get ( args )
info = JSON . parse ( info )
} catch ( error ) {
return say ( ` There was an error getting info about \` ${ args } \` . ` )
}
if ( connections . find ( a => a . user . _id === info . p . _id ) ) {
var rooms = [ ]
connections . filter ( a => a . user . _id === info . p . _id && a . user . channel ) . forEach ( a => {
if ( rooms . includes ( a . user . channel ) ) return
rooms . push ( a . user . channel )
} )
}
return say ( ` _ID: \` ${ info . p . _id } \` | Rank: \` ${ info . rank } \` | Chat Bypass: \` ${ ! ! info . chatbypass } \` | Note Bypass: \` ${ ! ! info . notebypass } \` | Custom Bypass: \` ${ ! ! info . custombypass } \` | Userset Others: \` ${ ! ! info . usersetothers } \` | Name: \` \` \` ${ info . p . name } \` \` \` | Color: \` ${ info . p . color } \` | ` + ( info . p . tag ? ( ` Tag: (Text: \` ${ info . p . tag . text } \` | Color: \` ${ info . p . tag . color } \` ) | ` ) : "" ) + ( ( rooms !== undefined ) ? ( "Online: " + rooms . join ( ' -|- ' ) ) : ( "Offline" ) ) )
}
if ( cmd === "~js" && rank >= 3 ) {
try {
var result = await eval ( args )
say ( "✅=> " + JSON . stringify ( result ) )
} catch ( error ) {
say ( "❎=>" + error . toString ( ) )
}
}
if ( cmd === "~token" && rank >= 3 ) {
var argsplit = args . split ( ' ' )
var tokentype = [ 'get' , 'reset' ]
if ( ! tokentype . includes ( argsplit [ 0 ] ) ) return say ( ` Types: ${ tokentype . join ( ', ' ) } | Usage: ~token (type) (args) ` )
var jsondb = { }
jsondb . tokens = await db . tokens . iterator ( ) . all ( )
jsondb . ips = await db . ips . iterator ( ) . all ( )
//for await (var [key, value] of db.tokens.iterator().all()) jsondb.tokens[key] = value
//for await (var [key, value] of db.ips.iterator().all()) jsondb.ips[key] = value
if ( argsplit [ 0 ] === "get" ) {
try {
var info = await db . users . get ( argsplit [ 1 ] )
var info = JSON . parse ( info )
} catch ( error ) {
return say ( ` There was an error getting info about \` ${ argsplit [ 1 ] } \` . ` )
}
var founditems = { }
founditems . tokens = jsondb . tokens . filter ( token => token [ 1 ] === argsplit [ 1 ] ) . map ( a => a [ 0 ] )
//founditems.ips = Object.keys(jsondb.ips).filter(ip => founditems.tokens.includes(jsondb.ips[ip]))
return say ( ` Tokens: ` + founditems . tokens . map ( a => ` \` ${ a } \` ` ) . join ( ', ' ) )
} else if ( argsplit [ 0 ] === "reset" ) {
try {
var info = await db . users . get ( argsplit [ 1 ] )
var info = JSON . parse ( info )
} catch ( error ) {
return say ( ` There was an error getting info about \` ${ argsplit [ 1 ] } \` . ` )
}
var founditems = { }
founditems . tokens = jsondb . tokens . filter ( token => token [ 1 ] === argsplit [ 1 ] ) . map ( a => a [ 0 ] )
founditems . ips = jsondb . ips . filter ( ip => founditems . tokens . includes ( ip [ 1 ] ) ) . map ( a => a [ 0 ] )
var token = ""
for ( var i = 0 ; i < 48 ; i ++ ) token += [ "0" , "1" , "2" , "3" , "4" , "5" , "6" , "7" , "8" , "9" , "a" , "b" , "c" , "d" , "e" , "f" ] [ Math . floor ( Math . random ( ) * 16 ) ]
founditems . ips . forEach ( a => db . ips . put ( a , token ) )
founditems . tokens . forEach ( a => db . tokens . del ( a ) )
db . tokens . put ( token , argsplit [ 1 ] )
connections . filter ( a => a . user . _id === argsplit [ 1 ] ) . forEach ( a => a . close ( ) )
return say ( ` Token(s) reset, new token: \` ${ token } \` ` )
}
}
if ( cmd === "~unban" && rank >= 2 ) {
if ( args . length == 0 ) return say ( 'Usage: ~unban (_id)' )
try {
var info = await db . users . get ( args )
var info = JSON . parse ( info )
} catch ( error ) {
return say ( ` There was an error getting info about \` ${ args } \` . ` )
}
if ( ! info . siteban ) return say ( 'This user isn\'t site-banned.' )
delete info . siteban
await db . users . put ( args , JSON . stringify ( info ) )
say ( 'Done.' )
}
if ( cmd === "~baninfo" && rank >= 2 ) {
if ( args . length == 0 ) return say ( 'Usage: ~baninfo (_id)' )
try {
var info = await db . users . get ( args )
info = JSON . parse ( info )
} catch ( error ) {
return say ( ` There was an error getting info about \` ${ args } \` . ` )
}
if ( ! info . siteban ) return say ( 'This user isn\'t site-banned.' )
say ( ` User ${ args } banned by \` ${ info . siteban . _id } \` , ban ends on ${ new Date ( info . siteban . ends ) } for \` \` ${ info . siteban . reason } \` \` ` + ( ( info . siteban . note === undefined ) ? "" : ` | Note: \` \` \` ${ info . siteban . note } \` \` \` ` ) )
}
if ( cmd === "~chatbypass" && rank >= 2 ) {
if ( args . length == 0 ) return say ( 'Usage: ~chatbypass (_ID) (boolean)' )
var argsplit = args . split ( ' ' )
if ( argsplit [ 1 ] === "true" ) var boo = true
if ( argsplit [ 1 ] === "false" ) var boo = false
if ( boo === undefined ) return say ( 'Invalid Boolean' )
try {
var info = await db . users . get ( argsplit [ 0 ] )
info = JSON . parse ( info )
} catch ( error ) {
return say ( ` There was an error getting info about \` ${ argsplit [ 0 ] } \` . ` )
}
info . chatbypass = boo
if ( users [ info . p . _id ] ) users [ info . p . _id ] . chatbypass = boo
await db . users . put ( info . p . _id , JSON . stringify ( info ) )
say ( ` Set chat bypass for \` ${ info . p . _id } \` to \` ${ boo } \` ` )
}
if ( cmd === "~usersetothers" && rank >= 3 ) {
if ( args . length == 0 ) return say ( 'Usage: ~usersetothers (_ID) (boolean)' )
var argsplit = args . split ( ' ' )
if ( argsplit [ 1 ] === "true" ) var boo = true
if ( argsplit [ 1 ] === "false" ) var boo = false
if ( boo === undefined ) return say ( 'Invalid Boolean' )
try {
var info = await db . users . get ( argsplit [ 0 ] )
info = JSON . parse ( info )
} catch ( error ) {
return say ( ` There was an error getting info about \` ${ argsplit [ 0 ] } \` . ` )
}
info . usersetothers = boo
if ( users [ info . p . _id ] ) users [ info . p . _id ] . usersetothers = boo
await db . users . put ( info . p . _id , JSON . stringify ( info ) )
say ( ` Set userset others for \` ${ info . p . _id } \` to \` ${ boo } \` ` )
}
2023-09-15 21:46:32 +02:00
if ( cmd === "~announce" && rank >= 2 ) {
if ( args . length == 0 ) return say ( ` Usage: ~announce (msg) ` )
connections . filter ( a => a . user . connected ) . forEach ( a => a . sendData ( { "m" : "notification" , title : "Notice" , text : args , duration : 60000 } ) )
}
2023-09-13 03:38:54 +02:00
}
module . exports . name = "a"