值被最新人员覆盖以请求机器人?

时间:2019-01-24 03:34:18

标签: node.js bots discord discord.js

我制作了一个抽奖不和谐机器人,该机器人允许用户DM该机器人的名称和抽奖条目数量。一旦设置好值,就可以通过DMing!enter开始输入抽奖活动。一旦发生这种情况,就会调用一个函数,然后该函数将启动一个for循环,for循环将基于指定的条目数量运行。我还在for循环中添加了一个延迟,因为该服务需要花费一些时间来获取抽奖券(由于敏感的API信息,因此代码已针对SO Post进行了编辑)

完成此操作后,它将DM发送回原来已DM机器人的用户。我面临的问题是,如果多个用户DM同时或从第一个DM运行时,变量将被请求该bot的最新人员覆盖。

我假设每次用户DM时都通过使用Discord.js机器人来创建脚本或节点进程的新实例?

机器人DM调用一次调用的函数是否有可能在主节点进程内创建一个新进程,从而不会被覆盖?

const Discord = require('discord.js');
const botconfig = require('./discordBotConfig.json');
const bot = new Discord.Client({disableEveryone: true});
const c = require('chalk');

// Chalk Theme
const ctx = new c.constructor({level: 2});
const error = c.red;
const waiting = c.magenta;
const success = c.green;
const discordBot = c.yellow;

// Current Raffles (API Link Later)
let activeRaffles = 'Raffle 1';

// User Parmas
let usrName = '';
let entryAmount = 0;

// Ticket
let raffleTicket = [];
let retryDelay = 3000;

function sleep(ms) {
    return new Promise(resolve => setTimeout(resolve, ms));
}

// Enter
const enterIn = async () => {
    console.log('User name', usrName);
    raffleTicket.push(Math.random(0, 50));
}

// Init Raffle Entry
const raffleInit = async (entryAmount) => {
    for (let i = 0; i < entryAmount; i++) {
        enterIn();
        await sleep(retryDelay);
    }
    dmUser();
}

const dmUser = () => {
    // Discord Message Complete
    let botCompleteMsg = new Discord.RichEmbed()
    .setTitle('Finished!')
    .setColor('#25E37A')
    .addField('Name: ', usrName)
    .addField('Tickets: ', raffleTicket)
    .addField('Last Update: ', bot.user.createdAt);

    bot.fetchUser(userID).then((user) => {
        user.send(botCompleteMsg);
    });

    return; // End the application
}

// Discord Bot Setup
bot.on('ready', async () => {
    console.log(discordBot(`${bot.user.username} is Online!`));
    bot.user.setActivity('Entering Raffle');
});

bot.on('message', async message => {
    if (message.channel.type === 'dm') {

    let prefix = botconfig.prefix;
    let messageArray = message.content.split(' ');

    let cmd = messageArray[0];
        if (cmd === `${prefix}name`) {
            if (messageArray.length === 3) {
                userID = message.author.id;
                usrName = messageArray[1];
                entryAmount = messageArray[2];

                // Raffle summary
                let raffleSummary = new Discord.RichEmbed()
                .setTitle('Entry Summary')
                .setColor('#8D06FF')
                .addField('Name: ', usrName)
                .addField('Entry Amount: ', entryAmount)
                return message.author.send(raffleSummary), message.author.send('Type **!start** to begin entry or type **!set** again to set the entry details again.');
            }
        }

        if (cmd === `${prefix}enter`) {
            // Raffle summary
            let startMessage = new Discord.RichEmbed()
            .setTitle('Entering raffle!')
            .setDescription('Thanks for entering! :)')
            .setColor('#8D06FF')
            return message.author.send(startMessage), raffleInit(entryAmount);
        }

    }
});

bot.login(botconfig.token);

1 个答案:

答案 0 :(得分:0)

您可以将用户数据存储在带有类的列表中。

var userData = [
{name: "sample#0000", entryNum: 0}
];