QNext Cases
168 subscribers
3 photos
84 links
Download Telegram
7️⃣1️⃣ Передача любых данных между ботами с помощью Http запросов и webhook ответов.

Для передачи данных с помощью этого кейса, нам потребуется подготовка в виде реализации этого кейса:

6️⃣9️⃣ Http-запросы и webhook ответы

Для этого необходимо:

В БОТЕ 1 (Откуда будем передавать данные):

↙️Команды — Добавить↙️ — Текст: /^\/request\s(.+)$/i

🔗Триггер — ⚡️Реакции — Добавить:

⚡️ groupReactionsactions

⚡️ localVarSet — Тип: Строка — Название: action.custom — Значение: любой кастомный текст☑️ Собрать объект

⚡️ localVarSet — Тип: Строка — Название: action.text — Значение: ${exec.1}☑️ Собрать объект

⚡️ localVarSet — Тип: Число — Название: action.user — Значение: ${user.id}☑️ Собрать объект

⚡️ httpRequest — Выбрать HTTP-запрос: Запрос в бота 2


🌐WEB — ☸️Http-запросы — Выбираем http-запрос — Параметры — body — Ключ: body — Значение: ${localVar.action}

В БОТЕ 2 (Куда будем передавать данные):

🌐WEB — 🕸Webhooks — Ранее созданный Webhook — 🔗Триггеры — 🔗Триггер POST/GET — ⚡️Реакции — добавить реакции:

⚡️ takeUsers${request.body.body.user}

⚡️ sendMessage — Текст:

${request.body.body.user}
${request.body.body.custom}
${request.body.body.text}


#web #webhook

Требуется помощь?
👏1
7️⃣2️⃣ Создание меню с кнопками через переменные.

Позволяет в одном созданном меню отображать разное содержимое как с медиа, так и без.

Для этого необходимо:

🕹Меню — Создать🕹 — Название: dynamicMenu — Текст:
!{attachment| path: localVar.file; }
${localVar.text|notFound: made by QNext; }

Добавить кнопку — Тип: url — Название: ${localVar.name
|notFound: QNext;}
— Ссылка: ${localVar.url
|notFound: qnext.app;}

↙️Команды — Добавить↙️ — Текст:
/menu ([^,]+), ([^,]+), ([^,]+)$/

🔗Триггер — ⚡️Реакции — Добавить:

⚡️ localVarSet — Тип: Строка — Название: text — Значение: ${exec.1}

⚡️ localVarSet — Тип: Строка — Название: name — Значение: ${exec.2}

⚡️ localVarSet — Тип: Строка — Название: url — Значение: ${exec.3}

⚡️ groupReactios - file
🚧Ограничения — Добавить условие — bool — путь до значения: ${update.message.photo} — Значение:

⚡️ localVarSet — Тип: Строка — Название: file.fileId — Значение: ${update.message.photo.0.file_id}
☑️ Собрать объект

⚡️ localVarSet — Тип: Строка — Название: file.type — Значение: photo
☑️ Собрать объект

⚡️ sendMenudynamicMenu

Требуется помощь?
7️⃣3️⃣ Удаление всех сообщений в чате между командой и reply сообщением
Сложность
: ⭐️

По команде /purge отправленной в ответ на любое сообщение в чате, удалить все сообщение которые находятся между этими сообщениями включая и эти сообщения.

❗️ВНИМАНИЕ при выполнение команды присутствуют два ограничения:
1. Не будут удалены сообщения которым более 48 часов.
2. Если количество удаляемых сообщений более 200, удалены будут только последние 200 сообщений.

Для этого необходимо:

↙️КомандыСоздать↙️ — Команда: /purge
⚙️
Настройки☑️Доступно в чате

В 🔗Триггер команды добавить следующие реакции:

⚡️ groupReactionsisReplyMsg
🚧
ОграниченияДобавить условие — isReplyMessage — Значение:

☑️if-mode🔘
⚡️ localVarSet — Тип: Любой объект — Название: idMsg — Значение:
{
"begin": ${update.message.message_id},
"end": ${update.message.reply_to_message.message_id}
}
🔘json☑️Собрать объект

⚡️ runScript — Текст скрипта:
var idMsg = qnext.getValue('localVar.idMsg');
idMsg.end = (idMsg.begin - idMsg.end > 200) ? idMsg.begin - 199 : idMsg.end;
idMsg.list = [];
for (let i = idMsg.begin; i >= idMsg.end; i--) {
idMsg.count = idMsg.list.push(i);
}
exports.idMsg = idMsg;

⚡️ for — Название параметра: ${localVar.idMsg.list}

— —⚡️ deleteMessage — Id сообщения: ${forItem.value}☑️Ответить в чате

☑️if-mode🔘🚫
⚡️ deleteMessage☑️Ответить в чате

#isReplyMessage #JScript

Требуется помощь?
7️⃣4️⃣ Позволяет пользователям добавлять произвольный текст в контент.

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

💼Переменные — 🆎Профиль👥 Пользователи — Создать — Название профиля: CT — тип профиля: Строка

⚙️Настройки бота🔗 Триггеры — 🔗Общие Триггеры — Создать🔗 — Название: editText — Параметр: Пропустить

🔗 Триггеры — ⚡️Реакции:

⚡️ groupReactionsactions
🚧
ОграниченияДобавить условие — bool — Путь: ${update.message.text} — Значение:

☑️if-mode🔘

⚡️ takeUsers (юзернейм вашего бота, прим: @Qnext_Examplebot)

— — ⚡️ profileAdd — Пользователи - CT — ${update.message.text}!{html| type: br; }

— — ⚡️localVarSet — Строка — Название: text — Значение: !{profile| name: CT; }

⚡️ refreshContent — Выбрать контент: myContent

⚡️ bindTrigger

☑️if-mode🔘🚫

⚡️ alert — Текст: Введите текст

📋Контент — Создать📋🆕Новый — Тех. название: myContent — Файл: пропустить — Текст:
Статичный текст

${localVar.text|notFound: none; }


✏️ Описание - 🔗 Триггер Визуализации — ⚡️ Реакции:

⚡️ takeUsers (юзернейм вашего бота, прим: @Qnext_Examplebot)

— — ⚡️localVarSet — Строка — Название: text — Значение: !{profile| name: CT; }

🆗Кнопки — Добавить кнопку — тип: callback — Название: Добавить текст

🔗 Триггер кнопки — ⚡️Реакции:

⚡️ bindTrigger — ОТ — editText

⚡️ runTriggereditText

Требуется помощь?
👍1
7️⃣5️⃣ Голосование с возможностью указать произвольный параметр

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

💼Переменные — 🆎Профиль👥 Пользователи — Создать — Название профиля: customTitle — тип профиля: Строка
❗️ Копируем ID профиля

⚙️Настройки бота🔗 Триггеры — 🔗Общие Триггеры — Создать🔗 — Название: voteProfile — Параметр: Пропустить

🔗 Триггеры — ⚡️Реакции:

⚡️ groupReactionsactions
🚧
ОграниченияДобавить условие — bool — Путь: ${update.message.text} — Значение:

☑️if-mode🔘

⚡️ profileSet — Пользователи — customTitle${update.message.text}

⚡️ voteAddvoteProfile

⚡️ refreshContent — Выбрать контент: voteProfile

⚡️ DeleteMessage

⚡️ bindTrigger

☑️if-mode🔘🚫

⚡️ alert — Текст: Введите текст

📋Контент — Создать📋🆕Новый — Тех. название: voteProfile — Файл: пропустить — Текст:
Статичный текст

!{vote| type: users;
userPrefix: ✔️;
userView: name;
userLink: default;
profileId: 0000;
userTemplate: $user -> $profile;
splitterUser: \n;

}

❗️место "0000" - ставим ID своего профиля

🆗Кнопки — Добавить кнопку — тип: callback — Название: Добавить текст

🔗 Триггер кнопки — ⚡️Реакции:

⚡️ loadVotevoteProfile

⚡️ groupReactions - voteCancel
🚧ОграниченияДобавить условие — number — Путь до значения: ${vote.result} = 4

⚡️voteCancel

⚡️ groupReactions - voteAdd
🚧ОграниченияДобавить условие — number — Путь до значения: ${vote.result} = 0

⚡️ bindTrigger — ОТ — voteProfile

⚡️ runTriggervoteProfile

Требуется помощь?
👍1
7️⃣6️⃣ Удаление и блокировка сообщений от имени канала

❗️Бот должен быть администратором в чате❗️

⚙️Настройки бота — 🔗Триггеры — 🤖Глобальный Триггер — 🔗Триггер После — ⚡️Реакции — Добавить:

⚡️takeChat — Пропустить

🚧ОграниченияДобавить условие: inGroup — Значение: and string — Путь до значения: ${update.message.from.username} — Значение: = — Строка с чем сравнивать: Channel_Bot

⚡️deleteMessage

⚡️banChatSenderChat

#ограничение #group

Требуется помощь?
👍5👏1
7️⃣7️⃣ Капча с проверкой кодового слова

Позволяет проверять нового участника чата с помощью кодового слова

Для этого необходимо:

💼Переменные — 🆎Профиль — 👥 Пользователи — Создать — Название профиля: msgid — тип профиля: число


⚙️Настройки бота — 🔗 Триггеры — 🔗Общие Триггеры — Создать🔗 — Название: CapchaCheck — Параметр: Пропустить

🔗 Триггеры — ⚡️Реакции:
⚡️localVarSet — Строка — Название: key — Значение: [кодовое слово]

⚡️groupReactionsactions
🚧Ограничения — Добавить условие — string — ${localVar.key} = ${update.message.text}

☑️if-mode — 🔘
⚡️takeChat${chat.id}

— — ⚡️localVarSet — Число — Название: msgid — Значение: ${reactionResult.response.message_id}

— — ⚡️deleteMessage — ID сообщения — ${localVar.msgid}

— — ⚡️deleteMessage — ID сообщения — ${update.message.message_id}

— —⚡️restrictChatMemberПропустить — отметить ☑️ разрешения которые выдать участнику

⚡️takeUsers${user.id}

— — ⚡️userActionStopcapcha

— — ⚡️bindTriggerCapchaCheck

(опционально)
— — ⚡️sendMessage — Текст: ${user.name} добро пожаловать

☑️if-mode — 🔘🚫
⚡️deleteMessage — ID сообщения — ${update.message.message_id}
☑️Ответить в чате


📅Расписание — Отложенные действия — Создать — Тип: Относительное время — Укажите длительность: 10 00 — Название: capcha

В 🔗Триггер ОД capcha⚡️ реакции:
⚡️takeChat${chat.id}

⚡️banChatMember

⚡️deleteMessage — ID сообщения — ${localVar.msgid}


⚙️Настройки бота — 🔗Триггеры — 🤖Глобальный Триггер — 🔗Триггер До — ⚡️Реакции — Добавить:

⚡️groupReactionsjoinNewUser
🚧Ограничения — Добавить условие — regex — рег. выражение: (left|kicked) — значение: — путь: ${update.chat_member.old_chat_member.status}
and
regex — рег. выражение: (member) — значение: — путь: ${update.chat_member.new_chat_member.status}

⚡️bindTriggerCapchaCheck

⚡️restrictChatMember — Пропустить — отметить ☑️ "Разрешить отправлять сообщения"

⚡️sendMessage — Текст: Ваше приветствие + [кодовое слово]

⚡️localVarSet — Число — Название: msgid — Значение: ${reactionResult.response.message_id}

⚡️takeUsers${user.id}

— — ⚡️profileAdd — Пользователи — msgid${localVar.msgid}

— — ⚡️userActionStartcapcha

#capcha

Требуется помощь?
👍1👎1
7️⃣8️⃣ Обработка заявок с помощью workflow
Сложность: ⭐️ ⭐️

Позволяет собирать заявки от пользователя через форму, и с помощью workflow обрабатывать их.

Для этого нам потребуется:

Подключенный к боту чат или канал, с включенной функцией ☑️activeInGroup

Формы — создать — workflow (или придумать свое) — пропустить

Поля:
создать — Тип: text — pole1 — Вопрос1
создать — Тип: text — pole2 — Вопрос2
создать — Тип: text — pole3 — Вопрос3

Workflow — создать — анкеты

Настройки — ☑️ notificationDisable

WF состояния — Создать — starter — пропустить — пропустить — 🚫

▶️ Сделать стартовым

Триггер состояния — реакции:

⚡️ takeChat — ранее созданный нами чат

⚡️ formResult — текст:
❗️Новая анкета:
Автор: !{user}
Текст:
${formResult.fieldsText}


☑️disableWebPreview
☑️disableNotification
👮

WF состояния — Создать — approve — пропустить — пропустить — 🚫

WF состояния — Создать — decline — пропустить — пропустить — 🚫

WF связи — создать — starter — approve — Принять — 🚫

Триггер перехода — реакции:

⚡️ deleteMessage

⚡️ takeAuthorUser

⚡️ sendMessage:

Модератор ${user.name} принял вашу заявку

⚡️ takeChat — ранее созданный нами чат

⚡️ formResult — текст:
Анкета одобрена администратором !{user}
Текст:
${formResult.fieldsText}


☑️disableWebPreview
☑️disableNotification

WF связи — создать — starter — decline — 🚫 Отклонить — 🚫

Триггер перехода — реакции:

⚡️ deleteMessage

⚡️ takeAuthorUser

⚡️ sendMessage:

Модератор ${user.name} отклонил вашу заявку

⚡️ takeChat — ранее созданный нами чат

⚡️ formResult — текст:
🚫 Анкета отклонена администратором !{user}
Текст:
${formResult.fieldsText}


☑️disableWebPreview
☑️disableNotification

Формы — workflow — Настройки — workflow — анкеты.

#workflow

Требуется помощь?
👍6👎1
7️⃣9️⃣ Выдача уникального неповторяющегося ответа.
Сложность: ⭐️ ⭐️

Позволяет выдавать пользователю уникальный неповторяющийся набор ответов.

‼️ Кейс отличается от всех предыдущих, так как объясняет сам концепт реализации задачи. Доработка под свои задачи лежит на ваших плечах. Читайте внимательно и подробно все описания‼️

Для этого нам потребуется:

————————————————

Генерация уникального списка выдачи ответа

💼Переменные — Профиль — Пользователи — Создать — Название профиля: randAnswer — тип профиля: объект

🕹меню — создать — случайный ответ — произвольное описание.

Добавить кнопку — callback — Обновить — пропустить

🔗Триггеры — Триггеры Раздела — реакции:

⚡️localVarSet — Тип: Число — Название: minNum — Значение: 1

⚡️localVarSet — Тип: Число — Название: maxNum — Значение: 11

⚡️localVarSet
— Тип: Число — Название: quanNum — Значение: 10

⚡️ runScript
function getRND(min, max) {
return Math.floor(Math.random() * (max - min)) + min;
}
var minNum = qnext.getValue("localVar.minNum", 0);
var maxNum = qnext.getValue("localVar.maxNum", 0);
var quanNum = qnext.getValue("localVar.quanNum", 0);
var numRes = [];
if ((maxNum - minNum) >= quanNum) {
while (numRes.length < quanNum) {
var rndNum = getRND(minNum, maxNum);
var found = false;
for (var i = 0; i < numRes.length; i++) {
if (numRes[i] === rndNum){
found = true;
break;
}
}
if (!found) { numRes[numRes.length]=rndNum; }
}
} else {
numRes[0] = -1;
}
exports.numRes = numRes;

⚡️profileSet — пользователи — randAnswer${localVar.numRes}

⚡️ sendMessage — Текст: Порядок обновлен

————————————————

Выбор ответа из списка для выдачи, и удаление использованного ответа из списка

⚡️ groupReactionsОбработка списка

⚡️ localVarSet — список — list = !{profile| name: randAnswer; }

⚡️ for${localVar.list}

— — ⚡️ localVarAdd — список — list = ${forItem.value}
🚧Ограничения — bool — 🚫${forItem.first}

— — ⚡️ localVarAdd — число — answer = ${forItem.value}
🚧Ограничения — bool — ${forItem.first}

⚡️ profileSet — пользователи — randAnswer${localVar.list}

————————————————

Выдача ответа пользователю.
‼️ Здесь доступны 2 варианта решения задачи:‼️
1. Упрощенный, но ограниченный суммарно 3900 символов.
2. Расширенный, ограничен только вашей ленью

Упрощенный вариант:

⚡️ sendMessage — Текст: Больше цифр нет :(
(здесь использовано 310 символов)

Расширенный вариант:


⚡️ sendMessage — Текст: Ответ один
🚧Ограничения — number — ${localVar.answer} = 1

⚡️ sendMessage — Текст: Ответ два
🚧Ограничения — number — ${localVar.answer} = 2

⚡️ sendMessage — Текст: Ответ три
🚧Ограничения — number — ${localVar.answer} = 3
👍1👎1
8️⃣0️⃣ API rambler для получения информации.

Кейс позволяет запрашивать данные с помощью Rambler API и получения различной информации.

На выбор нам доступны 3 API:
1. API гороскопы
https://horoscopes.rambler.ru/api/front/v1/horoscope/today/ +elements
2. API приметы на каждый день
https://horoscopes.rambler.ru/api/front/v1/horoscope/today/
3. API цитаты
http://api.forismatic.com/api/1.0/?method=getQuote&lang=ru&format=json&json=?

————————————————
Общий гороскоп

Для этого нам потребуется:

WEB — Http-запросы — Название: horoscope — Ссылка: https://horoscopes.rambler.ru/api/front/v1/horoscope/today/ — Тип: get — Ответ: json

Параметры — headers — Создать:
Content-Typeapplication/json

Команды — Создать — /request

Добавить реакции:

⚡️ httpRequesthoroscope

⚡️ sendMessage:
Общий гороскоп
Гороскоп: ${httpResponse.value.text}

————————————————
Гороскоп определенного знака:

Для этого нам потребуется:

WEB — Http-запросы — Название: horoscope — Ссылка: https://horoscopes.rambler.ru/api/front/v1/horoscope/today/+elements — Тип: get — Ответ: json

список элементов:
aries / taurus / cancer / leo / virgo / libra / scorpio / sagittarius / capricorn / aquarius / pisces

Параметры — headers — Создать:
Content-Typeapplication/json

Команды — Создать — /request

Добавить реакции:

⚡️ httpRequesthoroscope

⚡️ sendMessage:
Знак: ${httpResponse.value.sign.name}
Гороскоп: ${httpResponse.value.text}

#horoscope
👎2
8️⃣1️⃣ API rambler гороскопы v.2

Позволяет на русском указывать свой знак зодиака и получать гороскоп на завтра

WEB — Http-запросы — Название: horoscope — Ссылка: https://horoscopes.rambler.ru/api/front/v1/horoscope/today/${localVar.zodiac}/ — Тип: get — Ответ: json

Параметры — headers — Создать:
Content-Typeapplication/json

Переменные — динамические переменные — создать — horoscopehoroscope — 8 часов.
Настройки:
— ID значения: ${localVar.zodiac}

Триггер сборки:

⚡️ httpRequesthoroscope

⚡️dynamicVarSet${httpResponse.value}


Команды — создать — /zodiac (.+)/i

Добавить следующие реакции:

⚡️ localVarSetznak = !{string|
path: exec.1;
type: toLowerCase;
}


⚡️ localVarSetzodiac = !{switch|
type: string;
path: localVar.znak;
defaultValue: aries;

case: овен; value: aries;
case: телец; value: taurus;
case: близнецы; value: gemini;
case: рак; value: cancer;
case: лев; value: leo;
case: дева; value: virgo;
case: весы; value: libra;
case: скорпион; value: scorpio;
case: стрелец; value: sagittarius;
case: козерог; value: capricorn;
case: водолей; value: aquarius;
case: рыбы; value: pisces;
}

⚡️ loadDynamicVar
horoscope

⚡️ sendMessage:
Знак: ${dynamicVar.horoscope.sign.name} (${dynamicVar.horoscope.sign.slug})
Гороскоп:
${dynamicVar.horoscope.text}


Примеры команды:
/zodiac овен
/zodiac Стрелец
/zodiac ВЕСЫ

#horoscope
👍5👎2