You need to enable JavaScript to run this app. Discord.js机器人修改Reddit接口后仍同时发送两个子版meme的问题排查
优惠活动
大模型
产品
解决方案
定价
更多

Discord.js机器人修改Reddit接口后仍同时发送两个子版meme的问题排查

异常原因定位
  • 触发双图输出的核心原因是项目存在未清理的旧代码残留:开发初期跟着教程编写时,曾在主入口的message事件回调中,直接写入请求r/memes的meme处理逻辑;后续将逻辑抽离为独立指令模块时,没有彻底删除主文件中的旧代码段。触发meme指令时,旧逻辑和新模块逻辑会并行执行,分别向两个子版发起请求,最终输出两张不同来源的梗图。
  • 次要可能诱因:命令存放目录中同时存在两个导出name: 'meme'的模块文件(旧版请求r/memes、新版请求r/marvelmemes),且命令加载逻辑未做同名去重,导致指令触发时重复执行请求。
  • 现有代码的潜在隐患:Embed实例在got请求外层定义,虽不会直接造成跨子版发图,但在并发触发指令时可能出现不同请求的内容串扰。
解决步骤
  • 全局检索项目所有代码文件中的r/memes字符串,删除所有和当前meme指令模块无关的旧请求逻辑、旧meme模块文件,确保项目内仅保留一份指向r/marvelmemes的meme实现。
  • 调整meme模块的代码逻辑,将Embed实例初始化移入请求回调内部,补充Reddit接口要求的请求头与异常捕获逻辑,修改后可直接运行的代码如下:
const got = require('got');
module.exports = {
    name: 'meme',
    description: "send a meme",
    execute(message, args, Discord) {
        got('https://www.reddit.com/r/marvelmemes/random/.json', {
            headers: {
                'User-Agent': 'MCU-Meme-Discord-Bot/1.0'
            }
        }).then(response => {
            // 每次请求独立初始化Embed,避免作用域串扰
            const embed = new Discord.MessageEmbed()
            const content = JSON.parse(response.body);
            const post = content[0].data.children[0].data;
            // 自动跳过置顶、NSFW内容,保证输出符合服务器要求
            if (post.stickied || post.over_18) return this.execute(message, args, Discord);

            const memeUrl = `https://reddit.com${post.permalink}`;
            embed.setTitle(post.title)
            embed.setURL(memeUrl)
            embed.setImage(post.url)
            embed.setColor('RANDOM')
            embed.setFooter(`👍 ${post.ups} 👎 ${post.downs} 💬 ${post.num_comments}`)
            message.channel.send(embed);
        }).catch(err => {
            console.error('梗图请求异常:', err);
            message.channel.send('梗图加载失败,请稍后重试');
        })
    }
}
  • 检查命令加载逻辑,确保每个命令名仅对应唯一的模块实例,避免重复注册导致的重复执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.03 04:45:09