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

Discord JavaScript机器人输入meme指令无响应问题求助

Discord机器人meme模块无响应问题原因
    1. 核心监听逻辑未执行:你将全部消息响应逻辑封装在asyncCall函数中,但代码中没有调用过该函数,导致机器人没有注册消息监听,所有指令都无法触发响应。
    1. 异步操作缺少await关键字:fetch和res.json()都是异步方法,不加await拿到的返回值是Promise对象而非实际接口数据,执行时会直接抛出异常,由于你没有做错误捕获所以看不到报错。
    1. 变量名拼写错误:过滤NSFW内容时使用了未定义的msg变量,实际上下文的消息对象命名为message,会触发引用错误中断代码执行。
    1. 回调函数未标记async:message事件的回调函数是普通函数,内部使用await关键字会直接报错,需要将回调函数标记为async。
    1. 模板字符串语法错误:构造Embed的url字段时使用单引号包裹变量模板,模板字符串需要用反引号包裹才能正确解析变量,生成的链接是无效的固定字符串。
    1. 接口字段调用错误:你请求的Imgur分区接口返回的帖子数据不存在reddit字段,强行调用只能拿到undefined,且Embed的图片地址被写死为测试链接,即使前面逻辑正常也不会展示抓取到的meme。
    1. 版本兼容问题:如果你使用的是discord.js v13及以上版本,message事件已被官方废弃,需要替换为messageCreate事件才能正常监听到用户消息。

修复示例

第一步:调整监听注册逻辑

你可以直接删掉asyncCall函数包裹,或者在client.login之前调用asyncCall()。

第二步:修复meme分支逻辑

// 回调函数加async
client.on("message", async function(message) { 
  // 原有逻辑不变
  case "Show me some memes":
    message.channel.send("MEMEY.....MEMEY.....MEMEY......\n")
    const subReddits = ["memes"];
    const random = subReddits[Math.floor(Math.random() * subReddits.length)];
    const url = `https://www.imgur.com/r/${random}/hot.json`;
    // 加await
    const res =  await fetch(url);
    const json =  await res.json();
    // 把msg替换为message
    const posts = json.data.filter(f => message.channel.nsfw || !f.nsfw);

    if (!posts.length) return message.channel.send("No posts, maybe try in a nsfw channel");
    const post = posts[Math.floor(Math.random() * posts.length)];
    const MemeEmbed = {
      color: 0x0099ff,
      // 用反引号,取正确的imgur帖子链接
      url: `https://imgur.com/${post.id}`,
      image: {
        // 用抓取到的图片地址
        url: post.link,
      },
    }
    message.channel.send({ embeds: [MemeEmbed] });
  break;
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 12:54:03