Fishsticks is a NodeJS script that essentially reacts to events that occur in the CCG Discord. He's got the permissions of a regular staff member and looks like this:
His "playing" text will always carry the help command and the curently running version. This will switch to "ENGM Enabled!" if engineering mode is enabled.
While he is fairly versatile, he's not indestructible. Development has been made in such a fashion as to try and avoid all possible crashes, but things can still happen, like an odd command or an in-code error that development missed. #loveDebuggers.
Some very basic things that need to be understood about Fishsticks is that first, he's a custom designed bot. The code is stored in very few places and is built with close precision to how CCG operates. Parts of his code pull absolute statements, such as channel IDs, where if that ID were to be lost, he'd crash. Second, all of Fishsticks' commands firstly pass through Discord's API and therefore are "sanitized" before being exposed to the bot code; that way things like the message
Oh well, he said "blah" and she said "blip"
Doesn't trigger anything in the code...not that it would, but still.
You can watch this tutorial (kind of dated, but not obsolete).
Ultimate Guide to Fishsticks [~42m]
Fishsticks' entire existence is based on the execution of commands. Fishsticks processes commands into one of two groups; Active and Passive.
Active commands use a prefix, which in CC's and Fishsticks' case is the exclamation mark (!). Active commands are your heavy firepower process commands. Anything from simple funny commands like
!break to hyper complex like
Passive commands are the fun commands so to speak. These are triggered in regular messages without a prefix. Anything you say is subject to the whims of Fishsticks. Chances are, you're reading this to uncover the secrets or whatever of the bot (chances are you will - because there's a lot of stuff in there that no one uses...or likely knows about) because you've encountered him in the Crash-pad or recieved his intro message when you joined the server, or just need a refresher. The most encountered ones are things like greetings such as
hello and even
Fishsticks alone or at the start of a message triggers a reponse.
You'll soon find that when interacting with Fishsticks, majority of his passive commands were brought in as references or jokes - some of the passive commands were put in as submissions by the community.
Fishsticks is packed with command systems that alter the CCG Discord, channel-wise and permissions-wise. Those commands, those power-houses of functions, are subject to a modular system that can be enabled or disabled for testing/functionality. These subroutines are not limited to just active commands but also empower various other systems that run in Fishsticks' background such as the newcomer link screen that scans newcomer messages for links.
Engineering Mode (ENGM) is something that is turned on when something is being tested on Fishsticks. It prevents some commands from being run and disables some subroutines so that testing is not interrupted. Keep in mind that staff and developers can override this mode. ENGM also does not effect the efficency state of the !status report. ENGM changes the text of Fishsticks' "playing text" when enabled so that it is easier to see when it is enabled; it looks like this:
Don't worry about this - seriously. If you have questions, ask Staff.
All of Fishsticks' commands are subject to a very specific syntax. Understanding how Fishsticks parses and reads these commands is a paramount understanding in order to make the most of Fishsticks. It'll also save you a lot of headache.
A command ID is quite simply the root of the command. The very first word/phrase/thing that you type after the prefix.
The command ID for
The command ID for
Parameters are the backbone of active commands. Fishsticks development has made sure that command documentation and syntax are all uniform so that there are no awkward exceptions for how they should be implemented.
In the command ID example above, the command
!tempch [channelName] has what's called a parameter after the ID. Parameters are anything that falls after the command ID. These are delineated typically by spaces in most commands but some require hyphens between parameters. This difference is specific to a command and is spelled out in it's documentation and codex entry.
Some commands have a mixture of required and optional parameters. The full command of
!tempch <maxUsers> [channelName].
<> are optional and do not need to be part of the command.
 parameters are required and the command will fail if you don't enter something proper.
Most commands are also delineated by spaces. Temporary channels use the space as it's delineator like most commands but some use a different delineator like the hypen (
-) because some paramaters require the ability to use spaces. For example;
[channelName]parameter can have spaces because it is the last parameter in the command.
Poll's command comes with a stack of parameters:
!poll -[Question] -[Response1] -[Response2] -<Reponse3> -<Reponse4> -<Reponse5> -<Reponse6> -<Reponse7> -<Reponse8> -<Reponse9>; and they are delineated by hyphens because the question wouldn't work very well if it was just one word - same goes for each response.
Fishsticks processes commands based on the order they come in. When a message is sent to a channel that Fishsticks can read, he processes it as an event. An event is something that triggers when an action occurs; ie: when you click your mouse, the click event fires and your computer reacts to it by activating whatever is beneath your mouse cursor. The same process applies to Fishsticks' systems. These events are listed in more detail on Fishsticks' Handler page.
Put simply, Fishsticks processes all sorts of events that can either have a direct response or not. Typically anything that you as the user will be doing with Fishsticks will respond with a message of some nature because you are interacting with him and that is part of his message handler. These event handlers get pretty complex and will be discussed in better detail in the handler documentation.