use of org.javacord.api.event.channel.thread.ThreadListSyncEvent 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);
}
Aggregations