nik20z / vk_spam_bot

Бот для Вконтакте, предназначенный для рассылки сообщений от имени группы

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

spam_bot

Бот, предназначенный для рассылки сообщений от имени группы

python 3.8.5

Спам бот Вконтакте предназначен для рассылки сообщений от имени группы (в будущем планируется аддаптация под пользователей). В качестве файла с настройками используется 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), боту потребуется сначала скачать* прикреплённые файлы, а потом от своего имени загрузить* их на сервер вк. Это будет происходить при каждой обработке сообщения.. сорян за недоработку :(

About

Бот для Вконтакте, предназначенный для рассылки сообщений от имени группы


Languages

Language:Python 100.0%