flatMap в порядке. Ошибка, вероятно, в другом месте, чем вы ожидаете. Это может помочь вам разобраться в том, что происходит (при условии, что у вас есть доступный объект logger, называемый «log»):
Mono.just(event)
.doOnNext(log::info)
.map(MessageCreateEvent::getMessage)
.doOnNext(log::info)
и так далее для каждой строки вашего потока. В последней строке вы можете добавить:
.doOnEach(s -> log.info("signal: " + s)))
К вашему сведению, или для других, кто наткнулся на это, технически есть - это способ использовать что-то переданное по цепочке, zipWhen ():
discordClient
.getEventDispatcher()
.on(MessageCreateEvent.class)
.zipWhen(
event ->
Mono.just(event)
.map(MessageCreateEvent::getMessage)
.map(Message::getContent)
.filter(Optional::isPresent)
.map(o -> o.get())
.map(this::getCommand)
.filter(Objects::nonNull),
(event, msg) -> msg.runCommand(event, null))
.subscribe();
но это не делает ваш код чище! Для некоторых других случаев это может быть удобно.