Advertisement
FusionLord

Recording command

Sep 25th, 2017
192
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.21 KB | None | 0 0
  1. package net.unidentifiedgaming.discord.bot.commands;
  2.  
  3. import org.gagravarr.opus.OpusAudioData;
  4. import org.gagravarr.opus.OpusFile;
  5. import sx.blah.discord.handle.audio.AudioEncodingType;
  6. import sx.blah.discord.handle.audio.IAudioReceiver;
  7. import sx.blah.discord.handle.impl.events.guild.channel.message.MessageEvent;
  8. import sx.blah.discord.handle.obj.IRole;
  9. import sx.blah.discord.handle.obj.IUser;
  10. import sx.blah.discord.handle.obj.IVoiceChannel;
  11. import sx.blah.discord.util.MissingPermissionsException;
  12.  
  13. import java.io.File;
  14. import java.io.FileOutputStream;
  15. import java.io.IOException;
  16. import java.text.SimpleDateFormat;
  17. import java.util.ArrayList;
  18. import java.util.Date;
  19. import java.util.List;
  20.  
  21. public class RecordingCommand extends Command implements IAudioReceiver {
  22.     private static boolean recording = false;
  23.     private String title = "";
  24.     private String category = "";
  25.  
  26.     public RecordingCommand(List<IRole> permissions, String helpText) {
  27.         super(permissions, helpText);
  28.     }
  29.  
  30.     @Override
  31.     public boolean action(List<String> args, MessageEvent event) {
  32.         String arg1 = args.remove(0);
  33.         if (arg1.equals("start")) {
  34.             if (recording) {
  35.                 helpText = "I'm already recording in " + event.getClient().getOurUser().getVoiceStateForGuild(event.getGuild()).getChannel().getName() + ".";
  36.                 return false;
  37.             }
  38.             IVoiceChannel userVoiceChannel = event.getAuthor().getVoiceStateForGuild(event.getGuild()).getChannel();
  39.             if (userVoiceChannel == null) {
  40.                 helpText = "You need to be in a voice channel to do that.";
  41.                 return false;
  42.             }
  43.  
  44.             try {
  45.                 userVoiceChannel.join();
  46.                 event.getGuild().getAudioManager().subscribeReceiver(this);
  47.  
  48.                 category = args.remove(0).toLowerCase();
  49.                 if (category.isEmpty()) {
  50.                     category = "uncategorised";
  51.                 }
  52.                 SimpleDateFormat df = new SimpleDateFormat("MM-dd-yyyy hh-mm-ss");
  53.                 title = df.format(new Date().getTime());
  54.  
  55.                 recording = true;
  56.                 event.getClient().changePlayingText("Recording!");
  57.                 event.getMessage().reply("I have started recording!");
  58.                 return true;
  59.             } catch (MissingPermissionsException exception) {
  60.                 helpText = "I don't have permissions to go there!";
  61.                 return false;
  62.             }
  63.         } else if (arg1.equals("stop")) {
  64.             if (!recording) {
  65.                 helpText = "I'm not recording!";
  66.                 return false;
  67.             }
  68.  
  69.             event.getGuild().getAudioManager().unsubscribeReceiver(this);
  70.             event.getClient().changePlayingText("");
  71.             event.getClient().getOurUser().getVoiceStateForGuild(event.getGuild()).getChannel().leave();
  72.             recording = false;
  73.             event.getMessage().reply("I have stopped recording!");
  74.             return true;
  75.         }
  76.  
  77.         return false;
  78.     }
  79.  
  80.     private void writeToFile(byte[] audio) {
  81.         try {
  82.             File file = new File("D:/recordings/" + category + "/" + title + ".ogg");
  83.             if (!file.getParentFile().exists())
  84.                 file.getParentFile().mkdirs();
  85.             OpusFile op;
  86.             List<OpusAudioData> audioData = new ArrayList<>();
  87.             if (file.exists()) {
  88.                 op = new OpusFile(file);
  89.                 OpusAudioData ad;
  90.                 while ((ad = op.getNextAudioPacket()) != null)
  91.                     audioData.add(ad);
  92.                 op.close();
  93.             }
  94.  
  95.             audioData.add(new OpusAudioData(audio));
  96.  
  97.             OpusFile out = new OpusFile(new FileOutputStream(file));
  98.             for (OpusAudioData oad : audioData)
  99.                 out.writeAudioData(oad);
  100.             out.close();
  101.         } catch (IOException e) {
  102.             e.printStackTrace();
  103.         }
  104.     }
  105.  
  106.     @Override
  107.     public void receive(byte[] audio, IUser iUser, char sequence, int timestamp) {
  108.         writeToFile(audio);
  109.     }
  110.  
  111.     @Override
  112.     public AudioEncodingType getAudioEncodingType() {
  113.         return AudioEncodingType.OPUS;
  114.     }
  115. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement