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

如何将现有解封代码实现为触发`:unban @user`即可执行的可用功能代码

Discord 解封命令完整实现方案

方案1:斜杠命令实现(推荐,匹配你现有interaction代码逻辑)

1. 命令注册配置(部署时使用)

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

// /unban 命令配置
const unbanCommand = new SlashCommandBuilder()
  .setName('unban')
  .setDescription('解封指定服务器用户')
  .addUserOption(option => 
    option.setName('target')
      .setDescription('需要解封的目标用户')
      .setRequired(true)
  )
  // 限制只有拥有封禁权限的成员可以调用该命令
  .setDefaultMemberPermissions(PermissionsBitField.Flags.BanMembers);

2. 交互触发执行逻辑

// 监听斜杠命令交互事件
client.on('interactionCreate', async interaction => {
  if (!interaction.isChatInputCommand() || interaction.commandName !== 'unban') return;

  // 双重权限校验,防止前端权限配置绕过
  if (!interaction.member.permissions.has(PermissionsBitField.Flags.BanMembers)) {
    return interaction.reply({ content: '你没有解封用户的权限', ephemeral: true });
  }
  if (!interaction.guild.members.me.permissions.has(PermissionsBitField.Flags.BanMembers)) {
    return interaction.reply({ content: '机器人缺少解封用户的权限,请先分配对应权限', ephemeral: true });
  }

  try {
    const targetId = interaction.options.get('target')?.value;
    // 校验目标用户是否在封禁列表中
    const banList = await interaction.guild.bans.fetch();
    if (!banList.has(targetId)) {
      return interaction.reply({ content: '该用户未被当前服务器封禁', ephemeral: true });
    }
    // 执行解封操作
    await interaction.guild.members.unban(targetId);
    return interaction.reply(`已成功解封 <@${targetId}>`);
  } catch (error) {
    console.error('解封操作执行失败:', error);
    return interaction.reply({ content: '解封失败,请确认用户ID有效,且机器人权限等级高于目标用户', ephemeral: true });
  }
});

方案2:冒号前缀文本命令实现(匹配你提到的:unban @user触发格式)

const { PermissionsBitField } = require('discord.js');
const commandPrefix = ':';

// 监听文本消息事件
client.on('messageCreate', async message => {
  if (message.author.bot || !message.content.startsWith(`${commandPrefix}unban`)) return;

  // 权限校验
  if (!message.member.permissions.has(PermissionsBitField.Flags.BanMembers)) {
    return message.reply('你没有解封用户的权限');
  }
  if (!message.guild.members.me.permissions.has(PermissionsBitField.Flags.BanMembers)) {
    return message.reply('机器人缺少解封用户的权限,请先分配对应权限');
  }
  // 提取@的目标用户
  const targetUser = message.mentions.users.first();
  if (!targetUser) {
    return message.reply('请使用正确格式触发命令:`:unban @目标用户`');
  }

  try {
    const banList = await message.guild.bans.fetch();
    if (!banList.has(targetUser.id)) {
      return message.reply('该用户未被当前服务器封禁');
    }
    // 执行解封
    await message.guild.members.unban(targetUser.id);
    return message.reply(`已成功解封 ${targetUser}`);
  } catch (error) {
    console.error('解封操作执行失败:', error);
    return message.reply('解封失败,请确认目标用户存在,且机器人权限等级高于目标用户');
  }
});

注意事项

  • 所有代码基于 Discord.js v14 版本编写,低版本API存在差异,需对应调整兼容
  • 斜杠命令需要先部署到Discord服务器才能正常触发调用
  • 所有异步操作均添加await处理,避免异步逻辑混乱导致的报错
  • 内置多层校验逻辑,避免非法调用和无权限操作导致的程序崩溃

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 05:45:03