<?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=Tkachenko</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=Tkachenko"/>
	<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Special:Contributions/Tkachenko"/>
	<updated>2026-04-12T16:40:31Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.34.1</generator>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=How_to_add_a_chatbot_to_your_website&amp;diff=824</id>
		<title>How to add a chatbot to your website</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=How_to_add_a_chatbot_to_your_website&amp;diff=824"/>
		<updated>2023-10-23T08:14:34Z</updated>

		<summary type="html">&lt;p&gt;Tkachenko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--&lt;br /&gt;
;Youtube:[https://www.youtube.com/watch?v=VPfBYaJJ7jM How to add a chatbot to your website in 1 minute]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
== Deploying a chatbot on your website ==&lt;br /&gt;
First, you need to choose a chatbot.&lt;br /&gt;
&lt;br /&gt;
To do this, go to the bot development console https://console.qudata.com/dashboard/bots and select the necessary chatbot by clicking directly on it.&lt;br /&gt;
&lt;br /&gt;
[[File:1.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Now you can see the editing section of the chatbot.&lt;br /&gt;
&lt;br /&gt;
First of all, the chatbot needs to be activated. To do this, click '''General settings''' on the left navigation panel.&lt;br /&gt;
&lt;br /&gt;
[[File:Instruction 1.png|700px]]&lt;br /&gt;
&lt;br /&gt;
In the '''Bot status''' section, select '''Published''' from the list and save the changes.&lt;br /&gt;
&lt;br /&gt;
[[File:Instruction2.png|700px]]&lt;br /&gt;
&lt;br /&gt;
[[File:Instruction3.png|700px]]&lt;br /&gt;
&lt;br /&gt;
After that click '''Integrations''' on the left navigation panel and select the '''WebChat''' from available channels.&lt;br /&gt;
&lt;br /&gt;
[[File:2.png|700px]]&lt;br /&gt;
&lt;br /&gt;
In the settings for this channel enter a link to your website in the input field of Step 1.&lt;br /&gt;
&lt;br /&gt;
[[File:3.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Then click the '''Copy''' button in Step 2.&lt;br /&gt;
&lt;br /&gt;
[[File:4.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Open your webpage and access the HTML. Scroll down to the bottom and paste the copied text at the very end of the '''&amp;lt;/body&amp;gt;''' tag.&lt;br /&gt;
&lt;br /&gt;
[[File:5.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Return to the settings page and switch the slider to the active state.&lt;br /&gt;
&lt;br /&gt;
[[File:6.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Reload your webpage. The bot will appear as a button in the bottom right.&lt;br /&gt;
&lt;br /&gt;
[[File:7.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Congratulations, the bot has been successfully integrated into the WEB channel. Now the chatbot is available on your personal company website.&lt;br /&gt;
&lt;br /&gt;
[[Category:Integrations]]&lt;/div&gt;</summary>
		<author><name>Tkachenko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=How_to_add_a_chatbot_to_your_website/ru&amp;diff=823</id>
		<title>How to add a chatbot to your website/ru</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=How_to_add_a_chatbot_to_your_website/ru&amp;diff=823"/>
		<updated>2023-10-23T08:04:31Z</updated>

		<summary type="html">&lt;p&gt;Tkachenko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ru]]&lt;br /&gt;
&lt;br /&gt;
{|style=&amp;quot;float:right; margin-left:0.8em; clear:right;&amp;quot;&lt;br /&gt;
|+[[Main_Page/ru|В начало]]&lt;br /&gt;
|&lt;br /&gt;
'''Lang:'''&lt;br /&gt;
|&lt;br /&gt;
[[How to add a chatbot to your website|en]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
;Youtube:[https://www.youtube.com/watch?v=VPfBYaJJ7jM How to add a chatbot to your website in 1 minute]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
== Установка чат-бота на собственный сайт ==&lt;br /&gt;
Для начала нам потребуется выбрать свой чат-бот.&lt;br /&gt;
&lt;br /&gt;
Для этого перейдите в консоль разработки ботов https://console.qudata.com/dashboard/bots и выберите желаемый чат-бот, нажав прямо на него.&lt;br /&gt;
&lt;br /&gt;
[[File:1.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Вы попадаете в раздел редактирования чат-бота.&lt;br /&gt;
&lt;br /&gt;
Первым делом чат-бот нужно активировать. Для этого перейдите в раздел консоли '''General settings'''.&lt;br /&gt;
&lt;br /&gt;
[[File:Instruction 1.png|700px]]&lt;br /&gt;
&lt;br /&gt;
В пункте '''Bot status''' выберите из перечня статус '''Published''' и сохраните изменения.&lt;br /&gt;
&lt;br /&gt;
[[File:Instruction2.png|700px]]&lt;br /&gt;
&lt;br /&gt;
[[File:Instruction3.png|700px]]&lt;br /&gt;
&lt;br /&gt;
После этого нажмите в боковой левой навигационной панели '''Integrations''' и выберите вид канала '''WebChat'''.&lt;br /&gt;
&lt;br /&gt;
[[File:2.png|700px]]&lt;br /&gt;
&lt;br /&gt;
В панели настройки данного канала, введите ссылку на ваш сайт в поле шага 1.&lt;br /&gt;
&lt;br /&gt;
[[File:3.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Затем, в шаге 2, нажмите на кнопку '''Copy'''.&lt;br /&gt;
&lt;br /&gt;
[[File:4.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Откройте свою веб-страницу и получите доступ к HTML. Прокрутите вниз и вставьте скопированный текст в самом конце тега '''&amp;lt;/body&amp;gt;'''.&lt;br /&gt;
&lt;br /&gt;
[[File:5.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Вернитесь на страницу настройки и переключите ползунок в активное состояние.&lt;br /&gt;
&lt;br /&gt;
[[File:6.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Перезагрузите страницу вашего сайта. Бот появится в виде кнопки в правом нижнем углу.&lt;br /&gt;
&lt;br /&gt;
[[File:7.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Поздравляем, бот успешно интегрирован в WEB канал. Теперь чат-бот доступен на вашем персональном сайте компании.&lt;br /&gt;
&lt;br /&gt;
[[Category:Integrations]]&lt;/div&gt;</summary>
		<author><name>Tkachenko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=How_to_add_a_chatbot_to_your_website/ru&amp;diff=822</id>
		<title>How to add a chatbot to your website/ru</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=How_to_add_a_chatbot_to_your_website/ru&amp;diff=822"/>
		<updated>2023-10-23T08:03:35Z</updated>

		<summary type="html">&lt;p&gt;Tkachenko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ru]]&lt;br /&gt;
&lt;br /&gt;
{|style=&amp;quot;float:right; margin-left:0.8em; clear:right;&amp;quot;&lt;br /&gt;
|+[[Main_Page/ru|В начало]]&lt;br /&gt;
|&lt;br /&gt;
'''Lang:'''&lt;br /&gt;
|&lt;br /&gt;
[[How to add a chatbot to your website|en]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
;Youtube:[https://www.youtube.com/watch?v=VPfBYaJJ7jM How to add a chatbot to your website in 1 minute]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
== Установка чат-бота на собственный сайт ==&lt;br /&gt;
Для начала нам потребуется выбрать свой чат-бот.&lt;br /&gt;
&lt;br /&gt;
Для этого перейдите в консоль разработки ботов https://console.qudata.com/dashboard/bots и выберите желаемый чат-бот, нажав прямо на него.&lt;br /&gt;
&lt;br /&gt;
[[File:1.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Вы попадаете в раздел редактирования чат-бота.&lt;br /&gt;
Первым делом чат-бот нужно активировать. Для этого перейдите в раздел консоли '''General settings'''.&lt;br /&gt;
&lt;br /&gt;
[[File:Instruction 1.png|700px]]&lt;br /&gt;
&lt;br /&gt;
В пункте '''Bot status''' выберите из перечня статус '''Published''' и сохраните изменения.&lt;br /&gt;
&lt;br /&gt;
[[File:Instruction2.png|700px]]&lt;br /&gt;
&lt;br /&gt;
[[File:Instruction3.png|700px]]&lt;br /&gt;
&lt;br /&gt;
После этого нажмите в боковой левой навигационной панели '''Integrations''' и выберите вид канала '''WebChat'''.&lt;br /&gt;
&lt;br /&gt;
[[File:2.png|700px]]&lt;br /&gt;
&lt;br /&gt;
В панели настройки данного канала, введите ссылку на ваш сайт в поле шага 1.&lt;br /&gt;
&lt;br /&gt;
[[File:3.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Затем, в шаге 2, нажмите на кнопку '''Copy'''.&lt;br /&gt;
&lt;br /&gt;
[[File:4.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Откройте свою веб-страницу и получите доступ к HTML. Прокрутите вниз и вставьте скопированный текст в самом конце тега '''&amp;lt;/body&amp;gt;'''.&lt;br /&gt;
&lt;br /&gt;
[[File:5.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Вернитесь на страницу настройки и переключите ползунок в активное состояние.&lt;br /&gt;
&lt;br /&gt;
[[File:6.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Перезагрузите страницу вашего сайта. Бот появится в виде кнопки в правом нижнем углу.&lt;br /&gt;
&lt;br /&gt;
[[File:7.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Поздравляем, бот успешно интегрирован в WEB канал. Теперь чат-бот доступен на вашем персональном сайте компании.&lt;br /&gt;
&lt;br /&gt;
[[Category:Integrations]]&lt;/div&gt;</summary>
		<author><name>Tkachenko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=How_to_add_a_chatbot_to_your_website/ru&amp;diff=821</id>
		<title>How to add a chatbot to your website/ru</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=How_to_add_a_chatbot_to_your_website/ru&amp;diff=821"/>
		<updated>2023-10-23T08:02:38Z</updated>

		<summary type="html">&lt;p&gt;Tkachenko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ru]]&lt;br /&gt;
&lt;br /&gt;
{|style=&amp;quot;float:right; margin-left:0.8em; clear:right;&amp;quot;&lt;br /&gt;
|+[[Main_Page/ru|В начало]]&lt;br /&gt;
|&lt;br /&gt;
'''Lang:'''&lt;br /&gt;
|&lt;br /&gt;
[[How to add a chatbot to your website|en]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
;Youtube:[https://www.youtube.com/watch?v=VPfBYaJJ7jM How to add a chatbot to your website in 1 minute]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
== Установка чат-бота на собственный сайт ==&lt;br /&gt;
Для начала нам потребуется выбрать свой чат-бот.&lt;br /&gt;
&lt;br /&gt;
Для этого перейдите в консоль разработки ботов https://console.qudata.com/dashboard/bots и выберите желаемый чат-бот, нажав прямо на него.&lt;br /&gt;
&lt;br /&gt;
[[File:1.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Вы попадаете в раздел редактирования чат-бота.&lt;br /&gt;
Далее чат-бот нужно активировать. Для этого перейдите в раздел консоли '''General settings'''.&lt;br /&gt;
&lt;br /&gt;
[[File:Instruction 1.png|700px]]&lt;br /&gt;
&lt;br /&gt;
В пункте '''Bot status''' выберите из перечня статус '''Published''' и сохраните изменения.&lt;br /&gt;
&lt;br /&gt;
[[File:Instruction2.png|700px]]&lt;br /&gt;
&lt;br /&gt;
[[File:Instruction3.png|700px]]&lt;br /&gt;
&lt;br /&gt;
После этого нажмите в боковой левой навигационной панели '''Integrations''' и выберите вид канала '''WebChat'''.&lt;br /&gt;
&lt;br /&gt;
[[File:2.png|700px]]&lt;br /&gt;
&lt;br /&gt;
В панели настройки данного канала, введите ссылку на ваш сайт в поле шага 1.&lt;br /&gt;
&lt;br /&gt;
[[File:3.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Затем, в шаге 2, нажмите на кнопку '''Copy'''.&lt;br /&gt;
&lt;br /&gt;
[[File:4.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Откройте свою веб-страницу и получите доступ к HTML. Прокрутите вниз и вставьте скопированный текст в самом конце тега '''&amp;lt;/body&amp;gt;'''.&lt;br /&gt;
&lt;br /&gt;
[[File:5.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Вернитесь на страницу настройки и переключите ползунок в активное состояние.&lt;br /&gt;
&lt;br /&gt;
[[File:6.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Перезагрузите страницу вашего сайта. Бот появится в виде кнопки в правом нижнем углу.&lt;br /&gt;
&lt;br /&gt;
[[File:7.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Поздравляем, бот успешно интегрирован в WEB канал. Теперь чат-бот доступен на вашем персональном сайте компании.&lt;br /&gt;
&lt;br /&gt;
[[Category:Integrations]]&lt;/div&gt;</summary>
		<author><name>Tkachenko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=How_to_add_a_chatbot_to_your_website/ru&amp;diff=820</id>
		<title>How to add a chatbot to your website/ru</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=How_to_add_a_chatbot_to_your_website/ru&amp;diff=820"/>
		<updated>2023-10-23T08:00:42Z</updated>

		<summary type="html">&lt;p&gt;Tkachenko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ru]]&lt;br /&gt;
&lt;br /&gt;
{|style=&amp;quot;float:right; margin-left:0.8em; clear:right;&amp;quot;&lt;br /&gt;
|+[[Main_Page/ru|В начало]]&lt;br /&gt;
|&lt;br /&gt;
'''Lang:'''&lt;br /&gt;
|&lt;br /&gt;
[[How to add a chatbot to your website|en]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
;Youtube:[https://www.youtube.com/watch?v=VPfBYaJJ7jM How to add a chatbot to your website in 1 minute]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
== Установка чат-бота на собственный сайт ==&lt;br /&gt;
Для начала нам потребуется выбрать свой чат-бот.&lt;br /&gt;
&lt;br /&gt;
Для этого перейдите в консоль разработки ботов https://console.qudata.com/dashboard/bots и выберите желаемый чат-бот, нажав прямо на него.&lt;br /&gt;
&lt;br /&gt;
[[File:1.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Вы попадаете в раздел редактирования чат-бота.&lt;br /&gt;
Далее чат-бот нужно активировать на сайте. Для этого перейдите в раздел консоли '''General settings'''.&lt;br /&gt;
&lt;br /&gt;
[[File:Instruction 1.png|700px]]&lt;br /&gt;
&lt;br /&gt;
В пункте '''Bot status''' выберите из перечня статус '''Published''' и сохраните изменения.&lt;br /&gt;
&lt;br /&gt;
[[File:Instruction2.png|700px]]&lt;br /&gt;
&lt;br /&gt;
[[File:Instruction3.png|700px]]&lt;br /&gt;
&lt;br /&gt;
После этого нажмите в боковой левой навигационной панели '''Integrations''' и выберите вид канала '''WebChat'''.&lt;br /&gt;
&lt;br /&gt;
[[File:2.png|700px]]&lt;br /&gt;
&lt;br /&gt;
В панели настройки данного канала, введите ссылку на ваш сайт в поле шага 1.&lt;br /&gt;
&lt;br /&gt;
[[File:3.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Затем, в шаге 2, нажмите на кнопку '''Copy'''.&lt;br /&gt;
&lt;br /&gt;
[[File:4.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Откройте свою веб-страницу и получите доступ к HTML. Прокрутите вниз и вставьте скопированный текст в самом конце тега '''&amp;lt;/body&amp;gt;'''.&lt;br /&gt;
&lt;br /&gt;
[[File:5.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Вернитесь на страницу настройки и переключите ползунок в активное состояние.&lt;br /&gt;
&lt;br /&gt;
[[File:6.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Перезагрузите страницу вашего сайта. Бот появится в виде кнопки в правом нижнем углу.&lt;br /&gt;
&lt;br /&gt;
[[File:7.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Поздравляем, бот успешно интегрирован в WEB канал. Теперь чат-бот доступен на вашем персональном сайте компании.&lt;br /&gt;
&lt;br /&gt;
[[Category:Integrations]]&lt;/div&gt;</summary>
		<author><name>Tkachenko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=How_to_add_a_chatbot_to_your_website&amp;diff=819</id>
		<title>How to add a chatbot to your website</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=How_to_add_a_chatbot_to_your_website&amp;diff=819"/>
		<updated>2023-10-19T08:56:57Z</updated>

		<summary type="html">&lt;p&gt;Tkachenko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--&lt;br /&gt;
;Youtube:[https://www.youtube.com/watch?v=VPfBYaJJ7jM How to add a chatbot to your website in 1 minute]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
== Deploying a chatbot on your website ==&lt;br /&gt;
First, you need to choose a chatbot.&lt;br /&gt;
&lt;br /&gt;
To do this, go to the bot development console https://console.qudata.com/dashboard/bots and select the necessary chatbot by clicking directly on it.&lt;br /&gt;
&lt;br /&gt;
[[File:1.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Now you can see the editing section of the chatbot.&lt;br /&gt;
Click '''Integrations''' on the left navigation panel and select the '''WebChat''' from available channels.&lt;br /&gt;
&lt;br /&gt;
[[File:2.png|700px]]&lt;br /&gt;
&lt;br /&gt;
In the settings for this channel enter a link to your website in the input field of Step 1.&lt;br /&gt;
&lt;br /&gt;
[[File:3.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Then click the '''Copy''' button in Step 2.&lt;br /&gt;
&lt;br /&gt;
[[File:4.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Open your webpage and access the HTML. Scroll down to the bottom and paste the copied text at the very end of the '''&amp;lt;/body&amp;gt;''' tag.&lt;br /&gt;
&lt;br /&gt;
[[File:5.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Return to the settings page and switch the slider to the active state.&lt;br /&gt;
&lt;br /&gt;
[[File:6.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Reload your webpage. The bot will appear as a button in the bottom right.&lt;br /&gt;
&lt;br /&gt;
[[File:7.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Congratulations, the bot has been successfully integrated into the WEB channel. Now the chatbot is available on your personal company website.&lt;br /&gt;
&lt;br /&gt;
After that, you need to publish the chatbot on your website. To do this, click '''General settings''' on the left navigation panel.&lt;br /&gt;
&lt;br /&gt;
[[File:Instruction 1.png|700px]]&lt;br /&gt;
&lt;br /&gt;
In the '''Bot status''' section, select '''Published''' from the list and save the changes.&lt;br /&gt;
&lt;br /&gt;
[[File:Instruction2.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Now, the chatbot is activated on your website and ready to respond to user inquiries.&lt;br /&gt;
&lt;br /&gt;
[[File:Instruction3.png|700px]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Integrations]]&lt;/div&gt;</summary>
		<author><name>Tkachenko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=How_to_add_a_chatbot_to_your_website&amp;diff=818</id>
		<title>How to add a chatbot to your website</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=How_to_add_a_chatbot_to_your_website&amp;diff=818"/>
		<updated>2023-10-19T08:55:09Z</updated>

		<summary type="html">&lt;p&gt;Tkachenko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--&lt;br /&gt;
;Youtube:[https://www.youtube.com/watch?v=VPfBYaJJ7jM How to add a chatbot to your website in 1 minute]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
== Deploying a chatbot on your website ==&lt;br /&gt;
First, you need to choose a chatbot.&lt;br /&gt;
&lt;br /&gt;
To do this, go to the bot development console https://console.qudata.com/dashboard/bots and select the necessary chatbot by clicking directly on it.&lt;br /&gt;
&lt;br /&gt;
[[File:1.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Now you can see the editing section of the chatbot.&lt;br /&gt;
Click '''Integrations''' on the left navigation panel and select the '''WebChat''' from available channels.&lt;br /&gt;
&lt;br /&gt;
[[File:2.png|700px]]&lt;br /&gt;
&lt;br /&gt;
In the settings for this channel enter a link to your website in the input field of Step 1.&lt;br /&gt;
&lt;br /&gt;
[[File:3.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Then click the '''Copy''' button in Step 2.&lt;br /&gt;
&lt;br /&gt;
[[File:4.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Open your webpage and access the HTML. Scroll down to the bottom and paste the copied text at the very end of the '''&amp;lt;/body&amp;gt;''' tag.&lt;br /&gt;
&lt;br /&gt;
[[File:5.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Return to the settings page and switch the slider to the active state.&lt;br /&gt;
&lt;br /&gt;
[[File:6.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Reload your webpage. The bot will appear as a button in the bottom right.&lt;br /&gt;
&lt;br /&gt;
[[File:7.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Congratulations, the bot has been successfully integrated into the WEB channel. Now the chatbot is available on your personal company website.&lt;br /&gt;
&lt;br /&gt;
After that, you need to publish the chatbot on your website. To do this, click '''General settings''' on the left navigation panel.&lt;br /&gt;
&lt;br /&gt;
[[File:Instruction 1.png|700px]]&lt;br /&gt;
&lt;br /&gt;
In the '''Bot status''' section, select '''Published''' from the list and save the changes.&lt;br /&gt;
&lt;br /&gt;
[[File:Instruction2.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Now, the chatbot is activated on your website and ready to respond to users' inquiries.&lt;br /&gt;
&lt;br /&gt;
[[File:Instruction3.png|700px]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Integrations]]&lt;/div&gt;</summary>
		<author><name>Tkachenko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=How_to_add_a_chatbot_to_your_website&amp;diff=817</id>
		<title>How to add a chatbot to your website</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=How_to_add_a_chatbot_to_your_website&amp;diff=817"/>
		<updated>2023-10-19T08:09:23Z</updated>

		<summary type="html">&lt;p&gt;Tkachenko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--&lt;br /&gt;
;Youtube:[https://www.youtube.com/watch?v=VPfBYaJJ7jM How to add a chatbot to your website in 1 minute]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
== Deploying a chatbot on your website ==&lt;br /&gt;
First, you need to choose a chatbot.&lt;br /&gt;
&lt;br /&gt;
To do this, go to the bot development console https://console.qudata.com/dashboard/bots and select the necessary chatbot by clicking directly on it.&lt;br /&gt;
&lt;br /&gt;
[[File:1.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Now you can see the editing section of the chatbot.&lt;br /&gt;
Click '''Integrations''' on the left navigation panel and select the '''WebChat''' from available channels.&lt;br /&gt;
&lt;br /&gt;
[[File:2.png|700px]]&lt;br /&gt;
&lt;br /&gt;
In the settings for this channel enter a link to your website in the input field of Step 1.&lt;br /&gt;
&lt;br /&gt;
[[File:3.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Then click the '''Copy''' button in Step 2.&lt;br /&gt;
&lt;br /&gt;
[[File:4.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Open your webpage and access the HTML. Scroll down to the bottom and paste the copied text at the very end of the '''&amp;lt;/body&amp;gt;''' tag.&lt;br /&gt;
&lt;br /&gt;
[[File:5.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Return to the settings page and switch the slider to the active state.&lt;br /&gt;
&lt;br /&gt;
[[File:6.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Reload your webpage. The bot will appear as a button in the bottom right.&lt;br /&gt;
&lt;br /&gt;
[[File:7.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Congratulations, the bot has been successfully integrated into the WEB channel. Now the chatbot is available on your personal company website.&lt;br /&gt;
&lt;br /&gt;
After that, you need to publish the chatbot on your website. To do this, click '''General settings''' on the left navigation panel.&lt;br /&gt;
&lt;br /&gt;
[[File:Instruction 1.png|700px]]&lt;br /&gt;
&lt;br /&gt;
In the '''Bot status''' section, select '''Published''' from the list and save the changes.&lt;br /&gt;
&lt;br /&gt;
[[File:Instruction2.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Now, the chatbot is activated on your website and ready to respond to user inquiries.&lt;br /&gt;
&lt;br /&gt;
[[File:Instruction3.png|700px]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Integrations]]&lt;/div&gt;</summary>
		<author><name>Tkachenko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=File:Instruction_1.png&amp;diff=816</id>
		<title>File:Instruction 1.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=File:Instruction_1.png&amp;diff=816"/>
		<updated>2023-10-19T08:00:08Z</updated>

		<summary type="html">&lt;p&gt;Tkachenko: Tkachenko uploaded a new version of File:Instruction 1.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Tkachenko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=How_to_add_a_chatbot_to_your_website&amp;diff=815</id>
		<title>How to add a chatbot to your website</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=How_to_add_a_chatbot_to_your_website&amp;diff=815"/>
		<updated>2023-10-18T14:31:46Z</updated>

		<summary type="html">&lt;p&gt;Tkachenko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--&lt;br /&gt;
;Youtube:[https://www.youtube.com/watch?v=VPfBYaJJ7jM How to add a chatbot to your website in 1 minute]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
== Deploying a chatbot on your website ==&lt;br /&gt;
First, you need to choose a chatbot.&lt;br /&gt;
&lt;br /&gt;
To do this, go to the bot development console https://console.qudata.com/dashboard/bots and select the necessary chatbot by clicking directly on it.&lt;br /&gt;
&lt;br /&gt;
[[File:1.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Now you can see the editing section of the chatbot.&lt;br /&gt;
Click '''Integrations''' on the left navigation panel and select the '''WebChat''' from available channels.&lt;br /&gt;
&lt;br /&gt;
[[File:2.png|700px]]&lt;br /&gt;
&lt;br /&gt;
In the settings for this channel enter a link to your website in the input field of Step 1.&lt;br /&gt;
&lt;br /&gt;
[[File:3.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Then click the '''Copy''' button in Step 2.&lt;br /&gt;
&lt;br /&gt;
[[File:4.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Open your webpage and access the HTML. Scroll down to the bottom and paste the copied text at the very end of the '''&amp;lt;/body&amp;gt;''' tag.&lt;br /&gt;
&lt;br /&gt;
[[File:5.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Return to the settings page and switch the slider to the active state.&lt;br /&gt;
&lt;br /&gt;
[[File:6.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Reload your webpage. The bot will appear as a button in the bottom right.&lt;br /&gt;
&lt;br /&gt;
[[File:7.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Congratulations, the bot has been successfully integrated into the WEB channel. Now the chatbot is available on your personal company website.&lt;br /&gt;
&lt;br /&gt;
After that, you need to publish the chatbot on your website. To do this, choose '''General settings''' on the left navigation panel.&lt;br /&gt;
&lt;br /&gt;
[[File:Instruction 1.png|700px]]&lt;br /&gt;
&lt;br /&gt;
In the '''Bot status''' section, select '''Published''' from the list and save the changes.&lt;br /&gt;
&lt;br /&gt;
[[File:Instruction2.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Now, the chatbot is activated on your website and ready to respond to user inquiries.&lt;br /&gt;
&lt;br /&gt;
[[File:Instruction3.png|700px]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Integrations]]&lt;/div&gt;</summary>
		<author><name>Tkachenko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=How_to_add_a_chatbot_to_your_website/ru&amp;diff=814</id>
		<title>How to add a chatbot to your website/ru</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=How_to_add_a_chatbot_to_your_website/ru&amp;diff=814"/>
		<updated>2023-10-18T13:05:49Z</updated>

		<summary type="html">&lt;p&gt;Tkachenko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ru]]&lt;br /&gt;
&lt;br /&gt;
{|style=&amp;quot;float:right; margin-left:0.8em; clear:right;&amp;quot;&lt;br /&gt;
|+[[Main_Page/ru|В начало]]&lt;br /&gt;
|&lt;br /&gt;
'''Lang:'''&lt;br /&gt;
|&lt;br /&gt;
[[How to add a chatbot to your website|en]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
;Youtube:[https://www.youtube.com/watch?v=VPfBYaJJ7jM How to add a chatbot to your website in 1 minute]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
== Установка чат-бота на собственный сайт ==&lt;br /&gt;
Для начала нам потребуется выбрать свой чат-бот.&lt;br /&gt;
&lt;br /&gt;
Для этого перейдите в консоль разработки ботов https://console.qudata.com/dashboard/bots и выберите желаемый чат-бот, нажав прямо на него.&lt;br /&gt;
&lt;br /&gt;
[[File:1.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Вы попадаете в раздел редактирования чат-бота.&lt;br /&gt;
Нажмите в боковой левой навигационной панели '''Integrations''' и выберите вид канала '''WebChat'''.&lt;br /&gt;
&lt;br /&gt;
[[File:2.png|700px]]&lt;br /&gt;
&lt;br /&gt;
В панели настройки данного канала, введите ссылку на ваш сайт в поле шага 1.&lt;br /&gt;
&lt;br /&gt;
[[File:3.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Затем, в шаге 2, нажмите на кнопку '''Copy'''.&lt;br /&gt;
&lt;br /&gt;
[[File:4.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Откройте свою веб-страницу и получите доступ к HTML. Прокрутите вниз и вставьте скопированный текст в самом конце тега '''&amp;lt;/body&amp;gt;'''.&lt;br /&gt;
&lt;br /&gt;
[[File:5.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Вернитесь на страницу настройки и переключите ползунок в активное состояние.&lt;br /&gt;
&lt;br /&gt;
[[File:6.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Перезагрузите страницу вашего сайта. Бот появится в виде кнопки в правом нижнем углу.&lt;br /&gt;
&lt;br /&gt;
[[File:7.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Поздравляем, бот успешно интегрирован в WEB канал. Теперь чат-бот доступен на вашем персональном сайте компании.&lt;br /&gt;
&lt;br /&gt;
Далее чат-бот нужно опубликовать на сайте. Для этого перейдите в раздел консоли '''General settings'''.&lt;br /&gt;
&lt;br /&gt;
[[File:Instruction 1.png|700px]]&lt;br /&gt;
&lt;br /&gt;
В пункте '''Bot status''' выберите из перечня статус '''Published''' и сохраните изменения.&lt;br /&gt;
&lt;br /&gt;
[[File:Instruction2.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Теперь чат-бот активирован на вашем сайте и готов отвечать на вопросы пользователей.&lt;br /&gt;
&lt;br /&gt;
[[File:Instruction3.png|700px]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Integrations]]&lt;/div&gt;</summary>
		<author><name>Tkachenko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=How_to_add_a_chatbot_to_your_website/ru&amp;diff=813</id>
		<title>How to add a chatbot to your website/ru</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=How_to_add_a_chatbot_to_your_website/ru&amp;diff=813"/>
		<updated>2023-10-18T13:01:09Z</updated>

		<summary type="html">&lt;p&gt;Tkachenko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ru]]&lt;br /&gt;
&lt;br /&gt;
{|style=&amp;quot;float:right; margin-left:0.8em; clear:right;&amp;quot;&lt;br /&gt;
|+[[Main_Page/ru|В начало]]&lt;br /&gt;
|&lt;br /&gt;
'''Lang:'''&lt;br /&gt;
|&lt;br /&gt;
[[How to add a chatbot to your website|en]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
;Youtube:[https://www.youtube.com/watch?v=VPfBYaJJ7jM How to add a chatbot to your website in 1 minute]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
== Установка чат-бота на собственный сайт ==&lt;br /&gt;
Для начала нам потребуется выбрать свой чат-бот.&lt;br /&gt;
&lt;br /&gt;
Для этого перейдите в консоль разработки ботов https://console.qudata.com/dashboard/bots и выберите желаемый чат-бот, нажав прямо на него.&lt;br /&gt;
&lt;br /&gt;
[[File:1.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Вы попадаете в раздел редактирования чат-бота.&lt;br /&gt;
Нажмите в боковой левой навигационной панели '''Integrations''' и выберите вид канала '''WebChat'''.&lt;br /&gt;
&lt;br /&gt;
[[File:2.png|700px]]&lt;br /&gt;
&lt;br /&gt;
В панели настройки данного канала, введите ссылку на ваш сайт в поле шага 1.&lt;br /&gt;
&lt;br /&gt;
[[File:3.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Затем, в шаге 2, нажмите на кнопку '''Copy'''.&lt;br /&gt;
&lt;br /&gt;
[[File:4.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Откройте свою веб-страницу и получите доступ к HTML. Прокрутите вниз и вставьте скопированный текст в самом конце тега '''&amp;lt;/body&amp;gt;'''.&lt;br /&gt;
&lt;br /&gt;
[[File:5.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Вернитесь на страницу настройки и переключите ползунок в активное состояние.&lt;br /&gt;
&lt;br /&gt;
[[File:6.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Перезагрузите страницу вашего сайта. Бот появится в виде кнопки в правом нижнем углу.&lt;br /&gt;
&lt;br /&gt;
[[File:7.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Поздравляем, бот успешно интегрирован в WEB канал. Теперь чат-бот доступен на вашем персональном сайте компании.&lt;br /&gt;
&lt;br /&gt;
Далее чат-бот нужно опубликовать на сайте. Для этого перейдите в раздел консоли '''General settings'''.&lt;br /&gt;
&lt;br /&gt;
[[File:Instruction 1.png|700px]]&lt;br /&gt;
&lt;br /&gt;
В пункте '''Bot status''' выберите из перечня статус '''Published''' и сохраните изменения.&lt;br /&gt;
&lt;br /&gt;
[[File:Instruction2.png|700px]]&lt;br /&gt;
&lt;br /&gt;
[[File:Instruction3.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Теперь чат-бот активирован на вашем сайте и готов отвечать на вопросы пользователей.&lt;br /&gt;
&lt;br /&gt;
[[Category:Integrations]]&lt;/div&gt;</summary>
		<author><name>Tkachenko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=File:Instruction3.png&amp;diff=812</id>
		<title>File:Instruction3.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=File:Instruction3.png&amp;diff=812"/>
		<updated>2023-10-18T12:44:23Z</updated>

		<summary type="html">&lt;p&gt;Tkachenko: Tkachenko uploaded a new version of File:Instruction3.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Tkachenko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=File:Instruction3.png&amp;diff=811</id>
		<title>File:Instruction3.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=File:Instruction3.png&amp;diff=811"/>
		<updated>2023-10-18T12:25:38Z</updated>

		<summary type="html">&lt;p&gt;Tkachenko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Tkachenko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=File:Instruction2.png&amp;diff=810</id>
		<title>File:Instruction2.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=File:Instruction2.png&amp;diff=810"/>
		<updated>2023-10-18T12:17:54Z</updated>

		<summary type="html">&lt;p&gt;Tkachenko: Tkachenko uploaded a new version of File:Instruction2.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Tkachenko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=File:Instruction_1.png&amp;diff=809</id>
		<title>File:Instruction 1.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=File:Instruction_1.png&amp;diff=809"/>
		<updated>2023-10-18T12:15:25Z</updated>

		<summary type="html">&lt;p&gt;Tkachenko: Tkachenko uploaded a new version of File:Instruction 1.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Tkachenko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=How_to_add_a_chatbot_to_your_website/ru&amp;diff=808</id>
		<title>How to add a chatbot to your website/ru</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=How_to_add_a_chatbot_to_your_website/ru&amp;diff=808"/>
		<updated>2023-10-18T12:12:50Z</updated>

		<summary type="html">&lt;p&gt;Tkachenko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ru]]&lt;br /&gt;
&lt;br /&gt;
{|style=&amp;quot;float:right; margin-left:0.8em; clear:right;&amp;quot;&lt;br /&gt;
|+[[Main_Page/ru|В начало]]&lt;br /&gt;
|&lt;br /&gt;
'''Lang:'''&lt;br /&gt;
|&lt;br /&gt;
[[How to add a chatbot to your website|en]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
;Youtube:[https://www.youtube.com/watch?v=VPfBYaJJ7jM How to add a chatbot to your website in 1 minute]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
== Установка чат-бота на собственный сайт ==&lt;br /&gt;
Для начала нам потребуется выбрать свой чат-бот.&lt;br /&gt;
&lt;br /&gt;
Для этого перейдите в консоль разработки ботов https://console.qudata.com/dashboard/bots и выберите желаемый чат-бот, нажав прямо на него.&lt;br /&gt;
&lt;br /&gt;
[[File:1.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Вы попадаете в раздел редактирования чат-бота.&lt;br /&gt;
Нажмите в боковой левой навигационной панели '''Integrations''' и выберите вид канала '''WebChat'''.&lt;br /&gt;
&lt;br /&gt;
[[File:2.png|700px]]&lt;br /&gt;
&lt;br /&gt;
В панели настройки данного канала, введите ссылку на ваш сайт в поле шага 1.&lt;br /&gt;
&lt;br /&gt;
[[File:3.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Затем, в шаге 2, нажмите на кнопку '''Copy'''.&lt;br /&gt;
&lt;br /&gt;
[[File:4.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Откройте свою веб-страницу и получите доступ к HTML. Прокрутите вниз и вставьте скопированный текст в самом конце тега '''&amp;lt;/body&amp;gt;'''.&lt;br /&gt;
&lt;br /&gt;
[[File:5.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Вернитесь на страницу настройки и переключите ползунок в активное состояние.&lt;br /&gt;
&lt;br /&gt;
[[File:6.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Перезагрузите страницу вашего сайта. Бот появится в виде кнопки в правом нижнем углу.&lt;br /&gt;
&lt;br /&gt;
[[File:7.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Поздравляем, бот успешно интегрирован в WEB канал. Теперь чат-бот доступен на вашем персональном сайте компании.&lt;br /&gt;
&lt;br /&gt;
Далее чат-бот нужно опубликовать на сайте. Для этого перейдите в раздел консоли '''General settings'''.&lt;br /&gt;
&lt;br /&gt;
[[File:Instruction 1.png|700px]]&lt;br /&gt;
&lt;br /&gt;
В пункте '''Bot status''' выберите из перечня статус '''Published''' и сохраните изменения.&lt;br /&gt;
&lt;br /&gt;
[[File:Instruction2.png|700px]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Integrations]]&lt;/div&gt;</summary>
		<author><name>Tkachenko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=File:Instruction2.png&amp;diff=807</id>
		<title>File:Instruction2.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=File:Instruction2.png&amp;diff=807"/>
		<updated>2023-10-18T12:12:21Z</updated>

		<summary type="html">&lt;p&gt;Tkachenko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Tkachenko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=File:Instruction_1.png&amp;diff=806</id>
		<title>File:Instruction 1.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=File:Instruction_1.png&amp;diff=806"/>
		<updated>2023-10-18T12:07:29Z</updated>

		<summary type="html">&lt;p&gt;Tkachenko: Tkachenko uploaded a new version of File:Instruction 1.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Tkachenko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=How_to_add_a_chatbot_to_your_website/ru&amp;diff=805</id>
		<title>How to add a chatbot to your website/ru</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=How_to_add_a_chatbot_to_your_website/ru&amp;diff=805"/>
		<updated>2023-10-18T12:05:01Z</updated>

		<summary type="html">&lt;p&gt;Tkachenko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ru]]&lt;br /&gt;
&lt;br /&gt;
{|style=&amp;quot;float:right; margin-left:0.8em; clear:right;&amp;quot;&lt;br /&gt;
|+[[Main_Page/ru|В начало]]&lt;br /&gt;
|&lt;br /&gt;
'''Lang:'''&lt;br /&gt;
|&lt;br /&gt;
[[How to add a chatbot to your website|en]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
;Youtube:[https://www.youtube.com/watch?v=VPfBYaJJ7jM How to add a chatbot to your website in 1 minute]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
== Установка чат-бота на собственный сайт ==&lt;br /&gt;
Для начала нам потребуется выбрать свой чат-бот.&lt;br /&gt;
&lt;br /&gt;
Для этого перейдите в консоль разработки ботов https://console.qudata.com/dashboard/bots и выберите желаемый чат-бот, нажав прямо на него.&lt;br /&gt;
&lt;br /&gt;
[[File:1.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Вы попадаете в раздел редактирования чат-бота.&lt;br /&gt;
Нажмите в боковой левой навигационной панели '''Integrations''' и выберите вид канала '''WebChat'''.&lt;br /&gt;
&lt;br /&gt;
[[File:2.png|700px]]&lt;br /&gt;
&lt;br /&gt;
В панели настройки данного канала, введите ссылку на ваш сайт в поле шага 1.&lt;br /&gt;
&lt;br /&gt;
[[File:3.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Затем, в шаге 2, нажмите на кнопку '''Copy'''.&lt;br /&gt;
&lt;br /&gt;
[[File:4.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Откройте свою веб-страницу и получите доступ к HTML. Прокрутите вниз и вставьте скопированный текст в самом конце тега '''&amp;lt;/body&amp;gt;'''.&lt;br /&gt;
&lt;br /&gt;
[[File:5.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Вернитесь на страницу настройки и переключите ползунок в активное состояние.&lt;br /&gt;
&lt;br /&gt;
[[File:6.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Перезагрузите страницу вашего сайта. Бот появится в виде кнопки в правом нижнем углу.&lt;br /&gt;
&lt;br /&gt;
[[File:7.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Поздравляем, бот успешно интегрирован в WEB канал. Теперь чат-бот доступен на вашем персональном сайте компании.&lt;br /&gt;
&lt;br /&gt;
Далее чат-бот нужно опубликовать на сайте. Для этого перейдите в раздел консоли '''General settings'''.&lt;br /&gt;
&lt;br /&gt;
[[File:Instruction 1.png|700px]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Integrations]]&lt;/div&gt;</summary>
		<author><name>Tkachenko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=File:Instruction_1.png&amp;diff=804</id>
		<title>File:Instruction 1.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=File:Instruction_1.png&amp;diff=804"/>
		<updated>2023-10-18T11:55:21Z</updated>

		<summary type="html">&lt;p&gt;Tkachenko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Tkachenko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Google_Sheets_Setup&amp;diff=787</id>
		<title>Qubot Google Sheets Setup</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_Google_Sheets_Setup&amp;diff=787"/>
		<updated>2022-09-12T15:16:25Z</updated>

		<summary type="html">&lt;p&gt;Tkachenko: &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;
== Connecting Google Sheets to a Bot ==&lt;br /&gt;
&lt;br /&gt;
By connecting your Google spreadsheets to the bot, your bot experience will improve significantly. For example, your bot will be able to download data directly from your Google spreadsheet, as well as upload new data in real time. Using Google Sheets will make your work much easier, because you will have direct access to read and edit the saved data at any time without interfering with the bot code.&lt;br /&gt;
&lt;br /&gt;
The instructions below will help you to share Google spreadsheets:&lt;br /&gt;
== Step 1 ==&lt;br /&gt;
&lt;br /&gt;
Sign in or create an account at 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;
== Step 2 ==&lt;br /&gt;
&lt;br /&gt;
Open your Google Sheets here https://docs.google.com/spreadsheets&lt;br /&gt;
&lt;br /&gt;
You can also access your Google Sheets from the Google homepage(https://www.google.com/) by clicking the Google apps button.&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;
== Step 3 ==&lt;br /&gt;
&lt;br /&gt;
Share the Google Spreadsheet with your bot:&lt;br /&gt;
&lt;br /&gt;
In your Google Sheets, open a spreadsheet and click the Share button.&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;
Share the access in any of the possible ways.&lt;br /&gt;
First way. Share with a specific account: copy the following account into the input field of the sharing window and send the invitation.&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;
Second way. Get shareable link: in the Get link section change status Restricted to Anyone with the link, and click Done.&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;
Please note that you can control the access: if the bot will only read data from Google spreadsheet, then the Viewer role is enough, and if the bot will also save data to Google spreadsheet, then the Editor role is required. You can change the role at any time in the sharing settings.&lt;br /&gt;
&lt;br /&gt;
== Step 4 ==&lt;br /&gt;
&lt;br /&gt;
Set up data loading to a spreadsheet in the bot editor. Additional information about this can be found in the bot editor templates (e.g. Trivia, Order Food templates) or in our help center.&lt;br /&gt;
&lt;br /&gt;
== How to set up Google Spreadsheet data in a bot ==&lt;br /&gt;
&lt;br /&gt;
Choose the required bot and go to the Editor. &lt;br /&gt;
&lt;br /&gt;
'''Loading data from a spreadsheet'''&lt;br /&gt;
&lt;br /&gt;
1. Select a step in your bot to download data from the Google Sheets (for example, 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. Select/create an element to have its action load data from the spreadsheet. It can be buttons, actions or just entering any text by the user (click to show actions when) and other elements.&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. In the Item properties field you can add a property:&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. Select the load property:&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. In the load property  select Google Sheets from the list&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. In the Google Sheets table url field enter the url (link) of your Google Sheet&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. In the Slot name field enter the name of the variable that will store data from your spreadsheet as an array of objects:&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;
Use this variable to work with your data.&lt;br /&gt;
&lt;br /&gt;
'''''Make sure you give access to view or edit your spreadsheet'''''&lt;br /&gt;
&lt;br /&gt;
'''Sending data to a spreadsheet'''&lt;br /&gt;
&lt;br /&gt;
Go through steps 1-3 described above in &amp;quot;Loading data from a spreadsheet&amp;quot; and choose a step where to send data to the spreadsheet.&lt;br /&gt;
&lt;br /&gt;
4. Select the save property:&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. In the save property select Google Sheets from the list&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. In the Google Sheets table url field enter the url (link) of your Google Sheet&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. In the Data value field enter the data that will be sent to the spreadsheet in the specified format as an object:&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;
'''''Make sure you give access to edit your spreadsheet'''''&lt;br /&gt;
&lt;br /&gt;
== Working with filters ==&lt;br /&gt;
&lt;br /&gt;
You can use filters to receive selective data or change existing ones  from the bot.&amp;lt;br&amp;gt;&lt;br /&gt;
Filters are a data dictionary with the following structure: { 'COLUMN': DATA, ... }&amp;lt;br&amp;gt;&lt;br /&gt;
You can specify multiple columns in one filter.&amp;lt;br&amp;gt;&lt;br /&gt;
All columns in one filter are considered as a logical &amp;quot;AND&amp;quot;, that means the filter will look for those rows that have all the specified data in all the specified columns.&lt;br /&gt;
&lt;br /&gt;
'''Selective data loading from the table'''&lt;br /&gt;
&lt;br /&gt;
1. Set up your bot to load data according to the instructions above.&amp;lt;br&amp;gt;&lt;br /&gt;
2. Specify a filter in the form of a dictionary in the Data filter field.&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:GoogleSheets16.png|350px]]&amp;lt;br&amp;gt;&lt;br /&gt;
3. Only values from the columns, that correspond to the entered, will be recorded as data to the SLOT_DATA dictionary.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Editing data in the table'''&lt;br /&gt;
&lt;br /&gt;
1. Set up your bot to save data according to the instructions above.&amp;lt;br&amp;gt;&lt;br /&gt;
2. Specify a filter in the form of a dictionary in the Data filter field.&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:GoogleSheets17.png|350px]]&amp;lt;br&amp;gt;&lt;br /&gt;
3. Data from the table that match the filter will be edited.&amp;lt;br&amp;gt;&lt;br /&gt;
''If the filter did not work, then the data will not be recorded''.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Make sure you give access to edit your spreadsheet'''''&lt;br /&gt;
[[Category:Qubot]]&lt;/div&gt;</summary>
		<author><name>Tkachenko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Google_Sheets_Setup&amp;diff=786</id>
		<title>Qubot Google Sheets Setup</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_Google_Sheets_Setup&amp;diff=786"/>
		<updated>2022-09-12T15:10:12Z</updated>

		<summary type="html">&lt;p&gt;Tkachenko: &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;
== Connecting Google Sheets to a Bot ==&lt;br /&gt;
&lt;br /&gt;
By connecting your Google spreadsheets to the bot, your bot experience will improve significantly. For example, your bot will be able to download data directly from your Google spreadsheet, as well as upload new data in real time. Using Google Sheets will make your work much easier, because you will have direct access to read and edit the saved data at any time without interfering with the bot code.&lt;br /&gt;
&lt;br /&gt;
The instructions below will help you to share Google spreadsheets:&lt;br /&gt;
== Step 1 ==&lt;br /&gt;
&lt;br /&gt;
Sign in or create an account at 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;
== Step 2 ==&lt;br /&gt;
&lt;br /&gt;
Open your Google Sheets here https://docs.google.com/spreadsheets&lt;br /&gt;
&lt;br /&gt;
You can also access your Google Sheets from the Google homepage(https://www.google.com/) by clicking the Google apps button.&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;
== Step 3 ==&lt;br /&gt;
&lt;br /&gt;
Share the Google Spreadsheet with your bot:&lt;br /&gt;
&lt;br /&gt;
In your Google Sheets, open a spreadsheet and click the Share button.&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;
Share the access in any of the possible ways.&lt;br /&gt;
First way. Share with a specific account: copy the following account into the input field of the sharing window and send the invitation.&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;
Second way. Get shareable link: in the Get link section change status Restricted to Anyone with the link, and click Done.&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;
Please note that you can control the access: if the bot will only read data from Google spreadsheet, then the Viewer role is enough, and if the bot will also save data to Google spreadsheet, then the Editor role is required. You can change the role at any time in the sharing settings.&lt;br /&gt;
&lt;br /&gt;
== Step 4 ==&lt;br /&gt;
&lt;br /&gt;
Set up data loading to a spreadsheet in the bot editor. Additional information about this can be found in the bot editor templates (e.g. Trivia, Order Food templates) or in our help center.&lt;br /&gt;
&lt;br /&gt;
== How to set up Google Spreadsheet data in a bot ==&lt;br /&gt;
&lt;br /&gt;
Choose the required bot and go to the Editor. &lt;br /&gt;
&lt;br /&gt;
'''Loading data from a spreadsheet'''&lt;br /&gt;
&lt;br /&gt;
1. Select a step in your bot to download data from the Google Sheets (for example, 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. Select/create an element to have its action load data from the spreadsheet. It can be buttons, actions or just entering any text by the user (click to show actions when) and other elements.&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. In the Item properties field you can add a property:&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. Select the load property:&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. In the load property  select Google Sheets from the list&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. In the Google Sheets table url field enter the url (link) of your Google Sheet&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. In the Slot name field enter the name of the variable that will store data from your spreadsheet as an array of objects:&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;
Use this variable to work with your data.&lt;br /&gt;
&lt;br /&gt;
'''''Make sure you give access to view or edit your spreadsheet'''''&lt;br /&gt;
&lt;br /&gt;
'''Sending data to a spreadsheet'''&lt;br /&gt;
&lt;br /&gt;
Go through steps 1-3 described above in &amp;quot;Loading data from a spreadsheet&amp;quot; and choose a step where to send data to the spreadsheet.&lt;br /&gt;
&lt;br /&gt;
4. Select the save property:&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. In the save property select Google Sheets from the list&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. In the Google Sheets table url field enter the url (link) of your Google Sheet&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. In the Data value field enter the data that will be sent to the spreadsheet in the specified format as an object:&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;
'''''Make sure you give access to edit your spreadsheet'''''&lt;br /&gt;
&lt;br /&gt;
== Working with filters ==&lt;br /&gt;
&lt;br /&gt;
You can use filters to receive selective data or change existing ones  from the bot.&amp;lt;br&amp;gt;&lt;br /&gt;
Filters are a data dictionary with the following structure: { 'COLUMN': DATA, ... }&amp;lt;br&amp;gt;&lt;br /&gt;
You can specify multiple columns in one filter.&amp;lt;br&amp;gt;&lt;br /&gt;
All columns in one filter are considered as a logical &amp;quot;AND&amp;quot;, that means the filter will look for those rows that have all the specified data in all the specified columns.&lt;br /&gt;
&lt;br /&gt;
'''Selective data loading from the table'''&lt;br /&gt;
&lt;br /&gt;
1. Set up your bot to load data according to the instructions above.&amp;lt;br&amp;gt;&lt;br /&gt;
2. Specify a filter in the form of a dictionary in the Data filter field.&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:GoogleSheets16.png|350px]]&amp;lt;br&amp;gt;&lt;br /&gt;
3. Only values from the columns that correspond to the entered filter will be recorded as necessary data to the SLOT_DATA dictionary.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Editing data in the table'''&lt;br /&gt;
&lt;br /&gt;
1. Set up your bot to save data according to the instructions above.&amp;lt;br&amp;gt;&lt;br /&gt;
2. Specify a filter in the form of a dictionary in the Data filter field.&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:GoogleSheets17.png|350px]]&amp;lt;br&amp;gt;&lt;br /&gt;
3. Data from the table that match the filter will be edited.&amp;lt;br&amp;gt;&lt;br /&gt;
''If the filter did not work, then the data will not be recorded''.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Make sure you give access to edit your spreadsheet'''''&lt;br /&gt;
[[Category:Qubot]]&lt;/div&gt;</summary>
		<author><name>Tkachenko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Google_Sheets_Setup&amp;diff=785</id>
		<title>Qubot Google Sheets Setup</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_Google_Sheets_Setup&amp;diff=785"/>
		<updated>2022-09-12T15:05:02Z</updated>

		<summary type="html">&lt;p&gt;Tkachenko: &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;
== Connecting Google Sheets to a Bot ==&lt;br /&gt;
&lt;br /&gt;
By connecting your Google spreadsheets to the bot, your bot experience will improve significantly. For example, your bot will be able to download data directly from your Google spreadsheet, as well as upload new data in real time. Using Google Sheets will make your work much easier, because you will have direct access to read and edit the saved data at any time without interfering with the bot code.&lt;br /&gt;
&lt;br /&gt;
The instructions below will help you to share Google spreadsheets:&lt;br /&gt;
== Step 1 ==&lt;br /&gt;
&lt;br /&gt;
Sign in or create an account at 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;
== Step 2 ==&lt;br /&gt;
&lt;br /&gt;
Open your Google Sheets here https://docs.google.com/spreadsheets&lt;br /&gt;
&lt;br /&gt;
You can also access your Google Sheets from the Google homepage(https://www.google.com/) by clicking the Google apps button.&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;
== Step 3 ==&lt;br /&gt;
&lt;br /&gt;
Share the Google Spreadsheet with your bot:&lt;br /&gt;
&lt;br /&gt;
In your Google Sheets, open a spreadsheet and click the Share button.&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;
Share the access in any of the possible ways.&lt;br /&gt;
First way. Share with a specific account: copy the following account into the input field of the sharing window and send the invitation.&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;
Second way. Get shareable link: in the Get link section change status Restricted to Anyone with the link, and click Done.&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;
Please note that you can control the access: if the bot will only read data from Google spreadsheet, then the Viewer role is enough, and if the bot will also save data to Google spreadsheet, then the Editor role is required. You can change the role at any time in the sharing settings.&lt;br /&gt;
&lt;br /&gt;
== Step 4 ==&lt;br /&gt;
&lt;br /&gt;
Set up data loading to a spreadsheet in the bot editor. Additional information about this can be found in the bot editor templates (e.g. Trivia, Order Food templates) or in our help center.&lt;br /&gt;
&lt;br /&gt;
== How to set up Google Spreadsheet data in a bot ==&lt;br /&gt;
&lt;br /&gt;
Choose the required bot and go to the Editor. &lt;br /&gt;
&lt;br /&gt;
'''Loading data from a spreadsheet'''&lt;br /&gt;
&lt;br /&gt;
1. Select a step in your bot to download data from the Google Sheets (for example, 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. Select/create an element to have its action load data from the spreadsheet. It can be buttons, actions or just entering any text by the user (click to show actions when) and other elements.&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. In the Item properties field you can add a property:&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. Select the load property:&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. In the load property  select Google Sheets from the list&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. In the Google Sheets table url field enter the url (link) of your Google Sheet&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. In the Slot name field enter the name of the variable that will store data from your spreadsheet as an array of objects:&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;
Use this variable to work with your data.&lt;br /&gt;
&lt;br /&gt;
'''''Make sure you give access to view or edit your spreadsheet'''''&lt;br /&gt;
&lt;br /&gt;
'''Sending data to a spreadsheet'''&lt;br /&gt;
&lt;br /&gt;
Go through steps 1-3 described above in &amp;quot;Loading data from a spreadsheet&amp;quot; and choose a step where to send data to the spreadsheet.&lt;br /&gt;
&lt;br /&gt;
4. Select the save property:&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. In the save property select Google Sheets from the list&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. In the Google Sheets table url field enter the url (link) of your Google Sheet&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. In the Data value field enter the data that will be sent to the spreadsheet in the specified format as an object:&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;
'''''Make sure you give access to edit your spreadsheet'''''&lt;br /&gt;
&lt;br /&gt;
== Working with filters ==&lt;br /&gt;
&lt;br /&gt;
You can use filters to receive selective data or change existing ones  from the bot.&amp;lt;br&amp;gt;&lt;br /&gt;
Filters are a data dictionary with the following structure: { 'COLUMN': DATA, ... }&amp;lt;br&amp;gt;&lt;br /&gt;
You can specify multiple columns in one filter.&amp;lt;br&amp;gt;&lt;br /&gt;
All columns in one filter are considered as a logical &amp;quot;AND&amp;quot;, that means the filter will look for those rows that have all the specified data in all the specified columns.&lt;br /&gt;
&lt;br /&gt;
'''Selective data loading from the table'''&lt;br /&gt;
&lt;br /&gt;
1. Set up your bot to load data according to the instructions above.&amp;lt;br&amp;gt;&lt;br /&gt;
2. Specify a filter in the form of a dictionary in the Data filter field.&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;
'''Editing data in the table'''&lt;br /&gt;
&lt;br /&gt;
1. Set up your bot to save data according to the instructions above.&amp;lt;br&amp;gt;&lt;br /&gt;
2. Specify a filter in the form of a dictionary in the Data filter field.&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:GoogleSheets17.png|350px]]&amp;lt;br&amp;gt;&lt;br /&gt;
3. Data from the table that match the filter will be edited.&amp;lt;br&amp;gt;&lt;br /&gt;
''If the filter did not work, then the data will not be recorded''.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Make sure you give access to edit your spreadsheet'''''&lt;br /&gt;
[[Category:Qubot]]&lt;/div&gt;</summary>
		<author><name>Tkachenko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Google_Sheets_Setup&amp;diff=784</id>
		<title>Qubot Google Sheets Setup</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_Google_Sheets_Setup&amp;diff=784"/>
		<updated>2022-09-12T11:26:15Z</updated>

		<summary type="html">&lt;p&gt;Tkachenko: &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;
== Connecting Google Sheets to a Bot ==&lt;br /&gt;
&lt;br /&gt;
By connecting your Google spreadsheets to the bot, your bot experience will improve significantly. For example, your bot will be able to download data directly from your Google spreadsheet, as well as upload new data in real time. Using Google Sheets will make your work much easier, because you will have direct access to read and edit the saved data at any time without interfering with the bot code.&lt;br /&gt;
&lt;br /&gt;
The instructions below will help you to share Google spreadsheets:&lt;br /&gt;
== Step 1 ==&lt;br /&gt;
&lt;br /&gt;
Sign in or create an account at 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;
== Step 2 ==&lt;br /&gt;
&lt;br /&gt;
Open your Google Sheets here https://docs.google.com/spreadsheets&lt;br /&gt;
&lt;br /&gt;
You can also access your Google Sheets from the Google homepage(https://www.google.com/) by clicking the Google apps button.&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;
== Step 3 ==&lt;br /&gt;
&lt;br /&gt;
Share the Google Spreadsheet with your bot:&lt;br /&gt;
&lt;br /&gt;
In your Google Sheets, open a spreadsheet and click the Share button.&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;
Share the access in any of the possible ways.&lt;br /&gt;
First way. Share with a specific account: copy the following account into the input field of the sharing window and send the invitation.&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;
Second way. Get shareable link: in the Get link section change status Restricted to Anyone with the link, and click Done.&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;
Please note that you can control the access: if the bot will only read data from Google spreadsheet, then the Viewer role is enough, and if the bot will also save data to Google spreadsheet, then the Editor role is required. You can change the role at any time in the sharing settings.&lt;br /&gt;
&lt;br /&gt;
== Step 4 ==&lt;br /&gt;
&lt;br /&gt;
Set up data loading to a spreadsheet in the bot editor. Additional information about this can be found in the bot editor templates (e.g. Trivia, Order Food templates) or in our help center.&lt;br /&gt;
&lt;br /&gt;
== How to set up Google Spreadsheet data in a bot ==&lt;br /&gt;
&lt;br /&gt;
Choose the required bot and go to the Editor. &lt;br /&gt;
&lt;br /&gt;
'''Loading data from a spreadsheet'''&lt;br /&gt;
&lt;br /&gt;
1. Select a step in your bot to download data from the Google Sheets (for example, 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. Select/create an element to have its action load data from the spreadsheet. It can be buttons, actions or just entering any text by the user (click to show actions when) and other elements.&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. In the Item properties field you can add a property:&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. Select the load property:&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. In the load property  select Google Sheets from the list&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. In the Google Sheets table url field enter the url (link) of your Google Sheet&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. In the Slot name field enter the name of the variable that will store data from your spreadsheet as an array of objects:&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;
Use this variable to work with your data.&lt;br /&gt;
&lt;br /&gt;
'''''Make sure you give access to view or edit your spreadsheet'''''&lt;br /&gt;
&lt;br /&gt;
'''Sending data to a spreadsheet'''&lt;br /&gt;
&lt;br /&gt;
Go through steps 1-3 described above in &amp;quot;Loading data from a spreadsheet&amp;quot; and choose a step where to send data to the spreadsheet.&lt;br /&gt;
&lt;br /&gt;
4. Select the save property:&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. In the save property select Google Sheets from the list&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. In the Google Sheets table url field enter the url (link) of your Google Sheet&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. In the Data value field enter the data that will be sent to the spreadsheet in the specified format as an object:&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;
'''''Make sure you give access to edit your spreadsheet'''''&lt;br /&gt;
&lt;br /&gt;
== Working with filters ==&lt;br /&gt;
&lt;br /&gt;
You can use filters to receive selective data or change existing ones  from the bot.&amp;lt;br&amp;gt;&lt;br /&gt;
Filters are a data dictionary with the following structure: { 'COLUMN': DATA, ... }&amp;lt;br&amp;gt;&lt;br /&gt;
You can specify multiple columns in one filter.&amp;lt;br&amp;gt;&lt;br /&gt;
All columns in one filter are considered as a logical &amp;quot;AND&amp;quot;, that means the filter will look for those rows that have all the specified data in all the specified columns.&lt;br /&gt;
&lt;br /&gt;
'''Selective data loading from the table'''&lt;br /&gt;
&lt;br /&gt;
1. Set up your bot to load data according to the instructions above.&amp;lt;br&amp;gt;&lt;br /&gt;
2. Specify a filter in the form of a dictionary in the Data filter field.&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;
'''''Make sure you give access to edit your spreadsheet'''''&lt;br /&gt;
[[Category:Qubot]]&lt;/div&gt;</summary>
		<author><name>Tkachenko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Whatsapp_Integration&amp;diff=783</id>
		<title>Qubot Whatsapp Integration</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_Whatsapp_Integration&amp;diff=783"/>
		<updated>2022-09-12T11:22:15Z</updated>

		<summary type="html">&lt;p&gt;Tkachenko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Qubot]]&lt;br /&gt;
[[Category:Integrations|W]]&lt;br /&gt;
&amp;lt;span id=&amp;quot;qubot-whatsapp-integration&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
{{TOCright}}&lt;br /&gt;
== Connecting a bot to Whatsapp ==&lt;br /&gt;
&lt;br /&gt;
To get WhatsApp Business API Access through our embedded signup form, follow this guide.&lt;br /&gt;
== Step 1 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Before signing up, make sure you have a valid phone number.Check if your phone number meets the criteria here - https://developers.facebook.com/docs/whatsapp/phone-numbers#phone-numbers .&lt;br /&gt;
* For phone numbers with an IVR system enabled, the IVR needs to be temporarily disabled during the registration process.&lt;br /&gt;
== Step 2 ==&lt;br /&gt;
&lt;br /&gt;
Follow our signup form link https://hub.360dialog.com/lp/whatsapp/VTOU8QPA to fill out the WhatsApp Business Account application.&lt;br /&gt;
&lt;br /&gt;
You will need to provide your email address (which can't be connected to an active 360dialog account), your name, your company name, and the password that will be used in the 360 Client Hub login.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:WhatsappSetup1.png|700px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
After clicking the Accept Terms button, you will be redirected to the embedded signup page.&lt;br /&gt;
&lt;br /&gt;
== Step 3 ==&lt;br /&gt;
&lt;br /&gt;
Complete the embedded signup.&lt;br /&gt;
&lt;br /&gt;
Precaution: do not keep the embedded signup pop-up open for more than 1 hour, otherwise the session will expire. Please ensure that you have all the prerequisites from Step 1 ready before starting.&lt;br /&gt;
&lt;br /&gt;
You will need to log in to your Meta account to move forward. It's important that this Meta account has admin access to the Meta Business Manager that will manage this WhatsApp account.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:WhatsappSetup2.png|700px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
WhatsApp Business API Account Activation  -  https://www.youtube.com/watch?v=_WxbHVdC8L4&lt;br /&gt;
&lt;br /&gt;
Select your bot, in the left pane select Integrations. Next, select Whatsapp.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:WhatsappSetup3.png|700px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Select Step 3 and enter your company's phone number in the field.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:WhatsappSetup4.png|400px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once the embedded signup is completed, we will immediately deploy the WhatsApp Business API Client. You will be automatically logged into 360 Client Hub, where you can generate your API Key.&lt;br /&gt;
&lt;br /&gt;
== Step 4 ==&lt;br /&gt;
&lt;br /&gt;
Generate an API Key and make sure you store it in a secure location.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:WhatsappSetup5.png|500px]]&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;lt;br&amp;gt;&lt;br /&gt;
[[File:WhatsappSetup6.png|500px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Select your bot, select Integrations in the left pane. Next, select Whatsapp. Select Step 3 and copy the API key in the input field.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:WhatsappSetup7.png|500px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Step 5 ==&lt;br /&gt;
&lt;br /&gt;
Complete your business manager profile.&lt;br /&gt;
&lt;br /&gt;
To keep connected to the API, you should add your information in the business info section of business manager settings. Learn how to do it here - https://www.facebook.com/business/help/257957338156440?id=180505742745347&lt;/div&gt;</summary>
		<author><name>Tkachenko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_NLU&amp;diff=763</id>
		<title>Qubot NLU</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_NLU&amp;diff=763"/>
		<updated>2022-07-06T08:52:43Z</updated>

		<summary type="html">&lt;p&gt;Tkachenko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&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;
==Introduction==&lt;br /&gt;
If you want your bot to be up-to-date and able to process natural text input, then use our innovative technology - Natural Language Processing (NLP). It is NLP that allows your bot to understand the meaning of users' messages and generate appropriate responses. Whether the client wants “two Margherita pizzas and cola” or “cola and cheesecake for two”, the bot will understand and place the correct order.&lt;br /&gt;
&lt;br /&gt;
== How NLP works. General information ==&lt;br /&gt;
The essence of the work of NLP comes down to the analysis of the main components of any sentence - '''entities''' and '''intents'''.&lt;br /&gt;
&lt;br /&gt;
*'''Entities''' are any real world objects, e.g. cola (drink), Ukraine (country), 2022 (number), Dmitry (name). &lt;br /&gt;
&lt;br /&gt;
*'''Intents''' are the client's wishes described as a sentence, for example, I would like a cola (want), how to get to the theater (finding a way), hello (greeting).&lt;br /&gt;
&lt;br /&gt;
To recognize intentions, machine learning methods are used based on prepared phrases as examples for each class. These methods range from a simple bag-of-words to neural networks of fairly complex architecture. Words, n-grams of words, n-grams of letters (combating typos), the presence of a question mark and others are  used as features.&lt;br /&gt;
&lt;br /&gt;
Using combinations of recognized entities and intents, we can confidently state what the client wants and take appropriate actions.&lt;br /&gt;
&lt;br /&gt;
There are some simple examples from a pizzeria bot in the table below:&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;'''Message 👩'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;'''Entities'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;'''Intents'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;'''Reply 💻'''&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Hi&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;Hello&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Hi, I'm Margo&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;$NAME = Margaret&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;greet&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Nice to meet you, Margaret!&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;I would like two Margheritas and a cola&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;$NUMBER = 2&amp;lt;br/&amp;gt;$NAME  = Margherita&amp;lt;br/&amp;gt;$DRINK = cola&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;want&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Would you like to place an order for:&amp;lt;br/&amp;gt;2 Margherita pizzas and one cola?&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;I would like&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;What would you like?&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;I would like to go to Ukraine&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;$COUNTRY = Ukraine&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;want&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;The distance from you to Ukraine is 4768.95 km. It will be most convenient to fly by plane.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The bot gives meaningful answers in every given example despite similar intentions and recognized entities. In the  intent '''greet''', we understand that $NAME is the customer's name, while in the intent '''want''' we understand that $NAME is the name of the pizza.&lt;br /&gt;
&lt;br /&gt;
==Improving bot's intellectual development==&lt;br /&gt;
The general information described earlier is used for the work of NLP in many companies, this is a fairly simple scheme, only it has a drawback - the bot is not able to navigate in the context. This means that in all examples from the first  table there will always be the same answer.&lt;br /&gt;
&lt;br /&gt;
To provide the bot with more intelligence, QuData's NLP uses '''forgettable intents''', as well as a mechanism that saves the chat history with the customer. &lt;br /&gt;
&lt;br /&gt;
'''Forgettable intents''' are intents that happen outside the bot's mainstream and are forgotten at the first normal intent.&lt;br /&gt;
&lt;br /&gt;
This way, the bot can understand the context, as well as process more complex dialog chains, for example, these:&lt;br /&gt;
&lt;br /&gt;
''Forgotten intents are highlighted in yellow.''&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;'''Message 👩'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;'''Entities'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;'''Intents'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;'''Reply 💻'''&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;I want fanta&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;$DRINKS = fanta&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;want&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;How many bottles of fanta do you want?&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;How much does it cost?&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; Fanta costs 20 UAH.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Then 3&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;I added 3 bottles of fanta to the order&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;'''Message 👩'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;'''Entities'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;'''Intents'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;'''Reply 💻'''&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;Hello. My name is Bot. What is your name?&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;My name is Katya&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;$NAME = Katherine&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;[start, my name is]&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;It's nice to meet you, Katherine.&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;Hi&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;Always happy to say hello again.&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;My name is Masha&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;$NAME = Maria&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;my name is&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;I see... So your name is Maria?&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;No.&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;What is your name then?&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;Dasha&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;$NAME = Daria&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;name&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;I see... So your name is Daria?&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;Yes&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;Okay, Daria, I'll remember that.&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;My name is Dasha&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;$NAME = Daria&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;my name is&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Yes, Daria, I know.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;I want fanta&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;$DRINKS = fanta&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;want&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;How many bottles of fanta do you want?&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>Tkachenko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_NLU&amp;diff=762</id>
		<title>Qubot NLU</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_NLU&amp;diff=762"/>
		<updated>2022-07-06T08:52:11Z</updated>

		<summary type="html">&lt;p&gt;Tkachenko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&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;
==Introduction==&lt;br /&gt;
If you want your bot to be up-to-date and able to process natural text input, then use our innovative technology - Natural Language Processing (NLP). It is NLP that allows your bot to understand the meaning of users' messages and generate appropriate responses. Whether the client wants “two Margherita pizzas and cola” or “cola and cheesecake for two”, the bot will understand and place the correct order.&lt;br /&gt;
&lt;br /&gt;
== How NLP works. General information ==&lt;br /&gt;
The essence of the work of NLP comes down to the analysis of the main components of any sentence - '''entities''' and '''intents'''.&lt;br /&gt;
&lt;br /&gt;
*'''Entities''' are any real world objects, e.g. cola (drink), Ukraine (country), 2022 (number), Dmitry (name). &lt;br /&gt;
&lt;br /&gt;
*'''Intents''' are the client's wishes described as a sentence, for example, I would like a cola (want), how to get to the theater (finding a way), hello (greeting).&lt;br /&gt;
&lt;br /&gt;
To recognize intentions, machine learning methods are used based on prepared phrases as examples for each class. These methods range from a simple bag-of-words to neural networks of fairly complex architecture. Words, n-grams of words, n-grams of letters (combating typos), the presence of a question mark and others are  used as features.&lt;br /&gt;
&lt;br /&gt;
Using combinations of recognized entities and intents, we can confidently state what the client wants and take appropriate actions.&lt;br /&gt;
&lt;br /&gt;
There are some simple examples from a pizzeria bot in the table below:&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;'''Message 👩'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;'''Entities'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;'''Intents'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;'''Reply 💻'''&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Hi&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;Hello&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Hi, I'm Margo&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;$NAME = Margaret&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;greet&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Nice to meet you, Margaret!&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;I would like two Margheritas and a cola&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;$NUMBER = 2&amp;lt;br/&amp;gt;$NAME  = Margherita&amp;lt;br/&amp;gt;$DRINK = cola&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;want&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Would you like to place an order for:&amp;lt;br/&amp;gt;2 Margherita pizzas and one cola?&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;I would like&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;What would you like?&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;I would like to go to Ukraine&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;$COUNTRY = Ukraine&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;want&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;The distance from you to Ukraine is 4768.95 km. It will be most convenient to fly by plane.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The bot gives meaningful answers in every given example despite similar intentions and recognized entities. In the  intent '''greet''', we understand that $NAME is the customer's name, while in the intent '''want''' we understand that $NAME is the name of the pizza.&lt;br /&gt;
&lt;br /&gt;
==Improving bot's intellectual development==&lt;br /&gt;
The general information described earlier is used for the work of NLP in many companies, this is a fairly simple scheme, only it has a drawback - the bot is not able to navigate in the context. This means that in all examples from the first  table there will always be the same answer.&lt;br /&gt;
&lt;br /&gt;
To provide the bot with more intelligence, QuData's NLP uses '''forgettable intents''', as well as a mechanism that saves the chat history with the customer. &lt;br /&gt;
&lt;br /&gt;
'''Forgettable intents''' are intents that happen outside the bot's mainstream and are forgotten at the first normal intent.&lt;br /&gt;
&lt;br /&gt;
This way, the bot can understand the context, as well as process more complex dialog chains, for example, these:&lt;br /&gt;
&lt;br /&gt;
''Forgotten intents are highlighted in yellow.''&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;'''Message 👩'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;'''Entities'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;'''Intents'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;'''Reply 💻'''&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;I want fanta&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;$DRINKS = fanta&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;want&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;How many bottles of fanta do you want?&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;How much does it cost?&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; Fanta costs 20 UAH.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Then 3&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;I added 3 bottles of fanta to the order&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;'''Message 👩'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;'''Entities'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;'''Intents'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;'''Reply 💻'''&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;Hello. My name is Bot. What is your name?&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;My name is Katya&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;$NAME = Katherine&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;[start, my name is]&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;ОIt's nice to meet you, Katherine.&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;Hi&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;Always happy to say hello again.&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;My name is Masha&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;$NAME = Maria&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;my name is&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;I see... So your name is Maria?&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;No.&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;What is your name then?&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;Dasha&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;$NAME = Daria&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;name&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;I see... So your name is Daria?&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;Yes&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;Okay, Daria, I'll remember that.&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;My name is Dasha&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;$NAME = Daria&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;my name is&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Yes, Daria, I know.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;I want fanta&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;$DRINKS = fanta&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;want&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;How many bottles of fanta do you want?&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>Tkachenko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_NLU&amp;diff=761</id>
		<title>Qubot NLU</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_NLU&amp;diff=761"/>
		<updated>2022-07-06T08:51:26Z</updated>

		<summary type="html">&lt;p&gt;Tkachenko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&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;
==Introduction==&lt;br /&gt;
If you want your bot to be up-to-date and able to process natural text input, then use our innovative technology - Natural Language Processing (NLP). It is NLP that allows your bot to understand the meaning of users' messages and generate appropriate responses. Whether the client wants “two Margherita pizzas and cola” or “cola and cheesecake for two”, the bot will understand and place the correct order.&lt;br /&gt;
&lt;br /&gt;
== How NLP works. General information ==&lt;br /&gt;
The essence of the work of NLP comes down to the analysis of the main components of any sentence - '''entities''' and '''intents'''.&lt;br /&gt;
&lt;br /&gt;
*'''Entities''' are any real world objects, e.g. cola (drink), Ukraine (country), 2022 (number), Dmitry (name). &lt;br /&gt;
&lt;br /&gt;
*'''Intents''' are the client's wishes described as a sentence, for example, I would like a cola (want), how to get to the theater (finding a way), hello (greeting).&lt;br /&gt;
&lt;br /&gt;
To recognize intentions, machine learning methods are used based on prepared phrases as examples for each class. These methods range from a simple bag-of-words to neural networks of fairly complex architecture. Words, n-grams of words, n-grams of letters (combating typos), the presence of a question mark and others are  used as features.&lt;br /&gt;
&lt;br /&gt;
Using combinations of recognized entities and intents, we can confidently state what the client wants and take appropriate actions.&lt;br /&gt;
&lt;br /&gt;
There are some simple examples from a pizzeria bot in the table below:&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;'''Message 👩'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;'''Entities'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;'''Intents'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;'''Reply 💻'''&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Hi&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;Hello&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Hi, I'm Margo&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;$NAME = Margaret&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;greet&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Nice to meet you, Margaret!&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;I would like two Margheritas and a cola&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;$NUMBER = 2&amp;lt;br/&amp;gt;$NAME  = Margherita&amp;lt;br/&amp;gt;$DRINK = cola&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;want&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Would you like to place an order for:&amp;lt;br/&amp;gt;2 Margherita pizzas and one cola?&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;I would like&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;What would you like?&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;I would like to go to Ukraine&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;$COUNTRY = Ukraine&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;want&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;The distance from you to Ukraine is 4768.95 km. It will be most convenient to fly by plane.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The bot gives meaningful answers in every given example despite similar intentions and recognized entities. In the  intent '''greet''', we understand that $NAME is the customer's name, while in the intent '''want''' we understand that $NAME is the name of the pizza.&lt;br /&gt;
&lt;br /&gt;
==Improving bot's intellectual development==&lt;br /&gt;
The general information described earlier is used for the work of NLP in many companies, this is a fairly simple scheme, only it has a drawback - the bot is not able to navigate in the context. This means that in all examples from the first  table there will always be the same answer.&lt;br /&gt;
&lt;br /&gt;
To provide the bot with more intelligence, QuData's NLP uses '''forgettable intents''', as well as a mechanism that saves the chat history with the customer. &lt;br /&gt;
&lt;br /&gt;
'''Forgettable intents''' are intents that happen outside the bot's mainstream and are forgotten at the first normal intent.&lt;br /&gt;
&lt;br /&gt;
This way, the bot can understand the context, as well as process more complex dialog chains, for example, these:&lt;br /&gt;
&lt;br /&gt;
''Forgotten intents are highlighted in yellow.''&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;'''Message 👩'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;'''Entities'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;'''Intents'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;'''Reply 💻'''&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;I want fanta&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;$DRINKS = fanta&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;want&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;How many bottles of fanta do you want?&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;How much does it cost?&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;It's 20 UAH.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Then 3&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;I added 3 bottles of fanta to the order&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;'''Message 👩'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;'''Entities'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;'''Intents'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;'''Reply 💻'''&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;Hello. My name is Bot. What is your name?&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;My name is Katya&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;$NAME = Katherine&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;[start, my name is]&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;ОIt's nice to meet you, Katherine.&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;Hi&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;Always happy to say hello again.&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;My name is Masha&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;$NAME = Maria&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;my name is&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;I see... So your name is Maria?&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;No.&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;What is your name then?&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;Dasha&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;$NAME = Daria&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;name&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;I see... So your name is Daria?&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;Yes&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;Okay, Daria, I'll remember that.&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;My name is Dasha&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;$NAME = Daria&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;my name is&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Yes, Daria, I know.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;I want fanta&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;$DRINKS = fanta&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;want&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;How many bottles of fanta do you want?&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>Tkachenko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_NLU&amp;diff=760</id>
		<title>Qubot NLU</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_NLU&amp;diff=760"/>
		<updated>2022-07-06T08:48:36Z</updated>

		<summary type="html">&lt;p&gt;Tkachenko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&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;
==Introduction==&lt;br /&gt;
If you want your bot to be up-to-date and able to process natural text input, then use our innovative technology - Natural Language Processing (NLP). It is NLP that allows your bot to understand the meaning of users' messages and generate appropriate responses. Whether the client wants “two Margherita pizzas and cola” or “cola and cheesecake for two”, the bot will understand and place the correct order.&lt;br /&gt;
&lt;br /&gt;
== How NLP works. General information ==&lt;br /&gt;
The essence of the work of NLP comes down to the analysis of the main components of any sentence - '''entities''' and '''intents'''.&lt;br /&gt;
&lt;br /&gt;
*'''Entities''' are any real world objects, e.g. cola (drink), Ukraine (country), 2022 (number), Dmitry (name). &lt;br /&gt;
&lt;br /&gt;
*'''Intents''' are the client's wishes described as a sentence, for example, I would like a cola (want), how to get to the theater (finding a way), hello (greeting).&lt;br /&gt;
&lt;br /&gt;
To recognize intentions, machine learning methods are used based on prepared phrases as examples for each class. These methods range from a simple bag-of-words to neural networks of fairly complex architecture. Words, n-grams of words, n-grams of letters (combating typos), the presence of a question mark and others are  used as features.&lt;br /&gt;
&lt;br /&gt;
Using combinations of recognized entities and intents, we can confidently state what the client wants and take appropriate actions.&lt;br /&gt;
&lt;br /&gt;
There are some simple examples from a pizzeria bot in the table below:&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;'''Message 👩'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;'''Entities'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;'''Intents'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;'''Reply 💻'''&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Hi&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;Hello&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Hi, I'm Margo&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;$NAME = Margaret&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;greet&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Nice to meet you, Margaret!&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;I would like two Margheritas and a cola&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;$NUMBER = 2&amp;lt;br/&amp;gt;$NAME  = Margherita&amp;lt;br/&amp;gt;$DRINK = cola&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;want&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Would you like to place an order for:&amp;lt;br/&amp;gt;2 Margherita pizzas and one cola?&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;I would like&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;What would you like?&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;I would like to go to Ukraine&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;$COUNTRY = Ukraine&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;want&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;The distance from you to Ukraine is 4768.95 km. It will be most convenient to fly by plane.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The bot gives meaningful answers in every given example despite similar intentions and recognized entities. In the  intent '''greet''', we understand that $NAME is the customer's name, while in the intent '''want''' we understand that $NAME is the name of the pizza.&lt;br /&gt;
&lt;br /&gt;
==Improving bot's intellectual development==&lt;br /&gt;
The general information described earlier is used for the work of NLP in many companies, this is a fairly simple scheme, only it has a drawback - the bot is not able to navigate in the context. This means that in all examples from the first  table there will always be the same answer.&lt;br /&gt;
&lt;br /&gt;
To provide the bot with more intelligence, QuData's NLP uses '''forgettable intents''', as well as a mechanism that saves the chat history with the customer. &lt;br /&gt;
&lt;br /&gt;
'''Forgettable intents''' are intents that happen outside the bot's mainstream and are forgotten at the first normal intent.&lt;br /&gt;
&lt;br /&gt;
This way, the bot can understand the context, as well as process more complex dialog chains, for example, these:&lt;br /&gt;
&lt;br /&gt;
''Forgotten intents are highlighted in yellow.''&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;'''Message 👩'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;'''Entities'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;'''Intents'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;'''Reply 💻'''&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;I want fanta&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;$DRINKS = fanta&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;want&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;How many bottles of fanta do you want?&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;How much does it cost?&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;Fanta costs 20 UAH.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Then 3&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;I added 3 bottles of fanta to the order&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;'''Message 👩'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;'''Entities'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;'''Intents'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;'''Reply 💻'''&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;Hello. My name is Bot. What is your name?&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;My name is Katya&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;$NAME = Katherine&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;[start, my name is]&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;ОIt's nice to meet you, Katherine.&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;Hi&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;Always happy to say hello again.&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;My name is Masha&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;$NAME = Maria&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;my name is&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;I see... So your name is Maria?&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;No.&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;What is your name then?&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;Dasha&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;$NAME = Daria&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;name&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;I see... So your name is Daria?&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;Yes&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;Okay, Daria, I'll remember that.&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;My name is Dasha&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;$NAME = Daria&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;my name is&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Yes, Daria, I know.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;I want fanta&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;$DRINKS = fanta&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;want&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;How many bottles of fanta do you want?&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>Tkachenko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_NLU&amp;diff=759</id>
		<title>Qubot NLU</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_NLU&amp;diff=759"/>
		<updated>2022-07-05T16:23:28Z</updated>

		<summary type="html">&lt;p&gt;Tkachenko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&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;
==Introduction==&lt;br /&gt;
If you want your bot to be up-to-date and able to process natural text input, then use our innovative technology - Natural Language Processing (NLP). It is NLP that allows your bot to understand the meaning of users' messages and generate appropriate responses. Whether the client wants “two Margherita pizzas and cola” or “cola and cheesecake for two”, the bot will understand and place the correct order.&lt;br /&gt;
&lt;br /&gt;
== How NLP works. General information ==&lt;br /&gt;
The essence of the work of NLP comes down to the analysis of the main components of any sentence - '''entities''' and '''intents'''.&lt;br /&gt;
&lt;br /&gt;
*'''Entities''' are any real world objects, e.g. cola (drink), Ukraine (country), 2022 (number), Dmitry (name). &lt;br /&gt;
&lt;br /&gt;
*'''Intents''' are the client's wishes described as a sentence, for example, I would like a cola (want), how to get to the theater (finding a way), hello (greeting).&lt;br /&gt;
&lt;br /&gt;
To recognize intentions, machine learning methods are used based on prepared phrases as examples for each class. These methods range from a simple bag-of-words to neural networks of fairly complex architecture. Words, n-grams of words, n-grams of letters (combating typos), the presence of a question mark and others are  used as features.&lt;br /&gt;
&lt;br /&gt;
Using combinations of recognized entities and intents, we can confidently state what the client wants and take appropriate actions.&lt;br /&gt;
&lt;br /&gt;
There are some simple examples from a pizzeria bot in the table below:&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;'''Message 👩'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;'''Entities'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;'''Intents'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;'''Reply 💻'''&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Hi&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;Hello&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Hi, I'm Margo&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;$NAME = Margaret&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;greet&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Nice to meet you, Margaret!&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;I would like two Margheritas and a cola&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;$NUMBER = 2&amp;lt;br/&amp;gt;$NAME  = Margherita&amp;lt;br/&amp;gt;$DRINK = cola&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;want&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Would you like to place an order for:&amp;lt;br/&amp;gt;2 Margherita pizzas and one cola?&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;I would like&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;What would you like?&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;I would like to go to Ukraine&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;$COUNTRY = Ukraine&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;want&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;The distance from you to Ukraine is 4768.95 km. It will be most convenient to fly by plane.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The bot gives meaningful answers in every given example despite similar intentions and recognized entities. In the  intent '''greet''', we understand that $NAME is the customer's name, while in the intent '''want''' we understand that $NAME is the name of the pizza.&lt;br /&gt;
&lt;br /&gt;
==Improving bot's intellectual development==&lt;br /&gt;
The general information described earlier is used for the work of NLP in many companies, this is a fairly simple scheme, only it has a drawback - the bot is not able to navigate in the context. This means that in all examples from the first  table there will always be the same answer.&lt;br /&gt;
&lt;br /&gt;
To provide the bot with more intelligence, QuData's NLP uses '''forgettable intents''', as well as a mechanism that saves the chat history with the customer. &lt;br /&gt;
&lt;br /&gt;
'''Forgettable intents''' are intents that happen outside the bot's mainstream and are forgotten at the first normal intent.&lt;br /&gt;
&lt;br /&gt;
This way, the bot can understand the context, as well as process more complex dialog chains, for example, these:&lt;br /&gt;
&lt;br /&gt;
''Forgotten intents are highlighted in yellow.''&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;'''Message 👩'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;'''Entities'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;'''Intents'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;'''Reply 💻'''&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;I want fanta&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;$DRINKS = fanta&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;want&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;How many bottles of fanta do you want?&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;How much does it cost?&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;Its price is 20 UAH.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Then 3&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;I added 3 bottles of fanta to the order&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;'''Message 👩'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;'''Entities'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;'''Intents'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;'''Reply 💻'''&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;Hello. My name is Bot. What is your name?&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;My name is Katya&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;$NAME = Katherine&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;[start, my name is]&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;ОIt's nice to meet you, Katherine.&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;Hi&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;Always happy to say hello again.&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;My name is Masha&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;$NAME = Maria&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;my name is&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;I see... So your name is Maria?&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;No.&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;What is your name then?&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;Dasha&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;$NAME = Daria&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;name&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;I see... So your name is Daria?&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;Yes&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;Okay, Daria, I'll remember that.&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;My name is Dasha&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;$NAME = Daria&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;my name is&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Yes, Daria, I know.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;I want fanta&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;$DRINKS = fanta&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;want&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;How many bottles of fanta do you want?&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>Tkachenko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_NLU&amp;diff=758</id>
		<title>Qubot NLU</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_NLU&amp;diff=758"/>
		<updated>2022-07-05T16:06:49Z</updated>

		<summary type="html">&lt;p&gt;Tkachenko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&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;
==Introduction==&lt;br /&gt;
If you want your bot to be up-to-date and able to process natural text input, then use our innovative technology - Natural Language Processing (NLP). It is NLP that allows your bot to understand the meaning of users' messages and generate appropriate responses. Whether the client wants “two Margherita pizzas and cola” or “cola and cheesecake for two”, the bot will understand and place the correct order.&lt;br /&gt;
&lt;br /&gt;
== How NLP works. General information ==&lt;br /&gt;
The essence of the work of NLP comes down to the analysis of the main components of any sentence - '''entities''' and '''intents'''.&lt;br /&gt;
&lt;br /&gt;
*'''Entities''' are any real world objects, e.g. cola (drink), Ukraine (country), 2022 (number), Dmitry (name). &lt;br /&gt;
&lt;br /&gt;
*'''Intents''' are the client's wishes described as a sentence, for example, I would like a cola (want), how to get to the theater (finding a way), hello (greeting).&lt;br /&gt;
&lt;br /&gt;
To recognize intentions, machine learning methods are used based on prepared phrases as examples for each class. These methods range from a simple bag-of-words to neural networks of fairly complex architecture. Words, n-grams of words, n-grams of letters (combating typos), the presence of a question mark and others are  used as features.&lt;br /&gt;
&lt;br /&gt;
Using combinations of recognized entities and intents, we can confidently state what the client wants and take appropriate actions.&lt;br /&gt;
&lt;br /&gt;
There are some simple examples from a pizzeria bot in the table below:&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;'''Message 👩'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;'''Entities'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;'''Intents'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;'''Reply 💻'''&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Hi&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;Hello&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Hi, I'm Margo&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;$NAME = Margaret&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;greet&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Nice to meet you, Margaret!&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;I would like two Margheritas and a cola&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;$NUMBER = 2&amp;lt;br/&amp;gt;$NAME  = Margherita&amp;lt;br/&amp;gt;$DRINK = cola&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;want&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Would you like to place an order for:&amp;lt;br/&amp;gt;2 Margherita pizzas and one cola?&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;I would like&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;What would you like?&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;I would like to go to Ukraine&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;$COUNTRY = Ukraine&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;want&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;The distance from you to Ukraine is 4768.95 km. It will be most convenient to fly by plane.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The bot gives meaningful answers in every given example despite similar intentions and recognized entities. In the  intent '''greet''', we understand that $NAME is the customer's name, while in the intent '''want''' we understand that $NAME is the name of the pizza.&lt;br /&gt;
&lt;br /&gt;
==Improving bot's intellectual development==&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;'''Message 👩'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;'''Entities'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;'''Intents'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;'''Reply 💻'''&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;I want fanta&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;$DRINKS = fanta&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;want&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;How many bottles of fanta do you want?&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;How much does it cost?&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;Its price is 20 UAH.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Then 3&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;I added 3 bottles of fanta to the order&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;'''Message 👩'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;'''Entities'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;'''Intents'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;'''Reply 💻'''&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;Hello. My name is Bot. What is your name?&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;My name is Katya&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;$NAME = Katherine&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;[start, my name is]&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;ОIt's nice to meet you, Katherine.&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;Hi&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;Always happy to say hello again.&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;My name is Masha&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;$NAME = Maria&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;my name is&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;I see... So your name is Maria?&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;No.&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;What is your name then?&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;Dasha&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;$NAME = Daria&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;name&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;I see... So your name is Daria?&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;Yes&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;Okay, Daria, I'll remember that.&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;My name is Dasha&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;$NAME = Daria&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;my name is&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Yes, Daria, I know.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;I want fanta&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;$DRINKS = fanta&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;want&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;How many bottles of fanta do you want?&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>Tkachenko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_NLU&amp;diff=757</id>
		<title>Qubot NLU</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_NLU&amp;diff=757"/>
		<updated>2022-07-05T15:08:24Z</updated>

		<summary type="html">&lt;p&gt;Tkachenko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&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;
==Introduction==&lt;br /&gt;
If you want your bot to be up-to-date and able to process natural text input, then use our innovative technology - Natural Language Processing (NLP). It is NLP that allows your bot to understand the meaning of users' messages and generate appropriate responses. Whether the client wants “two Margherita pizzas and cola” or “cola and cheesecake for two”, the bot will understand and place the correct order.&lt;br /&gt;
&lt;br /&gt;
== How NLP works. General information ==&lt;br /&gt;
The essence of the work of NLP comes down to the analysis of the main components of any sentence - '''entities''' and '''intents'''.&lt;br /&gt;
&lt;br /&gt;
*'''Entities''' are any real world objects, e.g. cola (drink), Ukraine (country), 2022 (number), Dmitry (name). &lt;br /&gt;
&lt;br /&gt;
*'''Intents''' are the client's wishes described as a sentence, for example, I would like a cola (want), how to get to the theater (finding a way), hello (greeting).&lt;br /&gt;
&lt;br /&gt;
To recognize intentions, machine learning methods are used based on prepared phrases as examples for each class. These methods range from a simple bag-of-words to neural networks of fairly complex architecture. Words, n-grams of words, n-grams of letters (combating typos), the presence of a question mark and others are  used as features.&lt;br /&gt;
&lt;br /&gt;
Using combinations of recognized entities and intents, we can confidently state what the client wants and take appropriate actions.&lt;br /&gt;
&lt;br /&gt;
There are some simple examples from a pizzeria bot in the table below:&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;'''Message 👩'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;'''Entities'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;'''Intents'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;'''Reply 💻'''&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Hi&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;Hello&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Hi, I'm Margo&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;$NAME = Margaret&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;greet&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Nice to meet you, Margaret!&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;I would like two Margheritas and a cola&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;$NUMBER = 2&amp;lt;br/&amp;gt;$NAME  = Margherita&amp;lt;br/&amp;gt;$DRINK = cola&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;want&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Would you like to place an order for:&amp;lt;br/&amp;gt;2 Margherita pizzas and one cola?&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;I would like&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;What would you like?&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;I would like to go to Ukraine&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;$COUNTRY = Ukraine&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;want&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;The distance from you to Ukraine is 4768.95 km. It will be most convenient to fly by plane.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The bot gives meaningful answers in every given example despite similar intentions and recognized entities. В случае намерения '''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>Tkachenko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_NLU&amp;diff=756</id>
		<title>Qubot NLU</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_NLU&amp;diff=756"/>
		<updated>2022-07-05T14:24:14Z</updated>

		<summary type="html">&lt;p&gt;Tkachenko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&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;
==Introduction==&lt;br /&gt;
If you want your bot to be up-to-date and able to process natural text input, then use our innovative technology - Natural Language Processing (NLP). It is NLP that allows your bot to understand the meaning of users' messages and generate appropriate responses. Whether the client wants “two Margherita pizzas and cola” or “cola and cheesecake for two”, the bot will understand and place the correct order.&lt;br /&gt;
&lt;br /&gt;
== How NLP works. General information ==&lt;br /&gt;
The essence of the work of NLP comes down to the analysis of the main components of any sentence - '''entities''' and '''intents'''.&lt;br /&gt;
&lt;br /&gt;
*'''Entities''' are any real world objects, e.g. cola (drink), Ukraine (country), 2022 (number), Dmitry (name). &lt;br /&gt;
&lt;br /&gt;
*'''Intents''' are the client's wishes described as a sentence, for example, I would like a cola (want), how to get to the theater (finding a way), hello (greeting).&lt;br /&gt;
&lt;br /&gt;
To recognize intentions, machine learning methods are used based on prepared phrases as examples for each class. These methods range from a simple bag-of-words to neural networks of fairly complex architecture. Words, n-grams of words, n-grams of letters (combating typos), the presence of a question mark and others are  used as features.&lt;br /&gt;
&lt;br /&gt;
Using combinations of recognized entities and intents, we can confidently state what the client wants and take appropriate actions.&lt;br /&gt;
&lt;br /&gt;
There are some simple examples from a pizzeria bot in the table below:&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;'''Message 👩'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;'''Entities'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;'''Intents'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;'''Reply 💻'''&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Hi&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;Hello&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Hi, I'm Margo&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;$NAME = Margaret&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;greet&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Nice to meet you, Margaret!&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;I would like two Margheritas and a cola&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;$NUMBER = 2&amp;lt;br/&amp;gt;$NAME  = Margherita&amp;lt;br/&amp;gt;$DRINK = cola&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;want&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Would you like to place an order for:&amp;lt;br/&amp;gt;2 Margherita pizzas and one cola?&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;I would like&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;What would you like?&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;I would like to go to Ukraine&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;$COUNTRY = Ukraine&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;want&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;The distance from you to Ukraine is 4768.95 km. It will be most convenient to fly by plane.&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>Tkachenko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_NLU&amp;diff=755</id>
		<title>Qubot NLU</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_NLU&amp;diff=755"/>
		<updated>2022-07-05T12:56:30Z</updated>

		<summary type="html">&lt;p&gt;Tkachenko: Created page with &amp;quot;&amp;lt;span id=&amp;quot;qubot-nlu&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; {{TOCright}}  ==Introduction== If you want your bot to be up-to-date and able to process natural text input, then use our innovative technology -...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&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;
==Introduction==&lt;br /&gt;
If you want your bot to be up-to-date and able to process natural text input, then use our innovative technology - Natural Language Processing (NLP). It is NLP that allows your bot to understand the meaning of users' messages and generate appropriate responses. Whether the client wants “two Margherita pizzas and cola” or “cola and cheesecake for two”, the bot will understand and place the correct order.&lt;br /&gt;
&lt;br /&gt;
== How NLP works. General information ==&lt;br /&gt;
The essence of the work of NLP comes down to the analysis of the main components of any sentence - '''entities''' and '''intents'''.&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>Tkachenko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Script&amp;diff=745</id>
		<title>Qubot Script</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_Script&amp;diff=745"/>
		<updated>2022-07-01T17:04:52Z</updated>

		<summary type="html">&lt;p&gt;Tkachenko: &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''''' - is a programming language used to perform logical and mathematical operations while solving bot tasks&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;variable-slot-declaration&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Slots ==&lt;br /&gt;
&lt;br /&gt;
'''Slot''' - is a variable whose value is available in all states of the bot. Also, the value of the slot is saved if the bot is closed and then the work is continued after a while.&lt;br /&gt;
&lt;br /&gt;
A slot is declared for the first time when values are assigned to it. &amp;lt;br&amp;gt; For example:&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 slot named '''a''' is declared and the value '''7''' is assigned to it&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;slot-types&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Local variables ==&lt;br /&gt;
&lt;br /&gt;
Unlike slots, local variables are stored only within the script where they are declared. &amp;lt;br&amp;gt;&lt;br /&gt;
The declaration is made by adding the keyword '''local''' before the name:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // local variable&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If a local variable is declared inside curly braces '''{}''', then its value is only available there:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // local variable of the current script&lt;br /&gt;
&lt;br /&gt;
if (b == 8)&lt;br /&gt;
{&lt;br /&gt;
   local c = 9 // local variable of 'if' statement block&lt;br /&gt;
   print(c)    // will output 9&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(b)       // will output 8&lt;br /&gt;
print(c)       // will give an error, because the variable 'с' is unavailable here&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;slot-types&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Variable types ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sInt = 7                             // Integer&lt;br /&gt;
sFloat = 7.3                         // Float &lt;br /&gt;
sStr = &amp;quot;hello&amp;quot;                       // String&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;, sStr]       // Array&lt;br /&gt;
sDic = { n: 1, s: &amp;quot;Wine&amp;quot;  }          // Dictionary&lt;br /&gt;
sBool = true                         // Boolean&lt;br /&gt;
sRegExp = /[abc]/                    // Regular expression&lt;br /&gt;
sNone = none                         // Undefined value&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;logical-operations&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Logical operations ==&lt;br /&gt;
&lt;br /&gt;
* '''and''' - logical  ‘AND’&lt;br /&gt;
* '''or''' - logical ‘OR’&lt;br /&gt;
* '''not''' - negation ‘NO’&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For example:&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;arithmetic-operations&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Arithmetic operations ==&lt;br /&gt;
&lt;br /&gt;
* '''+''' - addition&lt;br /&gt;
* '''-''' - subtraction&lt;br /&gt;
* '''*''' - multiplication&lt;br /&gt;
* '''/''' - division&lt;br /&gt;
&lt;br /&gt;
For example:&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;
== Comments ==&lt;br /&gt;
&lt;br /&gt;
Comments are used to document script fragments.&lt;br /&gt;
They can be multi-line and single-line:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Example of&lt;br /&gt;
    multi-line&lt;br /&gt;
        comment&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
a = 2253 // example of single-line comment&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Python style comments are also allowed:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
a = 2253 # example of single-line comment&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;working-with-arrays&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;working-with-dictionary-object&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Working with a dictionary (object) ==&lt;br /&gt;
&lt;br /&gt;
Dictionary declaration:&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;
Accessing dictionary values:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = dic.n             // access to field named &amp;quot;n&amp;quot; through dot  &lt;br /&gt;
a = dic[&amp;quot;n&amp;quot;]          // access a field named &amp;quot;n&amp;quot; via an access statement&lt;br /&gt;
dic[&amp;quot;food&amp;quot;] = &amp;quot;milk&amp;quot;  // add a key-value pair to a dictionary&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Working with arrays ==&lt;br /&gt;
&lt;br /&gt;
Array declaration:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [1,2,3]         // create an array with three elements with values 1,2,3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Accessing array elements:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;first  = arr[0]       // get the first element of array&lt;br /&gt;
last   = arr[-1]      // get the last element of an array&lt;br /&gt;
last   = arr[-2]      // get the penultimate element of an array&lt;br /&gt;
arr[0] = 7            // change the value of the first element&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Array Functions:&lt;br /&gt;
&lt;br /&gt;
'''''push(val1,val2...)''''' - add elements with values '''val1, val2...''' to the end of the array&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr.push(4) // add the value '4' to the end of the array&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''unshift(val1,val2...)''''' - add elements with values '''val1, val2...''' to the beginning of the array&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr.unshift(0) // add the value '0' to the beginning&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''pop()''''' - remove the last element of an array and return its value&lt;br /&gt;
&lt;br /&gt;
'''''shift()''''' - remove the first element of an array and return its value&lt;br /&gt;
&lt;br /&gt;
'''''slice(start,end)''''' - return a part of the array starting from the position '''start''' and if the variable '''end'''is specified, then up to it &lt;br /&gt;
&lt;br /&gt;
'''''splice(start, deleteCount)''''' - delete '''deleteCount''' elements from the position '''start'''&lt;br /&gt;
&lt;br /&gt;
'''''clear()''''' - clear the array&lt;br /&gt;
&lt;br /&gt;
Dictionary array functions:&lt;br /&gt;
&lt;br /&gt;
'''''find(EXPR)''''' - search for array elements that satisfy the '''EXPR''' condition. Found elements are returned as an array.&amp;lt;br&amp;gt;&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                            // array of three objects with products&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)   // find all objects whose 'price' field is higher than 80 and return them in an array&lt;br /&gt;
print('found $res.length:')       // display the number of found objects&lt;br /&gt;
print(res)                       // display objects that satisfy the condition&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''total(EXPR)''''' - apply the expression '''EXPR''' to each element of the array and sum all the values.&amp;lt;br&amp;gt;&lt;br /&gt;
For example, let's calculate the amount of items in the cart:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                                 // array of three objects with products&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)   // for each element of the array, multiply the price by the quantity and add the result&lt;br /&gt;
print(&amp;quot;To pay: $res UAH&amp;quot;)               // display the cost of goods: &amp;quot;To pay: 680 UAH&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''count(EXPR)''''' - find the number of array elements for which the expression '''EXPR''' is true&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                                 // array of three objects with products&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)    // for each element of the array, multiply the price by the quantity and add the result&lt;br /&gt;
print(&amp;quot;The quantity of goods that is cheaper than 100 UAH: $res&amp;quot;)  // display the number of goods: &amp;quot;The quantity of goods that is cheaper than 100 UAH: 1&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''sort(KEY)''''' - sort array&lt;br /&gt;
&lt;br /&gt;
Only arrays are supported where all values are of the same type: a number or string for sort() and a dictionary for 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] // array of numbers&lt;br /&gt;
str  = [&amp;quot;a&amp;quot;, &amp;quot;hi&amp;quot;, &amp;quot;banana&amp;quot;] // string array&lt;br /&gt;
arr  = [         // array of dictionaries with products&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()        // sort array in ascending order&lt;br /&gt;
 str.sort()        // sort array in ascending order&lt;br /&gt;
 arr.sort(price)   // sort array of objects by key 'price'&lt;br /&gt;
// TODO&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''reverse()''''' - flip array &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
list = [1, 3, 2]  // array &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;working-with-strings&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Working with strings ==&lt;br /&gt;
&lt;br /&gt;
Declaration of string slots:&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;           // using double quotes&lt;br /&gt;
str = 'hello'           // using single quotes&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
String operations:&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' // string addition&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;transition-function&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Substitution of slots in strings:&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;          // instead of $a the value of slot a will be substituted&lt;br /&gt;
print(str)              // will output: &amp;quot;a = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inserting expressions into strings:&lt;br /&gt;
&lt;br /&gt;
Expressions can be inserted into strings by framing them with curly braces:&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;   // evaluate the expression and insert the result into a string&lt;br /&gt;
print(str)              // will output: &amp;quot;2 + 3 = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Shielding special characters '$','{','}' is done by adding a slash '\'&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;   // evaluate the expression and insert the result into a string&lt;br /&gt;
print(str)                       // will output: &amp;quot;price: 4.99$ {sale}&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
String Functions:&lt;br /&gt;
&lt;br /&gt;
'''''length''''' - get string 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           // return 5 - the number of characters in the string &amp;quot;hello&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''substring(start,end)''''' - get a substring starting from position '''start''' up to '''end''' position, not including it&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)  // return the string &amp;quot;server&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''search(pattern)''''' - find the position of the first occurrence of '''pattern''', otherwise return -1. Argument '''pattern''' can be either a string&lt;br /&gt;
or a regular expression:&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')          // return the position of the string 'orange': 6&lt;br /&gt;
res = str.search(/(orange|juice)/)  // return the position of the string 'orange' or 'juice'&lt;br /&gt;
res = str.search('pizza')           // will not find 'pizza' and will return -1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;conditional-operator&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Conditional operator ==&lt;br /&gt;
The '''if''' statement is used to branch the logic depending on the condition&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;
In this example, the condition &amp;lt;code&amp;gt;a &amp;amp;gt; 7&amp;lt;/code&amp;gt;  is checked and if it is true, then the first block of the script is executed, that is surrounded by curly braces, otherwise the block after the keyword '''else''' is executed&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;while-loop&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''While''' loop ==&lt;br /&gt;
&lt;br /&gt;
The loop statement checks the condition and while it is true, executes the code surrounded by curly braces&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;
In this example, the script &amp;lt;code&amp;gt;a = a - 1&amp;lt;/code&amp;gt; will be executed until the value of the slot &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; becomes zero&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;iterator-for&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Iterator '''for''' ==&lt;br /&gt;
&lt;br /&gt;
An iterator is used to loop through all values of an array, or keys from a dictionary&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;
In this example, the loop sequentially iterates through the values of the array and puts them into the temporary variable '''val''',  respectively, for each element of the array, the script  '''print(val)''', surrounded by curly braces, is executed, displaying the value in the debug window&lt;br /&gt;
&lt;br /&gt;
Sometimes it is convenient to have an array index in the loop. For this we add the name of the index variable before the value variable:&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;
To iterate over the keys and values of a dictionary, a similar construction is used:&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;operator-switch&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Switch''' case operator ==&lt;br /&gt;
&lt;br /&gt;
The '''switch''' construct replaces several '''ifs''' at once. It is a more visual way to compare an expression against several options at once.&lt;br /&gt;
It has one or more '''case''' block and optional '''default''' block.&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;
The variable is checked for a strict match to the value to the right of '''case''' and if it matches, then the code is executed until it meets '''break''' operator.&lt;br /&gt;
&lt;br /&gt;
If none of the '''case''' matches, the code to the right of '''default''' is executed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;operator-in&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''In''' operator ==&lt;br /&gt;
&lt;br /&gt;
The '''in''' operator checks whether the value is in an array or is a key in a dictionary.&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;]             // array&lt;br /&gt;
print(&amp;quot;hello&amp;quot; in sArr)               // return true, because the value &amp;quot;hello&amp;quot; is present in the array sArr &lt;br /&gt;
sDic = { price: 100, food: &amp;quot;Wine&amp;quot;}   // dictionary&lt;br /&gt;
print(&amp;quot;food&amp;quot; in sDic)                // return true, because the key &amp;quot;food&amp;quot; is present in the dictionary sDic&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The variable is checked for a strict match to the value to the right of '''case''' and if it matches, then the code is executed until it meets '''break''' operator.&lt;br /&gt;
&lt;br /&gt;
If none of the '''case''' matches, the code to the right of '''default''' is executed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;operator-button&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Button''' operator ==&lt;br /&gt;
&lt;br /&gt;
'''''button(caption){ SCRIPT }'''''&amp;lt;br&amp;gt;&lt;br /&gt;
This operator adds a button to the interface with the text '''caption''' in the current message. After pressing the button, the '''SCRIPT''' logic is executed.&lt;br /&gt;
If '''caption''' is an object, then it must consist of two-letter keys (language identifiers: en, ru,…) with string values in these languages.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
button('click me')      // button text&lt;br /&gt;
{&lt;br /&gt;
    // script that is executed after clicking &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;
When the button is clicked, the script will be executed in the context of local variables at the time the button was added, as well as in the context of the slot values at the moment the button was clicked!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;transition-function&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Transition functions ==&lt;br /&gt;
&lt;br /&gt;
'''''run(state)''''' - execute '''state''' step logic&lt;br /&gt;
&lt;br /&gt;
'''''step(state)''''' - set default transition step to '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''goto(state)''''' - instant jump to '''state''' step&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;content-functions&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Content functions ==&lt;br /&gt;
&lt;br /&gt;
'''''text(obj)''''' - display text in current message. If '''obj''' is a string, then it is output regardless of the current language. If '''obj''' is an object, then it must consist of two-letter keys (language identifiers: en, ru,…) with string values in these languages.&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()''''' - create a new line of images. Every following call to image will be added to this line until images() is called again.&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)''''' - add an image to the current message. If '''url''' is a string, then it is used regardless of the current language. If '''url''' is an object, then it must consist of two-letter keys (language identifiers: en, ru,…) with string values in these languages. The optional parameter '''width''' specifies how much to compress the image as a percentage. &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()''''' - create a new row of buttons. Every following call to button will be added to this line until buttons() is called again. &lt;br /&gt;
&lt;br /&gt;
'''''get_check()''''' - get an array of button values of the check type (1 - pressed, 0 - released)&lt;br /&gt;
&lt;br /&gt;
'''''set_check(list)''''' - set the values of check type buttons from the list array.&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()''''' - get an array of radio button values (1 - pressed, 0 - released). The unit will be one.&lt;br /&gt;
&lt;br /&gt;
'''''set_radio(list)''''' - set the values of radio type buttons from the list array.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;debug-functions&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Debugging functions ==&lt;br /&gt;
&lt;br /&gt;
'''''print(args)''''' - display information in the debug window&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;rounding&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rounding ==&lt;br /&gt;
&lt;br /&gt;
'''''floor(val)''''' - round numbers down:&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)''''' - discard the fractional part:&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)''''' - round numbers up:&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)''''' - round '''val''' to '''num''' numbers after the decimal point:&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;random-numbers&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Random numbers ==&lt;br /&gt;
&lt;br /&gt;
'''''randint(min,max)''''' - return an integer random number in the range [min,max].&lt;br /&gt;
&lt;br /&gt;
'''''random()''''' - return an integer random number in the range [0,1].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;date-and-time&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Date and time ==&lt;br /&gt;
&lt;br /&gt;
'''''date(format)''''' - return the current date and time in the specified format. By default, the '''format''' argument takes the value: '''%d/%m/%Y %H:%M:%S'''&lt;br /&gt;
&lt;br /&gt;
Supported format codes:&lt;br /&gt;
&lt;br /&gt;
* '''%y''' - year without a century ('22')&lt;br /&gt;
* '''%Y''' - year ('2022')&lt;br /&gt;
* '''%m''' - month&lt;br /&gt;
* '''%d''' - day &lt;br /&gt;
* '''%H''' - hours  &lt;br /&gt;
* '''%M''' - minutes &lt;br /&gt;
* '''%S''' - seconds &lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
date()  // 17/05/2022 18:16:31 it means now&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>Tkachenko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=744</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=744"/>
		<updated>2022-07-01T16:53:12Z</updated>

		<summary type="html">&lt;p&gt;Tkachenko: &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;br /&gt;
[[Category:ru]]&lt;/div&gt;</summary>
		<author><name>Tkachenko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=743</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=743"/>
		<updated>2022-07-01T16:40:59Z</updated>

		<summary type="html">&lt;p&gt;Tkachenko: &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;br /&gt;
[[Category:ru]]&lt;/div&gt;</summary>
		<author><name>Tkachenko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Script&amp;diff=742</id>
		<title>Qubot Script</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_Script&amp;diff=742"/>
		<updated>2022-07-01T16:16:41Z</updated>

		<summary type="html">&lt;p&gt;Tkachenko: &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''''' - is a programming language used to perform logical and mathematical operations while solving bot tasks&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;variable-slot-declaration&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Slots ==&lt;br /&gt;
&lt;br /&gt;
'''Slot''' - is a variable whose value is available in all states of the bot. Also, the value of the slot is saved if the bot is closed and then the work is continued after a while.&lt;br /&gt;
&lt;br /&gt;
A slot is declared for the first time when values are assigned to it. &amp;lt;br&amp;gt; For example:&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 slot named '''a''' is declared and the value '''7''' is assigned to it&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;slot-types&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Local variables ==&lt;br /&gt;
&lt;br /&gt;
Unlike slots, local variables are stored only within the script where they are declared. &amp;lt;br&amp;gt;&lt;br /&gt;
The declaration is made by adding the keyword '''local''' before the name:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // local variable&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If a local variable is declared inside curly braces '''{}''', then its value is only available there:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // local variable of the current script&lt;br /&gt;
&lt;br /&gt;
if (b == 8)&lt;br /&gt;
{&lt;br /&gt;
   local c = 9 // local variable of 'if' statement block&lt;br /&gt;
   print(c)    // will output 9&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(b)       // will output 8&lt;br /&gt;
print(c)       // will give an error, because the variable 'с' is unavailable here&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;slot-types&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Variable types ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sInt = 7                             // Integer&lt;br /&gt;
sFloat = 7.3                         // Float &lt;br /&gt;
sStr = &amp;quot;hello&amp;quot;                       // String&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;, sStr]       // Array&lt;br /&gt;
sDic = { n: 1, s: &amp;quot;Wine&amp;quot;  }          // Dictionary&lt;br /&gt;
sBool = true                         // Boolean&lt;br /&gt;
sRegExp = /[abc]/                    // Regular expression&lt;br /&gt;
sNone = none                         // Undefined value&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;logical-operations&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Logical operations ==&lt;br /&gt;
&lt;br /&gt;
* '''and''' - logical  ‘AND’&lt;br /&gt;
* '''or''' - logical ‘OR’&lt;br /&gt;
* '''not''' - negation ‘NO’&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For example:&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;arithmetic-operations&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Arithmetic operations ==&lt;br /&gt;
&lt;br /&gt;
* '''+''' - addition&lt;br /&gt;
* '''-''' - subtraction&lt;br /&gt;
* '''*''' - multiplication&lt;br /&gt;
* '''/''' - division&lt;br /&gt;
&lt;br /&gt;
For example:&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;
== Comments ==&lt;br /&gt;
&lt;br /&gt;
Comments are used to document script fragments.&lt;br /&gt;
They can be multi-line and single-line:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Example of&lt;br /&gt;
    multi-line&lt;br /&gt;
        comment&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
a = 2253 // example of single-line comment&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Python style comments are also allowed:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
a = 2253 # example of single-line comment&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;working-with-arrays&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;working-with-dictionary-object&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Working with a dictionary (object) ==&lt;br /&gt;
&lt;br /&gt;
Dictionary declaration:&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;
Accessing dictionary values:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = dic.n             // access to field named &amp;quot;n&amp;quot; through dot  &lt;br /&gt;
a = dic[&amp;quot;n&amp;quot;]          // access a field named &amp;quot;n&amp;quot; via an access statement&lt;br /&gt;
dic[&amp;quot;food&amp;quot;] = &amp;quot;milk&amp;quot;  // add a key-value pair to a dictionary&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Working with arrays ==&lt;br /&gt;
&lt;br /&gt;
Array declaration:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [1,2,3]         // create an array with three elements with values 1,2,3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Accessing array elements:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;first  = arr[0]       // get the first element of array&lt;br /&gt;
last   = arr[-1]      // get the last element of an array&lt;br /&gt;
last   = arr[-2]      // get the penultimate element of an array&lt;br /&gt;
arr[0] = 7            // change the value of the first element&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Array Functions:&lt;br /&gt;
&lt;br /&gt;
'''''push(val1,val2...)''''' - add elements with values '''val1, val2...''' to the end of the array&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr.push(4) // add the value '4' to the end of the array&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''unshift(val1,val2...)''''' - add elements with values '''val1, val2...''' to the beginning of the array&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr.unshift(0) // add the value '0' to the beginning&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''pop()''''' - remove the last element of an array and return its value&lt;br /&gt;
&lt;br /&gt;
'''''shift()''''' - remove the first element of an array and return its value&lt;br /&gt;
&lt;br /&gt;
'''''slice(start,end)''''' - return a part of the array starting from the position '''start''' and if the variable '''end'''is specified, then up to it &lt;br /&gt;
&lt;br /&gt;
'''''splice(start, deleteCount)''''' - delete '''deleteCount''' elements from the position '''start'''&lt;br /&gt;
&lt;br /&gt;
'''''clear()''''' - clear the array&lt;br /&gt;
&lt;br /&gt;
Dictionary array functions:&lt;br /&gt;
&lt;br /&gt;
'''''find(EXPR)''''' - searche for array elements that satisfy the '''EXPR''' condition. Found elements are returned as an array.&amp;lt;br&amp;gt;&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                            // array of three objects with products&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)   // find all objects whose 'price' field is higher than 80 and return them in an array&lt;br /&gt;
print('found $res.length:')       // display the number of found objects&lt;br /&gt;
print(res)                       // display objects that satisfy the condition&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''total(EXPR)''''' - apply the expression '''EXPR''' to each element of the array and sum all the values.&amp;lt;br&amp;gt;&lt;br /&gt;
For example, let's calculate the amount of items in the cart:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                                 // array of three objects with products&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)   // for each element of the array, multiply the price by the quantity and add the result&lt;br /&gt;
print(&amp;quot;To pay: $res UAH&amp;quot;)               // display the cost of goods: &amp;quot;To pay: 680 UAH&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''count(EXPR)''''' - find the number of array elements for which the expression '''EXPR''' is true&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                                 // array of three objects with products&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)    // for each element of the array, multiply the price by the quantity and add the result&lt;br /&gt;
print(&amp;quot;The quantity of goods that is cheaper than 100 UAH: $res&amp;quot;)  // display the number of goods: &amp;quot;The quantity of goods that is cheaper than 100 UAH: 1&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''sort(KEY)''''' - sort array&lt;br /&gt;
&lt;br /&gt;
Only arrays are supported where all values are of the same type: a number or string for sort() and a dictionary for 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] // array of numbers&lt;br /&gt;
str  = [&amp;quot;a&amp;quot;, &amp;quot;hi&amp;quot;, &amp;quot;banana&amp;quot;] // string array&lt;br /&gt;
arr  = [         // array of dictionaries with products&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()        // sort array in ascending order&lt;br /&gt;
 str.sort()        // sort array in ascending order&lt;br /&gt;
 arr.sort(price)   // sort array of objects by key 'price'&lt;br /&gt;
// TODO&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''reverse()''''' - flip array &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
list = [1, 3, 2]  // array &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;working-with-strings&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Working with strings ==&lt;br /&gt;
&lt;br /&gt;
Declaration of string slots:&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;           // using double quotes&lt;br /&gt;
str = 'hello'           // using single quotes&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
String operations:&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' // string addition&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;transition-function&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Substitution of slots in strings:&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;          // instead of $a the value of slot a will be substituted&lt;br /&gt;
print(str)              // will output: &amp;quot;a = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inserting expressions into strings:&lt;br /&gt;
&lt;br /&gt;
Expressions can be inserted into strings by framing them with curly braces:&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;   // evaluate the expression and insert the result into a string&lt;br /&gt;
print(str)              // will output: &amp;quot;2 + 3 = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Shielding special characters '$','{','}' is done by adding a slash '\'&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;   // evaluate the expression and insert the result into a string&lt;br /&gt;
print(str)                       // will output: &amp;quot;price: 4.99$ {sale}&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
String Functions:&lt;br /&gt;
&lt;br /&gt;
'''''length''''' - get string 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           // return 5 - the number of characters in the string &amp;quot;hello&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''substring(start,end)''''' - get a substring starting from position '''start''' up to '''end''' position, not including it&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)  // return the string &amp;quot;server&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''search(pattern)''''' - find the position of the first occurrence of '''pattern''', otherwise return -1. Argument '''pattern''' can be either a string&lt;br /&gt;
or a regular expression:&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')          // return the position of the string 'orange': 6&lt;br /&gt;
res = str.search(/(orange|juice)/)  // return the position of the string 'orange' or 'juice'&lt;br /&gt;
res = str.search('pizza')           // will not find 'pizza' and will return -1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;conditional-operator&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Conditional operator ==&lt;br /&gt;
The '''if''' statement is used to branch the logic depending on the condition&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;
In this example, the condition &amp;lt;code&amp;gt;a &amp;amp;gt; 7&amp;lt;/code&amp;gt;  is checked and if it is true, then the first block of the script is executed, that is surrounded by curly braces, otherwise the block after the keyword '''else''' is executed&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;while-loop&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''While''' loop ==&lt;br /&gt;
&lt;br /&gt;
The loop statement checks the condition and while it is true, executes the code surrounded by curly braces&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;
In this example, the script &amp;lt;code&amp;gt;a = a - 1&amp;lt;/code&amp;gt; will be executed until the value of the slot &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; becomes zero&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;iterator-for&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Iterator '''for''' ==&lt;br /&gt;
&lt;br /&gt;
An iterator is used to loop through all values of an array, or keys from a dictionary&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;
In this example, the loop sequentially iterates through the values of the array and puts them into the temporary variable '''val''',  respectively, for each element of the array, the script  '''print(val)''', surrounded by curly braces, is executed, displaying the value in the debug window&lt;br /&gt;
&lt;br /&gt;
Sometimes it is convenient to have an array index in the loop. For this we add the name of the index variable before the value variable:&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;
To iterate over the keys and values of a dictionary, a similar construction is used:&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;operator-switch&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Switch''' case operator ==&lt;br /&gt;
&lt;br /&gt;
The '''switch''' construct replaces several '''ifs''' at once. It is a more visual way to compare an expression against several options at once.&lt;br /&gt;
It has one or more '''case''' block and optional '''default''' block.&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;
The variable is checked for a strict match to the value to the right of '''case''' and if it matches, then the code is executed until it meets '''break''' operator.&lt;br /&gt;
&lt;br /&gt;
If none of the '''case''' matches, the code to the right of '''default''' is executed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;operator-in&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''In''' operator ==&lt;br /&gt;
&lt;br /&gt;
The '''in''' operator checks whether the value is in an array or is a key in a dictionary.&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;]             // array&lt;br /&gt;
print(&amp;quot;hello&amp;quot; in sArr)               // return true, because the value &amp;quot;hello&amp;quot; is present in the array sArr &lt;br /&gt;
sDic = { price: 100, food: &amp;quot;Wine&amp;quot;}   // dictionary&lt;br /&gt;
print(&amp;quot;food&amp;quot; in sDic)                // return true, because the key &amp;quot;food&amp;quot; is present in the dictionary 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>Tkachenko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Script&amp;diff=723</id>
		<title>Qubot Script</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_Script&amp;diff=723"/>
		<updated>2022-07-01T15:14:27Z</updated>

		<summary type="html">&lt;p&gt;Tkachenko: &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''''' - is a programming language used to perform logical and mathematical operations while solving bot tasks&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;variable-slot-declaration&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Slots ==&lt;br /&gt;
&lt;br /&gt;
'''Slot''' - is a variable whose value is available in all states of the bot. Also, the value of the slot is saved if the bot is closed and then the work is continued after a while.&lt;br /&gt;
&lt;br /&gt;
A slot is declared for the first time when values are assigned to it. &amp;lt;br&amp;gt; For example:&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 slot named '''a''' is declared and the value '''7''' is assigned to it&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;slot-types&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Local variables ==&lt;br /&gt;
&lt;br /&gt;
Unlike slots, local variables are stored only within the script where they are declared. &amp;lt;br&amp;gt;&lt;br /&gt;
The declaration is made by adding the keyword '''local''' before the name:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // local variable&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If a local variable is declared inside curly braces '''{}''', then its value is only available there:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // local variable of the current script&lt;br /&gt;
&lt;br /&gt;
if (b == 8)&lt;br /&gt;
{&lt;br /&gt;
   local c = 9 // local variable of 'if' statement block&lt;br /&gt;
   print(c)    // will output 9&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(b)       // will output 8&lt;br /&gt;
print(c)       // will give an error, because the variable 'с' is unavailable here&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;slot-types&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Variable types ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sInt = 7                             // Integer&lt;br /&gt;
sFloat = 7.3                         // Float &lt;br /&gt;
sStr = &amp;quot;hello&amp;quot;                       // String&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;, sStr]       // Array&lt;br /&gt;
sDic = { n: 1, s: &amp;quot;Wine&amp;quot;  }          // Dictionary&lt;br /&gt;
sBool = true                         // Boolean&lt;br /&gt;
sRegExp = /[abc]/                    // Regular expression&lt;br /&gt;
sNone = none                         // Undefined value&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;logical-operations&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Logical operations ==&lt;br /&gt;
&lt;br /&gt;
* '''and''' - logical  ‘AND’&lt;br /&gt;
* '''or''' - logical ‘OR’&lt;br /&gt;
* '''not''' - negation ‘NO’&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For example:&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;arithmetic-operations&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Arithmetic operations ==&lt;br /&gt;
&lt;br /&gt;
* '''+''' - addition&lt;br /&gt;
* '''-''' - subtraction&lt;br /&gt;
* '''*''' - multiplication&lt;br /&gt;
* '''/''' - division&lt;br /&gt;
&lt;br /&gt;
For example:&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;
== Comments ==&lt;br /&gt;
&lt;br /&gt;
Comments are used to document script fragments.&lt;br /&gt;
They can be multi-line and single-line:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Example of&lt;br /&gt;
    multi-line&lt;br /&gt;
        comment&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
a = 2253 // example of single-line comment&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Python style comments are also allowed:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
a = 2253 # example of single-line comment&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;working-with-arrays&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;working-with-dictionary-object&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Working with a dictionary (object) ==&lt;br /&gt;
&lt;br /&gt;
Dictionary declaration:&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;
Accessing dictionary values:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = dic.n             // access to field named &amp;quot;n&amp;quot; through dot  &lt;br /&gt;
a = dic[&amp;quot;n&amp;quot;]          // access a field named &amp;quot;n&amp;quot; via an access statement&lt;br /&gt;
dic[&amp;quot;food&amp;quot;] = &amp;quot;milk&amp;quot;  // add a key-value pair to a dictionary&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Working with arrays ==&lt;br /&gt;
&lt;br /&gt;
Array declaration:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [1,2,3]         // create an array with three elements with values 1,2,3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Accessing array elements:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;first  = arr[0]       // get the first element of array&lt;br /&gt;
last   = arr[-1]      // get the last element of an array&lt;br /&gt;
last   = arr[-2]      // get the penultimate element of an array&lt;br /&gt;
arr[0] = 7            // change the value of the first element&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Array Functions:&lt;br /&gt;
&lt;br /&gt;
'''''push(val1,val2...)''''' - add elements with values '''val1, val2...''' to the end of the array&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr.push(4) // add the value '4' to the end of the array&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''unshift(val1,val2...)''''' - add elements with values '''val1, val2...''' to the beginning of the array&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr.unshift(0) // add the value '0' to the beginning&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''pop()''''' - remove the last element of an array and return its value&lt;br /&gt;
&lt;br /&gt;
'''''shift()''''' - remove the first element of an array and return its value&lt;br /&gt;
&lt;br /&gt;
'''''slice(start,end)''''' - return a part of the array starting from the position '''start''' and if the variable '''end'''is specified, then up to it &lt;br /&gt;
&lt;br /&gt;
'''''splice(start, deleteCount)''''' - delete '''deleteCount''' elements from the position '''start'''&lt;br /&gt;
&lt;br /&gt;
'''''clear()''''' - clear the array&lt;br /&gt;
&lt;br /&gt;
Dictionary array functions:&lt;br /&gt;
&lt;br /&gt;
'''''find(EXPR)''''' - searche for array elements that satisfy the '''EXPR''' condition. Found elements are returned as an array.&amp;lt;br&amp;gt;&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                            // array of three objects with products&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)   // find all objects whose 'price' field is higher than 80 and return them in an array&lt;br /&gt;
print('found $res.length:')       // display the number of found objects&lt;br /&gt;
print(res)                       // display objects that satisfy the condition&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''total(EXPR)''''' - apply the expression '''EXPR''' to each element of the array and sum all the values.&amp;lt;br&amp;gt;&lt;br /&gt;
For example, let's calculate the amount of items in the cart:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                                 // array of three objects with products&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)   // for each element of the array, multiply the price by the quantity and add the result&lt;br /&gt;
print(&amp;quot;To pay: $res UAH&amp;quot;)               // display the cost of goods: &amp;quot;To pay: 680 UAH&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''count(EXPR)''''' - find the number of array elements for which the expression '''EXPR''' is true&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                                 // array of three objects with products&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)    // for each element of the array, multiply the price by the quantity and add the result&lt;br /&gt;
print(&amp;quot;The quantity of goods that is cheaper than 100 UAH: $res&amp;quot;)  // display the number of goods: &amp;quot;The quantity of goods that is cheaper than 100 UAH: 1&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''sort(KEY)''''' - sort array&lt;br /&gt;
&lt;br /&gt;
Only arrays are supported where all values are of the same type: a number or string for sort() and a dictionary for 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] // array of numbers&lt;br /&gt;
str  = [&amp;quot;a&amp;quot;, &amp;quot;hi&amp;quot;, &amp;quot;banana&amp;quot;] // string array&lt;br /&gt;
arr  = [         // array of dictionaries with products&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()        // sort array in ascending order&lt;br /&gt;
 str.sort()        // sort array in ascending order&lt;br /&gt;
 arr.sort(price)   // sort array of objects by key 'price'&lt;br /&gt;
// TODO&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''reverse()''''' - flip array &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
list = [1, 3, 2]  // array &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;working-with-strings&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Working with strings ==&lt;br /&gt;
&lt;br /&gt;
Declaration of string slots:&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;           // using double quotes&lt;br /&gt;
str = 'hello'           // using single quotes&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
String operations:&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' // string addition&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;transition-function&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Substitution of slots in strings:&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;          // instead of $a the value of slot a will be substituted&lt;br /&gt;
print(str)              // will output: &amp;quot;a = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inserting expressions into strings:&lt;br /&gt;
&lt;br /&gt;
Expressions can be inserted into strings by framing them with curly braces:&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;   // evaluate the expression and insert the result into a string&lt;br /&gt;
print(str)              // will output: &amp;quot;2 + 3 = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Shielding special characters '$','{','}' is done by adding a slash '\'&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;   // evaluate the expression and insert the result into a string&lt;br /&gt;
print(str)                       // will output: &amp;quot;price: 4.99$ {sale}&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
String Functions:&lt;br /&gt;
&lt;br /&gt;
'''''length''''' - get string 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           // return 5 - the number of characters in the string &amp;quot;hello&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''substring(start,end)''''' - get a substring starting from position '''start''' up to '''end''' position, not including it&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)  // return the string &amp;quot;server&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''search(pattern)''''' - find the position of the first occurrence of '''pattern''', otherwise return -1. Argument '''pattern''' can be either a string&lt;br /&gt;
or a regular expression:&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')          // return the position of the string 'orange': 6&lt;br /&gt;
res = str.search(/(orange|juice)/)  // return the position of the string 'orange' or 'juice'&lt;br /&gt;
res = str.search('pizza')           // will not find 'pizza' and will return -1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;conditional-operator&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Conditional operator ==&lt;br /&gt;
The '''if''' statement is used to branch the logic depending on the condition&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;
In this example, the condition &amp;lt;code&amp;gt;a &amp;amp;gt; 7&amp;lt;/code&amp;gt;  is checked and if it is true, then the first block of the script is executed, that is surrounded by curly braces, otherwise the block after the keyword '''else''' is executed&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;while-loop&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''while''' loop ==&lt;br /&gt;
&lt;br /&gt;
The loop statement checks the condition and while it is true, executes the code surrounded by curly braces&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;
In this example, the script &amp;lt;code&amp;gt;a = a - 1&amp;lt;/code&amp;gt; will be executed until the value of the slot &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; becomes zero&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;iterator-for&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Iterator '''for''' ==&lt;br /&gt;
&lt;br /&gt;
An iterator is used to loop through all values of an array, or keys from a dictionary&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;
In this example, the loop sequentially iterates through the values of the array and puts them into the temporary variable '''val''',  respectively, for each element of the array, the script  '''print(val)''', surrounded by curly braces, is executed, displaying the value in the debug window&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>Tkachenko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Script&amp;diff=692</id>
		<title>Qubot Script</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_Script&amp;diff=692"/>
		<updated>2022-06-30T14:31:35Z</updated>

		<summary type="html">&lt;p&gt;Tkachenko: &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''''' - is a programming language used to perform logical and mathematical operations while solving bot tasks&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;variable-slot-declaration&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Slots ==&lt;br /&gt;
&lt;br /&gt;
'''Slot''' - is a variable whose value is available in all states of the bot. Also, the value of the slot is saved if the bot is closed and then the work is continued after a while.&lt;br /&gt;
&lt;br /&gt;
A slot is declared for the first time when values are assigned to it. &amp;lt;br&amp;gt; For example:&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 slot named '''a''' is declared and the value '''7''' is assigned to it&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;slot-types&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Local variables ==&lt;br /&gt;
&lt;br /&gt;
Unlike slots, local variables are stored only within the script where they are declared. &amp;lt;br&amp;gt;&lt;br /&gt;
The declaration is made by adding the keyword '''local''' before the name:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // local variable&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If a local variable is declared inside curly braces '''{}''', then its value is only available there:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // local variable of the current script&lt;br /&gt;
&lt;br /&gt;
if (b == 8)&lt;br /&gt;
{&lt;br /&gt;
   local c = 9 // local variable of 'if' statement block&lt;br /&gt;
   print(c)    // will output 9&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(b)       // will output 8&lt;br /&gt;
print(c)       // will give an error, because the variable 'с' is unavailable here&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;slot-types&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Variable types ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sInt = 7                             // Integer&lt;br /&gt;
sFloat = 7.3                         // Float &lt;br /&gt;
sStr = &amp;quot;hello&amp;quot;                       // String&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;, sStr]       // Array&lt;br /&gt;
sDic = { n: 1, s: &amp;quot;Wine&amp;quot;  }          // Dictionary&lt;br /&gt;
sBool = true                         // Boolean&lt;br /&gt;
sRegExp = /[abc]/                    // Regular expression&lt;br /&gt;
sNone = none                         // Undefined value&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;logical-operations&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Logical operations ==&lt;br /&gt;
&lt;br /&gt;
* '''and''' - logical  ‘AND’&lt;br /&gt;
* '''or''' - logical ‘OR’&lt;br /&gt;
* '''not''' - negation ‘NO’&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For example:&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;arithmetic-operations&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Arithmetic operations ==&lt;br /&gt;
&lt;br /&gt;
* '''+''' - addition&lt;br /&gt;
* '''-''' - subtraction&lt;br /&gt;
* '''*''' - multiplication&lt;br /&gt;
* '''/''' - division&lt;br /&gt;
&lt;br /&gt;
For example:&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;
== Comments ==&lt;br /&gt;
&lt;br /&gt;
Comments are used to document script fragments.&lt;br /&gt;
They can be multi-line and single-line:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Example of&lt;br /&gt;
    multi-line&lt;br /&gt;
        comment&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
a = 2253 // example of single-line comment&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Python style comments are also allowed:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
a = 2253 # example of single-line comment&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;working-with-arrays&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;working-with-dictionary-object&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Working with a dictionary (object) ==&lt;br /&gt;
&lt;br /&gt;
Dictionary declaration:&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;
Accessing dictionary values:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = dic.n             // access to field named &amp;quot;n&amp;quot; through dot  &lt;br /&gt;
a = dic[&amp;quot;n&amp;quot;]          // access a field named &amp;quot;n&amp;quot; via an access statement&lt;br /&gt;
dic[&amp;quot;food&amp;quot;] = &amp;quot;milk&amp;quot;  // add a key-value pair to a dictionary&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Working with arrays ==&lt;br /&gt;
&lt;br /&gt;
Array declaration:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [1,2,3]         // create an array with three elements with values 1,2,3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Accessing array elements:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;first  = arr[0]       // get the first element of array&lt;br /&gt;
last   = arr[-1]      // get the last element of an array&lt;br /&gt;
last   = arr[-2]      // get the penultimate element of an array&lt;br /&gt;
arr[0] = 7            // change the value of the first element&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Array Functions:&lt;br /&gt;
&lt;br /&gt;
'''''push(val1,val2...)''''' - add elements with values '''val1, val2...''' to the end of the array&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr.push(4) // add the value '4' to the end of the array&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''unshift(val1,val2...)''''' - add elements with values '''val1, val2...''' to the beginning of the array&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr.unshift(0) // add the value '0' to the beginning&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''pop()''''' - remove the last element of an array and return its value&lt;br /&gt;
&lt;br /&gt;
'''''shift()''''' - remove the first element of an array and return its value&lt;br /&gt;
&lt;br /&gt;
'''''slice(start,end)''''' - return a part of the array starting from the position '''start''' and if the variable '''end'''is specified, then up to it &lt;br /&gt;
&lt;br /&gt;
'''''splice(start, deleteCount)''''' - delete '''deleteCount''' elements from the position '''start'''&lt;br /&gt;
&lt;br /&gt;
'''''clear()''''' - clear the array&lt;br /&gt;
&lt;br /&gt;
Dictionary array functions:&lt;br /&gt;
&lt;br /&gt;
'''''find(EXPR)''''' - searche for array elements that satisfy the '''EXPR''' condition. Found elements are returned as an array.&amp;lt;br&amp;gt;&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                            // array of three objects with products&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)   // find all objects whose 'price' field is higher than 80 and return them in an array&lt;br /&gt;
print('found $res.length:')      // display the number of found objects&lt;br /&gt;
print(res)                         // display objects that satisfy the condition&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''total(EXPR)''''' - apply the expression '''EXPR''' to each element of the array and sum all the values.&amp;lt;br&amp;gt;&lt;br /&gt;
For example, let's calculate the amount of items in the cart:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                                 // array of three objects with products&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)   // for each element of the array, multiply the price by the quantity and add the result&lt;br /&gt;
print(&amp;quot;To pay: $res UAH&amp;quot;)               // display the cost of goods: &amp;quot;To pay: 680 UAH&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''count(EXPR)''''' - find the number of array elements for which the expression '''EXPR''' is true&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                                 // array of three objects with products&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)                                            // for each element of the array, multiply the price by the quantity and add the result&lt;br /&gt;
print(&amp;quot;The quantity of goods that is cheaper than 100 UAH: $res&amp;quot;)            // display the number of goods: &amp;quot;The quantity of goods that is cheaper than 100 UAH: 1&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''sort(KEY)''''' - sort array&lt;br /&gt;
&lt;br /&gt;
Only arrays are supported where all values are of the same type: a number or string for sort() and a dictionary for 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] // array of numbers&lt;br /&gt;
str  = [&amp;quot;a&amp;quot;, &amp;quot;hi&amp;quot;, &amp;quot;banana&amp;quot;] // string array&lt;br /&gt;
arr  = [         // array of dictionaries with products&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()        // sort array in ascending order&lt;br /&gt;
 str.sort()        // sort array in ascending order&lt;br /&gt;
 arr.sort(price)   // sort array of objects by key 'price'&lt;br /&gt;
// TODO&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''reverse()''''' - flip array &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
list = [1, 3, 2]  // array &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;working-with-strings&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Working with strings ==&lt;br /&gt;
&lt;br /&gt;
Declaration of string slots:&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;           // using double quotes&lt;br /&gt;
str = 'hello'           // using single quotes&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
String operations:&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' // string addition&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;transition-function&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Substitution of slots in strings:&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;          // instead of $a the value of slot a will be substituted&lt;br /&gt;
print(str)              // will output: &amp;quot;a = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inserting expressions into strings:&lt;br /&gt;
&lt;br /&gt;
Expressions can be inserted into strings by framing them with curly braces:&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;   // evaluate the expression and insert the result into a string&lt;br /&gt;
print(str)              // will output: &amp;quot;2 + 3 = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Shielding special characters '$','{','}' is done by adding a slash '\'&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;   // evaluate the expression and insert the result into a string&lt;br /&gt;
print(str)                       // will output: &amp;quot;price: 4.99$ {sale}&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
String Functions:&lt;br /&gt;
&lt;br /&gt;
'''''length''''' - get string 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           // return 5 - the number of characters in the string &amp;quot;hello&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''substring(start,end)''''' - get a substring starting from position '''start''' up to '''end''' position, not including it&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)  // return the string &amp;quot;server&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''search(pattern)''''' - find the position of the first occurrence of '''pattern''', otherwise return -1. Argument '''pattern''' can be either a string&lt;br /&gt;
or a regular expression:&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')          // return the position of the string 'orange': 6&lt;br /&gt;
res = str.search(/(orange|juice)/)  // return the position of the string 'orange' or 'juice'&lt;br /&gt;
res = str.search('pizza')           // will not find 'pizza' and will return -1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;conditional-operator&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Conditional operator ==&lt;br /&gt;
The '''if''' statement is used to branch the logic depending on the condition&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>Tkachenko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Script&amp;diff=689</id>
		<title>Qubot Script</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_Script&amp;diff=689"/>
		<updated>2022-06-30T12:27:29Z</updated>

		<summary type="html">&lt;p&gt;Tkachenko: &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''''' - is a programming language used to perform logical and mathematical operations while solving bot tasks&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;variable-slot-declaration&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Slots ==&lt;br /&gt;
&lt;br /&gt;
'''Slot''' - is a variable whose value is available in all states of the bot. Also, the value of the slot is saved if the bot is closed and then the work is continued after a while.&lt;br /&gt;
&lt;br /&gt;
A slot is declared for the first time when values are assigned to it. &amp;lt;br&amp;gt; For example:&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 slot named '''a''' is declared and the value '''7''' is assigned to it&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;slot-types&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Local variables ==&lt;br /&gt;
&lt;br /&gt;
Unlike slots, local variables are stored only within the script where they are declared. &amp;lt;br&amp;gt;&lt;br /&gt;
The declaration is made by adding the keyword '''local''' before the name:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // local variable&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If a local variable is declared inside curly braces '''{}''', then its value is only available there:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // local variable of the current script&lt;br /&gt;
&lt;br /&gt;
if (b == 8)&lt;br /&gt;
{&lt;br /&gt;
   local c = 9 // local variable of 'if' statement block&lt;br /&gt;
   print(c)    // will output 9&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(b)       // will output 8&lt;br /&gt;
print(c)       // will give an error, because the variable 'с' is unavailable here&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;slot-types&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Variable types ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sInt = 7                             // Integer&lt;br /&gt;
sFloat = 7.3                         // Float &lt;br /&gt;
sStr = &amp;quot;hello&amp;quot;                       // String&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;, sStr]       // Array&lt;br /&gt;
sDic = { n: 1, s: &amp;quot;Wine&amp;quot;  }          // Dictionary&lt;br /&gt;
sBool = true                         // Boolean&lt;br /&gt;
sRegExp = /[abc]/                    // Regular expression&lt;br /&gt;
sNone = none                         // Undefined value&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;logical-operations&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Logical operations ==&lt;br /&gt;
&lt;br /&gt;
* '''and''' - logical  ‘AND’&lt;br /&gt;
* '''or''' - logical ‘OR’&lt;br /&gt;
* '''not''' - negation ‘NO’&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For example:&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;arithmetic-operations&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Arithmetic operations ==&lt;br /&gt;
&lt;br /&gt;
* '''+''' - addition&lt;br /&gt;
* '''-''' - subtraction&lt;br /&gt;
* '''*''' - multiplication&lt;br /&gt;
* '''/''' - division&lt;br /&gt;
&lt;br /&gt;
For example:&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;
== Comments ==&lt;br /&gt;
&lt;br /&gt;
Comments are used to document script fragments.&lt;br /&gt;
They can be multi-line and single-line:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Example of&lt;br /&gt;
    multi-line&lt;br /&gt;
        comment&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
a = 2253 // example of single-line comment&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Python style comments are also allowed:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
a = 2253 # example of single-line comment&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;working-with-arrays&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;working-with-dictionary-object&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Working with a dictionary (object) ==&lt;br /&gt;
&lt;br /&gt;
Dictionary declaration:&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;
Accessing dictionary values:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = dic.n             // access to field named &amp;quot;n&amp;quot; through dot  &lt;br /&gt;
a = dic[&amp;quot;n&amp;quot;]          // access a field named &amp;quot;n&amp;quot; via an access statement&lt;br /&gt;
dic[&amp;quot;food&amp;quot;] = &amp;quot;milk&amp;quot;  // add a key-value pair to a dictionary&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Working with arrays ==&lt;br /&gt;
&lt;br /&gt;
Array declaration:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [1,2,3]         // create an array with three elements with values 1,2,3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Accessing array elements:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;first  = arr[0]       // get the first element of array&lt;br /&gt;
last   = arr[-1]      // get the last element of an array&lt;br /&gt;
last   = arr[-2]      // get the penultimate element of an array&lt;br /&gt;
arr[0] = 7            // change the value of the first element&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Array Functions:&lt;br /&gt;
&lt;br /&gt;
'''''push(val1,val2...)''''' - add elements with values '''val1, val2...''' to the end of the array&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr.push(4) // add the value '4' to the end of the array&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''unshift(val1,val2...)''''' - add elements with values '''val1, val2...''' to the beginning of the array&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr.unshift(0) // add the value '0' to the beginning&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''pop()''''' - remove the last element of an array and return its value&lt;br /&gt;
&lt;br /&gt;
'''''shift()''''' - remove the first element of an array and return its value&lt;br /&gt;
&lt;br /&gt;
'''''slice(start,end)''''' - return a part of the array starting from the position '''start''' and if the variable '''end'''is specified, then up to it &lt;br /&gt;
&lt;br /&gt;
'''''splice(start, deleteCount)''''' - delete '''deleteCount''' elements from the position '''start'''&lt;br /&gt;
&lt;br /&gt;
'''''clear()''''' - clear the array&lt;br /&gt;
&lt;br /&gt;
Dictionary array functions:&lt;br /&gt;
&lt;br /&gt;
'''''find(EXPR)''''' - searche for array elements that satisfy the '''EXPR''' condition. Found elements are returned as an array.&amp;lt;br&amp;gt;&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                            // array of three objects with products&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)   // find all objects whose 'price' field is higher than 80 and return them in an array&lt;br /&gt;
print('found $res.length:')      // display the number of found objects&lt;br /&gt;
print(res)                         // display objects that satisfy the condition&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''total(EXPR)''''' - apply the expression '''EXPR''' to each element of the array and sum all the values.&amp;lt;br&amp;gt;&lt;br /&gt;
For example, let's calculate the amount of items in the cart:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                                 // array of three objects with products&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)   // for each element of the array, multiply the price by the quantity and add the result&lt;br /&gt;
print(&amp;quot;To pay: $res UAH&amp;quot;)               // display the cost of goods: &amp;quot;To pay: 680 UAH&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''count(EXPR)''''' - find the number of array elements for which the expression '''EXPR''' is true&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                                 // array of three objects with products&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)                                            // for each element of the array, multiply the price by the quantity and add the result&lt;br /&gt;
print(&amp;quot;The quantity of goods that is cheaper than 100 UAH: $res&amp;quot;)            // display the number of goods: &amp;quot;The quantity of goods that is cheaper than 100 UAH: 1&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''sort(KEY)''''' - sort array&lt;br /&gt;
&lt;br /&gt;
Only arrays are supported where all values are of the same type: a number or string for sort() and a dictionary for 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] // array of numbers&lt;br /&gt;
str  = [&amp;quot;a&amp;quot;, &amp;quot;hi&amp;quot;, &amp;quot;banana&amp;quot;] // string array&lt;br /&gt;
arr  = [         // array of dictionaries with products&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()        // sort array in ascending order&lt;br /&gt;
 str.sort()        // sort array in ascending order&lt;br /&gt;
 arr.sort(price)   // sort array of objects by key 'price'&lt;br /&gt;
// TODO&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''reverse()''''' - flip array &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
list = [1, 3, 2]  // array &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;working-with-strings&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Working with strings ==&lt;br /&gt;
&lt;br /&gt;
Declaration of string slots:&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;           // using double quotes&lt;br /&gt;
str = 'hello'           // using single quotes&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
String operations:&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' // string addition&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;transition-function&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Substitution of slots in strings:&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;          // instead of $a the value of slot a will be substituted&lt;br /&gt;
print(str)              // will output: &amp;quot;a = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inserting expressions into strings:&lt;br /&gt;
&lt;br /&gt;
Expressions can be inserted into strings by framing them with curly braces:&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;   // evaluate the expression and insert the result into a string&lt;br /&gt;
print(str)              // will output: &amp;quot;2 + 3 = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Shielding special characters '$','{','}' is done by adding a slash '\'&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;   // evaluate the expression and insert the result into a string&lt;br /&gt;
print(str)                       // will output: &amp;quot;price: 4.99$ {sale}&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
String Functions:&lt;br /&gt;
&lt;br /&gt;
'''''length''''' - get string 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           // return 5 - the number of characters in the string &amp;quot;hello&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''substring(start,end)''''' - get a substring starting from position '''start''' up to '''end''' position, not не включая&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>Tkachenko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Script&amp;diff=688</id>
		<title>Qubot Script</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_Script&amp;diff=688"/>
		<updated>2022-06-30T11:56:28Z</updated>

		<summary type="html">&lt;p&gt;Tkachenko: &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''''' - is a programming language used to perform logical and mathematical operations while solving bot tasks&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;variable-slot-declaration&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Slots ==&lt;br /&gt;
&lt;br /&gt;
'''Slot''' - is a variable whose value is available in all states of the bot. Also, the value of the slot is saved if the bot is closed and then the work is continued after a while.&lt;br /&gt;
&lt;br /&gt;
A slot is declared for the first time when values are assigned to it. &amp;lt;br&amp;gt; For example:&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 slot named '''a''' is declared and the value '''7''' is assigned to it&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;slot-types&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Local variables ==&lt;br /&gt;
&lt;br /&gt;
Unlike slots, local variables are stored only within the script where they are declared. &amp;lt;br&amp;gt;&lt;br /&gt;
The declaration is made by adding the keyword '''local''' before the name:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // local variable&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If a local variable is declared inside curly braces '''{}''', then its value is only available there:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // local variable of the current script&lt;br /&gt;
&lt;br /&gt;
if (b == 8)&lt;br /&gt;
{&lt;br /&gt;
   local c = 9 // local variable of 'if' statement block&lt;br /&gt;
   print(c)    // will output 9&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(b)       // will output 8&lt;br /&gt;
print(c)       // will give an error, because the variable 'с' is unavailable here&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;slot-types&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Variable types ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sInt = 7                             // Integer&lt;br /&gt;
sFloat = 7.3                         // Float &lt;br /&gt;
sStr = &amp;quot;hello&amp;quot;                       // String&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;, sStr]       // Array&lt;br /&gt;
sDic = { n: 1, s: &amp;quot;Wine&amp;quot;  }          // Dictionary&lt;br /&gt;
sBool = true                         // Boolean&lt;br /&gt;
sRegExp = /[abc]/                    // Regular expression&lt;br /&gt;
sNone = none                         // Undefined value&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;logical-operations&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Logical operations ==&lt;br /&gt;
&lt;br /&gt;
* '''and''' - logical  ‘AND’&lt;br /&gt;
* '''or''' - logical ‘OR’&lt;br /&gt;
* '''not''' - negation ‘NO’&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For example:&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;arithmetic-operations&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Arithmetic operations ==&lt;br /&gt;
&lt;br /&gt;
* '''+''' - addition&lt;br /&gt;
* '''-''' - subtraction&lt;br /&gt;
* '''*''' - multiplication&lt;br /&gt;
* '''/''' - division&lt;br /&gt;
&lt;br /&gt;
For example:&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;
== Comments ==&lt;br /&gt;
&lt;br /&gt;
Comments are used to document script fragments.&lt;br /&gt;
They can be multi-line and single-line:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Example of&lt;br /&gt;
    multi-line&lt;br /&gt;
        comment&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
a = 2253 // example of single-line comment&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Python style comments are also allowed:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
a = 2253 # example of single-line comment&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;working-with-arrays&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;working-with-dictionary-object&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Working with a dictionary (object) ==&lt;br /&gt;
&lt;br /&gt;
Dictionary declaration:&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;
Accessing dictionary values:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = dic.n             // access to field named &amp;quot;n&amp;quot; through dot  &lt;br /&gt;
a = dic[&amp;quot;n&amp;quot;]          // access a field named &amp;quot;n&amp;quot; via an access statement&lt;br /&gt;
dic[&amp;quot;food&amp;quot;] = &amp;quot;milk&amp;quot;  // add a key-value pair to a dictionary&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Working with arrays ==&lt;br /&gt;
&lt;br /&gt;
Array declaration:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [1,2,3]         // create an array with three elements with values 1,2,3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Accessing array elements:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;first  = arr[0]       // get the first element of array&lt;br /&gt;
last   = arr[-1]      // get the last element of an array&lt;br /&gt;
last   = arr[-2]      // get the penultimate element of an array&lt;br /&gt;
arr[0] = 7            // change the value of the first element&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Array Functions:&lt;br /&gt;
&lt;br /&gt;
'''''push(val1,val2...)''''' - add elements with values '''val1, val2...''' to the end of the array&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr.push(4) // add the value '4' to the end of the array&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''unshift(val1,val2...)''''' - add elements with values '''val1, val2...''' to the beginning of the array&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr.unshift(0) // add the value '0' to the beginning&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''pop()''''' - remove the last element of an array and return its value&lt;br /&gt;
&lt;br /&gt;
'''''shift()''''' - remove the first element of an array and return its value&lt;br /&gt;
&lt;br /&gt;
'''''slice(start,end)''''' - return a part of the array starting from the position '''start''' and if the variable '''end'''is specified, then up to it &lt;br /&gt;
&lt;br /&gt;
'''''splice(start, deleteCount)''''' - delete '''deleteCount''' elements from the position '''start'''&lt;br /&gt;
&lt;br /&gt;
'''''clear()''''' - clear the array&lt;br /&gt;
&lt;br /&gt;
Dictionary array functions:&lt;br /&gt;
&lt;br /&gt;
'''''find(EXPR)''''' - searche for array elements that satisfy the '''EXPR''' condition. Found elements are returned as an array.&amp;lt;br&amp;gt;&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                            // array of three objects with products&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)   // find all objects whose 'price' field is higher than 80 and return them in an array&lt;br /&gt;
print('найдено $res.length:')      // display the number of found objects&lt;br /&gt;
print(res)                         // display objects that satisfy the condition&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''total(EXPR)''''' - apply the expression '''EXPR''' to each element of the array and sum all the values.&amp;lt;br&amp;gt;&lt;br /&gt;
For example, let's calculate the amount of items in the cart:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                                 // array of three objects with products&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)   // for each element of the array, multiply the price by the quantity and add the result&lt;br /&gt;
print(&amp;quot;To pay: $res UAH&amp;quot;)               // display the cost of goods: &amp;quot;To pay: 680 UAH&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''count(EXPR)''''' - find the number of array elements for which the expression '''EXPR''' is true&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                                 // array of three objects with products&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)                                            // for each element of the array, multiply the price by the quantity and add the result&lt;br /&gt;
print(&amp;quot;The quantity of goods that is cheaper than 100 UAH: $res&amp;quot;)            // display the number of goods: &amp;quot;The quantity of goods that is cheaper than 100 UAH: 1&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''sort(KEY)''''' - sort array&lt;br /&gt;
&lt;br /&gt;
Only arrays are supported where all values are of the same type: a number or string for sort() and a dictionary for 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] // array of numbers&lt;br /&gt;
str  = [&amp;quot;a&amp;quot;, &amp;quot;hi&amp;quot;, &amp;quot;banana&amp;quot;] // string array&lt;br /&gt;
arr  = [         // array of dictionaries with products&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()        // sort array in ascending order&lt;br /&gt;
 str.sort()        // sort array in ascending order&lt;br /&gt;
 arr.sort(price)   // sort array of objects by key 'price'&lt;br /&gt;
// TODO&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''reverse()''''' - flip array &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
list = [1, 3, 2]  // array &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;working-with-strings&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Working with strings ==&lt;br /&gt;
&lt;br /&gt;
Declaration of string slots:&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;           // using double quotes&lt;br /&gt;
str = 'hello'           // using single quotes&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
String operations:&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' // string addition&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;transition-function&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Substitution of slots in strings:&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;          // instead of $a the value of slot a will be substituted&lt;br /&gt;
print(str)              // will output: &amp;quot;a = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inserting expressions into strings:&lt;br /&gt;
&lt;br /&gt;
Expressions can be inserted into strings by framing them with curly braces:&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;   // evaluate the expression and insert the result into a string&lt;br /&gt;
print(str)              // will output: &amp;quot;2 + 3 = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Shielding special characters '$','{','}' is done by adding a slash '\'&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;   // evaluate the expression and insert the result into a string&lt;br /&gt;
print(str)                       // will output: &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>Tkachenko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Script&amp;diff=687</id>
		<title>Qubot Script</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_Script&amp;diff=687"/>
		<updated>2022-06-30T11:16:32Z</updated>

		<summary type="html">&lt;p&gt;Tkachenko: &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''''' - is a programming language used to perform logical and mathematical operations while solving bot tasks&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;variable-slot-declaration&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Slots ==&lt;br /&gt;
&lt;br /&gt;
'''Slot''' - is a variable whose value is available in all states of the bot. Also, the value of the slot is saved if the bot is closed and then the work is continued after a while.&lt;br /&gt;
&lt;br /&gt;
A slot is declared for the first time when values are assigned to it. &amp;lt;br&amp;gt; For example:&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 slot named '''a''' is declared and the value '''7''' is assigned to it&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;slot-types&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Local variables ==&lt;br /&gt;
&lt;br /&gt;
Unlike slots, local variables are stored only within the script where they are declared. &amp;lt;br&amp;gt;&lt;br /&gt;
The declaration is made by adding the keyword '''local''' before the name:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // local variable&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If a local variable is declared inside curly braces '''{}''', then its value is only available there:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // local variable of the current script&lt;br /&gt;
&lt;br /&gt;
if (b == 8)&lt;br /&gt;
{&lt;br /&gt;
   local c = 9 // local variable of 'if' statement block&lt;br /&gt;
   print(c)    // will output 9&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(b)       // will output 8&lt;br /&gt;
print(c)       // will give an error, because the variable 'с' is unavailable here&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;slot-types&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Variable types ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sInt = 7                             // Integer&lt;br /&gt;
sFloat = 7.3                         // Float &lt;br /&gt;
sStr = &amp;quot;hello&amp;quot;                       // String&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;, sStr]       // Array&lt;br /&gt;
sDic = { n: 1, s: &amp;quot;Wine&amp;quot;  }          // Dictionary&lt;br /&gt;
sBool = true                         // Boolean&lt;br /&gt;
sRegExp = /[abc]/                    // Regular expression&lt;br /&gt;
sNone = none                         // Undefined value&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;logical-operations&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Logical operations ==&lt;br /&gt;
&lt;br /&gt;
* '''and''' - logical  ‘AND’&lt;br /&gt;
* '''or''' - logical ‘OR’&lt;br /&gt;
* '''not''' - negation ‘NO’&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For example:&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;arithmetic-operations&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Arithmetic operations ==&lt;br /&gt;
&lt;br /&gt;
* '''+''' - addition&lt;br /&gt;
* '''-''' - subtraction&lt;br /&gt;
* '''*''' - multiplication&lt;br /&gt;
* '''/''' - division&lt;br /&gt;
&lt;br /&gt;
For example:&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;
== Comments ==&lt;br /&gt;
&lt;br /&gt;
Comments are used to document script fragments.&lt;br /&gt;
They can be multi-line and single-line:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Example of&lt;br /&gt;
    multi-line&lt;br /&gt;
        comment&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
a = 2253 // example of single-line comment&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Python style comments are also allowed:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
a = 2253 # example of single-line comment&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;working-with-arrays&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;working-with-dictionary-object&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Working with a dictionary (object) ==&lt;br /&gt;
&lt;br /&gt;
Dictionary declaration:&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;
Accessing dictionary values:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = dic.n             // access to field named &amp;quot;n&amp;quot; through dot  &lt;br /&gt;
a = dic[&amp;quot;n&amp;quot;]          // accessing a field named &amp;quot;n&amp;quot; via an access statement&lt;br /&gt;
dic[&amp;quot;food&amp;quot;] = &amp;quot;milk&amp;quot;  // adding a key-value pair to a dictionary&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Working with arrays ==&lt;br /&gt;
&lt;br /&gt;
Array declaration:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [1,2,3]         // creates an array with three elements with values 1,2,3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Accessing array elements:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;first  = arr[0]       // get the first element of array&lt;br /&gt;
last   = arr[-1]      // get the last element of an array&lt;br /&gt;
last   = arr[-2]      // get the penultimate element of an array&lt;br /&gt;
arr[0] = 7            // change the value of the first element&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Array Functions:&lt;br /&gt;
&lt;br /&gt;
'''''push(val1,val2...)''''' - add elements with values '''val1, val2...''' to the end of the array&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr.push(4) // add the value '4' to the end of the array&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''unshift(val1,val2...)''''' - add elements with values '''val1, val2...''' to the beginning of the array&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr.unshift(0) // add the value '0' to the beginning&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''pop()''''' - remove the last element of an array and return its value&lt;br /&gt;
&lt;br /&gt;
'''''shift()''''' - remove the first element of an array and return its value&lt;br /&gt;
&lt;br /&gt;
'''''slice(start,end)''''' - returns a part of the array starting from the position '''start''' and if the variable '''end'''is specified, then up to it &lt;br /&gt;
&lt;br /&gt;
'''''splice(start, deleteCount)''''' - deletes '''deleteCount''' elements from the position '''start'''&lt;br /&gt;
&lt;br /&gt;
'''''clear()''''' - clear the array&lt;br /&gt;
&lt;br /&gt;
Dictionary array functions:&lt;br /&gt;
&lt;br /&gt;
'''''find(EXPR)''''' - searches for array elements that satisfy the '''EXPR''' condition. Found elements are returned as an array.&amp;lt;br&amp;gt;&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                            // array of three objects with products&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)   // find all objects whose 'price' field is higher than 80 and return them in an array&lt;br /&gt;
print('найдено $res.length:')      // will display the number of found objects&lt;br /&gt;
print(res)                         // will display objects that satisfy the condition&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''total(EXPR)''''' - apply the expression '''EXPR''' to each element of the array and sum all the values.&amp;lt;br&amp;gt;&lt;br /&gt;
For example, let's calculate the amount of items in the cart:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                                 // array of three objects with products&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)   // for each element of the array, multiply the price by the quantity and add the result&lt;br /&gt;
print(&amp;quot;To pay: $res UAH&amp;quot;)               // will display the cost of goods: &amp;quot;To pay: 680 UAH&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''count(EXPR)''''' - find the number of array elements for which the expression '''EXPR''' is true&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                                 // array of three objects with products&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)                                            // for each element of the array, multiply the price by the quantity and add the result&lt;br /&gt;
print(&amp;quot;The quantity of goods that is cheaper than 100 UAH: $res&amp;quot;)            // will display the number of goods: &amp;quot;The quantity of goods that is cheaper than 100 UAH: 1&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''sort(KEY)''''' - sort array&lt;br /&gt;
&lt;br /&gt;
Only arrays are supported where all values are of the same type: a number or string for sort() and a dictionary for 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] // array of numbers&lt;br /&gt;
str  = [&amp;quot;a&amp;quot;, &amp;quot;hi&amp;quot;, &amp;quot;banana&amp;quot;] // string array&lt;br /&gt;
arr  = [         // array of dictionaries with products&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()        // sort array in ascending order&lt;br /&gt;
 str.sort()        // sort array in ascending order&lt;br /&gt;
 arr.sort(price)   // sort array of objects by key 'price'&lt;br /&gt;
// TODO&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''reverse()''''' - flip array &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
list = [1, 3, 2]  // array &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;
== Working with strings ==&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>Tkachenko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Script&amp;diff=686</id>
		<title>Qubot Script</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_Script&amp;diff=686"/>
		<updated>2022-06-30T10:57:04Z</updated>

		<summary type="html">&lt;p&gt;Tkachenko: &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''''' - is a programming language used to perform logical and mathematical operations while solving bot tasks&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;объявление-слотов-переменных&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Slots ==&lt;br /&gt;
&lt;br /&gt;
'''Slot''' - is a variable whose value is available in all states of the bot. Also, the value of the slot is saved if the bot is closed and then the work is continued after a while.&lt;br /&gt;
&lt;br /&gt;
A slot is declared for the first time when values are assigned to it. &amp;lt;br&amp;gt; For example:&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 slot named '''a''' is declared and the value '''7''' is assigned to it&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;
== Local variables ==&lt;br /&gt;
&lt;br /&gt;
Unlike slots, local variables are stored only within the script where they are declared. &amp;lt;br&amp;gt;&lt;br /&gt;
The declaration is made by adding the keyword '''local''' before the name:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // local variable&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If a local variable is declared inside curly braces '''{}''', then its value is only available there:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // local variable of the current script&lt;br /&gt;
&lt;br /&gt;
if (b == 8)&lt;br /&gt;
{&lt;br /&gt;
   local c = 9 // local variable of 'if' statement block&lt;br /&gt;
   print(c)    // will output 9&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(b)       // will output 8&lt;br /&gt;
print(c)       // will give an error, because the variable 'с' is unavailable here&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;
== Variable types ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sInt = 7                             // Integer&lt;br /&gt;
sFloat = 7.3                         // Float &lt;br /&gt;
sStr = &amp;quot;hello&amp;quot;                       // String&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;, sStr]       // Array&lt;br /&gt;
sDic = { n: 1, s: &amp;quot;Wine&amp;quot;  }          // Dictionary&lt;br /&gt;
sBool = true                         // Boolean&lt;br /&gt;
sRegExp = /[abc]/                    // Regular expression&lt;br /&gt;
sNone = none                         // Undefined value&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;
== Boolean operations ==&lt;br /&gt;
&lt;br /&gt;
* '''and''' - logical  ‘AND’&lt;br /&gt;
* '''or''' - logical ‘OR’&lt;br /&gt;
* '''not''' - negation ‘NO’&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For example:&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;
== Arithmetic operations ==&lt;br /&gt;
&lt;br /&gt;
* '''+''' - addition&lt;br /&gt;
* '''-''' - subtraction&lt;br /&gt;
* '''*''' - multiplication&lt;br /&gt;
* '''/''' - division&lt;br /&gt;
&lt;br /&gt;
For example:&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;
== Comments ==&lt;br /&gt;
&lt;br /&gt;
Comments are used to document script fragments.&lt;br /&gt;
They can be multi-line and single-line:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Example of&lt;br /&gt;
    multi-line&lt;br /&gt;
        comment&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
a = 2253 // example of single-line comment&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Python style comments are also allowed:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
a = 2253 # example of single-line comment&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;
== Working with a dictionary (object) ==&lt;br /&gt;
&lt;br /&gt;
Dictionary declaration:&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;
Accessing dictionary values:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = dic.n             // access to field named &amp;quot;n&amp;quot; through dot  &lt;br /&gt;
a = dic[&amp;quot;n&amp;quot;]          // accessing a field named &amp;quot;n&amp;quot; via an access statement&lt;br /&gt;
dic[&amp;quot;food&amp;quot;] = &amp;quot;milk&amp;quot;  // adding a key-value pair to a dictionary&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Working with arrays ==&lt;br /&gt;
&lt;br /&gt;
Array declaration:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [1,2,3]         // creates an array with three elements with values 1,2,3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Accessing array elements:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;first  = arr[0]       // get the first element of array&lt;br /&gt;
last   = arr[-1]      // get the last element of an array&lt;br /&gt;
last   = arr[-2]      // get the penultimate element of an array&lt;br /&gt;
arr[0] = 7            // change the value of the first element&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Array Functions:&lt;br /&gt;
&lt;br /&gt;
'''''push(val1,val2...)''''' - add elements with values '''val1, val2...''' to the end of the array&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr.push(4) // add the value '4' to the end of the array&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''unshift(val1,val2...)''''' - add elements with values '''val1, val2...''' to the beginning of the array&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr.unshift(0) // add the value '0' to the beginning&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''pop()''''' - remove the last element of an array and return its value&lt;br /&gt;
&lt;br /&gt;
'''''shift()''''' - remove the first element of an array and return its value&lt;br /&gt;
&lt;br /&gt;
'''''slice(start,end)''''' - returns a part of the array starting from the position '''start''' and if the variable '''end'''is specified, then up to it &lt;br /&gt;
&lt;br /&gt;
'''''splice(start, deleteCount)''''' - deletes '''deleteCount''' elements from the position '''start'''&lt;br /&gt;
&lt;br /&gt;
'''''clear()''''' - clear the array&lt;br /&gt;
&lt;br /&gt;
Dictionary array functions:&lt;br /&gt;
&lt;br /&gt;
'''''find(EXPR)''''' - searches for array elements that satisfy the '''EXPR''' condition. Found elements are returned as an array.&amp;lt;br&amp;gt;&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                            // array of three objects with products&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)   // find all objects whose 'price' field is higher than 80 and return them in an array&lt;br /&gt;
print('найдено $res.length:')      // will display the number of found objects&lt;br /&gt;
print(res)                         // will display objects that satisfy the condition&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''total(EXPR)''''' - apply the expression '''EXPR''' to each element of the array and sum all the values.&amp;lt;br&amp;gt;&lt;br /&gt;
For example, let's calculate the amount of items in the cart:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                                 // array of three objects with products&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)   // for each element of the array, multiply the price by the quantity and add the result&lt;br /&gt;
print(&amp;quot;To pay: $res UAH&amp;quot;)            // will display the cost of goods: &amp;quot;To pay: 680 UAH&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''count(EXPR)''''' - find the number of array elements for which the expression '''EXPR''' is true&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                                 // array of three objects with products&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)                                            // for each element of the array, multiply the price by the quantity and add the result&lt;br /&gt;
print(&amp;quot;The quantity of goods that is cheaper than 100 UAH: $res&amp;quot;)            // will display the number of goods: &amp;quot;The quantity of goods that is cheaper than 100 UAH: 1&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''sort(KEY)''''' - sort array&lt;br /&gt;
&lt;br /&gt;
Only arrays are supported where all values are of the same type: a number or string for sort() and a dictionary for 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] // array of numbers&lt;br /&gt;
str  = [&amp;quot;a&amp;quot;, &amp;quot;hi&amp;quot;, &amp;quot;banana&amp;quot;] // string array&lt;br /&gt;
arr  = [         // array of dictionaries with products&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()       // sort array in ascending order&lt;br /&gt;
 str.sort()        // sort array in ascending order&lt;br /&gt;
 arr.sort(price)   // sort array of objects by key 'price'&lt;br /&gt;
// TODO&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''reverse()''''' - flip array &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
list = [1, 3, 2]  // array &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;
== Working with strings ==&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>Tkachenko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Script&amp;diff=685</id>
		<title>Qubot Script</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_Script&amp;diff=685"/>
		<updated>2022-06-30T09:04:02Z</updated>

		<summary type="html">&lt;p&gt;Tkachenko: &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''''' - is a programming language used to perform logical and mathematical operations while solving bot tasks&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;объявление-слотов-переменных&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Slots ==&lt;br /&gt;
&lt;br /&gt;
'''Slot''' - is a variable whose value is available in all states of the bot. Also, the value of the slot is saved if the bot is closed and then the work is continued after a while.&lt;br /&gt;
&lt;br /&gt;
A slot is declared for the first time when values are assigned to it. &amp;lt;br&amp;gt; For example:&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 slot named '''a''' is declared and the value '''7''' is assigned to it&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;
== Local variables ==&lt;br /&gt;
&lt;br /&gt;
Unlike slots, local variables are stored only within the script where they are declared. &amp;lt;br&amp;gt;&lt;br /&gt;
The declaration is made by adding the keyword '''local''' before the name:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // local variable&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If a local variable is declared inside curly braces '''{}''', then its value is only available there:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // local variable of the current script&lt;br /&gt;
&lt;br /&gt;
if (b == 8)&lt;br /&gt;
{&lt;br /&gt;
   local c = 9 // local variable of 'if' statement block&lt;br /&gt;
   print(c)    // will output 9&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(b)       // will output 8&lt;br /&gt;
print(c)       // will give an error, because the variable 'с' is unavailable here&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;
== Variable types ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sInt = 7                             // Integer&lt;br /&gt;
sFloat = 7.3                         // Float &lt;br /&gt;
sStr = &amp;quot;hello&amp;quot;                       // String&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;, sStr]       // Array&lt;br /&gt;
sDic = { n: 1, s: &amp;quot;Wine&amp;quot;  }          // Dictionary&lt;br /&gt;
sBool = true                         // Boolean&lt;br /&gt;
sRegExp = /[abc]/                    // Regular expression&lt;br /&gt;
sNone = none                         // Undefined value&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;
== Boolean operations ==&lt;br /&gt;
&lt;br /&gt;
* '''and''' - logical  ‘AND’&lt;br /&gt;
* '''or''' - logical ‘OR’&lt;br /&gt;
* '''not''' - negation ‘NO’&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For example:&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;
== Arithmetic operations ==&lt;br /&gt;
&lt;br /&gt;
* '''+''' - addition&lt;br /&gt;
* '''-''' - subtraction&lt;br /&gt;
* '''*''' - multiplication&lt;br /&gt;
* '''/''' - division&lt;br /&gt;
&lt;br /&gt;
For example:&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;
== Comments ==&lt;br /&gt;
&lt;br /&gt;
Comments are used to document script fragments.&lt;br /&gt;
They can be multi-line and single-line:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Example of&lt;br /&gt;
    multi-line&lt;br /&gt;
        comment&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
a = 2253 // example of single-line comment&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Python style comments are also allowed:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
a = 2253 # example of single-line comment&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;
== Working with a dictionary (object) ==&lt;br /&gt;
&lt;br /&gt;
Dictionary declaration:&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;
Accessing dictionary values:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = dic.n             // access to field named &amp;quot;n&amp;quot; through dot  &lt;br /&gt;
a = dic[&amp;quot;n&amp;quot;]          // accessing a field named &amp;quot;n&amp;quot; via an access statement&lt;br /&gt;
dic[&amp;quot;food&amp;quot;] = &amp;quot;milk&amp;quot;  // adding a key-value pair to a dictionary&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Working with arrays ==&lt;br /&gt;
&lt;br /&gt;
Array declaration:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [1,2,3]         // creates an array with three elements with values 1,2,3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Accessing array elements:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;first  = arr[0]       // get the first element of array&lt;br /&gt;
last   = arr[-1]      // get the last element of an array&lt;br /&gt;
last   = arr[-2]      // get the penultimate element of an array&lt;br /&gt;
arr[0] = 7            // change the value of the first element&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Array Functions:&lt;br /&gt;
&lt;br /&gt;
'''''push(val1,val2...)''''' - add elements with values '''val1, val2...''' to the end of the array&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr.push(4) // add the value '4' to the end of the array&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''unshift(val1,val2...)''''' - add elements with values '''val1, val2...''' to the beginning of the array&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr.unshift(0) // add the value '0' to the beginning&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''pop()''''' - remove the last element of an array and return its value&lt;br /&gt;
&lt;br /&gt;
'''''shift()''''' - remove the first element of an array and return its value&lt;br /&gt;
&lt;br /&gt;
'''''slice(start,end)''''' - returns a part of the array starting from the position '''start''' and if the variable '''end'''is specified, then up to it &lt;br /&gt;
&lt;br /&gt;
'''''splice(start, deleteCount)''''' - deletes '''deleteCount''' elements from the position '''start'''&lt;br /&gt;
&lt;br /&gt;
'''''clear()''''' - clear the array&lt;br /&gt;
&lt;br /&gt;
Dictionary array functions:&lt;br /&gt;
&lt;br /&gt;
'''''find(EXPR)''''' - searches for array elements that satisfy the '''EXPR''' condition. Found elements are returned as an array.&amp;lt;br&amp;gt;&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                            // array of three objects with products&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)   // find all objects whose 'price' field is higher than 80 and return them in an array&lt;br /&gt;
print('найдено $res.length:')      // will display the number of found objects&lt;br /&gt;
print(res)                         // will display objects that satisfy the condition&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''total(EXPR)''''' - apply the expression '''EXPR''' to each element of the array and sum all the values.&amp;lt;br&amp;gt;&lt;br /&gt;
For example, let's calculate the amount of items in the cart:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                                 // array of three objects with products&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)   // for each element of the array, multiply the price by the quantity and add the result&lt;br /&gt;
print(&amp;quot;To pay: $res UAH&amp;quot;)            // will display the cost of goods: &amp;quot;To pay: 680 UAH&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''count(EXPR)''''' - find the number of array elements for which the expression '''EXPR''' is true&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                                 // array of three objects with products&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>Tkachenko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Script&amp;diff=684</id>
		<title>Qubot Script</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_Script&amp;diff=684"/>
		<updated>2022-06-30T08:23:43Z</updated>

		<summary type="html">&lt;p&gt;Tkachenko: &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''''' - is a programming language used to perform logical and mathematical operations while solving bot tasks&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;объявление-слотов-переменных&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Slots ==&lt;br /&gt;
&lt;br /&gt;
'''Slot''' - is a variable whose value is available in all states of the bot. Also, the value of the slot is saved if the bot is closed and then the work is continued after a while.&lt;br /&gt;
&lt;br /&gt;
A slot is declared for the first time when values are assigned to it. &amp;lt;br&amp;gt; For example:&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 slot named '''a''' is declared and the value '''7''' is assigned to it&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;
== Local variables ==&lt;br /&gt;
&lt;br /&gt;
Unlike slots, local variables are stored only within the script where they are declared. &amp;lt;br&amp;gt;&lt;br /&gt;
The declaration is made by adding the keyword '''local''' before the name:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // local variable&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If a local variable is declared inside curly braces '''{}''', then its value is only available there:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // local variable of the current script&lt;br /&gt;
&lt;br /&gt;
if (b == 8)&lt;br /&gt;
{&lt;br /&gt;
   local c = 9 // local variable of 'if' statement block&lt;br /&gt;
   print(c)    // will output 9&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(b)       // will output 8&lt;br /&gt;
print(c)       // will give an error, because the variable 'с' is unavailable here&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;
== Variable types ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sInt = 7                             // Integer&lt;br /&gt;
sFloat = 7.3                         // Float &lt;br /&gt;
sStr = &amp;quot;hello&amp;quot;                       // String&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;, sStr]       // Array&lt;br /&gt;
sDic = { n: 1, s: &amp;quot;Wine&amp;quot;  }          // Dictionary&lt;br /&gt;
sBool = true                         // Boolean&lt;br /&gt;
sRegExp = /[abc]/                    // Regular expression&lt;br /&gt;
sNone = none                         // Undefined value&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;
== Boolean operations ==&lt;br /&gt;
&lt;br /&gt;
* '''and''' - logical  ‘AND’&lt;br /&gt;
* '''or''' - logical ‘OR’&lt;br /&gt;
* '''not''' - negation ‘NO’&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For example:&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;
== Arithmetic operations ==&lt;br /&gt;
&lt;br /&gt;
* '''+''' - addition&lt;br /&gt;
* '''-''' - subtraction&lt;br /&gt;
* '''*''' - multiplication&lt;br /&gt;
* '''/''' - division&lt;br /&gt;
&lt;br /&gt;
For example:&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;
== Comments ==&lt;br /&gt;
&lt;br /&gt;
Comments are used to document script fragments.&lt;br /&gt;
They can be multi-line and single-line:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Example of&lt;br /&gt;
    multi-line&lt;br /&gt;
        comment&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
a = 2253 // example of single-line comment&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Python style comments are also allowed:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
a = 2253 # example of single-line comment&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;
== Working with a dictionary (object) ==&lt;br /&gt;
&lt;br /&gt;
Dictionary declaration:&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;
Accessing dictionary values:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = dic.n             // access to field named &amp;quot;n&amp;quot; through dot  &lt;br /&gt;
a = dic[&amp;quot;n&amp;quot;]          // accessing a field named &amp;quot;n&amp;quot; via an access statement&lt;br /&gt;
dic[&amp;quot;food&amp;quot;] = &amp;quot;milk&amp;quot;  // adding a key-value pair to a dictionary&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Working with arrays ==&lt;br /&gt;
&lt;br /&gt;
Array declaration:&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>Tkachenko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Script&amp;diff=683</id>
		<title>Qubot Script</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_Script&amp;diff=683"/>
		<updated>2022-06-30T08:00:29Z</updated>

		<summary type="html">&lt;p&gt;Tkachenko: &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''''' - is a programming language used to perform logical and mathematical operations while solving bot tasks&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;объявление-слотов-переменных&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Slots ==&lt;br /&gt;
&lt;br /&gt;
'''Slot''' - is a variable whose value is available in all states of the bot. Also, the value of the slot is saved if the bot is closed and then the work is continued after a while.&lt;br /&gt;
&lt;br /&gt;
A slot is declared for the first time when values are assigned to it. &amp;lt;br&amp;gt; For example:&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 slot named '''a''' is declared and the value '''7''' is assigned to it&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;
== Local variables ==&lt;br /&gt;
&lt;br /&gt;
Unlike slots, local variables are stored only within the script where they are declared. &amp;lt;br&amp;gt;&lt;br /&gt;
The declaration is made by adding the keyword '''local''' before the name:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // local variable&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If a local variable is declared inside curly braces '''{}''', then its value is only available there:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // local variable of the current script&lt;br /&gt;
&lt;br /&gt;
if (b == 8)&lt;br /&gt;
{&lt;br /&gt;
   local c = 9 // local variable of 'if' statement block&lt;br /&gt;
   print(c)    // will output 9&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(b)       // will output 8&lt;br /&gt;
print(c)       // will give an error, because the variable 'с' is unavailable here&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;
== Variable types ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sInt = 7                             // Integer&lt;br /&gt;
sFloat = 7.3                         // Float &lt;br /&gt;
sStr = &amp;quot;hello&amp;quot;                       // String&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;, sStr]       // Array&lt;br /&gt;
sDic = { n: 1, s: &amp;quot;Wine&amp;quot;  }          // Dictionary&lt;br /&gt;
sBool = true                         // Boolean&lt;br /&gt;
sRegExp = /[abc]/                    // Regular expression&lt;br /&gt;
sNone = none                         // Undefined value&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;
== Boolean operations ==&lt;br /&gt;
&lt;br /&gt;
* '''and''' - logical  ‘AND’&lt;br /&gt;
* '''or''' - logical ‘OR’&lt;br /&gt;
* '''not''' - negation ‘NO’&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For example:&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;
== Arithmetic operations ==&lt;br /&gt;
&lt;br /&gt;
* '''+''' - addition&lt;br /&gt;
* '''-''' - subtraction&lt;br /&gt;
* '''*''' - multiplication&lt;br /&gt;
* '''/''' - division&lt;br /&gt;
&lt;br /&gt;
For example:&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;
== Comments ==&lt;br /&gt;
&lt;br /&gt;
Comments are used to document script fragments.&lt;br /&gt;
They can be multi-line and single-line:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Example of&lt;br /&gt;
    multi-line&lt;br /&gt;
        comment&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
a = 2253 // example of single-line comment&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>Tkachenko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Script&amp;diff=682</id>
		<title>Qubot Script</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_Script&amp;diff=682"/>
		<updated>2022-06-30T07:34:04Z</updated>

		<summary type="html">&lt;p&gt;Tkachenko: &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''''' - is a programming language used to perform logical and mathematical operations while solving bot tasks&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;объявление-слотов-переменных&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Slots ==&lt;br /&gt;
&lt;br /&gt;
'''Slot''' - is a variable whose value is available in all states of the bot. Also, the value of the slot is saved if the bot is closed and then the work is continued after a while.&lt;br /&gt;
&lt;br /&gt;
A slot is declared for the first time when values are assigned to it. &amp;lt;br&amp;gt; For example:&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 slot named '''a''' is declared and the value '''7''' is assigned to it&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;
== Local variables ==&lt;br /&gt;
&lt;br /&gt;
Unlike slots, local variables are stored only within the script where they are declared. &amp;lt;br&amp;gt;&lt;br /&gt;
The declaration is made by adding the keyword '''local''' before the name:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // local variable&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If a local variable is declared inside curly braces '''{}''', then its value is only available there:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // local variable of the current script&lt;br /&gt;
&lt;br /&gt;
if (b == 8)&lt;br /&gt;
{&lt;br /&gt;
   local c = 9 // local variable of 'if' statement block&lt;br /&gt;
   print(c)    // will output 9&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(b)       // will output 8&lt;br /&gt;
print(c)       // will give an error, because the variable 'с' is unavailable here&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;
== Variable types ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sInt = 7                             // Integer&lt;br /&gt;
sFloat = 7.3                         // Float &lt;br /&gt;
sStr = &amp;quot;hello&amp;quot;                       // String&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;, sStr]       // Array&lt;br /&gt;
sDic = { n: 1, s: &amp;quot;Wine&amp;quot;  }          // Dictionary&lt;br /&gt;
sBool = true                         // Boolean&lt;br /&gt;
sRegExp = /[abc]/                    // Regular expression&lt;br /&gt;
sNone = none                         // Undefined value&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;
== Boolean operations ==&lt;br /&gt;
&lt;br /&gt;
* '''and''' - logical  ‘AND’&lt;br /&gt;
* '''or''' - logical ‘OR’&lt;br /&gt;
* '''not''' - negation ‘NO’&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>Tkachenko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Script&amp;diff=681</id>
		<title>Qubot Script</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_Script&amp;diff=681"/>
		<updated>2022-06-30T07:13:06Z</updated>

		<summary type="html">&lt;p&gt;Tkachenko: Removed redirect to Qubot Script/ru&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''''' - is a programming language used to perform logical and mathematical operations while solving bot tasks&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;объявление-слотов-переменных&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Slots ==&lt;br /&gt;
&lt;br /&gt;
'''Slot''' - is a variable whose value is available in all states of the bot. Also, the value of the slot is saved if the bot is closed and then the work is continued after a while.&lt;br /&gt;
&lt;br /&gt;
A slot is declared for the first time when values are assigned to it. &amp;lt;br&amp;gt; For example:&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 slot named '''a''' is declared and the value '''7''' is assigned to it&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;
== Local variables ==&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>Tkachenko</name></author>
		
	</entry>
</feed>