summary refs log tree commit diff
path: root/gateway/src
diff options
context:
space:
mode:
Diffstat (limited to 'gateway/src')
-rw-r--r--gateway/src/opcodes/LazyRequest.ts27
-rw-r--r--gateway/src/opcodes/VoiceStateUpdate.ts5
-rw-r--r--gateway/src/schema/Identify.ts2
-rw-r--r--gateway/src/schema/VoiceStateUpdateSchema.ts8
4 files changed, 34 insertions, 8 deletions
diff --git a/gateway/src/opcodes/LazyRequest.ts b/gateway/src/opcodes/LazyRequest.ts

index 2156070f..7503ee61 100644 --- a/gateway/src/opcodes/LazyRequest.ts +++ b/gateway/src/opcodes/LazyRequest.ts
@@ -42,6 +42,8 @@ async function getMembers(guild_id: string, range: [number, number]) { .flat() .unique((r: Role) => r.id); + const offlineItems = []; + for (const role of member_roles) { // @ts-ignore const [role_members, other_members] = partition(members, (m: Member) => @@ -63,7 +65,7 @@ async function getMembers(guild_id: string, range: [number, number]) { const session = member.user.sessions.first(); // TODO: properly mock/hide offline/invisible status - items.push({ + const item = { member: { ...member, roles, @@ -74,16 +76,35 @@ async function getMembers(guild_id: string, range: [number, number]) { user: { id: member.user.id }, }, }, - }); + } + + if (!member?.user?.sessions || !member.user.sessions.length) { + offlineItems.push(item); + group.count--; + continue; + } + + items.push(item); } members = other_members; } + if (offlineItems.length) { + const group = { + count: offlineItems.length, + id: "offline", + }; + items.push({ group }); + groups.push(group); + + items.push(...offlineItems); + } + return { items, groups, range, - members: items.map((x) => x.member).filter((x) => x), + members: items.map((x) => 'member' in x ? x.member : undefined).filter(x => !!x), }; } diff --git a/gateway/src/opcodes/VoiceStateUpdate.ts b/gateway/src/opcodes/VoiceStateUpdate.ts
index 321e6b17..ec4b1a92 100644 --- a/gateway/src/opcodes/VoiceStateUpdate.ts +++ b/gateway/src/opcodes/VoiceStateUpdate.ts
@@ -58,6 +58,9 @@ export async function onVoiceStateUpdate(this: WebSocket, data: Payload) { }); } + // 'Fix' for this one voice state error + if (!voiceState.guild_id) return; + //TODO the member should only have these properties: hoisted_role, deaf, joined_at, mute, roles, user //TODO the member.user should only have these properties: avatar, discriminator, id, username //TODO this may fail @@ -65,7 +68,7 @@ export async function onVoiceStateUpdate(this: WebSocket, data: Payload) { where: { id: voiceState.user_id, guild_id: voiceState.guild_id }, relations: ["user", "roles"], }); - + //If the session changed we generate a new token if (voiceState.session_id !== this.session_id) voiceState.token = genVoiceToken(); diff --git a/gateway/src/schema/Identify.ts b/gateway/src/schema/Identify.ts
index 3608a66a..6a6593c1 100644 --- a/gateway/src/schema/Identify.ts +++ b/gateway/src/schema/Identify.ts
@@ -42,7 +42,7 @@ export const IdentifySchema = { $read_state_version: Number, $user_guild_settings_version: Number, $user_settings_version: undefined, - $useruser_guild_settings_version: number, + $useruser_guild_settings_version: Number, }, $v: Number, $version: Number, diff --git a/gateway/src/schema/VoiceStateUpdateSchema.ts b/gateway/src/schema/VoiceStateUpdateSchema.ts
index 9efa191e..f6480414 100644 --- a/gateway/src/schema/VoiceStateUpdateSchema.ts +++ b/gateway/src/schema/VoiceStateUpdateSchema.ts
@@ -3,7 +3,8 @@ export const VoiceStateUpdateSchema = { $channel_id: String, self_mute: Boolean, self_deaf: Boolean, - self_video: Boolean, + $self_video: Boolean, //required in docs but bots don't always send it + $preferred_region: String, }; export interface VoiceStateUpdateSchema { @@ -11,5 +12,6 @@ export interface VoiceStateUpdateSchema { channel_id?: string; self_mute: boolean; self_deaf: boolean; - self_video: boolean; -} + self_video?: boolean; + preferred_region?: string; +} \ No newline at end of file