/** * Makes the server notify the same users the chat highlights and the editor * suggests, by defining once what counts as an @mention. * * @module */ /** * Matches an @username, with the name as its first group. The `@` must not * follow a word character, so an email address mentions no one. Nor may it * follow `[` or `(`, which leaves out a Markdown link's text or URL starting * with `@`, and also a plain `(@name)`. The editor's suggestions match its * source at the caret; the rest goes through {@link mentionedUsernames}. * `Markdown` links mentions with a looser pattern of its own, on text already * parsed, where code and URLs are out of the way. */ export const MENTION_RE: RegExp = /(? m[1].toLowerCase())), ]; } /** * The name `@everyone` reaches. Said by a role with `chat:everyone` in the * chat, it notifies every user, so no account may take it * (`assertUsernameAvailable`). */ export const EVERYONE = "everyone"; /** * Checks whether `body` says `@everyone`, in any case, by the rule of * {@link mentionedUsernames}. Only the chat service reads it, to set a * message's `mentionsEveryone` when its author may; the client reads that * flag, not the text. */ export function mentionsEveryone(body: string): boolean { return mentionedUsernames(body).includes(EVERYONE); }