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.User;
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
import org.checkerframework.checker.nullness.qual.NonNull;
import org.checkerframework.checker.nullness.qual.Nullable;
import java.util.Optional;
public abstract class CustomUser {
private final MessageReceivedEvent event;
private final User user;
private final MessageChannel channel;
/**
* Construct a user
*
* @param event The message received event
* @param user Sending user
* @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.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
*

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.TextChannel;
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.utils.ChunkingFilter;
import net.dv8tion.jda.api.utils.MemberCachePolicy;
@ -72,27 +73,30 @@ public final class ExampleBot {
(sender, permission) -> permissionRegistry.hasPermission(sender.getUser().getIdLong(), permission),
CommandExecutionCoordinator.simpleCoordinator(),
sender -> {
MessageReceivedEvent event = sender.getEvent().orElse(null);
if (sender instanceof JDAPrivateSender) {
JDAPrivateSender jdaPrivateSender = (JDAPrivateSender) sender;
return new PrivateUser(jdaPrivateSender.getUser(), jdaPrivateSender.getPrivateChannel());
return new PrivateUser(event, jdaPrivateSender.getUser(), jdaPrivateSender.getPrivateChannel());
}
if (sender instanceof JDAGuildSender) {
JDAGuildSender jdaGuildSender = (JDAGuildSender) sender;
return new GuildUser(jdaGuildSender.getMember(), jdaGuildSender.getTextChannel());
return new GuildUser(event, jdaGuildSender.getMember(), jdaGuildSender.getTextChannel());
}
throw new UnsupportedOperationException();
},
user -> {
MessageReceivedEvent event = user.getEvent().orElse(null);
if (user instanceof PrivateUser) {
PrivateUser privateUser = (PrivateUser) user;
return new JDAPrivateSender(null, privateUser.getUser(), privateUser.getPrivateChannel());
return new JDAPrivateSender(event, privateUser.getUser(), privateUser.getPrivateChannel());
}
if (user instanceof GuildUser) {
GuildUser guildUser = (GuildUser) user;
return new JDAGuildSender(null, guildUser.getMember(), guildUser.getTextChannel());
return new JDAGuildSender(event, guildUser.getMember(), guildUser.getTextChannel());
}
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.TextChannel;
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
import org.checkerframework.checker.nullness.qual.NonNull;
import org.checkerframework.checker.nullness.qual.Nullable;
public final class GuildUser extends CustomUser {
@ -35,11 +37,12 @@ public final class GuildUser extends CustomUser {
/**
* Construct a Guild user
*
* @param event The message received event
* @param member Guild member that sent the message
* @param channel Text channel that the message was sent in
*/
public GuildUser(final @NonNull Member member, final @NonNull TextChannel channel) {
super(member.getUser(), channel);
public GuildUser(final @Nullable MessageReceivedEvent event, final @NonNull Member member, final @NonNull TextChannel channel) {
super(event, member.getUser(), channel);
this.member = member;
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.User;
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
import org.checkerframework.checker.nullness.qual.NonNull;
import org.checkerframework.checker.nullness.qual.Nullable;
public final class PrivateUser extends CustomUser {
@ -34,11 +36,12 @@ public final class PrivateUser extends CustomUser {
/**
* Construct a Private user
*
* @param event The message received event
* @param user User that sent the message
* @param channel Text channel that the message was sent in
*/
public PrivateUser(final @NonNull User user, final @NonNull PrivateChannel channel) {
super(user, channel);
public PrivateUser(final @Nullable MessageReceivedEvent event, final @NonNull User user, final @NonNull PrivateChannel channel) {
super(event, user, channel);
this.privateChannel = channel;
}