Возникли проблемы с onGuildMessageReceived () при попытке добавить реакции - PullRequest
0 голосов
/ 27 мая 2019

Я пытаюсь заставить бот, который я кодирую, реагировать на сообщение пользователя, когда в нем есть конкретные ключевые слова.У меня есть около 50 ключевых слов, на которые бот может реагировать, но только если они находятся в начале сообщения.

Бот будет реагировать с эмоцией, когда он находится в начале сообщения пользователя, но не когдапосле первого слова.

Я уже пытался попросить разногласия о какой-то помощи, но совершенно очевидно, что они действительно не хотят дружить с новичками.Я попытался изменить аргумент с "0" на "Message.MAX_CONTENT_LENGTH", который не работал.У меня также изначально был ArrayList, который я преобразовал в String, который не работал, а позже попытался использовать только обычный List;с тем же результатом.Прямо сейчас я застрял с крайне неоптимизированным утверждением if / else, но я могу жить с этим.Мне просто нужно, чтобы это работало.

import net.dv8tion.jda.core.events.message.guild.GuildMessageReceivedEvent;
import net.dv8tion.jda.core.hooks.ListenerAdapter;

public class GuildMessageReceived extends ListenerAdapter {

    public void onGuildMessageReceived(GuildMessageReceivedEvent event) {
        String[] args = event.getMessage().getContentRaw().split("\\s+");

        if (args[0].equalsIgnoreCase("zachary")) {
            event.getMessage().addReaction("?").queue();
        } // if
    } // onGuildMessageReceived()
} // GuildMessageReceived

Я ожидаю, что результатом будет реакция на сообщение с ключевым словом, расположенным внутри него в любой момент, а не только в начале.Предположим, что «деньги» - это ключевое слово.

Что мне нужно:

[6:52 PM] Anon: I have money
|| Reactions: :spy:

Что я получу:

[6:52 PM] Anon: I have money
|| Reactions: None

1 Ответ

2 голосов
/ 27 мая 2019

Ваш код реагирует только в том случае, если первое сообщение является ключевым словом, потому что вы разбиваете на пробелы, а затем проверяете только первый элемент массива. Преобразуйте массив в список и используйте contains(). Например:

List<String> words = Arrays.asList(event.getMessage().getContentRaw().split("\\s+"));
if (words.contains("zachary")) {
  event.getMessage().addReaction("?").queue();
}

Если вы хотите легко проверить наличие нескольких ключевых слов, вы можете вместо этого использовать Collections.disjoint(). Например:

Set<String> keywords = Set.of("foo", "bar", "baz");
List<String> words = Arrays.asList(event.getMessage().getContentRaw().split("\\s+"));

if (!Collections.disjoint(keywords, words)) {
  event.getMessage().addReaction("?").queue();
}
...