forked from EllieBotDevs/elliebot
57 lines
1.9 KiB
C#
57 lines
1.9 KiB
C#
|
#nullable disable
|
||
|
namespace EllieBot.Modules.Music;
|
||
|
|
||
|
public static class MusicExtensions
|
||
|
{
|
||
|
public static string PrettyTotalTime(this IMusicPlayer mp)
|
||
|
{
|
||
|
long sum = 0;
|
||
|
foreach (var track in mp.GetQueuedTracks())
|
||
|
{
|
||
|
if (track.Duration == TimeSpan.MaxValue)
|
||
|
return "∞";
|
||
|
|
||
|
sum += track.Duration.Ticks;
|
||
|
}
|
||
|
|
||
|
var total = new TimeSpan(sum);
|
||
|
|
||
|
return total.ToString(@"hh\:mm\:ss");
|
||
|
}
|
||
|
|
||
|
public static string PrettyVolume(this IMusicPlayer mp)
|
||
|
=> $"🔉 {(int)(mp.Volume * 100)}%";
|
||
|
|
||
|
public static string PrettyName(this ITrackInfo trackInfo)
|
||
|
=> $"**[{trackInfo.Title.TrimTo(60).Replace("[", "\\[").Replace("]", "\\]")}]({trackInfo.Url.TrimTo(50, true)})**";
|
||
|
|
||
|
public static string PrettyInfo(this IQueuedTrackInfo trackInfo)
|
||
|
=> $"{trackInfo.PrettyTotalTime()} | {trackInfo.Platform} | {trackInfo.Queuer}";
|
||
|
|
||
|
public static string PrettyFullName(this IQueuedTrackInfo trackInfo)
|
||
|
=> $@"{trackInfo.PrettyName()}
|
||
|
`{trackInfo.PrettyTotalTime()} | {trackInfo.Platform} | {Format.Sanitize(trackInfo.Queuer.TrimTo(15))}`";
|
||
|
|
||
|
public static string PrettyTotalTime(this ITrackInfo trackInfo)
|
||
|
{
|
||
|
if (trackInfo.Duration == TimeSpan.Zero)
|
||
|
return "(?)";
|
||
|
if (trackInfo.Duration == TimeSpan.MaxValue)
|
||
|
return "∞";
|
||
|
if (trackInfo.Duration.TotalHours >= 1)
|
||
|
return trackInfo.Duration.ToString("""hh\:mm\:ss""");
|
||
|
|
||
|
return trackInfo.Duration.ToString("""mm\:ss""");
|
||
|
}
|
||
|
|
||
|
public static ICachableTrackData ToCachedData(this ITrackInfo trackInfo, string id)
|
||
|
=> new CachableTrackData
|
||
|
{
|
||
|
TotalDurationMs = trackInfo.Duration.TotalMilliseconds,
|
||
|
Id = id,
|
||
|
Thumbnail = trackInfo.Thumbnail,
|
||
|
Url = trackInfo.Url,
|
||
|
Platform = trackInfo.Platform,
|
||
|
Title = trackInfo.Title
|
||
|
};
|
||
|
}
|