dashboard
Питает виджет последних событий и окно чата. Требует DASHBOARD_EVENTS и/или DASHBOARD_CHAT (см. каждый метод).
Регистрация платформы
Вызывайте при загрузке, чтобы UI мог разрешать id платформ:
await dashboard.registerPlatform({
id: 'myplatform',
name: { en: 'My Platform', ru: 'Моя платформа', uk: 'Моя платформа' },
});
Используйте тот же id в поле platform для addRecord / addChatMessage.
Пользователи
await dashboard.upsertUser({
id: 'user-1',
name: 'Viewer',
avatar: 'https://example.com/avatar.png',
platform: 'myplatform',
color: '#7fff00',
icons: ['badge-vip'], // id из registerChatBadges
});
Виджет событий — addRecord
Требуется: DASHBOARD_EVENTS
await dashboard.addRecord(
{
id: random.id(),
type: 'donation', // donation | subscribe | follow | custom | timer
platform: 'myplatform',
amount: [10, 'USD'],
message: { en: 'Thanks!', ru: 'Спасибо!' },
from: 'user-1',
},
{ id: 'user-1', name: 'Viewer', platform: 'myplatform' },
{ trigger: { type: 'donation', key: 'USD', value: 10 } }, // опциональный триггер оверлея
);
message принимает простую string, { en, ru?, uk? } или кортеж LangData приложения.
Несколько триггеров: { triggers: [...] }.
Чат — addChatMessage
Требуется: DASHBOARD_CHAT
await dashboard.addChatMessage(
{
content: 'Hello chat!',
platform: 'myplatform',
from: 'user-1',
emotes: [{ word: 'Kappa', url: 'https://example.com/kappa.png' }],
style: {
color: '#7c4dff',
header: { en: 'Highlighted', ru: 'Выделено' },
icon: 'megaphone',
},
},
{ id: 'user-1', name: 'Viewer', platform: 'myplatform' },
);
content принимает простую string или { en, ru?, uk? } — не кортежи LangData приложения (аддоны используют свои объекты локализации).
Опциональный style добавляет цветную рамку и опциональную шапку:
| Поле | Описание |
|---|---|
color |
Цвет рамки и фона шапки (CSS-цвет, например #ff9800) |
header |
Текст шапки (string или { en, ru?, uk? }); без поля — только рамка |
icon |
exclamation, question, megaphone или list |
Системный чат — addSystemChatMessage
Требуется: DASHBOARD_CHAT
Системные строки не от пользователей платформы. В UI показывается иконка этого аддона. Опциональный sender выводится перед текстом.
await dashboard.addSystemChatMessage({
content: { en: 'Connected to chat', ru: 'Подключено к чату' },
sender: { en: 'My addon' },
style: {
color: '#4caf50',
header: { en: 'Notice' },
icon: 'exclamation',
},
});
content, sender и style.header принимают только string или { en, ru?, uk? }.
Значки и эмоуты чата
await dashboard.registerChatBadges([
{ id: 'badge-vip', url: 'https://example.com/vip.png', title: 'VIP' },
]);
await dashboard.registerChatEmotes({
platforms: ['myplatform'],
emotes: [{ word: 'hello', url: 'https://example.com/hello.png' }],
});
API чтения (требуют DASHBOARD_CHAT или DASHBOARD_CHAT_INCOMING):
listChatBadges()listChatEmotes()listPlatforms()
Отправка / входящий чат
Отправка (поле ввода): DASHBOARD_CHAT
await dashboard.onChatSend(async ({ text }) => {
// отправка текста в API вашей платформы
});
dashboard.offChatSend();
Входящие строки: DASHBOARD_CHAT_INCOMING
dashboard.onChatMessage(msg => {
console.log(msg.message.content, msg.user?.name, msg.sourceAddonId);
});
dashboard.offChatMessage();
Входящие события — onRecord
Требуется: DASHBOARD_EVENTS_INCOMING
Подписка на новые записи в виджете последних событий. Payload содержит сохранённый record (с системным attach для сработавших оверлеев, звуков, хоткеев и таймера), пользователя, triggers, использованные для матчинга, и sourceAddonId.
В отличие от чата, аддон-источник тоже получает свои записи — удобно проверять результат матчинга после dashboard.addRecord.
dashboard.onRecord(payload => {
console.log(payload.record.type, payload.record.attach, payload.triggers);
});
dashboard.offRecord();
Триггеры оверлея — registerTriggers
Требуется: DASHBOARD_EVENTS
Регистрирует типы событий, которые пользователь может привязать к оверлеям в настройках. Передавайте соответствующий trigger в опциях addRecord.
await dashboard.registerTriggers([
{
type: 'follow',
label: { en: 'New follower', ru: 'Новый фолловер' },
},
{
type: 'custom',
key: 'bits',
label: { en: 'Cheer (bits)' },
valueType: 'number',
valueMatch: 'minimum',
valueHint: { en: 'Minimum bits' },
},
]);
Поля опции триггера
| Поле | Описание |
|---|---|
type |
donation, subscribe, subgift, follow, custom |
key |
Фиксированный дискриминатор (bits, redeems, …) |
label |
Локализованное имя в настройках оверлея |
valueType |
text, number, select, dynamic |
valueOptions |
Для select |
valueProvider |
Для dynamic — обработка событий overlayTriggerValue:{provider}:list|create|release |
valueMatch |
exact (по умолчанию) или minimum |
keyOptions / keyLabel |
Выбираемые пользователем ключи (например, валюта) |
События dynamic provider
events.On('overlayTriggerValue:rewards:list', async () => ({
success: true,
items: [{ id: 'abc', label: 'My reward', meta: '100' }],
}));
events.On('overlayTriggerValue:rewards:create', async ({ title, context }) => ({
success: true,
valueId: 'abc',
label: title,
notify: {
variant: 'success',
title: { ru: 'Награда создана' },
message: { ru: `Стоимость: ${context?.cost}` },
},
}));
В ответах можно передать notify — модальное окно в настройках (variant: success | error | info; title?, message).
Привязки триггеров после сохранения настроек
Когда сохранённые правила для вашего аддона меняются, main process вызывает:
events.On('triggers:applied-changed', ({ previous, current }) => {
// previous / current группируют правила по системам:
// overlay, timer, game, gameInput, sounds, hotkeys
});
Используйте это, чтобы освобождать внутренние ресурсы при удалении привязок.
Полный контракт — в JSDoc registerTriggers в сгенерированных типах.