fix(install): LiveKit перезапускается при изменении конфига
LiveKit читает livekit.yaml только при старте, а compose не замечает правок в примонтированном файле — из-за этого вебхуки не включались после обновления. Установщик сравнивает sha256 конфига с сохранённым и перезапускает сервис.
This commit is contained in:
+51
-2
@@ -44,6 +44,10 @@ export const PERMISSION_MANAGE_EMOJIS = 'MANAGE_EMOJIS';
|
||||
export const PERMISSION_SEND_MESSAGES = 'SEND_MESSAGES';
|
||||
export const PERMISSION_ATTACH_FILES = 'ATTACH_FILES';
|
||||
export const PERMISSION_ADD_REACTIONS = 'ADD_REACTIONS';
|
||||
export const PERMISSION_CONNECT_VOICE = 'CONNECT_VOICE';
|
||||
export const PERMISSION_MUTE_MEMBERS = 'MUTE_MEMBERS';
|
||||
export const PERMISSION_DEAFEN_MEMBERS = 'DEAFEN_MEMBERS';
|
||||
export const PERMISSION_MOVE_MEMBERS = 'MOVE_MEMBERS';
|
||||
|
||||
/** Есть ли у пользователя право с указанным именем. */
|
||||
export function hasPermission(permissions: readonly string[], name: string): boolean {
|
||||
@@ -99,6 +103,52 @@ export function canAdministerGuild(
|
||||
return isInstanceAdmin || canManageGuildSettings(permissions, ownerId, userId);
|
||||
}
|
||||
|
||||
/** Права модератора голосовых комнат: что доступно пользователю на сервере. */
|
||||
export interface VoiceModerationPermissions {
|
||||
mute: boolean;
|
||||
deafen: boolean;
|
||||
move: boolean;
|
||||
}
|
||||
|
||||
/**
|
||||
* Права на голосовую модерацию (AGENT.md 7.14): серверный мьют, глушение и
|
||||
* перемещение. Администратор инстанса видит все пункты, как и в остальном UI.
|
||||
*/
|
||||
export function voiceModerationPermissions(
|
||||
permissions: readonly string[],
|
||||
ownerId: string,
|
||||
userId: string | undefined,
|
||||
isInstanceAdmin = false,
|
||||
): VoiceModerationPermissions {
|
||||
if (isInstanceAdmin || (userId !== undefined && userId === ownerId)) {
|
||||
return { mute: true, deafen: true, move: true };
|
||||
}
|
||||
const administrator = hasPermission(permissions, PERMISSION_ADMINISTRATOR);
|
||||
return {
|
||||
mute: administrator || hasPermission(permissions, PERMISSION_MUTE_MEMBERS),
|
||||
deafen: administrator || hasPermission(permissions, PERMISSION_DEAFEN_MEMBERS),
|
||||
move: administrator || hasPermission(permissions, PERMISSION_MOVE_MEMBERS),
|
||||
};
|
||||
}
|
||||
|
||||
/** Может ли пользователь войти в голосовую комнату. */
|
||||
export function canConnectVoice(
|
||||
permissions: readonly string[],
|
||||
isInstanceAdmin = false,
|
||||
channelCanConnect?: boolean,
|
||||
): boolean {
|
||||
if (channelCanConnect === false) {
|
||||
return false;
|
||||
}
|
||||
if (isInstanceAdmin) {
|
||||
return true;
|
||||
}
|
||||
return (
|
||||
hasPermission(permissions, PERMISSION_ADMINISTRATOR) ||
|
||||
hasPermission(permissions, PERMISSION_CONNECT_VOICE)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Может ли пользователь модерировать сообщения (удалять и закреплять чужие).
|
||||
* Права приходят на уровне сервера, поэтому это приближение: сервер всё равно
|
||||
@@ -137,8 +187,7 @@ export function canManageEmojis(
|
||||
}
|
||||
|
||||
/** Может ли пользователь отправлять сообщения в комнату. */
|
||||
export function canSendMessages(
|
||||
permissions: readonly string[],
|
||||
export function canSendMessages( permissions: readonly string[],
|
||||
isInstanceAdmin = false,
|
||||
channelCanSend?: boolean,
|
||||
): boolean {
|
||||
|
||||
Reference in New Issue
Block a user