From 5c0031205126d71cf993e1401693a9cba04483c9 Mon Sep 17 00:00:00 2001 From: Reason <28310208+Reasonlesss@users.noreply.github.com> Date: Tue, 16 Apr 2024 14:02:45 +0100 Subject: [PATCH 01/11] Add VIP role logic --- .gitignore | 1 - .../java/com/diamondfire/helpbot/HelpBot.java | 4 - .../helpbot/sys/tasks/TaskRegistry.java | 3 +- .../helpbot/sys/tasks/impl/VIPStarTask.java | 128 ++++++++++++++++++ .../diamondfire/helpbot/util/StarUtil.java | 40 ++++++ src/main/resources/star.png | Bin 0 -> 652 bytes 6 files changed, 170 insertions(+), 6 deletions(-) create mode 100644 src/main/java/com/diamondfire/helpbot/sys/tasks/impl/VIPStarTask.java create mode 100644 src/main/java/com/diamondfire/helpbot/util/StarUtil.java create mode 100644 src/main/resources/star.png diff --git a/.gitignore b/.gitignore index 1d24e1fe..d20abb20 100644 --- a/.gitignore +++ b/.gitignore @@ -5,5 +5,4 @@ build /src/main/resources/swear_filter.json *.json -*.png *.txt diff --git a/src/main/java/com/diamondfire/helpbot/HelpBot.java b/src/main/java/com/diamondfire/helpbot/HelpBot.java index bd820c9e..02b6daa8 100644 --- a/src/main/java/com/diamondfire/helpbot/HelpBot.java +++ b/src/main/java/com/diamondfire/helpbot/HelpBot.java @@ -1,13 +1,9 @@ package com.diamondfire.helpbot; - import com.diamondfire.helpbot.bot.HelpBotInstance; import com.diamondfire.helpbot.df.codeinfo.codedatabase.changelog.CodeDifferenceHandler; import com.diamondfire.helpbot.df.codeinfo.codedatabase.db.CodeDatabase; -import com.diamondfire.helpbot.sys.tag.TagHandler; - import javax.security.auth.login.LoginException; -import java.io.IOException; public class HelpBot { diff --git a/src/main/java/com/diamondfire/helpbot/sys/tasks/TaskRegistry.java b/src/main/java/com/diamondfire/helpbot/sys/tasks/TaskRegistry.java index ed290d18..c0488c1e 100644 --- a/src/main/java/com/diamondfire/helpbot/sys/tasks/TaskRegistry.java +++ b/src/main/java/com/diamondfire/helpbot/sys/tasks/TaskRegistry.java @@ -17,7 +17,8 @@ public void initialize() { new GraphChannelTask(), //new RefreshCreditsTask(), new SupporterClassTask(), - new NameUpdateTask() + new NameUpdateTask(), + new VIPStarTask() ); SupportUnexcuseTask.prepare(); diff --git a/src/main/java/com/diamondfire/helpbot/sys/tasks/impl/VIPStarTask.java b/src/main/java/com/diamondfire/helpbot/sys/tasks/impl/VIPStarTask.java new file mode 100644 index 00000000..33053856 --- /dev/null +++ b/src/main/java/com/diamondfire/helpbot/sys/tasks/impl/VIPStarTask.java @@ -0,0 +1,128 @@ +package com.diamondfire.helpbot.sys.tasks.impl; + +import com.diamondfire.helpbot.bot.HelpBotInstance; +import com.diamondfire.helpbot.sys.database.impl.DatabaseQuery; +import com.diamondfire.helpbot.sys.database.impl.queries.BasicQuery; +import com.diamondfire.helpbot.sys.tasks.LoopingTask; +import com.diamondfire.helpbot.util.StarUtil; +import net.dv8tion.jda.api.entities.*; + +import javax.imageio.ImageIO; +import java.awt.*; +import java.io.*; +import java.sql.*; +import java.util.*; +import java.util.List; +import java.util.concurrent.TimeUnit; + +public class VIPStarTask implements LoopingTask { + + // todo: add this + private static final long VIP_PASS_HOLDER_ROLE = 0L; + + @Override + public long getInitialStart() { + return 0; + } + + @Override + public long getNextLoop() { + return TimeUnit.MINUTES.toMillis(30L); + } + + @Override + public void run() { + Guild guild = HelpBotInstance.getJda().getGuildById(HelpBotInstance.DF_GUILD); + + if (guild == null) { + return; + } + + Role generalRole = guild.getRoleById(VIP_PASS_HOLDER_ROLE); + + if (generalRole == null) { + return; + } + + // Load members and create the color -> role map. + final Map roles = new HashMap<>(); + List members = guild.loadMembers().get(); + + + // Load roles from the database + new DatabaseQuery() + .query(new BasicQuery("SELECT * FROM owen.vip_roles")) + .compile() + .run(result -> { + ResultSet set = result.getResult(); + while (set.next()) { + roles.put(set.getInt("color"), guild.getRoleById(set.getLong("role_id"))); + } + }); + + + Set vips = new HashSet<>(); + new DatabaseQuery() + .query(new BasicQuery("SELECT linked_accounts.discord_id FROM linked_accounts, hypercube.ranks " + + "WHERE linked_accounts.player_uuid = ranks.uuid AND ranks.vip = 1")) + .compile() + .run(result -> { + ResultSet set = result.getResult(); + while (set.next()) { + vips.add(set.getLong("discord_id")); + } + }); + + for (Member member : members) { + Role role = roles.get(member.getColorRaw()); + if (role == null) { + try { + // Create the role and add it to the roles map. + role = createRole(guild, member.getColor(), member.getColorRaw()); + roles.put(member.getColorRaw(), role); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + // If the vips returned by the db contains the member add the role. + if (vips.contains(member.getIdLong())) { + if (!member.getRoles().contains(role)) { + guild.addRoleToMember(member, role).queue(); + } + if (!member.getRoles().contains(generalRole)) { + guild.addRoleToMember(member, generalRole).queue(); + } + } else { + // If the user has the roles, remove them. + if (member.getRoles().contains(role)) { + guild.removeRoleFromMember(member, role).queue(); + } + if (member.getRoles().contains(generalRole)) { + guild.removeRoleFromMember(member, generalRole).queue(); + } + } + } + } + + /** + * Creates a colored star role and adds it to the database. + */ + private Role createRole(Guild guild, Color color, int colorRaw) throws IOException { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + ImageIO.write(StarUtil.create(color), "png", baos); + baos.flush(); + Role role = guild.createRole() + .setName(" ") + .setIcon(Icon.from(baos.toByteArray())) + .complete(); + new DatabaseQuery() + .query(new BasicQuery("INSERT INTO owen.vip_roles (color, role_id) VALUES (?, ?)", statement -> { + statement.setInt(1, colorRaw); + statement.setLong(2, role.getIdLong()); + })) + .compile() + .run(ignored -> {}); + return role; + } + +} diff --git a/src/main/java/com/diamondfire/helpbot/util/StarUtil.java b/src/main/java/com/diamondfire/helpbot/util/StarUtil.java new file mode 100644 index 00000000..bfea79f5 --- /dev/null +++ b/src/main/java/com/diamondfire/helpbot/util/StarUtil.java @@ -0,0 +1,40 @@ +package com.diamondfire.helpbot.util; + +import javax.imageio.ImageIO; +import java.awt.*; +import java.awt.image.BufferedImage; +import java.io.*; + +/** + * Creates a coloured star to be used as a role icon. + */ +public class StarUtil { + + private static final BufferedImage STAR; + private static final int SIZE = 32; + + static { + // Load the star from the resources. + InputStream inputStream = StarUtil.class.getResourceAsStream("/star.png"); + + try { + assert inputStream != null; + STAR = ImageIO.read(inputStream); + }catch (IOException e) { + throw new RuntimeException(e); + } + } + + public static BufferedImage create(Color color) { + BufferedImage bufferedImage = new BufferedImage(SIZE, SIZE, BufferedImage.TYPE_INT_ARGB); + Graphics2D g2d = bufferedImage.createGraphics(); + + g2d.drawImage(STAR, 0, 0, null); + g2d.setComposite(AlphaComposite.SrcAtop); + g2d.setColor(color); + g2d.fillRect(0, 0, 32, 32); + g2d.dispose(); + return bufferedImage; + } + +} diff --git a/src/main/resources/star.png b/src/main/resources/star.png new file mode 100644 index 0000000000000000000000000000000000000000..668f3af6416b30851c294b59550bdb9783e10340 GIT binary patch literal 652 zcmV;70(1R|P)EX>4Tx04R}tkv&MmKpe$i(@LdO6zm`(lA$_?1yK=4twIqhgj%6h2a`)bgeDD1 zi;JV+T5#}VvFhOBtgC~oAP9bdI6F8gx=4xtOA0MwJUH&hyL*qjcYshYG0h5$0h(Sh zQ;E2k$*zdOR|L?55C$~S<%#pCyAq~rc=I< zaarZO#aSy=S@WL!h2fmOyu@{y14v*2i;y5fK@}S)p@JB#Iw=-Xv>*5I_d9-xTnf21 zz{oL=GBn7JAN&t~cWdP*#@(cF9O!tl?T;ZKxC=CDw*7r<+l>>z{|sE|Eq}QVOn;JI zYiZFVpnDs*xNd369&ot>^gS7}DLay%rjXAA?`QN)S)lh82(7xkHTQA)0Hmp_y{D4^000SaNLh0L z04^f{04^f|c%?sf00007bV*G`2j~P43N-@K^5k3q000?uMObu0Z*6U5Zgc=ca%Ew3 zWn>_CX>@2HM@dakSAh-}0001ENklOAY`K3`AAj|H`$oArb$mcwN&@yy=8< zzn9EjR8`FyiA?qKw_gAO2ta_;_WJnXlp7$h Date: Tue, 16 Apr 2024 14:23:23 +0100 Subject: [PATCH 02/11] Formatting --- src/main/java/com/diamondfire/helpbot/HelpBot.java | 13 +++++++++++++ .../helpbot/sys/tasks/impl/VIPStarTask.java | 4 +++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/diamondfire/helpbot/HelpBot.java b/src/main/java/com/diamondfire/helpbot/HelpBot.java index 02b6daa8..e16235cc 100644 --- a/src/main/java/com/diamondfire/helpbot/HelpBot.java +++ b/src/main/java/com/diamondfire/helpbot/HelpBot.java @@ -3,11 +3,24 @@ import com.diamondfire.helpbot.bot.HelpBotInstance; import com.diamondfire.helpbot.df.codeinfo.codedatabase.changelog.CodeDifferenceHandler; import com.diamondfire.helpbot.df.codeinfo.codedatabase.db.CodeDatabase; +import com.diamondfire.helpbot.util.StarUtil; + +import javax.imageio.ImageIO; import javax.security.auth.login.LoginException; +import java.awt.*; +import java.io.*; public class HelpBot { public static void main(String[] args) throws LoginException { + try { + File file = new File("test/test.png"); + file.mkdirs(); + ImageIO.write(StarUtil.create(Color.CYAN), "png", new File("test/test.png")); + } catch (IOException e) { + throw new RuntimeException(e); + } + if (true) return; CodeDatabase.initialize(); HelpBotInstance.initialize(); CodeDifferenceHandler.refresh(); diff --git a/src/main/java/com/diamondfire/helpbot/sys/tasks/impl/VIPStarTask.java b/src/main/java/com/diamondfire/helpbot/sys/tasks/impl/VIPStarTask.java index 33053856..07dd2a6e 100644 --- a/src/main/java/com/diamondfire/helpbot/sys/tasks/impl/VIPStarTask.java +++ b/src/main/java/com/diamondfire/helpbot/sys/tasks/impl/VIPStarTask.java @@ -114,6 +114,7 @@ private Role createRole(Guild guild, Color color, int colorRaw) throws IOExcepti Role role = guild.createRole() .setName(" ") .setIcon(Icon.from(baos.toByteArray())) + .setPermissions(0L) .complete(); new DatabaseQuery() .query(new BasicQuery("INSERT INTO owen.vip_roles (color, role_id) VALUES (?, ?)", statement -> { @@ -121,7 +122,8 @@ private Role createRole(Guild guild, Color color, int colorRaw) throws IOExcepti statement.setLong(2, role.getIdLong()); })) .compile() - .run(ignored -> {}); + .run(ignored -> { + }); return role; } From ed568796828d848714647f62408190b6b53a36b9 Mon Sep 17 00:00:00 2001 From: Reason <28310208+Reasonlesss@users.noreply.github.com> Date: Tue, 16 Apr 2024 14:25:21 +0100 Subject: [PATCH 03/11] Remove testing code --- src/main/java/com/diamondfire/helpbot/HelpBot.java | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/src/main/java/com/diamondfire/helpbot/HelpBot.java b/src/main/java/com/diamondfire/helpbot/HelpBot.java index e16235cc..95b064b0 100644 --- a/src/main/java/com/diamondfire/helpbot/HelpBot.java +++ b/src/main/java/com/diamondfire/helpbot/HelpBot.java @@ -3,24 +3,12 @@ import com.diamondfire.helpbot.bot.HelpBotInstance; import com.diamondfire.helpbot.df.codeinfo.codedatabase.changelog.CodeDifferenceHandler; import com.diamondfire.helpbot.df.codeinfo.codedatabase.db.CodeDatabase; -import com.diamondfire.helpbot.util.StarUtil; -import javax.imageio.ImageIO; import javax.security.auth.login.LoginException; -import java.awt.*; -import java.io.*; public class HelpBot { public static void main(String[] args) throws LoginException { - try { - File file = new File("test/test.png"); - file.mkdirs(); - ImageIO.write(StarUtil.create(Color.CYAN), "png", new File("test/test.png")); - } catch (IOException e) { - throw new RuntimeException(e); - } - if (true) return; CodeDatabase.initialize(); HelpBotInstance.initialize(); CodeDifferenceHandler.refresh(); From 6882a3692bb33a360958848b6b09e091d247e302 Mon Sep 17 00:00:00 2001 From: Reason <28310208+Reasonlesss@users.noreply.github.com> Date: Tue, 16 Apr 2024 14:02:45 +0100 Subject: [PATCH 04/11] Add VIP role logic --- .gitignore | 1 - .../java/com/diamondfire/helpbot/HelpBot.java | 4 - .../helpbot/sys/tasks/TaskRegistry.java | 3 +- .../helpbot/sys/tasks/impl/VIPStarTask.java | 128 ++++++++++++++++++ .../diamondfire/helpbot/util/StarUtil.java | 40 ++++++ src/main/resources/star.png | Bin 0 -> 652 bytes 6 files changed, 170 insertions(+), 6 deletions(-) create mode 100644 src/main/java/com/diamondfire/helpbot/sys/tasks/impl/VIPStarTask.java create mode 100644 src/main/java/com/diamondfire/helpbot/util/StarUtil.java create mode 100644 src/main/resources/star.png diff --git a/.gitignore b/.gitignore index 1d24e1fe..d20abb20 100644 --- a/.gitignore +++ b/.gitignore @@ -5,5 +5,4 @@ build /src/main/resources/swear_filter.json *.json -*.png *.txt diff --git a/src/main/java/com/diamondfire/helpbot/HelpBot.java b/src/main/java/com/diamondfire/helpbot/HelpBot.java index bd820c9e..02b6daa8 100644 --- a/src/main/java/com/diamondfire/helpbot/HelpBot.java +++ b/src/main/java/com/diamondfire/helpbot/HelpBot.java @@ -1,13 +1,9 @@ package com.diamondfire.helpbot; - import com.diamondfire.helpbot.bot.HelpBotInstance; import com.diamondfire.helpbot.df.codeinfo.codedatabase.changelog.CodeDifferenceHandler; import com.diamondfire.helpbot.df.codeinfo.codedatabase.db.CodeDatabase; -import com.diamondfire.helpbot.sys.tag.TagHandler; - import javax.security.auth.login.LoginException; -import java.io.IOException; public class HelpBot { diff --git a/src/main/java/com/diamondfire/helpbot/sys/tasks/TaskRegistry.java b/src/main/java/com/diamondfire/helpbot/sys/tasks/TaskRegistry.java index ed290d18..c0488c1e 100644 --- a/src/main/java/com/diamondfire/helpbot/sys/tasks/TaskRegistry.java +++ b/src/main/java/com/diamondfire/helpbot/sys/tasks/TaskRegistry.java @@ -17,7 +17,8 @@ public void initialize() { new GraphChannelTask(), //new RefreshCreditsTask(), new SupporterClassTask(), - new NameUpdateTask() + new NameUpdateTask(), + new VIPStarTask() ); SupportUnexcuseTask.prepare(); diff --git a/src/main/java/com/diamondfire/helpbot/sys/tasks/impl/VIPStarTask.java b/src/main/java/com/diamondfire/helpbot/sys/tasks/impl/VIPStarTask.java new file mode 100644 index 00000000..33053856 --- /dev/null +++ b/src/main/java/com/diamondfire/helpbot/sys/tasks/impl/VIPStarTask.java @@ -0,0 +1,128 @@ +package com.diamondfire.helpbot.sys.tasks.impl; + +import com.diamondfire.helpbot.bot.HelpBotInstance; +import com.diamondfire.helpbot.sys.database.impl.DatabaseQuery; +import com.diamondfire.helpbot.sys.database.impl.queries.BasicQuery; +import com.diamondfire.helpbot.sys.tasks.LoopingTask; +import com.diamondfire.helpbot.util.StarUtil; +import net.dv8tion.jda.api.entities.*; + +import javax.imageio.ImageIO; +import java.awt.*; +import java.io.*; +import java.sql.*; +import java.util.*; +import java.util.List; +import java.util.concurrent.TimeUnit; + +public class VIPStarTask implements LoopingTask { + + // todo: add this + private static final long VIP_PASS_HOLDER_ROLE = 0L; + + @Override + public long getInitialStart() { + return 0; + } + + @Override + public long getNextLoop() { + return TimeUnit.MINUTES.toMillis(30L); + } + + @Override + public void run() { + Guild guild = HelpBotInstance.getJda().getGuildById(HelpBotInstance.DF_GUILD); + + if (guild == null) { + return; + } + + Role generalRole = guild.getRoleById(VIP_PASS_HOLDER_ROLE); + + if (generalRole == null) { + return; + } + + // Load members and create the color -> role map. + final Map roles = new HashMap<>(); + List members = guild.loadMembers().get(); + + + // Load roles from the database + new DatabaseQuery() + .query(new BasicQuery("SELECT * FROM owen.vip_roles")) + .compile() + .run(result -> { + ResultSet set = result.getResult(); + while (set.next()) { + roles.put(set.getInt("color"), guild.getRoleById(set.getLong("role_id"))); + } + }); + + + Set vips = new HashSet<>(); + new DatabaseQuery() + .query(new BasicQuery("SELECT linked_accounts.discord_id FROM linked_accounts, hypercube.ranks " + + "WHERE linked_accounts.player_uuid = ranks.uuid AND ranks.vip = 1")) + .compile() + .run(result -> { + ResultSet set = result.getResult(); + while (set.next()) { + vips.add(set.getLong("discord_id")); + } + }); + + for (Member member : members) { + Role role = roles.get(member.getColorRaw()); + if (role == null) { + try { + // Create the role and add it to the roles map. + role = createRole(guild, member.getColor(), member.getColorRaw()); + roles.put(member.getColorRaw(), role); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + // If the vips returned by the db contains the member add the role. + if (vips.contains(member.getIdLong())) { + if (!member.getRoles().contains(role)) { + guild.addRoleToMember(member, role).queue(); + } + if (!member.getRoles().contains(generalRole)) { + guild.addRoleToMember(member, generalRole).queue(); + } + } else { + // If the user has the roles, remove them. + if (member.getRoles().contains(role)) { + guild.removeRoleFromMember(member, role).queue(); + } + if (member.getRoles().contains(generalRole)) { + guild.removeRoleFromMember(member, generalRole).queue(); + } + } + } + } + + /** + * Creates a colored star role and adds it to the database. + */ + private Role createRole(Guild guild, Color color, int colorRaw) throws IOException { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + ImageIO.write(StarUtil.create(color), "png", baos); + baos.flush(); + Role role = guild.createRole() + .setName(" ") + .setIcon(Icon.from(baos.toByteArray())) + .complete(); + new DatabaseQuery() + .query(new BasicQuery("INSERT INTO owen.vip_roles (color, role_id) VALUES (?, ?)", statement -> { + statement.setInt(1, colorRaw); + statement.setLong(2, role.getIdLong()); + })) + .compile() + .run(ignored -> {}); + return role; + } + +} diff --git a/src/main/java/com/diamondfire/helpbot/util/StarUtil.java b/src/main/java/com/diamondfire/helpbot/util/StarUtil.java new file mode 100644 index 00000000..bfea79f5 --- /dev/null +++ b/src/main/java/com/diamondfire/helpbot/util/StarUtil.java @@ -0,0 +1,40 @@ +package com.diamondfire.helpbot.util; + +import javax.imageio.ImageIO; +import java.awt.*; +import java.awt.image.BufferedImage; +import java.io.*; + +/** + * Creates a coloured star to be used as a role icon. + */ +public class StarUtil { + + private static final BufferedImage STAR; + private static final int SIZE = 32; + + static { + // Load the star from the resources. + InputStream inputStream = StarUtil.class.getResourceAsStream("/star.png"); + + try { + assert inputStream != null; + STAR = ImageIO.read(inputStream); + }catch (IOException e) { + throw new RuntimeException(e); + } + } + + public static BufferedImage create(Color color) { + BufferedImage bufferedImage = new BufferedImage(SIZE, SIZE, BufferedImage.TYPE_INT_ARGB); + Graphics2D g2d = bufferedImage.createGraphics(); + + g2d.drawImage(STAR, 0, 0, null); + g2d.setComposite(AlphaComposite.SrcAtop); + g2d.setColor(color); + g2d.fillRect(0, 0, 32, 32); + g2d.dispose(); + return bufferedImage; + } + +} diff --git a/src/main/resources/star.png b/src/main/resources/star.png new file mode 100644 index 0000000000000000000000000000000000000000..668f3af6416b30851c294b59550bdb9783e10340 GIT binary patch literal 652 zcmV;70(1R|P)EX>4Tx04R}tkv&MmKpe$i(@LdO6zm`(lA$_?1yK=4twIqhgj%6h2a`)bgeDD1 zi;JV+T5#}VvFhOBtgC~oAP9bdI6F8gx=4xtOA0MwJUH&hyL*qjcYshYG0h5$0h(Sh zQ;E2k$*zdOR|L?55C$~S<%#pCyAq~rc=I< zaarZO#aSy=S@WL!h2fmOyu@{y14v*2i;y5fK@}S)p@JB#Iw=-Xv>*5I_d9-xTnf21 zz{oL=GBn7JAN&t~cWdP*#@(cF9O!tl?T;ZKxC=CDw*7r<+l>>z{|sE|Eq}QVOn;JI zYiZFVpnDs*xNd369&ot>^gS7}DLay%rjXAA?`QN)S)lh82(7xkHTQA)0Hmp_y{D4^000SaNLh0L z04^f{04^f|c%?sf00007bV*G`2j~P43N-@K^5k3q000?uMObu0Z*6U5Zgc=ca%Ew3 zWn>_CX>@2HM@dakSAh-}0001ENklOAY`K3`AAj|H`$oArb$mcwN&@yy=8< zzn9EjR8`FyiA?qKw_gAO2ta_;_WJnXlp7$h Date: Tue, 16 Apr 2024 14:23:23 +0100 Subject: [PATCH 05/11] Formatting --- src/main/java/com/diamondfire/helpbot/HelpBot.java | 13 +++++++++++++ .../helpbot/sys/tasks/impl/VIPStarTask.java | 4 +++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/diamondfire/helpbot/HelpBot.java b/src/main/java/com/diamondfire/helpbot/HelpBot.java index 02b6daa8..e16235cc 100644 --- a/src/main/java/com/diamondfire/helpbot/HelpBot.java +++ b/src/main/java/com/diamondfire/helpbot/HelpBot.java @@ -3,11 +3,24 @@ import com.diamondfire.helpbot.bot.HelpBotInstance; import com.diamondfire.helpbot.df.codeinfo.codedatabase.changelog.CodeDifferenceHandler; import com.diamondfire.helpbot.df.codeinfo.codedatabase.db.CodeDatabase; +import com.diamondfire.helpbot.util.StarUtil; + +import javax.imageio.ImageIO; import javax.security.auth.login.LoginException; +import java.awt.*; +import java.io.*; public class HelpBot { public static void main(String[] args) throws LoginException { + try { + File file = new File("test/test.png"); + file.mkdirs(); + ImageIO.write(StarUtil.create(Color.CYAN), "png", new File("test/test.png")); + } catch (IOException e) { + throw new RuntimeException(e); + } + if (true) return; CodeDatabase.initialize(); HelpBotInstance.initialize(); CodeDifferenceHandler.refresh(); diff --git a/src/main/java/com/diamondfire/helpbot/sys/tasks/impl/VIPStarTask.java b/src/main/java/com/diamondfire/helpbot/sys/tasks/impl/VIPStarTask.java index 33053856..07dd2a6e 100644 --- a/src/main/java/com/diamondfire/helpbot/sys/tasks/impl/VIPStarTask.java +++ b/src/main/java/com/diamondfire/helpbot/sys/tasks/impl/VIPStarTask.java @@ -114,6 +114,7 @@ private Role createRole(Guild guild, Color color, int colorRaw) throws IOExcepti Role role = guild.createRole() .setName(" ") .setIcon(Icon.from(baos.toByteArray())) + .setPermissions(0L) .complete(); new DatabaseQuery() .query(new BasicQuery("INSERT INTO owen.vip_roles (color, role_id) VALUES (?, ?)", statement -> { @@ -121,7 +122,8 @@ private Role createRole(Guild guild, Color color, int colorRaw) throws IOExcepti statement.setLong(2, role.getIdLong()); })) .compile() - .run(ignored -> {}); + .run(ignored -> { + }); return role; } From 552433b4ab2e90a217ad9e2f0e3b82773dec5b88 Mon Sep 17 00:00:00 2001 From: Reason <28310208+Reasonlesss@users.noreply.github.com> Date: Tue, 16 Apr 2024 14:25:21 +0100 Subject: [PATCH 06/11] Remove testing code --- src/main/java/com/diamondfire/helpbot/HelpBot.java | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/src/main/java/com/diamondfire/helpbot/HelpBot.java b/src/main/java/com/diamondfire/helpbot/HelpBot.java index e16235cc..95b064b0 100644 --- a/src/main/java/com/diamondfire/helpbot/HelpBot.java +++ b/src/main/java/com/diamondfire/helpbot/HelpBot.java @@ -3,24 +3,12 @@ import com.diamondfire.helpbot.bot.HelpBotInstance; import com.diamondfire.helpbot.df.codeinfo.codedatabase.changelog.CodeDifferenceHandler; import com.diamondfire.helpbot.df.codeinfo.codedatabase.db.CodeDatabase; -import com.diamondfire.helpbot.util.StarUtil; -import javax.imageio.ImageIO; import javax.security.auth.login.LoginException; -import java.awt.*; -import java.io.*; public class HelpBot { public static void main(String[] args) throws LoginException { - try { - File file = new File("test/test.png"); - file.mkdirs(); - ImageIO.write(StarUtil.create(Color.CYAN), "png", new File("test/test.png")); - } catch (IOException e) { - throw new RuntimeException(e); - } - if (true) return; CodeDatabase.initialize(); HelpBotInstance.initialize(); CodeDifferenceHandler.refresh(); From d6df4b2e946900ccd256fd4de7e93bb27f7c2f45 Mon Sep 17 00:00:00 2001 From: Reason <28310208+Reasonlesss@users.noreply.github.com> Date: Tue, 16 Apr 2024 21:43:42 +0100 Subject: [PATCH 07/11] Owen's requested changes --- .../sys/externalfile/ExternalFiles.java | 6 + .../helpbot/sys/tasks/impl/VIPStarTask.java | 109 ++++------------- .../helpbot/sys/vip/VIPRoleHandler.java | 110 ++++++++++++++++++ 3 files changed, 137 insertions(+), 88 deletions(-) create mode 100644 src/main/java/com/diamondfire/helpbot/sys/vip/VIPRoleHandler.java diff --git a/src/main/java/com/diamondfire/helpbot/sys/externalfile/ExternalFiles.java b/src/main/java/com/diamondfire/helpbot/sys/externalfile/ExternalFiles.java index 6d85802b..2becc72c 100644 --- a/src/main/java/com/diamondfire/helpbot/sys/externalfile/ExternalFiles.java +++ b/src/main/java/com/diamondfire/helpbot/sys/externalfile/ExternalFiles.java @@ -61,6 +61,12 @@ public interface ExternalFiles { .setFileType("json") .buildFile(); + File VIP_ROLES = new ExternalFileBuilder() + .isDirectory(false) + .setName("vip_roles") + .setFileType("json") + .buildFile(); + File SAM_QUOTES = new ExternalFileBuilder() .isDirectory(false) .setName("samquotes") diff --git a/src/main/java/com/diamondfire/helpbot/sys/tasks/impl/VIPStarTask.java b/src/main/java/com/diamondfire/helpbot/sys/tasks/impl/VIPStarTask.java index 07dd2a6e..f254c16b 100644 --- a/src/main/java/com/diamondfire/helpbot/sys/tasks/impl/VIPStarTask.java +++ b/src/main/java/com/diamondfire/helpbot/sys/tasks/impl/VIPStarTask.java @@ -1,91 +1,48 @@ package com.diamondfire.helpbot.sys.tasks.impl; import com.diamondfire.helpbot.bot.HelpBotInstance; -import com.diamondfire.helpbot.sys.database.impl.DatabaseQuery; -import com.diamondfire.helpbot.sys.database.impl.queries.BasicQuery; import com.diamondfire.helpbot.sys.tasks.LoopingTask; -import com.diamondfire.helpbot.util.StarUtil; -import net.dv8tion.jda.api.entities.*; +import com.diamondfire.helpbot.sys.vip.VIPRoleHandler; +import net.dv8tion.jda.api.entities.Guild; +import net.dv8tion.jda.api.entities.Member; +import net.dv8tion.jda.api.entities.Role; -import javax.imageio.ImageIO; -import java.awt.*; -import java.io.*; -import java.sql.*; -import java.util.*; import java.util.List; +import java.util.Set; import java.util.concurrent.TimeUnit; public class VIPStarTask implements LoopingTask { - - // todo: add this + private static final long VIP_PASS_HOLDER_ROLE = 0L; - + @Override public long getInitialStart() { return 0; } - + @Override public long getNextLoop() { return TimeUnit.MINUTES.toMillis(30L); } - + @Override public void run() { Guild guild = HelpBotInstance.getJda().getGuildById(HelpBotInstance.DF_GUILD); - - if (guild == null) { - return; - } - - Role generalRole = guild.getRoleById(VIP_PASS_HOLDER_ROLE); - - if (generalRole == null) { - return; - } - - // Load members and create the color -> role map. - final Map roles = new HashMap<>(); + + assert guild != null; + List members = guild.loadMembers().get(); - - - // Load roles from the database - new DatabaseQuery() - .query(new BasicQuery("SELECT * FROM owen.vip_roles")) - .compile() - .run(result -> { - ResultSet set = result.getResult(); - while (set.next()) { - roles.put(set.getInt("color"), guild.getRoleById(set.getLong("role_id"))); - } - }); - - - Set vips = new HashSet<>(); - new DatabaseQuery() - .query(new BasicQuery("SELECT linked_accounts.discord_id FROM linked_accounts, hypercube.ranks " + - "WHERE linked_accounts.player_uuid = ranks.uuid AND ranks.vip = 1")) - .compile() - .run(result -> { - ResultSet set = result.getResult(); - while (set.next()) { - vips.add(set.getLong("discord_id")); - } - }); - + Set vipIds = VIPRoleHandler.retrieveVIPs(); + Role generalRole = guild.getRoleById(VIP_PASS_HOLDER_ROLE); + + assert generalRole != null; + for (Member member : members) { - Role role = roles.get(member.getColorRaw()); + Role role = VIPRoleHandler.getOrCreateRole(member.getColorRaw()); if (role == null) { - try { - // Create the role and add it to the roles map. - role = createRole(guild, member.getColor(), member.getColorRaw()); - roles.put(member.getColorRaw(), role); - } catch (IOException e) { - throw new RuntimeException(e); - } + continue; } - // If the vips returned by the db contains the member add the role. - if (vips.contains(member.getIdLong())) { + if (vipIds.contains(member.getIdLong())) { if (!member.getRoles().contains(role)) { guild.addRoleToMember(member, role).queue(); } @@ -93,7 +50,6 @@ public void run() { guild.addRoleToMember(member, generalRole).queue(); } } else { - // If the user has the roles, remove them. if (member.getRoles().contains(role)) { guild.removeRoleFromMember(member, role).queue(); } @@ -103,28 +59,5 @@ public void run() { } } } - - /** - * Creates a colored star role and adds it to the database. - */ - private Role createRole(Guild guild, Color color, int colorRaw) throws IOException { - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - ImageIO.write(StarUtil.create(color), "png", baos); - baos.flush(); - Role role = guild.createRole() - .setName(" ") - .setIcon(Icon.from(baos.toByteArray())) - .setPermissions(0L) - .complete(); - new DatabaseQuery() - .query(new BasicQuery("INSERT INTO owen.vip_roles (color, role_id) VALUES (?, ?)", statement -> { - statement.setInt(1, colorRaw); - statement.setLong(2, role.getIdLong()); - })) - .compile() - .run(ignored -> { - }); - return role; - } - + } diff --git a/src/main/java/com/diamondfire/helpbot/sys/vip/VIPRoleHandler.java b/src/main/java/com/diamondfire/helpbot/sys/vip/VIPRoleHandler.java new file mode 100644 index 00000000..ad0a15b1 --- /dev/null +++ b/src/main/java/com/diamondfire/helpbot/sys/vip/VIPRoleHandler.java @@ -0,0 +1,110 @@ +package com.diamondfire.helpbot.sys.vip; + +import com.diamondfire.helpbot.bot.HelpBotInstance; +import com.diamondfire.helpbot.sys.database.impl.DatabaseQuery; +import com.diamondfire.helpbot.sys.database.impl.queries.BasicQuery; +import com.diamondfire.helpbot.sys.externalfile.ExternalFiles; +import com.diamondfire.helpbot.util.StarUtil; +import com.google.gson.*; +import net.dv8tion.jda.api.entities.Guild; +import net.dv8tion.jda.api.entities.Icon; +import net.dv8tion.jda.api.entities.Role; + +import javax.imageio.ImageIO; +import java.awt.*; +import java.io.*; +import java.nio.file.Files; +import java.nio.file.StandardOpenOption; +import java.sql.ResultSet; +import java.util.*; + +public class VIPRoleHandler { + + private static final String ROLE_NAME = " "; + + private static final File FILE = ExternalFiles.VIP_ROLES; + private static final Map COLOR_ROLE_MAP = new HashMap<>(); + + static { + try { + cacheJson(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public static void cacheJson() throws IOException { + String content = new String(Files.readAllBytes(FILE.toPath())); + + if (content.isEmpty()) { + content = "{}"; + } + + JsonObject obj = JsonParser.parseString(content).getAsJsonObject(); + + for (String key : obj.keySet()) { + long roleId = obj.get(key).getAsLong(); + COLOR_ROLE_MAP.put(Integer.parseInt(key), roleId); + } + } + + public static void save() throws IOException { + JsonObject json = new JsonObject(); + + for (int color : COLOR_ROLE_MAP.keySet()) { + json.addProperty(String.valueOf(color), COLOR_ROLE_MAP.get(color)); + } + + FILE.delete(); + FILE.createNewFile(); + Files.write(FILE.toPath(), json.toString().getBytes(), StandardOpenOption.WRITE); + } + + public static Set retrieveVIPs() { + Set vips = new HashSet<>(); + new DatabaseQuery() + .query(new BasicQuery("SELECT linked_accounts.discord_id FROM linked_accounts, hypercube.ranks " + + "WHERE linked_accounts.player_uuid = ranks.uuid AND ranks.vip = 1")) + .compile() + .run(result -> { + ResultSet set = result.getResult(); + while (set.next()) { + vips.add(set.getLong("discord_id")); + } + }); + return vips; + } + + public static Role getOrCreateRole(int color) { + if (color == Role.DEFAULT_COLOR_RAW) { + return null; + } + Guild guild = HelpBotInstance.getJda().getGuildById(HelpBotInstance.DF_GUILD); + Role role; + + assert guild != null; + + if (COLOR_ROLE_MAP.containsKey(color)) { + role = guild.getRoleById(COLOR_ROLE_MAP.get(color)); + } else { + try { + // Create the coloured star and register it on discord. + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + ImageIO.write(StarUtil.create(new Color(color)), "png", baos); + baos.flush(); + role = guild.createRole() + .setName(ROLE_NAME) + .setIcon(Icon.from(baos.toByteArray())) + .setPermissions(0L) + .complete(); + COLOR_ROLE_MAP.put(color, role.getIdLong()); + VIPRoleHandler.save(); + } catch (IOException e) { + return null; + } + } + return role; + } + + +} From 628d3dce9bd14f8750f55f41fa6e3407641ad2e9 Mon Sep 17 00:00:00 2001 From: Reason <28310208+Reasonlesss@users.noreply.github.com> Date: Wed, 17 Apr 2024 10:52:59 +0100 Subject: [PATCH 08/11] Create roles on start up --- .../helpbot/sys/tasks/impl/VIPStarTask.java | 41 +++++---------- .../helpbot/sys/vip/VIPRoleHandler.java | 50 +++++++++---------- 2 files changed, 37 insertions(+), 54 deletions(-) diff --git a/src/main/java/com/diamondfire/helpbot/sys/tasks/impl/VIPStarTask.java b/src/main/java/com/diamondfire/helpbot/sys/tasks/impl/VIPStarTask.java index f254c16b..e4cba336 100644 --- a/src/main/java/com/diamondfire/helpbot/sys/tasks/impl/VIPStarTask.java +++ b/src/main/java/com/diamondfire/helpbot/sys/tasks/impl/VIPStarTask.java @@ -12,52 +12,37 @@ import java.util.concurrent.TimeUnit; public class VIPStarTask implements LoopingTask { - - private static final long VIP_PASS_HOLDER_ROLE = 0L; - + @Override public long getInitialStart() { return 0; } - + @Override public long getNextLoop() { return TimeUnit.MINUTES.toMillis(30L); } - + @Override public void run() { Guild guild = HelpBotInstance.getJda().getGuildById(HelpBotInstance.DF_GUILD); - - assert guild != null; - + List members = guild.loadMembers().get(); Set vipIds = VIPRoleHandler.retrieveVIPs(); - Role generalRole = guild.getRoleById(VIP_PASS_HOLDER_ROLE); - - assert generalRole != null; - + for (Member member : members) { - Role role = VIPRoleHandler.getOrCreateRole(member.getColorRaw()); + Role role = VIPRoleHandler.getRole(member.getColorRaw()); if (role == null) { continue; } - if (vipIds.contains(member.getIdLong())) { - if (!member.getRoles().contains(role)) { - guild.addRoleToMember(member, role).queue(); - } - if (!member.getRoles().contains(generalRole)) { - guild.addRoleToMember(member, generalRole).queue(); - } - } else { - if (member.getRoles().contains(role)) { - guild.removeRoleFromMember(member, role).queue(); - } - if (member.getRoles().contains(generalRole)) { - guild.removeRoleFromMember(member, generalRole).queue(); - } + if (vipIds.contains(member.getIdLong()) && !member.getRoles().contains(role)) { + guild.addRoleToMember(member, role).queue(); + continue; + } + if (member.getRoles().contains(role)) { + guild.removeRoleFromMember(member, role).queue(); } } } - + } diff --git a/src/main/java/com/diamondfire/helpbot/sys/vip/VIPRoleHandler.java b/src/main/java/com/diamondfire/helpbot/sys/vip/VIPRoleHandler.java index ad0a15b1..dd7f2cd3 100644 --- a/src/main/java/com/diamondfire/helpbot/sys/vip/VIPRoleHandler.java +++ b/src/main/java/com/diamondfire/helpbot/sys/vip/VIPRoleHandler.java @@ -20,7 +20,7 @@ public class VIPRoleHandler { - private static final String ROLE_NAME = " "; + private static final String ROLE_NAME = "VIP"; private static final File FILE = ExternalFiles.VIP_ROLES; private static final Map COLOR_ROLE_MAP = new HashMap<>(); @@ -28,6 +28,27 @@ public class VIPRoleHandler { static { try { cacheJson(); + + Guild guild = HelpBotInstance.getJda().getGuildById(HelpBotInstance.DF_GUILD); + for (Role role : guild.getRoles()) { + int color = role.getColorRaw(); + if (color == Role.DEFAULT_COLOR_RAW) { + continue; + } + if (!COLOR_ROLE_MAP.containsKey(color)) { + // Create the coloured star and register it on discord. + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + ImageIO.write(StarUtil.create(new Color(color)), "png", baos); + baos.flush(); + role = guild.createRole() + .setName(ROLE_NAME) + .setIcon(Icon.from(baos.toByteArray())) + .setPermissions(0L) + .complete(); + COLOR_ROLE_MAP.put(color, role.getIdLong()); + } + } + save(); } catch (IOException e) { e.printStackTrace(); } @@ -75,35 +96,12 @@ public static Set retrieveVIPs() { return vips; } - public static Role getOrCreateRole(int color) { + public static Role getRole(int color) { if (color == Role.DEFAULT_COLOR_RAW) { return null; } Guild guild = HelpBotInstance.getJda().getGuildById(HelpBotInstance.DF_GUILD); - Role role; - - assert guild != null; - - if (COLOR_ROLE_MAP.containsKey(color)) { - role = guild.getRoleById(COLOR_ROLE_MAP.get(color)); - } else { - try { - // Create the coloured star and register it on discord. - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - ImageIO.write(StarUtil.create(new Color(color)), "png", baos); - baos.flush(); - role = guild.createRole() - .setName(ROLE_NAME) - .setIcon(Icon.from(baos.toByteArray())) - .setPermissions(0L) - .complete(); - COLOR_ROLE_MAP.put(color, role.getIdLong()); - VIPRoleHandler.save(); - } catch (IOException e) { - return null; - } - } - return role; + return guild.getRoleById(COLOR_ROLE_MAP.get(color)); } From ee2379fc57abc11d5dea1415c59019e6e3161b6d Mon Sep 17 00:00:00 2001 From: Reason <28310208+Reasonlesss@users.noreply.github.com> Date: Thu, 18 Apr 2024 21:32:08 +0100 Subject: [PATCH 09/11] Only create stars for roles without icons --- .../java/com/diamondfire/helpbot/sys/vip/VIPRoleHandler.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/com/diamondfire/helpbot/sys/vip/VIPRoleHandler.java b/src/main/java/com/diamondfire/helpbot/sys/vip/VIPRoleHandler.java index dd7f2cd3..0849cf86 100644 --- a/src/main/java/com/diamondfire/helpbot/sys/vip/VIPRoleHandler.java +++ b/src/main/java/com/diamondfire/helpbot/sys/vip/VIPRoleHandler.java @@ -35,6 +35,9 @@ public class VIPRoleHandler { if (color == Role.DEFAULT_COLOR_RAW) { continue; } + if (role.getIcon() != null) { + continue; + } if (!COLOR_ROLE_MAP.containsKey(color)) { // Create the coloured star and register it on discord. ByteArrayOutputStream baos = new ByteArrayOutputStream(); From 76473f5ee379d2e40838e7f9737d1bb0d308cd71 Mon Sep 17 00:00:00 2001 From: Reason <28310208+Reasonlesss@users.noreply.github.com> Date: Thu, 18 Apr 2024 23:27:26 +0100 Subject: [PATCH 10/11] Changes and small bug fixes --- .../disable/DisableCommandHandler.java | 3 +++ .../sys/rolereact/RoleReactListener.java | 4 +++- .../helpbot/sys/tasks/impl/VIPStarTask.java | 21 ++++++++++-------- .../helpbot/sys/vip/VIPRoleHandler.java | 3 +++ .../diamondfire/helpbot/util/StarUtil.java | 4 ++-- src/main/resources/star.png | Bin 652 -> 5336 bytes 6 files changed, 23 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/diamondfire/helpbot/bot/command/disable/DisableCommandHandler.java b/src/main/java/com/diamondfire/helpbot/bot/command/disable/DisableCommandHandler.java index 14c925e1..a72af1b5 100644 --- a/src/main/java/com/diamondfire/helpbot/bot/command/disable/DisableCommandHandler.java +++ b/src/main/java/com/diamondfire/helpbot/bot/command/disable/DisableCommandHandler.java @@ -48,6 +48,9 @@ public void enable(Command command) { } public void disable(Command command) { + if (command == null) { + return; + } // Prevents tricky people using eval. if (command instanceof CommandDisableFlag) { return; diff --git a/src/main/java/com/diamondfire/helpbot/sys/rolereact/RoleReactListener.java b/src/main/java/com/diamondfire/helpbot/sys/rolereact/RoleReactListener.java index a80494ad..af5bd748 100644 --- a/src/main/java/com/diamondfire/helpbot/sys/rolereact/RoleReactListener.java +++ b/src/main/java/com/diamondfire/helpbot/sys/rolereact/RoleReactListener.java @@ -35,7 +35,9 @@ public RoleReactListener() { roleMap.put(button.getId(), role.getRoleID()); } - msg.editMessage("__**Reaction Roles**__ \nClick to add/remove roles from yourself").setActionRow(buttons).queue(); + msg.editMessage("__**Reaction Roles**__ \nClick to add/remove roles from yourself") + .setComponents(Util.of(buttons)) + .queue(); }); } diff --git a/src/main/java/com/diamondfire/helpbot/sys/tasks/impl/VIPStarTask.java b/src/main/java/com/diamondfire/helpbot/sys/tasks/impl/VIPStarTask.java index e4cba336..4151b192 100644 --- a/src/main/java/com/diamondfire/helpbot/sys/tasks/impl/VIPStarTask.java +++ b/src/main/java/com/diamondfire/helpbot/sys/tasks/impl/VIPStarTask.java @@ -26,23 +26,26 @@ public long getNextLoop() { @Override public void run() { Guild guild = HelpBotInstance.getJda().getGuildById(HelpBotInstance.DF_GUILD); - - List members = guild.loadMembers().get(); Set vipIds = VIPRoleHandler.retrieveVIPs(); - - for (Member member : members) { + + guild.loadMembers((member) -> { Role role = VIPRoleHandler.getRole(member.getColorRaw()); if (role == null) { - continue; + return; } if (vipIds.contains(member.getIdLong()) && !member.getRoles().contains(role)) { - guild.addRoleToMember(member, role).queue(); - continue; + guild.addRoleToMember(member, role) + .reason("User has VIP Pass") + .queue(); + return; } if (member.getRoles().contains(role)) { - guild.removeRoleFromMember(member, role).queue(); + guild.removeRoleFromMember(member, role) + .reason("User's VIP Pass has expired") + .queue(); } - } + }); + } } diff --git a/src/main/java/com/diamondfire/helpbot/sys/vip/VIPRoleHandler.java b/src/main/java/com/diamondfire/helpbot/sys/vip/VIPRoleHandler.java index 0849cf86..2743407f 100644 --- a/src/main/java/com/diamondfire/helpbot/sys/vip/VIPRoleHandler.java +++ b/src/main/java/com/diamondfire/helpbot/sys/vip/VIPRoleHandler.java @@ -104,6 +104,9 @@ public static Role getRole(int color) { return null; } Guild guild = HelpBotInstance.getJda().getGuildById(HelpBotInstance.DF_GUILD); + if (!COLOR_ROLE_MAP.containsKey(color)) { + return null; + } return guild.getRoleById(COLOR_ROLE_MAP.get(color)); } diff --git a/src/main/java/com/diamondfire/helpbot/util/StarUtil.java b/src/main/java/com/diamondfire/helpbot/util/StarUtil.java index bfea79f5..f268069f 100644 --- a/src/main/java/com/diamondfire/helpbot/util/StarUtil.java +++ b/src/main/java/com/diamondfire/helpbot/util/StarUtil.java @@ -11,7 +11,7 @@ public class StarUtil { private static final BufferedImage STAR; - private static final int SIZE = 32; + private static final int SIZE = 64; static { // Load the star from the resources. @@ -32,7 +32,7 @@ public static BufferedImage create(Color color) { g2d.drawImage(STAR, 0, 0, null); g2d.setComposite(AlphaComposite.SrcAtop); g2d.setColor(color); - g2d.fillRect(0, 0, 32, 32); + g2d.fillRect(0, 0, SIZE, SIZE); g2d.dispose(); return bufferedImage; } diff --git a/src/main/resources/star.png b/src/main/resources/star.png index 668f3af6416b30851c294b59550bdb9783e10340..10d5e0f04741f87ba5dc43f34b3dbd3fd45f4c12 100644 GIT binary patch literal 5336 zcmeHKYg7~07EU0FJOo8SL@XhQ2$CmxkrELDLWEdeA|Toh$qWqSMKVA@1(fTP)@Q9% z(Tf#|BG77!B1nN^MJp|66-5E@`ruI!r4=oL^h`j++pcw&Yu)~Hvi6)a`|SOlv%j;? z&diperGAr5Y)uFR!ep_(PY7ri;xcI>xEG>{Z3F^wIvgQJ#9~*%B%m_|3KD^c+W;Ys z>l+Xa35Gzo3y3+2pqy3YhKX23q_h$m%$)GIhjMfguc*kyB7Cj_fCv1Q7;Z2!s`2{8fu9$t)U^L38H$K_ndxw{ir?s&fQ*OQl2IoakfQjv2P@;bISo?CPx>%KYSByu`L+2&ff_>Y%G zmrOdSKgZ{vk9u~GZq`w{2QK-=&f79OV*Ml{D}LS)15;)cCnPWr^}2J%K6#LGMyAws3N13Siff1 zDpkT|$6VE{vNB~t-+SsahGxR9T@D^0nO{}~5!xC$4``~Zsg2(}=x@4N*JZfla7hTS zy2gPKp7$_mdrC@5e}C`3@C>iK#hUVR^HZOKJl3IM5mx0wngCEYo)XRzoj78O`fwW&%B(ovOKM;u}V!w1$% zHK-axRZ23B3B{Bk#>ubNr%+2IWAIAtC<}lOx(-s)nKTAnp`efV&|<#H0AzGQ zf9s(QOI5@45Ll~9(nw+7WLSwgj)#y*$Nbev8o53knUoI8VFfVNf?1hwOo^Y%F%O)A zSX80bdjYcFu*6X0HCb=04Ij~mGkzh!eGK;v>sPVsje(U!BJfd3lknwD*)gyOHHHr%RChMho$HS9*$jj|4oa-lVvte_<4^#ch5{Uf z=gx`YNSRb9hA*SC-MKK8&)~XKWo(GgfMskCE(00|@qq>fSqaI?;!@ds7Ka*xKps>XKZflg<-;tg2dsyZNd=2l8U+Nl6IDR5FkP*T)eqo=3%rBG zLJEtR<(v0(`~PBI9Cd_YwPpkviK>{Yd% z&tM7|BMZRcBq|w-r2a2!{P2)Hfj!uAe^iU9G^u*k$cYMt6Gxs#9_6V1D3QtfLm_~q zBOz#^WLTzOC%_sRlEy*GSQu1~(R6*KNB<@jIPOv@1L8=j92ntH*$AIW6g-5% zk--SUWpmy{*QyXK1=7IYv4BUw6-ZD0{}_3mexqF8v`&eG@m&CfQ5kG1lmFj@(MJQO z<2B<|#GdrOaN?;q7*}L~--r$rFHj5VW5sZkGra8lgV*R@{DU(9=y#L66~FK3dPmn= zG4NK#@3QM1U2ny}TN%I0uKycdCa*uIU?q49N&z2BFz5Ih@ToO1Ccw{!FpU3lD+_i5 zjj`H4QcEDv9C0D)^1YIQ(g+hve2qFumewTOvi>e-pqh#KMqnb90)Hzf{NFFJ}9Bwv=Bv|=!+wCVG?PWJ9zGY(Y;&FuoY2S}p!4_hIuw&s(icq@%`s zbGx*n-V$B1r|f2vK{A0(e1HDc9?~kaef^GPBzd|H+H#jSfp{b`%KJ0xMteiMsKv-U z*}$!>nV(;-Jn^EynU55#tBj2F4!3TceAdkF=%W6G7m`o!zWa@+Qt`B`_)(m*scy2( zG4FJeu5u-kaZsS_u~~k-)Q}h(?a>zZw8r8nubbSyQSkN63T=?{zG4v{SZ6P|8M3tm}uMOxBc)ZvyIKt0vip1m_pSYT~?=f^`K zs#8;lJWZU6Z?xhGDV-n z&*Q`y%RerXgx~qi?Q3d2yVcEF&A;2?t@^#09ngNpuD>nzx`5aKHb2qYzJ6V1)+dh* zZ6RXqPRj<{6<_qW7~6bOFMqGO{W9W^+qBnSTfMSf)UIi1D9+5Ry=PpyqH>jJ{k`Bh zu3x#Ge*}AMoFDw`=tk0or@Ae>XAxHyu6epLr1#kMtJC%j>Pn|1U0-x+|CH6yt-GCx z&Z6e~jF~l;B9juV6w1lXC!RmjlocGR-<=sSb$|HxIRi)19Ne6)H7d9EMsMam_{=z) zexLI^FTL>RaK^KW?$zBd)0*NQGG81iuCV&-2YKg?K635{Ll2l6zPv`i8f$Cy)!rTp z$L@~q+PZ;3?)nqaZtX`HwOzVt+IUXJli9=WI^Q9ufwNzwM{l2yC$PFnI%|8mImIP^ vUr~_--*Eam`;aBWSGQl1lqxF9Rt}?TT delta 581 zcmV-L0=oU!DU1bwiBL{Q4GJ0x0000DNk~Le0000W0000W2nGNE0CReJ^Z)<>g=s@W zP)S2WAaHVTW@&6?001bFeUUv#!$2IxU(-sZR21wWB9fsxhy_s*N3B8;Dui00RR@zx zKZGU?NsEi4;979-W3lSs;;gHKs~`w|fH*riDY{6B|4RygEn+-4?#H`(kGpq(P%kmf z3XB1oUNKXNxR}YVh{0C`(1Q>LF(Na|n3bd?Jjd5Pe0;r&@htCie~vCSXEDGh63;Nh ztPrmgPiR+LrZbK+5xE=c^yb;ad3&IN}Bo*6OIsX5{Zu~=whrHxt9)QBgE zqpGG;zL0T$S>?RNSu0gp^Pc>L;hes_#C4hjNMHerkRU=q6&om_f*7qjDHc++ANTP0 zJAR2=3b{7G$T5#HG{}x0{11M2Yvm`#-K20F=yWSX}0SMmBfs*m)c@UTp5O(eLs3$;RMgSE7UEUlz TADmZE00000NkvXXu0mjfm*fID From 4a05cefbdd3fde3f586a22f70d55f379e0de3360 Mon Sep 17 00:00:00 2001 From: Reason <28310208+Reasonlesss@users.noreply.github.com> Date: Sat, 20 Apr 2024 13:42:49 +0100 Subject: [PATCH 11/11] Fix bugs + make messages work in threads --- .../impl/codeblock/AbstractSingleQueryCommand.java | 13 +++++++------ .../bot/command/impl/codeblock/CodeCommand.java | 5 +++-- .../bot/command/impl/codeblock/RawCommand.java | 5 +++-- .../bot/command/impl/codeblock/TagsCommand.java | 5 +++-- .../command/impl/other/dev/FetchDataCommand.java | 9 +++++---- .../bot/command/impl/other/fun/NbsCommand.java | 3 ++- .../bot/command/impl/other/mod/PurgeCommand.java | 3 ++- .../helpbot/bot/command/reply/ReplyHandler.java | 7 ++++--- .../helpbot/bot/events/CommandEvent.java | 2 +- .../java/com/diamondfire/helpbot/df/ranks/Rank.java | 2 +- .../helpbot/sys/message/acceptors/TagAcceptor.java | 2 +- .../java/com/diamondfire/helpbot/sys/tag/Tag.java | 3 ++- .../helpbot/sys/tasks/impl/VIPStarTask.java | 2 +- 13 files changed, 35 insertions(+), 26 deletions(-) diff --git a/src/main/java/com/diamondfire/helpbot/bot/command/impl/codeblock/AbstractSingleQueryCommand.java b/src/main/java/com/diamondfire/helpbot/bot/command/impl/codeblock/AbstractSingleQueryCommand.java index f512dee2..f2dccdf8 100644 --- a/src/main/java/com/diamondfire/helpbot/bot/command/impl/codeblock/AbstractSingleQueryCommand.java +++ b/src/main/java/com/diamondfire/helpbot/bot/command/impl/codeblock/AbstractSingleQueryCommand.java @@ -14,6 +14,7 @@ import com.diamondfire.helpbot.util.*; import net.dv8tion.jda.api.entities.*; import net.dv8tion.jda.api.entities.channel.concrete.TextChannel; +import net.dv8tion.jda.api.entities.channel.middleman.GuildMessageChannel; import net.dv8tion.jda.api.entities.emoji.Emoji; import net.dv8tion.jda.api.interactions.components.buttons.Button; @@ -24,7 +25,7 @@ public abstract class AbstractSingleQueryCommand extends Command { - public static void sendMultipleMessage(List actions, TextChannel channel, long userToWait, BiConsumer onChosen) { + public static void sendMultipleMessage(List actions, GuildMessageChannel channel, long userToWait, BiConsumer onChosen) { // This here is to determine if all the duplicate types are the same. If not, we need to make sure that we filter those out first.. CodeObject referenceData = actions.get(0); Class classReference = referenceData.getClass(); @@ -67,7 +68,7 @@ public static void sendMultipleMessage(List actions, TextChannel cha // when msg is deleted causes nullpointer when tries to remove reactions! FIX CodeObject object = buttonMap.get(event.getComponentId()); - onChosen.accept(object, message.getChannel().asTextChannel()); + onChosen.accept(object, message.getChannel().asGuildMessageChannel()); }); }); @@ -85,9 +86,9 @@ public void run(CommandEvent event) { getData(event, onDataReceived()); } - public abstract BiConsumer onDataReceived(); + public abstract BiConsumer onDataReceived(); - protected void getData(CommandEvent event, BiConsumer onChosen) { + protected void getData(CommandEvent event, BiConsumer onChosen) { String name = event.getArgument("name"); PresetBuilder preset = new PresetBuilder(); @@ -120,9 +121,9 @@ protected void getData(CommandEvent event, BiConsumer o // If none, proceed. Else we need to special case that. if (sameActions.size() == 1) { - onChosen.accept(sameActions.get(0), event.getChannel().asTextChannel()); + onChosen.accept(sameActions.get(0), event.getChannel().asGuildMessageChannel()); } else if (sameActions.size() > 1) { - sendMultipleMessage(sameActions, event.getChannel().asTextChannel(), event.getMember().getIdLong(), onChosen); + sendMultipleMessage(sameActions, event.getChannel().asGuildMessageChannel(), event.getMember().getIdLong(), onChosen); } return; diff --git a/src/main/java/com/diamondfire/helpbot/bot/command/impl/codeblock/CodeCommand.java b/src/main/java/com/diamondfire/helpbot/bot/command/impl/codeblock/CodeCommand.java index 759baba5..cde99c68 100644 --- a/src/main/java/com/diamondfire/helpbot/bot/command/impl/codeblock/CodeCommand.java +++ b/src/main/java/com/diamondfire/helpbot/bot/command/impl/codeblock/CodeCommand.java @@ -7,6 +7,7 @@ import com.diamondfire.helpbot.util.Util; import net.dv8tion.jda.api.EmbedBuilder; import net.dv8tion.jda.api.entities.channel.concrete.TextChannel; +import net.dv8tion.jda.api.entities.channel.middleman.GuildMessageChannel; import net.dv8tion.jda.api.utils.FileUpload; import java.io.File; @@ -15,7 +16,7 @@ public class CodeCommand extends AbstractSingleQueryCommand { - public static void sendHelpMessage(T data, TextChannel channel) { + public static void sendHelpMessage(T data, GuildMessageChannel channel) { EmbedBuilder builder = data.getEnum().getEmbedBuilder().generateEmbed(data); String customHead = data.getItem().getHead(); @@ -57,7 +58,7 @@ public void run(CommandEvent event) { } @Override - public BiConsumer onDataReceived() { + public BiConsumer onDataReceived() { return CodeCommand::sendHelpMessage; } } diff --git a/src/main/java/com/diamondfire/helpbot/bot/command/impl/codeblock/RawCommand.java b/src/main/java/com/diamondfire/helpbot/bot/command/impl/codeblock/RawCommand.java index 75d5c4be..2be76c85 100644 --- a/src/main/java/com/diamondfire/helpbot/bot/command/impl/codeblock/RawCommand.java +++ b/src/main/java/com/diamondfire/helpbot/bot/command/impl/codeblock/RawCommand.java @@ -7,13 +7,14 @@ import com.diamondfire.helpbot.util.StringUtil; import com.google.gson.*; import net.dv8tion.jda.api.entities.channel.concrete.TextChannel; +import net.dv8tion.jda.api.entities.channel.middleman.GuildMessageChannel; import java.util.function.BiConsumer; public class RawCommand extends AbstractSingleQueryCommand { - private static void sendRawMessage(CodeObject data, TextChannel channel) { + private static void sendRawMessage(CodeObject data, GuildMessageChannel channel) { Gson gson = new GsonBuilder().setPrettyPrinting().create(); String json = gson.toJson(data.getJson()); @@ -55,7 +56,7 @@ public void run(CommandEvent event) { } @Override - public BiConsumer onDataReceived() { + public BiConsumer onDataReceived() { return RawCommand::sendRawMessage; } diff --git a/src/main/java/com/diamondfire/helpbot/bot/command/impl/codeblock/TagsCommand.java b/src/main/java/com/diamondfire/helpbot/bot/command/impl/codeblock/TagsCommand.java index 92f84dee..d7a84a72 100644 --- a/src/main/java/com/diamondfire/helpbot/bot/command/impl/codeblock/TagsCommand.java +++ b/src/main/java/com/diamondfire/helpbot/bot/command/impl/codeblock/TagsCommand.java @@ -7,6 +7,7 @@ import com.diamondfire.helpbot.util.Util; import net.dv8tion.jda.api.EmbedBuilder; import net.dv8tion.jda.api.entities.channel.concrete.TextChannel; +import net.dv8tion.jda.api.entities.channel.middleman.GuildMessageChannel; import net.dv8tion.jda.api.utils.FileUpload; import java.io.File; @@ -15,7 +16,7 @@ public class TagsCommand extends AbstractSingleQueryCommand { - private static void sendTagMessage(CodeObject data, TextChannel channel) { + private static void sendTagMessage(CodeObject data, GuildMessageChannel channel) { EmbedBuilder builder = new EmbedBuilder(); ActionData actionData; @@ -92,7 +93,7 @@ public void run(CommandEvent event) { } @Override - public BiConsumer onDataReceived() { + public BiConsumer onDataReceived() { return TagsCommand::sendTagMessage; } } diff --git a/src/main/java/com/diamondfire/helpbot/bot/command/impl/other/dev/FetchDataCommand.java b/src/main/java/com/diamondfire/helpbot/bot/command/impl/other/dev/FetchDataCommand.java index d868e11e..779c3bb6 100644 --- a/src/main/java/com/diamondfire/helpbot/bot/command/impl/other/dev/FetchDataCommand.java +++ b/src/main/java/com/diamondfire/helpbot/bot/command/impl/other/dev/FetchDataCommand.java @@ -16,6 +16,7 @@ import net.dv8tion.jda.api.EmbedBuilder; import net.dv8tion.jda.api.entities.Message; import net.dv8tion.jda.api.entities.channel.concrete.TextChannel; +import net.dv8tion.jda.api.entities.channel.middleman.GuildMessageChannel; import net.dv8tion.jda.api.utils.FileUpload; import java.io.*; @@ -61,7 +62,7 @@ public Permission getPermission() { public void run(CommandEvent event) { List flags = event.getArgument("flag"); if (flags == null) { - setup(event.getChannel().asTextChannel()); + setup(event.getChannel().asGuildMessageChannel()); } else { boolean includeColors = false; boolean updateDb = true; @@ -72,15 +73,15 @@ public void run(CommandEvent event) { updateDb = false; } } - setup(event.getChannel().asTextChannel(), includeColors, updateDb); + setup(event.getChannel().asGuildMessageChannel(), includeColors, updateDb); } } - public void setup(TextChannel channel) { + public void setup(GuildMessageChannel channel) { setup(channel, false, true); } - public void setup(TextChannel channel, boolean includeColors, boolean updateDb) { + public void setup(GuildMessageChannel channel, boolean includeColors, boolean updateDb) { EmbedBuilder builder = new EmbedBuilder(); builder.setTitle("Fetching Code Database..."); diff --git a/src/main/java/com/diamondfire/helpbot/bot/command/impl/other/fun/NbsCommand.java b/src/main/java/com/diamondfire/helpbot/bot/command/impl/other/fun/NbsCommand.java index 9688bc54..9ba93905 100644 --- a/src/main/java/com/diamondfire/helpbot/bot/command/impl/other/fun/NbsCommand.java +++ b/src/main/java/com/diamondfire/helpbot/bot/command/impl/other/fun/NbsCommand.java @@ -11,6 +11,7 @@ import net.dv8tion.jda.api.EmbedBuilder; import net.dv8tion.jda.api.entities.*; import net.dv8tion.jda.api.entities.channel.concrete.TextChannel; +import net.dv8tion.jda.api.entities.channel.middleman.GuildMessageChannel; import net.dv8tion.jda.api.utils.FileUpload; import java.awt.*; @@ -44,7 +45,7 @@ public Permission getPermission() { @Override public void run(CommandEvent event) { - TextChannel channel = event.getChannel().asTextChannel(); + GuildMessageChannel channel = event.getChannel().asGuildMessageChannel(); PresetBuilder attachNbsMsg = new PresetBuilder().withPreset(new InformativeReply(InformativeReplyType.ERROR,"You need to attach an nbs file!")); PresetBuilder errorMsg = new PresetBuilder().withPreset(new InformativeReply(InformativeReplyType.ERROR,"Something went wrong while generating!")); diff --git a/src/main/java/com/diamondfire/helpbot/bot/command/impl/other/mod/PurgeCommand.java b/src/main/java/com/diamondfire/helpbot/bot/command/impl/other/mod/PurgeCommand.java index f439efd8..cbdc99db 100644 --- a/src/main/java/com/diamondfire/helpbot/bot/command/impl/other/mod/PurgeCommand.java +++ b/src/main/java/com/diamondfire/helpbot/bot/command/impl/other/mod/PurgeCommand.java @@ -12,6 +12,7 @@ import com.diamondfire.helpbot.sys.externalfile.ExternalFileUtil; import net.dv8tion.jda.api.entities.*; import net.dv8tion.jda.api.entities.channel.concrete.TextChannel; +import net.dv8tion.jda.api.entities.channel.middleman.GuildMessageChannel; import net.dv8tion.jda.api.utils.FileUpload; import java.io.File; @@ -57,7 +58,7 @@ public void run(CommandEvent event) { ); event.reply(builder); } else { - TextChannel channel = event.getChannel().asTextChannel(); + GuildMessageChannel channel = event.getChannel().asGuildMessageChannel(); channel.getHistory().retrievePast(messagesToRemove).queue((messages) -> { // Adds the messages to the messageBuilder object StringBuilder stringBuilder = new StringBuilder(); diff --git a/src/main/java/com/diamondfire/helpbot/bot/command/reply/ReplyHandler.java b/src/main/java/com/diamondfire/helpbot/bot/command/reply/ReplyHandler.java index 5f7e2184..426fc6d1 100644 --- a/src/main/java/com/diamondfire/helpbot/bot/command/reply/ReplyHandler.java +++ b/src/main/java/com/diamondfire/helpbot/bot/command/reply/ReplyHandler.java @@ -3,6 +3,7 @@ import net.dv8tion.jda.api.EmbedBuilder; import net.dv8tion.jda.api.entities.*; import net.dv8tion.jda.api.entities.channel.concrete.TextChannel; +import net.dv8tion.jda.api.entities.channel.middleman.GuildMessageChannel; import net.dv8tion.jda.api.entities.channel.middleman.MessageChannel; import net.dv8tion.jda.api.requests.RestAction; import net.dv8tion.jda.api.requests.restaction.MessageCreateAction; @@ -10,13 +11,13 @@ public class ReplyHandler { - private final TextChannel channel; + private final GuildMessageChannel channel; - public ReplyHandler(TextChannel channel) { + public ReplyHandler(GuildMessageChannel channel) { this.channel = channel; } - public TextChannel getChannel() { + public GuildMessageChannel getChannel() { return channel; } diff --git a/src/main/java/com/diamondfire/helpbot/bot/events/CommandEvent.java b/src/main/java/com/diamondfire/helpbot/bot/events/CommandEvent.java index 6a980cef..c5220bd9 100644 --- a/src/main/java/com/diamondfire/helpbot/bot/events/CommandEvent.java +++ b/src/main/java/com/diamondfire/helpbot/bot/events/CommandEvent.java @@ -15,7 +15,7 @@ public class CommandEvent extends MessageReceivedEvent { private Command command; - private final ReplyHandler replyHandler = new ReplyHandler(getChannel().asTextChannel()); + private final ReplyHandler replyHandler = new ReplyHandler(getChannel().asGuildMessageChannel()); //TODO Cleanup and refactor this. // I'd like to see stuff like replying be put into it's whole own section and refactored as well. private ParsedArgumentSet parsedArgumentSet = null; diff --git a/src/main/java/com/diamondfire/helpbot/df/ranks/Rank.java b/src/main/java/com/diamondfire/helpbot/df/ranks/Rank.java index fa6b48a3..771f5121 100644 --- a/src/main/java/com/diamondfire/helpbot/df/ranks/Rank.java +++ b/src/main/java/com/diamondfire/helpbot/df/ranks/Rank.java @@ -37,7 +37,7 @@ public enum Rank { this.rankName = rankName; this.number = number; this.category = category; - this.emote = HelpBotInstance.getJda().getGuildById(615846886414483465L).getEmojiById(emote); + this.emote = HelpBotInstance.getJda().getGuildById(615846886414483465L).getEmojisByName(emote, false).get(0); } public String getRankName() { diff --git a/src/main/java/com/diamondfire/helpbot/sys/message/acceptors/TagAcceptor.java b/src/main/java/com/diamondfire/helpbot/sys/message/acceptors/TagAcceptor.java index 05cdc074..0f8a4700 100644 --- a/src/main/java/com/diamondfire/helpbot/sys/message/acceptors/TagAcceptor.java +++ b/src/main/java/com/diamondfire/helpbot/sys/message/acceptors/TagAcceptor.java @@ -21,7 +21,7 @@ public boolean accept(Message message) { try { // Get Tag and send response TagHandler.getTag(parsedText) - .sendResponse(message.getChannel().asTextChannel(), message.getAuthor()); + .sendResponse(message.getChannel().asGuildMessageChannel(), message.getAuthor()); } catch (TagDoesNotExistException | IOException ignored) { return false; diff --git a/src/main/java/com/diamondfire/helpbot/sys/tag/Tag.java b/src/main/java/com/diamondfire/helpbot/sys/tag/Tag.java index 4f47f71d..b8c89ed1 100644 --- a/src/main/java/com/diamondfire/helpbot/sys/tag/Tag.java +++ b/src/main/java/com/diamondfire/helpbot/sys/tag/Tag.java @@ -5,6 +5,7 @@ import net.dv8tion.jda.api.EmbedBuilder; import net.dv8tion.jda.api.entities.*; import net.dv8tion.jda.api.entities.channel.concrete.TextChannel; +import net.dv8tion.jda.api.entities.channel.middleman.GuildMessageChannel; import org.jetbrains.annotations.NotNull; import java.io.Serializable; @@ -66,7 +67,7 @@ public void setImage(String image) { this.image = image; } - public void sendResponse(TextChannel channel, @NotNull User requester) { + public void sendResponse(GuildMessageChannel channel, @NotNull User requester) { EmbedBuilder embed = new EmbedBuilder() .setTitle(getTitle()) diff --git a/src/main/java/com/diamondfire/helpbot/sys/tasks/impl/VIPStarTask.java b/src/main/java/com/diamondfire/helpbot/sys/tasks/impl/VIPStarTask.java index 4151b192..93207b64 100644 --- a/src/main/java/com/diamondfire/helpbot/sys/tasks/impl/VIPStarTask.java +++ b/src/main/java/com/diamondfire/helpbot/sys/tasks/impl/VIPStarTask.java @@ -39,7 +39,7 @@ public void run() { .queue(); return; } - if (member.getRoles().contains(role)) { + if (!vipIds.contains(member.getIdLong()) && member.getRoles().contains(role)) { guild.removeRoleFromMember(member, role) .reason("User's VIP Pass has expired") .queue();