@getsolara/solara.js
Version:
A lightweight and modular Discord bot framework built on discord.js v14, with truly optional feature packages.
31 lines (27 loc) • 1.58 kB
JavaScript
module.exports = {
name: "$setUserRoles",
description: "Sets a member's roles to only the specified role IDs (removes others). Args: memberID;roleID1;[roleID2...];[reason]",
takesBrackets: true,
execute: async (context, args) => {
if (!context.guild) return "[Error: $setUserRoles requires a guild context]";
if (args.length < 2) return "[Error: $setUserRoles requires memberID and at least one roleID]";
const memberId = args[0];
const roleIds = args.slice(1).filter(id => /^\d{17,19}$/.test(id.trim()));
const reason = "Roles set via bot.";
if (roleIds.length === 0) return "[Error: No valid role IDs provided to $setUserRoles]";
try {
const member = await context.guild.members.fetch(memberId);
if (!context.guild.members.me?.permissions.has("ManageRoles")) return "[Error: Bot lacks Manage Roles permission]";
for (const roleId of roleIds) {
const role = await context.guild.roles.fetch(roleId);
if (!role) return `[Error: Target role ${roleId} not found]`;
if (role.position >= context.guild.members.me?.roles.highest.position) return `[Error: Cannot manage target role ${roleId} due to hierarchy]`;
}
await member.roles.set(roleIds, reason);
return "";
} catch (err) {
console.error("Error in $setUserRoles:", err);
return `[Error: Failed to set roles for member ${memberId} - ${err.message}]`;
}
}
};