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
它也会改变这个值:302914419132858368
到302914419132858400
再说一次:它可以很好地与数据库进行比较,但是当我将其拉出并尝试使用它时,它确实添加了奇怪的内容。 (在这种情况下发送一条带有 ID 的消息)...但是如果我在将其拉出后尝试将其自身与用户 ID 进行比较,它会破坏我的功能...我需要这个才能让机器人正常工作。
嗯,这很尴尬:
我还没有完全测试过这个。但似乎将 BIGINT(255)
更改为 VARCHAR(255)
解决了我的问题...鉴于该值的长度仅为 18,而 BIGINT 应该允许 19,我遇到这个问题很奇怪。
所以,我遇到了一个很奇怪的问题,我不确定该怎么做。此代码尚未评论但是:
/*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
它也会改变这个值:302914419132858368
到302914419132858400
再说一次:它可以很好地与数据库进行比较,但是当我将其拉出并尝试使用它时,它确实添加了奇怪的内容。 (在这种情况下发送一条带有 ID 的消息)...但是如果我在将其拉出后尝试将其自身与用户 ID 进行比较,它会破坏我的功能...我需要这个才能让机器人正常工作。
嗯,这很尴尬:
我还没有完全测试过这个。但似乎将 BIGINT(255)
更改为 VARCHAR(255)
解决了我的问题...鉴于该值的长度仅为 18,而 BIGINT 应该允许 19,我遇到这个问题很奇怪。