mirror of
https://github.com/arthur-pbty/xiao.git
synced 2026-06-03 23:36:43 +02:00
Split exec
This commit is contained in:
@@ -77,7 +77,7 @@ module.exports = class EvalCommand extends Command {
|
||||
}
|
||||
}
|
||||
|
||||
makeResultMessages(result, hrDiff, input = null) {
|
||||
makeResultMessages(result, hrDiff, input = null, lang = 'javascript') {
|
||||
const inspected = util.inspect(result, { depth: 0 })
|
||||
.replace(nlPattern, '\n')
|
||||
.replace(this.sensitivePattern, '--snip--');
|
||||
@@ -87,19 +87,19 @@ module.exports = class EvalCommand extends Command {
|
||||
const appendPart = inspected[last] !== '}' && inspected[last] !== ']' && inspected[last] !== '\''
|
||||
? split[split.length - 1]
|
||||
: inspected[last];
|
||||
const prepend = `\`\`\`javascript\n${prependPart}\n`;
|
||||
const prepend = `\`\`\`${lang}\n${prependPart}\n`;
|
||||
const append = `\n${appendPart}\n\`\`\``;
|
||||
if (input) {
|
||||
return Util.splitMessage(tags.stripIndents`
|
||||
*Executed in ${hrDiff[0] > 0 ? `${hrDiff[0]}s ` : ''}${hrDiff[1] / 1000000}ms.*
|
||||
\`\`\`javascript
|
||||
\`\`\`${lang}
|
||||
${inspected}
|
||||
\`\`\`
|
||||
`, { maxLength: 1900, prepend, append });
|
||||
} else {
|
||||
return Util.splitMessage(tags.stripIndents`
|
||||
*Callback executed after ${hrDiff[0] > 0 ? `${hrDiff[0]}s ` : ''}${hrDiff[1] / 1000000}ms.*
|
||||
\`\`\`javascript
|
||||
\`\`\`${lang}
|
||||
${inspected}
|
||||
\`\`\`
|
||||
`, { maxLength: 1900, prepend, append });
|
||||
|
||||
+12
-9
@@ -2,7 +2,6 @@ const Command = require('../../framework/Command');
|
||||
const { exec } = require('child_process');
|
||||
const { promisify } = require('util');
|
||||
const execAsync = promisify(exec);
|
||||
const { stripIndents } = require('common-tags');
|
||||
|
||||
module.exports = class ExecCommand extends Command {
|
||||
constructor(client) {
|
||||
@@ -25,20 +24,24 @@ module.exports = class ExecCommand extends Command {
|
||||
|
||||
async run(msg, { command }) {
|
||||
const results = await this.exec(command);
|
||||
return msg.reply(stripIndents`
|
||||
_${results.err ? 'An error occurred:' : 'Successfully executed.'}_
|
||||
\`\`\`sh
|
||||
${results.std}
|
||||
\`\`\`
|
||||
`);
|
||||
const msgs = this.client.registry.commands.get('eval')
|
||||
.makeResultMessages(results.std, results.hrDiff, command, 'sh');
|
||||
if (Array.isArray(msgs)) {
|
||||
return msgs.map(item => msg.reply(item));
|
||||
} else {
|
||||
return msg.reply(msgs);
|
||||
}
|
||||
}
|
||||
|
||||
async exec(command) {
|
||||
let hrDiff;
|
||||
try {
|
||||
const hrStart = process.hrtime();
|
||||
const { stdout } = await execAsync(command, { timeout: 30000, encoding: 'utf8' });
|
||||
return { err: false, std: stdout.trim() };
|
||||
hrDiff = process.hrtime(hrStart);
|
||||
return { err: false, std: stdout.trim(), hrDiff };
|
||||
} catch (err) {
|
||||
return { err: true, std: err.stderr.trim() };
|
||||
return { err: true, std: err.stderr.trim(), hrDiff: null };
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user