Skip to content

Commit d20f984

Browse files
committed
Allow forwarding of media, to media channels
1 parent 8b2d3c5 commit d20f984

File tree

1 file changed

+55
-5
lines changed

1 file changed

+55
-5
lines changed

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

Lines changed: 55 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import net.dv8tion.jda.api.entities.Message;
55
import net.dv8tion.jda.api.entities.MessageEmbed;
66
import net.dv8tion.jda.api.entities.MessageType;
7+
import net.dv8tion.jda.api.entities.messages.MessageSnapshot;
78
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
89
import net.dv8tion.jda.api.requests.RestAction;
910
import net.dv8tion.jda.api.utils.messages.MessageCreateBuilder;
@@ -13,6 +14,7 @@
1314
import org.togetherjava.tjbot.features.MessageReceiverAdapter;
1415

1516
import java.awt.Color;
17+
import java.util.concurrent.ConcurrentHashMap;
1618
import java.util.concurrent.TimeUnit;
1719
import java.util.regex.Pattern;
1820

@@ -25,6 +27,13 @@
2527
*/
2628
public final class MediaOnlyChannelListener extends MessageReceiverAdapter {
2729

30+
private static final Pattern MEDIA_URL_PATTERN = Pattern.compile(
31+
".*https?://\\S+\\.(png|jpe?g|gif|bmp|webp|mp4|mov|avi|webm|mp3|wav|ogg|youtube\\.com/|youtu\\.com|imgur\\.com/).*",
32+
Pattern.CASE_INSENSITIVE);
33+
34+
private final ConcurrentHashMap<Long, Long> lastValidForwardedMediaMessageTime =
35+
new ConcurrentHashMap<>();
36+
2837
/**
2938
* Creates a MediaOnlyChannelListener to receive all message sent in MediaOnly channel.
3039
*
@@ -45,19 +54,60 @@ public void onMessageReceived(MessageReceivedEvent event) {
4554
return;
4655
}
4756

48-
if (messageHasNoMediaAttached(message)) {
49-
message.delete().flatMap(any -> dmUser(message)).queue(any -> {
50-
}, failure -> tempNotifyUserInChannel(message));
57+
long userId = event.getAuthor().getIdLong();
58+
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) {
70+
return;
71+
}
72+
73+
Long lastForwardedMediaTime = lastValidForwardedMediaMessageTime.get(userId);
74+
long gracePeriodMillis = TimeUnit.SECONDS.toMillis(1);
75+
76+
if (lastForwardedMediaTime != null
77+
&& (System.currentTimeMillis() - lastForwardedMediaTime) <= gracePeriodMillis) {
78+
lastValidForwardedMediaMessageTime.remove(userId);
79+
return;
5180
}
81+
82+
message.delete().queue(deleteSuccess -> dmUser(message).queue(dmSuccess -> {
83+
}, dmFailure -> tempNotifyUserInChannel(message)),
84+
deleteFailure -> tempNotifyUserInChannel(message));
5285
}
5386

5487
private boolean messageHasNoMediaAttached(Message message) {
55-
return message.getAttachments().isEmpty() && message.getEmbeds().isEmpty()
56-
&& !message.getContentRaw().contains("http");
88+
if (!message.getAttachments().isEmpty() || !message.getEmbeds().isEmpty()
89+
|| MEDIA_URL_PATTERN.matcher(message.getContentRaw()).matches()) {
90+
return false;
91+
}
92+
93+
if (!message.getMessageSnapshots().isEmpty()) {
94+
for (MessageSnapshot snapshot : message.getMessageSnapshots()) {
95+
if (!snapshot.getAttachments().isEmpty() || !snapshot.getEmbeds().isEmpty()
96+
|| MEDIA_URL_PATTERN.matcher(snapshot.getContentRaw()).matches()) {
97+
return false;
98+
}
99+
}
100+
return true;
101+
}
102+
103+
return true;
57104
}
58105

59106
private MessageCreateData createNotificationMessage(Message message) {
60107
String originalMessageContent = message.getContentRaw();
108+
if (originalMessageContent.trim().isEmpty()) {
109+
originalMessageContent = "(Original message had no visible text content)";
110+
}
61111

62112
MessageEmbed originalMessageEmbed =
63113
new EmbedBuilder().setDescription(originalMessageContent)

0 commit comments

Comments
 (0)