Skip to content

Instantly share code, notes, and snippets.

@JannisRex
Last active May 1, 2019 14:17
Show Gist options
  • Save JannisRex/768f40559264dfcaa622a18429ec55af to your computer and use it in GitHub Desktop.
Save JannisRex/768f40559264dfcaa622a18429ec55af to your computer and use it in GitHub Desktop.
package bluebot.commands.misc;
import bluebot.MainBot;
import bluebot.utils.Command;
import bluebot.utils.soundUtils.AudioPlayerSendHandler;
import com.sedmelluq.discord.lavaplayer.player.AudioLoadResultHandler;
import com.sedmelluq.discord.lavaplayer.player.AudioPlayer;
import com.sedmelluq.discord.lavaplayer.tools.FriendlyException;
import com.sedmelluq.discord.lavaplayer.track.AudioPlaylist;
import com.sedmelluq.discord.lavaplayer.track.AudioTrack;
import net.dv8tion.jda.core.entities.VoiceChannel;
import net.dv8tion.jda.core.events.message.MessageReceivedEvent;
import net.dv8tion.jda.core.managers.AudioManager;
import java.io.File;
import java.util.ArrayList;
import java.util.concurrent.ThreadLocalRandom;
////miscCommands.put("rndsound", new RandomSoundCommand());
public class RandomSoundCommand implements Command {
private final String HELP = "The command `rndsound` plays a random sound every minute." +
" \n\nUsage : `!rnsound $i` - iteration count can be given as prop (default is 5)" +
" `!sound stop` - stop playing and makes the bot leave the voice channel." +
" \nYou can toggle between your server soundboard and the general soundboard using the `!enable` and `!disable` commands.";
private static File folder;
private int repetitionCount;
@Override
public boolean called(String[] args, MessageReceivedEvent event) {
if (args.length == 0 || args[0].equals("help")) {
return false;
} else return true;
}
@Override
public void action(String[] args, MessageReceivedEvent event) {
if (MainBot.getServerSBDisabled().contains(event.getGuild().getId())) {
folder = new File("soundboard/");
} else {
folder = new File("soundboard" + "/" + event.getGuild().getId());
}
AudioManager guildAudioManager = event.getGuild().getAudioManager();
AudioPlayer player = MainBot.getPlayerManager().createPlayer();
if (MainBot.getMusicChannel().containsKey(event.getGuild().getId())) {
if (!event.getTextChannel().getId().equals(MainBot.getMusicChannel().get(event.getGuild().getId()))) {
event.getTextChannel().sendMessage(event.getAuthor().getAsMention() + ", please use the " + event.getJDA().getTextChannelById(MainBot.getMusicChannel().get(event.getGuild().getId())).getAsMention() + " channel for sound commands.").queue();
return;
}
}
if (args[0].equals("stop")) {
try {
guildAudioManager.setSendingHandler(null);
guildAudioManager.closeAudioConnection();
} catch (Exception e) {
e.printStackTrace();
}
} else {
try {
repetitionCount = Integer.parseInt(args[0]);
} catch (NumberFormatException ex) {
repetitionCount = 5;
};
Thread randomSoundThread = new Thread();
randomSoundThread.start();
for (int i = 0; i < repetitionCount; i++) {
VoiceChannel targetChannel = event.getMember().getVoiceState().getChannel();
if (targetChannel == null) {
event.getTextChannel().sendMessage("Please join a voice channel first.").queue();
} else {
// LOOP HERE => probably wrap everything
final String trackUrl = "./" + folder.getPath() + "/" + getRandomSound();
MainBot.getPlayerManager().loadItem(trackUrl, new AudioLoadResultHandler() {
@Override
public void trackLoaded(AudioTrack audioTrack) {
AudioPlayerSendHandler handler = new AudioPlayerSendHandler(player);
guildAudioManager.setSendingHandler(handler);
guildAudioManager.openAudioConnection(targetChannel);
event.getTextChannel().sendMessage("Please join a voice channel first.").queue();
player.playTrack(audioTrack);
}
@Override
public void playlistLoaded(AudioPlaylist audioPlaylist) {
//unusued
}
@Override
public void noMatches() {
//unused
}
@Override
public void loadFailed(FriendlyException e) {
e.printStackTrace();
event.getTextChannel().sendMessage("Something unexpected happened, I couldn't play the sound.").queue();
}
});
}
randomSoundThread.sleep(60000);
}
}
}
@Override
public String help() {
return HELP;
}
@Override
public void executed(boolean success, MessageReceivedEvent event) {
if (!success) {
event.getTextChannel().sendMessage(help()).queue();
}
}
public static String getRandomSound() {
ArrayList < String > list = getSoundList();
String soundName = list.get(ThreadLocalRandom.current().nextInt(list.size())).toString();
return soundName;
}
public static ArrayList < String > getSoundList() {
ArrayList < String > soundList = new ArrayList < > ();
try {
for (File file: folder.listFiles()) {
if (file.getName().contains(".mp3")) {
soundList.add(file.getName());
}
}
} catch (NullPointerException e) {}
return soundList;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment