CARRIER

TildeRadio in IRC

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.

LISTENING

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
LIVE SHOWS

take part

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
YOUR CHANNEL

bring Carrier with you

Invite Carrier to another channel for TildeRadio commands. Station announcements can be enabled separately.

/invite carrier #yourchannel
!carrier status
!carrier announce on
HOW IT FITS TOGETHER

Carrier does not replace the stream or the website

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.

  1. AzuraCast says what is live.Carrier watches the live DJ, current track, listener count, and track changes.
  2. The schedule says who is next.That lets the next scheduled DJ prepare their show metadata before taking the stream.
  3. The DJ profile says what the show is.The website profile supplies the recurring show title, timezone, and optional weekday-specific formats.
  4. IRC adds what is unique tonight.!show can add an episode title, topic, mood, prompt, note, or link for this one set.
  5. Carrier records what actually happened.Tracks and live-set activity are collected automatically while the DJ is on air.
  6. The website gets the finished transmission.The same set appears in the transmission archive and on the DJ's profile without a second playlist or post-show form.
short version: AzuraCast says when, the DJ profile says what show, IRC says what is special about this episode, and Carrier ties it together.
STATION COMMANDS

the useful everyday stuff

!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
example
<alice> !np
<carrier> SIGNAL LOCKED | deepend | Apashe - Lord & Master | 12 listeners

<alice> !next
<carrier> NEXT | ffog | Wed Aug 19 23:00 UTC
THE RADIO COUCH

who is actually hanging around

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.

example
<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
DURING A LIVE SET

props, questions, reactions, and requests

Props

!props gives the current DJ one prop. Each IRC identity can do this once per set.

Questions

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.

Reactions

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

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
request flow
<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
DJ CONTROLS

your recurring show lives on the site; tonight's details live in Carrier

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.

Recurring show and format information

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.

Before you go live

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.

While you are live

!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 context

!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.

Question queue

!questions
!qanswer 12
!qskip 13

!questions is sent privately to the DJ so the public channel does not get a wall of queued questions.

Request queue

!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.

Listener goal

!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.

Mastodon from the booth

!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.

WEBSITE INTEGRATION

the archive builds itself while you broadcast

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.

On the DJ profile

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

Transmission archive

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/

Public API

The same archive is available as read-only JSON for small tools, bots, and other tilde projects.

https://tilderadio.org/api/episodes/

Automatic track log

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.

no duplicate paperwork: edit the recurring show/profile in the website repository; use IRC for tonight's episode details; let Carrier collect the live history.
MASTODON

selected station activity can leave IRC

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.

Automatic posts

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.

DJ transmission

!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.

kept quiet: optional posts share a 15-minute cooldown, published events are remembered across restarts, and Mastodon/API failures are logged without interrupting IRC or station tracking.
DJ HANDOFFS

tell Carrier who is taking the stream next

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.

example
<deepend> !handoff ffog
<carrier> RELAY ARMED | deepend -> ffog

... AutoDJ briefly holds the stream ...

<carrier> RELAY INTACT | ffog has the stream | 11 listeners
ROOM STUFF

polls, challenges, bingo, battles, and The Button

Polls

!poll start best editor? | vim | emacs | ed
!poll
!vote 3
!poll stop

Votes can be changed until the poll closes.

Challenges

!challenge name a song you secretly love
!answer Barbie Girl
!challenge results
!challenge random
!challenge stop

Bingo

!bingo

Carrier privately gives you a randomized 3x3 card for the live set. Some squares are marked automatically.

Tilde battles

!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.

The Button

!button

The Button has a cooldown and chooses one of a small set of station actions. Carrier does not explain The Button.

TEMPORARY COMMANDS

commands that only exist for one show

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.

HISTORY & STATS

what happened after the stream moved on

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.

INVITE CARRIER

use TildeRadio commands in another IRC channel

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 channel

The 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.

commands vs. announcements: asking !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.
A DJ'S SHOW, START TO FINISH

what you actually do during a normal broadcast

  1. Before the show: check that Carrier knows you are next. Use !next or !schedule. If you want an episode title or prompt, stage it now with !show episode ... and the other !show fields.
  2. Connect to the stream normally. Carrier notices AzuraCast switch from AutoDJ to your live streamer. It starts a numbered set, loads your DJ profile, resolves the weekday show format, applies anything you staged, and begins the track log.
  3. Run !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.
  4. Open only the interaction you want. Requests start closed. Open them with !requests on if appropriate; questions, props, reactions, polls, goals, and temporary commands are there when useful, not requirements for running a show.
  5. During the music, Carrier mostly gets out of the way. It watches track metadata and listener changes automatically. Use !questions or !requests list when you have a moment rather than babysitting the bot.
  6. If another DJ is taking over, arm the relay. !handoff nextdj tells Carrier who to expect. A short AutoDJ gap will not make the handoff look like unrelated station activity.
  7. When your live stream ends, Carrier closes the set. The final stats and track list are exported automatically. The transmission appears under /episodes/ and among the recent transmissions on your DJ profile.
minimal DJ workflow
<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

you do not need to memorize this page

!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.

← community  ·  DJ handbook  ·  #tilderadio