void OnEvent(string eventname, int seq, JsonNode data) { sequence = seq; switch (eventname) { case "READY": gatewayversion = data.SelectValue <int>("v"); sessionid = data.SelectValue <string>("session_id"); OnConnected(); break; case "RESUMED": OnConnected(); break; case "INVALID_SESSION": Disconnect(1021, "Authentication failure", /*data.SelectValue<bool>("d")*/ false); break; case "CHANNEL_CREATE": ChannelCreated?.Invoke(JSON.Serializer.Read <Channel>(data)); break; case "CHANNEL_UPDATE": ChannelUpdated?.Invoke(JSON.Serializer.Read <Channel>(data)); break; case "CHANNEL_DELETE": ChannelDeleted?.Invoke(JSON.Serializer.Read <Channel>(data)); break; case "CHANNEL_PINS_UPDATED": ChannelPinUpdated?.Invoke(data.SelectValue <string>("channel_id")); break; case "MESSAGE_CREATE": MessageCreated?.Invoke(JSON.Serializer.Read <Message>(data)); break; case "MESSAGE_UPDATE": MessageUpdated?.Invoke(JSON.Serializer.Read <Message>(data)); break; case "MESSAGE_DELETE": MessageDeleted?.Invoke(data.SelectValue <string>("channel_id"), data.SelectValue <string>("id")); break; case "MESSAGE_DELETE_BULK": MessagesDeleted?.Invoke(data.SelectValue <string>("channel_id"), data.SelectValue <string[]>("ids")); break; case "GUILD_CREATE": GuildCreated?.Invoke(JSON.Serializer.Read <Guild>(data)); break; case "GUILD_UPDATE": GuildUpdated?.Invoke(JSON.Serializer.Read <Guild>(data)); break; case "GUILD_DELETE": GuildDeleted?.Invoke(JSON.Serializer.Read <UnavailableGuild>(data)); break; case "GUILD_BAN_ADD": UserBanned?.Invoke(JSON.Serializer.Read <GuildUser>(data)); break; case "GUILD_BAN_REMOVED": UserUnbanned?.Invoke(JSON.Serializer.Read <GuildUser>(data)); break; case "GUILD_EMOJIS_UPDATE": EmojisUpdated?.Invoke(data.SelectValue <string>("guild_id"), JSON.Serializer.Read <Emoji[]>(data["emojis"])); break; case "GUILD_INTEGRATIONS_UPDATE": GuildIntegrationsUpdated?.Invoke(data.SelectValue <string>("guild_id")); break; case "GUILD_MEMBER_ADD": GuildMemberAdded?.Invoke(data.SelectValue <string>("guild_id"), JSON.Serializer.Read <GuildMember>(data)); break; case "GUILD_MEMBER_REMOVE": GuildMemberRemoved?.Invoke(data.SelectValue <string>("guild_id"), JSON.Serializer.Read <User>(data)); break; case "GUILD_MEMBER_UPDATE": GuildMemberUpdated?.Invoke(data.SelectValue <string>("guild_id"), JSON.Serializer.Read <Role[]>(data["roles"]), JSON.Serializer.Read <User>(data["user"]), data.SelectValue <string>("nick")); break; case "GUILD_MEMBERS_CHUNK": GuildMembersChunk?.Invoke(data.SelectValue <string>("guild_id"), JSON.Serializer.Read <GuildMember[]>(data["members"])); break; case "GUILD_ROLE_CREATE": GuildRoleCreated?.Invoke(data.SelectValue <string>("guild_id"), JSON.Serializer.Read <Role>(data["role"])); break; case "GUILD_ROLE_UPDATE": GuildRoleUpdated?.Invoke(data.SelectValue <string>("guild_id"), JSON.Serializer.Read <Role>(data["role"])); break; case "GUILD_ROLE_DELETE": GuildRoleDeleted?.Invoke(data.SelectValue <string>("guild_id"), data.SelectValue <string>("role_id")); break; case "MESSAGE_REACTION_ADD": MessageReactionAdded?.Invoke(data.SelectValue <string>("user_id"), data.SelectValue <string>("channel_id"), data.SelectValue <string>("message_id"), JSON.Serializer.Read <Emoji>(data["emoji"])); break; case "MESSAGE_REACTION_REMOVE": MessageReactionRemoved?.Invoke(data.SelectValue <string>("user_id"), data.SelectValue <string>("channel_id"), data.SelectValue <string>("message_id"), JSON.Serializer.Read <Emoji>(data["emoji"])); break; case "MESSAGE_REACTION_REMOVE_ALL": MessageReactionRemovedAll?.Invoke(data.SelectValue <string>("channel_id"), data.SelectValue <string>("message_id")); break; case "PRESENCE_UPDATE": PresenceUpdated?.Invoke(JSON.Serializer.Read <PresenceUpdate>(data)); break; case "TYPING_START": TypingStarted?.Invoke(data.SelectValue <string>("guild_id"), data.SelectValue <string>("user_id"), data.SelectValue <int>("timestamp").ToDateTime()); break; case "USER_UPDATE": UserUpdated?.Invoke(JSON.Serializer.Read <User>(data)); break; case "VOICE_STATE_UPDATE": VoiceStateUpdated?.Invoke(JSON.Serializer.Read <VoiceState>(data)); break; case "VOICE_SERVER_UPDATE": VoiceServerUpdated?.Invoke(data.SelectValue <string>("token"), data.SelectValue <string>("guild_id"), data.SelectValue <string>("endpoint")); break; case "WEBHOOKS_UPDATE": WebhooksUpdated?.Invoke(data.SelectValue <string>("guild_id"), data.SelectValue <string>("channel_id")); break; default: Logger.Warning(this, $"'{eventname}' event not handled", data.ToString()); break; } }
private void HandleDispatchEvent(GatewayPayload evnt, TaskCompletionSource <bool> readySignal) { switch (evnt.DispatchType) { case GatewayDispatchType.Ready: var readyEvent = evnt.Data as ReadyEvent; SetSession(readyEvent.SessionId); readySignal.TrySetResult(true); Ready?.Invoke(readyEvent); break; case GatewayDispatchType.Resumed: readySignal.TrySetResult(true); Resumed?.Invoke(); break; case GatewayDispatchType.GuildCreate: GuildCreate?.Invoke(evnt.Data as GatewayGuild); break; case GatewayDispatchType.GuildUpdate: GuildUpdate?.Invoke(evnt.Data as Guild); break; case GatewayDispatchType.GuildDelete: GuildDelete?.Invoke(evnt.Data as UnavailableGuild); break; case GatewayDispatchType.ChannelCreate: ChannelCreate?.Invoke(evnt.Data as Channel); break; case GatewayDispatchType.ChannelUpdate: ChannelUpdate?.Invoke(evnt.Data as Channel); break; case GatewayDispatchType.ChannelDelete: ChannelDelete?.Invoke(evnt.Data as Channel); break; case GatewayDispatchType.ChannelPinsUpdate: ChannelPinsUpdate?.Invoke(evnt.Data as ChannelPinsUpdateEvent); break; case GatewayDispatchType.GuildMemberAdd: GuildMemberAdd?.Invoke(evnt.Data as GuildMemberAddEvent); break; case GatewayDispatchType.GuildMemberUpdate: GuildMemberUpdate?.Invoke(evnt.Data as GuildMemberUpdateEvent); break; case GatewayDispatchType.GuildMemberRemove: GuildMemberRemove?.Invoke(evnt.Data as GuildMemberRemoveEvent); break; case GatewayDispatchType.GuildMembersChunk: GuildMembersChunk?.Invoke(evnt.Data as GuildMembersChunkEvent); break; case GatewayDispatchType.GuildRoleCreate: GuildRoleCreate?.Invoke(evnt.Data as GuildRoleCreateEvent); break; case GatewayDispatchType.GuildRoleUpdate: GuildRoleUpdate?.Invoke(evnt.Data as GuildRoleUpdateEvent); break; case GatewayDispatchType.GuildRoleDelete: GuildRoleDelete?.Invoke(evnt.Data as GuildRoleDeleteEvent); break; case GatewayDispatchType.GuildBanAdd: GuildBanAdd?.Invoke(evnt.Data as GuildBanAddEvent); break; case GatewayDispatchType.GuildBanRemove: GuildBanRemove?.Invoke(evnt.Data as GuildBanRemoveEvent); break; case GatewayDispatchType.GuildEmojisUpdate: GuildEmojisUpdate?.Invoke(evnt.Data as GuildEmojiUpdateEvent); break; case GatewayDispatchType.GuildIntegrationsUpdate: GuildIntegrationsUpdate?.Invoke(evnt.Data as GuildIntegrationsUpdateEvent); break; case GatewayDispatchType.MessageCreate: MessageCreate?.Invoke(evnt.Data as Message); break; case GatewayDispatchType.MessageUpdate: MessageUpdate?.Invoke(evnt.Data as Message); break; case GatewayDispatchType.MessageDelete: MessageDelete?.Invoke(evnt.Data as MessageDeleteEvent); break; case GatewayDispatchType.MessageDeleteBulk: MessageDeleteBulk?.Invoke(evnt.Data as MessageDeleteBulkEvent); break; case GatewayDispatchType.MessageReactionAdd: MessageReactionAdd?.Invoke(evnt.Data as MessageReactionAddEvent); break; case GatewayDispatchType.MessageReactionRemove: MessageReactionRemove?.Invoke(evnt.Data as MessageReactionRemoveEvent); break; case GatewayDispatchType.MessageReactionRemoveAll: MessageReactionRemoveAll?.Invoke(evnt.Data as MessageReactionRemoveAllEvent); break; case GatewayDispatchType.PresenceUpdate: PresenceUpdate?.Invoke(evnt.Data as Presence); break; case GatewayDispatchType.UserUpdate: UserUpdate?.Invoke(evnt.Data as User); break; case GatewayDispatchType.TypingStart: TypingStart?.Invoke(evnt.Data as TypingStartEvent); break; case GatewayDispatchType.VoiceStateUpdate: VoiceStateUpdate?.Invoke(evnt.Data as VoiceState); break; case GatewayDispatchType.VoiceServerUpdate: VoiceServerUpdate?.Invoke(evnt.Data as VoiceServerUpdateEvent); break; case GatewayDispatchType.WebhooksUpdate: WebhooksUpdate?.Invoke(evnt.Data as WebhooksUpdateEvent); break; } }