diff --git a/bot.py b/bot.py
index 20342c9..f32af82 100644
--- a/bot.py
+++ b/bot.py
@@ -1,18 +1,18 @@
import logging
import os
import re
-import redis
import requests
import telebot
import threading
+import time
import traceback
import ujson
-import vk
-import wget
-import time
-from PIL import Image
from telebot import types
+import redis
+import vk
+import wget
+from PIL import Image
from credentials import token, vk_app_id
from vk_messages import VkMessage, VkPolling
@@ -84,8 +84,16 @@ def request_user_dialogs(session, userid):
for g in group_ids:
positive_group_ids.append(str(g)[1:])
- users = vk.API(session).users.get(user_ids=users_ids, fields=['first_name', 'last_name', 'uid'])
- groups = vk.API(session).groups.getById(group_ids=positive_group_ids, fields=[])
+ if users_ids:
+ users = vk.API(session).users.get(user_ids=users_ids, fields=['first_name', 'last_name', 'uid'])
+ else:
+ users = []
+
+ if positive_group_ids:
+ groups = vk.API(session).groups.getById(group_ids=positive_group_ids, fields=[])
+ else:
+ groups = []
+
for output in order:
if output['title'] == ' ... ' or not output['title']:
if output['id'] > 0:
@@ -204,24 +212,31 @@ def check_thread(uid):
# Creating VkPolling threads and dialogs info after bot's reboot/exception using existing tokens
+def thread_reviver(uid):
+ tries = 0
+ while check_thread(uid.decode("utf-8")):
+ if tries < 4:
+ try:
+ create_thread(uid.decode("utf-8"), vk_tokens.get(uid))
+ except:
+ time.sleep(10)
+ tries = tries + 1
+ else:
+ mark = types.InlineKeyboardMarkup()
+ login = types.InlineKeyboardButton('ВХОД', url=link)
+ mark.add(login)
+ bot.send_message(uid.decode("utf-8"), 'Непредвиденная ошибка, требуется повторный логин ВК!',
+ parse_mode='HTML', reply_markup=mark).wait()
+ break
+
+
def thread_supervisor():
while True:
for uid in vk_tokens.scan_iter():
- tries = 0
- while check_thread(uid.decode("utf-8")):
- if tries < 3:
- try:
- create_thread(uid.decode("utf-8"), vk_tokens.get(uid))
- except:
- time.sleep(10)
- tries = tries + 1
- else:
- mark = types.InlineKeyboardMarkup()
- login = types.InlineKeyboardButton('ВХОД', url=link)
- mark.add(login)
- bot.send_message(uid.decode("utf-8"), 'Непредвиденная ошибка, требуется повторный логин ВК!',
- parse_mode='HTML', reply_markup=mark).wait()
- break
+ reviver_thread = threading.Thread(name='reviver' + str(uid.decode('utf-8')), target=thread_reviver,
+ args=(uid,))
+ reviver_thread.setDaemon(True)
+ reviver_thread.start()
time.sleep(60)
@@ -671,6 +686,7 @@ def reply_text(message):
bot.reply_to(message, 'Произошла неизвестная ошибка при отправке',
parse_mode='Markdown').wait()
+
bot.polling(none_stop=True)
"""class WebhookServer(object):
# index равнозначно /, т.к. отсутствию части после ip-адреса (грубо говоря)