fix(files): аватары и баннеры доступны авторизованным пользователям

Аватар нельзя было показать в списке друзей: файл без комнаты был доступен
только загрузившему. Добавлено назначение файла (`files.purpose`: attachment |
avatar | banner, миграция 00006): аватары и баннеры отдаются любому
авторизованному пользователю, вложения по-прежнему проверяются по правам
комнаты, а непривязанные загрузки остаются приватными.
This commit is contained in:
2026-09-20 01:39:04 +03:00
parent 20eed227ca
commit d02ef7527a
35 changed files with 2330 additions and 191 deletions
+82 -9
View File
@@ -56,7 +56,10 @@
"message.edit_window_expired": "Сообщение нельзя изменить: прошло больше 24 часов.",
"file.too_large": "Файл больше допустимого размера.",
"request.bad": "Некорректный запрос.",
"file.not_found": "Файл не найден."
"file.not_found": "Файл не найден.",
"invite.expired": "Срок действия приглашения истёк.",
"invite.exhausted": "У приглашения больше не осталось использований.",
"user.not_found": "Пользователь с таким логином не найден."
},
"theme": {
"switchToLight": "Светлая тема",
@@ -172,11 +175,8 @@
"limitReached": "Достигнут лимит серверов — создайте новый после удаления одного из текущих."
},
"empty": {
"title": "Пока нет ни одного сервера",
"body": "Присоединитесь к главному серверу инстанса или создайте свой.",
"joinMain": "Присоединиться к главному серверу",
"joining": "Присоединяемся…",
"noMain": "Главный сервер на инстансе не настроен — создайте свой."
"title": "У вас пока нет серверов",
"body": "Создайте свой сервер или присоединитесь по приглашению."
},
"leave": "Покинуть сервер",
"leaveConfirm": "Покинуть сервер «{{name}}»?",
@@ -223,6 +223,74 @@
"slowmode": "медленный режим {{seconds}} с",
"leaveHint": "Выйти из сервера можно в настройках сервера → «Опасная зона»."
},
"friends": {
"rail": "Друзья",
"title": "Друзья",
"sidebarLabel": "Друзья и личные беседы",
"sidebarHint": "Личные беседы живут здесь — в рейке серверов их нет.",
"dmSection": "Личные беседы",
"dmEmpty": "Личных бесед пока нет.",
"friendsSection": "Друзья",
"friendsEmpty": "Список друзей пуст.",
"open": "Открыть беседу с {{name}}",
"empty": {
"title": "Добавь друзей для общения",
"body": "Найдите человека по логину и отправьте заявку в друзья — после принятия появится личная беседа.",
"search": "Найти друзей"
},
"search": {
"title": "Поиск друзей",
"close": "Закрыть поиск",
"label": "Поиск по логину",
"placeholder": "Введите логин",
"hint": "Введите минимум 2 символа.",
"empty": "Никого не найдено.",
"add": "Добавить в друзья",
"adding": "Отправляем…",
"requested": "Заявка отправлена",
"friend": "Уже в друзьях",
"message": "Написать"
},
"requests": {
"incoming": "Входящие заявки",
"outgoing": "Исходящие заявки",
"accept": "Принять",
"decline": "Отклонить",
"cancel": "Отменить"
},
"list": {
"label": "Список друзей",
"message": "Написать",
"more": "Действия: {{name}}",
"menu": "Действия с {{name}}",
"remove": "Удалить из друзей",
"block": "Заблокировать"
},
"lastSeen": {
"label": "Последний вход",
"online": "Сейчас в сети",
"unknown": "Не в сети давно",
"at": "Был(а) в сети: {{time}}"
},
"dm": {
"unknown": "Собеседник",
"notFound": {
"title": "Беседа недоступна",
"body": "Личная беседа не найдена: возможно, она удалена или доступ к ней закрыт."
}
}
},
"invites": {
"title": "Присоединиться по приглашению",
"hint": "Вставьте код или ссылку вида https://<домен>/invite/<код>.",
"label": "Код или ссылка приглашения",
"placeholder": "например, ab12cd или https://дом/invite/ab12cd",
"invalid": "Не удалось распознать код приглашения.",
"join": "Присоединиться",
"joining": "Присоединяемся…",
"members": "Участников: {{count}}",
"alreadyMember": "Вы уже на этом сервере"
},
"chat": {
"log": "Лента сообщений комнаты {{name}}",
"loadMore": "Загрузить ещё",
@@ -236,7 +304,9 @@
"unknownAuthor": "неизвестный",
"start": {
"title": "Это начало комнаты #{{name}}",
"body": "Здесь пока нет сообщений. Напишите первым — сообщение увидят все участники комнаты."
"body": "Здесь пока нет сообщений. Напишите первым — сообщение увидят все участники комнаты.",
"directTitle": "Это начало личной беседы с {{name}}",
"directBody": "Здесь пока нет сообщений. Напишите первым."
},
"message": {
"by": "Сообщение от {{name}} в комнате {{channel}}",
@@ -290,7 +360,9 @@
"tooLarge": "Файл «{{name}}» больше допустимых {{limit}}",
"rateLimited": "Слишком часто. Отправить можно будет через {{seconds}} с.",
"denied": "Нет права отправлять сообщения в эту комнату.",
"readOnly": "В эту комнату нельзя писать."
"readOnly": "В эту комнату нельзя писать.",
"directLabel": "Сообщение для {{name}}",
"directPlaceholder": "Написать {{name}}"
},
"typing_one": "{{names}} печатает…",
"typing_few": "{{names}} печатают…",
@@ -315,7 +387,8 @@
"spoiler": {
"show": "Показать спойлер",
"hide": "Скрыть спойлер"
}
},
"logDirect": "Личная беседа с {{name}}"
},
"user": {
"panelLabel": "Панель пользователя",