ui updates and bot updates. new commands and command handler

This commit is contained in:
2025-10-03 19:53:23 -04:00
parent 524a6cc633
commit f63fca3f1b
20 changed files with 831 additions and 125 deletions

View File

@@ -182,6 +182,50 @@ app.post('/api/servers/:guildId/welcome-leave-settings', (req, res) => {
db[guildId].leaveMessage = newSettings.leave.message;
db[guildId].leaveCustomMessage = newSettings.leave.customMessage;
writeDb(db);
res.json({ success: true });
});
app.get('/api/servers/:guildId/roles', async (req, res) => {
const { guildId } = req.params;
const guild = bot.client.guilds.cache.get(guildId);
if (!guild) {
return res.json([]);
}
try {
const rolesCollection = await guild.roles.fetch();
// Exclude @everyone (role.id === guild.id), exclude managed roles, and only include roles below the bot's highest role
const botHighest = guild.members.me.roles.highest.position;
const manageable = rolesCollection
.filter(role => role.id !== guild.id && !role.managed && role.position < botHighest)
.sort((a, b) => b.position - a.position)
.map(role => ({ id: role.id, name: role.name, color: role.hexColor }));
res.json(manageable);
} catch (error) {
console.error('Error fetching roles:', error);
res.status(500).json({ success: false, message: 'Internal Server Error' });
}
});
app.get('/api/servers/:guildId/autorole-settings', (req, res) => {
const { guildId } = req.params;
const db = readDb();
const settings = db[guildId] || {};
const autoroleSettings = settings.autorole || { enabled: false, roleId: '' };
res.json(autoroleSettings);
});
app.post('/api/servers/:guildId/autorole-settings', (req, res) => {
const { guildId } = req.params;
const { enabled, roleId } = req.body;
const db = readDb();
if (!db[guildId]) {
db[guildId] = {};
}
db[guildId].autorole = { enabled, roleId };
writeDb(db);
res.json({ success: true });
});
@@ -190,6 +234,34 @@ app.get('/', (req, res) => {
res.send('Hello from the backend!');
});
// Return list of bot commands and per-guild enabled/disabled status
app.get('/api/servers/:guildId/commands', (req, res) => {
try {
const { guildId } = req.params;
const db = readDb();
const guildSettings = db[guildId] || {};
const toggles = guildSettings.commandToggles || {};
const protectedCommands = ['manage-commands', 'help'];
const commands = Array.from(bot.client.commands.values()).map(cmd => {
const isLocked = protectedCommands.includes(cmd.name);
const isEnabled = isLocked ? true : (toggles[cmd.name] !== false && cmd.enabled !== false);
return {
name: cmd.name,
description: cmd.description || 'No description.',
enabled: isEnabled,
locked: isLocked,
hasSlashBuilder: !!cmd.builder,
};
});
res.json(commands);
} catch (error) {
console.error('Error returning commands:', error);
res.status(500).json({ success: false, message: 'Internal Server Error' });
}
});
const bot = require('../discord-bot');
bot.login();