Merge branch 'master' into webhook-dev
This commit is contained in:
commit
60d090aee7
5
LICENSE
5
LICENSE
@ -5,9 +5,8 @@ Copyright (c) 2017 Sergey
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
to use, copy, modify, merge, publish, distribute, and to permit persons to whom
|
||||
the Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
13
README.md
13
README.md
@ -1,14 +1,23 @@
|
||||
# tgvkbot
|
||||
Бот позволяет получать и отправлять сообщения VK находясь в Telegram
|
||||
|
||||
https://www.asergey.me/tgvkbot
|
||||
|
||||
Поддерживаются вебхуки и лонгполлинг, закомментируйте и раскомментируйте нужные строки
|
||||
[](https://heroku.com/deploy)
|
||||
|
||||
|
||||
[Ветка](https://github.com/Kylmakalle/tgvkbot/tree/webhook) для деплоя на локальной машине (поддерживаются вебхуки и лонгполлинг, закомментируйте и раскомментируйте нужные строки)
|
||||
|
||||
|
||||
Настройка вебхуков по гайду от [@Groosha](https://www.gitbook.com/book/groosha/telegram-bot-lessons)
|
||||
|
||||
Бэкенд API для получения музыки через https://asergey.me/vkmusapi/
|
||||
|
||||
https://gist.github.com/Kylmakalle/e63902025c527ac3610989530f4fa417
|
||||
|
||||
|
||||
[Использование](https://www.asergey.me/tgvkbot/usage)
|
||||
|
||||
## Stay Tuned!
|
||||
|
||||
|
||||
_Полноценные комментарии к коду будут чуть позже_
|
||||
|
34
app.json
Normal file
34
app.json
Normal file
@ -0,0 +1,34 @@
|
||||
{
|
||||
"name": "tgvkbot",
|
||||
"description": "Бот позволяет получать и отправлять сообщения VK находясь в Telegram",
|
||||
"repository": "https://github.com/Kylmakalle/tgvkbot",
|
||||
"keywords": ["vk", "bot", "telegram"],
|
||||
"website": "https://asergey.me/tgvkbot/",
|
||||
"buildpacks":[
|
||||
{
|
||||
"url": "heroku/python"
|
||||
}
|
||||
],
|
||||
"env": {
|
||||
"TELEGRAM_TOKEN": {
|
||||
"description": "Telegram bot API токен от https://t.me/BotFather",
|
||||
"value": "123456789:AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLL"
|
||||
},
|
||||
"VK_APP": {
|
||||
"description": "ID VK приложения из https://vk.com/apps?act=manage",
|
||||
"required": true
|
||||
}
|
||||
},
|
||||
"addons": [
|
||||
{
|
||||
"plan": "heroku-redis:hobby-dev",
|
||||
"as": "Redis"
|
||||
}
|
||||
],
|
||||
"formation": {
|
||||
"bot": {
|
||||
"quantity": 1,
|
||||
"size": "free"
|
||||
}
|
||||
}
|
||||
}
|
15
bot.py
15
bot.py
@ -1,5 +1,3 @@
|
||||
import cherrypy
|
||||
import logging
|
||||
import os
|
||||
import re
|
||||
import redis
|
||||
@ -14,7 +12,7 @@ import wget
|
||||
from PIL import Image
|
||||
from telebot import types
|
||||
|
||||
from credentials import token, vk_app_id, bot_url, local_port
|
||||
from credentials import token, vk_app_id
|
||||
from vk_messages import VkMessage, VkPolling
|
||||
|
||||
vk_threads = {}
|
||||
@ -25,8 +23,7 @@ VK_API_VERSION = '3.0'
|
||||
|
||||
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 = {}
|
||||
|
||||
@ -683,6 +680,7 @@ def reply_text(message):
|
||||
create_thread(message.from_user.id, code)
|
||||
bot.send_message(message.from_user.id,
|
||||
'Вход выполнен в аккаунт {} {}!'.format(user['first_name'], user['last_name'])).wait()
|
||||
|
||||
bot.send_message(message.from_user.id, '[Использование](https://asergey.me/tgvkbot/usage/)',
|
||||
parse_mode='Markdown').wait()
|
||||
except:
|
||||
@ -699,11 +697,10 @@ def reply_text(message):
|
||||
except Exception:
|
||||
bot.reply_to(message, 'Произошла неизвестная ошибка при отправке',
|
||||
parse_mode='Markdown').wait()
|
||||
print('Error: {}'.format(traceback.format_exc()))
|
||||
|
||||
|
||||
# bot.polling(none_stop=True)
|
||||
class WebhookServer(object):
|
||||
bot.polling(none_stop=True)
|
||||
"""class WebhookServer(object):
|
||||
# index равнозначно /, т.к. отсутствию части после ip-адреса (грубо говоря)
|
||||
@cherrypy.expose
|
||||
def index(self):
|
||||
@ -721,4 +718,4 @@ if __name__ == '__main__':
|
||||
cherrypy.config.update(
|
||||
{'server.socket_host': '127.0.0.1', 'server.socket_port': local_port, 'engine.autoreload.on': False,
|
||||
'log.screen': False})
|
||||
cherrypy.quickstart(WebhookServer(), '/', {'/': {}})
|
||||
cherrypy.quickstart(WebhookServer(), '/', {'/': {}})"""
|
||||
|
@ -1,4 +1,3 @@
|
||||
token = '123456789:hciowedjejd092jjasdasdmdkpoaasd'
|
||||
vk_app_id = "5678910"
|
||||
bot_url = 'www.mybot.com'
|
||||
local_port = 7777
|
||||
import os
|
||||
token = os.environ['TELEGRAM_TOKEN']
|
||||
vk_app_id = os.environ['VK_APP']
|
6
requirements.txt
Normal file
6
requirements.txt
Normal file
@ -0,0 +1,6 @@
|
||||
pyTelegramBotAPI
|
||||
vk
|
||||
redis
|
||||
Pillow
|
||||
ujson
|
||||
wget
|
1
runtime.txt
Normal file
1
runtime.txt
Normal file
@ -0,0 +1 @@
|
||||
python-3.6.1
|
@ -3,15 +3,14 @@ import os
|
||||
import redis
|
||||
import requests
|
||||
import time
|
||||
import vk
|
||||
import ujson
|
||||
import vk
|
||||
import wget
|
||||
|
||||
VK_POLLING_VERSION = '3.0'
|
||||
|
||||
logging.basicConfig(format='%(levelname)-8s [%(asctime)s] %(message)s', level=logging.WARNING, filename='vk.log')
|
||||
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:
|
||||
@ -104,13 +103,43 @@ def attachment_handler(m, user, bot, chat_id, mainmessage=None):
|
||||
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']) + '🎧 <a href="https://m.vk.com/audio?q={}%20-%20{}">{} - {}</a>'.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()
|
||||
headers = {'content-type': 'application/json'}
|
||||
audio = requests.get('https://asergey.me/vkmusapi/',
|
||||
json={'aid': attach['audio']['aid'], 'owner_id': attach['audio']['owner_id']},
|
||||
headers=headers)
|
||||
try:
|
||||
if audio.status_code == 200 and audio.json()['ok']:
|
||||
audio_dict = audio.json()
|
||||
data = add_user_info(m, user["first_name"],
|
||||
user["last_name"]) + '🎧 <i>Аудиозапись</i>' + add_reply_info(m)
|
||||
audio_msg = 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()
|
||||
action = bot.send_chat_action(chat_id, 'upload_document')
|
||||
bot.send_audio(chat_id, audio_dict['vk_response']['url'],
|
||||
duration=audio_dict['vk_response']['duration'],
|
||||
title=audio_dict['vk_response']['title'],
|
||||
performer=audio_dict['vk_response']['artist'],
|
||||
disable_notification=check_notification(m),
|
||||
reply_to_message_id=audio_msg.message_id).wait()
|
||||
action.wait()
|
||||
else:
|
||||
data = add_user_info(m, user['first_name'], user[
|
||||
'last_name']) + '🎧 <a href="https://m.vk.com/audio?q={}%20-%20{}">{} - {}</a>'.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()
|
||||
except Exception as e:
|
||||
print(e)
|
||||
data = add_user_info(m, user['first_name'], user[
|
||||
'last_name']) + '🎧 <a href="https://m.vk.com/audio?q={}%20-%20{}">{} - {}</a>'.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':
|
||||
|
Loading…
x
Reference in New Issue
Block a user