mirror of
				https://github.com/veganhacktivists/arabot.git
				synced 2025-10-31 04:57:40 +01:00 
			
		
		
		
	refactor(arabot): make checks in WelcomeButtonHandler more thorough
This commit is contained in:
		
							parent
							
								
									cd4526bfb1
								
							
						
					
					
						commit
						c976905104
					
				| @ -25,7 +25,6 @@ import { | ||||
|   ButtonInteraction, | ||||
|   GuildMember, | ||||
|   MessageFlagsBitField, | ||||
|   TextChannel, | ||||
| } from 'discord.js'; | ||||
| import IDs from '#utils/ids'; | ||||
| import { checkActive } from '#utils/database/moderation/restriction'; | ||||
| @ -48,60 +47,98 @@ export class WelcomeButtonHandler extends InteractionHandler { | ||||
|   } | ||||
| 
 | ||||
|   public async run(interaction: ButtonInteraction) { | ||||
|     let { member } = interaction; | ||||
|     const general = this.container.client.channels.cache.get( | ||||
|     const { member } = interaction; | ||||
|     let general = this.container.client.channels.cache.get( | ||||
|       IDs.channels.nonVegan.general, | ||||
|     ) as TextChannel | undefined; | ||||
|     ); | ||||
| 
 | ||||
|     // Messages that are used multiple times
 | ||||
|     const roleErrorMessage = | ||||
|       'There was an error giving you the role, please try again later or contact ModMail to be let into this server.'; | ||||
|     const welcomeMessage = | ||||
|       `${member} Welcome to ARA! :D Please check <#${IDs.channels.information.roles}> ` + | ||||
|       `and remember to follow the <#${IDs.channels.information.conduct}> and to respect ongoing discussions and debates.` + | ||||
|       `\n\nIf you are vegan, you can join the 'Verification' voice channel, or use \`/apply\` with the Appy bot in <#${IDs.channels.nonVegan.vcText}>, ` + | ||||
|       'to be verified and gain access to more channels.'; | ||||
| 
 | ||||
|     // Checks if general is not in the cache
 | ||||
|     if (general === undefined) { | ||||
|       return; | ||||
|     } | ||||
|       // Sends an API request to get the channel
 | ||||
|       const generalFetch = await this.container.client.channels | ||||
|         .fetch(IDs.channels.nonVegan.general) | ||||
|         .catch(() => undefined); | ||||
| 
 | ||||
|     if (member === null) { | ||||
|       await interaction.reply({ | ||||
|         content: | ||||
|           'There was an error giving you the role, please try again later or contact ModMail to be let into this server.', | ||||
|         flags: MessageFlagsBitField.Flags.Ephemeral, | ||||
|       }); | ||||
|       return; | ||||
|     } | ||||
| 
 | ||||
|     try { | ||||
|       member = member as GuildMember; | ||||
| 
 | ||||
|       // Checks if the user is currently restricted
 | ||||
|       if (await checkActive(member.id)) { | ||||
|       // If general does not exist
 | ||||
|       if (generalFetch === null || generalFetch === undefined) { | ||||
|         this.container.logger.error( | ||||
|           'WelcomeButtonHandler: Could not find and fetch the general channel!', | ||||
|         ); | ||||
|         await interaction.reply({ | ||||
|           content: `You are currently restricted from this server! Contact the moderators by sending a DM to <@${IDs.modMail}>.`, | ||||
|           content: | ||||
|             'Sorry there was a problem trying to give you access to the server. Please try again later.', | ||||
|           flags: MessageFlagsBitField.Flags.Ephemeral, | ||||
|         }); | ||||
| 
 | ||||
|         return; | ||||
|       } | ||||
| 
 | ||||
|       // Give non-vegan role
 | ||||
|       if (!member.voice.channel) { | ||||
|         await member.roles.add(IDs.roles.nonvegan.nonvegan); | ||||
|       // Replace fetched version of general with the cached version
 | ||||
|       general = generalFetch; | ||||
|     } | ||||
| 
 | ||||
|         await general.send( | ||||
|           `${member} Welcome to ARA! :D Please check <#${IDs.channels.information.roles}> ` + | ||||
|             `and remember to follow the <#${IDs.channels.information.conduct}> and to respect ongoing discussions and debates.` + | ||||
|             `\n\nIf you are vegan, you can join the 'Verification' voice channel, or use \`/apply\` with the Appy bot in <#${IDs.channels.nonVegan.vcText}>, ` + | ||||
|             'to be verified and gain access to more channels.', | ||||
|         ); | ||||
|         return; | ||||
|       } | ||||
|     // If the member could not be found
 | ||||
|     if (!(member instanceof GuildMember)) { | ||||
|       await interaction.reply({ | ||||
|         content: roleErrorMessage, | ||||
|         flags: MessageFlagsBitField.Flags.Ephemeral, | ||||
|       }); | ||||
| 
 | ||||
|       return; | ||||
|     } | ||||
| 
 | ||||
|     // Checks if the user is currently restricted
 | ||||
|     if (await checkActive(member.id)) { | ||||
|       await interaction.reply({ | ||||
|         content: `You are currently restricted from this server! Contact the moderators by sending a DM to <@${IDs.modMail}>.`, | ||||
|         flags: MessageFlagsBitField.Flags.Ephemeral, | ||||
|       }); | ||||
| 
 | ||||
|       return; | ||||
|     } | ||||
| 
 | ||||
|     // Give non-vegan role
 | ||||
|     if (member.voice.channel) { | ||||
|       await interaction.reply({ | ||||
|         content: | ||||
|           "You're currently in a verification, you'll have to leave the verification or get verified before being able to access the server again.", | ||||
|         flags: MessageFlagsBitField.Flags.Ephemeral, | ||||
|       }); | ||||
|     } catch (error) { | ||||
| 
 | ||||
|       return; | ||||
|     } | ||||
| 
 | ||||
|     // Give the role to the member
 | ||||
|     const role = await member.roles | ||||
|       .add(IDs.roles.nonvegan.nonvegan) | ||||
|       .catch(() => undefined); | ||||
| 
 | ||||
|     // If the role could not be given
 | ||||
|     if (role === undefined) { | ||||
|       await interaction.reply({ | ||||
|         content: | ||||
|           'There was an error giving you the role, please try again later or contact ModMail to be let into this server.', | ||||
|         content: roleErrorMessage, | ||||
|         flags: MessageFlagsBitField.Flags.Ephemeral, | ||||
|       }); | ||||
| 
 | ||||
|       return; | ||||
|     } | ||||
| 
 | ||||
|     if (general.isSendable()) { | ||||
|       await general.send(welcomeMessage); | ||||
|     } else { | ||||
|       this.container.logger.error( | ||||
|         'WelcomeButtonHandler: The bot does not have permission to send in general!', | ||||
|       ); | ||||
|       await member.send(welcomeMessage); | ||||
|     } | ||||
|   } | ||||
| } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Anthony Berg
						Anthony Berg