簡體   English   中英

請幫我處理我的 discord.js userinfo 命令

[英]Please help me with my discord.js userinfo command

我是 Stack Overflow 和 discord.js 的新手

所以我試圖在 discord.js 中創建一個 userinfo 命令,但我在控制台中不斷收到此錯誤:

const userFlags = (await member.user.fetchFlags()).toArray(); SyntaxError:意外的標識符

( member用^^^突出顯示)。 您在代碼后面也有錯誤。

這是代碼:

module.exports = {
    name: "userinfo",
    description: "Userinfo of mentioned user/id or if no one mentioned then yours",
   execute(client, msg, args, guild) {
         const embed = new MessageEmbed()
   const moment = require('moment');
   const Discord = require('discord.js');

   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;
      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', 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);
      }
    }

我在控制台中收到此錯誤:

      const userFlags = (await member.user.fetchFlags()).toArray();
                               ^^^^^^

SyntaxError: Unexpected identifier
    at wrapSafe (internal/modules/cjs/loader.js:979:16)
    at Module._compile (internal/modules/cjs/loader.js:1027:27)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
    at Module.load (internal/modules/cjs/loader.js:928:32)
    at Function.Module._load (internal/modules/cjs/loader.js:769:14)
    at Module.require (internal/modules/cjs/loader.js:952:19)
    at require (internal/modules/cjs/helpers.js:88:18)
    at Object.<anonymous> (/Users/victor/Desktop/BIT bot/main.js:11:19)
    at Module._compile (internal/modules/cjs/loader.js:1063:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)

像這樣使用await關鍵字時,您需要用括號括住您正在await的任何內容

const userFlags = ( await (member.user.fetchFlags()) ).toArray()

另一個更簡潔的選擇是為此創建另一個變量

const rawFlags = await member.user.fetchFlags()
const userFlags = rawFlags.toArray()

好的,所以這里有幾個問題。

  1. 更改此行execute(client, msg, args, guild) { execute: async(client, msg, args, guild) => {

  2. 我不鼓勵任何人使用msg.mentions.members.first() || msg.guild.members.cache.get(args[0]) || msg.member; msg.mentions.members.first() || msg.guild.members.cache.get(args[0]) || msg.member; 盡管它更容易編寫。 因為如果它想要的那個是undefined的,它只回退到下一個,它具有 Discord.js 的性質,它打算返回一個 object,即使沒有提到。 相反,使用三元運算符或 if 語句使用msg.mentions.members.first().id 這樣可以確保它始終返回已提到的人。 之后,您可以使用await guild.members.fetch(/* The mentioned user's ID */)查找成員。

這就是我所知道的,我希望我的解決方案對你有幫助,如果它仍然不適合你,請告訴我。



編輯:我剛剛意識到對於這個用例,三元運算符沒有真正的目的。 我個人會使用 if 語句,因為直接編寫它更容易,然后浪費時間定義回退和三元管理系統。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM