use of net.dv8tion.jda.api.entities.Guild.NotificationLevel in project JDA by DV8FromTheWorld.
the class EntityBuilder method createTemplate.
public Template createTemplate(DataObject object) {
final String code = object.getString("code");
final String name = object.getString("name");
final String description = object.getString("description", null);
final int uses = object.getInt("usage_count");
final User creator = createUser(object.getObject("creator"));
final OffsetDateTime createdAt = OffsetDateTime.parse(object.getString("created_at"));
final OffsetDateTime updatedAt = OffsetDateTime.parse(object.getString("updated_at"));
final long guildId = object.getLong("source_guild_id");
final DataObject guildObject = object.getObject("serialized_source_guild");
final String guildName = guildObject.getString("name");
final String guildDescription = guildObject.getString("description", null);
final String guildIconId = guildObject.getString("icon_hash", null);
final VerificationLevel guildVerificationLevel = VerificationLevel.fromKey(guildObject.getInt("verification_level", -1));
final NotificationLevel notificationLevel = NotificationLevel.fromKey(guildObject.getInt("default_message_notifications", 0));
final ExplicitContentLevel explicitContentLevel = ExplicitContentLevel.fromKey(guildObject.getInt("explicit_content_filter", 0));
final Locale locale = Locale.forLanguageTag(guildObject.getString("preferred_locale", "en"));
final Timeout afkTimeout = Timeout.fromKey(guildObject.getInt("afk_timeout", 0));
final DataArray roleArray = guildObject.getArray("roles");
final DataArray channelsArray = guildObject.getArray("channels");
final long afkChannelId = guildObject.getLong("afk_channel_id", -1L);
final long systemChannelId = guildObject.getLong("system_channel_id", -1L);
final List<TemplateRole> roles = new ArrayList<>();
for (int i = 0; i < roleArray.length(); i++) {
DataObject obj = roleArray.getObject(i);
final long roleId = obj.getLong("id");
final String roleName = obj.getString("name");
final int roleColor = obj.getInt("color");
final boolean hoisted = obj.getBoolean("hoist");
final boolean mentionable = obj.getBoolean("mentionable");
final long rawPermissions = obj.getLong("permissions");
roles.add(new TemplateRole(roleId, roleName, roleColor == 0 ? Role.DEFAULT_COLOR_RAW : roleColor, hoisted, mentionable, rawPermissions));
}
final List<TemplateChannel> channels = new ArrayList<>();
for (int i = 0; i < channelsArray.length(); i++) {
DataObject obj = channelsArray.getObject(i);
final long channelId = obj.getLong("id");
final int type = obj.getInt("type");
final ChannelType channelType = ChannelType.fromId(type);
final String channelName = obj.getString("name");
final String topic = obj.getString("topic", null);
final int rawPosition = obj.getInt("position");
final long parentId = obj.getLong("parent_id", -1);
final boolean nsfw = obj.getBoolean("nsfw");
final int slowmode = obj.getInt("rate_limit_per_user");
final int bitrate = obj.getInt("bitrate");
final int userLimit = obj.getInt("user_limit");
final List<TemplateChannel.PermissionOverride> permissionOverrides = new ArrayList<>();
DataArray overrides = obj.getArray("permission_overwrites");
for (int j = 0; j < overrides.length(); j++) {
DataObject overrideObj = overrides.getObject(j);
final long overrideId = overrideObj.getLong("id");
final long allow = overrideObj.getLong("allow");
final long deny = overrideObj.getLong("deny");
permissionOverrides.add(new TemplateChannel.PermissionOverride(overrideId, allow, deny));
}
channels.add(new TemplateChannel(channelId, channelType, channelName, topic, rawPosition, parentId, type == 5, permissionOverrides, nsfw, slowmode, bitrate, userLimit));
}
TemplateChannel afkChannel = channels.stream().filter(templateChannel -> templateChannel.getIdLong() == afkChannelId).findFirst().orElse(null);
TemplateChannel systemChannel = channels.stream().filter(templateChannel -> templateChannel.getIdLong() == systemChannelId).findFirst().orElse(null);
final TemplateGuild guild = new TemplateGuild(guildId, guildName, guildDescription, guildIconId, guildVerificationLevel, notificationLevel, explicitContentLevel, locale, afkTimeout, afkChannel, systemChannel, roles, channels);
final boolean synced = !object.getBoolean("is_dirty", false);
return new Template(getJDA(), code, name, description, uses, creator, createdAt, updatedAt, guild, synced);
}
use of net.dv8tion.jda.api.entities.Guild.NotificationLevel in project JDA by DV8FromTheWorld.
the class EntityBuilder method createGuild.
public GuildImpl createGuild(long guildId, DataObject guildJson, TLongObjectMap<DataObject> members, int memberCount) {
final GuildImpl guildObj = new GuildImpl(getJDA(), guildId);
final String name = guildJson.getString("name", "");
final String iconId = guildJson.getString("icon", null);
final String splashId = guildJson.getString("splash", null);
final String description = guildJson.getString("description", null);
final String vanityCode = guildJson.getString("vanity_url_code", null);
final String bannerId = guildJson.getString("banner", null);
final String locale = guildJson.getString("preferred_locale", "en-US");
final DataArray roleArray = guildJson.getArray("roles");
final DataArray channelArray = guildJson.getArray("channels");
final DataArray threadArray = guildJson.getArray("threads");
final DataArray emotesArray = guildJson.getArray("emojis");
final DataArray voiceStateArray = guildJson.getArray("voice_states");
final Optional<DataArray> featuresArray = guildJson.optArray("features");
final Optional<DataArray> presencesArray = guildJson.optArray("presences");
final long ownerId = guildJson.getUnsignedLong("owner_id", 0L);
final long afkChannelId = guildJson.getUnsignedLong("afk_channel_id", 0L);
final long systemChannelId = guildJson.getUnsignedLong("system_channel_id", 0L);
final long rulesChannelId = guildJson.getUnsignedLong("rules_channel_id", 0L);
final long communityUpdatesChannelId = guildJson.getUnsignedLong("public_updates_channel_id", 0L);
final int boostCount = guildJson.getInt("premium_subscription_count", 0);
final int boostTier = guildJson.getInt("premium_tier", 0);
final int maxMembers = guildJson.getInt("max_members", 0);
final int maxPresences = guildJson.getInt("max_presences", 5000);
final int mfaLevel = guildJson.getInt("mfa_level", 0);
final int afkTimeout = guildJson.getInt("afk_timeout", 0);
final int verificationLevel = guildJson.getInt("verification_level", 0);
final int notificationLevel = guildJson.getInt("default_message_notifications", 0);
final int explicitContentLevel = guildJson.getInt("explicit_content_filter", 0);
final int nsfwLevel = guildJson.getInt("nsfw_level", -1);
final boolean boostProgressBarEnabled = guildJson.getBoolean("premium_progress_bar_enabled");
guildObj.setName(name).setIconId(iconId).setSplashId(splashId).setDescription(description).setBannerId(bannerId).setVanityCode(vanityCode).setMaxMembers(maxMembers).setMaxPresences(maxPresences).setOwnerId(ownerId).setAfkTimeout(Guild.Timeout.fromKey(afkTimeout)).setVerificationLevel(VerificationLevel.fromKey(verificationLevel)).setDefaultNotificationLevel(Guild.NotificationLevel.fromKey(notificationLevel)).setExplicitContentLevel(Guild.ExplicitContentLevel.fromKey(explicitContentLevel)).setRequiredMFALevel(Guild.MFALevel.fromKey(mfaLevel)).setLocale(locale).setBoostCount(boostCount).setBoostTier(boostTier).setMemberCount(memberCount).setNSFWLevel(Guild.NSFWLevel.fromKey(nsfwLevel)).setBoostProgressBarEnabled(boostProgressBarEnabled);
SnowflakeCacheViewImpl<Guild> guildView = getJDA().getGuildsView();
try (UnlockHook hook = guildView.writeLock()) {
guildView.getMap().put(guildId, guildObj);
}
guildObj.setFeatures(featuresArray.map(it -> StreamSupport.stream(it.spliterator(), false).map(String::valueOf).collect(Collectors.toSet())).orElse(Collections.emptySet()));
SnowflakeCacheViewImpl<Role> roleView = guildObj.getRolesView();
try (UnlockHook hook = roleView.writeLock()) {
TLongObjectMap<Role> map = roleView.getMap();
for (int i = 0; i < roleArray.length(); i++) {
DataObject obj = roleArray.getObject(i);
Role role = createRole(guildObj, obj, guildId);
map.put(role.getIdLong(), role);
if (role.getIdLong() == guildObj.getIdLong())
guildObj.setPublicRole(role);
}
}
for (int i = 0; i < channelArray.length(); i++) {
DataObject channelJson = channelArray.getObject(i);
createGuildChannel(guildObj, channelJson);
}
TLongObjectMap<DataObject> voiceStates = convertToUserMap((o) -> o.getUnsignedLong("user_id", 0L), voiceStateArray);
TLongObjectMap<DataObject> presences = presencesArray.map(o1 -> convertToUserMap(o2 -> o2.getObject("user").getUnsignedLong("id"), o1)).orElseGet(TLongObjectHashMap::new);
try (UnlockHook h1 = guildObj.getMembersView().writeLock();
UnlockHook h2 = getJDA().getUsersView().writeLock()) {
// this is done because we can still keep track of members in voice channels
for (DataObject memberJson : members.valueCollection()) {
long userId = memberJson.getObject("user").getUnsignedLong("id");
DataObject voiceState = voiceStates.get(userId);
DataObject presence = presences.get(userId);
updateMemberCache(createMember(guildObj, memberJson, voiceState, presence));
}
}
if (guildObj.getOwner() == null)
LOG.debug("Finished setup for guild with a null owner. GuildId: {} OwnerId: {}", guildId, guildJson.opt("owner_id").orElse(null));
if (guildObj.getMember(api.getSelfUser()) == null) {
LOG.error("Guild is missing a SelfMember. GuildId: {}", guildId);
LOG.debug("Guild is missing a SelfMember. GuildId: {} JSON: \n{}", guildId, guildJson);
// This is actually a gateway request
guildObj.retrieveMembersByIds(api.getSelfUser().getIdLong()).onSuccess(m -> {
if (m.isEmpty())
LOG.warn("Was unable to recover SelfMember for guild with id {}. This guild might be corrupted!", guildId);
else
LOG.debug("Successfully recovered SelfMember for guild with id {}.", guildId);
});
}
for (int i = 0; i < threadArray.length(); i++) {
DataObject threadJson = threadArray.getObject(i);
createThreadChannel(guildObj, threadJson, guildObj.getIdLong());
}
createGuildEmotePass(guildObj, emotesArray);
guildJson.optArray("stage_instances").map(arr -> arr.stream(DataArray::getObject)).ifPresent(list -> list.forEach(it -> createStageInstance(guildObj, it)));
guildObj.setAfkChannel(guildObj.getVoiceChannelById(afkChannelId)).setSystemChannel(guildObj.getTextChannelById(systemChannelId)).setRulesChannel(guildObj.getTextChannelById(rulesChannelId)).setCommunityUpdatesChannel(guildObj.getTextChannelById(communityUpdatesChannelId));
return guildObj;
}
Aggregations