Как перебрать enmap? - PullRequest
0 голосов
/ 10 декабря 2018

Я пытаюсь перебрать 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 Ответ

0 голосов
/ 10 декабря 2018

Так как они являются просто расширением обычного 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.");
});
...