chomens-bot-js/plugins/console.js

141 lines
3.8 KiB
JavaScript

/* eslint-disable require-jsdoc */
/* eslint-disable max-len */
/* eslint-disable prefer-rest-params */
const moment = require('moment-timezone');
const util = require('util');
function inject(bot, _dcclient, config, rl) {
if (!config.console) return;
const chatMessage = require('prismarine-chat')(bot.version);
function prefix(prefix, _message) {
const message = `[${moment().format('HH:mm:ss')} ${prefix}§r] [${bot.options.host}] `;
const component = chatMessage.MessageBuilder.fromString(message).toJSON();
return chatMessage.fromNotch(component).toAnsi() + _message;
}
bot.console = {};
bot.console.host = 'all';
bot.console.log = function(message) {
console.log(prefix('&6LOG', message));
};
bot.console.info = function(message) {
console.log(prefix('&aINFO', message));
};
bot.console.error = function(error) {
console.log(prefix('&cERROR', typeof error === 'string' ? error : error.stack));
};
bot.consoleQueue = [];
const consoleQueueInterval = setInterval(function() {
if (!bot.messageLogging) return;
if (bot.consoleQueue.length > 50) bot.consoleQueue = [];
if (bot.consoleQueue[0] || bot.consoleQueue[0] === '') {
bot.console.log(bot.consoleQueue[0].substring(0, 10000));
bot.consoleQueue.shift();
}
}, 100);
bot.on('parsed_chat', (message) => {
bot.consoleQueue.push(message.toAnsi());
});
bot.once('end', () => {
clearInterval(consoleQueueInterval);
rl.removeAllListeners();
});
// 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();
};
rl.on('line', function(line) {
try {
if (line.toLowerCase() === '' ||
line.toLowerCase().startsWith(' ')) return;
if (line.startsWith('.csvr ')) {
const host = line.substring(6);
bot.getBots().forEach((bot) => bot.console.host = host);
bot.console.info(`Host set to: ${host}`);
return;
}
if (bot.options.host !== bot.console.host && bot.console.host !== 'all') return;
if (line.toLowerCase() === '.exit' || line.toLowerCase() === '.end') {
bot.emit('end', 'end command');
return;
}
if (line.toLowerCase().startsWith('.servereval ')) {
try {
bot.tellraw('@a', {
text: `${util.inspect(eval(`${line.substring(12)}`))}`,
color: 'green',
});
return;
} catch (err) {
bot.tellraw('@a', {text: `${util.inspect(err)}`, color: 'red'});
return;
}
}
if (line === '.clearconsolequeue') {
consoleQueue = [];
return;
}
if (line === '.messagelogging on') {
bot.consoleQueue = [];
bot.messageLogging = true;
return;
}
if (line === '.messagelogging off') {
bot.consoleQueue = [];
bot.messageLogging = false;
return;
}
if (line === '.kill') process.exit();
if (line.startsWith('.')) {
return bot.command_handler.run(
bot.username,
bot.username,
'*' + line.substring(1),
bot.uuid,
null,
'h',
'o',
);
}
bot.tellraw('@a', [
{
text: '[',
color: 'dark_gray',
},
{
text: `${bot.username} Console`,
color: 'gray',
},
{
text: '] ',
color: 'dark_gray',
},
{
text: 'chayapak ',
color: 'green',
},
{
text: '\u203a ',
color: 'dark_gray',
},
chatMessage.MessageBuilder.fromString('&7' + line),
]);
} catch (e) {
bot.console.error(e);
}
});
};
module.exports = {inject};