Skip to main content
Righteous

Last.fm

Link your Last.fm account, post what you're playing, rank your server, build charts, and sync your whole scrobble history.

Righteous reads your Last.fm account and turns it into now-playing cards, collages, server leaderboards, crowns and long-range listening stats. Nearly all of it lives under one command with subcommands: ,lastfm, aliased ,lf, mirrored on slash as /lastfm.

Nothing here works until you link an account. This page covers the whole system in the order you'd meet it. Use the list on the right to jump.

Run the set command

,lastfm set <username>, or /lastfm set. Use your Last.fm username, the one in your profile URL, not the email you sign in with.

Wait for the library sweep

Linking pulls your top artists, albums and tracks into the bot. On a large account that takes a couple of minutes and shows a running counter.

Check it worked

Play something, then run ,np. If a card comes back with your track on it, you're done.

Your account needs at least one scrobble before it can be linked. A brand-new Last.fm account with nothing on it is rejected, because there is nothing to verify against. A private Last.fm profile can't be read either.

If the username you give is already linked to other Discord accounts, Righteous warns you and names how many. It's a warning, not a refusal. The link still goes through. Two people sharing one Last.fm account is unusual enough to be worth telling you about, and legitimate often enough that blocking it would be wrong.

Re-linking a different username wipes your stored history

Linking a new name means the stored plays belong to someone else, so they're deleted rather than merged. Interleaving two people's listening would make every date answer quietly wrong. Re-linking the same name is safe.

Know which of three data sources answers your question

Commands here don't all read the same thing, and that explains most of the surprising behaviour.

Last.fm, live. ,lastfm np and ,lastfm recent ask Last.fm what's happening right now. Nothing is stored, so nothing goes stale.

Your stored library. Your top artists, albums and tracks, written when you link and refreshed by ,lastfm update. Play counts, WhoKnows and crowns all read this, which is why they're instant and why they can lag behind reality until a refresh.

Your synced scrobble history. A local copy of every individual play, with timestamps, built by ,lastfm update history. Last.fm's own API can't answer "what did I play in June 2023", so everything date-shaped needs this. It's a Self Premium feature, covered in Sync your history.

Why a command sometimes says it has nothing to work with

A stats command that needs synced history and doesn't find any will either fall back to all time and say so, or refuse outright. It refuses when there's no honest fallback: there's no all-time answer to "what did I play on this date".

Check the tier before you promise someone a feature

Three tiers exist and they are three separate products, not three levels of one.

TierCostsHow you get it
Boosting PremiumFreeBoost the support server
Self PremiumPaidCovers your account, in every server
Server PremiumPaidCovers one whole server, for everyone in it

Free and paid are easy to confuse here

Boosting Premium costs nothing. Self Premium and Server Premium are purchases. A feature marked Boosting Premium below is available to any booster without paying anything. See /premium for the current pricing and the full non-Last.fm breakdown.

Everything not listed in the three groups below is free once you've linked an account.

Boosting Premium: the library breakdowns and the extras
CommandGives you
,lastfm tasteYour library next to one other person's
,lastfm genresYour top genres
,lastfm countryWhere your artists are from
,lastfm obscurityHow underground your taste is
,lastfm decadesWhen your artists formed
,lastfm artisttypeSolo artists against bands
,lastfm clockWhen you listen, by hour and weekday
,lastfm timezoneThe zone the clock and date ranges use
,lastfm lyricsLyrics for what's playing
,lastfm playingEveryone in the server listening right now
,lastfm topalbumsongsYour most-played songs from one album

Nothing on this list is exclusive to boosters. Every command here is gated on any premium, which boosting is one way to hold: Self Premium answers for all of them too, and so does simply being in a Server Premium server. "Boosting Premium" names the cheapest way in, not a walled tier. The no-prefix name trigger works the same way.

Self Premium: the whole history family, and your own card
CommandGives you
,lastfm update historyThe scrobble sync itself. update full, update resync and update crowns are gated the same way
,lastfm firstThe first time you played something
,lastfm lastThe most recent time
,lastfm timelineEvery play in between
,lastfm milestoneYour Nth scrobble
,lastfm paceYour real scrobbling rate
,lastfm yearA calendar-year recap
,lastfm onthisdayThis date across past years
,lastfm discoveriesArtists you found in a window
,lastfm gapsArtists you stopped playing
,lastfm moversWhat rose and fell between two windows
,lastfm exportYour scrobbles as a CSV
,lastfm colorYour card's accent colour
,lastfm modeYour own card layout
,lastfm reactThe emotes under your card
,lastfm customcommandA trigger word of your own
,lastfm autoupdateYour own background-refresh interval
,lastfm friends fmWhat everyone on your friends list is playing
,lastfm fwkWho-knows asked of your friends. fwka, fwkt, ,lastfm friends whoknows and the friends: option on /lastfm wk/gwk are the same perk
,lastfm friends add50 friends instead of 5. Adding, listing and removing are free: the limit is what Self Premium raises
Server Premium: the server-wide controls
CommandGives you
,lastfm crownindexEvery crown in the server seeded at once
,lastfm server colorA house accent colour
,lastfm server upvoteThe server's up-vote emote
,lastfm server downvoteThe server's down-vote emote
,lastfm server midvoteThe server's third emote
,lastfm server npmodeA house card layout
,lastfm server autoupdateA background-refresh interval for everyone in the server
,lastfm server crownminplaysA minimum before a crown changes hands
,lastfm server resetcrownsEvery crown deleted

Weekly and daily cadence on the server digest is Server Premium as well, and so is running more than one digest.

There are really only two gates underneath the three tier names, and knowing which is which saves you buying something twice.

The wide gate accepts any premium at all: boosting, Self Premium, or being in a Server Premium server. Everything in the Boosting Premium list runs on it, and so do the Customize button under a chart, the full WhoKnows list past the first page, a longer ,lastfm recent, and the no-prefix name trigger. These are not ranked against each other; they all open at once.

The narrow gate accepts a purchase and nothing else. That is the Self Premium list, plus ,lastfm timestamps, which additionally answers for a Server Premium server. Boosting never opens this one, however long you boost.

So the question is never "which of three tiers do I have." It's "have I bought something." Two gates, one purchase between them.

A member's own paid settings always beat the server default. A server that sets a now-playing style is setting it for members who haven't bought their own, not overriding the ones who have.

Post what you're playing

,np is the short form, aliased ,fm. The same card is available as ,lastfm np and /lastfm np.

Add a mention and you get their card, not yours. That's deliberate, and it's the opposite of how most other commands in this family treat a mention: showing someone else's music is this command's entire job. Two siblings behave the same way: ,lastfm lyrics (Boosting Premium) and ,lastfm spotify also read the mentioned person's track. Everywhere else, a mention plus no track means "how much do you listen to what I'm playing".

You can also right-click somebody, then Apps → Now Playing, which posts exactly the same card as ,np @them. It's the same handler, so a person with no linked account gets the same answer either way, and the same cooldown applies whether you typed the command or clicked the menu.

Start from a card that already works

,lastfm mode replaces that built-in card with an embed code of your own. It's Self Premium, your own purchase, covering you in every server. Boosting Premium is not enough and neither is being in a Server Premium server, so a refusal here is almost always the gate rather than the code.

A full card: the cover as the thumbnail, the track and the artist each linked, your plays on the track beside your lifetime total, and an accent colour pulled straight out of the artwork.

Syntax

,lastfm mode <code>

Example

,lastfm mode {color: {album.color}}$p{author: {user.fmname} && {user.avatar}}$p{thumbnail: {album.cover}}$p{description: **[{track.name}]({track.url})** by [{artist.name}]({artist.url}) {lastfm.liked}{artist.crown}}$p{footer: {track.plays} plays | {user.plays} scrobbles}$p{timestamp:}

A shorter one that hangs the link off the title instead of a description:

Syntax

,lastfm mode <code>

Example

,lastfm mode {color: {album.color}}$p{title: {track.name}}$p{url: {track.url}}$p{description: {artist.name} — {album.name}}$p{thumbnail: {album.cover}}$p{footer: {track.plays} plays}

Both are ordinary embed codes: Embed codes is the language itself. Three things are worth copying out of them:

  • {color: {album.color}} is the line to steal. {album.color} is the dominant colour of the cover art, read fresh on every render, so the card recolours itself track by track. Art the bot can't read resolves to nothing and the embed falls back to your ,lastfm color accent rather than going black.
  • A missing value degrades quietly, and not all in the same way. {album.cover}, {album.color}, {lastfm.liked} (❤️ only when the track is loved on Last.fm) and {artist.crown} (👑 only when you hold this server's crown for that artist) render as nothing when there is no answer: a track with no art simply loses its thumbnail. {track.plays} renders ? and {album.name} renders N/A instead, so put those two where a placeholder still reads.
  • The card follows the mention, and the variables follow it too. ,np @someone renders your saved code against their account, so {user.fmname}, {user.avatar} and every {track.*} token answers for them, not for you. The general Discord variables ({user.mention}, {guild.name}) work here as well; ,lastfm variables lists the Last.fm ones.

Saving previews the code back at you before it stores anything, and refuses to save if the link guard stripped a part of it or if Last.fm didn't answer in time. What you preview is what posts. ++delete is the one piece of the language with no effect here: it is stripped out of the code and never renders, but nothing schedules a now-playing card for deletion.

Syntax

,lastfm mode code [person]

Syntax

,lastfm mode reset

A card you wrote yourself is the only one that looks like you instead of like the bot.

,lastfm link gives you the track on every platform at once. Per-platform commands narrow the same card to one service: spotify, youtube, apple and soundcloud.

Rank the server and hand out crowns

WhoKnows turns your server into a leaderboard for one artist, album or track at a time. Crowns are the persistent version of that: the top listener of an artist holds it until somebody out-plays them. Both read the libraries Righteous already stores, so they answer instantly.

Everyone who wants to appear needs a linked account.

See who else here listens to something

,lastfm wk <artist> ranks everyone in this server by their plays of that artist, with your own rank called out underneath. Two siblings narrow it:

CommandTakesSlash
,lastfm wk <artist>An artist name/lastfm wk artist
,lastfm wka <album> - <artist>An album, then the artist/lastfm wk album
,lastfm wkt <track> - <artist>A track, then the artist/lastfm wk track

Leave the argument off entirely and Righteous uses whatever you're playing right now. The slash form takes the two halves as separate boxes, so you don't need the - at all there.

Type a name that doesn't resolve and you get a picker of close matches rather than an error, so a misspelling costs one extra click instead of a retry.

The ranking is from stored libraries, not a live lookup

Righteous doesn't ask Last.fm for each member's play count when you run this. It reads what it already has. That's what makes a large server answer in one round trip. It also means somebody whose library hasn't refreshed lately shows a slightly old number. Any member can fix their own with ,lastfm update.

Free callers see the first page of the list. Boosting Premium or Server Premium in this server pages through all of it.

Widen it past this server

The global versions rank everyone Righteous knows about, not just this server: ,lastfm globalwhoknows (aliased gwk), ,lastfm gwka and ,lastfm gwkt. On slash they're /lastfm gwk artist, /lastfm gwk album and /lastfm gwk track.

These are read-only. They never claim or move a crown, and they aren't filtered by this server's blacklist: the list isn't about this server's membership, so a per-server hide would have no consistent meaning there.

Free callers see the top of the list. Boosting Premium or Server Premium shows the rest.

Claim a crown

A crown belongs to whoever has the most plays of an artist in this server. There are no album or track crowns.

Crowns are claimed as a side effect of running ,lastfm wk. When the list comes back, the top listener takes the crown if nobody holds it, or takes it from the current holder on strictly more plays. A tie claims nothing and leaves the existing holder alone.

To look at them:

  • ,lastfm crown shows your crowns. Add a mention for somebody else's.
  • ,lastfm crown lb shows the server leaderboard by crown count. /lastfm crown view is the slash form.

Two commands seed crowns in bulk instead of one artist at a time:

CommandScopeNeeds
,lastfm crownindexEvery artist in the server at onceManage Server and Server Premium
,lastfm update crownsJust your own claims, from your own librarySelf Premium

Both honour the same rules a normal claim does, including the minimum below. ,lastfm crown index works as a spelling of the first one and enforces the same requirements.

Set a minimum before a crown changes hands

By default a crown moves on one play more than the holder, which means a single curious listen can take it. Raise the bar with ,lastfm server crownminplays <number>. That needs Manage Server and Server Premium.

Below the threshold nothing happens at all. No claim, no transfer, and an existing holder keeps what they have rather than losing it to somebody lower down. Setting it back to 0 restores the default behaviour.

It reverts when Server Premium lapses

The minimum goes back to 0 the moment the subscription ends, so a stored paid setting never keeps enforcing itself for free. Your number is still there if you resubscribe.

Reset every crown

,lastfm server resetcrowns confirm deletes every crown in the server. It needs Manage Server and Server Premium, and it needs the word confirm because there is no undo. The same action is a button on the Last.fm page of the config panel.

Hide someone from the leaderboards

,lastfm blacklist add <user> removes a member from this server's Last.fm leaderboards. remove puts them back and list shows who's on it. It needs Manage Server, and it's free, one of the two server-side Last.fm controls that isn't Server Premium. The other is the monthly digest.

A blacklisted member disappears from WhoKnows, the crown leaderboard, ,lastfm playing and the bulk crown index. They can't hold or win a crown, and any crown they currently hold is handed to the next eligible listener straight away.

They can still run every command themselves. This hides them from other people's lists rather than locking them out.

Compare taste with one person

,lastfm taste <person> [range] puts your library next to somebody else's and shows the overlap. It's Boosting Premium.

Where both of you have a synced scrobble history, it also marks who found each shared artist first and by how long. That annotation is skipped rather than guessed when either side hasn't synced, so the comparison itself never changes shape.

See what the server is playing right now

,lastfm playing lists everyone in the server who's listening to something at this moment, newest first, with a ▶ on every row and your own marked (you). Boosting Premium.

Syntax

,lastfm playing

Add friends to ask the same question of your friends instead of the server — and unlike the server view, that one reaches your friends wherever they are, not just the ones in this server. On slash it is the friends option on /lastfm playing. Self Premium.

Syntax

,lastfm playing [friends]

Example

,lastfm playing friends

Either way it only shows people playing something right now — anyone idle is left out. If you want your friends' last tracks whether or not they are listening, that is ,lastfm friends fm.

Keep a friends list, and ask who-knows of it

Your friends list is yours, not a server's: the people on it can be in any server, or none of the ones you share. It exists so "who listens to this" can be asked of people you actually know instead of whoever happens to be in the room.

Friendships are mutual. You send a request, the other person accepts, and from then on you are each on the other's list. Nobody is added without pressing a button.

Add someone

Syntax

,lastfm friends add <@user>

Example

,lastfm friends add @begging.

Righteous posts a card in the channel with Accept and Deny buttons that only the person you named can press. It waits two minutes; if nobody answers, the buttons grey out and nothing is saved, so you can simply ask again. Denying saves nothing either.

You can also right-click somebody, then Apps → Add Friend, which sends exactly the same request.

Both of you need a linked Last.fm account before a request can be sent: Righteous checks theirs as well as yours and says whose is missing. Requests have to be sent in a server, not a DM, because the other person has to be able to see the card and press the button.

Nothing is stored until Accept is pressed

An unanswered request leaves no trace at all: there is no pending list, nothing to cancel, and nothing that expires later. It is the card or it is nothing.

See, prune and clear the list

Syntax

,lastfm friends list

Shows everyone on your list with their Last.fm name and when you became friends, ten to a page. Anyone who has since unlinked their account is still listed, marked as unlinked rather than quietly dropped.

Syntax

,lastfm friends remove <@user>

Example

,lastfm friends remove @begging.

Removing is mutual too: there is one friendship, so ending it ends it for both of you. Neither of you is notified. ,lastfm friends reset clears the whole list at once, behind a Confirm button.

Adding, listing, removing and resetting are free for everyone. So is accepting a request.

How many friends you can have

TierFriends
Free5
Self Premium50

The limit applies to you when you add someone, and to nobody else. Somebody already at the free limit can still be sent a request, and can still accept it. So if several people add you, you can end up with more friends than you could have added yourself. That is deliberate, not a loophole.

Letting Self Premium lapse never deletes a friend

If you stop paying you keep all 50. Every list and every result still shows all of them; the only thing that changes is that you cannot add another until you are back under the free limit.

See what your friends are playing

Syntax

,lastfm friends fm

One line per friend and one for you, most recently active first, with a marker on anyone listening right now and a relative time on everyone else. Your own row is labelled (you) and sorts in with everybody else rather than being pinned to the top, so the order always means the same thing. It asks Last.fm about each account in turn behind a progress bar, so a full list takes a few seconds. Self Premium.

Ask who-knows of your friends

Three commands mirror the server versions, ranking your friends instead of this server's members:

CommandTakes
,lastfm fwk <artist>An artist name
,lastfm fwka <album> - <artist>An album, then the artist
,lastfm fwkt <track> - <artist>A track, then the artist

On slash there are no separate commands: set friends: True on /lastfm wk or /lastfm gwk instead, on the artist, album or track leaf. Leaving it off is the normal server-wide ranking, which is what it has always been.

,lastfm friends whoknows <artist> is the same question asked of your friends everywhere, not just the ones in this server. It also takes an album or a track, with the kind written in front so a band called Album is never mistaken for a keyword:

Syntax

,lastfm friends whoknows album:<album> - <artist>

Example

,lastfm friends whoknows album:goodbye & good riddance - juice wrld

Syntax

,lastfm friends whoknows track:<track> - <artist>

Example

,lastfm friends whoknows track:lucid dreams - juice wrld

All of these are Self Premium, and they read the same stored libraries the server ranking does, so a friend whose library hasn't refreshed lately shows a slightly old number.

A friends ranking never touches crowns

Crowns belong to whoever has the most plays in a server. The top of a friends-filtered list is the top among your friends, which is a different fact. So these commands never claim, move or refresh a crown, and the title says (friends) so a short list is never mistaken for the server's.

Somebody hidden from this server's leaderboards with ,lastfm blacklist stays hidden here too. Being your friend does not undo a moderator's decision about their own server.

Build charts and read your stats

Everything in this section describes one library, usually yours, optionally somebody else's. Add a mention to almost any command here and you get that person's answer instead of your own.

Build a cover collage

,lastfm chart renders a grid of album art. It's free, and /lastfm chart is the slash form. collage is an alias on the subcommand rather than a command in its own right, so it still needs the parent word in front of it: ,lastfm collage and ,lf collage both work, and a bare ,collage does nothing at all.

Arguments are order-independent and anything Righteous doesn't recognise is ignored, so ,lastfm chart 5x5 albums 1m and ,lastfm chart 1m 5x5 are the same command.

OptionWriteNotes
Typealbums, artists, tracksalbums is the default. Short forms like ab, ar, tr work
Size5x5, or a bare 5Up to 10x10. Bigger than that is refused rather than trimmed
Period7d, 1m, 3m, 6m, 12m, overallAlso a bare year or month name
CaptionsnocaptionsHides the titles. noplays hides the play counts
RainbowrainbowSorts the tiles into a hue sweep. Turns captions and play counts off, since labels on hue-sorted art are noise
Colourcolor:<hex or name>Keeps only the covers closest to that colour
Genregenre:<tag>Keeps only tiles whose artist carries that tag

Colour and genre filtering are free, exactly like the rest of the command.

Covers Last.fm has no art for are dropped and the grid is resized to what's left, so a small library asking for 8x8 gets a full smaller square instead of a grid with holes in it. Add keepempty if you'd rather have the literal top-N, blanks included.

The Customize button under the chart is a premium perk

The command is free for everyone. The Customize button on the reply reopens the chart with a form for size, period, the toggles, genre and colour, and that needs Boosting Premium or Server Premium in this server. The button keeps working on an old message, so a chart from last week still opens.

Read your top artists, albums and tracks

CommandShows
,lastfm tar [person]Top artists
,lastfm tab [person]Top albums
,lastfm tt [person]Top tracks
,lastfm tta [artist] [person] [range]Top ten albums by one artist
,lastfm ttt [artist] [person] [range]Top ten tracks by one artist
,lastfm topalbumsongs [album - artist] [person]Your most-played songs from one album (Boosting Premium)
,lastfm overview [person] [artist]One artist's top track and top album for you

On slash most of these live under /lastfm top: top artists, top albums, top tracks, top albumsongs, top tta and top ttt. overview is the exception: it sits with the other library breakdowns, as /lastfm stats overview.

Artist names that look like dates

,lastfm ttt The 1975 and ,lastfm tta 2001 are genuinely ambiguous: the trailing number could be an artist or a year. Righteous resolves it by checking whether the whole string is a real artist. If you want to be certain, put the window in an explicit range: at the end: ,lastfm ttt The 1975 range:2024.

Count the plays of one thing

CommandAnswers
,lastfm ap [artist]How many times you've played an artist
,lastfm alp [album - artist]An album
,lastfm sp [track - artist]A track

Leave the target off and Righteous uses what you're playing right now. Mention somebody and you're asking how many times they have played it.

See your profile and your recent plays

,lastfm profile [person] gives the summary card: scrobble totals, top artist, album and track, and how long the account has been running.

,lastfm recent [person] lists the last tracks scrobbled. Free callers get a shorter list. Boosting Premium or Server Premium here makes it longer.

,lastfm streaks [person] finds the artist you're currently on a run with. Add the word history to either of these and, if you've synced your scrobbles, they read your local copy instead: a much longer recent list, and your longest artist runs ever rather than only what fits in one request.

Show when each track was scrobbled

,lastfm timestamps <on|off> [style] adds the scrobble time to every row of ,lastfm recent, rendered in each reader's own timezone.

This one needs Self Premium or Server Premium in the server you run it in. Boosting Premium is not enough, because this one is a purchase-only perk. The command is prefix-only. On slash the same two controls are on the Recent page of /lastfm settings panel, which shows each style with a worked example rather than asking you to recognise a one-letter code.

Break your library down

Each of these answers a different question about the same library, and every one of them is Boosting Premium.

CommandAnswers
,lastfm genres [artist] [range]Your top genres, from your artists' Last.fm tags
,lastfm country [artist] [range]Where your artists are from
,lastfm obscurity [artist] [range]How underground your taste is, from global listener counts
,lastfm decades [artist] [range]When your artists formed
,lastfm artisttype [artist] [range]Solo artists against bands
,lastfm clock [person]When you listen, by hour and weekday

Each of them except clock has two modes. With no argument you get your whole library ranked. Name one artist and you get that artist's answer plus your play count for them.

Every one of them comes back with a dropdown. The default is a leaderboard, and the other entries switch to a bar chart, a pie chart, or a shape specific to that command: a world map for country, a deep-cuts list for obscurity, a radar for the ones with few enough buckets to draw one. Switching views costs nothing, because the numbers are computed once.

A second dropdown opens any row as the list of artists inside it, so "Hip-Hop, 41 artists" becomes the 41 artists.

The first run on a big library is incomplete on purpose

Facts like an artist's country and formation date are looked up from outside Last.fm and rate limited hard. The first run resolves what it can immediately, hands the rest to a background queue, and the footer tells you how many artists are still resolving. Run it again in a minute and the numbers fill in. Artists that haven't resolved yet are counted nowhere, rather than being lumped into Unknown.

Unknown is a real row where it appears. Some artists genuinely have no country or formation date on record, and hiding them would make every percentage above them wrong.

Set your timezone before reading the clock

,lastfm clock renders in a timezone, and a newly linked account starts on US Central rather than UTC. Set your own with ,lastfm timezone <IANA name>: for example ,lastfm timezone Europe/London. It's Boosting Premium, and it's also on the History page of the settings panel.

,lastfm timezone off does not put the US Central default back. It stores no zone at all, and a stored zone of none reads as UTC: the reply says so in as many words. reset, clear, utc and none are the same instruction. If Central is what you actually wanted, name it: ,lastfm timezone America/Chicago.

The clock's footer always names the zone it used, so a wrong setting is visible rather than silent, and when that footer reads UTC it tells you which command changes it. ,lastfm clock @someone reads their timezone setting, not yours.

Five views sit behind the clock's dropdown: a clock face with your peak and quietest hours, an hourly bar, a weekday bar, a radar, and a heatmap of the whole week.

Get recommendations and lyrics

,lastfm recommendations suggests music from what you already play. Free.

,lastfm lyrics [track] finds lyrics for the track you're playing, or a named one. Boosting Premium. A mention gives you the lyrics for what they're playing.

Sync your history and ask date questions

Last.fm's API knows how much you've played something. It's much worse at when. There's no way to ask it for a real calendar year, and its own per-artist history endpoint no longer exists. So Righteous can walk your entire scrobble history into its own store, once, and answer date questions from there instead.

Syncing is Self Premium.

Run the sync

Run ,lastfm update history, or /lastfm update with the history action.

It walks your account newest to oldest and stores one row per scrobble. A large account takes a while and shows progress as it goes. It's resumable: if it's interrupted, running it again picks up where it stopped rather than starting over.

The report tells you if it came up short

Deep paging on Last.fm's side can miss rows, so the result says how many scrobbles were stored against how many Last.fm reports. It is never rounded up to "complete". If the two disagree, run ,lastfm update resync to re-read everything from scratch.

The full walk has its own cooldown, separate from the command's normal one, because it's a lot of requests. That cooldown is charged when the run will actually walk, so an ordinary top-up isn't affected by it.

Keep it current without thinking about it

Once a sync has finished, the plain free ,lastfm update also tops your history up with anything new. That's on by default, it's a couple of requests rather than a full walk, and you can turn it off on the History page of /lastfm settings panel.

It does nothing at all for anyone without a finished sync, so it can't cost you anything before you have one.

Know which commands need it

Most of the family answers without a sync, from Last.fm directly. What changes is precision and reach.

Works either wayWhat a sync adds
milestoneNothing. The unsynced answer is exact too, only read from Last.fm
lastWithout a sync it searches back a bounded distance and states the bound rather than claiming "never"
gapsThe date you last played each artist
discoveriesOn a large library the unsynced path refuses rather than guessing
yearThe monthly breakdown, the listening clock and the discovered-this-year view
clockYour whole history instead of a recent sample
recent and streaksAdd the word history to read the local copy: far more rows, and your longest runs ever
ap, alp, spFirst-played and last-played dates alongside the count
profileA real "listening since" date, rather than the account's registration date

These need a sync and refuse without one, because there's no honest fallback:

CommandAnswers
,lastfm first <target> [person]The first time you ever scrobbled an artist, album or track
,lastfm timeline <target> [range:<range>] [person]Every individual play of one target, newest first
,lastfm onthisday [date] [person]What you played on this date in past years
,lastfm pace [person]Your real scrobbling rate
,lastfm movers [range] [type] [person]What rose and fell between two windows

Every command in both tables is Self Premium with two kinds of exception. recent, streaks, profile and the three play-count commands are free, and stay free once you've synced: the sync only deepens what they answer with. clock sits on the wide gate instead: any premium answers for it, boosting included, and so does being in a Server Premium server. A sync widens what it draws from (a recent sample against your whole history) without changing who may run it.

Each command that can read from either source says in its footer which one it used. A listening clock built from a recent sample and one built from a whole history look identical and mean very different things.

Write a date range

Most of these take a window. The accepted shapes:

WriteMeans
2024That calendar year
2024-03That month
2024-03-07That day
june or june 2023A month by name
30d, 6m, 1y, 2wA rolling window ending now
last 90 daysThe same, spelled out
2023-01-01 to 2023-06-30An explicit span. .. works instead of to
allEverything

Boundaries are cut in your timezone, so "2024" means your 2024. Set yours with ,lastfm timezone.

Put the range last when the target could be mistaken for a date

A lot of music is named like a date. 1989, 2001 and June are all real titles, and a bare token can't tell which you meant. ,lastfm timeline therefore takes its window as an explicit range:2024 at the very end of the command, and everything before it is the target. The same range: marker settles the ambiguity on ,lastfm ttt and ,lastfm tta.

A ranged command that finds no synced history generally falls back to all time and tells you it did. The commands that require a sync don't, because there's nothing to fall back to.

Find the first play, the last play, and every one in between

,lastfm first and ,lastfm last are the two ends of one list. ,lastfm timeline is the middle, every play in between, paged.

All three take an artist on its own, or album - artist, or track - artist. On slash the two halves are separate boxes. Righteous works out which way round you meant it by checking both against your own history, so Last Last - Burna Boy doesn't need you to remember the convention.

Leave the target off entirely and Righteous uses what you're playing. Mention someone with no target and the question becomes "how many times have you played what I'm listening to", answered from their history.

,lastfm milestone [number] [person] names your Nth scrobble and when it happened. ,lastfm onthisday replays this calendar date across every year you have.

Recap a year, and see what rose and fell

,lastfm year [yyyy] [person] is the calendar-year recap: top artists, albums, tracks and what you discovered.

,lastfm pace measures your real scrobbling rate from the history rather than projecting it from a sample.

,lastfm discoveries [range] [person] lists artists you played for the first time in a window. ,lastfm gaps [duration] [person] is the reverse: artists you played a lot and then stopped.

,lastfm movers is the only command here that compares two windows against each other. It shows what rose, what fell, what arrived and what dropped off.

WriteCompares
,lastfm moversThe last 30 days against the 30 before
,lastfm movers 20252025 against 2024
,lastfm movers 6mThe last six months against the six before
,lastfm movers from:2024 to:2025Two windows you name. Prefix only

Add artists, albums or tracks to change what it ranks. A calendar range is stepped on the calendar rather than by its own length, so 2025 is compared with the whole of 2024 and not with 365 days ending in early January.

Download your scrobbles

,lastfm export [range] hands your history back as a CSV attachment, one row per scrobble, with the played-at time in both readable and Unix form alongside the artist, track and album.

An export is always your own. There is deliberately no way to export somebody else's listening history.

A whole large account is bigger than Discord will carry in one upload. Rather than truncating and handing you a file that looks complete, Righteous counts the rows first and refuses with the number, so you can ask for a narrower range: ,lastfm export 2024, ,lastfm export 6m, ,lastfm export 2023-01-01 to 2023-06-30.

Delete the synced history

,lastfm update purge confirm deletes your synced scrobble history and keeps your account linked. Use it if you want the storage gone but still want now-playing and WhoKnows to work.

,lastfm reset confirm goes further: it unlinks the account and deletes the cached library as well as the history.

Linking a different Last.fm username also purges the stored history automatically, because those plays belong to somebody else.

Set server-wide defaults

Server owners and admins with Manage Server can set a house style under ,lastfm server: color, upvote, downvote, midvote, npmode and autoupdate. These are Server Premium.

They apply to members who haven't set their own. Anyone who bought Self Premium and configured a personal colour or layout keeps it: the server default exists to give a good-looking card to the people who haven't paid for one, not to overrule the ones who have.

Both sides are re-checked every time a card renders. If a subscription lapses, the stored value stops applying and the built-in default comes back.

Two controls under ,lastfm server are free rather than Server Premium: the WhoKnows blacklist and a monthly digest.

Post a server digest on a schedule

The digest posts what the server has been listening to, on a schedule, with movement against the previous post. Configure it with ,lastfm server digest, which needs Manage Server.

The command is free. Every server can run a monthly digest. What Server Premium buys is frequency and count.

FreeServer Premium
Cadencemonthlymonthly, weekly or daily
How manyOneUp to three per server

The grammar is ,lastfm server digest [#channel [cadence]] <sub>. The subcommands:

SubDoes
bare, or list / show / statusShows the current setup and when the next post is due
add [#channel] [cadence]Creates another digest
channel <#channel>Creates or moves the main one
cadence <monthly|weekly|daily>Changes how often a digest posts
content <recap|artists|albums|tracks>All three charts, or just one
scope <period|alltime>The window the cadence implies, or server totals
on / offPauses a digest without deleting it
delete / delete allRemoves one, or every one

Name the channel by mention or ID, never by name, and put it before the subcommand. A channel can host one digest per cadence, so #music can run a weekly and a daily at the same time. Both count against the server's total.

The digest reads Last.fm directly rather than the synced scrobble store, so it covers everyone who linked an account, not only members with premium. Blacklisted members are left out.

Lapsing doesn't delete anything

If Server Premium ends while three digests are configured, the extras go dormant instead of being deleted, and the surviving one is the oldest monthly digest you have. Everything resumes on its own the moment the server is covered again, with nothing to reconfigure.

Slash covers the same ground at /lastfm server digest, and the Last.fm page of the config panel has a channel picker plus a Digest Options button for content and scope.

Tune your own settings

Open the settings panel instead of memorising commands

,lastfm fmconfig, aliased ,lf config, or /lastfm settings panel. It's a seven-page panel over every personal Last.fm setting you have: Overview, Appearance, Now Playing, Reactions, Recent, History and Reset.

The History page is the one people miss. It carries the background history top-up, your background-refresh interval, your timezone, and a button that starts a sync straight from the panel.

The panel itself is free to open. Each control on it carries the same tier as the command that owns the field, so you can see what a paid setting does before deciding whether you want it. Only you can press the buttons on your own panel.

Restyle the card

These are all Self Premium.

SettingCommandWhat it does
Accent colour,lastfm color <album|#hex>A fixed hex, or album to pull the colour out of the cover art on every track
Layout,lastfm modeReplace the built-in card with your own embed code
Reactions,lastfm react <up|down|mid|off|on|reset> [emote]The emotes Righteous adds under your card, or none at all
Trigger word,lastfm customcommand <trigger|reset>A word of your choosing that posts your card

,lastfm color album is worth calling out. It reads the dominant colour from the album art each time the card renders, so the accent changes with the music instead of staying one hex forever. Artwork the bot can't read falls back to your stored colour.

Write your own card layout

,lastfm mode takes a custom embed code, which is the same templating language welcome messages and custom embeds use. On slash it's /lastfm embed set, which opens a box you can type multiple lines into.

A complete card you can paste as it stands is in Start from a card that already works.

Run ,lastfm variables to see every token an embed code understands, including the Last.fm-specific ones. That command is free, on purpose, so you can read the reference before buying the thing that uses it.

If your custom card is slow, you get the built-in one first

A custom layout that takes a while to build sends the standard card immediately and then edits it into yours when it's ready. You'll occasionally see the plain card for a second. If a render fails outright, the built-in card stands rather than showing you a broken embed.

Summon the card with no prefix at all

Type your own name followed by fm, with no prefix at all, and you get your card. Righteous matches your Discord username, your display name and your server nickname: whichever one people know you by works.

Any premium unlocks this, not only boosting. Boost the support server, buy Self Premium, or be in a server that has Server Premium: any one of the three is enough, and the check runs against whichever server you're typing in.

A trigger set with ,lastfm customcommand is additive, not a replacement. Setting a custom word doesn't switch the name trigger off, and ,lastfm customcommand reset clears the custom word without touching it.

The two are checked differently, and that decides how carefully you pick the word. A name trigger is dropped silently when <name>fm collides with a real command or alias, so a nickname can never shadow bot surface. A custom word is checked only for being a single word of 32 characters or fewer: nothing compares it against the command list. Your prefixed commands are safe either way, because a trigger only fires on a first word with no prefix in front of it. What it costs you is your own vocabulary: the word posts your card every time you open a message with it. Pick something you wouldn't say by accident.

Keep your play counts current

Play counts, WhoKnows and crowns read your stored library rather than asking Last.fm live, which is why they answer instantly and why they can drift. Run ,lastfm update to refresh it. That's free and always has been.

Righteous can also refresh it in the background, silently, so you rarely need to. Whether it does depends on your tier.

Who you areBackground refresh
No premiumOff
Boosting PremiumRefreshed on a fixed schedule
Self PremiumYour own interval, set with ,lastfm autoupdate <hours|off|default> (12 to 168 hours)
In a Server Premium serverThe server's interval applies to you, even without personal premium

A personal setting always wins over the server's, including an explicit off. default puts you back to inheriting. The same three choices are on the panel's History page as a set of radio buttons.

The background refresh is genuinely silent. The command that triggers it answers with whatever data it already had, and the next command you run sees the fresh numbers.

Two different commands, and the names are easy to mix up.

,lastfm settingsreset resets your display and behaviour settings and keeps your account linked. It's free, and it clears more than the card. It puts back the defaults for your accent colour and your colour source, your three vote emotes and whether reactions are added at all, your custom card layout, your custom trigger word, your timezone, your timestamps toggle and its style, and your background history top-up. It also clears your personal background-refresh interval, which goes back to inheriting rather than to a fixed number.

,lastfm reset confirm unlinks the account and deletes your cached artists, albums, tracks and synced scrobble history. It needs the word confirm, because rebuilding a synced history takes minutes of work. On slash it's /lastfm logout with an explicit confirm option.

Common issues

"Invalid LastFM." No account is linked to your Discord ID. Run ,lastfm set <username>.

Setting the username failed. Check the spelling against your profile URL, and check the account has at least one scrobble on it. A private Last.fm profile can't be read either. A warning that the username is already linked elsewhere is not a failure. The link still happened.

Your play counts are behind. Run ,lastfm update. If you expected them to be current on their own, check the background-refresh table: that's a tier feature.

"Your library is already updating." A refresh is in flight, including one Righteous started in the background. Give it a moment and run it again.

Your name trigger does nothing. It needs premium, but any of the three tiers, so check whether this server has Server Premium before you buy anything. Boosting, Self Premium and being in a Server Premium server all answer for it. Past the gate, it matches your name exactly: extra characters on the end won't fire it, and very short names are ignored so they can't turn a common word into a trigger.

Your custom card renders as plain text. Anything in your code that isn't inside a {field: ...} tag becomes ordinary message content, so a layout written without {title:}, {description:} or {content:} around it posts as a line of text rather than an embed. Wrap it.

A token's name is showing on the card where its value should be. A token Righteous doesn't recognise is not dropped and does not leave a gap: it posts as its own literal name, so a mistyped {track.nam} puts the words track.nam in your card. That's the tell for a spelling mistake or a token that no longer exists; check it against ,lastfm variables. A token that is recognised but has no answer behaves differently: {album.name} reads N/A, {track.plays} reads ?, and {album.cover}, {album.color}, {lastfm.liked} and {artist.crown} leave nothing behind.

You got the built-in card instead of your own. Your code produced nothing to render, or the render failed outright, and the standard card stood in rather than posting a broken embed.

Somebody's plays look wrong in WhoKnows. It reads stored libraries. Ask them to run ,lastfm update.

Somebody is missing from a leaderboard entirely. Either they never ran ,lastfm set, or they're on the blacklist. Check with ,lastfm blacklist list.

The list stops after one page. That's the free tier. Boosting Premium or Server Premium opens the rest.

A crown didn't move even though the top listener changed. Check ,lastfm server crownminplays. Below the minimum, nothing is claimed and the current holder keeps it. A tie also claims nothing.

The digest hasn't posted. It posts on the first sweep after its period boundary rather than at the exact stroke of it, so a short delay is normal. Run ,lastfm server digest on its own to see the next scheduled run, whether the row is paused, and whether it went dormant after a lapse.

Your chart is smaller than you asked for. Covers with no artwork are dropped before the grid is sized, so the square shrinks to what's actually renderable. Add keepempty for the literal top-N.

Your chart was refused for its size. Anything past 10x10 is rejected rather than quietly clamped, because a request for thousands of covers shouldn't silently turn into a hundred.

A colour or genre chart came back with fewer tiles. Both filter your library rather than searching it. A narrow tag or an unusual colour has fewer matches to draw from, and the footer says how many candidates were considered.

A stats command says artists are still resolving. That's the background queue. Run it again in a minute.

,lastfm clock or ,lastfm streaks takes several seconds. On a large synced history those two are the heaviest queries here. They post a placeholder while they work, and a repeat run is instant.

A dropdown says the interaction failed. The menu stopped listening. Run the command again.

"No synced history yet." The command needs the local copy. Run ,lastfm update history first.

The sync stopped part way. Run it again. It resumes from where it left off rather than re-walking what it already has.

Stored fewer scrobbles than Last.fm reports. That's the shortfall notice, and it's shown rather than hidden. ,lastfm update resync re-reads the whole account.

A range command answered for all time instead. It found no synced history and fell back, which it says in the reply. Sync, then ask again.

,lastfm timeline The 1975 found the wrong thing. The trailing number parsed as a year. Write ,lastfm timeline The 1975 range:2024, or leave the range off entirely.

"That range is too big for one file." The export won't fit in one Discord upload. Ask for a narrower window: the message tells you how many rows it was going to be.

A milestone or pace answer is missing. Some answers are withheld until a sync finishes, because the walk runs newest to oldest and a partial history holds your most recent plays. Counting your ten-thousandth scrobble from a partial copy would name the wrong track with total confidence.

On this page

Link your accountKnow which of three data sources answers your questionCheck the tier before you promise someone a featurePost what you're playingStart from a card that already worksLink the track somewhere elseRank the server and hand out crownsSee who else here listens to somethingWiden it past this serverClaim a crownSet a minimum before a crown changes handsReset every crownHide someone from the leaderboardsCompare taste with one personSee what the server is playing right nowKeep a friends list, and ask who-knows of itAdd someoneSee, prune and clear the listHow many friends you can haveSee what your friends are playingAsk who-knows of your friendsBuild charts and read your statsBuild a cover collageRead your top artists, albums and tracksCount the plays of one thingSee your profile and your recent playsShow when each track was scrobbledBreak your library downSet your timezone before reading the clockGet recommendations and lyricsSync your history and ask date questionsRun the syncKeep it current without thinking about itKnow which commands need itWrite a date rangeFind the first play, the last play, and every one in betweenRecap a year, and see what rose and fellDownload your scrobblesDelete the synced historySet server-wide defaultsPost a server digest on a scheduleTune your own settingsOpen the settings panel instead of memorising commandsRestyle the cardWrite your own card layoutSummon the card with no prefix at allKeep your play counts currentStart over, or unlinkCommon issues