-3

我最近为处理 CS:GO 赌博网站的存款和奖金而设置的 SteamBot 存在问题。在向我抛出此错误之前,它可以很好地在前几分钟存入和发送交易报价:

C:\Users\Frederik\Desktop\bot\node_modules\mysql\lib\protocol\Parser.js:82
        throw err;
              ^
Error: number format error: empty string
    at Error (native)
    at Function.Long.fromString (C:\Users\Frederik\Desktop\bot\node_modules\steam-tradeoffers\node_modules\long\dist\Long.js:180:19)
    at toAccountId (C:\Users\Frederik\Desktop\bot\node_modules\steam-tradeoffers\index.js:376:15)
    at SteamTradeOffers.makeOffer (C:\Users\Frederik\Desktop\bot\node_modules\steam-tradeoffers\index.js:396:42)
    at Query._callback (C:\Users\Frederik\Desktop\bot\sell.js:160:13)
    at Query.Sequence.end (C:\Users\Frederik\Desktop\bot\node_modules\mysql\lib\protocol\sequences\Sequence.js:96:24)
    at Query._handleFinalResultPacket (C:\Users\Frederik\Desktop\bot\node_modules\mysql\lib\protocol\sequences\Query.js:144:8)
    at Query.EofPacket (C:\Users\Frederik\Desktop\bot\node_modules\mysql\lib\protocol\sequences\Query.js:128:8)
    at Protocol._parsePacket (C:\Users\Frederik\Desktop\bot\node_modules\mysql\lib\protocol\Protocol.js:271:23)
    at Parser.write (C:\Users\Frederik\Desktop\bot\node_modules\mysql\lib\protocol\Parser.js:77:12)

我到处寻找解决方案,但没有找到任何东西。任何帮助或解决方案将不胜感激!我不确定哪段代码可能导致问题,所以这里有一个包含全部内容的 pastebin:http: //pastebin.com/x9YkhkCX

4

2 回答 2

0

解决它归结为了解出了什么问题。一旦你知道出了什么问题,你就会自动知道它应该是怎样的。我希望向您展示如何自己找出答案,而不是确切地说明需要更改哪些内容才能修复它。

如果这是您第一次遇到堆栈跟踪,这里是如何阅读这个。

它是这样开始的:

C:\Users\Frederik\Desktop\bot\node_modules\mysql\lib\protocol\Parser.js:82
        throw err;
              ^

mysql 库中的“解析器”引发错误;这告诉您某些 SQL 查询失败。接下来继续解释错误(^):

Error: number format error: empty string

错误是数字格式不正确,因为它是一个空字符串。这就像给一个函数一张白纸,当它希望在上面写一个数字时。但它不是,所以它不知道该做什么,并引发一个错误。

所以现在我们知道出了什么问题——在低水平上。让我们看看哪里出错了,这样我们就知道为什么了

我们在堆栈跟踪中找到了这一点:函数调用,从程序开始一直到引发错误的地方:

    at Error (native)

第一行表示此错误起源于名为“本机”的某个地方的错误函数:执行环境(javascript 引擎)中的某个地方,而不是正在执行的程序中。这并没有给我们任何新的上下文——我们知道已经有错误了。

    at Function.Long.fromString (C:\Users\Frederik\Desktop\bot\node_modules\steam-tradeoffers\node_modules\long\dist\Long.js:180:19)

在这里,我们得到了一些与数字有关的东西:它似乎是一个将字符串转换为 a 的函数Long,它是一种大数。正如错误消息已经告诉我们的那样,这里也没有太多新闻empty string。但至少我们走在正确的轨道上。

    at toAccountId (C:\Users\Frederik\Desktop\bot\node_modules\steam-tradeoffers\index.js:376:15)

在这里,我们看到数字/字符串可能是在 stream-tradeoffers 模块中使用的“帐户 ID”。现在让我们假设将空字符串传递给此函数,并且在将其转换为帐户 ID 的过程中将其转换为数字。在我们要调试第三方模块之前,让我们先看看问题是否出在主程序中:

    at SteamTradeOffers.makeOffer (C:\Users\Frederik\Desktop\bot\node_modules\steam-tradeoffers\index.js:396:42)

再次图书馆,其次是:

    at Query._callback (C:\Users\Frederik\Desktop\bot\sell.js:160:13)

在 OP 的pastebin中,我们在该行找到:

offers.makeOffer ({
    partnerSteamId: row[i].userid,
    itemsFromMe: item,
    accessToken: row[i].token,
    itemsFromThem: [],
    message: 'Congratulations! You won a game on '+sitename+'. Your game ID is #'+gamenum
}, function(err,response){....

在这里,我们找到了对 的调用makeOffer,以及使用了哪些参数。其中一个很可能是空字符串,或者是makeOffer方法读取的具有空字符串属性的对象;要找出答案,我们必须检查前两行堆栈跟踪中提到的文件。

为了节省时间,我们真的不需要查看堆栈跟踪的其余部分,因为从这里开始它只引用mysql库,并且不太可能存在问题:

    at Query.Sequence.end (C:\Users\Frederik\Desktop\bot\node_modules\mysql\lib\protocol\sequences\Sequence.js:96:24)
    at Query._handleFinalResultPacket (C:\Users\Frederik\Desktop\bot\node_modules\mysql\lib\protocol\sequences\Query.js:144:8)
    at Query.EofPacket (C:\Users\Frederik\Desktop\bot\node_modules\mysql\lib\protocol\sequences\Query.js:128:8)
    at Protocol._parsePacket (C:\Users\Frederik\Desktop\bot\node_modules\mysql\lib\protocol\Protocol.js:271:23)
    at Parser.write (C:\Users\Frederik\Desktop\bot\node_modules\mysql\lib\protocol\Parser.js:77:12)
于 2015-09-18T21:55:36.557 回答
0

根据我的经验,问题来自 mysql 数据库、桌面游戏和行用户 ID 和行令牌,如下所示。

partnerSteamId: row[i].userid

accessToken: row[i].token

执行 mysql_query 的 PHP 脚本没有正确执行它,因此如果另一个数据库行太大,它不会在数据库中输入任何用户 ID 和令牌。

这就是我的理论。

于 2015-11-18T00:42:25.350 回答