aboutsummaryrefslogtreecommitdiff
path: root/bot/src/api/routes/settings.js
blob: 3722fd24d37e695d2e5cb43982ec354502562b0e (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
import { ChannelType } from 'discord.js';
import { Router } from 'express';
import { guildSettings } from '../../models/guild-settings.js';
import { verifyToken } from './auth.js';

export function settingsRouter(client) {
    const router = Router();

    router.get('/settings/guilds/:id', verifyToken, async (req, res) => {
        try {
            const settings = await guildSettings.findOne({ where: { guildID: req.params.id } });

            if (!settings) {
                await guildSettings.create({ guildID: req.params.id });
                return res.status(200).send({ message: 'Added new guild' });
            }

            let channels = [];

            client.guilds.cache.get(settings.guildID).channels.cache
                .filter((channel) => channel.type === ChannelType.GuildText)
                .forEach((channel) => {
                    const channelInfo = {
                        name: channel.name,
                        id: channel.id,
                        category: channel.parent ? channel.parent.name : 'No Category'
                    };

                    channels.push(channelInfo);
                });

            res.json({
                settings: settings,
                guild: [
                    {
                        name: client.guilds.cache.get(settings.guildID).name,
                        id: settings.guildID
                    }
                ],
                channels: channels
            });
        } catch (e) {
            console.error('Error fetching settings:', e);
            res.status(500).send({ message: 'Internal Server Error' });
        }
    });

    router.post('/settings/guilds/:id', verifyToken, async (req, res) => {
        try {
            const guildID = req.params.id;
            const { ...newSettings } = req.body;
            const [updated] = await guildSettings.update(newSettings, { where: { guildID: guildID } });
            if (updated) {
                const updatedSettings = await guildSettings.findOne({ where: { guildID: guildID } });
                res.json(updatedSettings);
            } else {
                res.status(404).send({ message: 'Settings not found' });
            }
        } catch (e) {
            console.error('Error updating settings:', e);
            res.status(500).send({ message: 'Internal Server Error' });
        }
    });

    return router;
}