Skip to content

Commit f1a0ae7

Browse files
committed
GameSpy™ has officially released! Currently, tracks users current playtime in games.
1 parent 7c44ad2 commit f1a0ae7

File tree

4 files changed

+208
-1
lines changed

4 files changed

+208
-1
lines changed
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package com.jacrispys.JavaBot.Commands;
2+
3+
import com.jacrispys.JavaBot.Events.GameSpy;
4+
import com.jacrispys.JavaBot.Utils.ChannelStorageManager;
5+
import net.dv8tion.jda.api.entities.ChannelType;
6+
import net.dv8tion.jda.api.entities.Member;
7+
import net.dv8tion.jda.api.entities.Role;
8+
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
9+
import net.dv8tion.jda.api.hooks.ListenerAdapter;
10+
import org.jetbrains.annotations.NotNull;
11+
import org.yaml.snakeyaml.Yaml;
12+
13+
public class GameSpyCommand extends ListenerAdapter {
14+
15+
public void onMessageReceived(@NotNull MessageReceivedEvent event) {
16+
if (event.getAuthor().isBot()) return;
17+
if (event.isFromType(ChannelType.PRIVATE)) return;
18+
if (event.getMessage().getContentRaw().equalsIgnoreCase("!gamespy") || event.getMessage().getContentRaw().equalsIgnoreCase("!gamespydump")) {
19+
Member sender = event.getGuild().getMember(event.getAuthor());
20+
for(Role role : sender.getRoles()) {
21+
String roleName = role.getName();
22+
if(roleName.equalsIgnoreCase("JacrispysRole") || roleName.equalsIgnoreCase("Spy")) {
23+
GameSpy spy = new GameSpy(event.getGuild());
24+
if (event.getMessage().getContentRaw().equalsIgnoreCase("!gamespy")) {
25+
spy.toggleGameSpy(event);
26+
ChannelStorageManager storageManager = new ChannelStorageManager(new Yaml());
27+
storageManager.setGuildData(event.getGuild(), "gameSpyChannel", event.getChannel().getId());
28+
} else {
29+
spy.runSpy(event.getGuild());
30+
}
31+
}
32+
}
33+
}
34+
}
35+
}
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
package com.jacrispys.JavaBot.Events;
2+
3+
import com.jacrispys.JavaBot.JavaBotMain;
4+
import com.jacrispys.JavaBot.Utils.ChannelStorageManager;
5+
import com.jacrispys.JavaBot.Utils.GameSpyThread;
6+
import net.dv8tion.jda.api.entities.Guild;
7+
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
8+
import org.yaml.snakeyaml.Yaml;
9+
10+
import java.util.ArrayList;
11+
import java.util.concurrent.*;
12+
13+
14+
public class GameSpy {
15+
16+
17+
private final Guild guild;
18+
19+
private final ChannelStorageManager storageManager = new ChannelStorageManager(new Yaml());
20+
21+
private final GameSpyThread spyThread = JavaBotMain.getGameSpyThread();
22+
23+
public GameSpy(Guild guild) {
24+
this.guild = guild;
25+
}
26+
27+
public void toggleGameSpy(MessageReceivedEvent event) {
28+
try {
29+
30+
31+
storageManager.getGuildData(guild, "GameSpy");
32+
if(storageManager.getGuildData(guild, "GameSpy").equals(false)) {
33+
storageManager.setGuildData(guild, "GameSpy", true);
34+
event.getMessage().reply("GameSpy successfully enabled!").queue(m -> {
35+
m.delete().queueAfter(3, TimeUnit.SECONDS);
36+
event.getMessage().delete().queueAfter(3, TimeUnit.SECONDS);
37+
});
38+
return;
39+
}
40+
storageManager.setGuildData(guild, "GameSpy", false);
41+
event.getMessage().reply("GameSpy successfully disabled!").queue(m -> {
42+
m.delete().queueAfter(3, TimeUnit.SECONDS);
43+
event.getMessage().delete().queueAfter(3, TimeUnit.SECONDS);
44+
});
45+
} catch(NullPointerException ex) {
46+
storageManager.addGuildData(guild, "GameSpy", true);
47+
event.getMessage().reply("GameSpy successfully enabled!").queue(m -> {
48+
m.delete().queueAfter(3, TimeUnit.SECONDS);
49+
event.getMessage().delete().queueAfter(3, TimeUnit.SECONDS);
50+
});
51+
System.out.println("added new data!");
52+
}
53+
54+
}
55+
56+
public void addSpy() {
57+
spyThread.addNewSpy(guild);
58+
System.out.println("starting spies");
59+
}
60+
61+
public void runSpy(Guild guild) {
62+
spyThread.runSpy(guild);
63+
}
64+
65+
66+
67+
68+
}
Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,48 @@
11
package com.jacrispys.JavaBot;
22

33
import com.jacrispys.JavaBot.Commands.ComplaintCommand;
4+
import com.jacrispys.JavaBot.Commands.GameSpyCommand;
45
import com.jacrispys.JavaBot.Commands.PrivateMessageCommands.DefaultPrivateMessageResponse;
56
import com.jacrispys.JavaBot.Commands.RegisterGuildCommand;
7+
import com.jacrispys.JavaBot.Events.BotStartup;
68
import com.jacrispys.JavaBot.Utils.ChannelStorageManager;
9+
import com.jacrispys.JavaBot.Utils.GameSpyThread;
710
import net.dv8tion.jda.api.JDA;
811
import net.dv8tion.jda.api.JDABuilder;
912
import net.dv8tion.jda.api.entities.Activity;
13+
import net.dv8tion.jda.api.requests.GatewayIntent;
14+
import net.dv8tion.jda.api.utils.ChunkingFilter;
15+
import net.dv8tion.jda.api.utils.MemberCachePolicy;
16+
import net.dv8tion.jda.api.utils.cache.CacheFlag;
1017
import org.yaml.snakeyaml.Yaml;
1118

1219

1320
public class JavaBotMain {
1421

22+
private static GameSpyThread gameSpyThread;
23+
1524
public static void main(String[] args) throws Exception {
16-
JDA jda = JDABuilder.createDefault("Nzg2NzIxNzU1NTYwODA0Mzcz.X9Khuw.Y0pgvYATjsNpAKzRMwEeXPnGsi8").build();
25+
JDA jda = JDABuilder.createDefault("Nzg2NzIxNzU1NTYwODA0Mzcz.X9Khuw.Y0pgvYATjsNpAKzRMwEeXPnGsi8")
26+
.setChunkingFilter(ChunkingFilter.ALL)
27+
.setMemberCachePolicy(MemberCachePolicy.ALL)
28+
.enableIntents(GatewayIntent.GUILD_MEMBERS, GatewayIntent.GUILD_PRESENCES)
29+
.enableCache(CacheFlag.ACTIVITY)
30+
.build();
1731

1832
jda.getPresence().setActivity(Activity.streaming("Well this is a thing now...", "https://www.twitch.tv/jacrispyslive"));
1933
jda.addEventListener(new DefaultPrivateMessageResponse());
2034
jda.addEventListener(new ComplaintCommand());
2135
jda.addEventListener(new RegisterGuildCommand());
36+
jda.addEventListener(new GameSpyCommand());
37+
jda.addEventListener(new BotStartup());
38+
gameSpyThread = new GameSpyThread(jda);
39+
gameSpyThread.start();
2240
new ChannelStorageManager(new Yaml());
2341

2442

2543
}
44+
45+
public static GameSpyThread getGameSpyThread() {
46+
return gameSpyThread;
47+
}
2648
}
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
package com.jacrispys.JavaBot.Utils;
2+
3+
4+
import com.jacrispys.JavaBot.Utils.ExperimentalUtils.Experimental;
5+
import net.dv8tion.jda.api.EmbedBuilder;
6+
import net.dv8tion.jda.api.JDA;
7+
import net.dv8tion.jda.api.entities.Activity;
8+
import net.dv8tion.jda.api.entities.Guild;
9+
import net.dv8tion.jda.api.entities.Member;
10+
import net.dv8tion.jda.api.entities.TextChannel;
11+
12+
import java.awt.*;
13+
import java.time.LocalDate;
14+
import java.time.temporal.ChronoUnit;
15+
import java.util.ArrayList;
16+
import java.util.List;
17+
import java.util.Objects;
18+
import java.util.concurrent.TimeUnit;
19+
20+
public class GameSpyThread extends Thread {
21+
22+
private final JDA jda;
23+
public List<Guild> runningSpies = new ArrayList<>();
24+
25+
public GameSpyThread(JDA jda) {
26+
this.jda = jda;
27+
}
28+
29+
@Override
30+
public void run() {
31+
System.out.println("Thread running!");
32+
33+
}
34+
35+
public void addNewSpy(Guild guild) {
36+
runningSpies.add(guild);
37+
}
38+
39+
@Experimental("Can override existing data! Only use if you must!")
40+
public void setSpyList(List<Guild> guildList) {
41+
runningSpies = guildList;
42+
}
43+
44+
public List<Guild> getRunningSpies() {
45+
return runningSpies;
46+
}
47+
48+
49+
public void runSpy(Guild guild) {
50+
TextChannel gameSpyChannel = guild.getTextChannelById(Long.parseLong((String) ChannelStorageManager.getInstance().getGuildData(guild, "gameSpyChannel")));
51+
52+
gameSpyChannel.sendMessage("Currently Crunching numbers from: " + guild.getName()).queue();
53+
54+
EmbedBuilder embedBuilder = new EmbedBuilder();
55+
embedBuilder.setTitle("GameSpy™ Report");
56+
embedBuilder.setColor(new Color(0x530C84));
57+
embedBuilder.setDescription("Generated by SSB on: " + LocalDate.now() + "\n");
58+
embedBuilder.setAuthor("Jacrispys");
59+
embedBuilder.setImage("https://i.imgur.com/MD8RHHL.png");
60+
61+
StringBuilder richValue = new StringBuilder();
62+
for (Member member : guild.getMembers()) {
63+
for (Activity activity : member.getActivities()) {
64+
String time;
65+
if (activity.getTimestamps() != null) {
66+
long secs = activity.getTimestamps().getElapsedTime(ChronoUnit.SECONDS);
67+
time = String.format("%02d:%02d:%02d", secs / 3600, (secs % 3600) / 60, secs % 60);
68+
richValue.append("\n" + member.getAsMention() + " - " + activity.getName() + " for " + time);
69+
}
70+
}
71+
}
72+
73+
if(richValue.toString().length() >= 1024 && richValue.toString().length() <= 2048) {
74+
embedBuilder.addField("*Games*", richValue.substring(0,1024), false);
75+
embedBuilder.addField("*Games (Cont)*", richValue.substring(1024,richValue.toString().length()), false);
76+
} else {
77+
embedBuilder.addField("*Games*", richValue.toString(), false);
78+
}
79+
80+
gameSpyChannel.sendMessageEmbeds(embedBuilder.build()).queue();
81+
}
82+
}

0 commit comments

Comments
 (0)