要获取指定身分组下所有用户,您需要使用 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' 的所有成员,并将它们的用户名和标签连接到一起,然后将它们发送到当前消息的频道中。

请注意,为了让您的机器人能够访问服务器的成员列表,您需要将其添加到服务器中,并授予足够的权限。

Discord4J 获取指定身分组下所有用户

原文地址: https://www.cveoy.top/t/topic/m9bR 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录