From 6fb3c1c8ba9f70b625e969b9d333aa0646166ab9 Mon Sep 17 00:00:00 2001 From: Romulo-Menezes Date: Thu, 25 Jan 2024 15:42:13 -0300 Subject: [PATCH 1/7] feat: add twitter listener --- .../capivara/config/SpringConfig.java | 9 +++- .../capivara/listeners/TwitterListener.java | 53 +++++++++++++++++++ 2 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/softawii/capivara/listeners/TwitterListener.java diff --git a/src/main/java/com/softawii/capivara/config/SpringConfig.java b/src/main/java/com/softawii/capivara/config/SpringConfig.java index 6efe69f..615a752 100644 --- a/src/main/java/com/softawii/capivara/config/SpringConfig.java +++ b/src/main/java/com/softawii/capivara/config/SpringConfig.java @@ -65,7 +65,14 @@ public LocalContainerEntityManagerFactoryBean entityManagerFactory() { public JDA jda() { JDA jda; try { - JDABuilder builder = JDABuilder.create(discordToken, GatewayIntent.GUILD_MEMBERS, GatewayIntent.GUILD_VOICE_STATES, GatewayIntent.GUILD_EMOJIS_AND_STICKERS, GatewayIntent.GUILD_PRESENCES); + JDABuilder builder = JDABuilder.create( + discordToken, + GatewayIntent.GUILD_MEMBERS, + GatewayIntent.GUILD_VOICE_STATES, + GatewayIntent.GUILD_EMOJIS_AND_STICKERS, + GatewayIntent.GUILD_PRESENCES, + GatewayIntent.GUILD_MESSAGES, + GatewayIntent.MESSAGE_CONTENT); builder.setMemberCachePolicy(MemberCachePolicy.ALL); builder.enableCache(CacheFlag.EMOJI, CacheFlag.ROLE_TAGS, CacheFlag.MEMBER_OVERRIDES, CacheFlag.STICKER); jda = builder.build(); diff --git a/src/main/java/com/softawii/capivara/listeners/TwitterListener.java b/src/main/java/com/softawii/capivara/listeners/TwitterListener.java new file mode 100644 index 0000000..ab78303 --- /dev/null +++ b/src/main/java/com/softawii/capivara/listeners/TwitterListener.java @@ -0,0 +1,53 @@ +package com.softawii.capivara.listeners; + +import net.dv8tion.jda.api.JDA; +import net.dv8tion.jda.api.events.message.MessageReceivedEvent; +import net.dv8tion.jda.api.hooks.ListenerAdapter; +import org.jetbrains.annotations.NotNull; +import org.springframework.stereotype.Component; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +@Component +public class TwitterListener extends ListenerAdapter { + private final String patternStrTwitter; + private final String patternStrX; + public TwitterListener(JDA jda) { + this.patternStrTwitter = "https://twitter.com/(\\w+)/status/(\\d+)"; + this.patternStrX = "https://x.com/(\\w+)/status/(\\d+)"; + jda.addEventListener(this); + } + + @Override + public void onMessageReceived(@NotNull MessageReceivedEvent event) { + if (event.getAuthor().isBot()) return; + + String message = event.getMessage().getContentRaw(); + + if (message.startsWith("https://twitter.com/")){ + message = fixEmbedTwitter(message, patternStrTwitter); + if (message == null) return; + event.getMessage().reply(message).mentionRepliedUser(false).queue(); + } + + if (message.startsWith("https://x.com/")){ + message = fixEmbedTwitter(message, patternStrX); + if (message == null) return; + event.getMessage().reply(message).mentionRepliedUser(false).queue(); + } + + } + private static String fixEmbedTwitter(String url, String patternStr) { + Pattern pattern = Pattern.compile(patternStr); + Matcher matcher = pattern.matcher(url); + + if (matcher.find()) { + String userName = matcher.group(1); + String remainingUrl = matcher.group(2); + + return String.format("https://fxtwitter.com/%s/status/%s", userName, remainingUrl); + } + return null; + } +} From 7ea05bc48b124d422fbf8ee297752e9cd02aeb46 Mon Sep 17 00:00:00 2001 From: FerroEduardo <47820549+FerroEduardo@users.noreply.github.com> Date: Sun, 28 Jan 2024 11:34:28 -0300 Subject: [PATCH 2/7] refactor: optimize TwitterListener --- .../capivara/listeners/TwitterListener.java | 59 +++++++++++-------- 1 file changed, 33 insertions(+), 26 deletions(-) diff --git a/src/main/java/com/softawii/capivara/listeners/TwitterListener.java b/src/main/java/com/softawii/capivara/listeners/TwitterListener.java index ab78303..a84b6e7 100644 --- a/src/main/java/com/softawii/capivara/listeners/TwitterListener.java +++ b/src/main/java/com/softawii/capivara/listeners/TwitterListener.java @@ -1,21 +1,23 @@ package com.softawii.capivara.listeners; import net.dv8tion.jda.api.JDA; +import net.dv8tion.jda.api.entities.User; import net.dv8tion.jda.api.events.message.MessageReceivedEvent; import net.dv8tion.jda.api.hooks.ListenerAdapter; +import net.dv8tion.jda.api.requests.RestAction; import org.jetbrains.annotations.NotNull; import org.springframework.stereotype.Component; +import java.util.Optional; import java.util.regex.Matcher; import java.util.regex.Pattern; @Component public class TwitterListener extends ListenerAdapter { - private final String patternStrTwitter; - private final String patternStrX; + private final Pattern twitterPattern; + public TwitterListener(JDA jda) { - this.patternStrTwitter = "https://twitter.com/(\\w+)/status/(\\d+)"; - this.patternStrX = "https://x.com/(\\w+)/status/(\\d+)"; + this.twitterPattern = Pattern.compile("https://(twitter|x)\\.com/(?\\w+)/status/(?\\d+)"); jda.addEventListener(this); } @@ -23,31 +25,36 @@ public TwitterListener(JDA jda) { public void onMessageReceived(@NotNull MessageReceivedEvent event) { if (event.getAuthor().isBot()) return; - String message = event.getMessage().getContentRaw(); - - if (message.startsWith("https://twitter.com/")){ - message = fixEmbedTwitter(message, patternStrTwitter); - if (message == null) return; - event.getMessage().reply(message).mentionRepliedUser(false).queue(); - } - - if (message.startsWith("https://x.com/")){ - message = fixEmbedTwitter(message, patternStrX); - if (message == null) return; - event.getMessage().reply(message).mentionRepliedUser(false).queue(); - } - + String rawMessage = event.getMessage().getContentRaw(); + User author = event.getAuthor(); + Optional parsedMessage = parseMessage(rawMessage, author); + + parsedMessage.ifPresent(message -> { + RestAction.allOf( + event.getMessage() + .delete(), + event.getChannel() + .sendMessage(message) + .setSuppressedNotifications(true) + ).queue(); + }); } - private static String fixEmbedTwitter(String url, String patternStr) { - Pattern pattern = Pattern.compile(patternStr); - Matcher matcher = pattern.matcher(url); - if (matcher.find()) { - String userName = matcher.group(1); - String remainingUrl = matcher.group(2); + private Optional parseMessage(String message, User author) { + Matcher matcher = this.twitterPattern.matcher(message); - return String.format("https://fxtwitter.com/%s/status/%s", userName, remainingUrl); + if (matcher.find()) { + String twitterUsername = matcher.group("username"); + String twitterPostId = matcher.group("postId"); + + String result = String.format( + """ + Autor: %s + [Postagem](https://fxtwitter.com/%s/status/%s) + """, author.getAsMention(), twitterUsername, twitterPostId); + return Optional.of(result); } - return null; + + return Optional.empty(); } } From 583bc8997d618988ddeef14da3a53a132fa5cd6b Mon Sep 17 00:00:00 2001 From: FerroEduardo <47820549+FerroEduardo@users.noreply.github.com> Date: Sun, 28 Jan 2024 11:56:44 -0300 Subject: [PATCH 3/7] feat: create twitter service --- .../capivara/entity/TwitterTransform.java | 25 +++++++++++ .../capivara/listeners/TwitterGroup.java | 45 +++++++++++++++++++ .../{ => events}/TwitterListener.java | 17 ++++--- .../TwitterTransformRepository.java | 9 ++++ .../services/TwitterTransformService.java | 27 +++++++++++ 5 files changed, 117 insertions(+), 6 deletions(-) create mode 100644 src/main/java/com/softawii/capivara/entity/TwitterTransform.java create mode 100644 src/main/java/com/softawii/capivara/listeners/TwitterGroup.java rename src/main/java/com/softawii/capivara/listeners/{ => events}/TwitterListener.java (69%) create mode 100644 src/main/java/com/softawii/capivara/repository/TwitterTransformRepository.java create mode 100644 src/main/java/com/softawii/capivara/services/TwitterTransformService.java diff --git a/src/main/java/com/softawii/capivara/entity/TwitterTransform.java b/src/main/java/com/softawii/capivara/entity/TwitterTransform.java new file mode 100644 index 0000000..2f0569f --- /dev/null +++ b/src/main/java/com/softawii/capivara/entity/TwitterTransform.java @@ -0,0 +1,25 @@ +package com.softawii.capivara.entity; + +import javax.persistence.Entity; +import javax.persistence.Id; + +@Entity +public class TwitterTransform { + @Id + private Long guildId; + + public TwitterTransform() { + } + + public TwitterTransform(Long guildId) { + this.guildId = guildId; + } + + public Long getGuildId() { + return guildId; + } + + public void setGuildId(Long guildId) { + this.guildId = guildId; + } +} diff --git a/src/main/java/com/softawii/capivara/listeners/TwitterGroup.java b/src/main/java/com/softawii/capivara/listeners/TwitterGroup.java new file mode 100644 index 0000000..ddeff01 --- /dev/null +++ b/src/main/java/com/softawii/capivara/listeners/TwitterGroup.java @@ -0,0 +1,45 @@ +package com.softawii.capivara.listeners; + +import com.softawii.capivara.services.TwitterTransformService; +import com.softawii.curupira.annotations.ICommand; +import com.softawii.curupira.annotations.IGroup; +import net.dv8tion.jda.api.Permission; +import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@IGroup(name = "twitter", description = "Transformação de links do Twitter automática", hidden = false) +@Component +public class TwitterGroup { + + private static TwitterTransformService service; + + @Autowired + public void setCurupira(TwitterTransformService service) { + TwitterGroup.service = service; + } + + @ICommand(name = "enable", description = "Ativa o serviço de transformação de links do Twitter automática", permissions = {Permission.ADMINISTRATOR}) + public static void enable(SlashCommandInteractionEvent event) { + long guildId = event.getGuild().getIdLong(); + if (service.isEnabled(guildId)) { + event.reply("O serviço já está ativado").setEphemeral(true).queue(); + return; + } + + service.enable(guildId); + event.reply("O serviço foi está ativado").setEphemeral(true).queue(); + } + + @ICommand(name = "disable", description = "Desativa o serviço de transformação de links do Twitter automática", permissions = {Permission.ADMINISTRATOR}) + public static void disable(SlashCommandInteractionEvent event) { + long guildId = event.getGuild().getIdLong(); + if (!service.isEnabled(guildId)) { + event.reply("O serviço não está ativado").setEphemeral(true).queue(); + return; + } + + service.disable(guildId); + event.reply("O serviço foi está ativado").setEphemeral(true).queue(); + } +} diff --git a/src/main/java/com/softawii/capivara/listeners/TwitterListener.java b/src/main/java/com/softawii/capivara/listeners/events/TwitterListener.java similarity index 69% rename from src/main/java/com/softawii/capivara/listeners/TwitterListener.java rename to src/main/java/com/softawii/capivara/listeners/events/TwitterListener.java index a84b6e7..0f2f64f 100644 --- a/src/main/java/com/softawii/capivara/listeners/TwitterListener.java +++ b/src/main/java/com/softawii/capivara/listeners/events/TwitterListener.java @@ -1,5 +1,6 @@ -package com.softawii.capivara.listeners; +package com.softawii.capivara.listeners.events; +import com.softawii.capivara.services.TwitterTransformService; import net.dv8tion.jda.api.JDA; import net.dv8tion.jda.api.entities.User; import net.dv8tion.jda.api.events.message.MessageReceivedEvent; @@ -15,15 +16,18 @@ @Component public class TwitterListener extends ListenerAdapter { private final Pattern twitterPattern; + private final TwitterTransformService service; - public TwitterListener(JDA jda) { - this.twitterPattern = Pattern.compile("https://(twitter|x)\\.com/(?\\w+)/status/(?\\d+)"); + public TwitterListener(JDA jda, TwitterTransformService service) { + this.service = service; + this.twitterPattern = Pattern.compile("^https://(twitter|x)\\.com/(?\\w+)/status/(?\\d+)$"); jda.addEventListener(this); } @Override public void onMessageReceived(@NotNull MessageReceivedEvent event) { if (event.getAuthor().isBot()) return; + if (!service.isEnabled(event.getGuild().getIdLong())) return; String rawMessage = event.getMessage().getContentRaw(); User author = event.getAuthor(); @@ -40,8 +44,8 @@ public void onMessageReceived(@NotNull MessageReceivedEvent event) { }); } - private Optional parseMessage(String message, User author) { - Matcher matcher = this.twitterPattern.matcher(message); + private Optional parseMessage(String twitterLink, User author) { + Matcher matcher = this.twitterPattern.matcher(twitterLink); if (matcher.find()) { String twitterUsername = matcher.group("username"); @@ -50,8 +54,9 @@ private Optional parseMessage(String message, User author) { String result = String.format( """ Autor: %s + Link original: `%s` [Postagem](https://fxtwitter.com/%s/status/%s) - """, author.getAsMention(), twitterUsername, twitterPostId); + """, author.getAsMention(), twitterLink, twitterUsername, twitterPostId); return Optional.of(result); } diff --git a/src/main/java/com/softawii/capivara/repository/TwitterTransformRepository.java b/src/main/java/com/softawii/capivara/repository/TwitterTransformRepository.java new file mode 100644 index 0000000..caee36c --- /dev/null +++ b/src/main/java/com/softawii/capivara/repository/TwitterTransformRepository.java @@ -0,0 +1,9 @@ +package com.softawii.capivara.repository; + +import com.softawii.capivara.entity.TwitterTransform; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface TwitterTransformRepository extends JpaRepository { +} diff --git a/src/main/java/com/softawii/capivara/services/TwitterTransformService.java b/src/main/java/com/softawii/capivara/services/TwitterTransformService.java new file mode 100644 index 0000000..29d16dc --- /dev/null +++ b/src/main/java/com/softawii/capivara/services/TwitterTransformService.java @@ -0,0 +1,27 @@ +package com.softawii.capivara.services; + +import com.softawii.capivara.entity.TwitterTransform; +import com.softawii.capivara.repository.TwitterTransformRepository; +import org.springframework.stereotype.Service; + +@Service +public class TwitterTransformService { + + private final TwitterTransformRepository repository; + + public TwitterTransformService(TwitterTransformRepository repository) { + this.repository = repository; + } + + public boolean isEnabled(Long guildId) { + return repository.existsById(guildId); + } + + public void enable(Long guildId) { + repository.save(new TwitterTransform(guildId)); + } + + public void disable(Long guildId) { + repository.deleteById(guildId); + } +} From 2f33277d87e6bc2cc4e560df6d99a1e0dcdff3fc Mon Sep 17 00:00:00 2001 From: FerroEduardo <47820549+FerroEduardo@users.noreply.github.com> Date: Sun, 28 Jan 2024 12:03:29 -0300 Subject: [PATCH 4/7] bugfix: set column constraints --- .../java/com/softawii/capivara/entity/TwitterTransform.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/com/softawii/capivara/entity/TwitterTransform.java b/src/main/java/com/softawii/capivara/entity/TwitterTransform.java index 2f0569f..973d985 100644 --- a/src/main/java/com/softawii/capivara/entity/TwitterTransform.java +++ b/src/main/java/com/softawii/capivara/entity/TwitterTransform.java @@ -1,11 +1,13 @@ package com.softawii.capivara.entity; +import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; @Entity public class TwitterTransform { @Id + @Column(unique = true, nullable = false) private Long guildId; public TwitterTransform() { From 0a5c21dd3fea5b1697e7ca9394daf1f98b3e1584 Mon Sep 17 00:00:00 2001 From: yaansz Date: Sun, 28 Jan 2024 13:44:23 -0300 Subject: [PATCH 5/7] feat: adding option to delete bot embed --- .../capivara/listeners/TwitterGroup.java | 25 +++++++++++ .../listeners/events/TwitterListener.java | 41 ++++++++++++++----- 2 files changed, 56 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/softawii/capivara/listeners/TwitterGroup.java b/src/main/java/com/softawii/capivara/listeners/TwitterGroup.java index ddeff01..fa4e010 100644 --- a/src/main/java/com/softawii/capivara/listeners/TwitterGroup.java +++ b/src/main/java/com/softawii/capivara/listeners/TwitterGroup.java @@ -1,10 +1,13 @@ package com.softawii.capivara.listeners; import com.softawii.capivara.services.TwitterTransformService; +import com.softawii.curupira.annotations.IButton; import com.softawii.curupira.annotations.ICommand; import com.softawii.curupira.annotations.IGroup; import net.dv8tion.jda.api.Permission; +import net.dv8tion.jda.api.entities.channel.unions.MessageChannelUnion; import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent; +import net.dv8tion.jda.api.events.interaction.component.ButtonInteractionEvent; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -12,14 +15,17 @@ @Component public class TwitterGroup { + public static final String deleteBotTwitterMessage = "twitter-bot-message-delete"; private static TwitterTransformService service; @Autowired + @SuppressWarnings("unused") public void setCurupira(TwitterTransformService service) { TwitterGroup.service = service; } @ICommand(name = "enable", description = "Ativa o serviço de transformação de links do Twitter automática", permissions = {Permission.ADMINISTRATOR}) + @SuppressWarnings("unused") public static void enable(SlashCommandInteractionEvent event) { long guildId = event.getGuild().getIdLong(); if (service.isEnabled(guildId)) { @@ -32,6 +38,7 @@ public static void enable(SlashCommandInteractionEvent event) { } @ICommand(name = "disable", description = "Desativa o serviço de transformação de links do Twitter automática", permissions = {Permission.ADMINISTRATOR}) + @SuppressWarnings("unused") public static void disable(SlashCommandInteractionEvent event) { long guildId = event.getGuild().getIdLong(); if (!service.isEnabled(guildId)) { @@ -42,4 +49,22 @@ public static void disable(SlashCommandInteractionEvent event) { service.disable(guildId); event.reply("O serviço foi está ativado").setEphemeral(true).queue(); } + + @IButton(id=deleteBotTwitterMessage) + @SuppressWarnings("unused") + public static void delete(ButtonInteractionEvent event) { + // Format: ButtonID:Owner:MessageID + String ownerId = event.getComponentId().split(":")[1]; + String messageOwner = event.getMember().getId(); + + MessageChannelUnion channel = event.getChannel(); + + if(!messageOwner.equals(ownerId)) { + event.reply("Você não pode deletar essa mensagem").setEphemeral(true).queue(); + return; + } + + event.reply("Mensagem deletada").setEphemeral(true).queue(); + channel.deleteMessageById(event.getMessageId()).queue(); + } } diff --git a/src/main/java/com/softawii/capivara/listeners/events/TwitterListener.java b/src/main/java/com/softawii/capivara/listeners/events/TwitterListener.java index 0f2f64f..905b3ec 100644 --- a/src/main/java/com/softawii/capivara/listeners/events/TwitterListener.java +++ b/src/main/java/com/softawii/capivara/listeners/events/TwitterListener.java @@ -1,10 +1,15 @@ package com.softawii.capivara.listeners.events; +import com.softawii.capivara.listeners.TwitterGroup; import com.softawii.capivara.services.TwitterTransformService; import net.dv8tion.jda.api.JDA; +import net.dv8tion.jda.api.entities.Message; import net.dv8tion.jda.api.entities.User; +import net.dv8tion.jda.api.entities.channel.unions.MessageChannelUnion; import net.dv8tion.jda.api.events.message.MessageReceivedEvent; +import net.dv8tion.jda.api.events.message.MessageUpdateEvent; import net.dv8tion.jda.api.hooks.ListenerAdapter; +import net.dv8tion.jda.api.interactions.components.buttons.Button; import net.dv8tion.jda.api.requests.RestAction; import org.jetbrains.annotations.NotNull; import org.springframework.stereotype.Component; @@ -14,6 +19,7 @@ import java.util.regex.Pattern; @Component +@SuppressWarnings("unused") public class TwitterListener extends ListenerAdapter { private final Pattern twitterPattern; private final TwitterTransformService service; @@ -27,21 +33,36 @@ public TwitterListener(JDA jda, TwitterTransformService service) { @Override public void onMessageReceived(@NotNull MessageReceivedEvent event) { if (event.getAuthor().isBot()) return; - if (!service.isEnabled(event.getGuild().getIdLong())) return; String rawMessage = event.getMessage().getContentRaw(); User author = event.getAuthor(); Optional parsedMessage = parseMessage(rawMessage, author); - parsedMessage.ifPresent(message -> { - RestAction.allOf( - event.getMessage() - .delete(), - event.getChannel() - .sendMessage(message) - .setSuppressedNotifications(true) - ).queue(); - }); + parsedMessage.ifPresent(message -> createTweetMessage(event.getGuild().getIdLong(), message, event.getMessage())); + } + + @Override + public void onMessageUpdate(@NotNull MessageUpdateEvent event) { + if (event.getAuthor().isBot()) return; + + String rawMessage = event.getMessage().getContentRaw(); + User author = event.getAuthor(); + Optional parsedMessage = parseMessage(rawMessage, author); + + parsedMessage.ifPresent(message -> createTweetMessage(event.getGuild().getIdLong(), message, event.getMessage())); + } + + private void createTweetMessage(Long guildId, String replacementMessage, Message originalMessage) { + if (!service.isEnabled(guildId)) return; + + MessageChannelUnion channel = originalMessage.getChannel(); + + RestAction.allOf( + originalMessage.delete(), + channel.sendMessage(replacementMessage) + .addActionRow(Button.danger(String.format("%s:%s", TwitterGroup.deleteBotTwitterMessage, originalMessage.getAuthor().getId()), "Delete")) + .setSuppressedNotifications(true) + ).queue(); } private Optional parseMessage(String twitterLink, User author) { From 32ff9a19c093dfecf7dbacd3d3e1afe278732095 Mon Sep 17 00:00:00 2001 From: FerroEduardo <47820549+FerroEduardo@users.noreply.github.com> Date: Sun, 28 Jan 2024 14:13:47 -0300 Subject: [PATCH 6/7] bugfix: make regex work with copied link from app https://stackoverflow.com/a/17773849 --- .../capivara/listeners/TwitterGroup.java | 25 ++++++++++++------- .../listeners/events/TwitterListener.java | 5 ++-- 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/softawii/capivara/listeners/TwitterGroup.java b/src/main/java/com/softawii/capivara/listeners/TwitterGroup.java index fa4e010..bec5151 100644 --- a/src/main/java/com/softawii/capivara/listeners/TwitterGroup.java +++ b/src/main/java/com/softawii/capivara/listeners/TwitterGroup.java @@ -8,6 +8,7 @@ import net.dv8tion.jda.api.entities.channel.unions.MessageChannelUnion; import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent; import net.dv8tion.jda.api.events.interaction.component.ButtonInteractionEvent; +import net.dv8tion.jda.api.interactions.components.buttons.Button; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -15,8 +16,8 @@ @Component public class TwitterGroup { - public static final String deleteBotTwitterMessage = "twitter-bot-message-delete"; - private static TwitterTransformService service; + public static final String deleteBotTwitterMessage = "twitter-bot-message-delete"; + private static TwitterTransformService service; @Autowired @SuppressWarnings("unused") @@ -24,7 +25,8 @@ public void setCurupira(TwitterTransformService service) { TwitterGroup.service = service; } - @ICommand(name = "enable", description = "Ativa o serviço de transformação de links do Twitter automática", permissions = {Permission.ADMINISTRATOR}) + @ICommand(name = "enable", description = "Ativa o serviço de transformação de links do Twitter automática", + permissions = {Permission.ADMINISTRATOR}) @SuppressWarnings("unused") public static void enable(SlashCommandInteractionEvent event) { long guildId = event.getGuild().getIdLong(); @@ -37,7 +39,8 @@ public static void enable(SlashCommandInteractionEvent event) { event.reply("O serviço foi está ativado").setEphemeral(true).queue(); } - @ICommand(name = "disable", description = "Desativa o serviço de transformação de links do Twitter automática", permissions = {Permission.ADMINISTRATOR}) + @ICommand(name = "disable", description = "Desativa o serviço de transformação de links do Twitter automática", + permissions = {Permission.ADMINISTRATOR}) @SuppressWarnings("unused") public static void disable(SlashCommandInteractionEvent event) { long guildId = event.getGuild().getIdLong(); @@ -50,21 +53,25 @@ public static void disable(SlashCommandInteractionEvent event) { event.reply("O serviço foi está ativado").setEphemeral(true).queue(); } - @IButton(id=deleteBotTwitterMessage) + @IButton(id = deleteBotTwitterMessage) @SuppressWarnings("unused") public static void delete(ButtonInteractionEvent event) { // Format: ButtonID:Owner:MessageID - String ownerId = event.getComponentId().split(":")[1]; + String ownerId = event.getComponentId().split(":")[1]; String messageOwner = event.getMember().getId(); MessageChannelUnion channel = event.getChannel(); - if(!messageOwner.equals(ownerId)) { - event.reply("Você não pode deletar essa mensagem").setEphemeral(true).queue(); + if (!messageOwner.equals(ownerId)) { + event.reply("Você não pode apagar essa mensagem").setEphemeral(true).queue(); return; } - event.reply("Mensagem deletada").setEphemeral(true).queue(); + event.reply("Mensagem apagada").setEphemeral(true).queue(); channel.deleteMessageById(event.getMessageId()).queue(); } + + public static Button generateDeleteButton(long authorId) { + return Button.danger(String.format("%s:%s", deleteBotTwitterMessage, authorId), "Apagar"); + } } diff --git a/src/main/java/com/softawii/capivara/listeners/events/TwitterListener.java b/src/main/java/com/softawii/capivara/listeners/events/TwitterListener.java index 905b3ec..65b53dc 100644 --- a/src/main/java/com/softawii/capivara/listeners/events/TwitterListener.java +++ b/src/main/java/com/softawii/capivara/listeners/events/TwitterListener.java @@ -9,7 +9,6 @@ import net.dv8tion.jda.api.events.message.MessageReceivedEvent; import net.dv8tion.jda.api.events.message.MessageUpdateEvent; import net.dv8tion.jda.api.hooks.ListenerAdapter; -import net.dv8tion.jda.api.interactions.components.buttons.Button; import net.dv8tion.jda.api.requests.RestAction; import org.jetbrains.annotations.NotNull; import org.springframework.stereotype.Component; @@ -26,7 +25,7 @@ public class TwitterListener extends ListenerAdapter { public TwitterListener(JDA jda, TwitterTransformService service) { this.service = service; - this.twitterPattern = Pattern.compile("^https://(twitter|x)\\.com/(?\\w+)/status/(?\\d+)$"); + this.twitterPattern = Pattern.compile("^https://(twitter|x)\\.com/(?\\w+)/status/(?\\d+)([-a-zA-Z0-9()@:%_+.~#?&/=]*)$"); // https://stackoverflow.com/a/17773849 jda.addEventListener(this); } @@ -60,7 +59,7 @@ private void createTweetMessage(Long guildId, String replacementMessage, Message RestAction.allOf( originalMessage.delete(), channel.sendMessage(replacementMessage) - .addActionRow(Button.danger(String.format("%s:%s", TwitterGroup.deleteBotTwitterMessage, originalMessage.getAuthor().getId()), "Delete")) + .addActionRow(TwitterGroup.generateDeleteButton(originalMessage.getAuthor().getIdLong())) .setSuppressedNotifications(true) ).queue(); } From 4c39e1bedb1662ed702188dd743aa61390285ee4 Mon Sep 17 00:00:00 2001 From: FerroEduardo <47820549+FerroEduardo@users.noreply.github.com> Date: Sun, 28 Jan 2024 23:12:01 -0300 Subject: [PATCH 7/7] refactor: rename entity --- ...witterTransform.java => TwitterParserConfig.java} | 6 +++--- .../softawii/capivara/listeners/TwitterGroup.java | 10 +++++----- .../capivara/listeners/events/TwitterListener.java | 8 ++++---- ...itory.java => TwitterParserConfigRepository.java} | 4 ++-- ...mService.java => TwitterParserConfigService.java} | 12 ++++++------ 5 files changed, 20 insertions(+), 20 deletions(-) rename src/main/java/com/softawii/capivara/entity/{TwitterTransform.java => TwitterParserConfig.java} (77%) rename src/main/java/com/softawii/capivara/repository/{TwitterTransformRepository.java => TwitterParserConfigRepository.java} (52%) rename src/main/java/com/softawii/capivara/services/{TwitterTransformService.java => TwitterParserConfigService.java} (50%) diff --git a/src/main/java/com/softawii/capivara/entity/TwitterTransform.java b/src/main/java/com/softawii/capivara/entity/TwitterParserConfig.java similarity index 77% rename from src/main/java/com/softawii/capivara/entity/TwitterTransform.java rename to src/main/java/com/softawii/capivara/entity/TwitterParserConfig.java index 973d985..a5a8fbc 100644 --- a/src/main/java/com/softawii/capivara/entity/TwitterTransform.java +++ b/src/main/java/com/softawii/capivara/entity/TwitterParserConfig.java @@ -5,15 +5,15 @@ import javax.persistence.Id; @Entity -public class TwitterTransform { +public class TwitterParserConfig { @Id @Column(unique = true, nullable = false) private Long guildId; - public TwitterTransform() { + public TwitterParserConfig() { } - public TwitterTransform(Long guildId) { + public TwitterParserConfig(Long guildId) { this.guildId = guildId; } diff --git a/src/main/java/com/softawii/capivara/listeners/TwitterGroup.java b/src/main/java/com/softawii/capivara/listeners/TwitterGroup.java index bec5151..2f7965b 100644 --- a/src/main/java/com/softawii/capivara/listeners/TwitterGroup.java +++ b/src/main/java/com/softawii/capivara/listeners/TwitterGroup.java @@ -1,6 +1,6 @@ package com.softawii.capivara.listeners; -import com.softawii.capivara.services.TwitterTransformService; +import com.softawii.capivara.services.TwitterParserConfigService; import com.softawii.curupira.annotations.IButton; import com.softawii.curupira.annotations.ICommand; import com.softawii.curupira.annotations.IGroup; @@ -16,12 +16,12 @@ @Component public class TwitterGroup { - public static final String deleteBotTwitterMessage = "twitter-bot-message-delete"; - private static TwitterTransformService service; + public static final String deleteBotTwitterMessage = "twitter-bot-message-delete"; + private static TwitterParserConfigService service; @Autowired @SuppressWarnings("unused") - public void setCurupira(TwitterTransformService service) { + public void setCurupira(TwitterParserConfigService service) { TwitterGroup.service = service; } @@ -56,7 +56,7 @@ public static void disable(SlashCommandInteractionEvent event) { @IButton(id = deleteBotTwitterMessage) @SuppressWarnings("unused") public static void delete(ButtonInteractionEvent event) { - // Format: ButtonID:Owner:MessageID + // Format: ButtonID:Owner String ownerId = event.getComponentId().split(":")[1]; String messageOwner = event.getMember().getId(); diff --git a/src/main/java/com/softawii/capivara/listeners/events/TwitterListener.java b/src/main/java/com/softawii/capivara/listeners/events/TwitterListener.java index 65b53dc..d6cf718 100644 --- a/src/main/java/com/softawii/capivara/listeners/events/TwitterListener.java +++ b/src/main/java/com/softawii/capivara/listeners/events/TwitterListener.java @@ -1,7 +1,7 @@ package com.softawii.capivara.listeners.events; import com.softawii.capivara.listeners.TwitterGroup; -import com.softawii.capivara.services.TwitterTransformService; +import com.softawii.capivara.services.TwitterParserConfigService; import net.dv8tion.jda.api.JDA; import net.dv8tion.jda.api.entities.Message; import net.dv8tion.jda.api.entities.User; @@ -20,10 +20,10 @@ @Component @SuppressWarnings("unused") public class TwitterListener extends ListenerAdapter { - private final Pattern twitterPattern; - private final TwitterTransformService service; + private final Pattern twitterPattern; + private final TwitterParserConfigService service; - public TwitterListener(JDA jda, TwitterTransformService service) { + public TwitterListener(JDA jda, TwitterParserConfigService service) { this.service = service; this.twitterPattern = Pattern.compile("^https://(twitter|x)\\.com/(?\\w+)/status/(?\\d+)([-a-zA-Z0-9()@:%_+.~#?&/=]*)$"); // https://stackoverflow.com/a/17773849 jda.addEventListener(this); diff --git a/src/main/java/com/softawii/capivara/repository/TwitterTransformRepository.java b/src/main/java/com/softawii/capivara/repository/TwitterParserConfigRepository.java similarity index 52% rename from src/main/java/com/softawii/capivara/repository/TwitterTransformRepository.java rename to src/main/java/com/softawii/capivara/repository/TwitterParserConfigRepository.java index caee36c..8158720 100644 --- a/src/main/java/com/softawii/capivara/repository/TwitterTransformRepository.java +++ b/src/main/java/com/softawii/capivara/repository/TwitterParserConfigRepository.java @@ -1,9 +1,9 @@ package com.softawii.capivara.repository; -import com.softawii.capivara.entity.TwitterTransform; +import com.softawii.capivara.entity.TwitterParserConfig; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @Repository -public interface TwitterTransformRepository extends JpaRepository { +public interface TwitterParserConfigRepository extends JpaRepository { } diff --git a/src/main/java/com/softawii/capivara/services/TwitterTransformService.java b/src/main/java/com/softawii/capivara/services/TwitterParserConfigService.java similarity index 50% rename from src/main/java/com/softawii/capivara/services/TwitterTransformService.java rename to src/main/java/com/softawii/capivara/services/TwitterParserConfigService.java index 29d16dc..959c723 100644 --- a/src/main/java/com/softawii/capivara/services/TwitterTransformService.java +++ b/src/main/java/com/softawii/capivara/services/TwitterParserConfigService.java @@ -1,15 +1,15 @@ package com.softawii.capivara.services; -import com.softawii.capivara.entity.TwitterTransform; -import com.softawii.capivara.repository.TwitterTransformRepository; +import com.softawii.capivara.entity.TwitterParserConfig; +import com.softawii.capivara.repository.TwitterParserConfigRepository; import org.springframework.stereotype.Service; @Service -public class TwitterTransformService { +public class TwitterParserConfigService { - private final TwitterTransformRepository repository; + private final TwitterParserConfigRepository repository; - public TwitterTransformService(TwitterTransformRepository repository) { + public TwitterParserConfigService(TwitterParserConfigRepository repository) { this.repository = repository; } @@ -18,7 +18,7 @@ public boolean isEnabled(Long guildId) { } public void enable(Long guildId) { - repository.save(new TwitterTransform(guildId)); + repository.save(new TwitterParserConfig(guildId)); } public void disable(Long guildId) {