SmartBot
  • SmartBot - конструктор ботов для ВКонтакте
  • Подключение
  • Создание сценариев
    • Простые команды
    • Цепочка диалога
    • Как работает бот
    • Шаги
      • Отправить сообщение
      • Ждать сообщение
      • Установить переменную
      • Переход
      • Отложенный переход
      • Извлечь данные
        • Фильтры
        • Шаблон
        • Переход в случае ошибки
      • Таймер
      • Написать админу
      • Записать событие в статистику
      • Работа с аудиторией
      • Выполнить SmartQuery
      • Смена контекста
      • HTTP-запрос
    • Реакции
      • Фильтр предобработки
      • Реакция на оплату
    • Переменные
      • Специальные переменные
      • Пользовательские переменные
      • Операции с переменными
      • Временные переменные
      • Отличия шага Установить переменную и SmartQuery
    • Условия
    • Кнопки
      • Текстовая кнопка
      • Кнопка-переход
      • Кнопка-ссылка
      • Inline-кнопки
      • Кнопка-Vk pay
  • Работа с подписчиками
    • Рассылки
      • Создание рассылок
      • Таргетирование рассылки
      • Отписка от рассылок
      • Email-рассылка через Smartbot
    • Раздел "Пользователи"
    • Списки пользователей
    • Лендинги
      • Создание лендингов
      • Оплата через лендинг
      • Кнопка "подписаться"
      • Интеграция с рекламным кабинетом ВК
      • Запуск рекламного объявления
    • Онлайн-оплата
    • Сбор статистики
  • Модули
    • Яндекс.Деньги
    • Виджет
    • Гугл-таблицы
    • Геймификация
      • Взаимодействие пользователей
    • Источники переходов
    • Модуль HTTP-запросы
      • Пример использования
      • Способы подтверждения владения доменом
  • Скрипты на SmartQuery
    • Введение
    • Синтаксис языка
    • Справочник функций
    • Рецепты
      • Работа с регулярными выражениями
      • Форматирование длинных чисел
      • Разные ответы в зависимости от пола пользователя
      • Шаг "Показать топ" с emoji
      • Простая корзина товаров
      • Корзина товаров со счётчиком каждой позиции
      • Фильтрация спама
      • Получить ссылку на фото из сообщения пользователя
      • Данные из отвеченных и пересланных сообщений
      • Выдача промокодов
  • Политика конфиденциальности
Powered by GitBook
On this page
  • Основы
  • Как устроен SQ
  • Примеры синтаксиса
  • Функциональное программирование
  • Лямбды (лямбда-выражения)

Was this helpful?

  1. Скрипты на SmartQuery

Синтаксис языка

В этом разделе описан синтаксис языка

Основы

Как устроен SQ

Когда, например, в тексте сообщения попадается выражение в двойных фигурных скобках {{ }}, бот вычисляет выражение внутри скобок и подставляет его значение в текст сообщения.

Например, значением выражения 2 * 2 является число 4, а значением выражения "привет" — строка привет.

Примеры синтаксиса

Символом >>> в примерах ниже отмечен ввод пользователя, а на строку ниже указан результат вычисления этого выражения.

Символом # отмечены комментарии (пояснения) к коду.

Арифметика

>>> 2 * 2
4

>>> 2 ** (4 + 10 / 5)
64

Переменные

Переменные позволяют хранить данные пользователей.

Переменные делятся на типы: числа, строки, массивы и словари.

От типа переменной зависит набор действий, который можно с ней выполнить. Например, числа можно сравнивать (>, <, >=, <=, ==, !=), делить и умножать. Строки, можно только складывать.

Имена переменных в боте (специальные, локальные и глобальные) начинаются и заканчиваются со знака процента, например, %сообщение%. С точки зрения SQ эти проценты -- часть имени переменной, а создавать новые временные переменные в самом SQ можно без значков процента, например, x = 10.

Операции сравнения

>>> x = 10
>>> x > 0
True

>>> x <= 0
False

>>> x == 10
True

>>> x += 2
>>> x
12

>>> x *= 2
>>> x
24

>>> y = 0
>>> x == 0 and y > 0 or x != 0 and y < 0
False

>>> not (x == 0 and y > 0 or x != 0 and y < 0)
True

# допустим, что %пол% равен "женский"
>>> 'да' if %пол% == 'женский' else 'нет'
'да'

# допустим, что %сообщение% равно "привет мир"
>>> 'прив' in %сообщение%
True

>>> ' ' in %сообщение%
True

>>> 'пока' not in %сообщение%
True

Вызов функций

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

В SQ существует 3 варианта вызова функций: через точку, через пайп (|) и явно -- они взаимозаменяемые и равноценные.

>>> 'привет' | len
6

>>> len('привет')
6

>>> 'привет'.len()
6

Пара примеров:

# предположим, %сообщение% равно "привет мир"
>>> %сообщение%.startswith('привет')
True

>>> %сообщение%.endswith('привет')
False

>>> %сообщение%.endswith('мир')
True

>>> round(0.23)
0

>>> round(0.23, 1)
0.2

>>> 12345678 | pretty
12 345 678

# примечание: \ служит для экранирования кавычки в строке
>>> 12345678 | pretty('\'')
12'345'678

>>> rand([1, 2, 3])
1

Работа с массивами

Массивы позволяют хранить несколько значений в одной переменной. Например, можно хранить список покупок клиента.

>>> корзина = []
>>> корзина.push('хлеб')
>>> корзина.push('греча')
>>> корзина
['хлеб', 'греча']

>>> 'хлеб' in корзина
True

>>> 'сыр' in корзина
False

>>> корзина | pretty('\n')
хлеб
греча

Словари

Словарь похож на массив, но он позволяет запоминать сопоставление одного элемента — другому. Например, количество товара в корзине.

>>> корзина = {}
>>> корзина['хлеб'] = 3
>>> корзина['греча'] = 10
>>> корзина
{'хлеб': 3, 'греча': 10}

>>> 'хлеб' in корзина
True

>>> 'сыр' in корзина
False

>>> корзина | pretty
хлеб: 3
греча: 10

Функциональное программирование

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

Лямбды (лямбда-выражения)

Лямбда (lambda) — анонимная функция.

В SQ нет возможности объявлять свои функции, но для некоторых задач, вроде преобразования массивов, фильтрации и сортировки можно использовать лямбда-выражения.

Синтаксис

Давайте для примера рассмотрим функцию, которая принимает 3 аргумента: a, b, c и возвращает их сумму:

a, b, c => a + b + c

Таким образом, лямбда-выражение состоит их 2 частей: списка аргументов (до стрелки) и выражения (после стрелки). Результат выражения вернётся при вызове этой функции.

Пример

>>> корзина = {}
>>> корзина['хлеб'] = 3
>>> корзина['греча'] = 10

# выведем словарь в нужном нам формате
>>> корзина | map((k, v) => k + ' - ' + v + ' кг') | join
хлеб - 3 кг
греча - 10 кг

Тут мы использовали функцию map(), в которую передали в качестве аргумента нашу лямбду. Функция map() пройдёт по всем парам ключ-значение (k, v) в словаре корзина и вместо него вернёт строку — результат сложения k, дефиса, v и слова "кг".

PreviousВведениеNextСправочник функций

Last updated 3 years ago

Was this helpful?