Adjust JDA example to provide MessageReceivedEvent in commandSender mappers.

This is necessary for the `ChannelArgument` parser to work.
This commit is contained in:
p5nbTgip0r 2021-01-05 02:37:53 -08:00 committed by Alexander Söderberg
parent 2723ec13f9
commit fe153f19c1
4 changed files with 39 additions and 9 deletions

View file

@ -25,24 +25,44 @@ package cloud.commandframework.examples.jda;
import net.dv8tion.jda.api.entities.MessageChannel; import net.dv8tion.jda.api.entities.MessageChannel;
import net.dv8tion.jda.api.entities.User; import net.dv8tion.jda.api.entities.User;
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.NonNull;
import org.checkerframework.checker.nullness.qual.Nullable;
import java.util.Optional;
public abstract class CustomUser { public abstract class CustomUser {
private final MessageReceivedEvent event;
private final User user; private final User user;
private final MessageChannel channel; private final MessageChannel channel;
/** /**
* Construct a user * Construct a user
* *
* @param event The message received event
* @param user Sending user * @param user Sending user
* @param channel Channel that the message was sent in * @param channel Channel that the message was sent in
*/ */
protected CustomUser(final @NonNull User user, final @NonNull MessageChannel channel) { protected CustomUser(
final @Nullable MessageReceivedEvent event,
final @NonNull User user,
final @NonNull MessageChannel channel
) {
this.event = event;
this.user = user; this.user = user;
this.channel = channel; this.channel = channel;
} }
/**
* Get the message received event
*
* @return Optional of the message received event
*/
public final @NonNull Optional<MessageReceivedEvent> getEvent() {
return Optional.ofNullable(this.event);
}
/** /**
* Get the user that sent the message * Get the user that sent the message
* *

View file

@ -35,6 +35,7 @@ import net.dv8tion.jda.api.JDABuilder;
import net.dv8tion.jda.api.entities.Activity; import net.dv8tion.jda.api.entities.Activity;
import net.dv8tion.jda.api.entities.TextChannel; import net.dv8tion.jda.api.entities.TextChannel;
import net.dv8tion.jda.api.entities.User; import net.dv8tion.jda.api.entities.User;
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
import net.dv8tion.jda.api.requests.GatewayIntent; import net.dv8tion.jda.api.requests.GatewayIntent;
import net.dv8tion.jda.api.utils.ChunkingFilter; import net.dv8tion.jda.api.utils.ChunkingFilter;
import net.dv8tion.jda.api.utils.MemberCachePolicy; import net.dv8tion.jda.api.utils.MemberCachePolicy;
@ -72,27 +73,30 @@ public final class ExampleBot {
(sender, permission) -> permissionRegistry.hasPermission(sender.getUser().getIdLong(), permission), (sender, permission) -> permissionRegistry.hasPermission(sender.getUser().getIdLong(), permission),
CommandExecutionCoordinator.simpleCoordinator(), CommandExecutionCoordinator.simpleCoordinator(),
sender -> { sender -> {
MessageReceivedEvent event = sender.getEvent().orElse(null);
if (sender instanceof JDAPrivateSender) { if (sender instanceof JDAPrivateSender) {
JDAPrivateSender jdaPrivateSender = (JDAPrivateSender) sender; JDAPrivateSender jdaPrivateSender = (JDAPrivateSender) sender;
return new PrivateUser(jdaPrivateSender.getUser(), jdaPrivateSender.getPrivateChannel()); return new PrivateUser(event, jdaPrivateSender.getUser(), jdaPrivateSender.getPrivateChannel());
} }
if (sender instanceof JDAGuildSender) { if (sender instanceof JDAGuildSender) {
JDAGuildSender jdaGuildSender = (JDAGuildSender) sender; JDAGuildSender jdaGuildSender = (JDAGuildSender) sender;
return new GuildUser(jdaGuildSender.getMember(), jdaGuildSender.getTextChannel()); return new GuildUser(event, jdaGuildSender.getMember(), jdaGuildSender.getTextChannel());
} }
throw new UnsupportedOperationException(); throw new UnsupportedOperationException();
}, },
user -> { user -> {
MessageReceivedEvent event = user.getEvent().orElse(null);
if (user instanceof PrivateUser) { if (user instanceof PrivateUser) {
PrivateUser privateUser = (PrivateUser) user; PrivateUser privateUser = (PrivateUser) user;
return new JDAPrivateSender(null, privateUser.getUser(), privateUser.getPrivateChannel()); return new JDAPrivateSender(event, privateUser.getUser(), privateUser.getPrivateChannel());
} }
if (user instanceof GuildUser) { if (user instanceof GuildUser) {
GuildUser guildUser = (GuildUser) user; GuildUser guildUser = (GuildUser) user;
return new JDAGuildSender(null, guildUser.getMember(), guildUser.getTextChannel()); return new JDAGuildSender(event, guildUser.getMember(), guildUser.getTextChannel());
} }
throw new UnsupportedOperationException(); throw new UnsupportedOperationException();

View file

@ -25,7 +25,9 @@ package cloud.commandframework.examples.jda;
import net.dv8tion.jda.api.entities.Member; import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.entities.TextChannel; import net.dv8tion.jda.api.entities.TextChannel;
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.NonNull;
import org.checkerframework.checker.nullness.qual.Nullable;
public final class GuildUser extends CustomUser { public final class GuildUser extends CustomUser {
@ -35,11 +37,12 @@ public final class GuildUser extends CustomUser {
/** /**
* Construct a Guild user * Construct a Guild user
* *
* @param event The message received event
* @param member Guild member that sent the message * @param member Guild member that sent the message
* @param channel Text channel that the message was sent in * @param channel Text channel that the message was sent in
*/ */
public GuildUser(final @NonNull Member member, final @NonNull TextChannel channel) { public GuildUser(final @Nullable MessageReceivedEvent event, final @NonNull Member member, final @NonNull TextChannel channel) {
super(member.getUser(), channel); super(event, member.getUser(), channel);
this.member = member; this.member = member;
this.channel = channel; this.channel = channel;
} }

View file

@ -25,7 +25,9 @@ package cloud.commandframework.examples.jda;
import net.dv8tion.jda.api.entities.PrivateChannel; import net.dv8tion.jda.api.entities.PrivateChannel;
import net.dv8tion.jda.api.entities.User; import net.dv8tion.jda.api.entities.User;
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.NonNull;
import org.checkerframework.checker.nullness.qual.Nullable;
public final class PrivateUser extends CustomUser { public final class PrivateUser extends CustomUser {
@ -34,11 +36,12 @@ public final class PrivateUser extends CustomUser {
/** /**
* Construct a Private user * Construct a Private user
* *
* @param event The message received event
* @param user User that sent the message * @param user User that sent the message
* @param channel Text channel that the message was sent in * @param channel Text channel that the message was sent in
*/ */
public PrivateUser(final @NonNull User user, final @NonNull PrivateChannel channel) { public PrivateUser(final @Nullable MessageReceivedEvent event, final @NonNull User user, final @NonNull PrivateChannel channel) {
super(user, channel); super(event, user, channel);
this.privateChannel = channel; this.privateChannel = channel;
} }