问题描述
所以我将要发布很多,但我已经对此进行了几天的破解,无法通过。基本上,使用下面的代码,我试图更改时间格式,还试图修复空错误,我认为我不能用我所说的那样。
错误#1 ------------------------------
(node:8844) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'name' of null
at Object.execute (C:\filepath\bot\commands\serverinfo.js:22:39)
at Client.<anonymous> (C:\filepath\bot\main.js:54:43)
at Client.emit (events.js:314:20)
at MessageCreateAction.handle (C:\filepath\bot\node_modules\discord.js\src\client\actions\MessageCreate.js:31:14)
at Object.module.exports [as MESSAGE_CREATE] (C:\filepath\bot\node_modules\discord.js\src\client\websocket\handlers\MESSAGE_CREATE.js:4:32)
at WebSocketManager.handlePacket (C:\filepath\bot\node_modules\discord.js\src\client\websocket\WebSocketManager.js:384:31)
at WebSocketShard.onPacket (C:\filepath\bot\node_modules\discord.js\src\client\websocket\WebSocketShard.js:444:22)
at WebSocketShard.onMessage (C:\filepath\bot\node_modules\discord.js\src\client\websocket\WebSocketShard.js:301:10)
at WebSocket.onMessage (C:\filepath\bot\node_modules\ws\lib\event-target.js:125:16)
at WebSocket.emit (events.js:314:20)
(节点:8844)UnhandledPromiseRejectionWarning:未处理的承诺拒绝。该错误是由于在没有catch块的情况下抛出异步函数而引起的,或者是由于拒绝了未经.catch()处理的诺言而引起的。要在未处理的承诺拒绝时终止节点进程,请使用CLI标志--unhandled-rejections=strict
(请参见https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode)。 (拒绝ID:1)
(节点:8844)[DEP0018] DeprecationWarning:已弃用未处理的承诺拒绝。将来,未处理的诺言拒绝会以以下方式终止Node.js进程:
非零退出代码。
我得出的结论是,它当然不能拉出DM的服务器名称,但是我不知道如何在仅装载DM部分然后将通道部分分开的地方打破下面的代码?我尝试了2个单独的.js文件,而DM发送了一个,但没有发送服务器?
错误#2 ------------------------------
我正在尝试更改时间和日期格式,所以不会太长。以下是我当前的输出以及我想要获得的输出。我一直在尝试使用moment.js,但它似乎对我来说无法正常工作?
我希望得到的只是MM / DD / YYYY。如果有人可以帮助我,我将不胜感激。
代码-------------
const { prefix } = require('../config.json');
module.exports = {
name: 'serverinfo',description: 'sends the serverinfo command',execute(message,args) {
const discord = require('discord.js');
const client = new discord.Client();
const user = message.author;
var moment = require('moment'); // require
const keepinservercommandembed = new discord.MessageEmbed()
.setColor('#FF0000')
.setTitle('**Im Sorry!**')
.setThumbnail('https://i.imgur.com/7Gvh8VL.png')
.addFields(
{ name: `**Can` + `'t accept: ${prefix}serverinfo**`,value: 'Please keep the commands to the server!' },)
if(message.channel.type == "dm") {
message.channel.send(keepinservercommandembed);
}
const serverinfocommandembed = new discord.MessageEmbed()
.setColor('#0000FF')
.setTitle(`**"${message.guild.name}" Server information**`)
.setDescription('Per your request here is a little bit of information about the server we you invoked this command in:')
.setThumbnail(message.guild.iconURL())
.addFields(
{ name: '**Server Owner**:',value: `${message.guild.owner}`,inline: true },{ name: '**Joined On**:',value: `${message.member.joinedAt}`,{ name: '**Total Members**:',value: `${message.guild.memberCount}`,{ name: '**Role Count**:',value: `${message.guild.roles.cache.size}`,)
if (message.channel) {
moment().format();
message.delete();
message.channel.send(serverinfocommandembed);
}
}
}
解决方法
TypeError:无法读取null的属性“名称”
正如您所说,这是因为DM通道不在公会中,所以dmChannel.guild
将返回null
。通过比较channel.type
来尝试修复它的方法也可行,除了一个问题:您发现通道是DM之后没有停止执行,所以它继续运行。
这是您正在做的简化示例:
function isTheNumberOne(num) {
if (num !== 1) console.log('The number is not one'); // even though the script knows the nuber isn't one
console.log('The number is one'); // it moves right forward into saying the number is 1
};
isTheNumberOne(2)
您应该做的是要么创建else
语句,要么就在此处创建return
。
function isTheNumberOne(num) {
if (num !== 1)
return console.log('The number is not one'); // stop execution
console.log('The number is one');
};
isTheNumberOne(2)
function isTheNumberOne(num) {
if (num !== 1)
return console.log('The number is not one'); // only moves forward if number is not 1
else console.log('The number is one');
};
isTheNumberOne(2)
在发送嵌入之前,您已经通过if (message.channel)
语句尝试过类似的操作,但是嵌入内容已经加载,因此漫游器已经出现错误,使该语句过时了。
if(message.channel.type == "dm")
return message.channel.send(keepinservercommandembed);
我希望得到的只是MM / DD / YYYY
您可以为此使用npm软件包moment
,看起来您已将其导入到文件中。现在,您只需要使用format
函数即可。
{
name: '**Joined On**:',value: moment(message.member.joinedAt).format('MM/DD/YYYY'),inline: true,},