rvrb bot
@StatusLabel
@if (Snapshot is null) {Nothing answered on the bot's node, so there are no stats to show.
@if (Status.Error is { } error) { @* A failure on the far side arrives as an Erlang term, stack trace and all, which is worth keeping but not worth putting in front of everyone. *@What went wrong
@error
The bot isn't connected to RVRB right now, so nothing is playing.
} else if (Snapshot.Live.CurrentTrack is not { } track) {Connected, but no track has played since the bot joined.
} else { }| DJ | Avg track length | Next play in |
|---|---|---|
| @(dj.Current ? "▶ " : "")@(dj.Name ?? "someone") | ≈ @Format.Duration(dj.AverageTrack) @if (!dj.Measured) { (assumed) } | ≈ @Format.Duration(dj.Wait) |
@live.QueuedTracks @(live.QueuedTracks == 1 ? "track" : "tracks") queued for the bot's own turn.
}- Plays
- @Snapshot.Totals.Plays
- Tracks
- @Snapshot.Totals.Tracks
- Artists
- @Snapshot.Totals.Artists
- DJs
- @Snapshot.Totals.Djs
- Users seen
- @Snapshot.Totals.Users
- Dopes
- @Snapshot.Totals.Dopes
- Stars
- @Snapshot.Totals.Stars
Recording plays since
| DJ | Plays | 👍 | 🔖 | Score |
|---|---|---|---|---|
| @dj.Name | @dj.Plays | @dj.Dopes | @dj.Stars | @dj.Score |
| Track | Artist | Plays | Score |
|---|---|---|---|
| @track.TrackName | @string.Join(", ", track.ArtistNames) | @track.Plays | @track.Score |
| Artist | Plays | Score |
|---|---|---|
| @artist.ArtistName | @artist.Plays | @artist.Score |
| When | DJ | Track | Artist | Score |
|---|---|---|---|---|
| @play.Dj | @play.TrackName | @string.Join(", ", play.ArtistNames) | @play.Score |
Read from @Options.Node over Erlang distribution with
BeamSharp. Snapshot taken