逐步将数据输入json文件



首先,我对javascript是一个完全的零,所以我的问题或代码可能很糟糕,但请保持冷静。

这个程序应该创建一个新的文本通道,您可以在其中创建一个字符,其中包含诸如"输入字符名称"之类的问题。你把角色的名字写进通道中,然后保存它,这样在所有的问题之后,所有的角色数据都可以被输入并分离成Json文件。字符数据库。

我代码:

...
const exampleEmbed = new Discord.MessageEmbed()
.setColor('#1EBF8B')
.addFields(
{ name: `enter character's name`, value: `**name** **surname**` },
)


const Ageembed = new Discord.MessageEmbed()
.setColor('#1EBF8B')
.addFields(
{ name: `enter character's age`, value: `**age**` },
)

const Raceembed = new Discord.MessageEmbed()
.setColor('#1EBF8B')
.addFields(
{ name: `enter character's race:`, value: `**race**` },
)

const bioembed = new Discord.MessageEmbed()
.setColor('#1EBF8B')
.addFields(
{ name: `enter biography: `, value: `**. . .**` },
)

const linkembed = new Discord.MessageEmbed()
.setColor('#1EBF8B')
.addFields(
{ name: `enter image link`, value: `**http://..**` },
)


message.guild.channels.create(`${message.author.username}`, {
type: 'text',
permissionOverwrites: [
{
id: everyone.id,
deny: ['VIEW_CHANNEL'],
},
{
id: message.author.id,
allow: ['VIEW_CHANNEL']
}
],
}) 
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
.then(channel => {
let channelx = message.guild.channels.cache.get(channel.id)
let filter = m => m.author.id === message.author.id;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
channelx.send(exampleEmbed);
channelx.awaitMessages(filter, {
max: 1,
time: 60000,
errors: ['time']


}).then(message => {
umessage = message.first()
let uargs = umessage.content.trim().split(/ +/);

var Name1 = uargs[0]
var Surname1 = uargs[1]
console.log(Name1 + ' ' + Surname1 )



}).then(channel => {
channelx.send(Ageembed);
channelx.awaitMessages(filter, {
max: 1,
time: 60000,
errors: ['time']

}).then(message => {
umessage = message.first()
let uargs = umessage.content.trim().split(/ +/);

var Age1 = uargs[0]
console.log(Age1)

}).then(channel => {
channelx.send(Raceembed);
channelx.awaitMessages(filter,{
max: 1,
time: 60000,
errors: ['time']
})

.then(message => {
umessage = message.first()
let uargs = umessage.content.trim().split(/ +/);



var Race1 = uargs[0]
console.log(Race1)

}).then(channel => {
channelx.send(bioembed);
channelx.awaitMessages(filter,{
max: 1,
time: 1000 * 60 * 60 * 2,
errors: ['time']
})


.then(message => {
umessage = message.first()
let uargs = umessage.content.trim()



var Bio1 = uargs
console.log(Bio1)

}).then(channel => {
channelx.send(linkembed);
channelx.awaitMessages(filter,{
max: 1,
time: 1000 * 60 * 60 * 2,
errors: ['time']
}).then(message => {
umessage = message.first()
let uargs = umessage.content.trim()

var Link1 = uargs
console.log(Link1)

}).then(channel => {
character[message.author.id] = {
name: Name1,
surname: Surname1,
age: Age1,
race: Race1,
bio: Bio1,
link: Link1
}
try {
fs.writeFileSync('../characters.json', JSON.stringify(character));
} catch(err) {
console.error(err);
}
})

})

})
})
})
})

...

和json文件应该包含像

这样的数据
{"id here":{"name":...,"surname":...}}

等。

简单地说,在每个响应之后,使用.then()函数移动到一个新的操作。但是,很明显,在最后它找不到用户输入的"name1", "姓氏"等。

但正如预期的那样,什么都不起作用。bot创建一个通道,向它发送消息,接收它们,但在将数据写入json文件的时刻死亡。

UnhandledPromiseRejectionWarning: ReferenceError: Name1 is not defined

我想我知道错误是什么,但是我没有一个解决这个问题的方法

可以做得更简单,对吧?

谢谢你花时间来解决这个问题!

您的Name1变量在另一个作用域中,这意味着它不存在您试图访问它的地方。为了避免这种情况,您可以在代码的开头声明该变量,然后稍后重新分配它的值。同样,你不需要有那么多的.then()链。存在async/await正是为了防止这种情况。

最新更新