如何通过Java Discord Bot实现@提及任意指定成员的功能
实现方案
核心逻辑是直接调用Discord Bot库自带的提及用户解析接口获取被@的用户ID,动态拼接进回复内容即可,无需自行正则解析消息文本。
代码修改说明
- 原逻辑用
equalsIgnoreCase全匹配指令内容是错误的,因为指令后带有@用户的参数,需要改为匹配前缀即可 - 从消息对象的提及集合中取出被@的目标用户
- 动态拼接用户ID到回复模板中,Discord会自动将
<@!用户ID>格式渲染为@提及效果
修改后完整代码
if(message.getMessageContent().startsWith(main.prefix + "inappropriate")) { // 获取当前消息中所有被@的用户列表 List<User> mentionedUsers = message.getMentions().getUsers(); // 校验参数:用户没有@任何成员时给出提示 if(mentionedUsers.isEmpty()) { message.getChannel().sendMessage("使用指令时请@要举报的违规用户").queue(); return; } // 取第一个被@的目标用户 User target = mentionedUsers.get(0); // 动态拼接生成带@提及的回复内容 message.getChannel().sendMessage("username of <@!" + target.getId() + "> is inappropriate.").queue(); }
补充说明
- 若需要支持同时举报多个用户,遍历
mentionedUsers列表拼接所有用户的@格式即可 - 若要做权限管控,可增加权限校验逻辑,仅允许管理员/相关角色使用该指令
- 如果你用的是其他语言的Discord库,核心逻辑通用:从消息对象的提及属性中取目标用户ID,拼入
<@!用户ID>格式即可
内容的提问来源于stack exchange,提问作者jjavid
相关产品推荐
相关产品推荐

