diff --git a/.gitignore b/.gitignore index b29515b..b301c7e 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,11 @@ config.py *.json *.log /venv/ +test.py +.idea/dan63047pythonbot.iml +.idea/misc.xml +.idea/modules.xml +.idea/vcs.xml +.idea/inspectionProfiles/profiles_settings.xml +randomcolor.jpg +.idea/.gitignore diff --git a/README.md b/README.md index 1120d64..24580ba 100644 --- a/README.md +++ b/README.md @@ -13,9 +13,11 @@ vk_mda = vk_api.VkApi(token="vk_app_service_key") # Костыль для тог group_id = 190322075 # Цифровой id вашего сообщества album_for_command = 269199619 # Цифровой id альбома для команды !image owner_id = 276193568 # Ваш цифровой id -own = pyowm.OWM('OpenWeather_api_key', language='ru') # Ключ OpenWeather API для функции погоды +owm = pyowm.OWM('OpenWeather_api_key', language='ru') # Ключ OpenWeather API для функции погоды ``` +Установите в группе версию Long Poll API на 5.103 + Запустите `dan63047bot.py`, что бы бот начал слушать сервер # Функции бота @@ -32,7 +34,11 @@ own = pyowm.OWM('OpenWeather_api_key', language='ru') # Ключ OpenWeather API * **!byn** — бот получает с помощью НБ РБ API текущий курс белорусского рубля и отправляет её вам * **!echo** — бот начинает повторять за вами, чтобы это остановить, надо написать *!echo off* * **!game *камень/ножницы/бумага/статистика*** — бот играет с вами в "Камень, ножницы, бумага" и ведет статискику игр, которую записывает в файл json +* **!midnight** — бот будет уведомлять о каждом миднайте по Московскому времени. Введите ещё раз, чтобы отменить это * **!debug** — бот отправляет информацию о своём состоянии +* **!debug *log*** — бот отправляет последние 10 строк из своего лога. Доступно только вам +* **!debug *bots*** — бот отправляет информацию о обьектах бота в памяти. Доступно только вам +* **!access *all/owner*** — позволяет в беседе установить уровень доступа к командам !midnight и !debug. all - все могут пльзоваться. owner - только вы. Доступно только вам # Использованные библиотеки @@ -44,4 +50,6 @@ own = pyowm.OWM('OpenWeather_api_key', language='ru') # Ключ OpenWeather API С ботом можно пообщаться [здесь](https://vk.com/im?sel=-190322075) +Автор бота: [Даниил Михайлов](https://vk.com/dan63047) + Буду рад помощи и поддержке \ No newline at end of file diff --git a/dan63047bot.py b/dan63047bot.py index 6170e8f..25e1786 100644 --- a/dan63047bot.py +++ b/dan63047bot.py @@ -9,6 +9,9 @@ import json import threading import wikipediaapi as wiki from collections import deque + +from PIL import Image + from config import vk, owm, vk_mda, group_id, album_for_command, owner_id from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType @@ -136,7 +139,14 @@ class VkBot: midnight_output += "Картинка дня:" image = self.random_image() elif random_thing == 2: - midnight_output += "Цвет дня в формате HEX: #%02x%02x%02x" % (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)) + R = random.randint(0, 255) + G = random.randint(0, 255) + B = random.randint(0, 255) + random_color_image = Image.new("RGB", (512, 512), (R, G, B)) + random_color_image.save("randomcolor.jpg") + what_send = vk_api.upload.VkUpload(vk).photo_messages("randomcolor.jpg", peer_id=self._CHAT_ID) + image = "photo" + str(what_send[0]['owner_id']) + "_" + str(what_send[0]['id']) + midnight_output += "Цвет дня в формате HEX: #%02x%02x%02x" % (R, G, B) self.send(midnight_output, image) log(False, f"Бот id{self._CHAT_ID} оповестил о миднайте") @@ -144,29 +154,27 @@ class VkBot: def get_message(self, message, user_id): if self._ECHO_MODE: if message == "!echo off": - self.send(message) + self.send("Эхо режим выключен") self._ECHO_MODE = False log(False, f"Бот id{self._CHAT_ID} вышел из режима эхо") else: self.send(message) log(False, f"Эхо-бот id{self._CHAT_ID}: {message}") elif self._AWAITING_INPUT_MODE: - if self._AWAITING_INPUT_MODE == "reminder task": - if message == "Назад": - self._AWAITING_INPUT_MODE = None - self.send("Установка напоминания отменена") - else: + if message == "Назад": + self._AWAITING_INPUT_MODE = None + self.send("Установка напоминания отменена") + else: + if self._AWAITING_INPUT_MODE == "reminder task": self.reminder(message, "task") - self.send('Когда напомнить?') + self.send('Когда напомнить? (время в формате дд.мм.гг чч:мм)') self._AWAITING_INPUT_MODE = 'reminder time' - elif self._AWAITING_INPUT_MODE == 'reminder time': - if message == "Назад": - self._AWAITING_INPUT_MODE = None - self.send("Установка напоминания отменена") - else: - self.reminder(message, "time") - self.send("Напоминание установлено") - self._AWAITING_INPUT_MODE = None + elif self._AWAITING_INPUT_MODE == 'reminder time': + if self.reminder(message, "time"): + self.send("Напоминание установлено") + self._AWAITING_INPUT_MODE = None + else: + self.send("Неверный формат времени, введите время в формате дд.мм.гг чч:мм") else: respond = {'attachment': None, 'text': None} message = message.split(' ', 1) @@ -178,7 +186,7 @@ class VkBot: elif message[0] == self._COMMANDS[2] or message[0] == self._COMMANDS[5]: respond[ - 'text'] = "Я бот, призванный доставлять неудобства.
Команды:
!my_id - сообщит ваш id в ВК
!user_id *id* - сообщит информацию о этом пользователе
!group_id *id* - сообщит информацию о этой группе
!image - отправляет рандомную картинку из альбома
!weather *город* - отправляет текущую погоду в городе (данные из OpenWeather API)
!wiki *запрос* - отправляет информацию об этом из Wikipedia
!byn - отправляет текущий курс валют, полученный из API НБ РБ
!echo - бот отправляет вам всё, что вы ему пишите
!game *камень/ножницы/бумага/статистика* - бот будет играть с вами в \"Камень, ножницы, бумага\" и записывать статистику
!midnight - бот будет уведомлять вас о 00:00 по Москве. Отправьте ещё раз, чтобы бот больше вас не уведомлял
!h, !help - справка
Дата последнего обновления: 16.05.2020 (обновление команды !midnight)
Проект бота на GitHub: https://github.com/dan63047/dan63047pythonbot" + 'text'] = "Я бот, призванный доставлять неудобства.
Команды:
!my_id - сообщит ваш id в ВК
!user_id *id* - сообщит информацию о этом пользователе
!group_id *id* - сообщит информацию о этой группе
!image - отправляет рандомную картинку из альбома
!weather *город* - отправляет текущую погоду в городе (данные из OpenWeather API)
!wiki *запрос* - отправляет информацию об этом из Wikipedia
!byn - отправляет текущий курс валют, полученный из API НБ РБ
!echo - бот отправляет вам всё, что вы ему пишите
!game *камень/ножницы/бумага/статистика* - бот будет играть с вами в \"Камень, ножницы, бумага\" и записывать статистику
!midnight - бот будет уведомлять вас о 00:00 по Москве. Отправьте ещё раз, чтобы бот больше вас не уведомлял
!h, !help - справка
Дата последнего обновления: 20.05.2020 (обновление команды !midnight)
Проект бота на GitHub: https://github.com/dan63047/dan63047pythonbot" elif message[0] == self._COMMANDS[3]: try: @@ -319,8 +327,15 @@ class VkBot: set_up = {"task": None, "time": None} if stage == "task": set_up['task'] = string + return True elif stage == "time": - pass + try: + datetime_object = time.strptime(string, '%d.%m.%y %H:%M') + set_up['time'] = time.mktime(datetime_object) + return True + except ValueError: + return False + def game(self, thing):