Add changing preview type when searching track
This commit is contained in:
@@ -15,6 +15,7 @@ router = Router()
|
|||||||
|
|
||||||
router.chosen_inline_result.outer_middleware(SaveChosenMiddleware())
|
router.chosen_inline_result.outer_middleware(SaveChosenMiddleware())
|
||||||
router.chosen_inline_result.middleware(SettingsInjectorMiddleware())
|
router.chosen_inline_result.middleware(SettingsInjectorMiddleware())
|
||||||
|
router.inline_query.middleware(SettingsInjectorMiddleware())
|
||||||
|
|
||||||
router.include_routers(
|
router.include_routers(
|
||||||
initialize.router,
|
initialize.router,
|
||||||
|
|||||||
@@ -4,13 +4,15 @@ from aiogram.types import InlineQuery
|
|||||||
|
|
||||||
from bot.results.deezer import get_deezer_search_results
|
from bot.results.deezer import get_deezer_search_results
|
||||||
|
|
||||||
|
from bot.modules.settings import UserSettings
|
||||||
|
|
||||||
router = Router()
|
router = Router()
|
||||||
|
|
||||||
|
|
||||||
@router.inline_query(F.query != '')
|
@router.inline_query(F.query != '')
|
||||||
async def default_inline_query(inline_query: InlineQuery):
|
async def default_inline_query(inline_query: InlineQuery, settings: UserSettings):
|
||||||
await inline_query.answer(
|
await inline_query.answer(
|
||||||
await get_deezer_search_results(inline_query.query),
|
await get_deezer_search_results(inline_query.query, settings),
|
||||||
cache_time=0,
|
cache_time=0,
|
||||||
is_personal=True
|
is_personal=True
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -4,14 +4,18 @@ from aiogram.types import InlineQuery
|
|||||||
|
|
||||||
from bot.results.deezer import get_deezer_search_results
|
from bot.results.deezer import get_deezer_search_results
|
||||||
from bot.filters import ServiceSearchFilter
|
from bot.filters import ServiceSearchFilter
|
||||||
|
from bot.modules.settings import UserSettings
|
||||||
|
|
||||||
router = Router()
|
router = Router()
|
||||||
|
|
||||||
|
|
||||||
@router.inline_query(ServiceSearchFilter('d'))
|
@router.inline_query(ServiceSearchFilter('d'))
|
||||||
async def search_deezer_inline_query(inline_query: InlineQuery):
|
async def search_deezer_inline_query(inline_query: InlineQuery, settings: UserSettings):
|
||||||
await inline_query.answer(
|
await inline_query.answer(
|
||||||
await get_deezer_search_results(inline_query.query.removeprefix('d:')),
|
await get_deezer_search_results(
|
||||||
|
inline_query.query.removeprefix('d:'),
|
||||||
|
settings
|
||||||
|
),
|
||||||
cache_time=0,
|
cache_time=0,
|
||||||
is_personal=True
|
is_personal=True
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -4,14 +4,19 @@ from aiogram.types import InlineQuery
|
|||||||
|
|
||||||
from bot.results.spotify import get_spotify_search_results
|
from bot.results.spotify import get_spotify_search_results
|
||||||
from bot.filters import ServiceSearchFilter
|
from bot.filters import ServiceSearchFilter
|
||||||
|
from bot.modules.settings import UserSettings
|
||||||
|
|
||||||
router = Router()
|
router = Router()
|
||||||
|
|
||||||
|
|
||||||
@router.inline_query(ServiceSearchFilter('s'))
|
@router.inline_query(ServiceSearchFilter('s'))
|
||||||
async def search_spotify_inline_query(inline_query: InlineQuery):
|
async def search_spotify_inline_query(
|
||||||
|
inline_query: InlineQuery,
|
||||||
|
settings: UserSettings
|
||||||
|
):
|
||||||
await inline_query.answer(
|
await inline_query.answer(
|
||||||
await get_spotify_search_results(inline_query.query.removeprefix('s:')),
|
await get_spotify_search_results(inline_query.query.removeprefix('s:'),
|
||||||
|
settings),
|
||||||
cache_time=0,
|
cache_time=0,
|
||||||
is_personal=True
|
is_personal=True
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -4,14 +4,17 @@ from aiogram.types import InlineQuery
|
|||||||
|
|
||||||
from bot.results.youtube import get_youtube_search_results
|
from bot.results.youtube import get_youtube_search_results
|
||||||
from bot.filters import ServiceSearchFilter
|
from bot.filters import ServiceSearchFilter
|
||||||
|
from bot.modules.settings import UserSettings
|
||||||
|
|
||||||
router = Router()
|
router = Router()
|
||||||
|
|
||||||
|
|
||||||
@router.inline_query(ServiceSearchFilter('y'))
|
@router.inline_query(ServiceSearchFilter('y'))
|
||||||
async def search_youtube_inline_query(inline_query: InlineQuery):
|
async def search_youtube_inline_query(inline_query: InlineQuery,
|
||||||
|
settings: UserSettings):
|
||||||
await inline_query.answer(
|
await inline_query.answer(
|
||||||
await get_youtube_search_results(inline_query.query.removeprefix('y:')),
|
await get_youtube_search_results(inline_query.query.removeprefix('y:'),
|
||||||
|
settings),
|
||||||
cache_time=0,
|
cache_time=0,
|
||||||
is_personal=True
|
is_personal=True
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -4,14 +4,15 @@ from aiogram.types import InlineQuery
|
|||||||
|
|
||||||
from bot.results.url import get_url_results
|
from bot.results.url import get_url_results
|
||||||
from bot.filters import MusicUrlFilter
|
from bot.filters import MusicUrlFilter
|
||||||
|
from bot.modules.settings import UserSettings
|
||||||
|
|
||||||
router = Router()
|
router = Router()
|
||||||
|
|
||||||
|
|
||||||
@router.inline_query(MusicUrlFilter())
|
@router.inline_query(MusicUrlFilter())
|
||||||
async def url_deezer_inline_query(inline_query: InlineQuery):
|
async def url_deezer_inline_query(inline_query: InlineQuery, settings: UserSettings):
|
||||||
await inline_query.answer(
|
await inline_query.answer(
|
||||||
await get_url_results(inline_query.query),
|
await get_url_results(inline_query.query, settings),
|
||||||
cache_time=0,
|
cache_time=0,
|
||||||
is_personal=True
|
is_personal=True
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -13,10 +13,14 @@ class SettingsInjectorMiddleware(BaseMiddleware):
|
|||||||
event: TelegramObject,
|
event: TelegramObject,
|
||||||
data: Dict[str, Any],
|
data: Dict[str, Any],
|
||||||
):
|
):
|
||||||
if not hasattr(event, 'from_user'):
|
if (not hasattr(event, 'from_user') and
|
||||||
|
(not hasattr(event, 'inline_query') or event.inline_query is None)):
|
||||||
return await handler(event, data)
|
return await handler(event, data)
|
||||||
|
elif hasattr(event, 'inline_query') and event.inline_query is not None:
|
||||||
settings = UserSettings(event.from_user.id)
|
settings = UserSettings(event.inline_query.from_user.id)
|
||||||
data['settings'] = settings
|
data['settings'] = settings
|
||||||
|
else:
|
||||||
|
settings = UserSettings(event.from_user.id)
|
||||||
|
data['settings'] = settings
|
||||||
|
|
||||||
return await handler(event, data)
|
return await handler(event, data)
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ from aiogram.types import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
from bot.modules.database.db import DBDict
|
from bot.modules.database.db import DBDict
|
||||||
|
from bot.modules.settings import UserSettings
|
||||||
|
|
||||||
from bot.modules.common.song import BaseSongItem
|
from bot.modules.common.song import BaseSongItem
|
||||||
from typing import TypeVar
|
from typing import TypeVar
|
||||||
@@ -15,7 +16,8 @@ BaseSongT = TypeVar('BaseSongT', bound=BaseSongItem)
|
|||||||
async def get_common_search_result(
|
async def get_common_search_result(
|
||||||
audio: BaseSongT,
|
audio: BaseSongT,
|
||||||
db_table: DBDict,
|
db_table: DBDict,
|
||||||
service_id: str
|
service_id: str,
|
||||||
|
settings: UserSettings
|
||||||
) -> InlineQueryResultDocument | InlineQueryResultCachedAudio:
|
) -> InlineQueryResultDocument | InlineQueryResultCachedAudio:
|
||||||
return (
|
return (
|
||||||
InlineQueryResultDocument(
|
InlineQueryResultDocument(
|
||||||
@@ -23,7 +25,8 @@ async def get_common_search_result(
|
|||||||
title=audio.name,
|
title=audio.name,
|
||||||
description=audio.all_artists,
|
description=audio.all_artists,
|
||||||
thumb_url=audio.thumbnail,
|
thumb_url=audio.thumbnail,
|
||||||
document_url=audio.preview_url or audio.thumbnail,
|
document_url=(audio.preview_url or audio.thumbnail) if
|
||||||
|
settings['search_preview'].value == 'preview' else audio.thumbnail,
|
||||||
mime_type='application/zip',
|
mime_type='application/zip',
|
||||||
reply_markup=InlineKeyboardMarkup(
|
reply_markup=InlineKeyboardMarkup(
|
||||||
inline_keyboard=[
|
inline_keyboard=[
|
||||||
|
|||||||
@@ -4,18 +4,20 @@ from aiogram.types import (
|
|||||||
|
|
||||||
from bot.modules.deezer import deezer
|
from bot.modules.deezer import deezer
|
||||||
from bot.modules.database import db
|
from bot.modules.database import db
|
||||||
|
from bot.modules.settings import UserSettings
|
||||||
|
|
||||||
from ..common.search import get_common_search_result
|
from ..common.search import get_common_search_result
|
||||||
|
|
||||||
|
|
||||||
async def get_deezer_search_results(query: str) -> list[
|
async def get_deezer_search_results(query: str, settings: UserSettings) -> list[
|
||||||
InlineQueryResultDocument | InlineQueryResultCachedAudio
|
InlineQueryResultDocument | InlineQueryResultCachedAudio
|
||||||
]:
|
]:
|
||||||
return [
|
return [
|
||||||
await get_common_search_result(
|
await get_common_search_result(
|
||||||
audio=audio,
|
audio=audio,
|
||||||
db_table=db.deezer,
|
db_table=db.deezer,
|
||||||
service_id='deez'
|
service_id='deez',
|
||||||
|
settings=settings
|
||||||
)
|
)
|
||||||
for audio in await deezer.songs.search(query, limit=50)
|
for audio in await deezer.songs.search(query, limit=50)
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -4,18 +4,20 @@ from aiogram.types import (
|
|||||||
|
|
||||||
from bot.modules.spotify import spotify
|
from bot.modules.spotify import spotify
|
||||||
from bot.modules.database import db
|
from bot.modules.database import db
|
||||||
|
from bot.modules.settings import UserSettings
|
||||||
|
|
||||||
from ..common.search import get_common_search_result
|
from ..common.search import get_common_search_result
|
||||||
|
|
||||||
|
|
||||||
async def get_spotify_search_results(query: str) -> list[
|
async def get_spotify_search_results(query: str, settings: UserSettings) -> list[
|
||||||
InlineQueryResultDocument | InlineQueryResultCachedAudio
|
InlineQueryResultDocument | InlineQueryResultCachedAudio
|
||||||
]:
|
]:
|
||||||
return [
|
return [
|
||||||
await get_common_search_result(
|
await get_common_search_result(
|
||||||
audio=audio,
|
audio=audio,
|
||||||
db_table=db.spotify,
|
db_table=db.spotify,
|
||||||
service_id='spot'
|
service_id='spot',
|
||||||
|
settings=settings
|
||||||
)
|
)
|
||||||
for audio in spotify.songs.search(query, limit=50)
|
for audio in spotify.songs.search(query, limit=50)
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -3,13 +3,14 @@ from aiogram.types import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
from bot.modules.url import recognise_music_service, get_id
|
from bot.modules.url import recognise_music_service, get_id
|
||||||
|
from bot.modules.settings import UserSettings
|
||||||
|
|
||||||
from ..common.search import get_common_search_result
|
from ..common.search import get_common_search_result
|
||||||
|
|
||||||
import inspect
|
import inspect
|
||||||
|
|
||||||
|
|
||||||
async def get_url_results(query: str) -> list[
|
async def get_url_results(query: str, settings: UserSettings) -> list[
|
||||||
InlineQueryResultDocument | InlineQueryResultCachedAudio
|
InlineQueryResultDocument | InlineQueryResultCachedAudio
|
||||||
]:
|
]:
|
||||||
service = recognise_music_service(query)
|
service = recognise_music_service(query)
|
||||||
@@ -25,5 +26,6 @@ async def get_url_results(query: str) -> list[
|
|||||||
audio=audio,
|
audio=audio,
|
||||||
db_table=service.db_table,
|
db_table=service.db_table,
|
||||||
service_id=service.name,
|
service_id=service.name,
|
||||||
|
settings=settings
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -4,18 +4,20 @@ from aiogram.types import (
|
|||||||
|
|
||||||
from bot.modules.youtube import youtube
|
from bot.modules.youtube import youtube
|
||||||
from bot.modules.database import db
|
from bot.modules.database import db
|
||||||
|
from bot.modules.settings import UserSettings
|
||||||
|
|
||||||
from ..common.search import get_common_search_result
|
from ..common.search import get_common_search_result
|
||||||
|
|
||||||
|
|
||||||
async def get_youtube_search_results(query: str) -> list[
|
async def get_youtube_search_results(query: str, settings: UserSettings) -> list[
|
||||||
InlineQueryResultDocument | InlineQueryResultCachedAudio
|
InlineQueryResultDocument | InlineQueryResultCachedAudio
|
||||||
]:
|
]:
|
||||||
return [
|
return [
|
||||||
await get_common_search_result(
|
await get_common_search_result(
|
||||||
audio=audio,
|
audio=audio,
|
||||||
db_table=db.youtube,
|
db_table=db.youtube,
|
||||||
service_id='yt'
|
service_id='yt',
|
||||||
|
settings=settings
|
||||||
)
|
)
|
||||||
for audio in youtube.songs.search(query, limit=40)
|
for audio in youtube.songs.search(query, limit=40)
|
||||||
]
|
]
|
||||||
|
|||||||
Reference in New Issue
Block a user