diff --git a/dan63047bot.py b/dan63047bot.py
index 94b7e76..6170e8f 100644
--- a/dan63047bot.py
+++ b/dan63047bot.py
@@ -15,6 +15,7 @@ from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType
bot = {}
users = {}
debug_array = {'vk_warnings': 0, 'logger_warnings': 0, 'start_time': 0, 'messages_get': 0, 'messages_answered': 0}
+errors_array = {"access": "Отказано в доступе", "miss_argument": "Отсуствует аргумент"}
root_logger = logging.getLogger()
root_logger.setLevel(logging.INFO)
@@ -49,10 +50,10 @@ def log(warning, text):
if warning:
logging.warning(text)
debug_array['logger_warnings'] += 1
- print("[" + time.strftime("%d.%m.%Y %H:%M:%S", time.gmtime()) + "][WARNING] " + text)
+ print("[" + str(datetime.datetime.now()) + "][WARNING] " + text)
else:
logging.info(text)
- print("[" + time.strftime("%d.%m.%Y %H:%M:%S", time.gmtime()) + "] " + text)
+ print("[" + str(datetime.datetime.now()) + "] " + text)
def toFixed(numObj, digits=0):
@@ -94,6 +95,7 @@ class VkBot:
log(False, f"Создан объект бота! id{peer_id}")
self._CHAT_ID = peer_id
self._ECHO_MODE = False
+ self._AWAITING_INPUT_MODE = None
self._ACCESS_LEVEL = 1
if midnight:
@@ -107,17 +109,24 @@ class VkBot:
self._OWNER = False
self._COMMANDS = ["!image", "!my_id", "!h", "!user_id", "!group_id", "!help", "!weather", "!wiki", "!byn",
- "!echo", "!game", "!debug", "!midnight", "!access"]
+ "!echo", "!game", "!debug", "!midnight", "!access", "!turnoff", "!reminder"]
+
+ def __str__(self):
+ return f"Чат id{str(self._CHAT_ID)}, миднайт: {str(self._MIDNIGHT_EVENT)}, ожидание: {str(self._AWAITING_INPUT_MODE)}, эхо: {str(self._ECHO_MODE)}"
+
+ def __del__(self):
+ log(False, f"Бот id{str(self._CHAT_ID)} удалён")
def event(self, event):
if event == "midnight" and self._MIDNIGHT_EVENT:
current_time = datetime.datetime.fromtimestamp(time.time() + 10800)
image = None
- midnight_text = ["Мидннайт!", "Полночь!", "Midnight!", "миднигхт", "Середина ночи", "Смена даты!"]
+ midnight_text = ["Миднайт!", "Полночь!", "Midnight!", "миднигхт", "Середина ночи", "Смена даты!"]
midnight_after = ["Ложись спать!", "P E A C E A N D T R A N Q U I L I T Y", "Поиграй в майнкрафт",
- "Втыкай в ВК дальше", "hat in time is gay", "R34 по ахиту это смертный грех", "Egg",
- "вещ или бан", "Мой ник в игре _ичё"]
+ "Втыкай в ВК дальше", "hat in time is gay", "RIP 2013-2019 Gears for Breakfast", "Egg",
+ "вещ или бан", "Мой ник в игре _ичё", "Я жил, но что-то пошло не так",
+ "Когда тебе похуй, ты неувязвим"]
midnight_output = random.choice(midnight_text) + "
" + f"Наступило {current_time.strftime('%d.%m.%Y')}
"
random_thing = random.randint(0, 2)
@@ -138,11 +147,26 @@ class VkBot:
self.send(message)
self._ECHO_MODE = False
log(False, f"Бот id{self._CHAT_ID} вышел из режима эхо")
- debug_array['messages_answered'] += 1
else:
self.send(message)
log(False, f"Эхо-бот id{self._CHAT_ID}: {message}")
- debug_array['messages_answered'] += 1
+ elif self._AWAITING_INPUT_MODE:
+ if self._AWAITING_INPUT_MODE == "reminder task":
+ if message == "Назад":
+ self._AWAITING_INPUT_MODE = None
+ self.send("Установка напоминания отменена")
+ else:
+ self.reminder(message, "task")
+ 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
else:
respond = {'attachment': None, 'text': None}
message = message.split(' ', 1)
@@ -154,31 +178,31 @@ 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 - справка
Дата последнего обновления: 10.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 - справка
Дата последнего обновления: 16.05.2020 (обновление команды !midnight)
Проект бота на GitHub: https://github.com/dan63047/dan63047pythonbot"
elif message[0] == self._COMMANDS[3]:
try:
respond['text'] = self.get_info_user(message[1])
except IndexError:
- respond['text'] = "Отсуствует аргумент"
+ respond['text'] = errors_array["miss_argument"]
elif message[0] == self._COMMANDS[4]:
try:
respond['text'] = self.get_info_group(message[1])
except IndexError:
- respond['text'] = "Отсуствует аргумент"
+ respond['text'] = errors_array["miss_argument"]
elif message[0] == self._COMMANDS[6]:
try:
respond['text'] = get_weather(message[1])
except IndexError:
- respond['text'] = "Отсуствует аргумент"
+ respond['text'] = errors_array["miss_argument"]
elif message[0] == self._COMMANDS[7]:
try:
respond['text'] = self.wiki_article(message[1])
except IndexError:
- respond['text'] = "Отсуствует аргумент"
+ respond['text'] = errors_array["miss_argument"]
elif message[0] == self._COMMANDS[8]:
respond['text'] = self.exchange_rates()
@@ -196,7 +220,7 @@ class VkBot:
message[1] = message[1].lower()
respond['text'] = self.game(message[1])
except IndexError:
- respond['text'] = "Отсуствует аргумент"
+ respond['text'] = errors_array["miss_argument"]
elif message[0] == self._COMMANDS[11]:
if self._ACCESS_LEVEL or int(user_id) == int(owner_id):
@@ -205,7 +229,7 @@ class VkBot:
except IndexError:
respond['text'] = self.debug()
else:
- respond["text"] = "Отказано в доступе"
+ respond["text"] = errors_array["access"]
elif message[0] == self._COMMANDS[12]:
if self._ACCESS_LEVEL or int(user_id) == int(owner_id):
@@ -220,7 +244,7 @@ class VkBot:
users[self._CHAT_ID]["midnight"] = self._MIDNIGHT_EVENT
update_users_json(users)
else:
- respond['text'] = "Отказано в доступе"
+ respond['text'] = errors_array["access"]
elif message[0] == self._COMMANDS[13]:
if int(user_id) == int(owner_id):
@@ -234,13 +258,27 @@ class VkBot:
else:
respond['text'] = "Некорректный аргумент"
except IndexError:
- respond['text'] = "Отсуствует аргумент"
+ respond['text'] = errors_array["miss_argument"]
else:
- respond['text'] = "Отказано в доступе"
+ respond['text'] = errors_array["access"]
+
+ elif message[0] == self._COMMANDS[14]:
+ if self._OWNER or int(user_id) == int(owner_id):
+ self.send("Бот выключается")
+ exit(log(False, "Принята команда на завершение работы бота."))
+
+ elif message[0] == self._COMMANDS[15]:
+ try:
+ if message[1] == "list":
+ self.send("Напоминания")
+ elif message[1] == "set":
+ self.send("О чём мне вам напомнить?")
+ self._AWAITING_INPUT_MODE = "reminder task"
+ except IndexError:
+ respond["text"] = errors_array['miss_argument']
if respond['text'] or respond['attachment']:
self.send(respond['text'], respond['attachment'])
- debug_array['messages_answered'] += 1
def debug(self, arg=None):
if arg == "log":
@@ -253,7 +291,16 @@ class VkBot:
f.close()
return text_log
else:
- return "Отказано в доступе"
+ return errors_array["access"]
+ elif arg == "bots":
+ if self._OWNER:
+ answer = "Обьекты бота:"
+ for i in bot:
+ answer += "
"+str(bot[i])
+ return answer
+ else:
+ return errors_array["access"]
+
else:
up_time = time.time() - debug_array['start_time']
time_d = int(up_time) / (3600 * 24)
@@ -268,6 +315,14 @@ class VkBot:
debug_array['logger_warnings']) + " (Из них беды с ВК: " + str(debug_array['vk_warnings']) + ")
Обьектов бота: " + str(len(bot)) + "
Запуск бота по часам сервера: " + datetime_time.strftime('%d.%m.%Y %H:%M:%S UTC')
return answer
+ def reminder(self, string, stage):
+ set_up = {"task": None, "time": None}
+ if stage == "task":
+ set_up['task'] = string
+ elif stage == "time":
+ pass
+
+
def game(self, thing):
if thing == "статистика":
with open("data_file.json", "r") as read_file:
@@ -448,6 +503,7 @@ class VkBot:
{'peer_id': self._CHAT_ID, 'message': message, 'random_id': time.time(),
'attachment': attachment})
log(False, f'Бот id{self._CHAT_ID}: Ответ метода ВК "messages.send": {message}')
+ debug_array['messages_answered'] += 1
def bots():