You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java开发Discord Bot获取消息发送者(Author)身份组(Role)方案咨询

Java开发Discord Bot获取消息发送者身份组的实现方法

目前Java生态开发Discord Bot主流使用JDA(Java Discord API)库,原生支持获取消息发送者的服务器身份组,实现逻辑如下:

  • 需先区分User和Member两个对象:User是Discord全局用户实体,不携带服务器专属属性;Member是用户在特定服务器的身份实体,才包含身份组相关数据
  • 从消息事件中先获取当前服务器(Guild)实例,再通过发送者ID获取对应的Member对象
  • 调用Member#getRoles()方法即可获取该用户在当前服务器的所有身份组列表

注意事项:

  1. 仅服务器频道的消息可以获取到Member对象,私信场景下不存在服务器身份组概念,调用相关方法会返回空
  2. Bot需要被授予「查看服务器成员」权限,才能正常拉取到用户的身份组数据,避免返回空列表

你提供的代码可以调整为如下实现:

// 以下逻辑默认在GuildMessageReceivedEvent事件回调中执行
if (content.equalsIgnoreCase("hello")){
    // 获取发送者的服务器成员对象
    Member member = event.getMember();
    if (member == null) {
        // 私信场景适配
        channel.sendMessage("Hello **" + author.getName() + "**\n私信场景无法获取服务器身份组").queue();
        return;
    }
    // 拼接所有身份组名称
    String roleNames = member.getRoles().stream()
            .map(Role::getName)
            .reduce((role1, role2) -> role1 + "、" + role2)
            .orElse("无任何身份组");
    // 输出消息
    channel.sendMessage("Hello **" + member.getEffectiveName() + "**\nAre you ready ?\nYour roles are: " + roleNames).queue();
}

内容的提问来源于stack exchange,提问作者Detrua

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 19:45:08