Skip to content

Commit 03714ee

Browse files
author
Dynxsty
authored
Merge pull request Java-Discord#38 from Java-Discord/dynxsty/profile-rewrite
Reworked ``/profile``
2 parents 709a8c2 + 5deeb44 commit 03714ee

4 files changed

Lines changed: 151 additions & 105 deletions

File tree

‎src/main/java/com/javadiscord/javabot/commands/moderation/Warns.java‎

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,13 @@
2121

2222
public class Warns implements SlashCommandHandler {
2323

24+
public long warnCount (Member member) {
25+
MongoDatabase database = mongoClient.getDatabase("userdata");
26+
MongoCollection<Document> warns = database.getCollection("warns");
27+
28+
return warns.countDocuments(eq("user_id", member.getId()));
29+
}
30+
2431
@Override
2532
public ReplyAction handle(SlashCommandEvent event) {
2633
OptionMapping warnsOption = event.getOption("user");
@@ -42,7 +49,7 @@ public ReplyAction handle(SlashCommandEvent event) {
4249

4350
var e = new EmbedBuilder()
4451
.setAuthor(member.getUser().getAsTag() + " | Warns", null, member.getUser().getEffectiveAvatarUrl())
45-
.setDescription("```" + member.getUser().getAsTag() + " has been warned " + warns.count(eq("user_id", member.getId())) + " times so far."
52+
.setDescription("```" + member.getUser().getAsTag() + " has been warned " + warnCount(member) + " times so far."
4653
+ "\n\n" + sb + "```")
4754
.setColor(Constants.YELLOW)
4855
.setFooter("ID: " + member.getId())

‎src/main/java/com/javadiscord/javabot/commands/other/suggestions/Accept.java‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ public ReplyAction handle(SlashCommandEvent event) {
4747
.setTimestamp(timestamp)
4848
.setFooter("Accepted by " + event.getUser().getAsTag());
4949

50-
msg.editMessage(eb.build()).queue(message1 -> message1.addReaction(Constants.REACTION_UPVOTE).queue());
50+
msg.editMessageEmbeds(eb.build()).queue(message1 -> message1.addReaction(Constants.REACTION_SUCCESS).queue());
5151
return event.reply("Done!").setEphemeral(true);
5252

5353
} else {
Lines changed: 141 additions & 103 deletions
Original file line numberDiff line numberDiff line change
@@ -1,152 +1,190 @@
11
package com.javadiscord.javabot.commands.user_commands;
22

33
import com.javadiscord.javabot.commands.SlashCommandHandler;
4+
import com.javadiscord.javabot.commands.moderation.Warns;
45
import com.javadiscord.javabot.commands.other.qotw.Leaderboard;
56
import com.javadiscord.javabot.other.Constants;
67
import com.javadiscord.javabot.other.Database;
7-
import com.javadiscord.javabot.other.Embeds;
88
import com.javadiscord.javabot.other.TimeUtils;
9-
import com.mongodb.client.MongoCollection;
10-
import com.mongodb.client.MongoDatabase;
119
import net.dv8tion.jda.api.EmbedBuilder;
1210
import net.dv8tion.jda.api.entities.Activity;
1311
import net.dv8tion.jda.api.entities.Member;
12+
import net.dv8tion.jda.api.entities.RichPresence;
1413
import net.dv8tion.jda.api.events.interaction.SlashCommandEvent;
1514
import net.dv8tion.jda.api.interactions.commands.OptionMapping;
1615
import net.dv8tion.jda.api.requests.restaction.interactions.ReplyAction;
17-
import org.bson.Document;
1816

1917
import java.awt.*;
20-
import java.util.List;
2118

22-
import static com.javadiscord.javabot.events.Startup.mongoClient;
23-
import static com.mongodb.client.model.Filters.eq;
24-
25-
// TODO: Clean up this a lot.
26-
@Deprecated(forRemoval = true)
2719
public class Profile implements SlashCommandHandler {
2820

29-
@Override
30-
public ReplyAction handle(SlashCommandEvent event) {
21+
String getBadges (Member member) {
3122

32-
OptionMapping profileOption = event.getOption("user");
33-
Member member = profileOption == null ? event.getMember() : profileOption.getAsMember();
23+
String badges = "";
24+
25+
if (member.getUser().isBot()) badges += Constants.BOT;
26+
if (!(member.getTimeBoosted() == null)) badges += Constants.SERVER_BOOST;
27+
28+
badges += member.getUser().getFlags().toString()
29+
.substring(1, member.getUser().getFlags().toString().length() - 1)
30+
.replace(",", "")
31+
.replace("PARTNER", Constants.PARTNER)
32+
.replace("HYPESQUAD_BRAVERY", Constants.BRAVERY)
33+
.replace("HYPESQUAD_BRILLIANCE", Constants.BRILLIANCE)
34+
.replace("HYPESQUAD_BALANCE", Constants.BALANCE)
35+
.replace("VERIFIED_DEVELOPER", Constants.DEV)
36+
.replace("EARLY_SUPPORTER", Constants.EARLY_SUPPORTER)
37+
.replace("SYSTEM", Constants.STAFF)
38+
.replace("BUG_HUNTER_LEVEL_1", Constants.BUG_HUNTER)
39+
.replace("BUG_HUNTER_LEVEL_2", Constants.BUG_HUNTER)
40+
.replace("VERIFIED_BOT", "");
41+
42+
return badges;
43+
}
44+
45+
String getOnlineStatus (Member member) {
46+
47+
String statusEmote = member.getOnlineStatus().toString()
48+
.replace("ONLINE", Constants.ONLINE)
49+
.replace("IDLE", Constants.IDLE)
50+
.replace("DO_NOT_DISTURB", Constants.DND)
51+
.replace("OFFLINE", Constants.OFFLINE);
52+
53+
return statusEmote;
54+
}
55+
56+
Color getColor (Member member) {
57+
58+
Color color;
59+
if (member.getColor() == null) color = Constants.GRAY;
60+
else color = member.getColor();
61+
62+
return color;
63+
}
64+
65+
String getColorRoleAsMention (Member member) {
3466

3567
String highestRole;
3668
try {
37-
highestRole = member.getRoles().get(0).getName();
69+
highestRole = member.getRoles().get(0).getAsMention();
3870
} catch (IndexOutOfBoundsException e) {
39-
highestRole = "everyone";
71+
highestRole = "None";
4072
}
4173

42-
String timeJoined = member.getTimeJoined().format(TimeUtils.STANDARD_FORMATTER);
43-
String timeCreated = member.getTimeCreated().format(TimeUtils.STANDARD_FORMATTER);
74+
return highestRole;
75+
}
4476

45-
Color color;
46-
String colorText;
47-
if (member.getColor() == null) {
48-
color = new Color(0x2F3136);
49-
colorText = "None";
50-
51-
} else {
52-
color = member.getColor();
53-
colorText = "#" + Integer.toHexString(member.getColorRaw());
54-
}
77+
String getColorAsHex (Color color) {
78+
return "#" + Integer.toHexString(color.getRGB()).toUpperCase();
79+
}
5580

56-
String status = member.getOnlineStatus().toString().substring(0, 1).toUpperCase() + member.getOnlineStatus().toString().substring(1).toLowerCase().replace("_", " ");
57-
List<Activity> activities = member.getActivities();
81+
Activity getCustomActivity (Member member) {
5882

59-
String customStatus, gameActivity;
83+
Activity activity = null;
6084

61-
try {
62-
if (activities.get(0).getType().toString().equalsIgnoreCase("CUSTOM_STATUS")) {
63-
customStatus = activities.get(0).getName();
64-
} else {
65-
customStatus = "None";
85+
for (var act : member.getActivities()) {
86+
87+
if (act.getType().name().equals("CUSTOM_STATUS")) {
88+
activity = act;
89+
break;
6690
}
67-
} catch (IndexOutOfBoundsException e) {
68-
customStatus = "None";
6991
}
7092

71-
try {
72-
if (customStatus.equals("None")) {
73-
gameActivity = activities.get(0).getName();
93+
return activity;
94+
}
7495

75-
} else {
76-
gameActivity = activities.get(1).getName();
77-
}
78-
} catch (IndexOutOfBoundsException e) {
79-
gameActivity = "None";
96+
Activity getGameActivity (Member member) {
97+
98+
Activity activity = null;
99+
100+
for (var act : member.getActivities()) {
101+
102+
if (act.getType().name().equals("CUSTOM_STATUS")) continue;
103+
else activity = act; break;
80104
}
81105

82-
try {
106+
return activity;
107+
}
83108

84-
String statusEmote = status
85-
.replace("Online", Constants.ONLINE)
86-
.replace("Idle", Constants.IDLE)
87-
.replace("Do not disturb", Constants.DND)
88-
.replace("Offline", Constants.OFFLINE);
109+
String getGameActivityType (Activity activity) {
89110

90-
String badges = member.getUser().getFlags().toString()
91-
.substring(1, member.getUser().getFlags().toString().length() - 1)
92-
.replace(",", "")
93-
.replace("PARTNER", Constants.PARTNER)
94-
.replace("HYPESQUAD_BRAVERY", Constants.BRAVERY)
95-
.replace("HYPESQUAD_BRILLIANCE", Constants.BRILLIANCE)
96-
.replace("HYPESQUAD_BALANCE", Constants.BALANCE)
97-
.replace("VERIFIED_DEVELOPER", Constants.DEV)
98-
.replace("EARLY_SUPPORTER", Constants.EARLY_SUPPORTER)
99-
.replace("SYSTEM", Constants.STAFF)
100-
.replace("BUG_HUNTER_LEVEL_1", Constants.BUG_HUNTER)
101-
.replace("BUG_HUNTER_LEVEL_2", Constants.BUG_HUNTER)
102-
.replace("VERIFIED_BOT", "");
111+
return activity.getType().name().toLowerCase()
112+
.replace("listening", "Listening to")
113+
.replace("default", "Playing");
114+
}
103115

104-
String boostBadge, botBadge;
116+
String getGameActivityDetails (Activity activity) {
105117

106-
if (!(member.getTimeBoosted() == null)) {
107-
boostBadge = Constants.SERVER_BOOST;
108-
} else {
109-
boostBadge = "";
110-
}
118+
String details = "";
111119

112-
String name = member.getEffectiveName()
113-
.replace("```", "");
120+
if (activity.getName().equals("Spotify")) {
114121

115-
if (member.getUser().isBot()) {
116-
botBadge = Constants.BOT;
117-
} else {
118-
botBadge = "";
119-
}
122+
RichPresence rp = activity.asRichPresence();
123+
String spotifyURL = "https://open.spotify.com/track/" + rp.getSyncId();
124+
125+
details = "[`\"" + rp.getDetails() + "\"";
126+
if (!(rp.getState() == null)) details += " by " + rp.getState();
127+
details += "`](" + spotifyURL + ") " + Constants.SPOTIFY;
120128

121-
MongoDatabase database = mongoClient.getDatabase("userdata");
122-
MongoCollection<Document> warns = database.getCollection("warns");
129+
} else details = "`" + activity.getName() + "`";
123130

124-
int qotwCount = new Database().getMemberInt(member, "qotwpoints");
125-
int warnCount = (int) warns.count(eq("user_id", member.getId()));
131+
return details;
132+
}
133+
134+
String getServerJoinedDate (Member member, TimeUtils tu) {
135+
136+
long timeJoined = member.getTimeJoined().toInstant().getEpochSecond();
137+
String joinDiff = tu.formatDurationToNow(member.getTimeJoined());
138+
139+
return "<t:" + timeJoined + ":F>" + " (" + joinDiff + " ago)";
140+
}
126141

127-
TimeUtils tu = new TimeUtils();
128-
String joinDiff = " (" + tu.formatDurationToNow(member.getTimeJoined()) + ")";
129-
String createDiff = " (" + tu.formatDurationToNow(member.getTimeCreated()) + ")";
142+
String getAccountCreatedDate (Member member, TimeUtils tu) {
130143

131-
EmbedBuilder eb = new EmbedBuilder()
132-
.setTitle(statusEmote + " " + member.getUser().getAsTag() + " " + botBadge + boostBadge + badges)
133-
.setColor(color)
144+
long timeCreated = member.getTimeCreated().toInstant().getEpochSecond();
145+
String createDiff = tu.formatDurationToNow(member.getTimeCreated());
146+
147+
return "<t:" + timeCreated + ":F>" + " (" + createDiff + " ago)";
148+
}
149+
150+
String getDescription (Member member) {
151+
152+
String desc = "";
153+
154+
155+
if (!(getCustomActivity(member) == null)) desc += "\n\"" + getCustomActivity(member).getName() + "\"";
156+
if (!(getGameActivity(member) == null)) desc += "\n• " + getGameActivityType(getGameActivity(member)) + " " + getGameActivityDetails(getGameActivity(member));
157+
158+
desc +=
159+
"\n\n⌞ Warnings: `" + new Warns().warnCount(member) + "`" +
160+
"\n⌞ QOTW-Points: `" + new Database().getMemberInt(member, "qotwpoints") + " (#" + Leaderboard.rank(member.getId()) + ")`";
161+
162+
return desc;
163+
}
164+
165+
@Override
166+
public ReplyAction handle(SlashCommandEvent event) {
167+
168+
OptionMapping profileOption = event.getOption("user");
169+
Member member = profileOption == null ? event.getMember() : profileOption.getAsMember();
170+
171+
TimeUtils tu = new TimeUtils();
172+
173+
var e = new EmbedBuilder()
174+
.setTitle(getOnlineStatus(member) + " " + member.getUser().getAsTag() + " " + getBadges(member))
134175
.setThumbnail(member.getUser().getEffectiveAvatarUrl() + "?size=4096")
135-
.addField("Name", "```" + name + " ```", true)
136-
.addField("QOTW", "```" + qotwCount + " (#" + Leaderboard.rank(member.getId()) + ")```", true)
137-
.addField("Warnings", "```" + warnCount + "```", true)
138-
.addField("ID", "```" + member.getId() + "```", false)
139-
.addField("Role Amount", "```" + member.getRoles().size() + " Roles```", true)
140-
.addField("Role Color", "```" + colorText + "```", true)
141-
.addField("Highest Role", "```@" + highestRole + "```", true)
142-
.addField("Custom Status", "```" + customStatus + "```", true)
143-
.addField("Game Activity", "```" + gameActivity + "```", true)
144-
.addField("Server joined on", "```" + timeJoined + joinDiff + "```", false)
145-
.addField("Account created on", "```" + timeCreated + createDiff + "```", false);
146-
return event.replyEmbeds(eb.build());
147176

148-
} catch (IndexOutOfBoundsException e) {
149-
return event.replyEmbeds(Embeds.emptyError("```" + e.getMessage() + "```", event.getUser())).setEphemeral(true);
150-
}
177+
.setColor(getColor(member))
178+
.setDescription(getDescription(member))
179+
.setFooter("ID: " + member.getId());
180+
181+
if (member.getRoles().size() > 1 ) e.addField("Roles", getColorRoleAsMention(member) + " (+" + (member.getRoles().size() -1) + " other)", true);
182+
else if (member.getRoles().size() > 0) e.addField("Roles", getColorRoleAsMention(member), true);
183+
184+
if (member.getRoles().size() > 0) e.addField("Color", "`" + getColorAsHex(getColor(member)) + "`", true);
185+
e.addField("Server joined on", getServerJoinedDate(member, tu), false)
186+
.addField("Account created on", getAccountCreatedDate(member, tu), true);
187+
188+
return event.replyEmbeds(e.build());
151189
}
152190
}

‎src/main/java/com/javadiscord/javabot/other/Constants.java‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ public class Constants {
2323
public static final String REACTION_SUCCESS = "check:861259759151087627";
2424
public static final String REACTION_UPVOTE = "up_vote:861259760547659786";
2525
public static final String REACTION_DOWNVOTE = "down_vote:861259759562391572";
26+
public static final String SPOTIFY = "<:spotify:873228785091231795>";
2627

2728
public static final String ONLINE = "<:sOnline:861259760467705877>";
2829
public static final String OFFLINE = "<:sOffline:861259760488677376>";

0 commit comments

Comments
 (0)