diff --git a/bot/handlers/__init__.py b/bot/handlers/__init__.py index 2d2b194..3716dd2 100644 --- a/bot/handlers/__init__.py +++ b/bot/handlers/__init__.py @@ -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, diff --git a/bot/handlers/inline_default/on_inline_default.py b/bot/handlers/inline_default/on_inline_default.py index 4029162..43c4f25 100644 --- a/bot/handlers/inline_default/on_inline_default.py +++ b/bot/handlers/inline_default/on_inline_default.py @@ -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 ) diff --git a/bot/handlers/inline_song/on_inline_deezer.py b/bot/handlers/inline_song/on_inline_deezer.py index 1db08f3..12a9298 100644 --- a/bot/handlers/inline_song/on_inline_deezer.py +++ b/bot/handlers/inline_song/on_inline_deezer.py @@ -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 ) diff --git a/bot/handlers/inline_song/on_inline_spotify.py b/bot/handlers/inline_song/on_inline_spotify.py index 532a858..1d54e2f 100644 --- a/bot/handlers/inline_song/on_inline_spotify.py +++ b/bot/handlers/inline_song/on_inline_spotify.py @@ -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 ) diff --git a/bot/handlers/inline_song/on_inline_youtube.py b/bot/handlers/inline_song/on_inline_youtube.py index 11c22b2..6271663 100644 --- a/bot/handlers/inline_song/on_inline_youtube.py +++ b/bot/handlers/inline_song/on_inline_youtube.py @@ -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 ) diff --git a/bot/handlers/inline_url/on_inline_url.py b/bot/handlers/inline_url/on_inline_url.py index 970cfaf..4707347 100644 --- a/bot/handlers/inline_url/on_inline_url.py +++ b/bot/handlers/inline_url/on_inline_url.py @@ -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 ) diff --git a/bot/middlewares/inject_settings.py b/bot/middlewares/inject_settings.py index 49a7e39..eb0a120 100644 --- a/bot/middlewares/inject_settings.py +++ b/bot/middlewares/inject_settings.py @@ -13,10 +13,14 @@ 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) - - settings = UserSettings(event.from_user.id) - data['settings'] = settings + 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 return await handler(event, data) diff --git a/bot/results/common/search.py b/bot/results/common/search.py index 0d79895..ec305ad 100644 --- a/bot/results/common/search.py +++ b/bot/results/common/search.py @@ -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=[ diff --git a/bot/results/deezer/search.py b/bot/results/deezer/search.py index dc65199..3019f36 100644 --- a/bot/results/deezer/search.py +++ b/bot/results/deezer/search.py @@ -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) ] diff --git a/bot/results/spotify/search.py b/bot/results/spotify/search.py index d9865b8..9598bbd 100644 --- a/bot/results/spotify/search.py +++ b/bot/results/spotify/search.py @@ -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) ] diff --git a/bot/results/url/url.py b/bot/results/url/url.py index d638f97..a4325dd 100644 --- a/bot/results/url/url.py +++ b/bot/results/url/url.py @@ -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 ) ] diff --git a/bot/results/youtube/search.py b/bot/results/youtube/search.py index c87a648..d82e69b 100644 --- a/bot/results/youtube/search.py +++ b/bot/results/youtube/search.py @@ -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) ]