我对Javascript了解不多,所以请耐心听我说。
所以,我想为我的不和谐机器人发出命令。基本上,我想发生的是,当你发布“!记录”,我想让机器人发送一个RichEmbed与2个选项,你可以选择。
if (message.content.startsWith(config.prefix + 'records')) {
const embed = new Discord.RichEmbed()
.setTitle('D E I C I D E Records')
.setAuthor('D E I C I D E', 'https://cdn.discordapp.com/attachments/430238345826664448/430504575502385154/logo.png')
.setColor(3447003)
.setDescription('Please select an option.')
.setTimestamp()
.addField('1. Raid Wins', 'Respond with "1" for Raid Wins.')
.addField('2. Defense Wins', 'Respond with "2" for Defense Wins.')
message.channel.send({embed})
我已经把那部分搞定了。这正是我想要的。它发送带有两个选项的RichEmbed。
接下来我想做的是,当您发送“1”或“2”时,我希望Bot回复正确的记录。这是我不能理解的部分。以下是所有代码:
if (message.content.startsWith(config.prefix + 'records')) {
const embed = new Discord.RichEmbed()
.setTitle('D E I C I D E Records')
.setAuthor('D E I C I D E', 'https://cdn.discordapp.com/attachments/430238345826664448/430504575502385154/logo.png')
.setColor(3447003)
.setDescription('Please select an option.')
.setTimestamp()
.addField('1. Raid Wins', 'Respond with "1" for Raid Wins.')
.addField('2. Defense Wins', 'Respond with "2" for Defense Wins.')
message.channel.send({embed})
message.channel.awaitMessages(response => response.content === '1', {
max: 1,
time: 10000,
errors: ['Ran out of time!'],
})
message.channel.send(drecords.RaidWins)
message.channel.awaitMessages(response => response.content === '2', {
max: 1,
time: 10000,
errors: ['Ran out of time!']
})
message.channel.send(drecords.DefenseWins)
} else
有人能概括一下我做错了什么吗?
此外,我希望能够说出一个简单的命令来更新记录,而不必进入机器人的文件并手动执行。
if (message.content.startsWith(config.prefix + 'updateraids')) {
let newRecords = message.content.split(" ").slice(1, 2)[0];
drecords.RaidWins = newRecords;
fs.writeFile('./drecords.json', JSON.stringify(drecords), (err) => console.error);
} else
if (message.content.startsWith(config.prefix + 'updatedefenses')) {
let newRecords = message.content.split(" ").slice(1, 2)[1];
drecords.DefenseWins = newRecords;
fs.writeFile('./drecords.json', JSON.stringify(drecords), (err) => console.error);
}
目前,当你说这些命令中的任何一个,然后在后面说一些文本,例如,“!更新防御系统DefenseWin2",它替换第一个字符串(DefenseWin1),而不是在机器人的文件中添加另一个。我将如何删除一个条目而不是添加一个条目?抱歉,如果这里有点太多,我想把它们都挤到一个帖子里,因为这都是相关的。
我做了好几个小时的研究,研究了其他的问题,讨论了一些不和谐的问题。js和《傻瓜指南》YouTube教程,但运气不好。
这里的任何帮助都将不胜感激。
如果查看文档的等待消息
部分中的示例,您需要将发送响应的代码部分放在中。然后
。
差不多
message.channel.awaitMessages(response => response.content === '1', {
max: 1,
time: 10000,
errors: ['Ran out of time!'],
})
.then(message.channel.send(drecords.RaidWins));
message.channel.awaitMessages(response => response.content === '2', {
max: 1,
time: 10000,
errors: ['Ran out of time!']
})
.then(message.channel.send(drecords.DefenseWins));
关于文件问题,你能详细说明一下文件的格式和命令的外观吗?
您没有正确使用waitingmessages
。您只需要一个,而不是两个或更多的案件。过滤器将检查消息是1还是2。下面是您的代码应该是什么样子。我还修复了您的“超时”错误处理程序。
client.on("message", message => {
if (message.content.startsWith("/records")) {
const embed = new Discord.RichEmbed()
.setTitle('D E I C I D E Records')
.setAuthor('D E I C I D E', 'https://cdn.discordapp.com/attachments/430238345826664448/430504575502385154/logo.png')
.setColor(3447003)
.setDescription('Please select an option.')
.setTimestamp()
.addField('1. Raid Wins', 'Respond with "1" for Raid Wins.')
.addField('2. Defense Wins', 'Respond with "2" for Defense Wins.');
message.channel.send({embed})
message.channel.awaitMessages(response => (response.content === '1' || response.content === "2"), {
max: 1,
time: 10000,
errors: ['time']
}).then(mg => {
if (mg.first().content === "1"){ //Have to use .first() because mg is a Collection
message.channel.send(drecords.RaidWins);
}else if (mg.first().content === "2"){
message.channel.send(drecords.DefenseWins);
}
}).catch((err) => {
message.channel.send("Ran out of time!");
})
}
})
至于你的第二个问题,当你使用. WriteFile
时,你实际上是在覆盖这个文件。你会想要使用appendFile
。但是,您正在使用JSON。您可以简单地导入文件(需要
它)并更新它。如果这是你想要的,我建议你把json文件改成这样。
{
"RaidWins": 0,
"DefenseWins": 0
}
然后导入和更新会像这样
let records = require("./drecords.json");
records.RaidWins += 1; //adding one to the wins
fs.writeFile("./drecords.json", JSON.Stringify(records), err => console.error);
有没有可能让我的不和谐机器人发送消息,而不必在不和谐中键入命令?相反,我想从我的应用程序内部触发它。 上面的代码给出了一个属性错误:'NoneType'对象没有属性'send'
直到最近,我的Discord机器人一直工作得很好,我没有对代码做任何更改,它与工作时处于相同的状态。但是出于某种原因,现在当我尝试通过控制台启动bot时(在我的情况下): 节点my-discord-bot.js 它什么也不做,没有错误,只是空白,我应该收到一个确认,说‘准备好了!’我的机器人应该上线,但这一切都不会发生。 下面是我用来启动我的bot(直到最近才开始工作)的代码: 我真的不知道问题出
我在创建一个基本的discord机器人(用于播放音乐)时遇到了一些错误。我主要依赖于文档——我想我复制并粘贴了discord中的某些代码行。“断章取义”的js文档示例。但我不知道它们可能是什么,因为我对编程还是很陌生。 我安装并导入了所有必要的依赖项,所以这不是问题所在。我的机器人工作正常(收听和回复MSG)。 这是与音乐功能相关的代码 这是我得到的错误: 难道是: 机器人需要先进入通道?(这意味
我是一个初学者程序员(或者在我看来是这样),我需要帮助在音乐机器人中实现一个队列。 目前,只有当队列中有一首歌时,队列才能正常工作。如果有更多的歌曲,那么递归开始(在=wait serverQueue(语音,消息)之后从def play开始并等待play(queue.pop(0),语音,消息)从队列开始),并且所有歌曲只是跳过。 我试图以不同的方式解决这个问题,例如,引入了第二个变量,但这并没有带
我正在尝试为我们的FiveM服务器创建一个discord社区bot,用于处理discord角色。我希望bot限制ROLECHANNEL,因此只能发布角色命令。我希望删除其他垃圾,以便频道保持干净。 命令正在工作,角色已经分配,但是机器人也会触发为什么?
代码: 当我使用离开命令时,机器人仍然停留在语音通道中。请帮帮我T-T