Skip to content

Commit 6b70b57

Browse files
first commit
0 parents  commit 6b70b57

20 files changed

+3392
-0
lines changed

.cache/puppeteer/temp

Whitespace-only changes.

.gitignore

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
node_modules
2+
.cache/puppeteer/chrome
3+
.env
4+
cookies

.puppeteerrc.cjs

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
const {join} = require('path');
2+
3+
/**
4+
* @type {import("puppeteer").Configuration}
5+
*/
6+
module.exports = {
7+
// Changes the cache location for Puppeteer.
8+
cacheDirectory: join(__dirname, '.cache', 'puppeteer'),
9+
};

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
# nodejs aternos discord

app.js

+53
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
require('dotenv').config();
2+
const { Client, Events, GatewayIntentBits } = require('discord.js');
3+
const startServer = require('./aternos_functions/startServer');
4+
const checkStatus = require('./aternos_functions/checkServerStatus');
5+
const stopServer = require('./aternos_functions/stopServer');
6+
const restartServer = require('./aternos_functions/restartServer');
7+
const checkAccess = require('./utils/checkAccess');
8+
const token = process.env.BOT_TOKEN;
9+
const client = new Client({ intents: [GatewayIntentBits.Guilds] });
10+
client.login(token);
11+
12+
client.once(Events.ClientReady, (c) => {
13+
console.log(`Ready! Logged in as ${c.user.tag}`);
14+
});
15+
16+
client.on(Events.InteractionCreate, async (interaction) => {
17+
if (!interaction.isChatInputCommand()) return;
18+
try {
19+
switch (interaction.commandName) {
20+
case 'check-status':
21+
await interaction.deferReply();
22+
let status = await checkStatus();
23+
await interaction.editReply(`current status : ${status}`);
24+
break;
25+
case 'start-server':
26+
if (!checkAccess(interaction.member.roles.cache, 'start'))
27+
return await interaction.reply("you don't have access");
28+
await interaction.deferReply();
29+
let start = await startServer();
30+
await interaction.editReply(start);
31+
break;
32+
case 'stop-server':
33+
if (!checkAccess(interaction.member.roles.cache, 'stop'))
34+
return await interaction.reply("you don't have access");
35+
await interaction.deferReply();
36+
let stop = await stopServer();
37+
await interaction.editReply(stop);
38+
break;
39+
case 'restart-server':
40+
if (!checkAccess(interaction.member.roles.cache, 'restart'))
41+
return await interaction.reply("you don't have access");
42+
await interaction.deferReply();
43+
let restart = await restartServer();
44+
await interaction.editReply(restart);
45+
break;
46+
default:
47+
break;
48+
}
49+
} catch (error) {
50+
await interaction.reply('sorry but something went wrong');
51+
console.log(error);
52+
}
53+
});
+35
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
const fs = require('fs');
2+
const cookies = JSON.parse(fs.readFileSync('./cookies/aternos.json')).cookies;
3+
const Puppeteer = require('puppeteer-extra').PuppeteerExtra;
4+
const pptr = require('puppeteer');
5+
const puppeteer = new Puppeteer(pptr);
6+
const StealthPlugin = require('puppeteer-extra-plugin-stealth');
7+
const userAgent = require('user-agents');
8+
const { statusSelector } = require('../configs/aternos_css_config');
9+
10+
// --- puppeteer plugins start --
11+
puppeteer.use(StealthPlugin());
12+
// --- plugins section end ---
13+
14+
async function checkStatus() {
15+
let browser = await puppeteer.launch({ headless: true });
16+
try {
17+
let page = await browser.newPage();
18+
await page.setUserAgent(userAgent.random().toString());
19+
await page.setCookie(...cookies);
20+
await page.goto('https://aternos.org/server/');
21+
let statusElement = await page.$(statusSelector);
22+
let status = await page.evaluate((element) => {
23+
return element.textContent;
24+
}, statusElement);
25+
return status.trim();
26+
} catch (error) {
27+
console.log(error);
28+
} finally {
29+
const pages = await browser.pages();
30+
for (const page of pages) await page.close();
31+
await browser.close();
32+
}
33+
}
34+
35+
module.exports = checkStatus;

aternos_functions/restartServer.js

+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
const fs = require('fs');
2+
const cookies = JSON.parse(fs.readFileSync('./cookies/aternos.json')).cookies;
3+
const Puppeteer = require('puppeteer-extra').PuppeteerExtra;
4+
const pptr = require('puppeteer');
5+
const puppeteer = new Puppeteer(pptr);
6+
const StealthPlugin = require('puppeteer-extra-plugin-stealth');
7+
const userAgent = require('user-agents');
8+
const { restartSelector } = require('../configs/aternos_css_config');
9+
const checkStatus = require('./checkServerStatus');
10+
11+
// --- puppeteer plugins start --
12+
puppeteer.use(StealthPlugin());
13+
// --- plugins section end ---
14+
15+
async function restartServer() {
16+
let browser = await puppeteer.launch({ headless: true });
17+
try {
18+
let page = await browser.newPage();
19+
await page.setUserAgent(userAgent.random().toString());
20+
await page.setCookie(...cookies);
21+
await page.goto('https://aternos.org/server/');
22+
let status = await checkStatus();
23+
if (status != 'Online')
24+
return `Server isn't Online running current status:"${status}"`;
25+
await page.click(restartSelector);
26+
await page.waitForSelector('.online', {timeout:100000});
27+
return 'server restarted successfully';
28+
} catch (error) {
29+
console.log(error);
30+
} finally {
31+
const pages = await browser.pages();
32+
for (const page of pages) await page.close();
33+
await browser.close();
34+
}
35+
}
36+
37+
module.exports = restartServer;

aternos_functions/startServer.js

+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
const fs = require('fs');
2+
const cookies = JSON.parse(fs.readFileSync('./cookies/aternos.json')).cookies;
3+
const Puppeteer = require('puppeteer-extra').PuppeteerExtra;
4+
const pptr = require('puppeteer');
5+
const puppeteer = new Puppeteer(pptr);
6+
const StealthPlugin = require('puppeteer-extra-plugin-stealth');
7+
const userAgent = require('user-agents');
8+
const { startSelector } = require('../configs/aternos_css_config');
9+
const checkStatus = require('./checkServerStatus');
10+
11+
// --- puppeteer plugins start --
12+
puppeteer.use(StealthPlugin());
13+
// --- plugins section end ---
14+
15+
async function startServer() {
16+
let browser = await puppeteer.launch({ headless: true });
17+
try {
18+
let page = await browser.newPage();
19+
await page.setUserAgent(userAgent.random().toString());
20+
await page.setCookie(...cookies);
21+
await page.goto('https://aternos.org/server/');
22+
let status = await checkStatus();
23+
if (status != 'Offline')
24+
return `Server isn't offline current status:"${status}"`;
25+
await page.click(startSelector);
26+
await page.waitForSelector('.online', {timeout:100000});
27+
return 'server started successfully';
28+
} catch (error) {
29+
console.log(error);
30+
} finally {
31+
const pages = await browser.pages();
32+
for (const page of pages) await page.close();
33+
await browser.close();
34+
}
35+
}
36+
37+
module.exports = startServer;

aternos_functions/stopServer.js

+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
const fs = require('fs');
2+
const cookies = JSON.parse(fs.readFileSync('./cookies/aternos.json')).cookies;
3+
const Puppeteer = require('puppeteer-extra').PuppeteerExtra;
4+
const pptr = require('puppeteer');
5+
const puppeteer = new Puppeteer(pptr);
6+
const StealthPlugin = require('puppeteer-extra-plugin-stealth');
7+
const userAgent = require('user-agents');
8+
const { stopSelector } = require('../configs/aternos_css_config');
9+
const checkStatus = require('./checkServerStatus');
10+
11+
// --- puppeteer plugins start --
12+
puppeteer.use(StealthPlugin());
13+
// --- plugins section end ---
14+
15+
async function stopServer() {
16+
let browser = await puppeteer.launch({ headless: true });
17+
try {
18+
let page = await browser.newPage();
19+
await page.setUserAgent(userAgent.random().toString());
20+
await page.setCookie(...cookies);
21+
await page.goto('https://aternos.org/server/');
22+
let status = await checkStatus();
23+
if (status != 'Online')
24+
return `Server isn't Online running current status:"${status}"`;
25+
await page.click(stopSelector);
26+
await page.waitForSelector('.offline' , {timeout:100000});
27+
return 'server stopped successfully';
28+
} catch (error) {
29+
console.log(error);
30+
} finally {
31+
const pages = await browser.pages();
32+
for (const page of pages) await page.close();
33+
await browser.close();
34+
}
35+
}
36+
37+
module.exports = stopServer;

commands/restart.js

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
const { SlashCommandBuilder } = require('discord.js');
2+
const restartServer = require('../aternos_functions/restartServer');
3+
4+
module.exports = {
5+
data: new SlashCommandBuilder()
6+
.setName('restart-server')
7+
.setDescription("restart the server if it's already online"),
8+
async execute(msg) {
9+
await msg.deferRepaly();
10+
let restart = await restartServer();
11+
await msg.editReplay(restart);
12+
},
13+
};

commands/start.js

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
const { SlashCommandBuilder } = require('discord.js');
2+
const startServer = require('../aternos_functions/startServer');
3+
4+
module.exports = {
5+
data: new SlashCommandBuilder()
6+
.setName('start-server')
7+
.setDescription("start the server if it's already offline"),
8+
async execute(msg) {
9+
await msg.deferRepaly();
10+
let start = await startServer();
11+
await msg.editReplay(start);
12+
},
13+
};

commands/status.js

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
const { SlashCommandBuilder } = require('discord.js');
2+
const checkStatus = require('../aternos_functions/checkServerStatus');
3+
4+
module.exports = {
5+
data: new SlashCommandBuilder()
6+
.setName('check-status')
7+
.setDescription(
8+
'check the server status (online || offline || running || starting)'
9+
),
10+
async execute(msg) {
11+
await msg.deferReply();
12+
let status = await checkStatus();
13+
await msg.editReplay(status);
14+
},
15+
};

commands/stop.js

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
const { SlashCommandBuilder } = require('discord.js');
2+
const stopServer = require('../aternos_functions/stopServer');
3+
4+
module.exports = {
5+
data: new SlashCommandBuilder()
6+
.setName('stop-server')
7+
.setDescription("stop the server if it's already online"),
8+
async execute(msg) {
9+
await msg.deferReplay();
10+
let stop = await stopServer();
11+
await msg.editReplay(stop);
12+
},
13+
};

configs/aternos_css_config.js

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
const cssConfig = {
2+
startSelector: '#start',
3+
stopSelector: '#stop',
4+
restartSelector: '#restart',
5+
statusSelector: '.statuslabel-label',
6+
};
7+
module.exports = cssConfig;

configs/config.js

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
module.exports = {
2+
rolesConfig: require('../servers/zxconfig.json'),
3+
};

deploy-commands.js

+40
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
require('dotenv').config();
2+
const { REST, Routes } = require('discord.js');
3+
const fs = require('node:fs');
4+
5+
const commands = [];
6+
// Grab all the command files from the commands directory you created earlier
7+
const commandFiles = fs
8+
.readdirSync('./commands')
9+
.filter((file) => file.endsWith('.js'));
10+
11+
// Grab the SlashCommandBuilder#toJSON() output of each command's data for deployment
12+
for (const file of commandFiles) {
13+
const command = require(`./commands/${file}`);
14+
commands.push(command.data.toJSON());
15+
}
16+
17+
const rest = new REST({ version: '10' }).setToken(process.env.BOT_TOKEN);
18+
19+
(async () => {
20+
try {
21+
console.log(
22+
`Started refreshing ${commands.length} application (/) commands.`
23+
);
24+
25+
// The put method is used to fully refresh all commands in the guild with the current set
26+
const data = await rest.put(
27+
Routes.applicationCommands(process.env.CLIENT_ID),
28+
{
29+
body: commands,
30+
}
31+
);
32+
33+
console.log(
34+
`Successfully reloaded ${data.length} application (/) commands.`
35+
);
36+
} catch (error) {
37+
// And of course, make sure you catch and log any errors!
38+
console.error(error);
39+
}
40+
})();

0 commit comments

Comments
 (0)