【问题标题】:Having Issues With onGuildMessageReceived() When Trying to Add Reactions尝试添加反应时出现 onGuildMessageReceived() 问题
【发布时间】:2019-10-12 13:15:36
【问题描述】:

我正在尝试让我正在编码的机器人在其中包含特定关键字时对用户的消息做出反应。我有大约 50 个关键字可以让机器人做出反应,但前提是它们位于消息的开头。

机器人会在用户消息的开头做出反应,但不会在第一个单词之后做出反应。

我已经尝试向 Discord 寻求帮助,但很明显他们并不真正关心对新来者友好。我尝试将参数从“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

【问题讨论】:

  • 所以你有一个关键字列表,如果邮件内容包含这些关键字中的任何一个,你想要做些什么?
  • 是的。我希望机器人在消息中的任何位置包含“if”语句中给出的特定关键字(“zachary”是代码中给出的关键字)时,对用户的消息添加一个反应。

标签: java discord discord-jda


【解决方案1】:

您的代码仅在第一条消息是关键字时才会做出反应,因为您是按空格分割然后只检查数组的第一个元素。将数组转换为列表并使用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();
}

【讨论】:

    猜你喜欢
    • 2022-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多