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

请求编写Discord服务器解封所有用户的JS命令,用于Ban Royale活动

解封Discord服务器所有用户的JS命令(适用于Ban Royale活动)

嘿,我懂你在Ban Royale活动结束后需要快速批量解封用户的需求——折腾完这类活动确实得赶紧让服务器回到正常状态对吧?下面给你一个基于Discord.js v14的实现方案,先把前提条件理清楚:

  • 你的机器人必须拥有管理员权限(至少得有BanMembers权限,毕竟解封操作需要这个权限支撑)
  • 确保你使用的是Discord.js v14版本(如果是v13或更早版本,我会在后面提语法调整点)

完整代码实现

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

// 初始化机器人客户端,必须开启Guilds和GuildMembers意图
const client = new Client({
  intents: [
    GatewayIntentBits.Guilds,
    GatewayIntentBits.GuildMembers
  ]
});

// 机器人登录成功后的提示
client.on('ready', () => {
  console.log(`已登录为 ${client.user.tag}!`);
});

// 前缀式命令实现(你也可以改成斜杠命令,核心逻辑一致)
client.on('messageCreate', async (message) => {
  // 跳过机器人消息,只响应!unbanall命令
  if (message.author.bot || !message.content.startsWith('!unbanall')) return;

  // 检查发命令的用户是否有管理员权限
  if (!message.member.permissions.has('Administrator')) {
    return message.reply('你没有权限执行这个命令哦!');
  }

  try {
    // 获取服务器所有被封禁的用户列表
    const bans = await message.guild.bans.fetch();
    
    if (bans.size === 0) {
      return message.reply('当前服务器没有被封禁的用户呀!');
    }

    // 并行批量解封(效率高,但人数多可能触发限流)
    await Promise.all(
      bans.map(async (ban) => {
        await message.guild.members.unban(ban.user.id, 'Ban Royale活动后批量解封');
        console.log(`已解封用户:${ban.user.tag}`);
      })
    );

    message.reply(`已成功解封所有 ${bans.size} 名被封禁用户!`);
  } catch (error) {
    console.error('解封过程中出错:', error);
    message.reply('解封时出现错误,请查看控制台日志排查问题!');
  }
});

// 替换成你的机器人Token
client.login('你的机器人Token');

重要注意事项

  • 务必谨慎执行! 这个命令会解封所有被封禁的用户,包括那些因严重违规被永久封禁的账号,一定要确认是Ban Royale活动后的清理需求再运行
  • 如果用的是Discord.js v13,把GatewayIntentBits换成Intents.FLAGS,比如Intents.FLAGS.GUILDS和Intents.FLAGS.GUILD_MEMBERS
  • 服务器人数较多时,并行解封可能触发Discord的速率限制,你可以改成串行处理避免限流:
    // 串行解封的替代代码(替换原Promise.all部分)
    let successCount = 0;
    for (const ban of bans.values()) {
      try {
        await message.guild.members.unban(ban.user.id, 'Ban Royale活动后批量解封');
        successCount++;
        console.log(`已解封用户:${ban.user.tag}`);
        // 每次解封后等待1秒,降低限流风险
        await new Promise(resolve => setTimeout(resolve, 1000));
      } catch (err) {
        console.error(`解封用户${ban.user.tag}失败:`, err);
      }
    }
    message.reply(`已成功解封 ${successCount} 名用户,部分用户可能解封失败,请查看控制台日志!`);
    
  • 如果想用更规范的斜杠命令(Slash Command),只需要把messageCreate事件的逻辑改成斜杠命令的注册与响应即可,核心的获取封禁列表、解封用户的代码完全通用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:38:16