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

如何编写代码将指定频道内的所有消息记录到本地文本文件中

原代码问题排查
  • 单次仅拉取1条消息,无法获取全量频道记录
  • Discord API单次拉取消息上限为100条,需循环分页拉取才能获取全部历史消息
  • 调用writeFile时未传入待写入的消息内容,路径转义错误,也未处理异步写入的错误逻辑
  • 未引入Node.js内置fs模块的相关方法,无法完成文件写入操作
适配discord.js v12的可用代码
const { writeFile } = require('fs').promises;

module.exports = {
  name: 'log',
  description: "拉取指定频道所有消息并写入本地文本文件",
  async execute(message, args) {
    const targetChannelId = "907278968212824164";
    const targetChannel = await client.channels.get(targetChannelId);
    if (!targetChannel) return console.error("未找到指定频道");

    let allMessages = [];
    let lastMessageId = null;

    // 循环分页拉取所有消息,单次最多拉100条
    while (true) {
      const fetchOptions = { limit: 100 };
      if (lastMessageId) fetchOptions.before = lastMessageId;
      
      const fetchedMessages = await targetChannel.fetchMessages(fetchOptions);
      if (fetchedMessages.size === 0) break;

      allMessages = allMessages.concat(Array.from(fetchedMessages.values()));
      lastMessageId = fetchedMessages.last().id;
    }

    // 格式化消息内容,可根据需求调整格式
    const logContent = allMessages.map(msg => 
      `[${msg.createdAt.toLocaleString()}] ${msg.author.tag}: ${msg.content}\n`
    ).join('');

    // 写入文件
    await writeFile('./MessageLog.txt', logContent, 'utf-8');
    console.log(`已成功写入${allMessages.length}条消息到MessageLog.txt`);
  }
}
适配说明
  • 如果使用discord.js v13及以上版本,将fetchMessages替换为messages.fetch即可,其余逻辑通用
  • 确保机器人拥有目标频道的「查看消息」「读取消息历史」权限
  • 消息数量过多时拉取耗时较长,可按需添加进度提示逻辑
  • 如需保存消息中的附件、嵌入内容等,可自行拓展logContent的格式化逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 22:36:01