Меню Рубрики

Как написать простого бота

Делаем своего первого чат-бота

Уровень: начинающий

Мате­ри­ал рас­счи­тан на тех, кто в жиз­ни не напи­сал ни строч­ки кода. Если вы уже в кур­се основ про­грам­ми­ро­ва­ния, про­чи­тай­те луч­ше о чистых функ­ци­ях.

Мно­гие слы­ша­ли про чат-ботов и робо­тов для обще­ния: им пишешь, они отве­ча­ют, полу­ча­ет­ся диа­лог с маши­ной. Чат-бот может рас­ска­зать анек­дот, поис­кать за вас в интер­не­те, забро­ни­ро­вать сто­лик в ресто­ране и что угод­но ещё, чему его обу­чат созда­те­ли.

Ино­гда такое обще­ние выгля­дит как обще­ние с чело­ве­ком. Может даже пока­зать­ся, что там рабо­та­ет искус­ствен­ный интел­лект — и ино­гда так дей­стви­тель­но быва­ет. Но часто всё про­ще: это алго­ритм, кото­рый уме­ет рас­по­зна­вать неко­то­рые ваши сло­ва и давать отве­ты по зара­нее заго­тов­лен­ным шаб­ло­нам. Чем алго­ритм более раз­ветв­лён­ный, тем есте­ствен­нее и полез­нее бот.

Давай­те сде­ла­ем соб­ствен­но­го чат-бота с очень про­стым алго­рит­мом. Поз­же вы смо­же­те услож­нить его, как захо­ти­те. Но сна­ча­ла — самая база для тех, кто нико­гда не писал код.

Обыч­но, что­бы создать какую-то про­грам­му, нуж­но выпол­нить несколь­ко дей­ствий: напри­мер, ска­чать программу-обработчик язы­ка, заве­сти про­ект, напи­сать заду­ман­ную про­грам­му, ском­пи­ли­ро­вать. И толь­ко потом ей мож­но поль­зо­вать­ся. Но мы пой­дём по более про­сто­му пути: напи­шем про­грам­му, рабо­та­ю­щую пря­мо в бра­у­зе­ре, через кото­рый вы чита­е­те эту ста­тью. Сде­лать это мож­но лишь на ком­пью­те­ре, на теле­фоне при­дёт­ся поль­зо­вать­ся ботом.

Мы будем решать зада­чу на язы­ке JavaScript — это язык про­грам­ми­ро­ва­ния, кото­рый встро­ен в ваш бра­у­зер и на кото­ром напи­сать код мож­но пря­мо сей­час, ниче­го не уста­нав­ли­вая.

Что­бы сде­лать что-то на JavaScript, нуж­но открыть кон­соль. Почти во всех совре­мен­ных бра­у­зе­рах это дела­ет­ся соче­та­ни­ем кла­виш Shift + Ctrl + J или Cmd + Alt + J. Спра­ва или сни­зу появит­ся допол­ни­тель­ное окно, в кото­ром уже будет что-то про­ис­хо­дить:

Если у вас не откры­лась кон­соль, зай­ди­те в верх­нее меню и поищи­те сло­во «Кон­соль». Обыч­но этот пункт пря­чет­ся в раз­де­ле «Инстру­мен­ты раз­ра­бот­чи­ка».

Когда вы откры­ва­е­те кон­соль, она сра­зу гото­ва выпол­нять ваши коман­ды. Если в неё вста­вить про­грам­му, напи­сан­ную на JavaScript, и нажать Enter, ваш бра­у­зер её реа­ли­зу­ет. Если в коде есть ошиб­ки, кон­соль сама под­све­тит их. Мож­но отправ­лять в неё про­грам­му кус­ка­ми или даже построч­но: бра­у­зер будет пом­нить всё, что про­ис­хо­ди­ло в вашей про­грам­ме, пока вы не пере­за­гру­зи­те стра­ни­цу.

Первая строка

В кон­со­ли мож­но не толь­ко писать код, но и выво­дить туда резуль­та­ты. Давай­те для нача­ла сде­ла­ем самую про­стую про­грам­му, кото­рая отоб­ра­зит в кон­со­ли сло­во «При­вет!». Для это­го исполь­зу­ем коман­ду console.log(‘Привет!’);

Вста­вим её в кон­соль и нажмём Enter:

Поздрав­ля­ем, вы толь­ко что напи­са­ли свою первую про­грам­му для ком­пью­те­ра! Она очень про­стая: ком­пью­тер все­го лишь гово­рит «При­вет!». Но оце­ни­те момент: это вы его научи­ли так гово­рить. Попро­буй­те научить его и дру­гим сло­вам.

Если напи­сать несколь­ко команд, полу­чим сооб­ще­ние из несколь­ких строк:

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

Переменные

Что­бы дать понять ком­пью­те­ру, что у нас сей­час будет пере­мен­ная, нуж­но ска­зать ему сло­во var, после кото­ро­го впи­сать назва­ние пере­мен­ной — так нам про­ще к ней обра­щать­ся. Напри­мер, сле­ду­ю­щая стро­ка создаст пере­мен­ную name и поло­жит в неё сло­во «Код»:

Назва­ние тут может быть прак­ти­че­ски любым, глав­ное, что­бы оно начи­на­лось с бук­вы. По-русски пере­мен­ные назы­вать нель­зя, толь­ко бук­ва­ми латин­ско­го алфа­ви­та. Мож­но было бы исполь­зо­вать вари­ант imya или zovut, но про­грам­ми­сты счи­та­ют, что чем про­ще назва­ние пере­мен­ной, тем луч­ше.

Теперь посмот­рим содер­жи­мое эле­мен­та. Сле­ду­ю­щая коман­да выве­дет то, что сей­час запи­са­но в пере­мен­ной name:

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

Но это мы всё смот­рим во внут­рен­но­сти ком­пью­те­ра. А нам нуж­но спро­сить что-то у поль­зо­ва­те­ля. Что­бы мы мог­ли вве­сти новые дан­ные в нашу про­грам­му, исполь­зу­ем коман­ду prompt()

Вставь­те в кон­соль коман­ду var name = prompt(‘Как вас зовут?’); и посмот­ри­те, что про­изой­дёт. Ком­пью­тер выве­дет окно и будет ждать, пока вы вне­сё­те туда своё имя. Интер­фейс выгля­дит кра­си­во: давай­те в диа­ло­ге общать­ся с ком­пью­те­ром не через кон­соль, а через такие появ­ля­ю­щи­е­ся окош­ки. Для это­го напи­шем новые коман­ды:

Пусть ком­пью­тер про­явит веж­ли­вость и ска­жет, что ему при­ят­но с нами позна­ко­мить­ся. Что­бы он смог обра­тить­ся к нам по име­ни, исполь­зу­ем пере­мен­ную name — в ней как раз хра­нит­ся то, что мы отве­ти­ли ком­пью­те­ру:

Что­бы выве­сти осмыс­лен­ную фра­зу, мы взя­ли нача­ло ‘При­вет, ‘, затем с помо­щью плю­си­ка соеди­ни­ли со зна­че­ни­ем пере­мен­ной name , кото­рая хра­нит наше имя, а потом ещё одним плю­си­ком доба­ви­ли к фра­зе кон­цов­ку. Что­бы ком­пью­тер знал, что мы хотим выве­сти на экран текст, а не чис­ла, исполь­зу­ют­ся кавыч­ки. Ком­пью­тер вос­при­ни­ма­ет как текст то, что внут­ри кавы­чек. И выво­дит точ­но в том виде, в кото­ром напи­са­но.

Расчёт дня рождения

Давай­те соеди­ним все наши коман­ды в одну про­грам­му и допи­шем несколь­ко новых фраз:

Обра­ти­те вни­ма­ние: у нас появил­ся новый вопрос и новая пере­мен­ная hobby, в кото­рой хра­нит­ся инфор­ма­ция об увле­че­нии. А ещё — ком­мен­та­рии, кото­рых мож­но добав­лять сколь­ко угод­но. JavaScript не обра­ща­ет вни­ма­ния на то, что напи­са­но после двух косых черт:

Теперь у вас есть всё, что нуж­но, что­бы напи­сать свою вер­сию чат-бота для обще­ния. Если про­дол­жи­те решать наши задач­ки, то смо­же­те научить ком­пью­тер по-разному реа­ги­ро­вать на ваши отве­ты и даже вести осмыс­лен­ный диа­лог.

Что ещё посмотреть

Вот кое-что, что может вам при­го­дить­ся при созда­нии пер­во­го чат-бота.

performance.now() — эта коман­да воз­вра­ща­ет вре­мя в мил­ли­се­кун­дах с момен­та откры­тия теку­щей стра­ни­цы. Мож­но поде­лить на 1 000, и вы узна­е­те, сколь­ко секунд вы сиди­те на какой-то стра­ни­це. Если поде­лить на 60 000 — сколь­ко минут.

setTimeout() — поз­во­ля­ет выпол­нить любой код через опре­де­лён­ное вре­мя. Напри­мер, вы може­те задать вопрос и предо­ста­вить ров­но мину­ту на раз­мыш­ле­ние, после чего появит­ся окно для отве­та.

setInterval() — то же самое, что и преды­ду­щее, но выпол­не­ние кода повто­ря­ет­ся с рав­но­мер­ным интер­ва­лом, напри­мер раз в 5 минут. Если вы хоти­те научить чат-бота, что­бы он раз в час напо­ми­нал попить воды, эта коман­да — то, что нуж­но.

Как поль­зо­вать­ся эти­ми шту­ка­ми, мы рас­ска­жем в одной из буду­щих ста­тей, но вы все­гда може­те само­сто­я­тель­но поис­кать в интер­не­те, как они рабо­та­ют. Поль­зу­ясь эти­ми тре­мя воз­мож­но­стя­ми JavaScript, полу­чит­ся создать непло­хо­го бота, кото­рый будет сле­дить за вашей про­дук­тив­но­стью и интер­ва­ла­ми рабо­ты. Под­пи­сы­вай­тесь на «Код», что­бы не про­пу­стить новые раз­бо­ры.

Источник статьи: http://thecode.media/chat-bot/

Руководство: как сделать простого бота для Телеграм на JS для новичка в программировании

Я начал погружение в мир IT лишь три недели назад. Серьезно, три недели назад я даже не понимал синтаксиса HTML, а знакомство с языками программирования заканчивалось школьной программой по Pascal 10-летней давности. Однако я решился поехать в IT-лагерь, для детей которого было бы неплохо сделать бота. Я решил, что это вряд ли так сложно.

С этого начался длинный путь, в рамках которого я:

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

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

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

А еще — для продвинутых программистов — просто чтобы их немного посмешить.

Я понимал, что стоит для начала хотя бы разобраться в синтаксисе языка. Выбор пал на JavaScript, просто потому что следующим шагом для меня было создание приложения на ReactNative. Я начал с курса на Codecademy и остался в большом восторге. Первые 7 дней бесплатно. Реальные проекты. Рекомендую. Прохождение его заняло порядка 25 часов. На самом деле далекоооо не все из него пригодилось. Вот так примерно выглядит структура курса и подробно первый блок.

2. Как зарегистрировать бота?

В начале мне очень помогла вот эта статья из блога некоего Арчакова. Он разжевывает самое начало. Но главное, что там есть — это инструкция по регистрации бота. Лучше я не напишу, и поскольку это самая легкая часть, просто напишу суть. Нужно создать бота и получить его API. Это делается через другого бота — @BotFather. Найдите его в telegram, напишите ему, пройдите простой путь и получите (сохраните!) API-ключ (это набор цифр и букв). Он пригодился мне позже.

3. Как выглядит код бота?

После долгого изучения статей, я понял, что стоит использовать какую-то библиотеку (сторонний код в формате модуля), чтобы не мучаться с изучением API телеграма и созданием с нуля больших кусков кода. Я нашел фреймворк telegraf, который нужно было как-то подключить к чему-то при помощи npm или yarn. Примерно так я понимал тогда, из чего состоит развертывание бота. Смеяться здесь. Я не обижусь. Больше всего при последующем создании бота мне помогли примеры, указанные внизу страницы:

3. Как создать собственный облачный сервер за 100 рублей

После долгих поисков я понял, что команда ‘npm’ из картинки выше относится к командной строке. Командная строка есть везде, но чтобы получилось ее исполнить, нужно поставить NodePackageManager. Проблема была в том, что программировал я на PixelBook с ChromeOS. Я пропущу здесь большой блок про то, как я познавал Linux — для большинства это пустое и ненужное. Если у вас есть Windows или MacBook, у вас уже есть консоль.

Если в двух словах, я поставил Linux через Crostini.

Однако в процессе я понял, что для постоянной работы бота (а не только когда у меня включен компьютер) мне нужен облачный сервер. Я выбрал vscale.io Я закинул 100 рублей, купил самый дешевый сервер Ubuntu (см.картинку).

4. Как подготовить сервер для запуска бота

После этого я понял, что нужно сделать на сервере какую-то папку, в которую я положу файл с текстом кода. Для этого в консоли (запускать прямо на сайте через кнопку «Открыть консоль») я вбил

bot — это стало название моей папки. После этого я установил npm и Node.js, что позволит запускать мне потом код из файликов с разрешением *.js

Очень рекомендую на этом этапе настроить подключение к серверу через свою консоль. Вот инструкция Это позволит работать с сервером напрямую через консоль своего компьютера.

5. Как написать код первого бота.

А вот теперь просто открытие для меня. Любая программа — это просто строки текста. Их можно вбить куда угодно, сохранить с нужным расширением и все. Ты прекрасен. Я использовал Atom, но реально, можно просто в блокноте стандартном писать. Главное — сохранить потом файл в нужном расширении. Это как написать текст в Word и сохранить.

Я сделал новый файл, в который вставил код из примера на странице telegraf и сохранил в файл index.js (вообще не обязательно называть файл так, но так принято). Важно — вместо BOT_TOKEN вставьте свой API-ключ из второго пункта.

6. Как закинуть код на сервер через github

Теперь мне нужно было закинуть как-то этот код на сервер и запустить его. Для меня это стало челленджем. В итоге, после долгих мытарств я понял, что проще будет создать файл на github, который позовляет обновлять код при помощи команды в консоли. Я зарегал аккаунт на github и сделал новый проект, куда и загрузил файл. После этого мне нужно было понять, как же настроить загрузку файлов с моего аккаунта (открытого!) на сервер в папку bot (если вдруг вы вышли из нее — просто напишите cd bot).

7. Как загрузить файлы на сервер через github ч.2

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

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

В итоге все из проекта загрузилось на сервер. Ошибкой на данном этапе было, что я, по сути, сделал вторую папку внутри уже существующей папки bot. Адрес до файла выглядел как */bot/bot/index.js

Я решил пренебречь этой проблемой.

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

Для этого, находясь в папке с файлом (чтобы переходить из папки в папку через консоль — выполняйте команду формата cd bot Чтобы убедиться, что вы там, где нужно можно вбить команду, которая отобразит в консоли все файлы и папки, которые там лежат ls -a

Для запуска я ввел в консоль

Если нет никакой ошибки — все хорошо, бот работает. Ищите его в телеграме. Если ошибка есть — применяйте свои знания из 1 пункта.

9. Как запустить бота в фоновом режиме

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

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

10. Как работает бот и как расширить его функционал

Что же умеет наш бот из примера? Он умеет

говорить «Welcome!» в момент старта (попробуйте поменять текст)

в ответ на стандартную команду /help отправлять сообщение «Send me a sticker»

в ответ на стикер отправлять одобрение

отвечать «Hey there», если ему пишут ‘hi’
bot.launch()

Если вы посмотрите код на github, то быстро поймете, что сильно далеко от этого функционала я не ушел. Что активно используется, так это функция ctx.replyWithPhoto Она позволяет отправлять заданное фото или gif в ответ на определенный текст.

Значимая часть кода была написана детьми 11-13 лет, которым я дал доступ к боту. Они ввели свои user-case. Думаю, легко определить, какая часть сделана была ими.

Например, на сообщение «джейк» приходит гифка с известным персонажем из мультика Adventure Time.

Чтобы развивать бота дальше, подключать клавиатуру нужно смотреть примеры, например, отсюда

11. Как обновлять код и перезапускать бота

Не забывайте, что надо обновлять код не только на github, но и на сервере. Делать это просто — стопим бота (нажать ctrl+c),

— вводим в консоль, находясь в целевой папке, git pull
— вновь запускаем бота командой node index.js

Многие вещи, описанные в этом файле, будут супер очевидны для продвинутых программистов. Однако когда я сам пытался одним махом перепрыгнуть пропасть до мира ботов, мне очень не хватало подобного гайда. Гайда, в котором не пропускается очевидные и простые для любого IT-специалиста вещи.

В дальнейшем я планирую пост про то, как сделать свое первое приложение на ReactNative в таком же стиле, подписывайтесь!

Источник статьи: http://m.habr.com/ru/post/447006/


0 0 голоса
Article Rating
Подписаться
Уведомить о
guest

0 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии