feat: initial Papo bot scaffold

This commit is contained in:
Pascal.P
2025-11-30 11:04:41 +01:00
commit 000481a3b0
12168 changed files with 1584750 additions and 0 deletions

47
src/web/routes/api.ts Normal file
View File

@@ -0,0 +1,47 @@
import { Router } from 'express';
import { prisma } from '../../database/index.js';
import { settings } from '../../config/state.js';
const router = Router();
router.get('/overview', async (_req, res) => {
try {
const [open, inProgress, closed] = await Promise.all([
prisma.ticket.count({ where: { status: 'open' } }),
prisma.ticket.count({ where: { status: 'in-progress' } }),
prisma.ticket.count({ where: { status: 'closed' } })
]);
res.json({ tickets: { open, inProgress, closed } });
} catch (err) {
res.json({ tickets: { open: 0, inProgress: 0, closed: 0 }, error: 'DB unavailable' });
}
});
router.get('/tickets', async (_req, res) => {
try {
const tickets = await prisma.ticket.findMany({ orderBy: { createdAt: 'desc' }, take: 20 });
res.json({ tickets });
} catch (err) {
res.json({ tickets: [], error: 'DB unavailable' });
}
});
router.get('/settings', (_req, res) => {
res.json({ guilds: Array.from(settings.entries()) });
});
router.post('/settings', (req, res) => {
const { guildId, welcomeChannelId, logChannelId, automodEnabled, levelingEnabled } = req.body;
if (!guildId) return res.status(400).json({ error: 'guildId required' });
const current = settings.get(guildId) ?? {};
settings.set(guildId, {
...current,
welcomeChannelId: welcomeChannelId ?? current.welcomeChannelId,
logChannelId: logChannelId ?? current.logChannelId,
automodEnabled: automodEnabled ?? current.automodEnabled,
levelingEnabled: levelingEnabled ?? current.levelingEnabled
});
res.json({ ok: true });
});
export default router;