# 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