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

Discord.js V14:实现8ball命令后自动回复用户任意消息

解决Discord.js V14中8ball命令触发后自动回复所有用户消息的问题

首先,你的原始代码存在两处关键错误,需要先修正:

  • 随机数计算错误:Math.floor(Math.random()*message.length) 应改为 Math.floor(Math.random()*messages.length),要基于预设回复数组的长度生成随机索引
  • 回复内容错误:message.reply(message[rnd]) 应改为 message.reply(messages[rnd]),需从预设的回复数组中取值

要实现「触发8ball命令后,用户发任何内容都自动回复」的需求,核心是跟踪触发命令的用户,对其后续所有消息自动发送随机回复。具体实现如下:

实现步骤

  1. 用集合维护处于自动回复状态的用户ID,避免干扰其他用户
  2. 当用户发送8ball命令时,将其ID加入集合,告知进入自动回复模式
  3. 全局监听消息,对集合内用户的所有消息自动发送随机回复,同时支持退出命令

完整修正代码

// 存储正在使用8ball自动回复的用户ID
const active8ballUsers = new Set();

client.on('messageCreate', async (message) => {
  // 忽略机器人自身发送的消息,避免循环回复
  if (message.author.bot) return;

  // 触发8ball自动回复模式
  if (message.content.trim() === '8ball') {
    active8ballUsers.add(message.author.id);
    await message.reply('已进入8ball自动回复模式,你发任何内容我都会随机回复~ 发送"exit8ball"可退出');
    return;
  }

  // 退出自动回复模式
  if (message.content.trim() === 'exit8ball' && active8ballUsers.has(message.author.id)) {
    active8ballUsers.delete(message.author.id);
    await message.reply('已退出8ball自动回复模式');
    return;
  }

  // 对处于自动回复状态的用户发送随机回复
  if (active8ballUsers.has(message.author.id)) {
    const replies = [
      '**NO**', '**YES**', '**MAYBE**', '**NEVER**', '**ASK AGAIN**',
      '**YES DEFINITELY.**', '**DONT COUNT ON IT**', '**BETTER NOT TELL YOU NOW**',
      '**MY REPLY IS NO**', '**YOU MAY RELY ON IT**', '**AS I SEE IT, YES**'
    ];
    const randomIndex = Math.floor(Math.random() * replies.length);
    await message.reply(replies[randomIndex]);
  }
});

代码说明

  • active8ballUsers集合用于精准跟踪需要自动回复的用户,不会影响其他正常聊天的用户
  • 增加exit8ball命令,让用户可以主动结束自动回复模式
  • 修正了原代码中随机数生成和回复内容的错误,确保随机回复功能正常运行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 07:40:21