Rooms that name themselves.

The demo below updates dynamically.

VOICE CHANNELS

โž• Join to create
๐Ÿ‰ Ash's crew0:00

Playing Valorant

AshMilo

Try playing with different templates โ†’

Try type your own template above, or click a preset:
roompeoplegameowner
Discord rate-limits channel renames. A channel's name can only change so often (currently twice per 10 minutes), so a name built entirely from fast-moving tokens like @@num@@ or @@game_name@@ will fall behind during a busy session. For anything that changes a lot, put it in the voice status instead. Discord allows status updates far more often, so it can keep up in real time where the name can't.

Numbering

Number your rooms sequentially using whatever style you like.

TokenWhat it doesExample
##Room number with a hash in front#2
$#Room number on its own, with no hash in front2
$0#Zero-padded room number. Add more zeros for more padding.02 (or 002 with $00#)
+#Room number as a Roman numeralII
@@nato@@NATO phonetic word for the room number. It wraps past 26 with a cycle number.Bravo
<<singular/plural>>Singular when exactly one member is in the room, plural otherwise. Use a \ instead to count members without the owner, or a | to count players in the biggest rich-presence party.plural

People

Templates based on who's in the room.

TokenWhat it doesExample
@@owner@@The room owner's display name, or the custom name they set with /nick. @@creator@@ is an older name for the same token and still works.Pixel
@@original_creator@@Whoever first made the room, even after someone else has taken it over. AVC hands a room to the longest-present member when the owner leaves, and this token keeps naming the person it was made forPixel
@@num@@How many members are in the room, bots aside4
@@num_others@@How many members are in the room, not counting the owner3
@@num_live@@How many people in the room are streaming, by Go Live or on an outside site2
@@limit@@The room's user limit, or 0 when it has none. Follows /limit live5
@@slots@@How many free places are left. Blank on a room with no limit, because "0 spots left" would be wrong. Guard it with {{@@limit@@>=1 ?? โ€ฆ}}2

Games and streams

Your room can show what's happening inside it.

TokenWhat it doesExample
@@game_name@@The room's representative game, run through aliasesLoL
@@stream_name@@The owner's stream title while they are live, and empty otherwiseranked grind, day 3
@@num_playing@@How many people are in the game's party, or playing it if there is no party3

When two games tie, @@game_name@@ shows both, and three or more falls back to your "no game" label, "General" by default. To name the room after a single game instead, whatever the tie, open /setup and pick Tied games under More settings. AVC then picks the room owner's game when they are playing one of the tied games, and one of the tied games otherwise. Shorten long names with /alias.

If someone is not sharing their activity on Discord, AVC cannot see it either. See Troubleshooting.

Rich presence

Some games publish extra detail through Discord's rich presence, like party size, what you are queued for, or which map you are on. When the room's game has more than one party, AVC reports the biggest one. When two games are tied, these describe one of them. A three-way tie leaves them empty, because the name does not identify a game either.

TokenWhat it doesExample
@@party_size@@The party's maximum size. If the game does not say, it falls back to the room's user limit.5
@@party_state@@The party's state line straight from the gameIn a Group
@@party_details@@The party's details line straight from the gameCompetitive, Dust II

Date and time

Room names can follow the clock. Set your server's time zone first: run /setup, open More settings and pick Time zone. Until you do, these render in UTC.

TokenWhat it doesExample
@@weekday@@The day of the week, in EnglishFriday
@@month@@The month, in EnglishSeptember
@@hour@@The hour on a 24-hour clock, 0 to 23. Compares as a number, so {{@@hour@@>=18 ?? ๐ŸŒ™ Evening // โ˜€๏ธ Daytime}} works21

Nothing finer than the hour. Against the rename limit above, @@hour@@ spends one rename an hour keeping itself current and @@weekday@@ one a day. For anything faster, use the voice status, which is not rate-limited.

Random picks

TokenWhat it doesExample
@@random_emoji@@A random emoji, picked once per room from the seed so it stays put for good. The default template uses one.๐Ÿฆ–
[[a/b/c]]Picks one option at random, fixed once per room and never re-rolledb
[[list:name]]Picks from a named list you set up in /setup/More settings, so the options live on the server instead of in the template. Handy past a handful of choices, and for reusing one set across several templatesotter

Randomness is rolled once per room, from a seed stored when the room is created.

Resting and in use

Point /template at an existing standalone voice channel and you can give it two names at once: a resting name for when it sits empty, and a busy name for when someone is in it. Write them as __resting/in use__ and AVC swaps between them as people come and go. Only the first / splits the two sides, so the busy side can still contain slashes, and tokens inside either side fill in as normal.

For example, __๐Ÿ’ค Chill Zone/๐ŸŽฎ @@game_name@@__ shows ๐Ÿ’ค Chill Zone while the channel is empty and ๐ŸŽฎ Halo once someone joins and starts playing.

Conditionals

The {{condition ?? yes // no}} form shows one thing when a condition holds and another when it does not. The // no branch is optional. Leave it off and the whole block just disappears when the condition is false. Conditions can also compare, so {{PLAYERS >= 4 ?? full squad}} works, with <, >, <=, >=, = and != all supported. Blocks nest, and they resolve from the innermost one out, so a false branch can itself be another condition, building a fallback chain.

For example, {{ROLE:123456... ?? โญ // {{LIVE ?? ๐Ÿ”ด // ๐ŸŽง}}}} shows โญ for anyone with that role, otherwise falls through to the nested condition: ๐Ÿ”ด if the owner is live, or ๐ŸŽง if neither applies.

ConditionTrue whenExample
PLAYINGSomeone in the room is playing a game, so it is not on the "no game" label{{PLAYING ?? ๐ŸŽฎ // ๐Ÿ’ค}}
LIVEThe owner is streaming, whether Discord Go Live or an external stream{{LIVE ?? ๐Ÿ”ด // ๐ŸŽง}}
LIVE_DISCORDThe owner is screen sharing in the room with Discord Go Live{{LIVE_DISCORD ?? ๐Ÿ“บ}}
LIVE_EXTERNALThe owner is streaming on an outside site like Twitch{{LIVE_EXTERNAL ?? ๐ŸŸฃ}}
ROLE:idThe owner has the role with that id{{ROLE:123456... ?? โญ VIP room}}
GAMEMatches the game name. Use : for "contains", or =/!= for an exact match{{GAME:Call of Duty ?? ๐Ÿ”ซ}} also matches "Call of Duty: Modern Warfare", but {{GAME=Call of Duty ?? ๐Ÿ”ซ}} only matches that exact title
PLAYERSCompares against the number of people in the party{{PLAYERS >= 5 ?? stacked}}
MAXCompares against the party's maximum size{{MAX = 5 ?? 5-stack lobby}}
RICHThe game is publishing rich-presence detail{{RICH ?? @@party_details@@ // @@game_name@@}}
FULLThe room has a limit and is at or over it. A room with no limit is never full{{FULL ?? ๐Ÿ”ฅ // @@slots@@ free}}
WEEKENDIt is Saturday or Sunday in your server's time zone. Those two days everywhere, so a Friday and Saturday weekend needs {{WEEKDAY=Friday ?? โ€ฆ}} instead{{WEEKEND ?? ๐ŸŽ‰ // ๐ŸŽง}}
WEEKDAYMatches the day name. : for "contains", = for exact{{WEEKDAY=Wednesday ?? ๐Ÿธ raid night}}
MONTHMatches the month name, the same way{{MONTH=December ?? ๐ŸŽ„}}
PRIVATEThe room is locked with /private. Always false on a standalone channel, which has no lock{{PRIVATE ?? ๐Ÿ”’ // ๐Ÿ”“}}
ANY_LIVEAnyone in the room is streaming, where LIVE asks only about the owner{{ANY_LIVE ?? ๐Ÿ”ด }}@@game_name@@
ANY_ROLE:idAnyone in the room has that role, where ROLE asks only about the owner{{ANY_ROLE:123456... ?? ๐Ÿ›ก๏ธ a mod is here}}
MEMBER:idThat specific person is in the room{{MEMBER:998877... ?? ๐Ÿ‘‹ }}@@owner@@
OWNER:idThat specific person owns the room, so their rooms can be named differently from everyone else's. Bare, {{OWNER ?? โ€ฆ}} is true while the room has an owner present{{OWNER:998877... ?? ๐Ÿ‘‘ Greg's lounge // @@owner@@'s room}}
{{OWNER ?? @@owner@@'s room // Open room}}

What can go on the left

A condition tests a variable from the table above, a plain number, or one of the counting tokens: @@num@@, @@num_others@@, @@num_playing@@, @@num_live@@, @@party_size@@, @@limit@@, @@slots@@, @@hour@@ and $# (with its padded forms). So {{@@num@@ >= 5 ?? busy}} works, and you can compare two of them: {{@@num@@ >= @@limit@@ ?? full}}.

Test a person by user ID, not by name. Display names change and people set their own, so there is deliberately no way to compare against one. {{OWNER:id}} and {{ROLE:id}} are the robust forms.

Two traps. ## and +# render #4 and IV, not a bare number, so compare with $#. And @@owner@@, @@original_creator@@, @@game_name@@ and @@stream_name@@ fill in after conditions resolve, so they never match: use OWNER and GAME. Anything unrecognised is quietly false, so try a new condition in the playground above.

Prefer {{FULL ?? โ€ฆ}} to {{@@num@@ >= @@limit@@ ?? โ€ฆ}}. An unlimited room has @@limit@@ of 0, so the comparison calls an empty room full. FULL knows better.

Styling text

Wrap any part of a name in ""mode:text"" to restyle it. The tokens inside are filled in first, then the style is applied to the result, so ""caps:@@game_name@@"" shouts whatever game is on. Chain styles with a + to run them in order, like ""lower+scaps:..."". An unknown style just leaves the text as it was, so a typo never breaks a name.

ModeWhat it doesExample
upper / capsUPPERCASE""caps:squad"" becomes SQUAD
lowerlowercase""lower:LOUD ROOM"" becomes loud room
titleTitle Case On Each Word""title:the war room"" becomes The War Room
swapSwaps the case of every letter""swap:HeLLo"" becomes hEllO
scapsSmall caps. Only lowercase letters convert, so pair it as lower+scaps.""lower+scaps:crew"" becomes แด„ส€แด‡แดก
spacesTrims the ends and collapses repeated spaces into one""spaces:too many gaps"" becomes too many gaps
acroKeeps only the first letter of each word""acro:deep rock galactic"" becomes drg
remshortDrops little filler words (a, an, and, at, by, from, in, is, of, on, or, the, to)""remshort:the king of the hill"" becomes king hill
<N>wKeeps the first N words, so 2w keeps two""2w:ranked grind day three"" becomes ranked grind
randRandomised upper and lower case, fixed once so it never re-shuffles""rand:chaos"" becomes cHaOs
uwuuwu speak""uwu:really cool"" becomes weawwy coow
usdTurns the text upside down""usd:goblins"" becomes suแด‰lqoฦƒ

There are also thirteen fancy lettering styles that swap the alphabet for a Unicode font: bold, italic, bolditalic, script, boldscript, fraktur, boldfraktur, double, sans, boldsans, italicsans, bolditalicsans, and mono. They look striking but are harder to read, so save them for a name that really wants to stand out.

Worked examples

Here is what real templates actually turn into, mid-session:

TemplateBecomes
@@game_name@@ ##Apex #3
@@owner@@'s [[den/lair/hangout]]Pixel's lair, and it stays "lair" for good
@@nato@@ ยท @@num@@ <<person/people>>Charlie ยท 4 people
{{LIVE ?? ๐Ÿ”ด @@stream_name@@ // @@game_name@@ ##}}๐Ÿ”ด ranked grind, day 3 while streaming, and CS:GO #1 otherwise
@@game_name@@ {{RICH ?? (@@num_playing@@/@@party_size@@)}}Valorant (3/5), and the party bit vanishes for games without rich presence
""lower+scaps:@@owner@@'s crew""แดษดแดขแด€'๊œฑ แด„ส€แด‡แดก for an owner named Onza
{{PLAYING ?? @@game_name@@ ## // @@owner@@'s room}}Apex #3 while a game is on, and Pixel's room when the room is just hanging out

Edit any of this live with /template. It shows you a preview of the rendered name before you commit.