|
1 | 1 | package com.javadiscord.javabot.commands.user_commands; |
2 | 2 |
|
3 | 3 | import com.javadiscord.javabot.commands.SlashCommandHandler; |
| 4 | +import com.javadiscord.javabot.commands.moderation.Warns; |
4 | 5 | import com.javadiscord.javabot.commands.other.qotw.Leaderboard; |
5 | 6 | import com.javadiscord.javabot.other.Constants; |
6 | 7 | import com.javadiscord.javabot.other.Database; |
7 | | -import com.javadiscord.javabot.other.Embeds; |
8 | 8 | import com.javadiscord.javabot.other.TimeUtils; |
9 | | -import com.mongodb.client.MongoCollection; |
10 | | -import com.mongodb.client.MongoDatabase; |
11 | 9 | import net.dv8tion.jda.api.EmbedBuilder; |
12 | 10 | import net.dv8tion.jda.api.entities.Activity; |
13 | 11 | import net.dv8tion.jda.api.entities.Member; |
| 12 | +import net.dv8tion.jda.api.entities.RichPresence; |
14 | 13 | import net.dv8tion.jda.api.events.interaction.SlashCommandEvent; |
15 | 14 | import net.dv8tion.jda.api.interactions.commands.OptionMapping; |
16 | 15 | import net.dv8tion.jda.api.requests.restaction.interactions.ReplyAction; |
17 | | -import org.bson.Document; |
18 | 16 |
|
19 | 17 | import java.awt.*; |
20 | | -import java.util.List; |
21 | 18 |
|
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) |
27 | 19 | public class Profile implements SlashCommandHandler { |
28 | 20 |
|
29 | | - @Override |
30 | | - public ReplyAction handle(SlashCommandEvent event) { |
| 21 | + String getBadges (Member member) { |
31 | 22 |
|
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) { |
34 | 66 |
|
35 | 67 | String highestRole; |
36 | 68 | try { |
37 | | - highestRole = member.getRoles().get(0).getName(); |
| 69 | + highestRole = member.getRoles().get(0).getAsMention(); |
38 | 70 | } catch (IndexOutOfBoundsException e) { |
39 | | - highestRole = "everyone"; |
| 71 | + highestRole = "None"; |
40 | 72 | } |
41 | 73 |
|
42 | | - String timeJoined = member.getTimeJoined().format(TimeUtils.STANDARD_FORMATTER); |
43 | | - String timeCreated = member.getTimeCreated().format(TimeUtils.STANDARD_FORMATTER); |
| 74 | + return highestRole; |
| 75 | + } |
44 | 76 |
|
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 | + } |
55 | 80 |
|
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) { |
58 | 82 |
|
59 | | - String customStatus, gameActivity; |
| 83 | + Activity activity = null; |
60 | 84 |
|
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; |
66 | 90 | } |
67 | | - } catch (IndexOutOfBoundsException e) { |
68 | | - customStatus = "None"; |
69 | 91 | } |
70 | 92 |
|
71 | | - try { |
72 | | - if (customStatus.equals("None")) { |
73 | | - gameActivity = activities.get(0).getName(); |
| 93 | + return activity; |
| 94 | + } |
74 | 95 |
|
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; |
80 | 104 | } |
81 | 105 |
|
82 | | - try { |
| 106 | + return activity; |
| 107 | + } |
83 | 108 |
|
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) { |
89 | 110 |
|
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 | + } |
103 | 115 |
|
104 | | - String boostBadge, botBadge; |
| 116 | + String getGameActivityDetails (Activity activity) { |
105 | 117 |
|
106 | | - if (!(member.getTimeBoosted() == null)) { |
107 | | - boostBadge = Constants.SERVER_BOOST; |
108 | | - } else { |
109 | | - boostBadge = ""; |
110 | | - } |
| 118 | + String details = ""; |
111 | 119 |
|
112 | | - String name = member.getEffectiveName() |
113 | | - .replace("```", ""); |
| 120 | + if (activity.getName().equals("Spotify")) { |
114 | 121 |
|
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; |
120 | 128 |
|
121 | | - MongoDatabase database = mongoClient.getDatabase("userdata"); |
122 | | - MongoCollection<Document> warns = database.getCollection("warns"); |
| 129 | + } else details = "`" + activity.getName() + "`"; |
123 | 130 |
|
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 | + } |
126 | 141 |
|
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) { |
130 | 143 |
|
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)) |
134 | 175 | .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()); |
147 | 176 |
|
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()); |
151 | 189 | } |
152 | 190 | } |
0 commit comments