Главная » Ошибки » Создаем чат-бота ВКонтакте с расписанием уроков

Создаем чат-бота ВКонтакте с расписанием уроков

Настройка сообщества ВКонтакте для чат-бота

Для начала нам нужно создать сообщество. Для этого на сайте ВК заходим во вкладку «Сообщества», далее нажимаем кнопку «Создать сообщество».

ВКонтакте

Выбираем любую тематику и вводим название.

Группа ВК

Теперь нам нужно настроить сообщество. Заходим во вкладку «Управление» на странице группы.

Создание группы ВК

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

Сообщения

Теперь нам нужно подключить бота в наше сообщество. Переходим во вкладку «Настройки для бота», включаем «Возможности ботов» и ставим галочку напротив «Разрешать добавлять сообщество в беседы». Сохраняем настройку.

Настройки для бота ВК

После этого заходим во вкладку «Настройки», далее во вкладку «Работа с API».

Работа с API ВК

Переходим во вкладку «Long Poll API», включаем Long Poll API, выбираем последнюю версию API и переходим в «Типы событий».

Long Poll API

Тут мы выбираем все типы событий, которые связаны с сообщениями.

Long Poll API события

Во вкладке «Callback API» также выбираем последнюю версию API. В типах событий тоже выбираем все, что связано с сообщениями.

Callback API

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

Ключи доступа

Настройка группы завершена!

Комьюнити теперь в Телеграм
Подпишитесь и будьте в курсе последних IT-новостей

Подписаться

Почему возникает ошибка при подключении к БД (next js + sequelize)?

  • 1 подписчик
  • 17 часов назад
  • 41 просмотр

ответ
1

  • node.js
    • Node.js

    • +1 ещё

    Средний

  • Пишем скрипт чат-бота ВК

    Для написания скрипта можно использовать множество языков программирования, но я покажу все на примере node.js. 

    Создаем файл index.js на компьютере и открываем его редактором кода или IDE (я использую VS Code). 

    Теперь нам нужно импортировать библиотеку, которую мы установим на сервер позже, и вставить токен (ключ доступа), который мы получили в прошлых шагах:

    const { VK, Keyboard } = require(‘vk-io’);constvk = newVK({    token:»сюда вставляем токен»});const {    api} = vk;

    Чтобы чат-бот отправлял раcписание, ему нужно его знать. Давайте создадим объект с днями и занятиями:

    days = {«понедельник»:»1)Информатика/Англ.яз.n2)Родная литератураn3)Историяn4)Литератураn5)Русск.яз.n6)Информатика и ИКТn7)Англ.яз./Нет урока»,»вторник»:»1)Информатика и ИКТn2)Литератураn3)Практ. по матем.n4)Алгебра и нач.ан.n5)Геометрияn6)Труд/Русск.яз.n7)Физкультура»,»среда»:»1)Физкультураn2)Химияn3)Географияn4)Обществознаниеn5)Обществознаниеn6)Англ.яз.n7)Физика»,»четверг»:»1)Англ.яз./Информатикаn2)Алгебра и нач.ан.n3)Историяn4)Литератураn5)Физкультураn6)Биологияn7)Нет урока/Англ.яз.»,»пятница»:»1)Общество и чел.n2)Физикаn3)Экономикаn4)Астрономияn5)ОБЖn6)Геометрия»}

    Заполните этот объект вашими данными по вышеуказанному примеру.

    Теперь нам нужно, чтобы скрипт получал все сообщения, которые отправляются боту:

    vk.updates.start();vk.updates.on(‘message’, (context, next) => {//Далее весь код будем писать тут (внутри скобок)}

    Проверяем, содержит ли сообщение текст и отправляется ли от имени пользователя:

    if (context.text == null || context.isGroup == true || context.text == ‘undefined’) return

    Теперь напишем условие на то, что сообщение содержит название дня недели. Также не забываем отправить сообщение с помощью «context.send» вместе с расписанием. Кроме того, добавляем инлайн-кнопку для просмотра расписания на всю неделю, условие которой мы напишем в следующем шаге:

    if (Object.keys(days).indexOf(context.text.toLowerCase()) >= 0) {      context.send({        message:days[context.text],        keyboard:Keyboard.builder()            .textButton({                label:’Вся неделя’,                payload: {                    command:’Вся неделя’                }            })            .inline()    })    }

    Теперь можно написать условие для просмотра расписания на всю неделю:

     if (context.text.toLowerCase().includes(‘вся неделя’)){context.send(`Расписание на всю неделю:nnПонедельник:n${days[«понедельник»]}nnВторник:n${days[«вторник»]}nnСреда:n${days[«среда»]}nnЧетверг:n${days[«четверг»]}nnПятница:n${days[«пятница»]}`)}

    Сохраняем файл и приступаем к его установке на сервер.

    # Breaking Сhanges

    # Поддержка Node.js 12 и выше

    Библиотека поддерживает теперь только Node.js 12 и выше.

    # VK

    • Удалён геттер/сеттер vk.token
    • Удалён метод vk.setOptions()
    • Удалён сеттер vk.captchaHandler, используйте метод vk.callbackService.onCaptcha()
    • Удалён сеттер vk.twoFactorHandler, используйте метод vk.callbackService.onTwoFactor()
    • Удалён модуль vk.auth, используйте вместо этого пакет open in new window@vk-io/authorization
    • Удалён модуль vk.streaming, используйте вместо этого пакет open in new window@vk-io/streaming
    • Удалён экспорт по умолчанию, используйте именованный

    — import VK from ‘vk-io’;
    + import { VK } from ‘vk-io’;

    • Удалён vk.snippets.resolveResource(), вместо модуля добавлена функция resolveResource() Принимает опции вида:

    interfaceIResolveResourceOptions{
    resource:string|number;
    api?:API;}

    Например

    import{ resolveResource }from’vk-io’;const result =awaitresolveResource({// Объект API
    api,

    resource:’https://vk.com/durov’});

    • Удалён vk.collect, модуль разбит на мелкие классы и функции
      • collect.chain() — используйте класс new Chain()

    import{ Chain }from’vk-io’;const chain =newChain({// Объект API
    api
    });

      • collect.executes() — используйте функцию executes() Принимает опции вида:

    interfaceIExecutesOptions{
    api:API;

    method:string;// eslint-disable-next-line @typescript-eslint/no-explicit-any
    queue: Record[];}

    Например

    import{ executes }from’vk-io’;const result =awaitexecutes({// Объект API
    api,

    method:’users.get’,
    queue:[{ user_id:1},{ user_id:2},{ user_id:3},// …]});

      • collect..() — используйте функцию createCollectIterator() Принимает опции вида:

    interfaceICollectIteratorOptions{
    api:API;

    method:string;
    params: Record&{
    count?:number;
    offset?:number;};

    maxCount?:number;
    countPerRequest:number;

    retryLimit?:number;
    parallelRequests?:number;}

    Например

    import{ createCollectIterator }from’vk-io’;const iterator =createCollectIterator({// Объект API
    api,

    method:’messages.getConversations’,
    params:{// Будет получать profiles и groups
    extended:1},// Максимальный count в методе
    countPerRequest:200,// Устанавливайте опцию для методов которые не позволяет получить больше N данных, например `users.search`// maxCount: 1000,// Количество попыток вызвать снова при ошибке// retryLimit: 3,// Количество паралельных вызовов если поддерживается execute// parallelRequests: 25});forawait(const chunk of iterator){// chunk.received// chunk.percent// chunk.total// chunk.items// chunk.profiles// chunk.groups}

    # API

    • Переименование опции apiAttempts в apiRetryLimit
    • Удалён геттер vk.api.API_VERSION
    • Enum APIErrorCode теперь автоматический генерируется из open in new windowсхемы
    • Объкты схемы теперь экспортируются в своих namespace Params, Objects и Responses
    • Удалена автоматическая верификация аккаунта, используйте @vk-io/authorization класс AccountVerification
    • Удалена автоматическая установка random_id в api.messages.send(), используйте вместо этого функцию getRandomId()

    import{ getRandomId }from’vk-io’;const result =await api.messages.send({
    peer_id:1234,
    random_id:getRandomId(),

    text:’Hello!’});

    # APIRequest

    • Конструктор теперь принимает опции вида:

    interfaceIAPIRequestOptions{
    api:API;

    method:string;
    params: Record;}

    • Удалён алиас Request, используйте APIRequest

    # Attachment & ExternalAttachment

    • Конструктор теперь принимает опции вида:

    interfaceISharedAttachmentPayload{
    id:number;
    owner_id:number;
    access_key?:string;}interfaceIAttachmentOptions

    {
    api:API;

    type: Type;
    payload: Partial&P;}

    # DocumentAttachment

    • Удалён геттер document.typeName

    # Context

    • Конструктор теперь принимает опции вида:

    interfaceIContextOptions

    {
    api:API;
    upload: Upload;

    type: Type;
    subTypes: SubType[];

    payload:P;
    state?:S;

    source: UpdateSource;
    updateType:string|number;

    groupId?:number;}

    • Метод context.is() принимает теперь массив типов

    Footer

    © 2022 GitHub, Inc.

    Как подключить и использовать json файл?

    • 1 подписчик
    • вчера
    • 38 просмотров

    ответ
    1

  • node.js
    • Node.js

    Простой

  • Почему модули в nodeJS подключаются по разному?

    • 1 подписчик
    • 20 окт.
    • 33 просмотра

    ответ
    1

  • Показать ещёЗагружается…
  • Вакансии с Хабр Карьеры

    Senior Node.js разработчик

    NEWHR
    •Москва
    от 270 000 до 400 000 ₽

    Backend разработчик (Node.js)

    Wazzup

    от 100 000 до 150 000 ₽

    Fullstack Node.js / React Developer

    Fundraise Up

    от 2 500 до 4 500 $
    Ещё вакансии

    Заказы с Хабр Фриланса

    Копирайтинг

    23 окт. 2022, в 15:35
    4000 руб./за проект

    Таргетолог Вконтакте

    23 окт. 2022, в 15:27
    10000 руб./за проект

    Написать программу на С#

    23 окт. 2022, в 15:11
    4000 руб./за проект
    Ещё заказы

    Минуточку внимания

    Присоединяйтесь к сообществу, чтобы узнавать новое и делиться знаниями

    Зарегистрироваться

    Самое интересное за 24 часа

    • Сущиствует ли GUI фреймворк под windows для rust?

      • 2 подписчика
      • 1 ответ
    • Как выбрать из элемента из списка по его вероятности?

      • 2 подписчика
      • 1 ответ
    • Как получить иностранный номер телефона?

      • 4 подписчика
      • 0 ответов
    • Ассемблер в VSCode?

      • 3 подписчика
      • 1 ответ
    • Как удалить вирус, который меняет фон рабочего стола?

      • 4 подписчика
      • 2 ответа
    • Api через POST запросы?

      • 3 подписчика
      • 2 ответа
    • Проблема с установкой windows что делать?

      • 2 подписчика
      • 1 ответ
    • Как сделать чтобы из моего пакета импортировалось только то, что нужно?

      • 2 подписчика
      • 0 ответов
    • Как сделать рекурсивные списки Visual Prolog?

      • 2 подписчика
      • 0 ответов
    • Безопасен ли зараженный отключенный SSD диск?

      • 2 подписчика
      • 2 ответа
    • © Habr
    • О сервисе
    • Обратная связь
    • Блог

    Тут сказано поднять простой сервер на node.js. Можно ли такое поднять на Python?

    • 1 подписчик
    • 20 окт.
    • 103 просмотра

    ответ
    1

  • windows
    • Windows

    • +1 ещё

    Простой

  • Где и как сохранять и передавать токен в nodejs?

    • 1 подписчик
    • 19 часов назад
    • 16 просмотров

    ответов
    0

  • node.js
    • Node.js

    • +1 ещё

    Простой

  • Почему выходит ошибка в NodeMon?

    • 1 подписчик
    • вчера
    • 16 просмотров

    ответов
    0

  • node.js
    • Node.js

    Простой

  • Как в node.js на windows 10 запускать mp3 на фоне?

    • 2 подписчика
    • 20 окт.
    • 78 просмотров

    ответа
    2

  • node.js
    • Node.js

    Простой

  • Как в pg готовить запросы с именованными переменными в операторе LIKE между двумя процентами?

    • 1 подписчик
    • 22 часа назад
    • 26 просмотров

    ответ
    1

  • javascript
    • JavaScript

    • +3 ещё

    Простой

  • Как сделать шаблон response в express 4?

    • 1 подписчик
    • 15 часов назад
    • 30 просмотров

    ответов
    0

  • node.js
    • Node.js

    • +2 ещё

    Средний

  • Почему не работает strapi перенесенный на vps?

    • 1 подписчик
    • вчера
    • 10 просмотров

    ответов
    0

  • python
    • Python

    • +1 ещё

    Средний

  • Источники

    • https://timeweb.com/ru/community/articles/cha-bot-s-raspisaniem-urokov-v-vk
    • https://qna.habr.com/q/826139
    • https://negezor.github.io/vk-io/ru/guide/migration-to-v4.html
    • https://github.com/negezor/vk-io/issues
    [свернуть]
    Решите Вашу проблему!


    ×
    Adblock
    detector