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

discord.js 如何为所有服务器成员设置10000初始银行数据库值

原有代码问题
  • 未正确获取服务器成员列表,guild.member为无效属性,无法对应到单个用户的唯一标识
  • 没有遍历所有成员单独写入数据库,单次写入只能修改一个键值对,无法批量覆盖所有成员的银行数据
  • 未做权限校验,任意用户发送指令都可以触发数据修改,存在安全风险
可用实现代码
// discord.js v13+ 需在实例化client时开启GUILD_MEMBERS意图,示例:
// const { Client, Intents } = require('discord.js');
// const client = new Client({ intents: [Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES, Intents.FLAGS.GUILD_MEMBERS] });

client.on('messageCreate', async message => {
  // 过滤机器人自身消息,避免重复触发
  if (message.author.bot) return;
  // 仅管理员可触发指令,可根据需求调整权限要求
  if (!message.member.permissions.has('ADMINISTRATOR')) return;

  if (message.content === '#bank') {
    const targetGuildId = '644523866638647316';
    const guild = client.guilds.cache.get(targetGuildId);
    if (!guild) return message.reply('未找到目标服务器');

    try {
      // 强制拉取全量成员列表,绕过本地缓存限制
      const allMembers = await guild.members.fetch({ force: true });
      // 遍历所有成员写入数据库
      for (const [memberId, member] of allMembers) {
        // 不需要给机器人设置余额可以保留下面这行,否则删除即可
        if (member.user.bot) continue;
        await db.set(`bank_${memberId}`, 10000);
      }
      message.reply('已完成所有成员银行余额设置');
    } catch (err) {
      console.error('批量设置失败:', err);
      message.reply('设置失败,请检查机器人权限和配置');
    }
  }
})
注意事项
  • 必须开启GUILD_MEMBERS特权网关意图:前往Discord开发者平台的机器人管理页,在「Privileged Gateway Intents」分类下开启Server Members Intent,否则无法拉取完整成员列表
  • 如果服务器成员数量超过1000,建议增加分批延迟逻辑,每处理100个成员等待1秒,避免触发数据库或Discord API的限流规则
  • 如果你使用的是v12及以下版本的discord.js,将事件名改回message,权限判断调整为message.member.hasPermission('ADMINISTRATOR')即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 03:27:01