# meta developer: @H_SunMods # meta banner: https://r2.fakecrime.bio/uploads/7103b4ca-5fb1-4512-8a70-e720780c29c8.jpg # current ver __version__ = (1, 0, 0) import logging from .. import loader, utils logger = logging.getLogger(__name__) @loader.tds class spotifyph(loader.Module): """Progress bar current track in spotify""" strings = { "name": "spotify_ph", "start_duration": "🎶🎶", "start_full_duration": "🎶🎶", "mid_duration": "🎶", "empty_mid": "🎶", "end_duration": "🎶", "end_duration_full": "🎶", "empty_end": "🎶", "no_prem_start_duration": "ᵔᴥᵔ [---", "no_prem_start_full_duration": "ᵔᴥᵔ [~~~", "no_prem_mid_duration": "~~~", "no_prem_empty_mid": "---", "no_prem_end_duration_full": "~~~]", "no_prem_empty_end": "---]", "not_installed": "SpotifyMod is not installed", "nothing_plays": "Nothing plays", "sp_duration_desc": "Progress bar", "sp_track_desc": "Artist and song", "err": "Error`" } strings_ru = { "_cls_doc": "Прогресс бар играющего трека в спотифай", "not_installed": "SpotifyMod не установлен", "nothing_plays": "Ничего не играет", "sp_duration_desc": "Прогресс бар", "sp_track_desc": "Автор и песня", "err": "Еррорь" } async def client_ready(self, client, db): self._client = client utils.register_placeholder("sp_duration", self.sp_duration, self.strings("sp_duration_desc")) utils.register_placeholder("sp_track", self.get_sp_track, self.strings("sp_track_desc")) def __init__(self): self.config = loader.ModuleConfig( loader.ConfigValue( "show_text_time", True, "show text time", validator=loader.validators.Boolean(), ) ) async def get_sp_track(self): try: s = self.lookup("SpotifyMod") if not s or not s.sp: return self.strings("not_installed") p = s.sp.current_user_playing_track() if not (p and p.get('item')): return self.strings("nothing_plays") artist = p['item']['artists'][0]['name'] track_name = p['item']['name'] return utils.escape_html(f"{artist} — {track_name}") except Exception as e: logger.error(f"Error in sp_track: {e}") return self.strings("err") async def sp_duration(self): s = self.lookup("SpotifyMod") if not s or not s.sp: return self.strings("not_installed") playback = s.sp.current_playback() if not playback or not playback.get("item"): return self.strings("nothing_plays") prog_ms = playback.get("progress_ms", 0) dur_ms = playback["item"].get("duration_ms", 0) if dur_ms == 0: return "00:00 / 00:00" percent = (prog_ms / dur_ms) * 100 filled_units = int(percent // 16.66) # Логика для нищих user = getattr(self._client, "heroku_me", getattr(self._client, "me", None)) is_premium = getattr(user, "premium", False) pref = "" if is_premium else "no_prem_" if filled_units >= 1: start_pos = f"{pref}start_full_duration" else: start_pos = f"{pref}start_duration" bar = self.strings(start_pos) for i in range(2, 6): if filled_units >= i: mid_pos = f"{pref}mid_duration" else: mid_pos = f"{pref}empty_mid" bar += self.strings(mid_pos) if filled_units >= 6: end_key = f"{pref}end_duration_full" else: end_key = f"{pref}empty_end" bar += self.strings(end_key) if self.config["show_text_time"]: prog_t = f"{prog_ms//60000:02}:{(prog_ms//1000)%60:02}" dur_t = f"{dur_ms//60000:02}:{(dur_ms//1000)%60:02}" return f"{bar} {prog_t} / {dur_t}" return bar