2015-07-10 105 views
-2

我试图编写一个自动接受交易优惠的蒸汽交易机器人。我可以通过交易机器人拒绝登录并拒绝交易优惠,但是当它自动接受交易优惠时不会。我收到此错误insted接受报价;Node js ReferenceError:项目未定义

/var/node_modules/mysql/lib/protocol/Parser.js:82 
     throw err; 
      ^
ReferenceError: item is not defined 
    at Query._callback (/var/tradebot.js:419:18) 
    at Query.Sequence.end (/var/node_modules/mysql/lib/protocol/sequences/Sequence.js:96:24) 
    at Query._handleFinalResultPacket (/var/node_modules/mysql/lib/protocol/sequences/Query.js:144:8) 
    at Query.EofPacket (/var/node_modules/mysql/lib/protocol/sequences/Query.js:128:8) 
    at Protocol._parsePacket (/var/node_modules/mysql/lib/protocol/Protocol.js:271:23) 
    at Parser.write (/var/node_modules/mysql/lib/protocol/Parser.js:77:12) 
    at Protocol.write (/var/node_modules/mysql/lib/protocol/Protocol.js:39:16) 
    at Socket.<anonymous> (/var/node_modules/mysql/lib/Connection.js:96:28) 
    at Socket.emit (events.js:107:17) 
    at readableAddChunk (_stream_readable.js:163:16) 

我的tradebot.js源代码;

var admin = 'xxx'; 

var logOnOptions = { 
    accountName: 'xxxx, 
    password: 'xxxx' 
}; 
var GameTime = 120; 


//// 

var authCode = '98Y39'; 

var globalSessionID; 

if (require('fs').existsSync('sentry_'+logOnOptions['accountName']+'.hash')) { 
    logOnOptions['shaSentryfile'] = require('fs').readFileSync('sentry_'+logOnOptions['accountName']+'.hash'); 
} else if (authCode != '') { 
    logOnOptions['authCode'] = authCode; 
} 

var sitename; 

sitename = "csgowin.net"; 
var Steam = require('steam'); 
var SteamTradeOffers = require('steam-tradeoffers'); 
var mysql  = require('mysql'); 
var request = require("request"); 
var steamuserinfo = require('steam-userinfo'); 

steamuserinfo.setup("5EA5FFD1E19CD74C2E8F736BB9CFF152"); 

var mysqlInfo; 
mysqlInfo = { 
    host  : 'localhost', 
    user  : 'xxx', 
    password : 'xx', 
    database : 'xxx', 
    charset : 'utf8_general_ci' 
}; 

var mysqlConnection = mysql.createConnection(mysqlInfo); 

var steam = new Steam.SteamClient(); 
var offers = new SteamTradeOffers(); 

var recheck = true; 

steam.logOn(logOnOptions); 

steam.on('debug', console.log); 

function getUserName(steamid) { 
    steamuserinfo.getUserInfo(steamid, function(error, data){ 
     if(error) throw error; 
     var datadec = JSON.parse(JSON.stringify(data.response)); 
     return (datadec.players[0].personaname); 
    }); 
} 

function proceedWinners() { 
    var url = 'http://'+sitename+'/getwinner34634f.php'; 
    request(url, function(error, response, body){}); 
} 

var locked=false,proceeded; 
var itemscopy; 
var detected=false; 
var detected2=false; 
function CheckTimer() { 
    if(locked == true) return; 
    locked = true; 
    if(recheck == true) { 
     recheck = false; 
     checkoffers(1000); 
    } 
    mysqlConnection.query('SELECT `value` FROM `info` WHERE `name`=\'current_game\'', function(err, rows, fields) { 
     if(err) return; 
     mysqlConnection.query('SELECT `starttime` FROM `games` WHERE `id`=\''+rows[0].value+'\'', function(errs, rowss, fieldss) { 
      if(errs) return; 
      var timeleft; 
      if(rowss[0].starttime == 2147483647) timeleft = GameTime; 
      else { 
       var unixtime = Math.round(new Date().getTime()/1000.0); 
       timeleft = rowss[0].starttime+GameTime-unixtime; 
       if(timeleft < 0) timeleft = 0; 
      } 
      if(timeleft == 0) { 
       if(proceeded == true) return; 
       proceedWinners(); 
       proceeded = true; 
      } else proceeded = false; 
     }); 
    }); 
    detected2 = false; 
    offers.loadMyInventory({ 
     appId: 730, 
     contextId: 2 
    }, function(err, itemx) { 
     if(err) { 
      steam.webLogOn(function(newCookie) { 
       offers.setup({ 
        sessionID: globalSessionID, 
        webCookie: newCookie 
       }, function(err) { 
        if (err) { 
        } 
       }); 
      }); 
      return; 
     } 
     if(detected2 == true) { 
      return; 
     } 
     detected2 = true; 
     itemscopy = itemx; 
     detected = false; 
     mysqlConnection.query('SELECT * FROM `queue` WHERE `status`=\'active\'', function(err, row, fields) { 
      if(err) { 
       return; 
      } 
      if(detected == true) { 
       return; 
      } 
      detected = true; 
      for(var i=0; i < row.length; i++) { 
       var gameid = row[i].id; 
       mysqlConnection.query('UPDATE `queue` SET `status`=\'sent\' WHERE `id`=\''+gameid+'\'', function(err, row, fields) {}); 
       var sendItems = (row[i].items).split('/'); 
       var item=[],num=0; 
       for (var x = 0; x < itemscopy.length; x++) { 
        for(var j=0; j < sendItems.length; j++) { 
         if (itemscopy[x].tradable && (itemscopy[x].market_name).indexOf(sendItems[j]) == 0) { 
          sendItems[j] = "xxx"; 
          item[num] = { 
           appid: 730, 
           contextid: 2, 
           amount: itemscopy[x].amount, 
           assetid: itemscopy[x].id 
          } 
          num++; 
         } 
        } 
       } 
       if (num > 0) { 
        var gamenum = row[i].id; 
        offers.makeOffer ({ 
         partnerSteamId: row[i].userid, 
         itemsFromMe: item, 
         accessToken: row[i].token, 
         itemsFromThem: [], 
         message: 'Ваш выигрыш на сайте '+sitename+' в игре #'+gamenum 
        }, function(err, response){ 
         if (err) { 
          return; 
         } 
         console.log('Trade offer for queue '+gamenum+' sent!'); 
        }); 
       } 
      } 
     }); 
    }); 
    setTimeout(function(){locked = false;},100000); 
} 

steam.on('loggedOn', function(result) { 
    console.log('Logged in!'); 
    steam.setPersonaState(Steam.EPersonaState.LookingToTrade); 
    steam.addFriend("xxx"); 
    steam.sendMessage(admin,"Я включился!"); 
}); 

steam.on('webSessionID', function(sessionID) { 
    globalSessionID = sessionID; 
    steam.webLogOn(function(newCookie) { 
     offers.setup({ 
      sessionID: sessionID, 
      webCookie: newCookie 
     }, function(err) { 
      if (err) { 
       throw err; 
      } 
      setInterval(CheckTimer,1000); 
     }); 
    }); 
}); 

steam.on('friendMsg', function(steamID, message, type) { 
    if(type != Steam.EChatEntryType.ChatMsg) return; 
    if(steamID == admin) { 
     if(message.indexOf("/sendallitems") == 0) { 
      offers.loadMyInventory({ 
       appId: 730, 
       contextId: 2 
      }, function(err, items) { 
       if(err) { 
        steam.sendMessage(steamID, 'Не могу загрузить свой инвентарь, попробуй ещё раз'); 
        steam.webLogOn(function(newCookie) { 
         offers.setup({ 
          sessionID: globalSessionID, 
          webCookie: newCookie 
         }, function(err) { 
          if (err) { 
          } 
         }); 
        }); 
        return; 
       } 
       var item=[],num=0; 
       for (var i = 0; i < items.length; i++) { 
        if (items[i].tradable) { 
         item[num] = { 
          appid: 730, 
          contextid: 2, 
          amount: items[i].amount, 
          assetid: items[i].id 
         } 
         num++; 
        } 
       } 
       if (num > 0) { 
        offers.makeOffer ({ 
         partnerSteamId: steamID, 
         itemsFromMe: item, 
         itemsFromThem: [], 
         message: '' 
        }, function(err, response){ 
         if (err) { 
          throw err; 
         } 
         steam.sendMessage(steamID, 'Обмен отправлен!'); 
        }); 
       } 
      }); 
     } else if(message.indexOf("/send") == 0) { 
      var params = message.split(' '); 
      if(params.length == 1) return steam.sendMessage(steamID, 'Формат: /send [название предмета]'); 
      offers.loadMyInventory({ 
       appId: 730, 
       contextId: 2 
      }, function(err, items) { 
       if(err) { 
        steam.sendMessage(steamID, 'Не могу загрузить свой инвентарь, попробуй ещё раз'); 
        steam.webLogOn(function(newCookie) { 
         offers.setup({ 
          sessionID: globalSessionID, 
          webCookie: newCookie 
         }, function(err) { 
          if (err) { 
          } 
         }); 
        }); 
        return; 
       } 
       var item=0; 
       for (var i = 0; i < items.length; i++) { 
         if((items[i].market_name).indexOf(params[1]) != -1) { 
          item = items[i].id; 
          break; 
         } 
        } 
       if (item != 0) { 
        offers.makeOffer ({ 
         partnerSteamId: steamID, 
         itemsFromMe: [ 
         { 
          appid: 730, 
          contextid: 2, 
          amount: 1, 
          assetid: item 
         } 
         ], 
         itemsFromThem: [], 
         message: '' 
        }, function(err, response){ 
         if (err) { 
          throw err; 
         } 
         steam.sendMessage(steamID, 'Обмен отправлен!'); 
        }); 
       } 
      }); 
     } else if(message.indexOf("/show") == 0) { 
      var params = message.split(' '); 
      offers.loadMyInventory({ 
       appId: 730, 
       contextId: 2 
      }, function(err, items) { 
       if(err) { 
        steam.sendMessage(steamID, 'Не могу загрузить свой инвентарь, попробуй ещё раз'); 
        steam.webLogOn(function(newCookie) { 
         offers.setup({ 
          sessionID: globalSessionID, 
          webCookie: newCookie 
         }, function(err) { 
          if (err) { 
          } 
         }); 
        }); 
        return; 
       } 
       steam.sendMessage(steamID,'Смотри: '); 
       for (var i = 0; i < items.length; i++) { 
        steam.sendMessage(steamID,'http://steamcommunity.com/id/xxx/inventory/'+items[i].appid+'_'+items[i].contextid+'_'+items[i].id); 
       } 
      }); 
     } 
    } 
    steamuserinfo.getUserInfo(steamID, function(error, data){ 
     if(error) throw error; 
     var datadec = JSON.parse(JSON.stringify(data.response)); 
     var name = datadec.players[0].personaname; 
     console.log(name + ': ' + message); // Log it 
    }); 
    //steam.sendMessage(steamID, 'I\'m a bot that accepts all your unwanted items. If you would like to grab a few crates from me, please request a trade.'); 
}); 

function checkoffers(number) { 
    if (number > 0) { 
     offers.getOffers({ 
      get_received_offers: 1, 
      active_only: 1, 
      get_sent_offers: 0, 
      get_descriptions: 1, 
      language: "en_us" 
     }, function(error, body) { 
      if(error) return; 
      if(body.response.trade_offers_received){ 
       body.response.trade_offers_received.forEach(function(offer) { 
        if (offer.trade_offer_state == 2){ 
         if(offer.items_to_give) { 
          offers.declineOffer({tradeOfferId: offer.tradeofferid}); 
          return; 
         } 
         mysqlConnection.query('SELECT `value` FROM `info` WHERE `name`=\'maxitems\'', function(err, row, fields) { 
          if(offer.items_to_receive.length > row[0].value) { 
           offers.declineOffer({tradeOfferId: offer.tradeofferid}); 
           offer.items_to_receive = []; 
           mysqlConnection.query('INSERT INTO `messages` (`userid`,`msg`,`from`) VALUES (\''+offer.steamid_other+'\',\'toomuch\',\'System\')', function(err, row, fields) {}); 
           return; 
          } 
         }); 
         offers.loadPartnerInventory({partnerSteamId: offer.steamid_other, appId: 730, contextId: 2, tradeOfferId: offer.tradeofferid, language: "en"}, function(err, hitems) { 
          if(err) { 
           steam.webLogOn(function(newCookie) { 
            offers.setup({ 
             sessionID: globalSessionID, 
             webCookie: newCookie 
            }, function(err) { 
             if (err) { 
             } 
            }); 
           }); 
           recheck = true; 
           return; 
          } 
          var items = offer.items_to_receive; 
          var wgg=[],num=0; 
          for (var i = 0; i < items.length; i++) { 
           for(var j=0; j < hitems.length; j++) { 
            if(items[i].assetid == hitems[j].id) { 
             wgg[num] = hitems[j]; 
             num++; 
             break; 
            } 
           } 
          } 
          var price=[]; 
          for(var i=0; i < num; i++) { 
           if(wgg[i].appid != 730) { 
            offers.declineOffer({tradeOfferId: offer.tradeofferid}); 
            mysqlConnection.query('INSERT INTO `messages` (`userid`,`msg`,`from`) VALUES (\''+offer.steamid_other+'\',\'onlycsgo\',\'System\')', function(err, row, fields) {}); 
            return; 
           } 
           if(wgg[i].market_name.indexOf("Souvenir") != -1) { 
            offers.declineOffer({tradeOfferId: offer.tradeofferid}); 
            mysqlConnection.query('INSERT INTO `messages` (`userid`,`msg`,`from`) VALUES (\''+offer.steamid_other+'\',\'souvenir\',\'System\')', function(err, row, fields) {}); 
            return; 
           } 
           var itemname = wgg[i].market_name; 
           var url = 'http://'+sitename+'/cost.php?item='+encodeURIComponent(itemname); 
           (function(someshit) { 
           request(url, function(error, response, body){ 
            if(!error && response.statusCode === 200){ 
             if(body == "notfound") { offers.declineOffer({tradeOfferId: offer.tradeofferid}); mysqlConnection.query('INSERT INTO `messages` (`userid`,`msg`,`from`) VALUES (\''+offer.steamid_other+'\',\'notavailable\',\'System\')', function(err, row, fields) {}); } 
             else { 
              wgg[someshit].cost = parseFloat(body); 
             } 
            } else offers.declineOffer({tradeOfferId: offer.tradeofferid}); 
           });})(i) 
          } 
          setTimeout(function() { 
           var sum=0; 
           for(var i=0; i < num; i++) { 
            sum += wgg[i].cost; 
           } 
           mysqlConnection.query('SELECT `value` FROM `info` WHERE `name`=\'minbet\'', function(err, row, fields) { 
            if(sum < row[0].value) { 
             num = 0; 
             offers.declineOffer({tradeOfferId: offer.tradeofferid}); 
             mysqlConnection.query('INSERT INTO `messages` (`userid`,`msg`,`from`) VALUES (\''+offer.steamid_other+'\',\'toosmall!\',\'System\')', function(err, row, fields) {}); 
             return; 
            } 
           }); 
               steamuserinfo.getUserInfo(offer.steamid_other, function(error, data){ 
                if(error) throw error; 
                var datadec = JSON.parse(JSON.stringify(data.response)); 
                var name = datadec.players[0].personaname; 
                var avatar = datadec.players[0].avatarfull; 

                if(num == 0) return; 

                mysqlConnection.query('SELECT `value` FROM `info` WHERE `name`=\'current_game\'', function(err, row, fields) { 
                 var current_game = (row[0].value); 
                 mysqlConnection.query('SELECT `cost`,`itemsnum` FROM `games` WHERE `id`=\''+current_game+'\'', function(err, row, fields) { 
                  var current_bank = parseFloat(row[0].cost); 
                  var itemsnum = row[0].itemsnum; 

                 if(item.length > 0)  { 
                   mysqlConnection.query('UPDATE `games` SET `starttime`=UNIX_TIMESTAMP() WHERE `id` = \'' + current_game + '\'', function(err, row, fields) {}); 
                  } 

                  for(var j=0; j < num; j++) { 
                   mysqlConnection.query('INSERT INTO `game' + current_game + '` (`userid`,`username`,`item`,`color`,`value`,`avatar`,`image`,`from`,`to`) VALUES (\'' + offer.steamid_other + '\',\'' + name + '\',\'' + wgg[j].market_name + '\',\'' + wgg[j].name_color + '\',\'' + wgg[j].cost + '\',\'' + avatar + '\',\'' + wgg[j].icon_url + '\',\''+current_bank+'\'+\'0\',\''+current_bank+'\'+\''+wgg[j].cost+'\')', function(err, row, fields) {}); 
                   mysqlConnection.query('UPDATE `games` SET `itemsnum`=`itemsnum`+1, `cost`=`cost`+\''+wgg[j].cost+'\' WHERE `id` = \'' + current_game + '\'', function(err, row, fields) {}); 
                   current_bank = parseFloat(current_bank + wgg[j].cost); 
                   itemsnum++; 
                  } 


                  if(itemsnum > 50) { 
                   proceedWinners(); 
                  } 
                  offers.acceptOffer({tradeOfferId: offer.tradeofferid}); 
                  console.log('Accepted trade offer #'+offer.tradeofferid+' by '+name+' ('+offer.steamid_other+')'); 
                 }); 
                }); 
               }); 
           },3000); 
         }); 
        } 
       }); 
      } 
     }); 
    } 
} 

var pew; 
steam.on('tradeOffers', checkoffers); 

steam.on('sentry', function(data) { 
    require('fs').writeFileSync('sentry_'+logOnOptions['accountName']+'.hash', data); 
}); 

谢谢。

+0

错误消息都解释了问题是什么以及它在代码中发生的位置... – robertklep

+0

如何解决它? – mmm

+0

不要使用未定义的变量。 – robertklep

回答

0

正如消息中所述,错误是在语句行419:

if(item.length > 0)  { 
    mysqlConnection.query('UPDATE `games` SET `starttime`=UNIX_TIMESTAMP() WHERE `id` = \'' + current_game + '\'', function(err, row, fields) {}); 
} 

item没有定义。也许你的意思是row

0

我正在使用与您完全相同的代码。

这里是我的,当我遇到这个错误来解决: 我代替: if(item.length > 0)if(itemsnum > 0)

不过我以后针对几个其他错误来了,也许你有太多。 我们能否交换蒸汽信息,以便我们可以一起解决代码中的所有错误?