Discord-Captcha-Verification/modules/database/index.js

70 lines
No EOL
2.5 KiB
JavaScript

const sqlite3 = require('sqlite3').verbose();
const { resolve } = require('path');
class Database {
constructor() {
this.db = new sqlite3.Database(resolve(__dirname, '../../database.sqlite'), (err) => {
if (err) {
console.error(err.message);
} else {
console.log('Connected to the database');
}
});
this.db.run('CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, discord_id TEXT, discord_guild_id TEXT, ip TEXT, timestamp INTEGER)');
this.db.run('CREATE TABLE IF NOT EXISTS attempts (id INTEGER PRIMARY KEY, discord_id TEXT, discord_guild_id TEXT, ip TEXT, timestamp INTEGER, reason TEXT)');
}
async addAttempt(discordId, discordGuildId, ip, reason) {
return new Promise((resolve, reject) => {
this.db.run('INSERT INTO attempts (discord_id, discord_guild_id, ip, timestamp, reason) VALUES (?, ?, ?, ?, ?)', [discordId, discordGuildId, ip, Date.now(), reason], (err) => {
if (err) {
reject(err);
} else {
resolve();
}
});
});
}
async addUser(discordId, discordGuildId, ip) {
return new Promise((resolve, reject) => {
this.db.run('INSERT INTO users (discord_id, discord_guild_id, ip, timestamp) VALUES (?, ?, ?, ?)', [discordId, discordGuildId, ip, Date.now()], (err) => {
if (err) {
reject(err);
} else {
resolve();
}
});
});
}
async ipUsedInLastDay(ip) {
return new Promise((resolve, reject) => {
this.db.get('SELECT * FROM users WHERE ip = ? AND timestamp >= ?', [ip, Date.now() - 86400000], (err, row) => {
if (err) {
reject(err);
} else {
resolve(row !== undefined);
}
});
});
}
async isUserVerified(discordId, discordGuildId) {
return new Promise((resolve, reject) => {
this.db.get('SELECT * FROM users WHERE discord_id = ? AND discord_guild_id = ?', [discordId, discordGuildId], (err, row) => {
if (err) {
reject(err);
} else {
resolve(row !== undefined);
}
});
});
}
getDatabase() {
return this.db;
}
}
module.exports = new Database();