Skip to content
Makyen edited this page Oct 28, 2024 · 168 revisions

This wiki page contains a list of commands and their explanation.

Executing commands and giving feedback

SmokeDetector commands and feedback are provided to SmokeDetector as chat messages in one of the rooms in which SmokeDetector is listening for commands (see the list of chat rooms). Feedback can be given either as a reply to a post, or using the sd prefix in a message which is not a reply. Commands are in the format !!/<command text> or sdc <command text>, which are entered in new chat messages, not as replies.

In order to keep this list of commands more concise, SmokeDetector commands are listed here in their !!/<command text> form, but all of them are able to be used with the sdc <command text> syntax.

As an example, the following two commands are equivalent:

!!/alive
sdc alive

Silent mode

If you don't want SmokeDetector to reply when executing a command, you can add a hyphen (-) at the end, like fp-. This is a good practice to cut down on chatroom clutter. Note that SmokeDetector will always report any errors, even if a trailing - is present. The hyphen can be placed after the command itself or after its parameters.

All commands support the silent mode, though it's more commonly used when replying to spam reports, managing black- and white-list, and managing chat notifications.

Commands for everyone

These commands can be executed by everyone.

  • !!/alive or !!/live — Replies a random message taken from a list so you can see that SmokeDetector is still running.

  • !!/status — Shows the UTC date when SmokeDetector started running.

  • !!/ms-status — Shows the status of metasmoke. If SmokeDetector is unable to communicate with metasmoke, then SmokeDetector will assume that metasmoke is down and continue processing posts and reporting them into chat without attempting to communicate with metasmoke.

  • !!/ping-failure-counter, !!/ping-failure !!/internal-counter, !!/counter — Shows the counter value used for metasmoke status auto switch. A negative value indicates consecutive successes while a positive value indicates consecutive failures. This is to be distinguished with the failure count shown by !!/ms-status.

  • !!/rev or !!/ver — Shows the running Git revision.

  • !!/help, !!/info, !!/commands — Shows a small help message about SmokeDetector.

  • !!/apiquota — Shows the remaining API quota of SmokeDetector.

  • !!/queuestatus — Shows the queue status of BodyFetcher.

  • !!/threads — Returns a description of current threads, for debugging.

  • !!/blame — Chooses randomly from a list of people who have talked recently in the room.

  • !!/lick, !!/wut, !!/coffee, !!/tea, and !!/brownie — better versions of !!/alive, aka "fun" commands.

  • !!/location — Replies with the current location, as set in the config file. Aliases for location include: version, rev, and ver.

  • !!/test site=<site_domain> <string> — Runs <string> against the filter as if it appeared in a question title, body, or username. To test specifically, use !!/test-a for answer, !!/test-q for question body, !!/test-t for title, or !!/test-u for username. Note that the site is optional. If site is present, the command will use filters for that site.

  • !!/isblu, !!/iswlu — Checks if a user is blacklisted/whitelisted. Two formats are accepted: <profile_URL> or <user_ID> <site_name>

  • !!/whoami — Replies with the bot's user id for that site

  • !!/whois admin — Replies with a list of admins (and who's currently in the room).

  • !!/whois blacklister — Replies with a list of blacklisters (and who's currently in the room). Aliases for blacklister include: blacklist_manager, blacklisters, code_admin, and codeadmins.

  • !!/amiprivileged — Lets you know if you are in the list of privileged users

  • !!/amiblacklistprivileged — Lets you know whether or not you have blacklist manager privileges (i.e. you can blacklist without approval)

  • !!/notify <chatroom_ID_number> <site_domain> [0|False] — Tells SmokeDetector to ping you, in the given chatroom, when SD reports a post into that room where the SE post is on the specified site_domain. If "0" or "False" (requires a capital "F") are supplied as a third argument, then the notifications are only added to reports when you are in the chat room for which you're adding the notification. Please don't use the "only notify when present in the room" feature in rooms where there's a substantial volume of reports.

    Example: !!/notify- 89 parenting.stackexchange.com

    Note: Please use the squelch suffix (-) and avoid spamming the chat room with too many requests (i.e. !!/notify-). See this chat message and the surrounding context.

    Note 2: The list of who to notify is maintained separately by each SmokeDetector instance. This means that if the active instance is switched to a different one, you will need to run a !!/notify- command again, if you haven't previously done so for the newly active SmokeDetector instance.

    Note 3: Please also note that it is your responsibility to remain @ pingable in the requested room. To be @ pingable in a room, you need to either A) be present in that room at the time of the ping; or B) if you've posted a message in that room, then you are @ pingable for 7 days after the last time you've entered that room. If you don't meet those conditions, then an @ ping will not work.

    Note 4: The notifications are appended as part of regular SmokeDetector reports. SmokeDetector doesn't post special messages just for the pings. If SmokeDetector is not already configured to report posts from the <site_domain> you've specified into the <chatroom_ID_number> room you've selected, then the !!/notify command won't cause additional notification messages to be sent to that room. If you want SmokeDetector to make reports into a room, that's best set up semi-permanently by modifying the rooms.yml file (instructions), but there are many options and changes potentially impact SmokeDetector performance, due to chat rate-limiting, so please ask/consult in Charcoal HQ before modifying that file or doing an !!/invite (see below). It's also possible to temporarily invite SmokeDetector into a room with !!/invite, but it's easy to get the syntax for that incorrect.

    Note 5: Notifications are also appended to some of the non-report messages SmokeDetector posts in chat, if the user has specified an appropriate value for site_domain. The available non-site site_domain values are: "/standby", "/autoflag_fp", "/ci", and "/failover".

  • !!/unnotify <chatroom_ID_number> <site_domain> — Cancels the previously set notification.

  • !!/unnotify-all - Removes all notifications.

  • !!/willbenotified <chatroom_ID_number> <site_domain> — Reports whether you will be pinged, in the given room, about spam on the given site.

  • !!/allnotificationsites <chatroom_ID_number> — Shows all sites that you will be pinged for in the given room.

  • !!/scan <post URL 1> [<post URL 2> [...<post URL 5>]] ["custom scan reason"] — Directs SmokeDetector to scan a post. This is useful when you're not sure if a post is spam and don't want to report it. Smokey will go through all the usual processes of scanning a post and report it if it's spam, and will tell you that it's not spam otherwise. If you're sure it's spam but it isn't being caught, use !!/report instead. A custom scan reason may be supplied. If you include a custom reason, it's required to be enclosed in double quotation marks (e.g. "custom scan reason").

  • !!/deobfuscate-number <pattern> — Show the result of homoglyph deobfuscating the number pattern. This returns the pattern after performing the homoglyph substitutions which SmokeDetector uses for testing numbers. Given that just the homoglyph substitutions is not what people are typically looking for, it also returns the pattern with fist homoglyph substitutions and then normalized, which is what SmokeDetector actually uses to test against for "deobfuscated" numbers.

  • !!/normalize-number <pattern> — Show the number normalizations for a number pattern. This returns the pattern with all non-ASCII number characters removed (i.e., it removes [^0-9]).

Commands as reply for everyone

  • why — Shows the reason that SmokeDetector caught a post.

    Note that why data is only kept for the last 50 reports. If you need to see older data, it can be found in the post record on Metasmoke.

  • autoflagged — Returns if the post was autoflagged or not, and if so, what users were used.

Privileged commands

These commands require privileges. Note that some commands may be disabled in some rooms. You may talk to others to understand why.

  • !!/report <post URL 1> [<post URL 2> [...<post URL 5>]] ["custom reason"] — Makes SmokeDetector scan and report a specific post/multiple specific posts in Charcoal HQ and other applicable rooms. Recommended over !!/scan if you're sure the post is spam. The originator of each post will be added to the blacklist if the post wouldn't have been caught otherwise. Maximum 5 posts at a time. An optional custom reason may be supplied so others are clearer why you're reporting it. Additionally, the post will be added to the database on Metasmoke, just like all other reported posts. If you include a custom reason, it is required to be enclosed in double quotation marks.
  • !!/report-force <post URL 1> [<post URL 2> [...<post URL 5>]] ["custom reason"] — Same as !!/report, but causes SmokeDetector to ignore the active instance's record of the post being recently reported.
  • !!/scan-time <post URL 1> [<post URL 2> [...<post URL 5>]] ["custom reason"] — In addition to doing a !!/scan (see !!/scan above) the wall-time it took in seconds to scan the listed posts is reported in the last line of the reply to this command.
  • !!/scan-force <post URL 1> [<post URL 2> [...<post URL 5>]] ["custom reason"] — Forces SmokeDetector to scan a post (see !!/scan above). The post will be reported if detected as spam, even if the the post was recently reported. This is useful to back-fill metasmoke with reports it missed due to being down, or SmokeDetector just thinking metasmoke was down (e.g metasmoke being up was not automatically detected and a !!/ms-up command wasn't issued). Note that for back-filling metasmoke, the scan will be on the current version of the post and, of course, can't scan posts that have been deleted. !!/scan-force-time is also available and acts similarly to !!/scan-time (above), but the action is forced.
  • !!/allspam <user URL> — To be used if a spammer has many posts so you don't have to use !!/report. This command posts a message about the user in all applicable rooms. Note that this command does NOT auto-TPU anything, for various reasons. Both individual site and network-wide user profiles are supported. It has an alias, !!/reportuser <user URL>.
  • !!/feedback <post_URL> <feedback_type> - Takes a valid SE post URL as input, and manually sends the given feedback to metasmoke. Note that this won't blacklist/whitelist users automatically.
  • !!/dig <domain> — Runs a DNS query for <domain> using pydns and returns the list of A and AAAA records as output.
  • !!/reboot — Reboots SmokeDetector.
  • !!/stappit — Stops all SmokeDetector instances. This should only be used in very extreme cases where you need all SmokeDetector instances to completely stop functioning. If you use this command, then each owner of a SmokeDetector instance will need to manually restart their instance. Please don't use this unless you're sure you know what you're doing. !!/standby <string> is what should normally be used to put instances in standby.
  • !!/stappit <string> — Stops all SmokeDetector instances where string is included in the location (e.g. !!/stappit undo would stop Undo/EC2 and Undo/DO, but not teward/aroura. This should only be used in extreme cases. If you use this command, then the owner of the SmokeDetector instance will need to manually restart their instance. Please don't use this unless you're sure you know what you're doing. !!/standby <string> is what should normally be used to put instances in standby.
  • !!/standby <string> - Places that instance into standby mode. The one that has been active the most over the last while is the one we will normally prefer stays running. The reason for that is that there is some state information which is specific to each instance (e.g. user-blacklist; notify list; recently reported post list; user-whitelist; etc). We generally want to keep the instance active which has the larger amount of recent information.
  • !!/standby-except <string> - Places all other instances into standby mode, use if multiple instances are running.
  • !!/pull — Pulls new revisions from GitHub.
  • !!/pull-sync-force — For use when other methods of resolving git issues fail, particularly resolving "HEAD isn't at tip of origin's master branch". After a git fetch --force, this command performs git branch --create-reflog -f master -t origin/master, which replaces the SmokeDetector instance's local master branch with what's on origin/master. It also does the same thing for the deploy branch. This command shouldn't be needed on a regular basis, as git operations have been made more robust (e.g. using git reset --hard origin/master elsewhere). Use !!/pull-sync-force if you really need to. It is recommended that you !!/reboot after executing this command in order to start using the current version of the files.
  • !!/pull-sync-hard — For use when other methods of resolving git issues fail. Uses a series of git commands to --force both the master and deploy branches to be on the same commit as origin/master and origin/deploy (normally, origin is set to Charcoal-SE/SmokeDetector on GitHub). An alias, !!/pull-sync-hard-reboot, will automatically reboot the SmokeDetector instance after syncing both branches to the origin. If you don't have it automatically reboot, it's recommended that you !!/reboot after executing this command in order to start using the current version of the files.
  • !!/master — When SmokeDetector enters reverted mode, use this command to go back to the deploy branch.
  • !!/gitstatus — Shows which git branch the SD instance is on and if it is behind origin/deploy.
  • !!/errorlogs [<N>] — Shows lines of the error logs for the last N exceptions. N defaults to 2. (You can also use !!/errorlog, !!/errlog or !!/errlogs)
  • !!/block <N> — Blocks SmokeDetector globally for N seconds; no alerts will be posted. Example: !!/block 600 blocks globally for 10 minutes.
  • !!/block <N> <room_id> — Blocks SmokeDetector in the specific room for N seconds; no alerts will be posted there. Example: !!/block 3600 89 blocks alerts in the Tavern for one hour.
  • !!/unblock — Unblock SmokeDetector manually, resetting global block only.
  • !!/unblock <room_id> — Unblock SmokeDetector manually in the specific room.
  • !!/invite <room_id> <roles separated by commas...> - Temporarily invites SmokeDetector to the given room on the current site. Roles are the same as in rooms.yml (instructions. This is used mostly for testing, or for short-term situations.
    Note: If you want SmokeDetector to make reports into a room, that's best set up semi-permanently by modifying the rooms.yml file (instructions), but there are many options and changes potentially impact SmokeDetector performance, due to chat rate-limiting, so please ask/consult in Charcoal HQ before modifying that file or doing an !!/invite.
  • !!/ms-up — Instructs SmokeDetector that metasmoke is up. SmokeDetector will attempt to communicate with metasmoke. This is the normal, default state.
  • !!/ms-down — Instructs SmokeDetector that metasmoke is down. SmokeDetector will not attempt to communicate with metasmoke.
  • !!/no_se_websocket_activity [ignore] if issued with ignore as the argument, SmokeDetector will no longer report and then reboot when it detects there's been no activity on the Stack Exchange WebSocket for an extended period of time. Issuing the command with no argument or any text for the argument other than ignore will return SmokeDetector to normal operation. Even when not reporting or rebooting because of a lack of traffic on the WebSocket, SmokeDetector is still listening to the WebSocket and both scanning any reported posts and tracking how long it's been since it's seen traffic. Thus, when normal operation is restored, SmokeDetector may reboot the next time it checks to see if it's been too long since it's seen traffic. This setting is not persistent across rebooting. It's intended use is when Stack Exchange is down or in read-only mode.
  • !!/stopflagging - An emergency measure to immediately disable all autoflagging. Once disabled, autoflagging can only be re-enabled by an Admin.
  • !!/dump_data - If a "dump" room is specified in rooms.yml, then the SD instance will output a chat message in that room which contains pickle formatted data that has been zlib compressed and base64 encoded. The data will include the blacklisted users list, whitelisted users list, list of ignored posts, and list of notifications. The resulting chat message can be used to transfer this data to another SD instance by using !!/load_data <chat message ID>.
  • !!/load_data <chat message ID> - SD will read the data in the specified chat message and replace the lists it has for the values in that data. The chat message is expected to be in a format as generated by the !!/dump_data command.
  • !!/stats [operation] [from_stats_set] [to_stats_set] — Shows and/or manipulates post scanning statistics. The available "operations" are: clear, copy, create, delete, display, get, lock, list, reset, show, and unlock. Further explanation is available in PR #7004, along with an explanation of what the stats output means. For most of the the operations which receive a not permitted response, there's a !!/stats-force version which will override that block. However, that block is generally there to prevent bad things from happening, so use care. The aliases for the command are stat, scan-stat, and statistics, along with their -force variations.
  • !!/unnotify-all-admin <chat user ID number> - Removes all notifications for the chat user with the ID <chat user ID number> on the chat server form which the command is executed. While this doesn't actually check that the user running the command has SD privileges, the user running the command must have the "admin" role on metasmoke.

Blacklists, watchlists, and the user-whitelist

These commands manages the detection blacklists and whitelists. Except for the user-blacklist and user-whitelist, all commands require "blacklist manager"

User-blacklist and user-whitelist

The user-blacklist and user-whitelist are maintained per SmokeDetector instance. The SmokeDetector instances do not share these lists between themselves. Thus, if the SmokeDetector instance is switched, the new instance will only have a record of the entries on these lists which were added/removed while that instance was active.

User-blacklist

The user-blacklist is a dynamic list of users which will have any post of theirs reported by SmokeDetector anytime one of their posts is scanned. Users are primarily added to the user-blacklist when someone gives tpu feedback to a post the user has authored, or when one of their posts is manually reported to SmokeDetector with !!/report and the post would not have otherwise been detected. Users are automatically removed from the user-blacklist when fp feedback is given for a post they have authored. Users can also be explicitly added, removed, or their blacklist status determined with the following commands:

Commands
  • !!/addblu <profile_URL> or !!/addblu <user_ID> <site_name> — Adds a user to the user-blacklist (this means that any post by this user will be reported when scanned).
  • !!/rmblu <profile_URL> or !!/rmblu <user_ID> <site_name> — Removes a user from the user-blacklist.
  • !!/isblu Checks if a user is blacklisted. This command does not require privileges. Two formats are accepted: !!/isblu <profile_URL> or !!/isblu <user_ID> <site_name>
Feedback
  • tpu feedback adds the user to the user-blacklist. The addition of u to tp feedback indicates you desire to add the user the user-blacklist.
  • fp feedback removes the user from the user-blacklist, if they are currently on the user-blacklist.

User-whitelist

The user-whitelist is a list of users for which posts will not be reported if the only detections of the post are on the user's username. If there are other detections triggered, then the post will be reported with the username detections included. Users are added to the list if their post receives fpu feedback. Users can also be explicitly added, removed, or their whitelist status determined with the following commands:

Commands
  • !!/addwlu <profile_URL> or !!/addwlu <user_ID> <site_name> — Adds a user to the user-whitelist. For posts by this user, if the only detections triggered for the post are on the username, then those detections alone will not cause the post to be reported.
  • !!/rmwlu <profile_URL> or !!/rmwlu <user_ID> <site_name> — Removes a user from the user-whitelist.
  • !!/iswlu Checks if a user is whitelisted. This command does not require privileges. Two formats are accepted: !!/iswlu <profile_URL> or !!/iswlu <user_ID> <site_name>
Feedback
  • fpu feedback adds the user to the user-whitelist. The addition of u to fp feedback indicates you desire to add the user the user-whitelist. Given that it's also fp feedback, the user is also removed from the user-blacklist, if they were on that list.

Detection blacklists and watchlists

For all !!/blacklist-* and !!/watch* commands:

  • If you are a blacklister on metasmoke, your change will apply immediately, after brief checks by SmokeDetector or once CI passes, depending on the circumstances.
  • If you are not a blacklister, a pull request (PR) will be created for your additions to the lists, so the changes can be reviewed. You will not be allowed to execute !!/unwatch or !!/unblacklist commands. You will need to ping a blacklister to perform those commands, or manually submit a PR that performs the removal.

All commands that add entries to one of these lists run the new entry through a variety of checks. If some checks are not passed, then a chat reply message is posted detailing what didn't pass. All such commands have a -force variant (i.e. append -force to the command; e.g. !!/watch-force), which will bypass these checks, except checks for actual duplicate entries, which are considered a hard error. You should not be in the habit of directly running the -force variant of the commands. Run the non -force version first to see what SmokeDetector says. If you have verified that you still want to add the entry, despite the issues SmokeDetector mentioned, then you can edit your chat message to add -force, or post a new chat message with -force. Even very experienced users rarely go directly to using the -force version without running the command as a non- -force version first.

Non -number blacklists and watchlist

The non -number blacklists and watchlist are lists of regular expressions (regexes) which are used to test some or all of post bodies, post titles, and usernames for matching text. See the description of the command for adding entries to each list for a statement as to what the entries on that list are tested against.

Because these lists are regular expressions, make sure regex special characters are escaped (in particular, . characters should be escaped as \.) when not used for the special meaning. The regular expression variant that SmokeDetector uses is the regex package.

When adding to the blacklists, any entry in the watchlists which exactly matches what you're adding to the blacklist will be automatically removed from the watchlists. In other words, adding to the blacklist is assumed to be moving an entry from the watchlist to the blacklists, if it already exists on a watchlist.

The regexes for the keyword-blacklist and watchlist have \b prepended and appended to them prior to testing against post bodies, titles, and usernames. For both of those lists, the i and s flags are set (case insensitive and . matches newline). The other lists do not bookend the regexes with \b and only have the case insensitive flag, i, set. Note: the actual bookending begins the overall regex with (?:^|\b|(?w:\b)) and ends it with (?:\b|(?w:\b)|$). The documentation for the regex package briefly describes what the w (word) flag in the bookending does.

Commands
  • !!/blacklistThis command has been deactivated. Use one of the four specialized blacklist commands instead, which are shown below. If run, this command will post a help message in chat.
  • !!/blacklist-keyword <regex> — Adds a regular expression pattern to the list of bad keywords. Prior to being used, all regexes on this list automatically have \b added to the start and end of the regex. Regular expressions on this list are tested against post bodies, post titles, and usernames.
  • !!/blacklist-username <regex> — Adds a regular expression pattern to the username blacklist. Regexes on this list do not have \b added to the start and end of the regex. These regexes are tested only against usernames.
  • !!/blacklist-website <regex> — Adds a regular expression pattern to the website blacklist. Make sure regex special characters are escaped (in particular, . characters should be escaped as \.; e.g. !!/blacklist-website example\.com). Regexes on this list do not have \b added to the start and end of the regex. Regular expressions on this list are tested against post bodies, post titles, and usernames.
  • !!/watch <regex> - Adds a regular expression pattern to the watchlist which is similar to the list of bad keywords (see !!/blacklist-keyword above), but with less strict criteria for what you can list. The intent is that you can set up SmokeDetector to watch for something and be alerted when it actually happens. Typical phrases to watch include domain names and phrases which occur in spam, but which have not been seen by metasmoke enough to actually blacklist (yet) or which don't meet the high spam-detection-accuracy criteria required of blacklisted items. The long version of this command is !!/watch-keyword <regex>. Prior to being used by SmokeDetector to test posts, all regexes on this list automatically have \b added to the start and end of the regex. Regular expressions on this list are tested against post bodies, post titles, and usernames.

-number blacklists and watchlist

The -number blacklist and watchlist are lists of numbers that are tested against post bodies, post titles, and usernames as text both verbatim and "normalized" (with everything but numbers removed). The numbers lists are not based on regular expressions, but do support regex-like comments in the form of (?#comment here). Comments are completely stripped from the entries prior to any checking. Number entries must have between 6 and 20 digits (inclusive).

North American Numbering Plan (NANP) numbers

Numbers which are, potentially, North American Numbering Plan (NANP) numbers will be tested both with and without the leading "1" country code. When adding a number, if Smoke Detector can't determine that the number is very likely a NANP number or can't be a NANP number, Smoke Detector will respond asking for clarification as to if the number is a NANP number or not, or for -force to be used to have Smoke Detector assume that it is a NANP number. For clarification to Smoke Detector:

  • To indicate that the number is a NANP number, you can:
    • Begin the number with a 1 or +1 followed by the 10 digits of the NANP number.
    • For the 10 digit number, use the format 123-456-7890 where the numbers are a valid NANP number.
    • Add (?#IS NorAm) to the entry.
  • To indicate that the number is not a NANP number, you can
    • Add (?#NO NorAm) to the entry.
How are number entries checked?

The number entries are checked for in the test text in three different ways:

  1. An exact match. In order for a "number" to make an exact match, the pattern must begin with a digit or up to two of +,(,[, or { immediately followed by a digit. When adding new entries, they will be checked to verify that an exact match can be made. However, while it's preferred that entries be in a format compatible with making an exact match, it's not necessary for that to be the case, so you can use -force to add an entry which won't be able to make an exact match.
  2. Normalized. The entry itself is reduced to just ASCII numbers. The text being tested is reduced to just ASCII numbers with sequences between 6 and 20 digits (inclusive), where a "sequence" is all groups of ASCII-number characters separated by non-digit characters.
  3. Deobfuscated. The entry itself is reduced to just ASCII numbers. The characters in the text being tested first are translated from a substantial number of Unicode characters which are sometimes used to obfuscate the representation of numbers into ASCII numbers (i.e., number homoglyphs are converted to their equivalent ASCII-number characters) and then that text is reduced to just number sequences with between 6 and 20 digits (inclusive), where a "sequence" is all groups of ASCII-number characters separated by the remaining non-digit characters.
Commands
  • !!/watch-number <number text> - Adds a number to the watched number list. The text may contain non-number characters and is tested verbatim against potential spam. In addition, it's tested "normalized", which is with both the watched number text and the post reduced to numbers.
  • !!/blacklist-number <number text> — Adds a number to the number blacklist. The text may contain non-number characters and is tested verbatim against potential spam. In addition, it's tested "normalized", which is with both the blacklisted number text and the post reduced to numbers.

Commands applicable to both -number and non- -number blacklists and watchlists (excluding the user-blacklist and user-whitelist described above)

  • !!/unwatch <regex> or !!/unwatch <number text> - Removes a previously-added regular expression from the watchlist and/or a number from the number watchlist. Only blacklisters can use this command; it will only accept an exact match to a regular expression in the watchlist and/or an exact match to a number in the number watchlist.
  • !!/unblacklist <regex> or !!/unblacklist <number text> - Similar to unwatch, removes a previously-added regular expression from the blacklists and/or a number from the number blacklist. Only blacklisters can use this command. It will only accept an exact match to a regular expression in the blacklists and/or an exact match to a number in the number blacklist.
  • !!/approve <PR number> - Approves, without leaving the chat, a pull request (PR) that was automatically created by a !!/watch* or !!/blacklist-* command run by a user without blacklister privileges. Only users with blacklister privileges can use this command. It has an alias: !!/accept.
  • !!/reject <PR number> <"reason"> - Reject and close a pull request (PR) that was automatically created by a !!/watch* or !!/blacklist-* command run by a user without blacklister privileges. The reason string is intended to help the user who submitted the watch/blacklist PR learn why their addition was rejected. It must be quoted. If the reason is shorter than 20 characters, you will need to -force the rejection. Users without blacklister privileges can use this command on their own PRs only; otherwise, you must be a blacklister to reject watch/blacklist PRs. This command has an alias: !!/close.
  • !!/bisect <text> - Test the text against all of the entries on the blacklists and watchlists which are stored in the *.txt files and are manipulable using !!/watch*, !!/unwatch, !!/blacklist*, and !!/unblacklist commands. Notably, this does not include anything defined directly in findspam.py.
  • !!/bisect-number <text> - Test the text against the number blacklist and watchlist entries. It does not test against the regular expressions. This is substantially less SmokeDetector CPU intensive than !!/bisect, so should be used if you're focusing exclusively on numbers.

Since the !!/bisect command is computationally intensive, the test commands are preferred if you're only interested in whether something would be caught. The bisect command should be reserved for when you need to know exactly which entry in the watch/blacklist would be responsible for the detection. The !!/bisect-number command is not computationally intensive, so there isn't the same concern.

Additionally, for offline testing, you can clone this repository locally and run the command ./util.py bisect "<string>".

If your intention is merely to check whether something is already on a list with the intention of adding it if it is not, then just go ahead and issue the command to add it. SmokeDetector will automatically run the equivalent of the test command and reply to you with a warning if what you attempted to add would already be caught by an item on one of the lists. Otherwise, it will be added. In other words: don't ask to add, just add.

Privileged commands as reply

These commands require privileges and have to be posted as a reply to a message of SmokeDetector.

User-friendly syntax:

  • use spam, rude, abusive, offensive, or r/a for posts that should be flagged as such (equivalent to tpu-; see Aliases below)
  • use v, vand or vandalism for posts that have been vandalised and the vandalism edit should be rolled back (equivalent to tp-)
  • use notspam if the post should not be flagged (equivalent to fp-)

Complete list:

  • tp or true — Marks a reported post as true positive.
  • tpu or trueu — Marks a reported post as true positive and adds the poster to the blacklist.
  • fp or false — Marks a reported post as false positive. Additionally removes the user from the blacklist, if that was the reason that the post was reported.
  • fpu or falseu — Marks a reported post as false positive and adds the poster to the whitelist.
  • naa — If the reported post is an answer, this command records it as NAA (Not an answer) in metasmoke.
  • ignore — Makes SmokeDetector ignore a reported post.
  • delete, del, remove or gone — Deletes a message of SmokeDetector. This has been disabled in CHQ for reports due to the reasons listed below. But if you really need to delete a report, use sd delete-force.
  • postgone — Edits out the post link of a SmokeDetector report. If in CHQ, this should be used sparingly.

Aliases

Some frequently used commands have one-letter aliases or convenient words that can be used instead:

Command Alias of
f fp-
notspam fp-
k tpu-
spam tpu-
rude tpu-
abuse tpu-
abusive tpu-
offensive tpu-
r/a tpu-
v tp-
vand tp-
vandalism tp-
n naa-

A note on message deletion

Messages by SmokeDetector can be deleted within 2 minutes after they were posted by using the del, remove, or gone commands. After 2 minutes are up, SmokeDetector cannot delete its own messages in response to those commands, so any deletion after that window must be done by a moderator.

Messages will also be deleted in Tavern on the Meta and SO Close Vote Reviewers, or Raiders of the Lost Downboat if the relevant post is deleted or marked as false positive before the 2-minute window is up.

Please note that the usage of deletion commands is discouraged in Charcoal HQ. Generally, messages in CHQ are kept as a record of all reported posts for multiple reasons:

  • While we do have metasmoke which acts as a mirror of all posts, it does go offline occasionally
  • Some userscripts which run in chat (e.g. FIRE) use information from the chat reports to fetch the correct data from the API.
  • It allows for a second opinion on reports, even if one person has marked it as a false positive
  • Seeing spam and abusive posts is an occupational hazard in CHQ; we aren't worried if the report contains something NSFW.

The delete-force command can be used if a report really needs to be deleted in Charcoal HQ.

Shortcut commands

You can now use a shortcut to post a reply to one, two or three messages at the same time, in this shape:

sd cmd1
sd cmd1 cmd2
sd cmd1 cmd2 cmd3
sd cmd1 cmd2 cmd3 cmd4
sd cmd1 cmd2 cmd3 cmd4 cmd5

cmd1 will be invoked in the most recent message, cmd2 on the message before that and cmd3 on the message before that, and so on.

It's also possible to skip a message. Replace a command with a - to skip a message. For example, sd - delete skips the most recent message and deletes the message before that one.

Smokey will reply to your shortcut command unless all commands have quiet mode (like tp-) or just don't reply by default (like delete).

A few examples:

  • sd - delete keeps the most recent message and deletes the one before that.
  • sd tp fp delete marks the most recent message as tp, the one before that as fp, and deletes the one before that.

You can also put a digit in front of a command so that the command will apply as many times as the digit. A few examples:

  • sd 2tpu = sd tpu tpu
  • sd 2tpu 3fpu = sd tpu tpu fpu fpu fpu
  • sd 2- fp = sd - - fp