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

Discord.js用户DM消息获取、日志记录及触发回复功能开发问询

Discord.js 机器人功能实现方案

前置准备

  • 安装discord.js v14依赖,执行命令:npm install discord.js@latest
  • 前往Discord开发者后台,为你的机器人开启Message Content Intent权限,否则无法读取用户消息内容
  • 提前准备好对应ID参数:机器人Token、需要监控的指定用户ID、DM消息同步频道ID、Hello消息触发后的目标发送频道ID

核心实现代码

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

const client = new Client({
  intents: [
    GatewayIntentBits.DirectMessages, // 开启DM消息监听权限
    GatewayIntentBits.Guilds,
    GatewayIntentBits.GuildMessages,
    GatewayIntentBits.MessageContent // 必须开启,否则无法读取消息内容
  ],
  partials: ['CHANNEL', 'MESSAGE'] // 处理DM频道的部分加载问题
});

// 配置项,请替换为你自己的实际ID
const CONFIG = {
  BOT_TOKEN: '你的机器人Token',
  TARGET_USER_ID: '要监控的指定用户ID',
  DM_SYNC_CHANNEL_ID: 'DM消息同步的服务器频道ID',
  HELLO_TARGET_CHANNEL_ID: 'Hello消息触发后发送的目标频道ID'
};

client.on('ready', () => {
  console.log(`机器人已登录,当前账号:${client.user.tag}`);
});

client.on('messageCreate', async (message) => {
  // 忽略机器人自己发送的消息,避免循环触发
  if (message.author.bot) return;
  // 仅处理DM频道消息
  if (message.channel.type !== ChannelType.DM) return;

  // --------------------------
  // 功能1:DM消息记录同步
  // --------------------------
  // 仅定向记录指定用户DM,若要全量记录所有用户DM,删除下面这行的用户ID判断即可
  if (message.author.id === CONFIG.TARGET_USER_ID) {
    const syncChannel = await client.channels.fetch(CONFIG.DM_SYNC_CHANNEL_ID).catch(() => null);
    if (syncChannel?.isTextBased()) {
      syncChannel.send(`
**DM消息记录**
发信用户:${message.author.tag} (${message.author.id})
发送时间:<t:${Math.floor(message.createdTimestamp / 1000)}>
消息内容:${message.content}
      `.trim());
      // 如果需要同步消息中的附件,可以额外添加附件发送逻辑
      if (message.attachments.size > 0) {
        syncChannel.send({ files: message.attachments.map(att => att.url) });
      }
    }
  }

  // --------------------------
  // 功能2:Hello消息触发回复
  // --------------------------
  if (message.author.id === CONFIG.TARGET_USER_ID && message.content.trim() === 'Hello!') {
    const targetChannel = await client.channels.fetch(CONFIG.HELLO_TARGET_CHANNEL_ID).catch(() => null);
    if (targetChannel?.isTextBased()) {
      targetChannel.send('Hello!');
    }
  }
});

client.login(CONFIG.BOT_TOKEN);

功能说明

  • 消息记录规则:默认仅同步指定ID用户的DM消息,删除对应用户ID判断条件即可实现全量DM消息同步
  • 异常兼容:代码中添加了频道获取的异常捕获,避免频道不存在、无权限等问题导致机器人崩溃
  • 内容同步:默认同步文本内容与消息附件,可根据需求自行扩展添加嵌入消息、表情回复等内容的同步逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 19:45:03