Discord.js XP系统
Posted
技术标签:
【中文标题】Discord.js XP系统【英文标题】:Discord.js XP system 【发布时间】:2019-04-30 16:39:52 【问题描述】:我想用 mysqli 为我的机器人Hello Bot 制作一个 xp 系统,但我的代码确实有效。不是的错误是现在我第一次写,存到数据库里,但是别人会在数据库里有两次
我的代码:
con.query(`SELECT * FROM xp WHERE id = '$message.author.id'`, (err, rows) =>
if (err) throw err;
let sql;
if (rows.length < 1)
sql = `INSERT INTO xp (id, xp) VALUES ('$message.author.id', 30)`;
else
let xp = rows[0].xp;
sql = 'UPDATE xp SET xp = ' + xp + 30;
con.query(sql);
);
【问题讨论】:
“我的代码不起作用” - 为什么不呢?发生什么了?您是否收到特定的错误消息?只是没有更新表格,或者没有调用 lambda,还是其他什么? 您的更新行缺少 WHERE 子句。是这个问题吗? 谢谢,我没看到,但现在错误就在那里 那个 ID 是 32 位 int 的最大值,所以对我来说看起来不对。这真的是身份证吗? ID 不应该是表的主键,所以不允许重复吗?如果它是一个键,您可能可以使用INSERT ... ON DUPLICATE KEY UPDATE ...
来添加或增加一行,或者如果存在运行两个代码副本的风险并且它们都得到了,您可以在事务中运行整个事情选择中没有任何内容,然后都插入一行,但我认为这里还有其他问题。
谢谢,这是唯一的错误,所以我不得不再做任何事情,我会看到 "xp" + 30 所以如果我在 3030 中已经有 30 个了
【参考方案1】:
抱歉回复晚了,我刚看到这个帖子,我之前遇到过这个错误
你应该做的是:运行ALTER [TABLE_NAME] MODIFY [COLUMN_NAME] BIGINT NOT NULL PRIMARY KEY;
=> 为什么必须这样做是因为当你试图存储作者的 id 时,它会尝试但不和谐的成员 id 的数字比 INT 类型的范围多,所以如果你这样做BIGINT id 可以存储在里面,然后你就可以继续程序了
【讨论】:
以上是关于Discord.js XP系统的主要内容,如果未能解决你的问题,请参考以下文章
我的 discord.js xp 机器人中的 ER_PARSE_ERROR 错误
Discord Bot Maker - MySQL 调平系统或 Discord.js - MySQL 调平系统