Search in sources :

Example 1 with UserChangeDeafenedEventImpl

use of org.javacord.core.event.user.UserChangeDeafenedEventImpl in project Javacord by BtoBastian.

the class VoiceStateUpdateHandler method handleServerVoiceChannel.

private void handleServerVoiceChannel(JsonNode packet, long userId) {
    api.getPossiblyUnreadyServerById(packet.get("guild_id").asLong()).map(ServerImpl.class::cast).ifPresent(server -> {
        Member member = new MemberImpl(api, server, packet.get("member"), null);
        Optional<ServerVoiceChannelImpl> oldChannel = server.getConnectedVoiceChannel(userId).map(ServerVoiceChannelImpl.class::cast);
        Optional<ServerVoiceChannelImpl> newChannel;
        if (packet.hasNonNull("channel_id")) {
            newChannel = server.getVoiceChannelById(packet.get("channel_id").asLong()).map(ServerVoiceChannelImpl.class::cast);
        } else {
            newChannel = Optional.empty();
        }
        if (!newChannel.equals(oldChannel)) {
            oldChannel.ifPresent(channel -> {
                channel.removeConnectedUser(userId);
                dispatchServerVoiceChannelMemberLeaveEvent(member, newChannel.orElse(null), channel, server);
            });
            newChannel.ifPresent(channel -> {
                channel.addConnectedUser(userId);
                dispatchServerVoiceChannelMemberJoinEvent(member, channel, oldChannel.orElse(null), server);
            });
        }
        if (!packet.hasNonNull("member")) {
            logger.warn("Received VOICE_STATE_UPDATE packet without non-null member field: {}", packet);
            return;
        }
        MemberImpl newMember = new MemberImpl(api, server, packet.get("member"), null);
        Member oldMember = server.getRealMemberById(packet.get("user_id").asLong()).orElse(null);
        boolean newSelfMuted = packet.get("self_mute").asBoolean();
        boolean oldSelfMuted = server.isSelfMuted(userId);
        if (newSelfMuted != oldSelfMuted) {
            UserChangeSelfMutedEventImpl event = new UserChangeSelfMutedEventImpl(newMember, oldMember);
            api.getEventDispatcher().dispatchUserChangeSelfMutedEvent(server, server, newMember.getUser(), event);
        }
        boolean newSelfDeafened = packet.get("self_deaf").asBoolean();
        boolean oldSelfDeafened = server.isSelfDeafened(userId);
        if (newSelfDeafened != oldSelfDeafened) {
            UserChangeSelfDeafenedEventImpl event = new UserChangeSelfDeafenedEventImpl(newMember, oldMember);
            api.getEventDispatcher().dispatchUserChangeSelfDeafenedEvent(server, server, newMember.getUser(), event);
        }
        boolean newMuted = packet.get("mute").asBoolean();
        boolean oldMuted = server.isMuted(userId);
        if (newMuted != oldMuted) {
            server.setMuted(userId, newMuted);
            UserChangeMutedEventImpl event = new UserChangeMutedEventImpl(newMember, oldMember);
            api.getEventDispatcher().dispatchUserChangeMutedEvent(server, server, newMember.getUser(), event);
        }
        boolean newDeafened = packet.get("deaf").asBoolean();
        boolean oldDeafened = server.isDeafened(userId);
        if (newDeafened != oldDeafened) {
            server.setDeafened(userId, newDeafened);
            UserChangeDeafenedEventImpl event = new UserChangeDeafenedEventImpl(newMember, oldMember);
            api.getEventDispatcher().dispatchUserChangeDeafenedEvent(server, server, newMember.getUser(), event);
        }
    });
}
Also used : UserChangeSelfDeafenedEventImpl(org.javacord.core.event.user.UserChangeSelfDeafenedEventImpl) MemberImpl(org.javacord.core.entity.user.MemberImpl) UserChangeSelfMutedEventImpl(org.javacord.core.event.user.UserChangeSelfMutedEventImpl) UserChangeMutedEventImpl(org.javacord.core.event.user.UserChangeMutedEventImpl) Member(org.javacord.core.entity.user.Member) ServerVoiceChannelImpl(org.javacord.core.entity.channel.ServerVoiceChannelImpl) UserChangeDeafenedEventImpl(org.javacord.core.event.user.UserChangeDeafenedEventImpl)

Aggregations

ServerVoiceChannelImpl (org.javacord.core.entity.channel.ServerVoiceChannelImpl)1 Member (org.javacord.core.entity.user.Member)1 MemberImpl (org.javacord.core.entity.user.MemberImpl)1 UserChangeDeafenedEventImpl (org.javacord.core.event.user.UserChangeDeafenedEventImpl)1 UserChangeMutedEventImpl (org.javacord.core.event.user.UserChangeMutedEventImpl)1 UserChangeSelfDeafenedEventImpl (org.javacord.core.event.user.UserChangeSelfDeafenedEventImpl)1 UserChangeSelfMutedEventImpl (org.javacord.core.event.user.UserChangeSelfMutedEventImpl)1