vandal.js
v1.5.0
Published
Wrapper/Scrapper for Valorant stats.
Maintainers
Readme
Instalation
Note: This module can use many strategies to fetch data: fetch, curl and flaresolverr
- For browser envoriments:
- Default
fetchshould be ok, can use aflaresolverrif available
- Default
- For server enviroments:
- You can try your luck with
fetch(node v16+), switch tocurlif it fails flaresolverris recommended (the default docker image is ok)
- You can try your luck with
To install use:
npm i vandal.jsUsage
Before you can use the methods you need to fetch the user data first.
There is only one static function that takes the username and the tag, both required.
You can pass additional options:
| Option | Type | Description | Default |
| --------------- | ------- | ------------------------------------ | ----------- |
| fetchGamemodes | boolean | Whether to fetch gamemodes stats | false |
| useCurl | boolean | Whether to use curl instead of fetch | false |
| flaresolverrUrl | string | The url of the flaresolverr instance | undefined |
// this returns an API class instance with the data already fetched
await API.fetchUser(user, tag, {
fetchGamemodes: true, // will fetch unrated. swiftplay, etc.
flaresolverrUrl: "http://localhost:8191", // will use flaresolverr instance
useCurl: true, // will use curl instead of fetch (ommited when flaresolverrUrl is provided)
});You must call API.fetchUser before using any other method.
| Methods | Description | | --------- | --------------------------- | | info | user and mmr info | | ranked | ranked stats | | unrated | unrated stats | | agents | stats for all played agents | | gamemodes | stats for all queues | | raw | return raw response |
Example code
Feel free to use my riot username for testing
const { API } = require("vandal.js");
try {
const user = await API.fetchUser("iFraan_", "G4G");
console.log("User:", user.info());
/*
User: {
platform: 'riot',
uuid: 'bc4b1936-febc-4c4d-96e6-84b4ceae1197',
name: 'iFraan#G4G',
userid: 'iFraan#G4G',
avatar: 'https://titles.trackercdn.com/valorant-api/playercards/d29e6e34-44bd-21c8-f7bb-b0a73f267e50/displayicon.png',
pageViews: 99,
rank: 'Gold 2',
peakRank: 'Diamond 1'
}
*/
console.log("Ranked:", user.ranked());
/*
Ranked: {
matchesPlayed: 22,
matchesWon: 11,
matchesLost: 11,
matchesTied: 0,
matchesWinPct: 50,
matchesDuration: 2077.090909090909,
timePlayed: 45696,
roundsPlayed: 468,
roundsWon: 220,
roundsLost: 248,
roundsWinPct: 47.008547008547005,
roundsDuration: 97.64102564102564,
score: 113621,
scorePerMatch: 5164.590909090909,
scorePerRound: 242.77991452991452,
kills: 390,
killsPerRound: 0.8333333333333334,
killsPerMatch: 17.727272727272727,
deaths: 368,
deathsPerRound: 0.7863247863247863,
deathsPerMatch: 16.727272727272727,
assists: 146,
assistsPerRound: 0.31196581196581197,
assistsPerMatch: 6.636363636363637,
kDRatio: 1.059782608695652,
kDARatio: 1.4565217391304348,
kADRatio: 1.4565217391304348,
damage: 74307,
damageDelta: 7144,
damageDeltaPerRound: 15.264957264957266,
damagePerRound: 158.77564102564102,
damagePerMatch: 3377.590909090909,
damagePerMinute: 97.64388961892247,
damageReceived: 67163,
headshots: 266,
headshotsPerRound: 0.5683760683760684,
headshotsPercentage: 26.347826086956523,
grenadeCasts: 146,
grenadeCastsPerRound: 0.31196581196581197,
grenadeCastsPerMatch: 6.636363636363637,
ability1Casts: 294,
ability1CastsPerRound: 0.6282051282051282,
ability1CastsPerMatch: 13.363636363636363,
ability2Casts: 345,
ability2CastsPerRound: 0.7371794871794872,
ability2CastsPerMatch: 15.681818181818182,
ultimateCasts: 38,
ultimateCastsPerRound: 0.0811965811965812,
ultimateCastsPerMatch: 1.7272727272727273,
dealtHeadshots: 303,
dealtBodyshots: 774,
dealtLegshots: 73,
receivedHeadshots: 235,
receivedBodyshots: 1014,
receivedLegshots: 80,
econRating: 1351,
econRatingPerMatch: 61.40909090909091,
econRatingPerRound: 2.8867521367521367,
suicides: 0,
firstBloods: 70,
firstBloodsPerRound: 0.14957264957264957,
firstBloodsPerMatch: 3.1818181818181817,
firstDeaths: 51,
firstDeathsPerRound: 0.10897435897435898,
lastDeaths: 57,
survived: 105,
traded: 67,
kAST: 70.09,
mostKillsInMatch: 40,
flawless: 17,
thrifty: 0,
aces: 2,
teamAces: 1,
clutches: 10,
clutchesPercentage: 2.1367521367521367,
clutchesLost: 53,
clutches1v1: 5,
clutches1v2: 4,
clutches1v3: 1,
clutches1v4: 0,
clutches1v5: 0,
clutchesLost1v1: 6,
clutchesLost1v2: 10,
clutchesLost1v3: 17,
clutchesLost1v4: 13,
clutchesLost1v5: 7,
kills1K: 142,
kills2K: 64,
kills3K: 26,
kills4K: 8,
kills5K: 2,
kills6K: 0,
plants: 35,
plantsPerMatch: 1.5909090909090908,
plantsPerRound: 0.14285714285714285,
attackKills: 209,
attackKillsPerRound: 0.8530612244897959,
attackDeaths: 193,
attackKDRatio: 1.0829015544041452,
attackAssists: 71,
attackAssistsPerRound: 0.2897959183673469,
attackRoundsWon: 119,
attackRoundsLost: 126,
attackRoundsPlayed: 245,
attackRoundsWinPct: 48.57142857142857,
attackScore: 61658,
attackScorePerRound: 251.66530612244898,
attackDamage: 41068,
attackDamagePerRound: 167.62448979591838,
attackHeadshots: 148,
attackTraded: 35,
attackSurvived: 56,
attackFirstBloods: 34,
attackFirstBloodsPerRound: 0.13877551020408163,
attackFirstDeaths: 22,
attackFirstDeathsPerRound: 0.08979591836734693,
attackKAST: 68.16,
defuses: 8,
defusesPerMatch: 0.36363636363636365,
defusesPerRound: 0.03587443946188341,
defenseKills: 181,
defenseKillsPerRound: 0.8116591928251121,
defenseDeaths: 175,
defenseKDRatio: 1.0342857142857143,
defenseAssists: 74,
defenseAssistsPerRound: 0.33183856502242154,
defenseRoundsWon: 101,
defenseRoundsLost: 122,
defenseRoundsPlayed: 223,
defenseRoundsWinPct: 45.2914798206278,
defenseScore: 51963,
defenseScorePerRound: 233.01793721973095,
defenseDamage: 33239,
defenseDamagePerRound: 149.05381165919283,
defenseHeadshots: 118,
defenseTraded: 32,
defenseSurvived: 49,
defenseFirstBloods: 36,
defenseFirstBloodsPerRound: 0.16143497757847533,
defenseFirstDeaths: 29,
defenseFirstDeathsPerRound: 0.13004484304932734,
defenseKAST: 70.4,
rank: null,
trnPerformanceScore: 631,
peakRank: null
}
*/
console.log("Unrated: ", user.unrated());
/*
Unrated: {
matchesPlayed: 6,
matchesWon: 3,
matchesLost: 3,
matchesTied: 0,
matchesWinPct: 50,
matchesDuration: 2354.8333333333335,
timePlayed: 14129,
roundsPlayed: 139,
roundsWon: 72,
roundsLost: 67,
roundsWinPct: 51.798561151079134,
roundsDuration: 101.64748201438849,
score: 32810,
scorePerMatch: 5468.333333333333,
scorePerRound: 236.0431654676259,
kills: 107,
killsPerRound: 0.7697841726618705,
killsPerMatch: 17.833333333333332,
deaths: 102,
deathsPerRound: 0.7338129496402878,
deathsPerMatch: 17,
assists: 41,
assistsPerRound: 0.2949640287769784,
assistsPerMatch: 6.833333333333333,
kDRatio: 1.0490196078431373,
kDARatio: 1.4509803921568627,
kADRatio: 1.4509803921568627,
damage: 21922,
damageDelta: 1702,
damageDeltaPerRound: 12.244604316546763,
damagePerRound: 157.71223021582733,
damagePerMatch: 3653.6666666666665,
damagePerMinute: 93.28510638297873,
damageReceived: 20220,
headshots: 67,
headshotsPerRound: 0.48201438848920863,
headshotsPercentage: 18.660287081339714,
grenadeCasts: 43,
grenadeCastsPerRound: 0.30935251798561153,
grenadeCastsPerMatch: 7.166666666666667,
ability1Casts: 95,
ability1CastsPerRound: 0.6834532374100719,
ability1CastsPerMatch: 15.833333333333334,
ability2Casts: 105,
ability2CastsPerRound: 0.7553956834532374,
ability2CastsPerMatch: 17.5,
ultimateCasts: 9,
ultimateCastsPerRound: 0.06474820143884892,
ultimateCastsPerMatch: 1.5,
dealtHeadshots: 78,
dealtBodyshots: 318,
dealtLegshots: 22,
receivedHeadshots: 69,
receivedBodyshots: 252,
receivedLegshots: 28,
econRating: 368,
econRatingPerMatch: 61.333333333333336,
econRatingPerRound: 2.647482014388489,
suicides: 0,
firstBloods: 12,
firstBloodsPerRound: 0.08633093525179857,
firstBloodsPerMatch: 2,
firstDeaths: 23,
firstDeathsPerRound: 0.16546762589928057,
lastDeaths: 16,
survived: 38,
traded: 13,
kAST: 69.06,
mostKillsInMatch: 23,
flawless: 9,
thrifty: 0,
aces: 0,
teamAces: 0,
clutches: 3,
clutchesPercentage: 2.158273381294964,
clutchesLost: 16,
clutches1v1: 2,
clutches1v2: 1,
clutches1v3: 0,
clutches1v4: 0,
clutches1v5: 0,
clutchesLost1v1: 0,
clutchesLost1v2: 3,
clutchesLost1v3: 6,
clutchesLost1v4: 3,
clutchesLost1v5: 4,
kills1K: 32,
kills2K: 24,
kills3K: 9,
kills4K: 0,
kills5K: 0,
kills6K: 0,
plants: 9,
plantsPerMatch: 1.5,
plantsPerRound: 0.13043478260869565,
attackKills: 64,
attackKillsPerRound: 0.927536231884058,
attackDeaths: 47,
attackKDRatio: 1.3617021276595744,
attackAssists: 15,
attackAssistsPerRound: 0.21739130434782608,
attackRoundsWon: 40,
attackRoundsLost: 29,
attackRoundsPlayed: 69,
attackRoundsWinPct: 57.971014492753625,
attackScore: 18135,
attackScorePerRound: 262.82608695652175,
attackDamage: 11559,
attackDamagePerRound: 167.52173913043478,
attackHeadshots: 34,
attackTraded: 8,
attackSurvived: 23,
attackFirstBloods: 7,
attackFirstBloodsPerRound: 0.10144927536231885,
attackFirstDeaths: 10,
attackFirstDeathsPerRound: 0.14492753623188406,
attackKAST: 71.01,
defuses: 3,
defusesPerMatch: 0.5,
defusesPerRound: 0.04285714285714286,
defenseKills: 43,
defenseKillsPerRound: 0.6142857142857143,
defenseDeaths: 55,
defenseKDRatio: 0.7818181818181819,
defenseAssists: 26,
defenseAssistsPerRound: 0.37142857142857144,
defenseRoundsWon: 32,
defenseRoundsLost: 38,
defenseRoundsPlayed: 70,
defenseRoundsWinPct: 45.714285714285715,
defenseScore: 14675,
defenseScorePerRound: 209.64285714285714,
defenseDamage: 10363,
defenseDamagePerRound: 148.04285714285714,
defenseHeadshots: 33,
defenseTraded: 5,
defenseSurvived: 15,
defenseFirstBloods: 5,
defenseFirstBloodsPerRound: 0.07142857142857142,
defenseFirstDeaths: 13,
defenseFirstDeathsPerRound: 0.18571428571428572,
defenseKAST: 62.86,
peakRank: null
}
*/
console.log("ALL GAMEMODES (including deathmatch, spike-rush, etc) ", user.gamemodes());
/*
ALL GAMEMODES (including deathmatch, spike-rush, etc) {
competitive: {
timePlayed: 162654267,
matchesPlayed: 80,
matchesWon: 32,
...
},
deathmatch: {
timePlayed: 13160672,
matchesPlayed: 30,
matchesWon: 4,
...
},
escalation: {
timePlayed: 943011,
matchesPlayed: 2,
matchesWon: 0,
...
},
spikerush: {
timePlayed: 3577956,
matchesPlayed: 7,
matchesWon: 6,
...
},
unrated: {
timePlayed: 110172811,
matchesPlayed: 58,
matchesWon: 27,
...
}
}
*/
console.log("Agents: ", user.agents());
/*
Agents: {
Killjoy: {
timePlayed: 1904406,
matchesPlayed: 1,
matchesWon: 0,
matchesLost: 1,
matchesWinPct: 0,
matchesDuration: 1904406,
roundsPlayed: 19,
roundsWon: 6,
roundsLost: 13,
roundsWinPct: 31.57894736842105,
roundsDuration: 100231,
econRating: 45,
econRatingPerMatch: 45,
econRatingPerRound: 2.3684210526315788,
score: 3456,
scorePerMatch: 3456,
scorePerRound: 181.89473684210526,
kills: 12,
killsPerRound: 0.631578947368421,
killsPerMatch: 12,
killsPerMinute: 0.3870967741935484,
headshots: 4,
headshotsPerRound: 0.21052631578947367,
headshotsPerMatch: 4,
headshotsPerMinute: 0.12903225806451613,
headshotsPercentage: 5.555555555555555,
deaths: 16,
deathsPerRound: 0.8421052631578947,
deathsPerMatch: 16,
deathsPerMinute: 0.5161290322580645,
assists: 3,
assistsPerMatch: 3,
assistsPerRound: 0.15789473684210525,
assistsPerMinute: 0.0967741935483871,
kDRatio: 0.75,
kDARatio: 0.8125,
kADRatio: 0.9375,
damage: 2071,
damagePerMatch: 2071,
damagePerRound: 109,
damagePerMinute: 66.80645161290323,
damageReceived: 2622,
plants: 1,
plantsPerMatch: 1,
plantsPerRound: 0.05263157894736842,
defuses: 0,
defusesPerMatch: 0,
defusesPerRound: 0,
firstBloods: 1,
firstBloodsPerMatch: 1,
grenadeCasts: 16,
grenadeCastsPerMatch: 16,
grenadeCastsPerRound: 0,
ability1Casts: 6,
ability1CastsPerMatch: 6,
ability1CastsPerRound: 0,
ability2Casts: 12,
ability2CastsPerMatch: 12,
ability2CastsPerRound: 0,
ultimateCasts: 3,
ultimateCastsPerMatch: 3,
ultimateCastsPerRound: 0,
grenadeKills: 6,
ability1Kills: 0,
ability2Kills: 5,
ultimateKills: 1,
dealtHeadshots: 4,
dealtBodyshots: 64,
dealtLegshots: 4,
receivedHeadshots: 9,
receivedBodyshots: 42,
receivedLegshots: 10,
deathsFirst: 1,
deathsLast: 6,
mostKillsInMatch: 12,
mostKillsInRound: 2,
flawless: 1,
clutches: 1,
thrifty: 0,
aces: 0,
teamAces: 0,
attackKDRatio: 0.625,
attackKills: 5,
attackDeaths: 8,
attackAssists: 1,
attackRoundsPlayed: 7,
attackRoundsWon: 7,
attackRoundsLost: 0,
attackRoundsWinPct: 100,
defenseKDRatio: 0.875,
defenseKills: 7,
defenseDeaths: 8,
defenseAssists: 2,
defenseRoundsPlayed: 12,
defenseRoundsWon: 6,
defenseRoundsLost: 6,
defenseRoundsWinPct: 50,
ability1KillsPerMatch: 0,
ability2KillsPerMatch: 5,
grenadeKillsPerMatch: 6,
ultimateKillsPerMatch: 1
},
Sage: {
...
},
Omen: {
...
},
Jett: {
...
},
Phoenix: {
...
},
Raze: {
...
}
}
*/
} catch (e) {
console.log(e);
/* Error: We could not find the player [player]. */
}Disclaimer
This project is fully for educational purposes and if you want to use the valorant api in a production/commertial enviroment you should ask for one at Riot Developers or email the guys at TRNetwork.
