Логіка твого бота крок за кроком
Flow — це список кроків. Flow «Запитання дня» складається з п'яти: прочитати каталог, вибрати наступне запитання, опублікувати його, відкрити гілку, порахувати його. Додай крок, підключи до нього значення, протестуй і вмикай.
Запитання дня
АктивноЗберегтиТригер
ЗмінитиРозклад, щодня о 09:00
Отримати значення зі сховища(get-storage-value)
Прочитати каталог запитань із{questions}
Вибрати наступний запис(array-at)
Той, що йде після вчорашнього
Надіслати повідомлення(send-message)
Вхідні параметри
Канал:#general
Повідомлення:Запитання дня
Створити гілку(start-thread-from-message)
Відкрити гілку під цим повідомленням
Збільшити значення сховища(increment-storage-value)
Порахувати запитання як поставлене в{asked}
Лише ілюстрація — реальний інтерфейс може відрізнятися
Що ці п'ять кроків дають о 09:00
П'ять кроків дають одне повідомлення. Гілка під ним — це місце, куди потрапляють відповіді, а лічильник гарантує, що завтра буде наступне запитання.
Лише ілюстрація — реальний інтерфейс і поведінка можуть відрізнятися
Кроки, а не скрипти
Кожен крок — це одна дія з каталогу з власними вхідними даними, а значення, яке видає крок, можна підключити до будь-якого наступного кроку. Редактор пропонує лише ті значення, що підходять. За цим вибором стоять 691 дія та 181 тип параметрів.
Фіксоване значення, підключена змінна або шаблон
Кожне поле приймає один із трьох варіантів. Шаблон поєднує твій власний текст із вставленими змінними.
Вибір змінних враховує типи
Він ховає значення, що не підходять, заглиблюється у властивості об'єктів, попереджає про значення, які можуть бути порожніми, і може сам додати крок перетворення.
Підключені значення показуються як мітки
Чипи в цих рядках — це каталог запитань і канал, тож видно, звідки взялося значення.
Кожен крок має свою вартість
Від Free до Very heavy, а flow показує найгірший сценарій ще до активації.
Не обов'язково починати з порожнього flow. У дашборді є шаблони, які можна відкрити й змінити: відповідач на привітання, привітання нових учасників, команда /warn, команда /remind, система XP, пропозиції та реєстрація на подію.
Запитання дня
АктивноЗберегтиТригер
ЗмінитиРозклад, щодня о 09:00
Отримати значення зі сховища(get-storage-value)
Прочитати каталог запитань із{questions}
Вибрати наступний запис(array-at)
Той, що йде після вчорашнього
Надіслати повідомлення(send-message)
Вхідні параметри
Канал:#general
Повідомлення:Запитання дня
Створити гілку(start-thread-from-message)
Відкрити гілку під цим повідомленням
Збільшити значення сховища(increment-storage-value)
Порахувати запитання як поставлене в{asked}
Лише ілюстрація — реальний інтерфейс може відрізнятися
Розгалуження та цикли
Автоматизації потребують рішень. If, Switch, Random branch і Branch on subcommand розгалужують flow, For each item, For each map entry і Repeat проходять списки й мапи з Break і Continue, а блок Try дає місце для відновлення, коли Discord відмовляє.
Кожна гілка має власні змінні
Значення, задане всередині гілки, належить цій гілці.
Try із гілкою On error
Можна розгалужувати за кодом помилки: Missing permissions, Not found, Invalid input, Storage error, Timeout, Interaction expired.
Зупинись там, де зупинка — правильна відповідь
If у цьому flow публікує нагадування в каналі персоналу й зупиняється, замість того щоб публікувати порожнє запитання.
Цикл, що вийшов з-під контролю, зупиняється сам, тож помилка просто зупиняє роботу, а не крутиться цілий ранок.
Запитання дня
АктивноЗберегтиТригер
ЗмінитиРозклад, щодня о 09:00
Отримати значення зі сховища(get-storage-value)
Прочитати каталог запитань із{questions}
If(if-condition)
Каталог порожній: опублікувати нагадування в #staff і зупинитися
For each item(for-each)
Проходити каталог, доки не знайдеться невикористане запитання
Надіслати повідомлення(send-message)
Опублікувати запитання як ембед у#general
Створити гілку(start-thread-from-message)
Відкрити гілку під цим повідомленням
Лише ілюстрація — реальний інтерфейс може відрізнятися
Flows можуть викликати інші flows, а очікування — це крок
Напиши поведінку один раз і викликай звідусіль, де потрібно. А коли flow потребує відповіді, перш ніж продовжити, це очікування записується, а не тримається в пам'яті, тож перезапуск бота його не втрачає.
Виклик іншого flow
Передавай значення й читай результати. Flows, що закінчили б викликати один одного по колу, відхиляються.
Викликаний flow належить запуску того, хто викликав
Історія запусків це показує й веде назад до того, хто викликав. Кастомні події — вільніший варіант: один flow надсилає, інший слухає.
Очікування не зникають після перезапуску
Запитай підтвердження, запропонуй вибір, дочекайся повідомлення, покажи спливаючу форму й дочекайся надсилання. Перезапуск посередині очікування не губить.
Заплановані запуски
Schedule flow run планує пізніший запуск зсередини flow, а також є дії, щоб скасувати й переглянути те, що очікує.
Якщо відредагувати flow, поки його запуск на когось чекає, цей запуск зупиняється, і журнал про це повідомляє. Для того, що має лишатися робочим місяцями, краще підходить кнопка, що запускає flow: вона нічого не коштує, поки ніхто не клацає, і ніколи не спливає.
Розгляд пропозиції
АктивноЗберегтиТригер
ЗмінитиСпливаючу форму надіслано, «Запропонувати запитання»
Надіслати повідомлення(send-message)
Опублікувати пропозицію з кнопкою «Схвалити» в#staff
Чекати на натискання кнопки(wait-for-interaction)
Призупинитися, доки модератор не натисне
Задати значення сховища(set-storage-value)
Додати запитання до{questions}
Викликати інший flow(call-flow)
Запитання дня, із новим запитанням як аргументом
Лише ілюстрація — реальний інтерфейс може відрізнятися
Подивись, перш ніж запускати
Тестовий запуск симулює flow на даних твого сервера. Нічого не надсилається, не змінюється й не видаляється. Ти обираєш, від чийого імені він працює, в якому каналі й що йому передає тригер, а результат показує кожен крок і те, що він зробив би. Тестування нічого не коштує твоєму серверу.
Flow також перевіряється, перш ніж стати активним, тож проблема виявляється в редакторі, а не о дев'ятій ранку. А цикл, що вийшов з-під контролю, не може покласти твого бота: він зупиняється сам.
Чернетка чи активний
Чернетки зберігаються й перевіряються, але ніколи не запускаються.
Збереження активного flow діє одразу
Твій бот підхоплює нову версію, щойно ти зберігаєш. Якщо це не вдається, flow далі обробляє версія, що вже працювала, і можна спробувати ще раз.
Нічого не втрачається випадково
Якщо хтось інший зберіг flow, поки ти його тримав(-ла) відкритим, ти отримаєш попередження замість перезапису його роботи. Видалені flows і модулі можна відновити протягом 30 днів.
Варто пам'ятати: лише тестові запуски показують кожен крок. Живий запуск записує статус, час і крок, на якому стався збій, а не все, через що він пройшов.
Тестовий запуск
Симуляція, нічого не надісланоОтримати значення зі сховища
Прочитати каталог, 120 записів
Вибрати наступний запис
Запитання 42
Надіслати повідомлення
Опублікував би в #general
Створити гілку
Відкрив би гілку під цим повідомленням
Збільшити значення сховища
Лічильник запитань збільшився б із 41 до 42
Лише ілюстрація — реальний інтерфейс може відрізнятися
Запитання про flows
Той, що чекає на когось, — так. Очікування, як-от Ask for confirmation чи Wait for a message, записуються, а не тримаються в пам'яті, тож переживають перезапуск. Один виняток, який варто знати: якщо відредагувати flow, поки його запуск чекає, цей запуск зупиняється, і журнал про це повідомляє.
Більше про Custom Commands V3
Хочеш, щоб твій сервер був у бета-програмі?
V3 — велика система, яка ще швидко змінюється, тому сервери долучаються по одному, а не всі одразу. Кожну заявку читає людина, а відповідь ти отримаєш за кілька днів.
Сервери, які вже в бета-програмі, значною мірою визначають, що ми будуватимемо далі. Те, що ти створиш, залишається твоїм: flows і модулі нікуди не зникнуть, коли бета завершиться.