简体   繁体   English

Discord 应用程序机器人 - Discord.js

[英]Discord Application Bot - Discord.js

I am creating a discord.js bot, but I want to add more commands for applications.我正在创建一个 discord.js 机器人,但我想为应用程序添加更多命令。 For example, I want a command !apply1 and command !apply2 .例如,我想要一个命令!apply1和命令!apply2 When I copy the code, paste it again, change the name of the command, and type the command, it sends two or three questions instead of one.当我复制代码、再次粘贴、更改命令名称并键入命令时,它会发送两三个问题而不是一个。 What should I change?我应该改变什么?

If you didn't understand and want to check what I am talking about join this fake discord server: https://discord.gg/fVsQaa6 (It sends 2 questions per time, I want to send 1 by 1. Also, it sends the answers to the same channel for both of them, I checked if the channel id is correct and it is.)如果您不理解并想查看我在说什么,请加入这个假的 discord 服务器: https://discord.gg/fVsQaa6 (它每次发送 2 个问题,我想 1 接 1 发送。另外,它发送他们两个对同一频道的答案,我检查了频道ID是否正确并且是正确的。)

The Code:编码:

// 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);

You have an else statement in both of your client.on("message") execution.您的两个 client.on("message") 执行中都有一个 else 语句。

If you decide to dm the bot, it will check the first condition: if (message.content === "!apply staff") and the second one: if (message.content === "!apply police") .如果您决定 dm 机器人,它将检查第一个条件: if (message.content === "!apply staff")和第二个条件: if (message.content === "!apply police")

Since both are false, the bot will execute both else statement.由于两者都是错误的,机器人将执行两个 else 语句。 That's why you get two questions each time.这就是为什么你每次都会收到两个问题。

If you want to fix this, it can be interesting to store the application value and then check it inside the else statement or merge the two client.on("message") into one and add a check inside the else statement.如果要解决此问题,存储应用程序值然后在 else 语句中检查它或将两个 client.on("message") 合并为一个并在 else 语句中添加检查可能会很有趣。

I'm pretty sure that it's sending two messages at a time because you might have your code editor and command prompt running the code at the same time.我很确定它一次发送两条消息,因为您可能让代码编辑器和命令提示符同时运行代码。 It's a common thing.这是很常见的事情。 Your code looks normal, so I'm pretty sure this is what happened.你的代码看起来很正常,所以我很确定这就是发生的事情。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM