feat(webhooks): вебхуки комнат — бэкенд, клиент и настройки комнаты

- миграция 00012: таблица webhooks, снимок имени и аватара в messages (AGENT.md 7.11)
- API: список/создание/правка/удаление и пересоздание токена (MANAGE_WEBHOOKS,
  step-up при создании, аудит), загрузка аватара отдельной multipart-ручкой
- исполнение POST /webhooks/{id}/{token} без сессии: content, username,
  avatar_url, файлы создателя вебхука, лимит 30/мин на вебхук
- клиент: пункт настроек «Комната» со списком вебхуков, копированием ссылки,
  пересозданием токена и удалением
- сообщения вебхуков: имя, аватар и значок в ленте вместо «неизвестного автора»
- fix: неполный ответ REST больше не затирает данные READY-снапшота
This commit is contained in:
2026-09-21 00:26:50 +03:00
parent 4ea2965892
commit 2e038a1d3f
32 changed files with 2494 additions and 23 deletions
+31 -3
View File
@@ -108,6 +108,7 @@
"back": "Назад",
"copy": "Скопировать",
"copied": "Скопировано",
"delete": "Удалить",
"yes": "Да",
"no": "Нет",
"optional": "необязательно",
@@ -247,7 +248,8 @@
"inviteLink": "Ссылка приглашения",
"inviteCopy": "Скопировать",
"inviteCopied": "Скопировано",
"inviteNew": "Новая ссылка"
"inviteNew": "Новая ссылка",
"settingsChannel": "Настройки комнаты"
},
"voice": {
"title": "Голосовая комната",
@@ -558,7 +560,9 @@
"channelCreated": "Комната #{{name}} создана",
"voiceChannelCreated": "Голосовая комната {{name}} создана",
"memberLeave": "{{name}} покинул сервер"
}
},
"webhookBadge": "вебхук",
"webhookAuthor": "вебхук"
},
"user": {
"panelLabel": "Панель пользователя",
@@ -633,7 +637,8 @@
"server": "Сервер",
"voice": "Аудио-видео",
"language": "Язык и регион",
"instance": "Инстанс"
"instance": "Инстанс",
"channel": "Комната"
},
"profile": {
"avatar.change": "Сменить аватар",
@@ -1032,6 +1037,29 @@
"locale": "Язык интерфейса",
"localeHint": "Переключается сразу.",
"saved": "Настройки региона сохранены."
},
"channel": {
"noGuild": "Выберите сервер, чтобы настроить комнату.",
"noChannels": "В этом сервере нет текстовых комнат.",
"pick": "Комната",
"noPermission": "Управлять комнатой может владелец сервера и участники с правом MANAGE_WEBHOOKS.",
"webhooks": {
"title": "Вебхуки",
"description": "Вебхук отправляет сообщения в комнату без пользовательской сессии: запрос идёт на ссылку с токеном.",
"empty": "Вебхуков пока нет.",
"create": "Создать вебхук",
"name": "Имя вебхука",
"avatar": "Аватар",
"avatarHint": "PNG, JPEG, WebP или GIF до 2 МБ.",
"submit": "Создать",
"rename": "Переименовать",
"rotate": "Новая ссылка",
"url": "Ссылка вебхука",
"createdAt": "создан {{date}}",
"limit": "занято {{count}}",
"deleteConfirm": "Удалить вебхук? Ссылка перестанет работать, уже отправленные сообщения останутся.",
"stepUpBody": "Создание вебхука требует подтверждения личности: введите пароль{{totp}}."
}
}
}
}