fix(web): баннер сервера из снапшота, приглашение, встроенные звуки

- READY-снапшот больше не теряет banner/splash/accent: шапка сервера
  показывает баннер сразу после подключения (AGENT.md 7.4)
- GUILD_UPDATE несёт всё оформление, клиент применяет его без перезагрузки
- кнопка приглашения в шапке сервера со ссылкой и копированием
- встроенные звуки интерфейса на Web Audio с разблокировкой по жесту
- object URL превью через безопасные обёртки (jsdom и урезанные webview)
This commit is contained in:
2026-09-21 00:04:49 +03:00
parent 6882516340
commit 4ea2965892
22 changed files with 989 additions and 56 deletions
+15
View File
@@ -22,6 +22,11 @@ export interface GuildUpdateEvent {
guild_id: string;
name?: string;
description?: string;
/** Оформление сервера (AGENT.md 7.4): пустая строка означает «убрано». */
icon_file_id?: string;
banner_file_id?: string;
splash_file_id?: string;
accent_color?: number;
}
export interface GuildDeleteEvent {
@@ -152,6 +157,16 @@ export function parseGuildUpdate(value: unknown): GuildUpdateEvent | null {
if (description !== undefined) {
event.description = description;
}
// Оформление: сервер присылает null, когда файл удалён, — приводим к пустой
// строке, чтобы заглушка-буквы вернулась сразу (AGENT.md 11.6).
for (const field of ['icon_file_id', 'banner_file_id', 'splash_file_id'] as const) {
if (field in record) {
event[field] = asString(record[field]) ?? '';
}
}
if (typeof record['accent_color'] === 'number') {
event.accent_color = record['accent_color'];
}
return event;
}