diff --git a/commands/admin/banword.js b/commands/admin/banword.js index d268004..15aa9ed 100644 --- a/commands/admin/banword.js +++ b/commands/admin/banword.js @@ -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`); diff --git a/commands/fun/tts/dectalk.js b/commands/fun/tts/dectalk.js index d20f9a5..78d1bb2 100644 --- a/commands/fun/tts/dectalk.js +++ b/commands/fun/tts/dectalk.js @@ -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 ) '); - 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]}); }); } } diff --git a/commands/fun/tts/dectalkvc.js b/commands/fun/tts/dectalkvc.js index 58e7c54..3a00041 100644 --- a/commands/fun/tts/dectalkvc.js +++ b/commands/fun/tts/dectalkvc.js @@ -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 ) '); - 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; diff --git a/commands/fun/tts/sam.js b/commands/fun/tts/sam.js index 84d7c82..55cd5cf 100644 --- a/commands/fun/tts/sam.js +++ b/commands/fun/tts/sam.js @@ -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]}); }); } diff --git a/commands/fun/tts/samvc.js b/commands/fun/tts/samvc.js index f8bf14a..96a4efd 100644 --- a/commands/fun/tts/samvc.js +++ b/commands/fun/tts/samvc.js @@ -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; diff --git a/commands/fun/tts/tts.js b/commands/fun/tts/tts.js index 5c3899c..5c4d60f 100644 --- a/commands/fun/tts/tts.js +++ b/commands/fun/tts/tts.js @@ -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] }); }); }); diff --git a/commands/fun/tts/ttsvc.js b/commands/fun/tts/ttsvc.js index 651ff25..9cb14ce 100644 --- a/commands/fun/tts/ttsvc.js +++ b/commands/fun/tts/ttsvc.js @@ -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; diff --git a/commands/utility/color.js b/commands/utility/color.js new file mode 100644 index 0000000..26b661c --- /dev/null +++ b/commands/utility/color.js @@ -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; \ No newline at end of file diff --git a/commands/utility/download.js b/commands/utility/download.js index 3ff6214..1db2696 100644 --- a/commands/utility/download.js +++ b/commands/utility/download.js @@ -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')) {