pythonbot/README.md

95 lines
15 KiB
Markdown
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Мой личный бот на python для ВК
#### от dan63047
Этот бот просто отвечает на поддерживаемые запросы в переписке с сообществом. Был написан мною в целях изучения python. Этот README является инструкцией по установке и использованию бота.
# Функции бота
Чтобы воспользоваться функциями бота, необходимо отправить команду и в некоторых случаях аргумент. Все команды начинаются с восклицательного знака
* **!h, !help, !п, !помощь** — бот отправляет список команд и их краткое описание из `help.txt`, а так же дату последнего обновления и ссылку на этот репозиторий
* **!my_id, !ид** — бот достаёт из вашего сообщения `user_id` и отправляет его вам
* **!user_id, !пользователь *id*** — бот отправляет *id* нужного вам пользователя в vk api методом `users.get` и отправляет вам полученные этим методом данные: имя, фамилия, id, пол, время последнего онлайна и платформы, закрыт ли профиль
* **!group_id, !группа *id*** — бот отправляет *id* нужного вам сообщества в vk api методом `groups.getById` и отправляет вам полученные этим методом данные: название, описание, id, количество подписчиков
* **!image, !картинка** — бот, с помощью костыля в виде сервисного ключа приложения, получает vk api методом `photos.get` фотографии альбома, выбирает с помощью функции в python `random.randrange` одну фотографию и отправляет вам её как attachment
* **!random, !рандом *число1* *число2*** — бот генерирует с помощью `random.randint()` случайное число и отправляет его вам. Если без аргументов, то число от 0 до 10. Если есть одно число, то от 0 до *число1*. Если есть оба числа, то от *число1* до *число2*
* **!weather, !погода *город*** — бот получает с помощью OpenWeather API текущую погоду в городе и отправляет её вам
* **!wiki, !вики *запрос*** — бот получает с помощью Wikipedia API краткое описание статьи по запросу и отправляет её вам
* **!byn, !белруб** — бот получает с помощью НБ РБ API текущий курс белорусского рубля и отправляет её вам
* **!echo, !эхо** — бот начинает повторять за вами, чтобы это остановить, надо написать *!echo off*
* **!game, !игра *камень/ножницы/бумага/статистика*** — бот играет с вами в "Камень, ножницы, бумага" и ведет статистику игр, которую записывает в файл БД
* **!midnight, !полночь** — бот будет уведомлять о каждом миднайте по Московскому времени. Введите ещё раз, чтобы отменить это
* **!subscribe, !подписаться** — бот будет уведомлять вас о каждом новом посте. Введите ещё раз, чтобы отменить это
* **!debug, !дебаг** — бот отправляет информацию о своём состоянии
* **!debug *log***, **!дебаг *лог*** — бот отправляет последние 10 строк из своего лога. Доступно только вам
* **!debug *bots***, **!дебаг *боты*** — бот отправляет информацию об объектах бота в памяти. Доступно только вам
* **!debug *game***, **!дебаг *игра*** — бот отправляет всю статистику по игре !game
* **!access *all/owner***, **!доступ *владелец/все*** — позволяет в беседе установить уровень доступа к командам *!midnight*, *!subscribe* и *!debug*. *all* - все могут пользоваться. *owner* - только вы. Доступно только вам
* **!turnoff, !выкл** — даёт боту команду на выключение. Доступно только вам
* **!admin_mode, !админмод** — если чат, в которой активируется команда, является беседой и в ней у бота есть полномочия администратора, то бот переходит в режим модерации. Пока что он может только кикать людей за @all и @online, реагировать на приход/уход участника беседы и дать возможность пользоваться командой *!ban*. Введите ещё раз, чтобы выключить режим модерации. Доступно только вам
* **!ban, !бан *@user*** — банит пользователя из беседы (в смысле выгоняет, юзер не сможет вернуться пока бот или админ не предложит). Требует режим модерации, могут воспользоваться только администраторы
* **!resist, !запретить *@user*** — запрещает пользователю пользоваться ботом, могут воспользоваться только администраторы
* **!restore, !разрешить *@user*** — снова разрешает пользователю пользоваться ботом, могут воспользоваться только администраторы
* **!spammer *add* *@user*, !спаммер *добавить* *@user*** — Добавляет пользователя в "базу спамеров". Если пользователь из этой базы попытается присоединится к беседе, в которой он внесён в эту самую базу, он тут же будет изгнан. Требует режим модерации, могут воспользоваться только администраторы
* **!spammer *remove* *@user*, !спаммер *удалить* *@user*** — Убирает пользователя из "базу спамеров". Требует режим модерации, могут воспользоваться только администраторы
* **бот дай денег** — Посылает вас нахуй
# Установка и запуск бота
Лучшим решением будет иметь платный аккаунт на [pythonanywhere](https://www.pythonanywhere.com/), чтобы запускать бота, как Always-on task. Можно, конечно, запускать бота в консоли, но pythonanywhere может выключить вашу консоль, если вы долго не будете посещать её.
## Основа
Итак, заходим на pythonanywhere, входим или регистрируемся.
Создаём консоль на bash и прописываем:
`git clone https://github.com/dan63047/dan63047pythonbot.git`
Эта команда создаст папку `dan63047pythonbot` и поместит туда бота.
Теперь заходим в директорию бота (`cd dan63047pythonbot/`) и устанавливаем необходимые библиотеки:
`pip3 install vk-api pyowm Wikipedia-API --user`
Эта команда установит все необходимые библиотеки для работы бота.
Настроим ваше сообщество для работы с ботом: заходим в *Управление -> Работа с API*. Здесь создаём токен сообщества с правами доступа к сообщениям, фотографиям и стене. Идем в *Long Poll API*, включаем его и ставим последнюю доступную версию (бот тестировался на версии 5.120). В *Типы событий* должны стоять галочки на следующих событиях: Входящее сообщение, Запрет на получение, Добавление записи на стене.
Создадим файл конфигурации для бота: В pythonanywhere тыкаем на *Files*, переходим в директорию *dan63047pythonbot* и создаём там новый фаил с названием `config.py`. В нём должно быть написано следующее:
```python
vk_group_token = "vk_group_token" # Токен сообщества
group_id = 190322075 # Цифровой ид группы
owner_id = 276193568 # Цифровой ид вашей страницы вк, чтобы вы могли управлять ботом в переписке
admins = [276193568, 629085267] # Список ид аккаунтов администраторов, которые в любом случае тоже смогут получать доступ к командам администрирования, оставьте пустым, если их нет
vk_service_token = "vk_service_token" # Сервисный ключ доступа для команды !image. Оставьте None, если хотите выключить эту команду
album_for_command = 269199619 # Цифровой ид альбома для команды !image. Оставьте None, если хотите выключить эту команду
openweathermap_api_key = 'openweathermap_api_key' # Ключ OpenWeather API. Оставьте None, если хотите выключить команду !weather
```
## Если вы будете использовать команду !image
Разберёмся с костылём для метода `photos.get`: Идем на `vk.com/dev`, нажимаем на *Мои приложения* и кликаем по *Создать приложение*. Новое приложение может называться как угодно, от него нам необходимо всего лишь сервисный ключ доступа, который можно найти, если нажать на *Настройки*
## Если вы будете использовать команду !weather
Перейдите по `openweathermap.org`, пройдите там регистрацию и создайте API ключ
## Запуск бота
Если аккаунт платный: в pythonanywhere тыкаем на *Tasks*, создаём и запускаем в *Always-on tasks* задачу `python3.8 /home/pythonanywhere_nickname/dan63047pythonbot/longpulling.py`, где вместо pythonanywhere_nickname должен быть ваш никнейм на pythonanywhere. После небольшого тупления pythonanywhere запустит вашего бота.
Если аккаунт бесплатный: в bash консоли переходим в директорию бота и прописываем `python3 longpulling.py`. Консоль можно оставить в покое, но лучше раз в день проверять её чтобы консоль не отключили
## Другие варианты запуска бота
Скорее всего, вы можете найти где-нибудь VPS или организовать всё на своём компьютере. Там вы просто скачиваете и устанавливаете Python последней версии, настраиваете конфиг бота и запускаете его.
# botconsole.py
Если вы введёте команду `pyhton3 botconsole.py`, то запустится консоль бота. Она пока находится в разработке и не может управлять именно ботом, скорее вы просто будете выполнять действия от лица бота. Вот список поддерживаемых команд:
* **help** — выводит список доступных команд
* **exit** — завершает работу консоли
* **message *peer_id* *message*** — отправляет *message* в переписку *peer_id* от имени сообщества
* **msg_history *peer_id* *count*** — возвращает историю переписки, последние *count* сообщений. Если *count* не указано, то последние 20 сообщений
На следующей команде хотелось бы уделить особое внимание, ведь с помощью неё можно вызывать функции бота
## Команда **bot**
Если просто вызвать эту команду, то она покажет список существующих объектов ботов. Однако так же у команды есть и большое количество аргументов:
* **bot *update*** — обновляет список объектов ботов и их состояние
* **bot *create* *peer_id*** — создаёт объект бота для переписки *peer_id*
* **bot *delete* *peer_id*** — удаляет существующий объект бота для переписки *peer_id*
* **bot *changeMidnightFlag* *peer_id*** — меняет флаг в объекте бота *peer_id*, по которому он определяет, надо ли оповещать о Midnight
* **bot *midnight* *peer_id*** — инициирует ивент Midnight для объекта бота *peer_id*
# Использованные библиотеки
* [vk_api](https://github.com/python273/vk_api) — модуль для создания скриптов для социальной сети Вконтакте
* [pyowm](https://github.com/csparpa/pyowm) — модуль для получения погоды через OpenWeather API
* [Wikipedia-API](https://github.com/martin-majlis/Wikipedia-API) — модуль для получения статей из Wikipedia
# Дополнительно
Автор бота: [Даниил Михайлов](https://vk.com/dan63047)
Буду рад помощи и поддержке