mirror of
https://github.com/arthur-pbty/xiao.git
synced 2026-06-23 18:05:01 +02:00
Local DECTalk
This commit is contained in:
@@ -1,5 +1,7 @@
|
||||
const Command = require('../../structures/Command');
|
||||
const { execSync } = require('child_process');
|
||||
const { exec } = require('child_process');
|
||||
const { promisify } = require('util');
|
||||
const execAsync = promisify(exec);
|
||||
const { stripIndents } = require('common-tags');
|
||||
const { XIAO_GITHUB_REPO_USERNAME, XIAO_GITHUB_REPO_NAME, GITHUB_ACCESS_TOKEN } = process.env;
|
||||
|
||||
@@ -23,12 +25,12 @@ module.exports = class ExecCommand extends Command {
|
||||
});
|
||||
}
|
||||
|
||||
run(msg, { command }) {
|
||||
async run(msg, { command }) {
|
||||
if (command === 'git pull') {
|
||||
const repo = `${XIAO_GITHUB_REPO_USERNAME}/${XIAO_GITHUB_REPO_NAME}`;
|
||||
command = `git pull https://${GITHUB_ACCESS_TOKEN}@github.com/${repo}.git`;
|
||||
}
|
||||
const results = this.exec(command);
|
||||
const results = await this.exec(command);
|
||||
return msg.reply(stripIndents`
|
||||
_${results.err ? 'An error occurred:' : 'Successfully executed.'}_
|
||||
\`\`\`sh
|
||||
@@ -37,9 +39,9 @@ module.exports = class ExecCommand extends Command {
|
||||
`);
|
||||
}
|
||||
|
||||
exec(command) {
|
||||
async exec(command) {
|
||||
try {
|
||||
const stdout = execSync(command, { timeout: 30000, encoding: 'utf8' });
|
||||
const stdout = await execAsync(command, { timeout: 30000, encoding: 'utf8' });
|
||||
return { err: false, std: stdout.trim() };
|
||||
} catch (err) {
|
||||
return { err: true, std: err.stderr.trim() };
|
||||
|
||||
+23
-10
@@ -1,6 +1,10 @@
|
||||
const Command = require('../../structures/Command');
|
||||
const request = require('node-superfetch');
|
||||
const { Readable } = require('stream');
|
||||
const { exec } = require('child_process');
|
||||
const { promisify } = require('util');
|
||||
const execAsync = promisify(exec);
|
||||
const { writeFile, unlink, readFile } = require('fs/promises');
|
||||
const path = require('path');
|
||||
const { reactIfAble } = require('../../util/Util');
|
||||
const { LOADING_EMOJI_ID } = process.env;
|
||||
|
||||
@@ -19,12 +23,6 @@ module.exports = class DECTalkCommand extends Command {
|
||||
},
|
||||
userPermissions: ['CONNECT', 'SPEAK'],
|
||||
credit: [
|
||||
{
|
||||
name: 'calzoneman',
|
||||
url: 'https://github.com/calzoneman',
|
||||
reason: 'API',
|
||||
reasonURL: 'https://github.com/calzoneman/aeiou'
|
||||
},
|
||||
{
|
||||
name: 'Digital Equipment Corporation',
|
||||
url: 'http://gordonbell.azurewebsites.net/digital/timeline/tmlnhome.htm',
|
||||
@@ -57,9 +55,7 @@ module.exports = class DECTalkCommand extends Command {
|
||||
if (this.client.dispatchers.has(msg.guild.id)) return msg.reply('I am already playing audio in this server.');
|
||||
try {
|
||||
await reactIfAble(msg, this.client.user, LOADING_EMOJI_ID, '💬');
|
||||
const { body } = await request
|
||||
.get('http://tts.cyzon.us/tts')
|
||||
.query({ text });
|
||||
const body = await this.tts(msg.guild.id, text);
|
||||
const dispatcher = connection.play(Readable.from([body]));
|
||||
this.client.dispatchers.set(msg.guild.id, dispatcher);
|
||||
dispatcher.once('finish', () => this.client.dispatchers.delete(msg.guild.id));
|
||||
@@ -71,4 +67,21 @@ module.exports = class DECTalkCommand extends Command {
|
||||
return msg.reply(`Oh no, an error occurred: \`${err.message}\`. Try again later!`);
|
||||
}
|
||||
}
|
||||
|
||||
async tts(id, input) {
|
||||
await writeFile(path.join(__dirname, '..', '..', 'tmp', `${id}.txt`), input);
|
||||
await execAsync(`xvfb-run wine say.exe -w ${id}.wav < ${path.join(__dirname, '..', '..', 'tmp', `${id}.txt`)}`, {
|
||||
cwd: path.join(__dirname, '..', '..', 'dectalk'),
|
||||
timeout: 30000
|
||||
});
|
||||
let result;
|
||||
try {
|
||||
result = await readFile(path.join(__dirname, '..', '..', 'tmp', `${id}.wav`));
|
||||
await unlink(path.join(__dirname, '..', '..', 'tmp', `${id}.txt`));
|
||||
await unlink(path.join(__dirname, '..', '..', 'tmp', `${id}.wav`));
|
||||
} catch {
|
||||
if (!result) result = null;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user