Docs/Plugins/Tags
Tags
Save and recall snippets of text, plain or as embeds.
Tags are named snippets anyone (with the level you choose) can recall - FAQ answers, rule quotes, copy-pasta your server insists on keeping. A tag can carry a description (what staff see in lists instead of the content) and can render as an embed with a title, color, image, and footer.
plugins:
tags:
max_tag_length: 1900
min_level_remove_others: 50 # who may delete other people's tags
access: # optional, per-function minimum levels
create: 10
edit: 50
remove: 10
owner: 50
The three commands
tag {name}sends a tag. The slash form autocompletes the name as you type and has proper channel and user options; the prefix form takes the same-c/-u/-eflags it always has. The everyday invoker is still just!{name}.tag create {name} {content}makes a tag the fast way. Add a description or embed afterwards intag manageor the dashboard.tag manage [name]is the toolbox. With a name it shows everything about that tag - content, description, author, usage - with buttons to edit, add or edit its embed, transfer ownership, and remove it. Without a name it opens the same paginated list astags.tagslists every tag, 15 per page with descriptions, with a picker that jumps straight into managing any of them.
The old tags edit, tags remove, tags info, tags list, and
tags owner commands moved into tag manage. Typing the old forms still
lands you in the right place, and !tags {name} still sends a tag like it
did in classic HepBoat.
Buttons only show for members whose level can use them, and every click is
re-checked. Editing is level based: anyone at access.edit can edit any tag
(matching classic HepBoat). Removing someone else's tag needs
min_level_remove_others on top of access.remove. The access block can
raise any function's bar; leaving it out keeps the classic levels.
Setup checklist
- Add
plugins.tagsin Config. Setmax_tag_lengthbelow Discord's message limit if staff tend to add surrounding text. - Set
min_level_remove_othersto the lowest command level that may remove another member's tag. Raise levels per function underaccess:if the defaults are too open. - Create a disposable tag with
tag create, then opentag manage {name}and give it a description from the Edit button. - Invoke it with the bare
!<name>form, then with/tagand pick it from the autocomplete. Runtagsto see your description in the list. - Add an embed from the manage view (title and color are enough) and invoke
it again - it should arrive as an embed everywhere, including
-csends. - Remove the disposable tag from the manage view. Confirm an ordinary member cannot remove someone else's tag below the configured level.
The dashboard's Tags page lists, edits, and deletes them with usage counts, descriptions, and the embed fields.
Content tokens
Tag content supports placeholders, filled in when the tag is used:
{user}/{mention}- mentions the person who used the tag (or the-utarget, see below){channel}- the channel the tag was used in (or the-ctarget){server}- the server name{u<id>}/{r<id>}/{c<id>}- mention a specific user, role, or channel by ID
User and role mentions in tag content ping for real (embeds are the
exception - Discord never notifies from inside an embed). @everyone and
@here are always suppressed in tags, no matter who wrote them.
Directing a tag
Both !tag {name} and the bare !<name> form take flags, in any position
after the name:
-u @someone(or--user) directs the tag at them:{user}tokens become that person, and if the tag has no{user}token they get pinged above the content.-c #channel(or--channel) posts the tag to another channel.-e(or--embed,!tagonly) renders a plain tag inside an embed once. A tag with saved embed settings always renders as its embed.
On the /tag slash command those are real options: pick the channel and
member from the pickers instead of typing flags.
Troubleshooting
- A bare tag name runs another command: built-in command names take precedence;
use a different tag name or invoke it through
!tag. - A mention renders but does not ping: mentions inside embeds never notify, and
@everyoneplus@hereare always suppressed. -ccannot post: HepBoat needs access and Send Messages in the destination.- A member cannot remove another person's tag: compare their command level with
min_level_remove_others. - A member cannot edit at all: compare their level with
access.edit(the classic default is moderator level 50). - The Edit form does not include the content box: that tag's content is longer than Discord's 4000 character form limit - edit the body in the dashboard.
- Long output fails: lower
max_tag_lengthand account for text added by the invocation flags.
Commands
Arguments in {curly braces} are required. Arguments in [square brackets] are optional.
| Command | What it does |
|---|---|
/tag {name} [channel] [user] [embed] |
Send a tag, optionally to a channel or at a member. Slash form autocompletes and has channel/user options. |
/tag create {name} {content} |
Create a tag - invokable in chat as |
/tag manage [name] |
One tag's whole toolbox: info, edit, embed, owner, remove as buttons. No name = browse all. |
/tags |
Paginated list of every tag with its description. |