dashboard-core/theme/dbd-soft-ui/pages/post/guildSettings.js

477 lines
20 KiB
JavaScript
Raw Normal View History

2023-06-19 14:21:58 +05:00
module.exports = {
page: '/guild/update/:guildId/',
execute: async (req, res, app, config, themeConfig, info) => {
const data = req.body
let setNewRes
let errors = []
let successes = []
if (!req.session?.user)
return res.send({
success: false,
message: 'User is not logged in'
})
const userGuildMemberObject = config.bot.guilds.cache
.get(req.params.guildId)
.members.cache.get(req.session.user.id)
const guildObject = config.bot.guilds.cache.get(req.params.guildId)
let category = config.settings?.find((c) => c.categoryId == req.query.categoryId)
let catO = [];
let catToggle = [];
if (data.categoryToggle) {
for (const s of data.categoryToggle) {
if (!config.useCategorySet) try {
let category = config.settings?.find(
(c) => c?.categoryId == s.id
)
await category.setNew({
guild: { id: req.params.guildId },
newData: s.value
})
} catch (err) {
errors.push(`Category ${s.id} %is%Failed to save%is%categoryToggle`);
}
else {
if (category?.categoryId == s.id) catO.push({
optionId: category.categoryId == s.id ? "categoryToggle" : s.id,
data: s.value
});
else catToggle.push({
optionId: s.id,
data: s.value
});
}
}
if ("categoryToggle" in data && !category) {
return res.send({
success: true,
message: "Saved toggle",
errors: [],
successes: [],
})
}
}
if (!category)
return res.send({
error: true,
message: "No category found",
})
const subOptions = category.categoryOptionsList.filter((o) => o.optionType.type == "multiRow")
.map((o) => o.optionType.options)
.flat()
const newOptionsList = [
...category.categoryOptionsList.filter((o) => o.optionType.type != "multiRow"),
...subOptions
]
if (data.options) for (let option of newOptionsList) {
let d = data.options.find((o) => o.id === option.optionId);
let canUse = {}
if (!d && !d?.id) continue;
if (option.allowedCheck) canUse = await option.allowedCheck({
guild: { id: req.params.guildId },
user: { id: req.session.user.id },
})
else canUse = { allowed: true, errorMessage: null }
if (canUse.allowed == false) {
setNewRes = { error: canUse.errorMessage }
errors.push(
option.optionName +
"%is%" +
setNewRes.error +
"%is%" +
option.optionId
)
} else if (option.optionType != "spacer") {
if (config.useCategorySet) {
if (option.optionType.type == "rolesMultiSelect" || option.optionType.type == "channelsMultiSelect" || option.optionType.type == "multiSelect" || option.optionType.type == 'tagInput') {
if (!d.value || d.value == null || d.value == undefined) catO.push({
optionId: option.optionId,
data: [],
})
else if (typeof d.value != "object") catO.push({
optionId: option.optionId,
data: [d.value],
})
else catO.push({
optionId: option.optionId,
data: d.value,
})
} else if (option.optionType.type == "switch") {
if (
d.value ||
d.value == null ||
d.value == undefined ||
d.value == false
) {
if (d.value || d.value == null || d.value == undefined || d.value == false) {
if (d.value == null || d.value == undefined || d.value == false)
catO.push({
optionId: option.optionId,
data: false
});
else
catO.push({
optionId: option.optionId,
data: true
});
}
}
} else if (option.optionType.type == "embedBuilder") {
if (
d.value == null ||
d.value == undefined
)
catO.push({
optionId: option.optionId,
data: option.optionType.data,
})
else {
try {
const parsedResponse = JSON.parse(
d.value
)
catO.push({
optionId: option.optionId,
data: parsedResponse,
})
} catch (err) {
catO.push({
optionId: option.optionId,
data: option.optionType.data,
})
}
}
} else {
if (
d.value == undefined ||
d.value == null
)
catO.push({
optionId: option.optionId,
data: null,
})
else
catO.push({
optionId: option.optionId,
data: d.value,
})
}
} else {
if (
option.optionType.type ==
'rolesMultiSelect' ||
option.optionType.type ==
'channelsMultiSelect' ||
option.optionType.type == 'multiSelect' ||
option.optionType.type == 'tagInput'
) {
if (
!d.value ||
d.value == null ||
d.value == undefined
) {
setNewRes = await option.setNew({
guild: {
id: req.params.guildId,
object: guildObject
},
user: {
id: req.session.user.id,
object: userGuildMemberObject
},
newData: []
})
setNewRes ? null : (setNewRes = {})
if (setNewRes.error) {
errors.push(
option.optionName +
'%is%' +
setNewRes.error +
'%is%' +
option.optionId
)
} else {
successes.push(option.optionName)
}
} else if (
typeof d.value != 'object'
) {
setNewRes = await option.setNew({
guild: {
id: req.params.guildId,
object: guildObject
},
user: {
id: req.session.user.id,
object: userGuildMemberObject
},
newData: [d.value]
})
setNewRes ? null : (setNewRes = {})
if (setNewRes.error) {
errors.push(
option.optionName +
'%is%' +
setNewRes.error +
'%is%' +
option.optionId
)
} else {
successes.push(option.optionName)
}
} else {
setNewRes = await option.setNew({
guild: {
id: req.params.guildId,
object: guildObject
},
user: {
id: req.session.user.id,
object: userGuildMemberObject
},
newData: d.value
})
setNewRes ? null : (setNewRes = {})
if (setNewRes.error) {
errors.push(
option.optionName +
'%is%' +
setNewRes.error +
'%is%' +
option.optionId
)
} else {
successes.push(option.optionName)
}
}
} else if (
option.optionType.type == 'embedBuilder'
) {
if (
d.value !== null ||
d.value !== undefined
) {
setNewRes =
(await option.setNew({
guild: {
id: req.params.guildId,
object: guildObject
},
user: {
id: req.session.user.id,
object: userGuildMemberObject
},
newData: JSON.parse(
d.value
)
})) || {}
setNewRes ? null : (setNewRes = {})
if (setNewRes.error) {
errors.push(
option.optionName +
'%is%' +
setNewRes.error +
'%is%' +
option.optionId
)
} else {
successes.push(option.optionName)
}
} else {
try {
const parsedResponse = JSON.parse(
d.value
)
setNewRes =
(await option.setNew({
guild: {
id: req.params.guildId,
object: guildObject
},
user: {
id: req.session.user.id,
object: userGuildMemberObject
},
newData: parsedResponse
})) || {}
setNewRes ? null : (setNewRes = {})
if (setNewRes.error) {
errors.push(
option.optionName +
'%is%' +
setNewRes.error +
'%is%' +
option.optionId
)
} else {
successes.push(
option.optionName
)
}
} catch (err) {
setNewRes =
(await option.setNew({
guild: {
id: req.params.guildId,
object: guildObject
},
user: {
id: req.session.user.id,
object: userGuildMemberObject
},
newData:
option.optionType.data
})) || {}
setNewRes = {
error: 'JSON parse for embed builder went wrong, your settings have been reset.'
}
if (setNewRes.error) {
errors.push(
option.optionName +
'%is%' +
setNewRes.error +
'%is%' +
option.optionId
)
} else {
successes.push(
option.optionName
)
}
}
}
} else {
if (
d.value == undefined ||
d.value == null
) {
setNewRes =
(await option.setNew({
guild: {
id: req.params.guildId,
object: guildObject
},
user: {
id: req.session.user.id,
object: userGuildMemberObject
},
newData: null
})) || {}
setNewRes ? null : (setNewRes = {})
if (setNewRes.error) {
errors.push(
option.optionName +
'%is%' +
setNewRes.error +
'%is%' +
option.optionId
)
} else {
successes.push(option.optionName)
}
} else {
setNewRes =
(await option.setNew({
guild: {
id: req.params.guildId,
object: guildObject
},
user: {
id: req.session.user.id,
object: userGuildMemberObject
},
newData: d.value
})) || {}
setNewRes ? null : (setNewRes = {})
if (setNewRes.error) {
errors.push(
option.optionName +
'%is%' +
setNewRes.error +
'%is%' +
option.optionId
)
} else {
successes.push(option.optionName)
}
}
}
}
}
}
if (config.useCategorySet && catO.length) {
let sNR = await category.setNew({
guild: {
id: req.params.guildId,
object: guildObject,
},
user: {
id: req.session.user.id,
object: userGuildMemberObject,
},
data: catO,
})
sNR ? null : (sNR = {})
if (sNR.error) {
errors.push(category.categoryId + "%is%" + sNR.error)
} else {
successes.push(category.categoryId)
}
}
if (config.useCategorySet && catToggle.length) for (const opt of catToggle) {
let cat = config.settings?.find((c) => c.categoryId == opt.optionId);
if (!cat) {
errors.push(`Category ${opt.optionId} %is%Doesn't exist%is%categoryToggle`);
continue;
}
try {
await cat.setNew({
guild: {
id: req.params.guildId,
object: guildObject,
},
user: {
id: req.session.user.id,
object: userGuildMemberObject,
},
data: [{
optionId: "categoryToggle",
data: opt.data
}],
});
} catch (err) {
errors.push(`Category ${opt.optionId} %is%${err}%is%categoryToggle`);
}
}
req.DBDEvents.emit('guildSettingsUpdated', {
user: req.session.user,
changes: { successes, errors }
})
res.send({
success: true,
message: 'saved changed',
errors,
successes
})
}
}