diff --git a/cmd/modlastfm/main.go b/cmd/modlastfm/main.go index 5699cac85ec125ac76e65244244183a36a064d64..547e9d664dbfd6b18a332551f53be6c908fd70ee 100644 --- a/cmd/modlastfm/main.go +++ b/cmd/modlastfm/main.go @@ -22,7 +22,7 @@ func main() { gauntlet.New(config, db) - out := gauntlet.Run("ne7split", `aplays Odraza "Esperalem tkane"`) + out := gauntlet.Run("ne7split", `splays Begrime Exemious "Noose for a Monarch"`) log.Println(out) diff --git a/internal/app/modlastfm/command/init.go b/internal/app/modlastfm/command/init.go index 0d827879a76c5f98a9d51f3c9453a7dbbb42b6ac..819757865bb14d6e5943b74c96f10bf6044e58d6 100644 --- a/internal/app/modlastfm/command/init.go +++ b/internal/app/modlastfm/command/init.go @@ -2,9 +2,10 @@ package command import ( "fmt" + "strconv" + "github.com/boltdb/bolt" "github.com/n7st/lastfm-go/lastfm" - "strconv" "git.netsplit.uk/stella-irc/modlastfm/internal/app/modlastfm/util" ) diff --git a/internal/app/modlastfm/command/user.go b/internal/app/modlastfm/command/user.go index 50b8790508a60b27c1d1514a8de5de8114f5bda9..3e9da5c4361b43ba73b21576269379ea173fab59 100644 --- a/internal/app/modlastfm/command/user.go +++ b/internal/app/modlastfm/command/user.go @@ -8,6 +8,8 @@ import ( "github.com/n7st/lastfm-go/lastfm" ) +const statLineF = "%s by %s has %s total plays, of which %s are %s's (%s)" + func (f *Fn) NowPlaying(message string, username string) string { resp, err := f.LastFM.User.GetRecentTracks(lastfm.P{ "autocorrect": 1, @@ -51,14 +53,20 @@ func (f *Fn) UserAlbumStats(message string, username string) string { return f.fmtUserAlbumStats(username, userAlbumInfo) } -func (f *Fn) fmtUserArtistStats(username string, info lastfm.ArtistGetInfo) string { - return fmt.Sprintf("%s have %s total plays, of which %s are %s's (%s)", - info.Name, - info.Stats.Plays, - info.Stats.UserPlays, - username, - fmtPlaycountPercentage(info.Stats.UserPlays, info.Stats.Plays), - ) +func (f *Fn) UserTrackStats(message string, username string) string { + artist, songTitle := extractTitles(message) + + if artist == "" || songTitle == "" { + return `Format: splays Artist Name "Song Title"` + } + + userTrackInfo, err := f.getUserTrackInfo(username, artist, songTitle) + + if err != nil { + return fmtError(err) + } + + return f.fmtUserTrackStats(username, userTrackInfo) } // formats a "now playing" string from recent user tracks, e.g.: @@ -107,8 +115,18 @@ func (f *Fn) fmtNowPlaying(username string, np lastfm.UserGetRecentTracks) strin ) } +func (f *Fn) fmtUserArtistStats(username string, info lastfm.ArtistGetInfo) string { + return fmt.Sprintf("%s have %s total plays, of which %s are %s's (%s)", + info.Name, + info.Stats.Plays, + info.Stats.UserPlays, + username, + fmtPlaycountPercentage(info.Stats.UserPlays, info.Stats.Plays), + ) +} + func (f *Fn) fmtUserAlbumStats(username string, album lastfm.AlbumGetInfo) string { - return fmt.Sprintf("%s by %s has %s total plays, of which %s are %s's (%s)", + return fmt.Sprintf(statLineF, album.Name, album.Artist, album.PlayCount, @@ -118,6 +136,17 @@ func (f *Fn) fmtUserAlbumStats(username string, album lastfm.AlbumGetInfo) strin ) } +func (f *Fn) fmtUserTrackStats(username string, track lastfm.TrackGetInfo) string { + return fmt.Sprintf(statLineF, + track.Artist.Name, + track.Name, + track.PlayCount, + track.UserPlayCount, + username, + fmtPlaycountPercentage(track.UserPlayCount, track.PlayCount), + ) +} + func (f *Fn) getUserTrackInfo(username string, artist string, track string) (lastfm.TrackGetInfo, error) { return f.LastFM.Track.GetInfo(lastfm.P{ "artist": artist, diff --git a/internal/app/modlastfm/gauntlet/run.go b/internal/app/modlastfm/gauntlet/run.go index b5d46b7cc150969843efcfed1bbc2220536a22b6..fac3d8d05d4ed8e177492eccd04e3198b7472855 100644 --- a/internal/app/modlastfm/gauntlet/run.go +++ b/internal/app/modlastfm/gauntlet/run.go @@ -25,9 +25,17 @@ func New(c *util.Config, db *bolt.DB) { "l": fn.NowPlaying, "np": fn.NowPlaying, "nowplaying": fn.NowPlaying, - + //"topw": fn.UserTopWeek, + //"topm": fn.UserTopMonth, + //"topy": fn.UserTopYear, + //"topa": fn.UserTopAll, "plays": fn.UserArtistStats, "aplays": fn.UserAlbumStats, + "splays": fn.UserTrackStats, + + //"artist": fn.ArtistInfo, + //"band": fn.ArtistInfo, + //"similar": fn.SimilarArtists, } }