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

discord.js编写userinfo命令触发SyntaxError: Unexpected identifier报错如何解决

错误原因

  • await关键字仅允许在标记了async的异步函数中使用,你代码中的execute函数未添加async声明,导致JS解析await时报非法标识符语法错误。
  • 代码存在额外隐含问题:statuses、flags两个映射对象未定义,后续运行也会触发报错;离线用户无presence属性未做兼容,会触发读取属性报错;存在多余的未使用embed变量;require导入放在函数内不符合常规编码规范。

修复方法

  1. 给execute函数添加async声明
  2. 补充缺失的映射对象,添加离线状态兼容逻辑,优化导入位置
  3. 完整修正后代码如下:
const moment = require('moment');
const Discord = require('discord.js');
// 补充缺失的状态映射
const statuses = {
  online: '在线',
  idle: '闲置',
  dnd: '请勿打扰',
  offline: '离线'
};
// 补充缺失的徽章映射
const flags = {
  DISCORD_EMPLOYEE: 'Discord员工',
  PARTNERED_SERVER_OWNER: '合作服务器所有者',
  HYPESQUAD_EVENTS: 'HypeSquad活动成员',
  BUGHUNTER_LEVEL_1: 'Bug猎手1级',
  HOUSE_BRAVERY: 'HypeSquad勇气之屋',
  HOUSE_BRILLIANCE: 'HypeSquad智慧之屋',
  HOUSE_BALANCE: 'HypeSquad平衡之屋',
  EARLY_SUPPORTER: '早期支持者',
  TEAM_USER: '团队用户',
  BUGHUNTER_LEVEL_2: 'Bug猎手2级',
  VERIFIED_BOT: '认证机器人',
  EARLY_VERIFIED_BOT_DEVELOPER: '早期认证机器人开发者'
};

module.exports = {
  name: "userinfo",
  description: "Userinfo of mentioned user/id or if no one mentioned then yours",
  async execute(client, msg, args, guild) {
    const member =  msg.mentions.members.first() || msg.guild.members.cache.get(args[0]) || msg.member;
    if (!member) 
      return msg.channel.send('Please mention the user for the userinfo..');
    const userFlags = (await member.user.fetchFlags()).toArray();
    const activities = [];
    let customStatus;
    // 增加presence为空的兼容判断,防止离线用户报错
    if (member.presence) {
      for (const activity of member.presence.activities.values()) {
        switch (activity.type) {
          case 'PLAYING':
            activities.push(`Playing **${activity.name}**`);
            break;
          case 'LISTENING':
            if (member.user.bot) activities.push(`Listening to **${activity.name}**`);
            else activities.push(`Listening to **${activity.details}** by **${activity.state}**`);
            break;
          case 'WATCHING':
            activities.push(`Watching **${activity.name}**`);
            break;
          case 'STREAMING':
            activities.push(`Streaming **${activity.name}**`);
            break;
          case 'CUSTOM_STATUS':
            customStatus = activity.state;
            break;
        }
      }
    }
    const uiembed = new Discord.MessageEmbed()
    .setTitle(`${member.displayName}'s Information`)
      .setThumbnail(member.user.displayAvatarURL({ dynamic: true }))
      .addField('User', member, true)
      .addField('Discriminator', `\`#${member.user.discriminator}\``, true)
      .addField('ID', `\`${member.id}\``, true)
      .addField('Status', member.presence ? statuses[member.presence.status] : '离线', true)
      .addField('Bot', `\`${member.user.bot}\``, true)
      .addField('Color Role', member.roles.color || '`None`', true)
      .addField('Highest Role', member.roles.highest, true)
      .addField('Joined server on', `\`${moment(member.joinedAt).format('MMM DD YYYY')}\``, true)
      .addField('Joined Discord on', `\`${moment(member.user.createdAt).format('MMM DD YYYY')}\``, true)
      .setFooter(msg.member.displayName,  msg.author.displayAvatarURL({ dynamic: true }))
      .setTimestamp()
      .setColor(member.displayHexColor);
   if (activities.length > 0) uiembed.setDescription(activities.join('\n'));
    if (customStatus) uiembed.spliceFields(0, 0, { name: 'Custom Status', value: customStatus});
    if (userFlags.length > 0) uiembed.addField('Badges', userFlags.map(flag => flags[flag]).join('\n'));
    msg.channel.send(uiembed);
    }
  }

注:以上代码适配discord.js v12/v13版本,若你使用v14及以上版本,MessageEmbed导入、fetchFlags等API有调整,需要对应修改API调用方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 16:15:05