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
+7
View File
@@ -220,6 +220,10 @@ interface SnapshotGuildInput {
/** Владелец сервера: по умолчанию текущий пользователь (`user-1`). */
owner_id?: string;
icon_file_id?: string;
/** Оформление сервера (AGENT.md 7.4): баннер, splash и акцентный цвет. */
banner_file_id?: string;
splash_file_id?: string;
accent_color?: number;
my_permissions?: string[];
my_nickname?: string;
/** Кастомные эмодзи сервера (AGENT.md 7.12). */
@@ -288,6 +292,9 @@ export function makeReadySnapshot(
owner_id: guild.owner_id ?? 'user-1',
is_main: guild.is_main ?? false,
...(guild.icon_file_id === undefined ? {} : { icon_file_id: guild.icon_file_id }),
...(guild.banner_file_id === undefined ? {} : { banner_file_id: guild.banner_file_id }),
...(guild.splash_file_id === undefined ? {} : { splash_file_id: guild.splash_file_id }),
...(guild.accent_color === undefined ? {} : { accent_color: guild.accent_color }),
...(guild.my_nickname === undefined ? {} : { my_nickname: guild.my_nickname }),
channels: (guild.channels ?? []).map((channel, index) => ({
id: channel.id,