You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Slash Commands(斜杠命令)在DiscordJS中实现角色发放功能?

实现Discord斜杠命令角色发放功能

前置条件

  • 机器人需拥有「管理角色」服务器权限
  • 机器人的角色位置必须高于要发放的目标角色(否则无法为用户添加该角色)
  • 在Discord开发者门户开启「服务器成员意图」(Member Intent)

代码实现

使用discord.py v2.x

import discord
from discord import app_commands

# 配置意图
intents = discord.Intents.default()
intents.members = True

client = discord.Client(intents=intents)
tree = app_commands.CommandTree(client)

# 定义斜杠命令
@tree.command(name="give_role", description="为指定用户授予角色")
@app_commands.describe(user="要授予角色的用户", role="要发放的角色")
@app_commands.default_permissions(manage_roles=True)  # 仅允许有管理角色权限的用户使用
async def give_role(interaction: discord.Interaction, user: discord.Member, role: discord.Role):
    # 权限检查:机器人是否能管理角色
    if not interaction.guild.me.guild_permissions.manage_roles:
        await interaction.response.send_message("我没有管理角色的权限!", ephemeral=True)
        return
    
    # 角色层级检查
    if role.position >= interaction.guild.me.top_role.position:
        await interaction.response.send_message("我的角色等级低于目标角色,无法执行操作!", ephemeral=True)
        return
    
    # 执行角色添加
    await user.add_roles(role)
    await interaction.response.send_message(f"已成功为 {user.mention} 授予 {role.mention} 角色", ephemeral=True)

# 机器人启动后同步命令
@client.event
async def on_ready():
    await tree.sync()
    print(f"已登录为 {client.user}")

client.run("你的机器人Token")

使用discord.js v14+

const { Client, GatewayIntentBits, SlashCommandBuilder, PermissionsBitField } = require('discord.js');

const client = new Client({ 
    intents: [
        GatewayIntentBits.Guilds, 
        GatewayIntentBits.GuildMembers  // 开启成员意图
    ] 
});

// 注册斜杠命令
client.on('ready', async () => {
    console.log(`已登录为 ${client.user.tag}`);
    await client.application.commands.create(
        new SlashCommandBuilder()
            .setName('give_role')
            .setDescription('为指定用户授予角色')
            .addUserOption(option =>
                option.setName('user')
                    .setDescription('要授予角色的用户')
                    .setRequired(true))
            .addRoleOption(option =>
                option.setName('role')
                    .setDescription('要发放的角色')
                    .setRequired(true))
            .setDefaultMemberPermissions(PermissionsBitField.Flags.ManageRoles)  // 权限限制
    );
});

// 处理命令交互
client.on('interactionCreate', async interaction => {
    if (!interaction.isChatInputCommand()) return;

    if (interaction.commandName === 'give_role') {
        const user = interaction.options.getUser('user');
        const member = interaction.guild.members.cache.get(user.id);
        const role = interaction.options.getRole('role');

        // 机器人权限检查
        if (!interaction.guild.members.me.permissions.has(PermissionsBitField.Flags.ManageRoles)) {
            return interaction.reply({ content: '我没有管理角色的权限!', ephemeral: true });
        }

        // 角色层级检查
        if (role.position >= interaction.guild.members.me.roles.highest.position) {
            return interaction.reply({ content: '我的角色等级低于目标角色,无法执行操作!', ephemeral: true });
        }

        // 添加角色
        await member.roles.add(role);
        await interaction.reply({ content: `已成功为 ${user} 授予 ${role} 角色`, ephemeral: true });
    }
});

client.login('你的机器人Token');

关键注意事项

  • 斜杠命令同步后可能需要1-5分钟才能在服务器中显示
  • 如果需要让所有用户都能使用命令,移除代码中的default_permissions相关配置
  • 若遇到「无法获取成员」的错误,检查是否已正确开启成员意图并重新邀请机器人到服务器

内容的提问来源于stack exchange,提问作者TheDEVIX

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 08:59:16