我正在改写我的不和谐机器人,从Discord4J v2到基于反应堆的v3。我对反应性编程特别是Java反应堆很陌生。我想用三种类型的命令来实现一个命令系统:
#bot-commands发送的命令--每个具有特定角色的X都可以使用这些命令,并且如果用户试图执行某些特定的命令,但他们没有得到所需的角色,机器人应该告诉他们这一点。否则,应该执行命令(考虑到发送方(消息作者)、发送该命令的通道以及命令本身(消息))。
我不知道如何以反应的方式实现这一切,而且我也找不到Discord4J wiki上的必要信息。这就是我目前的情况:
private final Set<DiscordCommand> discordGuildCommands = new HashSet<>();
private final Set<DiscordCommand> discordDmCommands = new HashSet<>();
// ...
gateway = DiscordClient.create(discordToken).login().block();
// ...
gateway.getEventDispatcher()
.on(MessageCreateEvent.class)
.filter(event -> !(event.getMessage().getChannel().block() instanceof PrivateChannel))
.filterWhen(event -> event.getMember().get().hasHigherRoles(Roles.REFLEXBOT_CTRL_SINGLETON))
.flatMap(event -> Mono.just(event.getMessage().getContent())
.flatMap(content -> Flux.fromIterable(discordGuildCommands)
.filter(cmd -> content.startsWith(DISCORD_COMMANDS_PREFIX + cmd.getName()))
.flatMap(cmd -> cmd.process(event))
.next()
)
)
.subscribe();这段代码看起来很好,允许我处理管理公会命令,也就是说,由“权限级别”(最高角色级别)的成员在我的不和谐服务器文本通道中发送的命令至少是我指定的一个。
但是我如何正确地实现其余的命令(反作用和很好地)?我还没有在反应堆中找到任何类似if/ filter(...)链接的东西,而且我真的不想重复上面的代码几次,只更改1-2个filter(...)行。
发布于 2020-11-20 10:37:02
我不熟悉Discord4J,但我认为您应该逆流并为您的命令添加一些设置。
然后构建你的流程:
https://stackoverflow.com/questions/64622624
复制相似问题