14
14
import org .togetherjava .tjbot .features .MessageReceiverAdapter ;
15
15
16
16
import java .awt .Color ;
17
+ import java .time .Duration ;
18
+ import java .time .Instant ;
17
19
import java .util .concurrent .ConcurrentHashMap ;
18
20
import java .util .concurrent .TimeUnit ;
19
21
import java .util .regex .Pattern ;
@@ -31,7 +33,7 @@ public final class MediaOnlyChannelListener extends MessageReceiverAdapter {
31
33
".*https?://\\ S+\\ .(png|jpe?g|gif|bmp|webp|mp4|mov|avi|webm|mp3|wav|ogg|youtube\\ .com/|youtu\\ .com|imgur\\ .com/).*" ,
32
34
Pattern .CASE_INSENSITIVE );
33
35
34
- private final ConcurrentHashMap <Long , Long > lastValidForwardedMediaMessageTime =
36
+ private final ConcurrentHashMap <Long , Instant > lastValidForwardedMediaMessageTime =
35
37
new ConcurrentHashMap <>();
36
38
37
39
/**
@@ -45,40 +47,35 @@ public MediaOnlyChannelListener(Config config) {
45
47
46
48
@ Override
47
49
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 ) {
49
52
return ;
50
53
}
51
54
52
55
Message message = event .getMessage ();
53
- if (message .getType () == MessageType .THREAD_CREATED ) {
54
- return ;
55
- }
56
-
57
56
long userId = event .getAuthor ().getIdLong ();
58
57
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
+ }
70
62
return ;
71
63
}
72
64
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 );
75
67
76
68
if (lastForwardedMediaTime != null
77
- && (System .currentTimeMillis () - lastForwardedMediaTime ) <= gracePeriodMillis ) {
69
+ && Duration .between (lastForwardedMediaTime , Instant .now ())
70
+ .compareTo (gracePeriod ) <= 0 ) {
78
71
lastValidForwardedMediaMessageTime .remove (userId );
79
72
return ;
80
73
}
81
74
75
+ deleteAndNotify (message );
76
+ }
77
+
78
+ private void deleteAndNotify (Message message ) {
82
79
message .delete ().queue (deleteSuccess -> dmUser (message ).queue (dmSuccess -> {
83
80
}, dmFailure -> tempNotifyUserInChannel (message )),
84
81
deleteFailure -> tempNotifyUserInChannel (message ));
@@ -106,7 +103,7 @@ private boolean messageHasNoMediaAttached(Message message) {
106
103
private MessageCreateData createNotificationMessage (Message message ) {
107
104
String originalMessageContent = message .getContentRaw ();
108
105
if (originalMessageContent .trim ().isEmpty ()) {
109
- originalMessageContent = "( Original message had no visible text content) " ;
106
+ originalMessageContent = "Original message had no visible text content" ;
110
107
}
111
108
112
109
MessageEmbed originalMessageEmbed =
0 commit comments