Search in sources :

Example 1 with ThreadMember

use of org.javacord.api.entity.channel.ThreadMember in project Javacord by BtoBastian.

the class ServerThreadChannelImpl method getThreadMembers.

@Override
public CompletableFuture<List<ThreadMember>> getThreadMembers() {
    return new RestRequest<List<ThreadMember>>(getApi(), RestMethod.GET, RestEndpoint.LIST_THREAD_MEMBERS).setUrlParameters(getIdAsString()).execute(result -> {
        final List<ThreadMember> threadMembers = new ArrayList<>();
        final JsonNode jsonNode = result.getJsonBody();
        for (final JsonNode node : jsonNode) {
            threadMembers.add(new ThreadMemberImpl(getApi(), getServer(), node));
        }
        return Collections.unmodifiableList(threadMembers);
    });
}
Also used : RestRequest(org.javacord.core.util.rest.RestRequest) ArrayList(java.util.ArrayList) JsonNode(com.fasterxml.jackson.databind.JsonNode) ThreadMember(org.javacord.api.entity.channel.ThreadMember)

Example 2 with ThreadMember

use of org.javacord.api.entity.channel.ThreadMember in project Javacord by BtoBastian.

the class ThreadListSyncHandler method handle.

@Override
public void handle(final JsonNode packet) {
    final long serverId = packet.get("guild_id").asLong();
    final ServerImpl server = api.getServerById(serverId).map(ServerImpl.class::cast).orElse(null);
    if (server == null) {
        logger.warn("Unable to find server with id {}", serverId);
        return;
    }
    final List<Long> channelIds = new ArrayList<>();
    if (packet.has("channel_ids")) {
        for (final JsonNode channelId : packet.get("channel_ids")) {
            channelIds.add(channelId.asLong());
        }
    }
    final List<ServerThreadChannel> threads = new ArrayList<>();
    for (final JsonNode thread : packet.get("threads")) {
        threads.add(server.getOrCreateServerThreadChannel(thread));
    }
    final List<Long> threadIds = new ArrayList<>();
    for (final ServerThreadChannel thread : threads) {
        threadIds.add(thread.getId());
    }
    final List<ThreadMember> members = new ArrayList<>();
    for (final JsonNode member : packet.get("members")) {
        members.add(new ThreadMemberImpl(api, server, member));
    }
    // Removes lost threads from cache
    for (final Channel channel : api.getChannels()) {
        if (channel.getType() == ChannelType.SERVER_PRIVATE_THREAD || channel.getType() == ChannelType.SERVER_PUBLIC_THREAD && !threadIds.contains(channel.getId())) {
            api.removeChannelFromCache(channel.getId());
        }
    }
    final ThreadListSyncEvent event = new ThreadListSyncEventImpl(server, channelIds, threads, members);
    api.getEventDispatcher().dispatchThreadListSyncEvent(server, server, event);
}
Also used : Channel(org.javacord.api.entity.channel.Channel) ServerThreadChannel(org.javacord.api.entity.channel.ServerThreadChannel) ArrayList(java.util.ArrayList) JsonNode(com.fasterxml.jackson.databind.JsonNode) ThreadMember(org.javacord.api.entity.channel.ThreadMember) ThreadListSyncEventImpl(org.javacord.core.event.channel.thread.ThreadListSyncEventImpl) ThreadMemberImpl(org.javacord.core.entity.channel.ThreadMemberImpl) ServerImpl(org.javacord.core.entity.server.ServerImpl) ServerThreadChannel(org.javacord.api.entity.channel.ServerThreadChannel) ThreadListSyncEvent(org.javacord.api.event.channel.thread.ThreadListSyncEvent)

Example 3 with ThreadMember

use of org.javacord.api.entity.channel.ThreadMember in project Javacord by BtoBastian.

the class ThreadMembersUpdateHandler method handle.

@Override
public void handle(final JsonNode packet) {
    final long channelId = packet.get("id").asLong();
    final long serverId = packet.get("guild_id").asLong();
    final ServerImpl server = api.getServerById(serverId).map(ServerImpl.class::cast).orElse(null);
    if (server == null) {
        logger.warn("Unable to find server with id {}", serverId);
        return;
    }
    final ServerThreadChannelImpl thread = server.getThreadChannelById(channelId).map(ServerThreadChannelImpl.class::cast).orElse(null);
    if (thread == null) {
        logger.warn("Unable to find thread with id {}", channelId);
        return;
    }
    final int memberCount = packet.get("member_count").asInt();
    final List<Long> removedMemberIds = new ArrayList<>();
    if (packet.has("removed_member_ids")) {
        for (final JsonNode removedMemberId : packet.get("removed_member_ids")) {
            removedMemberIds.add(removedMemberId.asLong());
        }
    }
    final List<ThreadMember> addedMembers = new ArrayList<>();
    if (packet.has("added_members")) {
        for (final JsonNode addedMember : packet.get("added_members")) {
            addedMembers.add(new ThreadMemberImpl(api, server, addedMember));
        }
    }
    thread.setMembers(addedMembers);
    final ThreadMembersUpdateEvent event = new ThreadMembersUpdateEventImpl(thread, server, memberCount, addedMembers, removedMemberIds);
    api.getEventDispatcher().dispatchThreadMembersUpdateEvent(server, server, thread, event);
}
Also used : ServerThreadChannelImpl(org.javacord.core.entity.channel.ServerThreadChannelImpl) ThreadMembersUpdateEventImpl(org.javacord.core.event.channel.thread.ThreadMembersUpdateEventImpl) ThreadMembersUpdateEvent(org.javacord.api.event.channel.thread.ThreadMembersUpdateEvent) ArrayList(java.util.ArrayList) JsonNode(com.fasterxml.jackson.databind.JsonNode) ThreadMember(org.javacord.api.entity.channel.ThreadMember) ThreadMemberImpl(org.javacord.core.entity.channel.ThreadMemberImpl) ServerImpl(org.javacord.core.entity.server.ServerImpl)

Aggregations

JsonNode (com.fasterxml.jackson.databind.JsonNode)3 ArrayList (java.util.ArrayList)3 ThreadMember (org.javacord.api.entity.channel.ThreadMember)3 ThreadMemberImpl (org.javacord.core.entity.channel.ThreadMemberImpl)2 ServerImpl (org.javacord.core.entity.server.ServerImpl)2 Channel (org.javacord.api.entity.channel.Channel)1 ServerThreadChannel (org.javacord.api.entity.channel.ServerThreadChannel)1 ThreadListSyncEvent (org.javacord.api.event.channel.thread.ThreadListSyncEvent)1 ThreadMembersUpdateEvent (org.javacord.api.event.channel.thread.ThreadMembersUpdateEvent)1 ServerThreadChannelImpl (org.javacord.core.entity.channel.ServerThreadChannelImpl)1 ThreadListSyncEventImpl (org.javacord.core.event.channel.thread.ThreadListSyncEventImpl)1 ThreadMembersUpdateEventImpl (org.javacord.core.event.channel.thread.ThreadMembersUpdateEventImpl)1 RestRequest (org.javacord.core.util.rest.RestRequest)1