392 lines
No EOL
10 KiB
JavaScript
392 lines
No EOL
10 KiB
JavaScript
module.exports = {
|
|
page: "/guild/update/:guildId/",
|
|
// eslint-disable-next-line no-unused-vars
|
|
execute: async (req, res, app, config, themeConfig, info) => {
|
|
const data = req.body;
|
|
|
|
let setNewRes;
|
|
const errors = [];
|
|
const 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);
|
|
|
|
const category = config.settings?.find(c => c.categoryId == req.query.categoryId);
|
|
const catO = [];
|
|
const catToggle = [];
|
|
|
|
if (data.categoryToggle) {
|
|
for (const s of data.categoryToggle) {
|
|
if (!config.useCategorySet) try {
|
|
const 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 (const option of newOptionsList) {
|
|
const 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) {
|
|
const 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,
|
|
});
|
|
},
|
|
}; |