UNPKG

bunr6statapi

Version:

Wrapper for Rainbow Six Siege API

852 lines (781 loc) 26 kB
![Banner](/assests/readme/Banner.png) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ![Discord](https://img.shields.io/discord/834396720061218887?style=flat&labelColor=62C6F2&color=FAFAFA) ![GitHub Actions Workflow Status](https://img.shields.io/github/actions/workflow/status/CalumW1/R6StatAPI/Publish.yml?labelColor=62C6F2&color=FAFAFA) ![NPM Version](https://img.shields.io/npm/v/r6statapi?labelColor=62C6F2&color=FAFAFA) ![GitHub License](https://img.shields.io/github/license/CalumW1/R6StatAPI?labelColor=62C6F2&color=FAFAFA) ## Table of Contents 1. [Installation](#installation) 2. [Getting Started](#getting-started) 3. [Functions](#functions) 4. [Support](#support) ## Installation `npm i r6statapi` ## Getting Started To get started you will need a Ubisoft login, it is best to create a new account and not the account you normally use. Create a new account [here](account.ubisoft.com/login) The example below has the email and password variables hardcoded but it would be better to use [dotenv](https://www.npmjs.com/package/dotenv) to manage environment variables. ``` import r6statapi from 'r6statapi'; const api = new r6statapi(); // or CommonJS const { R6StatAPI } = require("r6statapi"); const api = new R6StatAPI(); // replace with your own information const email = "test@gmail.com" const password = "Password123" const usermame = "User1" const platform = "uplay" // login and get token const token = await api.login(email, password) console.log(token) // fetch user by username const user = await api.getUserByUsername(userName, platform); console.log(user); // example response { profileId: 'afc2afec-b9ed-4988-bffa-58e78eedfa93', userId: 'afc2afec-b9ed-4988-bffa-58e78eedfa93', platformType: 'uplay', idOnPlatform: 'AFC2AFEC-B9ED-4988-BFFA-58E78EEDFA93', nameOnPlatform: 'CaleyW1' } ``` ## Functions ### Table of Contents 1. [Login](#Login) 2. [GetUserByUsername](#get-user-by-username) 3. [GetUserByUserId](#get-user-by-userid) 4. [GetUserProgression](#get-user-progression) 5. [GetServerStatus](#get-server-status) 6. [GetUserRank](#get-user-rank) 7. [GetUserStats](#get-user-stats) 8. [GetOperators](#get-operator) #### Login Signs into the Ubisoft a returns a token. | Field | Type | Required | | -------- | ------ | -------- | | email | string | yes | | password | string | yes | ``` await api.Login(email, password) ``` Example response ``` ewogICJ2ZXIiOiAiMSIsCiAgImFpZCI6ICJlM2Q1ZWE5ZS01MGJkLTQzYjctODhiZi0zOTc5NGY0ZTNkNDAiLAogICJlbnYiOiAiUHJvZCIsCiAgInNpZCI6ICI2YzVlY2E4MS1jYWI3LTQ0NjItOWUzOC04YjZkODA5OWQ1ZjEiLAogICJ0eXAiOiAiSldFIiwKICAiZW5jIjogIkExMjhDQkMiLAogICJpdiI6ICJPellRVVNkSkswNzJURTFJTXVpdFhnIiwKICAiaW50IjogIkhTMjU2IiwKICAia2lkIjogImFkNWNjMzFhLWI2ZmQtNGYyZS04N2JmLTNjZjRkOTc1OTY2NSIKfQ.-F6ZqzG9mOze0HRYJh3Ub23dQUR9BLR-VM7hMgbisN3tQZ1XLgZFyVH2sFmmX4VMPEKVG9e_PGLnPgrtyBfVkyyQBrjlppeWJXICTQPqj1-gg-0KCX4V3DkEd_o1VYbUAeuiA2QBtUeYIaxFluqxTZ5fr6fcGZvfB8npqMgahHLdcwyzcykp8klKbhOF5L17lUXMai5VgGT33o5N3xxx6wBZL97lXZ_jK1Yd67jPTsL2guB24meGrdR2HBtrB3N6ZR2cZnrFyfDuQzdotf0HsRlX8kATI2wOiADZ8RQS6pRtfRlFXqk-HZ0bsCAdQrs4wOzwL5ZiijfS63rAif_6t1K-KYffiQ3ExXPX6jG2OVK8evkR8fP-vS_aNF1iXE8j4ctrti8PezaOgJUmlRRBwrq29hxJJs5fIsP_EGkg_5rztX4hZtvDNRM9vRsIfAt3aPci5CpyhZs2oAbjLYqA1mEOaY8PODCm4pv3qS8zFBXlPAerCW-8ccYfsAmxEMCrZCxG210BDpZQ5c4JHk_XBij6TqE7yWjg_SO0qR_6eFhRKo5lpLbHAao7EWnfuh03dr_Q210QbiyYE5lCQ4RNapfEug0i5flhlJ55asjlQq6UOt21iJFEHBKHjJLj1vSy7WR347iUlYG8bRtcKHXvL2jD6WP18knlIZIWK7XQtR90TpiYV-WY4hqy7UMqD4yFe4Ah-jP58H8ADYA0F_wzIMGenfuDV4mQ_PyjSQuEynYmycmJyjFGeSFye8N-VvGJvcxozY5NMsYmHUqFLxZ1I6HlZivB_6znSzIK5mzqkfR24tPKQv_3T2VHbTfmN_E-4e5enq3F9tayTOSGNad6sSvP_dBao50w-5JBx86i7xJyK2IRGdjizfTbmzUyBQg5zeDbrRHTrAqnaV8NglOF8I2kS3rbxKH9qfUk1MrNdgi7ZJA34tFfu7XRMvUQN2asmrYhvBC0XlyABCCnn3mPy4abQgstYS9wX-itoVSru0_YS8QCIrffpRZkWANjAIsmERWiOGMXlwE5j2wB50M4_JI_gWGplgmn_9nZrtIeGJBYRUj4j4zl495lowDfTPBOdt3QOLx8OAGrHTwDKj6TOCZ6Nh8e7DjMmgm8c8i3n1WmQu6tkT0f3kOUbt1m3941q93R9kd9MR5H28wQHDH8ffTeGPTbhitgWy9WpsnOujwIm3Nnq72L1hkB5UeJobb7uJ6x8bwMaUUjlP8S6Qpa816YKoFQlFpI-dFPaf0W4gOlxSOafLyS6oewtKQlcADTZ5uwbEx4CPRhm9kZwKdekdol6lcEBk-07z8ppev0pNJl45gztd8zuqg_tqfVQtdSh53-xYqh_7FzzsdieCHCx-I0e9jv4QqAZ_VqAGb5ENNPsYHl9bMQYHdY-4npOfK5A4QgXwConKc2KD9dzhOTuohcz5mTgnP5yCkBOxmoHOXcNqh-HV6eAtg-ayrVpG63BlFND_uxAhJ-hnK0STCID-2JI3bvBr4p6V4L6_RT8X1EU_cCw4Ohr-cO9EqZT8f8qjiVzOAqZY6uPe8DfkANkSBIfmXL6A-duTGYoetHQXmvFxiM_MB10LP6FL1eVI2ZNwCXgJ0HgZkQ-_Ul5iBPEeuEIx3tCXpk6aoq1nIC6wdj_JJx9kTwICF3tOvPbUXI1jczVu_36HFi2fZxM6inuZ1uzC3ewfY_opccdDRLSZknlHs29ZPsOfiAX_hrm0NCGdE7MJMdC9aeGsGdll2ujxGZ90CKFuayH9pJsHgpW5d8Ly8v0xCJFc2qiTGAF-XJq9XCIroOBussSi4mLsJCr97jB9KjAY12zYIb-Pfhlnlba7YqX6otIO8oWG5koYzaj5ipqixOXCrDrXAHKdHFFeAYYq3Ojk1t96o_oRkQh1WBspTmmdRz1UOlUsBbVr4q4a0mj0cgFjKIjhv54Kj2xBnpf5GxmDLV9YEE3bqfMGrCy-rIR45CLGx6mBdRmf999dmb3wOM3iPlbgloF2TDTvFdaokQ4lYX51x4E0io8aFtJIrQX8EoPeFWvG8lea20h4e7TeEFx3n07rnPY22HxAFw26spFDxwBPAc6iLxEt_NoerdANtPE_-wUnqrZJ3-Oblvk6M6HOh_vsj-yJi4QC88sxqHhWiBRhW2vCePfY1RDJvD2Hq66Xc2Engp4drZhX1Drv4PnTPk8nISNVelUxGx89B-2KZtIsBUZiUxrY7bZj6Px2FmC2Ro5dOKIjQwZA6D-uEkAhBFsibp3tOIzWAjQChCR89hJy9IS2O7PMWs31rxINAKdx43jb6llgTRsUGDXYLL1eKYecUd7orY8frlAYXU1xLmDBzBpn6wzbMRNNoFfiI1KG9rUKR8EDPUv26GcfsBzkuSHeFXSi_Xhg.oMj2gpJl_2eOj-pFuYvFyWr_t1JR48zgb2st82KTKWk ``` #### Get user by username Gets a user by username | Field | Type | Required | options | | -------- | ------ | -------- | --------------- | | username | string | yes | | | platform | string | yes | uplay, xbl, psn | ``` await api.getUserByUsername(userName, platform); ``` Example response ``` { profileId: 'afc2afec-b9ed-4988-bffa-58e78eedfa93', userId: 'afc2afec-b9ed-4988-bffa-58e78eedfa93', platformType: 'uplay', idOnPlatform: 'AFC2AFEC-B9ED-4988-BFFA-58E78EEDFA93', nameOnPlatform: 'CaleyW1', avatars: { '146': 'https://avatars.ubisoft.com/afc2afec-b9ed-4988-bffa-58e78eedfa93/default_146_146.png?appId=3587dcbb-7f81-457c-9781-0e3f29f6f56a', '256': 'https://avatars.ubisoft.com/afc2afec-b9ed-4988-bffa-58e78eedfa93/default_256_256.png?appId=3587dcbb-7f81-457c-9781-0e3f29f6f56a', '500': 'https://avatars.ubisoft.com/afc2afec-b9ed-4988-bffa-58e78eedfa93/default_tall.png?appId=3587dcbb-7f81-457c-9781-0e3f29f6f56a' } } ``` #### Get user by userId Gets a user by userId | Field | Type | Required | options | | -------- | ------ | -------- | --------------- | | userId | string | yes | | | platform | string | yes | uplay, xbl, psn | ``` await api.getUserById(user.userId, platform); ``` Example response ``` [ { profileId: 'afc2afec-b9ed-4988-bffa-58e78eedfa93', userId: 'afc2afec-b9ed-4988-bffa-58e78eedfa93', platformType: 'uplay', idOnPlatform: 'afc2afec-b9ed-4988-bffa-58e78eedfa93', nameOnPlatform: 'CaleyW1', avatars: { '146': 'https://avatars.ubisoft.com/afc2afec-b9ed-4988-bffa-58e78eedfa93/default_146_146.png?appId=3587dcbb-7f81-457c-9781-0e3f29f6f56a', '256': 'https://avatars.ubisoft.com/afc2afec-b9ed-4988-bffa-58e78eedfa93/default_256_256.png?appId=3587dcbb-7f81-457c-9781-0e3f29f6f56a', '500': 'https://avatars.ubisoft.com/afc2afec-b9ed-4988-bffa-58e78eedfa93/default_tall.png?appId=3587dcbb-7f81-457c-9781-0e3f29f6f56a' } }, { profileId: 'f02cbe10-2411-43d9-b449-5366888201a2', userId: 'afc2afec-b9ed-4988-bffa-58e78eedfa93', platformType: 'steam', idOnPlatform: '76561198172917981', nameOnPlatform: '76561198172917983', avatars: { '146': 'https://avatars.ubisoft.com/afc2afec-b9ed-4988-bffa-58e78eedfa93/default_146_146.png?appId=3587dcbb-7f81-457c-9781-0e3f29f6f56a', '256': 'https://avatars.ubisoft.com/afc2afec-b9ed-4988-bffa-58e78eedfa93/default_256_256.png?appId=3587dcbb-7f81-457c-9781-0e3f29f6f56a', '500': 'https://avatars.ubisoft.com/afc2afec-b9ed-4988-bffa-58e78eedfa93/default_tall.png?appId=3587dcbb-7f81-457c-9781-0e3f29f6f56a' } }, { profileId: '91193155-2b57-48f1-b69b-556f5e4ccfea', userId: 'afc2afec-b9ed-4988-bffa-58e78eedfa93', platformType: 'twitch', idOnPlatform: '469658264', nameOnPlatform: 'calbob', avatars: { '146': 'https://avatars.ubisoft.com/afc2afec-b9ed-4988-bffa-58e78eedfa93/default_146_146.png?appId=3587dcbb-7f81-457c-9781-0e3f29f6f56a', '256': 'https://avatars.ubisoft.com/afc2afec-b9ed-4988-bffa-58e78eedfa93/default_256_256.png?appId=3587dcbb-7f81-457c-9781-0e3f29f6f56a', '500': 'https://avatars.ubisoft.com/afc2afec-b9ed-4988-bffa-58e78eedfa93/default_tall.png?appId=3587dcbb-7f81-457c-9781-0e3f29f6f56a' } } ] ``` #### Get user progression gets the progression for a user | Field | Type | Required | options | | -------- | ------ | -------- | --------------- | | userId | string | yes | | | platform | string | yes | uplay, xbl, psn | ``` await api.getUserProgression(user.userId, platform); ``` Example response ``` { level: 326, xp: 129949 } ``` #### Get server status Returns the status of a platform platforms: pc, xbox, ps4 ``` await api.getServerStatus(platfrom) ``` Example response ``` { MDM: '4075', SpaceID: '98a601e5-ca91-4440-b1c5-753f601a2c90', Category: 'Instance', Name: 'Rainbow Six Siege - XBOXONE - LIVE', platform: 'XBOXONE', status: 'Online', maintenance: null, impactedFeatures: [] } ``` #### Get user rank Returns statistics for different gamemodes | Field | Type | Required | options | | -------- | ------ | -------- | --------------- | | userId | id | yes | | | platform | string | yes | uplay, xbl, psn | ``` await api.getUserRank(player.userId, platfrom); ``` Example response ``` { casual: { profile_board_id: 'casual', id: 'casual', max_rank: 0, max_rank_points: 0, platform_family: 'console', rank: 0, rank_points: 0, rank_name: undefined, season_id: 34, top_rank_position: 0, deaths: 14, kills: 15, abandons: 3, losses: 4, wins: 2 }, event: { profile_board_id: 'event', id: 'event', max_rank: 0, max_rank_points: 0, platform_family: 'console', rank: 0, rank_points: 0, rank_name: undefined, season_id: 34, top_rank_position: 0, deaths: 0, kills: 0, abandons: 0, losses: 0, wins: 0 }, warmup: { profile_board_id: 'warmup', id: 'warmup', max_rank: 0, max_rank_points: 0, platform_family: 'console', rank: 0, rank_points: 0, rank_name: undefined, season_id: 34, top_rank_position: 0, deaths: 10, kills: 21, abandons: 1, losses: 0, wins: 1 }, standard: { profile_board_id: 'standard', id: 'standard', max_rank: 0, max_rank_points: 0, platform_family: 'console', rank: 0, rank_points: 0, rank_name: undefined, season_id: 34, top_rank_position: 0, deaths: 0, kills: 0, abandons: 0, losses: 0, wins: 0 }, ranked: { profile_board_id: 'ranked', id: 'ranked', max_rank: 36, max_rank_points: 6788, platform_family: 'console', rank: 36, rank_points: 6788, rank_name: undefined, season_id: 34, top_rank_position: 3, deaths: 2473, kills: 4759, abandons: 7, losses: 41, wins: 964 } } ``` <!-- #### Get User Stats Get seasonal user statistics | Field | Type | Required | Options | Notes | | ----------- | ------ | -------- | -------------------------------- | ------------------------------------------------------ | | userId | string | yes | | | platform | string | yes | uplay, xbl, psn | | view | string | yes | seasonal | | aggregation | string | yes | summary | | gameMode | string | yes | all, casual, ranked, unranked | | teamRole | string | yes | all, Attacker, Defender | "Defender" and "Attacker" need to start with capitals. | | season | string | yes | format Y(No.)S(No.) Example Y6S3 | ``` const userStats = await api.getUserStats( userId, platform, view, aggregation, gameMode, teamRole, season ); // Sample const userStats = await api.getUserStats( user.userId, "xbl", "seasonal", "summary", "all,ranked,casual,unranked", "all,Attacker,Defender", "Y9S1" ) ``` Example response ``` { all: { all: { type: 'Seasonal', statsType: 'summary', statsDetail: 'summary', seasonYear: 'Y9', seasonNumber: 'S1', matchesPlayed: 82, roundsPlayed: 361, minutesPlayed: 1026, matchesWon: 69, matchesLost: 13, roundsWon: 261, roundsLost: 100, kills: 402, assists: 82, deaths: 188, headshots: 181, meleeKills: 1, teamKills: 3, openingKills: 53, openingDeaths: 24, trades: 29, openingKillTrades: 3, openingDeathTrades: 2, revives: 2, distanceTravelled: 68782, winLossRatio: 5.3077, killDeathRatio: 2.1383, headshotAccuracy: 0.4502, killsPerRound: 1.1136, roundsWithAKill: 0.651, roundsWithMultiKill: 0.3241, roundsWithOpeningKill: 0.1468, roundsWithOpeningDeath: 0.0665, roundsWithKOST: 0.7867, roundsSurvived: 0.4792, roundsWithAnAce: 0.0028, roundsWithClutch: 0.0277, timeAlivePerMatch: 428.2073, timeDeadPerMatch: 88.4268, distancePerRound: 190.5319 }, attackers: { type: 'Seasonal', statsType: 'summary', statsDetail: 'summary', seasonYear: 'Y9', seasonNumber: 'S1', matchesPlayed: 82, roundsPlayed: 180, minutesPlayed: 575, matchesWon: 69, matchesLost: 13, roundsWon: 128, roundsLost: 52, kills: 198, assists: 32, deaths: 88, headshots: 95, meleeKills: 1, teamKills: 1, openingKills: 24, openingDeaths: 12, trades: 13, openingKillTrades: 0, openingDeathTrades: 2, revives: 1, distanceTravelled: 27019, winLossRatio: 5.3077, killDeathRatio: 2.25, headshotAccuracy: 0.4798, killsPerRound: 1.1, roundsWithAKill: 0.6111, roundsWithMultiKill: 0.3556, roundsWithOpeningKill: 0.1333, roundsWithOpeningDeath: 0.0667, roundsWithKOST: 0.7778, roundsSurvived: 0.5111, roundsWithAnAce: 0, roundsWithClutch: 0.0333, timeAlivePerMatch: 195.1463, timeDeadPerMatch: 39.6585, distancePerRound: 150.1056 }, defenders: { type: 'Seasonal', statsType: 'summary', statsDetail: 'summary', seasonYear: 'Y9', seasonNumber: 'S1', matchesPlayed: 82, roundsPlayed: 181, minutesPlayed: 641, matchesWon: 69, matchesLost: 13, roundsWon: 133, roundsLost: 48, kills: 204, assists: 50, deaths: 100, headshots: 86, meleeKills: 0, teamKills: 2, openingKills: 29, openingDeaths: 12, trades: 16, openingKillTrades: 3, openingDeathTrades: 0, revives: 1, distanceTravelled: 41763, winLossRatio: 5.3077, killDeathRatio: 2.04, headshotAccuracy: 0.4216, killsPerRound: 1.1271, roundsWithAKill: 0.6906, roundsWithMultiKill: 0.2928, roundsWithOpeningKill: 0.1602, roundsWithOpeningDeath: 0.0663, roundsWithKOST: 0.7956, roundsSurvived: 0.4475, roundsWithAnAce: 0.0055, roundsWithClutch: 0.0221, timeAlivePerMatch: 233.061, timeDeadPerMatch: 48.7683, distancePerRound: 230.7348 } }, ranked: { all: { type: 'Seasonal', statsType: 'summary', statsDetail: 'summary', seasonYear: 'Y9', seasonNumber: 'S1', matchesPlayed: 77, roundsPlayed: 334, minutesPlayed: 931, matchesWon: 65, matchesLost: 12, roundsWon: 243, roundsLost: 91, kills: 382, assists: 74, deaths: 168, headshots: 171, meleeKills: 1, teamKills: 3, openingKills: 49, openingDeaths: 20, trades: 28, openingKillTrades: 2, openingDeathTrades: 2, revives: 2, distanceTravelled: 65023, winLossRatio: 5.4167, killDeathRatio: 2.2738, headshotAccuracy: 0.4476, killsPerRound: 1.1437, roundsWithAKill: 0.6677, roundsWithMultiKill: 0.3323, roundsWithOpeningKill: 0.1467, roundsWithOpeningDeath: 0.0599, roundsWithKOST: 0.8084, roundsSurvived: 0.497, roundsWithAnAce: 0.003, roundsWithClutch: 0.0299, timeAlivePerMatch: 434.7922, timeDeadPerMatch: 77.0779, distancePerRound: 194.6796 }, attackers: { type: 'Seasonal', statsType: 'summary', statsDetail: 'summary', seasonYear: 'Y9', seasonNumber: 'S1', matchesPlayed: 77, roundsPlayed: 165, minutesPlayed: 529, matchesWon: 65, matchesLost: 12, roundsWon: 115, roundsLost: 50, kills: 183, assists: 28, deaths: 79, headshots: 87, meleeKills: 1, teamKills: 1, openingKills: 21, openingDeaths: 9, trades: 13, openingKillTrades: 0, openingDeathTrades: 2, revives: 1, distanceTravelled: 25284, winLossRatio: 5.4167, killDeathRatio: 2.3165, headshotAccuracy: 0.4754, killsPerRound: 1.1091, roundsWithAKill: 0.6182, roundsWithMultiKill: 0.3576, roundsWithOpeningKill: 0.1273, roundsWithOpeningDeath: 0.0545, roundsWithKOST: 0.7939, roundsSurvived: 0.5212, roundsWithAnAce: 0, roundsWithClutch: 0.0364, timeAlivePerMatch: 195.8571, timeDeadPerMatch: 34.4545, distancePerRound: 153.2364 }, defenders: { type: 'Seasonal', statsType: 'summary', statsDetail: 'summary', seasonYear: 'Y9', seasonNumber: 'S1', matchesPlayed: 77, roundsPlayed: 169, minutesPlayed: 600, matchesWon: 65, matchesLost: 12, roundsWon: 128, roundsLost: 41, kills: 199, assists: 46, deaths: 89, headshots: 84, meleeKills: 0, teamKills: 2, openingKills: 28, openingDeaths: 11, trades: 15, openingKillTrades: 2, openingDeathTrades: 0, revives: 1, distanceTravelled: 39739, winLossRatio: 5.4167, killDeathRatio: 2.236, headshotAccuracy: 0.4221, killsPerRound: 1.1775, roundsWithAKill: 0.716, roundsWithMultiKill: 0.3077, roundsWithOpeningKill: 0.1657, roundsWithOpeningDeath: 0.0651, roundsWithKOST: 0.8225, roundsSurvived: 0.4734, roundsWithAnAce: 0.0059, roundsWithClutch: 0.0237, timeAlivePerMatch: 238.9351, timeDeadPerMatch: 42.6234, distancePerRound: 235.142 } }, unranked: { all: { type: 'Seasonal', statsType: 'summary', statsDetail: 'summary', seasonYear: 'Y9', seasonNumber: 'S1', matchesPlayed: 5, roundsPlayed: 27, minutesPlayed: 94, matchesWon: 4, matchesLost: 1, roundsWon: 18, roundsLost: 9, kills: 20, assists: 8, deaths: 20, headshots: 10, meleeKills: 0, teamKills: 0, openingKills: 4, openingDeaths: 4, trades: 1, openingKillTrades: 1, openingDeathTrades: 0, revives: 0, distanceTravelled: 3759, winLossRatio: 4, killDeathRatio: 1, headshotAccuracy: 0.5, killsPerRound: 0.7407, roundsWithAKill: 0.4444, roundsWithMultiKill: 0.2222, roundsWithOpeningKill: 0.1481, roundsWithOpeningDeath: 0.1481, roundsWithKOST: 0.5185, roundsSurvived: 0.2593, roundsWithAnAce: 0, roundsWithClutch: 0, timeAlivePerMatch: 326.8, timeDeadPerMatch: 263.2, distancePerRound: 139.2222 }, attackers: { type: 'Seasonal', statsType: 'summary', statsDetail: 'summary', seasonYear: 'Y9', seasonNumber: 'S1', matchesPlayed: 5, roundsPlayed: 15, minutesPlayed: 46, matchesWon: 4, matchesLost: 1, roundsWon: 13, roundsLost: 2, kills: 15, assists: 4, deaths: 9, headshots: 8, meleeKills: 0, teamKills: 0, openingKills: 3, openingDeaths: 3, trades: 0, openingKillTrades: 0, openingDeathTrades: 0, revives: 0, distanceTravelled: 1735, winLossRatio: 4, killDeathRatio: 1.6667, headshotAccuracy: 0.5333, killsPerRound: 1, roundsWithAKill: 0.5333, roundsWithMultiKill: 0.3333, roundsWithOpeningKill: 0.2, roundsWithOpeningDeath: 0.2, roundsWithKOST: 0.6, roundsSurvived: 0.4, roundsWithAnAce: 0, roundsWithClutch: 0, timeAlivePerMatch: 184.2, timeDeadPerMatch: 119.8, distancePerRound: 115.6667 }, defenders: { type: 'Seasonal', statsType: 'summary', statsDetail: 'summary', seasonYear: 'Y9', seasonNumber: 'S1', matchesPlayed: 5, roundsPlayed: 12, minutesPlayed: 40, matchesWon: 4, matchesLost: 1, roundsWon: 5, roundsLost: 7, kills: 5, assists: 4, deaths: 11, headshots: 2, meleeKills: 0, teamKills: 0, openingKills: 1, openingDeaths: 1, trades: 1, openingKillTrades: 1, openingDeathTrades: 0, revives: 0, distanceTravelled: 2024, winLossRatio: 4, killDeathRatio: 0.4545, headshotAccuracy: 0.4, killsPerRound: 0.4167, roundsWithAKill: 0.3333, roundsWithMultiKill: 0.0833, roundsWithOpeningKill: 0.0833, roundsWithOpeningDeath: 0.0833, roundsWithKOST: 0.4167, roundsSurvived: 0.0833, roundsWithAnAce: 0, roundsWithClutch: 0, timeAlivePerMatch: 142.6, timeDeadPerMatch: 143.4, distancePerRound: 168.6667 } }, casual: {} } ``` --> #### Get Operator Gets seasonal operator statistics | Field | Type | Required | options | Notes | | ----------- | ------ | -------- | -------------------------------- | ------------------------------------------------------ | | userId | Id | Yes | | | platform | string | Yes | uplay, xbl, psn | | view | string | Yes | seasonal | | aggregation | string | Yes | operator | | gameMode | string | Yes | all, casual, ranked, unranked | | team role | string | Yes | Attacker, Defender | "Defender" and "Attacker" need to start with capitals. | | season | string | Yes | format Y(No.)S(No.) Example Y6S3 | ``` const operator = await api.getUserOperators( userId, platform, view, aggregation, gameMode, teamRole, season ); // sample const operators = await api.getUserOperators( user.userId, "uplay", "current", "operators", "all,ranked,casual,unranked", "Defender,Attacker", "Y9S2" ); ``` Example Response ``` { ranked: { attackers: [ { type: 'Generalized', statsType: 'operators', statsDetail: 'Montagne', matchesPlayed: 84, roundsPlayed: 114, minutesPlayed: 343, matchesWon: 81, matchesLost: 3, roundsWon: 92, roundsLost: 22, kills: 81, assists: 16, deaths: 44, headshots: 4, meleeKills: 51, teamKills: 0, openingKills: 5, trades: 5, openingKillTrades: 2, openingDeathTrades: 0, revives: 1, distanceTravelled: 14418, winLossRatio: 27, killDeathRatio: 1.8409, headshotAccuracy: 0.0494, killsPerRound: 0.7105, roundsWithAKill: 0.7105, roundsWithMultiKill: 0.1667, roundsWithOpeningKill: 0.0439, roundsWithOpeningDeath: 0.0614, roundsWithKOST: 0.7544, roundsSurvived: 0.614, roundsWithAnAce: 0, roundsWithClutch: 0.0175, timeAlivePerMatch: 109.6905, timeDeadPerMatch: 20.1667, distancePerRound: 126.4737 } ], defenders: [] }, unranked: { attackers: [], defenders: [] }, all: { attackers: [], defenders: [] }, casual: { attackers: [], defenders: [] } } ``` ## Support For any questions, bugs or feedback, please use our [Discord](https://discord.gg/Hc4rTJme4T) or create an issue on [Github](https://github.com/CalumW1/R6StatAPI)