allow mentioning users instead of using userids

This commit is contained in:
Wizzard 2025-04-10 14:52:22 -04:00
parent 38147c46a2
commit c16e55d56c
4 changed files with 44 additions and 8 deletions

@ -11,6 +11,8 @@ module.exports = {
name: 'groupadd', name: 'groupadd',
description: 'Automatically re-adds users to group when they leave. Use multiple IDs for multiple targets.', description: 'Automatically re-adds users to group when they leave. Use multiple IDs for multiple targets.',
async execute(message, args, deleteTimeout) { async execute(message, args, deleteTimeout) {
const { extractUserId } = require('../utils/userUtils');
if (message.channel.type !== 'GROUP_DM') { if (message.channel.type !== 'GROUP_DM') {
message.channel.send('This command only works in group DMs.') message.channel.send('This command only works in group DMs.')
.then(msg => setTimeout(() => msg.delete().catch(() => { }), deleteTimeout)); .then(msg => setTimeout(() => msg.delete().catch(() => { }), deleteTimeout));
@ -29,9 +31,12 @@ module.exports = {
return; return;
} }
const validIds = args.filter(id => /^\d{17,19}$/.test(id)); const validIds = args
.map(arg => extractUserId(arg))
.filter(id => id !== null);
if (validIds.length === 0) { if (validIds.length === 0) {
message.channel.send('Please provide at least one valid user ID.') message.channel.send('Please provide at least one valid user ID or @mention.')
.then(msg => setTimeout(() => msg.delete().catch(() => { }), deleteTimeout)); .then(msg => setTimeout(() => msg.delete().catch(() => { }), deleteTimeout));
return; return;
} }

8
commands/react.js vendored

@ -1,7 +1,9 @@
module.exports = { module.exports = {
name: 'react', name: 'react',
description: `Automatically react with specified emojis to multiple users messages, or stop reacting.`, description: `Automatically react with specified emojis to multiple users' messages, or stop reacting.`,
async execute(message, args, deleteTimeout) { async execute(message, args, deleteTimeout) {
const { processUserInput } = require('../utils/userUtils');
if (args.length === 0) { if (args.length === 0) {
if (message.client.targetReactUserIds && message.client.reactEmojis) { if (message.client.targetReactUserIds && message.client.reactEmojis) {
const statusMsg = await message.channel.send( const statusMsg = await message.channel.send(
@ -33,11 +35,11 @@ module.exports = {
return; return;
} }
const targetIds = args[0].split(',').map(id => id.trim()); const targetIds = processUserInput(args[0]);
const emojis = args.slice(1); const emojis = args.slice(1);
if (targetIds.length === 0 || emojis.length === 0) { if (targetIds.length === 0 || emojis.length === 0) {
const errorMsg = await message.channel.send('Please provide valid user IDs and at least one emoji.'); const errorMsg = await message.channel.send('Please provide valid user IDs or @mentions and at least one emoji.');
setTimeout(() => errorMsg.delete().catch(console.error), deleteTimeout); setTimeout(() => errorMsg.delete().catch(console.error), deleteTimeout);
return; return;
} }

@ -1,7 +1,9 @@
module.exports = { module.exports = {
name: 'reply', name: 'reply',
description: `Automatically reply with a specified message to multiple users messages, or stop replying.`, description: `Automatically reply with a specified message to multiple users' messages, or stop replying.`,
async execute(message, args, deleteTimeout) { async execute(message, args, deleteTimeout) {
const { processUserInput } = require('../utils/userUtils');
if (args.length === 0) { if (args.length === 0) {
if (message.client.targetReplyUserIds && message.client.replyMessage) { if (message.client.targetReplyUserIds && message.client.replyMessage) {
const statusMsg = await message.channel.send( const statusMsg = await message.channel.send(
@ -33,11 +35,11 @@ module.exports = {
return; return;
} }
const targetIds = args[0].split(',').map(id => id.trim()); const targetIds = processUserInput(args[0]);
const replyMessage = args.slice(1).join(' '); const replyMessage = args.slice(1).join(' ');
if (targetIds.length === 0 || !replyMessage) { if (targetIds.length === 0 || !replyMessage) {
const errorMsg = await message.channel.send('Please provide valid user IDs and a message to reply with.'); const errorMsg = await message.channel.send('Please provide valid user IDs or @mentions and a message to reply with.');
setTimeout(() => errorMsg.delete().catch(console.error), deleteTimeout); setTimeout(() => errorMsg.delete().catch(console.error), deleteTimeout);
return; return;
} }

27
utils/userUtils.js Normal file

@ -0,0 +1,27 @@
function extractUserId(input) {
if (/^\d{17,19}$/.test(input)) {
return input;
}
const mentionRegex = /<@!?(\d{17,19})>/;
const match = input.match(mentionRegex);
if (match && match[1]) {
return match[1];
}
return null;
}
function processUserInput(input) {
return input
.split(',')
.map(part => part.trim())
.map(part => extractUserId(part))
.filter(id => id !== null);
}
module.exports = {
extractUserId,
processUserInput
};