Skip to content

Commit c7256eb

Browse files
authored
Add files via upload
1 parent 859e5c5 commit c7256eb

File tree

3 files changed

+168
-101
lines changed

3 files changed

+168
-101
lines changed

src/main/java/com/jagrosh/jmusicbot/audio/AudioHandler.java

Lines changed: 11 additions & 101 deletions
Original file line numberDiff line numberDiff line change
@@ -15,45 +15,35 @@
1515
*/
1616
package com.jagrosh.jmusicbot.audio;
1717

18+
import java.nio.ByteBuffer;
19+
import java.util.HashSet;
20+
import java.util.LinkedList;
21+
import java.util.List;
22+
import java.util.Set;
23+
24+
import org.slf4j.LoggerFactory;
25+
1826
import com.jagrosh.jmusicbot.playlist.PlaylistLoader.Playlist;
1927
import com.jagrosh.jmusicbot.queue.AbstractQueue;
2028
import com.jagrosh.jmusicbot.settings.QueueType;
21-
import com.jagrosh.jmusicbot.utils.TimeUtil;
2229
import com.jagrosh.jmusicbot.settings.RepeatMode;
30+
import com.jagrosh.jmusicbot.settings.Settings;
2331
import com.sedmelluq.discord.lavaplayer.player.AudioPlayer;
2432
import com.sedmelluq.discord.lavaplayer.player.event.AudioEventAdapter;
2533
import com.sedmelluq.discord.lavaplayer.tools.FriendlyException;
2634
import com.sedmelluq.discord.lavaplayer.track.AudioTrack;
2735
import com.sedmelluq.discord.lavaplayer.track.AudioTrackEndReason;
2836
import com.sedmelluq.discord.lavaplayer.track.playback.AudioFrame;
29-
import java.util.HashSet;
30-
import java.util.LinkedList;
31-
import java.util.List;
32-
import java.util.Set;
33-
import com.jagrosh.jmusicbot.settings.Settings;
34-
import com.jagrosh.jmusicbot.utils.FormatUtil;
35-
import com.sedmelluq.discord.lavaplayer.source.youtube.YoutubeAudioTrack;
36-
import java.nio.ByteBuffer;
37-
import net.dv8tion.jda.api.EmbedBuilder;
38-
import net.dv8tion.jda.api.JDA;
39-
import net.dv8tion.jda.api.MessageBuilder;
37+
4038
import net.dv8tion.jda.api.audio.AudioSendHandler;
4139
import net.dv8tion.jda.api.entities.Guild;
42-
import net.dv8tion.jda.api.entities.Message;
43-
import net.dv8tion.jda.api.entities.User;
44-
import org.slf4j.LoggerFactory;
4540

4641
/**
4742
*
4843
* @author John Grosh <[email protected]>
4944
*/
5045
public class AudioHandler extends AudioEventAdapter implements AudioSendHandler
5146
{
52-
public final static String PLAY_EMOJI = "\u25B6"; // ▶
53-
public final static String PAUSE_EMOJI = "\u23F8"; // ⏸
54-
public final static String STOP_EMOJI = "\u23F9"; // ⏹
55-
56-
5747
private final List<AudioTrack> defaultQueue = new LinkedList<>();
5848
private final Set<String> votes = new HashSet<>();
5949

@@ -115,12 +105,7 @@ public void stopAndClear()
115105
audioPlayer.stopTrack();
116106
//current = null;
117107
}
118-
119-
public boolean isMusicPlaying(JDA jda)
120-
{
121-
return guild(jda).getSelfMember().getVoiceState().inVoiceChannel() && audioPlayer.getPlayingTrack()!=null;
122-
}
123-
108+
124109
public Set<String> getVotes()
125110
{
126111
return votes;
@@ -212,75 +197,7 @@ public void onTrackStart(AudioPlayer player, AudioTrack track)
212197
votes.clear();
213198
manager.getBot().getNowplayingHandler().onTrackUpdate(track);
214199
}
215-
216200

217-
// Formatting
218-
public Message getNowPlaying(JDA jda)
219-
{
220-
if(isMusicPlaying(jda))
221-
{
222-
Guild guild = guild(jda);
223-
AudioTrack track = audioPlayer.getPlayingTrack();
224-
MessageBuilder mb = new MessageBuilder();
225-
mb.append(FormatUtil.filter(manager.getBot().getConfig().getSuccess()+" **Now Playing in "+guild.getSelfMember().getVoiceState().getChannel().getAsMention()+"...**"));
226-
EmbedBuilder eb = new EmbedBuilder();
227-
eb.setColor(guild.getSelfMember().getColor());
228-
RequestMetadata rm = getRequestMetadata();
229-
if(rm.getOwner() != 0L)
230-
{
231-
User u = guild.getJDA().getUserById(rm.user.id);
232-
if(u==null)
233-
eb.setAuthor(FormatUtil.formatUsername(rm.user), null, rm.user.avatar);
234-
else
235-
eb.setAuthor(FormatUtil.formatUsername(u), null, u.getEffectiveAvatarUrl());
236-
}
237-
238-
try
239-
{
240-
eb.setTitle(track.getInfo().title, track.getInfo().uri);
241-
}
242-
catch(Exception e)
243-
{
244-
eb.setTitle(track.getInfo().title);
245-
}
246-
247-
if(track instanceof YoutubeAudioTrack && manager.getBot().getConfig().useNPImages())
248-
{
249-
eb.setThumbnail("https://img.youtube.com/vi/"+track.getIdentifier()+"/mqdefault.jpg");
250-
}
251-
252-
if(track.getInfo().author != null && !track.getInfo().author.isEmpty())
253-
eb.setFooter("Source: " + track.getInfo().author, null);
254-
255-
double progress = (double)audioPlayer.getPlayingTrack().getPosition()/track.getDuration();
256-
eb.setDescription(getStatusEmoji()
257-
+ " "+FormatUtil.progressBar(progress)
258-
+ " `[" + TimeUtil.formatTime(track.getPosition()) + "/" + TimeUtil.formatTime(track.getDuration()) + "]` "
259-
+ FormatUtil.volumeIcon(audioPlayer.getVolume()));
260-
261-
return mb.setEmbeds(eb.build()).build();
262-
}
263-
else return null;
264-
}
265-
266-
public Message getNoMusicPlaying(JDA jda)
267-
{
268-
Guild guild = guild(jda);
269-
return new MessageBuilder()
270-
.setContent(FormatUtil.filter(manager.getBot().getConfig().getSuccess()+" **Now Playing...**"))
271-
.setEmbeds(new EmbedBuilder()
272-
.setTitle("No music playing")
273-
.setDescription(STOP_EMOJI+" "+FormatUtil.progressBar(-1)+" "+FormatUtil.volumeIcon(audioPlayer.getVolume()))
274-
.setColor(guild.getSelfMember().getColor())
275-
.build()).build();
276-
}
277-
278-
public String getStatusEmoji()
279-
{
280-
return audioPlayer.isPaused() ? PAUSE_EMOJI : PLAY_EMOJI;
281-
}
282-
283-
// Audio Send Handler methods
284201
/*@Override
285202
public boolean canProvide()
286203
{
@@ -320,11 +237,4 @@ public boolean isOpus()
320237
{
321238
return true;
322239
}
323-
324-
325-
// Private methods
326-
private Guild guild(JDA jda)
327-
{
328-
return jda.getGuildById(guildId);
329-
}
330240
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package com.jagrosh.jmusicbot.audio;
2+
3+
import com.jagrosh.jmusicbot.utils.FormatUtil;
4+
import com.sedmelluq.discord.lavaplayer.track.AudioTrack;
5+
6+
import net.dv8tion.jda.api.EmbedBuilder;
7+
import net.dv8tion.jda.api.entities.Guild;
8+
import net.dv8tion.jda.api.entities.User;
9+
10+
public class AudioHandlerUtil {
11+
12+
private AudioHandlerUtil(){
13+
throw new IllegalStateException("Utility class");
14+
}
15+
16+
public static void setAuthors(RequestMetadata rm, EmbedBuilder eb, Guild guild){
17+
if(rm.getOwner() != 0L)
18+
{
19+
User u = guild.getJDA().getUserById(rm.user.id);
20+
if(u==null)
21+
eb.setAuthor(FormatUtil.formatUsername(rm.user), null, rm.user.avatar);
22+
else
23+
eb.setAuthor(FormatUtil.formatUsername(u), null, u.getEffectiveAvatarUrl());
24+
}
25+
}
26+
27+
public static void setTitle(EmbedBuilder eb, AudioTrack track){
28+
try
29+
{
30+
eb.setTitle(track.getInfo().title, track.getInfo().uri);
31+
}
32+
catch(Exception e)
33+
{
34+
eb.setTitle(track.getInfo().title);
35+
}
36+
}
37+
}
Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
package com.jagrosh.jmusicbot.audio;
2+
3+
import java.nio.ByteBuffer;
4+
5+
import com.jagrosh.jmusicbot.utils.FormatUtil;
6+
import com.jagrosh.jmusicbot.utils.TimeUtil;
7+
import com.sedmelluq.discord.lavaplayer.player.AudioPlayer;
8+
import com.sedmelluq.discord.lavaplayer.player.event.AudioEventAdapter;
9+
import com.sedmelluq.discord.lavaplayer.source.youtube.YoutubeAudioTrack;
10+
import com.sedmelluq.discord.lavaplayer.track.AudioTrack;
11+
import com.sedmelluq.discord.lavaplayer.track.playback.AudioFrame;
12+
13+
import net.dv8tion.jda.api.EmbedBuilder;
14+
import net.dv8tion.jda.api.JDA;
15+
import net.dv8tion.jda.api.MessageBuilder;
16+
import net.dv8tion.jda.api.audio.AudioSendHandler;
17+
import net.dv8tion.jda.api.entities.Guild;
18+
import net.dv8tion.jda.api.entities.Message;
19+
20+
public class StatusHandler extends AudioEventAdapter implements AudioSendHandler {
21+
22+
public static final String PLAY_EMOJI = "\u25B6"; // ▶
23+
public static final String PAUSE_EMOJI = "\u23F8"; // ⏸
24+
public static final String STOP_EMOJI = "\u23F9"; // ⏹
25+
26+
private final AudioPlayer audioPlayer;
27+
private final long guildId;
28+
private final PlayerManager manager;
29+
30+
private AudioFrame lastFrame;
31+
32+
protected StatusHandler(PlayerManager manager, Guild guild, AudioPlayer player)
33+
{
34+
this.manager = manager;
35+
this.audioPlayer = player;
36+
this.guildId = guild.getIdLong();
37+
}
38+
39+
public boolean isMusicPlaying(JDA jda)
40+
{
41+
return guild(jda).getSelfMember().getVoiceState().inVoiceChannel() && audioPlayer.getPlayingTrack()!=null;
42+
}
43+
44+
45+
public Message getNowPlaying(JDA jda)
46+
{
47+
if(isMusicPlaying(jda))
48+
{
49+
Guild guild = guild(jda);
50+
AudioTrack track = audioPlayer.getPlayingTrack();
51+
MessageBuilder mb = new MessageBuilder();
52+
mb.append(FormatUtil.filter(manager.getBot().getConfig().getSuccess()+" **Now Playing in "+guild.getSelfMember().getVoiceState().getChannel().getAsMention()+"...**"));
53+
EmbedBuilder eb = new EmbedBuilder();
54+
eb.setColor(guild.getSelfMember().getColor());
55+
RequestMetadata rm = getRequestMetadata();
56+
AudioHandlerUtil.setAuthors(rm, eb, guild);
57+
AudioHandlerUtil.setTitle(eb, track);
58+
if(track instanceof YoutubeAudioTrack && manager.getBot().getConfig().useNPImages())
59+
{
60+
eb.setThumbnail("https://img.youtube.com/vi/"+track.getIdentifier()+"/mqdefault.jpg");
61+
}
62+
63+
if(track.getInfo().author != null && !track.getInfo().author.isEmpty())
64+
eb.setFooter("Source: " + track.getInfo().author, null);
65+
66+
double progress = (double)audioPlayer.getPlayingTrack().getPosition()/track.getDuration();
67+
eb.setDescription(getStatusEmoji()
68+
+ " "+FormatUtil.progressBar(progress)
69+
+ " `[" + TimeUtil.formatTime(track.getPosition()) + "/" + TimeUtil.formatTime(track.getDuration()) + "]` "
70+
+ FormatUtil.volumeIcon(audioPlayer.getVolume()));
71+
72+
return mb.setEmbeds(eb.build()).build();
73+
}
74+
else return null;
75+
}
76+
77+
public Message getNoMusicPlaying(JDA jda)
78+
{
79+
Guild guild = guild(jda);
80+
return new MessageBuilder()
81+
.setContent(FormatUtil.filter(manager.getBot().getConfig().getSuccess()+" **Now Playing...**"))
82+
.setEmbeds(new EmbedBuilder()
83+
.setTitle("No music playing")
84+
.setDescription(STOP_EMOJI+" "+FormatUtil.progressBar(-1)+" "+FormatUtil.volumeIcon(audioPlayer.getVolume()))
85+
.setColor(guild.getSelfMember().getColor())
86+
.build()).build();
87+
}
88+
89+
public String getStatusEmoji()
90+
{
91+
return audioPlayer.isPaused() ? PAUSE_EMOJI : PLAY_EMOJI;
92+
}
93+
94+
public RequestMetadata getRequestMetadata()
95+
{
96+
if(audioPlayer.getPlayingTrack() == null)
97+
return RequestMetadata.EMPTY;
98+
RequestMetadata rm = audioPlayer.getPlayingTrack().getUserData(RequestMetadata.class);
99+
return rm == null ? RequestMetadata.EMPTY : rm;
100+
}
101+
102+
private Guild guild(JDA jda)
103+
{
104+
return jda.getGuildById(guildId);
105+
}
106+
107+
@Override
108+
public boolean canProvide()
109+
{
110+
lastFrame = audioPlayer.provide();
111+
return lastFrame != null;
112+
}
113+
114+
@Override
115+
public ByteBuffer provide20MsAudio()
116+
{
117+
return ByteBuffer.wrap(lastFrame.getData());
118+
}
119+
120+
}

0 commit comments

Comments
 (0)