Skip to content

Commit

Permalink
V5.0.0 (#170)
Browse files Browse the repository at this point in the history
* Deployment hc (#42)

* HC snowflake udpate

Updated all the snowflakes needed for bot to work with HC server.

* Adding V3.0.0 (#41) and other V2.. updates!

* Upgrades to startm

Some bug fixes, text improvements and perfomance upgrades for this command.

* PI and Bug Fix for initw

Performance improvements and bug fixes to initw. Hackers cant join the wait list more than once. Wait list is not a local collection, no use of firebase. Embed and other performance improvements.

* PI for initw, stamp and polls

initw, stamp, and polls take optional arguments for the snowflakes of the needed channels. These snowlfakes can be passed from newactivity and make things faster. Also performance improvements on stamp by using collector and filters.

* Snowflake use throughout activity group

All activity group commands now accept optional snowflake channel arguments. newactivity passes these snwoflakes. This will speed up all commands significantly once the server grows.

* Changes for emoji titles

Made some changes to make sure code works with emojis on the front (start) of any channel name made by the bot.

* PI on embeds

Improved embed operations by using api functions and reducing amount of variables.

* PI on discordServices and ask

discordServices checkForRole is not async anymore thanks to changes, also faster. Use of collection instead of array on ask command. Another improvement with initw.

* Collect user id on verify

Adds the user id to firebase object when someone verifies. This will be used for low-tech judging.

* Added custom help command

To make things easier, created a different utility group for admins only, a_utility. Also moved channel creation to its own group.

* Block everyone from mentor

Makes sure the everyone role cant see mentore cave, this is for the guests as well!

* Optional text channel per new mentor role

Makes the creation of the public text channel per new mentor optional, the bot will ask if the admin wants it.

* V3.0.0 (#40)

* Activity category permission change

Added everyone and guest role deny view permissions to all new activitiy categories.

* Channel topics and names with emojis

Added channel topics to all created text channels by the bot. Also added emojis to all channel names created by the bot. Special treat to coffe chat and among us.

* Stamp time increase

Increased the time poeple have to stamp to one minute, before it was at 20 seconds.

* Pin important messages

Pinned important messages with emoji collectors.

* archive command

Added a new archive activity command, it will remove all channels except for the text channel which gets moved to the archive category. This category is created if not found.

* Revert "NC-archive"

* New command -> archive

Will remove all activity channels except for the text channel. It is moved to the archive category. This category is created if not found.

* Created archive command and added to new activity

Archive command will remove all channels except for text, gets moved to archive category. This category is created if not found!

* Removed uncessesary await

discordServices.checkForRole is not async anymore, so removed all unecessary awaits.

* Fixes new naming conventions

Moved the voice and text channel naming convention to discordServices, for it to be easier to edit.

* U workshop ta (#31)

* Automatic message deletion

Bot now automatically deletes messages sent to a list of channels in discordServices after a few seconds. This is then used to keep channels like workshop assistance clear.

* Bug fix and QOL improvements

Small bug fixes and quality of life improvements on the ta functionality.

* More bug fixes

Some bug fixes on archive, newactivity and discordServices.

* More bug fixes and namig change

Changed the name of new voice channels to not use activity name

* Voice channel changes

Made voice channels be:
- public when activity is activity
- private when activity is workshop, among us or coffee chat
- the add voice channel emoji will follow these rules

* Bug fixes and among us improvements

Bug fix for coffee chats, among us emoji reaction will now make all previouse and new voice channels except general channel have a limit of 12 users.

* Mentor upgrade

Add the mentor request a ticket channel to the black list.

* Added TA low tech solution

Added an emoji collector to the information message in the TA channel. This is a one way command, no coming back! Hides the general voice channel and disables the pull in functionality.

* BF-startm

startm was not grabbing already made categories due to the emoji addition. We now look for a name that ends with the special string, no emojis used. Also added topics to channesl created by this command.

* U help and clearchat

They both use the same procedure to get commands to send. clearchat will send the hacker commands for any regular channel.

* U clearchat not remove pinned messages

clearchat has a new boolean argument, true will cause pinned messages to not be deleted, false will just remove all messages.

* Consolidate commands in one group

Moved all start... commands to one new group called a_start_commands. The sponsor boothing command is not there right now, waitng for revamp.

* U new member message

Imrpoved the new member DM by using an embed with fields.

* U help

The help command can now be used out of the guild!

* U stamp collection time

stamp collection and text channels that explain it use a discordServices variable. Added a command to change this value, text apperances will not update unless they are new.

* minor text changes

* QOL and Better mentor support (#34)

Quality of Life improvements to startm and added more mentor per ticket functionality. Once a ticket is taken by a mentor other mentors can join!

* Nc hide unhide (#35)

* NC hide/unhide, added to console, helper function

Added the new hide/unhide command, it has some limitations, can only be used once or twice, depending how the activity starts. Added the command to the console. Changed a helper function to make it more usefull.

* BF remove activity

quick bug fix by adding an await.

* QOL and Better mentor support (#36)

Quality of Life improvements to startm and added more mentor per ticket functionality. Once a ticket is taken by a mentor other mentors can join!

* Bf 3 (#38)

* QOL verify and attend

Use of embeds for verify and attend. Also improved text.

* QOL startm

Text improvements for ticket system.

* U and QOL Permissions

Permissions now work! We use update instead of set permissions so that they hold the category's permissions!

* BF Ticket Permissions

Fixed some bugs with ticket permissions. It all works now!

* U Keep Archive Bottom

We now keep the archive on the very bottom!

* BF startm

Fixed a bug realted to undeclared variable due to previouse PR.

* BF Permission REMOVED HIDE/UNHIDE

The hide /unhide functionality is bringing a lot of issues with permissions and  category locking and unlocking so I have decided that the best option is just to remove it. The code is still present but it is disabled and shouldnt be used!

* BF Passowrd Stamp and Workshop QOL

Bug fixes for password stamp, changes TA assistance one-liner timer to 20 seconds. Embed improvements for polls.

* Bf 3 (#39)

* QOL verify and attend

Use of embeds for verify and attend. Also improved text.

* QOL startm

Text improvements for ticket system.

* U and QOL Permissions

Permissions now work! We use update instead of set permissions so that they hold the category's permissions!

* BF Ticket Permissions

Fixed some bugs with ticket permissions. It all works now!

* U Keep Archive Bottom

We now keep the archive on the very bottom!

* BF startm

Fixed a bug realted to undeclared variable due to previouse PR.

* BF Permission REMOVED HIDE/UNHIDE

The hide /unhide functionality is bringing a lot of issues with permissions and  category locking and unlocking so I have decided that the best option is just to remove it. The code is still present but it is disabled and shouldnt be used!

* BF Passowrd Stamp and Workshop QOL

Bug fixes for password stamp, changes TA assistance one-liner timer to 20 seconds. Embed improvements for polls.

* U ask and QOL team foramtion

A bit better otpimized ask command and text improvements to team formation!

* changed emojis on Ta console, added stamp roles

* QOL Text and BF create channels

Text improvements all around and BF to create channel.

* text change to password-stamp

* BF startm and polls, NC showi

Bug fixes on startm and activity polls. New command to send infomrative message about verify or attend.

Co-authored-by: maggiew7 <maggiewang759@gmail.com>

Co-authored-by: mwang2000 <59301359+mwang2000@users.noreply.github.com>
Co-authored-by: maggiew7 <maggiewang759@gmail.com>

Co-authored-by: mwang2000 <59301359+mwang2000@users.noreply.github.com>
Co-authored-by: maggiew7 <maggiewang759@gmail.com>

* text change from nwhacks to HC

* bug fix? in stamp roles

* fix???

* Bug Fixes

* fix????

* fix!

* Tried to bug fix remove and archive activity

Figured out that the problem is in the assistance channel, that is the one that brings up the errors!

* Text update to use embed

Co-authored-by: mwang2000 <59301359+mwang2000@users.noreply.github.com>
Co-authored-by: maggiew7 <maggiewang759@gmail.com>

* Bf 4 (#43)

* BF and Error handling

Big fixes and text improvements. Added error handling on index.js. Adds logs to discord log channel.

* Timeout Catches

Makes sure all the message awaits that have a timeout have a catch block to deal with the timeout.

* U Logs and starttf

upgrades to verify, attend and add/remove role logs. Bug fixes on team formation.

* Bf 5 (#47)

* QOL and BF for verify and attend

BF for attend not mentionin the user. Added more logs to verify even if they fail.

* QOL team formation

Added a final line to facilitate DMing hackers.

* QOL initw

When using low tech solution, assistance channel gets an update. On every new waitlist hacker, a message is sent to the ta console.

* QOL startm

Added the hacker who submitted the ticket to the ticket and channel message.

* BF index

When members join, some have DMs turned of. This fixes that issue by pinging the user on welcome support and asking them to enable DMs.

* U distribute stamps

Stamp distributio can happen outside activities, for mini activites.

* BF index

Another bug fix for new members without DM from server. They wont get the guest role untill they turn it on. THey will have to react for the bot to check!

* U startm

Added a cancel response to ticket system.

* BF initw

Text bug fix.

* BF starttf

Text bug fix.

* BF and HC announcements

Bug fix on users with server DMs turned off. Added second firebase to listen for announcements!

* raffle function done (#46)

* raffle function done

* BF distribute stamps and raffle

Permissions for both commands are now correct. They can be used anywhere by a staff member.

Co-authored-by: Juan Pablo Garcia <45505790+JPGarCar@users.noreply.github.com>

* BF and better verify/attend information (#65)

Minor bug fixes.
Verify and attend information asserts that mails will be removed as soon as they are sent!

* Custom command class refactoring (#69)

* Custom Command Class

Created the custom command class. It extends the Command class from discord.js-commando. It needs a Client, CommandInfo and CommandPermissionInfo. Tested it with clear chat and it works!

* Custom Command Improvements

Changed customCommand name to PermissionCommand. Added more documentation and checks for required child functions.

* Permission Command use in a-utility

All relevant commands in a_utility now extend the PermissionCommand class.

* PermissionCommand use in utility and verification

Verificaiton commands and the ask command on utility extend the PermissionCommand class.

* PermissionComand use in a_start_commands

All a_start_commands commands extend PermissionCommand.

* PermissionCommand use in a_boothing

All commands in the a_boothing group extend PermissionCommand. These commands use channel name not ID. Will not make a change since this will change with the boothing upgrades.

* BF admin console channel

DiscordServices exports the admin console channel ID, it is used for start-mentor-room.js command.

* Permission Command file name change

Changed the PermissionCommand file name to permission-command.js

* ActivityCommand class

Uncomplete ActivityCommand class declaration. Might not use it so its not complete.

* Prompt class

Created the Prompt class. It contains static varaibles usefull to prompt the user for input. Currently only has one, it prompts for a text message.

* Better stamp role management

DiscordServices now has a Collection with the stamp number as key and stamp role ID as value. Eaiser to use!

* Activity and ActivityManager Creation

Created the Activity class and its manager. The activity represents a discord activity, it and its manager contains common code for all of the commands. They are still not used for the commands.

* BF

Bug fixes for promt and activity manager classes.

* BF activity command and callback implementation of activity class

Bug fixes on activity, finished implementing the activitycommand class and it is implemented on the callback command. It works!

* activity-command activity check

Checks to make sure there is an activity to be used for the command. Calling the command from outside the activity console will result in the command not being called and a warning being sent.

* added number prompt

Added a second static method, it prompts for and returns a number.

* BF on activity, activity command and permission command

small bug fixes and improvements on the activity, activity command and permission command classes.

* Use of OOP for all activity commands

Use of the activity and activityManager classes, as well as the acticityCommand class for all the activity commands.

* It works!

No double activities! Yey!

* Change name (#70)

* updated text to nwHacks

* updated text to nwHacks

* Discord error logs improvements (#72)

* Verify and Attend Improvements

Verify and Attend logs start with VERIFY or ATTEND + SUCCESS or WARNING or ERROR.

* Clear chat improvements

Clear chat starts with CHANNEL CLEAR.

* Unhandled and Uncatched error improvement

Use of message embeds for unhablded and uncatched rejection errors on the logs channel.

* Firebase schema improvements (#71)

* Announcements Update

Announcements are received from the nwHacks2021 doc.

* Verify Firebase Updates

Udpated two helper functions to verify users. One is for hackers, the other is for everyone else. The public verify uses these two. Updated verify command to use this correctly. Hackers are checked from CMS data.

* BF Discord Services

Error text BF and guest role BF.

* Removed Discord data on Firebase

We are not adding isVerified, isAttending or discordID to firebase at the moment. We would have to sign in as admin. We will just use permission to keep people from attending/verifing twice.

* starting and running discord contests works

* BF and Improvements discord-services.js

Minor bug fixes, deleteMessage also checks if deletable, add and remove roles have better documentation. Better team formation colors. sendMessageToMember better documentation.

* BF and improvements to messagePrompt

Minor bug fixes on messages deletion. messagePrompt can have a timeout. Will let the hacker know about the timeout and return false. Better documentation.

* New yesNoPrompt static function

Add a yesNoPrompt static function. It will ask for a yes or no respons and return a boolean.

* Major improvements! and new roles!

Use of inline checks, use of class properties, better helper function documentation. Added specific looking for team or lookign for members roles. They can be created or given by admin. Will be used to tag the other party when new posts are made.

* Update prompt.js

BF on use of inline boolean checks, also added the possibility to cancel the prompt by typing cancel.

* Created team roulette command

The team roulette command auto asigns hackers to teams of 4 as they join the activit. It is currently working perfectly!

* Update discord-services.js

Increased sendMessageToMember time to 15 seconds.

* start, pause, remove functional

* Mentor sponsor transfer (#75)

* Update verification.js

Quick BF, forgot to change some HackCamp refrences.

* Update prompt.js

Added a reactionPrompt static function. It asks the user to react to the message with an emoji and it will return the MessageReaction.

* Create role-transfer.js

The roletransfer command gives users the opportunity to self add or self remove roles.

* Update role-transfer.js

Documentation improvements.

* Update start-mentor-room.js

Better string formating on embeds.

* tweaked functions, added documentation

* added argument and function to print results in an embed, raffle itself works

* Prompt.js improvement

messagePrompt now returns Message or null. This makes coding easier, made the changes on the project to keep it working.

* Update prompt.js

Goes with the previouse commit. Also added a channelPrompt. This prompts the user and returns a text channel.

* Update discord-services.js

deleteMessage improvement.

* Create cave.js

The cave class is a very generic class that hopes to cover mentor sponsor and staff caves. It holds a ticket system role seleciton and other stuff.

* added error checks and documentation

* Update discord-services.js

Better documentation.

* Update prompt.js

Cancel bug fixes and better string UI.

* Cave class completion

The cave class is done and it works! The start mentor room uses the cave class!

* Update start-team-formation.js

Quick updated to ask members to say if they are designers or developers!

* Revamp raffle (#77)

* starting and running discord contests works

* start, pause, remove functional

* tweaked functions, added documentation

* added argument and function to print results in an embed, raffle itself works

* added error checks and documentation

* Discord contests (#76)

* starting and running discord contests works

* start, pause, remove functional

* tweaked functions, added documentation

* removed redundant question from Discord contest

* debugged discord contests and fixed typo in prompt.js

* added hacker notification

* fixed typos

* missed a typo

* now-functional boi (#79)

* functional boi

* removed redundant error messages

* added message tagging hackers after posting info

* refactored attendChannel module export

* Update distribute-stamp.js

BF

* import StartAttend to index.js

* fixed dumb dumb mistake of last commit

* Final fix for start attend!

attend is disabled for server, start attend enables it, it can be called anywhere, the command is always removed anyways.

Co-authored-by: Juan Pablo Garcia <45505790+JPGarCar@users.noreply.github.com>

* made working booth directory (#80)

* made working booth directory

* Update booth-directory.js

Code improvements and announcement message deleted if booth closes.

Co-authored-by: Juan Pablo Garcia <45505790+JPGarCar@users.noreply.github.com>

* Discord contests i (#81)

* Update discord-contests.js

Wording improvement!

* prompt bug fixes; change discord contests from arguments to prompts

* a couple comments

* text changes

* more text changes

* refactored Discord Contests command to use Firebase

* text upgrades

* Update prompt.js

All special prompts make sure the user answers the question with the expected response, mention, emoji, else they ask again. Added role and user prompt.

* Update discord-contests.js

Some code improvements for the command. Use of ternary operations, pormpt functions, better white space use.

* BF for discord-contests.js

BF to get the command working after the changes. Added bot response to user after pause/unpause.

Co-authored-by: Juan Pablo Garcia <45505790+JPGarCar@users.noreply.github.com>

* Misc improvements (#82)

* Update cave.js

Make sure no double emojis can be used.

* Custom Emoji Support

All commands that request emojis can now use custom guild emojis. Had to use emoji.id for identification as there can be duplicate names and to show emoji as text use emoji.toString()

* Update cave.js

Fixed the unicode emojis not having classes. Sucks, we still need to use emoji names and can't use ids.

* Update booth-directory.js

Moved params to be prompts. Emoji changes due to unicode emojis not having ids.

* Update start-attend.js

Moved arg to be prompted.

* Update start-mentor-room.js

Part of the Cave emoji fix.

* Update start-team-formation.js

Use of specific Prompt functions and more time to send completed form.

* Update start-team-roulette.js

UI Improvements.

* Update role-transfer.js

Emoji changes, let user know when added or removed role.

* Role Selector changes

Made some wording changes to change role transfer to role selector.

* Bug Fixes (#84)

Just a ton of bug fixes!

* debugged exceptions

* functionality to check in with hackers after certain time in ticket

* Add readme (#99)

* Added a README file

Added a readme file with in depth feature information plus some other misc information

* Added a creator section

* start new Ticket class with ability to create channels

* Mentor ticket bugs (#102)

* Raffle Bug Fix

Added a end of comment line.

* Restrict One Ticket at a time

Added a collection of users for users who are submitting a ticket. The collector filter will not let users who are in this list to submit a ticket.
Users are added as soon as they enter the collector.

* Remove user from currentlySubmitting list

Forgot to remove the user once they submit the ticket. It is now removed
after the user submits the ticket information.

* Emoji on Ticket Card Fix

Fixed an emoji not showing up properly on the metnor ticket card by calling
the toString() function on the emoji.

* Fix enter ticket permissions

When users entered the ticket, SEND_MESSAGES was not given, and when they
leave the ticket, they loose SEND_MESSAGES. Added SEND_MESSAGES to the
permission variable.

* Ticket Number Fix

Ticket number used for ticket and channel was a command variable. Now we
give each ticketInfo class its own ticket id (ticket number). This id is
used for everything. Changed createTicketChannel helper function to
accept a ticketInfo to use. Very important to have the correct number for
the channel.

* Fix Mentor Cave Add Role bug (#101)

Was using the cave creator ID for the admin console collector. Changed
to use the ID of the user who reacts to the admin console collector.
With this change, we do not need the creator ID for the sendConsoleEmbeds
 function.

* Remove add/remove VoiceChannelsToActivity (#104)

* refactored Ticket object from Cave and added autodelete after mentors leave ticket

* Team roulette improvements (#103)

* Added a sendEmbedToUser helper function

This function needs a user/member, some embed options and if the message
should be deleted. It makes sure the embed info is filled.

* Added an empty string check to sendEmbedToUser

Added an empty string check, if failed an error is thrown.

* Team roulette DMs Changes

All team roulette DMs are now embeds with a longer timer. This will ensure
users know what is going on. Also any succesful message is not deleted.
Uses the new sendEmbedToUser helper function.

* Created the Team classes

The Team class represents a real life team with members. The primary use
of this class at the moment is with the team roulette, but it could be
used for other functions in the future.

* Added addMember function and team leader property

The addMember function will NOT add any dupllicate members and will
automatically detect the first member and make him the team leader.

* More Team functions

Added a remove team member function as well as a team size funciton. The
merge team function returns the team.

* Smarter merge team function

The merge team function will perserve the team with a text channel if
there is any.

* Team new member introduction

Bot sends an introduction to the text channel when new members are added.

* Null Safety

Added some null safety to the class functions when they check for a
text channel.

* Use of Team class for roulette and remove function

The roulette functionality uses the Team class to better organize all
the teams. Furthermore, the use of this class facilitates the removal
of members and will faciliate further changes.

* Documentation fix on sendEmbedToMember

* Team and team member options

Added options for the team leader and team members to leave the team
both before a full team is created and after the team is created. After
every change, the system will try to find a team for the new team size.
Added a isComplete helper and a hasBeenComplete to Team class. Roulette
has some new await reactions.

* Added custom channel and category

Command can be ran anywhwere, it will ask if a channel is needed, if so
then create it, else ask for it. Channel is cleaned and added to the
black list.

* Only available on the admin channel

* Refactor channel creation or prompt

Refactored out the channel prompt and/or creation to a helper funciton.

* Added admin view and Team toString

Admins can request a list of all the teams waiting on the team roulette.
This functionality uses a new toString of the Team class. To request
the list, admins must react to a team roulette console found on the
admin console.

* Add field options to sendEmbedToMember helper

Made this possible with a new typedef FieldInfo, has a title and
description. Function will ask for a list of FieldInfo, iterates and
adds the info as fields to the embed.

* json file for debug settings

* Fixed awaitRection Bug

The awaitRection call had no max, so it was not calling the listener
after the first and only emoji. Added a max of 1 and it works.

* added function to detect inactivity in ticket

* Verify attend improvements (#105)

* Added Email Validation

Using a regex to validate the email. Will warn the user of incorrect use
 of email.

* Added dmOnly check to PermissionCommand

PermissionCommand can also ensure commands are only run on DM channel.
By default this is check is not made.

* PermissionCommand code improvements

Use of truthy checks and in-line object property checks.

* Consider user DMs on deleteMessage

* PermissionCommand dmOnly removes other checks

When a command is dmOnly, all the other checks are aborted.

* Verify and Attend done on DM

Both verify and attend now can only happen on a DM channel with the bot.

* Small bug fix, used old var names

* Start Attend command uses emoji reaction

There is no need to ask for a hacker's email one more time, so the
start attend command sends a message with a reaction collector, hackers
 need to react to attend the event. Only works for hackers that have
 not attended.

* Verify and Attend use lowercase email

* Small bug fix when testing for email verification

* Added a confirmation message and remove reactor (#108)

* Added a confirmation message and remove reactor

When a user sends in a ticket, the bot confirms the ticket with a dm
embed and the user can react to this message to remove the ticket before
 it is opend by a mentor.

* add ticket description to user DM

* Password stamp improvements (#109)

* Generalized wording to accept all activities, not only booths.

* Let hacker sknow about the password requirements

* Documentation improvements for sendMessageToMember

* Use of discordServices helpers to use embeds for DMs

* Better collector filtering with Collection

For the stamp collector, instead of using a list we use a collection.
The collection holds user's IDs and usernames. Any user already in this
collection will not be able to activate the collector.

* Safer command by adding permissions

The command now extends PermissionCommand and it must be called by
staff and only on the admin console. Also prompts the staff for a
channel to send the stamp collector to.

* Remove unecessary checks due to uprgade to PermissionCommand

* Use Prompt class to prompt activity name and password

* Spelling fix

* Bug fix on prompt

* added force delete mentor tickets

* deleteChannel documentation

* Move activity channel add limit to activity class

* Moved change voice channel permission to the activity class

* Finish documentation of helper functions

* Removed voice and text channel conventions from discord services, not needed

* Import clean and stamp collection documentation

* fixed dumb mistake that caused Discord API errors

* fixed dumb mistake that caused Discord API errors

* added opt in/out of garbage collector function, added duplicate checking for cave emotes

* text change

* forgot I had a console log from debugging

* Moved discordServices colors to one color object

All the colors are properties of a color object export of the discordServices file.

* Async bug fix on activity class

* Forgot to save discord services file.

* Moved roles to a roleIDs object

All the important roles are on a roleIDs object that is exported
from discordServices. Removed all but stamp0 exports as they are not
needed.

* Bug fixes and pulled textChannel used for roulette as class variable

* Moved most channels to a channelIDs object. The others will become obsolete soon.

* Spelling fixes

* made changes according to comments and added documentation

* more merging and fixed bug that didn't notify hackers

* Channel creation channel prompt (#117)

* Promts admin for channel to use for channel creation. Will not create it for them.

* Update start channel creation to use new helpers

Updated start channel creation to use Prompts with the update Error
handling. It also uses discordServices send embed to user functions.
Overall the command is shorter and easier to read.

* Prompt cancel functionality (#115)

* Updated documentation for Promt functions to return null if canceled

* Prompt functions throw Error on cancel or timeout

The functions will not return null, they will throw an Error if the
Prompt is canceled or if it times out.

* Cave.js Prompt update

Updated the cave.js file to use the new Error system for prompt.

* Updated password stamp to use new Prompt Errors

* Collapsed all try catch blocks into one

* Updated booth directory to handle Prompt Errors

* Updated start attend to handle Prompt Errors

* Updated start mentor room to handle Prompt Errors

* Updated start mentor room to handle Prompt Errors

* Updated team roulette to handle Prompt Errors

* Update role selector to handle Prompt Errors

* Finaly updates to some stray commands to handle Prompt Errors

* Spelling fix

* Emoji prompt unavailable check (#116)

* functionality to check in with hackers after certain time in ticket

* start new Ticket class with ability to create channels

* refactored Ticket object from Cave and added autodelete after mentors leave ticket

* added function to detect inactivity in ticket

* added force delete mentor tickets

* deleteChannel documentation

* Move activity channel add limit to activity class

* Moved change voice channel permission to the activity class

* Finish documentation of helper functions

* Removed voice and text channel conventions from discord services, not needed

* Import clean and stamp collection documentation

* fixed dumb mistake that caused Discord API errors

* fixed dumb mistake that caused Discord API errors

* added opt in/out of garbage collector function, added duplicate checking for cave emotes

* text change

* forgot I had a console log from debugging

* Moved discordServices colors to one color object

All the colors are properties of a color object export of the discordServices file.

* Async bug fix on activity class

* Forgot to save discord services file.

* Moved roles to a roleIDs object

All the important roles are on a roleIDs object that is exported
from discordServices. Removed all but stamp0 exports as they are not
needed.

* Bug fixes and pulled textChannel used for roulette as class variable

* Moved most channels to a channelIDs object. The others will become obsolete soon.

* Spelling fixes

* Added optional param to reactionPrompt

The optional param is a map, keys are emoji names, values are emojis.
If the user selects an emoji in this map, then the program will
ask the user to try again and re prompt.

* Documentation fix

* Use of new reactionPrompt check on mentor room

* made changes according to comments and added documentation

* more merging and fixed bug that didn't notify hackers

* Channel creation channel prompt (#117)

* Promts admin for channel to use for channel creation. Will not create it for them.

* Update start channel creation to use new helpers

Updated start channel creation to use Prompts with the update Error
handling. It also uses discordServices send embed to user functions.
Overall the command is shorter and easier to read.

* Prompt cancel functionality (#115)

* Updated documentation for Promt functions to return null if canceled

* Prompt functions throw Error on cancel or timeout

The functions will not return null, they will throw an Error if the
Prompt is canceled or if it times out.

* Cave.js Prompt update

Updated the cave.js file to use the new Error system for prompt.

* Updated password stamp to use new Prompt Errors

* Collapsed all try catch blocks into one

* Updated booth directory to handle Prompt Errors

* Updated start attend to handle Prompt Errors

* Updated start mentor room to handle Prompt Errors

* Updated start mentor room to handle Prompt Errors

* Updated team roulette to handle Prompt Errors

* Update role selector to handle Prompt Errors

* Finaly updates to some stray commands to handle Prompt Errors

* Spelling fix

* Added optional param to reactionPrompt

The optional param is a map, keys are emoji names, values are emojis.
If the user selects an emoji in this map, then the program will
ask the user to try again and re prompt.

* Documentation fix

* Use of new reactionPrompt check on mentor room

* Use of reaction prompt unavailable emoji check on mentor cave

Co-authored-by: maggiew7 <maggiewang759@gmail.com>
Co-authored-by: mwang2000 <59301359+mwang2000@users.noreply.github.com>

* quick bug fixes missed from last merge

* more bug fixes

* added function to notify all mentors after ticket is unaccepted for a certain time (#126)

* Refactored start team formation into a class with upgrades (#127)

* Refactored start team formation into a class with upgrades

Refactored the start-team-formation class to move the team formation
logic to a TeamFormation class. This class holds the data needed for the
activity including some static properties like the default colors and
forms. The colors were removed from the discordServices file. The
starttf command can only run on the admin console. It will create the
team formation channels automatically at this point. Can change later.

* Fixed bug with discord services prperty access

* Bug fixes 1 (#131)

* verificaiton bug fix

* role selector spelling fixes

* Edit new member embed to follow new verification process

* start attend blocks messages on attend command

* staff only commands also work for admins

* Standardize command names

Use of '-' between words for command names. All command names and files
have the same name.

* Spelling fixes on channel-creation

* function to return a random hex color

* prompt user for mentor cave role, if none create it

* Remove unused channel IDs from discordServices

* Spelling fixes throughout the entire project

* all workshop functions should work, also patch discord contests exploit

* fixed errors with mentioning users in tickets and inability to re-request

* janky thing to stop team leaders from deleting teams after they form

* reworked DMs to user for ticket requests, disabled deletion after acceptance

* welcome messages for roulette delete after 30s

* Cave and Team roulette bug fixes

Had to add a deleted property to a Team, this will let us know if the
team has been deleted from its activity and thus shouldn't be used.

* Removed extra commented code

* Firebase Services Update for one firestore

Updated firebase services to use only one firestore for all users. Also
created a new attend function to mark users as attended using their
discord ID. Removed unnecessary file properties and improved documentation.

* Channel Creation Fix

Update permissions for the channel creation category to keep all
channels inside it private.

Co-authored-by: maggiew7 <maggiewang759@gmail.com>

* Verification uses emoji (#132)

* Verification uses emoji

When a user joins a guild, they receive a message, message holds a
reaction collector, upon reacting, user will be prompted for email.
Added two helper functions on index.js to clean out the event handler.

* Forgot to deal with prompt cancellation

* Spelling fix

* fixed one typo

* Bug fixes 2 (#137)

* Update remove-voice-channels.js

Bug fix on activity name

* removed firebase use for now

* Bot init improvement (#122)

* Register the attend command in case it is needed

* Removed the showi command as its not needed!

* Initialize Bot command Created with simple functionality

The command asks for:
- the member, staff and admin roles or creates them, makes sure the
 roles have the correct minimum permissions
- asks user if verification will be used and preps the server is true
- asks the user if firebase announcements will be used

The command is hidden and only members with the manage guild
permission can use this command. It should only be used once!

* Refactored parts of the command and added roles to discordServices

* Ask if attendance will be used, moved start attend to verification group

* Ask user if stamps will be used

If stamps will be used, stamp roles are created and recorded. User can
then change the name and color. Stamp0Role export is not used any more,
stamp role collector can be used instead.

* Creates the admin channels

* Ask user for bot support, if will use report and ask commands

* Removed the channel creation channel from discord services

* Register commands correctly

* Added a helper function to send messages to channel with user mention

* Enables attend command not register it

* Bug fix with import

* Bug fix with import

* Bug fixes and correct use of commando commands

Use of try catch blocks to fix bugs with canceled prompts. Use of the
new helper sendMsgToChannel to let user know how things are going.
Correct use of commando set enabled/disabled commands for guild.

* Verification Bug Fix

Verification gives isVerified role to anyone who verified except for staff.
isVerified role has the basic permissions for any member. Also fixed
some spelling bugs and will only hand out stamp 0 if available.

* Bug Fix with Channel IDs

Had to create the channelIDs var and then export it, its used in the file.

* Bug fixes on error msg.

* Bug Fixes and better Bot Response

Fixed a couple of bugs, all prompts and functionality is working. All
parts of the form have a response from the bot so the user knows what
 happened. Small spelling fixes.

* Command Enable Bug Fix

Fixed command enable/disable bug by moving help, unknown and init to an essential group that is protected from being disabled. Issue was with disabled groups, single group commands can't be enabled.

* quick bug fixes missed from last merge

* more bug fixes

* added function to notify all mentors after ticket is unaccepted for a certain time (#126)

* Refactored start team formation into a class with upgrades (#127)

* Refactored start team formation into a class with upgrades

Refactored the start-team-formation class to move the team formation
logic to a TeamFormation class. This class holds the data needed for the
activity including some static properties like the default colors and
forms. The colors were removed from the discordServices file. The
starttf command can only run on the admin console. It will create the
team formation channels automatically at this point. Can change later.

* Fixed bug with discord services prperty access

* Register the attend command in case it is needed

* Removed the showi command as its not needed!

* Initialize Bot command Created with simple functionality

The command asks for:
- the member, staff and admin roles or creates them, makes sure the
 roles have the correct minimum permissions
- asks user if verification will be used and preps the server is true
- asks the user if firebase announcements will be used

The command is hidden and only members with the manage guild
permission can use this command. It should only be used once!

* Refactored parts of the command and added roles to discordServices

* Ask if attendance will be used, moved start attend to verification group

* Ask user if stamps will be used

If stamps will be used, stamp roles are created and recorded. User can
then change the name and color. Stamp0Role export is not used any more,
stamp role collector can be used instead.

* Creates the admin channels

* Ask user for bot support, if will use report and ask commands

* Removed the channel creation channel from discord services

* Register commands correctly

* Added a helper function to send messages to channel with user mention

* Enables attend command not register it

* Bug fix with import

* Bug fix with import

* Bug fixes and correct use of commando commands

Use of try catch blocks to fix bugs with canceled prompts. Use of the
new helper sendMsgToChannel to let user know how things are going.
Correct use of commando set enabled/disabled commands for guild.

* Verification Bug Fix

Verification gives isVerified role to anyone who verified except for staff.
isVerified role has the basic permissions for any member. Also fixed
some spelling bugs and will only hand out stamp 0 if available.

* Bug Fix with Channel IDs

Had to create the channelIDs var and then export it, its used in the file.

* Bug fixes on error msg.

* Bug Fixes and better Bot Response

Fixed a couple of bugs, all prompts and functionality is working. All
parts of the form have a response from the bot so the user knows what
 happened. Small spelling fixes.

* Command Enable Bug Fix

Fixed command enable/disable bug by moving help, unknown and init to an essential group that is protected from being disabled. Issue was with disabled groups, single group commands can't be enabled.

* Bug fixes

* Random colors for stamp roles

* Permission bug fix with welcome channel

* Bug fixes 1 (#131)

* verificaiton bug fix

* role selector spelling fixes

* Edit new member embed to follow new verification process

* start attend blocks messages on attend command

* staff only commands also work for admins

* Standardize command names

Use of '-' between words for command names. All command names and files
have the same name.

* Spelling fixes on channel-creation

* function to return a random hex color

* prompt user for mentor cave role, if none create it

* Remove unused channel IDs from discordServices

* Spelling fixes throughout the entire project

* all workshop functions should work, also patch discord contests exploit

* fixed errors with mentioning users in tickets and inability to re-request

* janky thing to stop team leaders from deleting teams after they form

* reworked DMs to user for ticket requests, disabled deletion after acceptance

* welcome messages for roulette delete after 30s

* Cave and Team roulette bug fixes

Had to add a deleted property to a Team, this will let us know if the
team has been deleted from its activity and thus shouldn't be used.

* Removed extra commented code

* Firebase Services Update for one firestore

Updated firebase services to use only one firestore for all users. Also
created a new attend function to mark users as attended using their
discord ID. Removed unnecessary file properties and improved documentation.

* Channel Creation Fix

Update permissions for the channel creation category to keep all
channels inside it private.

Co-authored-by: maggiew7 <maggiewang759@gmail.com>

* Verification uses emoji (#132)

* Verification uses emoji

When a user joins a guild, they receive a message, message holds a
reaction collector, upon reacting, user will be prompted for email.
Added two helper functions on index.js to clean out the event handler.

* Forgot to deal with prompt cancellation

* Spelling fix

* Register the attend command in case it is needed

* Removed the showi command as its not needed!

* Initialize Bot command Created with simple functionality

The command asks for:
- the member, staff and admin roles or creates them, makes sure the
 roles have the correct minimum permissions
- asks user if verification will be used and preps the server is true
- asks the user if firebase announcements will be used

The command is hidden and only members with the manage guild
permission can use this command. It should only be used once!

* Refactored parts of the command and added roles to discordServices

* Ask if attendance will be used, moved start attend to verification group

* Ask user if stamps will be used

If stamps will be used, stamp roles are created and recorded. User can
then change the name and color. Stamp0Role export is not used any more,
stamp role collector can be used instead.

* Creates the admin channels

* Ask user for bot support, if will use report and ask commands

* Register commands correctly

* Added a helper function to send messages to channel with user mention

* Enables attend command not register it

* Bug fix with import

* Bug fix with import

* Bug fixes and correct use of commando commands

Use of try catch blocks to fix bugs with canceled prompts. Use of the
new helper sendMsgToChannel to let user know how things are going.
Correct use of commando set enabled/disabled commands for guild.

* Verification Bug Fix

Verification gives isVerified role to anyone who verified except for staff.
isVerified role has the basic permissions for any member. Also fixed
some spelling bugs and will only hand out stamp 0 if available.

* Bug Fix with Channel IDs

Had to create the channelIDs var and then export it, its used in the file.

* Bug fixes on error msg.

* Bug Fixes and better Bot Response

Fixed a couple of bugs, all prompts and functionality is working. All
parts of the form have a response from the bot so the user knows what
 happened. Small spelling fixes.

* Command Enable Bug Fix

Fixed command enable/disable bug by moving help, unknown and init to an essential group that is protected from being disabled. Issue was with disabled groups, single group commands can't be enabled.

* Initialize Bot command Created with simple functionality

The command asks for:
- the member, staff and admin roles or creates them, makes sure the
 roles have the correct minimum permissions
- asks user if verification will be used and preps the server is true
- asks the user if firebase announcements will be used

The command is hidden and only members with the manage guild
permission can use this command. It should only be used once!

* Refactored parts of the command and added roles to discordServices

* Ask if attendance will be used, moved start attend to verification group

* Ask user if stamps will be used

If stamps will be used, stamp roles are created and recorded. User can
then change the name and color. Stamp0Role export is not used any more,
stamp role collector can be used instead.

* Creates the admin channels

* Ask user for bot support, if will use report and ask commands

* Register commands correctly

* Bug fixes and correct use of commando commands

Use of try catch blocks to fix bugs with canceled prompts. Use of the
new helper sendMsgToChannel to let user know how things are going.
Correct use of commando set enabled/disabled commands for guild.

* Bug fixes on error msg.

* Bug Fixes and better Bot Response

Fixed a couple of bugs, all prompts and functionality is working. All
parts of the form have a response from the bot so the user knows what
 happened. Small spelling fixes.

* Command Enable Bug Fix

Fixed command enable/disable bug by moving help, unknown and init to an essential group that is protected from being disabled. Issue was with disabled groups, single group commands can't be enabled.

* Bug fixes

* Random colors for stamp roles

* Permission bug fix with welcome channel

* Changed category perms to use everyone role, staff and cave role only

* Bug fix, add everyone role to discordservices

* Changed the role logistics

On all guilds, the @everyone role will have no permissions.
All guilds will also have a @member role with the general view, send,
history and voice permissions.
When verify is on, the @guest role is used as a middle ground before
one gets the @member role. If verification is off, new members get
@member immediately!
All other roles like hacker, mentor, etc go below member and will not
have guild perms, only local perms for categories or channels.
Staff and admin have their own roles with permissions.

* Edit verification process to account for verification off state

* Fixed all instances of attendeeRole in case its not used

* Fixed all isntances of mentor and sponsor role in case its not used

* index.js bug fix correct firebase function

* use of JSON file for automatic init bot command

Added a boolean isDev to the init-bot command. This will load the
bto data from a JSON file for the test server. This will increase the
development cycle when testing the bot.

* PermissionCommand class bug fix with new discordServices

Commands are constructed when they are loaded, not every time the are
called. This caused the permissions to use the discordServices file
before it is populated and led to wrong permissions. Now we use
constants that are then used to grab the correct role or channel from
discordServices. This will also make it easier to use the BotGuild class
in the future.

Co-authored-by: maggiew7 <maggiewang759@gmail.com>
Co-authored-by: mwang2000 <59301359+mwang2000@users.noreply.github.com>

* Bug Fixes for last PR

Found a few important bugs that are fixed with this merge.

* self-care reminders feature initialization

* Create LICENSE

Added a license for open source but users can't sell the program or use this code to then sell or charge money for its use.

* some rearrangements and cleanups

* edited prompts to accept multiple items, updated calls to these prompts

* fixed bug by putting brackets around each await for a prompt that takes multiple items

* changed messagePrompt so that it doesn't try to delete DM message

* set to reminders collection

* Firebase admin sdk (#149)

* Bug Fixes for last PR

Found a few important bugs that are fixed with this merge.

* Use of the admin SDK for full access

* Removed uncessessary config const

* split verify to 2 separate verifications for Learn and cmd-f

* text changes to welcome DM, discord contest bug fix

* reworked attend into second verification round, updated permissions for activities

* replaced deprecated hackerRole with memberRole

* added ability to verify mentors/sponsors/staff after Learn ends

* Fixed Review Comments

Remove the messages before the cancel check for messagePrompt. Also
only removes the msg if its not in a DM. Prompts the user when the
numberPrompt failed due to wrong inputs.

* Use of object for Prompt information

All prompts use the same data, prompt string, channel and user Id. So
all prompts now have as first param an object of type PromptInfo that
holds the prompt string, channel and userId.

Also from this point onward we use userId not userID!!

* Bug fix empty channel/role/mention

It would check the return of the message properties to null, but an
empty collection would be returned and so that check was useless. It
now checks to see if there is an element by grabbing the first one, if
this is not the case it asks the user to try again.

* Emergency big fix with merge bugs

* update prompt, give everyone memberRole

* Manual verification (#153)

* added manual verification command

* added functions to check for emails with an email or name

* fixed error referencing db

* fixed bugs, refined search algorithm for similar emails

* tweaked small features of manual-verify

* fixed wrong prompt return value

* fixed the major bug, added function to add document for each manually verified member

* Use of method to get newRole Array

* Added easier var names and better prompt use

Co-authored-by: Juan Pablo Garcia <45505790+JPGarCar@users.noreply.github.com>

* Update prompts to use new syntax, added helpful vars

* Improved JSDoc return values for role/member/channel prompts

* Tag the given role when seding the reminders

* Initial pronouns selector (#147)

* initial pronouns feature

* bug fixes

* cleanup

Co-authored-by: maggiew7 <maggiewang759@gmail.com>

* Fixed prompt error bug

Prompt can return two types of errors, one called Timeout or one called
Cancel, some situations might need different actions. Also only one
error is sent, not two.

* Added unified verification function

* Unified verification

DiscordServices has a verificationRoles collection with the type and
role pairs that users could verify for. When a user verifies with email,
 the program will verify all types available to that user. The user
 will be notified of what he was verified for. BotGuild will add the
 ability to add pairs to the collection, right now it is hard coded.

* Moved verification to its own class

* Fixed !verify command

!verify command asks for the guild ID, given that the bot can grab the
correct guild to verify the user to. Uses the new unified verification
system with the Verification.verify() function.

* Added guild ID check and moved role check up

* Attendance abstraction and !attend fix

Attendance is handled by Verification.attend() and the !attend command
works by following the same logic as !verify, we ask the user for the
guild ID.

* Use of Verification.attend() for start-attend command

* Code cleanup on index and firebase-services

* Bug fixes, verify/attend guildId type, and verification method signature

* Manual Verification use of Unified Verification

Manual Verification will prompt for the types, given the available
types. Will then create a firebase user with the data and types. Bot
will then verify the user. All input is tested.

* Abstracted email validator to discordServices, verify() throws error if invalid email

* Removed email from !attend command as its not needed.

* Bug fix on addUserData() wrong var name

* Squashed commit of the following:

commit 56187f232901f1ceaa2e7675b1305641fe39a9f7
Author: Juan Pablo Garcia <45505790+JPGarCar@users.noreply.github.com>
Date:   Fri Feb 19 16:25:17 2021 -0800

    Bug fix on addUserData() wrong var name

commit 775bd209deaf56a13f08825758595f6b0eff183e
Author: Juan Pablo Garcia <45505790+JPGarCar@users.noreply.github.com>
Date:   Fri Feb 19 16:23:37 2021 -0800

    Removed email from !attend command as its not needed.

commit d449f7d34af31970d5cc64ee728c42f904ca4d23
Author: Juan Pablo Garcia <45505790+JPGarCar@users.noreply.github.com>
Date:   Fri Feb 19 16:22:40 2021 -0800

    Abstracted email validator to discordServices, verify() throws error if invalid email

commit 8faa48f1f7ba860632233eedf8bbb2f370e05640
Author: Juan Pablo Garcia <45505790+JPGarCar@users.noreply.github.com>
Date:   Fri Feb 19 16:09:42 2021 -0800

    Manual Verification use of Unified Verification

    Manual Verification will prompt for the types, given the available
    types. Will then create a firebase user with the data and types. Bot
    will then verify the user. All input is tested.

commit 02d83166439f186a23904bae89c8750ada22d579
Merge: bab1e53 ee79222
Author: Juan Pablo Garcia <45505790+JPGarCar@users.noreply.github.com>
Date:   Fri Feb 19 15:48:03 2021 -0800

    merge Fix

commit bab1e53fbf0cefbd6a4c8a6317526f99befda083
Author: Juan Pablo Garcia <45505790+JPGarCar@users.noreply.github.com>
Date:   Fri Feb 19 15:45:06 2021 -0800

    Bug fixes, verify/attend guildId type, and verification method signature

commit 5821b945d9ba5222966cc2448703168599667e10
Author: Juan Pablo Garcia <45505790+JPGarCar@users.noreply.github.com>
Date:   Fri Feb 19 15:43:20 2021 -0800

    Code cleanup on index and firebase-services

commit 517b5d6466ed0869b4d59a2193c6a7db7de461f4
Author: Juan Pablo Garcia <45505790+JPGarCar@users.noreply.github.com>
Date:   Fri Feb 19 15:39:56 2021 -0800

    Use of Verification.attend() for start-attend command

commit 324bcdeb4aa2c042ba0f33f266e79d50e9db4366
Author: Juan Pablo Garcia <45505790+JPGarCar@users.noreply.github.com>
Date:   Fri Feb 19 15:38:05 2021 -0800

    Attendance abstraction and !attend fix

    Attendance is handled by Verification.attend() and the !attend command
    works by following the same logic as !verify, we ask the user for the
    guild ID.

commit be2754b77a398247089445e7648f0909b202e006
Author: Juan Pablo Garcia <45505790+JPGarCar@users.noreply.github.com>
Date:   Fri Feb 19 15:37:53 2021 -0800

    Added guild ID check and moved role check up

commit b0a642e2e92ce09ab09c03836a1de79a7396b218
Author: Juan Pablo Garcia <45505790+JPGarCar@users.noreply.github.com>
Date:   Fri Feb 19 15:13:48 2021 -0800

    Fixed !verify command

    !verify command asks for the guild ID, given that the bot can grab the
    correct guild to verify the user to. Uses the new unified verification
    system with the Verification.verify() function.

commit 9d11835a9397eb1ae54ce5c5d32d0aaeb2777894
Author: Juan Pablo Garcia <45505790+JPGarCar@users.noreply.github.com>
Date:   Fri Feb 19 15:08:35 2021 -0800

    Moved verification to its own class

commit 9e93abc394937d5a56cbf4c5345c6d3471482ae7
Author: Juan Pablo Garcia <45505790+JPGarCar@users.noreply.github.com>
Date:   Fri Feb 19 14:59:59 2021 -0800

    Unified verification

    DiscordServices has a verificationRoles collection with the type and
    role pairs that users could verify for. When a user verifies with email,
     the program will verify all types available to that user. The user
     will be notified of what he was verified for. BotGuild will add the
     ability to add pairs to the collection, right now it is hard coded.

commit c2f3e7ac3e3f2333e4238b1edeaa31139751c86f
Author: Juan Pablo Garcia <45505790+JPGarCar@users.noreply.github.com>
Date:   Fri Feb 19 14:59:39 2021 -0800

    Added unified verification function

commit e357d8dd24a0946180abeefbf9d7ba80bbfd5674
Author: Juan Pablo Garcia <45505790+JPGarCar@users.noreply.github.com>
Date:   Fri Feb 19 14:57:12 2021 -0800

    Fixed prompt error bug

    Prompt can return two types of errors, one called Timeout or one called
    Cancel, some situations might need different actions. Also only one
    error is sent, not two.

commit 707ffcf2a4a8291db57bb19f1717e92409cae396
Author: maggiew7 <maggiewang759@gmail.com>
Date:   Thu Feb 18 22:30:56 2021 -0800

    update prompt, give everyone memberRole

commit 80fe3d36a5427490348b044432647af082ca1e5b
Merge: 4ef3f7f ac41a05
Author: maggiew7 <maggiewang759@gmail.com>
Date:   Thu Feb 18 21:32:40 2021 -0800

    merge

commit 4ef3f7f3f50219b75c2f419b315f137dec26631b
Author: maggiew7 <maggiewang759@gmail.com>
Date:   Thu Feb 18 01:55:46 2021 -0800

    added ability to verify mentors/sponsors/staff after Learn ends

commit e5143fd11568f67253d19facea18d76f46dd3f3a
Author: maggiew7 <maggiewang759@gmail.com>
Date:   Wed Feb 17 23:46:37 2021 -0800

    replaced deprecated hackerRole with memberRole

commit 3751ddd456db0a22adae8cd4ef41a61ed2f9b6a2
Author: maggiew7 <maggiewang759@gmail.com>
Date:   Wed Feb 17 23:43:00 2021 -0800

    reworked attend into second verification round, updated permissions for activities

commit 2bde633ab731dad45b6b04f1862ae27967a207c1
Author: maggiew7 <maggiewang759@gmail.com>
Date:   Wed Feb 17 21:28:45 2021 -0800

    text changes to welcome DM, discord contest bug fix

commit ebc7af6348b1d63ce6cd9af246cf30cd662f5e36
Merge: 8707dce 991a50b
Author: maggiew7 <maggiewang759@gmail.com>
Date:   Wed Feb 17 20:46:52 2021 -0800

    Merge branch 'develop' of https://github.com/JPGarCar/nwPlus_discord_bot into cmd-fVerifications

commit 8707dced6f9d4858bbb75653e2b6d8e921eb8a07
Author: maggiew7 <maggiewang759@gmail.com>
Date:   Wed Feb 17 20:46:02 2021 -0800

    split verify to 2 separate verifications for Learn and cmd-f

* Botguild class creation (#152)

* Create bot-guild.js

Created the class with a constructor.

* Added minimum information setup function and static admin channel creation

* Added the verificaiton setup function. Fixed permission bug.

* Added the attendance setup function.

* Added the announcement setup function, not complete, need to add firebase code.

* Added the stamp setup function, creates stamps role for us!

* Added the report setup function.

* Async bug fixes

* Added the ask command setup function

* Added group enable after setup success

* Use of BotGuild class in init-bot commands

The init-bot command uses the BotGuild class instead of discordServices.
Added the ability to use pre made stamps and verification channels for
better use with saved data. Fixed some async bugs.

* Update prompt.js

Made optional params optional on JSDoc

* Update report.js

Bug fix due to async error.

* Update dev_config.json

Updated to use new role and channel IDs.

* Install Mongo and Mongoose

* Create botGuildDBObject.js

Created the BotGuild schema and Model for mongoose.

* Create mongoUtil.js

Created module to connect to mongodb and mongoose.

* Update index.js

Fixed but log errors, re-arranged imports and cleaned out firebase calls.

* Update index.js

Fixed but log errors and cleaned out imports and firebase calls.

* Update bot-guild.js

Removed properties, changed role ID to be string, fixed async bugs, removed guildID param, fixed MessageEmbed import error, moved permissions to be static params.

* Update init-bot.js

Async fixes and use of Mongoose BotGuild model!

* Use of Mongoose Object instead of DiscordServices

Changed all discordServices RoleIDs usage with mongoose.

* Update init-bot.js

Checks if botGuild is complete and returns if that is the case. Will set isSetUpComplete to true after using json data.

* Update init-bot.js

Give the user setting up the bot the admin role after its creation.

* Update index.js

Clean up on message action and fix bug with it being true always. Use of botGuild to find blacklist.

* Update index.js

Use of botGuild for verification and new member greeting.

* Update package-lock.json

Updated mongodb package version.

* Update discord-services.js

Removed all the properties that are not used any more with the introduction of botGuild. Changed the use of such parameters in the functions with botGuild calls.

* Update botGuildDBObject.js

Spelling fix with channelIDs property name.

* Update activity-command.js

Activity command passes the botGuild to its activityCommand() function for commands to use.

* Activity Commands Update use of botGuild

Updated all the ActivityCommand commands to accept the botGuild as its first parameter for them to be usable. Removed the use of discordServices properties and added the use of botGuild.

* Update activity.j…
  • Loading branch information
5 people authored Feb 26, 2021
1 parent da85051 commit ee3ddb2
Show file tree
Hide file tree
Showing 86 changed files with 8,144 additions and 2,950 deletions.
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
.env
node_modules/
node_modules/
logs/
Binary file removed .vs/Discord Bot For nwPlus/v16/.suo
Binary file not shown.
3 changes: 0 additions & 3 deletions .vs/ProjectSettings.json

This file was deleted.

9 changes: 0 additions & 9 deletions .vs/VSWorkspaceState.json

This file was deleted.

Binary file removed .vs/slnx.sqlite
Binary file not shown.
17 changes: 17 additions & 0 deletions .vscode/launch.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "pwa-node",
"request": "launch",
"name": "Launch Program",
"skipFiles": [
"<node_internals>/**"
],
"program": "${workspaceFolder}\\index.js"
}
]
}
17 changes: 17 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"cSpell.words": [
"'s",
"Bot",
"Bot\\'s",
"COVID",
"Hackathons",
"boothing",
"deletable",
"firestore",
"hacakthons",
"hackathon",
"nwhacks",
"unhide",
"waitlist"
]
}
697 changes: 697 additions & 0 deletions LICENSE

Large diffs are not rendered by default.

112 changes: 112 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
# Hackathon Discord Bot (HackaBot)

Previously known as nwPlus Discord Bot, HackaBot is a Discord bot to support small and
medium hackathons run on the Discord platform for free.

## How does HackaBot support hackathon teams and events?
HackaBot brings a lot of features that would traditionally happen in person at hacakthons all over the word to the Discord platform.

All features listed below are unique and requires an admin to start them. All features are highly customizable, from the emojis used to the text sent.

Most features rely on emoji reactions, custom emojis can be used as well!

### Mentor Ticket System (WIP)
The mentor ticket system or more generally the ticketing system of HackaBot is an advanced ticketing system for a set of users to inquire by the use of tickets, and another set of users can respond to such tickets both via text or voice.

The ticket system supports general tickets as well as sub-topic tickets (more detailed tickets intended for only a sub-section of the support team).

The system also has a opt-in/opt-out system for the support team to select what sub-topic they want to be a part of, and admins can always add sub-topics as they see the need for them.

When opening a ticket:
- Users can add other users (team members) to be part of the ticket
- Can select a general ticket or a sub-topic ticket
- Will need to write a short description of their problem
- Will receive a DM with the ticket information as soon as it is submitted

When a ticket is submitted:
- Support staff can see the ticket information (description, people involved, sub-topic)
- Can start the help process with a click of a button (a category with a voice and text channel is created)
- Other support staff can always join a ticket, even if someone else is already helping
- Support staff can leave the ticket at any time with the click of a button
- As soon as everyone leaves the ticket, the ticket category and channels are destroyed

Things to come:
- Automatic ticket trash collector, Discord has a 500 channel limit, it is imperative old tickets get destroyed or the server could reach the limit very fast

### Team Formation
Team formation is always a huge part of any hackathon, traditionally, staff hold team formation mini-events for hackers to try and form teams. However, with COVID-19 and the transition to discord, the bot brings two unique alternatives.

#### Team Formation Catalog
The team formation catalog system works by posting information of teams looking for members, or members looking for a team on a specific channel, and the letting users DM those teams or members they are interested on working with.

1. Team captain or user looking for a team start the process with a click of a button (emoji)
2. Bot DMs instructions and the user sends information via DM
3. Bot posts team or member information on the channel catalog (channel is view only!)
4. Users can read the available members or teams and DM the user who "posted" the information
5. As soon as a person finds a team or a member to join their team, they can eliminate their "post" with a click of a button

As an added incentive for people to reach out to others, when someone joins the system either as a team looking for members, or as a member looking for a team, they will get notified every time a new counterpart is posted. For example, a user looking for a team will be notified of every new team looking for a member. This stops when they remove their information post.

#### Team Formation Roulette (WIP)
Team formation roulette is a more direct approach to team formation. Users join the queue as solos or teams of up to three (currently hard capped to create groups of 4, will change later). As people join the bot tries to create groups of 4 as efficiently as possible.

As this feature is a WIP, more information will be added once its production is complete.

### Verify and Attend
Keeping your Discord server is very important, specially if your event is closed to only those hackers that were accepted. The bot gives you two useful commands to keep your server safe.

Members call ``!verify theiremail@gmail.com`` or ``!attend theiremail@gmail.com`` and if the email is found on a firestore db, then they "gain access" by receiving a higher permission role. Emails are always kept private, they are immediately removed from the channel.

We are working on changing how this works to use a local or free db, and make it easy for admins to add emails, possibly from Discord.

### Role selector
Roles are an integral part of a well functioning Discord server. Sometimes it is best to let users select the roles they want to have, the role selector lets you do that with ease.

Admins can start a role selector on any text channel. Admins can then add new roles to the role selector for users to use. As an admin you can select what emojis to use, what roles to give, and what text to put on the role selector message.

### Report
Keeping your server safe is always hard, specially if your server is very big. With the ``!report`` command, any users can report bad behavior anonymously via DM. The reports get sent to a Admin only text channel.

### Threads
Many hackathons are transitioning from Slack to Discord. The one thing we love about Slack is the thread functionality. HackaBot brings this functionality to Discord! Users can ask questions with the ``!ask`` command and other users can the respond to the question by clicking an emoji.

### Clear Chat
Sometimes as an Admin you want to delete an entire text channel, well HackaBot has a ``!clear-chat`` command that will delete 100 messages from the text channel. You can let the bot know if you want to keep any pinned messages.

### Channel Creation (WIP)
Channel creation gives users the ability to create private voice or text channels for them to use with their team or group of friends. With a click of a button, the bot starts asking the user questions about what type of channel they want, the name of the channel, and who has access to this channel.

At the moment we do not recommend the use of this command with big events. Discord has a 50 channel limit per category so the channel creation category can get filled up very fast!

### E-Room Directory
Sometimes you need to use other systems to connect users, for example zoom or microsoft teams. If this is the case, E-Room Directory gives you the ability to add links for such rooms and you or a specified role can open and close such rooms. The different states have different message colors and when opened, a role can be notified.

This is commonly used for boothing when it happens over zoom rooms. When sponsor staff are on the room, they open the room and hackers get notified of the change.

### Activities and Workshops (WIP)
The bot has an extensive activity and workshop feature. More information will be added after an extensive review of the features.

## Technology Used
- Discord.js
- Node.js
- JavaScript
- Firebase Firestore

## History
This bot started as a personal project to be used at nwHacks 2021. However, after seeing all the features this bot could bring to other events, we decided to also use it for HackCamp 2020 and other nwPlus events.

After receiving a lot of support from hackers and mentors, @Maggie and I decided to make the code open source and work hard to make this bot accessible to small and medium hacakthons.

## Development
The bot is currently in development, we are constantly adding new features and improving current ones. For the next week or two we will stop work on any new features and concentrate on fixing all bugs!

## Open Source
### Need new features or found a bug?
Let us know by filing a ticket! We are always working on improving this bot to make it the best it can be!

### Contribute

## Creators
[JP Garcia](https://github.com/JPGarCar)

[Maggie Wang](https://github.com/mwang2000)
27 changes: 16 additions & 11 deletions classes/activity-command.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ const PermissionCommand = require('./permission-command');
const discordServices = require('../discord-services');
const Activity = require('./activity');
const { Message } = require('discord.js');
const BotGuildModel = require('./bot-guild');

/**
* The ActivityCommand class is a special class used for activity commands. It extends
Expand All @@ -20,42 +21,46 @@ class ActivityCommand extends PermissionCommand {
constructor(client, info){
super(client, info,
{
roleID: discordServices.staffRole,
roleMessage: 'You do not have permision for this command, only staff can use it!',
channelID: discordServices.adminConsoleChannel,
role: PermissionCommand.FLAGS.STAFF_ROLE,
roleMessage: 'You do not have permission for this command, only staff can use it!',
channel: PermissionCommand.FLAGS.ADMIN_CONSOLE,
channelMessage: 'This command can only be used in the admin console!',
}
);
}

/**
* Asked by our parent PermissionCommand, will contain the code specific to acticity commands.
* Asked by our parent PermissionCommand, will contain the code specific to activity commands.
*/
runCommand(message, args, fromPattern, result) {
// we dont want this command to be available outside the activity console
this.runActivityCommand(message, null, args);
runCommand(botGuild, message, args, fromPattern, result) {
// we don't want this command to be available outside the activity console
this.runActivityCommand(botGuild, message, null, args);
}


/**
* The public method to be used to call the command, it will check that an activity is passed!
* @param {Message} message - the message that has the command
* @param {Activity} activity - the activity for this command
* @async
*/
runActivityCommand(message, activity, args) {
if (activity === null) discordServices.replyAndDelete('This command can not be called outside an activity console!');
else this.activityCommand(message, activity, args);
async runActivityCommand(botGuild, message, activity, args) {
if (activity === null) discordServices.replyAndDelete(message, 'This command cannot be called outside an activity console!');
else {
this.activityCommand(botGuild, message, activity, args);
}
}


/**
* Required class by children, should contain the command code.
* @param {BotGuildModel} botGuild
* @param {Message} message - the message that has the command
* @param {Activity} activity - the activity for this activity command
* @abstract
* @async
*/
async activityCommand(message, activity, args, fromPattern, result) {
async activityCommand(botGuild, message, activity, args, fromPattern, result) {
throw new Error('You need to implement the activityCommand method!');
}
}
Expand Down
Loading

0 comments on commit ee3ddb2

Please sign in to comment.