Найти тему
Максим Зотеров

Как легко написать своего бота: заключительная часть

Оглавление

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

Итак, мы останемся на базе JSON, так как мы пишем лёгкого бота, а вот бот на Sequelize, PostgreSQL ждите обязательно в другом цикле статей! Подпишитесь, чтобы не пропустить!

Циклы, условия, отправка другим пользователям

Давайте познакомимся с if (с английского - "если"), это самое главное, что мы будем использовать в нашем боте. Давайте разбираться что такое if:
"Если в коробке пять яблок, то я возьму одно", это пример из реальной жизни, но на языке JavaScript это будет звучать так:

if(apple == 5) {
apple--;
}

Ничего сложного, правда? Переменная == значение. Но что такое "=="?
Это оператор сравнения. Замечу,
не одно равно, а именно два. Но я советую использовать оператор строго сравнения ("==="). Почему? Потому что можно избежать не нужных вам преобразований типов, и оптимизировать движок. Но зачем нам нужен if в боте? Ответ очевиден: чтобы сравнивать переменные в базе с ожидаемыми значениями. Допустим:

if(user.ban === true) {
return message.send(`Вы заблокированы`)
}

Тут я привёл простейший пример использования if, в виде блокировки в боте. Давайте переведём этот код в понятный для человека текст:
Если пользователя бота забанили, то вывести сообщение и остановить.

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

for(i in users.users) {
users.users[i].ban = false
vk.api.messages.send({
peer_id: users.users[i].vk_id,
message: `Вы были разблокированы!`,
random_id: 0
})
}

В данном примере, мы использовали конструкцию "for in", но есть и другая. А так же для нас появляются новые методы:"vk.api.messages.send "
Наверняка у вас сейчас масса вопросов, а зачем там круглая, а затем квадратная скобка, запятые, непонятные параметры. Сейчас всё расскажу.
Мы в метод передаем объект JavaScript, то есть - JSON (Java Script
Object Notation), и в нём есть определённые правила, например, запятая после параметра (но не на последнем), двоеточие вместо равно. А теперь о параметрах:
peer_id - идентификатор ВКонтакте, кому необходимо написать
message - сообщение, которое необходимо написать
random_id - случайный идентификатор сообщения (у нас - 0)
И с помощью этого простейшего кода вы можете провести амнистию всех пользователей. Надеюсь, это вам будет понятно. А мы переходим к следующей части!

Регулярные выражения

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

Что такое регулярное выражение на пальцах?
Мы пишем боту: "забанить ID", но как бот выделит ID от слова забанить. На помощь и приходят регулярные выражения:

/^(?:пример1)/i
/
^(?:пример2)\s([^]+)\s([0-9]+)\s([^]+)/i
/^(?:пример3)\s([0-9]+)
/^(?:пример4)\s([^]+)

Давайте разбираться!
В первом примере мы не запрашиваем от пользователя какие либо значения, и достаточно написать "пример1".
Во втором примере, надо писать так: "пример2 текст число текст"
\s означает пробел
В третьем примере у нас только числа от 0 до 9 в неограниченном количестве ("пример3 444")
В четвёртом примере мы можем написать как текст, так и числа ("пример4 тест")

Лучше всего использовать регулярки которые я показал, они 100% рабочие. Но что бы не допускать ошибок, я рекомендую использовать сайт для проверки регулярных выражений, но важное замечание: слева в разделе "Flavor" включите режим "ECMAScript (Java Script)".

А теперь давайте работать с регулярками в нашем боте. Допустим, мы ввели правильно данные, регулярка вернула true и код начинает исполнятся. Но куда сохраняется результат регулярки (как на картинке выше)? В массив message.$match. На картинке выше у нас есть Full match и Group 1. В массиве бота будет так: message.$match[0] (Full match), message.$match[1] (Group 1). С этим значением вы можете делать что хотите. Проверки (if), цикл (for) и так далее.

Keyboard Builder (билдер клавиатуры)

Вы наверняка видели в популярных ботах кнопки (как Inline так и обычные):

Кнопки одного из моих проектов
Кнопки одного из моих проектов

Так вот есть два пути:
• Неудобный: генератор JSON клавиатуры
• Удобный: билдер клавиатуры.
Мы остановимся на удобном:

return message.send(`Кнопки`,
{keyboard: Keyboard.builder()
.textButton({
            label: `Кнопка!`,
            payload: {
               command: `button`,
             },
            color: Keyboard.POSITIVE_COLOR
})

.inline()
})

Как видите, всё просто!

На этом, мы завершаем цикл наших статей!
Если хотите архив с чужими ботами, как примеры (+кнопки), пишите в комментарии.

Всем спасибо!