created react.js
This commit is contained in:
		
							
								
								
									
										73
									
								
								commands/react.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										73
									
								
								commands/react.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,73 @@ | ||||
| module.exports = { | ||||
|   name: 'react', | ||||
|   description: 'Automatically react with specified emojis to a user’s messages, or stop reacting.', | ||||
|   async execute(message, args, deleteTimeout) { | ||||
|     if (args.length === 0) { | ||||
|       if (message.client.targetReactUserId && message.client.reactEmojis) { | ||||
|         const statusMsg = await message.channel.send( | ||||
|           `Currently reacting to <@${message.client.targetReactUserId}> with the following emojis: ${message.client.reactEmojis.join(' ')}.` | ||||
|         ); | ||||
|         setTimeout(() => statusMsg.delete().catch(console.error), deleteTimeout); | ||||
|       } else { | ||||
|         const noTargetMsg = await message.channel.send('No active reaction target.'); | ||||
|         setTimeout(() => noTargetMsg.delete().catch(console.error), deleteTimeout); | ||||
|       } | ||||
|       return; | ||||
|     } | ||||
|  | ||||
|     if (args[0].toLowerCase() === 'stop') { | ||||
|       if (message.client.reactListener) { | ||||
|         message.client.off('messageCreate', message.client.reactListener); | ||||
|         message.client.reactListener = null; | ||||
|         message.client.targetReactUserId = null; | ||||
|         message.client.reactEmojis = null; | ||||
|  | ||||
|         const stopMsg = await message.channel.send('Stopped reacting to messages.'); | ||||
|         setTimeout(() => stopMsg.delete().catch(console.error), deleteTimeout); | ||||
|       } else { | ||||
|         const noActiveReactMsg = await message.channel.send('No active reactions to stop.'); | ||||
|         setTimeout(() => noActiveReactMsg.delete().catch(console.error), deleteTimeout); | ||||
|       } | ||||
|       return; | ||||
|     } | ||||
|  | ||||
|     const targetId = args[0]; | ||||
|     const emojis = args.slice(1); | ||||
|  | ||||
|     if (!targetId || emojis.length === 0) { | ||||
|       const errorMsg = await message.channel.send('Please provide a valid user ID and at least one emoji.'); | ||||
|       setTimeout(() => errorMsg.delete().catch(console.error), deleteTimeout); | ||||
|       return; | ||||
|     } | ||||
|  | ||||
|     message.client.targetReactUserId = targetId; | ||||
|     message.client.reactEmojis = emojis; | ||||
|  | ||||
|     const confirmationMsg = await message.channel.send( | ||||
|       `I will now react to messages from <@${targetId}> with the following emojis: ${emojis.join(' ')}.` | ||||
|     ); | ||||
|     setTimeout(() => confirmationMsg.delete().catch(console.error), deleteTimeout); | ||||
|  | ||||
|     if (message.client.reactListener) { | ||||
|       message.client.off('messageCreate', message.client.reactListener); | ||||
|     } | ||||
|  | ||||
|     const getRandomDelay = () => Math.floor(Math.random() * (5000 - 2000 + 1)) + 2000; | ||||
|  | ||||
|     message.client.reactListener = async (msg) => { | ||||
|       if (msg.author.id === targetId) { | ||||
|         for (const emoji of emojis) { | ||||
|           try { | ||||
|             const delay = getRandomDelay(); | ||||
|             await new Promise((resolve) => setTimeout(resolve, delay)); | ||||
|             await msg.react(emoji); | ||||
|           } catch (error) { | ||||
|             console.error('Failed to react:', error); | ||||
|           } | ||||
|         } | ||||
|       } | ||||
|     }; | ||||
|  | ||||
|     message.client.on('messageCreate', message.client.reactListener); | ||||
|   }, | ||||
| }; | ||||
		Reference in New Issue
	
	Block a user