mirror of
https://github.com/Sheldan/abstracto.git
synced 2026-04-21 13:38:44 +00:00
changed catch block in join listener for Exception, so the listener dont interrupt one another
fixed join template added join listener to check if a joined user should be muted changed cached message to be an intant instead fixed wrong id in mute table moved the timestamps for mute notifications to the footer fixed a case for message embeds, when the embed does not have a description
This commit is contained in:
@@ -0,0 +1,36 @@
|
|||||||
|
package dev.sheldan.abstracto.moderation.listener;
|
||||||
|
|
||||||
|
import dev.sheldan.abstracto.core.listener.JoinListener;
|
||||||
|
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
||||||
|
import dev.sheldan.abstracto.moderation.config.ModerationFeatures;
|
||||||
|
import dev.sheldan.abstracto.moderation.service.MuteService;
|
||||||
|
import dev.sheldan.abstracto.moderation.service.management.MuteManagementService;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import net.dv8tion.jda.api.entities.Guild;
|
||||||
|
import net.dv8tion.jda.api.entities.Member;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
@Component
|
||||||
|
@Slf4j
|
||||||
|
public class JoinMuteListener implements JoinListener {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private MuteManagementService muteManagementService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private MuteService muteService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void execute(Member member, Guild guild, AUserInAServer aUserInAServer) {
|
||||||
|
if(muteManagementService.hasActiveMute(aUserInAServer)) {
|
||||||
|
log.info("Re-muting user {} which joined the server {}, because the mute has not ended yet.", member.getIdLong(), guild.getIdLong());
|
||||||
|
muteService.applyMuteRole(aUserInAServer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getFeature() {
|
||||||
|
return ModerationFeatures.MUTING;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,10 +1,11 @@
|
|||||||
package dev.sheldan.abstracto.moderation.repository;
|
package dev.sheldan.abstracto.moderation.repository;
|
||||||
|
|
||||||
|
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
||||||
import dev.sheldan.abstracto.moderation.models.database.Mute;
|
import dev.sheldan.abstracto.moderation.models.database.Mute;
|
||||||
import org.springframework.data.jpa.repository.JpaRepository;
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
import org.springframework.stereotype.Repository;
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
@Repository
|
@Repository
|
||||||
public interface MuteRepository extends JpaRepository<Mute, Long> {
|
public interface MuteRepository extends JpaRepository<Mute, Long> {
|
||||||
|
boolean existsByMutedUserAndMuteEndedFalse(AUserInAServer userInAServer);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -87,7 +87,7 @@ public class MuteServiceBean implements MuteService {
|
|||||||
|
|
||||||
FullUser mutingUser = FullUser
|
FullUser mutingUser = FullUser
|
||||||
.builder()
|
.builder()
|
||||||
.aUserInAServer(userManagementService.loadUser(memberToMute))
|
.aUserInAServer(userManagementService.loadUser(mutingMember))
|
||||||
.member(mutingMember)
|
.member(mutingMember)
|
||||||
.build();
|
.build();
|
||||||
return muteUser(mutedUser, mutingUser, reason, unmuteDate, message);
|
return muteUser(mutedUser, mutingUser, reason, unmuteDate, message);
|
||||||
@@ -123,8 +123,7 @@ public class MuteServiceBean implements MuteService {
|
|||||||
throw new MuteException("Mute role for server has not been setup");
|
throw new MuteException("Mute role for server has not been setup");
|
||||||
}
|
}
|
||||||
AUserInAServer userInServerBeingMuted = userBeingMuted.getAUserInAServer();
|
AUserInAServer userInServerBeingMuted = userBeingMuted.getAUserInAServer();
|
||||||
MuteRole muteRole = muteRoleManagementService.retrieveMuteRoleForServer(userInServerBeingMuted.getServerReference());
|
applyMuteRole(userInServerBeingMuted);
|
||||||
roleService.addRoleToUser(userInServerBeingMuted, muteRole.getRole());
|
|
||||||
AServerAChannelMessage origin = null;
|
AServerAChannelMessage origin = null;
|
||||||
if(message != null) {
|
if(message != null) {
|
||||||
AChannel channel = channelManagementService.loadChannel(message.getChannel().getIdLong());
|
AChannel channel = channelManagementService.loadChannel(message.getChannel().getIdLong());
|
||||||
@@ -147,6 +146,12 @@ public class MuteServiceBean implements MuteService {
|
|||||||
return mute;
|
return mute;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void applyMuteRole(AUserInAServer aUserInAServer) {
|
||||||
|
MuteRole muteRole = muteRoleManagementService.retrieveMuteRoleForServer(aUserInAServer.getServerReference());
|
||||||
|
roleService.addRoleToUser(aUserInAServer, muteRole.getRole());
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void startUnmuteJobFor(Instant unmuteDate, Mute mute) {
|
public void startUnmuteJobFor(Instant unmuteDate, Mute mute) {
|
||||||
Duration muteDuration = Duration.between(Instant.now(), unmuteDate);
|
Duration muteDuration = Duration.between(Instant.now(), unmuteDate);
|
||||||
@@ -205,6 +210,8 @@ public class MuteServiceBean implements MuteService {
|
|||||||
.server(mute.getMutingServer())
|
.server(mute.getMutingServer())
|
||||||
.build();
|
.build();
|
||||||
sendUnmuteLog(unMuteLog);
|
sendUnmuteLog(unMuteLog);
|
||||||
|
mute.setMuteEnded(true);
|
||||||
|
muteManagementService.saveMute(mute);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ public class MuteManagementServiceBean implements MuteManagementService {
|
|||||||
.mutingChannel(origin.getChannel())
|
.mutingChannel(origin.getChannel())
|
||||||
.messageId(origin.getMessageId())
|
.messageId(origin.getMessageId())
|
||||||
.reason(reason)
|
.reason(reason)
|
||||||
|
.muteEnded(false)
|
||||||
.build();
|
.build();
|
||||||
muteRepository.save(mute);
|
muteRepository.save(mute);
|
||||||
return mute;
|
return mute;
|
||||||
@@ -40,4 +41,17 @@ public class MuteManagementServiceBean implements MuteManagementService {
|
|||||||
public Mute findMute(Long muteId) {
|
public Mute findMute(Long muteId) {
|
||||||
return muteRepository.getOne(muteId);
|
return muteRepository.getOne(muteId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Mute saveMute(Mute mute) {
|
||||||
|
muteRepository.save(mute);
|
||||||
|
return mute;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean hasActiveMute(AUserInAServer userInAServer) {
|
||||||
|
return muteRepository.existsByMutedUserAndMuteEndedFalse(userInAServer);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,10 +28,6 @@
|
|||||||
"name": "Reason",
|
"name": "Reason",
|
||||||
"value": "${mute.reason}"
|
"value": "${mute.reason}"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "Muted from",
|
|
||||||
"value": "${formatInstant(mute.muteDate, "yyyy-MM-dd HH:mm:ss")}"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "Muted for",
|
"name": "Muted for",
|
||||||
"value": "${fmtDuration(muteDuration)}"
|
"value": "${fmtDuration(muteDuration)}"
|
||||||
@@ -43,5 +39,6 @@
|
|||||||
],
|
],
|
||||||
"footer": {
|
"footer": {
|
||||||
"text": "Mute #${mute.id}"
|
"text": "Mute #${mute.id}"
|
||||||
}
|
},
|
||||||
|
"timeStamp": "${mute.muteDate}"
|
||||||
}
|
}
|
||||||
@@ -39,5 +39,6 @@
|
|||||||
],
|
],
|
||||||
"footer": {
|
"footer": {
|
||||||
"text": "Mute #${mute.id}"
|
"text": "Mute #${mute.id}"
|
||||||
}
|
},
|
||||||
|
"timeStamp": "${mute.muteTargetDate}"
|
||||||
}
|
}
|
||||||
@@ -35,6 +35,8 @@ public class Mute {
|
|||||||
|
|
||||||
private Instant muteTargetDate;
|
private Instant muteTargetDate;
|
||||||
|
|
||||||
|
private Boolean muteEnded;
|
||||||
|
|
||||||
@Column
|
@Column
|
||||||
private Long messageId;
|
private Long messageId;
|
||||||
|
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ public interface MuteService {
|
|||||||
Mute muteMember(Member memberToMute, Member userMuting, String reason, Instant unmuteDate, Message message);
|
Mute muteMember(Member memberToMute, Member userMuting, String reason, Instant unmuteDate, Message message);
|
||||||
Mute muteMember(AUserInAServer member, AUserInAServer userMuting, String reason, Instant unmuteDate, Message message);
|
Mute muteMember(AUserInAServer member, AUserInAServer userMuting, String reason, Instant unmuteDate, Message message);
|
||||||
Mute muteUser(FullUser userToMute, FullUser userMuting, String reason, Instant unmuteDate, Message message);
|
Mute muteUser(FullUser userToMute, FullUser userMuting, String reason, Instant unmuteDate, Message message);
|
||||||
|
void applyMuteRole(AUserInAServer aUserInAServer);
|
||||||
void muteMemberWithLog(Member memberToMute, Member memberMuting, String reason, Instant unmuteDate, MuteLog log, Message message);
|
void muteMemberWithLog(Member memberToMute, Member memberMuting, String reason, Instant unmuteDate, MuteLog log, Message message);
|
||||||
void startUnmuteJobFor(Instant unmuteDate, Mute mute);
|
void startUnmuteJobFor(Instant unmuteDate, Mute mute);
|
||||||
void unmuteUser(Mute mute);
|
void unmuteUser(Mute mute);
|
||||||
|
|||||||
@@ -9,4 +9,6 @@ import java.time.Instant;
|
|||||||
public interface MuteManagementService {
|
public interface MuteManagementService {
|
||||||
Mute createMute(AUserInAServer aUserInAServer, AUserInAServer mutingUser, String reason, Instant unmuteDate, AServerAChannelMessage creation);
|
Mute createMute(AUserInAServer aUserInAServer, AUserInAServer mutingUser, String reason, Instant unmuteDate, AServerAChannelMessage creation);
|
||||||
Mute findMute(Long muteId);
|
Mute findMute(Long muteId);
|
||||||
|
Mute saveMute(Mute mute);
|
||||||
|
boolean hasActiveMute(AUserInAServer userInAServer);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
<#list embeddedMessage.embeds>
|
<#list embeddedMessage.embeds>
|
||||||
Embeds:
|
Embeds:
|
||||||
<#items as embed>
|
<#items as embed>
|
||||||
Description: ${embed.description} <#if embed.imageUrl?has_content> ImageUrl: ${embed.imageUrl} </#if>
|
Description: <#if embed.description?has_content >${embed.description}</#if> <#if embed.imageUrl?has_content> ImageUrl: ${embed.imageUrl} </#if>
|
||||||
</#items>
|
</#items>
|
||||||
</#list>
|
</#list>
|
||||||
",
|
",
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ public class JoinListenerBean extends ListenerAdapter {
|
|||||||
try {
|
try {
|
||||||
AUserInAServer aUserInAServer = userManagementService.loadUser(event.getMember());
|
AUserInAServer aUserInAServer = userManagementService.loadUser(event.getMember());
|
||||||
executeListener(event, joinListener, aUserInAServer);
|
executeListener(event, joinListener, aUserInAServer);
|
||||||
} catch (AbstractoRunTimeException e) {
|
} catch (Exception e) {
|
||||||
log.error("Listener {} failed with exception:", joinListener.getClass().getName(), e);
|
log.error("Listener {} failed with exception:", joinListener.getClass().getName(), e);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -4,9 +4,6 @@ import dev.sheldan.abstracto.core.models.database.AServer;
|
|||||||
import org.springframework.data.jpa.repository.JpaRepository;
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
import org.springframework.stereotype.Repository;
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
@Repository
|
@Repository
|
||||||
public interface ServerRepository extends JpaRepository<AServer, Long> {
|
public interface ServerRepository extends JpaRepository<AServer, Long> {
|
||||||
List<AServer> findAll();
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ import org.springframework.scheduling.annotation.Async;
|
|||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
|
import java.time.Instant;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
@@ -128,7 +129,7 @@ public class MessageCacheBean implements MessageCache {
|
|||||||
.content(message.getContentRaw())
|
.content(message.getContentRaw())
|
||||||
.embeds(embeds)
|
.embeds(embeds)
|
||||||
.reactions(getFutures(futures))
|
.reactions(getFutures(futures))
|
||||||
.timeCreated(message.getTimeCreated())
|
.timeCreated(Instant.from(message.getTimeCreated()))
|
||||||
.attachmentUrls(attachmentUrls)
|
.attachmentUrls(attachmentUrls)
|
||||||
.build());
|
.build());
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
User ${user.name}#${user.discriminator} (${userMention}) has joined the guild.
|
User ${user.name}#${user.discriminator} (${user.asMention}) has joined the guild.
|
||||||
@@ -5,7 +5,7 @@ import lombok.Builder;
|
|||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
|
|
||||||
import java.time.OffsetDateTime;
|
import java.time.Instant;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
@@ -16,7 +16,7 @@ public class CachedMessage {
|
|||||||
private Long channelId;
|
private Long channelId;
|
||||||
private Long messageId;
|
private Long messageId;
|
||||||
private Long authorId;
|
private Long authorId;
|
||||||
private OffsetDateTime timeCreated;
|
private Instant timeCreated;
|
||||||
private String content;
|
private String content;
|
||||||
private List<CachedEmbed> embeds;
|
private List<CachedEmbed> embeds;
|
||||||
private List<String> attachmentUrls;
|
private List<String> attachmentUrls;
|
||||||
|
|||||||
Reference in New Issue
Block a user