Please give the repository a ⭐️!
Cyber Quincy is the most polished BTD6 discord bot from providing information on towers, hero, rounds, maps, as well as calculating cash from rounds and hero levelling. (and more)
- discord server (join for bot updates and online/offline status)
- invite link
- website
For help, simply use /help
note: all credentials will be in
./1/config.json(you need to create this file yourself), fill in the json accordingly (as per./1/template.json).
-
make a new discord bot in discord dev page, and copy the token into
./1/config.jsonastoken. -
to register slash commands type
node register -
to run type
node server, or to run with sharding runnode index
- this project uses CommonJS modules (no
importorexport, justrequireandmodule.exports) - there is now ESLint for this project - there is an
.eslintrc.jsonlinter file now which should hopefully enforce a somewhat consistent code standard - to use eslint to check for errors run
npx eslint <file or directory>. Many text editors also have integration with eslint as well.
- Much of the data the bot uses is within the
./jsonsfolder - Tower Information are from Extreme Bloonology and their pastebins (Heroes and Towers)
- This bot also uses the Official Ninja Kiwi API
- try to use
camelCase - don't use
varto define variables. JS is weird enough - try not to do too much at once (for pull requests, split it into multiple PRs)
- util functions/classes/modules should go to
./helpers(unless they are specific to only one command) - new data should go into
./jsonsif to be stored locally. Small nuggets of information are usually displayed via the/tagcommand
The bot accepts bloons input from a wide variety of sources, and as a result has many aliases for different towers, heroes, maps, bloons, difficulties, gamemodes, geraldo shop items, etc...
The current system is set up in a way that no two things can have the same alias as each other. This has often caused great anguish among some people wanting aliases like dd or dc to be both aliases of the map and the tower. With the introduction of slash commands, it is now possible to use different options to give context to different input, theoretically making "multi-aliases" work. However, in the past, when text-based input was the only way to call bots, this sort of ambiguity was not acceptable, and the alias system was not built in mind to accept these sorts of ambiguity. As a result, the current alias system still relies on the uniqueness of aliases.
TL;DR: In the past ambiguity was unacceptable and the changes needed to be made to allow "multi-aliases" are a bit too fundamental to just do it
There are three main types of aliases dealt within the code base:
- "Alias Normal Form": this is just
snake_caseforms of the string, e.g.comanche_commander - "Canonical Form": this is generally the default form of aliases. Note that there is a distinction between a tower and a tower upgrade:
heli_pilotrefers to the tower as a whole.heli_pilot#000refers to the base heli pilot.heli_pilot#030represents the downdraft upgrade of the heli pilot.
- "Index Normal Form": this is when every word is capitalized and with spaces instead of underscores, e.g.
Comanche Commander. The special cases for this is thatdruid -> Druid Monkeyandengineer_monkey -> Engineer
The final special case is that Gwendolin is just gwen/Gwen in all three types
For more information, see alias-repository.js