fixed themes and ui added new features
This commit is contained in:
117
backend/index.js
117
backend/index.js
@@ -283,6 +283,123 @@ app.get('/api/servers/:guildId/commands', (req, res) => {
|
||||
}
|
||||
});
|
||||
|
||||
// INVITES: create, list, delete
|
||||
app.get('/api/servers/:guildId/invites', async (req, res) => {
|
||||
try {
|
||||
const { guildId } = req.params;
|
||||
const db = readDb();
|
||||
const saved = (db[guildId] && db[guildId].invites) ? db[guildId].invites : [];
|
||||
|
||||
// try to enrich with live data where possible
|
||||
const guild = bot.client.guilds.cache.get(guildId);
|
||||
let liveInvites = [];
|
||||
if (guild) {
|
||||
try {
|
||||
const fetched = await guild.invites.fetch();
|
||||
liveInvites = Array.from(fetched.values());
|
||||
} catch (e) {
|
||||
// ignore fetch errors
|
||||
}
|
||||
}
|
||||
|
||||
const combined = saved.map(inv => {
|
||||
const live = liveInvites.find(li => li.code === inv.code);
|
||||
return {
|
||||
...inv,
|
||||
uses: live ? live.uses : inv.uses || 0,
|
||||
maxUses: inv.maxUses || (live ? live.maxUses : 0),
|
||||
maxAge: inv.maxAge || (live ? live.maxAge : 0),
|
||||
};
|
||||
});
|
||||
|
||||
res.json(combined);
|
||||
} catch (error) {
|
||||
console.error('Error listing invites:', error);
|
||||
res.status(500).json({ success: false, message: 'Internal Server Error' });
|
||||
}
|
||||
});
|
||||
|
||||
app.post('/api/servers/:guildId/invites', async (req, res) => {
|
||||
try {
|
||||
const { guildId } = req.params;
|
||||
const { channelId, maxAge, maxUses, temporary } = req.body || {};
|
||||
const guild = bot.client.guilds.cache.get(guildId);
|
||||
if (!guild) return res.status(404).json({ success: false, message: 'Guild not found' });
|
||||
|
||||
let channel = null;
|
||||
if (channelId) {
|
||||
try { channel = await guild.channels.fetch(channelId); } catch (e) { channel = null; }
|
||||
}
|
||||
if (!channel) {
|
||||
// fall back to first text channel
|
||||
const channels = await guild.channels.fetch();
|
||||
channel = channels.find(c => c.type === 0) || channels.first();
|
||||
}
|
||||
if (!channel) return res.status(400).json({ success: false, message: 'No channel available to create invite' });
|
||||
|
||||
const inviteOptions = {
|
||||
maxAge: typeof maxAge === 'number' ? maxAge : 0,
|
||||
maxUses: typeof maxUses === 'number' ? maxUses : 0,
|
||||
temporary: !!temporary,
|
||||
unique: true,
|
||||
};
|
||||
|
||||
const invite = await channel.createInvite(inviteOptions);
|
||||
|
||||
const db = readDb();
|
||||
if (!db[guildId]) db[guildId] = {};
|
||||
if (!db[guildId].invites) db[guildId].invites = [];
|
||||
|
||||
const item = {
|
||||
code: invite.code,
|
||||
url: invite.url,
|
||||
channelId: channel.id,
|
||||
createdAt: new Date().toISOString(),
|
||||
maxUses: invite.maxUses || inviteOptions.maxUses || 0,
|
||||
maxAge: invite.maxAge || inviteOptions.maxAge || 0,
|
||||
temporary: !!invite.temporary,
|
||||
};
|
||||
|
||||
db[guildId].invites.push(item);
|
||||
writeDb(db);
|
||||
|
||||
res.json({ success: true, invite: item });
|
||||
} catch (error) {
|
||||
console.error('Error creating invite:', error);
|
||||
res.status(500).json({ success: false, message: 'Internal Server Error' });
|
||||
}
|
||||
});
|
||||
|
||||
app.delete('/api/servers/:guildId/invites/:code', async (req, res) => {
|
||||
try {
|
||||
const { guildId, code } = req.params;
|
||||
const db = readDb();
|
||||
const guild = bot.client.guilds.cache.get(guildId);
|
||||
|
||||
// Try to delete on Discord if possible
|
||||
if (guild) {
|
||||
try {
|
||||
// fetch invites and delete matching code
|
||||
const fetched = await guild.invites.fetch();
|
||||
const inv = fetched.find(i => i.code === code);
|
||||
if (inv) await inv.delete();
|
||||
} catch (e) {
|
||||
// ignore
|
||||
}
|
||||
}
|
||||
|
||||
if (db[guildId] && db[guildId].invites) {
|
||||
db[guildId].invites = db[guildId].invites.filter(i => i.code !== code);
|
||||
writeDb(db);
|
||||
}
|
||||
|
||||
res.json({ success: true });
|
||||
} catch (error) {
|
||||
console.error('Error deleting invite:', error);
|
||||
res.status(500).json({ success: false, message: 'Internal Server Error' });
|
||||
}
|
||||
});
|
||||
|
||||
const bot = require('../discord-bot');
|
||||
|
||||
bot.login();
|
||||
|
||||
Reference in New Issue
Block a user