JuniperBot урок
26 subscribers
5 photos
6 links
Движок джунипера в дискорд.
Приступим 🌙
Download Telegram
Расскажу с возвращением что такое else многие не знают. В переводе оно означает: "ещё" а если говорить проще, то: если все варианты не подходят то я.

Например:
{% if arguments.get(1) == "" %}
Вы задали пустую строчку запроса
{% else %}
Вы крутой дядя, вы написали что-то!)
{% endif %}


Ладно, давайте сделаем что-что то типа браузера по словам. Берём наше создание ^

{% if arguments.get(1) == "" %}
Вы задали пустую строчку запроса
{% elseif arguments.get(1) == "инфа"%}
Инфа инфа инфа
{% else %}
Ничего не найдено
Попробуйте фильтр слов информации
- "инфа"
{% endif %}

Внимание! Вы уже заметили arguments.get(1)? Кроме 1 можно взять любую другую цифру, например 2. Будет искать 2 аргумент. Можно использовать другие методы:

arguments - Ищет во всех аргументах

arguments.range(от,до) - ищет в аргументах от например> 1 до 3: есть есть есть нет.

arguments.after(от) - ищет аргументы от 2: нет есть есть....;или от 3: нет нет нет есть и т.д. То есть все максимально упрощено, можно брать любую цифру.

arguments.before(до) - антоним after. Теперь аргументы до какого то числа, а не от какого то числа, например 4. Цифру так же можно взять любую: Есть есть есть есть нет..


Как вы видите, добавили elseif - ещё если, сами поймёте что это означает.
#ifelseifelse #arguments
{% global a = "ссылка на изображение" %}

Global используется везде, то есть глобально где только можно

далее переменную {{a}} как мы и задали в настройки шаблона и вставляем в "Полноразмерную картинку" или "Миниатюрную". Выведет картинку

Обратите внимание! Мы не можем использовать set в настройках шаблона, то есть настроить заголовок и т.п, он используется 1 раз и то не везде.
Эта функция добавит к результирующему сообщению шаблона кнопку. Принимает шесть строковых аргументов.


Первый аргумент — стиль кнопки:

LINK — Кнопка-ссылка серого цвета, используется для открытия веб-страниц;
PRIMARY — Основная кнопка синего цвета, обычно используется для подтверждения какой-либо операции;
SECONDARY — Вторичная кнопка серого цвета, используется как отмена или для редко используемых операций;
SUCCESS — Кнопка зелёного цвета, используется для выполнения какой-либо положительной операции;
DANGER — Кнопка красного цвета, используется для выполнения какой-либо деструктивной операции;

Второй аргумент — URL для кнопки-ссылки, для остальных видов кнопок уникальный идентификатор;

Третий аргумент — наименование кнопки;

Четвёртый аргумент — эмоция (опциональная, можно указать null);

Пятый аргумент — UUID Действия для выполнения (для всех видов кнопок, кроме кнопки-ссылки)
Можно найти в действии, кнопка i;

Шестой опциональный аргумент - логический признак того, отключена ли кнопка.

{% do button('LINK', 'https://juniper.bot/', 'Website', '🦊') %}
{% do button('PRIMARY', 'acceptBtn', 'Подтвердить', '', 'b39297ea-cc2d-4f88-a475-d4a9df94cb99') %}
{% do button('PRIMARY', 'acceptBtn', 'Accept (Disabled)', '', 'b39297ea-cc2d-4f88-a475-d4a9df94cb99', true) %}

#кнопка #компонент #UUID
{% run 'aebf9ae8-c62a-4348-b153-a7c0a0173da1' %}
Это дополнительный способ, но он уже направляет на другое действие автоматически.
#run
Привет. Ты тут живой? Как-то нашёл тебя через яндекс поисковик.
Ты случайно не сможешь помочь?

Нужно в общем-то сделать навигацию вот так вот, как на скрине. Тобишь, 1 виджет это картинка, а 2-ой виджет это надпись, 3 уже получается сама навигация с кнопками. Кнопка с навигациями понятно как делать, с этим разобрался
А я так понял, что эти 2 виджета работают в разных действиях, а в 1 команде можно использовать только 1 действие и как быть?
Читал, что можно использовать тег run, но я чет нихера не понял ничего не в документации, не у тебя.

Не можешь ли ты помочь?
Расскажу немного для того что бы научиться обращаться к компонентам

{% if component.id == "1" %}
{# В коде возможны ошибки, пишите в комментариях о них #}
Вы в пункте номер 1.
{% else %}
Привет, выбери чо ни будь
{% endif %}


Зачем я написал это?
Если мы пропишем команду, то мы увидим вот это:
«Привет выбери что ни будь»

Или мы можем увидеть пустой ответ. Если написать else и endif.

Если мы туда напишем кнопку, получим текст с кнопкой. Указав наш ID, где мы можем указать его в component.id. То мы направим нашу кнопку на него.

Немного не так написал. Айди кнопки, работают вместе с компонентом.
Примечание: у кнопок есть лимит, лучше не используйте кнопок слишком много


Так же мы можем направить на обратно, т.к у нас в конце else логично, то что если мы пропишем кнопку с ID: back или другим содержанием, сначала поищет айди, если его нет, то переведет на старт меню.

{% if component.id == "1" %}
{# В коде возможны ошибки, пишите в комментариях о них #}
Вы в пункте номер 1.
{% do button('PRIMARY', 'back12112', 'Назад', '🔙', 'b39297ea-cc2d-4f88-a475-d4a9df94cb99') %}
{% else %}
Привет, выбери чо ни будь
{% endif %}

Таким образом не найдя нужного айди, просто мы окажемся в начале.

Вроде мы разобрались с главным
#кнопка #компонент #UUID
#ifelseifelse
Черепунька☠️ (Александр Красиков)
Привет. Ты тут живой? Как-то нашёл тебя через яндекс поисковик. Ты случайно не сможешь помочь? Нужно в общем-то сделать навигацию вот так вот, как на скрине. Тобишь, 1 виджет это картинка, а 2-ой виджет это надпись, 3 уже получается сама навигация с кнопками.…
Теперь перейдем к ответу на вопрос

Если мы напишем в 1 Действии. Какой ни будь текст, или без него. Перейти в компоненты сообщения и просто нажмём на кнопку "Меню выбора строк" то мы увидим кучу значений!

Ознакомимся с главным. Идентификатор важная вещь. Если мы будем заводить новые меню выбора строк или другого, то ориентироваться будет сложнее. Или наоборот не сложно, но как то запутанно.

Уххх, давайте начинать. Давайте напишем тогда цифру 0. Для всех она стандартная.

Дальше 2 пункта, ну они понятны, но нужна отдельная тема для этого. Оставляем всё как есть.

Далее у нас встречается пункт текст заглушки. Ну это типо, если ничегохотители пока не выбрано, будет написано что вы хотите. Например: Нажми на меня и выбери что нибудь. Или проще

Далее сами пункты выбора. Добавляем пункт и добавляем значение. Значение такое же будет как для обычной кнопки. Немного по другому работает.
ОБЯЗАТЕЛЬНО ВЫБИРАЕМ ДРУГОЕ ДЕЙСТВИЕ, потому что это удобнее.


Далее уже во втором действии пишем наш первый код

{% if component.selectedOptions[0] == "1" %}

Где 0 в квадратных скобках, там наш идентификатор меню, а где 1 это значение строки действия или немного по другому это называется.

Все работает так же как и с компонентами кнопок, добавляется лишь квадратная скобка с новым номером.

К сожалению нельзя сделать само меню через код.



#меню #компонент #кнопка #айди #ID
#ifelseifelse
Расскажу про run. Ран запускает другое действие. Это очень пригодится для многофункциональных или для тех кто купил донат в Juniper.

Например сделаем показ баланса пользователя. Если у него окажется: куплен скрытый баланс(есть роль или проверяется через атрибут) то ран пригодится и переносимся на другое действие где показывают баланс тип "Эфемерное сообщение" то есть извизибл сообщение, кроме того кто вызвал команду.

Примерно так это выглядит:

1 действие.
{% if member.hasRole(ID role) %}
{% run("id второго действия") %}
{% else%}
Тут должен быть баланс для тех у кого нет этой услуги
{% endif %}


Так же может использоваться при проверке на роль:
hasRoles(Роли)
Проверяет, есть ли все указанные роли у участника.

hasAnyRole(Роли)
Проверяет, есть ли у участника хотя бы одна из перечисленных ролей.


Далее во втором действии включаем Эфемерное сообщение и пишем туда баланс. (Новый товар в магазине есть, можно сделать новое в магазине. Это идея)

Полезно! Если у вас используются кнопки, важно указывать отредактировать сообщение компонента.

#run #UUID
#ifelseifelse #role
JuniperBot урок
Как сделать удачу и не удачу? {% set rand = random(1, 2) %} 1 - минимальное значение 2 - максимальное значение, вы можете изменить эти оба значения... То же самое пишите и для рандомных денег. set ranf., Например {% if rand = 1 %} Не удача {% elseif rand =…
Ещё один урок на сегодня. Дополнение к этому

Настройка шансов для рандома. Все же хотят регулировать шансы, а не так что бы было всё 50/50(если 2) или 25/25/25/25(если 4) и т.д

Так начнём просто пишем ещё квадратные скобки.

{% set rand = random([1, 2]) %}

Ну и что же здесь изменилось? Ну теперь рандом не будет работать по логике. Верно теперь мы добавляем шансы.

{% set rand = random([1, 2], [20, 80]) %}

Если что 20 и 80 это шансы к определенному. Причисляются они следующим образом:
1 - 20%
2 - 80%
Надеюсь понятно

Запомните где разница. Если мы не решаем шансы, а просто пишем от 1 до 500 или любое другое, то это пригодится для зачисления то есть рандомное число которое мы получим зачислится/отчислиться в атрибуте(для экономики, можно по другому)

А где настраиваются шансы - это только на определенные вещи. Например:

{% set rand = random([1, 2], [20, 80]) %}

{% if rand == 1 %}
Gg
{% elseif rand == 2 %}
Ff


То есть удобно в разных случаях. Если мы хотим оставить шансы 50/50 то делаем так же как и с работой, т.е так же независимо от шансов которые мы установим, устанавливается автоматически шанс, все должно быть равномерно. Ещё раз. Мы можем сделать от 1 до 100 и к каждому из них причисляется 1 доля от 100%.
#ifelseifelse #random
👍1
На данный момент ты можешь:


- Настраивать шансы
- Работать с компонентами сообщения
- Знаешь уже практически все про атрибуты
- Сможешь сделать экономику
- Знаешь все про рандом.

Поучу тебя ещё немного, а дальше ты уже сам сможешь все делать, ну практически
Будет полезно для всех.
{% do guild.clearAttributes('key') %}
Очищает атрибут у всех участников, может использоваться 1 раз в 1 сообщении

#attribute
Черепунька☠️ (Александр Красиков)
Привет. Ты тут живой? Как-то нашёл тебя через яндекс поисковик. Ты случайно не сможешь помочь? Нужно в общем-то сделать навигацию вот так вот, как на скрине. Тобишь, 1 виджет это картинка, а 2-ой виджет это надпись, 3 уже получается сама навигация с кнопками.…
В общем если создавать ещё один шаблон надо написать специальный код.

{% do channel
.createEmbed()
.withContent('Содержимое вне панели')
.withTitle('Заголовок', 'https://juniper.bot')
.withDescription('О! Привет!')
.appendDescription('\nКак дела?')
.withDate(1587713425964)
.withColor('ffff00')
.withThumbnail(member.avatarUrl)
.withImage('https://i.pinimg.com/originals/a4/41/6e/a4416e024d691af3a2971e4114a6da7f.png')
.withAuthor(member.nickname)
.withFooter('Уф, пока!', member.avatarUrl)
.addField('Первое поле', 'О, значение первого поля', true)
.addField('Второе поле', 'Ну и здесь что-нибудь', true)
.addReaction(':fox_face:')
.addButton('LINK', 'https://juniper.bot/', 'Website', '🦊')
.send()
%}


Это полезный пример с сайта с документацией, здесь не сложно догадаться что к чему. Можно и попрактиковаться с этим


Пригодится в коде \n переносит строку. Например: если что то написано через код, а не как обычное сообщение, то эта переменная пригодится для компактности, \n может быть только в кавычках, внутри их
В следующий раз мы разберём

- Require и всю его логику, чем он отличается от if вместе else. Как он удобнее.
- TempRole
- Bot атрибуты
- target member(кое что увидите)

он будет скоро, обещаю. А если мне скинут рубль. не поверите, очень быстро выйдет
Что бы удалить сообщение через кнопку, или любая другая цель для быстрого удаления сообщения, то нужно вызвать компонент или вызвать на 2 действие и использовать вот эту строчку кода:
{% do message.delete() %}
Так же перейдем немного к теме Слеш команды.
Ведь переменная arguments.targetMember будет использоваться везде.

{% set targetMember = arguments.targetMember %}
{% require targetMember returning 'Укажите участника, которому нужно выдать роль Стража!' %}

{% do targetMember.addRole(390472433003659264) %}

Это новое что мы сейчас видим из этого.

Тут используется как раз нужная нам переменная. То есть теперь участнику который мы упоминаем в любом аргументе команды мы видим это.

Как раз это может быть и слеш команда. Включаем слеш команду в настройках команды. Далее нажимаем на добавление нового параметра и выбираем тип "Участник" и всё, наша переменная может использоваться даже с этим.
#слеш
👍1
Команда require является расширением команды return и выглядит следующим образом:

{% require выражение returning 'Произошла какая-то ошибка' %}
Эта команда вернет ошибку если результат вычисления выражения будет равен:

null;
undefined;
false;
пустая строка;
0.
Вместо строки можно передать заполненный Embed (но НЕ отправляя его функцией send)

Внимание! Проще говоря require проверяет есть ли все что перечислено. Например {% require member.getAttribute("coin").value >= 15000 returning "Недостаточно средств"%}
То есть проверяет, есть ли 15000 в атрибуте и больше. Если есть то пропускает дальше, если меньше, то доставляет ошибку.


#require
👍1
TempRole это тоже самое что и add/remove~Role
То есть мы можем например addRole например изменения на addTempRole

{% do member.addTempRole(390472433003659264, 900000) %}
Данная команда выдаст прописавшему её участнику роль на 15 минут(900000 миллисекунд). Здесь используется метод addTempRole у типа Member, которая принимает аргументом id роли для выдачи и временную метку.

Внимание! Данный метод работает лишь один раз в одном сообщении, modify roles уже с этим способом не получится


#role
👍1
Bot Attributes

Используется как глобальный атрибут. То есть может использоваться для общего. Например:

Участники пожертвовали: {{bot.getAttribute("money").value}} монет

{% do bot.getAttribute("money").increment(число/слово) %}

Важно! Мы добавляем к специальному участнику атрибут, это сам бот. То есть если мы сделаем так:
{% do member.getAttribute("coin") %}
{% do bot.getAttribute("coin") %}
Здесь 2 разных участника, надеюсь вы поняли.


То есть это так же как member, но не участник, а атрибуты бота, но это не важно.
#attribute
👍1
Это вам подарок. В некотором вы сможете сами разобраться, т.к. вы уже читали все выше.
итак... наконец то долгожданная тема. Касаться кнопок может тот кто вызвал команду.
Собственно как же это сделать? Для начала мы прописываем вот это

{% do parameters.store("ключ", argument) %}

Если вы читали документацию, то должны были увидеть в полезных примерах это. Это параметр, отвечает за сохранение данных в другое действие, то есть через компоненты или других целей. В нашем случае они послужат для компонентов и для участника.

Итак "ключ" это ваш аргумент где вы сможете его использовать в действии где он будет вам угоден

{% do parameters.get("ключ") %}

И таким образом понятно что значит argument. Это то что мы запомним. Например участника, он нам и нужен как раз таки

{% do parameters.store("ключ",member)

и таким образом когда мы пропишем parameters get, мы сможем им воспользоваться.
{% set a = parameters.get("ключ") %}
{% do member.getAttribute("s").update(a) %}

Таким образом содержимое параметра будет в атрибуте. Но нам нужно для другой цели этот параметр.

Мы можем как и сохранять туда информацию, но можем и мгновенно ее вызвать когда она нам нужна.

{% require parameters.memberId == member.id returning "Вы не являетесь инициатором команды для взаимодействия с ней." %}
{% do parameters.store("memberId", member.id) %}


Я вам максимально все в подробностях написал и даже слил код. Так что дальше вы сможете сами разобраться если сильно захотите.

Параметры могут хранить информацию 15 минут

Параметры не списки, они хранят только строку!


#attribute #parameters #require #слеш #компонент
👍3