Merge pull request #2 from Kylmakalle/master

Master updates
This commit is contained in:
Sergey 2017-07-02 03:24:06 +03:00 committed by GitHub
commit 17df7c24be
3 changed files with 66 additions and 50 deletions

111
bot.py
View File

@ -12,9 +12,7 @@ import wget
from PIL import Image
from telebot import types
import cherrypy
from credentials import token, vk_app_id, local_port, bot_url
from credentials import token, vk_app_id
from vk_messages import VkMessage, VkPolling
logging.basicConfig(format='%(levelname)-8s [%(asctime)s] %(message)s', level=logging.WARNING, filename='vk.log')
@ -25,13 +23,11 @@ vk_dialogs = {}
FILE_URL = 'https://api.telegram.org/file/bot{0}/{1}'
tokens_pool = redis.ConnectionPool(host='localhost', port=6379, db=0)
vk_tokens = redis.StrictRedis(connection_pool=tokens_pool)
vk_tokens = redis.from_url(os.environ.get("REDIS_URL"))
currentchat = {}
bot = telebot.AsyncTeleBot(token)
# bot.remove_webhook()
link = 'https://oauth.vk.com/authorize?client_id={}&' \
'display=page&redirect_uri=https://oauth.vk.com/blank.html&scope=friends,messages,offline,docs,photos,video' \
@ -110,10 +106,10 @@ def create_markup(message, user, page, edit=False):
if edit:
bot.edit_message_text(
'<b>Выберите Диалог:</b> <code>{}/{}</code> стр.'.format(page + 1, len(vk_dialogs[str(user)])),
message.chat.id, message.message_id,
message.from_user.id, message.message_id,
parse_mode='HTML', reply_markup=markup).wait()
else:
bot.send_message(message.chat.id,
bot.send_message(message.from_user.id,
'<b>Выберите Диалог:</b> <code>{}/{}</code> стр.'.format(page + 1, len(vk_dialogs[str(user)])),
parse_mode='HTML', reply_markup=markup).wait()
@ -131,7 +127,7 @@ def callback_buttons(call):
'Вы в беседе {}'.format(replace_shields(chat['title']))).wait()
if chat['title'].replace('\\', ''):
chat['title'] = chat['title'].replace('\\', '')
bot.send_message(call.message.chat.id,
bot.send_message(call.message.from_user.id,
'<i>Вы в беседе {}</i>'.format(chat['title']),
parse_mode='HTML').wait()
currentchat[str(call.from_user.id)] = call.data
@ -141,7 +137,7 @@ def callback_buttons(call):
user = vk.API(session).users.get(user_ids=call.data, fields=[])[0]
bot.answer_callback_query(call.id,
'Вы в чате с {} {}'.format(user['first_name'], user['last_name'])).wait()
bot.send_message(call.message.chat.id,
bot.send_message(call.message.from_user.id,
'<i>Вы в чате с {} {}</i>'.format(user['first_name'], user['last_name']),
parse_mode='HTML').wait()
currentchat[str(call.from_user.id)] = call.data
@ -198,6 +194,43 @@ def info_extractor(info):
return info
@bot.message_handler(commands=['chat'])
def chat_command(message):
if str(message.from_user.id) in currentchat:
if 'group' in currentchat[str(message.from_user.id)]:
session = VkMessage(vk_tokens.get(str(message.from_user.id))).session
chat = vk.API(session).messages.getChat(chat_id=currentchat[str(message.from_user.id)].split('group')[1],
fields=[])
if chat['title'].replace('\\', ''):
chat['title'] = chat['title'].replace('\\', '')
bot.send_message(message.from_user.id,
'<i>Вы в беседе {}</i>'.format(chat['title']),
parse_mode='HTML').wait()
else:
session = VkMessage(vk_tokens.get(str(message.from_user.id))).session
user = vk.API(session).users.get(user_ids=currentchat[str(message.from_user.id)], fields=[])[0]
bot.send_message(message.from_user.id,
'<i>Вы в чате с {} {}</i>'.format(user['first_name'], user['last_name']),
parse_mode='HTML').wait()
else:
bot.send_message(message.from_user.id,
'<i>Вы не находитесь в чате</i>',
parse_mode='HTML').wait()
@bot.message_handler(commands=['leave'])
def leave_command(message):
if str(message.from_user.id) in currentchat:
currentchat.pop(str(message.from_user.id), None)
bot.send_message(message.from_user.id,
'<i>Вы вышли из чата</i>',
parse_mode='HTML').wait()
else:
bot.send_message(message.from_user.id,
'<i>Вы не находитесь в чате</i>',
parse_mode='HTML').wait()
@bot.message_handler(commands=['dialogs'])
def dialogs_command(message):
session = VkMessage(vk_tokens.get(str(message.from_user.id))).session
@ -209,20 +242,20 @@ def dialogs_command(message):
def stop_command(message):
if not check_thread(message.from_user.id):
stop_thread(message)
bot.send_message(message.chat.id, 'Успешный выход!').wait()
bot.send_message(message.from_user.id, 'Успешный выход!').wait()
else:
bot.send_message(message.chat.id, 'Вход не был выполнен!').wait()
bot.send_message(message.from_user.id, 'Вход не был выполнен!').wait()
@bot.message_handler(commands=['start'])
def start_command(message):
if check_thread(message.from_user.id):
bot.send_message(message.chat.id,
bot.send_message(message.from_user.id,
'Привет, этот бот поможет тебе общаться ВКонтакте, войди по кнопке ниже'
' и отправь мне то, что получишь в адресной строке.',
reply_markup=mark).wait()
else:
bot.send_message(message.chat.id, 'Вход уже выполнен!\n/stop для выхода.').wait()
bot.send_message(message.from_user.id, 'Вход уже выполнен!\n/stop для выхода.').wait()
def form_request(message, method, info):
@ -264,7 +297,7 @@ def logged(message):
if vk_tokens.get(str(message.from_user.id)):
return True
else:
bot.send_message(message.chat.id, 'Вход не выполнен! /start для входа').wait()
bot.send_message(message.from_user.id, 'Вход не выполнен! /start для входа').wait()
return False
@ -498,7 +531,7 @@ def reply_photo(message):
try:
vk_sender(message, send_photo)
except:
bot.send_message(message.chat.id, 'Фото слишком большое, максимально допустимый размер *20мб*!',
bot.send_message(message.from_user.id, 'Фото слишком большое, максимально допустимый размер *20мб*!',
parse_mode='Markdown').wait()
@ -531,25 +564,26 @@ def reply_text(message):
try:
verifycode(code)
create_thread(message.from_user.id, code)
bot.send_message(message.chat.id, 'Вход выполнен!').wait()
bot.send_message(message.from_user.id, 'Вход выполнен!').wait()
# ---------------- INSTRUCTIONS ---------------- #
bot.send_message(message.chat.id, 'Бот позволяет получать и отвечать на текстовые сообщения'
' из ВКонтакте\nПример личного сообщения:').wait()
bot.send_message(message.chat.id, '*Иван Петров:*\nПривет, я тут классный мессенджер нашёл,'
' попробуешь? telegram.org/download', parse_mode='Markdown').wait()
bot.send_message(message.chat.id, 'Для сообщений из групповых чатов будет указываться'
' чат после имени отправителя:').wait()
bot.send_message(message.chat.id, '*Ник Невидов @ My English is perfect:*\n'
'London is the capital of Great Britain',
bot.send_message(message.from_user.id, 'Бот позволяет получать и отвечать на текстовые сообщения'
' из ВКонтакте\nПример личного сообщения:').wait()
bot.send_message(message.from_user.id, '*Иван Петров:*\nПривет, я тут классный мессенджер нашёл,'
' попробуешь? telegram.org/download',
parse_mode='Markdown').wait()
bot.send_message(message.chat.id, 'Чтобы ответить, используй Reply на нужное сообщение.'
' (нет, на эти не сработает, нужно реальное)',
bot.send_message(message.from_user.id, 'Для сообщений из групповых чатов будет указываться'
' чат после имени отправителя:').wait()
bot.send_message(message.from_user.id, '*Ник Невидов @ My English is perfect:*\n'
'London is the capital of Great Britain',
parse_mode='Markdown').wait()
bot.send_message(message.from_user.id, 'Чтобы ответить, используй Reply на нужное сообщение.'
' (нет, на эти не сработает, нужно реальное)',
parse_mode='Markdown').wait()
# ---------------- INSTRUCTIONS ---------------- #
except:
bot.send_message(message.chat.id, 'Неверная ссылка, попробуй ещё раз!').wait()
bot.send_message(message.from_user.id, 'Неверная ссылка, попробуй ещё раз!').wait()
else:
bot.send_message(message.chat.id, 'Вход уже выполнен!\n/stop для выхода.').wait()
bot.send_message(message.from_user.id, 'Вход уже выполнен!\n/stop для выхода.').wait()
return
try:
@ -560,21 +594,4 @@ def reply_text(message):
print('Error: {}'.format(traceback.format_exc()))
# bot.polling(none_stop=True)
class WebhookServer(object):
# index равнозначно /, т.к. отсутствию части после ip-адреса (грубо говоря)
@cherrypy.expose
def index(self):
length = int(cherrypy.request.headers['content-length'])
json_string = cherrypy.request.body.read(length).decode("utf-8")
update = telebot.types.Update.de_json(json_string)
bot.process_new_updates([update])
return ''
if __name__ == '__main__':
bot.remove_webhook()
bot.set_webhook('https://{}/{}/'.format(bot_url, token))
cherrypy.config.update(
{'server.socket_host': '127.0.0.1', 'server.socket_port': local_port, 'engine.autoreload.on': False})
cherrypy.quickstart(WebhookServer(), '/', {'/': {}})
bot.polling(none_stop=True)

View File

@ -1,4 +1,4 @@
token = '123456789:hciowedjejd092jjasdasdmdkpoaasd'
vk_app_id = "5678910"
bot_url = 'www.mybot.com'
local_port = 7777
local_port = 7777

View File

@ -6,8 +6,7 @@ import traceback
import vk
import wget
tokens_pool = redis.ConnectionPool(host='localhost', port=6379, db=0)
vk_tokens = redis.StrictRedis(connection_pool=tokens_pool)
vk_tokens = redis.from_url(os.environ.get("REDIS_URL"))
class VkPolling: