Add changing preview type when searching track

This commit is contained in:
BarsTiger
2023-11-07 18:45:41 +02:00
parent 06c327933f
commit e99ba9daa3
12 changed files with 54 additions and 23 deletions

View File

@@ -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,

View File

@@ -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
) )

View File

@@ -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
) )

View File

@@ -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
) )

View File

@@ -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
) )

View File

@@ -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
) )

View File

@@ -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)

View File

@@ -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=[

View File

@@ -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)
] ]

View File

@@ -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)
] ]

View File

@@ -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
) )
] ]

View File

@@ -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)
] ]