#[repr(u16)] #[derive(Debug, Clone, Copy, PartialEq, Eq)] pub enum PacketId { Hello = 0x0001, Auth = 0x0002, Session = 0x0003, Ping = 0x0004, Pong = 0x0005, VoicePacket = 0x0010, VoiceState = 0x0011, ChatMessage = 0x0020, ChatHistory = 0x0021, JoinChannel = 0x0030, LeaveChannel = 0x0031, ChannelState = 0x0032, ChannelCreate = 0x0033, ChannelDelete = 0x0034, ChannelList = 0x0035, ChannelEdit = 0x0036, UserJoin = 0x0040, UserLeave = 0x0041, PermissionCheck = 0x0050, PermissionDeny = 0x0051, DmStart = 0x0060, DmMessage = 0x0061, DmHistory = 0x0062, DmReadAck = 0x0063, E2eeDmKeyExchange = 0x0071, E2eeDmKeyExchangeAck = 0x0072, E2eeDmMessage = 0x0073, E2eeDmHistory = 0x0074, ReadReceipt = 0x0064, ReadReceiptBroadcast = 0x0065, MessageReactionAdd = 0x0066, MessageReactionRemove = 0x0067, MessageEdit = 0x0068, MessageDelete = 0x0069, TypingStart = 0x0070, GuildCreate = 0x0100, GuildDelete = 0x0101, GuildList = 0x0102, GuildMemberJoin = 0x0103, GuildMemberLeave = 0x0104, GuildMemberKick = 0x0105, RoleCreate = 0x0106, RoleDelete = 0x0107, InviteCreate = 0x0108, InviteAccept = 0x0109, InviteDelete = 0x010A, UserRoleUpdate = 0x010B, GuildAuditLogFetch = 0x010C, GuildAuditLog = 0x010D, GuildMemberListFetch = 0x010E, GuildMemberList = 0x010F, GuildRoleAssign = 0x0110, GuildRoleUnassign = 0x0111, GuildRoleListFetch = 0x0112, GuildRoleList = 0x0113, PresenceUpdate = 0x0140, PresenceSync = 0x0141, PresenceEvent = 0x0142, FriendRequest = 0x0150, FriendAccept = 0x0151, FriendDecline = 0x0152, FriendRemove = 0x0153, FriendList = 0x0154, BlockUser = 0x0155, UnblockUser = 0x0156, BlockList = 0x0157, Error = 0x00F0, Disconnect = 0x00FF, } impl PacketId { pub fn from_u16(v: u16) -> Option { match v { 0x0001 => Some(Self::Hello), 0x0002 => Some(Self::Auth), 0x0003 => Some(Self::Session), 0x0004 => Some(Self::Ping), 0x0005 => Some(Self::Pong), 0x0010 => Some(Self::VoicePacket), 0x0011 => Some(Self::VoiceState), 0x0020 => Some(Self::ChatMessage), 0x0021 => Some(Self::ChatHistory), 0x0030 => Some(Self::JoinChannel), 0x0031 => Some(Self::LeaveChannel), 0x0032 => Some(Self::ChannelState), 0x0033 => Some(Self::ChannelCreate), 0x0034 => Some(Self::ChannelDelete), 0x0035 => Some(Self::ChannelList), 0x0036 => Some(Self::ChannelEdit), 0x0040 => Some(Self::UserJoin), 0x0041 => Some(Self::UserLeave), 0x0050 => Some(Self::PermissionCheck), 0x0051 => Some(Self::PermissionDeny), 0x0060 => Some(Self::DmStart), 0x0061 => Some(Self::DmMessage), 0x0062 => Some(Self::DmHistory), 0x0063 => Some(Self::DmReadAck), 0x0064 => Some(Self::ReadReceipt), 0x0065 => Some(Self::ReadReceiptBroadcast), 0x0066 => Some(Self::MessageReactionAdd), 0x0067 => Some(Self::MessageReactionRemove), 0x0068 => Some(Self::MessageEdit), 0x0069 => Some(Self::MessageDelete), 0x0070 => Some(Self::TypingStart), 0x0071 => Some(Self::E2eeDmKeyExchange), 0x0072 => Some(Self::E2eeDmKeyExchangeAck), 0x0073 => Some(Self::E2eeDmMessage), 0x0074 => Some(Self::E2eeDmHistory), 0x0100 => Some(Self::GuildCreate), 0x0101 => Some(Self::GuildDelete), 0x0102 => Some(Self::GuildList), 0x0103 => Some(Self::GuildMemberJoin), 0x0104 => Some(Self::GuildMemberLeave), 0x0105 => Some(Self::GuildMemberKick), 0x0106 => Some(Self::RoleCreate), 0x0107 => Some(Self::RoleDelete), 0x0108 => Some(Self::InviteCreate), 0x0109 => Some(Self::InviteAccept), 0x010A => Some(Self::InviteDelete), 0x010B => Some(Self::UserRoleUpdate), 0x010C => Some(Self::GuildAuditLogFetch), 0x010D => Some(Self::GuildAuditLog), 0x010E => Some(Self::GuildMemberListFetch), 0x010F => Some(Self::GuildMemberList), 0x0110 => Some(Self::GuildRoleAssign), 0x0111 => Some(Self::GuildRoleUnassign), 0x0112 => Some(Self::GuildRoleListFetch), 0x0113 => Some(Self::GuildRoleList), 0x0140 => Some(Self::PresenceUpdate), 0x0141 => Some(Self::PresenceSync), 0x0142 => Some(Self::PresenceEvent), 0x0150 => Some(Self::FriendRequest), 0x0151 => Some(Self::FriendAccept), 0x0152 => Some(Self::FriendDecline), 0x0153 => Some(Self::FriendRemove), 0x0154 => Some(Self::FriendList), 0x0155 => Some(Self::BlockUser), 0x0156 => Some(Self::UnblockUser), 0x0157 => Some(Self::BlockList), 0x00F0 => Some(Self::Error), 0x00FF => Some(Self::Disconnect), _ => None, } } } #[repr(u8)] #[derive(Debug, Clone, Copy, PartialEq, Eq)] pub enum ErrorCode { VersionMismatch = 0x01, AuthFailed = 0x02, SessionExpired = 0x03, PermissionDenied = 0x04, ChannelNotFound = 0x05, RateLimited = 0x06, InvalidPacket = 0x07, NodeUnavailable = 0x08, GuildNotFound = 0x09, Blocked = 0x0A, Internal = 0xFF, } impl ErrorCode { pub fn from_u32(v: u32) -> Option { match v { 0x01 => Some(Self::VersionMismatch), 0x02 => Some(Self::AuthFailed), 0x03 => Some(Self::SessionExpired), 0x04 => Some(Self::PermissionDenied), 0x05 => Some(Self::ChannelNotFound), 0x06 => Some(Self::RateLimited), 0x07 => Some(Self::InvalidPacket), 0x08 => Some(Self::NodeUnavailable), 0x09 => Some(Self::GuildNotFound), 0x0A => Some(Self::Blocked), 0xFF => Some(Self::Internal), _ => None, } } }