1

我正在创建一个 discord.js 机器人,但我想为应用程序添加更多命令。例如,我想要一个 command!apply1和 command !apply2。当我复制代码、再次粘贴、更改命令名称并键入命令时,它会发送两个或三个问题而不是一个。我应该改变什么?

如果您不明白并想查看我在说什么,请加入这个假的不和谐服务器:https ://discord.gg/fVsQaa6 (它每次发送 2 个问题,我想 1 接 1 发送。另外,它发送他们两个对同一频道的答案,我检查了频道ID是否正确并且是正确的。)

编码:

// Requires \\
const botSettings = require("./botsettings.json");
const Discord = require("discord.js");
const prefix = botSettings.prefix;

const bot = new Discord.Client({disableEveryone: true});

// Bot On Ready Console \\
bot.on('ready', () => {
    console.log("Bot Is Ready"); 
    bot.user.setActivity("Great", {type: "WATCHING"})
})




// Staff \\
let userApplications = {}

bot.on("message", function(message) {
    if (message.author.equals(bot.user)) return;
  
    let authorId = message.author.id;
  
    if (message.content === "!apply staff") {
        console.log(`Apply begin for authorId ${authorId}`);   
        if (!(authorId in userApplications)) {
            userApplications[authorId] = { "step" : 1}
            
            message.author.send("‏‏‎ ‎")
            message.author.send(">>> Staff Application")
            message.author.send(">>> Question 1:");
        }
  
    } else {
  
        if (message.channel.type === "dm" && authorId in userApplications) {
            let authorApplication = userApplications[authorId];
  
            if (authorApplication.step == 1 ) {
                authorApplication.answer1 = message.content;
                message.author.send(">>> Question 2:");
                authorApplication.step ++;
            }
            else if (authorApplication.step == 2) {
                authorApplication.answer2 = message.content;
                message.author.send(">>> Question 3:");
                authorApplication.step ++;
            }
            else if (authorApplication.step == 3) {
                authorApplication.answer3 = message.content;
                message.author.send(">>> Question 4:");
                authorApplication.step ++;
            }
            else if (authorApplication.step == 4) {
                authorApplication.answer4 = message.content;
                message.author.send(">>> Question 5:");
                authorApplication.step ++;
            }
            else if (authorApplication.step == 5) {
                authorApplication.answer5 = message.content;
                message.author.send(">>> Question 6:");
                authorApplication.step ++;
            }
            else if (authorApplication.step == 6) {
                authorApplication.answer6 = message.content;
                message.author.send(">>> Question 7:");
                authorApplication.step ++;
            }
            else if (authorApplication.step == 7) {
                authorApplication.answer7 = message.content;
                message.author.send(">>> Question 8:");
                authorApplication.step ++;
            }
            else if (authorApplication.step == 8) {
                authorApplication.answer8 = message.content;
                message.author.send(">>> Thank You!");
                bot.channels.cache.get("743550883589259287")
                  .send(`${message.author}\n >>> Question 1: | ${authorApplication.answer1}\n Question 2: | ${authorApplication.answer2}\n Question 3: | ${authorApplication.answer3}\n Question 4: | ${authorApplication.answer4}\n Question 5: | ${authorApplication.answer5}\n Question 6: | ${authorApplication.answer6}\n Question 7: | ${authorApplication.answer7}\n Question 8: | ${authorApplication.answer8}`);
                delete userApplications[authorId];
            }
        }
    }
});


// Police \\
bot.on("message", function(message) {
    if (message.author.equals(bot.user)) return;
  
    let authorId = message.author.id;
  
    if (message.content === "!apply police") {
        console.log(`Apply begin for authorId ${authorId}`);   
        if (!(authorId in userApplications)) {
            userApplications[authorId] = { "step" : 1}
            
            message.author.send("‏‏‎ ‎")
            message.author.send(">>> Police Application")
            message.author.send(">>> Question 1:");
        }
  
    } else {
  
        if (message.channel.type === "dm" && authorId in userApplications) {
            let authorApplication = userApplications[authorId];
  
            if (authorApplication.step == 1 ) {
                authorApplication.answer1 = message.content;
                message.author.send(">>> Question 2:");
                authorApplication.step ++;
            }
            else if (authorApplication.step == 2) {
                authorApplication.answer2 = message.content;
                message.author.send(">>> Question 3:");
                authorApplication.step ++;
            }
            else if (authorApplication.step == 3) {
                authorApplication.answer3 = message.content;
                message.author.send(">>> Question 4:");
                authorApplication.step ++;
            }
            else if (authorApplication.step == 4) {
                authorApplication.answer4 = message.content;
                message.author.send(">>> Question 5:");
                authorApplication.step ++;
            }
            else if (authorApplication.step == 5) {
                authorApplication.answer5 = message.content;
                message.author.send(">>> Question 6:");
                authorApplication.step ++;
            }
            else if (authorApplication.step == 6) {
                authorApplication.answer6 = message.content;
                message.author.send(">>> Question 7:");
                authorApplication.step ++;
            }
            else if (authorApplication.step == 7) {
                authorApplication.answer7 = message.content;
                message.author.send(">>> Question 8:");
                authorApplication.step ++;
            }
            else if (authorApplication.step == 8) {
                authorApplication.answer8 = message.content;
                message.author.send(">>> Thank You!");
                bot.channels.cache.get("743558960677912636")
                  .send(`${message.author}\n >>> Question 1: | ${authorApplication.answer1}\n Question 2: | ${authorApplication.answer2}\n Question 3: | ${authorApplication.answer3}\n Question 4: | ${authorApplication.answer4}\n Question 5: | ${authorApplication.answer5}\n Question 6: | ${authorApplication.answer6}\n Question 7: | ${authorApplication.answer7}\n Question 8: | ${authorApplication.answer8}`);
                delete userApplications[authorId];
            }
        }
    }
});



bot.login(botSettings.token);
4

2 回答 2

1

您的两个 client.on("message") 执行中都有一个 else 语句。

如果您决定 dm 机器人,它将检查第一个条件:if (message.content === "!apply staff") 和第二个条件:if (message.content === "!apply police")

由于两者都是错误的,机器人将执行两个 else 语句。这就是为什么你每次都会收到两个问题。

如果要解决此问题,存储应用程序值然后在 else 语句中检查它或将两个 client.on("message") 合并为一个并在 else 语句中添加检查可能会很有趣。

于 2020-08-15T08:07:16.070 回答
0

我很确定它一次发送两条消息,因为您可能让代码编辑器和命令提示符同时运行代码。这是很常见的事情。你的代码看起来很正常,所以我很确定这就是发生的事情。

于 2020-09-21T03:57:14.027 回答