This commit is contained in:
loicbersier 2020-02-11 11:43:54 +01:00
commit 748daa2011
9 changed files with 123 additions and 26 deletions

View file

@ -12,20 +12,22 @@ class BannedWordsCommand extends Command {
{
id: 'word',
type: 'string',
prompt: {
start: 'What word should be banned',
},
match: 'rest'
},
{
id: 'remove',
match: 'flag',
flag: '--remove'
},
{
id: 'removeall',
match: 'flag',
flag: '--removeall'
}
],
channelRestriction: 'guild',
description: {
content: 'Ban word on the server. --remove to delete a banned word',
content: 'Ban word on the server. --remove to delete a banned word. --removeaall to remove every banned word',
usage: '[word to ban]',
examples: ['owo']
}
@ -33,13 +35,20 @@ class BannedWordsCommand extends Command {
}
async exec(message, args) {
if (args.removeall) {
BannedWords.destroy({where: {serverID: message.guild.id}});
return message.channel.send('The banned words have been reset.');
}
if (!args.word) return message.channel.send('Please specify a word to ban!');
args.word = args.word.replace(/[\u0250-\ue007]/g, '');
const bannedWords = await BannedWords.findOne({where: {word: args.word.toLowerCase(), serverID: message.guild.id}});
if (!bannedWords) {
const body = {word: args.word.toLowerCase(), serverID: message.guild.id};
await BannedWords.create(body);
return message.channel.send(`The word ${args.word.toLowerCase()} have been banned`);
return message.channel.send(`The word ${args.word.toLowerCase()} has been banned`);
} else if (args.remove && bannedWords) {
BannedWords.destroy({where: {word: args.word.toLowerCase(), serverID: message.guild.id}});
return message.channel.send(`The word ${args.word.toLowerCase()} is no longer banned`);

View file

@ -1,6 +1,7 @@
const { Command } = require('discord-akairo');
const util = require('util');
const exec = util.promisify(require('child_process').exec);
const os = require('os');
const rand = require('../../../rand.js');
class dectalkCommand extends Command {
@ -28,23 +29,24 @@ class dectalkCommand extends Command {
}
async exec(message, args) {
let output = `${os.tmpdir()}/${message.id}_dectalk.wav`;
args.decMessage = rand.random(args.decMessage, message);
args.decMessage = args.decMessage.replace('\n', ' ');
let decMessage = '[:phoneme on] ' + args.decMessage.replace(/(["\s'$`\\])/g,'\\$1');
let decMessage = '[:phoneme on] ' + args.decMessage.replace(/(["'$`\\])/g,'\\$1');
if (process.platform == 'win32') {
exec(`cd .\\dectalk && .\\say.exe -w dectalk.wav "${decMessage}"`)
exec(`cd .\\dectalk && .\\say.exe -w ${output} "${decMessage}"`)
.catch(err => {
console.error(err);
return message.channel.send('Oh no! an error has occured!');
})
.then(() => {
return message.channel.send({files: ['./dectalk/dectalk.wav']});
return message.channel.send({files: [output]});
});
} else if (process.platform == 'linux' || process.platform == 'darwin') {
let loadingmsg = await message.channel.send('Processing ( this can take some time ) <a:loadingmin:527579785212329984>');
exec(`cd dectalk && DISPLAY=:0.0 wine say.exe -w dectalk.wav "${decMessage}"`)
exec(`cd dectalk && DISPLAY=:0.0 wine say.exe -w ${output} "${decMessage}"`)
.catch(err => {
loadingmsg.delete();
console.error(err);
@ -52,7 +54,7 @@ class dectalkCommand extends Command {
})
.then(() => {
loadingmsg.delete();
return message.channel.send({files: ['./dectalk/dectalk.wav']});
return message.channel.send({files: [output]});
});
}
}

View file

@ -1,6 +1,7 @@
const { Command } = require('discord-akairo');
const util = require('util');
const exec = util.promisify(require('child_process').exec);
const os = require('os');
const rand = require('../../../rand.js');
class dectalkvcCommand extends Command {
@ -28,12 +29,13 @@ class dectalkvcCommand extends Command {
}
async exec(message, args) {
let output = `${os.tmpdir()}/${message.id}_dectalk.wav`;
args.decMessage = rand.random(args.decMessage, message);
args.decMessage = args.decMessage.replace('\n', ' ');
let decMessage = '[:phoneme on] ' + args.decMessage.replace(/(["\s'$`\\])/g,'\\$1');
let decMessage = '[:phoneme on] ' + args.decMessage.replace(/(["'$`\\])/g,'\\$1');
if (process.platform == 'win32') {
exec(`cd .\\dectalk && .\\say.exe -w dectalkvc.wav "${decMessage}"`)
exec(`cd .\\dectalk && .\\say.exe -w ${output} "${decMessage}"`)
.catch(err => {
console.error(err);
return message.channel.send('Oh no! an error has occured!');
@ -43,7 +45,7 @@ class dectalkvcCommand extends Command {
if (!voiceChannel) return message.say('Please enter a voice channel first.');
try {
const connection = await voiceChannel.join();
const dispatcher = connection.play('./dectalk/dectalk.wav');
const dispatcher = connection.play(output);
dispatcher.once('finish', () => voiceChannel.leave());
dispatcher.once('error', () => voiceChannel.leave());
return null;
@ -56,7 +58,7 @@ class dectalkvcCommand extends Command {
} else if (process.platform == 'linux' || process.platform == 'darwin') {
let loadingmsg = await message.channel.send('Processing ( this can take some time ) <a:loadingmin:527579785212329984>');
exec(`cd dectalk && DISPLAY=:0.0 wine say.exe -w dectalkvc.wav "${decMessage}"`)
exec(`cd dectalk && DISPLAY=:0.0 wine say.exe -w ${output} "${decMessage}"`)
.catch(err => {
loadingmsg.delete();
console.error(err);
@ -68,7 +70,7 @@ class dectalkvcCommand extends Command {
try {
loadingmsg.delete();
const connection = await voiceChannel.join();
const dispatcher = connection.play('./dectalk/dectalkvc.wav');
const dispatcher = connection.play(output);
dispatcher.once('finish', () => voiceChannel.leave());
dispatcher.once('error', () => voiceChannel.leave());
return null;

View file

@ -1,6 +1,7 @@
const { Command } = require('discord-akairo');
const axios = require('axios');
const fs = require('fs');
const os = require('os');
const rand = require('../../../rand.js');
class samCommand extends Command {
@ -76,9 +77,9 @@ class samCommand extends Command {
'Content-Type': 'audio/mpeg',
},
}).then((result) => {
const outputFilename = './sam.wav';
const outputFilename = `${os.tmpdir}/${message.id}_sam.wav`;
fs.writeFileSync(outputFilename, result.data);
return message.channel.send({files: ['./sam.wav']});
return message.channel.send({files: [outputFilename]});
});
}

View file

@ -1,6 +1,7 @@
const { Command } = require('discord-akairo');
const axios = require('axios');
const fs = require('fs');
const os = require('os');
const rand = require('../../../rand.js');
class samvcCommand extends Command {
@ -76,7 +77,7 @@ class samvcCommand extends Command {
'Content-Type': 'audio/mpeg',
},
}).then(async (result) => {
const outputFilename = './samvc.wav';
const outputFilename = `${os.tmpdir}/${message.id}_sam.wav`;
fs.writeFile(outputFilename, result.data, async function(err) {
if (err) console.error(err);
@ -84,7 +85,7 @@ class samvcCommand extends Command {
if (!voiceChannel) return message.say('Please enter a voice channel first.');
try {
const connection = await voiceChannel.join();
const dispatcher = connection.play('./samvc.wav');
const dispatcher = connection.play(outputFilename);
dispatcher.once('finish', () => voiceChannel.leave());
dispatcher.once('error', () => voiceChannel.leave());
return null;

View file

@ -3,6 +3,7 @@ const textToSpeech = require('@google-cloud/text-to-speech');
const rand = require('../../../rand.js');
const gclient = new textToSpeech.TextToSpeechClient();
const fs = require('fs');
const os = require('os');
class TtsCommand extends Command {
constructor() {
@ -30,6 +31,7 @@ class TtsCommand extends Command {
async exec(message, args) {
let text = args.text;
let output = `${os.tmpdir()}/${message.id}_tts.mp3`;
text = rand.random(text, message);
@ -51,7 +53,7 @@ class TtsCommand extends Command {
}
// Write the binary audio content to a local file
fs.writeFile('tts.mp3', response.audioContent, 'binary', err => {
fs.writeFile(output, response.audioContent, 'binary', err => {
if (err) {
console.error('ERROR:', err);
message.channel.send('An error has occured, the message is probably too long');
@ -59,7 +61,7 @@ class TtsCommand extends Command {
return;
}
console.log('Audio content written to file: tts.mp3');
message.channel.send({ files: ['./tts.mp3'] });
message.channel.send({ files: [output] });
});
});

View file

@ -3,6 +3,7 @@ const textToSpeech = require('@google-cloud/text-to-speech');
const rand = require('../../../rand.js');
const gclient = new textToSpeech.TextToSpeechClient();
const fs = require('fs');
const os = require('os');
class TtsvcCommand extends Command {
constructor() {
@ -30,7 +31,8 @@ class TtsvcCommand extends Command {
async exec(message, args) {
let text = args.text;
let output = `${os.tmpdir()}/${message.id}_tts.mp3`;
text = rand.random(text, message);
// Construct the request
@ -50,20 +52,19 @@ class TtsvcCommand extends Command {
}
// Write the binary audio content to a local file
fs.writeFile('ttsvc.mp3', response.audioContent, 'binary', async err => {
fs.writeFile(output, response.audioContent, 'binary', async err => {
if (err) {
console.error('ERROR:', err);
message.channel.send('An error has occured, the message is probably too long');
return;
}
console.log('Audio content written to file: ttsvc.mp3');
const voiceChannel = message.member.voice.channel;
if (!voiceChannel) return message.say('Please enter a voice channel first.');
try {
const connection = await voiceChannel.join();
const dispatcher = connection.play('./ttsvc.mp3');
const dispatcher = connection.play(output);
dispatcher.once('finish', () => voiceChannel.leave());
dispatcher.once('error', () => voiceChannel.leave());
return null;

79
commands/utility/color.js Normal file
View file

@ -0,0 +1,79 @@
const { Command } = require('discord-akairo');
class colorCommand extends Command {
constructor() {
super('color', {
aliases: ['color', 'colour'],
category: 'utility',
clientPermissions: ['SEND_MESSAGES', 'MANAGE_ROLES'],
args: [
{
id: 'color',
type: 'string'
}
],
description: {
content: 'Set your rank to a specified hex value OR (ColorResolvable)[https://discord.js.org/#/docs/main/master/typedef/ColorResolvable]',
usage: '[hex color OR ColorResolvable]',
examples: ['#FF0000', 'WHITE']
}
});
}
async exec(message, args) {
let ColorResolvable = [
'default',
'white',
'aqua',
'green',
'blue',
'yellow',
'purple',
'luminous_vivid_pink',
'gold',
'orange',
'red',
'grey',
'darker_grey',
'navy',
'dark_aqua',
'dark_green',
'dark_blue',
'dark_purple',
'dark_vivid_pink',
'dark_gold',
'dark_orange',
'dark_red',
'dark_grey',
'light_grey',
'dark_navy'
];
if (args.color.match(/^#[0-9A-F]{6}$/i) || ColorResolvable.includes(args.color.toLowerCase())) {
let role = message.guild.roles.find(role => role.name === args.color);
if (!role) {
message.guild.roles.create({
data: {
name: args.color,
color: args.color.toUpperCase(),
permissions: 0
},
reason: 'Color command'
});
return message.channel.send('Role created! try again to apply it to yourself!');
} else if (message.guild.member(message.author).roles.has(role.id)) {
message.guild.member(message.author).roles.remove(role);
return message.channel.send('Role removed!');
}
/* For some reason this doesn't work.
role = message.guild.roles.find(role => role.name === args.color);
*/
message.guild.member(message.author).roles.add(role);
return message.channel.send('Role added!');
} else {
return message.channel.send(`${args.color} is not a valide color`);
}
}
}
module.exports = colorCommand;

View file

@ -54,7 +54,7 @@ class DownloadCommand extends Command {
.setColor(message.member.displayHexColor)
.setAuthor(`Downloaded by ${message.author.username}`, message.author.displayAvatarURL(), link)
.setDescription(args.caption)
.setFooter('You can get the original video by clicking on the "downloaded by" message!');
.setFooter(`You can get the original video by clicking on the "downloaded by ${message.author.username}" message!`);
if (link.includes('http') || link.includes('www')) {