Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package net.unidentifiedgaming.discord.bot.commands;
- import org.apache.commons.lang3.ArrayUtils;
- import org.tritonus.share.sampled.file.AudioOutputStream;
- import sx.blah.discord.api.internal.OpusUtil;
- 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 javax.sound.sampled.*;
- import java.io.*;
- import java.util.Arrays;
- import java.util.Date;
- import java.util.List;
- public class RecordingCommand extends Command implements IAudioReceiver {
- private static boolean recording = false;
- private byte[] currentRecording;
- 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;
- }
- event.getClient().changePlayingText("Recording!");
- recording = true;
- event.getGuild().getAudioManager().subscribeReceiver(this);
- userVoiceChannel.join();
- currentRecording = null;
- event.getMessage().reply("I have started recording!");
- return true;
- } else if (arg1.equals("stop")) {
- if (!recording) {
- helpText = "I'm not recording!";
- return false;
- }
- writeToFile();
- event.getGuild().getAudioManager().unsubscribeReceiver(this);
- event.getClient().changePlayingText("");
- event.getClient().getOurUser().getVoiceStateForGuild(event.getGuild()).getChannel().leave();
- recording = false;
- currentRecording = null;
- event.getMessage().reply("I have stopped recording!");
- return true;
- }
- return false;
- }
- private void writeToFile() {
- InputStream b_stream = new ByteArrayInputStream(currentRecording);
- System.out.println(Arrays.toString(currentRecording));
- try {
- AudioFormat format = new AudioFormat(8000f, 16, 1, true, true);
- AudioInputStream stream = new AudioInputStream(b_stream, format, currentRecording.length);
- File file = new File("D:/DiscordBot/recordings/meetings/" + new Date().getTime() + ".wav");
- file.getParentFile().mkdirs();
- AudioSystem.write(stream, AudioFileFormat.Type.WAVE, file);
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- @Override
- public void receive(byte[] audio, IUser iUser, char sequence, int timestamp) {
- // System.out.println("audio: " + Arrays.toString(audio));
- // System.out.println("currentRecording: " + Arrays.toString(currentRecording));
- currentRecording = ArrayUtils.addAll(currentRecording, audio);
- }
- @Override
- public AudioEncodingType getAudioEncodingType() {
- return AudioEncodingType.OPUS;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement