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

Discord.js使用addField导致Embed每次调用命令重复添加内容如何修复

问题根因

  • 核心问题是你将MessageEmbed实例声明在了模块顶层,Node.js加载模块时会缓存该实例,每次执行execute方法都是在同一个已存在的Embed实例上操作,addField本身就是追加字段的逻辑,多次调用自然会累加重复的字段。
  • 你提到的setField不是Discord.js的原生方法,无法解决根本问题,就算你尝试用类似覆盖方法操作,全局实例的其他属性也会出现不同调用者数据串用的问题,比如A用户调用命令后B用户再调用,会显示A用户的残留数据。

修正方案

每次触发execute方法时,在函数内部创建全新的Embed实例即可,另外你原来的代码里导入了未使用的discord对象,可以直接删掉,修正后的代码如下:

const { MessageEmbed } = require('discord.js');
const users = require('../users.json');
const stand = require('../standsInfo.json');
module.exports = {
   name: 'profile',
   description: 'show the users profile',

   execute(message, args) {
    // 每次调用都创建新的Embed实例,避免数据残留累加
    const embed = new MessageEmbed();
    const user = message.author;
    const xpNeeded = (users[user.id].level+(users[user.id].level+1))*45;
    embed.setTitle(`${user.username}'s profile`);
    embed.setThumbnail(user.displayAvatarURL());
    embed.addField('level', `${users[user.id].level}`);
    embed.addField('experience', `${users[user.id].xp}/${xpNeeded}`); 

    message.channel.send({embeds: [embed] });
 }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 19:24:05