Пояснение
Как Рикки Мо прокомментировал,
Поддерживать пул неотправленных ключей и таблицу пользователей с ключамиони попали в базу данных.
Это работает, потому что пользователь может получить ключ от неиспользуемого тайника, и после его удаления он больше не может быть выдан.Если вы хотите разрешить только один ключ для каждого пользователя (или реализовать перезарядку), вы можете хранить пользователей и их ключи.
Реальная база данных - намного лучший вариант, чем файл JSON, но ваши возможные варианты слишком великив одном простом примере.
Пример настройки
keys.json
:
{
"__UNUSED": [
"ABCD",
"1234",
"0000"
],
"userIDHere": "keyHere"
}
Внутренняя команда:
/* Async context needed for 'await' (meaning within an async function). */
const fs = require('fs');
const keys = require('./keys.json');
try {
// Ensure the user hasn't claimed a key already.
if (keys[message.author.id]) return await message.author.send(':x: You already claimed a key.');
// Ensure there's keys remaining.
if (keys.__UNUSED.length === 0) {
console.error('Out of keys.');
return await message.author.send(':x: Sorry, no keys are available to claim right now.');
}
// Grab the first key (no need to randomize).
const key = keys.__UNUSED[0];
// Send the user the key, then remove it from the pool, catch any errors.
await message.author.send(`Here's your key: ||${key}||`);
keys.__UNUSED.splice(1);
keys[message.author.id] = key;
fs.writeFileSync('./keys.json', JSON.stringify(keys));
} catch(err) {
console.error(err);
}
... Я подумал о том, чтобы предоставить VIP-членам особую функцию, позволяющую им получать [S] командный ключ каждый день ...
Если вы хотите включить этоВы можете установить интервал или создать задание cron
для удаления пользователя из JSON / базы данных каждые 24 часа.