110 lines
3.5 KiB
JavaScript
110 lines
3.5 KiB
JavaScript
import {
|
|
createAudioPlayer,
|
|
createAudioResource,
|
|
getVoiceConnection,
|
|
joinVoiceChannel,
|
|
} from "@discordjs/voice";
|
|
import fs from "fs";
|
|
import * as action from "../util/discordAction.js";
|
|
|
|
const prefix = process.env.PREFIX;
|
|
|
|
export default {
|
|
name: "soundboard",
|
|
description: "plays specified sound file",
|
|
arguments: "file",
|
|
execute(message, args) {
|
|
const audioPlayer = createAudioPlayer();
|
|
let proposedfilename = message.content.slice(
|
|
prefix.length + this.name.length + 1
|
|
);
|
|
const files = fs.readdirSync("resources/soundboard");
|
|
let file;
|
|
let lsmode = false;
|
|
let stopmode = false;
|
|
|
|
let possibleFilenames = {
|
|
regular: proposedfilename,
|
|
spaced: proposedfilename.replaceAll(" ", "_"),
|
|
spacedmp3: proposedfilename.replaceAll(" ", "_") + ".mp3",
|
|
mp3: proposedfilename + ".mp3",
|
|
spacedogg: proposedfilename.replaceAll(" ", "_") + ".ogg",
|
|
ogg: proposedfilename + ".ogg",
|
|
spacedwav: proposedfilename.replaceAll(" ", "_") + ".wav",
|
|
wav: proposedfilename + ".wav",
|
|
spacedwebm: proposedfilename.replaceAll(" ", "_") + ".webm",
|
|
webm: proposedfilename + ".webm",
|
|
spacedm4a: proposedfilename.replaceAll(" ", "_") + ".m4a",
|
|
m4a: proposedfilename + ".m4a",
|
|
spacedmp4: proposedfilename.replaceAll(" ", "_") + ".mp4",
|
|
mp4: proposedfilename + ".mp4",
|
|
};
|
|
for (const value of Object.values(possibleFilenames)) {
|
|
if (files.includes(value)) {
|
|
file = value;
|
|
}
|
|
}
|
|
if (proposedfilename === "ls") {
|
|
fs.writeFileSync("resources/soundboard/ls.txt", "");
|
|
lsmode = true;
|
|
for (let file = 0; file < files.length; file++) {
|
|
if (files[file] !== "ls.txt") {
|
|
fs.appendFileSync("resources/soundboard/ls.txt", `${files[file]}\n`);
|
|
}
|
|
}
|
|
}
|
|
if (proposedfilename === "stop") {
|
|
let connection = getVoiceConnection(message.guild.id);
|
|
connection.subscribe(audioPlayer);
|
|
audioPlayer.stop();
|
|
message.reply("stopped audio playback");
|
|
return;
|
|
}
|
|
|
|
if (!file && !lsmode && !stopmode) {
|
|
action.reply(
|
|
message,
|
|
"unable to find your file in the soundboard folder put `ls` as your args to upload a file of all names. try replacing spaces with _s. you proposed: " +
|
|
proposedfilename
|
|
);
|
|
return;
|
|
}
|
|
if (!lsmode) {
|
|
const audioResource = createAudioResource(`resources/soundboard/${file}`);
|
|
|
|
let connection = getVoiceConnection(message.guild.id);
|
|
if (!connection) {
|
|
if (message.member.voice.channel) {
|
|
let voiceState = message.member.voice;
|
|
|
|
let connection = joinVoiceChannel({
|
|
channelId: voiceState.channelId,
|
|
guildId: voiceState.guild.id,
|
|
adapterCreator: voiceState.guild.voiceAdapterCreator,
|
|
});
|
|
|
|
action.reply(message, `connected to <#${voiceState.channelId}>`);
|
|
} else {
|
|
action.reply(
|
|
message,
|
|
"the bot is not in a voice channel so a sound cannot be played, and you are not in a voice channel so it can't auto join. IDIOT!"
|
|
);
|
|
return;
|
|
}
|
|
}
|
|
connection = getVoiceConnection(message.guild.id);
|
|
connection.subscribe(audioPlayer);
|
|
audioPlayer.play(audioResource);
|
|
action.reply(message, `playing \`${file}\``);
|
|
} else {
|
|
action.sendMessage(message.channelId, {
|
|
files: [
|
|
{
|
|
attachment: "resources/soundboard/ls.txt",
|
|
name: "ls.txt",
|
|
},
|
|
],
|
|
});
|
|
}
|
|
},
|
|
};
|