mirror of
https://github.com/MuRuLOSE/limoka.git
synced 2026-06-18 23:24:18 +02:00
Added and updated repositories 2026-06-12 08:36:40
This commit is contained in:
124
SunnexGB/Heroku-Modules/spotify_ph.py
Normal file
124
SunnexGB/Heroku-Modules/spotify_ph.py
Normal file
@@ -0,0 +1,124 @@
|
||||
# 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": "<tg-emoji emoji-id=5386793861483894694>🎶</tg-emoji><tg-emoji emoji-id=5384507693341906264>🎶</tg-emoji>",
|
||||
"start_full_duration": "<tg-emoji emoji-id=5386793861483894694>🎶</tg-emoji><tg-emoji emoji-id=5384401375721463792>🎶</tg-emoji>",
|
||||
"mid_duration": "<tg-emoji emoji-id=5386623003389888935>🎶</tg-emoji>",
|
||||
"empty_mid": "<tg-emoji emoji-id=5384267235302870604>🎶</tg-emoji>",
|
||||
"end_duration": "<tg-emoji emoji-id=5386826786703186322>🎶</tg-emoji>",
|
||||
"end_duration_full": "<tg-emoji emoji-id=5386623003389888935>🎶</tg-emoji>",
|
||||
"empty_end": "<tg-emoji emoji-id=5386826786703186322>🎶</tg-emoji>",
|
||||
"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": "<b>SpotifyMod is not installed</b>",
|
||||
"nothing_plays": "<b>Nothing plays</b>",
|
||||
"sp_duration_desc": "Progress bar",
|
||||
"sp_track_desc": "Artist and song",
|
||||
"err": "<b>Error`</b>"
|
||||
}
|
||||
|
||||
strings_ru = {
|
||||
"_cls_doc": "Прогресс бар играющего трека в спотифай",
|
||||
"not_installed": "<b>SpotifyMod не установлен</b>",
|
||||
"nothing_plays": "<b>Ничего не играет</b>",
|
||||
"sp_duration_desc": "Прогресс бар",
|
||||
"sp_track_desc": "Автор и песня",
|
||||
"err": "<b>Еррорь</b>"
|
||||
}
|
||||
|
||||
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} <code>{prog_t} / {dur_t}</code>"
|
||||
return bar
|
||||
Reference in New Issue
Block a user