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.middleware(SettingsInjectorMiddleware())
|
||||
router.inline_query.middleware(SettingsInjectorMiddleware())
|
||||
|
||||
router.include_routers(
|
||||
initialize.router,
|
||||
|
||||
@@ -4,13 +4,15 @@ from aiogram.types import InlineQuery
|
||||
|
||||
from bot.results.deezer import get_deezer_search_results
|
||||
|
||||
from bot.modules.settings import UserSettings
|
||||
|
||||
router = Router()
|
||||
|
||||
|
||||
@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 get_deezer_search_results(inline_query.query),
|
||||
await get_deezer_search_results(inline_query.query, settings),
|
||||
cache_time=0,
|
||||
is_personal=True
|
||||
)
|
||||
|
||||
@@ -4,14 +4,18 @@ from aiogram.types import InlineQuery
|
||||
|
||||
from bot.results.deezer import get_deezer_search_results
|
||||
from bot.filters import ServiceSearchFilter
|
||||
from bot.modules.settings import UserSettings
|
||||
|
||||
router = Router()
|
||||
|
||||
|
||||
@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 get_deezer_search_results(inline_query.query.removeprefix('d:')),
|
||||
await get_deezer_search_results(
|
||||
inline_query.query.removeprefix('d:'),
|
||||
settings
|
||||
),
|
||||
cache_time=0,
|
||||
is_personal=True
|
||||
)
|
||||
|
||||
@@ -4,14 +4,19 @@ from aiogram.types import InlineQuery
|
||||
|
||||
from bot.results.spotify import get_spotify_search_results
|
||||
from bot.filters import ServiceSearchFilter
|
||||
from bot.modules.settings import UserSettings
|
||||
|
||||
router = Router()
|
||||
|
||||
|
||||
@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 get_spotify_search_results(inline_query.query.removeprefix('s:')),
|
||||
await get_spotify_search_results(inline_query.query.removeprefix('s:'),
|
||||
settings),
|
||||
cache_time=0,
|
||||
is_personal=True
|
||||
)
|
||||
|
||||
@@ -4,14 +4,17 @@ from aiogram.types import InlineQuery
|
||||
|
||||
from bot.results.youtube import get_youtube_search_results
|
||||
from bot.filters import ServiceSearchFilter
|
||||
from bot.modules.settings import UserSettings
|
||||
|
||||
router = Router()
|
||||
|
||||
|
||||
@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 get_youtube_search_results(inline_query.query.removeprefix('y:')),
|
||||
await get_youtube_search_results(inline_query.query.removeprefix('y:'),
|
||||
settings),
|
||||
cache_time=0,
|
||||
is_personal=True
|
||||
)
|
||||
|
||||
@@ -4,14 +4,15 @@ from aiogram.types import InlineQuery
|
||||
|
||||
from bot.results.url import get_url_results
|
||||
from bot.filters import MusicUrlFilter
|
||||
from bot.modules.settings import UserSettings
|
||||
|
||||
router = Router()
|
||||
|
||||
|
||||
@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 get_url_results(inline_query.query),
|
||||
await get_url_results(inline_query.query, settings),
|
||||
cache_time=0,
|
||||
is_personal=True
|
||||
)
|
||||
|
||||
@@ -13,9 +13,13 @@ class SettingsInjectorMiddleware(BaseMiddleware):
|
||||
event: TelegramObject,
|
||||
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)
|
||||
|
||||
elif hasattr(event, 'inline_query') and event.inline_query is not None:
|
||||
settings = UserSettings(event.inline_query.from_user.id)
|
||||
data['settings'] = settings
|
||||
else:
|
||||
settings = UserSettings(event.from_user.id)
|
||||
data['settings'] = settings
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ from aiogram.types import (
|
||||
)
|
||||
|
||||
from bot.modules.database.db import DBDict
|
||||
from bot.modules.settings import UserSettings
|
||||
|
||||
from bot.modules.common.song import BaseSongItem
|
||||
from typing import TypeVar
|
||||
@@ -15,7 +16,8 @@ BaseSongT = TypeVar('BaseSongT', bound=BaseSongItem)
|
||||
async def get_common_search_result(
|
||||
audio: BaseSongT,
|
||||
db_table: DBDict,
|
||||
service_id: str
|
||||
service_id: str,
|
||||
settings: UserSettings
|
||||
) -> InlineQueryResultDocument | InlineQueryResultCachedAudio:
|
||||
return (
|
||||
InlineQueryResultDocument(
|
||||
@@ -23,7 +25,8 @@ async def get_common_search_result(
|
||||
title=audio.name,
|
||||
description=audio.all_artists,
|
||||
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',
|
||||
reply_markup=InlineKeyboardMarkup(
|
||||
inline_keyboard=[
|
||||
|
||||
@@ -4,18 +4,20 @@ from aiogram.types import (
|
||||
|
||||
from bot.modules.deezer import deezer
|
||||
from bot.modules.database import db
|
||||
from bot.modules.settings import UserSettings
|
||||
|
||||
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
|
||||
]:
|
||||
return [
|
||||
await get_common_search_result(
|
||||
audio=audio,
|
||||
db_table=db.deezer,
|
||||
service_id='deez'
|
||||
service_id='deez',
|
||||
settings=settings
|
||||
)
|
||||
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.database import db
|
||||
from bot.modules.settings import UserSettings
|
||||
|
||||
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
|
||||
]:
|
||||
return [
|
||||
await get_common_search_result(
|
||||
audio=audio,
|
||||
db_table=db.spotify,
|
||||
service_id='spot'
|
||||
service_id='spot',
|
||||
settings=settings
|
||||
)
|
||||
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.settings import UserSettings
|
||||
|
||||
from ..common.search import get_common_search_result
|
||||
|
||||
import inspect
|
||||
|
||||
|
||||
async def get_url_results(query: str) -> list[
|
||||
async def get_url_results(query: str, settings: UserSettings) -> list[
|
||||
InlineQueryResultDocument | InlineQueryResultCachedAudio
|
||||
]:
|
||||
service = recognise_music_service(query)
|
||||
@@ -25,5 +26,6 @@ async def get_url_results(query: str) -> list[
|
||||
audio=audio,
|
||||
db_table=service.db_table,
|
||||
service_id=service.name,
|
||||
settings=settings
|
||||
)
|
||||
]
|
||||
|
||||
@@ -4,18 +4,20 @@ from aiogram.types import (
|
||||
|
||||
from bot.modules.youtube import youtube
|
||||
from bot.modules.database import db
|
||||
from bot.modules.settings import UserSettings
|
||||
|
||||
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
|
||||
]:
|
||||
return [
|
||||
await get_common_search_result(
|
||||
audio=audio,
|
||||
db_table=db.youtube,
|
||||
service_id='yt'
|
||||
service_id='yt',
|
||||
settings=settings
|
||||
)
|
||||
for audio in youtube.songs.search(query, limit=40)
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user