如何设置时间格式并绕过服务器名称?

问题描述

所以我将要发布很多,但我已经对此进行了几天的破解,无法通过。基本上,使用下面的代码,我试图更改时间格式,还试图修复空错误,我认为我不能用我所说的那样。

错误#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,但它似乎对我来说无法正常工作?

output I want to change

我希望得到的只是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,},