Skip to content

Commit

Permalink
feat: Updating Curupria
Browse files Browse the repository at this point in the history
  • Loading branch information
yaansz committed Aug 28, 2024
1 parent 1f6d20d commit 5611493
Show file tree
Hide file tree
Showing 19 changed files with 449 additions and 1,270 deletions.
14 changes: 7 additions & 7 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
plugins {
id 'java'
id 'application'
id 'org.springframework.boot' version '2.7.0'
id 'org.springframework.boot' version '2.7.18'
id 'com.github.johnrengelman.shadow' version '8.1.1'
}

Expand All @@ -24,7 +24,7 @@ springBoot {
dependencies {
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.2'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.2'
implementation ('org.springframework.boot:spring-boot-starter-data-jpa:2.7.0') {
implementation ('org.springframework.boot:spring-boot-starter-data-jpa:2.7.18') {
exclude module: 'spring-boot-starter-logging'
}
implementation 'org.springframework.boot:spring-boot-starter-log4j2:2.7.0'
Expand All @@ -33,12 +33,12 @@ dependencies {
implementation 'com.h2database:h2:2.1.212'
implementation 'org.postgresql:postgresql:42.3.6'

implementation("net.dv8tion:JDA:5.0.0-beta.16") {
implementation("net.dv8tion:JDA:5.1.0") {
exclude module: 'opus-java'
}

implementation("com.github.Softawii:curupira:v0.3.0")
implementation("com.github.Softawii:curupira:v0.3.0:all")
implementation("com.github.Softawii:curupira:v1.0.0-alpha")
implementation("com.github.Softawii:curupira:v1.0.0-alpha")
}

tasks.register('deploy') {
Expand All @@ -65,5 +65,5 @@ test {
useJUnitPlatform()
}

sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
sourceCompatibility = JavaVersion.VERSION_21
targetCompatibility = JavaVersion.VERSION_21
8 changes: 4 additions & 4 deletions src/main/java/com/softawii/capivara/config/SpringConfig.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
package com.softawii.capivara.config;

import com.softawii.capivara.utils.CapivaraExceptionHandler;
import com.softawii.curupira.core.Curupira;
import com.softawii.curupira.v2.core.CurupiraBoot;
import com.softawii.curupira.v2.integration.ContextProvider;
import net.dv8tion.jda.api.JDA;
import net.dv8tion.jda.api.JDABuilder;
import net.dv8tion.jda.api.requests.GatewayIntent;
Expand Down Expand Up @@ -100,16 +101,15 @@ public CapivaraExceptionHandler capivaraExceptionHandler() {
}

@Bean
public Curupira curupira(JDA jda, @Autowired(required = false) CapivaraExceptionHandler exceptionHandler) {
public CurupiraBoot curupira(JDA jda, ContextProvider context) {
String pkg = "com.softawii.capivara.listeners";
String resetEnv = env.getProperty("curupira.reset", "false");
boolean reset = Boolean.parseBoolean(resetEnv);
LOGGER.info("curupira.reset: " + reset);

return new Curupira(jda, reset, exceptionHandler, pkg);
return new CurupiraBoot(jda, context, reset, pkg);
}


Properties additionalProperties() {
Properties properties = new Properties();
properties.setProperty("hibernate.hbm2ddl.auto", env.getProperty("hibernate.hbm2ddl.auto"));
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.softawii.capivara.config;

import com.softawii.curupira.v2.integration.ContextProvider;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component;

@Component
public class SpringContextProvider implements ContextProvider {

private final ApplicationContext context;

public SpringContextProvider(ApplicationContext context) {
this.context = context;
}

@Override
public <T> T getInstance(Class<T> aClass) {
return context.getBean(aClass);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
package com.softawii.capivara.controller;

import com.softawii.capivara.exceptions.MissingPermissionsException;
import com.softawii.capivara.services.TwitterParserConfigService;
import com.softawii.curupira.v2.annotations.DiscordController;
import com.softawii.curupira.v2.annotations.RequestInfo;
import com.softawii.curupira.v2.annotations.commands.DiscordCommand;
import com.softawii.curupira.v2.annotations.interactions.DiscordButton;
import com.softawii.curupira.v2.api.TextLocaleResponse;
import net.dv8tion.jda.api.Permission;
import net.dv8tion.jda.api.entities.Guild;
import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.entities.channel.unions.MessageChannelUnion;
import net.dv8tion.jda.api.events.interaction.component.ButtonInteractionEvent;
import net.dv8tion.jda.api.interactions.DiscordLocale;
import net.dv8tion.jda.api.interactions.components.buttons.Button;
import org.springframework.stereotype.Component;

@Component
@DiscordController(parent = "social", value = "twitter", description = "Twitter Controller", permissions = Permission.ADMINISTRATOR,
resource = "social", locales = DiscordLocale.PORTUGUESE_BRAZILIAN)
public class SocialTwitterGroup {
public static final String deleteBotTwitterMessage = "twitter-bot-message-delete";
private final TwitterParserConfigService service;

public SocialTwitterGroup(TwitterParserConfigService service) {
this.service = service;
}

public static Button generateDeleteButton(long authorId) {
return Button.danger(String.format("%s:%s", deleteBotTwitterMessage, authorId), "Apagar");
}

@DiscordCommand(name = "enable", description = "Enable the automatic Twitter link transformation service")
public TextLocaleResponse enable(Guild guild) {
service.enable(guild.getIdLong());
return new TextLocaleResponse("social.twitter.enable.response", guild.getName());
}

@DiscordCommand(name = "disable", description = "Disable the automatic Twitter link transformation service")
public TextLocaleResponse disable(Guild guild) {
service.disable(guild.getIdLong());
return new TextLocaleResponse("social.twitter.disable.response", guild.getName());
}

@DiscordButton(name = deleteBotTwitterMessage, ephemeral = true)
public TextLocaleResponse delete(ButtonInteractionEvent event, @RequestInfo Member member) throws MissingPermissionsException {
// Format: ButtonID:Owner
String ownerId = event.getComponentId().split(":")[1];
String messageOwner = member.getId();

MessageChannelUnion channel = event.getChannel();

if (!messageOwner.equals(ownerId)) {
throw new MissingPermissionsException();
}

channel.deleteMessageById(event.getMessageId()).queue();
return new TextLocaleResponse("twitter.delete.response");
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
package com.softawii.capivara.controller;

import com.softawii.capivara.core.DroneManager;
import com.softawii.capivara.exceptions.KeyNotFoundException;
import com.softawii.capivara.exceptions.MissingPermissionsException;
import com.softawii.capivara.exceptions.NotInTheDroneException;
import com.softawii.curupira.v2.annotations.DiscordController;
import com.softawii.curupira.v2.annotations.RequestInfo;
import com.softawii.curupira.v2.annotations.commands.DiscordCommand;
import com.softawii.curupira.v2.annotations.commands.DiscordParameter;
import com.softawii.curupira.v2.api.TextLocaleResponse;
import net.dv8tion.jda.api.Permission;
import net.dv8tion.jda.api.entities.Guild;
import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.entities.channel.concrete.VoiceChannel;
import net.dv8tion.jda.api.entities.channel.middleman.AudioChannel;
import org.springframework.stereotype.Component;

import java.util.Collections;
import java.util.List;

@Component
@DiscordController(value = "drone", description = "Voice Drone Controller")
public class VoiceDroneController {
private final DroneManager droneManager;
public static final long inviteDeadline = 1000L * 10L * 60L;

public VoiceDroneController(DroneManager droneManager) {
this.droneManager = droneManager;
}

private VoiceChannel validateMember(Member member) throws KeyNotFoundException, MissingPermissionsException, NotInTheDroneException {
if(!member.getVoiceState().inAudioChannel()) throw new NotInTheDroneException();

VoiceChannel channel = member.getVoiceState().getChannel().asVoiceChannel();

if(!droneManager.canInteract(channel, member)) throw new MissingPermissionsException();

return channel;
}

@DiscordCommand(name = "invite", description = "Invite a user to join in a channel", ephemeral = true)
public TextLocaleResponse invite(@RequestInfo Member member, @DiscordParameter(name = "name", description = "User to invite") Member invited) throws NotInTheDroneException, MissingPermissionsException, KeyNotFoundException {
VoiceChannel channel = validateMember(member);
channel.createInvite().setUnique(true).deadline(System.currentTimeMillis() + inviteDeadline).queue(q -> {
channel.getManager().putPermissionOverride(invited, List.of(Permission.VIEW_CHANNEL, Permission.VOICE_CONNECT), Collections.emptyList()).queue();
String name = member.getEffectiveName() + (member.getNickname() != null ? " (" + member.getNickname() + ")" : "");
invited.getUser().openPrivateChannel().queue(chn -> chn.sendMessage(name + "invited you to join in a channel!\n" + q.getUrl()).queue());
});

return new TextLocaleResponse("drone.invite.response", invited.getEffectiveName());
}

@DiscordCommand(name = "kick", description = "Kick a user from a channel", ephemeral = true)
public TextLocaleResponse kick(Guild guild, @RequestInfo Member member, @DiscordParameter(name = "name", description = "User to kick") Member kicked) throws NotInTheDroneException, MissingPermissionsException, KeyNotFoundException {
VoiceChannel channel = validateMember(member);
channel.getManager().putPermissionOverride(kicked, Collections.emptyList(), List.of(Permission.VIEW_CHANNEL, Permission.VOICE_CONNECT)).queue();

if (kicked.getVoiceState().getChannel() != null) {
AudioChannel to_kick_channel = kicked.getVoiceState().getChannel();
if (to_kick_channel.getIdLong() == channel.getIdLong()) {
guild.moveVoiceMember(kicked, null).queue();
return new TextLocaleResponse("drone.kick.response", kicked.getEffectiveName());
} else {
return new TextLocaleResponse("drone.kick.response.error.not_in_channel", kicked.getEffectiveName());
}
} else {
return new TextLocaleResponse("drone.kick.response.error.not_in_channel", kicked.getEffectiveName());
}
}
}
Loading

0 comments on commit 5611493

Please sign in to comment.