diff --git a/src/web/routes/api.ts b/src/web/routes/api.ts
index a0d9624..01f6fdb 100644
--- a/src/web/routes/api.ts
+++ b/src/web/routes/api.ts
@@ -106,6 +106,35 @@ router.get('/guild/logs', requireAuth, (req, res) => {
res.json({ logs });
});
+router.get('/guild/resources', requireAuth, async (req, res) => {
+ const guildId = typeof req.query.guildId === 'string' ? req.query.guildId : undefined;
+ if (!guildId) return res.status(400).json({ error: 'guildId required' });
+ const guild = context.client?.guilds.cache.get(guildId);
+ if (!guild) return res.status(404).json({ error: 'guild not found' });
+ const channels = guild.channels.cache
+ .filter((c) => c.isTextBased() || c.isVoiceBased())
+ .map((c) => ({
+ id: c.id,
+ name: c.name,
+ type: c.isVoiceBased() ? 'voice' : 'text',
+ parentId: c.parentId
+ }))
+ .sort((a, b) => a.name.localeCompare(b.name));
+ const roles = guild.roles.cache
+ .filter((r) => r.name !== '@everyone')
+ .map((r) => ({
+ id: r.id,
+ name: r.name,
+ color: r.hexColor
+ }))
+ .sort((a, b) => b.rawPosition - a.rawPosition);
+ const categories = guild.channels.cache
+ .filter((c) => c.type === 4)
+ .map((c) => ({ id: c.id, name: c.name }))
+ .sort((a, b) => a.name.localeCompare(b.name));
+ res.json({ channels, roles, categories });
+});
+
router.get('/overview', requireAuth, async (req, res) => {
const guildId = typeof req.query.guildId === 'string' ? req.query.guildId : undefined;
try {
diff --git a/src/web/routes/dashboard.ts b/src/web/routes/dashboard.ts
index c8d8995..c59b599 100644
--- a/src/web/routes/dashboard.ts
+++ b/src/web/routes/dashboard.ts
@@ -105,6 +105,9 @@ router.get('/', (req, res) => {
+
+
+