Below is the code I used for a test command in Discord4J
gateway.on(MessageCreateEvent.class)
.map(MessageCreateEvent::getMessage)
.filter(message -> message.getContent().contains("test"))
.flatMap(Message::getChannel)
.flatMap(channel -> channel.createMessage("test!"))
.subscribe();
but now if you type "test" in discord, it keeps sending messages, instead of a single message like I would expect. What's the issue here? It does work with equals() and equalsignorecase(), but with all other String checking methods it goes into a loop.
This is because you receive a
MessageCreateEventfor all messages you send with the bot as well. Since your message iscreateMessage("test!"), you will also receive a message wheregetContent()returns"test!". This will obviously result in"test!".contains("test")but not"test!".equals("test").This can be prevented by checking if the message author is a bot.