通过 Java DIscord Bot 提及任何成员

Mention any member via Java DIscord Bot

所以我正在制作一个机器人,其目的是通过键入 .inappropriate @discordUser 来标记被举报的用户。

示例如下:

if(message.getMessageContent().equalsIgnoreCase(main.prefix + "inappropriate"))
{
            message.getChannel().sendMessage("username of <@!USER_ID> is inappropriate.");
}

但是,问题是它不是指定的用户。换句话说,它不会总是同一个用户。

所以它在 Discord 上应该是这样的:

我: .inappropriate @discordUser

机器人: @discordUser 的用户名不合适。

所以,我想知道,我怎样才能做到这一点?

你没有说出你使用的是哪个discord wrapper,但是从getMessageContent()来看,它似乎是Javacord。如果不是,请注意我要说的所有内容都是 same/have 等同于其他包装器。

  • 首先你需要获取id或者提到的成员。
  • 其次你必须从中提一下。

要获取提及的成员,您可以使用 Message#getMentionedUsers() 方法,其中 returns 消息中提及的用户列表。这意味着您甚至可以获得多个用户。 要获取 id,您可以使用 User#getId() 或 User#getIdAsString(),或者您可以尝试通过例如拆分 Message#getMessageContent() 然后使用正则表达式来解析 Message#getMessageContent()(请记住提及是 <@! id>)

您如何从用户或 ID 获得提及?对于用户,您可以简单地使用方法 User#getMentionTag () 或 User#getNicknameMentionTag ()。在 id 中,您可以附加“<@!” + id + ">".

简而言之,您可以:
消息→成员(方法)→提及(方法)
message → id(手动解析)→ mention(手动追加)
消息→成员(方法)→id(getter方法)→提及(方法)
最后一个可能看起来没用,但在你存储 id 的情况下(你不能存储实体),它可能很有用。 而且,您可以从id中检索成员,但是与其他需要意图相比,它在这里毫无用处,实际上您可以简单地执行第一个解决方案,它只是两个方法调用。

我给了你几种方法,有些是手动的,有些使用现有的方法。你应该更喜欢使用这些方法,除非它对你不方便(即你想要自己的命令解析器,所以你不能使用 getMentionedUsers())。

此外,您可以查看每个 类 的方法,您可能会找到黄金,文档可以在您的 ide 或在线 here 的搜索栏中找到。 我知道包装器 JDA,但在我回答您的问题之前,我对 Javacord 没有 idea。 这是我的第一个答案,希望我没有搞砸什么。