Discord.js用户信息斜杠命令异常问题求助
问题定位与修复方案
1. 「Server Member Since」显示<t:NaN:R>的问题
原因:你操作的target大概率是User对象,而User对象没有joinedTimestamp属性——这个属性仅属于GuildMember(服务器成员)对象。用User的joinedTimestamp会得到undefined,代入时间格式化标签后就会出现NaN。
修复方式:从当前服务器中获取目标用户的GuildMember实例,而非直接使用交互参数里的User对象:
// 先拿到交互参数里的User对象(或默认用命令发起者) const user = interaction.options.getUser('target') || interaction.user; // 从服务器获取对应的GuildMember实例 const targetMember = await interaction.guild.members.fetch(user.id); // 正确格式化加入时间 const joinedAt = `<t:${Math.floor(targetMember.joinedTimestamp / 1000)}:R>`;
2. 「Roles Info」全显示“No roles found”的问题
原因:同样是误操作了User对象而非GuildMember对象,User没有roles属性;另外即使拿到GuildMember,默认会包含@everyone角色,需要排除才会显示有效角色列表。
修复方式:使用GuildMember的roles.cache获取角色列表,过滤掉@everyone,最高角色直接调用内置属性:
// 基于上面获取的targetMember const rolesList = targetMember.roles.cache .filter(role => role.id !== interaction.guild.id) // 排除@everyone角色 .sort((a, b) => b.position - a.position) // 按角色权限从高到低排序 .map(role => `<@&${role.id}>`) .join(', ') || "No roles found"; const highestRole = targetMember.roles.highest.id !== interaction.guild.id ? `<@&${targetMember.roles.highest.id}>` : "N/A";
核心代码片段示例
async function execute(interaction) { try { // 提前判断是否在服务器内执行命令(DM中无guild) if (!interaction.guild) { return interaction.reply({ content: '此命令仅能在服务器内使用', ephemeral: true }); } const user = interaction.options.getUser('target') || interaction.user; const targetMember = await interaction.guild.members.fetch(user.id); // 处理加入时间 const joinedAt = `<t:${Math.floor(targetMember.joinedTimestamp / 1000)}:R>`; // 处理角色信息 const rolesList = targetMember.roles.cache .filter(role => role.id !== interaction.guild.id) .sort((a, b) => b.position - a.position) .map(role => `<@&${role.id}>`) .join(', ') || "No roles found"; const highestRole = targetMember.roles.highest.id !== interaction.guild.id ? `<@&${targetMember.roles.highest.id}>` : "N/A"; // 回复用户信息 await interaction.reply({ embeds: [ { title: `${user.tag} 的服务器信息`, fields: [ { name: 'Server Member Since', value: joinedAt, inline: true }, { name: 'Highest Role', value: highestRole, inline: true }, { name: 'Roles Info', value: rolesList } ] } ] }); } catch (error) { console.error(error); await interaction.reply({ content: '获取用户信息失败,请重试', ephemeral: true }); } }
注意:确保机器人拥有GuildMembers权限,否则无法正常获取服务器成员信息。
内容的提问来源于stack exchange,提问作者RipTide 12
相关产品推荐
相关产品推荐

