API Version rollback. Added 2 more audio fallbacks
This commit is contained in:
parent
324e2f0ae3
commit
b6122ae172
3
bot.py
3
bot.py
@ -75,8 +75,7 @@ async def get_max_photo(obj, keyword='photo'):
|
|||||||
async def get_content(url, docname='tgvkbot.document', chrome_headers=True, rewrite_name=False,
|
async def get_content(url, docname='tgvkbot.document', chrome_headers=True, rewrite_name=False,
|
||||||
custom_ext=''):
|
custom_ext=''):
|
||||||
try:
|
try:
|
||||||
with aiohttp.ClientSession(headers={
|
with aiohttp.ClientSession(headers=CHROME_HEADERS if chrome_headers else {}) as session:
|
||||||
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36'} if chrome_headers else {}) as session:
|
|
||||||
r = await session.request('GET', url)
|
r = await session.request('GET', url)
|
||||||
direct_url = str(r.url)
|
direct_url = str(r.url)
|
||||||
tempdir = tempfile.gettempdir()
|
tempdir = tempfile.gettempdir()
|
||||||
|
@ -34,17 +34,21 @@ AUDIO_URL = os.environ.get('AUDIO_URL', 'http://thatmusic.akentev.com/id/{owner_
|
|||||||
AUDIO_ACCESS_URL = os.environ.get('AUDIO_ACCESS_URL',
|
AUDIO_ACCESS_URL = os.environ.get('AUDIO_ACCESS_URL',
|
||||||
'http://thatmusic.akentev.com/access_id/{token}/{owner_id}/{audio_id}')
|
'http://thatmusic.akentev.com/access_id/{token}/{owner_id}/{audio_id}')
|
||||||
TOKEN_REFRESH_URL = os.environ.get('TOKEN_REFRESH_URL', 'http://thatmusic.akentev.com/refresh')
|
TOKEN_REFRESH_URL = os.environ.get('TOKEN_REFRESH_URL', 'http://thatmusic.akentev.com/refresh')
|
||||||
|
AUDIO_SEARCH_URL = os.environ.get('AUDIO_SEARCH_URL', 'https://thatmusic.akentev.com/search/')
|
||||||
|
AUDIO_PROXY_URL = os.environ.get('AUDIO_PROXY_URL', 'https://thatmusic.akentev.com/proxy/')
|
||||||
AUDIO_HEADERS = {
|
AUDIO_HEADERS = {
|
||||||
'user-agent': 'KateMobileAndroid/52.1 lite-445 (Android 4.4.2; SDK 19; x86; unknown Android SDK built for x86; en)'}
|
'user-agent': 'KateMobileAndroid/52.1 lite-445 (Android 4.4.2; SDK 19; x86; unknown Android SDK built for x86; en)'}
|
||||||
|
|
||||||
|
CHROME_HEADERS = {
|
||||||
|
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36'}
|
||||||
BOT_TOKEN = os.environ.get('BOT_TOKEN')
|
BOT_TOKEN = os.environ.get('BOT_TOKEN')
|
||||||
|
|
||||||
SETTINGS_VAR = os.environ.get('SETTINGS_VAR', 'DJANGO_TGVKBOT_SETTINGS_MODULE')
|
SETTINGS_VAR = os.environ.get('SETTINGS_VAR', 'DJANGO_TGVKBOT_SETTINGS_MODULE')
|
||||||
|
|
||||||
MAX_FILE_SIZE = os.environ.get('MAX_FILE_SIZE', 52428800)
|
MAX_FILE_SIZE = os.environ.get('MAX_FILE_SIZE', 52428800)
|
||||||
|
|
||||||
API_VERSION = os.environ.get('API_VERSION', '5.78')
|
API_VERSION = os.environ.get('API_VERSION', '5.71')
|
||||||
|
AUDIO_API_VERSION = os.environ.get('API_VERSION', '5.78')
|
||||||
|
|
||||||
# https://www.miniwebtool.com/django-secret-key-generator/
|
# https://www.miniwebtool.com/django-secret-key-generator/
|
||||||
# Возможно достаточно заглушки в стиле 'tgvkbot-super-secret-key(nope)'
|
# Возможно достаточно заглушки в стиле 'tgvkbot-super-secret-key(nope)'
|
||||||
|
@ -530,7 +530,7 @@ async def send_welcome(msg: types.Message):
|
|||||||
if not existing_vkuser:
|
if not existing_vkuser:
|
||||||
link = 'https://oauth.vk.com/authorize?client_id={}&' \
|
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,stories,audio' \
|
'display=page&redirect_uri=https://oauth.vk.com/blank.html&scope=friends,messages,offline,docs,photos,video,stories,audio' \
|
||||||
'&response_type=token&v={}'.format(VK_APP_ID, API_VERSION)
|
'&response_type=token&v={}'.format(VK_APP_ID, AUDIO_API_VERSION)
|
||||||
mark = InlineKeyboardMarkup()
|
mark = InlineKeyboardMarkup()
|
||||||
login = InlineKeyboardButton('ВХОД', url=link)
|
login = InlineKeyboardButton('ВХОД', url=link)
|
||||||
mark.add(login)
|
mark.add(login)
|
||||||
|
@ -4,6 +4,7 @@ from aiovk.longpoll import LongPoll
|
|||||||
|
|
||||||
from bot import *
|
from bot import *
|
||||||
from aiogram.utils.markdown import quote_html, hlink
|
from aiogram.utils.markdown import quote_html, hlink
|
||||||
|
import urllib
|
||||||
|
|
||||||
log = logging.getLogger('vk_messages')
|
log = logging.getLogger('vk_messages')
|
||||||
inline_link_re = re.compile('\[([a-zA-Z0-9_]*)\|(.*?)\]', re.MULTILINE)
|
inline_link_re = re.compile('\[([a-zA-Z0-9_]*)\|(.*?)\]', re.MULTILINE)
|
||||||
@ -706,7 +707,11 @@ async def process_message(msg, token=None, is_multichat=None, vk_chat_id=None, u
|
|||||||
elif attachment['type'] == 'audio':
|
elif attachment['type'] == 'audio':
|
||||||
await bot.send_chat_action(to_tg_chat, ChatActions.UPLOAD_DOCUMENT)
|
await bot.send_chat_action(to_tg_chat, ChatActions.UPLOAD_DOCUMENT)
|
||||||
tg_message = await tgsend(bot.send_audio, to_tg_chat, audio=attachment['content'],
|
tg_message = await tgsend(bot.send_audio, to_tg_chat, audio=attachment['content'],
|
||||||
reply_to_message_id=main_message, disable_notification=disable_notify)
|
caption=attachment.get('caption', None),
|
||||||
|
performer=attachment.get('artist', None),
|
||||||
|
title=attachment.get('title', None),
|
||||||
|
reply_to_message_id=main_message, disable_notification=disable_notify,
|
||||||
|
parse_mode='HTML')
|
||||||
Message.objects.create(
|
Message.objects.create(
|
||||||
vk_chat=vk_chat_id,
|
vk_chat=vk_chat_id,
|
||||||
vk_id=vk_msg_id,
|
vk_id=vk_msg_id,
|
||||||
@ -762,6 +767,19 @@ async def check_vk_url(url):
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
def form_audio_title(data: dict, delimer=' '):
|
||||||
|
result = data.get('artist')
|
||||||
|
if result:
|
||||||
|
if 'title' in data:
|
||||||
|
result += delimer + data['title']
|
||||||
|
else:
|
||||||
|
if 'title' in data:
|
||||||
|
result = data['title']
|
||||||
|
else:
|
||||||
|
return
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
async def process_attachment(attachment, token=None):
|
async def process_attachment(attachment, token=None):
|
||||||
atype = attachment.get('type')
|
atype = attachment.get('type')
|
||||||
if atype == 'photo':
|
if atype == 'photo':
|
||||||
@ -769,6 +787,22 @@ async def process_attachment(attachment, token=None):
|
|||||||
return {'content': photo_url, 'type': 'photo'}
|
return {'content': photo_url, 'type': 'photo'}
|
||||||
|
|
||||||
elif atype == 'audio':
|
elif atype == 'audio':
|
||||||
|
if attachment[atype].get('url') and AUDIO_PROXY_URL:
|
||||||
|
try:
|
||||||
|
with aiohttp.ClientSession() as session:
|
||||||
|
r = await session.request('GET', AUDIO_PROXY_URL,
|
||||||
|
params={'url': urllib.parse.quote(attachment[atype]['url']),
|
||||||
|
'artist': urllib.parse.quote(attachment[atype].get('artist', '')),
|
||||||
|
'title': urllib.parse.quote(attachment[atype].get('title', ''))},
|
||||||
|
headers=CHROME_HEADERS)
|
||||||
|
if r.status != 200:
|
||||||
|
raise Exception
|
||||||
|
audio = await r.read()
|
||||||
|
audio = io.BytesIO(audio)
|
||||||
|
return {'content': audio, 'type': 'audio'}
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
if AUDIO_ACCESS_URL:
|
if AUDIO_ACCESS_URL:
|
||||||
if token:
|
if token:
|
||||||
try:
|
try:
|
||||||
@ -783,7 +817,7 @@ async def process_attachment(attachment, token=None):
|
|||||||
return {'content': audio, 'type': 'audio'}
|
return {'content': audio, 'type': 'audio'}
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
elif AUDIO_URL:
|
if AUDIO_URL:
|
||||||
try:
|
try:
|
||||||
with aiohttp.ClientSession() as session:
|
with aiohttp.ClientSession() as session:
|
||||||
r = await session.request('GET', AUDIO_URL.format(owner_id=attachment[atype]['owner_id'],
|
r = await session.request('GET', AUDIO_URL.format(owner_id=attachment[atype]['owner_id'],
|
||||||
@ -795,6 +829,38 @@ async def process_attachment(attachment, token=None):
|
|||||||
return {'content': audio, 'type': 'audio'}
|
return {'content': audio, 'type': 'audio'}
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
|
if AUDIO_SEARCH_URL:
|
||||||
|
try:
|
||||||
|
search = form_audio_title(attachment[atype])
|
||||||
|
if not search:
|
||||||
|
raise Exception
|
||||||
|
with aiohttp.ClientSession() as session:
|
||||||
|
r = await session.request('GET', AUDIO_SEARCH_URL, params={'q': urllib.parse.quote(search)})
|
||||||
|
if r.status != 200:
|
||||||
|
raise Exception
|
||||||
|
audios = await r.json()
|
||||||
|
if audios['success'] and audios['data']:
|
||||||
|
if attachment[atype]['duration']:
|
||||||
|
audio = min(audios['data'],
|
||||||
|
key=lambda x: abs(x['duration'] - attachment[atype]['duration']))
|
||||||
|
else:
|
||||||
|
audio = audios['data'][0]
|
||||||
|
else:
|
||||||
|
raise Exception
|
||||||
|
with aiohttp.ClientSession() as session:
|
||||||
|
r = await session.request('GET', audio["download"])
|
||||||
|
if r.status != 200:
|
||||||
|
raise Exception
|
||||||
|
audio = await r.read()
|
||||||
|
audio = io.BytesIO(audio)
|
||||||
|
# search = form_audio_title(attachment[atype], ' - ')
|
||||||
|
# caption = '<i>🔍 {}</i>'.format(quote_html(search))
|
||||||
|
caption = '🔍'
|
||||||
|
return {'content': audio, 'type': 'audio', 'caption': caption,
|
||||||
|
'artist': attachment[atype].get('artist', None),
|
||||||
|
'title': attachment[atype].get('title', None)}
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
return {'content': '<i>Аудио</i>', 'type': 'text'}
|
return {'content': '<i>Аудио</i>', 'type': 'text'}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user