Выражения в @MenuBuilderBot
MegaHubTelegram![](/file/96a6d0045dbc4f1fcb421.png)
Выражения позволяют вам производить простые математические вычисления прямо в сообщениях вашего бота, в условиях и действиях кнопок, а так же в Action-ах. В выражениях можно использовать константы, цифровые переменные, так же функции переменных времени.
📜 Перевод представленных материалов на ваш родной язык может быть автоматически осуществлен при помощи переводчика Google. Перейдите по ссылке и выберите нужный язык в заголовке:
https://translate.googleusercontent.com/translate_c?depth=1&sl=ru&tl=es&u=https://telegra.ph/Expressions-in-MenuBuilderBot-RU-04-30
![](/file/76e817d56ee85dd68e203.png)
⬛ Как Выглядят Выражения
Выражения должны быть заключены в фигурные скобки: {выражение}. Вложение выражений одно в другое - не допустимо.
Все необходимые значения и операции должны находится в одном выражении заключенном в фигурные скобки. Вы можете использовать пробелы внутри выражений, если хотите - они будут игнорироваться. Используйте круглые скобки "()" если в одном выражении нужно произвести несколько независимых вычислений.
Например:
1. {2+3} ➨ 5
2. {2*3 + 5} ➨ 11
3. {(10-1) * (11-2)} ➨ 81
4. {%balance% * 67 * 1.02} ➨ Зависит от состояния баланса юзера
⬛ Разрешённые Значения
В Выражениях вы можете использовать:
1. Числовые значения с "." точкой для десятичных дробей:
1
100
100.99
0.81
2. Значения Цифровых переменных (balance и др.) при помощи макросов:
%balance%
%my_variable%
3. Служебные макросы с цифровыми значениями (реф. системы и проч.):
%refcount%
%userid%
⬛ Доступные Операции
Вы можете использовать следующие операции (список, возможно, будет расширяться в будущем):
1. Математические операторы: +, -, *, /
{2 + 1}, {3 * 3}
2. Унарные операторы: +, -
{-1 * 3}
3. Деление с округлением до ближайшего целого числа:
{ 10 // 3 } ➨ 3
4. Степень (x в степени y): **
Используйте функцию "pow(x, y)" - если "**" нарушает форматирование markdown.
{2 ** 5} ➨ 32 (2 в степени 5)
{pow(2, 5)} ➨ 32 (та же запись только при помощи функции)
⬛ Математические Функции
min(A, B, C, D...)
Выберет минимальное значение значение из списка.
Максимальная длинна списка - 20 значений. Если список длиннее - всегда вернёт 0 (ноль).
max(A, B, C, D...)
Выберет максимальное значение значение из списка.
Максимальная длинна списка - 20 значений. Если список длиннее - всегда вернёт 0 (ноль).
⬛ Функции Округления
round(xxx.xx)
"Банковское округление" до ближайшего целого числа
{round(100.01)} = 100
{round(100.99)} = 101
round(xxx.xx, y)
"банковское округление" до "y" знака после запятой
{round(100.01, 1)} = 100.0
{round(100.11, 1)} = 100.1
{round(100.99, 2)} = 100.99
{round(100.99, 1)} = 101.0
floor(xxx.xx)
округление вниз до ближайшего целого числа
{floor(100.11)} = 100
{floor(100.99)} = 100
ceil(xxx.xx)
округление вверх до ближайшего целого числа
{ceil(100.11)} = 101
{ceil(100.99)} = 101
⬛ Случайные Значения
randi(A, B)
(random integer) случайное целое число между A и B (включая A и B)
randf(A, B)
(random fraction) случайное дробное число между A и B (включая A и B)
rands()
(random sign) число "1" со случайным знаком: -1 или +1
Специальная функция для выражения {randi(0,1)*2 - 1}
randl(A, B, C, D)
randl("A", "B", "C", "D")
(random list) случайное ЗНАЧЕНИЕ из заданного списка
Может работать как с Числами, так и с Текстом. при использовании текста он должен быть взят в кавычки.
Максимальная длинна списка - 20 значений. Если список длиннее - всегда вернёт 0 (ноль).
Когда используется в выражении, randi(A, B) будет заменено случайным числом, и вы можете применять к нему любые другие поддерживаемые операторы/функции.
Пример использования в сообщении:
Вы получили {randi(1,10) * 2} яблок
⬛ Строковые Функции
◾ bool_symb() и bool_symbn()
Boolean to Symbol - позволяет изменять текст в сообщении, условии или на Inline кнопке в зависимости от того выполняется заданное условие или нет. Функция bool_symbn() (Boolean to Symbol New) в отличии от bool_symb() показывает результат с Новой Строки - позволяя выстраивать свои сообщения в столбик. Все возможности описанные для bool_symb() в равной степени относятся и к bool_symbn().
❗ВНИМАНИЕ: эта функция расходует 0.1 "Токенов Функций". Если Токены Функций не доступны покажет "---" прочерк.
bool_symb((A), "B", "C")
Где А - это Условие
Если A - ИСТИННО или 1 (True), покажет B-строку.
Если A - ЛОЖНО или 0 (False), покажет C-строку.
bool_symb можно использовать в текстах сообщений, в выражениях и заголовках inline кнопок. Данная функция может работать как со Строковыми, так и с Числовыми данными. Если в качестве параметров B и C подано число, то его можно будет использовать в вычислениях выражений. Параметр в B и С может формироваться разными способами: Текст, Число, Макрос переменной.
• Пример 1: Если нужно показать два вида сообщений (текста):
Если значение переменной mynum равно 1, то покажет ✅, в противном случае ❌.
• Пример 2: Когда нужно показать сообщение (текст) только если условие верно, оставьте вторые кавычки пустыми:
Если mynum равно 1, то покажет ✅, в противном случае не покажет ничего.
• Пример 3: Когда нужно показать сообщение (текст) только если в Цифровой переменной есть данные:
Если в переменной mynum есть какие-либо цифровые данные, то покажет ✅, в противном случае не покажет ничего.
• Пример 4: Когда нужно показать сообщение (текст) только если в Текстовой переменной есть данные:
Если в переменной mytext есть какие-либо текстовые данные, то покажет ✅, в противном случае не покажет ничего.
◾ int_symb()
Integer to Symbol - позволяет заменять числа переданных ей числовых параметров указанными символами в соответствующих количествах. Позволяет задать максимальное отображаемое количество символов.
❗ВНИМАНИЕ: эта функция расходует 0.1 "Токенов Функций". Если Токены Функций не доступны покажет "---" прочерк.
int_symb(A, "B", C)
Где A - это переданный числовой Параметр (может быть числовой переменной).
B - это символ которым нужно заменить число переданного Параметра.
C - это максимальное количество отображаемых в сообщении символов.
• Пример 1: покажет 5 символов "😀" из максимальных 10:
Результат: 😀😀😀😀😀
• Пример 2: покажет 10 символов "😡" из максимальных 10 несмотря на то что переданный Параметр равен 15 оставшиеся 5 символов будут отображены цифрами:
Результат: 😡😡😡😡😡😡😡😡😡😡 +5
• Пример 3: Цифровая переменная %num% содержит 5 в качестве значения. Таким образом функция покажет 5 символов "🤯" из максимальных 10:
Результат: 🤯🤯🤯🤯🤯
◾ format_num()
Функция форматирования вывода числа в сообщении. Позволяет добавлять к числу нули разрядов как слева от целой части, так и справа от дробной - игнорируя правила стандартной математической записи.
❗ВНИМАНИЕ: эта функция расходует 0.1 "Токенов Функций". Если Токены Функций не доступны покажет "---" прочерк.
format_num(A, B, C)
A - само число.
B - количество разрядов в дробной части
C - количество разрядов в целой части (не обязательно)
• Пример 1: целые и дробные:
Если число разрядов в оригинальном числе больше чем указано в функции- они останутся без изменений.
• Пример 2: количество разрядов больше чем задано в функции:
Если в форматировании целой части нет необходимости - третий параметр задается нулем или не указывается вовсе.
• Пример 3: только дробные с параметром и без:
⬛ Функции "Жеваная Магия" для Эйнштейнов и их Друзей
![](/file/961f18fe16ea49db67f1d.jpg)
◾ addl()
Add Loop - Добавление значения с циклическим переполнением. Позволяет зациклить перебор значений с указанными параметрами запустив их по кругу и сбрасывая значение при достижении заданного максимума.
addl(A, B, C)
A - текущее число.
B - добавляемое число (delta).
C - граница переполнения (limit)
Давайте разберем принцип работы функции на примере часов:
{add_loop(20, 10, 24)} == 6
В примере выше сейчас 20 часов (20:00 вечера), мы добавляем 10 часов, максимальное количество часов в сутках это 24 - поэтому граница переполнения равна 24. Таким образом 20 (20:00 вечера) + 10 часов получаем 6 (06:00 утра). Функция проходя границу 24 часов сбрасывает показания на 0 (ноль) и продолжает уже оттуда.
• Пример 1: последовательный перебор (с шагом 1) номеров от 0 до 4 для БОНУСНОЙ кнопки прибавляющей значение.
Что происходит в выражении:
{-%num% + (%num% + 1)} == 1
Бонусная кнопка для переменной %num% с таким выражением для начисления при каждом нажатии будет последовательно записывать в нее результаты 0, 1, 2, 3, 4, 0, 1 ... и так далее по кругу. Результат каждого шага должен записываться в переменную %num% изменяя ее значение.
Дальнейший разбор работы функции нужен НЕ ВСЕМ! Если вам не важно как это работает, или вы прочитали и ничего не поняли, просто используйте представленное выражение для бонусных кнопок и не забивайте себе голову.
Давайте разберем поведение функции... часть выражения {-1 * %num%} в результате вычисления даст отрицательное значение самой переменной %num% (в принципе можно использовать и выражение {-%num%} оно даст тот же результат).
Для чего это нужно?
Конечным результатом выражения должно быть одно число которое Бонусная кнопка прибавит к существующему в переменной на работу с которой она настроена. Бонусная кнопка всегда только прибавляет значение - такова её механика (для Action-ов где существует возможность напрямую присваивать значение переменным все эти сложности не нужны).
В результате вычисления в выражении {addl(%num%, 1, 4)} мы получаем сумму текущего значения переменой %num% и единицы (delta), которая является нашим шагом функции. Если Бонус кнопка просто добавит новое значение выражения к переменной, мы получим результат больше желаемого {%num% + (%num% + 1)}, а это не то что нам нужно. Поэтому прежде чем бонус кнопка добавит результат в переменную, от этой суммы нужно отнять уже существующее в переменной значение, таким образом Бонус кнопкой добавит только остаток. Проще всего это сделать прибавив сумму к отрицательному значению самой переменной - потому как сложение с отрицательным числом равнозначно вычитанию.
Представим что текущее значение %num% это 2 (а следующее её значение соответственно должно быть 3). Тогда выражение {addl(%num%, 1, 4)}, будет выглядеть вот так: {addl(2, 1, 4)} это 2+1 = 3. В этом случае бонусная кнопка должна прибавить результат 3 к значению переменной уже равному 2-м, в результате, в переменной мы вместо 3 получим 5. Чтобы этого не происходило, прежде чем добавлять значение при помощи Бонусной кнопки, в самом выражении мы сначала берем отрицательное значение нашей переменной %num% и прибавляем к ней её же значение увеличенное на 1. Таким образом получая 1 в качестве результата вычисления и Бонусная кнопка прибавив это значение даст нам 3 (три) - нужное значение в переменной %num%.
◾ flag_get(), flag_set(), flag_del()
Установка и использование Флагов. Числовую переменную можно использовать для флагов. При использовании в качестве флаговой переменной смотреть на значение переменной можно, но практического смысла нет. В одной переменной может быть до 30 флагов.
Узнать, есть ли флаг в переменной:
flag_get(A, B) - Основная запись
A - Макрос имени переменной
B - порядковый номер флага от 1 до 30.
Возвращает 0 (ноль) если флага нет и >0 если флаг есть.
Где использовать: сообщения совместно с bool_symb(), bool_symbn(), условия кнопок и Action-ов.
• Пример 1: условие на кнопке
Если ячейка №1 не равна нулю и в ней содержится флаг, значит юзер подписан на рассылку №1
Если в ячейке №2 нет флага, значит юзер НЕ подписан на рассылку №2
Установить флаг в переменной:
flag_set(A, B)
A - Макрос имени переменной
B - порядковый номер флага от 1 до 30.
Где использовать: кнопки изменения значений (бонус, обмен1)
• Пример 2: бесплатная подписка (бонусная кнопка, значение бонуса)
Установит флаг в ячейку №1 (например подписка на рассылку №1)
• Пример 3: покупка доступа (кнопка обмен1, в качестве значения начисления)
Установить флаг в ячейку №2 (например покупка доступа №2)
• Пример 4: Чтобы избежать двойной покупки лучше использовать условие
Проверит нету ли флага в ячейке №2 и если нету, то позволит дальнейшие действия.
Снять флаг в переменной:
flag_del(A, B)
A - Макрос имени переменной
B - порядковый номер флага от 1 до 30.
Где использовать: кнопка бонус, возможно обмен1 если придумать зачем...
• Пример 5: Отписка от рассылки
Удалит флаг в ячейке №1 (Отписка от рассылки №1)
⬛ Примеры Сообщений
- Ваш баланс {%balance% * 100} USD
- У вас %refcount% рефералов. напишите нам и вы получите 0.5$ за каждых 10 рефералов и 2$ бонус за каждых 100 рефералов.
Всего вы получите: {%refcount%//10 * 0.5 + %refcount%//100 * 2}
⬛ Ограничения
Выражения нельзя помещать внутрь других выражений.
Пример НЕправильного выражения:
{a + {b + c}}
Предсталенное выражение является "Вложенным" и не будет правильно проанализировано. Все неправильные выражения будут оставлены необработанными или могут быть обработаны частично - в любом случае результат будет не верным.
Используйте круглые скобки "()" ели в одном выражении нужно произвести несколько независимых вычислений.
Пример правильного выражения:
{a + (b + c)}
![](/file/ad0a3fb12ea54d3030213.png)
⬛ Дополнительная Информация
◾ Выражения используются в Условиях кнопок.
Подробнее об Условиях читайте в отдельном руководстве.
◾ В выражениях можно использовать функции перменных Времени (если они возвращают числовое значение).
Подробнее о переменных Времени и способах работы с ними читайте в Руководстве по переменным Времени.
![](/file/da1010d810c9ec9c2b0c9.png)