gpt4 book ai didi

node.js - 值被最新请求机器人的人覆盖吗?

转载 作者:太空宇宙 更新时间:2023-11-03 22:21:23 25 4
gpt4 key购买 nike

我制作了一个抽奖投票不和谐机器人,允许用户通过 DM 向机器人发送他们的姓名和抽奖参与金额。一旦他们设置了值,他们就可以通过 DMing !enter 开始抽奖事件。一旦发生这种情况,就会调用一个函数,然后启动一个 for 循环,for 循环将根据指定的条目数量运行。我还在 for 循环中添加了延迟,因为获取抽奖券的服务需要一些时间(由于敏感的 API 信息,为 SO Post 编辑了代码)

完成后,它会将 DM 发送回最初向机器人发送 DM 的用户。我面临的问题是,如果多个用户同时进行 DM,或者在第一个 DM 运行时,变量会被最新请求机器人的人覆盖。

我假设每次用户 DM 时都使用 Discord.js 机器人,它会创建脚本或 Node 进程的新实例?

机器人在 DMed 调用一次的函数是否可以在主 Node 进程中创建一个新进程,这样它就不会被覆盖?

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

最佳答案

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

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

关于node.js - 值被最新请求机器人的人覆盖吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54339012/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com