title: Currency is not defined
body: <p>I decided to use this <a href="https://discordjs.guide/sequelize/currency.html#file-overview" rel="nofollow noreferrer">discord.js guide</a>  to create my economy discord bot. Apparently something went wrong as I was about to run the bot. It had this error message and it said :</p>
  <pre><code>Reflect.defineProperty(currency, 'add', {
                         ^
  
  ReferenceError: currency is not defined
  </code></pre>
  <p>I have no idea what was wrong with it. Here's my index.js:</p>
  <pre class="lang-js prettyprint-override"><code>const Discord = require('discord.js');
  const { prefix, token } = require('./config.json');
  const client = new Discord.Client();
  
  Reflect.defineProperty(currency, 'add', {
      /* eslint-disable-next-line func-name-matching */
      value: async function add(id, amount) {
          const user = currency.get(id);
          if (user) {
              user.balance += Number(amount);
              return user.save();
          }
          const newUser = await Users.create({ user_id: id, balance: amount });
          currency.set(id, newUser);
          return newUser;
      },
  });
  
  Reflect.defineProperty(currency, 'getBalance', {
      /* eslint-disable-next-line func-name-matching */
      value: function getBalance(id) {
          const user = currency.get(id);
          return user ? user.balance : 0;
      },
  });
  
  client.once('ready', () =&gt; {
      console.log('Ready!');
  });
  
  });
  
  client.on('message', async message =&gt; {
      if (message.author.bot) return;
      currency.add(message.author.id, 1);
  
      if (!message.content.startsWith(PREFIX)) return;
      const input = message.content.slice(PREFIX.length).trim();
      if (!input.length) return;
      const [, command, commandArgs] = input.match(/(\w+)\s*([\s\S]*)/);
  
      if (command === 'balance') {
          const target = message.mentions.users.first() || message.author;
          return message.channel.send(`${target.tag} has ${currency.getBalance(target.id)}`);
      } else if (command === 'inventory') {
          const target = message.mentions.users.first() || message.author;
          const user = await Users.findOne({ where: { user_id: target.id } });
          const items = await user.getItems();
  
          if (!items.length) return message.channel.send(`${target.tag} has nothing!`);
          return message.channel.send(`${target.tag} currently has ${items.map(t =&gt; `${t.amount} ${t.item.name}`).join(', ')}`);
      } else if (command === 'transfer') {
          const currentAmount = currency.getBalance(message.author.id);
          const transferAmount = commandArgs.split(/ +/).find(arg =&gt; !/&lt;@!?\d+&gt;/.test(arg));
          const transferTarget = message.mentions.users.first();
  
          if (!transferAmount || isNaN(transferAmount)) return message.channel.send(`Sorry ${message.author}, that's an invalid amount`);
          if (transferAmount &gt; currentAmount) return message.channel.send(`Sorry ${message.author} you don't have that much.`);
          if (transferAmount &lt;= 0) return message.channel.send(`Please enter an amount greater than zero, ${message.author}`);
  
          currency.add(message.author.id, -transferAmount);
          currency.add(transferTarget.id, transferAmount);
  
          return message.channel.send(`Successfully transferred ${transferAmount} to ${transferTarget.tag}. Your current balance is ${currency.getBalance(message.author.id)}`);
      } else if (command === 'buy') {
          const item = await CurrencyShop.findOne({ where: { name: { [Op.like]: commandArgs } } });
          if (!item) return message.channel.send('That item doesn\'t exist.');
          if (item.cost &gt; currency.getBalance(message.author.id)) {
              return message.channel.send(`You don't have enough currency, ${message.author}`);
          }
  
          const user = await Users.findOne({ where: { user_id: message.author.id } });
          currency.add(message.author.id, -item.cost);
          await user.addItem(item);
  
          message.channel.send(`You've bought a ${item.name}`);
      } else if (command === 'shop') {
          const items = await CurrencyShop.findAll();
          return message.channel.send(items.map(i =&gt; `${i.name}: ${i.cost}`).join('\n'), { code: true });
      } else if (command === 'leaderboard') {
          return message.channel.send(
              currency.sort((a, b) =&gt; b.balance - a.balance)
                  .filter(user =&gt; client.users.cache.has(user.user_id))
                  .first(10)
                  .map((user, position) =&gt; `(${position + 1}) ${(client.users.cache.get(user.user_id).tag)}: ${user.balance}`)
                  .join('\n'),
              { code: true }
          );
      }
  });
  
  client.login(`[TOKEN]`);
  </code></pre>
  <p>I presume the only probelm of this code is Reflect.defineProperty(currency, 'add', { as it can't define what is currency. I hope someone can help...</p>