好的,所以我实际上已经完成了我在JS中构建的Discord Bot。 我遇到了一个问题,那就是在旧的承诺完成之前就解决了新的承诺,导致将错误的信息发送到错误的服务器。
例如,我的“!armory”命令- 这是什么: (需要用户接受的参数的项目参数:xanax,吗啡,血袋,笔芯) 发出一个request-promise.post->如果请求成功->发送“正在加载...”消息->然后发出一个单独的request.post->成功后,编辑“ loading ...”消息,其中包含用户args的结果。 / p>
所请求的HTTP包含我的Torn.com派系中的用户列表,以及他们从我们派系军械库中使用的物品。 因此,在编辑中发送的消息包含所有用户以及他们使用的自变量中指定的项目数。
我遇到的问题是,有人两次执行命令,无论是否在同一台服务器上;上次使用命令的结果将提供给所有人。
示例:服务器一中的用户使用命令来获取xanax用法,例如“!armory xanax” ... 虽然仍未解决Promise,但是服务器2中的用户使用命令来获取吗啡用法,例如“!armory morphine” ...
第二个承诺解决后,服务器2中使用的命令的吗啡结果将通过编辑消息发送到两个服务器。
我希望每个服务器都能得到各自的结果。
编辑以添加代码
let configJson = fs.readFileSync(`./config.json`);
let configObj = JSON.parse(configJson);
const server_api_get = 'https://torn.market:8443/getarmoury';
const server_api_update = 'https://torn.market:8443/updatearmoury';
updateData = {
method: 'POST',
url: server_api_update,
form: {
API_KEY: configObj.guilds[message.guild.id].key,
end_date: endDate, // - End Date Dropdown on Faction page(Date furthest from today)
start_date: startDate, // - Start Date Dropdown on Faction page(Date closest to today)
},
};
//
getData = {
method: 'POST',
url: server_api_get,
form: {
API_KEY: configObj.guilds[message.guild.id].key,
end_date: endDate, // - End Date Dropdown on Faction page(Date furthest from today)
start_date: startDate, // - Start Date Dropdown on Faction page(Date closest to today)
},
};
//
rp(updateData)
.then(function (body) {
// POST succeeded...
updateJson = JSON.parse(body)
console.log(body);
if (updateJson.message === "Update Successful") {
let responseTitle = '';
console.log(` - New request -\nDate/Time: ${Date()}\n` + updateJson.message)
embed.setColor('BLUE')
.setTitle('`Loading Faction Armory use for ' + type + '......`')
message.channel.send(embed).then(msg => {
rp(getData)
.then(function (body) {
responseMsg = '';
embed.setColor(`GREEN`)
.setTitle(responseTitle)
.setDescription("```coffeescript\n" + responseMsg + "\n```")
msg.edit(embed)
})
.catch(function (err) {
// POST failed...
errJSON = JSON.stringify(err)
errObj = JSON.parse(errJSON)
console.log(`${errObj.name}\n${errObj.message}`);
});
})
} else {
console.log(`Code: ${updateJson.error}\nError: ${updateJson.message}\nWrong API_KEY or no Faction API Access.`);
}
})
答案 0 :(得分:0)
我是个白痴...
我只需要像对responseTitle和responseMsg一样定义一个空白的'type'变量。...
let type = '';
'type'是由命令用户指定的args组成的,如下所示:
let responseTitle = '';
if (newArgs.includes("xa")) {
type = "Xanax";
responseTitle = "?Xanax used from Armory?\n__*" + endDate + "*__ to __*" + startDate + "*__\n"
} else if (newArgs.includes("morph")) {
type = "Morphine";
responseTitle = "?Morphine used from Armory?\n__*" + endDate + "*__ to __*" + startDate + "*__\n"
} else if (newArgs.includes("bb") || newArgs.includes("blood bag") || newArgs.includes("blood") || newArgs.includes("bag")) {
type = "BloodBag";
responseTitle = "?Blood Bags used from Armory?\n__*" + endDate + "*__ to __*" + startDate + "*__\n"
} else if (newArgs.includes("re")) {
type = "Refill";
responseTitle = "?Blood Bags refilled from Armory?\n__*" + endDate + "*__ to __*" + startDate + "*__\n"
} else if (newArgs.includes("sf")) {
type = "SFAK";
responseTitle = "?Small First Aid Kits used from Armory?\n__*" + endDate + "*__ to __*" + startDate + "*__\n"
} else if (newArgs == "fak") {
type = "FAK";
responseTitle = "?First Aid Kits used from Armory?\n__*" + endDate + "*__ to __*" + startDate + "*__\n"
}