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'], // ids from 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 } }, // optional overlay trigger
);

message приймає звичайний string, { en, ru?, uk? } або кортеж app 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', uk: 'Виділено' },
      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', uk: 'Підключено до чату' },
  sender: { en: 'My addon' },
  style: {
    color: '#4caf50',
    header: { en: 'Notice' },
    icon: 'exclamation',
  },
});

content, sender і style.header приймають лише string або { en, ru?, uk? }.

Значки і емotes чату

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):

Відправка / вхідний чат

Відправка (composer): DASHBOARD_CHAT

await dashboard.onChatSend(async ({ text }) => {
  // send text to your platform 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: { uk: 'Нагороду створено' },
    message: { uk: `Вартість: ${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 у згенерованих типах.