[英]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()
好的,所以这里有几个问题。
更改此行execute(client, msg, args, guild) {
execute: async(client, msg, args, guild) => {
我不鼓励任何人使用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.