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(),
|
voice_state.save(),
|
||||||
emitEvent({
|
emitEvent({
|
||||||
event: "VOICE_STATE_UPDATE",
|
event: "VOICE_STATE_UPDATE",
|
||||||
data: voice_state,
|
data: voice_state.toPublicVoiceState(),
|
||||||
guild_id,
|
guild_id,
|
||||||
} as VoiceStateUpdateEvent),
|
} as VoiceStateUpdateEvent),
|
||||||
]);
|
]);
|
||||||
|
@ -490,7 +490,9 @@ export async function onIdentify(this: WebSocket, data: Payload) {
|
|||||||
guilds.filter((guild) => !guild.unavailable) as Guild[]
|
guilds.filter((guild) => !guild.unavailable) as Guild[]
|
||||||
).map((guild) => {
|
).map((guild) => {
|
||||||
return {
|
return {
|
||||||
voice_states: guild.voice_states,
|
voice_states: guild.voice_states.map((state) =>
|
||||||
|
state.toPublicVoiceState(),
|
||||||
|
),
|
||||||
id: guild.id,
|
id: guild.id,
|
||||||
embedded_activities: [],
|
embedded_activities: [],
|
||||||
};
|
};
|
||||||
|
@ -120,7 +120,7 @@ export async function onStreamCreate(this: WebSocket, data: Payload) {
|
|||||||
|
|
||||||
await emitEvent({
|
await emitEvent({
|
||||||
event: "VOICE_STATE_UPDATE",
|
event: "VOICE_STATE_UPDATE",
|
||||||
data: { ...voiceState },
|
data: voiceState.toPublicVoiceState(),
|
||||||
guild_id: voiceState.guild_id,
|
guild_id: voiceState.guild_id,
|
||||||
channel_id: voiceState.channel_id,
|
channel_id: voiceState.channel_id,
|
||||||
} as VoiceStateUpdateEvent);
|
} as VoiceStateUpdateEvent);
|
||||||
|
@ -59,7 +59,7 @@ export async function onStreamDelete(this: WebSocket, data: Payload) {
|
|||||||
|
|
||||||
await emitEvent({
|
await emitEvent({
|
||||||
event: "VOICE_STATE_UPDATE",
|
event: "VOICE_STATE_UPDATE",
|
||||||
data: { ...voiceState },
|
data: voiceState.toPublicVoiceState(),
|
||||||
guild_id: guildId,
|
guild_id: guildId,
|
||||||
channel_id: channelId,
|
channel_id: channelId,
|
||||||
} as VoiceStateUpdateEvent);
|
} as VoiceStateUpdateEvent);
|
||||||
|
@ -68,7 +68,7 @@ export async function onVoiceStateUpdate(this: WebSocket, data: Payload) {
|
|||||||
) {
|
) {
|
||||||
await emitEvent({
|
await emitEvent({
|
||||||
event: "VOICE_STATE_UPDATE",
|
event: "VOICE_STATE_UPDATE",
|
||||||
data: { ...voiceState, channel_id: null },
|
data: { ...voiceState.toPublicVoiceState(), channel_id: null },
|
||||||
guild_id: voiceState.guild_id,
|
guild_id: voiceState.guild_id,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -96,7 +96,11 @@ export async function onVoiceStateUpdate(this: WebSocket, data: Payload) {
|
|||||||
) {
|
) {
|
||||||
await emitEvent({
|
await emitEvent({
|
||||||
event: "VOICE_STATE_UPDATE",
|
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,
|
guild_id: prevState?.guild_id,
|
||||||
channel_id: prevState?.channel_id,
|
channel_id: prevState?.channel_id,
|
||||||
});
|
});
|
||||||
@ -117,13 +121,16 @@ export async function onVoiceStateUpdate(this: WebSocket, data: Payload) {
|
|||||||
voiceState.token = genVoiceToken();
|
voiceState.token = genVoiceToken();
|
||||||
voiceState.session_id = this.session_id;
|
voiceState.session_id = this.session_id;
|
||||||
|
|
||||||
const { id, member, ...newObj } = voiceState;
|
const { member } = voiceState;
|
||||||
|
|
||||||
await Promise.all([
|
await Promise.all([
|
||||||
voiceState.save(),
|
voiceState.save(),
|
||||||
emitEvent({
|
emitEvent({
|
||||||
event: "VOICE_STATE_UPDATE",
|
event: "VOICE_STATE_UPDATE",
|
||||||
data: { ...newObj, member: member?.toPublicMember() },
|
data: {
|
||||||
|
...voiceState.toPublicVoiceState(),
|
||||||
|
member: member?.toPublicMember(),
|
||||||
|
},
|
||||||
guild_id: voiceState.guild_id,
|
guild_id: voiceState.guild_id,
|
||||||
channel_id: voiceState.channel_id,
|
channel_id: voiceState.channel_id,
|
||||||
user_id: voiceState.user_id,
|
user_id: voiceState.user_id,
|
||||||
|
@ -24,6 +24,29 @@ import { Member } from "./Member";
|
|||||||
import { User } from "./User";
|
import { User } from "./User";
|
||||||
import { dbEngine } from "../util/Database";
|
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
|
//https://gist.github.com/vassjozsef/e482c65df6ee1facaace8b3c9ff66145#file-voice_state-ex
|
||||||
@Entity({
|
@Entity({
|
||||||
name: "voice_states",
|
name: "voice_states",
|
||||||
@ -96,4 +119,13 @@ export class VoiceState extends BaseClass {
|
|||||||
|
|
||||||
@Column({ nullable: true, default: null })
|
@Column({ nullable: true, default: null })
|
||||||
request_to_speak_timestamp?: Date;
|
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,
|
ConnectedAccount,
|
||||||
Interaction,
|
Interaction,
|
||||||
ApplicationCommand,
|
ApplicationCommand,
|
||||||
VoiceState,
|
|
||||||
Message,
|
Message,
|
||||||
PartialEmoji,
|
PartialEmoji,
|
||||||
Invite,
|
Invite,
|
||||||
@ -43,6 +42,7 @@ import {
|
|||||||
ReadyPrivateChannel,
|
ReadyPrivateChannel,
|
||||||
GuildOrUnavailable,
|
GuildOrUnavailable,
|
||||||
GuildCreateResponse,
|
GuildCreateResponse,
|
||||||
|
PublicVoiceState,
|
||||||
} from "@spacebar/util";
|
} from "@spacebar/util";
|
||||||
|
|
||||||
export interface Event {
|
export interface Event {
|
||||||
@ -431,7 +431,7 @@ export interface UserConnectionsUpdateEvent extends Event {
|
|||||||
|
|
||||||
export interface VoiceStateUpdateEvent extends Event {
|
export interface VoiceStateUpdateEvent extends Event {
|
||||||
event: "VOICE_STATE_UPDATE";
|
event: "VOICE_STATE_UPDATE";
|
||||||
data: VoiceState & {
|
data: PublicVoiceState & {
|
||||||
member: PublicMember;
|
member: PublicMember;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user