81 lines
2.3 KiB
JavaScript
81 lines
2.3 KiB
JavaScript
const { Rcon } = require('rcon-client');
|
|
const sqlite3 = require('sqlite3');
|
|
const path = require('path');
|
|
require('dotenv').config({ quiet: true });
|
|
|
|
console.log('🔗 Starting Minecraft Bridge...');
|
|
console.log('RCON Config:', {
|
|
host: process.env.RCON_HOST || 'NOT SET',
|
|
port: process.env.RCON_PORT || '25575',
|
|
hasPassword: !!process.env.RCON_PASSWORD
|
|
});
|
|
|
|
const dbPath = path.join(__dirname, 'whitelist.db');
|
|
const db = new sqlite3.Database(dbPath);
|
|
|
|
function dbAll(sql, params = []) {
|
|
return new Promise((resolve, reject) => {
|
|
db.all(sql, params, (err, rows) => {
|
|
if (err) reject(err);
|
|
else resolve(rows);
|
|
});
|
|
});
|
|
}
|
|
|
|
function dbRun(sql, params = []) {
|
|
return new Promise((resolve, reject) => {
|
|
db.run(sql, params, function(err) {
|
|
if (err) reject(err);
|
|
else resolve(this);
|
|
});
|
|
});
|
|
}
|
|
|
|
async function executeMinecraftCommand(command) {
|
|
const rcon = new Rcon({
|
|
host: process.env.RCON_HOST,
|
|
port: process.env.RCON_PORT,
|
|
password: process.env.RCON_PASSWORD,
|
|
});
|
|
|
|
try {
|
|
await rcon.connect();
|
|
const response = await rcon.send(command);
|
|
await rcon.end();
|
|
return response;
|
|
} catch (error) {
|
|
console.error('RCON error:', error);
|
|
throw error;
|
|
}
|
|
}
|
|
|
|
async function processApprovedUsers() {
|
|
try {
|
|
const approvedUsers = await dbAll(
|
|
'SELECT * FROM whitelist_requests WHERE status = "approved" AND minecraft_added = 0'
|
|
);
|
|
|
|
for (const user of approvedUsers) {
|
|
try {
|
|
await executeMinecraftCommand(`whitelist add ${user.minecraft_username}`);
|
|
console.log(`✅ Added ${user.minecraft_username} to whitelist`);
|
|
|
|
await dbRun(
|
|
'UPDATE whitelist_requests SET minecraft_added = 1 WHERE id = ?',
|
|
[user.id]
|
|
);
|
|
} catch (error) {
|
|
console.error(`Failed to add ${user.minecraft_username} to whitelist:`, error);
|
|
}
|
|
}
|
|
} catch (error) {
|
|
console.error('Database error:', error);
|
|
}
|
|
}
|
|
|
|
setInterval(processApprovedUsers, 1000);
|
|
|
|
processApprovedUsers();
|
|
|
|
console.log(`✅ Started Minecraft Bridge successfully!`);
|
|
console.log(`Waiting for changes in whitelist.db`); |