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
相关产品推荐
相关产品推荐

