1616import org .togetherjava .tjbot .commands .SlashCommandAdapter ;
1717import org .togetherjava .tjbot .commands .SlashCommandVisibility ;
1818
19+ import javax .annotation .CheckReturnValue ;
1920import java .awt .*;
2021import java .time .Instant ;
2122import java .time .OffsetDateTime ;
@@ -36,8 +37,8 @@ public WhoIsCommand() {
3637 super ("whois" , "Provides info about the given user" , SlashCommandVisibility .GUILD );
3738
3839 getData ().addOption (OptionType .USER , USER_OPTION , "the user to look up" , true )
39- .addOption (OptionType .BOOLEAN , SHOW_SERVER_SPECIFIC_INFO ,
40- "whenever to show info that is specific to this server, such as " , false );
40+ .addOption (OptionType .BOOLEAN , SHOW_SERVER_SPECIFIC_INFO ,
41+ "whenever to show info that is specific to this server, such as " , false );
4142 }
4243
4344 @ Override
@@ -62,63 +63,88 @@ public void onSlashCommand(@NotNull final SlashCommandEvent event) {
6263 }).queue ();
6364 }
6465
65- private static ReplyAction handleWhoIsUser (final @ NotNull SlashCommandEvent event ,
66- final @ NotNull User user , final @ NotNull User .Profile profile ) {
66+ @ CheckReturnValue
67+ private static @ NotNull ReplyAction handleWhoIsUser (final @ NotNull SlashCommandEvent event ,
68+ final @ NotNull User user , final @ NotNull User .Profile profile ) {
6769
68- StringBuilder descriptionBuilder = new StringBuilder ()
69- .append (handleUserIdentification (user ))
70- .append ("\n **Is bot:** " ).append (user .isBot ())
71- .append (handleUserFlags (user .getFlags ()))
72- .append ("\n **Registration date:** " ).append (DATE_TIME_FORMAT .format (user .getTimeCreated ()));
70+ StringBuilder descriptionBuilder =
71+ new StringBuilder ().append (handleUserIdentification (user ))
72+ .append ("\n **Is bot:** " )
73+ .append (user .isBot ())
74+ .append (handleUserFlags (user .getFlags ()))
75+ .append ("\n **Registration date:** " )
76+ .append (DATE_TIME_FORMAT .format (user .getTimeCreated ()));
7377
74- EmbedBuilder embedBuilder = generateEmbedBuilder (event , user , profile ,profile .getAccentColor ())
75- .setAuthor (user .getName (), user .getEffectiveAvatarUrl (), user .getEffectiveAvatarUrl ())
76- .setDescription (descriptionBuilder );
78+ EmbedBuilder embedBuilder =
79+ generateEmbedBuilder (event , user , profile , profile .getAccentColor ()).setAuthor (
80+ user .getName (), user .getEffectiveAvatarUrl (), user .getEffectiveAvatarUrl ())
81+ .setDescription (descriptionBuilder );
7782
7883 return event .replyEmbeds (embedBuilder .build ())
79- .addActionRow (Button .of (ButtonStyle .LINK , "discord://-/users/" + user .getId (),
80- "Click to see profile" ));
84+ .addActionRow (Button .of (ButtonStyle .LINK , "discord://-/users/" + user .getId (),
85+ "Click to see profile" ));
8186 }
8287
88+ @ CheckReturnValue
8389 private static @ NotNull ReplyAction handleWhoIsMember (final @ NotNull SlashCommandEvent event ,
84- final @ NotNull Member member , final @ NotNull User .Profile profile ) {
90+ final @ NotNull Member member , final @ NotNull User .Profile profile ) {
8591 User user = member .getUser ();
8692
8793 Color memberColor = member .getColor ();
8894 Color effectiveColor = (null == memberColor ) ? profile .getAccentColor () : memberColor ;
8995
90- StringBuilder descriptionBuilder = new StringBuilder ()
91- .append (handleUserIdentification (user ))
92- .append ("\n **Is bot:** " ).append (user .isBot ())
93- .append (handlePossibleBooster (member ))
94- .append (handleUserFlags (user .getFlags ()))
95- .append ("\n **Join date:** " ).append (DATE_TIME_FORMAT .format (member .getTimeJoined ()))
96- .append ("\n **Registration date:** " ).append (DATE_TIME_FORMAT .format (user .getTimeCreated ()))
97- .append ("\n **Roles:** " ).append (formatRoles (member ));
96+ StringBuilder descriptionBuilder =
97+ new StringBuilder ().append (handleUserIdentification (user ))
98+ .append ("\n **Is bot:** " )
99+ .append (user .isBot ())
100+ .append (handlePossibleBooster (member ))
101+ .append (handleUserFlags (user .getFlags ()))
102+ .append ("\n **Join date:** " )
103+ .append (DATE_TIME_FORMAT .format (member .getTimeJoined ()))
104+ .append ("\n **Registration date:** " )
105+ .append (DATE_TIME_FORMAT .format (user .getTimeCreated ()))
106+ .append ("\n **Roles:** " )
107+ .append (formatRoles (member ));
98108
99109
100110 EmbedBuilder embedBuilder = generateEmbedBuilder (event , user , profile , effectiveColor )
101- .setAuthor (member .getEffectiveName (), member .getEffectiveAvatarUrl (),
102- member .getEffectiveAvatarUrl ())
103- .setDescription (descriptionBuilder );
111+ .setAuthor (member .getEffectiveName (), member .getEffectiveAvatarUrl (),
112+ member .getEffectiveAvatarUrl ())
113+ .setDescription (descriptionBuilder );
104114
105115
106116 return event .replyEmbeds (embedBuilder .build ())
107- .addActionRow (Button .of (ButtonStyle .LINK , "discord://-/users/" + user .getId (),
108- "Click to see profile" ));
117+ .addActionRow (Button .of (ButtonStyle .LINK , "discord://-/users/" + user .getId (),
118+ "Click to see profile" ));
109119 }
110120
111121
112- private static @ NotNull EmbedBuilder generateEmbedBuilder (@ NotNull final SlashCommandEvent event , @ NotNull final User user , final @ NotNull User .Profile profile , final Color effectiveColor ) {
122+ /**
123+ * Generates whois embed based on the given parameters.
124+ *
125+ * @param event the {@link SlashCommandEvent}
126+ * @param user the {@link User} getting whois'd
127+ * @param profile the {@link net.dv8tion.jda.api.entities.User.Profile} of the whois'd user
128+ * @param effectiveColor the {@link Color} that the embed will become
129+ * @return
130+ */
131+ private static @ NotNull EmbedBuilder generateEmbedBuilder (
132+ @ NotNull final SlashCommandEvent event , @ NotNull final User user ,
133+ final @ NotNull User .Profile profile , final Color effectiveColor ) {
113134 return new EmbedBuilder ().setThumbnail (user .getEffectiveAvatarUrl ())
114- .setColor (effectiveColor )
115- .setImage (profile .getBannerUrl () + "?size=4096" )
116- .setFooter ("Requested by " + event .getUser ().getAsTag (),
117- event .getMember ().getEffectiveAvatarUrl ())
118- .setTimestamp (Instant .now ());
135+ .setColor (effectiveColor )
136+ .setImage (profile .getBannerUrl () + "?size=4096" )
137+ .setFooter ("Requested by " + event .getUser ().getAsTag (),
138+ event .getMember ().getEffectiveAvatarUrl ())
139+ .setTimestamp (Instant .now ());
119140 }
120141
121- // TODO add doc
142+ /**
143+ * Handles boosting properties of a {@link Member}
144+ *
145+ * @param member the {@link Member} to take the booster properties from
146+ * @return user readable {@link String}
147+ */
122148 private static @ NotNull String handlePossibleBooster (final @ NotNull Member member ) {
123149 OffsetDateTime timeBoosted = member .getTimeBoosted ();
124150 if (null != timeBoosted ) {
@@ -129,25 +155,51 @@ private static ReplyAction handleWhoIsUser(final @NotNull SlashCommandEvent even
129155 }
130156 }
131157
158+ /**
159+ * Handles the user's identifying properties (such as ID, tag)
160+ *
161+ * @param user the {@link User} to take the identifiers from
162+ * @return user readable {@link StringBuilder}
163+ */
132164 private static @ NotNull StringBuilder handleUserIdentification (final @ NotNull User user ) {
133165 return new StringBuilder ("**Mention:** " ).append (user .getAsMention ())
134- .append ("\n **Tag:** " ).append (user .getAsTag ())
135- .append ("\n **ID:** " ).append (user .getId ());
166+ .append ("\n **Tag:** " )
167+ .append (user .getAsTag ())
168+ .append ("\n **ID:** " )
169+ .append (user .getId ());
136170 }
137171
138- // TODO add doc
172+ /**
173+ * Formats the roles into a user readable {@link String}
174+ *
175+ * @param member member to take the Roles from
176+ * @return user readable {@link String} of the roles
177+ */
139178 private static String formatRoles (final @ NotNull Member member ) {
140179 return member .getRoles ().stream ().map (Role ::getAsMention ).collect (Collectors .joining (", " ));
141180 }
142181
143- // TODO add doc and improve naming?
144- private static @ NotNull StringBuilder handleUserFlags (final @ NotNull Collection <User .UserFlag > flags ) {
145- return formatHypesquad (flags )
146- .append ("\n **Flags:** " )
147- .append (formatUserFlags (flags ));
182+ /**
183+ * Formats Hypesquad and the flags
184+ *
185+ * @param flags the {@link Collection} of {@link net.dv8tion.jda.api.entities.User.UserFlag}
186+ * (recommend {@link java.util.EnumSet}
187+ * @return user readable {@link StringBuilder}
188+ */
189+ private static @ NotNull StringBuilder handleUserFlags (
190+ final @ NotNull Collection <User .UserFlag > flags ) {
191+ return formatHypesquad (flags ).append ("\n **Flags:** " ).append (formatUserFlags (flags ));
148192 }
149193
150- private static @ NotNull StringBuilder formatHypesquad (final @ NotNull Collection <User .UserFlag > flags ) {
194+ /**
195+ * Formats user readable Hypesquad item
196+ *
197+ * @param flags the {@link Collection} of {@link net.dv8tion.jda.api.entities.User.UserFlag}
198+ * (recommend {@link java.util.EnumSet}
199+ * @return user readable {@link StringBuilder}
200+ */
201+ private static @ NotNull StringBuilder formatHypesquad (
202+ final @ NotNull Collection <User .UserFlag > flags ) {
151203 StringBuilder stringBuilder = new StringBuilder ("**Hypesquad:** " );
152204
153205 if (flags .contains (User .UserFlag .HYPESQUAD_BALANCE )) {
@@ -163,11 +215,18 @@ private static String formatRoles(final @NotNull Member member) {
163215 return stringBuilder ;
164216 }
165217
218+ /**
219+ * Formats the flags into a user readable {@link String}, filters Hypesquad relating flags
220+ *
221+ * @param flags the {@link Collection} of {@link net.dv8tion.jda.api.entities.User.UserFlag}
222+ * (recommend {@link java.util.EnumSet}
223+ * @return the user readable string
224+ */
166225 @ NotNull
167226 private static String formatUserFlags (final @ NotNull Collection <User .UserFlag > flags ) {
168227 return flags .stream ()
169- .map (User .UserFlag ::getName )
170- .filter (name -> (name .contains ("Hypesquad" )))
171- .collect (Collectors .joining (", " ));
228+ .map (User .UserFlag ::getName )
229+ .filter (name -> (name .contains ("Hypesquad" )))
230+ .collect (Collectors .joining (", " ));
172231 }
173- }
232+ }
0 commit comments