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:
Sheldan
2020-04-24 20:04:19 +02:00
parent b41a596acd
commit 0f8a39a336
15 changed files with 78 additions and 19 deletions

View File

@@ -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;
}
}

View File

@@ -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);
} }

View File

@@ -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

View File

@@ -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);
}
} }

View File

@@ -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}"
} }

View File

@@ -39,5 +39,6 @@
], ],
"footer": { "footer": {
"text": "Mute #${mute.id}" "text": "Mute #${mute.id}"
} },
"timeStamp": "${mute.muteTargetDate}"
} }

View File

@@ -35,6 +35,8 @@ public class Mute {
private Instant muteTargetDate; private Instant muteTargetDate;
private Boolean muteEnded;
@Column @Column
private Long messageId; private Long messageId;

View File

@@ -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);

View File

@@ -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);
} }

View File

@@ -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>
", ",

View File

@@ -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);
} }
}); });

View File

@@ -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();
} }

View File

@@ -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());
}); });

View File

@@ -1 +1 @@
User ${user.name}#${user.discriminator} (${userMention}) has joined the guild. User ${user.name}#${user.discriminator} (${user.asMention}) has joined the guild.

View File

@@ -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;