2929
3030public class UserJoin extends ListenerAdapter {
3131
32- public byte [] generateImage (Object ev , boolean forceFlag , boolean forceBot ) throws MalformedURLException {
32+ public static final float NAME_SIZE = 120 ;
33+ public static final float MEMBERCOUNT_SIZE = 72 ;
34+ public static final float MAX_STRING_SIZE = 1300 ;
3335
34- Guild guild = null ;
35- Member member = null ;
36-
37- if (ev instanceof GuildMessageReceivedEvent event ) {
38-
39- guild = event .getGuild ();
40- member = event .getMember ();
41- }
42-
43- if (ev instanceof GuildMemberJoinEvent event ) {
44-
45- guild = event .getGuild ();
46- member = event .getMember ();
47- }
48-
49- if (ev instanceof SlashCommandEvent event ) {
50-
51- guild = event .getGuild ();
52- member = event .getMember ();
53- }
36+ public byte [] generateImage (Guild guild , Member member ) throws Exception {
5437
5538 var config = Bot .config .get (guild ).getWelcome ();
39+ var avatarConfig = config .getImageConfig ().getAvatarConfig ();
5640
57- int stringWidth ;
58- int imgW = config .getImageConfig ().getWidth ();
59- int imgH = config .getImageConfig ().getHeight ();
60- int avX = config .getImageConfig ().getAvatarConfig ().getX ();
61- int avY = config .getImageConfig ().getAvatarConfig ().getY ();
62- int avW = config .getImageConfig ().getAvatarConfig ().getWidth ();
63- int avH = config .getImageConfig ().getAvatarConfig ().getHeight ();
41+ URL overlayURL = new URL (config .getImageConfig ().getOverlayImageUrl ());
42+ URL bgURL = new URL (config .getImageConfig ().getBackgroundImageUrl ());
6443
65- int primCol = config . getImageConfig (). getPrimaryColor ( );
66- int secCol = config . getImageConfig (). getSecondaryColor ( );
44+ BufferedImage overlayImage = ImageIO . read ( overlayURL );
45+ BufferedImage bgImage = ImageIO . read ( bgURL );
6746
68- float memberSize = 120 ;
69- float countSize = 72 ;
47+ BufferedImage bufferedImage = new BufferedImage (config .getImageConfig ().getWidth (),
48+ config .getImageConfig ().getHeight (), BufferedImage .TYPE_INT_RGB );
49+ Graphics2D g2d = bufferedImage .createGraphics ();
50+ g2d .setRenderingHint (RenderingHints .KEY_TEXT_ANTIALIASING , RenderingHints .VALUE_TEXT_ANTIALIAS_LCD_HRGB );
51+ g2d .setRenderingHint (RenderingHints .KEY_FRACTIONALMETRICS , RenderingHints .VALUE_FRACTIONALMETRICS_ON );
7052
71- Font CountFont , MemberFont ;
72- URL overlayURL , bgURL , avatarURL ;
73- BufferedImage flagImage = null , botImage = null , avatarImage = null , bgImage = null , overlayImage = null ;
53+ URL avatarURL = new URL ( member . getUser (). getEffectiveAvatarUrl () + "?size=4096" ) ;
54+ BufferedImage avatarImage = ImageIO . read ( avatarURL ) ;
55+ BufferedImage botIcon = ImageIO . read ( Objects . requireNonNull ( UserJoin . class . getClassLoader (). getResourceAsStream ( "images/BotIcon.png" ))) ;
7456
75- try {
76- overlayURL = new URL (config .getImageConfig ().getOverlayImageUrl ());
77- } catch (MalformedURLException e ) {
78- overlayURL = new URL (iae );
79- }
57+ Font memberCountFont , nameFont ;
8058
8159 try {
82- bgURL = new URL (config .getImageConfig ().getBackgroundImageUrl ());
83- } catch (MalformedURLException e ) {
84- bgURL = new URL (iae );
60+ GraphicsEnvironment ge = GraphicsEnvironment .getLocalGraphicsEnvironment ();
61+
62+ nameFont = Font .createFont (Font .TRUETYPE_FONT , Objects .requireNonNull (UserJoin .class .getClassLoader ()
63+ .getResourceAsStream ("fonts/Uni-Sans-Heavy.ttf" ))).deriveFont (NAME_SIZE );
64+ memberCountFont = Font .createFont (Font .TRUETYPE_FONT , Objects .requireNonNull (UserJoin .class .getClassLoader ()
65+ .getResourceAsStream ("fonts/Uni-Sans-Heavy.ttf" ))).deriveFont (MEMBERCOUNT_SIZE );
66+
67+ ge .registerFont (nameFont );
68+ ge .registerFont (memberCountFont );
69+ } catch (IOException | FontFormatException e ) {
70+ nameFont = new Font ("Arial" , Font .PLAIN , (int ) NAME_SIZE );
71+ memberCountFont = new Font ("Arial" , Font .PLAIN , (int ) MEMBERCOUNT_SIZE );
8572 }
8673
87- try {
88- overlayImage = ImageIO .read (overlayURL );
89- } catch (IOException e ) { e .printStackTrace ();}
90-
74+ g2d .drawImage (bgImage , 0 , 0 , null );
75+ g2d .drawImage (avatarImage , avatarConfig .getX (), avatarConfig .getY (), avatarConfig .getWidth (), avatarConfig .getHeight (), null );
76+ g2d .drawImage (overlayImage , 0 , 0 , null );
9177
92- try {
93- bgImage = ImageIO .read (bgURL );
94- } catch (IOException e ) { e .printStackTrace ();}
78+ g2d .setColor (new Color (config .getImageConfig ().getPrimaryColor ()));
79+ g2d .setFont (nameFont );
9580
96- BufferedImage bufferedImage = new BufferedImage (imgW , imgH , BufferedImage .TYPE_INT_RGB );
97- Graphics2D g2d = bufferedImage .createGraphics ();
98- g2d .setRenderingHint (RenderingHints .KEY_TEXT_ANTIALIASING , RenderingHints .VALUE_TEXT_ANTIALIAS_LCD_HRGB );
99- g2d .setRenderingHint (RenderingHints .KEY_FRACTIONALMETRICS , RenderingHints .VALUE_FRACTIONALMETRICS_ON );
100-
101- try {
102-
103- avatarURL = new URL (member .getUser ().getEffectiveAvatarUrl () + "?size=4096" );
104- avatarImage = ImageIO .read (avatarURL );
105- botImage = ImageIO .read (UserJoin .class .getClassLoader ().getResourceAsStream ("images/BotIcon.png" ));
106- flagImage = ImageIO .read (UserJoin .class .getClassLoader ().getResourceAsStream ("images/FlagIcon.png" ));
107-
108- } catch (IOException e ) { e .printStackTrace (); }
109-
110- try {
111- MemberFont = Font .createFont (Font .TRUETYPE_FONT , UserJoin .class .getClassLoader ().getResourceAsStream ("fonts/Uni-Sans-Heavy.ttf" )).deriveFont (memberSize );
112- GraphicsEnvironment ge = GraphicsEnvironment .getLocalGraphicsEnvironment ();
113-
114- ge .registerFont (MemberFont );
115- } catch (IOException | FontFormatException e ) {
116- MemberFont = new Font ("Arial" , Font .PLAIN , 120 );
117- }
118-
119- try {
120- CountFont = Font .createFont (Font .TRUETYPE_FONT , UserJoin .class .getClassLoader ().getResourceAsStream ("fonts/Uni-Sans-Heavy.ttf" )).deriveFont (countSize );
121- GraphicsEnvironment ge = GraphicsEnvironment .getLocalGraphicsEnvironment ();
122-
123- ge .registerFont (CountFont );
124- } catch (IOException | FontFormatException e ) {
125- CountFont = new Font ("Arial" , Font .PLAIN , 120 );
126- }
127-
128- g2d .drawImage (bgImage , 0 , 0 , null );
129- g2d .drawImage (avatarImage , avX , avY , avW , avH , null );
130- g2d .drawImage (overlayImage , 0 , 0 , null );
131-
132- g2d .setColor (new Color (primCol ));
133- g2d .setFont (MemberFont );
81+ int stringWidth = g2d .getFontMetrics ().stringWidth (member .getUser ().getAsTag ());
13482
83+ while (stringWidth > MAX_STRING_SIZE ) {
84+ Font currentFont = g2d .getFont ();
85+ Font newFont = currentFont .deriveFont (currentFont .getSize () - 1F );
86+ g2d .setFont (newFont );
13587 stringWidth = g2d .getFontMetrics ().stringWidth (member .getUser ().getAsTag ());
88+ }
13689
137- while (stringWidth > 1300 ) {
138-
139- Font currentFont = g2d .getFont ();
140- Font newFont = currentFont .deriveFont (currentFont .getSize () - 1F );
141- g2d .setFont (newFont );
142- stringWidth = g2d .getFontMetrics ().stringWidth (member .getUser ().getAsTag ());
143- }
144-
145- g2d .drawString (member .getUser ().getAsTag (), 550 , 305 );
146-
147- g2d .setColor (new Color (secCol ));
148- g2d .setFont (CountFont );
149- g2d .drawString ("Member #" + guild .getMemberCount (), 550 , 380 );
150-
151- if (member .getUser ().isBot () || forceBot ) {
152- g2d .drawImage (botImage , 340 , 400 , null );
153- }
154-
155- if (member .getUser ().getTimeCreated ().isAfter (OffsetDateTime .now ().minusDays (7 )) || forceFlag ) {
156- g2d .drawImage (flagImage , 340 , 350 , null );
157- }
158-
159- g2d .dispose ();
160-
161- ByteArrayOutputStream outputStream = new ByteArrayOutputStream ();
90+ g2d .drawString (member .getUser ().getAsTag (), 550 , 305 );
16291
163- try {
164- ImageIO . write ( bufferedImage , "png" , outputStream );
165- } catch ( IOException e ) { e . printStackTrace (); }
92+ g2d . setColor ( new Color ( config . getImageConfig (). getSecondaryColor ()));
93+ g2d . setFont ( memberCountFont );
94+ g2d . drawString ( "Member #" + guild . getMemberCount (), 550 , 380 );
16695
167- return outputStream .toByteArray ();
96+ if (member .getUser ().isBot ()) {
97+ g2d .drawImage (botIcon , 340 , 400 , null );
16898 }
99+ g2d .dispose ();
100+ ByteArrayOutputStream outputStream = new ByteArrayOutputStream ();
101+
102+ try { ImageIO .write (bufferedImage , "png" , outputStream );
103+ } catch (IOException e ) { e .printStackTrace (); }
104+ return outputStream .toByteArray ();
105+ }
169106
170107 @ Override
171108 public void onGuildMemberJoin (GuildMemberJoinEvent event ) {
@@ -176,74 +113,29 @@ public void onGuildMemberJoin(GuildMemberJoinEvent event) {
176113 TextChannel welcomeChannel = event .getGuild ().getTextChannelById (welcomeConfig .getChannelId ());
177114
178115 if (!ServerLock .lockStatus (event )) {
179-
180116 ServerLock .checkLock (event , user );
181-
182117 CompletableFuture .runAsync (() -> {
183118
184- try {
185-
186- if (welcomeConfig .isEnabled ()) {
187- String welcomeMessage = Objects .requireNonNull (welcomeConfig .getJoinMessageTemplate ())
188- .replace ("{!member}" , event .getMember ().getAsMention ())
189- .replace ("{!membertag}" , event .getMember ().getUser ().getAsTag ())
190- .replace ("{!server}" , event .getGuild ().getName ());
191-
192- welcomeConfig .getChannel ().sendMessage (welcomeMessage )
193- .addFile (new ByteArrayInputStream (generateImage (event , false , false )), event .getMember ().getId () + ".png" ).queue ();
194- }
195-
196- StatsCategory .update (event .getGuild ());
119+ if (welcomeConfig .isEnabled ()) {
120+ String welcomeMessage = Objects .requireNonNull (welcomeConfig .getJoinMessageTemplate ())
121+ .replace ("{!member}" , event .getMember ().getAsMention ())
122+ .replace ("{!membertag}" , event .getMember ().getUser ().getAsTag ())
123+ .replace ("{!server}" , event .getGuild ().getName ());
197124
198- } catch (Exception e ) { e .printStackTrace (); }
125+ try {
126+ welcomeConfig .getChannel ().sendMessage (welcomeMessage )
127+ .addFile (new ByteArrayInputStream (generateImage (event .getGuild (), event .getMember ())), event .getMember ().getId () + ".png" ).queue ();
128+ } catch (Exception e ) { e .printStackTrace (); }
129+ }
130+ StatsCategory .update (event .getGuild ());
199131 });
200-
201-
202132 } else {
203-
204- user . openPrivateChannel (). complete (). sendMessage (ServerLock .lockEmbed (event .getGuild ())).queue ();
133+ if ( user . hasPrivateChannel ()) user . openPrivateChannel (). complete ()
134+ . sendMessageEmbeds (ServerLock .lockEmbed (event .getGuild ())).queue ();
205135 event .getMember ().kick ().complete ();
206136
207137 String diff = new TimeUtils ().formatDurationToNow (event .getMember ().getTimeCreated ());
208138 welcomeChannel .sendMessage ("**" + event .getMember ().getUser ().getAsTag () + "**" + " (" + diff + " old) tried to join this server." ).queue ();
209-
210- }
211- }
212-
213- @ Override
214- public void onGuildMessageReceived (GuildMessageReceivedEvent event ) {
215- try { if (event .getMember ().getUser ().isBot () || event .getMember () == null ) return ; }
216- catch (NullPointerException ignored ) { return ; }
217-
218- String [] args = event .getMessage ().getContentDisplay ().split (" " );
219-
220- if (args [0 ].equalsIgnoreCase ("!generateImage" ) && event .getMember ().getId ().equals ("810481402390118400" )) {
221-
222- boolean imgFlag = false ;
223- boolean imgBot = false ;
224-
225- if (args .length > 1 ) {
226- switch (args [1 ]) {
227- case "imgBot" :
228- imgBot = true ;
229- break ;
230- case "imgFlag" :
231- imgFlag = true ;
232- break ;
233- default :
234- }
235- }
236-
237- boolean finalImgFlag = imgFlag ;
238- boolean finalImgBot = imgBot ;
239-
240- CompletableFuture .runAsync (() -> {
241-
242- try {
243- event .getChannel ().sendFile (new ByteArrayInputStream (generateImage (event , finalImgFlag , finalImgBot )), event .getMember ().getId () + ".png" ).queue ();
244- }
245- catch (MalformedURLException e ) { e .printStackTrace (); }
246- });
247139 }
248140 }
249141}
0 commit comments