Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我正在尝试制作一个简单的不和谐机器人,它能告诉你时间_Javascript_Node.js_Discord.js - Fatal编程技术网

Javascript 我正在尝试制作一个简单的不和谐机器人,它能告诉你时间

Javascript 我正在尝试制作一个简单的不和谐机器人,它能告诉你时间,javascript,node.js,discord.js,Javascript,Node.js,Discord.js,我试图在Mac上用JavaScript制作一个非常简单的Discord机器人,它以“2:54”格式显示时间。我将其编程为响应时间?,但控制台会记录错误消息,例如“无法发送空消息”,或者干脆机器人不响应 与discord客户端的连接可以正常工作,但消息不能正常工作 以下是完整的代码: var discord=require('discord.js')) var client=newdiscord.client client.login(“”) var clientlogin=(“时间机器人”) c

我试图在Mac上用JavaScript制作一个非常简单的Discord机器人,它以“2:54”格式显示时间。我将其编程为响应
时间?
,但控制台会记录错误消息,例如“无法发送空消息”,或者干脆机器人不响应

与discord客户端的连接可以正常工作,但消息不能正常工作

以下是完整的代码:

var discord=require('discord.js'))
var client=newdiscord.client
client.login(“”)
var clientlogin=(“时间机器人”)
client.on(“ready”,function()){
log(“以“时间机器人”身份登录”)
});
client.on('message',msg=>{
如果(msg.content=='time?'){
变量日期=新日期();
var Hour=date.getHours();
var Minute=date.getMinutes();
var Second=date.getSeconds();
变量时间=(小时、分钟、秒);
client.on('message',msg=>{
msg.channel.send(时间);
console.log(时间);
});
}
});

这个问题的解决方案可能很简单,但我无法找到它。

您不需要第二个
客户端。在('message')…
上,因为您已经在侦听传入的消息

var Time=(小时、分钟、秒);
中的时间只存储秒,而不存储格式化的时间。但是,使用格式化当前日期可以轻松创建此bot

您可以检查传入的消息,如果是
时间?
,您可以创建新的日期、格式化并发送:

const{Client}=require('discord.js');
const client=new client();
client.login(令牌);
client.on(“ready”,function()){
log(“以“时间机器人”身份登录”)
});
client.on('message',(msg)=>{
如果(msg.author.bot)返回;
如果(msg.content=='time?'){
const formattedTime=new Date().toLocaleTimeString([],{timeStyle:'short'});
msg.channel.send(格式化时间);
}
});

PS:我不确定你所说的“2:54”格式是什么意思。

你正面临这个问题,因为你的代码中有这一部分:

client.on('message', msg => {
  if (msg.content === 'time?') {


    var date = new Date();

    var Hour = date.getHours();
    var Minute = date.getMinutes();
    var Second = date.getSeconds();

    var Time = (Hour, Minute, Second);

    // This is the badly behaving code!
    client.on('message', msg => {
      msg.channel.send(Time);
      console.log(Time);
    });
  }
});
客户端中的代码。on('message',msg=>…
将订阅message received事件,因此下次您的bot接收到消息时,它将启动。由于此函数不检查
时间?
内容,它实际上将以无限循环的方式发送消息,并点击Discord的速率限制

另一个问题是您的时间格式。您可以将
var time=(小时,分钟,秒);
替换为
var time=`${Hour}:${Minute}`;
以“hh:mm”格式显示消息。您可以在
${Minute}
部分之后附加
${Second}
以在消息中显示秒数!(hh:mm:ss)


如果您想用零填充数字,可以执行
var-Time=`${String(Hour).padStart(2,'0')}:${String(Minute).padStart(2,'0')}`;

您不需要第二个
客户机.on('message'msg=>{

我建议使用@Zsolt Meszaros给出的答案。代码添加了检查,以确保作者不是作者,这很好;而且总体上更干净。