Skip to content

Commit 474cc1e

Browse files
committed
added basic gui
command fixes
1 parent a66af36 commit 474cc1e

File tree

12 files changed

+432
-39
lines changed

12 files changed

+432
-39
lines changed

src/main/java/me/jagrosh/jmusicbot/Bot.java

Lines changed: 83 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,15 @@
3131
import me.jagrosh.jdautilities.commandclient.CommandEvent;
3232
import me.jagrosh.jdautilities.waiter.EventWaiter;
3333
import me.jagrosh.jmusicbot.audio.AudioHandler;
34+
import me.jagrosh.jmusicbot.gui.GUI;
3435
import me.jagrosh.jmusicbot.utils.FormatUtil;
36+
import net.dv8tion.jda.core.JDA;
3537
import net.dv8tion.jda.core.Permission;
3638
import net.dv8tion.jda.core.entities.Guild;
3739
import net.dv8tion.jda.core.entities.Role;
3840
import net.dv8tion.jda.core.entities.TextChannel;
3941
import net.dv8tion.jda.core.entities.VoiceChannel;
42+
import net.dv8tion.jda.core.events.ReadyEvent;
4043
import net.dv8tion.jda.core.events.ShutdownEvent;
4144
import net.dv8tion.jda.core.hooks.ListenerAdapter;
4245
import net.dv8tion.jda.core.utils.PermissionUtil;
@@ -54,6 +57,9 @@ public class Bot extends ListenerAdapter {
5457
private final AudioPlayerManager manager;
5558
private final EventWaiter waiter;
5659
private final ScheduledExecutorService threadpool;
60+
private JDA jda;
61+
private GUI gui;
62+
//private GuildsPanel panel;
5763
public final Category MUSIC = new Category("Music");
5864
public final Category DJ = new Category("DJ", event ->
5965
{
@@ -117,7 +123,7 @@ public AudioHandler setUpHandler(CommandEvent event)
117123
handler = new AudioHandler(player, event.getGuild());
118124
player.addListener(handler);
119125
event.getGuild().getAudioManager().setSendingHandler(handler);
120-
startTopicUpdater(event.getGuild(), handler);
126+
threadpool.scheduleWithFixedDelay(() -> updateTopic(event.getGuild(),handler), 0, 5, TimeUnit.SECONDS);
121127
}
122128
else
123129
{
@@ -126,32 +132,59 @@ public AudioHandler setUpHandler(CommandEvent event)
126132
return handler;
127133
}
128134

129-
private void startTopicUpdater(Guild guild, AudioHandler handler)
135+
private void updateTopic(Guild guild, AudioHandler handler)
130136
{
131-
threadpool.scheduleWithFixedDelay(() -> {
132-
TextChannel tchan = guild.getTextChannelById(getSettings(guild).getTextId());
133-
if(tchan!=null && PermissionUtil.checkPermission(tchan, guild.getSelfMember(), Permission.MANAGE_CHANNEL))
137+
TextChannel tchan = guild.getTextChannelById(getSettings(guild).getTextId());
138+
if(tchan!=null && PermissionUtil.checkPermission(tchan, guild.getSelfMember(), Permission.MANAGE_CHANNEL))
139+
{
140+
String otherText;
141+
if(tchan.getTopic()==null || tchan.getTopic().isEmpty())
142+
otherText = "";
143+
else if(tchan.getTopic().contains("\u200B"))
144+
otherText = tchan.getTopic().substring(tchan.getTopic().indexOf("\u200B")).trim();
145+
else
146+
otherText = "\n\u200B "+tchan.getTopic();
147+
String text = FormatUtil.formattedAudio(handler, guild.getJDA(), true)+otherText;
148+
if(!text.equals(tchan.getTopic()))
149+
tchan.getManager().setTopic(text).queue();
150+
}
151+
}
152+
153+
public void shutdown(){
154+
manager.shutdown();
155+
threadpool.shutdownNow();
156+
jda.getGuilds().stream().forEach(g -> {
157+
g.getAudioManager().closeAudioConnection();
158+
AudioHandler ah = (AudioHandler)g.getAudioManager().getSendingHandler();
159+
if(ah!=null)
134160
{
135-
String otherText;
136-
if(tchan.getTopic()==null || tchan.getTopic().isEmpty())
137-
otherText = "";
138-
else if(tchan.getTopic().contains("\u200B"))
139-
otherText = tchan.getTopic().substring(tchan.getTopic().indexOf("\u200B")).trim();
140-
else
141-
otherText = "\n\u200B"+tchan.getTopic();
142-
String text = FormatUtil.formattedAudio(handler, guild.getJDA(), true)+otherText;
143-
if(!text.equals(tchan.getTopic()))
144-
tchan.getManager().setTopic(text).queue();
161+
ah.getQueue().clear();
162+
ah.getPlayer().destroy();
163+
updateTopic(g, ah);
145164
}
146-
}, 0, 5, TimeUnit.SECONDS);
165+
});
166+
jda.shutdown();
147167
}
148168

169+
public void setGUI(GUI gui)
170+
{
171+
this.gui = gui;
172+
}
173+
149174
@Override
150175
public void onShutdown(ShutdownEvent event) {
151-
manager.shutdown();
152-
threadpool.shutdown();
176+
if(gui!=null)
177+
gui.dispose();
178+
}
179+
180+
@Override
181+
public void onReady(ReadyEvent event) {
182+
this.jda = event.getJDA();
183+
//if(panel!=null)
184+
// panel.updateList(event.getJDA().getGuilds());
153185
}
154186

187+
155188
// settings
156189

157190
public Settings getSettings(Guild guild)
@@ -260,4 +293,36 @@ private void writeSettings()
260293
SimpleLog.getLog("Settings").warn("Failed to write to file: "+ex);
261294
}
262295
}
296+
297+
//gui stuff
298+
/*public void registerPanel(GuildsPanel panel)
299+
{
300+
this.panel = panel;
301+
threadpool.scheduleWithFixedDelay(() -> updatePanel(), 0, 5, TimeUnit.SECONDS);
302+
}
303+
304+
public void updatePanel()
305+
{
306+
System.out.println("updating...");
307+
Guild guild = jda.getGuilds().get(panel.getIndex());
308+
panel.updatePanel((AudioHandler)guild.getAudioManager().getSendingHandler());
309+
}
310+
311+
@Override
312+
public void onGuildJoin(GuildJoinEvent event) {
313+
if(panel!=null)
314+
panel.updateList(event.getJDA().getGuilds());
315+
}
316+
317+
@Override
318+
public void onGuildLeave(GuildLeaveEvent event) {
319+
if(panel!=null)
320+
panel.updateList(event.getJDA().getGuilds());
321+
}
322+
323+
@Override
324+
public void onShutdown(ShutdownEvent event) {
325+
((GUI)panel.getTopLevelAncestor()).dispose();
326+
}*/
327+
263328
}

src/main/java/me/jagrosh/jmusicbot/JMusicBot.java

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,17 +17,18 @@
1717

1818
import java.awt.Color;
1919
import javax.security.auth.login.LoginException;
20-
import javax.swing.JOptionPane;
2120
import me.jagrosh.jdautilities.commandclient.CommandClient;
2221
import me.jagrosh.jdautilities.commandclient.CommandClientBuilder;
2322
import me.jagrosh.jdautilities.commandclient.examples.*;
2423
import me.jagrosh.jdautilities.waiter.EventWaiter;
2524
import me.jagrosh.jmusicbot.commands.*;
25+
import me.jagrosh.jmusicbot.gui.GUI;
2626
import net.dv8tion.jda.core.AccountType;
2727
import net.dv8tion.jda.core.JDABuilder;
2828
import net.dv8tion.jda.core.OnlineStatus;
2929
import net.dv8tion.jda.core.entities.Game;
3030
import net.dv8tion.jda.core.exceptions.RateLimitedException;
31+
import net.dv8tion.jda.core.utils.SimpleLog;
3132

3233
/**
3334
*
@@ -85,6 +86,14 @@ public static void main(String[] args){
8586
new ShutdownCmd(bot)
8687
).build();
8788

89+
90+
if(!nogui)
91+
{
92+
GUI gui = new GUI(bot);
93+
bot.setGUI(gui);
94+
gui.init();
95+
}
96+
8897
// attempt to log in and start
8998
try {
9099
new JDABuilder(AccountType.BOT)
@@ -97,12 +106,7 @@ public static void main(String[] args){
97106
.addListener(bot)
98107
.buildAsync();
99108
} catch (LoginException | IllegalArgumentException | RateLimitedException ex) {
100-
if(nogui)
101-
System.out.println("[ERROR] Could not log in: "+ex);
102-
else
103-
JOptionPane.showMessageDialog(null, "Could not log in:\n"+ex, "JMusicBot", JOptionPane.ERROR_MESSAGE);
104-
System.exit(1);
109+
SimpleLog.getLog("Login").fatal(ex);
105110
}
106-
107111
}
108112
}

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
import com.sedmelluq.discord.lavaplayer.track.AudioTrackEndReason;
2222
import com.sedmelluq.discord.lavaplayer.track.playback.AudioFrame;
2323
import java.util.HashSet;
24-
import java.util.List;
2524
import java.util.Set;
2625
import me.jagrosh.jmusicbot.queue.FairQueue;
2726
import net.dv8tion.jda.core.audio.AudioSendHandler;

src/main/java/me/jagrosh/jmusicbot/commands/QueueCmd.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ public void doCommand(CommandEvent event) {
7373
total += list.get(i).getTrack().getDuration();
7474
songs[i] = list.get(i).toString();
7575
}
76-
builder.setText(event.getClient().getSuccess()+" Current Queue | "+songs.length+" entries | `"+FormatUtil.formatTime(total)+"` ~ ")
76+
builder.setText(event.getClient().getSuccess()+" Current Queue | "+songs.length+" entries | `"+FormatUtil.formatTime(total)+"` ")
7777
.setItems(songs)
7878
.setUsers(event.getAuthor())
7979
.setColor(event.getSelfMember().getColor())

src/main/java/me/jagrosh/jmusicbot/commands/SearchCmd.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import me.jagrosh.jdautilities.menu.orderedmenu.OrderedMenuBuilder;
2626
import me.jagrosh.jmusicbot.Bot;
2727
import me.jagrosh.jmusicbot.utils.FormatUtil;
28+
import net.dv8tion.jda.core.Permission;
2829
import net.dv8tion.jda.core.entities.Message;
2930

3031
/**
@@ -42,6 +43,7 @@ public SearchCmd(Bot bot)
4243
this.help = "searches Youtube for a provided query";
4344
this.beListening = true;
4445
this.bePlaying = false;
46+
this.botPermissions = new Permission[]{Permission.MESSAGE_EMBED_LINKS};
4547
builder = new OrderedMenuBuilder()
4648
.allowTextInput(true)
4749
.useNumbers()

src/main/java/me/jagrosh/jmusicbot/commands/ShutdownCmd.java

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,16 +18,17 @@
1818
import me.jagrosh.jdautilities.commandclient.Command;
1919
import me.jagrosh.jdautilities.commandclient.CommandEvent;
2020
import me.jagrosh.jmusicbot.Bot;
21-
import me.jagrosh.jmusicbot.audio.AudioHandler;
2221

2322
/**
2423
*
2524
* @author John Grosh <john.a.grosh@gmail.com>
2625
*/
2726
public class ShutdownCmd extends Command {
2827

28+
private final Bot bot;
2929
public ShutdownCmd(Bot bot)
3030
{
31+
this.bot = bot;
3132
this.name = "shutdown";
3233
this.help = "safely shuts down";
3334
this.ownerCommand = true;
@@ -37,12 +38,7 @@ public ShutdownCmd(Bot bot)
3738
@Override
3839
protected void execute(CommandEvent event) {
3940
event.reply(event.getClient().getWarning()+" Shutting down...");
40-
event.getJDA().getGuilds().stream()
41-
.forEach(g -> g.getAudioManager().closeAudioConnection());
42-
event.getJDA().getGuilds().stream()
43-
.filter(g -> g.getAudioManager().getSendingHandler()!=null)
44-
.forEach(g -> ((AudioHandler)g.getAudioManager().getSendingHandler()).getPlayer().destroy());
45-
event.getJDA().shutdown();
41+
bot.shutdown();
4642
}
4743

4844
}

src/main/java/me/jagrosh/jmusicbot/commands/StopCmd.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,8 @@ public StopCmd(Bot bot)
3737
@Override
3838
public void doCommand(CommandEvent event) {
3939
AudioHandler handler = (AudioHandler)event.getGuild().getAudioManager().getSendingHandler();
40-
handler.getPlayer().stopTrack();
4140
handler.getQueue().clear();
41+
handler.getPlayer().stopTrack();
4242
event.getGuild().getAudioManager().closeAudioConnection();
4343
event.reply(event.getClient().getSuccess()+" The player has stopped and the queue has been cleared.");
4444
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
/*
2+
* Copyright 2017 John Grosh <john.a.grosh@gmail.com>.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package me.jagrosh.jmusicbot.gui;
17+
18+
import java.awt.Dimension;
19+
import java.awt.GridLayout;
20+
import java.io.PrintStream;
21+
import javax.swing.JPanel;
22+
import javax.swing.JScrollPane;
23+
import javax.swing.JTextArea;
24+
25+
/**
26+
*
27+
* @author John Grosh <john.a.grosh@gmail.com>
28+
*/
29+
public class ConsolePanel extends JPanel {
30+
31+
public ConsolePanel()
32+
{
33+
super();
34+
JTextArea text = new JTextArea();
35+
text.setLineWrap(true);
36+
text.setWrapStyleWord(true);
37+
text.setEditable(false);
38+
PrintStream con=new PrintStream(new TextAreaOutputStream(text));
39+
System.setOut(con);
40+
System.setErr(con);
41+
42+
JScrollPane pane = new JScrollPane();
43+
pane.setViewportView(text);
44+
45+
super.setLayout(new GridLayout(1,1));
46+
super.add(pane);
47+
super.setPreferredSize(new Dimension(400,300));
48+
}
49+
}

src/main/java/me/jagrosh/jmusicbot/gui/GUI.java

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,12 @@
1515
*/
1616
package me.jagrosh.jmusicbot.gui;
1717

18+
import java.awt.event.WindowEvent;
19+
import java.awt.event.WindowListener;
1820
import javax.swing.JFrame;
1921
import javax.swing.JTabbedPane;
2022
import javax.swing.WindowConstants;
23+
import me.jagrosh.jmusicbot.Bot;
2124

2225

2326
/**
@@ -26,19 +29,36 @@
2629
*/
2730
public class GUI extends JFrame {
2831

32+
private final ConsolePanel console;
33+
private final GuildsPanel guilds;
34+
private final Bot bot;
2935

30-
public GUI() {
36+
public GUI(Bot bot) {
3137
super();
32-
init();
38+
this.bot = bot;
39+
console = new ConsolePanel();
40+
guilds = new GuildsPanel(bot);
3341
}
3442

35-
private void init()
43+
public void init()
3644
{
3745
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
3846
setTitle("JMusicBot");
3947
JTabbedPane tabs = new JTabbedPane();
48+
//tabs.add("Guilds", guilds);
49+
tabs.add("Console", console);
4050
getContentPane().add(tabs);
4151
pack();
4252
setLocationRelativeTo(null);
53+
setVisible(true);
54+
addWindowListener(new WindowListener() {
55+
@Override public void windowOpened(WindowEvent e) {}
56+
@Override public void windowClosing(WindowEvent e) {bot.shutdown();}
57+
@Override public void windowClosed(WindowEvent e) {}
58+
@Override public void windowIconified(WindowEvent e) {}
59+
@Override public void windowDeiconified(WindowEvent e) {}
60+
@Override public void windowActivated(WindowEvent e) {}
61+
@Override public void windowDeactivated(WindowEvent e) {}
62+
});
4363
}
4464
}

0 commit comments

Comments
 (0)