Program Commit

This commit is contained in:
2025-10-02 17:31:49 -04:00
parent fd73be0efd
commit 1341b325ee
39 changed files with 21396 additions and 0 deletions

0
backend/bot.js Normal file
View File

View File

156
backend/index.js Normal file
View File

@@ -0,0 +1,156 @@
require('dotenv').config();
const express = require('express');
const cors = require('cors');
const app = express();
const port = process.env.PORT || 3001;
app.use(cors());
app.use(express.json());
const axios = require('axios');
app.get('/auth/discord', (req, res) => {
const url = `https://discord.com/api/oauth2/authorize?client_id=${process.env.DISCORD_CLIENT_ID}&redirect_uri=${encodeURIComponent('http://localhost:3002/auth/discord/callback')}&response_type=code&scope=identify%20guilds`;
res.redirect(url);
});
app.get('/auth/discord/callback', async (req, res) => {
const code = req.query.code;
if (!code) {
return res.status(400).send('No code provided');
}
try {
const params = new URLSearchParams();
params.append('client_id', process.env.DISCORD_CLIENT_ID);
params.append('client_secret', process.env.DISCORD_CLIENT_SECRET);
params.append('grant_type', 'authorization_code');
params.append('code', code);
params.append('redirect_uri', 'http://localhost:3002/auth/discord/callback');
const response = await axios.post('https://discord.com/api/oauth2/token', params, {
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
},
});
const { access_token } = response.data;
const userResponse = await axios.get('https://discord.com/api/users/@me', {
headers: {
Authorization: `Bearer ${access_token}`,
},
});
const guildsResponse = await axios.get('https://discord.com/api/users/@me/guilds', {
headers: {
Authorization: `Bearer ${access_token}`,
},
});
const adminGuilds = guildsResponse.data.filter(guild => (guild.permissions & 0x8) === 0x8);
const user = userResponse.data;
fs.readFile('db.json', 'utf8', (err, data) => {
if (err) {
console.error(err);
user.theme = 'light';
} else {
const db = JSON.parse(data);
user.theme = db.users && db.users[user.id] ? db.users[user.id].theme : 'light';
}
const guilds = adminGuilds;
res.redirect(`http://localhost:3000/dashboard?user=${encodeURIComponent(JSON.stringify(user))}&guilds=${encodeURIComponent(JSON.stringify(guilds))}`);
});
} catch (error) {
console.error('Error during Discord OAuth2 callback:', error);
res.status(500).send('Internal Server Error');
}
});
const fs = require('fs');
app.get('/api/servers/:guildId/settings', (req, res) => {
const { guildId } = req.params;
fs.readFile('db.json', 'utf8', (err, data) => {
if (err) {
console.error(err);
return res.status(500).send('Internal Server Error');
}
const db = JSON.parse(data);
const settings = db[guildId] || { pingCommand: false };
res.json(settings);
});
});
app.post('/api/servers/:guildId/settings', (req, res) => {
const { guildId } = req.params;
const { pingCommand } = req.body;
fs.readFile('db.json', 'utf8', (err, data) => {
if (err) {
console.error(err);
return res.status(500).send('Internal Server Error');
}
const db = JSON.parse(data);
db[guildId] = { pingCommand };
fs.writeFile('db.json', JSON.stringify(db, null, 2), (err) => {
if (err) {
console.error(err);
return res.status(500).send('Internal Server Error');
}
res.json({ success: true });
});
});
});
app.get('/api/servers/:guildId/bot-status', (req, res) => {
const { guildId } = req.params;
const guild = bot.client.guilds.cache.get(guildId);
if (guild) {
res.json({ isBotInServer: true });
} else {
res.json({ isBotInServer: false });
}
});
app.get('/api/client-id', (req, res) => {
res.json({ clientId: process.env.DISCORD_CLIENT_ID });
});
app.post('/api/user/theme', (req, res) => {
const { userId, theme } = req.body;
fs.readFile('db.json', 'utf8', (err, data) => {
if (err) {
console.error(err);
return res.status(500).send('Internal Server Error');
}
const db = JSON.parse(data);
if (!db.users) {
db.users = {};
}
if (!db.users[userId]) {
db.users[userId] = {};
}
db.users[userId].theme = theme;
fs.writeFile('db.json', JSON.stringify(db, null, 2), (err) => {
if (err) {
console.error(err);
return res.status(500).send('Internal Server Error');
}
res.json({ success: true });
});
});
});
app.get('/', (req, res) => {
res.send('Hello from the backend!');
});
const bot = require('../discord-bot');
bot.login();
app.listen(port, () => {
console.log(`Server is running on port ${port}`);
});

1653
backend/package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

23
backend/package.json Normal file
View File

@@ -0,0 +1,23 @@
{
"name": "backend",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "node index.js",
"dev": "nodemon index.js"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"axios": "^1.7.2",
"cors": "^2.8.5",
"dotenv": "^16.4.5",
"express": "^4.19.2"
},
"devDependencies": {
"nodemon": "^3.1.3"
}
}