Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package net.unidentifiedgaming.discord.bot.commands;
- import org.gagravarr.opus.OpusAudioData;
- import org.gagravarr.opus.OpusFile;
- import sx.blah.discord.handle.audio.AudioEncodingType;
- import sx.blah.discord.handle.audio.IAudioReceiver;
- import sx.blah.discord.handle.impl.events.guild.channel.message.MessageEvent;
- import sx.blah.discord.handle.obj.IRole;
- import sx.blah.discord.handle.obj.IUser;
- import sx.blah.discord.handle.obj.IVoiceChannel;
- import sx.blah.discord.util.MissingPermissionsException;
- import java.io.File;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.text.SimpleDateFormat;
- import java.util.ArrayList;
- import java.util.Date;
- import java.util.List;
- public class RecordingCommand extends Command implements IAudioReceiver {
- private static boolean recording = false;
- private String title = "";
- private String category = "";
- public RecordingCommand(List<IRole> permissions, String helpText) {
- super(permissions, helpText);
- }
- @Override
- public boolean action(List<String> args, MessageEvent event) {
- String arg1 = args.remove(0);
- if (arg1.equals("start")) {
- if (recording) {
- helpText = "I'm already recording in " + event.getClient().getOurUser().getVoiceStateForGuild(event.getGuild()).getChannel().getName() + ".";
- return false;
- }
- IVoiceChannel userVoiceChannel = event.getAuthor().getVoiceStateForGuild(event.getGuild()).getChannel();
- if (userVoiceChannel == null) {
- helpText = "You need to be in a voice channel to do that.";
- return false;
- }
- try {
- userVoiceChannel.join();
- event.getGuild().getAudioManager().subscribeReceiver(this);
- category = args.remove(0).toLowerCase();
- if (category.isEmpty()) {
- category = "uncategorised";
- }
- SimpleDateFormat df = new SimpleDateFormat("MM-dd-yyyy hh-mm-ss");
- title = df.format(new Date().getTime());
- recording = true;
- event.getClient().changePlayingText("Recording!");
- event.getMessage().reply("I have started recording!");
- return true;
- } catch (MissingPermissionsException exception) {
- helpText = "I don't have permissions to go there!";
- return false;
- }
- } else if (arg1.equals("stop")) {
- if (!recording) {
- helpText = "I'm not recording!";
- return false;
- }
- event.getGuild().getAudioManager().unsubscribeReceiver(this);
- event.getClient().changePlayingText("");
- event.getClient().getOurUser().getVoiceStateForGuild(event.getGuild()).getChannel().leave();
- recording = false;
- event.getMessage().reply("I have stopped recording!");
- return true;
- }
- return false;
- }
- private void writeToFile(byte[] audio) {
- try {
- File file = new File("D:/recordings/" + category + "/" + title + ".ogg");
- if (!file.getParentFile().exists())
- file.getParentFile().mkdirs();
- OpusFile op;
- List<OpusAudioData> audioData = new ArrayList<>();
- if (file.exists()) {
- op = new OpusFile(file);
- OpusAudioData ad;
- while ((ad = op.getNextAudioPacket()) != null)
- audioData.add(ad);
- op.close();
- }
- audioData.add(new OpusAudioData(audio));
- OpusFile out = new OpusFile(new FileOutputStream(file));
- for (OpusAudioData oad : audioData)
- out.writeAudioData(oad);
- out.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- @Override
- public void receive(byte[] audio, IUser iUser, char sequence, int timestamp) {
- writeToFile(audio);
- }
- @Override
- public AudioEncodingType getAudioEncodingType() {
- return AudioEncodingType.OPUS;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement