javascript - 当某人有太多角色无法嵌入嵌入时,如何发送“无法显示的角色太多”消息?
问题描述
这是我的whois
命令:
const Discord = require("discord.js")
const moment = require('moment');
const status = {
online: "Online",
idle: "Idle",
dnd: "Do Not Disturb",
offline: "Offline/Invisible"
};
module.exports = {
config: {
name: "whois",
description: "userinfo",
usage: "m/whois <mention a member/member id>",
aliases: ['ui', 'ifno']
},
run: async (bot, message, args) => {
var permissions = [];
var acknowledgements = 'None';
let whoisPermErr = new Discord.MessageEmbed()
.setTitle("**User Permission Error!**")
.setDescription("**Sorry, you don't have permissions to use this! ❌**")
const member = message.mentions.members.first() || message.guild.members.cache.get(args[0]) || message.member;
if(member.hasPermission("KICK_MEMBERS")){
permissions.push("Kick Members");
}
if(member.hasPermission("BAN_MEMBERS")){
permissions.push("Ban Members");
}
if(member.hasPermission("ADMINISTRATOR")){
permissions.push("Administrator");
}
if(member.hasPermission("MANAGE_MESSAGES")){
permissions.push("Manage Messages");
}
if(member.hasPermission("MANAGE_CHANNELS")){
permissions.push("Manage Channels");
}
if(member.hasPermission("MENTION_EVERYONE")){
permissions.push("Mention Everyone");
}
if(member.hasPermission("MANAGE_NICKNAMES")){
permissions.push("Manage Nicknames");
}
if(member.hasPermission("MANAGE_ROLES")){
permissions.push("Manage Roles");
}
if(member.hasPermission("MANAGE_WEBHOOKS")){
permissions.push("Manage Webhooks");
}
if(member.hasPermission("MANAGE_EMOJIS")){
permissions.push("Manage Emojis");
}
if(permissions.length == 0){
permissions.push("No Key Permissions Found");
}
if(member.user.id == message.guild.ownerID){
acknowledgements = 'Server Owner';
}
const embed = new Discord.MessageEmbed()
.setDescription(`<@${member.user.id}>`)
.setAuthor(`${member.user.tag}`, member.user.displayAvatarURL())
.setColor('#2F3136')
.setFooter(`ID: ${message.author.id}`)
.setThumbnail(member.user.displayAvatarURL())
.setTimestamp()
.addField('Joined at: ',`${moment(member.joinedAt).format("dddd, MMMM Do YYYY, HH:mm:ss")}`)
.addField('Created On', member.user.createdAt.toLocaleString())
.addField(`Roles [${member.roles.cache.filter(r => r.id !== message.guild.id).map(roles => `\`${roles.name}\``).length}]`,`${member.roles.cache.filter(r => r.id !== message.guild.id).map(roles => `<@&${roles.id }>`).join(" **|** ") || "No Roles"}`)
.addField("\nAcknowledgements: ", `${acknowledgements}`)
.addField("\nPermissions: ", `${permissions.join(` | `)}`);
message.channel.send({embed});
}
}
它确实有效,但是当提到的成员有太多角色时,它会出现错误,因为长度太长并且问题是它有太多角色。
如果提到的用户的角色太多,我该如何做到这一点,它会出现“角色太多”的消息?
我正在使用 Discord.js v12。
解决方案
使用 try/catch 语句
//embed is instance of MessageEmbed with description as the member's roles
try {
await message.channel.send(embed)
} catch(err) {
embed.setDescription('Too many roles');
message.channel.send(embed)
}
或使用.catch
message.channel.send(embed).catch(() => {
embed.setDescription('Too many roles');
message.channel.send(embed)
})
推荐阅读
- javascript - 如何捕获 Appium 的终端输出?
- python - 行中的Python Merge 2 excel表,没有唯一键
- centos - 从 CentOS 8 卸载 GDAL 软件包
- c++ - 元素不显示在对话框上
- keras - Keras 功能 API:tf.math.l2_normalize 杀死梯度
- android - Android Kotlin:Bottom Sheet Dialog 键盘与按钮重叠
- wordpress - 我如何解决这个问题的问题
- visual-studio - 如何修复自动完成弹出窗口在逃逸时关闭?
- ionic-framework - 旋转设备时如何全屏渲染视频
- django - 芹菜,芹菜在哪里检索任务计划列表?