Files
AnyMusicBot/bot/modules/settings/model.py
2023-12-04 17:03:00 +02:00

76 lines
2.2 KiB
Python

from dataclasses import dataclass
from ..database import db
@dataclass
class Setting:
name: str
description: str
choices: dict[str, str]
value: str | None = None
settings_strings: dict[str, Setting] = {
'search_preview': Setting(
name='Search preview',
description='Show only covers (better display), '
'or add 30 seconds of track preview whenever possible?',
choices={
'cover': 'Cover picture',
'preview': 'Audio preview'
},
),
'recode_youtube': Setting(
name='Recode YouTube (and Spotify)',
description='Recode when downloading from YouTube (and Spotify) to '
'more compatible format (may take some time)',
choices={
'no': 'Send original file',
'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'
},
)
}
@dataclass
class UserSettings:
user_id: str | int
def __post_init__(self):
if type(self.user_id) is int:
self.user_id = str(self.user_id)
if db.settings.get(self.user_id) is None:
db.settings[self.user_id] = dict(
(setting, list(settings_strings[setting].choices)[0]) for setting in
settings_strings
)
def __getitem__(self, item):
s = settings_strings.get(item)
if s is None:
return None
try:
s.value = db.settings[self.user_id][item]
except KeyError:
s.value = list(s.choices)[0]
self[item] = s.value
return s
def __setitem__(self, key, value):
h = db.settings[self.user_id]
h[key] = value
db.settings[self.user_id] = h