mirror of
				https://github.com/keanuplayz/TravBot-v3.git
				synced 2024-08-15 02:33:12 +00:00 
			
		
		
		
	Added special case for bot DMs
This commit is contained in:
		
							parent
							
								
									6eea068909
								
							
						
					
					
						commit
						2a4d08d0bc
					
				
					 1 changed files with 52 additions and 24 deletions
				
			
		|  | @ -12,7 +12,14 @@ export function addInterceptRule(handler: (message: Message) => boolean) { | ||||||
|     interceptRules.push(handler); |     interceptRules.push(handler); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | const defaultMetadata = { | ||||||
|  |     permission: 0, | ||||||
|  |     nsfw: false, | ||||||
|  |     channelType: CHANNEL_TYPE.ANY | ||||||
|  | }; | ||||||
|  | 
 | ||||||
| // Note: client.user is only undefined before the bot logs in, so by this point, client.user cannot be undefined.
 | // Note: client.user is only undefined before the bot logs in, so by this point, client.user cannot be undefined.
 | ||||||
|  | // Note: guild.available will never need to be checked because the message starts in either a DM channel or an already-available guild.
 | ||||||
| client.on("message", async (message) => { | client.on("message", async (message) => { | ||||||
|     for (const shouldIntercept of interceptRules) { |     for (const shouldIntercept of interceptRules) { | ||||||
|         if (shouldIntercept(message)) { |         if (shouldIntercept(message)) { | ||||||
|  | @ -20,30 +27,10 @@ client.on("message", async (message) => { | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     const {author, channel, content, guild, member} = message; |  | ||||||
| 
 |  | ||||||
|     // Continue if the bot has permission to send messages in this channel.
 |  | ||||||
|     if (channel.type === "dm" || channel.permissionsFor(client.user!)!.has(Permissions.FLAGS.SEND_MESSAGES)) { |  | ||||||
|         const text = content; |  | ||||||
|         const prefix = getPrefix(guild); |  | ||||||
| 
 |  | ||||||
|         // First, test if the message is just a ping to the bot.
 |  | ||||||
|         if (new RegExp(`^<@!?${client.user!.id}>$`).test(text)) { |  | ||||||
|             channel.send(`${author}, my prefix on this guild is \`${prefix}\`.`); |  | ||||||
|         } |  | ||||||
|         // Then check if it's a normal command.
 |  | ||||||
|         else if (text.startsWith(prefix)) { |  | ||||||
|             const [header, ...args] = text.substring(prefix.length).split(/ +/); |  | ||||||
|     const commands = await loadableCommands; |     const commands = await loadableCommands; | ||||||
| 
 |     const {author, channel, content, guild, member} = message; | ||||||
|             if (commands.has(header)) { |     const text = content; | ||||||
|                 const command = commands.get(header)!; |     const menu = { | ||||||
| 
 |  | ||||||
|                 // Send the arguments to the command to resolve and execute.
 |  | ||||||
|                 // TMP[MAKE SURE TO REPLACE WITH command.execute WHEN FINISHED]
 |  | ||||||
|                 const result = await command.execute( |  | ||||||
|                     args, |  | ||||||
|                     { |  | ||||||
|         author, |         author, | ||||||
|         channel, |         channel, | ||||||
|         client, |         client, | ||||||
|  | @ -51,15 +38,54 @@ client.on("message", async (message) => { | ||||||
|         member, |         member, | ||||||
|         message, |         message, | ||||||
|         args: [] |         args: [] | ||||||
|                     }, |     }; | ||||||
|                     { | 
 | ||||||
|  |     // Execute a dedicated block for messages in DM channels.
 | ||||||
|  |     if (channel.type === "dm") { | ||||||
|  |         // In a DM channel, simply forget about the prefix and execute any message as a command.
 | ||||||
|  |         const [header, ...args] = text.split(/ +/); | ||||||
|  | 
 | ||||||
|  |         if (commands.has(header)) { | ||||||
|  |             const command = commands.get(header)!; | ||||||
|  | 
 | ||||||
|  |             // Send the arguments to the command to resolve and execute.
 | ||||||
|  |             const result = await command.execute(args, menu, { | ||||||
|                 header, |                 header, | ||||||
|                 args, |                 args, | ||||||
|                         permission: 0, |                 ...defaultMetadata | ||||||
|                         nsfw: false, |             }); | ||||||
|                         channelType: CHANNEL_TYPE.ANY | 
 | ||||||
|  |             // If something went wrong, let the user know (like if they don't have permission to use a command).
 | ||||||
|  |             if (result) { | ||||||
|  |                 channel.send(result); | ||||||
|             } |             } | ||||||
|  |         } else { | ||||||
|  |             channel.send( | ||||||
|  |                 `I couldn't find the command or alias that starts with \`${header}\`. To see the list of commands, type \`help\`` | ||||||
|             ); |             ); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |     // Continue if the bot has permission to send messages in this channel.
 | ||||||
|  |     else if (channel.permissionsFor(client.user!)!.has(Permissions.FLAGS.SEND_MESSAGES)) { | ||||||
|  |         const prefix = getPrefix(guild); | ||||||
|  | 
 | ||||||
|  |         // First, test if the message is just a ping to the bot.
 | ||||||
|  |         if (new RegExp(`^<@!?${client.user!.id}>$`).test(text)) { | ||||||
|  |             channel.send(`${author}, my prefix on this server is \`${prefix}\`.`); | ||||||
|  |         } | ||||||
|  |         // Then check if it's a normal command.
 | ||||||
|  |         else if (text.startsWith(prefix)) { | ||||||
|  |             const [header, ...args] = text.substring(prefix.length).split(/ +/); | ||||||
|  | 
 | ||||||
|  |             if (commands.has(header)) { | ||||||
|  |                 const command = commands.get(header)!; | ||||||
|  | 
 | ||||||
|  |                 // Send the arguments to the command to resolve and execute.
 | ||||||
|  |                 const result = await command.execute(args, menu, { | ||||||
|  |                     header, | ||||||
|  |                     args, | ||||||
|  |                     ...defaultMetadata | ||||||
|  |                 }); | ||||||
| 
 | 
 | ||||||
|                 // If something went wrong, let the user know (like if they don't have permission to use a command).
 |                 // If something went wrong, let the user know (like if they don't have permission to use a command).
 | ||||||
|                 if (result) { |                 if (result) { | ||||||
|  | @ -67,7 +93,9 @@ client.on("message", async (message) => { | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|     } else { |     } | ||||||
|  |     // Otherwise, let the sender know that the bot doesn't have permission to send messages.
 | ||||||
|  |     else { | ||||||
|         author.send( |         author.send( | ||||||
|             `I don't have permission to send messages in ${channel}. ${ |             `I don't have permission to send messages in ${channel}. ${ | ||||||
|                 member!.hasPermission(Permissions.FLAGS.ADMINISTRATOR) |                 member!.hasPermission(Permissions.FLAGS.ADMINISTRATOR) | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue