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()方法即可获取该用户在当前服务器的所有身份组列表
注意事项:
- 仅服务器频道的消息可以获取到
Member对象,私信场景下不存在服务器身份组概念,调用相关方法会返回空- 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
相关产品推荐
相关产品推荐

