2023-06-19 14:21:58 +05:00
module . exports = function ( config , themeConfig ) {
2023-06-22 19:36:52 +05:00
// eslint-disable-next-line no-unused-vars
config . guildSettings = async function ( req , res , home , category ) {
if ( ! req . session . user ) return res . redirect ( "/discord?r=/guild/" + req . params . id ) ;
const bot = config . bot ;
if ( ! bot . guilds . cache . get ( req . params . id ) ) {
try {
await bot . guilds . fetch ( req . params . id ) ;
} catch ( e ) { /* ... */ }
}
if ( ! bot . guilds . cache . get ( req . params . id ) ) return res . redirect ( "/manage?error=noPermsToManageGuild" ) ;
if ( ! bot . guilds . cache . get ( req . params . id ) . members . cache . get ( req . session . user . id ) ) {
try {
await bot . guilds . cache . get ( req . params . id ) . members . fetch ( req . session . user . id ) ;
} catch ( e ) { /* ... */ }
}
2023-06-24 01:20:56 +05:00
if ( ! bot . guilds . cache . get ( req . params . id ) . members . cache . get ( req . session . user . id ) . permissions . has ( config . requiredPermissions ) ) return res . redirect ( "/manage?error=noPermsToManageGuild" ) ;
2023-06-22 19:36:52 +05:00
if ( bot . guilds . cache . get ( req . params . id ) . channels . cache . size < 1 ) {
try {
await bot . guilds . cache . get ( req . params . id ) . channels . fetch ( ) ;
} catch ( e ) { /* ... */ }
}
if ( bot . guilds . cache . get ( req . params . id ) . roles . cache . size < 2 ) {
try {
await bot . guilds . cache . get ( req . params . id ) . roles . fetch ( ) ;
} catch ( e ) { /* ... */ }
}
const actual = { } ;
const toggle = { } ;
const premium = { } ;
const canUseList = { } ;
2023-06-24 01:20:56 +05:00
if ( config . settings ? . length ) {
config . settings = config . settings . filter ( c => c . categoryPermissions ? bot . guilds . cache . get ( req . params . id ) . members . cache . get ( req . session . user . id ) . permissions . has ( c . categoryPermissions ) : true ) ;
2023-06-22 19:36:52 +05:00
for ( const category of config . settings ) {
if ( ! canUseList [ category . categoryId ] ) canUseList [ category . categoryId ] = { } ;
if ( ! actual [ category . categoryId ] ) actual [ category . categoryId ] = { } ;
if ( config . useCategorySet ) {
let catGAS = await category . getActualSet ( {
guild : {
id : req . params . id ,
object : bot . guilds . cache . get ( req . params . id ) ,
} ,
user : {
id : req . session . user . id ,
object : bot . guilds . cache . get ( req . params . id ) . members . cache . get ( req . session . user . id ) ,
} ,
} ) ;
if ( category . toggleable ) {
if ( ! toggle [ category . categoryId ] ) {
toggle [ category . categoryId ] = { } ;
}
toggle [ category . categoryId ] = catGAS . find ( o => o . optionId === "categoryToggle" ) || null ;
catGAS = catGAS . filter ( c => c . optionId !== "categoryToggle" ) ;
}
if ( category . premium ) {
if ( ! premium [ category . categoryId ] ) premium [ category . categoryId ] = { } ;
premium [ category . categoryId ] = await category . premiumUser ( {
guild : {
id : req . params . id ,
} ,
user : {
id : req . session . user . id ,
tag : req . session . user . tag ,
} ,
} ) ;
}
if ( category . premium && premium [ category . categoryId ] == false )
return res . redirect ( ` /settings/ ${ req . params . id } ?error=premiumRequired ` ) ;
for ( const o of catGAS ) {
if ( ! o || ! o ? . optionId ) {
console . log ( "WARNING: You haven't set the optionId for a category option in your config. This is required for the category option to work." ) ;
continue ;
}
const option = category . categoryOptionsList . find ( c => c . optionId == o . optionId ) ;
if ( option ) {
if ( option . allowedCheck ) {
const canUse = await option . allowedCheck ( {
guild : { id : req . params . id } ,
user : { id : req . session . user . id } ,
} ) ;
if ( typeof canUse != "object" ) throw new TypeError ( ` ${ category . categoryId } category option with id ${ option . optionId } allowedCheck function need to return {allowed: Boolean, errorMessage: String | null} ` ) ;
canUseList [ category . categoryId ] [ option . optionId ] = canUse ;
} else {
canUseList [ category . categoryId ] [ option . optionId ] = {
allowed : true ,
errorMessage : null ,
} ;
}
if ( option . optionType !== "spacer" ) {
if ( ! actual [ category . categoryId ] ) actual [ category . categoryId ] = { } ;
if ( ! actual [ category . categoryId ] [ option . optionId ] )
actual [ category . categoryId ] [ option . optionId ] = o . data ;
} else actual [ category . categoryId ] [ option . optionId ] = {
type : "spacer" ,
themeOptions : option . themeOptions ,
} ;
} else console . log ( ` WARNING: Option ${ o . optionId } in category ${ category . categoryId } doesn't exist in your config. ` ) ;
}
} else
for ( const s of config . settings ) {
if ( ! canUseList [ s . categoryId ] ) canUseList [ s . categoryId ] = { } ;
if ( s . toggleable ) {
if ( ! toggle [ s . categoryId ] ) toggle [ s . categoryId ] = { } ;
toggle [ s . categoryId ] = await s . getActualSet ( {
guild : {
id : req . params . id ,
} ,
} ) ;
}
if ( s . premium ) {
if ( ! premium [ s . categoryId ] ) premium [ s . categoryId ] = { } ;
premium [ s . categoryId ] = await s . premiumUser ( {
guild : {
id : req . params . id ,
} ,
user : {
id : req . session . user . id ,
tag : req . session . user . tag ,
} ,
} ) ;
}
if ( category )
if ( s . premium && premium [ category ] == false )
return res . redirect ( ` /settings/ ${ req . params . id } ?error=premiumRequired ` ) ;
for ( const c of s . categoryOptionsList ) {
if ( c . allowedCheck ) {
const canUse = await c . allowedCheck ( {
guild : { id : req . params . id } ,
user : { id : req . session . user . id } ,
} ) ;
if ( typeof canUse != "object" ) throw new TypeError ( ` ${ s . categoryId } category option with id ${ c . optionId } allowedCheck function need to return {allowed: Boolean, errorMessage: String | null} ` ) ;
canUseList [ s . categoryId ] [ c . optionId ] = canUse ;
} else {
canUseList [ s . categoryId ] [ c . optionId ] = {
allowed : true ,
errorMessage : null ,
} ;
}
if ( ! actual [ s . categoryId ] ) actual [ s . categoryId ] = { } ;
2023-06-26 17:41:52 +05:00
if ( c . optionType . type == "embedBuilder" ) {
actual [ s . categoryId ] [ c . optionId ] = {
type : "embedBuilder" ,
themeOptions : c . themeOptions ,
} ;
} else if ( c . optionType . type == "spacer" ) {
2023-06-22 19:36:52 +05:00
actual [ s . categoryId ] [ c . optionId ] = {
type : "spacer" ,
themeOptions : c . themeOptions ,
} ;
} else if ( c . optionType . type == "collapsable" || c . optionType . type == "modal" ) {
for ( const item of c . optionType . options ) {
if ( item . optionType . type == "channelsMultiSelect" || item . optionType . type == "roleMultiSelect" || item . optionType . type == "tagInput" )
actual [ s . categoryId ] [ item . optionId ] = [ ] ;
}
} else {
if ( ! actual [ s . categoryId ] ) actual [ s . categoryId ] = { } ;
if ( ! actual [ s . categoryId ] [ c . optionId ] ) {
if ( c . optionType . type === "multiRow" ) {
for ( const item of c . optionType . options ) {
actual [ s . categoryId ] [ item . optionId ] = await item . getActualSet ( {
guild : {
id : req . params . id ,
object : bot . guilds . cache . get ( req . params . id ) ,
} ,
user : {
id : req . session . user . id ,
object : bot . guilds . cache . get ( req . params . id ) . members . cache . get ( req . session . user . id ) ,
} ,
} ) ;
}
continue ;
}
2023-06-26 17:41:52 +05:00
2023-06-22 19:36:52 +05:00
actual [ s . categoryId ] [ c . optionId ] = await c . getActualSet ( {
guild : {
id : req . params . id ,
object : bot . guilds . cache . get ( req . params . id ) ,
} ,
user : {
id : req . session . user . id ,
object : bot . guilds . cache . get ( req . params . id ) . members . cache . get ( req . session . user . id ) ,
} ,
} ) ;
}
}
}
}
}
2023-06-24 01:20:56 +05:00
}
2023-06-22 19:36:52 +05:00
let errors ;
let success ;
if ( req . session . errors ) {
if ( String ( req . session . errors ) . includes ( "%is%" ) ) {
errors = req . session . errors . split ( "%and%" ) ;
}
}
if ( req . session . success ) {
if ( typeof req . session . success == "boolean" )
success = true ;
else {
if ( String ( req . session . success ) . includes ( "%is%" ) ) {
success = req . session . success . split ( "%and%" ) ;
}
}
}
req . session . errors = null ;
req . session . success = null ;
const guild = bot . guilds . cache . get ( req . params . id ) ;
let gIcon ;
if ( ! guild . iconURL ( ) ) gIcon = themeConfig ? . icons ? . noGuildIcon ;
else gIcon = guild . iconURL ( ) ;
res . render ( "settings" , {
successes : success ,
errors : errors ,
settings : config . settings ,
actual : actual ,
toggle ,
premium ,
canUseList ,
bot : config . bot ,
guild ,
userid : req . session . user . id ,
gIcon ,
req : req ,
guildid : req . params . id ,
themeConfig : req . themeConfig ,
config ,
} ) ;
} ;
} ;