Merge branch 'master' into webhook

This commit is contained in:
Sergey 2017-09-05 00:43:34 +03:00 committed by GitHub
commit b19b94e6a9
2 changed files with 43 additions and 19 deletions

View File

@ -1,10 +1,14 @@
# tgvkbot # tgvkbot
Бот позволяет получать и отправлять сообщения VK находясь в Telegram Бот позволяет получать и отправлять сообщения VK находясь в Telegram
Поддерживаются вебхуки и лонгполлинг, закомментируйте и раскомментируйте нужные строки Поддерживаются вебхуки и лонгполлинг, закомментируйте и раскомментируйте нужные строки
Настройка вебхуков по гайду от [@Groosha](https://www.gitbook.com/book/groosha/telegram-bot-lessons) Настройка вебхуков по гайду от [@Groosha](https://www.gitbook.com/book/groosha/telegram-bot-lessons)
[Использование](https://www.asergey.me/tgvkbot/usage) [Использование](https://www.asergey.me/tgvkbot/usage)

32
bot.py
View File

@ -1,21 +1,25 @@
import logging import logging
import os import os
import re import re
import redis
import requests import requests
import telebot import telebot
import threading import threading
import time
import traceback import traceback
import ujson import ujson
from telebot import types
import redis
import vk import vk
import wget import wget
import time
from PIL import Image from PIL import Image
from telebot import types from telebot import types
import cherrypy import cherrypy
from credentials import token, vk_app_id, bot_url, local_port from credentials import token, vk_app_id, bot_url, local_port
from vk_messages import VkMessage, VkPolling from vk_messages import VkMessage, VkPolling
vk_threads = {} vk_threads = {}
@ -87,8 +91,16 @@ def request_user_dialogs(session, userid):
for g in group_ids: for g in group_ids:
positive_group_ids.append(str(g)[1:]) positive_group_ids.append(str(g)[1:])
if users_ids:
users = vk.API(session).users.get(user_ids=users_ids, fields=['first_name', 'last_name', 'uid']) 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=[]) groups = vk.API(session).groups.getById(group_ids=positive_group_ids, fields=[])
else:
groups = []
for output in order: for output in order:
if output['title'] == ' ... ' or not output['title']: if output['title'] == ' ... ' or not output['title']:
if output['id'] > 0: if output['id'] > 0:
@ -207,12 +219,10 @@ def check_thread(uid):
# Creating VkPolling threads and dialogs info after bot's reboot/exception using existing tokens # Creating VkPolling threads and dialogs info after bot's reboot/exception using existing tokens
def thread_supervisor(): def thread_reviver(uid):
while True:
for uid in vk_tokens.scan_iter():
tries = 0 tries = 0
while check_thread(uid.decode("utf-8")): while check_thread(uid.decode("utf-8")):
if tries < 3: if tries < 4:
try: try:
create_thread(uid.decode("utf-8"), vk_tokens.get(uid)) create_thread(uid.decode("utf-8"), vk_tokens.get(uid))
except: except:
@ -225,6 +235,15 @@ def thread_supervisor():
bot.send_message(uid.decode("utf-8"), '<b>Непредвиденная ошибка, требуется повторный логин ВК!</b>', bot.send_message(uid.decode("utf-8"), '<b>Непредвиденная ошибка, требуется повторный логин ВК!</b>',
parse_mode='HTML', reply_markup=mark).wait() parse_mode='HTML', reply_markup=mark).wait()
break break
def thread_supervisor():
while True:
for uid in vk_tokens.scan_iter():
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) time.sleep(60)
@ -677,6 +696,7 @@ def reply_text(message):
# bot.polling(none_stop=True) # bot.polling(none_stop=True)
class WebhookServer(object): class WebhookServer(object):
# index равнозначно /, т.к. отсутствию части после ip-адреса (грубо говоря) # index равнозначно /, т.к. отсутствию части после ip-адреса (грубо говоря)
@cherrypy.expose @cherrypy.expose
def index(self): def index(self):