Skip to content

Commit 2742573

Browse files
committed
fix: Grace period & clean up
- Changed TimeUnit implementation to java.time.Instant for grace period. - Cleaned up and improved readability of the onMessageReceived method.
1 parent d20f984 commit 2742573

File tree

1 file changed

+18
-21
lines changed

1 file changed

+18
-21
lines changed

application/src/main/java/org/togetherjava/tjbot/features/mediaonly/MediaOnlyChannelListener.java

Lines changed: 18 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
import org.togetherjava.tjbot.features.MessageReceiverAdapter;
1515

1616
import java.awt.Color;
17+
import java.time.Duration;
18+
import java.time.Instant;
1719
import java.util.concurrent.ConcurrentHashMap;
1820
import java.util.concurrent.TimeUnit;
1921
import java.util.regex.Pattern;
@@ -31,7 +33,7 @@ public final class MediaOnlyChannelListener extends MessageReceiverAdapter {
3133
".*https?://\\S+\\.(png|jpe?g|gif|bmp|webp|mp4|mov|avi|webm|mp3|wav|ogg|youtube\\.com/|youtu\\.com|imgur\\.com/).*",
3234
Pattern.CASE_INSENSITIVE);
3335

34-
private final ConcurrentHashMap<Long, Long> lastValidForwardedMediaMessageTime =
36+
private final ConcurrentHashMap<Long, Instant> lastValidForwardedMediaMessageTime =
3537
new ConcurrentHashMap<>();
3638

3739
/**
@@ -45,40 +47,35 @@ public MediaOnlyChannelListener(Config config) {
4547

4648
@Override
4749
public void onMessageReceived(MessageReceivedEvent event) {
48-
if (event.getAuthor().isBot() || event.isWebhookMessage()) {
50+
if (event.getAuthor().isBot() || event.isWebhookMessage()
51+
|| event.getMessage().getType() == MessageType.THREAD_CREATED) {
4952
return;
5053
}
5154

5255
Message message = event.getMessage();
53-
if (message.getType() == MessageType.THREAD_CREATED) {
54-
return;
55-
}
56-
5756
long userId = event.getAuthor().getIdLong();
5857

59-
boolean isForwardedWithMedia =
60-
!message.getMessageSnapshots().isEmpty() && !messageHasNoMediaAttached(message);
61-
62-
if (isForwardedWithMedia) {
63-
lastValidForwardedMediaMessageTime.put(userId, System.currentTimeMillis());
64-
return;
65-
}
66-
67-
boolean isNormalMediaUpload =
68-
message.getMessageSnapshots().isEmpty() && !messageHasNoMediaAttached(message);
69-
if (isNormalMediaUpload) {
58+
if (!messageHasNoMediaAttached(message)) {
59+
if (!message.getMessageSnapshots().isEmpty()) {
60+
lastValidForwardedMediaMessageTime.put(userId, Instant.now());
61+
}
7062
return;
7163
}
7264

73-
Long lastForwardedMediaTime = lastValidForwardedMediaMessageTime.get(userId);
74-
long gracePeriodMillis = TimeUnit.SECONDS.toMillis(1);
65+
Instant lastForwardedMediaTime = lastValidForwardedMediaMessageTime.get(userId);
66+
Duration gracePeriod = Duration.ofSeconds(1);
7567

7668
if (lastForwardedMediaTime != null
77-
&& (System.currentTimeMillis() - lastForwardedMediaTime) <= gracePeriodMillis) {
69+
&& Duration.between(lastForwardedMediaTime, Instant.now())
70+
.compareTo(gracePeriod) <= 0) {
7871
lastValidForwardedMediaMessageTime.remove(userId);
7972
return;
8073
}
8174

75+
deleteAndNotify(message);
76+
}
77+
78+
private void deleteAndNotify(Message message) {
8279
message.delete().queue(deleteSuccess -> dmUser(message).queue(dmSuccess -> {
8380
}, dmFailure -> tempNotifyUserInChannel(message)),
8481
deleteFailure -> tempNotifyUserInChannel(message));
@@ -106,7 +103,7 @@ private boolean messageHasNoMediaAttached(Message message) {
106103
private MessageCreateData createNotificationMessage(Message message) {
107104
String originalMessageContent = message.getContentRaw();
108105
if (originalMessageContent.trim().isEmpty()) {
109-
originalMessageContent = "(Original message had no visible text content)";
106+
originalMessageContent = "Original message had no visible text content";
110107
}
111108

112109
MessageEmbed originalMessageEmbed =

0 commit comments

Comments
 (0)