Skip to content

Commit 47b79ff

Browse files
committed
1.5.1
> Code revamps > Add music natives
1 parent 55e8438 commit 47b79ff

19 files changed

+143
-168
lines changed

build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ dependencies {
4242
compile("org.reflections:reflections:0.9.11")
4343
compile("org.apache.commons:commons-lang3:3.8.1")
4444
compile("com.sedmelluq:lavaplayer:1.3.32")
45+
compile("com.sedmelluq:jda-nas:1.1.0")
4546
compile("org.json:json:20180813")
4647
}
4748

Lines changed: 29 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package suzuya.client;
22

3+
import com.sedmelluq.discord.lavaplayer.jdaudp.NativeAudioSendFactory;
34
import com.sedmelluq.discord.lavaplayer.player.AudioConfiguration;
45
import com.sedmelluq.discord.lavaplayer.player.AudioPlayerManager;
56
import com.sedmelluq.discord.lavaplayer.player.DefaultAudioPlayerManager;
@@ -16,92 +17,76 @@
1617
import net.dv8tion.jda.api.JDABuilder;
1718
import org.slf4j.Logger;
1819
import org.slf4j.LoggerFactory;
19-
import suzuya.util.Config;
20+
import suzuya.util.SuzuyaConfig;
2021
import suzuya.Sortie;
2122
import suzuya.handler.CommandHandler;
2223
import suzuya.handler.SettingsHandler;
2324
import suzuya.handler.TagsHandler;
2425
import suzuya.player.SuzuyaPlayer;
2526
import suzuya.structures.CaptchaExecutor;
26-
import suzuya.structures.Page;
27+
import suzuya.util.SuzuyaUtils;
2728

2829
import javax.security.auth.login.LoginException;
2930
import java.awt.*;
3031
import java.lang.management.ManagementFactory;
3132
import java.lang.management.RuntimeMXBean;
32-
import java.util.Arrays;
33-
import java.util.List;
3433
import java.util.concurrent.ConcurrentHashMap;
3534
import java.util.concurrent.ExecutorService;
3635
import java.util.concurrent.Executors;
3736
import java.util.concurrent.ScheduledExecutorService;
38-
import java.util.stream.Collectors;
3937

4038
public class SuzuyaClient {
4139
public final Logger SuzuyaLog = LoggerFactory.getLogger(Sortie.class);
42-
public final Config config = new Config(this);
40+
41+
public final SuzuyaConfig suzuyaConfig = new SuzuyaConfig(this);
42+
public final SuzuyaUtils util = new SuzuyaUtils(this);
43+
4344
public final AudioPlayerManager PlayerManager = new DefaultAudioPlayerManager();
4445
public final ConcurrentHashMap<String, SuzuyaPlayer> players = new ConcurrentHashMap<>();
4546
public final ConcurrentHashMap<String, CaptchaExecutor> captcha = new ConcurrentHashMap<>();
46-
public final CommandHandler commandHandler = new CommandHandler(this);
47-
public final SettingsHandler settingsHandler = new SettingsHandler(this);
48-
public final TagsHandler tagsHandler = new TagsHandler(this);
4947

5048
public final Color defaultEmbedColor = new Color(62, 180, 137);
5149

5250
public final OperatingSystemMXBean system = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean();
5351
public final RuntimeMXBean runtime_mx = ManagementFactory.getRuntimeMXBean();
5452
public final Runtime runtime = Runtime.getRuntime();
5553

56-
public final JDA client = new JDABuilder(config.getToken()).build();
57-
5854
public final ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
5955
public final ExecutorService executors = Executors.newCachedThreadPool();
6056

57+
public final JDA client;
58+
public final CommandHandler commandHandler;
59+
public final SettingsHandler settingsHandler;
60+
public final TagsHandler tagsHandler;
61+
6162
public Boolean isClientReady = false;
6263

6364
public SuzuyaClient() throws LoginException {
64-
settingsHandler.initDb();
65-
tagsHandler.initDb();
66-
setPlayerSettings();
67-
}
68-
69-
private void setPlayerSettings() {
70-
AudioConfiguration audioConfig = PlayerManager.getConfiguration();
71-
audioConfig.setResamplingQuality(AudioConfiguration.ResamplingQuality.HIGH);
72-
audioConfig.setOpusEncodingQuality(10);
73-
SuzuyaLog.info("AudioPlayer settings are now set.");
65+
commandHandler = new CommandHandler(this)
66+
.init();
67+
settingsHandler = new SettingsHandler(this)
68+
.init();
69+
tagsHandler = new TagsHandler(this)
70+
.init();
71+
client = new JDABuilder()
72+
.setToken(suzuyaConfig.getToken())
73+
.setAudioSendFactory(new NativeAudioSendFactory())
74+
.build();
75+
PlayerManager
76+
.getConfiguration()
77+
.setResamplingQuality(AudioConfiguration.ResamplingQuality.HIGH);
78+
PlayerManager
79+
.getConfiguration()
80+
.setOpusEncodingQuality(10);
7481
YoutubeAudioSourceManager youtube = new YoutubeAudioSourceManager();
7582
youtube.setPlaylistPageCount(1000);
7683
PlayerManager.registerSourceManager(youtube);
77-
PlayerManager.registerSourceManager(new BandcampAudioSourceManager());
7884
PlayerManager.registerSourceManager(SoundCloudAudioSourceManager.createDefault());
85+
PlayerManager.registerSourceManager(new BandcampAudioSourceManager());
7986
PlayerManager.registerSourceManager(new TwitchStreamAudioSourceManager());
8087
PlayerManager.registerSourceManager(new VimeoAudioSourceManager());
8188
PlayerManager.registerSourceManager(new BeamAudioSourceManager());
8289
PlayerManager.registerSourceManager(new HttpAudioSourceManager());
8390
PlayerManager.registerSourceManager(new LocalAudioSourceManager());
84-
SuzuyaLog.info("Registered the AudioPlayer sources managers");
85-
}
86-
87-
public Page paginate(Integer length, Integer page, Integer max) {
88-
if (page == null) page = 1;
89-
int limit = length / max + ((length % max == 0) ? 0 : 1);
90-
int selected = page < 1 ? 1 : page > limit ? limit : page;
91-
int start = (selected - 1) * max;
92-
return new Page(selected, limit, start, length > max ? start + max : length);
93-
}
94-
95-
public void errorTrace(String title, StackTraceElement[] traces) {
96-
List<String> trace = Arrays.stream(traces)
97-
.map(val -> val.toString() + "\n")
98-
.collect(Collectors.toList());
99-
trace.add(0, title + "\n");
100-
SuzuyaLog.error(trace.toString());
101-
}
102-
103-
public void errorTrace(String message) {
104-
if (message == null) return;
105-
SuzuyaLog.error(message);
10691
}
10792
}

src/main/java/suzuya/commands/Play.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ public String run(HandlerArgs handler, Settings config, String[] args) {
5050
return "Admiral, "+ handler.me.getName() +" knows you aren't in a voice channel, dummy.";
5151
String url = args[1];
5252
CompletableFuture<Message> sentMessage = handler.channel.sendMessage("Trying to find the query you gave me....").submit();
53+
// async player loading meme
5354
sentMessage.thenApplyAsync(message -> {
5455
CompletableFuture<SuzuyaResult> request = new SuzuyaResolver(handler.suzuya).resolve(url);
5556
request.thenApplyAsync(data -> {
@@ -72,7 +73,7 @@ public String run(HandlerArgs handler, Settings config, String[] args) {
7273
SuzuyaPlayerTrack playerTrack = new SuzuyaPlayerTrack(track, handler.member);
7374
suzuyaPlayer.queue.offer(playerTrack);
7475
}
75-
message.editMessage("Loaded the playlist `" + data.playlist + "`").queue();
76+
message.editMessage("Loaded the playlist `" + data.playlist + "`. This playlist contains `" + data.tracks.size() + "` track(s).").queue();
7677
if (executePlayTrack)
7778
suzuyaPlayer.startPlaying(Objects.requireNonNull(suzuyaPlayer.queue.poll()));
7879
return null;
@@ -87,19 +88,19 @@ public String run(HandlerArgs handler, Settings config, String[] args) {
8788
if (executePlayTrack)
8889
suzuyaPlayer.startPlaying(Objects.requireNonNull(suzuyaPlayer.queue.poll()));
8990
} catch (Exception error) {
90-
handler.suzuya.errorTrace(error.getMessage(), error.getStackTrace());
91+
handler.suzuya.util.errorTrace(error.getMessage(), error.getStackTrace());
9192
}
9293
return null;
9394
});
9495
request.exceptionally((error) -> {
95-
handler.suzuya.errorTrace(error.getMessage(), error.getStackTrace());
96+
handler.suzuya.util.errorTrace(error.getMessage(), error.getStackTrace());
9697
message.editMessage("An error occured when trying to add the track. Error Message:\n`" + error.getMessage() + "`").queue();
9798
return null;
9899
});
99100
return null;
100101
});
101102
sentMessage.exceptionally((error) -> {
102-
handler.suzuya.errorTrace(error.getMessage(), error.getStackTrace());
103+
handler.suzuya.util.errorTrace(error.getMessage(), error.getStackTrace());
103104
handler.channel.sendMessage("An error occured when trying to add the track. Error Message:\n`" + error.getMessage() + "`").queue();
104105
return null;
105106
});

src/main/java/suzuya/commands/Queue.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ public String run(HandlerArgs handler, Settings config, String[] args) {
6363
} catch (Exception error) {
6464
request = 1;
6565
}
66-
Page data = handler.suzuya.paginate(suzuyaPlayer.queue.size(), request, 10);
66+
Page data = handler.suzuya.util.paginate(suzuyaPlayer.queue.size(), request, 10);
6767
this.number = data.start;
6868
List<String> tracks = Arrays.stream(Arrays.copyOfRange(suzuyaPlayer.queue.toArray(new suzuya.structures.SuzuyaPlayerTrack[0]), data.start, data.end))
6969
.map(val -> {

src/main/java/suzuya/commands/Shuffle.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@ public String run(HandlerArgs handler, Settings config, String[] args) {
4848
SuzuyaPlayer suzuyaPlayer = handler.suzuya.players.get(handler.guild.getId());
4949
if (!Objects.requireNonNull(handler.member.getVoiceState().getChannel()).getId().equals(suzuyaPlayer.voiceChannel.getId()))
5050
return "Admiral, " + handler.me.getName() + " won't let you shuffle anything if you are not in the same voice channel where I am";
51+
if (suzuyaPlayer.queue.size() < 2)
52+
return "Admiral, there is no point on trying to shuffle a queue that contains less than 2 songs.";
5153
if (!suzuyaPlayer.currentTrack.isSuperUser(handler.member))
5254
return "Admiral, " + handler.me.getName() + " won't let you shuffle anything if you don't have enough permissions to do so.";
5355
List<SuzuyaPlayerTrack> list = new ArrayList<>();

src/main/java/suzuya/commands/Skip.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ public String run(HandlerArgs handler, Settings config, String[] args) {
4747
SuzuyaPlayer suzuyaPlayer = handler.suzuya.players.get(handler.guild.getId());
4848
if (!Objects.requireNonNull(handler.member.getVoiceState().getChannel()).getId().equals(suzuyaPlayer.voiceChannel.getId()))
4949
return "Admiral, " + handler.me.getName() + " won't let you skip anything if you are not in the same voice channel where I am.";
50-
if (suzuyaPlayer.queue.size() == 0 || suzuyaPlayer.currentTrack.hasNoPermissionForAction(handler.member))
50+
if (suzuyaPlayer.currentTrack.hasNoPermissionForAction(handler.member))
5151
return "Admiral, " + handler.me.getName() + " won't let you skip anything if you don't have enough permissions to do so.";
5252
suzuyaPlayer.player.stopTrack();
5353
return null;

src/main/java/suzuya/commands/Tags.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ public String run(HandlerArgs handler, Settings config, String[] args) {
5252
} catch (Exception error) {
5353
request = 1;
5454
}
55-
Page data = handler.suzuya.paginate(tags.size(), request, 20);
55+
Page data = handler.suzuya.util.paginate(tags.size(), request, 20);
5656
List<suzuya.structures.Tag> parts = tags.subList(data.start, data.end);
5757
ArrayList<String> titles = new ArrayList<>();
5858
for (suzuya.structures.Tag part : parts) {

src/main/java/suzuya/events/GuildMemberJoin.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ public void onGuildMemberJoin(GuildMemberJoinEvent event) {
6565
.submit()
6666
.thenAcceptAsync((dmChannel) -> dmChannel.sendMessage("<:hibiki_drink:545882402401157122> You have been kicked from **" + guild.getName() + "** because you failed to complete the verification.").queue())
6767
.whenComplete((ignore, error) -> {
68-
suzuya.errorTrace(error.getMessage(), error.getStackTrace());
68+
suzuya.util.errorTrace(error.getMessage(), error.getStackTrace());
6969
guild.kick(user.getId(), "Failed to complete Captcha. Possible spam bot").queue();
7070
String avatar = suzuya.client.getSelfUser().getAvatarUrl() != null ? suzuya.client.getSelfUser().getAvatarUrl() : suzuya.client.getSelfUser().getDefaultAvatarUrl();
7171
MessageEmbed embed = new EmbedBuilder()
@@ -87,18 +87,18 @@ public void onGuildMemberJoin(GuildMemberJoinEvent event) {
8787
return null;
8888
});
8989
queuedSent.exceptionally((error) -> {
90-
suzuya.errorTrace(error.getMessage(), error.getStackTrace());
90+
suzuya.util.errorTrace(error.getMessage(), error.getStackTrace());
9191
return null;
9292
});
9393
return null;
9494
});
9595
generateImage.exceptionally((error) -> {
96-
suzuya.errorTrace(error.getMessage(), error.getStackTrace());
96+
suzuya.util.errorTrace(error.getMessage(), error.getStackTrace());
9797
return null;
9898
});
9999
});
100100
restRoleAdd.exceptionally((error) -> {
101-
suzuya.errorTrace(error.getMessage(), error.getStackTrace());
101+
suzuya.util.errorTrace(error.getMessage(), error.getStackTrace());
102102
return null;
103103
});
104104
}

src/main/java/suzuya/events/GuildMessage.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -82,9 +82,9 @@ private void HandleError(Exception error, HandlerArgs handler, BaseCommand comma
8282
try {
8383
handler.channel.sendMessage(embed).queue();
8484
} catch (Exception _error) {
85-
suzuya.errorTrace(_error.getMessage(), _error.getStackTrace());
85+
suzuya.util.errorTrace(_error.getMessage(), _error.getStackTrace());
8686
}
87-
suzuya.errorTrace(error.getMessage(), error.getStackTrace());
87+
suzuya.util.errorTrace(error.getMessage(), error.getStackTrace());
8888
}
8989

9090
private void HandleError(Exception error, HandlerArgs handler) {
@@ -98,9 +98,9 @@ private void HandleError(Exception error, HandlerArgs handler) {
9898
try {
9999
handler.channel.sendMessage(embed).queue();
100100
} catch (Exception _error) {
101-
suzuya.errorTrace(_error.getMessage(), _error.getStackTrace());
101+
suzuya.util.errorTrace(_error.getMessage(), _error.getStackTrace());
102102
}
103103
handler.channel.sendMessage(embed).queue();
104-
suzuya.errorTrace(error.getMessage(), error.getStackTrace());
104+
suzuya.util.errorTrace(error.getMessage(), error.getStackTrace());
105105
}
106106
}

src/main/java/suzuya/events/GuildVerificationMessage.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public void onGuildMessageReceived(GuildMessageReceivedEvent event) {
4242
.submit()
4343
.handleAsync((res, error) -> {
4444
if (error != null) {
45-
suzuya.errorTrace(error.getMessage(), error.getStackTrace());
45+
suzuya.util.errorTrace(error.getMessage(), error.getStackTrace());
4646
return null;
4747
}
4848
event.getMessage().delete().queue();
@@ -73,7 +73,7 @@ public void onGuildMessageReceived(GuildMessageReceivedEvent event) {
7373
.submit()
7474
.handleAsync((res, error) -> {
7575
if (error != null) {
76-
suzuya.errorTrace(error.getMessage(), error.getStackTrace());
76+
suzuya.util.errorTrace(error.getMessage(), error.getStackTrace());
7777
return null;
7878
}
7979
res.sendMessage("<:uzuki_pyon:545889147211218945> Yay! Admiral **" + user.getAsTag() + "**, you now have access to the **" + guild.getName() + "**").queue();

0 commit comments

Comments
 (0)