节点js ReferenceError:未定义item

时间:2015-07-10 20:03:37

标签: javascript node.js api steam

我正在尝试编写一个自动接受交易报价的Steam交易机器人。我可以通过交易机器人拒绝登录并拒绝交易报价但是当它应该自动接受交易报价时它不会。我收到这个错误接受要约;

/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);
});

谢谢。

2 个答案:

答案 0 :(得分:0)

如消息中所述,错误在声明中的第419行:

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

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

答案 1 :(得分:0)

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

以下是我遇到该错误时的解决方案: 我换了:   if(item.length > 0)if(itemsnum > 0)

然而,在那之后我遇到了一些其他错误,也许你也有。 我们可以交换蒸汽信息,以便我们可以一起消除这些代码中的所有错误吗?