Javascript 我正在尝试制作一个简单的不和谐机器人,它能告诉你时间
我试图在Mac上用JavaScript制作一个非常简单的Discord机器人,它以“2:54”格式显示时间。我将其编程为响应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
时间?
,但控制台会记录错误消息,例如“无法发送空消息”,或者干脆机器人不响应
与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给出的答案。代码添加了检查,以确保作者不是作者,这很好;而且总体上更干净。