UNPKG

steam-js-api

Version:

A wrapper for Steam Web API, with additional CSGO functionality.

381 lines (294 loc) 11.7 kB
const {validateSteamID, request} = require('./util.js') const {requireKey} = require('./../app.js') const PERSONA = require('./../json/persona.json') const LOCATIONS = require('./../json/locations-min.json') function getFriendList(steamID, sorted, callback) { if (typeof sorted === 'function') { callback = sorted sorted = false } else if (!sorted) { sorted = false } else { sorted = true } function run(resolve, reject) { let _key = requireKey() if (!validateSteamID(steamID)) { let result = {error: 'Steam ID does not appear valid'} if (reject) reject(result) else resolve(result) } request('ISteamUser/GetFriendList/v1', {key: _key, steamid: steamID}, result => { if (result.error) { if (reject) reject(result) else resolve(result) return } if (typeof result.data === 'object' && result.data.hasOwnProperty('friendslist')){ let friendsList = result.data.friendslist let data = { count: 0 } let fns = [] for (index in friendsList.friends) { let f = friendsList.friends[index] fns[index] = { steamID: f.steamid, since: f.friend_since } data.count++ } data.friends = sorted ? fns.sort((a, b) => (a.since > b.since) ? 1 : ((b.since > a.since) ? -1 : 0)) : fns resolve({data}) } else { result.error = 'Unexpected response. Data may have still been returned.' if (reject) reject(result) else resolve(result) } }) } if (typeof callback === 'function') { run(callback) } else { return new Promise((resolve, reject) => { run(resolve, reject) }) } } function getPlayerBans(steamIDs, callback) { function run(resolve, reject) { let _key = requireKey() if (!Array.isArray(steamIDs)) { steamIDs = [steamIDs] } let ids = "" for (index in steamIDs) { let steamID = steamIDs[index] if (!validateSteamID(steamID)) { let result = {error: `Steam ID "${steamID}" does not appear valid`} if (reject) reject(result) else resolve(result) } ids += steamID + ',' } ids = ids.slice(0,-1) request('ISteamUser/GetPlayerBans/v1', {key: _key, steamids: ids}, result => { if (result.error) { if (reject) reject(result) else resolve(result) return } if (typeof result.data === 'object' && result.data.hasOwnProperty('players')){ let players = result.data.players let data = { count: 0, players: {} } for (index in players) { let p = players[index] // TODO: improve 'economy' ban message. A string is returned, and I don't know what possible values are data.players[p.SteamId] = { community: p.CommunityBanned, economy: p.EconomyBan, vac: p.VACBanned, bans: p.NumberOfVACBans + p.NumberOfGameBans, vacBans: p.NumberOfVACBans, gameBans: p.NumberOfGameBans, lastBan: p.DaysSinceLastBan } data.count++ } resolve({data}) } else { result.error = 'Unexpected response. Data may have still been returned.' if (reject) reject(result) else resolve(result) } }) } if (typeof callback === 'function') { run(callback) } else { return new Promise((resolve, reject) => { run(resolve, reject) }) } } function getPlayerSummaries(steamIDs, callback) { function run(resolve, reject) { let _key = requireKey() if (!Array.isArray(steamIDs)) { steamIDs = [steamIDs] } let ids = "" for (index in steamIDs) { let steamID = steamIDs[index] if (!validateSteamID(steamID)) { let result = {error: `Steam ID "${steamID}" does not appear valid`} if (reject) reject(result) else resolve(result) } ids += steamID + ',' } ids = ids.slice(0,-1) request('ISteamUser/GetPlayerSummaries/v2', {key: _key, steamids: ids}, result => { if (result.error) { if (reject) reject(result) else resolve(result) return } if (typeof result.data === 'object' && result.data.hasOwnProperty('response')){ let response = result.data.response let data = { count: 0, players: {} } for (index in response.players) { let p = response.players[index] data.players[p.steamid] = { name: p.personaname, realName: p.realname || false, url: p.profileurl, state: p.personastate, stateString: PERSONA.state[p.personastate], public: (p.communityvisibilitystate === 3 ? true : false), comments: (p.commentpermission === 1 ? true : false), joined: p.timecreated || 0, offline: p.lastlogoff, community: (p.profilestate === 1 ? true : false), group: (p.primaryclanid === "103582791429521408" ? false : p.primaryclanid), inGame: ((p.gameextrainfo || p.gameid) ? true : false), appID: ((p.gameid && Number(p.gameid) < 1200000) ? Number(p.gameid) : 0), appName: (p.gameextrainfo ? p.gameextrainfo : ""), avatar: { small: p.avatar, medium: p.avatarmedium, large: p.avatarfull, }, location: { country: (p.loccountrycode ? LOCATIONS[p.loccountrycode].name : false), state: (p.locstatecode ? LOCATIONS[p.loccountrycode].state[p.locstatecode].name : false), city: (p.loccityid ? LOCATIONS[p.loccountrycode].state[p.locstatecode].city[p.loccityid] : false), countryCode: (p.loccountrycode ? p.loccountrycode : false), stateCode: (p.locstatecode ? p.locstatecode : false), cityCode: (p.loccityid ? p.loccityid : false) } } data.count++ } resolve({data}) } else { result.error = 'Unexpected response. Data may have still been returned.' if (reject) reject(result) else resolve(result) } }) } if (typeof callback === 'function') { run(callback) } else { return new Promise((resolve, reject) => { run(resolve, reject) }) } } function getUserGroups(steamID, callback) { function run(resolve, reject) { let _key = requireKey() if (!validateSteamID(steamID)) { let result = {error: 'Steam ID does not appear valid'} if (reject) reject(result) else resolve(result) } request('ISteamUser/GetUserGroupList/v1', {key: _key, steamid: steamID}, result => { if (result.error) { if (reject) reject(result) else resolve(result) return } if (typeof result.data === 'object' && result.data.hasOwnProperty('response')){ let response = result.data.response let data = { groups: [] } for (index in response.groups) { let g = response.groups[index] data.groups[index] = g.gid } resolve({data}) } else { result.error = 'Unexpected response. Data may have still been returned.' if (reject) reject(result) else resolve(result) } }) } if (typeof callback === 'function') { run(callback) } else { return new Promise((resolve, reject) => { run(resolve, reject) }) } } function resolveName(name, type, callback) { let types = { 'user': 1, 'group': 2, 'game': 3 } if (typeof type === 'function') { callback = type type = 1 } else if (!type) { type = 1 } function run(resolve, reject) { let _key = requireKey() if (typeof type === 'string') { if (types.hasOwnProperty(type)) { type = types[type] } else { let result = {error: 'Requested type does not correlate to a possible type.'} if (reject) reject(result) else resolve(result) } } else if (!Object.values(types).includes(type)) { let result = {error: 'Requested type does not correlate to a possible type.'} if (reject) reject(result) else resolve(result) } request('ISteamUser/ResolveVanityURL/v1', {key: _key, vanityurl: name, url_type: type}, result => { if (result.error) { if (reject) reject(result) else resolve(result) return } if (typeof result.data === 'object' && result.data.hasOwnProperty('response')){ let response = result.data.response let data = { id: (response.success === 1 ? response.steamid : false) } resolve({data}) } else { result.error = 'Unexpected response. Data may have still been returned.' if (reject) reject(result) else resolve(result) } }) } if (typeof callback === 'function') { run(callback) } else { return new Promise((resolve, reject) => { run(resolve, reject) }) } } const lib = {} lib.getFriendList = getFriendList lib.getPlayerBans = getPlayerBans lib.getPlayerSummaries = getPlayerSummaries lib.getUserGroups = getUserGroups lib.resolveName = resolveName module.exports = lib