2026-04-06 14:02:07 +03:00

194 lines
13 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Плагин значков для Loop
Позволяет пользователям выражать признательность коллегам, выдавая им значки.
## Установка
Скачайте последний релиз и установите его вручную через системную консоль Loop.
## Настройка
- **Администраторы значков**: все системные администраторы автоматически являются администраторами значков. Дополнительно можно назначить любое количество администраторов значков через мультиселект в настройках плагина.
## Использование
### Создание типа значка
Администраторы значков могут создавать разные типы значков, каждый со своими правами доступа. Для создания типа необходимы права администратора значков.
Выполните слэш-команду `/badges create type`, чтобы открыть диалог создания.
- **Название**: название типа, отображаемое в описании значков.
- **Все могут создавать значки**: если отмечено, любой пользователь Loop может создавать значки этого типа.
- **Список допущенных к созданию**: username'ы через запятую — кто может создавать значки этого типа.
- **Все могут выдавать значки**: если отмечено, любой пользователь Loop может выдавать значки этого типа.
- **Список допущенных к выдаче**: username'ы через запятую — кто может выдавать значки этого типа.
### Права доступа
Администраторы значков всегда могут создавать типы, создавать значки любого типа и выдавать любые значки — независимо от настроек прав типа. Создатель значка всегда может выдавать созданный им значок. Остальные пользователи подчиняются правам, настроенным для типа.
Примеры конфигураций (ECC: все могут создавать, CC: список допущенных к созданию, ECG: все могут выдавать, CG: список допущенных к выдаче):
| Права | Пример использования | ECC | ECG | CC | CG |
|-------|---------------------|-----|-----|----|----|
| Только администраторы могут создавать и выдавать | | false | false | пусто | пусто |
| Только user1 создаёт, но выдавать может каждый | Значок "Спасибо" от коллег | false | true | user1 | пусто |
| Только user1 создаёт, выдают только user2 и user3 | Значок "MVP" — руководство создаёт, тимлиды выдают | false | false | user1 | user2, user3 |
| user1 и user2 создают, выдают только свои значки | Командные значки без создания нового типа на каждую команду | false | false | user1, user2 | пусто |
| Все создают и выдают только свои значки | | true | false | пусто | пусто |
| Все создают и выдают любые значки | | true | true | пусто | пусто |
### Создание значка
Выполните слэш-команду `/badges create badge`, чтобы открыть диалог создания.
- **Название**: название значка.
- **Описание**: описание значка.
- **Изображение**: только эмодзи. Укажите имя эмодзи как в сообщении (например `:+1:` или `:smile:`). Кастомные эмодзи тоже поддерживаются.
- **Тип**: тип значка. В списке отображаются только типы, для которых у вас есть права на создание.
- **Множественный**: можно ли выдавать этот значок одному человеку несколько раз.
### Подробнее о параметре "Множественный"
Любой значок можно выдать любому количеству людей. Параметр **Множественный** определяет, можно ли выдать значок одному и тому же человеку более одного раза. Например, значок "Спасибо" стоит сделать множественным — один человек может получить благодарность многократно. А значок "Первый год в компании" должен быть невозможно выдать дважды.
### Выдача значка
Открыть диалог выдачи можно двумя способами:
- Выполнить команду `/badges grant`.
- Нажать **Выдать значок** в поповере профиля пользователя.
- **Пользователь**: кому выдаётся значок.
- **Значок**: какой значок выдаётся.
- **Причина**: необязательное пояснение (особенно полезно для значков типа "Спасибо").
- **Уведомить в этом канале**: если отмечено, бот опубликует сообщение в текущем канале о выдаче значка.
Получатель значка всегда получает личное сообщение от бота. Дополнительно:
- Если отмечено **Уведомить в этом канале** — бот публикует сообщение в текущем канале.
- Если настроена подписка для этого типа — бот публикует сообщение во всех подписанных каналах.
### Подписки
Подписки позволяют автоматически публиковать сообщение в канале каждый раз, когда выдаётся значок определённого типа. Количество подписок не ограничено.
Для создания подписки необходимы права администратора значков. Открыть диалог создания подписки можно двумя способами:
- Выполнить команду `/badges subscription create`.
- Нажать **Добавить подписку на значки** в меню канала.
- **Тип**: тип значков, на который подписывается канал.
Для удаления подписки используйте `/badges subscription remove` или **Удалить подписку на значки** в меню канала.
### Редактирование и удаление значков и типов
Для редактирования и удаления типов необходимы права администратора значков. Для редактирования и удаления значка — права администратора или создателя значка.
Выполните `/badges edit type --type typeID` или `/badges edit badge --id badgeID`, чтобы открыть диалог редактирования. Автодополнение поможет выбрать нужный значок или тип.
Диалог редактирования аналогичен диалогу создания, но с дополнительным чекбоксом удаления. Если отметить его и нажать **Изменить** — значок или тип будет удалён.
При удалении значка безвозвратно удаляется вся история его выдачи. При удалении типа удаляются тип и все связанные с ним значки.
### Список значков
Значки отображаются в нескольких местах. В поповере профиля — до 20 последних полученных значков. При наведении на значок появляется подсказка, при клике открывается панель с деталями значка.
Кнопка в шапке канала открывает панель со списком всех значков. Клик на любой значок показывает его детали и список пользователей, которым он был выдан. Клик на имя пользователя показывает все его значки.
---
## REST API
Базовый URL: `https://<сервер>/plugins/ru.loop.plugin.achievements`
Все запросы требуют токен в заголовке:
```
Authorization: Bearer <токен>
```
Токен можно получить в настройках аккаунта Loop: **Профиль → Безопасность → Персональные токены доступа**.
### Типы значков
| Метод | Эндпоинт | Описание |
|-------|----------|----------|
| `GET` | `/api/v1/getTypes` | Список типов, доступных текущему пользователю |
| `POST` | `/api/v1/createType` | Создать тип (только администраторы) |
| `PUT` | `/api/v1/updateType` | Обновить тип (только администраторы) |
| `DELETE` | `/api/v1/deleteType/{typeID}` | Удалить тип и все его значки (только администраторы) |
### Значки
| Метод | Эндпоинт | Описание |
|-------|----------|----------|
| `GET` | `/api/v1/getAllBadges` | Полный список значков |
| `GET` | `/api/v1/getUserBadges/{userID}` | Значки конкретного пользователя |
| `GET` | `/api/v1/getBadgeDetails/{badgeID}` | Детали значка и список получателей |
| `POST` | `/api/v1/createBadge` | Создать значок |
| `PUT` | `/api/v1/updateBadge` | Обновить значок |
| `DELETE` | `/api/v1/deleteBadge/{badgeID}` | Удалить значок и историю его выдачи |
### Выдача значков
| Метод | Эндпоинт | Описание |
|-------|----------|----------|
| `POST` | `/api/v1/grantBadge` | Выдать значок пользователю |
| `POST` | `/api/v1/revokeOwnership` | Отозвать выдачу значка |
### Подписки
| Метод | Эндпоинт | Описание |
|-------|----------|----------|
| `GET` | `/api/v1/getChannelSubscriptions/{channelID}` | Список подписок канала |
| `POST` | `/api/v1/createSubscription` | Создать подписку (только администраторы) |
| `POST` | `/api/v1/deleteSubscription` | Удалить подписку (только администраторы) |
---
## Интеграция с другими плагинами (Plugin API)
Плагин поддерживает интеграцию с другими плагинами Loop через механизм `PluginHTTP`. Авторизация выполняется автоматически ядром Loop — токен не нужен.
Доступны два эндпоинта:
### Ensure — создать значки если не существуют
URL: `/ru.loop.plugin.achievements/papi/v1/ensure`
Метод: `POST`
```json
{
"Badges": [
{
"name": "My badge",
"description": "Awesome badge",
"image": "smile",
"image_type": "emoji",
"multiple": true
}
],
"BotId": "botUserId"
}
```
Создаёт значки, если они ещё не существуют (проверка по имени), и возвращает их с заполненными `id`.
### Grant — выдать значок
URL: `/ru.loop.plugin.achievements/papi/v1/grant`
Метод: `POST`
```json
{
"BadgeID": "badgeID",
"BotId": "botUserId",
"UserID": "userID",
"Reason": "За крутую работу"
}
```
Выдаёт значок от имени указанного бота пользователю. `Reason` — необязательное поле.