The Riot Games API Discord Bot. This is the bot that helps out with your questions regarding the Riot Games API.
- !ask: Ask a question at the next #office-hours
- !esports: Prints out a list of esports games.
- !help: Prints all the commands
- !lib, !libs, !libraries: Print a list of the public libraries
- !note, !notes: Prints all the notes, or the content of a note if used with a parameter
- !pickem: Prints out information about your pickems.
- !status, !apistatus: Prints the status of the Riot Games API
- !toggle_default_thinking: Changes bottys reaction from the normal thinking emote, to one of the custom ones (or opposite)
- !toggle_react: Decides if botty reacts to your messages
- !update_schema, !updateschema: Loads an updated api url schema
- !uptime: Checks the uptime of botty
- !welcome: Prints out a copy of the welcome message.
- !active_keys, !activekeys: Prints a list of keys that botty have seen, and that are still active
- !ask_for: Ask a question for someone else at the next #office-hours
- !close: Close #office-hours
- !open: Open #office-hours
- !question list: Print the list of questions waiting for #office-hours
- !question remove: Remove a question from the list waiting for #office-hours
- !refresh_thinking: Reloads the thinking emojis
- !restart, !reboot: Restarts Botty.
- !toggle_command: Enables or disables commands (!toggle_command {command})
- CommandController: As the name indicates, this controls the commands and makes sure other API commands have a working listener that can be toggled on or off during runtime by administrators.
- APISchema: Controls the Riot API schema that is used by the API url extension and other modules.
- JoinMessaging: Sends a message on join to new users so that they can get started right away.
- Logger: A simple module that hooks console.log, warning and error so that we get any errors the bot outputs without having to check out the terminal it is running on.
- KeyFinder: Scans messages for keys, and then keeps track of them.
- Techblog: Updates #external-activity with posts on the Tech Blog.
- ApiUrlInterpreter: Scans for API Urls and tries identifying issues. Otherwise, posts what the result of that API call would be.
- VersionChecker: Checks out if League of Legends or DDragon has updated to a new version. If so, posts in #external-activity.
- Info: Saves all kinds of notes and outputs them on request. This is the !note command.
- OfficeHours: Manages Office Hours states, updates availability of Office Hours with a notification to those requested it, and manages questions asked by users outside of Office Hours.
- AutoReact: A small module that reacts to specific messages made by users.
- Uptime: A module that keeps track of uptime.
- ApiStatus: Keeps track of the API status.
- RiotAPILibraries: Can output the Riot API Libraries from the article on the forum via GitHub.
- Esports: Handles the data collection and output for !esports
- Pickem: Handles the data collection and output for !pickem
- First, clone the repository by clicking the green "Clone or download" button, or alternatively, use
git clone git@github.com:Querijn/BottyMcBotface.git
. - I recommend using VS Code, as it has excellent Typescript support. It works fine without. I will explain both how to run this in a regular terminal and VS Code.
- Open the root folder in the terminal. This is the folder that contains the
src
,private
,settings
anddata
folder. You can open VS Code in this folder by typingcode .
(Or alternatively,code <path/to/code>
from anywhere) - Type
npm install
in the terminal. This will install all the packages that this application uses. - While that is running, you can go over to the private folder and open up
shared_settings.json
. This is the settings json that contains all the information that is specific to your running bot. You can put any JSON in here that is also insettings/shared_settings.json
, because the private version will override settings over the global one. Do not commit yourprivate/shared_settings.json
. - The
server
is the Discord Guild/Server that your bot needs to focus on. It will work outside of this context, but it will try to find specific channels for use in here. This requires you to either setup a Discord server that looks like the official one, or to join our own recreation (requires some potential elevated actions): . The id for this server is342988445498474498
. You can get an ID by enabling Developer mode in Discord (User settings > Appearance > Advanced > Developer Mode
) and then rightclick on whatever server you need the ID of. botty.discord.key
needs to be your Discord Bot key. Go to Discord's My Apps and create a bot. if you've already created one, skip to step 10.- Give it a name and a nice icon. Click create.
- On the following page, click
Create a Bot User
. Confirm the following popup. - On this page, click
Reveal Token
underBot
. This will give you your key! It will look something likeNDY1MDcwNTg5NDkzOTAzMzYw.DiIKfg.6tZKdh7rgYQWNZIqsjaogVb56v8
. Put it in the shared_settings.json variable for the discord key. You're already setup to connect, but there are some changes required to make sure you can run the bot correctly. The forum and GitHub settings you can leave the same. - If you're making changes to the
RiotAPILibraries
module, you'll need to change them to your GitHub API password and your username. If you have forum administrator access, you can change your user to the format seen in the settings. Enter the forum password below that. - Then go to the app.ts. This is the entry point for the bot, and also contains every single module used. For simplicity, you can turn off everything but the module you're working on and the
CommandController
. Every command for the modules you've shut down need to be shutdown as well. Note: the Info module is for the!note
commands. It was renamed to note because of a conflict with another bot existing previously. - Run the application with
npm run start
ortslint -p . && tsc -p . && node ./dist/app.js
. The first command does not lint, and the second one does. Checking lint errors is required before committing code, but not required for building.