check the station
See what is playing, who is live, how many people are listening, or what is coming up next.
!np
!listeners
!dj
!next
!schedule
Carrier is the bridge between the live TildeRadio stream, the schedule, DJ profiles, IRC, and the website. It watches what the station is already doing, then turns each live broadcast into a numbered set with useful show context, listener interaction, a track log, and a permanent transmission entry on the site.
DJs do not start or stop Carrier manually. Go live normally and Carrier notices the stream transition.
You can use it in #tilderadio, or invite it to another channel on a network where it is connected.
See what is playing, who is live, how many people are listening, or what is coming up next.
!np
!listeners
!dj
!next
!schedule
Check into the couch, give the DJ props, ask a question, react, or send a request when requests are open.
!tunein tilde.club
!props
!ask what was that last track?
!request Artist - Track
Invite Carrier to another channel for TildeRadio commands. Station announcements can be enabled separately.
/invite carrier #yourchannel
!carrier status
!carrier announce on
Each part of TildeRadio has a different job. Carrier joins those pieces together instead of becoming another place where the same information has to be maintained by hand.
!show can add an episode title, topic, mood, prompt, note, or link for this one set.!npcurrent track, live DJ, and listener count!listenerscurrent listener count!dj [name]current DJ or a DJ profile!nextnext scheduled show!unnthe show after the next one!schedule [N]upcoming schedule!listenavailable TildeRadio stream URLs!statuscurrent station state with the listen URL!siteTildeRadio website!utccurrent UTC time<alice> !np
<carrier> SIGNAL LOCKED | deepend | Apashe - Lord & Master | 12 listeners
<alice> !next
<carrier> NEXT | ffog | Wed Aug 19 23:00 UTC
The couch is an opt-in roll call. Checking in can include your tilde community, which lets Carrier show which parts of the tildeverse are listening during a set.
!tunein
!tunein tilde.club
!tuneout
!couch
!rollcall
!tildes
Check-ins expire automatically if you disappear for long enough. Carrier may also notice when enough people from the same tilde are checked into one live set.
<alice> !tunein tilde.club
<carrier> COUCH | alice | tilde.club | 6 checked in
<bob> !tildes
<carrier> TILDEVERSE | tilde.club 3 | ctrl-c.club 2 | thunix.net 1
!props gives the current DJ one prop. Each IRC identity can do this once per set.
Ask something without making the DJ dig through IRC scrollback:
!ask how did you find this band?
The question goes into the live DJ's queue. The DJ can take or skip questions when there is a good point in the show.
Quick reactions are intentionally quiet. Carrier collects them and summarizes the room instead of replying to every one.
!fire
!love
!bass
!lol
!wtf
!banger
!weird
!questionable
!react fire
!reactions
!vibe
Requests are for live DJs only. Carrier does not send requests to AutoDJ, and every live set starts with requests closed. The DJ decides when to open them.
!request Artist - Track
!dedicate Artist - Track | nick | optional message
<deepend> !requests on
<carrier> REQUEST LINE OPEN | !request <artist - track>
<alice> !request Massive Attack - Teardrop
<carrier> REQUEST LOCKED | #23 | for deepend
<deepend> !played 23
<carrier> REQUEST CLEARED | Massive Attack - Teardrop | requested by alice
Carrier uses the DJ identity from the schedule, IRC account mappings, and the DJ profile's irc value
to decide who may control a set. The recurring parts of a show belong in the website profile so they do not need
to be typed into IRC every week.
A DJ profile may define one overall show plus different recurring formats for different weekdays.
Carrier resolves the format when the set actually begins, using show.timezone. If no timezone is
supplied, it uses UTC.
"show": {
"title": "~/deepend",
"timezone": "America/Edmonton",
"formats": [
{
"id": "pull",
"days": ["tuesday"],
"title": "~/pull",
"tagline": "Interesting things that escaped the algorithm."
},
{
"id": "dig",
"days": ["saturday"],
"title": "~/dig",
"tagline": "One musical rabbit hole at a time."
}
]
}
The website can display those formats on the DJ profile, and Carrier stores the resolved show and format with the transmission. A local Tuesday show therefore stays Tuesday even if UTC has already crossed midnight.
If nobody is live and you are the next scheduled DJ, !show works as a staging area.
This is useful for naming the episode and setting tonight's context before you connect to the stream.
!show episode songs I found through IRC
!show topic accidental discoveries
!show mood late-night
!show prompt what track did the internet lead you to?
!show note requests after the first half hour
!show link https://example.com/notes
!show
!show clear mood
These queued values are attached automatically when your live set starts, then the queue is cleared. You do not
need a separate !start command.
!show displays the resolved recurring show/format and the metadata for the current set. The same
fields can be changed while live. episode is the best place for the title of this particular broadcast.
!show
!show episode songs I found through IRC
!show topic accidental discoveries
!show mood questionable
!show prompt what song did you find by accident?
!show note requests later
!show link https://example.com/
!show clear mood
Episode metadata becomes part of the archived transmission and is updated on the website export while the set is live.
!questions
!qanswer 12
!qskip 13
!questions is sent privately to the DJ so the public channel does not get a wall of queued questions.
!requests on
!requests list
!played 23
!reject 24
!requests off
The queue is private to the DJ. Every set begins with requests closed; open them only if they fit the show.
!goal 10
!goal 15 if we hit this I play the terrible cover
!goal clear
Carrier announces the goal once the live listener count reaches it.
!show mastodon tonight is mostly weird synths
This is intentionally separate from the archived episode fields. It sends one short station transmission to Mastodon during the live set rather than becoming permanent show metadata.
Carrier records track changes from AzuraCast during the live set and exports a public episode archive for the website. The DJ does not need to re-enter a playlist after the show.
Recurring show formats are displayed with their days, and recent Carrier transmissions are linked directly from the DJ's profile.
https://tilderadio.org/djs/?dj=deepend
Each set can include its episode title, resolved show/format, start time, duration, track log, and the station activity Carrier observed.
https://tilderadio.org/episodes/
The same archive is available as read-only JSON for small tools, bots, and other tilde projects.
https://tilderadio.org/api/episodes/
Carrier watches the now-playing metadata while the set is live, deduplicates repeated polls, and records each track it actually sees. Good stream metadata therefore produces a better archive automatically.
When Mastodon posting is enabled, Carrier can publish a few station events outside IRC. It does not post every command, reaction, track change, or listener change.
Live starts and DJ handoffs are the main notices. Carrier can use the resolved show/format and current episode context when it announces a live set. Optional posts can also include configured listener milestones, selected station milestones, new station records, and noteworthy set summaries.
!show mastodon tonight is mostly weird synths
The current DJ can send one short Mastodon transmission during a live set.
By default, a completed set is noteworthy if it runs for at least 90 minutes, peaks at 20 listeners, reaches 8 couch check-ins, 20 props, 5 requests, 5 represented tildes, or sets a new station record.
Before leaving the stream, the outgoing DJ can name the expected replacement:
!handoff ffog
Carrier keeps the expected handoff through a short AutoDJ gap. When the next DJ appears, it can recognize the relay instead of treating it as an unrelated new show.
<deepend> !handoff ffog
<carrier> RELAY ARMED | deepend -> ffog
... AutoDJ briefly holds the stream ...
<carrier> RELAY INTACT | ffog has the stream | 11 listeners
!poll start best editor? | vim | emacs | ed
!poll
!vote 3
!poll stop
Votes can be changed until the poll closes.
!challenge name a song you secretly love
!answer Barbie Girl
!challenge results
!challenge random
!challenge stop
!bingo
Carrier privately gives you a randomized 3x3 card for the live set. Some squares are marked automatically.
!battle start tilde.club | ctrl-c.club
!battle
!battle stop
Check in with !tunein your.tilde to identify your side. The prize is the score itself.
!button
The Button has a cooldown and chooses one of a small set of station actions. Carrier does not explain The Button.
A live DJ can add a simple command for show-specific information:
!setcmd lore https://example.com/show-lore
!setcmd rules no rules
!delcmd rules
Listeners can then use !lore like a normal command. Built-in Carrier commands cannot be replaced.
Carrier numbers live broadcasts as sets and stores their history.
!last
!set 184
!djstats deepend
!stationstats
!records
!achievements
!randomdj
Set records include things Carrier actually observed, such as duration, track count, peak listeners, couch activity, props, questions, requests, reactions, handoffs, and other station activity. The richer public version, including the track log and resolved show/format, is available in the website transmission archive.
On networks where Carrier is connected and invites are enabled, invite it the normal IRC way:
/invite carrier #yourchannel
Carrier joins and remembers invited channels across restarts. Commands work immediately, but automatic station announcements are off by default so inviting the bot does not suddenly flood a channel.
!carrier statusshow Carrier settings for the current channel!carrier announce onenable automatic TildeRadio announcements here!carrier announce offleave commands available but stop announcements!carrier partremove Carrier and forget the invited channelThe person who invited Carrier, a channel operator, or a Carrier admin can manage those channel settings. Kicking Carrier from an invited channel also removes that channel from its saved invite list.
!np only answers the channel that asked.
Enabling announcements subscribes the channel to the station events Carrier normally announces, such as live DJ
changes, handoffs, listener milestones, goals, and other live-set activity.
!next or !schedule. If you want an episode title or prompt, stage it now with !show episode ... and the other !show fields.
!show once if you want to verify the context.
You will see the recurring show/format plus the current episode details. Change any per-set field if tonight took a different direction.
!requests on if appropriate; questions, props, reactions, polls, goals, and temporary commands are there when useful, not requirements for running a show.
!questions or !requests list when you have a moment rather than babysitting the bot.
!handoff nextdj tells Carrier who to expect. A short AutoDJ gap will not make the handoff look like unrelated station activity.
/episodes/ and among the recent transmissions on your DJ profile.
<deepend> !show episode songs I found through IRC
<carrier> episode saved for deepend's next set
... connect the live stream ...
<carrier> SIGNAL ACQUIRED | deepend | ~/pull
<deepend> !show
<deepend> !requests on
... do the radio show; Carrier logs tracks automatically ...
<deepend> !handoff ffog
... or simply end the live stream when nobody follows ...
!help
!help dj
!help room
!help games
!help history
Carrier intentionally ignores unknown commands and keeps repetitive activity quiet. The point is to add some useful station context to IRC without becoming the loudest thing in the channel.