Last active
May 1, 2019 14:17
-
-
Save JannisRex/768f40559264dfcaa622a18429ec55af to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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