BitBot is a Discord bot created for UTDesign Makerspace but able to be forked for use by other makerspaces on GitHub. It can link LDAP and Discord accounts, check the status of and manage 3D printers, display custom UTDesign Makerspace profiles, show snippets with useful information, and more. It is written in Node.js using the library Discord.js, uses MongoDB for storage, is deployed on a private server using Docker, and uses various APIs to interact with external services like 3D printing.
Members can use the /status command to view the status of all 3D printers or a specific print job in the makerspace. The bot will display the status of each printer, including whether it is available for use, in use, offline, or in maintenance. Viewing individual printers shows a picture of the current print job and relevant details, such as the time remaining and the percentage complete.
Members can link their UTDesign Makerspace LDAP account to their personal Discord account. This provides many benefits, from convenient features for tools in the makerspace to a custom profile they can show off.
UTDesign Makerspace profiles can be viewed by anyone using the /profile command with a NetID (UT Dallas username) or Discord account or by right-clicking a user and selecting "View Profile". This displays a custom profile with the user's name, profile picture, member status, and completed training.
Whenever a member with a linked account starts, completes, cancels, or pauses their 3D print, the bot will send a notification to their Discord direct messages. This allows members to keep track of their prints and know when they are done, paused by our print fail detection software, and more.
When a member sends a message that meets a regex pattern (ex. asking when the makerspace is open) or a member uses the /snippet command, the bot will send a preset message created by officers with the answer to the question. This allows members to quickly get answers to common questions and for officers to easily update the bot with new information, saving our team time and effort.