<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.qudata.com//api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mkuznetsov</id>
	<title>QuData - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.qudata.com//api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mkuznetsov"/>
	<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Special:Contributions/Mkuznetsov"/>
	<updated>2026-04-12T13:41:31Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.34.1</generator>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=782</id>
		<title>Qubot Script/ru</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=782"/>
		<updated>2022-09-12T10:22:04Z</updated>

		<summary type="html">&lt;p&gt;Mkuznetsov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;qubot-script&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
{{TOCright}}&lt;br /&gt;
== Qubot Script ==&lt;br /&gt;
&lt;br /&gt;
'''''Qubot Script''''' - это язык программирования, используемый для выполнения логических и математических операций при решении задач бота&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;объявление-слотов-переменных&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Слоты ==&lt;br /&gt;
&lt;br /&gt;
'''Слот''' - это переменная, значение которой доступно во всех состояниях бота. Также значение слота сохраняется, если бота закрыли и продолжили&lt;br /&gt;
с ним работать через время.&lt;br /&gt;
&lt;br /&gt;
Объявление слота происходит при первом присваивании в него значений. &amp;lt;br&amp;gt; Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
объявляет слот с именем '''a''' и присваивает ему значение '''7'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Локальные переменные ==&lt;br /&gt;
&lt;br /&gt;
В отличие от слотов локальные переменные сохраняются только внутри скрипта, где они объявлены. &amp;lt;br&amp;gt;&lt;br /&gt;
Объявление происходит путем добавления перед именем служебного слова '''local''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если локальная переменная объявлена внутри фигурных скобок '''{}''', то и ее значение доступно только там:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная текущего скрипта&lt;br /&gt;
&lt;br /&gt;
if (b == 8)&lt;br /&gt;
{&lt;br /&gt;
   local c = 9 // локальная переменная блока оператора 'if'&lt;br /&gt;
   print(c)    // выведет 9&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(b)       // выведет 8 &lt;br /&gt;
print(c)       // выдаст ошибку, т.к. тут уже переменная 'с' недоступна&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Типы переменных ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sInt = 7                             // целочисленный&lt;br /&gt;
sFloat = 7.3                         // вещественный&lt;br /&gt;
sStr = &amp;quot;hello&amp;quot;                       // строковый&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;, sStr]       // массив&lt;br /&gt;
sDic = { n: 1, s: &amp;quot;Wine&amp;quot;  }          // словарь&lt;br /&gt;
sBool = true                         // бинарный&lt;br /&gt;
sRegExp = /[abc]/                    // регулярное выражение&lt;br /&gt;
sNone = none                         // неопределенное значение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;логические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Логические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''and''' - логическое ‘И’&lt;br /&gt;
* '''or''' - логическое ‘ИЛИ’&lt;br /&gt;
* '''not''' - отрицание ‘НЕТ’&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
a = true&lt;br /&gt;
b = false&lt;br /&gt;
c = true&lt;br /&gt;
res = not((a and b) or c)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;арифметические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Арифметические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''+''' - сложение&lt;br /&gt;
* '''-''' - вычитание&lt;br /&gt;
* '''*''' - умножение&lt;br /&gt;
* '''/''' - деление&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;res = 2+3-4*5+(1.5-0.2/2)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Комментарии ==&lt;br /&gt;
&lt;br /&gt;
Комментарии используются для документирования фрагментов скрипта.&lt;br /&gt;
Могут быть многострочыми и однострочными:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Пример&lt;br /&gt;
    многострочного&lt;br /&gt;
        комментария&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
a = 2253 // пример однострочного комментария&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также разрешается и питоновский стиль комментария:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
a = 2253 # пример однострочного комментария&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-с-массивами&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-словарем-объектом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со словарем (объектом) ==&lt;br /&gt;
&lt;br /&gt;
Объявление словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;dic = { n: 1, s: &amp;quot;Wine&amp;quot;  } &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к значениям словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = dic.n             // доступ к полю с именем &amp;quot;n&amp;quot; через точку  &lt;br /&gt;
a = dic[&amp;quot;n&amp;quot;]          // доступ к полю с именем &amp;quot;n&amp;quot; через оператор доступа&lt;br /&gt;
dic[&amp;quot;food&amp;quot;] = &amp;quot;milk&amp;quot;  // добавление в словарь пары ключ-значение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа с массивами ==&lt;br /&gt;
&lt;br /&gt;
Объявление массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [1,2,3]         // создает массив с тремя элементами со значениями 1,2,3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к элементам массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;first  = arr[0]       // получить первый элемент массива&lt;br /&gt;
last   = arr[-1]      // получить последний элемент массива&lt;br /&gt;
last   = arr[-2]      // получить предпоследний элемент массива&lt;br /&gt;
arr[0] = 7            // изменить значение первого элемента&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Функции работы с массивом:&lt;br /&gt;
&lt;br /&gt;
'''''push(val1,val2...)''''' - добавить в конец массива элементы со значениями '''val1, val2...'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr.push(4) // добавить значение '4' в конец массива&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''unshift(val1,val2...)''''' - добавить в начало массива элементы со значениями '''val1, val2...'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr.unshift(0) // добавить значение '0' в начало&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''pop()''''' - удалить последний элемент массива и вернуть его значение&lt;br /&gt;
&lt;br /&gt;
'''''shift()''''' - удалить первый элемент массива и вернуть его значение&lt;br /&gt;
&lt;br /&gt;
'''''slice(start,end)''''' - возвращает часть массива начиная с позиции '''start''' и если указана переменная '''end''', то до нее не включая&lt;br /&gt;
&lt;br /&gt;
'''''splice(start, deleteCount)''''' - удаляет '''deleteCount''' элементов начиная с позиции '''start'''&lt;br /&gt;
&lt;br /&gt;
'''''clear()''''' - очистить массив&lt;br /&gt;
&lt;br /&gt;
Функции работы с массивом словарей:&lt;br /&gt;
&lt;br /&gt;
'''''find(EXPR)''''' - ищет элементы массива, удовлетворяющие условию '''EXPR'''. Найденные элементы возвращаются в виде массива&amp;lt;br&amp;gt;&lt;br /&gt;
Например:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                            // массив из трех объектов с продуктами&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120},&lt;br /&gt;
  {title: &amp;quot;Cheese&amp;quot;, price: 100},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.find(price &amp;gt; 80)   // найти все объекты у которых поле 'price' больше 80 и вернуть их в массиве&lt;br /&gt;
print('найдено $res.length:')      // выведет количество найденных объектов&lt;br /&gt;
print(res)                         // выведет объекты, удовлетворяющие условию&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''total(EXPR)''''' - применить выражение '''EXPR''' к каждому элементу массива и суммировать все значения&amp;lt;br&amp;gt;&lt;br /&gt;
Например посчитаем сумму товаров в корзине:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                                 // массив из трех объектов с продуктами&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120, amount: 3},&lt;br /&gt;
  {title: &amp;quot;Pizza&amp;quot;, price: 100, amount: 2},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40, amount: 3},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.total(price * amount)   // для каждого элемента массива умножаем цену на количество и складываем результат&lt;br /&gt;
print(&amp;quot;К оплате: $res грн.&amp;quot;)            // выведет сумму товаров: &amp;quot;К оплате: 680 грн.&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''count(EXPR)''''' - найти количество элементов массива для которых истинно выражение '''EXPR'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                                 // массив из трех объектов с продуктами&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120, amount: 3},&lt;br /&gt;
  {title: &amp;quot;Pizza&amp;quot;, price: 100, amount: 2},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40, amount: 3},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.count(price &amp;lt; 100)                            // для каждого элемента массива умножаем цену на количество и складываем результат&lt;br /&gt;
print(&amp;quot;Количество товаров, дешевле 100 грн: $res&amp;quot;)            // выведет количество товаров: &amp;quot;Количество товаров, дешевле 100 грн: 1&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''sort(KEY)''''' - отсортировать массив&lt;br /&gt;
&lt;br /&gt;
Поддерживаются только массивы, в которых все значения одного типа: число или строка для sort() и словарь для sort(key)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
list = [1, 3, 2] // массив чисел&lt;br /&gt;
str  = [&amp;quot;a&amp;quot;, &amp;quot;hi&amp;quot;, &amp;quot;banana&amp;quot;] // массив строк&lt;br /&gt;
arr  = [         // массив из словарей с продуктами&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120, amount: 3},&lt;br /&gt;
  {title: &amp;quot;Pizza&amp;quot;, price: 100, amount: 2},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
list.sort()       // отсортировать массив по возрастанию&lt;br /&gt;
 str.sort()        // отсортировать массив по возрастанию&lt;br /&gt;
 arr.sort(price)   // отсортировать массив объектов по ключу 'price'&lt;br /&gt;
// TODO&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''reverse()''''' - перевернуть массив &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
list = [1, 3, 2]  // массив&lt;br /&gt;
&lt;br /&gt;
list.reverse()    // [2, 3, 1]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-строками&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со строками ==&lt;br /&gt;
&lt;br /&gt;
Объявление строковых слотов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;           // используя двойные кавычки &lt;br /&gt;
str = 'hello'           // используя одинарные кавычки&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Операции со строками:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
base = 'http://imgs/'&lt;br /&gt;
url = base + 'img1.png' // сложение строк&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Подстановка слотов в строки:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 5&lt;br /&gt;
str = &amp;quot;a = $a&amp;quot;          // вместо $a будет подставлено значение слота a&lt;br /&gt;
print(str)              // выведет: &amp;quot;a = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вставка выражений в строки:&lt;br /&gt;
&lt;br /&gt;
Выражения можно вставлять в строки, обрамляя их фигурными скобками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;2 + 3 = {2+3}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)              // выведет: &amp;quot;2 + 3 = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Экранирование спецсимволов '$','{','}' происходит путем добавления наклонной черты '\'&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;price: 4.99\$ \{sale\}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)                       // выведет: &amp;quot;price: 4.99$ {sale}&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функции работы со строками:&lt;br /&gt;
&lt;br /&gt;
'''''length''''' - получить длинну строки&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;&lt;br /&gt;
len = str.length           // вернет 5 - число символов строки &amp;quot;hello&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''substring(start,end)''''' - получить подстроку начиная с позиции '''start''' и до позиции '''end''' не включая&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;http://server/im.png&amp;quot;&lt;br /&gt;
substr = str.substring(7,13)  // вернет строку &amp;quot;server&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''search(pattern)''''' - найти позицию первого вхождения '''pattern''', иначе вернуть -1. Аргумент '''pattern''' может быть как строкой&lt;br /&gt;
так и регулярным выражением:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;apple orange juice&amp;quot;&lt;br /&gt;
res = str.search('orange')          // вернет позицию строки 'orange': 6&lt;br /&gt;
res = str.search(/(orange|juice)/)  // вернет позицию строки 'orange' или 'juice'&lt;br /&gt;
res = str.search('pizza')           // не найдет 'pizza' и вернет -1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;условный-оператор&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Условный оператор ==&lt;br /&gt;
Оператор '''if''' используется, если необходимо ветвление логики в зависимости от условия&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 9&lt;br /&gt;
if (a &amp;gt; 7) &lt;br /&gt;
{&lt;br /&gt;
    res = 'a more than 7'&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    res = 'a less or equal 7'&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере проверяется условие &amp;lt;code&amp;gt;a &amp;amp;gt; 7&amp;lt;/code&amp;gt; и если оно истинно, то выполняется первый блок скрипта, окруженный фигурными скобками, иначе выполняется блок после служебного слова '''else'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;цикл-while&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Цикл '''while''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор цикла проверяет условие и пока оно истинно, выполняет код окруженный фигурными скобками&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = 7&lt;br /&gt;
while (a &amp;gt; 0) &lt;br /&gt;
{&lt;br /&gt;
    a = a - 1&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере скрипт &amp;lt;code&amp;gt;a = a - 1&amp;lt;/code&amp;gt; будет выполнятся до тех пор пока значение слота &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; не станет равным нулю&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;итератор-for&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Итератор '''for''' ==&lt;br /&gt;
&lt;br /&gt;
Итератор используется для перебора всех значений массива, либо ключей из словаря&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [3,2,1]&lt;br /&gt;
for(val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(val)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
3&lt;br /&gt;
2&lt;br /&gt;
1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере цикл последовательно перебирает значения массива и заносит их во временную переменную '''val''' соответственно для каждого элемента массива выполняется окруженный фигурными скобками скрипт '''print(val)''' выводящий значение в отладочное окно&lt;br /&gt;
&lt;br /&gt;
Иногда удобно в цикле иметь и индекс массива, для этого перед переменной значения добавляем имя переменной индекса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [3,2,1]&lt;br /&gt;
for(i, val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(&amp;quot;$i: $val&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
0: 3&lt;br /&gt;
1: 2&lt;br /&gt;
2: 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для перебора ключей и значений словаря используется аналогичная конструкция:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = {pizza: 100, milk: 20, wine: 120}&lt;br /&gt;
for(key, val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(&amp;quot;$key: $val&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
pizza: 100&lt;br /&gt;
milk: 20&lt;br /&gt;
wine: 120&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-switch&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор выбора '''switch''' ==&lt;br /&gt;
&lt;br /&gt;
Конструкция '''switch''' заменяет собой сразу несколько '''if'''. Она представляет собой более наглядный способ сравнить выражение сразу с несколькими вариантами.&lt;br /&gt;
Имеет один или более блок '''case''' и необязательный блок '''default'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 'one'&lt;br /&gt;
switch(a)&lt;br /&gt;
{&lt;br /&gt;
   case 'one': print('one'); break;&lt;br /&gt;
   case 'two': print('two'); break;&lt;br /&gt;
   default: print('def')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-in&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''in''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор '''in''' проверяет есть ли значение в массиве либо является ключём в словаре.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;]             // массив&lt;br /&gt;
print(&amp;quot;hello&amp;quot; in sArr)               // вернет true, т.к. значение &amp;quot;hello&amp;quot; присутствует в массиве sArr &lt;br /&gt;
sDic = { price: 100, food: &amp;quot;Wine&amp;quot;}   // словарь&lt;br /&gt;
print(&amp;quot;food&amp;quot; in sDic)                // вернет true, т.к. ключ &amp;quot;food&amp;quot; присутствует в словаре sDic&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-button&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''button''' ==&lt;br /&gt;
&lt;br /&gt;
'''''button(caption){ SCRIPT }'''''&amp;lt;br&amp;gt;&lt;br /&gt;
Данный оператор добавляет в интерфейс кнопку с текстом '''caption''' в текущее сообщение. После нажатия на кнопку выполняется логика '''SCRIPT'''.&lt;br /&gt;
Если '''caption''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
button('click me')      // текст в кнопке&lt;br /&gt;
{&lt;br /&gt;
    // скрипт, который выполнится после нажатия &lt;br /&gt;
    print('button was clicked!')&lt;br /&gt;
    step('STATE_AFTER_CLICK')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку скрипт будет выполнен в контексте локальных переменных на момент добавления данной кнопки, а также в контексте&lt;br /&gt;
значений слотов на момент нажатия на кнопку!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции перехода ==&lt;br /&gt;
&lt;br /&gt;
'''''run(state)''''' - выполнить логику шага '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''step(state)''''' - установка шага перехода по умолчанию в значение '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''goto(state)''''' - мгновенный переход в шаг '''state'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-работы-с-контентом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции работы с контентом ==&lt;br /&gt;
&lt;br /&gt;
'''''text(obj)''''' - вывести в текущее сообщение текст. Если '''obj''' - это строка, то она выводится независимо от текущего языка. Если '''obj''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
text(&amp;quot;Hi world!&amp;quot;)     &lt;br /&gt;
text({ en: &amp;quot;Hi world!&amp;quot;, ru: &amp;quot;Привет мир!&amp;quot;, es: &amp;quot;¡Hola mundo!&amp;quot;})  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''images()''''' - создать новую строку картинок. Каждый последующий вызов image будет добавляться в эту строку, пока снова не будет вызван images().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;  &lt;br /&gt;
images()     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)     &lt;br /&gt;
image(URL + &amp;quot;owl_b.png&amp;quot;) &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''image(url, width)''''' - вывести в текущее сообщение картинку. Если '''url''' - это строка, то он используется не зависимо от текущего языка. Если '''url''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.. Необязательный параметр '''width''' указывает насколько в процентах нужно сжать изображение &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)  &lt;br /&gt;
image({ en: URL + &amp;quot;en.png&amp;quot;, ru: URL + &amp;quot;ru.png&amp;quot;}) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''buttons()''''' - создать новую строку кнопок. Каждый последующий вызов button будет добавляться в эту строку, пока снова не будет вызван buttons().&lt;br /&gt;
&lt;br /&gt;
'''''get_check()''''' - получить массив значений кнопок типа check (1 - нажата, 0 - отжата)&lt;br /&gt;
&lt;br /&gt;
'''''set_check(list)''''' - задать значения кнопок типа check из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
CHECK = [0,1,0]&lt;br /&gt;
set_check(CHECK) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''get_radio()''''' - получить массив значений кнопок типа radio (1 - нажата, 0 - отжата). Единица будет одна.&lt;br /&gt;
&lt;br /&gt;
'''''set_radio(list)''''' - задать значения кнопок типа radio из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;отладочные-функции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Отладочные функции ==&lt;br /&gt;
&lt;br /&gt;
'''''print(args)''''' - вывод информации в окно отладки&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;округление&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Округление ==&lt;br /&gt;
&lt;br /&gt;
'''''floor(val)''''' - округление чисел в меньшую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;floor(5.8)    //  5&lt;br /&gt;
floor(-6.1)   // -7&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''trunc(val)''''' - отбрасывание дробной части:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;trunc(5.51)   //  5&lt;br /&gt;
trunc(-6.99)  // -6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''ceil(val)''''' - округление чисел в большую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;ceil(5.15)    // 6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''round(val, num)''''' - округление '''val''' до '''num''' чисел после запятой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;round(3.14159265, 2)  // 3.14&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;случайные-числа&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Случайные числа ==&lt;br /&gt;
&lt;br /&gt;
'''''randint(min,max)''''' - возвращает целое случайное число в диапазоне [min,max].&lt;br /&gt;
&lt;br /&gt;
'''''random()''''' - возвращает случайное вещественное число в диапазоне [0,1].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;дата-и-время&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Дата и время ==&lt;br /&gt;
&lt;br /&gt;
'''''date(format)''''' - возвращает текущую дату и время в указанном формате. По умолчанию аргумент '''format''' принимает значение: '''%d/%m/%Y %H:%M:%S'''&lt;br /&gt;
&lt;br /&gt;
Поддерживаемые коды форматирования:&lt;br /&gt;
&lt;br /&gt;
* '''%y''' - год без столетия ('22')&lt;br /&gt;
* '''%Y''' - год ('2022')&lt;br /&gt;
* '''%m''' - месяц&lt;br /&gt;
* '''%d''' - день &lt;br /&gt;
* '''%H''' - часы &lt;br /&gt;
* '''%M''' - минуты &lt;br /&gt;
* '''%S''' - секунды &lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
date()  // 17/05/2022 18:16:31 т.е. сейчас&lt;br /&gt;
date('%Y.%m.%d %H:%M:%S')  // 2022.05.17 18:16:31&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;сохранение&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Сохранение данных ==&lt;br /&gt;
&lt;br /&gt;
'''''save(storage, params...)''''' - сохранить данные в таблицу.&lt;br /&gt;
&lt;br /&gt;
Где params - это:&lt;br /&gt;
* '''для QuData.com, WordPress:'''&lt;br /&gt;
** data - данные для сохранения&lt;br /&gt;
&lt;br /&gt;
* '''для Google Sheets:'''&lt;br /&gt;
** data - данные для сохранения&lt;br /&gt;
** link - ссылка на гугл таблицу&lt;br /&gt;
** filter - фильтр для изменения данных. По умолчанию равен null.&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
save('qudata', {field: 'val'})&lt;br /&gt;
save('google_sheets', {field: 'val'}, 'https://....com')&lt;br /&gt;
save('google_sheets', {field: 'val'}, 'https://....com', {'name':'Dmitry'})&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;загрузка&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Загрузка данных ==&lt;br /&gt;
&lt;br /&gt;
'''''load(storage, params...)''''' - загрузить данные из таблицы.&lt;br /&gt;
''Для загрузки файлов поддерживаются форматы .yml и .csv(с разделителем ;(точка с запятой))''&lt;br /&gt;
&lt;br /&gt;
Где params - это:&lt;br /&gt;
* '''для Google Sheets:'''&lt;br /&gt;
** link - ссылка на гугл таблицу&lt;br /&gt;
** filter - фильтр для выборки данных. По умолчанию равен null.&lt;br /&gt;
&lt;br /&gt;
* '''для Google Drive:'''&lt;br /&gt;
** link - ссылка на файл&lt;br /&gt;
&lt;br /&gt;
* '''для Dropbox:''' - ''Должен быть настроен канал!''&lt;br /&gt;
** path - путь к файлу на dropbox&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
result = load('google_sheets', 'https://....com')&lt;br /&gt;
result = load('google_sheets', 'https://....com', {'name':'Dmitry'})&lt;br /&gt;
result = load('google_drive', 'https://....com')&lt;br /&gt;
result = load('dropbox', '/folder_name/file_name.yml')&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Подключение к оператору ==&lt;br /&gt;
&lt;br /&gt;
'''''operator(service, params...)''''' - работа с онлайн чатом.&lt;br /&gt;
&lt;br /&gt;
Где params - это:&lt;br /&gt;
* '''для LiveChat'''&lt;br /&gt;
** state - состояние чата (start - отправить первое сообщение, wait - начать общение, close - закрыть)&lt;br /&gt;
** name - имя клиента. Только для состояния state.&lt;br /&gt;
** message - сообщение. Только для состояния state.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
operator('livechat', 'start', 'Adam', 'Hi, operator!')&lt;br /&gt;
operator('livechat', 'wait')&lt;br /&gt;
operator('livechat', 'close')&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;событие&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Отправить событие ==&lt;br /&gt;
&lt;br /&gt;
'''''event(name, target)''''' - Отправить в аналитику событие. Где:&lt;br /&gt;
* name - название события.&lt;br /&gt;
* target - является ли событие важным. По умолчанию false.&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
event('test')&lt;br /&gt;
event('test', true)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Qubot]]&lt;br /&gt;
[[Category:ru]]&lt;/div&gt;</summary>
		<author><name>Mkuznetsov</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=781</id>
		<title>Qubot Script/ru</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=781"/>
		<updated>2022-09-12T08:54:49Z</updated>

		<summary type="html">&lt;p&gt;Mkuznetsov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;qubot-script&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
{{TOCright}}&lt;br /&gt;
== Qubot Script ==&lt;br /&gt;
&lt;br /&gt;
'''''Qubot Script''''' - это язык программирования, используемый для выполнения логических и математических операций при решении задач бота&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;объявление-слотов-переменных&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Слоты ==&lt;br /&gt;
&lt;br /&gt;
'''Слот''' - это переменная, значение которой доступно во всех состояниях бота. Также значение слота сохраняется, если бота закрыли и продолжили&lt;br /&gt;
с ним работать через время.&lt;br /&gt;
&lt;br /&gt;
Объявление слота происходит при первом присваивании в него значений. &amp;lt;br&amp;gt; Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
объявляет слот с именем '''a''' и присваивает ему значение '''7'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Локальные переменные ==&lt;br /&gt;
&lt;br /&gt;
В отличие от слотов локальные переменные сохраняются только внутри скрипта, где они объявлены. &amp;lt;br&amp;gt;&lt;br /&gt;
Объявление происходит путем добавления перед именем служебного слова '''local''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если локальная переменная объявлена внутри фигурных скобок '''{}''', то и ее значение доступно только там:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная текущего скрипта&lt;br /&gt;
&lt;br /&gt;
if (b == 8)&lt;br /&gt;
{&lt;br /&gt;
   local c = 9 // локальная переменная блока оператора 'if'&lt;br /&gt;
   print(c)    // выведет 9&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(b)       // выведет 8 &lt;br /&gt;
print(c)       // выдаст ошибку, т.к. тут уже переменная 'с' недоступна&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Типы переменных ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sInt = 7                             // целочисленный&lt;br /&gt;
sFloat = 7.3                         // вещественный&lt;br /&gt;
sStr = &amp;quot;hello&amp;quot;                       // строковый&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;, sStr]       // массив&lt;br /&gt;
sDic = { n: 1, s: &amp;quot;Wine&amp;quot;  }          // словарь&lt;br /&gt;
sBool = true                         // бинарный&lt;br /&gt;
sRegExp = /[abc]/                    // регулярное выражение&lt;br /&gt;
sNone = none                         // неопределенное значение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;логические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Логические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''and''' - логическое ‘И’&lt;br /&gt;
* '''or''' - логическое ‘ИЛИ’&lt;br /&gt;
* '''not''' - отрицание ‘НЕТ’&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
a = true&lt;br /&gt;
b = false&lt;br /&gt;
c = true&lt;br /&gt;
res = not((a and b) or c)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;арифметические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Арифметические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''+''' - сложение&lt;br /&gt;
* '''-''' - вычитание&lt;br /&gt;
* '''*''' - умножение&lt;br /&gt;
* '''/''' - деление&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;res = 2+3-4*5+(1.5-0.2/2)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Комментарии ==&lt;br /&gt;
&lt;br /&gt;
Комментарии используются для документирования фрагментов скрипта.&lt;br /&gt;
Могут быть многострочыми и однострочными:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Пример&lt;br /&gt;
    многострочного&lt;br /&gt;
        комментария&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
a = 2253 // пример однострочного комментария&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также разрешается и питоновский стиль комментария:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
a = 2253 # пример однострочного комментария&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-с-массивами&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-словарем-объектом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со словарем (объектом) ==&lt;br /&gt;
&lt;br /&gt;
Объявление словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;dic = { n: 1, s: &amp;quot;Wine&amp;quot;  } &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к значениям словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = dic.n             // доступ к полю с именем &amp;quot;n&amp;quot; через точку  &lt;br /&gt;
a = dic[&amp;quot;n&amp;quot;]          // доступ к полю с именем &amp;quot;n&amp;quot; через оператор доступа&lt;br /&gt;
dic[&amp;quot;food&amp;quot;] = &amp;quot;milk&amp;quot;  // добавление в словарь пары ключ-значение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа с массивами ==&lt;br /&gt;
&lt;br /&gt;
Объявление массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [1,2,3]         // создает массив с тремя элементами со значениями 1,2,3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к элементам массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;first  = arr[0]       // получить первый элемент массива&lt;br /&gt;
last   = arr[-1]      // получить последний элемент массива&lt;br /&gt;
last   = arr[-2]      // получить предпоследний элемент массива&lt;br /&gt;
arr[0] = 7            // изменить значение первого элемента&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Функции работы с массивом:&lt;br /&gt;
&lt;br /&gt;
'''''push(val1,val2...)''''' - добавить в конец массива элементы со значениями '''val1, val2...'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr.push(4) // добавить значение '4' в конец массива&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''unshift(val1,val2...)''''' - добавить в начало массива элементы со значениями '''val1, val2...'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr.unshift(0) // добавить значение '0' в начало&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''pop()''''' - удалить последний элемент массива и вернуть его значение&lt;br /&gt;
&lt;br /&gt;
'''''shift()''''' - удалить первый элемент массива и вернуть его значение&lt;br /&gt;
&lt;br /&gt;
'''''slice(start,end)''''' - возвращает часть массива начиная с позиции '''start''' и если указана переменная '''end''', то до нее не включая&lt;br /&gt;
&lt;br /&gt;
'''''splice(start, deleteCount)''''' - удаляет '''deleteCount''' элементов начиная с позиции '''start'''&lt;br /&gt;
&lt;br /&gt;
'''''clear()''''' - очистить массив&lt;br /&gt;
&lt;br /&gt;
Функции работы с массивом словарей:&lt;br /&gt;
&lt;br /&gt;
'''''find(EXPR)''''' - ищет элементы массива, удовлетворяющие условию '''EXPR'''. Найденные элементы возвращаются в виде массива&amp;lt;br&amp;gt;&lt;br /&gt;
Например:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                            // массив из трех объектов с продуктами&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120},&lt;br /&gt;
  {title: &amp;quot;Cheese&amp;quot;, price: 100},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.find(price &amp;gt; 80)   // найти все объекты у которых поле 'price' больше 80 и вернуть их в массиве&lt;br /&gt;
print('найдено $res.length:')      // выведет количество найденных объектов&lt;br /&gt;
print(res)                         // выведет объекты, удовлетворяющие условию&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''total(EXPR)''''' - применить выражение '''EXPR''' к каждому элементу массива и суммировать все значения&amp;lt;br&amp;gt;&lt;br /&gt;
Например посчитаем сумму товаров в корзине:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                                 // массив из трех объектов с продуктами&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120, amount: 3},&lt;br /&gt;
  {title: &amp;quot;Pizza&amp;quot;, price: 100, amount: 2},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40, amount: 3},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.total(price * amount)   // для каждого элемента массива умножаем цену на количество и складываем результат&lt;br /&gt;
print(&amp;quot;К оплате: $res грн.&amp;quot;)            // выведет сумму товаров: &amp;quot;К оплате: 680 грн.&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''count(EXPR)''''' - найти количество элементов массива для которых истинно выражение '''EXPR'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                                 // массив из трех объектов с продуктами&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120, amount: 3},&lt;br /&gt;
  {title: &amp;quot;Pizza&amp;quot;, price: 100, amount: 2},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40, amount: 3},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.count(price &amp;lt; 100)                            // для каждого элемента массива умножаем цену на количество и складываем результат&lt;br /&gt;
print(&amp;quot;Количество товаров, дешевле 100 грн: $res&amp;quot;)            // выведет количество товаров: &amp;quot;Количество товаров, дешевле 100 грн: 1&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''sort(KEY)''''' - отсортировать массив&lt;br /&gt;
&lt;br /&gt;
Поддерживаются только массивы, в которых все значения одного типа: число или строка для sort() и словарь для sort(key)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
list = [1, 3, 2] // массив чисел&lt;br /&gt;
str  = [&amp;quot;a&amp;quot;, &amp;quot;hi&amp;quot;, &amp;quot;banana&amp;quot;] // массив строк&lt;br /&gt;
arr  = [         // массив из словарей с продуктами&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120, amount: 3},&lt;br /&gt;
  {title: &amp;quot;Pizza&amp;quot;, price: 100, amount: 2},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
list.sort()       // отсортировать массив по возрастанию&lt;br /&gt;
 str.sort()        // отсортировать массив по возрастанию&lt;br /&gt;
 arr.sort(price)   // отсортировать массив объектов по ключу 'price'&lt;br /&gt;
// TODO&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''reverse()''''' - перевернуть массив &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
list = [1, 3, 2]  // массив&lt;br /&gt;
&lt;br /&gt;
list.reverse()    // [2, 3, 1]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-строками&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со строками ==&lt;br /&gt;
&lt;br /&gt;
Объявление строковых слотов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;           // используя двойные кавычки &lt;br /&gt;
str = 'hello'           // используя одинарные кавычки&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Операции со строками:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
base = 'http://imgs/'&lt;br /&gt;
url = base + 'img1.png' // сложение строк&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Подстановка слотов в строки:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 5&lt;br /&gt;
str = &amp;quot;a = $a&amp;quot;          // вместо $a будет подставлено значение слота a&lt;br /&gt;
print(str)              // выведет: &amp;quot;a = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вставка выражений в строки:&lt;br /&gt;
&lt;br /&gt;
Выражения можно вставлять в строки, обрамляя их фигурными скобками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;2 + 3 = {2+3}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)              // выведет: &amp;quot;2 + 3 = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Экранирование спецсимволов '$','{','}' происходит путем добавления наклонной черты '\'&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;price: 4.99\$ \{sale\}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)                       // выведет: &amp;quot;price: 4.99$ {sale}&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функции работы со строками:&lt;br /&gt;
&lt;br /&gt;
'''''length''''' - получить длинну строки&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;&lt;br /&gt;
len = str.length           // вернет 5 - число символов строки &amp;quot;hello&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''substring(start,end)''''' - получить подстроку начиная с позиции '''start''' и до позиции '''end''' не включая&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;http://server/im.png&amp;quot;&lt;br /&gt;
substr = str.substring(7,13)  // вернет строку &amp;quot;server&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''search(pattern)''''' - найти позицию первого вхождения '''pattern''', иначе вернуть -1. Аргумент '''pattern''' может быть как строкой&lt;br /&gt;
так и регулярным выражением:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;apple orange juice&amp;quot;&lt;br /&gt;
res = str.search('orange')          // вернет позицию строки 'orange': 6&lt;br /&gt;
res = str.search(/(orange|juice)/)  // вернет позицию строки 'orange' или 'juice'&lt;br /&gt;
res = str.search('pizza')           // не найдет 'pizza' и вернет -1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;условный-оператор&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Условный оператор ==&lt;br /&gt;
Оператор '''if''' используется, если необходимо ветвление логики в зависимости от условия&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 9&lt;br /&gt;
if (a &amp;gt; 7) &lt;br /&gt;
{&lt;br /&gt;
    res = 'a more than 7'&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    res = 'a less or equal 7'&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере проверяется условие &amp;lt;code&amp;gt;a &amp;amp;gt; 7&amp;lt;/code&amp;gt; и если оно истинно, то выполняется первый блок скрипта, окруженный фигурными скобками, иначе выполняется блок после служебного слова '''else'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;цикл-while&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Цикл '''while''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор цикла проверяет условие и пока оно истинно, выполняет код окруженный фигурными скобками&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = 7&lt;br /&gt;
while (a &amp;gt; 0) &lt;br /&gt;
{&lt;br /&gt;
    a = a - 1&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере скрипт &amp;lt;code&amp;gt;a = a - 1&amp;lt;/code&amp;gt; будет выполнятся до тех пор пока значение слота &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; не станет равным нулю&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;итератор-for&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Итератор '''for''' ==&lt;br /&gt;
&lt;br /&gt;
Итератор используется для перебора всех значений массива, либо ключей из словаря&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [3,2,1]&lt;br /&gt;
for(val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(val)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
3&lt;br /&gt;
2&lt;br /&gt;
1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере цикл последовательно перебирает значения массива и заносит их во временную переменную '''val''' соответственно для каждого элемента массива выполняется окруженный фигурными скобками скрипт '''print(val)''' выводящий значение в отладочное окно&lt;br /&gt;
&lt;br /&gt;
Иногда удобно в цикле иметь и индекс массива, для этого перед переменной значения добавляем имя переменной индекса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [3,2,1]&lt;br /&gt;
for(i, val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(&amp;quot;$i: $val&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
0: 3&lt;br /&gt;
1: 2&lt;br /&gt;
2: 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для перебора ключей и значений словаря используется аналогичная конструкция:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = {pizza: 100, milk: 20, wine: 120}&lt;br /&gt;
for(key, val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(&amp;quot;$key: $val&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
pizza: 100&lt;br /&gt;
milk: 20&lt;br /&gt;
wine: 120&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-switch&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор выбора '''switch''' ==&lt;br /&gt;
&lt;br /&gt;
Конструкция '''switch''' заменяет собой сразу несколько '''if'''. Она представляет собой более наглядный способ сравнить выражение сразу с несколькими вариантами.&lt;br /&gt;
Имеет один или более блок '''case''' и необязательный блок '''default'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 'one'&lt;br /&gt;
switch(a)&lt;br /&gt;
{&lt;br /&gt;
   case 'one': print('one'); break;&lt;br /&gt;
   case 'two': print('two'); break;&lt;br /&gt;
   default: print('def')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-in&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''in''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор '''in''' проверяет есть ли значение в массиве либо является ключём в словаре.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;]             // массив&lt;br /&gt;
print(&amp;quot;hello&amp;quot; in sArr)               // вернет true, т.к. значение &amp;quot;hello&amp;quot; присутствует в массиве sArr &lt;br /&gt;
sDic = { price: 100, food: &amp;quot;Wine&amp;quot;}   // словарь&lt;br /&gt;
print(&amp;quot;food&amp;quot; in sDic)                // вернет true, т.к. ключ &amp;quot;food&amp;quot; присутствует в словаре sDic&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-button&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''button''' ==&lt;br /&gt;
&lt;br /&gt;
'''''button(caption){ SCRIPT }'''''&amp;lt;br&amp;gt;&lt;br /&gt;
Данный оператор добавляет в интерфейс кнопку с текстом '''caption''' в текущее сообщение. После нажатия на кнопку выполняется логика '''SCRIPT'''.&lt;br /&gt;
Если '''caption''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
button('click me')      // текст в кнопке&lt;br /&gt;
{&lt;br /&gt;
    // скрипт, который выполнится после нажатия &lt;br /&gt;
    print('button was clicked!')&lt;br /&gt;
    step('STATE_AFTER_CLICK')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку скрипт будет выполнен в контексте локальных переменных на момент добавления данной кнопки, а также в контексте&lt;br /&gt;
значений слотов на момент нажатия на кнопку!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции перехода ==&lt;br /&gt;
&lt;br /&gt;
'''''run(state)''''' - выполнить логику шага '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''step(state)''''' - установка шага перехода по умолчанию в значение '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''goto(state)''''' - мгновенный переход в шаг '''state'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-работы-с-контентом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции работы с контентом ==&lt;br /&gt;
&lt;br /&gt;
'''''text(obj)''''' - вывести в текущее сообщение текст. Если '''obj''' - это строка, то она выводится независимо от текущего языка. Если '''obj''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
text(&amp;quot;Hi world!&amp;quot;)     &lt;br /&gt;
text({ en: &amp;quot;Hi world!&amp;quot;, ru: &amp;quot;Привет мир!&amp;quot;, es: &amp;quot;¡Hola mundo!&amp;quot;})  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''images()''''' - создать новую строку картинок. Каждый последующий вызов image будет добавляться в эту строку, пока снова не будет вызван images().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;  &lt;br /&gt;
images()     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)     &lt;br /&gt;
image(URL + &amp;quot;owl_b.png&amp;quot;) &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''image(url, width)''''' - вывести в текущее сообщение картинку. Если '''url''' - это строка, то он используется не зависимо от текущего языка. Если '''url''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.. Необязательный параметр '''width''' указывает насколько в процентах нужно сжать изображение &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)  &lt;br /&gt;
image({ en: URL + &amp;quot;en.png&amp;quot;, ru: URL + &amp;quot;ru.png&amp;quot;}) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''buttons()''''' - создать новую строку кнопок. Каждый последующий вызов button будет добавляться в эту строку, пока снова не будет вызван buttons().&lt;br /&gt;
&lt;br /&gt;
'''''get_check()''''' - получить массив значений кнопок типа check (1 - нажата, 0 - отжата)&lt;br /&gt;
&lt;br /&gt;
'''''set_check(list)''''' - задать значения кнопок типа check из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
CHECK = [0,1,0]&lt;br /&gt;
set_check(CHECK) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''get_radio()''''' - получить массив значений кнопок типа radio (1 - нажата, 0 - отжата). Единица будет одна.&lt;br /&gt;
&lt;br /&gt;
'''''set_radio(list)''''' - задать значения кнопок типа radio из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;отладочные-функции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Отладочные функции ==&lt;br /&gt;
&lt;br /&gt;
'''''print(args)''''' - вывод информации в окно отладки&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;округление&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Округление ==&lt;br /&gt;
&lt;br /&gt;
'''''floor(val)''''' - округление чисел в меньшую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;floor(5.8)    //  5&lt;br /&gt;
floor(-6.1)   // -7&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''trunc(val)''''' - отбрасывание дробной части:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;trunc(5.51)   //  5&lt;br /&gt;
trunc(-6.99)  // -6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''ceil(val)''''' - округление чисел в большую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;ceil(5.15)    // 6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''round(val, num)''''' - округление '''val''' до '''num''' чисел после запятой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;round(3.14159265, 2)  // 3.14&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;случайные-числа&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Случайные числа ==&lt;br /&gt;
&lt;br /&gt;
'''''randint(min,max)''''' - возвращает целое случайное число в диапазоне [min,max].&lt;br /&gt;
&lt;br /&gt;
'''''random()''''' - возвращает случайное вещественное число в диапазоне [0,1].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;дата-и-время&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Дата и время ==&lt;br /&gt;
&lt;br /&gt;
'''''date(format)''''' - возвращает текущую дату и время в указанном формате. По умолчанию аргумент '''format''' принимает значение: '''%d/%m/%Y %H:%M:%S'''&lt;br /&gt;
&lt;br /&gt;
Поддерживаемые коды форматирования:&lt;br /&gt;
&lt;br /&gt;
* '''%y''' - год без столетия ('22')&lt;br /&gt;
* '''%Y''' - год ('2022')&lt;br /&gt;
* '''%m''' - месяц&lt;br /&gt;
* '''%d''' - день &lt;br /&gt;
* '''%H''' - часы &lt;br /&gt;
* '''%M''' - минуты &lt;br /&gt;
* '''%S''' - секунды &lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
date()  // 17/05/2022 18:16:31 т.е. сейчас&lt;br /&gt;
date('%Y.%m.%d %H:%M:%S')  // 2022.05.17 18:16:31&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;сохранение&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Сохранение данных ==&lt;br /&gt;
&lt;br /&gt;
'''''save(storage, params...)''''' - сохранить данные в таблицу.&lt;br /&gt;
&lt;br /&gt;
Где params - это:&lt;br /&gt;
* '''для QuData.com, WordPress:'''&lt;br /&gt;
** data - данные для сохранения&lt;br /&gt;
&lt;br /&gt;
* '''для Google Sheets:'''&lt;br /&gt;
** data - данные для сохранения&lt;br /&gt;
** link - ссылка на гугл таблицу&lt;br /&gt;
** filter - фильтр для изменения данных. По умолчанию равен null.&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
save('qudata', {field: 'val'})&lt;br /&gt;
save('google_sheets', {field: 'val'}, 'https://....com')&lt;br /&gt;
save('google_sheets', {field: 'val'}, 'https://....com', {'name':'Dmitry'})&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;загрузка&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Загрузка данных ==&lt;br /&gt;
&lt;br /&gt;
'''''load(storage, params...)''''' - загрузить данные из таблицы.&lt;br /&gt;
''Для загрузки файлов поддерживаются форматы .yml и .csv(с разделителем ;(точка с запятой))''&lt;br /&gt;
&lt;br /&gt;
Где params - это:&lt;br /&gt;
* '''для Google Sheets:'''&lt;br /&gt;
** link - ссылка на гугл таблицу&lt;br /&gt;
** filter - фильтр для выборки данных. По умолчанию равен null.&lt;br /&gt;
&lt;br /&gt;
* '''для Google Drive:'''&lt;br /&gt;
** link - ссылка на файл&lt;br /&gt;
&lt;br /&gt;
* '''для Dropbox:''' - ''Должен быть настроен канал!''&lt;br /&gt;
** path - путь к файлу на dropbox&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
result = load('google_sheets', 'https://....com')&lt;br /&gt;
result = load('google_sheets', 'https://....com', {'name':'Dmitry'})&lt;br /&gt;
result = load('google_drive', 'https://....com')&lt;br /&gt;
result = load('dropbox', '/folder_name/file_name.yml')&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Qubot]]&lt;br /&gt;
[[Category:ru]]&lt;/div&gt;</summary>
		<author><name>Mkuznetsov</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Google_Sheets_Setup/ru&amp;diff=780</id>
		<title>Qubot Google Sheets Setup/ru</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_Google_Sheets_Setup/ru&amp;diff=780"/>
		<updated>2022-08-09T13:54:44Z</updated>

		<summary type="html">&lt;p&gt;Mkuznetsov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;qubot-google-sheets-setup&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
{{TOCright}}&lt;br /&gt;
== Подключение Google  таблиц к боту ==&lt;br /&gt;
&lt;br /&gt;
Подключив электронные таблицы Google, вы значительно улучшите работу с ботом. Например, &lt;br /&gt;
ваш бот сможет загружать данные прямо из вашей электронной таблицы Google, а также загружать новые данные в режиме реального времени. &lt;br /&gt;
Использование Google таблиц значительно облегчит вашу работу, поскольку вы будете иметь прямой доступ к чтению и редактированию сохраненных данных в любое время, &lt;br /&gt;
не вмешиваясь в код бота.&lt;br /&gt;
&lt;br /&gt;
Для подключения таблиц следуйте шагам описанным ниже:&lt;br /&gt;
== Шаг 1 ==&lt;br /&gt;
&lt;br /&gt;
Войдите или же создайте аккаунт на https://accounts.google.com&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:GoogleSheets1.png|500px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Шаг 2 ==&lt;br /&gt;
&lt;br /&gt;
Откройте свои Google таблицы здесь https://docs.google.com/spreadsheets&lt;br /&gt;
&lt;br /&gt;
Вы также можете получить доступ к своим таблицам Google с главной страницы Google, нажав кнопку приложений Google.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:GoogleSheets2.png|500px]]  [[File:GoogleSheets3.png|500px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Шаг 3 ==&lt;br /&gt;
&lt;br /&gt;
Поделитесь Google таблицей с ботом:&lt;br /&gt;
&lt;br /&gt;
В Google таблицах откройте электронную таблицу и нажмите кнопку Share(Поделиться).&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:GoogleSheets4.png|500px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Предоставьте доступ любым из возможных способов.&lt;br /&gt;
Первый способ. Поделиться с определенной учетной записью: скопируйте следующую учетную запись в поле ввода окна обмена и отправьте приглашение.&lt;br /&gt;
&lt;br /&gt;
'''qudata-bot-service@qudata-services.iam.gserviceaccount.com'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:GoogleSheets5.png|500px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Второй способ. Ссылка для общего доступа: в разделе Get link(Получить ссылку) измените статус Restricted(ограниченный доступ) на Anyone with the link(все, у кого есть ссылка), и нажать Готово.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:GoogleSheets6.png|500px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Обратите внимание, что вы можете контролировать доступ: если бот будет считывать данные только из таблицы Google, &lt;br /&gt;
то достаточно роли Viewer, а если бот еще и сохраняет данные в таблицу Google, то требуется роль Editor. &lt;br /&gt;
Вы можете изменить роль в любое время в настройках общего доступа.&lt;br /&gt;
&lt;br /&gt;
== Шаг 4 ==&lt;br /&gt;
&lt;br /&gt;
Настройте загрузку данных в таблицу в редакторе бота. Дополнительную информацию об этом можно &lt;br /&gt;
найти в шаблонах редактора ботов (например, Trivia, шаблоны Order Food) или в нашем справочном центре.&lt;br /&gt;
&lt;br /&gt;
== Настройка работы с данными Google  таблиц в боте ==&lt;br /&gt;
&lt;br /&gt;
Выберите нужного вам бота. Зайдите в Editor(Редактор) бота. &lt;br /&gt;
&lt;br /&gt;
'''Загрузка данных с таблицы'''&lt;br /&gt;
&lt;br /&gt;
1. Выберите нужный шаг в вашем боте где нужно загрузить данные с google таблицы(К примеру Main).&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:EditorGoogleSheet1.png|250px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
2. Выберите/создайте элемент, действием которого должна быть загрузка данных с таблицы. Это может быть Buttons(кнопка), элемент Actions(действие), просто ввод любого текста пользователем(click to show actions when) и другие элементы.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:EditorGoogleSheet2.png|250px]]  [[File:EditorGoogleSheet3.png|250px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
3. В поле Item properties у вас появится возможность добавить свойство:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:EditorGoogleSheet4.png|250px]]  [[File:EditorGoogleSheet5.png|250px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
4. Выберите свойство load:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:EditorGoogleSheet6.png|250px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
5. В свойстве load выберите из списка Google Sheets&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:EditorGoogleSheet7.png|250px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
6. В поле Google Sheets table url введите url(ссылку) вашей google таблицы&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:EditorGoogleSheet8.png|700px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:EditorGoogleSheet9.png|400px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
7. В поле Slot name введите имя переменной, в которой будут хранится данные с вашей таблицы в виде массива объектов:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:EditorGoogleSheet10.png|250px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Используйте эту переменную для работы с вашими данными.&lt;br /&gt;
&lt;br /&gt;
'''''Убедитесь, что вы дали доступ на чтение или редактирование своей таблицы'''''&lt;br /&gt;
&lt;br /&gt;
'''Запись данных в таблицу'''&lt;br /&gt;
&lt;br /&gt;
Пройдите шаги 1-3 описанных выше в &amp;quot;Загрузка данных с таблицы&amp;quot; выбрав шаг на котором нужно сделать запись в таблицу.&lt;br /&gt;
&lt;br /&gt;
4. Выберите свойство save:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:EditorGoogleSheet11.png|250px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
5. В свойстве save выберите из списка Google Sheets&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:EditorGoogleSheet12.png|250px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
6. В поле Google Sheets table url введите url(ссылку) вашей google таблицы&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:EditorGoogleSheet8.png|700px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:EditorGoogleSheet13.png|400px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
7. В поле Data value введите данные, которые будут записаны в таблицу в указанном формате в виде объекта:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:EditorGoogleSheet14.png|250px]]  [[File:EditorGoogleSheet15.png|250px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Убедитесь, что вы дали доступ на редактирование своей таблицы'''''&lt;br /&gt;
&lt;br /&gt;
== Работа с фильтрами ==&lt;br /&gt;
&lt;br /&gt;
В боте можно получать выборочные данные или изменять существующие, для этого используются фильтры.&amp;lt;br&amp;gt;&lt;br /&gt;
Фильтры представляют собой словарь данных следующей структуры: { 'СТОЛБЕЦ': ДАННЫЕ, ... }&amp;lt;br&amp;gt;&lt;br /&gt;
В одном фильтре можно указывать несколько столбцов.&amp;lt;br&amp;gt;&lt;br /&gt;
Все столбцы в одном фильтре считаются как логическое &amp;quot;И&amp;quot;, то есть, фильтр будет искать такие строки, у которых во всех указанных столбцах совпадают все указанные данные.&lt;br /&gt;
&lt;br /&gt;
'''Выборочная загрузка данных с таблицы'''&lt;br /&gt;
&lt;br /&gt;
1. Настройте вашего бота на загрузку данных согласно инструкции выше.&amp;lt;br&amp;gt;&lt;br /&gt;
2. Укажите в поле Data filter фильтр в виде словаря.&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:GoogleSheets16.png|350px]]&amp;lt;br&amp;gt;&lt;br /&gt;
3. В словарь SLOT_DATA будут записаны только те данные, значения из столбцов которых соответствуют введённым.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Изменение данных в таблице'''&lt;br /&gt;
&lt;br /&gt;
1. Настройте вашего бота на сохранение данных согласно инструкции выше.&amp;lt;br&amp;gt;&lt;br /&gt;
2. Укажите в поле Data filter фильтр в виде словаря.&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:GoogleSheets17.png|350px]]&amp;lt;br&amp;gt;&lt;br /&gt;
3. Данные из таблицы, которые соответствуют фильтру будут изменены.&amp;lt;br&amp;gt;&lt;br /&gt;
''Если фильтр не сработал, то данные записаны не будут''.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Убедитесь, что вы дали доступ на редактирование своей таблицы'''''&lt;br /&gt;
[[Category:Qubot]]&lt;/div&gt;</summary>
		<author><name>Mkuznetsov</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Google_Sheets_Setup/ru&amp;diff=779</id>
		<title>Qubot Google Sheets Setup/ru</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_Google_Sheets_Setup/ru&amp;diff=779"/>
		<updated>2022-08-09T13:53:51Z</updated>

		<summary type="html">&lt;p&gt;Mkuznetsov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;qubot-google-sheets-setup&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
{{TOCright}}&lt;br /&gt;
== Подключение Google  таблиц к боту ==&lt;br /&gt;
&lt;br /&gt;
Подключив электронные таблицы Google, вы значительно улучшите работу с ботом. Например, &lt;br /&gt;
ваш бот сможет загружать данные прямо из вашей электронной таблицы Google, а также загружать новые данные в режиме реального времени. &lt;br /&gt;
Использование Google таблиц значительно облегчит вашу работу, поскольку вы будете иметь прямой доступ к чтению и редактированию сохраненных данных в любое время, &lt;br /&gt;
не вмешиваясь в код бота.&lt;br /&gt;
&lt;br /&gt;
Для подключения таблиц следуйте шагам описанным ниже:&lt;br /&gt;
== Шаг 1 ==&lt;br /&gt;
&lt;br /&gt;
Войдите или же создайте аккаунт на https://accounts.google.com&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:GoogleSheets1.png|500px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Шаг 2 ==&lt;br /&gt;
&lt;br /&gt;
Откройте свои Google таблицы здесь https://docs.google.com/spreadsheets&lt;br /&gt;
&lt;br /&gt;
Вы также можете получить доступ к своим таблицам Google с главной страницы Google, нажав кнопку приложений Google.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:GoogleSheets2.png|500px]]  [[File:GoogleSheets3.png|500px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Шаг 3 ==&lt;br /&gt;
&lt;br /&gt;
Поделитесь Google таблицей с ботом:&lt;br /&gt;
&lt;br /&gt;
В Google таблицах откройте электронную таблицу и нажмите кнопку Share(Поделиться).&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:GoogleSheets4.png|500px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Предоставьте доступ любым из возможных способов.&lt;br /&gt;
Первый способ. Поделиться с определенной учетной записью: скопируйте следующую учетную запись в поле ввода окна обмена и отправьте приглашение.&lt;br /&gt;
&lt;br /&gt;
'''qudata-bot-service@qudata-services.iam.gserviceaccount.com'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:GoogleSheets5.png|500px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Второй способ. Ссылка для общего доступа: в разделе Get link(Получить ссылку) измените статус Restricted(ограниченный доступ) на Anyone with the link(все, у кого есть ссылка), и нажать Готово.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:GoogleSheets6.png|500px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Обратите внимание, что вы можете контролировать доступ: если бот будет считывать данные только из таблицы Google, &lt;br /&gt;
то достаточно роли Viewer, а если бот еще и сохраняет данные в таблицу Google, то требуется роль Editor. &lt;br /&gt;
Вы можете изменить роль в любое время в настройках общего доступа.&lt;br /&gt;
&lt;br /&gt;
== Шаг 4 ==&lt;br /&gt;
&lt;br /&gt;
Настройте загрузку данных в таблицу в редакторе бота. Дополнительную информацию об этом можно &lt;br /&gt;
найти в шаблонах редактора ботов (например, Trivia, шаблоны Order Food) или в нашем справочном центре.&lt;br /&gt;
&lt;br /&gt;
== Настройка работы с данными Google  таблиц в боте ==&lt;br /&gt;
&lt;br /&gt;
Выберите нужного вам бота. Зайдите в Editor(Редактор) бота. &lt;br /&gt;
&lt;br /&gt;
'''Загрузка данных с таблицы'''&lt;br /&gt;
&lt;br /&gt;
1. Выберите нужный шаг в вашем боте где нужно загрузить данные с google таблицы(К примеру Main).&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:EditorGoogleSheet1.png|250px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
2. Выберите/создайте элемент, действием которого должна быть загрузка данных с таблицы. Это может быть Buttons(кнопка), элемент Actions(действие), просто ввод любого текста пользователем(click to show actions when) и другие элементы.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:EditorGoogleSheet2.png|250px]]  [[File:EditorGoogleSheet3.png|250px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
3. В поле Item properties у вас появится возможность добавить свойство:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:EditorGoogleSheet4.png|250px]]  [[File:EditorGoogleSheet5.png|250px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
4. Выберите свойство load:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:EditorGoogleSheet6.png|250px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
5. В свойстве load выберите из списка Google Sheets&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:EditorGoogleSheet7.png|250px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
6. В поле Google Sheets table url введите url(ссылку) вашей google таблицы&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:EditorGoogleSheet8.png|700px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:EditorGoogleSheet9.png|400px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
7. В поле Slot name введите имя переменной, в которой будут хранится данные с вашей таблицы в виде массива объектов:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:EditorGoogleSheet10.png|250px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Используйте эту переменную для работы с вашими данными.&lt;br /&gt;
&lt;br /&gt;
'''''Убедитесь, что вы дали доступ на чтение или редактирование своей таблицы'''''&lt;br /&gt;
&lt;br /&gt;
'''Запись данных в таблицу'''&lt;br /&gt;
&lt;br /&gt;
Пройдите шаги 1-3 описанных выше в &amp;quot;Загрузка данных с таблицы&amp;quot; выбрав шаг на котором нужно сделать запись в таблицу.&lt;br /&gt;
&lt;br /&gt;
4. Выберите свойство save:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:EditorGoogleSheet11.png|250px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
5. В свойстве save выберите из списка Google Sheets&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:EditorGoogleSheet12.png|250px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
6. В поле Google Sheets table url введите url(ссылку) вашей google таблицы&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:EditorGoogleSheet8.png|700px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:EditorGoogleSheet13.png|400px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
7. В поле Data value введите данные, которые будут записаны в таблицу в указанном формате в виде объекта:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:EditorGoogleSheet14.png|250px]]  [[File:EditorGoogleSheet15.png|250px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Убедитесь, что вы дали доступ на редактирование своей таблицы'''''&lt;br /&gt;
&lt;br /&gt;
== Работа с фильтрами ==&lt;br /&gt;
&lt;br /&gt;
В боте можно получать выборочные данные или изменять существующие, для этого используются фильтры.&amp;lt;br&amp;gt;&lt;br /&gt;
Фильтры представляют собой словарь данных следующей структуры: { 'СТОЛБЕЦ': ДАННЫЕ, ... }&amp;lt;br&amp;gt;&lt;br /&gt;
В одном фильтре можно указывать несколько столбцов.&amp;lt;br&amp;gt;&lt;br /&gt;
Все столбцы в одном фильтре считаются как логическое &amp;quot;И&amp;quot;, то есть, фильтр будет искать такие строки, у которых во всех указанных столбцах совпадают все указанные данные.&lt;br /&gt;
&lt;br /&gt;
'''Выборочная загрузка данных с таблицы'''&lt;br /&gt;
&lt;br /&gt;
1. Настройте вашего бота на загрузку данных согласно инструкции выше.&amp;lt;br&amp;gt;&lt;br /&gt;
2. Укажите в поле Data filter фильтр в виде словаря.&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:GoogleSheets16.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
3. В словарь SLOT_DATA будут записаны только те данные, значения из столбцов которых соответствуют введённым.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Изменение данных в таблице'''&lt;br /&gt;
&lt;br /&gt;
1. Настройте вашего бота на сохранение данных согласно инструкции выше.&amp;lt;br&amp;gt;&lt;br /&gt;
2. Укажите в поле Data filter фильтр в виде словаря.&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:GoogleSheets17.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
3. Данные из таблицы, которые соответствуют фильтру будут изменены.&amp;lt;br&amp;gt;&lt;br /&gt;
''Если фильтр не сработал, то данные записаны не будут''.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Убедитесь, что вы дали доступ на редактирование своей таблицы'''''&lt;br /&gt;
[[Category:Qubot]]&lt;/div&gt;</summary>
		<author><name>Mkuznetsov</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=File:GoogleSheets17.png&amp;diff=778</id>
		<title>File:GoogleSheets17.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=File:GoogleSheets17.png&amp;diff=778"/>
		<updated>2022-08-09T13:52:27Z</updated>

		<summary type="html">&lt;p&gt;Mkuznetsov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mkuznetsov</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=File:GoogleSheets16.png&amp;diff=777</id>
		<title>File:GoogleSheets16.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=File:GoogleSheets16.png&amp;diff=777"/>
		<updated>2022-08-09T13:52:11Z</updated>

		<summary type="html">&lt;p&gt;Mkuznetsov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mkuznetsov</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Google_Sheets_Setup/ru&amp;diff=776</id>
		<title>Qubot Google Sheets Setup/ru</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_Google_Sheets_Setup/ru&amp;diff=776"/>
		<updated>2022-08-09T13:51:28Z</updated>

		<summary type="html">&lt;p&gt;Mkuznetsov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;qubot-google-sheets-setup&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
{{TOCright}}&lt;br /&gt;
== Подключение Google  таблиц к боту ==&lt;br /&gt;
&lt;br /&gt;
Подключив электронные таблицы Google, вы значительно улучшите работу с ботом. Например, &lt;br /&gt;
ваш бот сможет загружать данные прямо из вашей электронной таблицы Google, а также загружать новые данные в режиме реального времени. &lt;br /&gt;
Использование Google таблиц значительно облегчит вашу работу, поскольку вы будете иметь прямой доступ к чтению и редактированию сохраненных данных в любое время, &lt;br /&gt;
не вмешиваясь в код бота.&lt;br /&gt;
&lt;br /&gt;
Для подключения таблиц следуйте шагам описанным ниже:&lt;br /&gt;
== Шаг 1 ==&lt;br /&gt;
&lt;br /&gt;
Войдите или же создайте аккаунт на https://accounts.google.com&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:GoogleSheets1.png|500px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Шаг 2 ==&lt;br /&gt;
&lt;br /&gt;
Откройте свои Google таблицы здесь https://docs.google.com/spreadsheets&lt;br /&gt;
&lt;br /&gt;
Вы также можете получить доступ к своим таблицам Google с главной страницы Google, нажав кнопку приложений Google.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:GoogleSheets2.png|500px]]  [[File:GoogleSheets3.png|500px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Шаг 3 ==&lt;br /&gt;
&lt;br /&gt;
Поделитесь Google таблицей с ботом:&lt;br /&gt;
&lt;br /&gt;
В Google таблицах откройте электронную таблицу и нажмите кнопку Share(Поделиться).&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:GoogleSheets4.png|500px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Предоставьте доступ любым из возможных способов.&lt;br /&gt;
Первый способ. Поделиться с определенной учетной записью: скопируйте следующую учетную запись в поле ввода окна обмена и отправьте приглашение.&lt;br /&gt;
&lt;br /&gt;
'''qudata-bot-service@qudata-services.iam.gserviceaccount.com'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:GoogleSheets5.png|500px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Второй способ. Ссылка для общего доступа: в разделе Get link(Получить ссылку) измените статус Restricted(ограниченный доступ) на Anyone with the link(все, у кого есть ссылка), и нажать Готово.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:GoogleSheets6.png|500px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Обратите внимание, что вы можете контролировать доступ: если бот будет считывать данные только из таблицы Google, &lt;br /&gt;
то достаточно роли Viewer, а если бот еще и сохраняет данные в таблицу Google, то требуется роль Editor. &lt;br /&gt;
Вы можете изменить роль в любое время в настройках общего доступа.&lt;br /&gt;
&lt;br /&gt;
== Шаг 4 ==&lt;br /&gt;
&lt;br /&gt;
Настройте загрузку данных в таблицу в редакторе бота. Дополнительную информацию об этом можно &lt;br /&gt;
найти в шаблонах редактора ботов (например, Trivia, шаблоны Order Food) или в нашем справочном центре.&lt;br /&gt;
&lt;br /&gt;
== Настройка работы с данными Google  таблиц в боте ==&lt;br /&gt;
&lt;br /&gt;
Выберите нужного вам бота. Зайдите в Editor(Редактор) бота. &lt;br /&gt;
&lt;br /&gt;
'''Загрузка данных с таблицы'''&lt;br /&gt;
&lt;br /&gt;
1. Выберите нужный шаг в вашем боте где нужно загрузить данные с google таблицы(К примеру Main).&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:EditorGoogleSheet1.png|250px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
2. Выберите/создайте элемент, действием которого должна быть загрузка данных с таблицы. Это может быть Buttons(кнопка), элемент Actions(действие), просто ввод любого текста пользователем(click to show actions when) и другие элементы.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:EditorGoogleSheet2.png|250px]]  [[File:EditorGoogleSheet3.png|250px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
3. В поле Item properties у вас появится возможность добавить свойство:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:EditorGoogleSheet4.png|250px]]  [[File:EditorGoogleSheet5.png|250px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
4. Выберите свойство load:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:EditorGoogleSheet6.png|250px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
5. В свойстве load выберите из списка Google Sheets&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:EditorGoogleSheet7.png|250px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
6. В поле Google Sheets table url введите url(ссылку) вашей google таблицы&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:EditorGoogleSheet8.png|700px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:EditorGoogleSheet9.png|400px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
7. В поле Slot name введите имя переменной, в которой будут хранится данные с вашей таблицы в виде массива объектов:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:EditorGoogleSheet10.png|250px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Используйте эту переменную для работы с вашими данными.&lt;br /&gt;
&lt;br /&gt;
'''''Убедитесь, что вы дали доступ на чтение или редактирование своей таблицы'''''&lt;br /&gt;
&lt;br /&gt;
'''Запись данных в таблицу'''&lt;br /&gt;
&lt;br /&gt;
Пройдите шаги 1-3 описанных выше в &amp;quot;Загрузка данных с таблицы&amp;quot; выбрав шаг на котором нужно сделать запись в таблицу.&lt;br /&gt;
&lt;br /&gt;
4. Выберите свойство save:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:EditorGoogleSheet11.png|250px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
5. В свойстве save выберите из списка Google Sheets&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:EditorGoogleSheet12.png|250px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
6. В поле Google Sheets table url введите url(ссылку) вашей google таблицы&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:EditorGoogleSheet8.png|700px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:EditorGoogleSheet13.png|400px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
7. В поле Data value введите данные, которые будут записаны в таблицу в указанном формате в виде объекта:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:EditorGoogleSheet14.png|250px]]  [[File:EditorGoogleSheet15.png|250px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Убедитесь, что вы дали доступ на редактирование своей таблицы'''''&lt;br /&gt;
&lt;br /&gt;
== Работа с фильтрами ==&lt;br /&gt;
&lt;br /&gt;
В боте можно получать выборочные данные или изменять существующие, для этого используются фильтры.&amp;lt;br&amp;gt;&lt;br /&gt;
Фильтры представляют собой словарь данных следующей структуры: { 'СТОЛБЕЦ': ДАННЫЕ, ... }&amp;lt;br&amp;gt;&lt;br /&gt;
В одном фильтре можно указывать несколько столбцов.&amp;lt;br&amp;gt;&lt;br /&gt;
Все столбцы в одном фильтре считаются как логическое &amp;quot;И&amp;quot;, то есть, фильтр будет искать такие строки, у которых во всех указанных столбцах совпадают все указанные данные.&lt;br /&gt;
&lt;br /&gt;
'''Выборочная загрузка данных с таблицы'''&lt;br /&gt;
&lt;br /&gt;
1. Настройте вашего бота на загрузку данных согласно инструкции выше.&amp;lt;br&amp;gt;&lt;br /&gt;
2. Укажите в поле Data filter фильтр в виде словаря.&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:EditorGoogleSheet16.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
3. В словарь SLOT_DATA будут записаны только те данные, значения из столбцов которых соответствуют введённым.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Изменение данных в таблице'''&lt;br /&gt;
&lt;br /&gt;
1. Настройте вашего бота на сохранение данных согласно инструкции выше.&amp;lt;br&amp;gt;&lt;br /&gt;
2. Укажите в поле Data filter фильтр в виде словаря.&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:EditorGoogleSheet17.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
3. Данные из таблицы, которые соответствуют фильтру будут изменены.&amp;lt;br&amp;gt;&lt;br /&gt;
''Если фильтр не сработал, то данные записаны не будут''.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Убедитесь, что вы дали доступ на редактирование своей таблицы'''''&lt;br /&gt;
[[Category:Qubot]]&lt;/div&gt;</summary>
		<author><name>Mkuznetsov</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Google_Sheets_Setup/ru&amp;diff=775</id>
		<title>Qubot Google Sheets Setup/ru</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_Google_Sheets_Setup/ru&amp;diff=775"/>
		<updated>2022-08-09T13:50:54Z</updated>

		<summary type="html">&lt;p&gt;Mkuznetsov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;qubot-google-sheets-setup&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
{{TOCright}}&lt;br /&gt;
== Подключение Google  таблиц к боту ==&lt;br /&gt;
&lt;br /&gt;
Подключив электронные таблицы Google, вы значительно улучшите работу с ботом. Например, &lt;br /&gt;
ваш бот сможет загружать данные прямо из вашей электронной таблицы Google, а также загружать новые данные в режиме реального времени. &lt;br /&gt;
Использование Google таблиц значительно облегчит вашу работу, поскольку вы будете иметь прямой доступ к чтению и редактированию сохраненных данных в любое время, &lt;br /&gt;
не вмешиваясь в код бота.&lt;br /&gt;
&lt;br /&gt;
Для подключения таблиц следуйте шагам описанным ниже:&lt;br /&gt;
== Шаг 1 ==&lt;br /&gt;
&lt;br /&gt;
Войдите или же создайте аккаунт на https://accounts.google.com&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:GoogleSheets1.png|500px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Шаг 2 ==&lt;br /&gt;
&lt;br /&gt;
Откройте свои Google таблицы здесь https://docs.google.com/spreadsheets&lt;br /&gt;
&lt;br /&gt;
Вы также можете получить доступ к своим таблицам Google с главной страницы Google, нажав кнопку приложений Google.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:GoogleSheets2.png|500px]]  [[File:GoogleSheets3.png|500px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Шаг 3 ==&lt;br /&gt;
&lt;br /&gt;
Поделитесь Google таблицей с ботом:&lt;br /&gt;
&lt;br /&gt;
В Google таблицах откройте электронную таблицу и нажмите кнопку Share(Поделиться).&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:GoogleSheets4.png|500px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Предоставьте доступ любым из возможных способов.&lt;br /&gt;
Первый способ. Поделиться с определенной учетной записью: скопируйте следующую учетную запись в поле ввода окна обмена и отправьте приглашение.&lt;br /&gt;
&lt;br /&gt;
'''qudata-bot-service@qudata-services.iam.gserviceaccount.com'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:GoogleSheets5.png|500px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Второй способ. Ссылка для общего доступа: в разделе Get link(Получить ссылку) измените статус Restricted(ограниченный доступ) на Anyone with the link(все, у кого есть ссылка), и нажать Готово.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:GoogleSheets6.png|500px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Обратите внимание, что вы можете контролировать доступ: если бот будет считывать данные только из таблицы Google, &lt;br /&gt;
то достаточно роли Viewer, а если бот еще и сохраняет данные в таблицу Google, то требуется роль Editor. &lt;br /&gt;
Вы можете изменить роль в любое время в настройках общего доступа.&lt;br /&gt;
&lt;br /&gt;
== Шаг 4 ==&lt;br /&gt;
&lt;br /&gt;
Настройте загрузку данных в таблицу в редакторе бота. Дополнительную информацию об этом можно &lt;br /&gt;
найти в шаблонах редактора ботов (например, Trivia, шаблоны Order Food) или в нашем справочном центре.&lt;br /&gt;
&lt;br /&gt;
== Настройка работы с данными Google  таблиц в боте ==&lt;br /&gt;
&lt;br /&gt;
Выберите нужного вам бота. Зайдите в Editor(Редактор) бота. &lt;br /&gt;
&lt;br /&gt;
'''Загрузка данных с таблицы'''&lt;br /&gt;
&lt;br /&gt;
1. Выберите нужный шаг в вашем боте где нужно загрузить данные с google таблицы(К примеру Main).&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:EditorGoogleSheet1.png|250px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
2. Выберите/создайте элемент, действием которого должна быть загрузка данных с таблицы. Это может быть Buttons(кнопка), элемент Actions(действие), просто ввод любого текста пользователем(click to show actions when) и другие элементы.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:EditorGoogleSheet2.png|250px]]  [[File:EditorGoogleSheet3.png|250px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
3. В поле Item properties у вас появится возможность добавить свойство:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:EditorGoogleSheet4.png|250px]]  [[File:EditorGoogleSheet5.png|250px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
4. Выберите свойство load:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:EditorGoogleSheet6.png|250px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
5. В свойстве load выберите из списка Google Sheets&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:EditorGoogleSheet7.png|250px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
6. В поле Google Sheets table url введите url(ссылку) вашей google таблицы&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:EditorGoogleSheet8.png|700px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:EditorGoogleSheet9.png|400px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
7. В поле Slot name введите имя переменной, в которой будут хранится данные с вашей таблицы в виде массива объектов:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:EditorGoogleSheet10.png|250px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Используйте эту переменную для работы с вашими данными.&lt;br /&gt;
&lt;br /&gt;
'''''Убедитесь, что вы дали доступ на чтение или редактирование своей таблицы'''''&lt;br /&gt;
&lt;br /&gt;
'''Запись данных в таблицу'''&lt;br /&gt;
&lt;br /&gt;
Пройдите шаги 1-3 описанных выше в &amp;quot;Загрузка данных с таблицы&amp;quot; выбрав шаг на котором нужно сделать запись в таблицу.&lt;br /&gt;
&lt;br /&gt;
4. Выберите свойство save:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:EditorGoogleSheet11.png|250px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
5. В свойстве save выберите из списка Google Sheets&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:EditorGoogleSheet12.png|250px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
6. В поле Google Sheets table url введите url(ссылку) вашей google таблицы&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:EditorGoogleSheet8.png|700px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:EditorGoogleSheet13.png|400px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
7. В поле Data value введите данные, которые будут записаны в таблицу в указанном формате в виде объекта:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:EditorGoogleSheet14.png|250px]]  [[File:EditorGoogleSheet15.png|250px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Убедитесь, что вы дали доступ на редактирование своей таблицы'''''&lt;br /&gt;
&lt;br /&gt;
== Работа с фильтрами ==&lt;br /&gt;
&lt;br /&gt;
В боте можно получать выборочные данные или изменять существующие, для этого используются фильтры.&amp;lt;br&amp;gt;&lt;br /&gt;
Фильтры представляют собой словарь данных следующей структуры: { 'СТОЛБЕЦ': ДАННЫЕ, ... }&amp;lt;br&amp;gt;&lt;br /&gt;
В одном фильтре можно указывать несколько столбцов. Все столбцы в одном фильтре считаются как логическое &amp;quot;И&amp;quot;, то есть, фильтр будет искать такие строки, у которых во всех указанных столбцах совпадают все указанные данные.&lt;br /&gt;
&lt;br /&gt;
'''Выборочная загрузка данных с таблицы'''&lt;br /&gt;
&lt;br /&gt;
1. Настройте вашего бота на загрузку данных согласно инструкции выше.&amp;lt;br&amp;gt;&lt;br /&gt;
2. Укажите в поле Data filter фильтр в виде словаря.&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:EditorGoogleSheet16.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
3. В словарь SLOT_DATA будут записаны только те данные, значения из столбцов которых соответствуют введённым.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Изменение данных в таблице'''&lt;br /&gt;
&lt;br /&gt;
1. Настройте вашего бота на сохранение данных согласно инструкции выше.&amp;lt;br&amp;gt;&lt;br /&gt;
2. Укажите в поле Data filter фильтр в виде словаря.&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:EditorGoogleSheet17.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
3. Данные из таблицы, которые соответствуют фильтру будут изменены.&amp;lt;br&amp;gt;&lt;br /&gt;
''Если фильтр не сработал, то данные записаны не будут''.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Убедитесь, что вы дали доступ на редактирование своей таблицы'''''&lt;br /&gt;
[[Category:Qubot]]&lt;/div&gt;</summary>
		<author><name>Mkuznetsov</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Main_Page&amp;diff=754</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Main_Page&amp;diff=754"/>
		<updated>2022-07-05T07:47:44Z</updated>

		<summary type="html">&lt;p&gt;Mkuznetsov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span style=&amp;quot;color:#005500&amp;quot;&amp;gt;QuBot&amp;lt;/span&amp;gt;  is a set of tools for creating chatbots and virtual assistants.&lt;br /&gt;
----&lt;br /&gt;
;First steps:&lt;br /&gt;
* [[Principles of bot design]]&lt;br /&gt;
* [[Getting Started: Creating Your First Bot]]&lt;br /&gt;
; Setup and programming:&lt;br /&gt;
* [[Qubot Customizing]]&lt;br /&gt;
* [[Qubot Google Sheets Setup]]&lt;br /&gt;
* [[Qubot Script]]&lt;br /&gt;
* [[Qubot NLU|Creation of smart bots (NLP)]]&lt;br /&gt;
;&amp;lt;u&amp;gt;[[:Category:Integrations|Integrations]]&amp;lt;/u&amp;gt;:&lt;br /&gt;
* [[Channels]]&lt;br /&gt;
* [[How to add a chatbot to your website]]&lt;br /&gt;
* [[How to integrate WordPress plugin to website|WordPress plugin]]&lt;br /&gt;
* [[Qubot Facebook Integration|Facebook ]]&lt;br /&gt;
* [[Qubot Telegram Integration|Telegram]]&lt;br /&gt;
* [[Qubot Viber Integration|Viber ]]&lt;br /&gt;
* [[Qubot LiveChat Integration|LiveChat]]&lt;br /&gt;
* [[Qubot Whatsapp Integration|Whatsapp]]&lt;br /&gt;
----&lt;br /&gt;
* [[FAQ]]&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;strong&amp;gt;MediaWiki успешно установлена.&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Информацию по работе с этой вики можно найти в [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents справочном руководстве].&lt;br /&gt;
&lt;br /&gt;
== Некоторые полезные ресурсы ==&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Список возможных настроек];&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Manual:FAQ/ru Часто задаваемые вопросы и ответы по MediaWiki];&lt;br /&gt;
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Рассылка уведомлений о выходе новых версий MediaWiki].&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Перевод MediaWiki на свой язык]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Узнайте, как бороться со спамом в вашей вики]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
[[Category:Qubot|*]]&lt;/div&gt;</summary>
		<author><name>Mkuznetsov</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Main_Page/ru&amp;diff=753</id>
		<title>Main Page/ru</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Main_Page/ru&amp;diff=753"/>
		<updated>2022-07-05T07:43:26Z</updated>

		<summary type="html">&lt;p&gt;Mkuznetsov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|&lt;br /&gt;
|&lt;br /&gt;
'''Lang:'''&lt;br /&gt;
|&lt;br /&gt;
[[Main Page|en]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#005500&amp;quot;&amp;gt;QuBot&amp;lt;/span&amp;gt; - это набор инструментов по созданию чат-ботов и виртуальных помощников.&lt;br /&gt;
----&lt;br /&gt;
;Первые шаги:&lt;br /&gt;
* [[Getting Started: Creating Your First Bot/ru]]&lt;br /&gt;
; Настройка и программирование:&lt;br /&gt;
* [[Qubot Customizing/ru]]&lt;br /&gt;
* [[Qubot Google Sheets Setup/ru|Подключение Google  таблиц к боту]]&lt;br /&gt;
* [[Qubot Script/ru]]&lt;br /&gt;
* [[Qubot NLU/ru|Создание умных ботов (NLP)]]&lt;br /&gt;
;&amp;lt;u&amp;gt;[[:Category:Integrations|Интеграция]]&amp;lt;/u&amp;gt;:&lt;br /&gt;
* [[How to add a chatbot to your website/ru|Установка чат-бота на собственный сайт]]&lt;br /&gt;
* [[How to integrate WordPress plugin to website/ru|WordPress plugin]]&lt;br /&gt;
* [[Qubot Facebook Integration/ru|Facebook ]]&lt;br /&gt;
* [[Qubot Telegram Integration/ru|Telegram ]]&lt;br /&gt;
* [[Qubot Viber Integration/ru   |Viber ]]&lt;br /&gt;
* [[Qubot LiveChat Integration/ru|LiveChat]]&lt;br /&gt;
* [[Qubot Whatsapp Integration/ru|Whatsapp]]&lt;br /&gt;
----&lt;br /&gt;
* [[FAQ|Список часто задаваемых вопросов и ответов]]&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;strong&amp;gt;MediaWiki успешно установлена.&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Информацию по работе с этой вики можно найти в [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents справочном руководстве].&lt;br /&gt;
&lt;br /&gt;
== Некоторые полезные ресурсы ==&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Список возможных настроек];&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Manual:FAQ/ru Часто задаваемые вопросы и ответы по MediaWiki];&lt;br /&gt;
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Рассылка уведомлений о выходе новых версий MediaWiki].&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Перевод MediaWiki на свой язык]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Узнайте, как бороться со спамом в вашей вики]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
[[Category:Qubot|*]]&lt;br /&gt;
[[Category:ru]]&lt;/div&gt;</summary>
		<author><name>Mkuznetsov</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_NLU/ru&amp;diff=752</id>
		<title>Qubot NLU/ru</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_NLU/ru&amp;diff=752"/>
		<updated>2022-07-05T07:42:26Z</updated>

		<summary type="html">&lt;p&gt;Mkuznetsov: Created page with &amp;quot;{| | '''Lang:''' | en |}  &amp;lt;span id=&amp;quot;qubot-nlu&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; {{TOCright}}  ==Введение== Если Вы хотите чтобы Ваш бот отвечал со...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|&lt;br /&gt;
|&lt;br /&gt;
'''Lang:'''&lt;br /&gt;
|&lt;br /&gt;
[[Qubot_NLU|en]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;qubot-nlu&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
{{TOCright}}&lt;br /&gt;
&lt;br /&gt;
==Введение==&lt;br /&gt;
Если Вы хотите чтобы Ваш бот отвечал современным тенденциям и умел обрабатывать ввод естественного текста, тогда воспользуйтесь нашей инновационной технологией обработки естественного языка (NLP). Именно NLP позволяет Вашему боту понимать водимые сообщение от пользователя и формировать подходящие ответы. Хочет клиент “две пиццы Маргарита и колу” или “колу и чизкейк на двоих” бот поймёт и оформит правильный заказ.&lt;br /&gt;
&lt;br /&gt;
==Общие сведения о работе NLP==&lt;br /&gt;
Суть работы NLP сводится к анализу основных составляющих любого предложения - '''сущностей''' и '''намерений'''.&lt;br /&gt;
&lt;br /&gt;
*'''Сущности(entities)''' представляют собой любые объекты реального мира, например, кола (drink), Украина (country), 2022 (number), Дмитрий (name). &lt;br /&gt;
&lt;br /&gt;
*'''Намерения(intents)''' - это желание клиента описанное в виде предложения, например, я хочу колу (want), как пройти к театру (finding a way), привет (greeting).&lt;br /&gt;
&lt;br /&gt;
Для распознавания намерений используют методы машинного обучения на основе подготовленных фраз-примеров для каждого класса. Эти методы варьируются от простого мешка слов до нейронных сетей достаточно сложной архитектуры. В качестве признаков выступают слова, n-граммы слов, n-граммы букв (борьба с опечатками), наличие знака вопроса и т.д.&lt;br /&gt;
&lt;br /&gt;
Используя комбинации из распознанных сущностей и намерений мы с уверенностью можем констатировать, что именно хочет клиент и предпринять соответствующие действия.&lt;br /&gt;
&lt;br /&gt;
Ниже в таблице 1 представлено несколько простых примеров из бота пиццерии:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table style=&amp;quot;border-style: solid; border-width: 1px; border-color: lightgray;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;'''Сообщение 👩'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;'''Сущности'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;'''Намерение'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;'''Ответ 💻'''&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Привет&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;-&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;greet&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Здравствуйте&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Привет, я Марго&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;$NAME = Маргарита&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;greet&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Очень приятно, Маргарита!&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Я хочу две Маргариты и колу&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;$NUMBER = 2&amp;lt;br/&amp;gt;$NAME  = Маргарита&amp;lt;br/&amp;gt;$DRINK = кола&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;want&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Вам оформить заказ:&amp;lt;br/&amp;gt;2 пиццы Маргарита и одна кола?&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Я хочу&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;-&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;want&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Что Вы хотите?&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Я хочу в Украину&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;$COUNTRY = Украина&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;want&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;От Вас до Украины 4768.95  км. Удобнее всего Вам будет лететь на самолёте.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В каждом из представленных примеров бот, несмотря на схожие намерения и распознанные сущности бот дает осмысленные ответы. В случае намерения '''greet''', мы понимаем что $NAME - имя клиента, а в случае намерения '''want''' мы понимаем что $NAME название пиццы.&lt;br /&gt;
&lt;br /&gt;
==Улучшение интеллектуального развития бота==&lt;br /&gt;
Описанные ранее общие сведения применяются для работы NLP у многих компаний, это довольно простая схема, только у неё есть недостаток - бот не способен ориентироваться в контексте. Это значит что во всех примерах из таблицы 1 всегда будет один и тот же ответ.&lt;br /&gt;
&lt;br /&gt;
Для предоставления боту большего интеллекта в NLP от QuData используются '''забываемые намерения''', а также механизм сохраняющий историю общения с клиентом. &lt;br /&gt;
&lt;br /&gt;
'''Забываемые намерения''' - это такие намерения, которые происходят вне основного направления бота и забываются при первом же обычном намерении. &lt;br /&gt;
&lt;br /&gt;
Благодаря этому Вам бот может ориентироваться в контексте, а также обрабатывать более сложные цепочки диалогов, например, такие:&lt;br /&gt;
&lt;br /&gt;
''Желтым выделены забываемые намерения.''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table style=&amp;quot;border-style: solid; border-width: 1px; border-color: lightgray;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;'''Сообщение 👩'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;'''Сущности'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;'''Намерение'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;'''Ответ 💻'''&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Хочу фанту&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;$DRINKS = фанта&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;want&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Сколько фанты Вы хотите?&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr style=&amp;quot;background-color: lightyellow&amp;quot;&amp;gt;&amp;lt;td&amp;gt;А сколько она стоит?&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;-&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;[ want, what-is-the-price ]&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Фанта стоит 20 гривен.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Тогда три&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;$NUMBER = 3&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;[ want, number ]&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Я добавила в заказ 3 фанты&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table style=&amp;quot;border-style: solid; border-width: 1px; border-color: lightgray;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;'''Сообщение 👩'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;'''Сущности'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;'''Намерение'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;'''Ответ 💻'''&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;/start&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;-&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;start&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Здравствуйте. Меня зовут Бот. Как Вас зовут?&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Меня зовут Катя&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;$NAME = Екатерина&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;[start, my name is]&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Очень приятно Екатерина, рад знакомству.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr style=&amp;quot;background-color: lightyellow&amp;quot;&amp;gt;&amp;lt;td&amp;gt;Привет&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;-&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;greet&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Всегда рад поздороваться повторно.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr style=&amp;quot;background-color: lightyellow&amp;quot;&amp;gt;&amp;lt;td&amp;gt;Meня зовут Маша&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;$NAME = Мария&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;my name is&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Понятно... То есть Вас зовут Мария?&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr style=&amp;quot;background-color: lightyellow&amp;quot;&amp;gt;&amp;lt;td&amp;gt;Нет.&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;-&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;deny&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Как же Вас тогда зовут?&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr style=&amp;quot;background-color: lightyellow&amp;quot;&amp;gt;&amp;lt;td&amp;gt;Даша&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;$NAME = Дарья&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;name&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Понятно... То есть Вас зовут Дарья?&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr style=&amp;quot;background-color: lightyellow&amp;quot;&amp;gt;&amp;lt;td&amp;gt;Да&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;-&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;yes&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Хорошо, Дарья, я это запомню.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr style=&amp;quot;background-color: lightyellow&amp;quot;&amp;gt;&amp;lt;td&amp;gt;Meня зовут Даша&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;$NAME = Дарья&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;my name is&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Да, Дарья, я знаю.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Я хочу фанту&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;$DRINKS = фанта&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;want&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Сколько фанты Вы хотите?&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Qubot]]&lt;br /&gt;
[[Category:ru]]&lt;/div&gt;</summary>
		<author><name>Mkuznetsov</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=File:Test.jpg&amp;diff=142</id>
		<title>File:Test.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=File:Test.jpg&amp;diff=142"/>
		<updated>2022-06-03T13:27:29Z</updated>

		<summary type="html">&lt;p&gt;Mkuznetsov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mkuznetsov</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=99</id>
		<title>Qubot Script/ru</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=99"/>
		<updated>2022-05-27T08:35:32Z</updated>

		<summary type="html">&lt;p&gt;Mkuznetsov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;qubot-script&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
{{TOCright}}&lt;br /&gt;
== Qubot Script ==&lt;br /&gt;
&lt;br /&gt;
'''''Qubot Script''''' - это язык программирования, используемый для выполнения логических и математических операций при решении задач бота&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;объявление-слотов-переменных&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Слоты ==&lt;br /&gt;
&lt;br /&gt;
'''Слот''' - это переменная, значение которой доступно во всех состояниях бота. Также значение слота сохраняется, если бота закрыли и продолжили&lt;br /&gt;
с ним работать через время.&lt;br /&gt;
&lt;br /&gt;
Объявление слота происходит при первом присваивании в него значений. &amp;lt;br&amp;gt; Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
объявляет слот с именем '''a''' и присваивает ему значение '''7'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Локальные переменные ==&lt;br /&gt;
&lt;br /&gt;
В отличие от слотов локальные переменные сохраняются только внутри скрипта, где они объявлены. &amp;lt;br&amp;gt;&lt;br /&gt;
Объявление происходит путем добавления перед именем служебного слова '''local''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если локальная переменная объявлена внутри фигурных скобок '''{}''', то и ее значение доступно только там:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная текущего скрипта&lt;br /&gt;
&lt;br /&gt;
if (b == 8)&lt;br /&gt;
{&lt;br /&gt;
   local c = 9 // локальная переменная блока оператора 'if'&lt;br /&gt;
   print(c)    // выведет 9&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(b)       // выведет 8 &lt;br /&gt;
print(c)       // выдаст ошибку, т.к. тут уже переменная 'с' недоступна&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Типы переменных ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sInt = 7                             // целочисленный&lt;br /&gt;
sFloat = 7.3                         // вещественный&lt;br /&gt;
sStr = &amp;quot;hello&amp;quot;                       // строковый&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;, sStr]       // массив&lt;br /&gt;
sDic = { n: 1, s: &amp;quot;Wine&amp;quot;  }          // словарь&lt;br /&gt;
sBool = true                         // бинарный&lt;br /&gt;
sRegExp = /[abc]/                    // регулярное выражение&lt;br /&gt;
sNone = none                         // неопределенное значение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;логические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Логические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''and''' - логическое ‘И’&lt;br /&gt;
* '''or''' - логическое ‘ИЛИ’&lt;br /&gt;
* '''not''' - отрицание ‘НЕТ’&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
a = true&lt;br /&gt;
b = false&lt;br /&gt;
c = true&lt;br /&gt;
res = not((a and b) or c)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;арифметические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Арифметические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''+''' - сложение&lt;br /&gt;
* '''-''' - вычитание&lt;br /&gt;
* '''*''' - умножение&lt;br /&gt;
* '''/''' - деление&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;res = 2+3-4*5+(1.5-0.2/2)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Комментарии ==&lt;br /&gt;
&lt;br /&gt;
Комментарии используются для документирования фрагментов скрипта.&lt;br /&gt;
Могут быть многострочыми и однострочными:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Пример&lt;br /&gt;
    многострочного&lt;br /&gt;
        комментария&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
a = 2253 // пример однострочного комментария&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также разрешается и питоновский стиль комментария:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
a = 2253 # пример однострочного комментария&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-с-массивами&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-словарем-объектом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со словарем (объектом) ==&lt;br /&gt;
&lt;br /&gt;
Объявление словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;dic = { n: 1, s: &amp;quot;Wine&amp;quot;  } &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к значениям словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = dic.n             // доступ к полю с именем &amp;quot;n&amp;quot; через точку  &lt;br /&gt;
a = dic[&amp;quot;n&amp;quot;]          // доступ к полю с именем &amp;quot;n&amp;quot; через оператор доступа&lt;br /&gt;
dic[&amp;quot;food&amp;quot;] = &amp;quot;milk&amp;quot;  // добавление в словарь пары ключ-значение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа с массивами ==&lt;br /&gt;
&lt;br /&gt;
Объявление массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [1,2,3]         // создает массив с тремя элементами со значениями 1,2,3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к элементам массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;first  = arr[0]       // получить первый элемент массива&lt;br /&gt;
last   = arr[-1]      // получить последний элемент массива&lt;br /&gt;
last   = arr[-2]      // получить предпоследний элемент массива&lt;br /&gt;
arr[0] = 7            // изменить значение первого элемента&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Функции работы с массивом:&lt;br /&gt;
&lt;br /&gt;
'''''push(val1,val2...)''''' - добавить в конец массива элементы со значениями '''val1, val2...'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr.push(4) // добавить значение '4' в конец массива&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''unshift(val1,val2...)''''' - добавить в начало массива элементы со значениями '''val1, val2...'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr.unshift(0) // добавить значение '0' в начало&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''pop()''''' - удалить последний элемент массива и вернуть его значение&lt;br /&gt;
&lt;br /&gt;
'''''shift()''''' - удалить первый элемент массива и вернуть его значение&lt;br /&gt;
&lt;br /&gt;
'''''slice(start,end)''''' - возвращает часть массива начиная с позиции '''start''' и если указана переменная '''end''', то до нее не включая&lt;br /&gt;
&lt;br /&gt;
'''''splice(start, deleteCount)''''' - удаляет '''deleteCount''' элементов начиная с позиции '''start'''&lt;br /&gt;
&lt;br /&gt;
'''''clear()''''' - очистить массив&lt;br /&gt;
&lt;br /&gt;
Функции работы с массивом словарей:&lt;br /&gt;
&lt;br /&gt;
'''''find(EXPR)''''' - ищет элементы массива, удовлетворяющие условию '''EXPR'''. Найденные элементы возвращаются в виде массива&amp;lt;br&amp;gt;&lt;br /&gt;
Например:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                            // массив из трех объектов с продуктами&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120},&lt;br /&gt;
  {title: &amp;quot;Cheese&amp;quot;, price: 100},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.find(price &amp;gt; 80)   // найти все объекты у которых поле 'price' больше 80 и вернуть их в массиве&lt;br /&gt;
print('найдено $res.length:')      // выведет количество найденных объектов&lt;br /&gt;
print(res)                         // выведет объекты, удовлетворяющие условию&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''total(EXPR)''''' - применить выражение '''EXPR''' к каждому элементу массива и суммировать все значения&amp;lt;br&amp;gt;&lt;br /&gt;
Например посчитаем сумму товаров в корзине:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                                 // массив из трех объектов с продуктами&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120, amount: 3},&lt;br /&gt;
  {title: &amp;quot;Pizza&amp;quot;, price: 100, amount: 2},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40, amount: 3},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.total(price * amount)   // для каждого элемента массива умножаем цену на количество и складываем результат&lt;br /&gt;
print(&amp;quot;К оплате: $res грн.&amp;quot;)            // выведет сумму товаров: &amp;quot;К оплате: 680 грн.&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''count(EXPR)''''' - найти количество элементов массива для которых истинно выражение '''EXPR'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                                 // массив из трех объектов с продуктами&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120, amount: 3},&lt;br /&gt;
  {title: &amp;quot;Pizza&amp;quot;, price: 100, amount: 2},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40, amount: 3},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.count(price &amp;lt; 100)                            // для каждого элемента массива умножаем цену на количество и складываем результат&lt;br /&gt;
print(&amp;quot;Количество товаров, дешевле 100 грн: $res&amp;quot;)            // выведет количество товаров: &amp;quot;Количество товаров, дешевле 100 грн: 1&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''sort(KEY)''''' - отсортировать массив&lt;br /&gt;
&lt;br /&gt;
Поддерживаются только массивы, в которых все значения одного типа: число или строка для sort() и словарь для sort(key)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
list = [1, 3, 2] // массив чисел&lt;br /&gt;
str  = [&amp;quot;a&amp;quot;, &amp;quot;hi&amp;quot;, &amp;quot;banana&amp;quot;] // массив строк&lt;br /&gt;
arr  = [         // массив из словарей с продуктами&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120, amount: 3},&lt;br /&gt;
  {title: &amp;quot;Pizza&amp;quot;, price: 100, amount: 2},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
list.sort()       // отсортировать массив по возрастанию&lt;br /&gt;
 str.sort()        // отсортировать массив по возрастанию&lt;br /&gt;
 arr.sort(price)   // отсортировать массив объектов по ключу 'price'&lt;br /&gt;
// TODO&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''reverse()''''' - перевернуть массив &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
list = [1, 3, 2]  // массив&lt;br /&gt;
&lt;br /&gt;
list.reverse()    // [2, 3, 1]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-строками&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со строками ==&lt;br /&gt;
&lt;br /&gt;
Объявление строковых слотов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;           // используя двойные кавычки &lt;br /&gt;
str = 'hello'           // используя одинарные кавычки&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Операции со строками:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
base = 'http://imgs/'&lt;br /&gt;
url = base + 'img1.png' // сложение строк&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Подстановка слотов в строки:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 5&lt;br /&gt;
str = &amp;quot;a = $a&amp;quot;          // вместо $a будет подставлено значение слота a&lt;br /&gt;
print(str)              // выведет: &amp;quot;a = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вставка выражений в строки:&lt;br /&gt;
&lt;br /&gt;
Выражения можно вставлять в строки, обрамляя их фигурными скобками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;2 + 3 = {2+3}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)              // выведет: &amp;quot;2 + 3 = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Экранирование спецсимволов '$','{','}' происходит путем добавления наклонной черты '\'&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;price: 4.99\$ \{sale\}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)                       // выведет: &amp;quot;price: 4.99$ {sale}&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функции работы со строками:&lt;br /&gt;
&lt;br /&gt;
'''''length''''' - получить длинну строки&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;&lt;br /&gt;
len = str.length           // вернет 5 - число символов строки &amp;quot;hello&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''substring(start,end)''''' - получить подстроку начиная с позиции '''start''' и до позиции '''end''' не включая&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;http://server/im.png&amp;quot;&lt;br /&gt;
substr = str.substring(7,13)  // вернет строку &amp;quot;server&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''search(pattern)''''' - найти позицию первого вхождения '''pattern''', иначе вернуть -1. Аргумент '''pattern''' может быть как строкой&lt;br /&gt;
так и регулярным выражением:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;apple orange juice&amp;quot;&lt;br /&gt;
res = str.search('orange')          // вернет позицию строки 'orange': 6&lt;br /&gt;
res = str.search(/(orange|juice)/)  // вернет позицию строки 'orange' или 'juice'&lt;br /&gt;
res = str.search('pizza')           // не найдет 'pizza' и вернет -1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;условный-оператор&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Условный оператор ==&lt;br /&gt;
Оператор '''if''' используется, если необходимо ветвление логики в зависимости от условия&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 9&lt;br /&gt;
if (a &amp;gt; 7) &lt;br /&gt;
{&lt;br /&gt;
    res = 'a more than 7'&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    res = 'a less or equal 7'&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере проверяется условие &amp;lt;code&amp;gt;a &amp;amp;gt; 7&amp;lt;/code&amp;gt; и если оно истинно, то выполняется первый блок скрипта, окруженный фигурными скобками, иначе выполняется блок после служебного слова '''else'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;цикл-while&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Цикл '''while''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор цикла проверяет условие и пока оно истинно, выполняет код окруженный фигурными скобками&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = 7&lt;br /&gt;
while (a &amp;gt; 0) &lt;br /&gt;
{&lt;br /&gt;
    a = a - 1&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере скрипт &amp;lt;code&amp;gt;a = a - 1&amp;lt;/code&amp;gt; будет выполнятся до тех пор пока значение слота &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; не станет равным нулю&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;итератор-for&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Итератор '''for''' ==&lt;br /&gt;
&lt;br /&gt;
Итератор используется для перебора всех значений массива, либо ключей из словаря&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [3,2,1]&lt;br /&gt;
for(val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(val)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
3&lt;br /&gt;
2&lt;br /&gt;
1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере цикл последовательно перебирает значения массива и заносит их во временную переменную '''val''' соответственно для каждого элемента массива выполняется окруженный фигурными скобками скрипт '''print(val)''' выводящий значение в отладочное окно&lt;br /&gt;
&lt;br /&gt;
Иногда удобно в цикле иметь и индекс массива, для этого перед переменной значения добавляем имя переменной индекса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [3,2,1]&lt;br /&gt;
for(i, val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(&amp;quot;$i: $val&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
0: 3&lt;br /&gt;
1: 2&lt;br /&gt;
2: 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для перебора ключей и значений словаря используется аналогичная конструкция:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = {pizza: 100, milk: 20, wine: 120}&lt;br /&gt;
for(key, val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(&amp;quot;$key: $val&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
pizza: 100&lt;br /&gt;
milk: 20&lt;br /&gt;
wine: 120&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-switch&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор выбора '''switch''' ==&lt;br /&gt;
&lt;br /&gt;
Конструкция '''switch''' заменяет собой сразу несколько '''if'''. Она представляет собой более наглядный способ сравнить выражение сразу с несколькими вариантами.&lt;br /&gt;
Имеет один или более блок '''case''' и необязательный блок '''default'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 'one'&lt;br /&gt;
switch(a)&lt;br /&gt;
{&lt;br /&gt;
   case 'one': print('one'); break;&lt;br /&gt;
   case 'two': print('two'); break;&lt;br /&gt;
   default: print('def')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-in&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''in''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор '''in''' проверяет есть ли значение в массиве либо является ключём в словаре.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;]             // массив&lt;br /&gt;
print(&amp;quot;hello&amp;quot; in sArr)               // вернет true, т.к. значение &amp;quot;hello&amp;quot; присутствует в массиве sArr &lt;br /&gt;
sDic = { price: 100, food: &amp;quot;Wine&amp;quot;}   // словарь&lt;br /&gt;
print(&amp;quot;food&amp;quot; in sDic)                // вернет true, т.к. ключ &amp;quot;food&amp;quot; присутствует в словаре sDic&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-button&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''button''' ==&lt;br /&gt;
&lt;br /&gt;
'''''button(caption){ SCRIPT }'''''&amp;lt;br&amp;gt;&lt;br /&gt;
Данный оператор добавляет в интерфейс кнопку с текстом '''caption''' в текущее сообщение. После нажатия на кнопку выполняется логика '''SCRIPT'''.&lt;br /&gt;
Если '''caption''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
button('click me')      // текст в кнопке&lt;br /&gt;
{&lt;br /&gt;
    // скрипт, который выполнится после нажатия &lt;br /&gt;
    print('button was clicked!')&lt;br /&gt;
    step('STATE_AFTER_CLICK')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку скрипт будет выполнен в контексте локальных переменных на момент добавления данной кнопки, а также в контексте&lt;br /&gt;
значений слотов на момент нажатия на кнопку!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции перехода ==&lt;br /&gt;
&lt;br /&gt;
'''''run(state)''''' - выполнить логику шага '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''step(state)''''' - установка шага перехода по умолчанию в значение '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''goto(state)''''' - мгновенный переход в шаг '''state'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-работы-с-контентом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции работы с контентом ==&lt;br /&gt;
&lt;br /&gt;
'''''text(obj)''''' - вывести в текущее сообщение текст. Если '''obj''' - это сторока, то она выводится не зависимо от текущего языка. Если '''obj''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
text(&amp;quot;Hi world!&amp;quot;)     &lt;br /&gt;
text({ en: &amp;quot;Hi world!&amp;quot;, ru: &amp;quot;Привет мир!&amp;quot;, es: &amp;quot;¡Hola mundo!&amp;quot;})  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''images()''''' - создать новую строку картинок. Каждый последующий вызов image будет добавляться в эту строку, пока снова не будет вызван images().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;  &lt;br /&gt;
images()     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)     &lt;br /&gt;
image(URL + &amp;quot;owl_b.png&amp;quot;) &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''image(url, width)''''' - вывести в текущее сообщение картинку. Если '''url''' - это строка, то он используется не зависимо от текущего языка. Если '''url''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.. Необязательный параметр '''width''' указывает насколько в процентах нужно сжать изображение &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)  &lt;br /&gt;
image({ en: URL + &amp;quot;en.png&amp;quot;, ru: URL + &amp;quot;ru.png&amp;quot;}) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''buttons()''''' - создать новую строку кнопок. Каждый последующий вызов button будет добавляться в эту строку, пока снова не будет вызван buttons().&lt;br /&gt;
&lt;br /&gt;
'''''get_check()''''' - получить массив значений кнопок типа check (1 - нажата, 0 - отжата)&lt;br /&gt;
&lt;br /&gt;
'''''set_check(list)''''' - задать значения кнопок типа check из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
CHECK = [0,1,0]&lt;br /&gt;
set_check(CHECK) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''get_radio()''''' - получить массив значений кнопок типа radio (1 - нажата, 0 - отжата). Единица будет одна.&lt;br /&gt;
&lt;br /&gt;
'''''set_radio(list)''''' - задать значения кнопок типа radio из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;отладчные-функции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Отладчные функции ==&lt;br /&gt;
&lt;br /&gt;
'''''print(args)''''' - вывод информации в окно отладки&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;округление&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Округление ==&lt;br /&gt;
&lt;br /&gt;
'''''floor(val)''''' - округление чисел в меньшую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;floor(5.8)    //  5&lt;br /&gt;
floor(-6.1)   // -7&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''trunc(val)''''' - отбрасывание дробной части:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;trunc(5.51)   //  5&lt;br /&gt;
trunc(-6.99)  // -6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''ceil(val)''''' - округление чисел в большую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;ceil(5.15)    // 6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''round(val, num)''''' - округление '''val''' до '''num''' чисел после запятой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;round(3.14159265, 2)  // 3.14&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;случайные-числа&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Случайные числа ==&lt;br /&gt;
&lt;br /&gt;
'''''randint(min,max)''''' - возвращает целое случайное число в диапазоне [min,max].&lt;br /&gt;
&lt;br /&gt;
'''''random()''''' - возвращает случайное вещественное число в диапазоне [0,1].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;дата-и-время&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Дата и время ==&lt;br /&gt;
&lt;br /&gt;
'''''date(format)''''' - возвращает текущую дату и время в указанном формате. По умолчанию аргумент '''format''' принимает значение: '''%d/%m/%Y %H:%M:%S'''&lt;br /&gt;
&lt;br /&gt;
Поддерживаемые коды форматирования:&lt;br /&gt;
&lt;br /&gt;
* '''%y''' - год без столетия ('22')&lt;br /&gt;
* '''%Y''' - год ('2022')&lt;br /&gt;
* '''%m''' - месяц&lt;br /&gt;
* '''%d''' - день &lt;br /&gt;
* '''%H''' - часы &lt;br /&gt;
* '''%M''' - минуты &lt;br /&gt;
* '''%S''' - секунды &lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
date()  // 17/05/2022 18:16:31 т.е. сейчас&lt;br /&gt;
date('%Y.%m.%d %H:%M:%S')  // 2022.05.17 18:16:31&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Qubot]]&lt;/div&gt;</summary>
		<author><name>Mkuznetsov</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=98</id>
		<title>Qubot Script/ru</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=98"/>
		<updated>2022-05-26T08:35:02Z</updated>

		<summary type="html">&lt;p&gt;Mkuznetsov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;qubot-script&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
{{TOCright}}&lt;br /&gt;
== Qubot Script ==&lt;br /&gt;
&lt;br /&gt;
'''''Qubot Script''''' - это язык программирования, используемый для выполнения логических и математических операций при решении задач бота&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;объявление-слотов-переменных&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Слоты ==&lt;br /&gt;
&lt;br /&gt;
'''Слот''' - это переменная, значение которой доступно во всех состояниях бота. Также значение слота сохраняется, если бота закрыли и продолжили&lt;br /&gt;
с ним работать через время.&lt;br /&gt;
&lt;br /&gt;
Объявление слота происходит при первом присваивании в него значений. &amp;lt;br&amp;gt; Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
объявляет слот с именем '''a''' и присваивает ему значение '''7'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Локальные переменные ==&lt;br /&gt;
&lt;br /&gt;
В отличие от слотов локальные переменные сохраняются только внутри скрипта, где они объявлены. &amp;lt;br&amp;gt;&lt;br /&gt;
Объявление происходит путем добавления перед именем служебного слова '''local''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если локальная переменная объявлена внутри фигурных скобок '''{}''', то и ее значение доступно только там:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная текущего скрипта&lt;br /&gt;
&lt;br /&gt;
if (b == 8)&lt;br /&gt;
{&lt;br /&gt;
   local c = 9 // локальная переменная блока оператора 'if'&lt;br /&gt;
   print(c)    // выведет 9&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(b)       // выведет 8 &lt;br /&gt;
print(c)       // выдаст ошибку, т.к. тут уже переменная 'с' недоступна&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Типы переменных ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sInt = 7                             // целочисленный&lt;br /&gt;
sFloat = 7.3                         // вещественный&lt;br /&gt;
sStr = &amp;quot;hello&amp;quot;                       // строковый&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;, sStr]       // массив&lt;br /&gt;
sDic = { n: 1, s: &amp;quot;Wine&amp;quot;  }          // словарь&lt;br /&gt;
sBool = true                         // бинарный&lt;br /&gt;
sRegExp = /[abc]/                    // регулярное выражение&lt;br /&gt;
sNone = none                         // неопределенное значение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;логические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Логические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''and''' - логическое ‘И’&lt;br /&gt;
* '''or''' - логическое ‘ИЛИ’&lt;br /&gt;
* '''not''' - отрицание ‘НЕТ’&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
a = true&lt;br /&gt;
b = false&lt;br /&gt;
c = true&lt;br /&gt;
res = not((a and b) or c)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;арифметические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Арифметические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''+''' - сложение&lt;br /&gt;
* '''-''' - вычитание&lt;br /&gt;
* '''*''' - умножение&lt;br /&gt;
* '''/''' - деление&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;res = 2+3-4*5+(1.5-0.2/2)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Комментарии ==&lt;br /&gt;
&lt;br /&gt;
Комментарии используются для документирования фрагментов скрипта.&lt;br /&gt;
Могут быть многострочыми и однострочными:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Пример&lt;br /&gt;
    многострочного&lt;br /&gt;
        комментария&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
a = 2253 // пример однострочного комментария&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также разрешается и питоновский стиль комментария:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
a = 2253 # пример однострочного комментария&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-с-массивами&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-словарем-объектом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со словарем (объектом) ==&lt;br /&gt;
&lt;br /&gt;
Объявление словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;dic = { n: 1, s: &amp;quot;Wine&amp;quot;  } &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к значениям словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = dic.n             // доступ к полю с именем &amp;quot;n&amp;quot; через точку  &lt;br /&gt;
a = dic[&amp;quot;n&amp;quot;]          // доступ к полю с именем &amp;quot;n&amp;quot; через оператор доступа&lt;br /&gt;
dic[&amp;quot;food&amp;quot;] = &amp;quot;milk&amp;quot;  // добавление в словарь пары ключ-значение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа с массивами ==&lt;br /&gt;
&lt;br /&gt;
Объявление массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [1,2,3]         // создает массив с тремя элементами со значениями 1,2,3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к элементам массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;first  = arr[0]       // получить первый элемент массива&lt;br /&gt;
last   = arr[-1]      // получить последний элемент массива&lt;br /&gt;
last   = arr[-2]      // получить предпоследний элемент массива&lt;br /&gt;
arr[0] = 7            // изменить значение первого элемента&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Функции работы с массивом:&lt;br /&gt;
&lt;br /&gt;
'''''push(val1,val2...)''''' - добавить в конец массива элементы со значениями '''val1, val2...'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr.push(4) // добавить значение '4' в конец массива&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''unshift(val1,val2...)''''' - добавить в начало массива элементы со значениями '''val1, val2...'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr.unshift(0) // добавить значение '0' в начало&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''pop()''''' - удалить последний элемент массива и вернуть его значение&lt;br /&gt;
&lt;br /&gt;
'''''shift()''''' - удалить первый элемент массива и вернуть его значение&lt;br /&gt;
&lt;br /&gt;
'''''slice(start,end)''''' - возвращает часть массива начиная с позиции '''start''' и если указана переменная '''end''', то до нее не включая&lt;br /&gt;
&lt;br /&gt;
'''''splice(start, deleteCount)''''' - удаляет '''deleteCount''' элементов начиная с позиции '''start'''&lt;br /&gt;
&lt;br /&gt;
'''''clear()''''' - очистить массив&lt;br /&gt;
&lt;br /&gt;
Функции работы с массивом словарей:&lt;br /&gt;
&lt;br /&gt;
'''''find(EXPR)''''' - ищет элементы массива, удовлетворяющие условию '''EXPR'''. Найденные элементы возвращаются в виде массива&amp;lt;br&amp;gt;&lt;br /&gt;
Например:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                            // массив из трех объектов с продуктами&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120},&lt;br /&gt;
  {title: &amp;quot;Cheese&amp;quot;, price: 100},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.find(price &amp;gt; 80)   // найти все объекты у которых поле 'price' больше 80 и вернуть их в массиве&lt;br /&gt;
print('найдено $res.length:')      // выведет количество найденных объектов&lt;br /&gt;
print(res)                         // выведет объекты, удовлетворяющие условию&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''total(EXPR)''''' - применить выражение '''EXPR''' к каждому элементу массива и суммировать все значения&amp;lt;br&amp;gt;&lt;br /&gt;
Например посчитаем сумму товаров в корзине:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                                 // массив из трех объектов с продуктами&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120, amount: 3},&lt;br /&gt;
  {title: &amp;quot;Pizza&amp;quot;, price: 100, amount: 2},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40, amount: 3},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.total(price * amount)   // для каждого элемента массива умножаем цену на количество и складываем результат&lt;br /&gt;
print(&amp;quot;К оплате: $res грн.&amp;quot;)            // выведет сумму товаров: &amp;quot;К оплате: 680 грн.&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''count(EXPR)''''' - найти количество элементов массива для которых истинно выражение '''EXPR'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                                 // массив из трех объектов с продуктами&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120, amount: 3},&lt;br /&gt;
  {title: &amp;quot;Pizza&amp;quot;, price: 100, amount: 2},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40, amount: 3},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.count(price &amp;lt; 100)                            // для каждого элемента массива умножаем цену на количество и складываем результат&lt;br /&gt;
print(&amp;quot;Количество товаров, дешевле 100 грн: $res&amp;quot;)            // выведет количество товаров: &amp;quot;Количество товаров, дешевле 100 грн: 1&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''sort(EXPR)''''' - отсортировать массив &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
list = [1, 3, 2] // массив чисел&lt;br /&gt;
arr =  [         // массив из объектов с продуктами&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120, amount: 3},&lt;br /&gt;
  {title: &amp;quot;Pizza&amp;quot;, price: 100, amount: 2},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
list.sort()       // отсортировать массив по возрастанию&lt;br /&gt;
arr.sort(price)   // отсортировать массив объектов по ключу 'price'&lt;br /&gt;
// TODO&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''reverse()''''' - перевернуть массив &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
list = [1, 3, 2]  // массив&lt;br /&gt;
&lt;br /&gt;
list.reverse()    // [2, 3, 1]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-строками&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со строками ==&lt;br /&gt;
&lt;br /&gt;
Объявление строковых слотов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;           // используя двойные кавычки &lt;br /&gt;
str = 'hello'           // используя одинарные кавычки&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Операции со строками:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
base = 'http://imgs/'&lt;br /&gt;
url = base + 'img1.png' // сложение строк&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Подстановка слотов в строки:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 5&lt;br /&gt;
str = &amp;quot;a = $a&amp;quot;          // вместо $a будет подставлено значение слота a&lt;br /&gt;
print(str)              // выведет: &amp;quot;a = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вставка выражений в строки:&lt;br /&gt;
&lt;br /&gt;
Выражения можно вставлять в строки, обрамляя их фигурными скобками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;2 + 3 = {2+3}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)              // выведет: &amp;quot;2 + 3 = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Экранирование спецсимволов '$','{','}' происходит путем добавления наклонной черты '\'&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;price: 4.99\$ \{sale\}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)                       // выведет: &amp;quot;price: 4.99$ {sale}&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функции работы со строками:&lt;br /&gt;
&lt;br /&gt;
'''''length''''' - получить длинну строки&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;&lt;br /&gt;
len = str.length           // вернет 5 - число символов строки &amp;quot;hello&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''substring(start,end)''''' - получить подстроку начиная с позиции '''start''' и до позиции '''end''' не включая&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;http://server/im.png&amp;quot;&lt;br /&gt;
substr = str.substring(7,13)  // вернет строку &amp;quot;server&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''search(pattern)''''' - найти позицию первого вхождения '''pattern''', иначе вернуть -1. Аргумент '''pattern''' может быть как строкой&lt;br /&gt;
так и регулярным выражением:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;apple orange juice&amp;quot;&lt;br /&gt;
res = str.search('orange')          // вернет позицию строки 'orange': 6&lt;br /&gt;
res = str.search(/(orange|juice)/)  // вернет позицию строки 'orange' или 'juice'&lt;br /&gt;
res = str.search('pizza')           // не найдет 'pizza' и вернет -1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;условный-оператор&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Условный оператор ==&lt;br /&gt;
Оператор '''if''' используется, если необходимо ветвление логики в зависимости от условия&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 9&lt;br /&gt;
if (a &amp;gt; 7) &lt;br /&gt;
{&lt;br /&gt;
    res = 'a more than 7'&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    res = 'a less or equal 7'&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере проверяется условие &amp;lt;code&amp;gt;a &amp;amp;gt; 7&amp;lt;/code&amp;gt; и если оно истинно, то выполняется первый блок скрипта, окруженный фигурными скобками, иначе выполняется блок после служебного слова '''else'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;цикл-while&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Цикл '''while''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор цикла проверяет условие и пока оно истинно, выполняет код окруженный фигурными скобками&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = 7&lt;br /&gt;
while (a &amp;gt; 0) &lt;br /&gt;
{&lt;br /&gt;
    a = a - 1&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере скрипт &amp;lt;code&amp;gt;a = a - 1&amp;lt;/code&amp;gt; будет выполнятся до тех пор пока значение слота &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; не станет равным нулю&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;итератор-for&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Итератор '''for''' ==&lt;br /&gt;
&lt;br /&gt;
Итератор используется для перебора всех значений массива, либо ключей из словаря&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [3,2,1]&lt;br /&gt;
for(val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(val)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
3&lt;br /&gt;
2&lt;br /&gt;
1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере цикл последовательно перебирает значения массива и заносит их во временную переменную '''val''' соответственно для каждого элемента массива выполняется окруженный фигурными скобками скрипт '''print(val)''' выводящий значение в отладочное окно&lt;br /&gt;
&lt;br /&gt;
Иногда удобно в цикле иметь и индекс массива, для этого перед переменной значения добавляем имя переменной индекса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [3,2,1]&lt;br /&gt;
for(i, val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(&amp;quot;$i: $val&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
0: 3&lt;br /&gt;
1: 2&lt;br /&gt;
2: 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для перебора ключей и значений словаря используется аналогичная конструкция:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = {pizza: 100, milk: 20, wine: 120}&lt;br /&gt;
for(key, val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(&amp;quot;$key: $val&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
pizza: 100&lt;br /&gt;
milk: 20&lt;br /&gt;
wine: 120&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-switch&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор выбора '''switch''' ==&lt;br /&gt;
&lt;br /&gt;
Конструкция '''switch''' заменяет собой сразу несколько '''if'''. Она представляет собой более наглядный способ сравнить выражение сразу с несколькими вариантами.&lt;br /&gt;
Имеет один или более блок '''case''' и необязательный блок '''default'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 'one'&lt;br /&gt;
switch(a)&lt;br /&gt;
{&lt;br /&gt;
   case 'one': print('one'); break;&lt;br /&gt;
   case 'two': print('two'); break;&lt;br /&gt;
   default: print('def')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-in&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''in''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор '''in''' проверяет есть ли значение в массиве либо является ключём в словаре.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;]             // массив&lt;br /&gt;
print(&amp;quot;hello&amp;quot; in sArr)               // вернет true, т.к. значение &amp;quot;hello&amp;quot; присутствует в массиве sArr &lt;br /&gt;
sDic = { price: 100, food: &amp;quot;Wine&amp;quot;}   // словарь&lt;br /&gt;
print(&amp;quot;food&amp;quot; in sDic)                // вернет true, т.к. ключ &amp;quot;food&amp;quot; присутствует в словаре sDic&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-button&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''button''' ==&lt;br /&gt;
&lt;br /&gt;
'''''button(caption){ SCRIPT }'''''&amp;lt;br&amp;gt;&lt;br /&gt;
Данный оператор добавляет в интерфейс кнопку с текстом '''caption''' в текущее сообщение. После нажатия на кнопку выполняется логика '''SCRIPT'''.&lt;br /&gt;
Если '''caption''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
button('click me')      // текст в кнопке&lt;br /&gt;
{&lt;br /&gt;
    // скрипт, который выполнится после нажатия &lt;br /&gt;
    print('button was clicked!')&lt;br /&gt;
    step('STATE_AFTER_CLICK')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку скрипт будет выполнен в контексте локальных переменных на момент добавления данной кнопки, а также в контексте&lt;br /&gt;
значений слотов на момент нажатия на кнопку!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции перехода ==&lt;br /&gt;
&lt;br /&gt;
'''''run(state)''''' - выполнить логику шага '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''step(state)''''' - установка шага перехода по умолчанию в значение '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''goto(state)''''' - мгновенный переход в шаг '''state'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-работы-с-контентом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции работы с контентом ==&lt;br /&gt;
&lt;br /&gt;
'''''text(obj)''''' - вывести в текущее сообщение текст. Если '''obj''' - это сторока, то она выводится не зависимо от текущего языка. Если '''obj''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
text(&amp;quot;Hi world!&amp;quot;)     &lt;br /&gt;
text({ en: &amp;quot;Hi world!&amp;quot;, ru: &amp;quot;Привет мир!&amp;quot;, es: &amp;quot;¡Hola mundo!&amp;quot;})  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''images()''''' - создать новую строку картинок. Каждый последующий вызов image будет добавляться в эту строку, пока снова не будет вызван images().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;  &lt;br /&gt;
images()     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)     &lt;br /&gt;
image(URL + &amp;quot;owl_b.png&amp;quot;) &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''image(url, width)''''' - вывести в текущее сообщение картинку. Если '''url''' - это строка, то он используется не зависимо от текущего языка. Если '''url''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.. Необязательный параметр '''width''' указывает насколько в процентах нужно сжать изображение &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)  &lt;br /&gt;
image({ en: URL + &amp;quot;en.png&amp;quot;, ru: URL + &amp;quot;ru.png&amp;quot;}) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''buttons()''''' - создать новую строку кнопок. Каждый последующий вызов button будет добавляться в эту строку, пока снова не будет вызван buttons().&lt;br /&gt;
&lt;br /&gt;
'''''get_check()''''' - получить массив значений кнопок типа check (1 - нажата, 0 - отжата)&lt;br /&gt;
&lt;br /&gt;
'''''set_check(list)''''' - задать значения кнопок типа check из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
CHECK = [0,1,0]&lt;br /&gt;
set_check(CHECK) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''get_radio()''''' - получить массив значений кнопок типа radio (1 - нажата, 0 - отжата). Единица будет одна.&lt;br /&gt;
&lt;br /&gt;
'''''set_radio(list)''''' - задать значения кнопок типа radio из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;отладчные-функции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Отладчные функции ==&lt;br /&gt;
&lt;br /&gt;
'''''print(args)''''' - вывод информации в окно отладки&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;округление&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Округление ==&lt;br /&gt;
&lt;br /&gt;
'''''floor(val)''''' - округление чисел в меньшую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;floor(5.8)    //  5&lt;br /&gt;
floor(-6.1)   // -7&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''trunc(val)''''' - отбрасывание дробной части:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;trunc(5.51)   //  5&lt;br /&gt;
trunc(-6.99)  // -6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''ceil(val)''''' - округление чисел в большую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;ceil(5.15)    // 6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''round(val, num)''''' - округление '''val''' до '''num''' чисел после запятой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;round(3.14159265, 2)  // 3.14&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;случайные-числа&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Случайные числа ==&lt;br /&gt;
&lt;br /&gt;
'''''randint(min,max)''''' - возвращает целое случайное число в диапазоне [min,max].&lt;br /&gt;
&lt;br /&gt;
'''''random()''''' - возвращает случайное вещественное число в диапазоне [0,1].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;дата-и-время&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Дата и время ==&lt;br /&gt;
&lt;br /&gt;
'''''date(format)''''' - возвращает текущую дату и время в указанном формате. По умолчанию аргумент '''format''' принимает значение: '''%d/%m/%Y %H:%M:%S'''&lt;br /&gt;
&lt;br /&gt;
Поддерживаемые коды форматирования:&lt;br /&gt;
&lt;br /&gt;
* '''%y''' - год без столетия ('22')&lt;br /&gt;
* '''%Y''' - год ('2022')&lt;br /&gt;
* '''%m''' - месяц&lt;br /&gt;
* '''%d''' - день &lt;br /&gt;
* '''%H''' - часы &lt;br /&gt;
* '''%M''' - минуты &lt;br /&gt;
* '''%S''' - секунды &lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
date()  // 17/05/2022 18:16:31 т.е. сейчас&lt;br /&gt;
date('%Y.%m.%d %H:%M:%S')  // 2022.05.17 18:16:31&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Qubot]]&lt;/div&gt;</summary>
		<author><name>Mkuznetsov</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=97</id>
		<title>Qubot Script/ru</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=97"/>
		<updated>2022-05-26T07:56:30Z</updated>

		<summary type="html">&lt;p&gt;Mkuznetsov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;qubot-script&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
{{TOCright}}&lt;br /&gt;
== Qubot Script ==&lt;br /&gt;
&lt;br /&gt;
'''''Qubot Script''''' - это язык программирования, используемый для выполнения логических и математических операций при решении задач бота&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;объявление-слотов-переменных&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Слоты ==&lt;br /&gt;
&lt;br /&gt;
'''Слот''' - это переменная, значение которой доступно во всех состояниях бота. Также значение слота сохраняется, если бота закрыли и продолжили&lt;br /&gt;
с ним работать через время.&lt;br /&gt;
&lt;br /&gt;
Объявление слота происходит при первом присваивании в него значений. &amp;lt;br&amp;gt; Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
объявляет слот с именем '''a''' и присваивает ему значение '''7'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Локальные переменные ==&lt;br /&gt;
&lt;br /&gt;
В отличие от слотов локальные переменные сохраняются только внутри скрипта, где они объявлены. &amp;lt;br&amp;gt;&lt;br /&gt;
Объявление происходит путем добавления перед именем служебного слова '''local''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если локальная переменная объявлена внутри фигурных скобок '''{}''', то и ее значение доступно только там:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная текущего скрипта&lt;br /&gt;
&lt;br /&gt;
if (b == 8)&lt;br /&gt;
{&lt;br /&gt;
   local c = 9 // локальная переменная блока оператора 'if'&lt;br /&gt;
   print(c)    // выведет 9&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(b)       // выведет 8 &lt;br /&gt;
print(c)       // выдаст ошибку, т.к. тут уже переменная 'с' недоступна&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Типы переменных ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sInt = 7                             // целочисленный&lt;br /&gt;
sFloat = 7.3                         // вещественный&lt;br /&gt;
sStr = &amp;quot;hello&amp;quot;                       // строковый&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;, sStr]       // массив&lt;br /&gt;
sDic = { n: 1, s: &amp;quot;Wine&amp;quot;  }          // словарь&lt;br /&gt;
sBool = true                         // бинарный&lt;br /&gt;
sRegExp = /[abc]/                    // регулярное выражение&lt;br /&gt;
sNone = none                         // неопределенное значение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;логические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Логические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''and''' - логическое ‘И’&lt;br /&gt;
* '''or''' - логическое ‘ИЛИ’&lt;br /&gt;
* '''not''' - отрицание ‘НЕТ’&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
a = true&lt;br /&gt;
b = false&lt;br /&gt;
c = true&lt;br /&gt;
res = not((a and b) or c)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;арифметические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Арифметические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''+''' - сложение&lt;br /&gt;
* '''-''' - вычитание&lt;br /&gt;
* '''*''' - умножение&lt;br /&gt;
* '''/''' - деление&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;res = 2+3-4*5+(1.5-0.2/2)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Комментарии ==&lt;br /&gt;
&lt;br /&gt;
Комментарии используются для документирования фрагментов скрипта.&lt;br /&gt;
Могут быть многострочыми и однострочными:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Пример&lt;br /&gt;
    многострочного&lt;br /&gt;
        комментария&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
a = 2253 // пример однострочного комментария&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также разрешается и питоновский стиль комментария:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
a = 2253 # пример однострочного комментария&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-с-массивами&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-словарем-объектом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со словарем (объектом) ==&lt;br /&gt;
&lt;br /&gt;
Объявление словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;dic = { n: 1, s: &amp;quot;Wine&amp;quot;  } &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к значениям словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = dic.n             // доступ к полю с именем &amp;quot;n&amp;quot; через точку  &lt;br /&gt;
a = dic[&amp;quot;n&amp;quot;]          // доступ к полю с именем &amp;quot;n&amp;quot; через оператор доступа&lt;br /&gt;
dic[&amp;quot;food&amp;quot;] = &amp;quot;milk&amp;quot;  // добавление в словарь пары ключ-значение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа с массивами ==&lt;br /&gt;
&lt;br /&gt;
Объявление массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [1,2,3]         // создает массив с тремя элементами со значениями 1,2,3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к элементам массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;first  = arr[0]       // получить первый элемент массива&lt;br /&gt;
last   = arr[-1]      // получить последний элемент массива&lt;br /&gt;
last   = arr[-2]      // получить предпоследний элемент массива&lt;br /&gt;
arr[0] = 7            // изменить значение первого элемента&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Функции работы с массивом:&lt;br /&gt;
&lt;br /&gt;
'''''push(val1,val2...)''''' - добавить в конец массива элементы со значениями '''val1, val2...'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr.push(4) // добавить значение '4' в конец массива&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''unshift(val1,val2...)''''' - добавить в начало массива элементы со значениями '''val1, val2...'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr.unshift(0) // добавить значение '0' в начало&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''pop()''''' - удалить последний элемент массива и вернуть его значение&lt;br /&gt;
&lt;br /&gt;
'''''shift()''''' - удалить первый элемент массива и вернуть его значение&lt;br /&gt;
&lt;br /&gt;
'''''slice(start,end)''''' - возвращает часть массива начиная с позиции '''start''' и если указана переменная '''end''', то до нее не включая&lt;br /&gt;
&lt;br /&gt;
'''''splice(start, deleteCount)''''' - удаляет '''deleteCount''' элементов начиная с позиции '''start'''&lt;br /&gt;
&lt;br /&gt;
'''''clear()''''' - очистить массив&lt;br /&gt;
&lt;br /&gt;
Функции работы с массивом словарей:&lt;br /&gt;
&lt;br /&gt;
'''''find(EXPR)''''' - ищет элементы массива, удовлетворяющие условию '''EXPR'''. Найденные элементы возвращаются в виде массива&amp;lt;br&amp;gt;&lt;br /&gt;
Например:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                            // массив из трех объектов с продуктами&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120},&lt;br /&gt;
  {title: &amp;quot;Cheese&amp;quot;, price: 100},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.find(price &amp;gt; 80)   // найти все объекты у которых поле 'price' больше 80 и вернуть их в массиве&lt;br /&gt;
print('найдено $res.length:')      // выведет количество найденных объектов&lt;br /&gt;
print(res)                         // выведет объекты, удовлетворяющие условию&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''total(EXPR)''''' - применить выражение '''EXPR''' к каждому элементу массива и суммировать все значения&amp;lt;br&amp;gt;&lt;br /&gt;
Например посчитаем сумму товаров в корзине:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                                 // массив из трех объектов с продуктами&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120, amount: 3},&lt;br /&gt;
  {title: &amp;quot;Pizza&amp;quot;, price: 100, amount: 2},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40, amount: 3},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.total(price * amount)   // для каждого элемента массива умножаем цену на количество и складываем результат&lt;br /&gt;
print(&amp;quot;К оплате: $res грн.&amp;quot;)            // выведет сумму товаров: &amp;quot;К оплате: 680 грн.&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''count(EXPR)''''' - найти количество элементов массива для которых истинно выражение '''EXPR'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                                 // массив из трех объектов с продуктами&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120, amount: 3},&lt;br /&gt;
  {title: &amp;quot;Pizza&amp;quot;, price: 100, amount: 2},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40, amount: 3},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.count(price &amp;lt; 100)                            // для каждого элемента массива умножаем цену на количество и складываем результат&lt;br /&gt;
print(&amp;quot;Количество товаров, дешевле 100 грн: $res&amp;quot;)            // выведет количество товаров: &amp;quot;Количество товаров, дешевле 100 грн: 1&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''sort(REVERSE)''''' - отсортировать массив в '''REVERSE''' порядке, где '''REVERSE''' принимает значения true или false&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
list = [1, 3, 2] // массив чисел&lt;br /&gt;
&lt;br /&gt;
list.sort()       // отсортировать массив по возрастанию&lt;br /&gt;
list.sort(true)   // отсортировать массив по убыванию &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''sort(KEY, REVERSE)''''' - отсортировать массив объектов по ключу '''KEY''' в '''REVERSE''' порядке&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [  // массив из объектов с продуктами&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120, amount: 3},&lt;br /&gt;
  {title: &amp;quot;Pizza&amp;quot;, price: 100, amount: 2},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
arr.sort('price')        // отсортировать массив объектов по ключу 'price'&lt;br /&gt;
arr.sort('amount', true) // отсортировать массив объектов по убыванию по ключу 'amount'&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-строками&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со строками ==&lt;br /&gt;
&lt;br /&gt;
Объявление строковых слотов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;           // используя двойные кавычки &lt;br /&gt;
str = 'hello'           // используя одинарные кавычки&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Операции со строками:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
base = 'http://imgs/'&lt;br /&gt;
url = base + 'img1.png' // сложение строк&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Подстановка слотов в строки:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 5&lt;br /&gt;
str = &amp;quot;a = $a&amp;quot;          // вместо $a будет подставлено значение слота a&lt;br /&gt;
print(str)              // выведет: &amp;quot;a = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вставка выражений в строки:&lt;br /&gt;
&lt;br /&gt;
Выражения можно вставлять в строки, обрамляя их фигурными скобками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;2 + 3 = {2+3}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)              // выведет: &amp;quot;2 + 3 = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Экранирование спецсимволов '$','{','}' происходит путем добавления наклонной черты '\'&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;price: 4.99\$ \{sale\}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)                       // выведет: &amp;quot;price: 4.99$ {sale}&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функции работы со строками:&lt;br /&gt;
&lt;br /&gt;
'''''length''''' - получить длинну строки&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;&lt;br /&gt;
len = str.length           // вернет 5 - число символов строки &amp;quot;hello&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''substring(start,end)''''' - получить подстроку начиная с позиции '''start''' и до позиции '''end''' не включая&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;http://server/im.png&amp;quot;&lt;br /&gt;
substr = str.substring(7,13)  // вернет строку &amp;quot;server&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''search(pattern)''''' - найти позицию первого вхождения '''pattern''', иначе вернуть -1. Аргумент '''pattern''' может быть как строкой&lt;br /&gt;
так и регулярным выражением:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;apple orange juice&amp;quot;&lt;br /&gt;
res = str.search('orange')          // вернет позицию строки 'orange': 6&lt;br /&gt;
res = str.search(/(orange|juice)/)  // вернет позицию строки 'orange' или 'juice'&lt;br /&gt;
res = str.search('pizza')           // не найдет 'pizza' и вернет -1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;условный-оператор&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Условный оператор ==&lt;br /&gt;
Оператор '''if''' используется, если необходимо ветвление логики в зависимости от условия&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 9&lt;br /&gt;
if (a &amp;gt; 7) &lt;br /&gt;
{&lt;br /&gt;
    res = 'a more than 7'&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    res = 'a less or equal 7'&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере проверяется условие &amp;lt;code&amp;gt;a &amp;amp;gt; 7&amp;lt;/code&amp;gt; и если оно истинно, то выполняется первый блок скрипта, окруженный фигурными скобками, иначе выполняется блок после служебного слова '''else'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;цикл-while&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Цикл '''while''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор цикла проверяет условие и пока оно истинно, выполняет код окруженный фигурными скобками&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = 7&lt;br /&gt;
while (a &amp;gt; 0) &lt;br /&gt;
{&lt;br /&gt;
    a = a - 1&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере скрипт &amp;lt;code&amp;gt;a = a - 1&amp;lt;/code&amp;gt; будет выполнятся до тех пор пока значение слота &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; не станет равным нулю&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;итератор-for&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Итератор '''for''' ==&lt;br /&gt;
&lt;br /&gt;
Итератор используется для перебора всех значений массива, либо ключей из словаря&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [3,2,1]&lt;br /&gt;
for(val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(val)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
3&lt;br /&gt;
2&lt;br /&gt;
1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере цикл последовательно перебирает значения массива и заносит их во временную переменную '''val''' соответственно для каждого элемента массива выполняется окруженный фигурными скобками скрипт '''print(val)''' выводящий значение в отладочное окно&lt;br /&gt;
&lt;br /&gt;
Иногда удобно в цикле иметь и индекс массива, для этого перед переменной значения добавляем имя переменной индекса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [3,2,1]&lt;br /&gt;
for(i, val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(&amp;quot;$i: $val&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
0: 3&lt;br /&gt;
1: 2&lt;br /&gt;
2: 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для перебора ключей и значений словаря используется аналогичная конструкция:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = {pizza: 100, milk: 20, wine: 120}&lt;br /&gt;
for(key, val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(&amp;quot;$key: $val&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
pizza: 100&lt;br /&gt;
milk: 20&lt;br /&gt;
wine: 120&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-switch&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор выбора '''switch''' ==&lt;br /&gt;
&lt;br /&gt;
Конструкция '''switch''' заменяет собой сразу несколько '''if'''. Она представляет собой более наглядный способ сравнить выражение сразу с несколькими вариантами.&lt;br /&gt;
Имеет один или более блок '''case''' и необязательный блок '''default'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 'one'&lt;br /&gt;
switch(a)&lt;br /&gt;
{&lt;br /&gt;
   case 'one': print('one'); break;&lt;br /&gt;
   case 'two': print('two'); break;&lt;br /&gt;
   default: print('def')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-in&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''in''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор '''in''' проверяет есть ли значение в массиве либо является ключём в словаре.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;]             // массив&lt;br /&gt;
print(&amp;quot;hello&amp;quot; in sArr)               // вернет true, т.к. значение &amp;quot;hello&amp;quot; присутствует в массиве sArr &lt;br /&gt;
sDic = { price: 100, food: &amp;quot;Wine&amp;quot;}   // словарь&lt;br /&gt;
print(&amp;quot;food&amp;quot; in sDic)                // вернет true, т.к. ключ &amp;quot;food&amp;quot; присутствует в словаре sDic&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-button&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''button''' ==&lt;br /&gt;
&lt;br /&gt;
'''''button(caption){ SCRIPT }'''''&amp;lt;br&amp;gt;&lt;br /&gt;
Данный оператор добавляет в интерфейс кнопку с текстом '''caption''' в текущее сообщение. После нажатия на кнопку выполняется логика '''SCRIPT'''.&lt;br /&gt;
Если '''caption''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
button('click me')      // текст в кнопке&lt;br /&gt;
{&lt;br /&gt;
    // скрипт, который выполнится после нажатия &lt;br /&gt;
    print('button was clicked!')&lt;br /&gt;
    step('STATE_AFTER_CLICK')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку скрипт будет выполнен в контексте локальных переменных на момент добавления данной кнопки, а также в контексте&lt;br /&gt;
значений слотов на момент нажатия на кнопку!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции перехода ==&lt;br /&gt;
&lt;br /&gt;
'''''run(state)''''' - выполнить логику шага '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''step(state)''''' - установка шага перехода по умолчанию в значение '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''goto(state)''''' - мгновенный переход в шаг '''state'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-работы-с-контентом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции работы с контентом ==&lt;br /&gt;
&lt;br /&gt;
'''''text(obj)''''' - вывести в текущее сообщение текст. Если '''obj''' - это сторока, то она выводится не зависимо от текущего языка. Если '''obj''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
text(&amp;quot;Hi world!&amp;quot;)     &lt;br /&gt;
text({ en: &amp;quot;Hi world!&amp;quot;, ru: &amp;quot;Привет мир!&amp;quot;, es: &amp;quot;¡Hola mundo!&amp;quot;})  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''images()''''' - создать новую строку картинок. Каждый последующий вызов image будет добавляться в эту строку, пока снова не будет вызван images().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;  &lt;br /&gt;
images()     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)     &lt;br /&gt;
image(URL + &amp;quot;owl_b.png&amp;quot;) &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''image(url, width)''''' - вывести в текущее сообщение картинку. Если '''url''' - это строка, то он используется не зависимо от текущего языка. Если '''url''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.. Необязательный параметр '''width''' указывает насколько в процентах нужно сжать изображение &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)  &lt;br /&gt;
image({ en: URL + &amp;quot;en.png&amp;quot;, ru: URL + &amp;quot;ru.png&amp;quot;}) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''buttons()''''' - создать новую строку кнопок. Каждый последующий вызов button будет добавляться в эту строку, пока снова не будет вызван buttons().&lt;br /&gt;
&lt;br /&gt;
'''''get_check()''''' - получить массив значений кнопок типа check (1 - нажата, 0 - отжата)&lt;br /&gt;
&lt;br /&gt;
'''''set_check(list)''''' - задать значения кнопок типа check из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
CHECK = [0,1,0]&lt;br /&gt;
set_check(CHECK) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''get_radio()''''' - получить массив значений кнопок типа radio (1 - нажата, 0 - отжата). Единица будет одна.&lt;br /&gt;
&lt;br /&gt;
'''''set_radio(list)''''' - задать значения кнопок типа radio из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;отладчные-функции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Отладчные функции ==&lt;br /&gt;
&lt;br /&gt;
'''''print(args)''''' - вывод информации в окно отладки&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;округление&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Округление ==&lt;br /&gt;
&lt;br /&gt;
'''''floor(val)''''' - округление чисел в меньшую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;floor(5.8)    //  5&lt;br /&gt;
floor(-6.1)   // -7&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''trunc(val)''''' - отбрасывание дробной части:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;trunc(5.51)   //  5&lt;br /&gt;
trunc(-6.99)  // -6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''ceil(val)''''' - округление чисел в большую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;ceil(5.15)    // 6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''round(val, num)''''' - округление '''val''' до '''num''' чисел после запятой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;round(3.14159265, 2)  // 3.14&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;случайные-числа&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Случайные числа ==&lt;br /&gt;
&lt;br /&gt;
'''''randint(min,max)''''' - возвращает целое случайное число в диапазоне [min,max].&lt;br /&gt;
&lt;br /&gt;
'''''random()''''' - возвращает случайное вещественное число в диапазоне [0,1].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;дата-и-время&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Дата и время ==&lt;br /&gt;
&lt;br /&gt;
'''''date(format)''''' - возвращает текущую дату и время в указанном формате. По умолчанию аргумент '''format''' принимает значение: '''%d/%m/%Y %H:%M:%S'''&lt;br /&gt;
&lt;br /&gt;
Поддерживаемые коды форматирования:&lt;br /&gt;
&lt;br /&gt;
* '''%y''' - год без столетия ('22')&lt;br /&gt;
* '''%Y''' - год ('2022')&lt;br /&gt;
* '''%m''' - месяц&lt;br /&gt;
* '''%d''' - день &lt;br /&gt;
* '''%H''' - часы &lt;br /&gt;
* '''%M''' - минуты &lt;br /&gt;
* '''%S''' - секунды &lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
date()  // 17/05/2022 18:16:31 т.е. сейчас&lt;br /&gt;
date('%Y.%m.%d %H:%M:%S')  // 2022.05.17 18:16:31&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Qubot]]&lt;/div&gt;</summary>
		<author><name>Mkuznetsov</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=91</id>
		<title>Qubot Script/ru</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=91"/>
		<updated>2022-05-17T15:19:23Z</updated>

		<summary type="html">&lt;p&gt;Mkuznetsov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;qubot-script&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
{{TOCright}}&lt;br /&gt;
== Qubot Script ==&lt;br /&gt;
&lt;br /&gt;
'''''Qubot Script''''' - это язык программирования, используемый для выполнения логических и математических операций при решении задач бота&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;объявление-слотов-переменных&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Слоты ==&lt;br /&gt;
&lt;br /&gt;
'''Слот''' - это переменная, значение которой доступно во всех состояниях бота. Также значение слота сохраняется, если бота закрыли и продолжили&lt;br /&gt;
с ним работать через время.&lt;br /&gt;
&lt;br /&gt;
Объявление слота происходит при первом присваивании в него значений. &amp;lt;br&amp;gt; Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
объявляет слот с именем '''a''' и присваивает ему значение '''7'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Локальные переменные ==&lt;br /&gt;
&lt;br /&gt;
В отличие от слотов локальные переменные сохраняются только внутри скрипта, где они объявлены. &amp;lt;br&amp;gt;&lt;br /&gt;
Объявление происходит путем добавления перед именем служебного слова '''local''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если локальная переменная объявлена внутри фигурных скобок '''{}''', то и ее значение доступно только там:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная текущего скрипта&lt;br /&gt;
&lt;br /&gt;
if (b == 8)&lt;br /&gt;
{&lt;br /&gt;
   local c = 9 // локальная переменная блока оператора 'if'&lt;br /&gt;
   print(c)    // выведет 9&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(b)       // выведет 8 &lt;br /&gt;
print(c)       // выдаст ошибку, т.к. тут уже переменная 'с' недоступна&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Типы переменных ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sInt = 7                             // целочисленный&lt;br /&gt;
sFloat = 7.3                         // вещественный&lt;br /&gt;
sStr = &amp;quot;hello&amp;quot;                       // строковый&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;, sStr]       // массив&lt;br /&gt;
sDic = { n: 1, s: &amp;quot;Wine&amp;quot;  }          // словарь&lt;br /&gt;
sBool = true                         // бинарный&lt;br /&gt;
sRegExp = /[abc]/                    // регулярное выражение&lt;br /&gt;
sNone = none                         // неопределенное значение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;логические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Логические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''and''' - логическое ‘И’&lt;br /&gt;
* '''or''' - логическое ‘ИЛИ’&lt;br /&gt;
* '''not''' - отрицание ‘НЕТ’&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
a = true&lt;br /&gt;
b = false&lt;br /&gt;
c = true&lt;br /&gt;
res = not((a and b) or c)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;арифметические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Арифметические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''+''' - сложение&lt;br /&gt;
* '''-''' - вычитание&lt;br /&gt;
* '''*''' - умножение&lt;br /&gt;
* '''/''' - деление&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;res = 2+3-4*5+(1.5-0.2/2)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Комментарии ==&lt;br /&gt;
&lt;br /&gt;
Комментарии используются для документирования фрагментов скрипта.&lt;br /&gt;
Могут быть многострочыми и однострочными:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Пример&lt;br /&gt;
    многострочного&lt;br /&gt;
        комментария&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
a = 2253 // пример однострочного комментария&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также разрешается и питоновский стиль комментария:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
a = 2253 # пример однострочного комментария&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-с-массивами&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-словарем-объектом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со словарем (объектом) ==&lt;br /&gt;
&lt;br /&gt;
Объявление словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;dic = { n: 1, s: &amp;quot;Wine&amp;quot;  } &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к значениям словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = dic.n             // доступ к полю с именем &amp;quot;n&amp;quot; через точку  &lt;br /&gt;
a = dic[&amp;quot;n&amp;quot;]          // доступ к полю с именем &amp;quot;n&amp;quot; через оператор доступа&lt;br /&gt;
dic[&amp;quot;food&amp;quot;] = &amp;quot;milk&amp;quot;  // добавление в словарь пары ключ-значение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа с массивами ==&lt;br /&gt;
&lt;br /&gt;
Объявление массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [1,2,3]         // создает массив с тремя элементами со значениями 1,2,3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к элементам массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;first  = arr[0]       // получить первый элемент массива&lt;br /&gt;
last   = arr[-1]      // получить последний элемент массива&lt;br /&gt;
last   = arr[-2]      // получить предпоследний элемент массива&lt;br /&gt;
arr[0] = 7            // изменить значение первого элемента&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Функции работы с массивом:&lt;br /&gt;
&lt;br /&gt;
'''''push(val1,val2...)''''' - добавить в конец массива элементы со значениями '''val1, val2...'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr.push(4) // добавить значение '4' в конец массива&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''unshift(val1,val2...)''''' - добавить в начало массива элементы со значениями '''val1, val2...'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr.unshift(0) // добавить значение '0' в начало&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''pop()''''' - удалить последний элемент массива и вернуть его значение&lt;br /&gt;
&lt;br /&gt;
'''''shift()''''' - удалить первый элемент массива и вернуть его значение&lt;br /&gt;
&lt;br /&gt;
'''''slice(start,end)''''' - возвращает часть массива начиная с позиции '''start''' и если указана переменная '''end''', то до нее не включая&lt;br /&gt;
&lt;br /&gt;
'''''splice(start, deleteCount)''''' - удаляет '''deleteCount''' элементов начиная с позиции '''start'''&lt;br /&gt;
&lt;br /&gt;
'''''clear()''''' - очистить массив&lt;br /&gt;
&lt;br /&gt;
Функции работы с массивом словарей:&lt;br /&gt;
&lt;br /&gt;
'''''find(EXPR)''''' - ищет элементы массива, удовлетворяющие условию '''EXPR'''. Найденные элементы возвращаются в виде массива&amp;lt;br&amp;gt;&lt;br /&gt;
Например:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                            // массив из трех объектов с продуктами&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120},&lt;br /&gt;
  {title: &amp;quot;Cheese&amp;quot;, price: 100},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.find(price &amp;gt; 80)   // найти все объекты у которых поле 'price' больше 80 и вернуть их в массиве&lt;br /&gt;
print('найдено $res.length:')      // выведет количество найденных объектов&lt;br /&gt;
print(res)                         // выведет объекты, удовлетворяющие условию&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''total(EXPR)''''' - применить выражение '''EXPR''' к каждому элементу массива и суммировать все значения&amp;lt;br&amp;gt;&lt;br /&gt;
Например посчитаем сумму товаров в корзине:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                                 // массив из трех объектов с продуктами&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120, amount: 3},&lt;br /&gt;
  {title: &amp;quot;Pizza&amp;quot;, price: 100, amount: 2},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40, amount: 3},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.total(price * amount)   // для каждого элемента массива умножаем цену на количество и складываем результат&lt;br /&gt;
print(&amp;quot;К оплате: $res грн.&amp;quot;)            // выведет сумму товаров: &amp;quot;К оплате: 680 грн.&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''count(EXPR)''''' - найти количество элементов массива для которых истинно выражение '''EXPR'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                                 // массив из трех объектов с продуктами&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120, amount: 3},&lt;br /&gt;
  {title: &amp;quot;Pizza&amp;quot;, price: 100, amount: 2},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40, amount: 3},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.count(price &amp;lt; 100)                            // для каждого элемента массива умножаем цену на количество и складываем результат&lt;br /&gt;
print(&amp;quot;Количество товаров, дешевле 100 грн: $res&amp;quot;)            // выведет количество товаров: &amp;quot;Количество товаров, дешевле 100 грн: 1&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-строками&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со строками ==&lt;br /&gt;
&lt;br /&gt;
Объявление строковых слотов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;           // используя двойные кавычки &lt;br /&gt;
str = 'hello'           // используя одинарные кавычки&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Операции со строками:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
base = 'http://imgs/'&lt;br /&gt;
url = base + 'img1.png' // сложение строк&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Подстановка слотов в строки:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 5&lt;br /&gt;
str = &amp;quot;a = $a&amp;quot;          // вместо $a будет подставлено значение слота a&lt;br /&gt;
print(str)              // выведет: &amp;quot;a = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вставка выражений в строки:&lt;br /&gt;
&lt;br /&gt;
Выражения можно вставлять в строки, обрамляя их фигурными скобками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;2 + 3 = {2+3}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)              // выведет: &amp;quot;2 + 3 = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Экранирование спецсимволов '$','{','}' происходит путем добавления наклонной черты '\'&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;price: 4.99\$ \{sale\}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)                       // выведет: &amp;quot;price: 4.99$ {sale}&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функции работы со строками:&lt;br /&gt;
&lt;br /&gt;
'''''length''''' - получить длинну строки&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;&lt;br /&gt;
len = str.length           // вернет 5 - число символов строки &amp;quot;hello&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''substring(start,end)''''' - получить подстроку начиная с позиции '''start''' и до позиции '''end''' не включая&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;http://server/im.png&amp;quot;&lt;br /&gt;
substr = str.substring(7,13)  // вернет строку &amp;quot;server&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''search(pattern)''''' - найти позицию первого вхождения '''pattern''', иначе вернуть -1. Аргумент '''pattern''' может быть как строкой&lt;br /&gt;
так и регулярным выражением:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;apple orange juice&amp;quot;&lt;br /&gt;
res = str.search('orange')          // вернет позицию строки 'orange': 6&lt;br /&gt;
res = str.search(/(orange|juice)/)  // вернет позицию строки 'orange' или 'juice'&lt;br /&gt;
res = str.search('pizza')           // не найдет 'pizza' и вернет -1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;условный-оператор&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Условный оператор ==&lt;br /&gt;
Оператор '''if''' используется, если необходимо ветвление логики в зависимости от условия&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 9&lt;br /&gt;
if (a &amp;gt; 7) &lt;br /&gt;
{&lt;br /&gt;
    res = 'a more than 7'&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    res = 'a less or equal 7'&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере проверяется условие &amp;lt;code&amp;gt;a &amp;amp;gt; 7&amp;lt;/code&amp;gt; и если оно истинно, то выполняется первый блок скрипта, окруженный фигурными скобками, иначе выполняется блок после служебного слова '''else'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;цикл-while&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Цикл '''while''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор цикла проверяет условие и пока оно истинно, выполняет код окруженный фигурными скобками&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = 7&lt;br /&gt;
while (a &amp;gt; 0) &lt;br /&gt;
{&lt;br /&gt;
    a = a - 1&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере скрипт &amp;lt;code&amp;gt;a = a - 1&amp;lt;/code&amp;gt; будет выполнятся до тех пор пока значение слота &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; не станет равным нулю&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;итератор-for&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Итератор '''for''' ==&lt;br /&gt;
&lt;br /&gt;
Итератор используется для перебора всех значений массива, либо ключей из словаря&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [3,2,1]&lt;br /&gt;
for(val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(val)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
3&lt;br /&gt;
2&lt;br /&gt;
1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере цикл последовательно перебирает значения массива и заносит их во временную переменную '''val''' соответственно для каждого элемента массива выполняется окруженный фигурными скобками скрипт '''print(val)''' выводящий значение в отладочное окно&lt;br /&gt;
&lt;br /&gt;
Иногда удобно в цикле иметь и индекс массива, для этого перед переменной значения добавляем имя переменной индекса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [3,2,1]&lt;br /&gt;
for(i, val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(&amp;quot;$i: $val&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
0: 3&lt;br /&gt;
1: 2&lt;br /&gt;
2: 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для перебора ключей и значений словаря используется аналогичная конструкция:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = {pizza: 100, milk: 20, wine: 120}&lt;br /&gt;
for(key, val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(&amp;quot;$key: $val&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
pizza: 100&lt;br /&gt;
milk: 20&lt;br /&gt;
wine: 120&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-switch&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор выбора '''switch''' ==&lt;br /&gt;
&lt;br /&gt;
Конструкция '''switch''' заменяет собой сразу несколько '''if'''. Она представляет собой более наглядный способ сравнить выражение сразу с несколькими вариантами.&lt;br /&gt;
Имеет один или более блок '''case''' и необязательный блок '''default'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 'one'&lt;br /&gt;
switch(a)&lt;br /&gt;
{&lt;br /&gt;
   case 'one': print('one'); break;&lt;br /&gt;
   case 'two': print('two'); break;&lt;br /&gt;
   default: print('def')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-in&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''in''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор '''in''' проверяет есть ли значение в массиве либо является ключём в словаре.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;]             // массив&lt;br /&gt;
print(&amp;quot;hello&amp;quot; in sArr)               // вернет true, т.к. значение &amp;quot;hello&amp;quot; присутствует в массиве sArr &lt;br /&gt;
sDic = { price: 100, food: &amp;quot;Wine&amp;quot;}   // словарь&lt;br /&gt;
print(&amp;quot;food&amp;quot; in sDic)                // вернет true, т.к. ключ &amp;quot;food&amp;quot; присутствует в словаре sDic&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-button&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''button''' ==&lt;br /&gt;
&lt;br /&gt;
'''''button(caption){ SCRIPT }'''''&amp;lt;br&amp;gt;&lt;br /&gt;
Данный оператор добавляет в интерфейс кнопку с текстом '''caption''' в текущее сообщение. После нажатия на кнопку выполняется логика '''SCRIPT'''.&lt;br /&gt;
Если '''caption''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
button('click me')      // текст в кнопке&lt;br /&gt;
{&lt;br /&gt;
    // скрипт, который выполнится после нажатия &lt;br /&gt;
    print('button was clicked!')&lt;br /&gt;
    step('STATE_AFTER_CLICK')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку скрипт будет выполнен в контексте локальных переменных на момент добавления данной кнопки, а также в контексте&lt;br /&gt;
значений слотов на момент нажатия на кнопку!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции перехода ==&lt;br /&gt;
&lt;br /&gt;
'''''run(state)''''' - выполнить логику шага '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''step(state)''''' - установка шага перехода по умолчанию в значение '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''goto(state)''''' - мгновенный переход в шаг '''state'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-работы-с-контентом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции работы с контентом ==&lt;br /&gt;
&lt;br /&gt;
'''''text(obj)''''' - вывести в текущее сообщение текст. Если '''obj''' - это сторока, то она выводится не зависимо от текущего языка. Если '''obj''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
text(&amp;quot;Hi world!&amp;quot;)     &lt;br /&gt;
text({ en: &amp;quot;Hi world!&amp;quot;, ru: &amp;quot;Привет мир!&amp;quot;, es: &amp;quot;¡Hola mundo!&amp;quot;})  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''images()''''' - создать новую строку картинок. Каждый последующий вызов image будет добавляться в эту строку, пока снова не будет вызван images().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;  &lt;br /&gt;
images()     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)     &lt;br /&gt;
image(URL + &amp;quot;owl_b.png&amp;quot;) &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''image(url, width)''''' - вывести в текущее сообщение картинку. Если '''url''' - это строка, то он используется не зависимо от текущего языка. Если '''url''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.. Необязательный параметр '''width''' указывает насколько в процентах нужно сжать изображение &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)  &lt;br /&gt;
image({ en: URL + &amp;quot;en.png&amp;quot;, ru: URL + &amp;quot;ru.png&amp;quot;}) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''buttons()''''' - создать новую строку кнопок. Каждый последующий вызов button будет добавляться в эту строку, пока снова не будет вызван buttons().&lt;br /&gt;
&lt;br /&gt;
'''''get_check()''''' - получить массив значений кнопок типа check (1 - нажата, 0 - отжата)&lt;br /&gt;
&lt;br /&gt;
'''''set_check(list)''''' - задать значения кнопок типа check из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
CHECK = [0,1,0]&lt;br /&gt;
set_check(CHECK) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''get_radio()''''' - получить массив значений кнопок типа radio (1 - нажата, 0 - отжата). Единица будет одна.&lt;br /&gt;
&lt;br /&gt;
'''''set_radio(list)''''' - задать значения кнопок типа radio из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;отладчные-функции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Отладчные функции ==&lt;br /&gt;
&lt;br /&gt;
'''''print(args)''''' - вывод информации в окно отладки&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;округление&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Округление ==&lt;br /&gt;
&lt;br /&gt;
'''''floor(val)''''' - округление чисел в меньшую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;floor(5.8)    //  5&lt;br /&gt;
floor(-6.1)   // -7&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''trunc(val)''''' - отбрасывание дробной части:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;trunc(5.51)   //  5&lt;br /&gt;
trunc(-6.99)  // -6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''ceil(val)''''' - округление чисел в большую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;ceil(5.15)    // 6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''round(val, num)''''' - округление '''val''' до '''num''' чисел после запятой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;round(3.14159265, 2)  // 3.14&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;случайные-числа&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Случайные числа ==&lt;br /&gt;
&lt;br /&gt;
'''''randint(min,max)''''' - возвращает целое случайное число в диапазоне [min,max].&lt;br /&gt;
&lt;br /&gt;
'''''random()''''' - возвращает случайное вещественное число в диапазоне [0,1].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;дата-и-время&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Дата и время ==&lt;br /&gt;
&lt;br /&gt;
'''''date(format)''''' - возвращает текущую дату и время в указанном формате.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
date()  // 17/05/2022 18:16:31 т.е. сейчас&lt;br /&gt;
date('YYYY:MM:DD HH:mm:SS')  // 2022:05:17 18:16:31&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Qubot]]&lt;/div&gt;</summary>
		<author><name>Mkuznetsov</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=90</id>
		<title>Qubot Script/ru</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=90"/>
		<updated>2022-05-09T06:54:55Z</updated>

		<summary type="html">&lt;p&gt;Mkuznetsov: /* Отладочные функции */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;qubot-script&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
{{TOCright}}&lt;br /&gt;
== Qubot Script ==&lt;br /&gt;
&lt;br /&gt;
'''''Qubot Script''''' - это язык программирования, используемый для выполнения логических и математических операций при решении задач бота&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;объявление-слотов-переменных&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Слоты ==&lt;br /&gt;
&lt;br /&gt;
'''Слот''' - это переменная, значение которой доступно во всех состояниях бота. Также значение слота сохраняется, если бота закрыли и продолжили&lt;br /&gt;
с ним работать через время.&lt;br /&gt;
&lt;br /&gt;
Объявление слота происходит при первом присваивании в него значений. &amp;lt;br&amp;gt; Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
объявляет слот с именем '''a''' и присваивает ему значение '''7'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Локальные переменные ==&lt;br /&gt;
&lt;br /&gt;
В отличие от слотов локальные переменные сохраняются только внутри скрипта, где они объявлены. &amp;lt;br&amp;gt;&lt;br /&gt;
Объявление происходит путем добавления перед именем служебного слова '''local''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если локальная переменная объявлена внутри фигурных скобок '''{}''', то и ее значение доступно только там:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная текущего скрипта&lt;br /&gt;
&lt;br /&gt;
if (b == 8)&lt;br /&gt;
{&lt;br /&gt;
   local c = 9 // локальная переменная блока оператора 'if'&lt;br /&gt;
   print(c)    // выведет 9&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(b)       // выведет 8 &lt;br /&gt;
print(c)       // выдаст ошибку, т.к. тут уже переменная 'с' недоступна&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Типы переменных ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sInt = 7                             // целочисленный&lt;br /&gt;
sFloat = 7.3                         // вещественный&lt;br /&gt;
sStr = &amp;quot;hello&amp;quot;                       // строковый&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;, sStr]       // массив&lt;br /&gt;
sDic = { n: 1, s: &amp;quot;Wine&amp;quot;  }          // словарь&lt;br /&gt;
sBool = true                         // бинарный&lt;br /&gt;
sRegExp = /[abc]/                    // регулярное выражение&lt;br /&gt;
sNone = none                         // неопределенное значение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;логические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Логические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''and''' - логическое ‘И’&lt;br /&gt;
* '''or''' - логическое ‘ИЛИ’&lt;br /&gt;
* '''not''' - отрицание ‘НЕТ’&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
a = true&lt;br /&gt;
b = false&lt;br /&gt;
c = true&lt;br /&gt;
res = not((a and b) or c)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;арифметические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Арифметические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''+''' - сложение&lt;br /&gt;
* '''-''' - вычитание&lt;br /&gt;
* '''*''' - умножение&lt;br /&gt;
* '''/''' - деление&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;res = 2+3-4*5+(1.5-0.2/2)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Комментарии ==&lt;br /&gt;
&lt;br /&gt;
Комментарии используются для документирования фрагментов скрипта.&lt;br /&gt;
Могут быть многострочыми и однострочными:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Пример&lt;br /&gt;
    многострочного&lt;br /&gt;
        комментария&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
a = 2253 // пример однострочного комментария&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также разрешается и питоновский стиль комментария:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
a = 2253 # пример однострочного комментария&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-с-массивами&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-словарем-объектом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со словарем (объектом) ==&lt;br /&gt;
&lt;br /&gt;
Объявление словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;dic = { n: 1, s: &amp;quot;Wine&amp;quot;  } &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к значениям словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = dic.n             // доступ к полю с именем &amp;quot;n&amp;quot; через точку  &lt;br /&gt;
a = dic[&amp;quot;n&amp;quot;]          // доступ к полю с именем &amp;quot;n&amp;quot; через оператор доступа&lt;br /&gt;
dic[&amp;quot;food&amp;quot;] = &amp;quot;milk&amp;quot;  // добавление в словарь пары ключ-значение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа с массивами ==&lt;br /&gt;
&lt;br /&gt;
Объявление массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [1,2,3]         // создает массив с тремя элементами со значениями 1,2,3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к элементам массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;first  = arr[0]       // получить первый элемент массива&lt;br /&gt;
last   = arr[-1]      // получить последний элемент массива&lt;br /&gt;
last   = arr[-2]      // получить предпоследний элемент массива&lt;br /&gt;
arr[0] = 7            // изменить значение первого элемента&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Функции работы с массивом:&lt;br /&gt;
&lt;br /&gt;
'''''push(val1,val2...)''''' - добавить в конец массива элементы со значениями '''val1, val2...'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr.push(4) // добавить значение '4' в конец массива&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''unshift(val1,val2...)''''' - добавить в начало массива элементы со значениями '''val1, val2...'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr.unshift(0) // добавить значение '0' в начало&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''pop()''''' - удалить последний элемент массива и вернуть его значение&lt;br /&gt;
&lt;br /&gt;
'''''shift()''''' - удалить первый элемент массива и вернуть его значение&lt;br /&gt;
&lt;br /&gt;
'''''slice(start,end)''''' - возвращает часть массива начиная с позиции '''start''' и если указана переменная '''end''', то до нее не включая&lt;br /&gt;
&lt;br /&gt;
'''''splice(start, deleteCount)''''' - удаляет '''deleteCount''' элементов начиная с позиции '''start'''&lt;br /&gt;
&lt;br /&gt;
'''''clear()''''' - очистить массив&lt;br /&gt;
&lt;br /&gt;
Функции работы с массивом словарей:&lt;br /&gt;
&lt;br /&gt;
'''''find(EXPR)''''' - ищет элементы массива, удовлетворяющие условию '''EXPR'''. Найденные элементы возвращаются в виде массива&amp;lt;br&amp;gt;&lt;br /&gt;
Например:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                            // массив из трех объектов с продуктами&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120},&lt;br /&gt;
  {title: &amp;quot;Cheese&amp;quot;, price: 100},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.find(price &amp;gt; 80)   // найти все объекты у которых поле 'price' больше 80 и вернуть их в массиве&lt;br /&gt;
print('найдено $res.length:')      // выведет количество найденных объектов&lt;br /&gt;
print(res)                         // выведет объекты, удовлетворяющие условию&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''total(EXPR)''''' - применить выражение '''EXPR''' к каждому элементу массива и суммировать все значения&amp;lt;br&amp;gt;&lt;br /&gt;
Например посчитаем сумму товаров в корзине:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                                 // массив из трех объектов с продуктами&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120, amount: 3},&lt;br /&gt;
  {title: &amp;quot;Pizza&amp;quot;, price: 100, amount: 2},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40, amount: 3},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.total(price * amount)   // для каждого элемента массива умножаем цену на количество и складываем результат&lt;br /&gt;
print(&amp;quot;К оплате: $res грн.&amp;quot;)            // выведет сумму товаров: &amp;quot;К оплате: 680 грн.&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''count(EXPR)''''' - найти количество элементов массива для которых истинно выражение '''EXPR'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                                 // массив из трех объектов с продуктами&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120, amount: 3},&lt;br /&gt;
  {title: &amp;quot;Pizza&amp;quot;, price: 100, amount: 2},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40, amount: 3},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.count(price &amp;lt; 100)                            // для каждого элемента массива умножаем цену на количество и складываем результат&lt;br /&gt;
print(&amp;quot;Количество товаров, дешевле 100 грн: $res&amp;quot;)            // выведет количество товаров: &amp;quot;Количество товаров, дешевле 100 грн: 1&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-строками&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со строками ==&lt;br /&gt;
&lt;br /&gt;
Объявление строковых слотов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;           // используя двойные кавычки &lt;br /&gt;
str = 'hello'           // используя одинарные кавычки&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Операции со строками:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
base = 'http://imgs/'&lt;br /&gt;
url = base + 'img1.png' // сложение строк&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Подстановка слотов в строки:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 5&lt;br /&gt;
str = &amp;quot;a = $a&amp;quot;          // вместо $a будет подставлено значение слота a&lt;br /&gt;
print(str)              // выведет: &amp;quot;a = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вставка выражений в строки:&lt;br /&gt;
&lt;br /&gt;
Выражения можно вставлять в строки, обрамляя их фигурными скобками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;2 + 3 = {2+3}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)              // выведет: &amp;quot;2 + 3 = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Экранирование спецсимволов '$','{','}' происходит путем добавления наклонной черты '\'&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;price: 4.99\$ \{sale\}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)                       // выведет: &amp;quot;price: 4.99$ {sale}&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функции работы со строками:&lt;br /&gt;
&lt;br /&gt;
'''''length''''' - получить длинну строки&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;&lt;br /&gt;
len = str.length           // вернет 5 - число символов строки &amp;quot;hello&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''substring(start,end)''''' - получить подстроку начиная с позиции '''start''' и до позиции '''end''' не включая&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;http://server/im.png&amp;quot;&lt;br /&gt;
substr = str.substring(7,13)  // вернет строку &amp;quot;server&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''search(pattern)''''' - найти позицию первого вхождения '''pattern''', иначе вернуть -1. Аргумент '''pattern''' может быть как строкой&lt;br /&gt;
так и регулярным выражением:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;apple orange juice&amp;quot;&lt;br /&gt;
res = str.search('orange')          // вернет позицию строки 'orange': 6&lt;br /&gt;
res = str.search(/(orange|juice)/)  // вернет позицию строки 'orange' или 'juice'&lt;br /&gt;
res = str.search('pizza')           // не найдет 'pizza' и вернет -1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;условный-оператор&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Условный оператор ==&lt;br /&gt;
Оператор '''if''' используется, если необходимо ветвление логики в зависимости от условия&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 9&lt;br /&gt;
if (a &amp;gt; 7) &lt;br /&gt;
{&lt;br /&gt;
    res = 'a more than 7'&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    res = 'a less or equal 7'&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере проверяется условие &amp;lt;code&amp;gt;a &amp;amp;gt; 7&amp;lt;/code&amp;gt; и если оно истинно, то выполняется первый блок скрипта, окруженный фигурными скобками, иначе выполняется блок после служебного слова '''else'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;цикл-while&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Цикл '''while''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор цикла проверяет условие и пока оно истинно, выполняет код окруженный фигурными скобками&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = 7&lt;br /&gt;
while (a &amp;gt; 0) &lt;br /&gt;
{&lt;br /&gt;
    a = a - 1&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере скрипт &amp;lt;code&amp;gt;a = a - 1&amp;lt;/code&amp;gt; будет выполнятся до тех пор пока значение слота &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; не станет равным нулю&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;итератор-for&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Итератор '''for''' ==&lt;br /&gt;
&lt;br /&gt;
Итератор используется для перебора всех значений массива, либо ключей из словаря&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [3,2,1]&lt;br /&gt;
for(val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(val)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
3&lt;br /&gt;
2&lt;br /&gt;
1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере цикл последовательно перебирает значения массива и заносит их во временную переменную '''val''' соответственно для каждого элемента массива выполняется окруженный фигурными скобками скрипт '''print(val)''' выводящий значение в отладочное окно&lt;br /&gt;
&lt;br /&gt;
Иногда удобно в цикле иметь и индекс массива, для этого перед переменной значения добавляем имя переменной индекса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [3,2,1]&lt;br /&gt;
for(i, val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(&amp;quot;$i: $val&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
0: 3&lt;br /&gt;
1: 2&lt;br /&gt;
2: 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для перебора ключей и значений словаря используется аналогичная конструкция:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = {pizza: 100, milk: 20, wine: 120}&lt;br /&gt;
for(key, val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(&amp;quot;$key: $val&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
pizza: 100&lt;br /&gt;
milk: 20&lt;br /&gt;
wine: 120&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-switch&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор выбора '''switch''' ==&lt;br /&gt;
&lt;br /&gt;
Конструкция '''switch''' заменяет собой сразу несколько '''if'''. Она представляет собой более наглядный способ сравнить выражение сразу с несколькими вариантами.&lt;br /&gt;
Имеет один или более блок '''case''' и необязательный блок '''default'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 'one'&lt;br /&gt;
switch(a)&lt;br /&gt;
{&lt;br /&gt;
   case 'one': print('one'); break;&lt;br /&gt;
   case 'two': print('two'); break;&lt;br /&gt;
   default: print('def')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-in&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''in''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор '''in''' проверяет есть ли значение в массиве либо является ключём в словаре.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;]             // массив&lt;br /&gt;
print(&amp;quot;hello&amp;quot; in sArr)               // вернет true, т.к. значение &amp;quot;hello&amp;quot; присутствует в массиве sArr &lt;br /&gt;
sDic = { price: 100, food: &amp;quot;Wine&amp;quot;}   // словарь&lt;br /&gt;
print(&amp;quot;food&amp;quot; in sDic)                // вернет true, т.к. ключ &amp;quot;food&amp;quot; присутствует в словаре sDic&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-button&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''button''' ==&lt;br /&gt;
&lt;br /&gt;
'''''button(caption){ SCRIPT }'''''&amp;lt;br&amp;gt;&lt;br /&gt;
Данный оператор добавляет в интерфейс кнопку с текстом '''caption''' в текущее сообщение. После нажатия на кнопку выполняется логика '''SCRIPT'''.&lt;br /&gt;
Если '''caption''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
button('click me')      // текст в кнопке&lt;br /&gt;
{&lt;br /&gt;
    // скрипт, который выполнится после нажатия &lt;br /&gt;
    print('button was clicked!')&lt;br /&gt;
    step('STATE_AFTER_CLICK')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку скрипт будет выполнен в контексте локальных переменных на момент добавления данной кнопки, а также в контексте&lt;br /&gt;
значений слотов на момент нажатия на кнопку!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции перехода ==&lt;br /&gt;
&lt;br /&gt;
'''''run(state)''''' - выполнить логику шага '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''step(state)''''' - установка шага перехода по умолчанию в значение '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''goto(state)''''' - мгновенный переход в шаг '''state'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-работы-с-контентом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции работы с контентом ==&lt;br /&gt;
&lt;br /&gt;
'''''text(obj)''''' - вывести в текущее сообщение текст. Если '''obj''' - это сторока, то она выводится не зависимо от текущего языка. Если '''obj''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
text(&amp;quot;Hi world!&amp;quot;)     &lt;br /&gt;
text({ en: &amp;quot;Hi world!&amp;quot;, ru: &amp;quot;Привет мир!&amp;quot;, es: &amp;quot;¡Hola mundo!&amp;quot;})  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''images()''''' - создать новую строку картинок. Каждый последующий вызов image будет добавляться в эту строку, пока снова не будет вызван images().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;  &lt;br /&gt;
images()     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)     &lt;br /&gt;
image(URL + &amp;quot;owl_b.png&amp;quot;) &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''image(url, width)''''' - вывести в текущее сообщение картинку. Если '''url''' - это строка, то он используется не зависимо от текущего языка. Если '''url''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.. Необязательный параметр '''width''' указывает насколько в процентах нужно сжать изображение &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)  &lt;br /&gt;
image({ en: URL + &amp;quot;en.png&amp;quot;, ru: URL + &amp;quot;ru.png&amp;quot;}) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''buttons()''''' - создать новую строку кнопок. Каждый последующий вызов button будет добавляться в эту строку, пока снова не будет вызван buttons().&lt;br /&gt;
&lt;br /&gt;
'''''get_check()''''' - получить массив значений кнопок типа check (1 - нажата, 0 - отжата)&lt;br /&gt;
&lt;br /&gt;
'''''set_check(list)''''' - задать значения кнопок типа check из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
CHECK = [0,1,0]&lt;br /&gt;
set_check(CHECK) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''get_radio()''''' - получить массив значений кнопок типа radio (1 - нажата, 0 - отжата). Единица будет одна.&lt;br /&gt;
&lt;br /&gt;
'''''set_radio(list)''''' - задать значения кнопок типа radio из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;отладчные-функции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Отладчные функции ==&lt;br /&gt;
&lt;br /&gt;
'''''print(args)''''' - вывод информации в окно отладки&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;округление&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Округление ==&lt;br /&gt;
&lt;br /&gt;
'''''floor(val)''''' - округление чисел в меньшую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;floor(5.8)    //  5&lt;br /&gt;
floor(-6.1)   // -7&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''trunc(val)''''' - отбрасывание дробной части:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;trunc(5.51)   //  5&lt;br /&gt;
trunc(-6.99)  // -6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''ceil(val)''''' - округление чисел в большую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;ceil(5.15)    // 6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''round(val, num)''''' - округление '''val''' до '''num''' чисел после запятой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;round(3.14159265, 2)  // 3.14&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;случайные-числа&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Случайные числа ==&lt;br /&gt;
&lt;br /&gt;
'''''randint(min,max)''''' - возвращает целое случайное число в диапазоне [min,max].&lt;br /&gt;
&lt;br /&gt;
'''''random()''''' - возвращает случайное вещественное число в диапазоне [0,1].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Qubot]]&lt;/div&gt;</summary>
		<author><name>Mkuznetsov</name></author>
		
	</entry>
</feed>