Бот, предназначенный для рассылки сообщений от имени группы
Спам бот Вконтакте предназначен для рассылки сообщений от имени группы (в будущем планируется аддаптация под пользователей). В качестве файла с настройками используется json (для редактирования можно открыть в блокноте) и в качестве БД с id пользователей обычный excel.
Список используемых библиотек и модулей:
import vk_api
import time
import json
import os
import requests
import transliterate
import pandas as pd
from langdetect import detect
from pprint import pprint
from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType
Основные понятия:
Профиль - название листа в файле excel, с которого бот будет брать id пользователей для рассылки.
Текущий профиль - профиль, который выбран для рассылки.
Главный профиль - профиль с названием user_ids.
Стартовая клавиатура - клавиатура, имеющая команды: 'Start' и 'Change', слева от 'Change' показан текущий профиль.
Список команд:
Change - изменить текущий профиль. После использования этой команды, появится клавиатура с вариантами профилей.
Start - запустить процесс обработки предыдущего сообщения. Далее бот отправит пример сообщения, которое будет рассылаться, а также, выведет клавиатуру с командой Confirm.
Confirm - подтверждение рассылки, после успешного выполнения отправит сообщение со временем, затраченным на рассылку.
Get user ids - запишет в файл 'user_ids.xlsx' на лист 'user_ids' информацию о всех участниках группы (name, id and link).
Close - скрыть клавиатуру (не будет появляться только стартовая клавиатура и клавиатура с командой 'Confirm'*).
Open - открыть клавиатуру.
Варианты работы с ботом:
1) Отправить сообщение для рассылки и потом заюзать команду 'Start'.
2) Переслать сообщение для рассылки с командой 'Start'.
Порядок настройки:
1) В файле 'settings.json' изменить значения по ключам:
* vk_bot => token (токен сообщества);
* vk_bot => group_id (id сообщества);
* vk_bot => admins (массив id пользователей, которые будут иметь возможность взаимодействовать с ботом).
2) В файле 'user_ids.xlsx':
* заполнить колонки в главном профиле или создать свой;
* заполнить одну из двух колонок в профиле (листе): 'id' (id пользователя) или 'link' (ссылка на пользователя). Бот использует данные из колонки 'id', если будет заполнена только 'link', то бот преобразует ссылки в id пользователей и заполнит пропуски в колонке 'id'.
Что можно изменять в 'settings.json'?
- в options => commands можно изменять названия команд;
- в options => keyboard => color можно изменить цвет клавиатуры (primary - синий, secondary - белый, negative - красный, positive - зелёный);
- vk_bot => delete_files отвечает за действие с файлами, которые будут загружаться во время работы (true - удалять, false - не удалять);
- vk_bot => time_sleep_exceptions время задержки после срабатывания исключений в секундах.
Планы на доработку:
- написать функцию, которая будет преобразовывать массив профилей для клавиатуры (команда Change) в двумерный массив с определённым количеством столбцов (макс. 5 - ограничение вк) и строк (макс. 10) (в данный момент кнопки выводятся в один столбец - create_rows_in_mas(sheet_names), где sheet_names - массив).
- возможность рассылки от имени пользователя.
- добавить команду для получения списка друзей определённого пользователя.
- добавить возможность получения списка всех бесед и записи информации о пользователях, которые там сидят.
- добавить GUI.
Коротко о нюансах:
- не получается обработать аудио альбом и сторонние ссылки (не прикрепляется фотка).
- история отсылается как сторонняя ссылка.
Все возможные типы вложений (* - всё работает отлично, @ - имеются недоработки):
1. Фотография (type = photo) *
2. Видеозапись (type = video) *
3. Аудиозапись (type = audio) *
4. Документ (type = doc) *
Допустимые форматы: любые форматы за исключением mp3 и исполняемых файлов (exe и др).
4.1. Граффити (type = graffiti) *
имеет тип doc, но для получения данных после запроса на сервер нужно юзать graffiti.
4.2. Голосовое (type = audio_message) *
5. Ссылка (type = link) @
проблемы с фото (превью)
6. Товар (type = market) *
7. Подборка товаров (type = market_album) *
8. Запись на стене (type = wall) *
9. Комментарий на стене (type = wall_reply) *
10. Стикер (type = sticker) *
11. Подарок (type = gift) @
банально, не вижу смысла разбираться с возможностью отправки подарков.
13. Геометка (geo) *
14. Сторис / история (type = story) @
даёт левую ссылку, без интерфейса вк
15. Ответ на сообщение (reply_message) *
отправит первоначальное сообщение, которое было переслано.
16. Пересланное сообщение (fwd_messages) *
если переслать более 1 сообщения, то вылезет предупреждение
P.S. можно ответить на сообщение (например, своё же, и написать команду Start) или переслать, но т.к. боту нужно всего лишь одно сообщение, то на несколько пересланных он начнёт ругаться :)
Стоит отметить, что для рассылки документов (4, 4.1, 4.2), боту потребуется сначала скачать* прикреплённые файлы, а потом от своего имени загрузить* их на сервер вк. Это будет происходить при каждой обработке сообщения.. сорян за недоработку :(