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

如何制作可提取用户名与对应ID并发送文本文件的Discord bot

Discord Bot 成员数据导出功能修复方案

现有代码问题

  • 事件注册逻辑错误:在message事件回调内重复注册client.on("message"),会导致事件多次触发、内存泄漏
  • 成员数据获取逻辑错误:guild.members是成员集合,不能直接读取username和id属性,需要遍历集合逐个提取字段
  • 缺失文件生成逻辑:没有将整理好的成员数据转换为文本文件的逻辑
  • 频道调用语法过时:新版discord.js的频道查找需要走cache层,旧版find方法已废弃

修复后可用代码

// 引入discord.js必要模块,v14版本请替换为const { AttachmentBuilder } = require('discord.js')
const { MessageAttachment } = require('discord.js');
const devs = ['填写你的开发者用户ID'];

client.on("message", async (message) => {
  // 响应触发指令
  if (message.content === '16') {
    // 权限校验
    if (!devs.includes(message.author.id)) return;
    if (message.channel.type === "dm") return;

    const currentGuild = message.guild;
    // 拉取服务器全量成员,需要提前开启Server Members Intent权限
    await currentGuild.members.fetch();
    const exportContent = [];

    // 按要求格式整理成员数据
    currentGuild.members.cache.forEach(member => {
      exportContent.push(`${member.user.username}: ${member.user.id} used`);
    });

    // 生成文本文件附件
    const txtBuffer = Buffer.from(exportContent.join('\n'), 'utf-8');
    // v14版本请替换为 const attachment = new AttachmentBuilder(txtBuffer, { name: 'member_list.txt' })
    const attachment = new MessageAttachment(txtBuffer, 'member_list.txt');

    // 发送到目标频道,替换为你的实际频道ID
    const targetChannel = client.channels.cache.get('75759********20');
    if (targetChannel) {
      targetChannel.send({
        files: [attachment]
      });
    }
  }
});

前置配置要求

  • 前往Discord开发者平台的Bot管理页,开启Server Members Intent权限,否则无法拉取完整成员列表
  • 确保Bot在当前服务器拥有Server Members Intent对应权限,在目标发送频道拥有发送消息、上传附件权限
  • 如使用discord.js v14版本,按照代码注释修改附件构造方法即可

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

相关产品推荐
方舟 Agent Plan

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

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