fix(web): баннер сервера из снапшота, приглашение, встроенные звуки
- READY-снапшот больше не теряет banner/splash/accent: шапка сервера показывает баннер сразу после подключения (AGENT.md 7.4) - GUILD_UPDATE несёт всё оформление, клиент применяет его без перезагрузки - кнопка приглашения в шапке сервера со ссылкой и копированием - встроенные звуки интерфейса на Web Audio с разблокировкой по жесту - object URL превью через безопасные обёртки (jsdom и урезанные webview)
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user