Отметить сообщение как прочитанное vk api

Обновлено: 05.07.2024


Статья и весь написанный код создавались только в образовательных и исследовательских целях и никогда не использовались для незаконной деятельности. Автор не призывает вас повторять какие либо описанные здесь действия и не несёт за них никакой ответственности.

Как этим пользоваться?

Сама библиотека находится в репозитории github-a (там же, в папке examples, находятся скрипт с примерами использования из этой статьи). Чтобы установить её на компьютер можно воспользоваться в терминале командой:


И по сути, на этом всё. Теперь нам остаётся лишь открыть документацию и использовать интересующие нас методы. Хочу сразу отметить, что такой подход позволяет нам использовать практически любой метод из документации, даже не относящийся к разделу messages:

Теперь же я хочу перейти к одной из самых интересных частей этой библиотеки: имея куки авторизации, мы можем выполнять абсолютно любые действия. Приведу свой личный пример, когда для постов группы, в которой я состою, мне нужно было составить таблицу, состоящую из ID поста и его автора. Но в чём была загвоздка: официальный api возвращает только человека, который опубликовал статью. Воспользовавшись сниффером, я увидел, что при наведении на дату публикации поста эти данные подгружаются с сервера. И после этого я написал обёртку, которая позволяла отправлять сколько угодно подобных запросов, используя лишь ссылку поста и куки авторизации, чтобы получать авторов. В примере ниже останется лишь избавиться от ненужных тегов:

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

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

Как это работает?

Так же отмечу один важный момент: пароль отправляется в кодировке ANSI, где символы русского алфавита разделяются знаком "%", и данного кода достаточно для реализации такого декодирования. Это может стать проблемой для некоторых линукс пользователей, ведь, насколько я помню, эта кодировка не входит по умолчанию в python на этой операционной системе.

Также одной из проблем для меня стало странное поведение некоторых методов. К примеру, если я менял местами параметры, то скрипт мог вернуть ответ в 10 раз меньше запрашиваемого или вообще ничего не вернуть. Для решения этой проблемы я просто решил распарсивать и отправлять параметры в строгом порядке, как они указаны в документации. Возможно это простое совпадение, но после этого проблем подобного рода у меня не возникало:

This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

  • Open with Desktop
  • View raw
  • Copy raw contents Copy raw contents

Copy raw contents

Copy raw contents

  • Событие message
  • Возможные подтипы new_message , edit_message

Если вы используете свойства контекста напрямую то это может привести к проблемам несовместимости кода в дальнейшем, используйте лучше методы getter'ы

Так как контекст реализует совместимость с несколькими способами получения данных

Инициализация новой инстанции

Проверяет наличие прикреплений

При передаче параметра проверит наличие всех прикреплений указанного типа

Параметр Тип Описание
type string Тип прикрепления

Проверяет наличие текста

Проверяет наличие геолокации


Подготовка к работе с ботом:

1) Готовый скрипт к написанию команд бота. Можно использовать уже использованный, главное не запутаться куда нужно прописывать новые команды.
2) VK_API - варианта два: можно использовать уже имеющийся с прошлых статей. Либо качаем новую версию, важно если вы собираетесь делать персональные настройки беседы, а также для команд из след. статьи (для команды Погода (не обязательно), перевод, кубик 1-6 ставка) kotoff_net.zip
В этом архиве есть все нужные файлы. Берите всё что вам нужно на здоровье )
3) Желание сотворить хоть что-то и следовать инструкциям

P.S. Давненько я ничего не писал. Постараюсь не испортить эту статью и сделать всё по красоте, а также побыстрее выпустить 3 часть

Отлично, теперь давайте вернемся к проверки на обращение к боту.. Ой А ведь можно было немного по другому написать команду, чем мы и займемся. А переменные наши еще пригодятся в таком виде
Давайте заменим if(in_array($cmd, ['бот', 'bot'])) < на
if(in_array(mb_strtolower($messages[0]), ['бот', 'bot'])) < Теперь в теле этой проверки просто нужно отредактировать $args, $cmdА теперь добавим интересную вещь. Если вам нужно чтобы бот отвечал только тогда, когда обратились к нему, то после закрывающей скобки добавляемВ итоге у меня получился такой код:


$chatInfo = $this->request('messages.getConversationsById', ['peer_ids' => $peer_id, 'extended' => 0]);
Запрос к вк о получении данных о беседе

if($id == $chatInfo['items'][0]['chat_settings']['owner_id'] || in_array($id, $chatInfo['items'][0]['chat_settings']['admin_ids'])
Произвели проверку на совпадение id пользователя с id администраторов и создателя
Если проверка прошла, то вернули значение true, а иначе false

Объясняю как теперь это использовать в скрипте бота. Вернемся к bot.php (или как у вас называется файл бота)
После проверки на команду 'Созвать всех' добавляем проверку if где обратимся к созданной нами функции

Таким образом у нас получиться:

Также нужно отметить, что для следующей команды нужен vk_api.php который находится в архиве!!

Добавим
Теперь в ином случаем проверим на регистрацию настроек беседы. После закрывающей скобки
Полный код

Чтобы сделать беседам какие-то свои настройки, то заходим в vk_api.php, ищем функцию registrationChat и в редактируем регистрацию в записи для бд.
Теперь нужно сделать смену названия беседы в настройках, если его изменили в беседе
Теперь в скрипте бота после регистрации (и проверки на админку) мы добавим проверку на измену названия
Таким образом мы узнали о действии в беседе, ВАЖНО! в переменных у вас должен быть $chat_act = $data->object->action; А теперь давайте получим настройки для беседы и заменим название беседы на новое. Я использую RedBeanPHP, а вы можете использовать что-то другое, однако в статье всё работает через (связанное с бд) rb.php
В теле создадим новую переменную с настройками беседы
В базе название записано в столбце 'title', давайте же получим пришедшее название и заменим его
Далее просто можно уведомить, что новое название было записано в бд
Итоговый код:

В след. части полезных функций:
- Аккаунты пользователей с балансом для игр и перевод денег другим пользователям
- Парочка игр на коины (валюта)
- Перевод коинов
- Команды: онлайн, погода

Чтобы обращаться к VK API на Node.js, я всегда использую модуль easyvk. Есть и другие варианты, например, vk-io или node-vk-bot-api. Что использовать, решать вам. Но писать статьи я решил с примерами использования easyvk, так как эта библиотека мне знакома больше, чем любая другая, хотябы потому что я ее автор :)

На сайте-документации модуля написано подробно о том, как его установить и использовать.

Примеры

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

  • Токен пользователя
  • Доступ к секции messages

Теперь сам пример

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

Параметры все те же.

Настройки сообщества

Сервис можно будет найти в меню сообщества

Сервис для приглашений

Это мы уже переходим к разработке мини-чат-бота. Но, конечно, это не он.

Сначала включаем Bots LongPoll (пример будет описан на нем, так как его сможет запустить каждый желающий, позже я буду показывать примеры создания чат-ботов с помощью Callback API тоже)

Для этого заходим в настройки сообщества. И включаем все, что касается LongPoll. А именно:

Настройки сообщества (Работа с API, выставляйте новейшую версию API)

Отправка стикера

Все тот же messages.send

Если все получилось, то стикер отправился.

Отправка стикера как граффити

Да-да. И такое бывает. Особенно в последнее время. На сколько мне известно, на данный момент ВКонтакте хранит у себя на серверах 19к стикеров (там почти 20). И все они очень разные, прикольные. Некоторые уже нигде не найти. Но они все равно хранятся. Как в общем-то и любая другая информация в ВК. И это если не считать кастомных стикеров, которые люди загружают как граффити. Разберемся, как они это делают.

Граффити - это обычный документ, загруженный как png изображение. В ВК граффити отображается почти также, как стикер. В некоторых местах, разве что, он бывает в разы больше стикера. А значит и загружать мы его будем как документ.

Воспользуемся компонентом uploader для загрузки файла.

Вот есть еще такие стикосы

Происходит таким же образом, как и отправка любого документа.

Отправляем изображение

  • Изображение с жесткого диска
  • Изображение с удаленного сервера (по URL)

Оба способа поддерживаются в easyvk, поэтому я покажу оба варианта загрузки.

Panic Kalm memes

Для загрузки файла с другого сервера в easyvk есть метод vk.uploader.uploadFetchedFile()

Для загрузки файла с жесткого диска в easyvk есть метод vk.uploader.uploadFile()

На этом все! Спасибо, что дочитали до конца. Надеюсь, что эта статья вам хоть чем-то помогла и вы научились чему-то новому :)

Читайте также: