!midnight & README update

This commit is contained in:
dan63047 2020-05-20 19:36:28 +03:00
parent 99dce45584
commit 256d76a07d
3 changed files with 50 additions and 19 deletions

8
.gitignore vendored
View File

@ -3,3 +3,11 @@ config.py
*.json *.json
*.log *.log
/venv/ /venv/
test.py
.idea/dan63047pythonbot.iml
.idea/misc.xml
.idea/modules.xml
.idea/vcs.xml
.idea/inspectionProfiles/profiles_settings.xml
randomcolor.jpg
.idea/.gitignore

View File

@ -13,9 +13,11 @@ vk_mda = vk_api.VkApi(token="vk_app_service_key") # Костыль для тог
group_id = 190322075 # Цифровой id вашего сообщества group_id = 190322075 # Цифровой id вашего сообщества
album_for_command = 269199619 # Цифровой id альбома для команды !image album_for_command = 269199619 # Цифровой id альбома для команды !image
owner_id = 276193568 # Ваш цифровой id 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`, что бы бот начал слушать сервер Запустите `dan63047bot.py`, что бы бот начал слушать сервер
# Функции бота # Функции бота
@ -32,7 +34,11 @@ own = pyowm.OWM('OpenWeather_api_key', language='ru') # Ключ OpenWeather API
* **!byn** — бот получает с помощью НБ РБ API текущий курс белорусского рубля и отправляет её вам * **!byn** — бот получает с помощью НБ РБ API текущий курс белорусского рубля и отправляет её вам
* **!echo** — бот начинает повторять за вами, чтобы это остановить, надо написать *!echo off* * **!echo** — бот начинает повторять за вами, чтобы это остановить, надо написать *!echo off*
* **!game *камень/ножницы/бумага/статистика*** — бот играет с вами в "Камень, ножницы, бумага" и ведет статискику игр, которую записывает в файл json * **!game *камень/ножницы/бумага/статистика*** — бот играет с вами в "Камень, ножницы, бумага" и ведет статискику игр, которую записывает в файл json
* **!midnight** — бот будет уведомлять о каждом миднайте по Московскому времени. Введите ещё раз, чтобы отменить это
* **!debug** — бот отправляет информацию о своём состоянии * **!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/im?sel=-190322075)
Автор бота: [Даниил Михайлов](https://vk.com/dan63047)
Буду рад помощи и поддержке Буду рад помощи и поддержке

View File

@ -9,6 +9,9 @@ import json
import threading import threading
import wikipediaapi as wiki import wikipediaapi as wiki
from collections import deque from collections import deque
from PIL import Image
from config import vk, owm, vk_mda, group_id, album_for_command, owner_id from config import vk, owm, vk_mda, group_id, album_for_command, owner_id
from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType
@ -136,7 +139,14 @@ class VkBot:
midnight_output += "Картинка дня:" midnight_output += "Картинка дня:"
image = self.random_image() image = self.random_image()
elif random_thing == 2: 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) self.send(midnight_output, image)
log(False, f"Бот id{self._CHAT_ID} оповестил о миднайте") log(False, f"Бот id{self._CHAT_ID} оповестил о миднайте")
@ -144,29 +154,27 @@ class VkBot:
def get_message(self, message, user_id): def get_message(self, message, user_id):
if self._ECHO_MODE: if self._ECHO_MODE:
if message == "!echo off": if message == "!echo off":
self.send(message) self.send("Эхо режим выключен")
self._ECHO_MODE = False self._ECHO_MODE = False
log(False, f"Бот id{self._CHAT_ID} вышел из режима эхо") log(False, f"Бот id{self._CHAT_ID} вышел из режима эхо")
else: else:
self.send(message) self.send(message)
log(False, f"Эхо-бот id{self._CHAT_ID}: {message}") log(False, f"Эхо-бот id{self._CHAT_ID}: {message}")
elif self._AWAITING_INPUT_MODE: elif self._AWAITING_INPUT_MODE:
if self._AWAITING_INPUT_MODE == "reminder task": if message == "Назад":
if message == "Назад": self._AWAITING_INPUT_MODE = None
self._AWAITING_INPUT_MODE = None self.send("Установка напоминания отменена")
self.send("Установка напоминания отменена") else:
else: if self._AWAITING_INPUT_MODE == "reminder task":
self.reminder(message, "task") self.reminder(message, "task")
self.send('Когда напомнить?') self.send('Когда напомнить? (время в формате дд.мм.гг чч:мм)')
self._AWAITING_INPUT_MODE = 'reminder time' self._AWAITING_INPUT_MODE = 'reminder time'
elif self._AWAITING_INPUT_MODE == 'reminder time': elif self._AWAITING_INPUT_MODE == 'reminder time':
if message == "Назад": if self.reminder(message, "time"):
self._AWAITING_INPUT_MODE = None self.send("Напоминание установлено")
self.send("Установка напоминания отменена") self._AWAITING_INPUT_MODE = None
else: else:
self.reminder(message, "time") self.send("Неверный формат времени, введите время в формате дд.мм.гг чч:мм")
self.send("Напоминание установлено")
self._AWAITING_INPUT_MODE = None
else: else:
respond = {'attachment': None, 'text': None} respond = {'attachment': None, 'text': None}
message = message.split(' ', 1) message = message.split(' ', 1)
@ -178,7 +186,7 @@ class VkBot:
elif message[0] == self._COMMANDS[2] or message[0] == self._COMMANDS[5]: elif message[0] == self._COMMANDS[2] or message[0] == self._COMMANDS[5]:
respond[ respond[
'text'] = "Я бот, призванный доставлять неудобства. <br>Команды:<br>!my_id - сообщит ваш id в ВК<br>!user_id *id* - сообщит информацию о этом пользователе<br>!group_id *id* - сообщит информацию о этой группе<br>!image - отправляет рандомную картинку из альбома<br>!weather *город* - отправляет текущую погоду в городе (данные из OpenWeather API)<br>!wiki *запрос* - отправляет информацию об этом из Wikipedia<br>!byn - отправляет текущий курс валют, полученный из API НБ РБ<br>!echo - бот отправляет вам всё, что вы ему пишите<br>!game *камень/ножницы/бумага/статистика* - бот будет играть с вами в \"Камень, ножницы, бумага\" и записывать статистику<br>!midnight - бот будет уведомлять вас о 00:00 по Москве. Отправьте ещё раз, чтобы бот больше вас не уведомлял<br>!h, !help - справка<br>Дата последнего обновления: 16.05.2020 (обновление команды !midnight)<br>Проект бота на GitHub: https://github.com/dan63047/dan63047pythonbot" 'text'] = "Я бот, призванный доставлять неудобства. <br>Команды:<br>!my_id - сообщит ваш id в ВК<br>!user_id *id* - сообщит информацию о этом пользователе<br>!group_id *id* - сообщит информацию о этой группе<br>!image - отправляет рандомную картинку из альбома<br>!weather *город* - отправляет текущую погоду в городе (данные из OpenWeather API)<br>!wiki *запрос* - отправляет информацию об этом из Wikipedia<br>!byn - отправляет текущий курс валют, полученный из API НБ РБ<br>!echo - бот отправляет вам всё, что вы ему пишите<br>!game *камень/ножницы/бумага/статистика* - бот будет играть с вами в \"Камень, ножницы, бумага\" и записывать статистику<br>!midnight - бот будет уведомлять вас о 00:00 по Москве. Отправьте ещё раз, чтобы бот больше вас не уведомлял<br>!h, !help - справка<br>Дата последнего обновления: 20.05.2020 (обновление команды !midnight)<br>Проект бота на GitHub: https://github.com/dan63047/dan63047pythonbot"
elif message[0] == self._COMMANDS[3]: elif message[0] == self._COMMANDS[3]:
try: try:
@ -319,8 +327,15 @@ class VkBot:
set_up = {"task": None, "time": None} set_up = {"task": None, "time": None}
if stage == "task": if stage == "task":
set_up['task'] = string set_up['task'] = string
return True
elif stage == "time": 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): def game(self, thing):