Custom Commands V3Flows і редактор
Custom Commands V3Бета

Логіка твого бота крок за кроком

Flow — це список кроків. Flow «Запитання дня» складається з п'яти: прочитати каталог, вибрати наступне запитання, опублікувати його, відкрити гілку, порахувати його. Додай крок, підключи до нього значення, протестуй і вмикай.

Запитання дня

АктивноЗберегти

Тригер

Змінити

Розклад, щодня о 09:00

#1

Отримати значення зі сховища(get-storage-value)

Прочитати каталог запитань із{questions}

#2

Вибрати наступний запис(array-at)

Той, що йде після вчорашнього

#3

Надіслати повідомлення(send-message)

Вхідні параметри

Канал:#general

Повідомлення:Запитання дня

#4

Створити гілку(start-thread-from-message)

Відкрити гілку під цим повідомленням

#5

Збільшити значення сховища(increment-storage-value)

Порахувати запитання як поставлене в{asked}

Лише ілюстрація — реальний інтерфейс може відрізнятися

Що ці п'ять кроків дають о 09:00

П'ять кроків дають одне повідомлення. Гілка під ним — це місце, куди потрапляють відповіді, а лічильник гарантує, що завтра буде наступне запитання.

general
У мережі
Твій ботБОТ09:00

Запитання дня

У якій одній грі ти постійно повертаєшся, хоч як вона старіє?

Запитання 42 зі 120

Mira09:04

Terraria. Перевстановлюю її кожної зими.

Повідомлення в #general

Лише ілюстрація — реальний інтерфейс і поведінка можуть відрізнятися

Кроки, а не скрипти

Кожен крок — це одна дія з каталогу з власними вхідними даними, а значення, яке видає крок, можна підключити до будь-якого наступного кроку. Редактор пропонує лише ті значення, що підходять. За цим вибором стоять 691 дія та 181 тип параметрів.

Фіксоване значення, підключена змінна або шаблон

Кожне поле приймає один із трьох варіантів. Шаблон поєднує твій власний текст із вставленими змінними.

Вибір змінних враховує типи

Він ховає значення, що не підходять, заглиблюється у властивості об'єктів, попереджає про значення, які можуть бути порожніми, і може сам додати крок перетворення.

Підключені значення показуються як мітки

Чипи в цих рядках — це каталог запитань і канал, тож видно, звідки взялося значення.

Кожен крок має свою вартість

Від Free до Very heavy, а flow показує найгірший сценарій ще до активації.

Не обов'язково починати з порожнього flow. У дашборді є шаблони, які можна відкрити й змінити: відповідач на привітання, привітання нових учасників, команда /warn, команда /remind, система XP, пропозиції та реєстрація на подію.

Запитання дня

АктивноЗберегти

Тригер

Змінити

Розклад, щодня о 09:00

#1

Отримати значення зі сховища(get-storage-value)

Прочитати каталог запитань із{questions}

#2

Вибрати наступний запис(array-at)

Той, що йде після вчорашнього

#3

Надіслати повідомлення(send-message)

Вхідні параметри

Канал:#general

Повідомлення:Запитання дня

#4

Створити гілку(start-thread-from-message)

Відкрити гілку під цим повідомленням

#5

Збільшити значення сховища(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

#1

Отримати значення зі сховища(get-storage-value)

Прочитати каталог запитань із{questions}

#2

If(if-condition)

Каталог порожній: опублікувати нагадування в #staff і зупинитися

#3

For each item(for-each)

Проходити каталог, доки не знайдеться невикористане запитання

#4

Надіслати повідомлення(send-message)

Опублікувати запитання як ембед у#general

#5

Створити гілку(start-thread-from-message)

Відкрити гілку під цим повідомленням

Лише ілюстрація — реальний інтерфейс може відрізнятися

Flows можуть викликати інші flows, а очікування — це крок

Напиши поведінку один раз і викликай звідусіль, де потрібно. А коли flow потребує відповіді, перш ніж продовжити, це очікування записується, а не тримається в пам'яті, тож перезапуск бота його не втрачає.

Виклик іншого flow

Передавай значення й читай результати. Flows, що закінчили б викликати один одного по колу, відхиляються.

Викликаний flow належить запуску того, хто викликав

Історія запусків це показує й веде назад до того, хто викликав. Кастомні події — вільніший варіант: один flow надсилає, інший слухає.

Очікування не зникають після перезапуску

Запитай підтвердження, запропонуй вибір, дочекайся повідомлення, покажи спливаючу форму й дочекайся надсилання. Перезапуск посередині очікування не губить.

Заплановані запуски

Schedule flow run планує пізніший запуск зсередини flow, а також є дії, щоб скасувати й переглянути те, що очікує.

Якщо відредагувати flow, поки його запуск на когось чекає, цей запуск зупиняється, і журнал про це повідомляє. Для того, що має лишатися робочим місяцями, краще підходить кнопка, що запускає flow: вона нічого не коштує, поки ніхто не клацає, і ніколи не спливає.

Розгляд пропозиції

АктивноЗберегти

Тригер

Змінити

Спливаючу форму надіслано, «Запропонувати запитання»

#1

Надіслати повідомлення(send-message)

Опублікувати пропозицію з кнопкою «Схвалити» в#staff

#2

Чекати на натискання кнопки(wait-for-interaction)

Призупинитися, доки модератор не натисне

#3

Задати значення сховища(set-storage-value)

Додати запитання до{questions}

#4

Викликати інший flow(call-flow)

Запитання дня, із новим запитанням як аргументом

Лише ілюстрація — реальний інтерфейс може відрізнятися

Подивись, перш ніж запускати

Тестовий запуск симулює flow на даних твого сервера. Нічого не надсилається, не змінюється й не видаляється. Ти обираєш, від чийого імені він працює, в якому каналі й що йому передає тригер, а результат показує кожен крок і те, що він зробив би. Тестування нічого не коштує твоєму серверу.

Flow також перевіряється, перш ніж стати активним, тож проблема виявляється в редакторі, а не о дев'ятій ранку. А цикл, що вийшов з-під контролю, не може покласти твого бота: він зупиняється сам.

Чернетка чи активний

Чернетки зберігаються й перевіряються, але ніколи не запускаються.

Збереження активного flow діє одразу

Твій бот підхоплює нову версію, щойно ти зберігаєш. Якщо це не вдається, flow далі обробляє версія, що вже працювала, і можна спробувати ще раз.

Нічого не втрачається випадково

Якщо хтось інший зберіг flow, поки ти його тримав(-ла) відкритим, ти отримаєш попередження замість перезапису його роботи. Видалені flows і модулі можна відновити протягом 30 днів.

Варто пам'ятати: лише тестові запуски показують кожен крок. Живий запуск записує статус, час і крок, на якому стався збій, а не все, через що він пройшов.

Тестовий запуск

Симуляція, нічого не надіслано

Отримати значення зі сховища

Прочитати каталог, 120 записів

Вибрати наступний запис

Запитання 42

Надіслати повідомлення

Опублікував би в #general

Створити гілку

Відкрив би гілку під цим повідомленням

Збільшити значення сховища

Лічильник запитань збільшився б із 41 до 42

Лише ілюстрація — реальний інтерфейс може відрізнятися

Запитання про flows

Той, що чекає на когось, — так. Очікування, як-от Ask for confirmation чи Wait for a message, записуються, а не тримаються в пам'яті, тож переживають перезапуск. Один виняток, який варто знати: якщо відредагувати flow, поки його запуск чекає, цей запуск зупиняється, і журнал про це повідомляє.

Хочеш, щоб твій сервер був у бета-програмі?

V3 — велика система, яка ще швидко змінюється, тому сервери долучаються по одному, а не всі одразу. Кожну заявку читає людина, а відповідь ти отримаєш за кілька днів.

Сервери, які вже в бета-програмі, значною мірою визначають, що ми будуватимемо далі. Те, що ти створиш, залишається твоїм: flows і модулі нікуди не зникнуть, коли бета завершиться.