chomens-bot-js/index.js

519 lines
18 KiB
JavaScript
Raw Normal View History

2022-08-14 05:51:45 -04:00
/* eslint-disable no-var */
/* eslint-disable prefer-rest-params */
/* eslint-disable no-tabs */
/* eslint-disable max-len */
/* eslint-disable no-undef */
const mc = require('minecraft-protocol');
2022-08-18 22:36:34 -04:00
const config = require('./config');
2022-08-14 05:51:45 -04:00
const crypto = require('crypto');
const colorConvert = require('color-convert');
2022-08-18 21:39:59 -04:00
const {containsIllegalCharacters} = require('./util/containsIllegalCharacters');
2022-08-16 07:38:50 -04:00
const generateEaglerUsername = require('./util/generateEaglerUsername');
2022-08-14 05:51:45 -04:00
const {EventEmitter} = require('events');
const fs = require('fs');
const path = require('path');
const uuid = require('uuid-by-string');
const readline = require('node:readline');
const {stdin: input, stdout: output} = require('node:process');
const rl = readline.createInterface({input, output});
const moment = require('moment-timezone');
2022-08-22 06:16:36 -04:00
const cowsay = require('cowsay2');
2022-08-27 21:59:14 -04:00
const cows = require('cowsay2/cows');
2022-08-14 05:51:45 -04:00
const util = require('node:util');
const {escapeMarkdown} = require('./util/escapeMarkdown');
const {VM} = require('vm2');
const randomstring = require('randomstring');
const mineflayer = require('mineflayer');
// readline > fix on console.log
const log = console.log;
console.log = function() {
rl.output.write('\x1b[2K\r');
log.apply(console, Array.prototype.slice.call(arguments));
rl._refreshLine();
};
function sleep(ms) {
return new Promise((resolve) => setTimeout(resolve, ms));
}
// Load discord.js
const {
Client,
Intents,
} = require('discord.js');
// Create Discord intentions, required in v13
const intents = new Intents(['GUILDS', 'GUILD_MESSAGES']);
// Create Discord client
const dcclient = new Client({
intents,
});
const ayunboomchannel = config.discord.servers['sus.shhnowisnottheti.me:25565'];
const dinboomchannel = config.discord.servers['129.159.58.114:25565'];
2022-10-18 04:14:29 -04:00
const kaboomchannel = config.discord.servers['kaboom.pw:25565'];
2022-08-14 05:51:45 -04:00
const localclonechannel = config.discord.servers['192.168.1.103:25565'];
const kitsunechannel = config.discord.servers['kitsune.icu:25565'];
2022-08-20 22:21:23 -04:00
const chomensserverchannel = config.discord.servers['mc.chomens41793.ga:25565'];
2022-08-14 05:51:45 -04:00
let chomenschannel = '969773424387981356';
const hashchannel = '980438368422871151';
const ownerhashchannel = '980786390247833620';
/**
* Error
* @param {*} err
*/
// async function onerror(err) {
// try {
// console.log(`INFO: Disconnected: ${err}`);
// fs.appendFileSync('./logs.txt', `INFO: Disconnected: ${err}\r\n`);
// const Embed = new MessageEmbed()
// .setColor('#FF0000')
// .setTitle(`${err.message ?? 'Disconnected'}`)
// .setDescription(`\`\`\`text\n${err}\`\`\``);
// channel.send({embeds: [Embed]});
// if (err.includes('issued "end" command')) {
// bot.chat('Restarting...');
// }
// await sleep(1000);
// bot.end();
// bot._client = mc.createClient(bot.options);
// } catch (e) {
// return;
// }
// }
/**
* empty function for discord message
* @return {String}
*/
function dcmsg() {
return 'this does nothing...';
}
function botThings() {
bot = new EventEmitter();
bot.options = {
2022-08-20 04:27:06 -04:00
username: process.argv[2] === 'mc.chomens41793.ga' ? 'ChomeNS_Bot' : randomstring.generate(16),
2022-08-14 05:51:45 -04:00
host: process.argv[2],
port: process.argv[3] ? Number(process.argv[3]) : 25565,
version: config.version,
2022-08-14 05:51:45 -04:00
checkTimeoutInterval: '30000',
keepAlive: false,
hideErrors: true,
};
bot._client = mc.createClient(bot.options);
2022-10-18 21:37:33 -04:00
bot.version = bot._client.version;
2022-08-14 05:51:45 -04:00
bot.queue = [];
bot.write = (name, data) => bot._client.write(name, data);
bot.end = (reason = 'end') => {
bot.emit('end', reason);
bot.removeAllListeners();
bot._client.end();
bot._client.removeAllListeners();
};
bot.visibility = false;
bot.command_handler = function() {
return;
};
bot.command_handler.commands = {};
bot.getplayerusername = {};
// allink's plugin loader
const plugins = []; // NOTE: DO NOT CHANGE, PLUGINS ARE LOADED AUTOMATICALLY
fs.readdirSync(
path.join(__dirname, 'plugins'),
).forEach(function(file) { // populate plugins array
if (file.endsWith('.js')) {
plugins.push(path.join(__dirname, 'plugins', file));
}
});
plugins.forEach(function(plugin) { // load plugins
let name = plugin.split('/');
name = name[name.length - 1];
try {
const plug = require(plugin);
2022-08-18 22:36:34 -04:00
plug.inject(bot, dcclient, config);
2022-08-14 05:51:45 -04:00
} catch (e) {
console.log(`Plugin loader: Plugin ${name} is having exception loading the plugin:`);
console.log(util.inspect(e));
}
});
}
2022-10-24 21:46:47 -04:00
let messageloggingEnabled = true;
2022-08-14 05:51:45 -04:00
/**
* Main bot function
*/
function main() {
// allink's chat queue
chatQueue = setInterval(function() {
try {
2022-08-19 02:49:37 -04:00
if (bot.queue[0] || bot.queue[0]==='') {
2022-08-14 05:51:45 -04:00
try {
2022-08-18 23:07:12 -04:00
if (containsIllegalCharacters(bot.queue[0])) {
bot.queue.shift();
return;
};
2022-08-16 08:15:11 -04:00
bot.write('chat', {message: bot.queue[0].substring(0, 256)});
2022-08-14 05:51:45 -04:00
bot.queue.shift();
} catch (e) {
2022-08-18 21:39:59 -04:00
console.log(e.message);
2022-08-14 05:51:45 -04:00
}
}
} catch (e) {
return;
}
}, 450);
2022-08-14 05:51:45 -04:00
module.exports = function() {
return bot;
};
dcmsg.queue = '';
2022-09-13 09:10:09 -04:00
consoleQueue = [];
2022-08-14 05:51:45 -04:00
bot.playersAddedPlayers = {};
bot.getplayerusername = {};
bot.hash = '';
sleep = (time) => new Promise((a)=>setTimeout(a, time)),
bot.chat = (message) => {
bot.queue.push(String(message));
};
// fixCmdBlocksOnlyCore=(core)=>{
// const cmd = `/minecraft:fill ${Math.floor(bot.position.x)} 0 ${Math.floor(bot.position.z)} ${Math.floor(bot.position.x + 15)} 63 ${Math.floor(bot.position.z + 15)} command_block{CustomName: '{"text":"ChomeNS Bot Core","color":"yellow"}'} replace`;
// if (core===true) {
// bot.core.run(cmd);
// } else {
// bot.chat(cmd);
// }
// };
// fixCmdBlocks=()=>{
// bot.chat('/essentials:world world');
// fixCmdBlocksOnlyCore();
// };
discordQueue = setInterval(function() {
if (dcmsg.queue!='') {
2022-10-16 03:33:23 -04:00
channel.send('```ansi\n' + dcmsg.queue.substring(0, 1986) + '\n```');
2022-08-14 05:51:45 -04:00
dcmsg.queue = '';
}
2022-10-22 06:00:43 -04:00
}, 1500);
2022-08-14 05:51:45 -04:00
consoleQueueInterval = setInterval(function() {
if (!messageloggingEnabled) return;
2022-09-17 04:06:17 -04:00
if (consoleQueue.length > 50) consoleQueue = [];
2022-09-13 09:14:08 -04:00
if (consoleQueue[0] || consoleQueue[0]==='') {
2022-10-25 04:36:28 -04:00
console.log('\u001b[48:5:208m' + bot.options.host + '\u001b[0m' + ': ' + consoleQueue[0].substring(0, 10000)/* message.toAnsi() + '\u001b[0m'*/);
2022-09-13 09:10:09 -04:00
consoleQueue.shift();
}
}, 100);
2022-10-22 01:58:07 -04:00
bot.once('end', (reason, event) => {
2022-10-24 21:43:51 -04:00
console.log(`Disconnected from ${bot.options.host} (${event} event): ${util.inspect(reason)}`);
channel.send(`Disconnected: \`${util.inspect(reason)}\``);
2022-10-22 01:58:07 -04:00
const timeout = config.reconnectTimeout;
try {
if (reason.text) {
if (reason.text === 'Wait 5 seconds before connecting, thanks! :)') timeout = 1000 * 6;
if (reason.text === 'You are logging in too fast, try again later.') timeout = 1000 * 6;
}
} catch (e) {}
2022-10-22 01:58:07 -04:00
try {
clearInterval(notonline);
clearInterval(discordQueue);
clearInterval(chatQueue);
clearInterval(consoleQueueInterval);
2022-10-22 02:46:20 -04:00
} catch (e) {}
2022-10-22 01:58:07 -04:00
setTimeout(() => {
bot.end();
botThings();
main();
}, timeout);
});
2022-08-14 05:51:45 -04:00
console.log(`Connecting to: ${bot.options.host}:${bot.options.port}...`);
// fs.appendFileSync('./logs.txt', `\r\Connecting to: ${bot.options.host}:${bot.options.port}...\r\n`);
channel.send(`Connecting to: \`${bot.options.host}:${bot.options.port}\`...`);
bot._client.on('login', async function(data) {
2022-10-18 21:37:33 -04:00
bot.entityId = data.entityId;
2022-10-19 08:22:26 -04:00
bot.uuid = bot._client.uuid;
bot.username = bot._client.username;
2022-10-22 02:55:31 -04:00
chatMessage = require('prismarine-chat')(bot.version);
2022-10-18 20:59:58 -04:00
const mcData = require('minecraft-data')(bot.version);
2022-08-14 05:51:45 -04:00
console.log(`Successfully logged in to: ${bot.options.host}:${bot.options.port}`);
// fs.appendFileSync('./logs.txt', `\r\nSuccessfully logged in to: ${bot.options.host}:${bot.options.port}\r\n`);
channel.send(`Successfully logged in to: \`${bot.options.host}:${bot.options.port}\``);
previusMessage = undefined;
loginfinish = false;
started = false;
bot.eaglercrashstarted = false;
await sleep(1500);
bot.createCore();
bot.vmoptions = {
timeout: 2000,
sandbox: {
2022-08-17 07:59:26 -04:00
run: function(cmd) {
bot.core.run(cmd);
},
2022-10-24 05:42:18 -04:00
mc,
mineflayer,
2022-08-14 05:51:45 -04:00
chat: bot.chat,
2022-10-24 05:42:18 -04:00
moment,
randomstring,
uuid,
chatMessage,
crypto,
colorConvert,
2022-08-14 05:51:45 -04:00
bruhifyText: function(message) {
if (typeof message!=='string') throw new SyntaxError('message must be a string');
bot.bruhifyText = message.substring(0, 1000);
},
2022-10-24 05:42:18 -04:00
generateEaglerUsername,
cowsay,
cows,
mcData,
2022-08-14 05:51:45 -04:00
},
// require: {
// mock: {
// run: run,
// randomchar: randomchar,
// chat: bot.chat,
// mineflayer: mineflayer
// }
// }
};
bot.vm = new VM(bot.vmoptions);
loginfinish = true;
await sleep(1400);
bot.core.run('minecraft:tellraw @a ' + JSON.stringify([{text: 'ChomeNS Bot', color: 'yellow'}, {text: ' - ', color: 'dark_gray'}, {text: 'made by ', color: 'gray'}, {text: 'chayapak', color: 'gold'}]));
2022-08-14 05:51:45 -04:00
});
bot.on('parsed_chat', async function(message, data) {
// try catch prevents hi % exploit (it uses prismarine-chat) and json parse error
2022-08-14 05:51:45 -04:00
try {
if (previusMessage===message.toString()) return;
previusMessage = message.toString();
2022-08-14 05:51:45 -04:00
const parsedMessage = JSON.parse(data.message);
if (parsedMessage.translate==='translation.test.invalid') return;
// down here it prevents command set message
2022-08-14 05:51:45 -04:00
if (parsedMessage.translate==='advMode.setCommand.success') return;
2022-08-19 05:16:30 -04:00
if (parsedMessage.extra!==undefined) {
if (parsedMessage.extra[0].text==='Command set: ') return;
}
2022-10-25 01:23:05 -04:00
// prevent braille cuz it CRASHES THE ENTIRE LAPTOP
if (message.toString().includes('⣿')) return;
2022-08-14 05:51:45 -04:00
2022-10-16 02:20:28 -04:00
const cleanMessage = escapeMarkdown(message.toAnsi(), true);
discordMsg = /* '_ _ ' + */cleanMessage.replaceAll('@', '@\u200b\u200b\u200b\u200b\u200b').replaceAll('http', 'http\u200b\u200b\u200b\u200b\u200b').replaceAll('\u001b[9', '\u001b[3');// .replace(/[\r\n]/gm, '\n')
2022-08-14 05:51:45 -04:00
2022-09-13 09:10:09 -04:00
consoleQueue.push(message.toAnsi());
2022-08-14 05:51:45 -04:00
// fs.appendFileSync('./logs.txt', `${bot.options.host}: ${message.toMotd()}\r\n`);
// if (discordMsg)return channel.send(`${discordMsg.substring(0, 2000)}`)
2022-10-17 23:05:27 -04:00
if (message.toMotd().startsWith('§8[§eChomeNS §9Discord§8] §c')) return;
2022-10-16 03:33:23 -04:00
dcmsg.queue += '\n' + discordMsg;
2022-08-14 05:51:45 -04:00
} catch (e) {
return;
}
2022-10-18 05:18:38 -04:00
});
2022-08-14 05:51:45 -04:00
// bot.on('message', async function(username, message, sender) {
// try {
// const usernameraw = username;
// // let username = usernameraw.replace(/§[a-f0-9rlonmk]/g, "").replace(/§/g, "");
// const messageraw = message;
// var username = getplayerusername[sender];
// var message = messageraw.replace(/§[a-f0-9rlonmk]/g, '').replace(/§/g, '');
// // if (username===bot.username)return
// // console.log(username + ': ' + message);
// allCommands(username, message, usernameraw, sender);
// } catch (e) {
// console.log(e);
// }
// });
// bot.on('cspy', async function(username, message) {
// // eslint-disable-next-line no-redeclare
// var username = username.replace(/§[a-f0-9rlonmk]/g, '').replace(/§/g, '');
// // eslint-disable-next-line no-redeclare
// var message = message.replace(/§[a-f0-9rlonmk]/g, '').replace(/§/g, '');
// const args = message.substring(5).trim().split(' ');
// args[0] = args[0].toLowerCase();
// try {
// allCommands(username, message, username, '00000000-0000-0000-0000-000000000000');
// } catch (e) {
// bot.core.run('minecraft:tellraw @a ' + JSON.stringify({text: String(e), color: 'red'}));
// }
// });
bot.on('player_added', (player) => {
bot.playersAddedPlayers[player.name] = player.UUID;
bot.getplayerusername[player.UUID] = player.name;
});
bot._client.on('end', function(reason) {
bot.emit('end', reason, 'end');
// onerror('end event: ' + util.inspect(reason).replaceAll('runner', 'chayapak1'));
});
bot._client.on('keep_alive', (packet) => bot.write('keep_alive', {keepAliveId: packet.keepAliveId}));
2022-08-19 03:16:30 -04:00
2022-10-14 04:46:41 -04:00
// bot._client.on('tab_complete', (packet) => bot.tabcompleteplayers = packet.matches);
2022-08-14 05:51:45 -04:00
bot._client.on('kick_disconnect', function(data) {
const parsed = JSON.parse(data.reason);
bot.emit('end', parsed, 'kick_disconnect');
// onerror('kick_disconnect event: ' + util.inspect(reason));
});
bot._client.on('disconnect', function(data) {
const parsed = JSON.parse(data.reason);
bot.emit('end', parsed, 'disconnect');
});
2022-09-05 06:21:29 -04:00
bot._client.on('error', function() {
// console.log('Error: ' + util.inspect(error));
// channel.send('Error: ' + util.inspect(error));
// onerror('error event: ' + util.inspect(err).replaceAll('runner', 'chayapak1'));
2022-08-14 05:51:45 -04:00
});
process.on('uncaughtException', (error) => {
console.log('uncaught ' + util.inspect(error));
channel.send('uncaught ```\n' + util.inspect(error) + '\n```');
2022-09-11 00:33:34 -04:00
bot.emit('end', 'uncaughtException', 'process: uncaughtException');
2022-08-14 05:51:45 -04:00
});
}
dcclient.on('ready', async () => {
botThings();
// Find the Discord channel messages will be sent to
if (process.argv[2]==='sus.shhnowisnottheti.me') {
channel = dcclient.channels.cache.get(ayunboomchannel);
bot.channel = dcclient.channels.cache.get(ayunboomchannel);
}
if (process.argv[2]==='129.159.58.114') {
channel = dcclient.channels.cache.get(dinboomchannel);
bot.channel = dcclient.channels.cache.get(dinboomchannel);
}
2022-10-18 04:14:29 -04:00
if (process.argv[2]==='kaboom.pw') {
2022-08-14 05:51:45 -04:00
channel = dcclient.channels.cache.get(kaboomchannel);
bot.channel = dcclient.channels.cache.get(kaboomchannel);
}
if (process.argv[2]==='192.168.1.103') {
channel = dcclient.channels.cache.get(localclonechannel);
bot.channel = dcclient.channels.cache.get(localclonechannel);
}
if (process.argv[2]==='kitsune.icu') {
channel = dcclient.channels.cache.get(kitsunechannel);
bot.channel = dcclient.channels.cache.get(kitsunechannel);
}
2022-08-20 22:21:23 -04:00
if (process.argv[2]==='mc.chomens41793.ga') {
channel = dcclient.channels.cache.get(chomensserverchannel);
bot.channel = dcclient.channels.cache.get(chomensserverchannel);
}
2022-08-14 05:51:45 -04:00
await sleep(200);
main();
chomenschannel = dcclient.channels.cache.get(chomenschannel);
bot.hashchannel = dcclient.channels.cache.get(hashchannel);
bot.ownerhashchannel = dcclient.channels.cache.get(ownerhashchannel);
bot.channelId = channel.id;
attachmentlink = '';
// Console COMMANDS
rl.on('line', function(line) {
try {
if (line.toLowerCase()==='' || line.toLowerCase().startsWith(' ')) return;
if (line.toLowerCase()==='.exit' || line.toLowerCase()==='.end') {
bot.emit('end', 'end command');
// onerror('Console issued "end" command, rebooting bot...');
return;
}
if (line.toLowerCase().startsWith('.servereval ')) {
try {
bot.core.run('minecraft:tellraw @a ' + JSON.stringify({text: `${util.inspect(eval(`${line.substring(12)}`))}`, color: 'green'}));
return;
} catch (err) {
bot.core.run('minecraft:tellraw @a ' + JSON.stringify({text: `${util.inspect(err)}`, color: 'red'}));
return;
}
}
2022-09-17 04:06:17 -04:00
if (line==='.clearconsolequeue') {
consoleQueue = [];
2022-08-14 05:51:45 -04:00
return;
}
2022-10-19 08:22:26 -04:00
if (line==='.messagelogging on') {
messageloggingEnabled = true;
2022-10-19 08:22:26 -04:00
return;
}
if (line==='.messagelogging off') {
messageloggingEnabled = false;
2022-10-19 08:22:26 -04:00
return;
}
2022-10-12 21:16:31 -04:00
if (line==='.kill') process.exit();
2022-08-14 05:51:45 -04:00
// if (line.startsWith("."))return console.log('command not found')
2022-08-25 06:00:14 -04:00
if (line.startsWith('.')) return bot.command_handler.run('Console', '§a§lConsole§r', '*' + line.substring(1), 'c0ns0le-uuid');
2022-10-22 02:55:31 -04:00
bot.core.run('minecraft:tellraw @a ' + JSON.stringify(['', {'text': '[', 'color': 'dark_gray'}, {'text': `${bot.username} Console`, 'color': 'gray'}, {'text': '] ', 'color': 'dark_gray'}, {'text': 'chayapak ', 'color': 'green'}, {'text': ' ', 'color': 'dark_gray'}, chatMessage.MessageBuilder.fromString('&7' + line)]));
2022-08-14 05:51:45 -04:00
} catch (e) {
console.log(e);
}
});
});
// Redirect Discord messages to in-game chat
dcclient.on('messageCreate', async (message) => {
// Ignore messages from the bot itself
if (message.author.id === dcclient.user.id) return;
2022-10-26 08:17:14 -04:00
2022-08-14 05:51:45 -04:00
// Only handle messages in specified channel
if (message.channel.id != channel.id) return;
if (message.content.startsWith(config.discord.prefix)) return;
2022-10-26 08:17:14 -04:00
2022-08-14 08:51:48 -04:00
try {
const attachmentsComponent = [];
if (message.attachments) {
message.attachments.forEach((value) => {
attachmentsComponent.push({
text: ' [Attachment]',
color: 'green',
clickEvent: {
action: 'open_url',
value: value.proxyURL,
},
});
});
2022-08-14 05:51:45 -04:00
}
const component = [
{text: '[', color: 'dark_gray'},
{text: 'ChomeNS ', color: 'yellow', clickEvent: {
action: 'open_url',
value: 'https://discord.gg/xdgCkUyaA4',
}},
{text: 'Discord', color: 'blue', clickEvent: {
action: 'open_url', value: 'https://discord.gg/xdgCkUyaA4',
}},
{text: '] ', color: 'dark_gray'},
{text: `${message.member.displayName}`, color: 'red', clickEvent: {
action: 'copy_to_clipboard', value: `${message.author.username}#${message.author.discriminator}`,
}},
{text: ' ', color: 'dark_gray'},
chatMessage.MessageBuilder.fromString('&7' + message.content),
attachmentsComponent.length === 0 ? '' : attachmentsComponent,
];
bot.core.run('minecraft:tellraw @a ' + JSON.stringify(component));
2022-08-14 08:51:48 -04:00
} catch (e) {
return;
2022-08-14 05:51:45 -04:00
}
});
dcclient.login(config.discord.token);