Important notice! This documentation is a mixture of prospective and out-of-date. That is to say that the accuracy here is pretty terrible and there's about a 50% of anything you read here being true. I'm working on a major documentation update which will hopefully be live soon - poke me whenever to ask how it's going. One day, you'll check back here and see that this notice is gone, and then everything will be guaranteed to be accurate. Thank you, and sorry!
This page contains a huge amount of detail. If you'd prefer a shorter version, see Quick Commands.
What is TARS?
TARS is an IRC bot primarily for aiding IO in social media promotion, but also has a bunch of other things it can do. The following is a list of all the commands that TARS knows.
Whenever you see a command such as
.search, keep in mind that you can also use this command by pinging TARS at the start of your message:
.commandname requiredargument [optionalargument] [--tagged taggedargument]
"commandname" is the name of the command. "requiredargument" is required. Anything in [square brackets] is not required. Tagged arguments must come after their tag - for example, in the above command
.commandname requiredargument --tagged taggedargument is valid, but
.commandname requiredargument taggedargument is not.
Usually TARS is operated with specific commands, but it has some features that aren't command-related.
TARS will automatically provide a link for a message that's just an SCP number (it'll ignore any pings in the message). It'll also provide a link for a message that contains an SCP number prefixed with "!", e.g. "!SCP-4000".
Tagging TARS in a message that's just a caret (or a chevron) is like saying "TARS, take a good hard look at the last message that was posted". TARS will take a look at the message above the chevron and attempt to parse any command that's there. If it doesn't find anything, it'll move up to the previous message, and will keep doing so until it finds a command.
Chevronning has a variety of effects:
- If TARS finds a command that it previously ignored because another bot was present, it will execute it
- If TARS finds a command that starts with the wrong character (e.g.
search), it will execute it
- If the message contains any SCP numbers, TARS will provide links for them all
- If the whole message body, minus any pings, is a match for an article on the wiki, TARS will provide a link for it
- Otherwise, TARS will not do anything.
Append a number after the chevron to change how many messages are checked, e.g.
TARS: ^ 20. There is a hard limit of 50, and the default is 10.
Change the number of chevrons to skip commands.
^ will execute the first command that is found,
^^ will skip the first command and execute the second command, and so on.
An empty message that pings TARS and nothing else, eg
TARS:, is equivalent to
TARS: ^ 1.
When chevronning, TARS will always ignore any other chevrons.
TARS will join any channel that it's invited to. This channel will be added to the auto-join list.
If TARS is kicked from a channel, it will leave, and the channel will be removed from the auto-join list.
Deferral (to other bots)
If someone posts a command like
.help in a channel, if there are multiple bots there, they may all try to parse it at once! To avoid this, SCP IRC bots are in a hierarchy in which the bot at the top will always try to parse the command,
and all the other bots will only try to parse it if all the bots above them in the hierarchy are not present.
jarvis is at the top of the hierarchy. Secretary_Helen is next. TARS is right at the bottom.
If jarvis or Secretary_Helen are in the channel, TARS will ignore any commands that they would usually pick up on. Look for J and/or H after the command name to see whether or not this is the case for each command.
However, if either of those bots fails the request (e.g. not finding anything in a
.search) then TARS will automatically try as well. (If TARS also fails to find anything, it won't say anything.)
To force TARS to parse a command, either ping it at the start of the message, or prefix the command with two dots, e.g.
..search. TARS will respond regardless of other bots in the channel (be warned that other bots may respond to any URLs that TARS sends!)
If your command includes any TARS-specific syntax, then TARS will answer it anyway (in private messages), even if another bot gets there first.
Provides a link to both this page and Quick Commands.
.search, .sea, .s JH
Searches the wiki for pages, and provides URLs and basic info about the page that matches your search criteria. Searching is never case-sensitive.
.search [title] [--regex regex] [--tags tags] [--author author] [--rating rating] [--created created] [--parent parent] [--fullname] [--summary] [--select type number offset]
Search for pages whose title contains all of these words. Words are space-separated. If neither -f nor -x are present, anything wrapped in quotemarks (
") will be treated as a single word. If you leave title empty, then it will match all pages, and you'll need to specify more criteria. If you actually need to search for quotemarks, escape them with a backslash - e.g.
.s \"The Administrator\".
- --regex, -x [regex]
Filter pages by a regular expression. You may use more than one regex in a single search, still delimited by a space. If you want to include a literal space in the regex, you should either wrap the whole regex in quotes or use
- --tags, --tagged, --tag, -t [tags]
Filter pages by tags.
+scpmeans pages tagged scp.
-scpmeans pages not tagged scp. If you don't put either
-, TARS will assume you meant to add a
- --author, --au, -a [authors]
Filter pages by exact author name. You can use
-to include/exclude authors. Pages must have at least one specified author, but must have all authors that have
- --rating, -r [rating|ratingrange]
Filter pages by a rating number. Prefix the number with any of
=. Default is
>. Can also specify a range of ratings with two dots, e.g.
20..50. Ranges are always inclusive.
- --created, --date, -c [date|daterange]
Filter pages by date of creation. Rewrite dates are ignored. Absolute dates must be in ISO-8601 format (YYYY-MM-DD, YYYY-MM or YYYY). Relative dates must be a number followed by a letter to specify how many units of time ago; valid units are
s m h d w M y. These units are not case-sensitive, except for m/M! Use
mfor minutes and
Can use the same prefixes as rating (
>= "older than",
<= "younger than",
== exact match), and also supports ranges of dates with two dots e.g.
2018..2019. Ranges are always inclusive, and you can mix relative dates and absolute dates. Don't worry about which order to put them in. 'Exact match' is the default match for absolute dates, as they are always approximate. 'Older than' is the default match for relative dates, as they are alwyas precise, and an exact match is unlikely to match any articles.
- --category, --cat, -y [category]
Exactly the same as --tags, except for Wikidot categories instead.
If you don't include this argument, TARS will search all categories. If you include this argument but don't specify any categories, TARS will only search "_default".
- --parent, -p [url]
Filter pages by their parent page. The parent page's URL must be given exactly (e.g.
-p antimemetics-division-hub). TARS will check the entire parent tree - the page will be found even if it's a great-grandchild of the --parent.
- --summary, --summarise, -u
Instead of providing a link to a single article, TARS will summarise all articles that match the search criteria.
- --random, --rand, --ran, -d
If your search matches more than one article, TARS will return a random one from the list. Equivalent to
--order random --limit 1.
- --recommend, --rec, -m
If your search matches more than one article, TARS will determine and return which of those articles most needs extra attention. Equivalent to
--order recommend --limit 1.
- --newest, --new, -n
If your search matches more than one article, TARS will return the most recent one. Equivalent to
--order recent --limit 1.
- --order, -o [order]
What order should the results be returned in?
randomselects randomly from the list,
recommendselects based on vote numbers and article age,
recentselects the newest ones. Default:
- --limit, -l [number]
The number of results will be limited to this number. The rest will be cut off and forgotten.
- --offset, -f [number]
This number of results will be removed from the top of the list.
- --verbose, -v
TARS will explicity state exactly what search criteria it thinks you want. Probably not useful for anything other than debugging.
Ignore articles that have already been promoted. TODO remove this from documentation
TARS: search -t +scp +meta -r >100 -c 2014 - matches pages tagged both "scp" and "meta", with a rating of more than 100, posted in 2014.
.s Insurgency --rating 20..80 --created 2018-06..2018 - matches pages that contain the word "Insurgency" in the title, which have a rating of between 20 and 80, and were created between June 1st 2018 and the end of 2018.
.s Unexplained Location -f -c 20d..40W3d --random - matches pages whose name is exactly "Unexplained Location" created between 20 days and [40 weeks + 3 days] ago, and returns a random one.
.s -x ^SCP-\d*2$ -m - matches articles that start with "SCP-" followed by any amount of numbers so long as that number ends in a 2, and returns the one that most needs extra attention.
If TARS finds more than one article that matches your criteria (and if you didn't specify --random, --summary or --recommend), it will provide a list of matches and ask if you meant any of them. To pick your article from the list, see the
.lastcreated are aliases of this command.
.lastcreated, .lc, .l, .recent JH
TARS will generate a list of the 3 most recently created pages.
.lastcreated [amount] [extra arguments]
The number of pages to show. Default is 3, max is 10.
- extra arguments
You can use any of the arguments in
.searchfor additional filtering before showing the results. This command is equivalent to
.s --order recent --limit 3.
.lc -a Croquembouche - shows the last 3 articles posted by Croquembouche.
.regexsearch, .regexsea, .rsea, .rs
Exactly the same as
search, except your search terms are parsed as regular expressions. Not case-sensitive.
.rs ^SCP- -t -scp - searches for articles starting with "SCP-" but that are not tagged 'scp'.
.rs ^((?!the).)*$ - searches for articles that don't contain 'the'.
.showmore, .sm JH
When TARS presents you with a list of articles to pick from, use this command to pick which one you want to see.
.sm 2 - pick the 2nd article from the list.
.sm one of TARS' lists, even if they didn't send the command that created it.
You can always
.sm the last list that TARS created in a given channel, even if TARS has been offline. When a new list is created in a channel, it will overwrite the old list.
Over time, TARS will learn which articles are picked more often than others, and will move those to the top of the list.
.sm 0 to see the whole list.
.authorpage, .author, .au JH
Fetches the author page for a given user. You must specify their Wikidot name exactly, although if you name an IRC user, TARS will check its list of aliases (see
.alias) as well. If you don't specify anyone, TARS will try to find your author page instead (and it'll check your aliases, too).
.alias [name] [--add names] [--remove names] [--list]
Add an alternate name(s) for yourself into TARS' database. These names are used for
An IRC name. You can only --add or --remove aliases from this name if it's your current IRC nick (or if it's already one of your aliases), but you can --list anyone's aliases. If you don't include this argument, TARS will assume that you mean your current IRC nick.
- --add, -a
A list of names to associate with your current IRC name. Separate multiple names with spaces. If your name contains a space, wrap it in quotes.
- --remove, -r:
A list of names to remove from your list of aliases.
- --list, -l:
List all aliases associated with the given name. If you don't include any flags at all, TARS will list the names anyway.
If TARS notices that you look up a single person a lot, it'll ask if that person is you and recommend that you add that name as an alias. It will only do this once.
.alias --add "James Bond" James_Bond 007 - add these names to your alias.
Please be aware that aliases are moderated. Don't try to abuse the system.
TARS will tell you when this user last sent a message in the current channel, and when they last sent a message in any channel.
.s -t [tag].
TARS will provide a link to the page that lists all the pages with this tag.
Note that jarvis uses this command as an alias for
Set your Wikidot username in TARS' database.
TARS will provide a link to the user's Wikidot page.
Multiple arguments will be interpreted as a single username that contains spaces.
.gib [--channel #channel] [--user user(s)] [--size size reduce]
[--roulette mode] [--regex regex(es)] [--me] [--no-cache]
TARS will take all of the messages in the channel and employ an extremely sophisticated machine-learning algorithm backed by over $8 billion in research funding to contribute to the conversation.
Additionally, any pings (i.e. username mentions) that are produced in the output will be censored to avoid annoying anyone not present in the conversation. To add a nick to the list of pings to search, see
- --channel, --ch, -c
The channel to search. Both you and TARS must be in the channel at the time. Defaults to the current channel.
- --user, -u, --author, -a:
Filter the messages to a single user, or list of users. Defaults to all users.
- --size, -s:
size: Increase the internal state size of the selection. Bigger values will produce more coherent results, at the cost of giving a higher chance of producing an error. Default value is
reduce: TARS will usually automatically reduce the state size if the original value fails to produce a result. If you set
0, TARS will not do this.
- --roulette, -r:
Enables roulette mode! Instead of generating a nonsensical sentence, TARS will instead pick a random link. mode: Determines what kind of link TARS looks for. Must be either
imagefor image links, or one of
yt, which will all select YouTube links.
- --regex, -x:
TARS will only gib from messages that match the given regular expression.
TARS will only gib from
- --no-cache, -n:
TARS will cache the results of .gib, and will only generate a new set of sentence if a non-identical .gib is issued (e.g. from a different channel or searching a different user). Additionally, TARS will keep a list of output sentences and will never generate the same sentence twice. Applying
--no-cachewill ignore both of these constraints.
Some commands are reserved for SCP staff only.
Promote an article or message on SCP social media.
.promote [message] [--article article] [--image image] [--facebook image] [--twitter image] [--tumblr image] [--reddit] [--instagram]
The message to be posted in the announcement. If you don't supply a message, TARS will ask you for separate messages.
- --article, -a
The full URL of the article that needs promotion.
Use `.recommend` to get the mathematically most promotion-worthy article.
- --image, -m
The full URL of an image to send with the post.
- --facebook, -f
- --twitter, -w
- --tumblr, -b
- --reddit, -r
- --instagram, -i
Include any or all of these tags to post to the respective social media accounts. Include a "true" or "false" after each one to include the image specified in --image. Default is "true". Reddit will always be false and Instagram will always be true (if you don't specify an image, you won't be able to post to Instagram).
.promote command can only be used by an operator or higher in #site42, the Internet Outreach channel.
Once you've called
.promote, TARS will message you privately. This private conversation will not be logged and the bot owner will not have access to these message. TARS will take you through a series of simple questions to confirm that you do actually want to post things to the social media accounts.
TARS will ask you for passwords and/or API keys to the accounts. These are necessary in order for TARS to post. At the end of the session, you'll be asked whether or not you want to keep the passwords saved. If you do, it'll make things faster next time by keeping the passwords in an encrypted file. If you don't, the passwords will be purged.
At any point during the session, type "ABORT" to cancel everything.
Turn on or off automatic promotion.
Automatic promotion follows the settings in the configuration document. Follow the instructions there to set up automatic promotion.
"on", "yes" and "true" will turn automatic promotion on.
"off", "no" and "false" will turn it off.
If you don't specify anything, the command will just tell you whether or not automatic promotion is active.
Provides a link to the config page.
The following commands will only work if you are a Controller of TARS. The bot owner picks who the Controllers are.
- ..join channel: Join a channel
- ..leave [channel]: Leave the current channel or a given one
- ..die, ..shutdown, ..kys: Robots dream of electric sheep
- ..reboot: Robots dream of electric sheep and then wake up shortly thereafter
- ..reload: Reload commands only
- ..autojoin [--list] [--add channels] [--remove channels]: View, add to or remove from the autojoin list
.record [start | stop | status] [--output location] [--format format] [--restrict-channel-name]
Record messages sent in the channel and then save them somewhere safe.
If TARS goes offline or is reloaded while recording, the recording will end prematurely. Messages can be manually recovered, except for any missed while offline. You should contact the bot owner with the times of your planned recording to minimise the chances of this happening.
Please note: as of 2019-08-24, --output and --format are not implemented. Recordings will be sent to topia under the ftml format. Just use .record start and .record stop!
- start / stop / status / page
"start" will start the recording and "end" will end it.
"status" will check whether or not TARS is currently recording.
"page" will output the URL to which recordings will be posted if the output location is set to "topia".
- --output, -o
Where to put the output. Must be one of "topia", "here" or "both". Defaults to topia. If "here", TARS will dump the output as a paste link in the current channel. If "topia", TARS will append the output to the Wikidot page specified in the configuration document. If "both", TARS will do both.
You can specify this argument either at the start or the end of recording, but the option you pick at the end will take priority.
- --format, -f
How to format the output. Must be one of "json", "txt", or "ftml" (Foundation Text Markup Language).
Use "txt" if you just need something quick and easy. Use "ftml" if you want to display the output on Wikidot.
If output is "here", defaults to "txt". If output is "topia", defaults to "ftml". If output is "both", changing this argument will change the format for both outputs.
The output will usually contain the channel name. Pass this argument to block it.
Ping everyone in the channel.
If you don't specify a message to send, TARS will just dump a list of everyone's names into the channel.
If you do specify a message, TARS will send a PM to everyone with your message. TARS will also include the name of the person who sent the message as well as the current channel - no need to include them!
The message to include in the ping.
If a message is included, then TARS will PM everyone in the channel. Otherwise, everyone's names will just be dumped into the channel.
Database Query commands
For checking the integrity of the database.
- ..promoted: See all articles that have been promoted already.
- ..dbq users: List all users to console.
- ..dbq table[s] [table]: Prints the specified table to the console (but does not confirm in IRC whether or not said table actually exists), or lists all tables if none is specified.
- ..dbq id [channel|user|article]: Get something's ID. If nothing is specified, gets your own ID.
- ..checkmembers [channel]: Print a list of who's in the given channel, according to the DB.
Gimmicks and Aliases
The following commands are just simple gimmicks or aliases. You can request gimmick commands if you want.
- .random, .ran, .r: Same as
.searchexcept with --random enabled.
- .hugtars, .hug: Hugs!
- .reptile, .rep: rawr xD
- .passcode: Hints for newbies for finding the passcode.
- .isthisreal: Links to a useful repository for newbies who are wondering if SCP is actually real.
- .idea: Generates an SCP idea.