API? BRO?

This commit is contained in:
Christopher Cookman 2023-04-22 18:03:10 -06:00
parent 53ff03c8d1
commit 25d92a07de
Signed by: ChrisChrome
GPG key ID: A023A26E42C33A42
4 changed files with 1056 additions and 10 deletions

View file

@ -8,5 +8,9 @@
"cooldownMinutes": 1, "cooldownMinutes": 1,
"blacklist": [] "blacklist": []
} }
},
"api": {
"port": 8080,
"enabled": false
} }
} }

View file

@ -1,5 +1,6 @@
const config = require("./config.json"); const config = require("./config.json");
const Discord = require("discord.js"); const Discord = require("discord.js");
const express = require("express");
const rest = new Discord.REST({ const rest = new Discord.REST({
version: '10' version: '10'
}).setToken(config.discord.token); }).setToken(config.discord.token);
@ -14,6 +15,8 @@ const client = new Discord.Client({
] ]
}); });
const app = express();
// Use sqlite3 for object storage, and create a database if it doesn't exist // Use sqlite3 for object storage, and create a database if it doesn't exist
const sqlite3 = require("sqlite3").verbose(); const sqlite3 = require("sqlite3").verbose();
const db = new sqlite3.Database("./levels.db"); const db = new sqlite3.Database("./levels.db");
@ -250,6 +253,36 @@ client.on("interactionCreate", async interaction => {
}; };
}); });
app.get("/api/levels", async (req, res) => {
// Pretty much send the entire database
await db.all(`SELECT * FROM levels ORDER BY totalXp DESC`, async (err, rows) => {
if (err) {
console.error(err);
return res.sendStatus(500); // Internal server error
}
if (!rows) return res.sendStatus(204) // No content
if (rows) {
return res.json(rows);
}
});
});
app.get("/api/levels/:id", async (req, res) => {
// Get user data
await db.get(`SELECT * FROM levels WHERE id = '${req.params.id}'`, async (err, row) => {
if (err) {
console.error(err);
return res.sendStatus(500); // Internal server error
}
if (!row) return res.sendStatus(404) // Not found
if (row) {
return res.json(row);
}
});
});
// Handle SIGINT gracefully // Handle SIGINT gracefully
process.on('SIGINT', async () => { process.on('SIGINT', async () => {
await console.log(`${colors.cyan("[INFO]")} Stop received, exiting...`); await console.log(`${colors.cyan("[INFO]")} Stop received, exiting...`);
@ -277,6 +310,14 @@ process.on('uncaughtException', async (error) => {
}); });
} }
}); });
if (config.api.enabled) {
// Start API
app.listen(config.api.port, () => {
console.log(`${colors.cyan("[INFO]")} API listening on port ${config.api.port}`);
});
}
// Global Variables // Global Variables
var cooldowns = {}; var cooldowns = {};

1020
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -12,6 +12,7 @@
"axios": "^1.3.6", "axios": "^1.3.6",
"colors": "^1.4.0", "colors": "^1.4.0",
"discord.js": "^14.9.0", "discord.js": "^14.9.0",
"express": "^4.18.2",
"sqlite3": "^5.1.6" "sqlite3": "^5.1.6"
} }
} }