【发布时间】:2021-07-16 00:58:06
【问题描述】:
我的禁令命令有些问题,我不太清楚为什么。这里的一切看起来都有效,但是每次我尝试运行 ban 命令时,我都会在控制台中遇到很多错误。当你运行命令时,它应该禁止用户,向日志频道发送消息,并使用quick.db 存储惩罚信息。有人看到我做错了什么吗?
代码:
const { MessageEmbed } = require("discord.js");
const convertToMS = require('../lib/convertTime');
const embedStruc = require('../lib/embedStructure');
const e = require('../embeds.json');
const consola = require("consola");
const db = require("quick.db");
const validateUser = (guild, id) => {
let userID = id;
if (userID.indexOf('<@!') > -1) {
userID = userID.split('<@!')[1];
userID = userID.slice(0, -1)
} else if (userID.indexOf('<@') > -1) {
userID = userID.split('<@')[1];
userID = userID.slice(0, -1)
}
const actualMember = guild.members.cache.get(userID);
if (!actualMember) return false;
return actualMember.id;
}
module.exports = {
name: 'ban',
description: 'Bans a user',
alias: [],
async execute(message, args, client, prefix, logsChannel) {
if(!message.member.hasPermission("ADMINISTRATOR")) return;
if (args.length === 0) {
return message.channel.send(
new MessageEmbed()
.setColor(e.red)
.setDescription(
`:x: **Invalid Arguments**\n` +
`\`${prefix}ban [@mention/user id] (reason)\``
)
).catch();
}
let punishedUser = validateUser(message.guild, args[0]);
if (!punishedUser) {
return message.channel.send(
new MessageEmbed()
.setColor(e.red)
.setDescription(
`:x: **Invalid User**`
)
).catch();
}
let reason = 'No reason provided';
if (args.length > 1) {
let tempArgs = args.join(' ').split(' ');
await tempArgs.shift();
await tempArgs.shift();
reason = tempArgs.join(' ');
}
const bannedUser = message.guild.members.cache.get(punishedUser);
const banID = db.add(`${message.guild.id}.base`, 1).base;
if (!bannedUser.bannable) {
return message.channel.send(
new MessageEmbed()
.setColor(e.red)
.setDescription(`:x: Unable to ban <@!${bannedUser.id}>.`)
);
}
await bannedUser.send(
embedStruc.userBan(
reason,
message.guild.name,
banID
)
).catch(() => {});
await bannedUser.ban(`Banned for "${reason}" by ${message.author.tag}`)
.catch(() => {
return message.channel.send(
new MessageEmbed()
.setColor(e.red)
.setDescription(`:x: Unable to ban <@!${bannedUser.id}>.`)
);
});
message.channel.send(
new MessageEmbed()
.setColor(e.default)
.setDescription(
`:scream: <@!${bannedUser.id}> was banned.`
)
).catch();
logsChannel.send(
embedStruc.logsBan(
bannedUser.id,
message.author.id,
reason,
Date.now(),
banID
)
).catch();
db.set(`${message.guild.id}.punishments.${banID}`, {
user: bannedUser.id,
moderator: message.author.id,
reason,
time: Date.now(),
ID: banID,
type: "BAN"
});
db.push(`${message.guild.id}.${bannedUser.id}.punishments`, banID);
},
};
错误:
(node:23906) UnhandledPromiseRejectionWarning: RangeError [EMBED_FIELD_VALUE]: MessageEmbed field values may not be empty.
at Function.normalizeField (/Users/evandeede/Downloads/modbot/node_modules/discord.js/src/structures/MessageEmbed.js:432:23)
at /Users/evandeede/Downloads/modbot/node_modules/discord.js/src/structures/MessageEmbed.js:452:14
at Array.map (<anonymous>)
at Function.normalizeFields (/Users/evandeede/Downloads/modbot/node_modules/discord.js/src/structures/MessageEmbed.js:451:8)
at MessageEmbed.addFields (/Users/evandeede/Downloads/modbot/node_modules/discord.js/src/structures/MessageEmbed.js:266:42)
at MessageEmbed.addField (/Users/evandeede/Downloads/modbot/node_modules/discord.js/src/structures/MessageEmbed.js:257:17)
at Object.logsBan (/Users/evandeede/Downloads/modbot/lib/embedStructure.js:163:10)
at Object.execute (/Users/evandeede/Downloads/modbot/commands/ban.js:98:24)
at processTicksAndRejections (internal/process/task_queues.js:93:5)
(Use `node --trace-warnings ...` to show where the warning was created)
(node:23906) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)
(node:23906) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
【问题讨论】:
-
能否请您包括您在问题中遇到的错误?
-
在没有错误的情况下调试任何错误非常困难 - 请考虑
-
对不起,我刚刚在错误信息中添加了
-
看起来您在嵌入中缺少
values,因此它会有效地创建一个空字段,这是不可能的。调试代码并在嵌入中查找undefined变量 -
这似乎是您使用的一个值未定义的问题,或者是
../lib/embedStructure文件中的问题。检查您在第 93 行传递给函数的变量是否正确定义,如果它们定义正确,则给我们embedStructure文件。
标签: javascript discord.js quick.db