hide private voice state tokens from whole guild
This commit is contained in:
parent
bbcd690620
commit
bf8a88d07b
@ -93,7 +93,7 @@ router.patch(
|
||||
voice_state.save(),
|
||||
emitEvent({
|
||||
event: "VOICE_STATE_UPDATE",
|
||||
data: voice_state,
|
||||
data: voice_state.toPublicVoiceState(),
|
||||
guild_id,
|
||||
} as VoiceStateUpdateEvent),
|
||||
]);
|
||||
|
@ -490,7 +490,9 @@ export async function onIdentify(this: WebSocket, data: Payload) {
|
||||
guilds.filter((guild) => !guild.unavailable) as Guild[]
|
||||
).map((guild) => {
|
||||
return {
|
||||
voice_states: guild.voice_states,
|
||||
voice_states: guild.voice_states.map((state) =>
|
||||
state.toPublicVoiceState(),
|
||||
),
|
||||
id: guild.id,
|
||||
embedded_activities: [],
|
||||
};
|
||||
|
@ -120,7 +120,7 @@ export async function onStreamCreate(this: WebSocket, data: Payload) {
|
||||
|
||||
await emitEvent({
|
||||
event: "VOICE_STATE_UPDATE",
|
||||
data: { ...voiceState },
|
||||
data: voiceState.toPublicVoiceState(),
|
||||
guild_id: voiceState.guild_id,
|
||||
channel_id: voiceState.channel_id,
|
||||
} as VoiceStateUpdateEvent);
|
||||
|
@ -59,7 +59,7 @@ export async function onStreamDelete(this: WebSocket, data: Payload) {
|
||||
|
||||
await emitEvent({
|
||||
event: "VOICE_STATE_UPDATE",
|
||||
data: { ...voiceState },
|
||||
data: voiceState.toPublicVoiceState(),
|
||||
guild_id: guildId,
|
||||
channel_id: channelId,
|
||||
} as VoiceStateUpdateEvent);
|
||||
|
@ -68,7 +68,7 @@ export async function onVoiceStateUpdate(this: WebSocket, data: Payload) {
|
||||
) {
|
||||
await emitEvent({
|
||||
event: "VOICE_STATE_UPDATE",
|
||||
data: { ...voiceState, channel_id: null },
|
||||
data: { ...voiceState.toPublicVoiceState(), channel_id: null },
|
||||
guild_id: voiceState.guild_id,
|
||||
});
|
||||
}
|
||||
@ -96,7 +96,11 @@ export async function onVoiceStateUpdate(this: WebSocket, data: Payload) {
|
||||
) {
|
||||
await emitEvent({
|
||||
event: "VOICE_STATE_UPDATE",
|
||||
data: { ...voiceState, channel_id: null, guild_id: null },
|
||||
data: {
|
||||
...voiceState.toPublicVoiceState(),
|
||||
channel_id: null,
|
||||
guild_id: null,
|
||||
},
|
||||
guild_id: prevState?.guild_id,
|
||||
channel_id: prevState?.channel_id,
|
||||
});
|
||||
@ -117,13 +121,16 @@ export async function onVoiceStateUpdate(this: WebSocket, data: Payload) {
|
||||
voiceState.token = genVoiceToken();
|
||||
voiceState.session_id = this.session_id;
|
||||
|
||||
const { id, member, ...newObj } = voiceState;
|
||||
const { member } = voiceState;
|
||||
|
||||
await Promise.all([
|
||||
voiceState.save(),
|
||||
emitEvent({
|
||||
event: "VOICE_STATE_UPDATE",
|
||||
data: { ...newObj, member: member?.toPublicMember() },
|
||||
data: {
|
||||
...voiceState.toPublicVoiceState(),
|
||||
member: member?.toPublicMember(),
|
||||
},
|
||||
guild_id: voiceState.guild_id,
|
||||
channel_id: voiceState.channel_id,
|
||||
user_id: voiceState.user_id,
|
||||
|
@ -24,6 +24,29 @@ import { Member } from "./Member";
|
||||
import { User } from "./User";
|
||||
import { dbEngine } from "../util/Database";
|
||||
|
||||
export enum PublicVoiceStateEnum {
|
||||
user_id,
|
||||
suppress,
|
||||
session_id,
|
||||
self_video,
|
||||
self_mute,
|
||||
self_deaf,
|
||||
self_stream,
|
||||
request_to_speak_timestamp,
|
||||
mute,
|
||||
deaf,
|
||||
channel_id,
|
||||
guild_id,
|
||||
}
|
||||
|
||||
export type PublicVoiceStateKeys = keyof typeof PublicVoiceStateEnum;
|
||||
|
||||
export const PublicVoiceStateProjection = Object.values(
|
||||
PublicVoiceStateEnum,
|
||||
).filter((x) => typeof x === "string") as PublicVoiceStateKeys[];
|
||||
|
||||
export type PublicVoiceState = Pick<VoiceState, PublicVoiceStateKeys>;
|
||||
|
||||
//https://gist.github.com/vassjozsef/e482c65df6ee1facaace8b3c9ff66145#file-voice_state-ex
|
||||
@Entity({
|
||||
name: "voice_states",
|
||||
@ -96,4 +119,13 @@ export class VoiceState extends BaseClass {
|
||||
|
||||
@Column({ nullable: true, default: null })
|
||||
request_to_speak_timestamp?: Date;
|
||||
|
||||
toPublicVoiceState() {
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
const voiceState: any = {};
|
||||
PublicVoiceStateProjection.forEach((x) => {
|
||||
voiceState[x] = this[x];
|
||||
});
|
||||
return voiceState as PublicVoiceState;
|
||||
}
|
||||
}
|
||||
|
@ -21,7 +21,6 @@ import {
|
||||
ConnectedAccount,
|
||||
Interaction,
|
||||
ApplicationCommand,
|
||||
VoiceState,
|
||||
Message,
|
||||
PartialEmoji,
|
||||
Invite,
|
||||
@ -43,6 +42,7 @@ import {
|
||||
ReadyPrivateChannel,
|
||||
GuildOrUnavailable,
|
||||
GuildCreateResponse,
|
||||
PublicVoiceState,
|
||||
} from "@spacebar/util";
|
||||
|
||||
export interface Event {
|
||||
@ -431,7 +431,7 @@ export interface UserConnectionsUpdateEvent extends Event {
|
||||
|
||||
export interface VoiceStateUpdateEvent extends Event {
|
||||
event: "VOICE_STATE_UPDATE";
|
||||
data: VoiceState & {
|
||||
data: PublicVoiceState & {
|
||||
member: PublicMember;
|
||||
};
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user