Бот написанный на Python для социальной сети Вконтакте, работающий через VkBotLongPull
Project description
🤖 Бот написанный на Python для социальной сети Вконтакте, работающий через VkBotLongPull.
💭 О проекте
Данный проект разрабатывался с целью облегчить создание ботов для людей, которые мало/плохо знакомы с программированием. Бот устроен таким образом, что Вам нужно написать минимальное количество кода, чтобы добавить новый функционал. В последствии бот будет дорабатываться и развиваться.
🎈 Установка
Можете воспользоваться командой pip:
pip install shablbot
Или же использовать poetry:
poetry add shablbot
:dizzy: Инициализация
Чтобы начать работу с ботом необходимо выполнить инициализацию компонентов бота:
Для этого нужно выполнить команду:
windows
C:\shablbot> py -m shablbot --init
linux
blackgard@bar:~/shablbot$ python3 -m shablbot --init
После чего будет в папке, откуда был вызван скрипт будет созданы каталоги с следующей структурой:
📦*yourfolder*
┣ 📂commands
┃ ┣ 📂private
┃ ┃ ┗ 🐍 show_id_active_chats.py
┃ ┣ 📂public
┃ ┃ ┣ 🐍 chat_bot_off.py
┃ ┃ ┣ 🐍 chat_bot_on.py
┃ ┃ ┗ 🐍 chat_show_statistics.py
┣ 📂keyboards
┃ ┣ 📜 clear.json
┃ ┗ 📜 default.json
┣ 📂modules
┃ ┗ 📂games
┃ ┗ 🐍 flip_and_roll.py
┣ 📂phrases
┃ ┣ 📜 _default.json
┃ ┣ 📜 bye.json
┃ ┗ 📜 hello.json
┣ 📂settings
┃ ┣ 🐍 settings_model.py
┃ ┗ 🐍 settings.py
┗ 🐍 manager.py
После этого можно перейти к настройке бота.
⏳ Стартовая настройка
Настройка бота производится с помощью редактирования файла settings.py, находящегося в папке settings, созданной на шаге выше.
Обязательные поля для работы бота:
- TOKEN - ключ доступа к сообществу вконтакте, ключ должен быть с правами к сообщениям сообщества. Как получить токен для бота?
TOKEN = os.getenv("TOKEN") # "1234566789908798689764867293876243987" (str)
- BOT_CHAT_ID - id страницы вконтакте сообщества, от лица которого будет работать бот.
BOT_CHAT_ID = os.getenv("BOT_CHAT_ID") # 123456789 (int)
- DEFAULT_REACTION_TEMPLATES - слова на которые бот будет всегда как-либо реагировать.
DEFAULT_REACTION_TEMPLATES = (r"бот",) # (tuple)
- ADMIN_ID - id страницы вконтакте человека, от лица которого будет происходить администрирование бота.
ADMIN_ID = os.getenv("ADMIN_ID") # 123456789 (int)
Остальные параметры для начального запуска бота менять не нужно.
🔔 Советую для хранения токена и id-ов использовать .env файл. К примеру используйте python-dotenv.
🚀 Запуск бота
Для запуска бота мы используем файл manager.py, созданный на первом шаге.
windows
C:\shablbot> py manager.py --run
linux
blackgard@bar:~/shablbot$ python3 manager.py --run
Если вы все правильно сделали, то в консоли увидите следующее сообщение:
2099-99-99 at -1:99:99 | INFO | ------- Бот запущен / Bot is runing -------
:card_file_box: Модульность бота
То, как бот обрабатывает команды и сообщения от Вас спрятано. По этому Вам доступны 5 типов модулей, для расширения и настройки бота:
commands
Модуль отвечающий за команды управления ботом. Нужен для администрирования. Делятся на два типа:
- private - доступные только администратору бота
- public - доступные всем пользователям
:bell: Команды нужно подключать в настройках бота. Переменная ACTIVE_COMMANDS.
Для добавления новой команды вам нужно создай файл в папке private/public с *название_команды*.py.
В созданном файле нужно создать переменную command_settings с следующей структурой:
command_settings = {
# Код команды. Должен быть уникальным.
"code": "bot_off",
# Название команды. Публичная переменная.
"name": "Выключить бота",
# Слова, на которые бот будет реагировать.
# Может быть регулярным выражением.
"templates": ["выкл бот", "бот выкл"],
# Ответ бота, на результат выполненной команды.
"answer": "Теперь бот не читает сообщения в чате",
# Описание команды. Публичная переменная.
"description": "Команда для выключения бота в чате (Внутри чата)",
# Метод обработки templates. Если normal, то сравнивает как слова.
# Если regular, то сравнивает как регулярные выражения.
"method": "normal",
# Какие переменные нужны для выполнения команды.
# Доступные значения = processed_chat, chats, commands;
"need": ["processed_chat",],
# Входная точка для выполнения команды.
# Может быть любой функцией.
"entry_point": command
}
Функция выключения бота в чате:
def command(processed_chat: Chat) -> None:
processed_chat.turn_off()
keyboards
Модуль отвечающий за варианты клавиатуры бота. Нужен для настройки сообщений, если вы хотите использовать клавиатуру в сообщениях бота.
Про клавиатуру Vk подробнее читать тут
:bell: Клавиатуры нужно подключать в настройках бота. Переменная KEYBOARDS.
:warning: Обязательно для работы бота нужны, "clear.json" и "default.json"
modules
Модуль отвечающий за пользовательские модули для бота. К таким модулям можно отнести:
- Игры
- Утилиты (Погода, время, конвертирование валюты)
:bell: Модули нужно подключать в настройках бота. Переменная ACTIVE_MODULES.
:warning: Данный блок еще не совершенен, т.к. всегда требует возврата строки как ответа, в будущем будет как ответ отправлять все типы данных
Для создания модуля Вам необходимо создать файл с названием модуля и добавить туда переменную settings с следующей структурой:
settings = {
# Название модуля.
"name": "Flip and roll game",
# Версия модуля.
"version": "1.0.0",
# Автор модуля.
"author": "Narteno",
# Дата создания модуля.
"date_created": "12.11.2019",
# Входная точка обработки модуля.
"entry_point": activate_module,
# Обрабатывающие запросы функции модуля.
# В себя включают название функции, описание
# и входную точку. Нужен для более гибкой настройки.
"func": {
"roll": {"name": "roll", "description": "", "entry_point": roll},
"flip": {"name": "flip", "description": "", "entry_point": flip},
},
# Фразы для реакции. Разделяются по функциям модуля.
"templates": {"flip": [r"флип"], "roll": [r"ролл"]},
}
Входная точка модуля должна иметь такую структуру, но не ограничена этим:
def activate_module(func) -> str:
"""Входная точка модуля"""
active_func = settings["func"].get(func)["entry_point"]
# Если переменная ответа будет в значении None.
# То бот не отправит сообщение пользователю.
answer_module = None
if active_func:
answer_module = active_func()
return answer_module
Подробнее о структуре кастомных модулей смотрите тут flip_and_roll.py
phrases
Модуль отвечающий за фразы, на которые бот реагирует. Содержит в себе файлы .json формата.
:bell: Все фразы из папки подгружаются автоматически. Вы можете исключить ненужные фразы используя в настройках переменную EXCLUDED_PHRASES.
json файл должен содержать следующую структуру:
:warning: Значения с пометкой "_comment" в реальном файле не должны пристутствовать.
{
"#group_comment#":"Стандартная группа. нельзя удалять"
"group": "default",
"#words_comment#":"Список слов входящих в группу"
"words": {
"#main_comment#":"Название слова, на которое бот реагирует. Может содержать любые символы. Для файла _default.json 'main' обязательное системное значение"
"main": {
"#templates_comment#":"Фразы для реакции"
"templates": [ "бот" ],
"#answer_comment#":"Варианты ответа разбитые по редкости"
"answer": {
"common": ["Я бот"],
"uncommon": ["Я почти бот"],
"rare": ["Я точно бот"],
"legendary": ["А может быть это ты бот?"]
},
"#templates_comment#":"Ключ клавиатуры, которую нужно отправить для данного слова."
"keyboard": "default"
},
}
}
settings
Модуль отвечающий за настройки бота. Все настройки производятся в файле settings.py. В файле для каждой переменной имеются комментарии, поясняющие, что в них хранится.
💻 Пример работы
Бот по имени "Ходор" - клик-клик (вк)
🧰 CLI Shablbot
Для бота разработано CLI. Доступные методы:
(env) C:\Users\user\Desktop\shablbot>py manager.py --help
usage: python manage.py [-h] [-r] [-i] [-c]
🤖 Бот написанный на Python для социальной сети Вконтакте, работающий через VkBotLongPull
optional arguments:
-h, --help show this help message and exit
-r, --run-bot Запустить сервер для работы бота
-i, --init Инициировать каталоги для работы бота [ "commands", "keyboards", "modules", "phrases", "settings", "manager.py" ]
-c, --check-bot Проверить работоспособность бота без запуска сервера
(c) Alex Drachenin
Для старта работы с ботом вы можете воспользоваться методом "--init" таким образом:
(env) C:\Users\user\Desktop\shablbot>py -m shablbot --init
Каталог 'commands' инициирован!
Каталог 'keyboards' инициирован!
Каталог 'modules' инициирован!
Каталог 'phrases' инициирован!
Каталог 'settings' инициирован!
Файл manager.py инициирован!
❔ Как получить токен для работы бота?
Для начала нам нужно создать сообщество. Для этого переходим в вк в вкладку "Сообщества" и нажимаем кнопку "Создать сообщество".
Там вы заполняете всю необходимую вам информацию, со всем соглашаетесь и попадаете на страницу группы. Там нам нужно найти вкладку "Управление". В меню справа найдите "Настройки"->"Работа с API".
На той странице будет 3 вкладки. Из них нам нужны только 1 и 3:
- Нажимаем кнопку "Создать ключ", выбираем все необходимые нам доступы (желательно все) и нажимаем "Создать". Данный ключ нужен для переменной TOKEN в настройках бота.
- Не нужна, пропускаем ее.
- На данной вкладке вам нужно выбрать версию API, бот тестировался на самом последней версии в момент написания (5.131), советую выбирать самую свежую. Так же вам нужно установить "Long Poll API" в значение "Включено". После этого переходим на вкладку "Тип событий" и выбираем нужные вам значения. Минимальные для работы бота:
- Входящее сообщение
- Исходящее сообщение
После этого ваш бот готов к работе, можете начинать его тестировать, удачи!
✍️ Автор
- @alex_blackgard - создатель бота и человек, который будет рад любой помощи в доработке бота 🐙💭🌎
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
File details
Details for the file shablbot-2.0.4-py2.py3-none-any.whl
.
File metadata
- Download URL: shablbot-2.0.4-py2.py3-none-any.whl
- Upload date:
- Size: 43.0 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.10.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | b015506f3bd6375f20b82ea55785580865e680f2db66a291bc026c99ea0a99b8 |
|
MD5 | 21ed77fdda384576d4f6bc80274b148f |
|
BLAKE2b-256 | 0d2a668cf9dab772af88b650366e1e3e9b0f642895eabd96fe9cfc6d13768dcd |