discord.js 添加到从数据中提取的 id

discord.js adding to a an id pulled from a data

所以,我遇到了一个很奇怪的问题,我不确定该怎么做。此代码尚未评论但是:

/*jshint esversion: 6*/
const commando = require('discord.js-commando');
const db = require('../../config/db');

class Win extends commando.Command {
  constructor(client) {
    super(client, {
      name: 'win',
      group: 'challenge',
      memberName: 'win',
      description: 'Gives rules on mock or legit duels.',
      examples: ['win id user'],
      args: [
        {
          key: 'id',
          prompt: 'You are missing the ID of the challenge.',
          type: 'string',
        },
        {
          key: 'user',
          prompt: 'User needs to be added (the winning user, not the losing!',
          type: 'user',
        },
      ],
    });
  }

  run(msg, { id, user }) {
    let sql = 'SELECT * FROM users WHERE userid = ?';
    var userid = msg.author.id;
    db.query(sql, userid, (err, rows) => {
      var ref = rows[0];
      if (ref === undefined) {
        return;
      }
      if (ref.rank <= 2) {
        return msg.reply('You do not have the proper permissions');
      }

      if (ref.rank >= 3) {
        sql = 'SELECT * FROM chal WHERE id = ?';
        db.query(sql, id, (err, row) => {
          var winner = row[0];
          if (winner === undefined) {
            return msg.reply('This ongoing challenge does not exist! Use the command for the list to find the proper ID');
          } else {
            msg.channel.send(user.username + ' was declared winner on the challenge ' + winner.chalbyname +
            ' VS. ' + winner.chaltoname + ' in a ' + winner.type + ' duel!');
            sql = 'SELECT * FROM users WHERE userid = ?';
            var chalUser = null;
            if (user.id == winner.chaltoid) {
              console.log(winner.chalbyid);
              chalUser = winner.chalbyid;
            } else {
              chalUser = winner.chaltoid;
            }
            console.log(chalUser);
            db.query(sql, chalUser, (err, row) => {
              chalUser = row[0];
              var winElo = null;
              var lossElo = null;
              var wins = null;
              var loss = null;
              var loserWins = null;
              var loserLoss = null;
              switch (winner.type) {
                case 'mock':
                  winElo = user.melo;
                  lossElo = chalUser.melo;
                  wins = user.winsmock;
                  loss = user.lossmock;
                  loserWins = chalUser.winsmock;
                  loserLoss = chalUser.lossmock;
                  break;
                case 'legit':
                  winElo = user.lelo;
                  lossElo = chalUser.lelo;
                  wins = user.winslegit;
                  loss = user.lossclosed;
                  loserWins = chalUser.winsmock;
                  loserLoss = chalUser.lossmock;
                  break;
                case 'closed':
                  winElo = user.celo;
                  lossElo = chalUser.celo;
                  wins = user.winsclosed;
                  loss = user.lossclosed;
                  loserWins = chalUser.winsmock;
                  loserLoss = chalUser.lossmock;
                  break;
              }
              var eloWin = null;
              var eloLoss = null;
              if (winElo > lossElo || winElo == lossElo) {
                eloWin = Math.ceil(winElo + (winElo / lossElo));
                eloLoss = Math.ceil(lossElo - (winElo / lossElo));
              }

              if (winElo < lossElo) {
                eloWin = Math.ceil(winElo + (winElo - lossElo) / 2);
                eloLoss = Math.ceil(lossElo - (winElo - lossElo) / 5);
              }

              msg.channel.send('WINNER: ' + user.username + 'Old Elo: ' + winElo + ' New Elo: ' + eloWin);
              msg.channel.send('LOSER: ' + chalUser.username +  'Old Elo: ' + lossElo + ' New Elo: ' + eloLoss);
            });
          }
        });
      }
    });
  }
}

module.exports = Win;

这里是问题所在:console.log(winner.chalbyid) 应该提供挑战他们的用户的 ID。挑战本身将其放入数据库(它确实这样做了,这是正确的)。但是,当我尝试将任何变量(在此代码内)设置为该 ID 时,它没有正确设置。这是它设置的内容: 269662142737678340 这是它应该是什么(就像在数据库中一样) 269662142737678336 奇怪的是 console.log(chaltoid); 打印出它应该打印的内容,并且工作正常。但出于某种原因,chalbyid 增加了总数。看起来像四点。

编辑:好的,所以它似乎没有添加到一个成员的 ID 中,其他人都被搞砸了。它添加到他们的 ID 中,这很奇怪。 (在我的挑战中 table,不是注册用户 table,那个看起来不错)。

编辑:好吧,所以我做了另一个类似的命令,但这样做没有那么混乱:

  run(msg, { id, user }) {
    let sql = 'SELECT * FROM chal WHERE id = ?';
    db.query(sql, id, (err, rows) => {
      var test = rows[0];
      msg.channel.send(test.chalbyid);
    });
  }
}

不过,还在往里面加。奇怪的是它只发生在某些成员身上,到目前为止除了一个成员。

编辑: 好的,好吧...我已经测试过在几个位置打印出 ID,甚至是从我的注册会员数据库中打印出来。但出于某种原因,打印出 ID 会导致它添加到总计中。我不知道为什么,但它只是添加到 ID。抱歉,我需要澄清一下,它不仅仅是在打印时添加它。不管怎样,它只是在添加,这会因为 ID 不匹配而扰乱功能。如果我针对数据库中的 id 测试 .author.id,它工作正常。但是,如果我尝试使用数据库中的那个数字,它会添加。

编辑...再次...: 我在存储这些 ID 的地方使用 BIGINT(255)。奇怪的是,它不是由某个特定的人来做的……至少就我而言是这样(只有 3 个测试用户注册了 ATM)。我只是不明白。为什么要添加?它显示相同的长度,但增加了总数。数据库中的 ID 是正确的,我已经确定了。这完全没有意义。

更多信息:

好的,这是它不会改变的值:135810874416824320 18 的长度。

这是它将更改的值:269662142737678336 长度为 18。会将此值更改为:269662142737678340

它也会改变这个值:302914419132858368302914419132858400

再说一次:它可以很好地与数据库进行比较,但是当我将其拉出并尝试使用它时,它确实添加了奇怪的内容。 (在这种情况下发送一条带有 ID 的消息)...但是如果我在将其拉出后尝试将其自身与用户 ID 进行比较,它会破坏我的功能...我需要这个才能让机器人正常工作。

嗯,这很尴尬:

我还没有完全测试过这个。但似乎将 BIGINT(255) 更改为 VARCHAR(255) 解决了我的问题...鉴于该值的长度仅为 18,而 BIGINT 应该允许 19,我遇到这个问题很奇怪。