Как перебрать 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.");
});
Другие вопросы по тегам