Beancounter Command Listing

Following is a list of all commands currently supported in Beancounter.

Unless otherwise noted, all commands on this page are available in master branch. Releases that introduce a given command will probably be noted when we have releases.

The commands are listed in no particular order.

There are three ways you can give a command to a Beancounter:

For the usage information, angle brackets are used to denote a choice between specific argument values (for example, acl <grant|revoke> means "type either 'acl grant' or 'acl revoke'"); brackets ([]) are used to denote free-form arguments; braces ({}) surround optional arguments (otherwise, arguments are required). No brackets surrounding a value means that you must enter that value verbatim.

Arguments to commands are space-delimited; however, in general, the final argument to any command may contain spaces.

Contents

quit[edit | edit source]

Disconnects the bot from the IRC network. The quit message, if provided, is given to the IRC server as the quit message, otherwise the default of "Tear in salami" is used.

nick[edit | edit source]

Changes the bot's nickname to nickname immediately.

join[edit | edit source]

Instructs the bot to join the channel channel immediately. The bot will message the channel, indicating who asked it to join. The bot will remember the channel to be rejoined on next connect (unless it is kicked or parted from the channel).

part[edit | edit source]

Instructs the bot to part the channel channel immediately. If the command is given in a channel with no arguments, it will part the channel the command was given in. Note that if given in a channel, you still must specify the channel name always if you want the bot to part with a custom message. The part message will always indicate who instructed the bot to part the channel. The bot will forget the channel from the list of channels to be rejoined on next connect (also happens if the bot is kicked from the channel).

say[edit | edit source]

Instructs the bot to send the message to the given user or channel. If the command is given in a channel, the command may only target another channel, and if the first argument doesn't appear to be a valid channel name, the bot will target the channel the command was given in. If you wish to target a user directly (i.e., make the bot send a private message), you must give the command in a private message. When given in private message, the first argument (user or channel to target) is not optional.

act[edit | edit source]

Instructs the bot to act the message (analogous to the /me command in most IRC clients) to the given user or channel. If the command is given in a channel, the command may only target another channel, and if the first argument doesn't appear to be a valid channel name, the bot will target the channel the command was given in. If you wish to target a user directly (i.e., make the bot send a private action), you must give the command in a private message. When given in private message, the first argument (user or channel to target) is not optional.

raw[edit | edit source]

Instructs the bot to pass the raw IRC line exactly as is to the IRC server. Proper usage of this command requires knowledge of the raw IRC protocol. Caution is advised; misuse of this command can cause undefined behavior in the bot.

coin[edit | edit source]

Flips a coin, and reports "heads" or "tails" back to the caller.

dice / roll[edit | edit source]

Rolls N X-sided dice and reports their sum back to the caller. For clarity, you specify the number of dice to roll and how many sides the die have in the format NdX, where X is the number of sides the dice should have and N is how many dice with X sides you want to roll. You can leave off the "Nd" and the bot will assume that you only want to roll one die, with X sides. You can chain multiple of these dice specs together. If there are no arguments, the bot assumes 1d6 (i.e., roll 1 6-sided die). Here are some concrete examples:

Note that if multiple dice are thrown, the bot will only report their total. If you want to see the result of each throw, immediately follow your dice command with the "more" command (see below).

more[edit | edit source]

Shows more detail about the last time the dice command was used - i.e., shows the exact values that were rolled. Use with caution, as the bot might flood you out if you rolled a lot of dice!

slap[edit | edit source]

Instructs the bot to viciously attack the given user. user must be present in the channel the command is given in; if you specify a user that doesn't exist (or give the command in a private message), the bot will slap you! The output of the slap command is always given in the channel it was called in; if called in private message, the response will be in a private message back to you. Authorized users can configure the slap command; see the "cfgslap" command below.

Example output: * Beancounter defenestrates FastLizard4 with a large trout

cfgslap[edit | edit source]

The cfgslap command allows an authorized user to modify the responses given by the slap command.

A slap consists of the following four elements: an action, a modifier, an item, and an item modifier. The bot is guaranteed to always randomly choose both an action and an item from the list; however, for modifiers and item modifiers, it may randomly choose one or choose not to include one.

The slap is constructed in the following format: Beancounter action target modifier withitem

Furthermore, the item may contain format string elements for the item modifier: %s is replaced with the item modifier, and %2$s is replaced with "n" if the item modifier starts with a vowel (useful for "a"/"an"). Here are some example items that demonstrate this: "a%2$s %s minnow", "Donald Trump's %s combover".

"cfgslap add" adds the given what to the appropriate list (actions, modifiers, items, or item modifiers), while "cfgslap remove" removes the given what from the appropriate list (must be an exact match). "cfgslap list" lists all items in the given list.

roulette[edit | edit source]

Play a game of Russian Roulette with the bot. Beancounter hands you a gun; you pick it up, point it at your head, pull the trigger, and....

This command only works if given in a channel. If the bot has ops in the channel, it will kick you if you die. Either way, it reports back the result as a message too.

Beancounter has a variety of guns at its disposal; you can use the "reload" command (see below) to configure the gun. You can also use the "spin" command (see below) to instruct Beancounter to spin the barrel. Be advised, though, that spinning the barrel only delays the inevitable at best, and at worst....

Note that RouletteHandler is per-channel; that is, the gun's state (number of bullets, number of chambers, chamber position, etc.) is remembered for each channel the bot is in individually.

reload[edit | edit source]

Instructs Beancounter to empty then reload the gun for Russian Roulette. By default, Beancounter puts one bullet in a six-chamber gun; however, that can be changed by specifying the bullets and chambers arguments. Note that bullets must always be specified if you want to specify chambers, and that these values persist for the channeluntil the bot is restarted. That is to say, if in a channel you tell the bot to put six bullets in a 20-chamber gun ("reload 6 20") and then tell the bot to put 3 bullets in the gun ("reload 3"), it will still use a 20-chamber gun in response to "reload 3"; further, if after this you call "reload" with no arguments, it will once again put 3 bullets in a 20-chamber gun.

Note that RouletteHandler is per-channel; that is, the gun's state (number of bullets, number of chambers, chamber position, etc.) is remembered for each channel the bot is in individually.

spin[edit | edit source]

Beancounter spins the barrel in its Russian Roulette gun. This may delay the inevitable, but it never prevents it.

Note that RouletteHandler is per-channel; that is, the gun's state (number of bullets, number of chambers, chamber position, etc.) is remembered for each channel the bot is in individually.

poulette[edit | edit source]

You want to play Russian Roulette with Beancounter, but you're drunk, so you accidentally pick up a chicken instead of Beancounter's gun, and pluck a feather instead of pulling the trigger.

myperms[edit | edit source]

Gets the list of permissions you have currently granted to you. The permissions returned by this command are the same permissions noted in this documentation by the "permission needed" lines.

acl[edit | edit source]

acl list[edit | edit source]

If the second argument is "roles", lists the complete mapping of hostmask regexes to the roles they are granted, or if the "available" flag is specified as the third parameter, lists all available roles. If the second argument is "permissions", lists the complete mapping of roles to the permissions each role is granted, or if the "available" flag is specified as the third parameters, lists all permissions the bot has seen used (though note that this list is only populated during permissions checks, so it may not include all available permissions; this documentation is the definitive list of all available permissions).

Unlike the other acl subcommands, "acl list" requires no special permissions to run.

acl grant/revoke/revokeall/delete[edit | edit source]

(TODO: Long-form documentation for this)

rehash[edit | edit source]

Reloads all listeners. Usually only useful when debugging after hotswapping a classfile.

seen[edit | edit source]

Queries the bot to ask when is the last time it saw nickname speak in a channel the bot tracks. Tracked channels include all public channels (i.e., without the "secret" channel mode, usually +s, set) that haven't been explicitly untracked using the "cfgseen" command (see below).

cfgseen[edit | edit source]

cfgseen istracked[edit | edit source]

The "cfgseen istracked" command allows anyone to determine if the channel the command was issued in is tracked for the purposes of the "seen" command. The command will tell you if the channel is listed on the "do not track" list, and/or if it is untracked because it is marked secret (usually channel mode +s). Note that this command does not work in private messages, and will only tell you the status of the channel the command is given in; in this way, the bot protects secret/untracked channels from being exposed.

cfgseen track/notrack/list[edit | edit source]

These commands allow an authorized user to add ("cfgseen notrack") or remove ("cfgseen track") a channel from the "do not track" list for the "seen" command. They also allow an authorized user to get the entire list of untracked channels. The list action is limited to authorized users to protect the privacy of channels on the list; likewise, caution is advised when using these commands in a channel, but they may be used in a channel or in private message. Note that the "cfgseen list" command will not list channels that are untracked because they are marked as secret (channel mode +s usually); it only lists channels added using the "cfgseen notrack" command.

help[edit | edit source]

Shows some basic help text, with a link to this page, the GitHub repository, and some information on the "commands" command (see below).

commands[edit | edit source]

Shows an alphabetical list of commands the bot is aware of. Note that this may not be a complete list; the bot may have other commands and functionalities that are not listed here for a variety of reasons (technical, contextual, etc.).

weather[edit | edit source]

Displays the current weather at the given location. The weather data is provided by Weather Underground. To use this feature on your own Beancounter bot, you'll need to purchase (free tiers are available) a Weather Underground API key (see documentation for the "cfgweather" command below). Location can be almost anything; a city, an airport code, a ZIP code (or other postal code outside the U.S.), or a Weather Underground Personal Weather Station (PWS) identifier. PWD IDs are useful for finding very-local results - for instance, you can go to the Weather Underground website and find the PWS closest to you, then pass its PWS ID (e.g., KCALOSAN205) as the argument to the weather command. The location parameter is optional if you set a default location for yourself using the "setlocation" command (documented below). If the location you provide can't be found in the Weather Underground location database, or if multiple matches are found for a given location, the bot will ask you to clarify.

Note: Retrieving weather data counts against your Weather Underground API limits, one call per command usage that returns weather data. Checking a location against the Location API does not, however. (For example, if a location is not found or is ambiguous, there is no API cost as the bot only queries the Location API, not the actual weather data API.)

userweather[edit | edit source]

Displays the current weather at the location of another IRC user given by nickname. The user must have used the "setlocation" command (see below) to set their default location for the userweather command to work on them. In addition, since this command uses the same nickname fuzzy matching system used by the "slap" command, you can use abbreviations for nickname, but as a consequence, this command must be run in a channel, and the user whose weather you want to query must also be in that channel.

Note: Retrieving weather data counts against your Weather Underground API limits, one call per command usage that returns weather data.

setlocation[edit | edit source]

When the optional location parameter is provided, sets your default location to location. Like with the "weather" command (see above), location can be anything the Weather Underground Location API understands, including city names, airport codes, ZIP codes (and other postal codes outside the U.S.), and Weather Underground Personal Weather Station (PWS) identifiers. Also as with the "weather" command, if the location you provide can't be resolved by the Weather Underground Location API, the bot will ask you to clarify instead of saving your default location choice.

When run without the location parameter, your default location is deleted.

Note: The setlocation command never counts against your Weather Underground API limits, as the Location API is not rate limited.

cfgweather[edit | edit source]

This command is used to configure WeatherHandler, which must be done before you can use the "weather" command.

Before beginning, you should be advised of the following:

By default, the WeatherHandler module is not loaded on bot startup, so the bot will not recognize the "weather", "setlocation", or "cfgweather" commands. To use any of these commands, you must first enable the WeatherHandler by setting the weather.enable option to "true" in your Beancounter startup configuration file. Be advised, though, that enabling WeatherHandler may constitute implicit agreement to the Terms of Service of the Weather Underground API.

Once WeatherHandler is enabled, the "weather" command will still be unavailable as you must complete setup on IRC. To do so, you'll need to use the cfgweather command.

cfgweather show can be used to show the current WeatherHandler configuration, as well as the status of the WeatherHandler rate limiter. To enable the "weather" command, the following information must be provided:

Once you have provided these three configuration values, you can freely enable the "weather" command by running cfgweather enable, and disable it again by running cfgweather disable. If trying to run the enable command produces a "configuration incomplete" error, try using the cfgweather show command to get a configuration dump and see what's missing.

There are other optional configuration values you can change using the cfgweather command:

listchans[edit | edit source]

Returns a list of all channels the bot is currently in. Restricted to authorized users as this command may expose secret/private channels.

cfginvites[edit | edit source]

cfginvites (no arguments)[edit | edit source]

With no arguments, the cfginvites command allows any user to check if the bot will accept invitations to join channels.

cfginvites accept/reject[edit | edit source]

In this form, the cfginvites command allows an authorized user to change whether or not the bot will accept invitations to join a channel. When set to "accept", the bot will automatically join any channel it receives an invite (sent using the /invite IRC command). When set to "reject", the bot will ignore invites. Remember that the bot will remember channels it joins (including by accepting invites), and automatically rejoin them in the future on connect. (Conversely, if the bot is kicked from a channel, it will be removed from the list of channels to automatically rejoin on connect.)

remind[edit | edit source]

This command allows you to send a reminder to another IRC user (to send a reminder to yourself, use the remindme command. By default, the reminder will be delievered as soon as the target user joins or talks in a channel the bot is in. To make the reminder deliver after a time delay, specify a time by including "in: time" before the message but after the nickname. The colon (:) after "in" is important - without the colon, the bot will consider it part of the message. The time delay is given in this format: 1y2d3h4m5s, meaning 1 year, 2 days, 3 hours, 4 minutes, and 5 seconds. All fields of a time specification are optional; for example, "5h" is equivalent to "0y0d5h0m0s". If when a timed reminder is scheduled to be delivered the target nickname is offline, the reminder will be retained until the user joins or talks in a channel the bot is in. Timed reminders will never be delivered before their scheduled delivery time. Reminders will always be delivered in the channel the remind command was given in; if the reminder was scheduled by private message, or the target user is not in that channel, the reminder will be delivered by private message.

Note that if the target nickname is online when the reminder is scheduled, their user@host will be recorded instead of their nickname and will be used for delivery of the reminder - this means that even if they change their nickname, they will still receive the reminder.

remindme[edit | edit source]

This command allows you to schedule a reminder for yourself. It omits the nickname parameter (since it always targets yourself); but otherwise, it functions similarly to the remind command.

cfgquakes[edit | edit source]

cfgquakes get[edit | edit source]

This command allows you to see if the bot is reporting global earthquakes from one of the USGS's realtime earthquake feeds. The channel argument is mandatory in PM, but optional when the command is given in a channel; when the argument is omitted in channel, the command defaults to the command the channel is given in. If reporting is enabled, this command will also indicate which feed is driving the reporting for that channel.

cfgquakes getall/setchan/delchan[edit | edit source]

The cfgquakes getall command allows an authorized user to view a list of all channels that have enabled earthquake reporting with Beancounter, and what feed they are using to drive reporting. This is a privileged command to prevent exposure of private/secret channels to unauthorized users.

The cfgquakes setchan command allows one to enable earthquake reporting in a channel, or change the driving data source to a different feed for a channel that already has earthquake reporting enabled. The first argument is an identifier for one the five USGS feeds the bot supports, in order: all earthquakes, earthquakes magnitude 1.0+, earthquakes magnitude 2.5+, earthquakes magnitude 4.5+, and significant earthquakes. The second argument is an optional channel argument, which is mandatory when the command is used in PM but optional when the command is used in channel; in this case, it defaults to the channel the command is being given in. Note that all feeds except the significant quakes feed can be quite spammy, the "all" and "M1.0" feeds especially so.

Finally, the cfgquakes delchan command allows one to completely disable earthquake reporting in a channel. Its only argument, channel, is the name of the channel to disable reporting in, and is mandatory in PM but optional when the command is given in-channel; in this case, it defaults to the channel the command is being given in. Note that the bot will not remember which feed you were previously using.

For channels that have earthquake reporting enabled, the feeds are checked every five minutes. Feed checks are global for the entire bot; that is, every five minutes, all feeds to be checked are checked and all channels with reporting enabled get updates together, regardless of when reporting was enabled in that channel.

lastquake[edit | edit source]

This command causes the bot to list the most recent earthquake given in the indicated feed. The only argument to the command is the feed to be checked for earthquake data, with the five values representing the five different feeds available. Those feeds are, in order, all earthquakes, earthquakes magnitude 1.0+, earthquakes magnitude 2.5+, earthquakes magnitude 4.5+, and significant earthquakes. This command can be used in PM or any channel, regardless of whether automatic earthquake feed reporting is enabled with the cfgquakes command and independent of any such reporting. Note that the feeds the bot uses are "last day" feeds, so if no applicable events have occurred within the last 24 hours, the command will report no data (this usually only happens with the "significant earthquakes" feed). In addition, note that the bot bases "last earthquake" on the time of the earthquake itself, not the time of any updates issued for the earthquake information by the USGS.

All data is sourced from feeds provided by the United States Geological Survey.

LookOfDisapproval[edit | edit source]

Outputs a look of disapproval (ಠ_ಠ), optionally directed at the given thing.

Lenny[edit | edit source]

Outputs a Lenny face (( ͡° ͜ʖ ͡°)), optionally directed at the given thing.

AngryLenny[edit | edit source]

Outputs an angry Lenny face (( ͠° ͟ʖ ͡°)), optionally directed at the given thing.

LookOfLenny[edit | edit source]

Outputs a Look of Lenny face (( ͡ಠ ʖ̯ ͡ಠ)), optionally directed at the given thing.

TableFLIP[edit | edit source]

Outputs a flipped table, optionally also flipping the specified thing. Example: (╯°□°)╯︵ɹǝʇunoɔuɐǝq

Raise[edit | edit source]

Outputs ヽ༼ຈل͜ຈ༽ノ raise thing ヽ༼ຈل͜ຈ༽ノ; or if no thing is specified, raises dongers instead.

Lower[edit | edit source]

Outputs ┌༼ຈل͜ຈ༽┐ lower thing ┌༼ຈل͜ຈ༽┐; or if no thing is specified, lowers dongers instead.

SmallCaps[edit | edit source]

Outputs the given text in small caps, ʟɪᴋᴇ ᴛʜɪs. If no text is specified, outputs ᴜ ᴡᴏᴛ ᴍ8.

SuperScript[edit | edit source]

Outputs the given text in superscripted text, ˡᶦᵏᵉ ᵗʰᶦˢ. If no text is specified, outputs ˢᵉʳᶦᵒᵘˢ ᵗʳᵒᵘᵇˡᵉ.

SwearToGod[edit | edit source]

Instructs the bot to swear to god that if anyone does something, you will be in serious trouble. If no something is specified, "copy and paste this" is used as the default. Sample output: ヽ༼ຈل͜ຈ༽ノ ᴵ ˢʷᵉᵃʳ ᵗᵒ ᵍᵒᵈ ᶦᶠ ᵃⁿʸ ᵒᶠ ʸᵒᵘ ᵐᵒᵗʰᵉʳʳᶠᵘᶜᵏᵉʳˢ ˢᵒᵐᵉᵗʰᶦⁿᵍ ʸᵒᵘ ʷᶦˡˡ ᵇᵉ ᶦⁿ ˢᵉʳᶦᵒᵘˢ ᵗʳᵒᵘᵇˡᵉ ヽ༼ຈل͜ຈ༽ノ

entrymsg[edit | edit source]

The entrymsg command allows an automatic entry message to be set for a given channel - that is, when set, the bot will automatically regurgitate the specified entry message (as a channel message) to any and all users who join the channel. Entry messages can either be set by channel operators (they must be holding op status actively, not just have the ability to become operators in ChanServ), or by users with the globalEntryMsg ACL permission. Note that in the latter case, the bot will require you to use the --force switch to indicate that you are aware that you're overriding the channel operators.

The entrymsg command on its own tells you if the channel has an entry message set, and if so by whom and when (no special permissions are needed for this). With the --clear switch, the entry message is cleared (any provided message is ignored). If a message is specified and --clear is not, the given message will be set as the entry message.

This command may not be used in private message. It only operates on the channel the command is given in.

lamborghini[edit | edit source]

uh, here in my irc bot, just implemented this, uh, new command here, fun to use up here on LizardIRC

This command outputs a random Tai Lopez (or Tai Lopez-parodying) quote. See http://knowyourmeme.com/memes/here-in-my-garage

fishbot[edit | edit source]

The fishbot command enables or disables the fishb0t module (fish go m00!) in the channel it is used in. This can be set by channel operators (they must be holding op status actively, not just have the ability to become operators in ChanServ), or by users with the globalFishbot ACL permission. Note that in the latter case, the bot will require you to use the --force switch to indicate that you are aware that you're overriding the channel operators.

When used without the on/off flags set, it will report the current status of the fishb0t module - no permissions are needed for this.

This command may not be used in private message. It only operates on the channel the command is given in.

wikipedia[edit | edit source]

Looks up the given article on Wikipedia, and returns a brief summary and a link. Currently also supports interwikis supported by Wikipedia (e.g., one could use the command wikipedia q:Star Trek to look up "Star Trek" on Wikiquote.

shakespeare[edit | edit source]

Retrieves and fires off a Shakespearean insult at the target user (or yourself if you don't specify a person to insult). Supports nickname completion a la the slap command.

Reimplementation of the @insult command from LizardBot.

redditor[edit | edit source]

Retrieves and displays some information about the Reddit user specified by username. Reimplementation of the HAL-9001 (Willie/Sopel) bot command.

cfgwikilinks[edit | edit source]

cfgwikilinks (no arguments)[edit | edit source]

The cfgwikilinks command, when given without arguments, allows one to see if automatic [[wikilink]] expansion is enabled in a channel or not. Of course, one could always just say a wikilink and see if the bot responds to it or not. The next section describes some of the current limitations of automatic wikilink expansion.

cfgwikilinks enable/disable[edit | edit source]

Sets whether automatic [[wikilink]] expansion is enabled or disabled in a given channel. The default state is enabled. Currently, auto-expanded wikilinks are expanded against the English Wikipedia, with any interwiki prefixes checked against the English Wikipedia's interwiki table. Allowing channels to specify a custom "base wiki" is a planned future feacher. To enable or disable automatic wikilink expansion, you must either be an operator in the channel you wish to change the configuration in, or hold the global cfgwikilinks permission.

cfgwikilinks ignore/unignore[edit | edit source]

The "ignore" and "unignore" operations allow authorized users to ignore or unignore a nickname from automatic wikilink expansion. Anyone ignored in this fashion will not have their wikilinks auto-expanded by the bot. Note that this command only affects the automatic wikilink expander, and will not ignore users from using any other bot functionality. The ignore list applies globally in all channels.

cfgwikilinks ignorelist[edit | edit source]

The "ignorelist" command lists all nicknames ignored by the auto wikilink expander. Note that, in addition to being viewable by specifically authorized users, the ignorelist can also be viewed by channel operators.

youtube[edit | edit source]

This command allows one to find information (including the URL) about a YouTube video. The search string can either be a video ID, or text for an actual search through YouTube. The returned information will include the URL, title of the video, duration, comments, likes/dislikes, and uploader.

Note that configuration is required for this command to work. Please see the documentation for the cfgyoutube command below.

cfgyoutube[edit | edit source]

cfgyoutube (no arguments)[edit | edit source]

This command allows a user to check if YouTube commands have been disabled. If they are disabled (which they are by default, since an API key is needed and must be configured to access YouTube's API), the ?youtube command will not function.

cfgyoutube enable/disable/apikey[edit | edit source]

This command allows privileged users to set/change the YouTube API key used by Beancounter, and once the API key is set, to enable or subsequently disable the ?youtube command.

The apikey subcommand takes one optional arugment, which is the full Google API key for use with your YouTube account. See here for more information on obtaining a (free) API key; note that you'll want to use a "Server Key". Note that if you use the apikey subcommand with no API key argument, the API key will be deleted and the ?youtube command disabled.

Once your API key is set, you can use the enable/disable subcommands to enable and disable the ?youtube command.

Note that you should only ever use the apikey subcommand in a private message to avoid exposing your API key to any untrusted parties.

idunknowlol[edit | edit source]

Outputs ¯\_(ツ)_/¯, optionally directed at something. The command can be abbreviated to "idklol" or "idunnolol".

lelelennynnynny[edit | edit source]

( ͡°( ͡° ͜ʖ( ͡° ͜ʖ ͡°)ʖ ͡°) ͡°)

Outputs an entire squadron of lennies (optionally directed at something), when one lenny is Simply Not Enough™. This command can be abbreviated to "lelele", or simply "lel".

morse[edit | edit source]

The morse command enables or disables inline decoding of Morse code that is sent to the channel in the form of dot (.) and hyphen (-) characters. Spaces are used as character separators, and the forward slash (/) is recognized as a word separator. Channel operators can enable or disable the feature for their channels, while users with the globalMorse permission can pass the --force flag to enable or disable the feature in any channel regardless of whether they are an operator.

Note that this command simply controls whether or not the automatic Morse code decoding feature is enabled, and does not perform encoding or decoding of Morse code itself.

View original page on LizardWiki

augmentative