下面是我在Discord4J中用于测试命令的代码
gateway.on(MessageCreateEvent.class)
.map(MessageCreateEvent::getMessage)
.filter(message -> message.getContent().contains("test"))
.flatMap(Message::getChannel)
.flatMap(channel -> channel.createMessage("test!"))
.subscribe();但是现在如果你在discord中输入"test“,它会继续发送消息,而不是像我期望的那样只发送一条消息。这里有什么问题?它确实适用于equals()和equalsignorecase(),但对于所有其他字符串检查方法,它会进入循环。
发布于 2021-10-08 13:35:25
这是因为您也会收到与机器人一起发送的所有消息的MessageCreateEvent。因为您的消息是createMessage("test!"),所以您还将收到一条消息,其中getContent()返回"test!"。这显然会产生"test!".contains("test"),但不会产生"test!".equals("test")。
这可以通过检查消息作者是否是机器人来防止。
filter(message -> !message.getAuthor().map(User::isBot).orElse(true))https://stackoverflow.com/questions/69396617
复制相似问题