Discord4J 获取指定身分组下所有用户
要获取指定身分组下所有用户,您需要使用 Discord4J 的 Guild 对象和 Role 对象。以下是一个示例代码片段:
import discord4j.core.GatewayDiscordClient;
import discord4j.core.event.domain.message.MessageCreateEvent;
import discord4j.core.object.entity.Guild;
import discord4j.core.object.entity.Member;
import discord4j.core.object.entity.Role;
import discord4j.core.object.entity.User;
import discord4j.core.spec.RolePositionSpec;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
public class DiscordBot {
public static void main(String[] args) {
GatewayDiscordClient client = DiscordClient.create('YOUR_BOT_TOKEN').login().block();
client.getEventDispatcher().on(MessageCreateEvent.class)
.map(MessageCreateEvent::getMessage)
.flatMap(message -> {
if (message.getContent().equalsIgnoreCase('!getMembers')) {
return getMembersInRole(message.getGuild(), 'ROLE_NAME')
.map(member -> member.getUsername() + '#' + member.getDiscriminator())
.collectList()
.flatMap(memberNames -> message.getChannel().createMessage(String.join(', ', memberNames)));
}
return Mono.empty();
})
.subscribe();
client.onDisconnect().block();
}
private static Flux<Member> getMembersInRole(Guild guild, String roleName) {
Mono<Role> role = guild.getRoles()
.filter(r -> r.getName().equalsIgnoreCase(roleName))
.next();
return role.flatMapMany(r -> guild.getMembersWithRole(r.getId()));
}
}
在这个示例中,我们使用 getMembersInRole 方法来获取指定身分组下的所有成员。该方法接受一个 Guild 对象和一个 Role 名称作为参数,并返回一个 Flux
在 main 方法中,我们使用 getMembersInRole 方法来获取身分组为 'ROLE_NAME' 的所有成员,并将它们的用户名和标签连接到一起,然后将它们发送到当前消息的频道中。
请注意,为了让您的机器人能够访问服务器的成员列表,您需要将其添加到服务器中,并授予足够的权限。
原文地址: https://www.cveoy.top/t/topic/m9bR 著作权归作者所有。请勿转载和采集!