Skip to content

Commit

Permalink
Add the ability to listen for replies to specific messages
Browse files Browse the repository at this point in the history
  • Loading branch information
Mysterypotatoguy committed Oct 16, 2022
1 parent 242a25f commit 954d789
Show file tree
Hide file tree
Showing 4 changed files with 98 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package org.javacord.api.event.message;

import org.javacord.api.entity.message.Message;

/**
* A message reply event.
*/
public interface MessageReplyEvent extends CertainMessageEvent {

/**
* Gets the message referenced by the message of this event.
*
* @return The message which was referenced.
*/
Message getReferencedMessage();

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package org.javacord.api.listener.message;

import org.javacord.api.event.message.MessageReplyEvent;
import org.javacord.api.listener.GloballyAttachableListener;
import org.javacord.api.listener.ObjectAttachableListener;
import org.javacord.api.listener.channel.TextChannelAttachableListener;
import org.javacord.api.listener.server.ServerAttachableListener;
import org.javacord.api.listener.user.UserAttachableListener;
import org.javacord.api.listener.webhook.WebhookAttachableListener;

/**
* This listener listens to message replies.
*/
@FunctionalInterface
public interface MessageReplyListener extends ServerAttachableListener, UserAttachableListener,
WebhookAttachableListener, TextChannelAttachableListener, MessageAttachableListener,
GloballyAttachableListener, ObjectAttachableListener {

/**
* This method is called when a message is created which replies to another.
*
* @param event The event.
*/
void onMessageReply(MessageReplyEvent event);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package org.javacord.core.event.message;

import org.javacord.api.entity.message.Message;
import org.javacord.api.event.message.MessageReplyEvent;

/**
* The implementation of {@link MessageReplyEvent}.
*/
public class MessageReplyEventImpl extends CertainMessageEventImpl implements MessageReplyEvent {

private final Message referencedMessage;

/**
* Creates a new event instance.
*
* @param message The created message.
* @param referencedMessage The message which is being replied to.
*/
public MessageReplyEventImpl(Message message, Message referencedMessage) {
super(message);
this.referencedMessage = referencedMessage;
}

@Override
public Message getReferencedMessage() {
return referencedMessage;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -11,17 +11,23 @@
import org.javacord.api.entity.message.MessageAuthor;
import org.javacord.api.entity.message.MessageFlag;
import org.javacord.api.entity.server.Server;
import org.javacord.api.entity.user.User;
import org.javacord.api.event.message.MessageCreateEvent;
import org.javacord.api.event.message.MessageReplyEvent;
import org.javacord.core.entity.channel.PrivateChannelImpl;
import org.javacord.core.entity.channel.ServerThreadChannelImpl;
import org.javacord.core.entity.user.MemberImpl;
import org.javacord.core.entity.user.UserImpl;
import org.javacord.core.event.message.MessageCreateEventImpl;
import org.javacord.core.event.message.MessageReplyEventImpl;
import org.javacord.core.util.event.DispatchQueueSelector;
import org.javacord.core.util.gateway.PacketHandler;
import org.javacord.core.util.logging.LoggerUtil;

import java.util.Collections;
import java.util.HashSet;
import java.util.Optional;
import java.util.Set;

/**
* Handles the message create packet.
Expand Down Expand Up @@ -98,6 +104,27 @@ private void handle(TextChannel channel, JsonNode packet) {
author.asUser().orElse(null),
author.isWebhook() ? author.getId() : null,
event);

message.getReferencedMessage().ifPresent(referencedMessage -> {
MessageReplyEvent replyEvent = new MessageReplyEventImpl(message, referencedMessage);
Set<User> users = new HashSet<>();
referencedMessage.getUserAuthor().ifPresent(users::add);
message.getUserAuthor().ifPresent(users::add);

Set<Long> webhookIds = new HashSet<>();
message.getAuthor().getWebhookId().ifPresent(webhookIds::add);
referencedMessage.getAuthor().getWebhookId().ifPresent(webhookIds::add);

api.getEventDispatcher().dispatchMessageReplyEvent(
optionalServer.map(DispatchQueueSelector.class::cast).orElse(api),
Collections.singleton(referencedMessage),
optionalServer.map(Collections::singleton).orElse(null),
Collections.singleton(message.getChannel()),
users,
webhookIds,
replyEvent
);
});
}

}

0 comments on commit 954d789

Please sign in to comment.