Welcome Players
Greet each person as they join and include the room code, map, or Discord link.
See welcome examplesSet up automatic lobby messages one step at a time. Start with the thing you want to do, copy an example, then add timing, filters, variables, and placeholders only when you need them.
Most people only need one of these patterns. Choose the closest one, copy it, and change the words.
Greet each person as they join and include the room code, map, or Discord link.
See welcome examplesPost lobby notifications, first-meeting notes, or meeting-specific instructions.
Choose a triggerOnly send a message for certain maps, roles, ranks, lobby sizes, presets, or meetings.
Add bracket rulesUse placeholders like player name, host name, map, player count, date, and time.
View placeholdersIf you have never made a template before, do this first. You can make more advanced templates later.
template.txtThis is where your lobby messages live. Each template starts on its own line with a tag.
Paste welcome:Welcome to the lobby!. The word before the colon is the trigger.
Save your changes, then trigger the tag in game or let the automatic event happen.
Use /template welcome or /t welcome to send that template manually.
tag:message. You do not need brackets unless you want extra control.welcome, rules, motd, or strategy./template with no arguments to list all available tags in the file.\n, though it still works if you prefer it.Some tag names are automatic. Other tags are only sent when you run them manually.
Use the welcome tag.
welcome:Welcome {{PlayerName}}! Code is {{RoomCode}}.
Use the notification tag. The repeat timing comes from the auto-message settings.
OnFirstMeeting:This is the first meeting. Crewmates, use the /myrole command to see your role info.
notification:{{PlayerCount}} players in lobby.
That example sends one first-meeting reminder and one repeating lobby notification.
Use OnMeeting for every meeting, or OnFirstMeeting for only the first one.
OnFirstMeeting:This is the first meeting. Use /myrole if you need your role info.
OnMeeting[meeting=2]:Second meeting. Start narrowing it down.
Make your own tag name, then trigger it with /template [tagname].
rules:Please read the lobby rules before joining voice.
To send it, run /template rules or /t rules.
Brackets are optional. Use them when a message should only send in a specific situation.
tag[property=value]:message.tag[property=value, property=value]:message.Add delay=N, where N is 1-30 seconds. Delayed messages always send.
welcome:This sends right away.
welcome[delay=5]:This sends 5 seconds later.
welcome[delay=15]:This sends 15 seconds later.
Use the same tag more than once. Add weight=N if one should show more often.
motd[weight=8]:Remember to vote every meeting.
motd[weight=2]:Rare tip: check who is avoiding tasks.
Weights can be 1-10. Higher weight means that entry gets picked more often.
Use map=X. Separate multiple maps with |.
Valid map values are Skeld, MiraHQ, Polus, Airship, Fungle, and Dleks.
mapinfo[map=Skeld]:You are on Skeld!
mapinfo[map=Polus|Fungle]:You are on Polus or Fungle.
Use role for in-game roles or rank for Host, Admin, Mod, Moderator, or VIP.
strategy[role=Jester]:Act suspicious, but survive long enough.
strategy[role=!Impostor]:You are not an Impostor. Work together and find them.
strategy:A generic tip for anyone else.
access[rank=Mod|Admin|Host]:Welcome, prestigious member!
You can add a fallback template with no role or rank condition for everyone else.
Use players, preset, or meeting.
Player count supports >, >=, <, <=, =, and !=.
lobbysize[players>=15]:Big lobby! Starting soon.
lobbysize[players<6]:Still waiting for more players to join.
welcome[preset=2|3]:This message appears on Preset 2 or 3.
OnMeeting[meeting=3|4]:Meeting 3 or 4. Time is running out.
Use hidden. The tag will not show in the /template listing, but it can still trigger.
ping[hidden]:Just an unfinished hidden message.
Regex is a search pattern. In templates, it lets a message send automatically when a player's chat message matches words, commands, numbers, or phrases you choose.
tag[regex="pattern"]:message.^ and $ when you want an exact full-message match.\\b or \\d+.
Fill this out to make a template that watches chat and answers automatically. The generated line can
go directly into template.txt.
Regex, short for regular expression, is a compact way to describe text you want to find. Instead of checking one exact sentence, you can check a pattern such as "starts with !rules", "contains body", or "has any number in it."
For EHR templates, the pattern goes inside regex="...". When someone sends chat, EHR tests
that chat against the pattern. If it matches, the template sends.
rules[regex="^!rules$"]:Please read the lobby rules before the game starts.
Start with normal words, then add symbols only when you need them.
body |
Matches any message containing body, including "where is body?" |
^!rules$ |
Matches exactly !rules and nothing else. |
body|report |
Matches body or report. |
\\bbody\\b |
Matches body as its own word. |
\\d+ |
Matches one or more numbers. |
.* |
Matches anything. Use carefully because it is very broad. |
EHR reads every template with a regex property, compiles that pattern, then checks incoming
chat with it. If the pattern matches and any other bracket rules also pass, EHR sends the template.
help[regex="^!help$"]:Available commands: !rules, !discord, !settings
discord[regex="^!discord$"]:Join the Discord: discord.gg/maul
bodyhelp[regex="\\b(body|report|dead)\\b"]:
If you found a body, say where it was and who was nearby.
In practice, a player typing !discord triggers the Discord line. A player typing
where was body? triggers the body help line.
If you want the simplest autoresponder, make the word people type the regex and make the text after the colon the answer.
discord[regex="^discord$"]:discordlink
That means: if someone says exactly discord, EHR replies with discordlink.
Replace discordlink with the real invite when you are ready.
Regex can sit next to other bracket rules. Separate properties with commas. This example only responds
to !settings on Preset 2 or 3.
settings[regex="^!settings$", preset=2|3]:
Current setup: {{Map}} | {{PlayerCount}} players | Preset {{Preset}}
You can also hide regex-triggered templates so they do not appear in the manual
/template list.
rules[regex="^!rules$", hidden]:
No slurs, no teaming, no stream sniping, and keep meetings readable.
regex="^!rules$".\\d+, not \d+.^ and $ for commands so random sentences do not trigger them.| for "or", such as body|report|dead..* rare because they match almost everything.Variables are handy for links, lobby summaries, and repeated lines you do not want to type over and over.
Put the variable on its own line, then use it later with @name.
@discord = discord.gg/ehr
@session = {{Date}} | {{Time}}
@lobby = {{Map}} | {{PlayerCount}} players | Code: {{RoomCode}}
welcome:
@lobby
Join our server at @discord!
Placeholders inside variables are filled when the message sends.
#. Comment lines are ignored entirely.# This is a comment
welcome: Greetings!
Start with one of these, then edit the message text for your lobby.
@discord = discord.gg/ehr
@lobby = {{Map}} | {{PlayerCount}} players | Code: {{RoomCode}}
welcome:
Welcome {{PlayerName}}!
@lobby
Join our server at @discord!
OnFirstMeeting:
This is the first meeting.
Use /myrole if you need your role info.
Remember to vote before time runs out.
lobbysize[players>=15]:
Big lobby! Starting soon.
Please stay in lobby and avoid spam joining.
mapinfo[map=Polus|Fungle]:
This map has a lot of space.
Pay attention to where bodies are found and who was nearby.
rules[regex="^!rules$", hidden]:
Rules: no slurs, no teaming, no stream sniping, and keep meetings readable.
discord[regex="^!discord$", hidden]:
Join the lobby Discord: discord.gg/maul
Players can type !rules or !discord in chat and EHR will answer automatically.
discord[regex="^discord$", hidden]:discord.gg/maul
This version answers when someone types discord without the exclamation mark.
This small template.txt example puts most features together in one place.
@discord = discord.gg/ehr
# Welcome messages with weighted random pick
welcome[weight=7]:Welcome to {{HostName}}'s lobby! Join our Discord: @discord
welcome[weight=3]:Glad you joined! Find us at @discord
# Send a message 10 seconds after the welcome fires
welcome[delay=10]:Hope you have an unforgettable experience in my lobby!
# Auto-message shown in lobby every X seconds
notification:{{PlayerCount}} players | {{Map}} | Preset: {{Preset}}
# Chat command auto-responses
rules[regex="^!rules$", hidden]:No slurs, no teaming, no stream sniping, and keep meetings readable.
discord[regex="^!discord$", hidden]:Join the lobby Discord: @discord
# First meeting reminder
OnFirstMeeting:First meeting! Think before you vote.
# Target a specific meeting
OnMeeting[meeting=3]:Third meeting. Crewmates need to figure this out.
# Only show on big lobbies
OnMeeting[players>=12]:Big game with {{PlayerCount}} players. Stay focused.
# Role-specific tips
strategy[role=Jester]:You are the Jester. Get voted out to win.
strategy[role=!Impostor]:You are Crew. Find the Impostors!
strategy:Play smart and have fun.
# Rank-only template hidden from listing
ping[rank=Mod|Admin|Host, hidden]:Lobby check | {{PlayerCount}} players | {{Map}} | {{Time}}
Placeholders are wrapped in double braces and filled dynamically when a message is sent.
{{PlayerName}} | Name of the receiving player |
|---|---|
{{HostName}} | Name of the current host |
{{RoomCode}} | Lobby join code |
{{Map}} | Name of the current map |
{{PlayerCount}} | Total players in the lobby |
{{AlivePlayerCount}} | Number of players currently alive |
{{DeadPlayerCount}} | Number of players currently dead |
{{Players}} | Names of all players, comma separated |
{{AlivePlayers}} | Names of alive players, comma separated |
{{DeadPlayers}} | Names of dead players, comma separated |
{{KillCooldown}} | Kill cooldown in seconds |
|---|---|
{{DiscussionTime}} | Discussion time in seconds |
{{VotingTime}} | Voting time in seconds |
{{EmergencyCooldown}} | Emergency button cooldown in seconds |
{{NumEmergencyMeetings}} | Emergency meetings allowed per player |
{{PlayerSpeedMod}} | Player speed multiplier |
{{CrewLightMod}} | Crewmate vision multiplier |
{{ImpostorLightMod}} | Impostor vision multiplier |
{{NumCommonTasks}} | Number of common tasks |
{{NumLongTasks}} | Number of long tasks |
{{NumShortTasks}} | Number of short tasks |
{{MeetingCount}} | Number of meetings held so far |
|---|---|
{{GameDuration}} | Elapsed game time as mm:ss |
{{Preset}} | Name of the active preset, such as Preset 1 |
{{AmongUsVersion}} | Among Us version |
|---|---|
{{InternalVersion}} | EHR internal version number |
{{ModVersion}} | EHR display version |
{{Date}} | Current date |
{{Time}} | Current time |
If a template does not send the way you expected, check these first.
Make sure the tag is not marked hidden. Hidden templates can still trigger, but they do
not show in the list.
Check the bracket rules. A map, role, rank, player count, preset, or meeting condition may not be met.
Make sure the variable is defined on its own line, like @discord = discord.gg/ehr.
Immediate entries go through weighted picks. Delayed entries always fire after their delay.
Made with reference to Zypherus' EHR template guide and code.