diff --git a/vk_messages.py b/vk_messages.py
deleted file mode 100644
index 363b0d8..0000000
--- a/vk_messages.py
+++ /dev/null
@@ -1,303 +0,0 @@
-import os
-import redis
-import requests
-import time
-import vk
-import wget
-
-vk_tokens = redis.from_url(os.environ.get("REDIS_URL"))
-
-
-class VkPolling:
- def __init__(self):
- self._running = True
-
- def terminate(self):
- self._running = False
-
- def run(self, vk_user, bot, chat_id):
- while self._running:
- updates = []
- try:
- updates = vk_user.get_new_messages()
- except requests.exceptions.ReadTimeout as e:
- print('Error: {}'.format(e))
- if updates:
- handle_updates(vk_user, bot, chat_id, updates)
- for i in range(50):
- if self._running:
- time.sleep(0.1)
- else:
- break
-
-
-def handle_messages(m, vk_user, bot, chat_id, mainmessage=None):
- user = vk.API(vk_user.session).users.get(user_ids=m["uid"], fields=[])[0]
- if 'body' in m and not 'attachment' in m and not 'geo' in m and not 'fwd_messages' in m:
- data = add_user_info(m, user["first_name"], user["last_name"])[:-1] + add_reply_info(m)
- bot.send_message(chat_id, data, parse_mode='HTML', disable_web_page_preview=False,
- disable_notification=check_notification(m), reply_to_message_id=mainmessage).wait()
- if 'attachment' in m:
- attachment_handler(m, user, bot, chat_id, mainmessage)
- if 'geo' in m:
- data = add_user_info(m, user["first_name"], user["last_name"]) + 'Местоположение' + add_reply_info(m)
- geo = bot.send_message(chat_id, data, parse_mode='HTML', disable_web_page_preview=False,
- disable_notification=check_notification(m), reply_to_message_id=mainmessage).wait()
- if 'place' in m['geo'] and 'city' in m['geo']['place'] and 'title' in m[geo]['place']:
- bot.send_venue(chat_id, m['geo']['coordinates'].split(' ')[0], m['geo']['coordinates'].split(' ')[1],
- m['geo']['place']['title'], m['geo']['place']['city'],
- disable_notification=check_notification(m),
- reply_to_message_id=geo.message_id).wait()
- else:
- bot.send_location(chat_id, m['geo']['coordinates'].split(' ')[0], m['geo']['coordinates'].split(' ')[1],
- disable_notification=check_notification(m),
- reply_to_message_id=geo.message_id).wait()
- if 'fwd_messages' in m:
- data = add_user_info(m, user["first_name"],
- user["last_name"]) + 'Пересланные сообщения' + add_reply_info(m)
- reply = bot.send_message(chat_id, data, parse_mode='HTML', disable_web_page_preview=False,
- disable_notification=check_notification(m),
- reply_to_message_id=mainmessage).wait().message_id
- for forwared in m['fwd_messages']:
- handle_messages(forwared, vk_user, bot, chat_id, reply)
-
-
-def handle_updates(vk_user, bot, chat_id, updates):
- for m in updates:
- if not m['out']:
- handle_messages(m, vk_user, bot, chat_id)
-
-
-def attachment_handler(m, user, bot, chat_id, mainmessage=None):
- for attach in m['attachments']:
- if attach['type'] == 'photo':
- try:
- data = add_user_info(m, user['first_name'], user['last_name']) + 'Фото'.format(
- get_max_src(attach['photo'])) + add_reply_info(m)
- bot.send_message(chat_id, data, parse_mode='HTML', disable_web_page_preview=False,
- disable_notification=check_notification(m), reply_to_message_id=mainmessage).wait()
- except:
- send_doc_link(attach, m, user, bot, chat_id, mainmessage)
-
- elif attach['type'] == 'video':
- try:
- link = 'https://vk.com/video{}_{}'.format(attach['video']['owner_id'],
- attach['video']['vid'])
- data = add_user_info(m, user['first_name'], user['last_name']) + 'Видео'.format(
- link) + add_reply_info(m)
- bot.send_message(chat_id, data, parse_mode='HTML', disable_web_page_preview=False,
- disable_notification=check_notification(m), reply_to_message_id=mainmessage).wait()
- except:
- send_doc_link(attach, m, user, bot, chat_id, mainmessage)
-
- elif attach['type'] == 'audio':
- data = add_user_info(m, user['first_name'], user[
- 'last_name']) + '🎵 {} - {}'.format(
- attach['audio']['artist'].replace(' ', '%20'),
- attach['audio']['title'].replace(' ', '%20'), attach['audio']['artist'],
- attach['audio']['title']) + add_reply_info(m)
- bot.send_message(chat_id, data, parse_mode='HTML', disable_web_page_preview=False,
- disable_notification=check_notification(m), reply_to_message_id=mainmessage).wait()
-
- elif attach['type'] == 'doc':
- if attach['doc']['ext'] == 'gif':
- try:
- link = attach['doc']['url']
- data = add_user_info(m, user["first_name"], user["last_name"]) + 'GIF'.format(
- link) + add_reply_info(m)
- bot.send_message(chat_id, data, parse_mode='HTML', disable_web_page_preview=False,
- disable_notification=check_notification(m),
- reply_to_message_id=mainmessage).wait()
- except:
- send_doc_link(attach, m, user, bot, chat_id, mainmessage)
-
- elif attach['doc']['ext'] == 'pdf' or attach['doc']['ext'] == 'zip':
- try:
- link = attach['doc']['url']
- data = add_user_info(m, user["first_name"],
- user["last_name"]) + 'Документ'.format(
- link) + add_reply_info(m)
- bot.send_message(chat_id, data, parse_mode='HTML', disable_web_page_preview=False,
- disable_notification=check_notification(m),
- reply_to_message_id=mainmessage).wait()
- except:
- send_doc_link(attach, m, user, bot, chat_id, mainmessage)
-
- elif attach['doc']['ext'] == 'jpg' or attach['doc']['ext'] == 'png':
- try:
- link = attach['doc']['url']
- data = add_user_info(m, user["first_name"],
- user["last_name"], ) + 'Документ' + add_reply_info(m)
- notification = bot.send_message(chat_id, data, parse_mode='HTML',
- disable_notification=check_notification(m),
- reply_to_message_id=mainmessage).wait()
- uploading = bot.send_chat_action(chat_id, 'upload_document')
- bot.send_document(chat_id, link, reply_to_message_id=notification.message_id,
- disable_notification=check_notification(m)).wait()
- uploading.wait()
- except:
- send_doc_link(attach, m, user, bot, chat_id, mainmessage)
-
- elif attach['doc']['ext'] == 'ogg':
- try:
- link = attach['doc']['url']
- data = add_user_info(m, user["first_name"], user["last_name"], ) + \
- 'Аудио'.format(link) + add_reply_info(m)
- bot.send_message(chat_id, data, parse_mode='HTML', disable_web_page_preview=False,
- disable_notification=check_notification(m),
- reply_to_message_id=mainmessage).wait()
- except:
- send_doc_link(attach, m, user, bot, chat_id, mainmessage)
-
- elif attach['doc']['ext'] == 'doc' or attach['doc']['ext'] == 'docx':
- try:
- data = add_user_info(m, user["first_name"],
- user["last_name"], ) + 'Документ' + add_reply_info(m)
- notification = bot.send_message(chat_id, data, parse_mode='HTML',
- disable_notification=check_notification(m),
- reply_to_message_id=mainmessage).wait()
- uploading = bot.send_chat_action(chat_id, 'upload_document')
- file = wget.download(requests.get(attach['doc']['url']).url)
- openedfile = open(file, 'rb')
- bot.send_document(chat_id, openedfile,
- reply_to_message_id=notification.message_id,
- disable_notification=check_notification(m)).wait()
- uploading.wait()
- openedfile.close()
- os.remove(file)
- except:
- send_doc_link(attach, m, user, bot, chat_id, mainmessage)
- else:
- send_doc_link(attach, m, user, bot, chat_id, mainmessage)
-
- elif attach['type'] == 'sticker':
- link = attach['sticker']['photo_512']
- data = add_user_info(m, user["first_name"], user["last_name"]) + 'Стикер'.format(
- link) + add_reply_info(m)
- bot.send_message(chat_id, data, parse_mode='HTML', disable_web_page_preview=False,
- disable_notification=check_notification(m), reply_to_message_id=mainmessage).wait()
- elif attach['type'] == 'wall':
- link = 'https://vk.com/wall{}_{}'.format(attach['wall']['from_id'], attach['wall']['id'])
- data = add_user_info(m, user["first_name"], user["last_name"]) + 'Запись на стене'.format(
- link) + add_reply_info(m)
- bot.send_message(chat_id, data, parse_mode='HTML', disable_web_page_preview=False,
- disable_notification=check_notification(m), reply_to_message_id=mainmessage).wait()
- elif attach['type'] == 'wall_reply':
- data = add_user_info(m, user["first_name"],
- user["last_name"]) + 'Комментарий на стене' + add_reply_info(m)
- comment = bot.send_message(chat_id, data, parse_mode='HTML', disable_web_page_preview=False,
- disable_notification=check_notification(m),
- reply_to_message_id=mainmessage).wait()
- try:
- user = vk.API(get_session(vk_tokens.get(str(chat_id)))).users.get(user_ids=attach['wall_reply']["uid"],
- fields=[])[0]
- if attach['wall_reply']['text']:
- data = add_user_info(m, user["first_name"], user["last_name"]) + \
- attach['wall_reply']['text'].replace('
', '\n') + add_reply_info(m)
- bot.send_message(chat_id, data, parse_mode='HTML', disable_web_page_preview=False,
- disable_notification=check_notification(m),
- reply_to_message_id=comment.message_id).wait()
- if 'attachments' in attach['wall_reply']:
- attachment_handler(attach['wall_reply'], user, bot, chat_id, mainmessage=comment.message_id)
- except:
- link = 'https://vk.com/wall{}_{}'.format(attach['wall']['owner_id'], attach['wall']['cid'])
- data = add_user_info(m, user["first_name"],
- user["last_name"]) + 'Комментарий'.format(
- link) + add_reply_info(m)
- bot.send_message(chat_id, data, parse_mode='HTML', disable_web_page_preview=False,
- disable_notification=check_notification(m),
- reply_to_message_id=comment.message_id).wait()
-
-
-def check_expansion(document):
- if len(document['doc']['title'].split('.')) - 1:
- return document['doc']['title']
- else:
- return document['doc']['title'] + '.' + document['doc']['ext']
-
-
-def send_doc_link(doc, m, user, bot, chat_id, mainmessage=None):
- link = doc['doc']['url']
- data = add_user_info(m, user["first_name"], user["last_name"]) + \
- 'Документ\n{}'.format(link, check_expansion(doc)) + add_reply_info(m)
- bot.send_message(chat_id, data, parse_mode='HTML', disable_web_page_preview=False,
- disable_notification=check_notification(m), reply_to_message_id=mainmessage).wait()
-
-
-def check_forward_id(msg):
- if 'mid' in msg:
- return msg['mid']
- else:
- return None
-
-
-def add_reply_info(m):
- if 'chat_id' in m:
- return ''.format(m['uid'], m['chat_id'], check_forward_id(m))
- else:
- return ''.format(m['uid'], check_forward_id(m))
-
-
-def add_user_info(m, first_name, last_name):
- if 'body' in m and m['body']:
- if 'chat_id' in m:
- return '{} {} @ {}:\n{}\n'.format(first_name, last_name, m['title'], m['body'].replace('
', '\n'))
- else:
- return '{} {}:\n{}\n'.format(first_name, last_name, m['body'].replace('
', '\n'))
- else:
- if 'chat_id' in m:
- return '{} {} @ {}:\n'.format(first_name, last_name, m['title'])
- else:
- return '{} {}:\n'.format(first_name, last_name)
-
-
-def check_notification(value):
- if 'push_settings' in value:
- return True
- else:
- return False
-
-
-def get_max_src(attachment):
- if 'src_xxbig' in attachment:
- return attachment['src_xxbig']
- if 'src_xbig' in attachment:
- return attachment['src_xbig']
- if 'src_big' in attachment:
- return attachment['src_big']
- if 'src' in attachment:
- return attachment['src']
-
-
-class VkMessage:
- def __init__(self, token):
- self.session = get_session(token)
- self.ts, self.pts = get_tses(self.session)
-
- def get_new_messages(self):
-
- api = vk.API(self.session)
- new = api.messages.getLongPollHistory(ts=self.ts, pts=self.pts)
- msgs = new['messages']
- self.pts = new["new_pts"]
- count = msgs[0]
-
- res = []
- if count == 0:
- pass
- else:
- messages = msgs[1:]
- for m in messages:
- res.append(m)
- return res
-
-
-def get_session(token):
- return vk.Session(access_token=token)
-
-
-def get_tses(session):
- api = vk.API(session)
-
- ts = api.messages.getLongPollServer(need_pts=1)
- return ts['ts'], ts['pts']