add alias rename command

This commit is contained in:
Ean Milligan 2025-07-14 22:47:47 -04:00
parent d677fc6a0c
commit f2ed8a4f16
7 changed files with 170 additions and 5 deletions

View File

@ -100,6 +100,13 @@ The Artificer comes with a few supplemental commands to the main rolling command
* `[[ra delete-all [aliasName] [verificationCode?]` * `[[ra delete-all [aliasName] [verificationCode?]`
* `[[ra guild delete-all [aliasName] [verificationCode?]` * `[[ra guild delete-all [aliasName] [verificationCode?]`
* Deletes all aliases from your account or the guild you are in. Can be run without a verification code to get the needed code for deletion. * Deletes all aliases from your account or the guild you are in. Can be run without a verification code to get the needed code for deletion.
* `[[ra clone [aliasName]`
* Copies the specified alias from your account to the guild you are in.
* `[[ra guild clone [aliasName]`
* Copies the specified alias from the guild you are in to your account.
* `[[ra rename [oldAliasName] [newAliasName]`
* `[[ra guild rename [oldAliasName] [newAliasName]`
* Renames the specified alias for your account or the guild you are in.
* `[[ra [aliasName] [yVars?...]` * `[[ra [aliasName] [yVars?...]`
* `[[ra run [aliasName] [yVars?...]` * `[[ra run [aliasName] [yVars?...]`
* Runs the desired personal alias with the specified yVars (if any are needed). If the alias is not found on your account, it will check the guild aliases and use a match from there if one exists. * Runs the desired personal alias with the specified yVars (if any are needed). If the alias is not found on your account, it will check the guild aliases and use a match from there if one exists.

View File

@ -39,7 +39,6 @@ export const alias = (message: DiscordenoMessage, argSpaces: string[]) => {
return; return;
} }
// Makes sure the user is authenticated to run the API command
switch (aliasArg) { switch (aliasArg) {
case 'help': case 'help':
case 'h': case 'h':
@ -76,6 +75,9 @@ export const alias = (message: DiscordenoMessage, argSpaces: string[]) => {
case 'copy': case 'copy':
aliasCommands.clone(message, guildMode, argSpaces); aliasCommands.clone(message, guildMode, argSpaces);
break; break;
case 'rename':
aliasCommands.rename(message, guildMode, argSpaces);
break;
case 'run': case 'run':
case 'execute': case 'execute':
default: default:

View File

@ -3,6 +3,7 @@ import { clone } from './clone.ts';
import { deleteAll, deleteOne } from './aliasDelete.ts'; import { deleteAll, deleteOne } from './aliasDelete.ts';
import { help } from 'commands/aliasCmd/aliasHelp.ts'; import { help } from 'commands/aliasCmd/aliasHelp.ts';
import { list } from 'commands/aliasCmd/list.ts'; import { list } from 'commands/aliasCmd/list.ts';
import { rename } from './rename.ts';
import { run } from 'commands/aliasCmd/run.ts'; import { run } from 'commands/aliasCmd/run.ts';
import { view } from 'commands/aliasCmd/view.ts'; import { view } from 'commands/aliasCmd/view.ts';
@ -13,6 +14,7 @@ export default {
deleteOne, deleteOne,
help, help,
list, list,
rename,
run, run,
update, update,
view, view,

View File

@ -72,6 +72,11 @@ To view ${guildMode ? '' : 'non-'}guild mode commands, please run \`${config.pre
value: `Copies the specified alias from ${guildMode ? 'this guild' : 'your account'} to ${guildMode ? 'your account' : 'this guild'}.`, value: `Copies the specified alias from ${guildMode ? 'this guild' : 'your account'} to ${guildMode ? 'your account' : 'this guild'}.`,
inline: true, inline: true,
}, },
{
name: `\`${config.prefix}ra ${guildMode ? 'guild ' : ''}rename [oldAliasName] [newAliasName]`,
value: `Renames the specified alias in ${guildMode ? 'this guild' : 'your account'}.`,
inline: true,
},
{ {
name: `\`${config.prefix}ra ${guildMode ? 'guild ' : ''}[alias] [yVars...?]\` or \`${config.prefix}ra ${guildMode ? 'guild ' : ''}run/execute [alias] [yVars...?]\``, name: `\`${config.prefix}ra ${guildMode ? 'guild ' : ''}[alias] [yVars...?]\` or \`${config.prefix}ra ${guildMode ? 'guild ' : ''}run/execute [alias] [yVars...?]\``,
value: `Runs the specified ${guildMode ? 'guild ' : ''}alias with the provided yVars. yVars are only required if the alias specified requires them.`, value: `Runs the specified ${guildMode ? 'guild ' : ''}alias with the provided yVars. yVars are only required if the alias specified requires them.`,

View File

@ -1,10 +1,14 @@
import { DiscordenoMessage, hasGuildPermissions } from '@discordeno'; import { DiscordenoMessage, hasGuildPermissions } from '@discordeno';
import { failColor, successColor } from 'embeds/colors.ts';
import utils from 'utils/utils.ts';
import dbClient from 'db/client.ts';
import { generateAliasError } from 'embeds/alias.ts';
import config from '~config'; import config from '~config';
import dbClient from 'db/client.ts';
import { generateAliasError } from 'embeds/alias.ts';
import { failColor, successColor } from 'embeds/colors.ts';
import utils from 'utils/utils.ts';
interface QueryShape { interface QueryShape {
aliasName: string; aliasName: string;
yVarCnt: number; yVarCnt: number;

View File

@ -0,0 +1,142 @@
import { DiscordenoMessage, hasGuildPermissions } from '@discordeno';
import config from '~config';
import dbClient from 'db/client.ts';
import { generateAliasError } from 'embeds/alias.ts';
import { failColor, successColor } from 'embeds/colors.ts';
import utils from 'utils/utils.ts';
interface QueryShape {
aliasName: string;
}
export const rename = async (message: DiscordenoMessage, guildMode: boolean, argSpaces: string[]) => {
if (!guildMode && !(await hasGuildPermissions(message.authorId, message.guildId, ['ADMINISTRATOR']))) {
message
.send({
embeds: [
{
color: failColor,
title: `Error: Only Guild Owners and Admins can rename a guild aliases`,
},
],
})
.catch((e: Error) => utils.commonLoggers.messageSendError('rename.ts:25', message, e));
return;
}
const oldAliasName = (argSpaces.shift() || '').trim().toLowerCase();
argSpaces.shift();
const newAliasName = (argSpaces.shift() || '').trim().toLowerCase();
if (!oldAliasName || !newAliasName) {
message
.send({
embeds: [
{
color: failColor,
title: `Error: Please specify both an alias to rename, and the new name to set it to.`,
},
],
})
.catch((e: Error) => utils.commonLoggers.messageSendError('rename.ts:32', message, e));
return;
}
// make sure old alias exists, and new doesn't exist first
let errorOut = false;
const queryOld: QueryShape[] = await dbClient
.query(
`SELECT aliasName FROM aliases WHERE guildid = ? AND userid = ? AND aliasName = ?`,
guildMode ? [message.guildId, 0n, oldAliasName] : [0n, message.authorId, oldAliasName],
)
.catch((e0) => {
utils.commonLoggers.dbError('rename.ts:44', 'query', e0);
message
.send(generateAliasError('DB Query Failed.', `rename-q0-${guildMode ? 't' : 'f'}-${oldAliasName}-${guildMode ? message.guildId : message.authorId}`))
.catch((e: Error) => utils.commonLoggers.messageSendError('rename.ts:47', message, e));
errorOut = true;
});
if (errorOut) return;
if (!queryOld.length) {
message
.send({
embeds: [
{
color: failColor,
title: `Error: \`${oldAliasName}\` does not exist as a ${guildMode ? 'guild' : 'personal'} alias.`,
description: `If you are trying to update an existing alias, but forgot the name, please run the following command to view all your ${guildMode ? 'guild ' : ''}aliases:
\`${config.prefix}ra ${guildMode ? 'guild ' : ''}list\``,
},
],
})
.catch((e: Error) => utils.commonLoggers.messageSendError('add.ts:63', message, e));
return;
}
const queryNew: QueryShape[] = await dbClient
.query(
`SELECT aliasName FROM aliases WHERE guildid = ? AND userid = ? AND aliasName = ?`,
guildMode ? [message.guildId, 0n, newAliasName] : [0n, message.authorId, newAliasName],
)
.catch((e0) => {
utils.commonLoggers.dbError('rename.ts:44', 'query', e0);
message
.send(generateAliasError('DB Query Failed.', `rename-q1-${guildMode ? 't' : 'f'}-${newAliasName}-${guildMode ? message.guildId : message.authorId}`))
.catch((e: Error) => utils.commonLoggers.messageSendError('rename.ts:47', message, e));
errorOut = true;
});
if (errorOut) return;
if (queryNew.length) {
message
.send({
embeds: [
{
color: failColor,
title: `Error: \`${newAliasName}\` already exists as a ${guildMode ? 'guild' : 'personal'} alias.`,
description: 'Please choose a different name for this alias.',
},
],
})
.catch((e: Error) => utils.commonLoggers.messageSendError('add.ts:63', message, e));
return;
}
// do the rename
await dbClient
.execute('UPDATE aliases SET aliasName = ? WHERE guildid = ? AND userid = ? AND aliasName = ?', [
newAliasName,
guildMode ? message.guildId : 0n,
guildMode ? 0n : message.authorId,
oldAliasName,
])
.catch((e0) => {
utils.commonLoggers.dbError('rename.ts:169', 'update', e0);
message
.send(
generateAliasError(
'DB Update Failed.',
`rename-q2-${guildMode ? 't' : 'f'}-${oldAliasName}-${newAliasName}-${guildMode ? message.guildId : message.authorId}`,
),
)
.catch((e: Error) => utils.commonLoggers.messageSendError('rename.ts:170', message, e));
errorOut = true;
});
message
.send({
embeds: [
{
color: successColor,
title: `Successfully renamed the ${guildMode ? 'guild' : 'personal'} alias \`${oldAliasName}\` to \`${newAliasName}\`!`,
description: `\`${newAliasName}\` is now available as an alias ${guildMode ? 'in this guild' : 'on your account'}.`,
},
],
})
.catch((e: Error) => utils.commonLoggers.messageSendError('rename.ts:132', message, e));
};

View File

@ -18,4 +18,7 @@ export const ReservedWords = Object.freeze([
'remove-all', 'remove-all',
'run', 'run',
'execute', 'execute',
'clone',
'copy',
'rename',
]); ]);