Add non-exact matches for spotify (in settings)

This commit is contained in:
BarsTiger
2023-12-04 17:03:00 +02:00
parent cae8dcc3df
commit 14303023aa
2 changed files with 36 additions and 15 deletions

View File

@@ -34,16 +34,17 @@ async def on_new_chosen(chosen_result: ChosenInlineResult, bot: Bot,
song.full_name, song.full_name,
exact_match=True, exact_match=True,
) )
if ((song.all_artists != yt_song.all_artists or song.name != yt_song.name) if settings['exact_spotify_search'].value == 'yes':
and not not_strict_name(song, yt_song)): if ((song.all_artists != yt_song.all_artists or song.name != yt_song.name)
await bot.edit_message_caption( and not not_strict_name(song, yt_song)):
inline_message_id=chosen_result.inline_message_id, await bot.edit_message_caption(
caption='🙄 Cannot find this song on YouTube, trying Deezer...', inline_message_id=chosen_result.inline_message_id,
reply_markup=None, caption='🙄 Cannot find this song on YouTube, trying Deezer...',
parse_mode='HTML', reply_markup=None,
) parse_mode='HTML',
yt_song = None )
bytestream = False yt_song = None
bytestream = False
try: try:
if bytestream is None: if bytestream is None:
@@ -98,7 +99,8 @@ async def on_new_chosen(chosen_result: ChosenInlineResult, bot: Bot,
assert e assert e
if audio: if audio:
db.spotify[song.id] = audio.audio.file_id if settings['exact_spotify_search'].value == 'yes':
db.spotify[song.id] = audio.audio.file_id
await bot.edit_message_media( await bot.edit_message_media(
inline_message_id=chosen_result.inline_message_id, inline_message_id=chosen_result.inline_message_id,
@@ -135,9 +137,11 @@ async def on_new_chosen(chosen_result: ChosenInlineResult, bot: Bot,
duration=bytestream.duration, duration=bytestream.duration,
) )
db.youtube[yt_song.id] = audio.audio.file_id db.youtube[yt_song.id] = audio.audio.file_id
db.spotify[song.id] = audio.audio.file_id
db.recoded[yt_song.id] = True db.recoded[yt_song.id] = True
db.recoded[song.id] = True
if settings['exact_spotify_search'].value == 'yes':
db.spotify[song.id] = audio.audio.file_id
db.recoded[song.id] = True
await bot.edit_message_caption( await bot.edit_message_caption(
inline_message_id=chosen_result.inline_message_id, inline_message_id=chosen_result.inline_message_id,
@@ -150,6 +154,7 @@ async def on_new_chosen(chosen_result: ChosenInlineResult, bot: Bot,
) )
elif yt_song and settings['recode_youtube'].value == 'no': elif yt_song and settings['recode_youtube'].value == 'no':
db.recoded[yt_song.id] = audio.message_id db.recoded[yt_song.id] = audio.message_id
db.recoded[song.id] = audio.message_id if settings['exact_spotify_search'].value == 'yes':
db.recoded[song.id] = audio.message_id
await db.occasionally_write() await db.occasionally_write()

View File

@@ -28,6 +28,18 @@ settings_strings: dict[str, Setting] = {
'no': 'Send original file', 'no': 'Send original file',
'yes': 'Recode to libmp3lame' 'yes': 'Recode to libmp3lame'
}, },
),
'exact_spotify_search': Setting(
name='Only exact Spotify matches',
description='When searching on Youtube from Spotify, show only exact matches, '
'may protect against inaccurate matches, but at the same time it '
'can lose reuploaded tracks. Should be enabled always, except in '
'situations where the track is not found on both YouTube and '
'Deezer',
choices={
'yes': 'Only exact matches',
'no': 'Fuzzy matches also'
},
) )
} }
@@ -50,7 +62,11 @@ class UserSettings:
s = settings_strings.get(item) s = settings_strings.get(item)
if s is None: if s is None:
return None return None
s.value = db.settings[self.user_id][item] try:
s.value = db.settings[self.user_id][item]
except KeyError:
s.value = list(s.choices)[0]
self[item] = s.value
return s return s
def __setitem__(self, key, value): def __setitem__(self, key, value):