Как перебрать enmap?
Я пытаюсь перебрать enmap
для моего бота discord.js мне удалось установить и получить значения из одной записи, но я пытаюсь настроить команду, которая добавляет людей в информационный бюллетень, такой как DM, о незначительных серьезных обновлениях.
if (args[0] === 'minor') {
if (devlog.updates === 'minor') return message.channel.send('You are already recieving minor updates.').then(m => m.delete(5000))
await client.devlog.set(userID, "yes", 'subscribed');
await client.devlog.set(userID, "minor", 'updates');
return message.channel.send('You will now recieve minor and major updates.').then(m => m.delete(5000))
}
if (args[0] === 'major') {
if (devlog.updates === 'major') return message.channel.send('You are already recieving major updates.').then(m => m.delete(5000))
await client.devlog.set(userID, "yes", 'subscribed');
await client.devlog.set(userID, "major", 'updates');
return message.channel.send('You will now recieve only major updates.').then(m => m.delete(5000))
}
if (!args[0]) {
if (devlog.subscribed === 'yes') {
await client.devlog.set(userID, "no", 'subscribed');
await client.devlog.set(userID, "none", 'updates');
return message.channel.send('You will stop recieving updates about RoboTurtle all together').then(m => m.delete(5000))
}
if (devlog.subscribed === 'no') {
return message.channel.send(`Please choose wether you\'d like to recieve minor or major updates! (minor has both) **devlog minor/major**`).then(m => m.delete(10000))
}
}
Это вроде работает, но не вызовет сообщение, если они уже подписаны на тот же тип обновления, и если они просто !devlog
он предназначен либо для того, чтобы либо не получать обновления, если они уже есть, либо сказать им, чтобы они выбирали между двумя, если это не так, однако он просто отправляет последнее сообщение в любом случае.
Я пытался настроить мой enmap
итерация для DMing всех подписанных людей с for...of
функция основана на .map
связанные документы (поскольку они должны быть просто "причудливыми" картами), но безрезультатно, так как они на самом деле не показывают варианты использования в стиле диссонанса.
if (args[0] === 'minor') {
for (let entry of client.devlog) {
if (entry.updates === 'minor') {
let user = client.users.get(entry)
user.send(`**[Minor Update]\n${args.slice(1)}`)
}
}
}
if (args[0] === 'major') {
for (let entry of client.devlog) {
if (entry.subscribed === 'yes') {
let user = client.users.get(entry)
user.send(`**[Major Update!]\n${args.slice(1)}`)
}
}
}
На тот случай, если кто-то захочет взглянуть на полный код, чтобы получить более полное представление о том, что я пытаюсь сделать, перейдите по ссылке: https://pastebin.com/bCML6EQ5
1 ответ
Так как они являются просто продолжением нормального Map
класс, я бы перебрать их с Map.forEach()
:
let yourEnmap = new Enmap();
yourEnmap.set('user_id', 'your_values');
yourEnmap.forEach((value, key, map) => {
...
});
В вашем случае это будет что-то вроде:
client.devlog.forEach((values, user_id) => {
// you can check your subscription here, the use the user_id to send the DM
client.users.get(user_id).send("Your message.");
});