mirror of
https://github.com/DoctorMcKay/node-steamcommunity.git
synced 2026-08-31 03:47:59 +08:00
Compare commits
23 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3f0db21e02 | ||
|
|
6798b73a17 | ||
|
|
b98451a4b6 | ||
|
|
af2ba3f56b | ||
|
|
9c2662ae16 | ||
|
|
9ee49d4f15 | ||
|
|
911ae86379 | ||
|
|
a12e8cb67c | ||
|
|
edd95cc93f | ||
|
|
4f1f265c4d | ||
|
|
80c0c3ebbc | ||
|
|
a1ef4b5646 | ||
|
|
06f7f10dfe | ||
|
|
484c049940 | ||
|
|
36038daa1b | ||
|
|
12cffdd62c | ||
|
|
eaacef66bb | ||
|
|
0ef652cbac | ||
|
|
608377277c | ||
|
|
bcaa740b54 | ||
|
|
2674287b43 | ||
|
|
8b6bed5527 | ||
|
|
6def665b64 |
@@ -4,14 +4,13 @@ var Cheerio = require('cheerio');
|
|||||||
SteamCommunity.prototype.getMarketItem = function(appid, hashName, callback) {
|
SteamCommunity.prototype.getMarketItem = function(appid, hashName, callback) {
|
||||||
var self = this;
|
var self = this;
|
||||||
this.request("https://steamcommunity.com/market/listings/" + appid + "/" + encodeURIComponent(hashName), function(err, response, body) {
|
this.request("https://steamcommunity.com/market/listings/" + appid + "/" + encodeURIComponent(hashName), function(err, response, body) {
|
||||||
if(err || response.statusCode != 200) {
|
if(self._checkHttpError(err, response, callback)) {
|
||||||
callback(err ? err.message : "HTTP error " + response.statusCode);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var $ = Cheerio.load(body);
|
var $ = Cheerio.load(body);
|
||||||
if($('.market_listing_table_message') && $('.market_listing_table_message').text().trim() == 'There are no listings for this item.') {
|
if($('.market_listing_table_message') && $('.market_listing_table_message').text().trim() == 'There are no listings for this item.') {
|
||||||
callback('There are no listings for this item.');
|
callback(new Error("There are no listings for this item."));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -93,17 +92,13 @@ CMarketItem.prototype.updatePrice = function(callback) {
|
|||||||
"uri": "https://steamcommunity.com/market/itemordershistogram?country=US&language=english¤cy=1&item_nameid=" + this.commodityID,
|
"uri": "https://steamcommunity.com/market/itemordershistogram?country=US&language=english¤cy=1&item_nameid=" + this.commodityID,
|
||||||
"json": true,
|
"json": true,
|
||||||
}, function(err, response, body) {
|
}, function(err, response, body) {
|
||||||
if(err || response.statusCode != 200) {
|
if(self._checkHttpError(err, response, callback)) {
|
||||||
if(callback) {
|
|
||||||
callback(err ? err.message : "HTTP error " + response.statusCode);
|
|
||||||
}
|
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(body.success != 1) {
|
if(body.success != 1) {
|
||||||
if(callback) {
|
if(callback) {
|
||||||
callback("Error " + body.success);
|
callback(new Error("Error " + body.success));
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
@@ -125,7 +120,7 @@ CMarketItem.prototype.updatePrice = function(callback) {
|
|||||||
|
|
||||||
// TODO: The tables?
|
// TODO: The tables?
|
||||||
if(callback) {
|
if(callback) {
|
||||||
callback();
|
callback(null);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|||||||
84
classes/CMarketSearchResult.js
Normal file
84
classes/CMarketSearchResult.js
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
var SteamCommunity = require('../index.js');
|
||||||
|
var Cheerio = require('cheerio');
|
||||||
|
|
||||||
|
SteamCommunity.prototype.marketSearch = function(options, callback) {
|
||||||
|
var qs = {};
|
||||||
|
|
||||||
|
if(typeof options === 'string') {
|
||||||
|
qs.query = options;
|
||||||
|
} else {
|
||||||
|
qs.query = options.query || '';
|
||||||
|
qs.appid = options.appid;
|
||||||
|
qs.search_descriptions = options.searchDescriptions ? 1 : 0;
|
||||||
|
|
||||||
|
if(qs.appid) {
|
||||||
|
for(var i in options) {
|
||||||
|
if(['query', 'appid', 'searchDescriptions'].indexOf(i) != -1) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// This is a tag
|
||||||
|
qs['category_' + qs.appid + '_' + i + '[]'] = 'tag_' + options[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
qs.start = 0;
|
||||||
|
qs.count = 100;
|
||||||
|
qs.sort_column = 'price';
|
||||||
|
qs.sort_dir = 'asc';
|
||||||
|
performSearch(this.request, qs, [], callback);
|
||||||
|
};
|
||||||
|
|
||||||
|
function performSearch(request, qs, results, callback) {
|
||||||
|
request({
|
||||||
|
"uri": "https://steamcommunity.com/market/search/render/",
|
||||||
|
"qs": qs,
|
||||||
|
"headers": {
|
||||||
|
"referer": "https://steamcommunity.com/market/search"
|
||||||
|
},
|
||||||
|
"json": true
|
||||||
|
}, function(err, response, body) {
|
||||||
|
if(self._checkHttpError(err, response, callback)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!body.success) {
|
||||||
|
callback(new Error("Success is not true"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!body.results_html) {
|
||||||
|
callback(new Error("No results_html in response"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var $ = Cheerio.load(body.results_html);
|
||||||
|
if($('.market_listing_table_message').length > 0) {
|
||||||
|
callback(new Error($('.market_listing_table_message').text()));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var rows = $('.market_listing_row_link');
|
||||||
|
for(var i = 0; i < rows.length; i++) {
|
||||||
|
results.push(new CMarketSearchResult($(rows[i])));
|
||||||
|
}
|
||||||
|
|
||||||
|
if(body.start + body.pagesize >= body.total_count) {
|
||||||
|
callback(null, results);
|
||||||
|
} else {
|
||||||
|
qs.start += body.pagesize;
|
||||||
|
performSearch(request, qs, results, callback);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function CMarketSearchResult(row) {
|
||||||
|
var match = row.attr('href').match(/\/market\/listings\/(\d+)\/(.+)/);
|
||||||
|
|
||||||
|
this.appid = parseInt(match[1], 10);
|
||||||
|
this.market_hash_name = decodeURIComponent(match[2]);
|
||||||
|
this.image = row.find('.market_listing_item_img').attr('src').match(/^https?:\/\/[^\/]+\/economy\/image\/[^\/]+\//)[0];
|
||||||
|
this.price = parseInt(row.find('.market_listing_their_price .market_table_value span').text().replace(/[^\d]+/g, ''), 10);
|
||||||
|
this.quantity = parseInt(row.find('.market_listing_num_listings_qty').text().replace(/[^\d]+/g, ''), 10);
|
||||||
|
}
|
||||||
@@ -13,8 +13,7 @@ SteamCommunity.prototype.getSteamGroup = function(id, callback) {
|
|||||||
|
|
||||||
var self = this;
|
var self = this;
|
||||||
this.request("https://steamcommunity.com/" + (typeof id === 'string' ? "groups/" + id : "gid/" + id.toString()) + "/memberslistxml/?xml=1", function(err, response, body) {
|
this.request("https://steamcommunity.com/" + (typeof id === 'string' ? "groups/" + id : "gid/" + id.toString()) + "/memberslistxml/?xml=1", function(err, response, body) {
|
||||||
if(err || response.statusCode != 200) {
|
if(self._checkHttpError(err, response, callback)) {
|
||||||
callback(err || "HTTP error " + response.statusCode);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -66,8 +65,7 @@ CSteamGroup.prototype.getMembers = function(callback, members, link) {
|
|||||||
|
|
||||||
var self = this;
|
var self = this;
|
||||||
this._community.request(link, function(err, response, body) {
|
this._community.request(link, function(err, response, body) {
|
||||||
if(err || response.statusCode != 200) {
|
if(self._checkHttpError(err, response, callback)) {
|
||||||
callback(err || "HTTP error " + response.statusCode);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -103,7 +101,7 @@ CSteamGroup.prototype.join = function(callback) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(err || response.statusCode >= 400) {
|
if(err || response.statusCode >= 400) {
|
||||||
callback(err || "HTTP error " + response.statusCode);
|
callback(err || new Error("HTTP error " + response.statusCode));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -129,7 +127,7 @@ CSteamGroup.prototype.leave = function(callback) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(err || response.statusCode >= 400) {
|
if(err || response.statusCode >= 400) {
|
||||||
callback(err || "HTTP error " + response.statusCode);
|
callback(err || new Error("HTTP error " + response.statusCode));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -155,7 +153,7 @@ CSteamGroup.prototype.postAnnouncement = function(headline, content, callback) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(err || response.statusCode >= 400) {
|
if(err || response.statusCode >= 400) {
|
||||||
callback(err || "HTTP error " + response.statusCode);
|
callback(err || new Error("HTTP error " + response.statusCode));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -214,7 +212,7 @@ CSteamGroup.prototype.scheduleEvent = function(name, type, description, time, se
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(err || response.statusCode >= 400) {
|
if(err || response.statusCode >= 400) {
|
||||||
callback(err || "HTTP error " + response.statusCode);
|
callback(err || new Error("HTTP error " + response.statusCode));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -241,7 +239,7 @@ CSteamGroup.prototype.setPlayerOfTheWeek = function(steamID, callback) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(err || response.statusCode != 200) {
|
if(err || response.statusCode != 200) {
|
||||||
callback(err || "HTTP error " + response.statusCode);
|
callback(err || new Error("HTTP error " + response.statusCode));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -254,7 +252,7 @@ CSteamGroup.prototype.setPlayerOfTheWeek = function(steamID, callback) {
|
|||||||
if(results.response.results[0] == 'OK') {
|
if(results.response.results[0] == 'OK') {
|
||||||
callback(null, new SteamID(results.response.oldPOTW[0]), new SteamID(results.response.newPOTW[0]));
|
callback(null, new SteamID(results.response.oldPOTW[0]), new SteamID(results.response.newPOTW[0]));
|
||||||
} else {
|
} else {
|
||||||
callback(results.response.results[0]);
|
callback(new Error(results.response.results[0]));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@@ -275,7 +273,7 @@ CSteamGroup.prototype.kick = function(steamID, callback) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(err || response.statusCode >= 400) {
|
if(err || response.statusCode >= 400) {
|
||||||
callback(err || "HTTP error " + response.statusCode);
|
callback(err || new Error("HTTP error " + response.statusCode));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -13,8 +13,7 @@ SteamCommunity.prototype.getSteamUser = function(id, callback) {
|
|||||||
|
|
||||||
var self = this;
|
var self = this;
|
||||||
this.request("http://steamcommunity.com/" + (typeof id === 'string' ? "id/" + id : "profiles/" + id.toString()) + "/?xml=1", function(err, response, body) {
|
this.request("http://steamcommunity.com/" + (typeof id === 'string' ? "id/" + id : "profiles/" + id.toString()) + "/?xml=1", function(err, response, body) {
|
||||||
if(err || response.statusCode != 200) {
|
if(self._checkHttpError(err, response, callback)) {
|
||||||
callback(err || "HTTP error " + response.statusCode);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -24,12 +23,12 @@ SteamCommunity.prototype.getSteamUser = function(id, callback) {
|
|||||||
|
|
||||||
xml2js.parseString(body, function(err, result) {
|
xml2js.parseString(body, function(err, result) {
|
||||||
if(err || (!result.response && !result.profile)) {
|
if(err || (!result.response && !result.profile)) {
|
||||||
callback(err || "No valid response");
|
callback(err || new Error("No valid response"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(result.response && result.response.error && result.response.error.length) {
|
if(result.response && result.response.error && result.response.error.length) {
|
||||||
callback(result.response.error[0]);
|
callback(new Error(result.response.error[0]));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -113,8 +112,7 @@ CSteamUser.prototype.addFriend = function(callback) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(err || response.statusCode != 200) {
|
if(self._checkHttpError(err, response, callback)) {
|
||||||
callback(err || "HTTP error " + response.statusCode);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -127,9 +125,9 @@ CSteamUser.prototype.addFriend = function(callback) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(json.success) {
|
if(json.success) {
|
||||||
callback();
|
callback(null);
|
||||||
} else {
|
} else {
|
||||||
callback("Unknown error");
|
callback(new Error("Unknown error"));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
@@ -140,12 +138,11 @@ CSteamUser.prototype.acceptFriendRequest = function(callback) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(err || response.statusCode != 200) {
|
if(self._checkHttpError(err, response, callback)) {
|
||||||
callback(err || "HTTP error " + response.statusCode);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
callback();
|
callback(null);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -155,12 +152,11 @@ CSteamUser.prototype.removeFriend = function(callback) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(err || response.statusCode != 200) {
|
if(self._checkHttpError(err, response, callback)) {
|
||||||
callback(err || "HTTP error " + response.statusCode);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
callback();
|
callback(null);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -170,12 +166,11 @@ CSteamUser.prototype.blockCommunication = function(callback) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(err || response.statusCode != 200) {
|
if(self._checkHttpError(err, response, callback)) {
|
||||||
callback(err || "HTTP error " + response.statusCode);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
callback();
|
callback(null);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -189,11 +184,11 @@ CSteamUser.prototype.unblockCommunication = function(callback) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(err || response.statusCode >= 400) {
|
if(err || response.statusCode >= 400) {
|
||||||
callback(err || "HTTP error " + response.statusCode);
|
callback(err || new Error("HTTP error " + response.statusCode));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
callback();
|
callback(null);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -208,7 +203,7 @@ CSteamUser.prototype.comment = function(message, callback) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(err || response.statusCode != 200) {
|
if(err || response.statusCode != 200) {
|
||||||
callback(err || "HTTP error " + response.statusCode);
|
callback(err || new Error("HTTP error " + response.statusCode));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -221,11 +216,11 @@ CSteamUser.prototype.comment = function(message, callback) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(json.success) {
|
if(json.success) {
|
||||||
callback();
|
callback(null);
|
||||||
} else if(json.error) {
|
} else if(json.error) {
|
||||||
callback(json.error);
|
callback(new Error(json.error));
|
||||||
} else {
|
} else {
|
||||||
callback("Unknown error");
|
callback(new Error("Unknown error"));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -125,12 +125,14 @@ SteamCommunity.prototype.chatMessage = function(recipient, text, type, callback)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(err || response.statusCode != 200) {
|
if(self._checkHttpError(err, response, callback)) {
|
||||||
callback(err ? err.message : "HTTP error " + response.statusCode);
|
return;
|
||||||
} else if(body.error != 'OK') {
|
}
|
||||||
callback(body.error);
|
|
||||||
|
if(body.error != 'OK') {
|
||||||
|
callback(new Error(body.error));
|
||||||
} else {
|
} else {
|
||||||
callback();
|
callback(null);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|||||||
198
components/profile.js
Normal file
198
components/profile.js
Normal file
@@ -0,0 +1,198 @@
|
|||||||
|
var SteamCommunity = require('../index.js');
|
||||||
|
var SteamID = require('steamid');
|
||||||
|
var Cheerio = require('cheerio');
|
||||||
|
|
||||||
|
SteamCommunity.PrivacyState = {
|
||||||
|
"Private": 1,
|
||||||
|
"FriendsOnly": 2,
|
||||||
|
"Public": 3
|
||||||
|
};
|
||||||
|
|
||||||
|
var CommentPrivacyState = {
|
||||||
|
"1": "commentselfonly",
|
||||||
|
"2": "commentfriendsonly",
|
||||||
|
"3": "commentanyone"
|
||||||
|
};
|
||||||
|
|
||||||
|
SteamCommunity.prototype.editProfile = function(settings, callback) {
|
||||||
|
var self = this;
|
||||||
|
this._myProfile("edit", null, function(err, response, body) {
|
||||||
|
if(err || response.statusCode != 200) {
|
||||||
|
if(callback) {
|
||||||
|
callback(err || new Error("HTTP error " + response.statusCode));
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var $ = Cheerio.load(body);
|
||||||
|
var form = $('#editForm');
|
||||||
|
if(!form) {
|
||||||
|
if(callback) {
|
||||||
|
callback(new Error("Malformed response"));
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var values = {};
|
||||||
|
form.serializeArray().forEach(function(item) {
|
||||||
|
values[item.name] = item.value;
|
||||||
|
});
|
||||||
|
|
||||||
|
for(var i in settings) {
|
||||||
|
if(!settings.hasOwnProperty(i)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch(i) {
|
||||||
|
case 'name':
|
||||||
|
values.personaName = settings[i];
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'realName':
|
||||||
|
values.real_name = settings[i];
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'summary':
|
||||||
|
values.summary = settings[i];
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'country':
|
||||||
|
values.country = settings[i];
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'state':
|
||||||
|
values.state = settings[i];
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'city':
|
||||||
|
values.city = settings[i];
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'customURL':
|
||||||
|
values.customURL = settings[i];
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'background':
|
||||||
|
// The assetid of our desired profile background
|
||||||
|
values.profile_background = settings[i];
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'featuredBadge':
|
||||||
|
// Currently, game badges aren't supported
|
||||||
|
values.favorite_badge_badgeid = settings[i];
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'primaryGroup':
|
||||||
|
if(typeof settings[i] === 'object' && settings[i].accountid) {
|
||||||
|
values.primary_group_steamid = settings[i].accountid;
|
||||||
|
} else {
|
||||||
|
values.primary_group_steamid = new SteamID(settings[i]).accountid;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
// TODO: profile showcases
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
self._myProfile("edit", values, function(err, response, body) {
|
||||||
|
if(err || response.statusCode != 200) {
|
||||||
|
if(callback) {
|
||||||
|
callback(err || new Error("HTTP error " + response.statusCode));
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check for an error
|
||||||
|
var $ = Cheerio.load(body);
|
||||||
|
var error = $('#errorText .formRowFields');
|
||||||
|
if(error) {
|
||||||
|
error = error.text().trim();
|
||||||
|
if(error) {
|
||||||
|
if(callback) {
|
||||||
|
callback(new Error(error));
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(callback) {
|
||||||
|
callback(null);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
SteamCommunity.prototype.profileSettings = function(settings, callback) {
|
||||||
|
var self = this;
|
||||||
|
this._myProfile("edit/settings", null, function(err, response, body) {
|
||||||
|
if(err || response.statusCode != 200) {
|
||||||
|
if(callback) {
|
||||||
|
callback(err || new Error("HTTP error " + response.statusCode));
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var $ = Cheerio.load(body);
|
||||||
|
var form = $('#editForm');
|
||||||
|
if(!form) {
|
||||||
|
if(callback) {
|
||||||
|
callback(new Error("Malformed response"));
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var values = {};
|
||||||
|
form.serializeArray().forEach(function(item) {
|
||||||
|
values[item.name] = item.value;
|
||||||
|
});
|
||||||
|
|
||||||
|
for(var i in settings) {
|
||||||
|
if(!settings.hasOwnProperty(i)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch(i) {
|
||||||
|
case 'profile':
|
||||||
|
values.privacySetting = settings[i];
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'comments':
|
||||||
|
values.commentSetting = CommentPrivacyState[settings[i]];
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'inventory':
|
||||||
|
values.inventoryPrivacySetting = settings[i];
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'inventoryGifts':
|
||||||
|
values.inventoryGiftPrivacy = settings[i] ? 1 : 0;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'emailConfirmation':
|
||||||
|
values.tradeConfirmationSetting = settings[i] ? 1 : 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
self._myProfile("edit/settings", values, function(err, response, body) {
|
||||||
|
if(err || response.statusCode != 200) {
|
||||||
|
if(callback) {
|
||||||
|
callback(err || new Error("HTTP error " + response.statusCode));
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(callback) {
|
||||||
|
callback(null);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
||||||
89
index.js
89
index.js
@@ -11,8 +11,12 @@ SteamCommunity.SteamID = SteamID;
|
|||||||
|
|
||||||
function SteamCommunity() {
|
function SteamCommunity() {
|
||||||
this._jar = Request.jar();
|
this._jar = Request.jar();
|
||||||
this.request = Request.defaults({"jar": this._jar});
|
this._captchaGid = -1;
|
||||||
|
this.request = Request.defaults({"jar": this._jar, "timeout": 50000});
|
||||||
this.chatState = SteamCommunity.ChatState.Offline;
|
this.chatState = SteamCommunity.ChatState.Offline;
|
||||||
|
|
||||||
|
// English
|
||||||
|
this._jar.setCookie(Request.cookie('Steam_Language=english'), 'https://steamcommunity.com');
|
||||||
}
|
}
|
||||||
|
|
||||||
SteamCommunity.prototype.login = function(details, callback) {
|
SteamCommunity.prototype.login = function(details, callback) {
|
||||||
@@ -40,15 +44,15 @@ SteamCommunity.prototype.login = function(details, callback) {
|
|||||||
key.setPublic(json.publickey_mod, json.publickey_exp);
|
key.setPublic(json.publickey_mod, json.publickey_exp);
|
||||||
|
|
||||||
var form = {
|
var form = {
|
||||||
"captcha_text": "",
|
"captcha_text": details.captcha || "",
|
||||||
"captchagid": -1,
|
"captchagid": self._captchaGid,
|
||||||
"emailauth": details.authCode || "",
|
"emailauth": details.authCode || "",
|
||||||
"emailsteamid": "",
|
"emailsteamid": "",
|
||||||
"loginfriendlyname": "",
|
"loginfriendlyname": "",
|
||||||
"password": hex2b64(key.encrypt(details.password)),
|
"password": hex2b64(key.encrypt(details.password)),
|
||||||
"remember_login": "true",
|
"remember_login": "true",
|
||||||
"rsatimestamp": json.timestamp,
|
"rsatimestamp": json.timestamp,
|
||||||
"twofactorcode": "",
|
"twofactorcode": details.twoFactorCode || "",
|
||||||
"username": details.accountName
|
"username": details.accountName
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -57,15 +61,28 @@ SteamCommunity.prototype.login = function(details, callback) {
|
|||||||
"json": true,
|
"json": true,
|
||||||
"form": form
|
"form": form
|
||||||
}, function(err, response, body) {
|
}, function(err, response, body) {
|
||||||
if(err) {
|
if(self._checkHttpError(err, response, callback)) {
|
||||||
callback(err);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!body.success && body.emailauth_needed) {
|
if(!body.success && body.emailauth_needed) {
|
||||||
callback("Please provide the authorization code sent to your address at " + body.emaildomain);
|
// Steam Guard (email)
|
||||||
|
var error = new Error("SteamGuard");
|
||||||
|
error.emaildomain = body.emaildomain;
|
||||||
|
|
||||||
|
callback(error);
|
||||||
|
} else if(!body.success && body.requires_twofactor) {
|
||||||
|
// Steam Guard (app)
|
||||||
|
callback(new Error("SteamGuardMobile"));
|
||||||
|
} else if(!body.success && body.captcha_needed) {
|
||||||
|
var error = new Error("CAPTCHA");
|
||||||
|
error.captchaurl = "https://steamcommunity.com/public/captcha.php?gid=" + body.captcha_gid;
|
||||||
|
|
||||||
|
self._captchaGid = body.captcha_gid;
|
||||||
|
|
||||||
|
callback(error);
|
||||||
} else if(!body.success) {
|
} else if(!body.success) {
|
||||||
callback(body.message || "Unknown error");
|
callback(new Error(body.message || "Unknown error"));
|
||||||
} else {
|
} else {
|
||||||
var sessionID = generateSessionID();
|
var sessionID = generateSessionID();
|
||||||
self._jar.setCookie(Request.cookie('sessionid=' + sessionID), 'http://steamcommunity.com');
|
self._jar.setCookie(Request.cookie('sessionid=' + sessionID), 'http://steamcommunity.com');
|
||||||
@@ -124,8 +141,8 @@ function generateSessionID() {
|
|||||||
SteamCommunity.prototype.getWebApiKey = function(domain, callback) {
|
SteamCommunity.prototype.getWebApiKey = function(domain, callback) {
|
||||||
var self = this;
|
var self = this;
|
||||||
this.request("https://steamcommunity.com/dev/apikey", function(err, response, body) {
|
this.request("https://steamcommunity.com/dev/apikey", function(err, response, body) {
|
||||||
if(err || response.statusCode != 200) {
|
if(self._checkHttpError(err, response, callback)) {
|
||||||
return callback(err.message || "HTTP error " + response.statusCode);
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(body.match(/<h2>Access Denied<\/h2>/)) {
|
if(body.match(/<h2>Access Denied<\/h2>/)) {
|
||||||
@@ -167,8 +184,8 @@ SteamCommunity.prototype.parentalUnlock = function(pin, callback) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(err || response.statusCode != 200) {
|
if(self._checkHttpError(err, response, callback)) {
|
||||||
return callback(err.message || "HTTP error " + response.statusCode);
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!body || typeof body.success !== 'boolean') {
|
if(!body || typeof body.success !== 'boolean') {
|
||||||
@@ -185,8 +202,8 @@ SteamCommunity.prototype.parentalUnlock = function(pin, callback) {
|
|||||||
|
|
||||||
SteamCommunity.prototype.getNotifications = function(callback) {
|
SteamCommunity.prototype.getNotifications = function(callback) {
|
||||||
this.request.get("https://steamcommunity.com/actions/RefreshNotificationArea", function(err, response, body) {
|
this.request.get("https://steamcommunity.com/actions/RefreshNotificationArea", function(err, response, body) {
|
||||||
if(err || response.statusCode != 200) {
|
if(self._checkHttpError(err, response, callback)) {
|
||||||
return callback(err.message || "HTTP error " + response.statusCode);
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var notifications = {
|
var notifications = {
|
||||||
@@ -224,18 +241,34 @@ SteamCommunity.prototype.resetItemNotifications = function(callback) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(err || response.statusCode != 200) {
|
if(self._checkHttpError(err, response, callback)) {
|
||||||
callback(err.message || "HTTP error " + response.statusCode);
|
return;
|
||||||
} else {
|
|
||||||
callback();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
callback(null);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
SteamCommunity.prototype.loggedIn = function(callback) {
|
||||||
|
this.request("https://steamcommunity.com/my", {"followRedirect": false}, function(err, response, body) {
|
||||||
|
if(err || (response.statusCode != 302 && response.statusCode != 403)) {
|
||||||
|
callback(err || new Error("HTTP error " + response.statusCode));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(response.statusCode == 403) {
|
||||||
|
callback(null, true, true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
callback(null, !!response.headers.location.match(/steamcommunity\.com(\/(id|profiles)\/[^\/]+)\/?/), false);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
SteamCommunity.prototype._checkCommunityError = function(html, callback) {
|
SteamCommunity.prototype._checkCommunityError = function(html, callback) {
|
||||||
if(html.match(/<h1>Sorry!<\/h1>/)) {
|
if(html.match(/<h1>Sorry!<\/h1>/)) {
|
||||||
var match = html.match(/<h3>(.+)<\/h3>/);
|
var match = html.match(/<h3>(.+)<\/h3>/);
|
||||||
callback(match ? match[1] : "Unknown error occurred");
|
callback(new Error(match ? match[1] : "Unknown error occurred"));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -260,7 +293,25 @@ SteamCommunity.prototype._myProfile = function(endpoint, form, callback) {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
SteamCommunity.prototype._checkHttpError = function(err, response, callback) {
|
||||||
|
if(err) {
|
||||||
|
callback(err);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(response.statusCode != 200) {
|
||||||
|
var error = new Error("HTTP error " + response.statusCode);
|
||||||
|
error.code = response.statusCode;
|
||||||
|
callback(error);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
|
||||||
require('./classes/CMarketItem.js');
|
require('./classes/CMarketItem.js');
|
||||||
|
require('./classes/CMarketSearchResult.js');
|
||||||
require('./classes/CSteamGroup.js');
|
require('./classes/CSteamGroup.js');
|
||||||
require('./classes/CSteamUser.js');
|
require('./classes/CSteamUser.js');
|
||||||
require('./components/chat.js');
|
require('./components/chat.js');
|
||||||
|
require('./components/profile.js');
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "steamcommunity",
|
"name": "steamcommunity",
|
||||||
"version": "2.4.0",
|
"version": "3.2.1",
|
||||||
"description": "Provides an interface for logging into and interacting with the Steam Community website",
|
"description": "Provides an interface for logging into and interacting with the Steam Community website",
|
||||||
"keywords": ["steam", "steam community"],
|
"keywords": ["steam", "steam community"],
|
||||||
"homepage": "https://github.com/DoctorMcKay/node-steamcommunity",
|
"homepage": "https://github.com/DoctorMcKay/node-steamcommunity",
|
||||||
|
|||||||
Reference in New Issue
Block a user