Skip to main content
Righteous

YouTube Feeds

Mirror a YouTube channel's new uploads, Shorts and livestreams into a channel, each type posted the way it actually plays best. Setup, styles, and the three reasons a feed can go quiet.

YouTube Feeds mirrors a YouTube channel's new uploads, Shorts and livestreams into a channel, checking roughly every 5 minutes for free, with no API key needed. Changing anything needs Manage Server and Server Premium, but reading is free: if your Server Premium has lapsed, you can still see exactly what's configured and why a channel has gone quiet. The command is ,youtubefeed (also ,ytfeed or ,youtubefeeds), and the slash form is /feeds youtube.

Add a feed

Syntax

,youtubefeed add <#channel> <channel-or-handle> [message]

Example

,youtubefeed add #videos @mkbhd

Give it the channel and the YouTube channel. You can give an @handle, a full channel URL, or a UC… channel id directly. A server can hold up to 5 feeds. If your server is already at the limit when you try to add another, remove one first; a server that was already over the limit before it dropped keeps every feed it has.

A handle lookup is a guess, a URL isn't

Looking up a bare @handle means scraping YouTube's own channel page for its id, and every so often that lands on the wrong channel. Pasting the channel's URL, or its UC… id if you already have it, skips the guess entirely and is the reliable way to add a feed.

A new feed starts from now. It doesn't dump the channel's history into the channel, so the first thing you'll see posted is whatever that channel uploads after you added it, not anything older.

To remove a feed:

Syntax

,youtubefeed remove <#channel> <channel-or-handle>

Example

,youtubefeed remove #videos @mkbhd

Check what's configured, free of charge

Syntax

,youtubefeed list

Syntax

,youtubefeed info <#channel> <channel-or-handle>

Example

,youtubefeed info #videos @mkbhd

list shows every feed in the server; info shows one feed's full setup and current status. Neither needs Server Premium; only Manage Server to view your own server's configuration. This is deliberate: an admin whose channel has gone quiet because Server Premium lapsed is exactly the person who most needs to see why, and paywalling the explanation would refuse them.

Three content types, each its own switch

A YouTube channel posts three different kinds of things, and each is its own on/off toggle, all on by default:

Syntax

,youtubefeed videos <#channel> <channel-or-handle> <on|off>

Example

,youtubefeed videos #videos @mkbhd off

Syntax

,youtubefeed shorts <#channel> <channel-or-handle> <on|off>

Example

,youtubefeed shorts #videos @mkbhd off

Syntax

,youtubefeed live <#channel> <channel-or-handle> <on|off>

Example

,youtubefeed live #videos @mkbhd off

videos is long-form uploads, shorts is Shorts, and live is livestreams. Each checks YouTube independently, so turning one off genuinely stops that kind of post rather than filtering it out after the fact.

You can't turn off the last one

A feed has to mirror something. Turning off the only content type you have left on is refused — turn a different one on first if you want to switch which kind of post this feed follows.

Why videos and livestreams post differently from Shorts

Syntax

,youtubefeed style <#channel> <channel-or-handle> <card|link|compact|default>

Example

,youtubefeed style #videos @mkbhd compact
StyleWhat you get
defaultThe smart choice below, per content type. This is what a new feed uses
cardRighteous's own embed card for every post, regardless of type
linkJust the link, which Discord unfurls into its own preview
compactA small embed for every post: the channel, the title, and a thumbnail

default isn't a placeholder for "nothing chosen" — it's a real, deliberate behaviour you can come back to. Under it, a long-form video and a livestream post as a plain link, because Discord turns a YouTube link into its own playable player right there in the message, and a card on top of that would only get in the way. A Short posts as Righteous's own embed card instead, with a thumbnail, the title, and the view and like counts, because Shorts don't unfurl well on their own.

Explicit styles apply to every post type the same way

Once you set card, link or compact on a feed, that one style applies to videos, Shorts and livestreams alike — there's no way to mix, say, a card for Shorts with a link for videos. default is the only style that treats the three differently, which is exactly what it's for. Run ,youtubefeed style again with default to go back to it.

Give a feed a nickname

Syntax

,youtubefeed label <#channel> <channel-or-handle> <text|off>

Example

,youtubefeed label #videos @mkbhd Tech News

A short, display-only nickname, useful once a channel has more than one feed and the handle alone stops being a helpful label.

Add a trailing message, and a ping

Syntax

,youtubefeed message <#channel> <channel-or-handle> <text|off> [@role] [@everyone]

Example

,youtubefeed message #videos @mkbhd New upload: @Subscribers

This sets text that gets posted along with every one of that feed's posts, and it's also the only place you configure a ping. Mentioning a role, or typing @everyone, needs Mention Everyone on top of Manage Server and Server Premium. Running this command replaces the whole message and ping setup at once: run it again with plain text and no mention, and any ping you had configured is cleared along with it.

The mention has to actually be in the message text

Discord only sends a notification from a mention that is genuinely part of the message content, so a role picked without a real @role mention typed into the text pings nobody: it renders, it looks configured, and it never fires. Make sure the @role or @everyone is written directly into the message you give this command.

Post under a different name and picture

A new feed's posts arrive as Righteous. You can change that per feed, so they post under the channel's own name and picture, or under a name you pick yourself.

Syntax

,youtubefeed webhook <#channel> <channel-or-handle> <off|source|custom|name|avatar> [value]

Example

,youtubefeed webhook #videos @mkbhd source

There are three modes:

ModeWhat posts look like
offPosts as Righteous itself
sourcePosts as the tracked channel, using its own display name and picture
customPosts as a name and picture you set yourself

For custom, set the two pieces separately:

Syntax

,youtubefeed webhook <#channel> <channel-or-handle> name <text>

Example

,youtubefeed webhook #videos @mkbhd name Tech News

Syntax

,youtubefeed webhook <#channel> <channel-or-handle> avatar <url>

Example

,youtubefeed webhook #videos @mkbhd avatar https://example.com/icon.png

You can also set a name, a picture, and a default mode once for the whole server, which every feed that has not chosen for itself will use. This is shared across GitHub, Twitter, Letterboxd and TikTok feeds too, so setting it from any of those commands sets it for all of them:

Syntax

,youtubefeed webhook default <name|avatar|mode> [value]

Example

,youtubefeed webhook default mode source

A feed that chose for itself always wins

Setting off on a feed means "never wear an identity" and is respected even when the server default says otherwise. Only a feed that has never been given a mode of its own follows the server.

Turning it off stays free

Switching a feed back to off works even if your Server Premium has lapsed, and so does reading what is configured. Only source and custom, and setting a name or picture, need Server Premium. A feed whose Server Premium has lapsed keeps its setting and simply posts as Righteous until you renew, and info shows you that is what is happening rather than showing a name your posts are not actually wearing.

Righteous needs Manage Webhooks in the channel

Posting under a different name uses a webhook, which Righteous creates in the channel the first time it needs one. Without the Manage Webhooks permission it cannot create one, so posts arrive as Righteous instead. Nothing is ever lost this way: the post still goes out, and ,youtubefeed info tells you exactly why it is not wearing the identity you set. Grant the permission and the next post picks it up on its own.

Why a feed goes quiet

A feed can stop posting for a few different reasons, and the fix is different for each one. None of them ever deletes a feed; they only pause it.

ReasonFix
You paused it yourself,youtubefeed resume
The channel or the connection to YouTube failed repeatedly,youtubefeed retry
Server Premium lapsedRenew it. Nothing was deleted, and every feed picks back up once you're paying again

Match the fix to the reason, or nothing changes

Resuming a feed that's actually broken doesn't fix it, and retrying a feed you paused on purpose doesn't un-pause it: each of these touches only its own reason and leaves the others exactly as they are. ,youtubefeed list and ,youtubefeed info tell you which reason currently applies to a feed, including when more than one does at once.

Syntax

,youtubefeed pause <#channel> <channel-or-handle>

Example

,youtubefeed pause #videos @mkbhd

Syntax

,youtubefeed resume <#channel> <channel-or-handle>

Example

,youtubefeed resume #videos @mkbhd

Syntax

,youtubefeed retry <#channel> <channel-or-handle>

Example

,youtubefeed retry #videos @mkbhd

Test a feed without waiting for a real upload

Syntax

,youtubefeed test <#channel> <channel-or-handle>

Example

,youtubefeed test #videos @mkbhd

Posts the newest thing across all of that feed's enabled content types into the channel right now, rendered exactly the way a real post would be: a video or livestream previews as a link, a Short previews as a card, because the per-type style is part of what's being tested. Nothing about the feed is changed; it's a preview, not a real check-in. If the feed has a ping configured, this test does not fire it; the real feed will still ping normally on its next genuine upload.

Manage everything from one panel

Syntax

/feeds panel

Opens a private card for managing your GitHub, Twitter, Letterboxd and YouTube feeds, with a tab for each. It updates in place as you navigate or act on a feed, and it stays visible only to whoever opened it. This only opens over slash, on purpose, so it stays private: running ,youtubefeed panel on prefix points you at /feeds panel instead of posting anything. Opening the panel is free; acting on a feed from it needs the same Manage Server and Server Premium the matching command needs.

For what all the feed platforms have in common, GitHub's real-time webhook versus the others' polling, Server Premium and what happens when it lapses, and the reasons any feed goes quiet, see Feeds.

Honest limits

  • No content-type filter beyond the three toggles. videos/shorts/live switch a whole content type on or off; there's no per-topic or per-keyword filter on top of that.
  • This is separate from pasting a YouTube link into chat. That's a different setting entirely and doesn't interact with a feed you've configured here.

Common issues

A feed I added dumped a bunch of old uploads into the channel. It shouldn't: a new feed starts from the moment you add it. If you're seeing old posts, check whether the feed shows as broken with ,youtubefeed info; a feed recovering from an outage still only posts what's genuinely new.

I set up a ping and it never notifies anyone. Almost always this is the mention not actually being in the message text; see Add a trailing message, and a ping above. Re-run ,youtubefeed message with a real @role mention or @everyone typed into the text.

A feed stopped posting and I don't know why. Run ,youtubefeed info on it: it tells you which of the reasons in Why a feed goes quiet applies, including when more than one does.

,youtubefeed add refuses a channel. Either it isn't a valid channel id, handle or URL, or YouTube doesn't have a channel there at all.

I can't turn off my last content type. A feed needs at least one of videos, shorts or live switched on. Turn a different one on first, or remove the feed if you don't want it mirroring anything.

I set a custom name or picture and posts still arrive as Righteous. Run ,youtubefeed info on the feed. It tells you which of these it is: Righteous is missing Manage Webhooks in that channel, the channel already holds Discord's maximum of 15 webhooks, Discord rejected the name you chose, or your Server Premium has lapsed. The posts keep arriving throughout, so this is always a cosmetic problem rather than a lost feed.

A video or livestream shows up as a link instead of a card. That's the intended default behaviour, not a bug: see Why videos and livestreams post differently from Shorts. Set an explicit card style if you want every post rendered the same way.