Змінна – це ім’я, яке використовується для зберігання та звернення до даних. Вони різні за іменем і мають різне значення. Вони здатні зберігати ім'я користувача, кількість балів, текст повідомлення тощо.
Коли тригер виконує дію, він автоматично генерує набір змінних, специфічних для цього джерела та типу, і робить їх доступними для цієї дії через стек аргументів. Ви можете використовувати наступні під-дії для заповнення додаткових аргументів або навіть для маніпулювання існуючими аргументами в стеку.
Аргументи існують тільки в межах поточної дії. Після завершення виконання дії вони не можуть бути використані в жодній іншій дії. Щоб використовувати змінні в декількох діях або зберегти їх після перезапуску, ви можете зберегти їх як глобальні змінні.
Навіщо вони потрібні?
Без змінних ви не зможете:
Дізнатися, хто написав повідомлення в чаті
Підрахувати кількість використань команди
Зберегти бали глядачів
Передати дані між різними діями
Створити динамічні повідомлення
Типи змінних
У Streamer.bot існує 3 типи змінних:
Аргументи (Arguments) – локальні змінні конкретної дії
Глобальні змінні (Global Variables) – це змінні, які доступні у ВСІХ діях і зберігаються в пам'яті SB, навіть після закриття програми (якщо увімкнено персистентність).
Користувацькі глобальні змінні (User Global Variables) – змінні, що зберігаються окремо для кожного користувача.
Персистентність - це здатність інформації або стану програми зберігатися навіть після завершення процесу, що її створив. У контексті Streamer.bot, persisted globals/user globals відрізняються від Non-persisted тим, що коли ви закриваєте програму, Non-persisted видаляються назавжди, а persisted залишаються.
Аргументи – це змінні, які існують лише в межах однієї дії (Action). Коли тригер запускає дію, він автоматично створює набір аргументів зі своїми даними. Після завершення дії, всі аргументи видаляються з пам'яті.
Щоб звернутися до аргумента, потрібно обгорнути його назву знаками відсотка %:
%userName%, %message%, %tier%
Приклад: Якщо хтось написав у чаті, тригер Message створить аргументи:
%user%– нікнейм користувача (як він відображається)%userName%– нікнейм у нижньому регістрі%message%– текст повідомлення%msgId%– ID повідомлення
Примітка. Будь-який sub-action, який має текстове поле, може приймати аргументи, чи змінні.
Відсотки потрібні ЛИШЕ при використанні. При створенні аргумента назву пишіть БЕЗ відсотків!

Глобальні змінні – це змінні, які доступні у ВСІХ діях і зберігаються в пам'яті SB, навіть після закриття програми (якщо увімкнено персистентність).
Примітка. Щоб використати глобальну змінну в дії, спочатку потрібно її "завантажити" через Get Global Variable.
Користувацькі глобальні змінні зберігають значення окремо для кожного користувача. Це ідеально підходить для:
Балів користувача
Статистики (скільки разів користувач використав команду)
Рейтингів та таблиць лідерів
Змінна | Опис |
|---|---|
%date% %time% %longtime% %unixtime% %actionName% %lf% | Поточна дата Поточний час Час з секундами Unix час Назва поточної дії Новий рядок |
Як переглянути аргументи
Переходимо до вкладки Action & Queues → Action History. Після відпрацювання, дії зберігаються тут:

Якщо ми натиснемо два рази на дію, відкриється вікно, де ми побачимо усі змінні, з якими ми можемо працювати:

Тут є два поля з нікнеймом: user і userName. user - це ім’я, яке виводиться в чат, userName - це ім’я з нижнім регістром, яке слугує посиланням на канал людини.
Примітка: Може виникнути така ситуація, що у людини userName англійською, але він вирішив собі зробити display name (user) японською, тоді user буде ієрогліфами, а userName літерами.
Приклад
Давайте зробимо приклад. Створимо команду !dice, яка рахуватиме для кожного користувача, скільки разів він її використав.
Створимо action
!diceі зробимо тригер на команду в чаті. Виглядатиме це так:
Далі, нам треба використати Get User Global Variable. Я заповнив наступним чином:

Souce має 3 типи:
Global - бере дані з будь-якої глобальної змінної
User (redeemer) - бере дані з користувача, хто затригерив поточну дію
User (target) - бере дані з користувача, який знаходиться в змінній
targetUser(зазвичай, це не потрібно)
У полі Variable Name ми беремо глобальну змінну, з якої хочемо дістати інформацію.
Destination Variable - це аргумент, який створюється для того, щоб отримати значення з Variable Name (грубо кажучи, це змінна-копія).
Default Value - потрібно, якщо змінни у користувача немає, то створити її з цим значенням (зазвичай це 0).
У верхньому меню програми, є кнопка Global Variables, якщо туди перейти, відкриється вікно, у цьому вікні збергіаються глобальні та користувавцькі змінні. У кожного користувача власні змінні. Щоб знайти користувача, вам потрібно написати платформу (Twitch) і вести його нікнейм. Це виглядатиме наступним чином:

Поки пусто, але це через те, що ми ще не створили змінну dice_count_var.
Якщо ми зараз активуємо нашу дію !dice, написавши її в чат, то в Global Variables з’явиться наша змінна:

Чудово, тепер нам треба збільшувати на 1 для quarryck змінну dice_count_var щоразу, коли він пише цю команду. Створимо Set Global Variable і введемо наступним чином:

Також підтримується Global/User (redeemer)/User (target). Оскільки змінюємо змінну для конкретного користувача, а не для всіх, тому беремо тип redeemer.
Increment - це для збільшення значення змінної на якесь число. Якщо поле пусте то на 1. Є ще Decrement - це віднімання значення змінної на якесь число і Value, встановлення конкетреного значення.
Добре, тепер давайте знову активуємо !dice, та глянемо, як зміниться значення dice_count_var у мене:

Бачимо, що значення збільшилось на 1. Тепер спробуємо зробити якийсь текст, який виведе повідомлення в чат. Напишу так: “%user% використав команду !dice вже %dice_count_var% разів!”.

Чому замість значення змінної вивелась її назва в відсотках? Проблема полягає в тому, що ми не можемо напряму змінювати змінну, адже, якщо вона буде задіянна в багатьох діях, які працюватимуть паралельно, це можна призвести до порушення логіки усіх дій та критичної помилки програми. Саме тому, ми використовуємо Destination Variable, щоб створити аргумент, який працюватиме всередині однієї дії і вже там використовуватись.
Примітка. Ми можемо вказувати Variable Name і Destination Variable однаковий, але це не рекомендується робити.
Змінимо вивід на dice_count_arg і спробуємо ще раз вивести значення:

Ще одна неточність, в чаті вивелось 2, хоча мало 3. Це обґрунтовано тим, що Streamer.bot використовує ще старе значення змінної, адже Get Global йшов раніше за Set Global. Як це можна виправити? Перенести Get Global, щоб він був після Set Global. Set Global також здатний створювати змінну, якщо її ще не існує. Зробимо наступним чином і спробуємо вивести наш результат:


Висновок
Ми розглянули, що таке змінні в Streamer.bot. Дізналися, що існує три види змінних (нагадую, що аргументи теж змінні). Як переглядати наявні змінні, при виконання дії, змінювати їх та надавати якісь змінні глобально, чи користувачам. Створили приклад конкретно для користувачів.
Корисні посилання
Офіційна документація про змінні: https://docs.streamer.bot/guide/variables
Стаття про тригери:
💜Мій Twitch канал: https://www.twitch.tv/quarryck
🥰Підписатись на канал Streamer.BotUA: https://t.me/StreamBotUA
🫂Платна підписка на автора: https://base.monobank.ua/quarryck
💴Донат: https://send.monobank.ua/jar/9mvkm2Hy2z
❔Питання до автора: https://discord.gg/BmhReWjPTT