diff --git a/README.md b/README.md index 09a768a..1121b58 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ [**osu-api-v2-js**](https://github.com/TTTaevas/osu-api-v2-js) is a JavaScript & TypeScript package that helps you interact with [osu!api (v2)](https://docs.ppy.sh). -It is currently a bit unstable as it's under development, but you can find documentation on [osu-v2.taevas.xyz](https://osu-v2.taevas.xyz) if needed! +You can find this package's documentation on [osu-v2.taevas.xyz](https://osu-v2.taevas.xyz) if needed! ## How to install and get started @@ -23,19 +23,19 @@ To use (import) the package in your project and start interacting with the API, import * as osu from "osu-api-v2-js" async function logUserTopPlayBeatmap(username: string) { - // Because of how the API server works, it's more convenient to use `osu.API.createAsync()` instead of `new osu.API()`! + // It's more convenient to use `osu.API.createAsync()` instead of `new osu.API()` as it doesn't require you to directly provide an access_token! // In a proper application, you'd use this function as soon as the app starts so you can use that object everywhere // (or if it acts as a user, you'd use this function at the end of the authorization flow) const api = await osu.API.createAsync({id: "", secret: ""}) - const user = await api.getUser({username}) // We need to get the id of the user in order to request what we want - const score = (await api.getUserScores(user, "best", 1, osu.Rulesets.osu))[0] // Specifying the Ruleset is optional + const user = await api.getUser(username) // We need to get the id of the user in order to request what we want + const score = (await api.getUserScores(user, "best", osu.Rulesets.osu, {lazer: false}, {limit: 1}))[0] // Specifying the Ruleset is optional const beatmapDifficulty = await api.getBeatmapDifficultyAttributesOsu(score.beatmap, score.mods) // Specifying the mods so the SR is adapted to them const x = `${score.beatmapset.artist} - ${score.beatmapset.title} [${score.beatmap.version}]` const y = `+${score.mods.toString()} (${beatmapDifficulty.star_rating.toFixed(2)}*)` console.log(`${username}'s top play is on: ${x} ${y}`) - // Doomsday fanboy's top play is on: xi - FREEDOM DiVE [FOUR DIMENSIONS] +HR (8.07*) + // Doomsday fanboy's top play is on: Yamajet feat. Hiura Masako - Sunglow [Harmony] +DT (8.72*) } logUserTopPlayBeatmap("Doomsday fanboy") @@ -70,7 +70,7 @@ const api = await osu.API.createAsync({id: "", secret: " getSeasonalBackgrounds() - [x] `GET /scores/{score}/download` -> getReplay() -- [ ] `GET /scores/{rulesetOrScore}/{score}/download` -- [ ] `GET /scores/{rulesetOrScore}/{score?}` diff --git a/docs/assets/navigation.js b/docs/assets/navigation.js index 1bf89d1..6df5ad4 100644 --- a/docs/assets/navigation.js +++ b/docs/assets/navigation.js @@ -1 +1 @@ -window.navigationData = "data:application/octet-stream;base64,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" \ No newline at end of file +window.navigationData = "data:application/octet-stream;base64,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" \ No newline at end of file diff --git a/docs/assets/search.js b/docs/assets/search.js index 45b67fa..072d2f4 100644 --- a/docs/assets/search.js +++ b/docs/assets/search.js @@ -1 +1 @@ -window.searchData = "data:application/octet-stream;base64,H4sIAAAAAAAAA9S9W5fjOHK2+1e+1XnbTosAj77aPUcfZuza3TP2hZdXLlWmqkq7lKm0pKzustf337dIUBLxMiJwZLV9Mz2VAhAvCCKIeBAg//u7w/7n43d/9+///d3n7cvTd39Xl99/97J+3nz3d9993LxsDuvT5oe306f9Yftf69N2//LXH//03fffvR125wIf3l4e+78d/5Yrev/p9Lw7l3/crY/HzdnOd9/93+8vpgrVXm398O4ffn847A/Xtscaf3v5QWypKtS1pcezntPh7fHkauzOLjlp+PvvXteHzctpqmsie6Vu1+h5czyuP24clm6l4qwcN4cvG1d3roXibGxenl7323NR2cqkWJydc8Hz/zltDkeHJaugvy37pqJsiLeSWpW3Bh4Pm/6mPn59eWQburMLsULjbtegO5W75I+77YYe2LH5y+8+LddVpetr0w8Pp6+v5O0/bfr+Woy1cD+KYLqwffK0cT+UdJm5CGLn23lQnRfsYvFaOtHqaf958+K4nlaZ4Bth88vr9rAhJ944u68FgttePz6evdzDIJA3AKWCrRw2H876PrnMYLFgO29H2t+a5sdfg1s9Pu5fpct//T245bPnf78/CjfOrUC4avbp4/vg4fzrbv+Rb9b8eGvzdHz6m+3xb14P2y9nf+tpYf/+tN6+/EW+W+xCiRbHW89hEkoFX7nLguvfNu9/2j9+lpwVVTTY3mHzn2+bo2DlViDx+n3cnH7cHPdvh8fNv/z8It13RMmI63j6qzjVbwVi2xbm+6REbOs/Pe5Fj47FYu385rzIeV6/ui1NCsba+vP+eHq3W3/dCA99qmisvR83j+eiP5xjmS/b01enzVnxWLv/9Pa0P7457V2Lxdj5w+G88niSh+1WJsKD7z+/vY5jLvlyu1hMT5xGrDIJFuSLlXh/j9V/t/3wYfv4tjt9/eF0Omzfv50ck1iul1nJvzjuSmfVzHr+st5+3scqulTOrOkPh7ftKXrMrrUzq/rz+mW7jhV1qZygyeNxhCVTrO13+wCL09IJVq/PUx+j08I5bHr1NO2Jf9ysD4+fLn5uI93kVNG0Z8hRWsoSJVP8vLxqPuWy8279+NnH0Fgu0ZLXDXIpmHb1frc9Pr4djz0B9ryQdo1c1t+dF4HhCi61cqn4173nM5yslabi91/O5X2NXwtHztTfflq/fNycw/PfvG13whKdKR3TU1+TVNF0e/KFnZdNsvjT6bBZP3uavBWOsfnjfv8sh9emQGzbcicuJWJb/9Nm/dRDrfVBviHmZWMs9kHmbns8/cNp8+zxICaLx9j98/r0+Ek0dSkR3bqjK7cyMRZM8Prj+uX8swD7iJLR0byHLbtc1Hzdv72cDl99jM2Kxtj76XV/2m0/fjr5WCQKJ9mUbxCrWORqU4ZwVplIC/+2/bx1WRjLxFyrvuo7Zif4eqUmhWJs/PPm56N7rTMtlWLFy0iMjcPmdff1D/vD2/Nf9q9bYWd1XjDYltmc9TFGlIzibdcGfnh5cg8WWTzY7uZpO2npL9vTTrgP6cLxNuV7BYsF2/m82fRryNMPu+0XoVdYLMJLvDz1DbwzuxV/5hM7Lh6DKR+5+juNLThXftOC0b307l5Cv/6//falb6Jfrb5sdrytecHwyGSz/rLxMkaUDLb2vD58njTxw/HH8/qSN8kVj71Txnbcd8qkYKTnnNzhzisr1Eiw/sPLy3n99Lh5PtcJkEBXS7zivhc8dr21WR/3L+vdb9aPnz8ezvIdkSddPiqeOj9p1/LO17VITPsefCKeSgxL7Odnp4VJoQQbPiZ8LVS3RCprAbx9OW0OH9aP59b7v/9NIedRWmk454m3Pjz07cit3VklabmDKC6pzEQ1D4/7p43LFJQNN/a0+bB+250e+rv81WUNC4ebm2SbMTaELDOx4ePDut83dl6xacEoM+/3Jw8bplSUgafNbnPauC/UtGSUof3Lbvvic8GuBaPMHN9eX/eHk3MW3kHZcGPnCqeHL9vj1jlCVslwQ6/PDx/M1n5/bb66rM2LR5g87D9sd5vzTN/t35yXclY63GCfijf8X4epSTkvIyXtmZ/3T2+7sWk5j3ji2/9te/oEuR6g8v5WhGjV81J8DjJx91lOK4E6vhnAflZdCcFY9TNqwGfedrd+v4tUcT+tH6LHmc97WrNPYYekS92Mctwrg5kmZokw5vVtXz5tDlvj2T1um+DVw0wOu4zIIMhrhTFTxC81MkjiVyEzHbAcyWHctVKZayCXLHmkCKsZSgcua/KIcKx4KCHU0iePGHlVRGkhlkd5pDhXTpQaegmVQZB7dTWTwyyzMojxXIHNFElLsRyyvFZpc1X8ci2DKNdKbiaHXNLFCcHV2h97f34UlZgi8au1j0Em7q7FHSuCUXnaGmBqOGUNIIvxXgNM5aStAWRB/muAqaLENYAsybEGmOqIWQM4jHutASwN8WsApxTXGgB0RK0BnCJ81gAgJHoN4BTjsQYALbFrAKcUvzUAqElYA8iCPNcAUzkpawBZTMgaYKooeQ3gkOW/BrBUJa4BZFFea4CpnPg1wEwIrgHGtB1RylgmfhXwGGjk7lbBsRC4yE/gNpRhb3Jzqfw40wEXwPHwF0TcO/cTKCUOTOK8/SRBTsIYIchzzWbJSlm0zW+cuFUbdZ0il20OSf7rNktT4sLNIcqxcrOUxCzdXOa91m62ivjFm1uMa/WGSqKWb24ZPus3lBK9gHPL8VjBoZrYJZxbjN8aDvUkLOIckjxXcZaglGWcQ07IOs7SlLyQcwnzX8nZuhKXcg5ZXms5S1D8Ym4uhVnN/Xb/xe/+HgqmrOuC7dxd6vitHkxP0ld3KGBcjfxNEabk/hH02Jfj7XjaP/uuYVhJ91Y7weocC61kdcvI8ltI8KocqSpxogLiFkvZPHgJmd+L3PNRYc3lSmWJbVg5YQGOpSlTlMNLCwp1QqSFxTsTgRmCHrzBkiKf+bVLC39EccEx0ERdnkBIlBfsxLZP8ATKJyUkMpoqSg6PXLI8YyRbU0qg5BIUEC3ZolJDJpcw/7jJ1pUYPLlkBUVQtrL0MEoUFxZLTaRlCKhEYRFR1URdrtBKlhgcX00V5gmyRIEhkdZEWnK4haKkmMvg9p9O69P2eNo+Hg99GuX03SIuzVwD8THa8drWQ141d3TLAUsl9mplWvsGy7+EEypPP+6pK8QMkyunNU+/7r1yYWP75soUtd5vtWAnT+K7sJbu5gf7lVkL9vOD/HqtpTv6bL2Fa8F+Potv7Fq6m2GQS+7mHH4FP4l+XaeZAs/YlnNDtZAuRMM2uTcZIVxQb75tNwLi3aBehMK8pE6EQj5XTzLAv197jsfDQmEk8kHEEPkRcNHVh5zQMagr4TAysSsRkFLuUC546TFB0qGm19hkgJ2hnYmDoHJvMsLR0O5ke4ikw9Rg6cGQ1dGDPPA1ohshUNbZh2RYG9GBUIjr7EQWuBvRkUDo6+xHDhgc0Y1wSOzsSSZ4HNqZCKgsdyUXbA7tSCyElnuTFU4HdykOWjt6lBFmh3YoGHLLXckDv0M74XHoy78LxJGwJToQQvV/Mo4ouoNj/RxMP4uGO6u9hPDicmE42ebnh93myyY+orCVQ5PLiU/DgJboBSjgXHxWQDCXn4kBXhpeGgEKHchGAK2+LAgApb58004kRG5SH1LpX0gXUuEf9GMB9vdtZ3Y+8ncbheXAnyA+A/eDHiyJ/aSOpFO/sI5kgH5Wd5Zifs7ndQbkR43LAsTP0ZU8wM/qy4K8z9GZXA+N/LTPJTwZ9tn6l2F97k6koD7sQXbS55afCvqwC4twPnc3EjEf9mIJyufuRDrkw34sxPgcXcmA+KyOLEX4HN3IBfisvizK91wdyoP37P4sSPcc3UmGe1ZHlmF7ji4koj2rA0uQvbn8Kdj7/S+n840sPDwuBch3UYccihSXz2DlblpDWOZf1XPLxO3xcX/w7tzdrXyC0U/rm9P2N421EgQMpjZHIeMSjU9rJBjuv+fw8GQ++e1neFojwfBu/3i+3fcv3nYnFRLMPq9/eXh/buqz/5W2qiSa/gCfePax/cHxyWcv4/vHx7fXsAtuVUkw3X+L4FmKX9HwpEKi2ePpq/CmYcrupUaK4f153TSE2f6Wp1VSTI/LgrNDFJazM+tQK0HAyfqekcvwSfygkb/BoOfUtEaK4Z+3JylmmJm9lk8w+vPm/Xk57n+Bb+UTjK4fhzvz4dN5cbIXKDMan9dLEtFThofTebXb/+Xc7Pv+8y0Hf1cqtZAg7P36afohKJeKa/EUk+bzsA+9vxou8THQ3QgNJMh6HL/ZEihmVi1Bwof1l/Pwnu/4h/fXT+gGyhGbSJG23+32P59XyIFysFqChI+H9ZfN1/XhKf7qiE2kSHs7L2UTZHHVkxaoXzYJV4qtnrSCfH3dvnx8iLyX2OopkvYvp0+7rxNX4i+Hqpog5WX/vH05xyUJgyY2kbIum36/z7kck77hx5kL2k6lLF52rrWf6ftBJRdOG+oQYdwNLGwFjl3Aw/rnSB2mZiYZr+eS/cSLvi+FBpKihc2X7f7t+HCBcP5zl6yaIOWwfvl8Xih+/LQ5+l8VqJRifvhg3vHh5+H72U8PgZ6MrZ4g6Th8ifw84sHBJFUzXciH7SFWiV01Xcr5IfZyucqhWqBuupjD5rGPJaLEQN0UMe5cypkGz3RJp2mvfMiZdf+UR5eA3gU9rB8/bc9N2V+WdImgaqY7sbAoGSolxV9SbieJ6y2Dzm2L3MuOkBTM6+M2NcdSFuGdRmnrSciTdOjJK0RIW3HocKUzBslw5SvOtUSkJOa/W/3TCidXIz5vUBbgkRqIKlJy/xxi3Ol9gWI88vdmgC8yRc/tVz1y8JjrE5Fm59wg9cqjm22TxqfKOfcu/Z1KeLqb07gzn22mIS5lzUOIlJNGqAhOO/OQ4MorI2REpY55SHHkhhFKYtK/PIS487sILZEpXE6o6M7RmoHEyDQsZ/TvmWc1C/1TUql8NzAduVLcDmZMOpRPeBH0aJxUyCjDkbM0B/XhaUkuCY6PFqME4qPF33zRZn1t1/VGvOsSJfUTxg4Vvh8xBj1JnzB2SfL4iLFTzk3LdRgvcqxvcV8bCslOw6OtAa+nvNqj6wUwZ+Ep0+diHbaPPg9fSccdNuUzIMz1SE7tE4XS+X7eMzxQtG9aoCiZyhVcSnBYSqEom88zXEq8fzqifC+TOYpLifZPZRRF0/mNS4n2ToMUNZO5kUtJDkihFEUzeZVLyvZNv3TqpnIylxIekLop6mbyOZeS7Z32KYomc0GXlOyXMurUPM8jXUy0f7qprJrOQV1MdlCqqqyczV9dSrxfmqsoep77uqjY9PUenTe7mGjP9FpZMpFzu5Rg39RcUTCVr7uU4NC0XlG4lOu7XAdiU4IdXfHJE16qU57pxGIPiBzjxeTGpiLLHfDJT16qS4FpzI4Ymc1tXkp+Qgq02BXPvOjFuhWW8ip3hc9/XUp+Quq12BXPfOzFuhWXti13yZ3LvVwwHpXy7QjNnXngy0W8UenijuDXmUO+WHfCU83lrsj550t1IyFNXeyOZ+76YvGcT4q7HMZh3ntGqVGbSE61oTnzTHvJqfT+QkPy6wW1GdLuAzT75+LHS45O0Zf7wbf6LQhLcHq/A7OIOf9LdSPoaIDYAfa8wGLS444VyJ1wnzVYqjvhRxLEnsjnFBbuRMhxBp9ecGccFu5G0FEIn36w5yMW7kjQMQqfjrBnKxbriP8RDFk/fS5jMdlBxzdk5eyZjqXE90+isKMfYgeo5r7ZAy4DhWXPkizHynyOnLjTSP73LPujzqwwDeY6yhIgOPx8i6Q9w7GXEO3fRLRHNnuIZu9zMwmSfY/TOHQnnLH5dWZixHkc9iqnH9MJEBtydkdWnONIT4jwgHM+ScIDjv/Im3mJZ4KCn4cBR4V8rnvC+aHQBMugY0VymmX6WaPQfMXUpNvoc0mhQr2PK7mShFPOMIWL9jna5FIcfd4pXK7vMSiX5KSzUeGyPY9MuVSnnKMKF+1/vMqlO/HMVehmn/9RLHmDL/F8VijVDTy2JSPdHGe5IhP/PI94eWX+pZz7ikAO6cuqSSvfIvnA6+iYI9Eg/jxZoFzPY2ai3JSzZ79GMBN3To1pMdfxtRDFwWfaRO1ZjroFyQ85/5Yi/UZ3H643ViZcPG3wf8ltT4i/DEmZNhjUZeHOV6Q6G6kX9+iGcvTENT3W28/7Bbt0af+bdurD4W27wFy59epq4Jt263n9sl0v2KtL+0t3ano899YG27FbkbSPVPQ553q18rdzN60jXJRJH0TjRYTxIpfxKtx2lcn08/YYMLp3VqUk8x93+/fr3UO/1RVg366VS8DD5hcelYkixpppQg7rp40rp4RQYVcLlRC0CJCte6H7WxP3lnJudZum5d7hKxk1rkVfoijvcQoS9SlV1adFZCVfrGWuVvrlWuZ6fdqeHtaPj2+H9SMPg+YKoVqSI+pfWXH2aQJvnduf1kkyLuetzA17vHB0Cb83mPXMG5jcCEYtmyJwGKrFqri/NRCgxpVIe9h/PGyCZjGomrSQT9bz+pft89vzeU49v+djo7k2rJd0r/aZm44Ut7kCq1K6+dNWYJeM9bFOmvGQldJr8uLo9TVwcXatkGTW+LSHIQcxwDhUS5MACcLvvz7sT5+kY7GEHqGNJHEDZnv4JEXyczVWpQzmQ0fHrhUqoJTiYuu9WBOXlvJmrPHLkp4R0j1U8Tgh4hkjHr76RmmkhjtoxO9ZgBcgAzkQ1M04gpO2xkr14wySVKQOi0n1ohKS0uobCfVkGJLUGdFYQGwY8aDVcvxjWbmej2Cn5NmTeQnZYTSF0cyxlTyCI2MQt9ZQEoMN5iIz3koDOI2kNQO38ZfsH9CkSPbBFAGa/ZlFiujMF/rbXOncl/rbXOtAXkTrZ+nRAo45hC7RamnWtIBUXxZFy4w4NvXtnxqRHAvbysS1fDQGUy5Saz7q5aU5mIHFiA5lYrRynpAtMMOCCBqtl+FpS4n15G2C1hl9W0Jq/Dr9dfGluTfL4wR+i/ghkPzRUlkOuITgBE7IqPeihgt0JYgq0toZxriY2LT7hCOSeeQiUBx4o6fU4W85EOJbjNG7sZb/MzNXehHoyEMH3eICsCCKS+WBbnH+IBC1JRJAt7QQ9IfikpmfJC8C9t305aJ8ngJDnsqkyOTnsig0AuhNVOYieSAxJRij1cWwu+FvWaGdqC2Q1s3U5cJ0ssiwYCtYpDctcqgMo0TBMnNdzIWvZrbLufD1jMFtN8XZOJvkKIMB201fHrImiQtCajdh6SxtEb+dQM+Gv+XEZpyqKF52U5cZlLEqowiZt8woNHbTmo+JSXMjHIbdFGaiYE55IfgL1CVzL1FcxMo1kXTJcuIW0xnYliQrBmrdxGWjWaLEVIw10bsIv5LEh4Orm9pMxMotL3L0czEqEDiFU/80nLj9+6386jyrVPxhM+EdM3MLd673ftnSuejrUfzqF2H2WiPZ9LP4XKFMP8+eJnGm+8998Us+wvKlQqrhx8NmeH/6OqjfVq1UCR+30gsVCeuXCqmGX/fC25UJu2P5CLNBK2nGshfzsOsOgjnWLLxmTFbgfifhXIXr9Lb4bTGHnPlXxaIETZ3sb8y7yylF40/kEV6md5M3odMO1W7zDsvTHbto5N5ttv3wYfv4tjv1ycSn7ctHD8NUnSjjXt2M7xv3iUUwMPuGYoCJ4/mB/EauUMDItWCUGbNg2G1ePp5IuAPGoHiUybfzhPC7D28lowydnfSReZSDoVtJX0MlO1UvpwvGv4uzFDf9fnOdeILoe7ukvLhyXKL3sQbvrJqibaie6qQcavB+kVa+YQJDHBopUvZu+YSGX77FrpnDUZJigr48GybH6VRJQYSHzSfJ0wGTwlhvnE+e21mTyijPnU+U27GToigvnySKd9+//bR5/Hx8e/7z+heWZtLNY80k995/NTuH/btpQyHOfnYdMj6HaKXMcyl8nMOlB80Tl/r02ePbgYTnGt2J3M85346kX/5vds3DnovMnEx/TvrKDX1u0oKzPEd9Jcc9V2nhGZ+zvvKDn7u08jzPYV/Rwc9lWnSe57Sv6MexXKrqSTsLyZ4uNy7vj5NUX8q43vbmWERImRSMqTvnW26wImucBLOsWZ7K+hp8/yreCWjRFE8z+bh/Od/y4soHzd6qpJrukysft4fH3Ub073MBdsUcMo677ROzhyjLuFXMImP4HFuUjlvNRCFhxtMNju/cZ3ZhOMNWrUQBh/VWfHDMbI8V0sz2uV7uNQLatmqlCejfwN/v1nLvhuYkQL00Ebv+bfpvr09r5vMNnAiolyaiX84+bOntT07ApE6a8ddzZTaph7M+rZRo/vI17CDzk0pp5vlMRM624zVyvoaZPUDOqrTv5+1aPZZ7Mwcbu7RzLjZ82cFs2ZHECZzOOIQIzBxzcvTv9JlBl2qB6+OK3ik3lV2EOyZHGZHxt0uIb6SNcpKiaqdnccfPM+8SGSu7pHhExSglNgImpJR8yIg7ldd3kgdGi4jB/7De7vo8Uq+b896q4WXaecU/JAq4mzbgJ8VuJSLzJkiWKxXH0dgHQqd1ATe/0B9oihF5PzaWptT1oYJzuWyCx8YWFRwCVSjRwQdUvG/YCPxCCvT/MlScNE9QQ2lDaJNfXADSoQRSeGcJkYHwh5bKgaClBAdgIl4whYwWExwAlATFFFxaQHK8zKWlhUEqSiIDrBaQ6ouzSJUztJVfYBj4olQyECy/1FBERollcVl+uaEwjZLLgrX8ckOwGyWVRHD5ZQYBOkonDesWEBqC8kihJNbLL9Qf+lEqA08gx0n0xIOUPkSFCzwoA0Ai+bhMhYqey+RQxEgumLPgRs9HZwx8JB+j2UCk53Mq+vIufk19gSXn4BeW548yKYGJWNNPYijkpIRmAZ6entMff5LeMxGF+okMAKOUyFRIyopEnumTxGs1GpS7695t8Eni5e0H5O6SjWQjWLaqPADLKdKfX4G8RHzlzBoOoFeQIpwKr5wJcYHsCtLgcqArt8QYcoVCs4ErP7mh3IqSmwVbecoNpVak3izQyik4WuTCwiKIFaTSZwJWTqFBvAo0puMql7wIWmVrzAWrnEcQYlgVnEHIhqpcYqNIlS02H6jyOTERxKnmhyXSMZVLZDilslVmglROmcGMCmTmQVQumYGEytaYA1A5D2kE8Ck4l5GKp3KcapAejFngVLajc9JyOB+aynpQTnpg5gVTacfipCfRN3DpCe58WXGBTCrLSbcggVFEKuO5tjBPGcij8pxiC5IYSqPynFlzSWRz64Kh1Kzmr55rZ19BOucuHugRFzNPLh4jOy0n79roQrl5suiUHL258kVy9RwdSMjZC+5AfO7eEghUuuGTc/nyQlFvqVG5fZkxqbfY6Fy/BcBpgOik3L/FUGpgB6JzAReDq6EdiM4NXA63+nchXfa3kpqSO7gMkvWXHpdLmB3SegtOyS1cBtt6S0/LNVwK5HrLT8s9XArtesuPz0VcAvZ6y07ITVwE//oLj89VXAQIewuPzV3Mj4i9JUflMmaGxv4P9ujcxiUwsn/YkJbruBhY9n/Up+c+Loqa/Z+jyZf/m13zuNzI3DjaW25srmR+QO0tOS13cilk7e+5Y3MpF4DY3qKjcysXwNr+UzE405Gbj2TKY1bhLJj/zfW5sbmg8+DezNvIA+tvz7Rsmu6sNmP4K3HB8u81cOpz7zqIncmz/+DsStpOBNH8QnsSvh1J2Z2QerPIPoV3pxJ2LBI6Fb93wXUs8y6GvzeI2c9gO5FrZ8NfftQeB+uEs+12+Hcget+D60TeHZCQjiTthfDdyb8rEtqp6P0RuVN5d0qCOxW9Z+LoVd7dk4Bu5ezKt5efsrfCdSP7LktAd+L2W9ieZNx58e9Eyh4M15PsuzH+3Unbl+E6tMAOjX+X0vZquC4tsGvj36X4/RuuO5l3cvy7krCnw/Ul9+5OQGfi93nYzmTe8fHvTOzeD9eTrLtA/t2I2g/i+pBvZyhg0RK9R8QuXfLuFgWEYmn7Rm4ylo/7Bixj0veS2CXNQrtKAeuBjMP0K4xN3J6T9JD85l2I3YfiOpF1R8q/G2l7U1xnFtilCniyxO5XsU+XrDtX/h2J3sPiOpJ3Nytgusfva7FzPvMOl9iZ6V7XO5+15LWQ17aV47HsuJdtW3dWJRmu37oi4aYA235fY3CaHbsQ3ulsph0bhLR1nx1ASoB1d60fP4uWz78n3VPrt9OnvbhxcDVxdy3r6FOvmVuEneNwP2NjyXhTw3+8TI0lE0ztH/ol4MNh8/T2eHK46Ildolq8iEP/7nrniv1m3Sofb/a0FhfSN3umYLwhR4B4M4TBX6ih2/QVl3M3g3aFhB7264rzQ+x1t+nvhofzFFh7dpmuGSQldDNetu675z60Qsr3iU09B0gQeD9rL1KvY595LC2DGj/F06ayiZ0+dH53DWd/OJ0O2/dvJ3kbkCqf+I3Fc/Rz8AjTBct3dhPyhSJ7nLJ4lYT5v3/OIav0GzH8rAlVOHSwprfLvxzfQi/F/bmOXwZXyMist88PNxQTrelu1k64xL4x9t5+3WyesgglWlpC6sv+tHlwrv19pFot5ZX64dzap93246dTlkvLNZf5+g55Aw9nYSd5Ee64uNBMXpHr19fDfv34qXem4orAMaugmbwi9182h/Vul2XsybYyD3z8820y7MwTzod6hAqOfurd5MYjGg+x0wfSX9bbz+E6h1r5H0rnQXrevqxTbsybsjuytYhb01wiLpL89PX0KelROlFMNZZb8ON+t387ZBJMNZZb8Otm/TmT3HlTucV+PJyrPvTJLj+ff9z/nKKWaCu33BTXas+0vM5VFB3vXieSMztYFDx1sX84vG1lPEI2aaotsPJPWqJMVOVYpYzXZoHbcyo0+/0py46/QaeiM9+hM8nTW/TP65etiM/IJoda+W/QZB9605XJh5rLw92kfRbgw/O5yvZ1t92EhyYTuURb2eUmzKmp0txTShQdP6MmkjNPKBSsVl1TVOqq+YeX21qlB4gOoefiWabSdFrfNmaF63b+lQSQ7MmZ0/bo197dtazYo16eaOzh7WX7KGe9zIxO6sQaf+xjW+m5PTF6LRtgLHATYWbNc9vgXO9+lCd1NMLy/aWip30n9j8X+n/UL9FKHoa6mcSsD9L2Ay/E1MsnIvaCnKvmvB4770lv69j5OQB/EZHXo6+a83ocd9vn6HkzrZxZTuTludbPOof6xZfIaqd6roVj/fWH9Zf9W/8Md/L3idl5pVjzYi7BxKI7h0Aw8nL8IK2HJ2bGkrGG9h8++C4b7q5lY431BwJCBs0qH230sPmy3fz8IOdKTK1aFWLNHs+326Pnc/5aNtrY6/40bMx42psUjzbpyu2d2pvn7YYZO21P4pmuia1L0SRTYStRrBJr2p2UOzFKJdyGmfuyfdpIgdbE2KVogKlSik5g+71/0kiByTTW+f2Xjct93A9lvKKsBD8/seLn600F9r5zRgVTg74BgWjyHCQ/h1zMu1uFRMP9GsB1GBhtT+ukmfeaZ1Pb/nNNNvzeM06f2rbqpJl/2h4f346OdHkwb9UJNo8vQPp7901+KZY6fT8Fmrr75Dmlrv1IACdgmuAnHrjKX4zf44wURT7WMonzAS8giuAv8WLCwQypJoDPXKsngxpJiT+vAT1ZwI1bmWfsGSjOCXJkYZ48J1xU4gXz5zth0tygR9Tly3vCRaVdrwD+EybNEwSJ4oJ4UKS8tMsXyocCp4MPKEJ9BC/K9PwJAkkgS+JJmeQ5V6i2ovDDlz4i3CAKZMx4VCYhPqAKpBC8KpMYX5AFghielUuUL+hCVQzvyiTLB4SBIoKH5RLjB8pQD8nLcknyAGmoJ+ocvI8YD9AGWua8LaeUqMiF53GZpPkBBFtU5AF5HzkeIA/EzHlevBSM8f967qhnnH8pmhrr99c21NzdWMlriXPtUxpssAXMgEPAGLgEeUMIW1IaiPATFTClKXGp89ol0htK2OLSwAQhKhJOUKoCAcW1iTyQQlAUBipAVz5Y4VQYEAwFivSDFqLAAHARLi7DBQwDGGESPSGGpC8EZISLS79+gUAjTGII1JBEBoONSJnplzMGcAROG2/IATrTQIfruRYOO2x5mYCHS6bXqtpWFr+odonxhB+2nBQA4hLkDUFsSWkgxCUqCIbYwtKBiFNcEBQBdelgxCXPG47YytIAiVNUACQBXamgxCnNF5aAriRg4hLlC01sTUngxEtSdKSVBaC4JPpDlHncngBSXLJ8YYotKgmoEJKsjKfLy/YcSRtjMc+3zAg4Zf1lvd2t3293W/EYLmH0Dqq6E0aSP4DkUhEQ/F7femj1gkum2f/8stuv+1eNHPt3wwcOD6XxnmozTrVjjfrcHz/bvnzYH57Xjnez+WonmlxEuvxJHEotfvfG/1aEcPjl4f3moad2oWMNVdOleIUYMxXemfdOAV5f86A0MJ/siJVxTU572O0f5Te+k2qI+smiPD9DQelhvzURKWXn9/kISsqO+0ZErJTNx/Xj14fTp3PvnjxW4zM9RP1kUS/7/sUhvbc6X/i35+f1IfR5R7fwKz32CDGjM/0bFeSOqV5xrujtcPDIIQ5Qen9rMkmx4zly2Pzn2/YQPC9E5ZM2F5Xu+roFJZz4hEXkrDEtPTheW8trePB5ja2PEK/gGTV4n7Vxmz8/TL++37sR/kzCtGK6jLf3z9vTKW5EZpWT5ZzWH13xOYoYqySb9tiFRdOxe7AuKV77r7NldfTuq58cTx5Ay0rBAc71rM+e62w5G73juszT19oc+Jsi6BmQvtPqUOO/0wqa8uyyeqnz3JEJFBjunmfiAh11zt1VH22LXDePnVWXNt+d1XBh6dctYFc1TJ7vjqpLYNCOaqTE9MsYupsaJjRsyxK1ZtiwdIb6oa4lDls7w1j3NuUsjIncpHRJ8dqgRDHx25MuOd5bkygpbWPSKct7U3KmK21L0hlLeO78zcKIlH0/d5zlsec3j7Fid/ycAY7Hbt8swond6/MSE7muT97lc4nzPGcNshL291yCfPb2UE70zh4h5qZktqdHvBHh+rAM387DnOyxUOBO4j1R1VeMcyzej0VTtdxNGvJff1AXJd9uKC+W3R8NvKkcHUgIZ/20x+yqUg0vudMa1JPEvVdX35bZjw3rYdIObWIH/XdthYn+GvzV39g5H7HXy+tmd3+X7EDQDrGgPT4pNUZ28L4yr5zZaV5SfORutNAHcX96wa5E7GHzvWB3tRfsQMTON98Bdi98yQ5E7pcLvRB30BfsSvwuO98Z1777/4LlVLbdesrCYjv4cf2J2tP37Ffeff7I/kXt/GfqYEg2AN89Ij9gQZ8QnkPgUj7fwF5QflDmAa88Po0/SnRovoIgnM5gWFJ8TJaD0AE+72HBTgTkRvDSZ9kSCwoOyKjgBafmWATBmpC8CyF8Ts7ECBcdSHFd4nOA3aCIMySHQwg4k7M6fo21XEruB9VovnwQb80RGSK88rxZI4F9CN2Lju9GjkdpcrZJkvxFBiEiJyW6EwF5Kv49CM5cSZK/xBjE5LdEdyI058W/G3FZMOkdWWJIonNlorsTlz/D9yhjRk0QjEx3smnbyUGwyz8XR0ANidk5IYKDMnZ4yek5PCGig/N6eOF5Mn2CxAdn/wjq8+QDBUXigTlCQhCeI2sojIAEZBJJ9CM1tygIGgTkGwnUIDUDKVhytng2W55SSBfCcpd48RmymUJkh2Q48aKTc54ckh3pSe/Wj58TUdmlif9J6UqWpmxpS9eLxT1tzr8/5Lyad9MWF5WeKfPKVr9kBhbRocy4ie9Lpoysq4FvnZnl7Fn+DC2yr98uU8vd49wZWzEdTsvcAp+XP4PL5UMyZXLZ/Vgyo8vZoeTMLujLMhlerm5kyfSye7JcxpezMxkzv6BPS2eAubqWKRPM7tWSGWGuDmXKDLM7tGSGmLNDGTPFoFdLZ4y5upY3c8zu3DfIIPvWy8ElM8qulr5pZpl//3JlmEn9XD7TLKC/uTLOUjqcmnlmd3eZDDSXj8mTiUb1ZJHUIld3kjPT7J4sk6Hm7ESOTDXoyGIZa87O5Mpcgw4tmsHm6lRWoLRERpurA4mZbXYHlshwc8Kx1Ew3wA+LZLz5dSLDTgHVmaW2DJwRemomHAToi2TEfeu1aeYMuWvjy2bKiX3IkzEHPVk+c86jTxkyVAK7lfNRv0RGXXh3Fh2kPBl2YZ1KzLSTe5Qj4y68O0uOUaYMvLBO5cjEk7uVLSMvsmNLDlnODL2w7uXL1LN7uHDGnhMe53Pq+VMonPAxLZMPUM4CGX2uDiRn9tldWCbDz5m+kCPTD/IXFsv4c3YmS+Yf9Ga5DEAn2ciQCQhQY6mMQDdxSswMRNq0RIagE8okZgoClVkiY9CrC9l5wKIZhK4upWcS2p1ZKKPQ1Y3UzEK7E4tkGBJdmGYavtv5z/C+7K+WO3g1HpckOPST5Qcv5+XoKULKpGYmKWbD7mGy7xShimwkj8CnzfHxsH0NyfK6CbMrRwtKYXKkmLgN4aGpaZcWvmS3bc7JHwOpIWp2hGAfNy+HiEt7qfYrj/Ag43LVdPh1Mt1IDuM4QffbMAJ30+QYteE/qeLGRhaQt1u/fHxbf4yQOKn5K99aFyWX61WGX6prZzLeYDNZ53ssxqtBO3lvtLnIvp0YR+YpMzjb/6Y1Lq1feoAezg/klxgpt4qZhGwe+0XClYbFSCKayCVu16cNPvTr+ihhdvU8oj6tj7e+RszOWf08smJOhNxEZTv6sYifTT3MMbS06KkNUWvi8YyZ+oXOYch9SDpwEdqFgJMVk4gw8QiFGJFFnJWYhGK5DkWIEsNOP0zUZTjmIAeLoecZpoFPloMLorzYEwoTlVmPIkhiY84c3HRmO1wgSYw5RTBdFmY6LiBKjD0XMNGZ9QCAJDYh0/8mN3dK/yKPeSGpuwp/3CyXje+nOCrtnlOeOb/eswdRifSxXQjKmJ8GRMmp8XKgFpwDj9rSs5AlgWFZ7TdtGdLXRVnBeeoTaXkS0kV5UZnnE4n5UswlmXG4IjlpXAx/o1x7chq4GPoG5XtPwpz0xG63rNAdW5SXZW9W3vcKycme7nolJ18vsopISaceWsmYN82qikiQnmjLnAntUBma8hcgNOrxkJzEHCYwz4WMSEv2lxmSf8xrDE40DhOY5TrGpA77ywzOEeaFxiUDR0jNclmj03v9BUfm8d4050zYFRFLhEvaPsGDJisACMi2nQR2qWm1kqSw/NmbqAyJspKs8IzYyR5fntRXUV54jutEX6ZkVjEqCs1anQREWdJT5YgyJA91Gk0mJ5yKIVpIZukkRktOIXWKio888iWFSiIDsz9v8nKkeUrCgvI5b7LSEzddVyvuUuWUNE0a/d1118Oh61Zw/HKwxxIj+uk8M4bnY5geT3rjyFXdnNx37VwF1s4nKEFNNil+c3mug5rK0SIum4Xvv8ZIwdoZBD1vjsf1x40PyJjrgcoZ5JhaMddmWjODkNP23LnT+vk1WMi0ZgYhh81xv/vi3HaY65hUzCBjzA+IVjOvn0nUx8P6POyf3572x7coVdBADll9toJPNgEhaFo1h9Mz29QxUqyqGV1fhBQmxSJayrCD/7o//0+EGKicQY659x6eNi/biJmFteMEldKa6Xn/9LbjdEQsl/AN4j+d+o2El4/9VfXu/z3W9D7x4x6R49jsQwZFd9hYgL5ZixnWnIzKuGAlQmrcGpVRzS9ZF+9APvXfTnroGpjRnRDdRoiOWzMz0vkl9HIdiFpjM/rZJfdy8sPX5Ix2eom+nPDwNTwjnF7SLyc8eJXN6CZX28vJjo0RGPVSyLBsJ6JiCqEXbIixYDfCYxCuA3RIsuBDKjxm4Z5TdAiz/KMqXXpaVnmE9KiYiBHPhkjLyY+LoRj9fEiVtQPW6w2CAo13ecOdySp6ck4g5IH/Dte0VFshgc+7zL7tncufpUmKmfjvXJM9j6TAZfNcVQRtFoXFqckqYXBQm6ftaR8WDr2zXdy0hVzSxgV+jKZb1Vxijl+Pp43rnBup5Vozl5SYVcE710ogUVJoND3RE7OphGKmz49/3TtzxCcN9aX/Rz0/roJyPT+G65Hx+XETGP38kCTFXausV2U4dhej4lIxl5CYmX5TEz3TRUmhM32iJ2qmg5j2quTH9cvnn+w0o83L2/Pxb28/EBN70q2by/jjYf1l83Wa30y2dDctR/dhIoq09G/bV4cNUyKu9Xebl6fz4tph4VYqzsqP9uEv2siP85NeITZ+eH097L84rUyKxdn5f9/Wu+2HrdPQtFycpT95dOdP4X25zcw/v+1O2z4xcpJ6dNmumvwmzonpc/TH/Z5c70zb6svIT8+pKu7ozeNp+4X0t6Spu2t5p8WhEmv27bR/OH7ekkyUsTypkmb88eyZP+7pw8G07UmNRNOf1i8vmx3jxBnj0zpp5s/O58g80GjbtwpphvtXubyeG/h5T59joa1DrUQJDNpgTEubpL4mQ0Y5w+g+r385j9U53nml381IG4ZaaRKG/3ibHkunmXztodbj9rVn22xGO22fqpoo5lyEO2PEaLjVSDP9n2+bt83DM5PGTBu36qSZH99tNbmkAfcgXTlN0JDvEObtplXSjHN7rLRdMXHR16QQHNBWxwrCwU/vp9r4AtWhRTaAY55uVN1gOb4HYn01uN6dNWuH6Aa74jqXXT+GrD44efeTtqJ1Ok6jhT9QBLmhj5lwuY/759eBF+fQO21sKcGvAUtgXumr/6o4XOLhXCtsxcrqvDW1lNjT/rTepTuhi2C7uaVEB/tuXrAL9GS4Y8cVy8P2PJsjFpzCXcy1nLEr9svcjb1/YHYXpgamZZOjbvdQz8z5BghWn9Im9FxDyPT1ESLnMMpaPA7mBF+XntewCaGOSzOtm0fOerfb/7x56tfnzuk1FwS1M12h8T1XkZqweh5Rm19euVd6yXJuFfMI2f/84uXH50omNfNIubrS/eGJPg4pC5rVzyeL3VNxK5I3VCK9T7TrSREyfQz91D+pnLPJlEp+9JzLrp9DjN1da7g7O/YkLS6b2w6Jxsbao2j2LSvPW+ctyOq4v1QPVON6Ucn+kKBprJ1ZUuideXetEXGzzNfxIZYvFVIN+0OMqfVAfCFLOK9jz8P5cDwdphuKHiqwYoSQqWP602bt8fAwpTLsRPlxkYm5uyD+MfYmkXNY5kMiFNm8N7eY2g/jE7IAN4eYWvbkDbJJzzBkajckAJGNB3CCqYBQHiCL8Iz7pwJC4nu38VDLcWanPuXP69Pjp394+UC+NmTayrXgN4i2bVu+ofatK9IWxEN/bCdQgFUxg5DNy1OMjEm1DCJ89gZBgPcGIWV8dtd5GU++257DTN1dynt2kh3iLxuPLbeJ3WuFRMPsJ2cYu/I3ZrzNftge+tTnL/yZQMb+rGKikP7LOXFK5jUTpVz458fzP8OkzGuGS5mFtJT94Qfy5UZskH7kLuu0rbtbOVr5T9KeHL34sdoXVjxi09Ky1jJArmWlgz6iWY8rFnAAVjTVJ5CcV6LvySe6ZXFaModhhkHaNpE0RpvrM5Ho9bl9o1yKZTDZvxbfaXAslMGcsBy1LIYevJf7uOn9ibuXl2IZTHIUyjIYdLQdzZWMJ7zkhA5/9c4G7RNPt8fT9pG/3e9vZeQVjHhhPvaHCrxt3F2KC5YmdVhqzt/iM4v7z8nmnjfk6oy2ZwonGtwe/cftbiydZnL78aX/CNknGnLShq06WcyHddyulCZgtz70L6fYPn4Ouwazemkyjs/r3S5CxqxeNhlhQzKvmGNY3u9f6LfTSmNyqZTjSgQKsCslXgHzMaxhEfSwfekPcR35R9H8WjDVg0VZsfEkpmWVTBf+8c8X52J4ZseNeGf14pINGPMeWQbeAob3xDJ7n4z5SZVE4+e19/b57fnh6LGWmMkgK6cKklbvhAQpY8DbqJzhwZj2SO3wFjCQvdC7wKqULiB8/HOOuwO8Mwp8uLu3hGtyw5BnFnQvEFVTb0l+F4S7Hx2bIN6mg6zmMMhtOTAmxR2HEM/n4BOkw4shFV43n4wRiFsuAih43XgSXCDuumDM4HtHhN39UfDBa2B4CEgMiv9L2PwHRCYhxJBEMBEvFy3xEcI3B5MSRoTFPPY7YcL2vyasQ/lPaELz1EcziSV2r5W7qw7ntcOBPmKLxiZlY83Jq6qbKY/llGTGZxVxM+a9fJBM+izfbya91+2iybft7snX4K1srDl3fHAz5xkYSOb607Uul3MzaJWONbk9PryeDWweT64n8s0wUSfW/Bg+j835GJ/VSDQ9LGA976h5lUTjXivvmX3/lbfDYTjjHsth+AU8ksnA7ubpp7zCvVnzWNqKbj4gmp84/dAwXvbH8sas5Yzne7PuNYL4VBXWapPnaegiTTLpZlc3w3F7ubLr9LrSWS+yR+Bk3VtREZM4yo5QaTLSMTGSZFoOjuz1YUazznDI9iB5J5X/YiAq8BB9tRhxTJx0eKgBZu385o/ihDa/J8QZ3NsYZs3fie9gmBaXTD2cTfibG0snmRQeO2DO9aiRTTme4lNbPk9w2ZhzfTg157c0lA3KbwKc2/R495/XRfVYPFhX1nfZMDPrewxIsuk6BGTVPTp34ob3vTxUq0gZ95P6QXqc7y/omy1WibpMA/mF6VRheiFhHzeft2nKxhbyS/u8PpGv7/eXNraQX5qcDuAjzSMvIFSaM7CY6ooLLRz+XwguLNcfGl7IZt0BxtR4ZIghS/C96pkvuEegYa0mIkMNx6g7gg1r5GPCDdm8HHBMjUeEHLJpZ9AxtR4Xdjj67gg8rN7HhB6yef/VSET4MTONX51jj6aY+tciKWFIiAnHgRSoEr3Io4z6LfFuNZ+lwxDH3V5YTgvm78eaARpc7yTarMn3y7iljDXzSek9V5yUsWY+KXJwjFJCvq/O36OBITMhYhY15xESMCjBBxrcAhzhNSiYR9gZJDiDbhBBxd0ZZPiE4qAk4stUvsPiEaDj2NAxepyYJI8+W+8LL5rEBnKE7245vjE8pSs9jPfW547lowWK4by3QHdMHy1QDuu9FXrE9tES5fDeW6JHjB8tUQ7zvSV6xPoREp3hPuiLi/jdzx8h6MdHT2jc7zTuDv1BQmT07xQSMA75h8ADA8wWqHEkwH03OGAA3hExPMApQkYCICGCCjgFOMEAaIhjA+7r4MADeCViCIFTRNDaJ4ITUAIQFfxVTC65lEgABXL2imXAJ4Plqjk6AryZiwwAXebd8Z8tITL8c8hwPJ0tCTELe8m8R+x3sx8b+kkCvCK/m4T4wE8S4Rv33XQkhX3igHhGfZNRSQn6QEp4zEfp8Cd5Q+1c8Z4gJSTYA015Yj23Nr9AL0acM85zi/ML8mLEuWM8tzrPAC9Gnju+c8vzDO5i5LljO7c8z8AuTJ5XXHfTFh/Wic8WR1Q3eazEBHWSab+Y7iYgIaSTZPiPQPaL7xnPTVY3CeGceBd4RHOTOyE2mJMkuGO5m4DIUE4y7xXJ2Wv7/JPRJ46bXIXYME6SELKaiQziwDwVw/2Gf/G43c5YcPGIbmonJLC7dEQ+shVo3/V29SAJfiGmZT8h0vQQ4xdwzgQlxJ1uUR4LCBQUG2k4xHgGo5aalJjUIcc7NLUEpUWoDkkhgaqlKjledQ1dQNhqj19q9DoXFhfEMqrCYtlLIzlDWllYaGQ7V5gvwPVS6h/nRkr1Cne9pPpHvZFS/YJfL60BMXCkWL9Q2EtsQEQcKdYvMPYSGxAfB4v1DpNhjZQSLbueeqErtujY2SHEP4S25CRG0g5RwWO11DAFhNf26i0xynbdPZ7Btn0HpcTcDkF+obclJyECd4jxDsRnIdli0903LLevUEp07hAUsVpLiNXnYoSQffzPceO/+r5VSQjj3yfbvbOaCHiUTbrMiPt5s/34KV7YtXqqqKRVP60qJHWRbmzsHR9g9l8+X3/MJvTeajJFc9SHi+MkvyZfYI8P7EbLnQGxYOfinkOhqIyZ3UvLDMJpqDEdrPkJDEJslMh02OYl1D88IUQmwhK3wDAUhwozQDm3xFA8hyKzgDq3zAhkh0pzwTuPYQ/HeLOxzwT0ln/IJ0K+SXML4D6n2EjwR6rOjgB91QfDwHj5IVjQV34wIIyXH4QKffWHQ8P4DgThQ98OhIPE+A4EIUXfDoTDxZgOhGLG+foyA3D0eKLHr4BTIaRbXDCORIl5wKRbaMI4Lz/E4dhytvrNAzA97sYwlDm7IzNATbfIILyJEtNBp1tgKPKkwu9v4HoCMejsSmYAom6RSavddEhKCpzi0rFAX+UnLn7EMgQW5ebj/rg9bfcv3q3eTWrQD9iZ4NBomLY7D389jd4s/niemtuXj7cFx+XbcZcfxOs2HZS/MvDr2lBfQIbTVzGCE2K+VT+3cncrLVsbqrBLsuFb954Wr4X9bn5OgG/wySpwhZl2xVE1+3SiqbHL+P2rxIYpBa7Xm/RvTvZUcimbNg7Tu/u3/Sr6QDrua/WxzPL3+NSQ/21+6UL8nW7Zjb3Z5zKC73dCh/ctf6mbeNfzEjxvfFtH8r1v6Ym8/ecjY30q43V/2nFbcNc2rqXSZsH76xKADIUZc3d2NccI3DqUMBVBgPdkdBo/Rlzuu2mlCAHew339MeQb28ziHJoSvwDlumjDf3yMjAUjzQwfDnh4Wp/8jFnFI01uXp78DU4KR5pjIwA0JeNsl5lhG+z4unncftg+etnDGv6GS+HWvn4wWfBefObGu/Pwbh+3r+uX0wDbxI7cUzUcORuuy/h6a+4hRcEd1ZBDE9lapAsQlIVE5lHSnK5DEDfzJvnlebocQSTjhfJL9XJVglDSe+WX6XRxgsQwxhElz981Cjp5b5lF8NQR/v7LhvY7ww8h6wR5I3vanM8r6o2uIH9kmRCWI9h0yVyMy9Nl+Kt4HSbPqE9nK0/vDvvXzfnyb+Z8xjSGxeQHCQr2wTeMHTfMoStK+JZzwS4Jd5PKIVpE8NOriNJyCL0kEnb4DZ+wxTQ21sg5NqftaRcyMFMJd5fKQVfk0u0sY2PJiRieuRhihJicWblJZ7buNxmnG7lPGCppZyZmtG77MtEDxu8f/PD4abv5snmWnlj3k0JhXtVrlUHbkMOpWR1+Czmif3d2rXAJvhjPbd4F8+YtrN0XZfu4f3kQ70UPSfeTViK0OTCfsBzxE+dYq0TKkp/LPsI8Hs5x0j4e9m+vDKPzlzdpJb/E/eHpvMROlThpJb/E4+4tUd7YQn5pT5vj42H7yu3H+iu0G8ovlMtZ91cofpwtya28HE+Ht8e+6yRND3Awdkv5pXInKBiJszMTUY9Lj4BzbjoiV9pbUNBzYPsEx1piJRCr2ne79VcWKJq2sORiayXSkM+CadYXKfsy1L5MScMECKdzJAnUoZyEq+AxGZhLETsjfKVJ04KWFECNnVLooO+H19fD/ov7tr0VXXqCgKWAGTLpDhdYDD/TW9GiiEnFLELk5wQjwuNp4S3gvUfYz8iwqmYREzBnUUzqpHWL85i1KCp22pJi6Hn7u81uQ29RYIum5DeYtRNDYZN27EuWO3UqIuJGlaWE3adTKRluU1ma3106lZRwk86k0Pfoj5svW79Hiyn5De7RiaGwe3TsS6I7n5oP8uay+bApMhURMUVkKWFTZColwxSRpflNkamkhCkyk0JPkb++cjvN2KAp+Q2myMRQ2BQZ+5I4Rabmg6aIbD5sikxFREwRWUrYFJlKyTBFZGl+U2QqKWGKzKRwU2S3X3vq6kt+kylyNRQ6RYa+JE+Rm/nAKSKZD50iNxFRU0SSEjpFblKyTBFJmu8UuUlKmiIgZTpFfmSOtJlG+l8XmwrXxn1u/0GndGDIsyN308KxBrlzgGhrduQvzIxM029mPJi5ZEb2GDczHl5CMuMEezdLfjBPMuYz92/2oue7JEGa4zfTwfMaTOJc/tP+6OhyX2LROX014DuvB83Rc+BmznMeSObcc+FmznM+SOa85sTNov+8kIz6zo2b3aT5IUlxzZGbhKh5AqYx0++nt9fX/eH0w8f1VthXxZKLzR3SkM8cmvUl6uamzXvc5L7mfe47WkT0/ecrTboPaUnB96Mghbkv/7A9SL4cS36L+/JmKPC+NH1JvS8n5sPuS9F84H05EZHjvhSled6XE0kp9yVKYe7LP24/+F2pvuC3uCuvdgJvyqEjqffkzXjYLSkZD7wjbxJy3JCSMM/78SYo5XYEIXg39v/3t5/WL/QZ5Vtrt3KL3otgxvdWnPQi+k5E0543Imk6LH+Vs+6Xuwq136SDCM6TEQ4p957HIwhNrmwtKZvWqcqZRBsu6PWw+bLdvx3/mnzNiJbySvV1dCgyyc+5p5zLzaGcKC9HylCrrikqdUvSf/n646Z/x/QPj6ftl+3p9u6N/rJe0+GwVOAJqLlRzkxYw7crajq6298ybC9HuK6/eJ82/s3bdkcO0K2poQh53G6i9qYp6u6krfmcxoOabNbv9ti/5+rhy+ZwZDJ/GQ3zmklC6OnA2BbS7z3N9X6DTNFlLF7KJxkNv8iZLu7X/dvp7f2GeWsbY9uqFGq+ZGbSfEYOv4dPotlHHYY9uuPpPDOefQb2flbJU4PjvhpafDBNxsu4w3a8RM0by+J1OI0RD8howeF+ilMt+a1FpHtNOk5twFM/WqCvL2Tv1ZlvXERm+tB/syEP8recWsb/5hIsOtBrQ+d2D9ND8SHdwEb+hzhYUpbgcJMu+OxCLuOQ6T4t4aB9O5TDYdO9WsyB+3YtclbTvck5u307EO/wmbmT9wHg2438t9avdkslPjDo3izxAPH2Z5dyD9mfIHdU28t3D5+XWPRfzb3j3VGufpan5JecYu4mrfnHIez1CefA8YpdjDio5S/zHtin9ze/eD+9g+Tfjy1n7IMn3l2mO5PWv12Xoj2S3Le8zshj0iQuGx29ybNiDO1G5GJR7kvOdWJoh/yf43IfEh/dobKDFoay8vQ1Yaj4rDfPr3HThC8C5T5kWv95dMPaNh/WUz95xOfTksn7KK6LRhjz20aw+hP43h7ZvLjbGSbg4uvihEDtHIK2x4cP50fJ24H+3o5jXKzKkXJK+Y6cb0RMi6XvR/xpCCre97Oo34hlX3nB2Oea8I0OfMZoN7T/8N691ekv7Q4aDdHJtiw9rvjXMEfJt5pcVHyIw3KIjnLwSeLD/IxD/sztfIMOxDlMR0dYP/oNOhTlcF33FeOHl+nOrS9/2B/e5p56+Kt3Asc75oyKaeWd83yK0RAVdoEJn2yNWxX2hh3eZOBr0ioda3LztPW3OC2caPD9V2YJzNi8lI81+6Ev4WlyUjbWnJ+hJBOn/ev20bNHk7Kx5oaHpp+1W9FYY+/3T+THodDSWC7AjC+OpCy5QOOkziCM6dzokkJMerixm10HIzusfw61bqpEGp867L/09yFvffh5YZd9s+Hvs43sBKc9MerttUWjH/oTFg+ve/YDwTO7WCPetNOTTq36uVLRoKepRCPHh93+8TO9sJrbmpSONnmuFzaEUCHa8NAEG1LNzFrFo42yr1Of2ZNfnO5jSvTpU0tuby4aMvkk3lPfKh5v1PUgnlr0ehI7bpad8LSybpOd6xGFhuy1/G732/3Lhy357uTbr2Jw4HfHQWOOG24ijDG0f2VfBoymbkVjje02Lx9Pnx6e1l+9DNrFY432X+8O6KVdPNbol/1p82C23nyM2sVjjX7aPm0eDpvj247+ViJahfIBZm2Y+Hn7jvlI5uU3/xt//WW93a3f7zb9Q2q9o3dBrWbvqCp0X65S2adavyXhtngtF2lmkOlh5lIuzszz+vD5af8zueFkG5qUjDP1uj59cpsZS8WZOL69Z52ibWZSMs7Uaf3R47YbS0Wa8OtKcD9uFv558/P8U1H9H5MJ1dCIG1ANAoKWxXbD0qL4WpJ1I2+nT/QnjMHItWCkoR7xcN8SAVOTopHGTBy0fWa8LdizS0eafH17v9seP7ELRbAJxSONymtTMOmxMnUa5D57AabEb1s4jbBzHqzIk54yg7N22BXfnw28nP55/WX7cc19NOPaGFkjfn4/mqYiTd7dqjuuAd1Rdk8o8VLcWS0kSvOFeWG6XJjP0dqL+yJufqZP4kfpvL80l6jW9eGd3VNO0ZfmlhXteEYKigO2W+NmksfTVZBHPHLzS/R6LgsiyYd1fpm+T3RBKfeYzy/Wey0gqGUXCPnleq4iBLHM0iK/VOf6QxA5W5Tkl+deuQj65suZLAJv6n7arA+Pn34cOMYs4pn+6B35cF/AtRpzf/fWEsbtwKxPa39Td2Nxtz3xi7an/Yn+cgtj9VLebwglGQiOnCL6Qt/oKl9NBVzloQ9JV/lmNeEqg4z2quHHfhJsJjhw8/L2fPzby59lLncbqv3xTWrhzvxOX6+rBLLl03r7eS+2fSkR0/qHw9tW7vzdtUhM+8/rl+1abP5Swrt1fA/Nn/e3daB5D835L+K4iZGF3cSdI1zojXNrwMfD/uXrs9zw/a0Ua8D1RcrN6bR9mQA52tCkWICl8Et1NTQ2Bl/coy3e1PHj/NPjfmZ7+Js41reZ/sfNy2GDt7r5o+8sn77yaFb/zvxKd3U0Trb615fj6+Zx+2E72Z+et26XCrfyr9unzf7//HGaLTk3MhR6+KOURS7Z+OFlKzZ/+T285R/3j5+Fhsefw9t9t38VmjW/hrf6L6dPk/XRvN3L7+Et//P+y2Z3ku7CW4nw1v9++/p//l68IucSD38feVV+v9s8ns7ebpIkNDdgFQq38efNdEkxb/7ye3jLv+1rbB/F1qdlwi38Yb+T7vHx5/B2/3H9X/8ltDv+7NnuzZ/+af3y8e0cU6NLvf493qvaTYiO9aYi0LeCDR/36rD1+5ePfeQu27kVirLxj+vX9ct5RSQbmZSKsvLbT1u3kVuhKBv/MHwfuf+u7mxKgSEoGWXtn/aHzfpFtnMtE2XhD+dij47Bv5aJsvDHzeHZ1YdrmSgLP/28eXLewbdCcTbOt6bbxrVQ3L11vlO2rkt1KxRl48e3s6t32bgVirLxbu92KNcyURaolQoYkBcrVPvWCz3nxKn/YxBp+mm7O88b7pTP+DZoU8Z5ui78NNe8fcexU6tCRKIfbdOV7ScYnl7P/nTPy4akLkML4+8ep3n595KbJqTe2VburBpC9y7iw8+0zUzOTniFGnvaHB8P21dut5SyaVeJN7199Lc5lo03JrzSZWbM9aYWp7H+2zyH9Yk9ATezOK0Qb/btzf9eHcsGGSvZ6Wf5xPHHoJmHp5Z/dw5wtjvuFRA3G5Oybnuu6/f4duhLPww+an06Hbbv3050ZqIo4o5vyC1u2lpEGkGUMI+3E9GNch3lLvD65eF5czwyu6Ap2u/ttvP0w/Umn5vJh83hQO+U5+rU1cI36dpwjOMcRzx5PP6CewWNf7sOXS5lTJ/mDUTPZe9X3QhynO8BDxLhv9YhBpte9TjOZgfJ81kRzYXN1kY5JQWsm+bKuBVUToE+q6u5stk6K6ekuGfW7MmUU5L3Sm2ui16z5RTns54jPAOu7BIlTZdmf3Y8vMffFw26pja8Q66L8PA8VsKmI2vVx+D2+LB+FJ2HZXJaPN6ox+PPsur7tHOYPW5enmRKYFmdFo83etqe1Z/Wz+TnRudGp8UTjEoOzrbnXG47TIm+wTLljvS8xi9k8ELN3Wz92+b9T/2h5Tluu/4iMrdJiLp/fl6/zD/4cWtnLCE7q5ugmxGtpv7q9NNpfbjp/bI+bPtDapSla2lPm5eKvO3fT3rosvx7774Sdm8X1nz3iL+s5vNJwRcV6N5pfCj9457+XC3agyq+HRW/g7f5wjwTfIzfXWp7ScAmQhPcvBSJ6W7+gpiR+tNm/YU+6sa3PNT51cbqZj1+sEyv843WRFPscKEkHK/R//7zhnzHCtXwrca3HyuwHTFSk/5mGCfUEzxKpBxfvOeryEX0HO0MnZJXkfTJ2TB595O2onW6vljJ8ZVQrTJxiRLq/hYhNuv8KiE/BS03cH6+c/GO+UnOevHYcZw0I240jkq4oyhDOS52mNqYlowyJW1lTg05dzAdPdqefbRHdy7FoowcNq+77eYovJN0agtLR5nsX23ha9AuG2Xu0fw8vA6CDbumNokKyYY97pZZ8Siju83H9aPwktCpRbtsXB/lt/lb/fP4Aqhj3onHt+yp5z4C7jAmvwjNMubxEjSHMfG9lZYt90sr/Uyxb6ykrMmvq3QYlLbxpracW3JeZh7Gp5GXrQfxATk3SDwYf/P28kSfhLMKkOklst+gt3qIRu8mFcSejFoZs5/Wx4fn/cG7L3eTChnMyrcjbdnjrpSNb18ed29P5zs8+JpTNROEmId4uIx5vQQRw3pleOJ627eqpJr+sN/t9mSoydu+1kk0HtblxN4e9wfJ09v2xsIJ5h7fDkcm5YB0J5fiKSYni5nnDR0zS75sWjFBxuXJHC1HaCBMVul4cFzzoqa/eieN9vtxf+kPi/5l/7rbfNnsXKvrsX26nmNTzufCsyddve0Th19ZFUw7vLjXh6GUMwjxkomN5Rfs/VgQlZIPCXHLN0Gy92pClEwuMZaW7LMS8VIdlOiSIDx8FSPKl5c2S3UidAUkdkFaFi3VgYDVk6idWVItKttz5eXWTSzHlhSe4VJ/m6vsteITtc6WgUtJ9Vwtyo+a+RJyMbmhSzufZyS9zluqC9GrVLErXkvX9C79x/dneU+bX777u/++fs/w775T9/q+Ozf2YbvZPZ0N/fslM3NU891/jL/96+bxtD/0JUyRv1199/2/r75vVvdd2/7Hf3z/75caww/DH4ZixflfBVWssIqp87/U93V13zZ2MWUV0+d/6e+r7r7rGquYtoqV53+VVGulVaw6/6uitFVWsfr8r5oqVlvFmvO/GqpYYxVrz/9qqWKtVazjLkhnX97+anfk9YVxGAZi9b1W901lX7vCHoqiv+RF8b0u7nVX2iXt0Sj6q14o0ro9IEV/4QtNlrTHpOivfVGSJe1hKfrLX5DjV9gjU/QjUJBDWNiDU/SDUDTfl+peVVDSHp+iH4eCHMjCHiLVD0RBjpGyx0gV3H2rYLYM04WcfcoeItWPgyInoLKHSPXjoMjBVPYQqX4cFDmYyh4i1Y+DIgdT2UOk+nFQ5GAqe4hUPw6KHExlD5Ea5hA5JZU9RLofB0UOpraHSPcDocjB1PYY6X4gNDlGGpza4NXIMdL2GOl+IDQ5RtoeI90PhCbHSNtjpPuB0OQYaXuMdD8QmhwjbY+R7gdCk2Ok7THS/UBocoy0PUZlPxCaHKPSHqOyHwhNjlFpj1HZD0RJjlFpj1HZD0RJjlEJz57h4UOOUWmPUdkPREmOUWmPUdkPREmOUWmPUdkPREmOUWmPUdkPREmOUWmPUdkPREmOUWmPUdUPREmOUWWPUTW4OnKMKnuMqn4gKnKMKnuMqn4gKnKMKnuMqn4gKnKMKlgiDGsEcowqe4yqfiAqcowqe4yqfiAqeuFhj1HVD0RFjlFlj1HVD0RFjlFlj1HdD0RFjlFtj1HdD0RFjlFtj1HdD0RNjlFtj1HdD0RNjlFtj1HdD0RNjlFtj1HdD0RNjlENK7lhKUeOUW2PUd0PRE2OUW2PUd0PRE2vD+0xqvuBqMkxqu0xavqBqMkxauwxavqBqMkxauwxavqBaMgxauwxavqBaMgxauwxavqBaMgxauwxavqBaMgxauwxavqBaMgxamDBPay4yTFq7DFq+oFoyDFq7DFq+oFo6GW8PUZtPxANvZK3x6jtB6Ihx6i1x6jtB6Ilx6i1x6jtB6Ilx6i1x6jtB6Ilx6i1x6jtB6Ilx6i1x6jtB6Ilx6i1x6jtB6Ilx6iFuGgIjMgxau0xavuBaMkxau0x6vqBaMkx6uwx6vqBaMkx6uwx6vqB6Mgx6uwx6vqB6Mgx6uwx6vqB6Mgx6uwx6vqB6Mgx6uwx6vqB6Mgx6uwx6vqB6Mgx6uwx6vjwqIPwtR+Irv6+UveVUnZJjGCHELahiprfpmX7sehauiyEsSshjl1BILsahqqj24VQdjXEsqsVXRii2dUQzq4KujAEtKshol0pujDEtKshqF1pujCEtath4FYlXRgi29UQ2q4qujCM3oAZzuLIwjMGYSDEeaxX93UBZWH4DIagQ3HkEAZErOhoHFGEYRGr7vv6rLhAFTB+Bkcw2ASGzwCJc2GyYRg+wyQK+sZAKjGwB3o2FcglBvrATCcgE8XAH5jpBGyiGBAEh4WQICl+OgGgKJQWphMwikKVwnQCTFGoSphOQCoKVQvTCWBFoRphOgGvKFQrTCdAFoXqhOkE1KLQK346AbcotBk+BtbB+GnjOs8Xo7nvOiiLDFDz9ybgi2KAFMy9CQCjGDAFc28Cwih0zd+bADGKAVUw9yZgjEK3wr0JJKPQnXBvAswoypVwbwLPKMpCuDcBaRQDuODuTaAaRamFe7NEhlsK9yawjaKs+HsT6EZRmuGjoS8AjqI0jvMsubxvW3DJwDiKsuXdN1COYmAZZz/9fVXf6wJVwPgNOKPoH0/VfVvBLQesoxiIBjNFgHYUA9NgpgjwjmKgGswUAeJRDFyDmSIVIviKnyJAPYqqFqYIgI+iaoQpAuyjqFphigD+KKpOmCJAQIp6JUwRgCBFXQhTBDhIUSthigAKKWrNTxGAIUVtho9e4QAPKQbqcX7Yf192901TQ2HcRan5KQJQpBjQx3llQD0XAIsUA/w4rwy+L+tzWVQMw1d3/N0JbKRoVoIDADxSNMK2FwCSolGCAwBGUgwkhHMAgEmKAYYwDgBASTHgEMYBACopBiDCOIAG98Aa/hIDLikGKMI4AAAmRdMJDgCYSdGuBAcA2KRoC8EBADkpWiU4AIAnRasFBwD8pGhLwQEAQinaSnAAQFGKtuYdAHCUojVTj16/AUopWjP3NLWVWABNKdqOnyLAU4qBmpwX2tQWfAFIpRjAyXmhTReG8RvYyXmhTReG8evMxnNDF4bx60rBGwJeKToh3gPAUgwYhfGGgFiKrhG8IVCWwmAWeqoCZym6TvCGgFrUasX2TgFqUauC94YKWIsaWQvpDRXAFrXiIwYFsEWt+IhBAWtRKz5iUIBa1IqPGBSQFrXiIwYFoEWthIhBAWhRKyFiUABaVCFEDApAiyqEiEEBaVGFEDEoQC2qECIGBahFFULEoAC1qIKPGBSgFjWiFipAVUBalCEt9O6+AtKiTAKIGpzFalVDYRg/kwOiSeCjMAvEpIHQbkhhIojily1qlguiWDekMBvEwBbaDSlMCFF8yKAwJcSwFtoNKcwKUfySU2FeiEEtjBvC1BCDWhg3hNkhikfUCkiL0jyjVkBalOYZtQLQojTPqBWAFqV5Rq0AtCgtMGoFpEVpgVErQC1KC4xaAWtRWmDUCmCL0gKjVgBblBYYtQLYokqBUSuALarkGbUC1qJKnpMpQC3KoBZdkDcyoBZlUIumMyIBtSiDWjS52lPAWpRhLZrOMgPWogxr0RVdGMbPsBZd04Vh/Axs0Q1dGMbPwBbdkoUBtqgBqBS6owvDAA5EpShXdGEYwQGpFGVBF4YRNLylpEcQgIuqTNKjJh8kQFyUIS4lPYJAXJQhLmXVO/wSG4YBNMClpAcQgIsywKWkBxCAizLApaQHEICLMsClpAcQgIsywKWiBxCAizLApaIHEIiLMsSlogcQiIsyxKWipyAQF2WIS0UPICAXZZBLRU9BYC7KMJeKHkFgLsowl4oeQYAuykCXih5BgC7KQJeKHkGgLspQl5oeQaAuylCXmh5BoC5qICtFragoUQF2UQ0f+CnALmpAK0VNT1fgLspwl7qkC8MADnClqOnRBvKiDHmp6dEG8qIMeanp0Qbyogx5qenRBvKiDHmp6dEG8qIMeWno0Qbyogx5aejRBvKiDHlp6PkK5EUZ8sIs8wG9KINemGU+oBdl0EtDewJAL8qgl4b2BMBeVCcFEMBeVCcEEIBeVCcEEEBeVCcFEEBeVCcEEABeVCcFEEBeVCcEEEBeVCcFEEBeVCcFEIBelJDjooC8aCHJRQN50UKSiwbwooUkFw3cRQtJLhq4i5aSXDSAFy0luWggL1pKctGAXrSU5KKBvWgpyUUDe9FSkosG9qKlJBcN7EULSS4a0Isu+ABCA3nRI3kh81Y0kBc9khdqhmgAL9qAFzpvRQN50SN5occa0Is26IWOeTSgFz2evaHPFwB60Qa90CmdGtCLNuiFjqY0oBdt0AsdTWlgL9qwFzqa0gBftIEvdDSlAb5oA1/oaEoDfdGGvtDRlAb6og19oaMpDfhFG/xCR1Ma8Is2+IWOpjTgF20yXehoSuP5HJPpQkdTGo/omFQXOprSeErHEBg6mtKzgzomAqSiKY1HdQyCoaMpjad1DIKhoymNB3YMgqGjKY1ndgyCoaMpjcd2DIKhoymNJ3cMgqGjKQ0IRhsEQ0dTGhCMNgiGjqY0MBhtGAwdTWmAMNpAGDqa0gBhtIEwdDSlAcJoA2HoaEoDhNEGwtDRlAYIow2EoaMpDRBGGwhDR1MaIIw2EIaOpjRAGG0gDB1NaYAwuuKXnxoYjDYMho6mNDAYbRgMHU1pYDDaMBg6mtLAYLRhMHQ0pYHBaMNg6GhKA4PRhsHQ0ZQGCKMNhKGjKQ0QRhsIQ0dTGiCMNhCGjqY0QBhtIAwdTWmAMNpAGDqa0gBhtIEwdDSlAcJoA2HoaEoDhNEGwtDRlAYIow2EoaMpDRBGGwhD387AYPSY90JFUxoQjDYIho6mNCAYPea9kEt9IDDaEBg6mtJAYLQhMHTvAMDoMe2FjKY0ABhtAAwdTWkAMNrkvdBLbAAw2uS90NEU8Bc9IBYmmgL8oht+410DfdEDYGGiKYAvekx7oaMpgC96THuhV9gAX/SY9kJHUwBf9Jj2QkdTAF/0mPZCR1MAX/SY9kJHUwBf9Jj2Qg81wBdt4AsdTQF70Ya90NEUoBc9Zr3Q0RSgF93xeRMayIs25IWJpgC9aINemGgK2Ise2QvtDIG96E4IAIG9aMNe6KweDexFj1kvZFaPBviix7QXMqtHA3zRBr7QWT0a4Is2eS/MMwfoS2nyXppzy/q+1vbELgG/lCbxpWnpwnCA3PCXpqMLwxnyAbIU7YouDMfIDYFpC+o+KoHAlIbAtIouDIfJDYFpyQVXCQSmXPGPvhIATGkATEsuzkoAMKUBMG1FF4YBNACmrcnCAGBKA2Dahi4MA2gITNvShWEADYJpSadRAoIpDYLpSEdQAoMpDYPp6NEGBlMWPP4sAcGUBsF0iloJlIBgSoNgOvrOAARTGgTT0aMNCKYcX4Jy9hrF2dHZZYHAlIbAdPRgA4EpDYE5rwXK9l51WBjGzxCYjh5sIDClITAdPdhAYErzTpQVPdhAYErzWpQVPdhAYErzZpQVPYBAYEolpC+VQGBK836UFf0CCiAwpXlFyop+BwUQmNIQGMbfAoEpDYFh/C0QmNIQGMbfAoIpDYJh/C0gmNIgGMbfAoIpDYJh/C0gmNIgGMbfAoIpNX9ipQQCUxoCw/hbfH2KITCMv8U3qBgCw/hbfImKITCMv8X3qBgCw/jb2atUSsHf4ttUDIFh/C2+UMUQGMbf4jtVSuEZiG9VMQCG8bf4YhUDYBh/CwCmNACG8bcAYEoDYGh/CwCmNACG8bcAYEoDYBh/CwCmNACG8bcAYEoDYBh/CwCmrGrB3wKAKatG8LcAYMqBsXD+FgBMWRkXShKmEgBMOQIY6kRzCfylrCUPCvylrCUPCvylrCUPCvylrCUPCvylrCUPCvylrCUPCvylrCUPCgCmrAUPCgCmrCUPCgCmbCQPCgSmbCQPCgSmbCQPCgimbCQPCgimbCQPCgimbCQPCgymbCQPChCmbAQPChCmbCQPChSmbCQPChimbCUPChimbAUPChSmbCUPChSmbCUPChSmbCUPChSmbCUPChSmbCUPChSmbCUPChimbCUPChymbI0HZd5DBgPY8Qi0BA5TDqhFrZjXlsEAduaFivTb5YDDlANqUSv6BXPAYcqBtajzrV+u7lUBFwNATDmwFlXQr5kDEFMOrEUV5IZMCSCm7IQJCBym7ISTmyVwmNJwGHJLtAQMUw2kRfV8bjalKqAw1QBaVFGSZeENcQNnUT3tnj+lKoAwlYEw5D1UAYOpVmbwaupKVMBgqpUZvPO8bu5rhS3Dy+JWZvDIR3YFDKYaOIsquu91d6+1hsLwyriBsyi1ojY2KoAw1cBZuBGB0Rswi6LfJVoBg6kGzKKUopxcBQymKhQ/1oBgqkILYw0Ipir4BLQKCExVVMJYA4GpiloYa0AwVdEIYw0IphooCzfWgGCqgbJwYw0IplJm/Oh3GQKDqZQZv5KY1hUgmMq8jZYZa0Aw1fhCWnKsgcBU5pW0zFgDganGE0jkWAOAqQyAYcYaAExlAAwz1gBgKvN2WmasAcBUBsAwYw0ApjIAhhlrADCVeU1tD+nn23QVAJjKABg6S6sCAFMNjEWpmrwaAGAqbd4p3BAbMhXwl2pALEqRG3UV8JdqQCxKdWTDMH4DYVGa2pCtgL5UA2FR/aUgysLoDYBFaUWWhcEb+IrS1M5UBeylGvCK0iV5hYG9VANeUboiG4ahG+iK0jVZFl+QOoycJrdYKyAvVWleCE0PHZCXaoArSneUAwDwUg1wRZXk0AF4qQa2okr6LgbwUg1sRZWK2FWs8J22hrvQy6EKX2tbSRMP32xbCc89fLdtJT338PW2wsteqtkLbqXnHr7jtpKee/ia20p67uGbbivpuYcvu62k5x5gl8pgF8a9AXepBrSi6JcyV8BdqgGtqJKMJyvgLtX4thdqBV4BdqkGsqJKkjRUgF2qgayokgw+K8AuVV0L7huwSzWQFcZ9A3Wp6lZw34Bdqrrj3TdQl6pZ8e4boEvVFLz7BuZSNYp334Bcqkbz7huIS9WUgvsG4lI1Fe++AbhUTc27b+AtVdMI7huAS9W0gvsG4FI1He++gbdUA1Jh3DfglqotBPcNvKVqFe++AbdUrXBipQLcUrWl4L4Bt1RtxbtvoC2VoS2M+wbaUrX8q3oqgC2VgS2M+wbYUhnYwrhvgC1VtxLcN9CWytAWxn0DbakMbWHcN9CWytAW+vXzFdCWytAWOmwB2FIZ2MK4QoAtlYEttCsE1lJ1jeAKAbZUXcu7QmAtVdfxrhBYS21YC+kKa2AttWEtpCusgbXUhrWQrrAG1FKvNO8Ka2AttWEtpCusAbXUBrWQrrAG0lIb0kK7whpIS21IC+0KayAttSEtpCusAbTUBrSQrrAG0FIb0EK7whpAS21AC+kKa+Astcl1oV1hDaClNqCFdoU1gJa6KFlXWANoqUfQQrrCGkBLXfDv6amBs9QjZyFdYQ2cpR45C+kKa+AsteEstCusgbPUhrPQrrAGzlKPnIV0hTWAltqAFvr7GjWAltqAFnpxWgNpqRWfLVgDaKlNqgu9OK2BtNTjF4DIxWkNpKU2pIX2yDWQltqQFtIj1wBaagNaaI9cA2ipR9BCeeQaOEttOAvpkWvALLVWvEcGylIbykJ7ZIAstYEstEcGyFIbyMJ4ZIAstYEstEcGyFKPkIX0yABZ6hGy0B4ZKEs9UhZ66ACz1CNmIT0yYJbaYBbaIwNlqQ1lYTwyYJbaYBbaIwNmqU2CC+ORAbPUBrMwHhkwS20wC+2RAbPUBrMwHhk4S13yOfI1YJbaYBbGIwNnqauV4JGBs9SGszAeGThLPXIW2iMDaKkNaGE8MoCWuuLXmzWAltqAFvqbRzWAltqAFpqp1wBaagNaGFcPoKWu+PSIGjhLbTgL4+rxu0L1SnD1+Gkhw1kYV49fFzKchXb1+H2hWguuHj8xZDgL7erxI0MGs9CufvaZoZp39fihIQNZaFePnxoykIV29fixIcNYGFcPkKUeIQvp6gGy1CNkIV09QJZ6hCy0qwfKUo+UhR46wCz1iFlIVw+UpTaUhXb1QFlqQ1kYVw+YpTaYhXb1QFnqRthVr4Gy1IayMK4eMEttMAvt6gGz1AazMK4eMEvd8i+XqAGz1K0WXD1gltpgFsbVA2apR8xCu3rgLPXIWWhXD5ylNlktjKsH0FIb0EK7euAsteEszE0EnKU2nKVakYWBs9SGs9CHrmvgLLXhLOTufg2YpTaYhXngAGapDWahP6BXA2epDWepyBStGjhLbTgL/Rm9GkBLPb7ahTxfWANoqQ1ooT+7VwNpqQ1pqehnGaCWxqAW+uN7DbCWxpwuot1AA7ClMbCFPifeAG1pDG2hv9fXAG1pVnzA1wBtaQxtoT/v1wBuaQxuqclMsQZwS2NwS02eMm4AtzQGt9TUw68B3NIY3EJO1gZwS2NwCyMCcEtjzhbRR+Ua4C2NyWuhvzfYAG9pDG+hPznYAG9pDG+hvzrYAHBpDHChPzzYAHBpTGYL8+1BIC6NIS70YfUGiEtjiAvzBUIgLo0hLvRgA3BpxsQWcrCBtzRKeCd5A7ylMbyF+RIi8JbG8BbmY4jAWxqT2cJ8DxGAS2OAC/NJRAAujQEuDZmR3gBwaQxwoa8y8JZG8c+/BnhLY97tQh/7bIC3NIa3MDcRAJfGABdaMQCXxgAXWjEAl0YLb5RvgLg0hrgw1xiQS2OQC/PxSUAujUEuTPdg8AxyYboHg2eQS0NFUA0Ql8YQF3ol0ABxaQxx6Y8ezHN9G0AujUEu/dEDqjCMnmEu/dEDqjAMX8lvrjfAXJpS+B5AA8ylMcylLWgVMHqGubRk4nMD0KUx0KXVdGEYP5Pc0pZ0YRhAQ11a8uUPDVCXxlCXtiYLA3VpDHVpG7owDKChLi19awB1aQx1aelbA6hLI6S3NEBdGkNdOvo2AurSGOrS0aMN1KUxr3UhDwg0AF0ak91Cn2logLo0hrp09J0B1KUx1KUriRC0AejSGOhCh10NQJfGHCoiE7sbgC6NgS4dfccBdGkMdKFDtAaoS2OoS/9akHnw1wB2aWoBmjXAXRrDXTr6Xgbw0tQ89GwAvDQGvHTt92VxX7TgX/BDzwa8dPTDD7/1bMgLfZagwc89NwL0bPCLz40Q/TX40ecBr2j65EiD330e+Ipe0Wso/PTzwFd0f3JkHgo3s68/N8KjBz8AbXJcmEcPfgPa0Bfm0QP0pWn5d4M0QF8ac6aIefQAfWlMkgvz6AH80hj8wjx6AL80Br8wjx7AL43BL8yjB/BLY/AL8+gB/NIY/MI8egC/NAa/MI8e4C+N4S/Mowf4S2P4C/PoAf7SjG93IR0B4JfG4Bfm0QP8pTH8hXn0AH9pzMtd6EcP4JfG4Bfm0QP4pTH4hXn0AH5pTJ4L/egB+tJ0wnZ7A/SlEc4UNQBfWgNf6EdPC/ClXQlZSi3Al9bAF/rR0wJ8aQe+oul3KbQAX1oDX8iDwC3Al3ZV8S6xBfjSGvhCu8QW4Etr4AvtEluAL62BL7RLbIG+tCv+i2It0Je2EN5q3QJ9aU2yC+0SW6AvraEvtEtsgb60hr7QLrEF+tIa+kK7xBboS2voC+0SW6AvraEvtEtsgb60hr7QLrEF+tIa+kK7xBboS2voC+0SW8AvreIPZbaAX1qT7kK7xBbwS2vwC+0SW8Av7fhqF8oltkBfWkNfaJfYAn1pDX2hXWIL9KU19IV0iS3Al1Y6V9QCfWnHV+tSLrEF+tKabBfGJQJ9abWQrdQCfWkNfWFcIuCXVjpW1AJ/abXxnyRXbYG/tJqH1y3gl1Yb/0kCvxbwS6vN+pPkVi3wl1YLaZ4tAJh2gCx6RfKlFghMq4XlSwsEph1zXsh93hYITDtAFr1qSRlAYNpS2LxtgcC0pbB52wKCaUsTQXS0DBjBgbLo83CThWEES/7VWC0QmLYUXo3VAoFpB8ii+zf1USpgAIXjRS0AmHZgLJo+xt0CgGkNgGGcEQCYdmAsut/+o1qG8RsYiy7oCQgAph0giy6odIEWAExbSQsYADBtJS1gAMC0lbSAAQLTVtICBghMWwkLGAAwbS0tYIDAtLW0gAEC09bSAgYQTFtLCxhAMG0tLWAAwbS1tIABBNPW0gIGEExbSwsYQDCtyX1h1iTAYFrhe9ItIJh2RDD0nQEIpjUIhlmTAIJpzWtd6DUJEJjWEBjGGQGBaU3yC73MAADTNsJrCVoAMK15qQu9zAD+0hr+wiwzgL+0jXC8rwX+0hr+wiwzgL+0rXC8rwUA0w6MRRfkZkwLAKZtjf8k38rTAoBpW2kBAwCmbYUFDPCXtpUWMMBf2lZawAB/aVtpAQP8pW2lBQzwl1biLy3wl7aTFjDAX9pOWsAAgGk7aQEDAKbtpAUMAJi2kxYwQGDaTlrAAIFphU8btQBg2k5awACBaTtpAQMEpu2EBQwQmG4lLGA6IDDdSljAdEBgupWwgOmAwHQrYQHTAYHpVvwCpgMC00kEpgMC00kEpgMC00kEpgMC00kEpgMC0wkEpgMC00kEpgMC00kEpgMC00kEpgMC00kEpgMC00kEpgMC00kEpgMC00kEpgMC00kEpgMC0xXCAqYDAtMV/AKmAwDTKWEB0wGB6ZSwgOmAwHSKX8B0AGA6JSxgOiAwneIXMB0AmE4JC5gOAEyn+AVMBwCmU8ICpgMA0ylhAdMBgemUsIDpgMB02vhPMuOqAwLT6YJfk3RAYDpt/Ce5udgBgekkAtMBgekEAtMBgekkAtMBgekkAtMBgekkAtMBgekkAtMBgekkAtMBgekkAtMBgekkAtMBgekkAtMBgekkAtMBgekkAtMBgekkAtMBgekEAtMBgekkAtMBgekkAtMBgekEAtMBgekkAtMBgekkAtMBgekkAtMBgekkAtMBgekEAtMBgekkAtMBgekkAtMBgekkAtMBgekkAtMBgekEAtMBgekkAtMBgekkAtMBgekkAtMBgekkAtMBgekkAtMBgekkAtMBgekkAtMBgekkAtMBgekkAtMBgekEAtMBgekkAtMBgekkAtMBgekEAtMBgekkAtMBgekEAtMBgekkAtMBgekEAtMBgekkAtMBgekkAtMBgekkAtMBgekGyKIVmdjdAYHpWmkBAwSmMwSGfuVkBwSmMwRGkQnYHRCYbqAsWlGJth0QmG78uBHpiwDAdAbAMO3C8A2IRSsyr7sD/tK1/LHNDvBL1wpzD+hLN75SlzxD0wF96Qx9UeQZhQ7oS9fxnxXrAL50Hf9S1g7YS9cJXxXrgL10I3uhl8DAXrrODB5JBzuAL11nRo88VdEBfOkMfFH0Gh/gSzcAFq3Igzwd0JdiZfALvW4ff7WKF+yojD9apYcJSK/dx1+t4iaGIFfv469WcXP8llyxjr9axc06hlzBj79axc2DkFzJjL9axc05XHIVP/5qFTfhBLmOH3+1ipvTuORKfvx1WtycSaLX8uOvVnETVJCr+fFXq7hZlpLr+fFXqzifXD/+aJU2uWnkY3T81SpuJii5qh9/tYqb47nUun780So9zFF6ZT/+ahU3WdrkCm781So+zFN6dT/+Oi2uTJjBTFSFY6rMg5Ja4Y8/WqXNRCXX+OOvVnFzWImZGwrHdDyuRK78xl+t4ma9Sq7nxl+t4nzEOP5olTaHPsnV/virVdwsWsnl4virVdwE/szdq3BMTfYMveYff7WKm+CDXPWPv1rFTfhBru/GX63iJgAhV/7jr1ZxE4KQa//xV6u4GVTmHtA4qJp/cdP4o1XarGSZO0bjoJrjTHQMMP5qFTcfiaCigPHHaWmDczgHVuKYmkNNZCQw/miVNln5ZCww/moVH1wvGQ2MP1qlTVDC3C8ljqg520RHBOOvVnGT20bGBOOvVvFhnpJJruOPVmnzOCXPFIy/WsX5Fe7447R0xb8gYfzRKm2O2JPn8cdfreLCOYvxV6v4sESiP388/moVH+IUTZ73H3+1ig9PU01+VWf81So+LHg1eTR//NUqPjxONfmB5fFXq/gwppo8Jjn+ahUfHqea/AD3+Ou0uDn4RB+GGX+1ig+PU01+UGn81SqupNVgjaNam1ElD+qPv1rFzaiSUcn4q1W8kiZHjaM6QB5dkvH4+KtVfBjVkgyyx1+t4vxRqPFHq3QnTL0ax7QRXoUx/moVF9L5x1+t4kqaeg2OaaOlqdfgmJpTUdzUa3BMzbkobuo1OKbmZBQ39Roc06aRpl6DY9q00tRrcFANHeKmXoOjavgQN/VaHNVWeP/9+KtVXElTr8VRNZSIm3otjur4phomgmhxVE2yTkm+S2L81SpeSxeyxVFtxRC1xVE1KTvc/d7iqArUaPxxWnpAQ5p+Ufr4q1V8cL/0VexwSAc6pEsSjI2/WsW1dH91OKSdcP50/NUqboaUZF7jr1bxWroDOhxSc4aKuwM6HNJOcr4djqgBSSX5ofXx10nxYiXN0wJJUiEdphp/tYqbQSV52firVXwYVPpdp+OvVvHB+9Iv1xt/tYoPg1rRj8gCUVKxEqhDgSSpGFiRrugHaoEkqTAkiX6Z0virVXwY1IqeeAWSpGJgRbqiHxwFkqTCkCT6LUnjr1bxYVArkpiOv1rFh0Gl35Q0/moVHwa1Yu4BREmFQUkVTcEKREnFQIs0/Vqj8Ver+DCqNTOqyJKKgRbpmhlVZEmFkO8z/jgtbVBSzdwDiJIK89IbmpiPv1rFh0GtmVsGWVIx0CJNv7ho/NUqPgwq/eqi8Ver+DCo9MuLxl+t4mZQmVsGYVIxpgCRZ/XHX63iwh7a+KtVfJiqNeOUECYVmj9JPv5olRbeoDn+ahUfBrVZ0YOKLKkwLIl+jdf4q1XcQF/ym5bjr1bxYVAbGvoWyJIK81Yc+oOS469WceFzeeOvVvFhptIvbhp/tYoPg0q/umn8dVq85E9Hjj9apQvpwiBNKgxNYuKlAmlSYTKE6Lfajb9axYeZSr93avzVKm4GlfEDiJOKARhp+r1I469W8cH9NowfQJ5UGJ7UMH4AeVJRmkFlZioCpWIEStSLFccfrdLDoLbM1EOgVJikoZZ50CBQKiphd6ZAnlQYntQyNzvypMLwJPrDy+OvVvFa7CmOqXmDTr/3Q6xPC+RJheFJLXM/Ik8qDE9qmfsReVIxECPdMvcj8qRCeoHx+KtVXHS/yJOKWnS/yJOKWnS/yJOKWnS/yJOKWnS/yJOKWnS/yJMKw5NoTlwgTypqM6iMG0CgVDSS90WeVDRmojJOA3lSYXhSyzgN5EmF+W43twpDnlQYnkR/jHv81SpeicVxTA1P6hgngzypMDyp3xOhZirypMLwpI55RiJPKgZidB4fpjgOquFJHTOxkScVJuOIiYIL5EmF4UkdvYtWIE8qpK95j79axUvJbSBPKkzqEXP/Ik4qDE4i3wg4/miVNmPKhPtIkwpDkzryNczjr1ZxM6bU+7nHH6elO+EtBOOvVvF+0MrVitaCPKkYX8TDrPKRJxWGJ3E3DPKkwuQjqWFDerWatY5DOhCjkn4h1virVbweijMPbORJxUCMSvo9NOOvVvF2KM7MPARKxYCMyhUz8xAoqQEZlfS33cdfreJmVGnfrhAoqQEZlfQ328dfreJ6KE57a4VASQ3IqCxoOqAQKKkBGZX0l9vHX63iw6gW9KgqJEpqJEp0RK6QKKnxE+C0k1FIlJTJTWKiCIVESQ3MqDwvfkkxSJTUwIzKgtGOREkZosR4JYVESRVSSKOQKKnCjCq9L6KQKKmBGXFTWyFRUoW0UFJIlNTAjEr6MPL4q1W8FVZtComSkoiSQqKkzEt86FWYQqCkhK+Djz9apZXw5FDIk5ThSfSTQyFOUkqi+QpxkjJfCWce1wpxklK18KBRiJOUiJMU4iQ1AKOyYBwe4iSl+DMt44/T0tpMU8Y9Ik5S5mAZN+8QJynzch9uZiBOUgYncS4GcZLSZpoyvhpxktKV5JEQJ6kBGJV0vvr4q1V8mKZ0Evr4q1V8GFQ6DX381So+PFIV/cBWiJPUQIxKOmd8/NUqXkj+DnmSMjyJc2DIk5TJTmKcBuIkVZbSgwBxkjI4iVmHK8RJyhw74yY24iRVCp+aG3+1igv7bgppkir5rw+MP05Lm+NnnHtEmqQMTWLcI8IkJWYnKYRJqtKSv0OapMznrzh/hzRJDbyopI8PjL9axc3uOPlJmfFXq7jZHWcuDI6ogUmcv0OYpCppK1UhTFK1mabUN5LGH63Swnt9x1+t4qLvRZakhA+Pjz9apc27KTv6uiBKUgMsKhrm5kWUpAZYVDTMVUeUpGrjeqnX1o8/WqWN523p0jii5oBay9zqSJJUs5LcEaIkNcAi1h0hSlLmZc2cO0KUpBr+uMz4o1Wa/0jd+KNVupLcEYIkNYIketYhR1KNxAYVciTVtJI7Qo6kGuHN2+Ov0+KtmaTMKgM5kjIciSFsCjmSavnjT+OPVunB8WpmTYIYSQ2gqNTMmgQxkhpIUamZNQlyJNWKjhdBkmolx4scSbWi40WOpFrR8SJIUp3keJEjqU50vMiRVCc6XuRIqpMcL2Ik1YmOFzGS6kTHixhJdaLjRYykOsnxIkVSneR4ESKpTnS8CJH0SnK8GiGSXkmOVyNE0ivJ8WqESHolOF6NDEmvBMerESHpleR4NSIkvRIcr0aCpFeS49VIkPRKcrwaCZJeSY5XI0HS5nTbio5KNBIkbb65RYcZGgGSNi8dYpyXRoCkDUCinZdGfqRNRhLjvDTyI20ykhjnpZEf6aLmnZdGfKQLKXVQIz7SRSs4L434SBf8CxjGH6elR3xEOy+N/EibhCTGeWkESNq8hohxXhoBkh4YEeO8NAIkPSAixnlp5Efa8CPGeWnkR9qkI3HOC/mRNmfbOOeF/EgrifNq5EdaCURQIz/Smv+q2vijVbqQnBfiI22ykRjnhfRIG3rEOS+kR9rQI855IT3S5mAb57yQHmlDjzQNbDTSI62FY1Aa4ZE2B9voxBKN7EibtxRxrg7ZkRa+jj7+aJWWgKBGdKRLJbk6REe61IKrQ3SkzcE2ztUhOtKlhO01oiMtvLFo/NEq3UiuDsmRNuSIc3WIjrQ52Ma5OmRHuloJrg7RkR7oEOfqEB3pAQ6xrg7RkTYH2zhXh+hIV1LKikZ0pM1nvDhXh+hIV8LpU43kSFf8l/TGH63S0ka4RnKkK2EjXCM40rW0Ea6RHOla2gjXSI50LW2EayRHujZBKQ2bNaIjPX5NnfyI1PirVdwEpTQN1IiOdC3NUiRH2pAjTe+taURH2iQhcXcjsiNt2BHj1BEd6UbIFtRIjvR4qI1x6kiO9PiFdfr2QnCkzZk2zqkjOdImB4lz6oiOdFMJTh3JkW6kw08a0ZEe4BDr1BEd6YZ/X874o1W6k5w6kiNt3jnNOXUkR9p89otz6kiO9ACHOKeO5EgbcsQ4dQRH2rx5mnPqCI50K23CaARHupU2YTSCI91KmzAayZFuhU0YjeBIt8ImjEZupDtpE0YjONKdsAmjkRvpTtqE0ciNdCdtwmgER7qTNmE0giNt8o/0/9/ZuS05juPq+l36emKHDgQpzdW+3c8wMeFwOZWZWuW0PT5Udc2KefctkgJEQPpVvdZNh9uVpCUeQODDgdtO59aCozbHH7XbbuTWgqM2V0VCEsOSozaTo3YbwbYWHbX9nty15Mjl8CO3DWydJUcuhx+57fgKZ8mRq3b4rrPgyGVw5LfzSJ0lRy7fEAYio51FR67KYYLbhR+cRUcuRx/BgfH2z8PuwAT75zuS11l05HKlajgwdk7nYtVgYCw6cvVOcQ5n0ZHL6Ii2U4mdRUcu0SE4jJYduRqXDJz/Uf017f21ndF6R991lhy5Osfdb0ciO0uOXGJDDqS0OkuOXIJDzm1HYziLjtxcvXpbfDmLjlyTd+l2FIGz6MjNd4htD6MlRy6TI5Dr6yw6cnMqG3oWO6XNTjCvs+jI5apIaJIsOnJN2Jski45cDj1Ck2TRkWv2AK+z7Mjl2CM0SRYeuflase1KRM7CI5fLIgHF0Vl65NodZu8sPHK5KhJ8FjunOfTIbdsZzsIjl6sibR9gzrIjl9lRLHi3sXgtO3JtBrz1puHgLDxyMzzatEqcZUcup7FtFyJylh25RIfgo1h25HLYETAcnWVHbq8okrPsyOXr3uGz2Al1eULD9tK17MjNRZHAxrDwyLmw27udUrd3lFp25FwWvNuqmrPsyNFOboyz7MjRXg6xs/DIJTzkQD6+s/DI5bgjkI/vLDxyCQ9NP7p98lp45HIW22ZR1vkf1V/veb+dhUcu8SEH0vedpUeOdtKdnIVHjvYqrThLj5zfm1ILj1yGR6CSgLPwyO3CI2fhkcspbLRdPsdZeOTmW+G3xZFlRy5XxEbjYtmR83vqkWVHLrMj2sZezrIjl8tiw3GxU5rwkAMVFpyFRy7sBGY7C49chkdIklp45MLuSWrpkdsLO3IWHrmQNyk4Gi08cmHPDeMsPXKZHsE3tXMa9pylztIjF3ZQg7P0yIU8pdsmtbP0yHW7Gq+lR67bcX87C49ct3uWWnrk8r3xaFwsPnIZH4FxsfTI5bAjUL/DWXrkut2z1NIj1+141pyFRy7fHw/HxU5ptyt4LT5y/Z7gtfTI5fQ1AoejxUduN33NWXzk+p2obGfpkev3oL2z9Mj1u4LX0iPX7wleC49chkfbVM1ZduT6Xblr2ZHLuWug3Iuz8IjmsKPNZyHLjqjag/Zk2RFldrQ9RWTZEVUtPhrJoiOq9nylZNERVTtGKVlyRJkcgSI4ZMkRVXv5MGTJEeW8NTiKnf3zHRpIlhxRveOFIQuOqN6LDCRLjiixITSKFhxRBkegNhBZcET1HuAlS44oJ62BYbHkiOo9LwxZdEQzOgIvaic0kyNQp4gsOaJ6jzKQJUe0l7NGFhxRszujFhxRszejFhxRBkd+W2UkC46o2Z1RC46o2ZtRC46o2Z1RC46o2ZtRy40ocyNQ7IksN6JdbkSWG1G7N6MWG1G7c5UBWWpEOWNtG6aQhUaUoRGgBmSpEeWQI1DUiiw1onbvFCVLjWivljZZakQ5Xw1UzCKLjSiHHIVNbyNZakQ5XQ3U1yKLjSinq/ntaptkuRG53T1quRElMjQZQZu+A7LciNyO+UKWG1GufgRKXpDlRpSLaTfVZll6styIEhlyIJmXLDeizI3gONo5TWjIgZJWZMERZXAUtmEwWXBEtFd5mSw5ohx1hGbJkiOiPcFrwRHNUUdgliw4opywhmbJgiPKCWtoliw5IsqTCk4BS44okyM07JYcUb4/DQ67nVTqd4fdTuoeOiKLjihX00bDbtERZXSEht2iI8pxR2jYLTqiRIdc2A4nJ8uOKMcdgcJjZNkR+TypQJxaeEQ+7BxKlh1RTlkDZcrIsiPK7AiUKSPLjijhITgwFh5R2JW+Fh5R2JW+Fh7RHjwiC48o7EpfC48o7EpfC48o7EpfC48o4SEHypqRhUe0B4/IwiPKoUcArJOFR5ST1rptrEoWHlHiQ67bdguSpUeUQ4/Qm1p6RDn2qAP6vaVHlLPWQAE3sviIMj4CBdzI4iPq9rQkS4+o2/OBk8VHlAARHnY7qQkQ4WG3k5qz1kDtObL8iOa0te2YCbL8iPo9ykuWH1GfM2K2q4yTBUjU50nddmmRBUiUw4+67RgLsgCJcvhRBxQfS5Co3zNmLEGiHH3UbyMhsgSJ+swEt8O4yBIkn8OPQIk1bxGS37uYzVuC5DNB8tuFGb1FSH4OP3Lgz1v752lO+2390VuG5Ks9c8ZbiORzNW2wwLyFSD6HH4Fict5CJJ9T18CK8RYi+WonKcZbiORz7SNQqc5biuRz7SNQqc5biuQzRXJgUi1G8vWOH9xbiuR3KZK3FMnn1DVQDN5bjORnjLS9N7zFSD6XPuq3BZ63HMlnjtRv62DeciSfc9fQwNg5bfKcbutg3nIknwOQ+m0dzFuO5BMqompbxngLknxCRQSqw3kLknxCRQSqw3kLknxiRQSqw3lLknxiRQSqw3lLknyCRQSqw3mLknyCRQSqw3mLknyCRQSqw3mLknyiRQSqw3nLknzCRQSqw3kLk3zOX9u+nM9bmOTbvY1qWZJPtIhA5TlvWZKfWdK2MuAtS/J7LMlbluRzKW0CEsmyJJ9w0fR327LXwiSfcBHV21qStzDJJ1xEoMyTtzDJu70bn7yFST7DJBBT4i1M8ntBSN7CJO/ynIKdZGGST7iIQNkmb2GST7iIQCE5b2GSdzsmqrcsybs8p2DfWZbkXZ5TsO8sS/J7QUjeoiQ/X80GlqNFST7RIrgcLUvyiRbB5WhZkie3txwtS/K0e6BaluQzS0LL0bIkn0tpg+VoUZKnPKdA2lmU5GnH0eYtSfIJFtFki2/JRkuSvM9xZdsB3d6SJJ9YEYFibN6SJJ9YEXwWO6N+L+reW5DkEyoiUOnNW5DkcxBSs33/q7cgyWeQ1GxfvewtSfI5g63ZvnrZW5LkcwZbs32XsrckyYc8p0BxsCTJhz1bxoIkH/KcAuFoQZIPeU6BmmFJkk+sCD6LndOQ5xSIUguSfEJFtH0J+Pyv6s/Tcbrta/GWI/mEiqjZNpW9BUl+rn7k/9Z2/ye6uZo+urra9VPZyU3QiEDtIW+Rkk/QiEDtIW+Rkk/QiEDtIW+Rkk/QiFogVS1S8gkaEUhR9RYp+QSNqKV5ZCZZ7LcHydIlnwASgbQpb/GSTwCJQNqUt3jJJ4BEIA/KW7zkE0AicMOjt3jJJ4BE4IZHb/GSTwCJHJgxi5d8xktgUVu65Pt2b1FbuuQTPyJwzZy3dMknfkTg5jhv6ZJP/IhAvoe3dMkngEQg2N9bvOQTQCJw45m3eMn3eVLBkrF4KVR5UreXTLB4KSSCRCDCOli+FBJBInCHWbB8KSSCRCAIOli+FBJBIhB5HCxfCokgEQjIDZYvhcrviJBg+VJIBIlAQG6wfCkkgkQgrDVYvhT2+FKwfCnUe+n/wfKlUOdJ3WavwfKlMN/Wtn1BWrB8KdR7F1YEC5hCro20HWUfLF8KdZ7TbTkQLF8K9V5saLB8KdR5TrchYLB8KSSCRH47ky9YvhQSQsLDbic1ISQCQXPBAqaQEBKB6LBgAVNodvJQg+VLIfMlEJEVLF8KmS+BuKZg+VLIfAlEBwXLl0LmSyBqJli+FJq9S0iC5Uuh6fZWu+VLodnzwwXLl0IiSGi1W7wUMl5Cq93ipdDuRfwGy5dC2+6tdguYQgZMaLVbwBTyZW3bo2jxUkgECQ665UshESQEOoLlSyHzJRDaFCxfCpkvgWClYPlSyHwJXNcXLF8KM1/ahhHB8qXgdufU8qXg2r1JsoApZMAUwPFuAVPIgCkAkWQBU8iACcQTBQuYQmJIBK7IC5YwhUyYQNhMsIQp5OraIEMzWMIUEkQicC1dsIgp0F4uarCIKWTEtA0YgiVMIRMmEHoSLGEKtJeLGixhCkR7z2LnlPKcgr1kAVPINZLgs9g5zYQJPYudUtopNhgsYAoZMIGgmWAJU9iNVQqWMAW/Y84EC5hCznLrgei1hCn4nfyZYAFTyPe0gSvlgwVMwe/54IIFTMHnXQrEnQVMISEk6oCEsYApJIRE4BbDYAFTyIAJ3EsYLGAKiSERCDwJljCFTJhA4EmwhCmEvaSoYAlTyLFKgOwGi5hCjlUC7u9gEVPIsUogviJYxBTmWCWgaVjGFPJNbduntSVMIeQ5BaLUcqWQuVLntx/FcqWQuRJ6UcuVQuZK6EUtVwqZK4GwgGC5Ushcqd8OhAqWK4XMlfptT0OwMClkmNRvexqChUkhw6QeGLQWJoW5wjYQeBYmhVxhG9zxGSxMCjlWCVSDCRYmhQyT+u1SEMHCpJB4EfVAIbQ0KWSahJaYpUkh0yQQdhAsTQq5xjbwBwRLk0KmSSBKIViaFDJNQuvd0qSQaRJa75YmhUyT0Hq3NKnLNAms987SpC7TJLDeO0uTukyTwHrvLE3qMk0C672zNKmr9mJFO0uTulxnG6z3ztKkbi6WtL3eO0uTukyTwHrvLE3qMk0C672badI///bHePkx3J/D2/+7vA1//vH3f/zjj8Ph+es2/PG3//7jMOYvpwMrdfvH3//7j7qe/vufv/0Rr73PHyY9On+YFIH8IfDfTHs8f+jnP4538+UPTc0f5lbxBoj8oed/6ud/ivWv8wea/ykWWswfpjM2f+gr/jD/cSwglT/Ucz+xVkn+4PifPH8T+Jt+/hDDwdOHGO2SP9D8xxEk5g9u/pt46KQPXTW/ctfOf9O5+dc74n/q+J/4BXtu1XOrnlv13KrviD/Mj9H387vXVcUjXtUtf+KBTVe885zxvzZePnXcS7w6IH+KdbjnT/wcqRTm/CnwjMdyZPxJvpP1EFOl5k88XSngcP7k5DtZL9FtNi+hhnsOeQCmj/PyTf8Xl/NRrdFJCZNFKk8T683MEw17OZ2Gx+PwvH4fLqpDKha9x42vr8vz8Dk+ntf7L9Xe9UsH8a6dvDrbgLt63Y8n1UcsYSh9xOSweWXOM0G8rWIMVP7gZXvK4NfLd7zw0l2N8yeZhoa3UrqeYP7U8N/FUrjzpw6/wuc4/BjSd8VbxLI0y1DGUje8UnBH9+vl11fZSXTjFvORn3Wz6XO8qolsquLnXRYuoOEPJfZa8qXcq/d+8scwraDXPf71tBy+HS+X4f7Qy6kqlwNLrSyRtjodvw5v4/v7eHqdn3pR+GIkAn6q8/n6c3g7fF3f1IO0oRzIaRJQ+6+4svVAduVAwh++jF9qHKMHuJi6LCo3G+r3DMW8hXaRKnLeBJEgIgmDx4/16z6cpm/SdI16TGNW4/KIhDfpbSyblQ+IWwz3+/Wu1kLxW7DZ7X6d9tPhfnwOevb7cvbnEQgtHNTY0Y/jWb0tlbJtRzSmtsOb3hTl09cVfO+7FmShFGSOBRmftXwQepY3Hs/j/TkJW71QinUZcWoeEl4dUZWaD2A5buVw5TOtatrd3zu8LuPp+qanIpRT4Wr+3Y5/lx+AAv8uf+Bvpt+F++/5HL5uT7N3lSbW8qqv8Wi9np968cUoN+nD8wmSYi7nTwQX5et5PTy+jze9IIKSknAcfxzH8/HbeDZbr60KedTxGdd184e+FYWmgms8d33WSqvWWkWVnF+4xQcB93Y4X0/H86BmgCp1DDVQMfhxfB7vh9ddbby+OFB6VrFqOWL5TVnLrVkdirdI5w/N3Krh5m1Wmzce4dvx7WMwZ1BdnkEtn0Fo/38bjs+vo5rtWOdi2ciszRPrr4sgns47eS15wcDfiV6WSnDNb10t749men6iw/iml3RVLmn+kUrGsZIfrp1ou/zM6ZrY/Z+7nY+/kqL3OJzsqVhTUw4qWyruN68gXWrB3CrBjJbo3IeWDXWxDztW6ntWA/vud50NWqg2xWsRW33EarlnyenZaAg8pYHV0wg054mXSXYy/k60/lhUa/4ktohjIyeVCvrdg0+a0uP0ejwmzc8sjdYVr1FXbEPVVY92btGrWWW1K5c+j0jd8NCwek78Df+aZ/vVszXlu2WRyid4DqtHemhtoFj5MWDldx3MR7pedE4tOnSiL528DefhafooVWUXfj9l9+HHaJ9DmQnh96Ohh4JKLWAxTKGCvPTzur0d7ft05bN0vx/Y1+18Pb7pPvqyD3jezH28HpPFcLre9XO05Zi0PX6Oh12uba+sl8XKF/urEanYVvJJqEErrKDFr39902p0XyqHHh7Y325fWtZ0pXY4Px8xmyFGMp5PP89nV8daS9exaiV6TFXBVfgaz3qqSqU6lQ+ZDyJooaYuzIjHe8WXXpoW/fzpeDl8Gw6fv25GtS4N1Y5PzU5wj5yjFdzoc9f34XE9W8W9LZX+iqSzgN4xdvZxP0727PfX2/Xx0r151VsvvSGDNvb2NTwexw9tHPryyAtQDS+aH1YGFZUmcQofQp3ctUjvitMhsHAOrHt2LNs7ttd7/qb3wt4aJKjir/3f5k/9g235g2y9CRBketfxAu/5m16AXQVtvdMkxT4MhmqVJKtrODSfx8vHcL5+6H1RNiaoKErjw/TtfdRaZ6wTUXSy6HsBvsdn5CdKcyZ1OASh0KHee6apEysVlVBeIHaohSAI8opRRbDvp3668hUDNIpju/m5/us6KkpFapQC7YwNd3EejvoEjQEgZR9wL019DJc33VTtIAd38dR03oaX4afuQc0Q7Y3dY7KN9AAGJQWg2D19Dqfvj5c5Pag8PVgvY+WfeHN53kqeT0APdYzT53gZHnpwnQLCUH88nY+TInrSxCVG4JcIDA7veTTwtGwH14QBE5O1qzQPWdn5Q1OJ72UWQA2fsG2Aa+Z6vr7uCEmW07cjfqf/P9p116iJh6M6/3/5o32JX0SXCR6/Qvr/ZNprqUCdWn4BqWplD1+TMq366NUO6sUHhqVB0Zt1uVGnxgWLyvz/316Xt7PpQMkCsTdC/5vh0bijU5u6E7Hb/+alNg3lYpAbzxzG7Qz2LdoZ+sT2hYYZqsXFxadjvTP9l8fz/jo9DQ8rHmo+anEHT7MGSXuJRLUOkCBPnUSHqxZgfSnA2Lnj530b64VkccV+PO/xDku9azDQFEPWd8gcWs1XU9IiL+vZ7QxwdIXV0adfzHoJZx1LHsfo0okeJSsiXTL+99ka4V9txavYQv9B/v3W/n7p/WE7x/Ex4cQ51oh/U/zO6Qpg/n3xiEKQkn+fzM/35c/zW/NydYsbVvSihh3Y6X5j/nm2alp8ZqWfP433k2GWTel/IbaPiCUmMUr0PCjeQ/si/cbH8F25QVxJ96c3EY9iL0/diDG5cMH9pXj4fny+9K906lfEg9nL0mhk5AT9td3+cv0aH5qRdlU5YTxP7LJYcGXjhR8Kyo33NPMDyMrp8GaND/A4j2/GV9i0dTlhbAYzMPO8ij3vIu/xuZl+4zauHJJNWwI+hnfESoI46j2vVQ/JUPoR4/1WglFWr5zSPGRNI1EffCAsXBCbufkHD1bx6ct1KEyjCGaYP8jkSMwJR3Q0LGMFibRhd2ynp5hM5O/aT1qGImBr7TqJaj1mSknkpcTioGFp0Eioi5BWN/+NnNBdzQEpfv7Q8ze9F+LY4Bmdnm1lu5ZHLx91gcFSxzZZxyK15296EbJVAzXf+IvWX1KXa7Thl5zFIupEr/JyOweGzyFwKA7HQXTMQ3r+pl8ISQPX4X2YLKnj49flVP5oIafg66aW0RaaTLlpHZ1S1MSG4dsVawIixKW32338kT+uOiqeqocDmDp6O2jztildaY7XY5CNWi0rKggI6sS1KqdAsxy2ok60tZwRTqT34hAQF6ejxWMkASRhcSZwL47hTbpMYf4kCgVVIgIEIRD7BlOxbv4k37XS1sm/yhlGskhEOqfCd/mTr0QfxHZVGvH36/319bzeRrWOSnMec7XYgVFpy7kOLOwCj0fHHseOpX7H/9SLX66qoNgzx0jpEGRySuz68azyeBa+3sM3ed3vRr+u+0IAOF4qEmLmxNfOJ0zHi62XM6fCzCv/4OFj+oEVPS/PrxrrnHMXl+vXeDnG0COjezel7g0XwdxL9AFMe+95H7+9nsbx7JVB2EBRUHa18ie0CnTXGF2+7g+9pmKganGgV8shLWe7OF47vHZSv4fJDhsvijS2nRpvGPN3ej2e16/VOdGoCCN+ItbjG1bjG96aLVyEb0dj1uuuRdKJC6IOhTYh+512+tdBJKX3DVOlt+H9+DpPS/V+fSmHfF8qxTIri+Eg0kselweFhVPDan/LzVvoEsiev9X50JaeURaTxNELnrVoz0/jWXfuWGB0vHh6cb5UsrKqBbYLgajY4ZMqh7K8lQhkGBXBb/Dtl93xKkqtkvGqwvLjcFLnTvf5kAK8ckjMKshmr4/TfbzZeMaYG1zIlHmQezlv3bIK2e9c4/iwBejFUDOzK5tSiycW5cQgldjeIh4t4qfwTNYlzNdDu3l5hG3R15SiL/CqCBCHxmCAq3b01OUpJR7QFkrRJZ5AO+hKZVJilSthExU0nIsAhfP19N06/kqNkfdPxzpSL4pHhdfK+IgRJYfUSym2S6U9lXGeNw1ey3NPUZM27+9U+BlJKIew9lT+nfUhZN2/XX9eoq88Bm3EnWKGolhxHcuLTmLfRZ5VFez/ftSulab0fMpTE9t+nnVCz+jNQ9w6vI1Pe/jEOnDFCbGEpxJ6wtjLSog6hVpJIFCA9ufczUqSuU557fpFCUViPfaUVNDbVYdWlvQK7l9pnRTY5/jUJLoEgFCPmgTo6Xm/XrQCTCr8wXdwJC7TarIhHE7FUgkEcNAEjb08Texy2ymFCS7qqe16RstYubph+7tuWiQlpl5u19Eg5mLt4mYP89utV9GPMIFhuHycx8endnSVj+1h+NXwY+WQKeOhRQsT1loLRUvZ9KwpiU+B5F8JLtQf1kPRqpCTGm+WP0f9sKU7T5zSnnGUhxro8OdtvBuhpfyuNXRi5aYaN5ZOIzi/fz7T+tInWhnLyXlIYk0TG87EGmvH33RwE74fx7MeozL9hM1uz7bxrAyDjuJO0se4K7VEVuk8k2EPJ/39+OP6uk+y7lAEwm24l4ruBea3Du3Ypde156Pc9IF1G7FvOpYlHTPoni3qXqh0BTf5+3h/PA9pJa+MzlatZSSocg/jlw2lqRt1EPEW8zAQIHcUhb49QtSTeOjCfD8fH5/n8ePzCZNVSpkAV/j79fxdyyCdMoI249QuZrnct5YDlcuB/dsODkU8wPQp6tUpCtd6bLg6gVU8mfiTPNTf3iej/WTEcKfEMByC+2vUIrEus8ZqMXmZjIRGFga0gj+MGkmNQtPQBxWjQmLGSk47GP+diIjRl4qZRWPK3fwcvj2itmyszWJi0YKaejDko8wf62EKW2qnwYtybnl4wHwM96+jDukpMwBT5TzU8rkRaV8qrdCbvDT9nRFValIwjmu/u/VKK3cpFLT7nU5jNio7ueRMcLfu92ljFZUH+n/V4/M4fr9qUV1yyd/2eTuevmv5WhyFf625SUMp2v9+4PVKKKQDTD8s2kaGqGe9ZLJIOyw6GIydUyKFv9J6sZ3jSWU2Z2nZ/c860x0pj+v/rKMfV8tqSySOJVTR2VqvJaUs/b6P6/m6MVPFg7jfP8h2CHrpzPz9g0gf+kEKYQaD+6ZOJJB0FaJdJhhAuLrqQQ9pmYO4IwKli8fzPhy/TEBUQWt3Vm8RpqlobbFvYQKtbq5+vmQEUCma289hmrp9sV9gXEJsP39VPnoxhTD6a2mqfrYMjYOIO7VNHvXoUDckslQjYZ7Mx9ZGKjVZmD8xtVwIxjFa4UbQqFzknd9/v4/RGtdguZC3Ow+Qg+y33r0YeRiDMXXwFdeMalhmeu78cmqoF0oZUA+DS6aml+HnYwWNyvz0v9BWD3QZSbrzzJFRnsfHczLgvtbypiTGMFjuI2YhxX7UcikddrstH5P5eBquPy+Dya8t1NOd2bpfr7rAQaESwMS/ud15OL4N929Xk85QxkbCKL25Cz1cZf7kjlh6DMfH9XI8f5v0keiJMiu9RDEwzDR2c7s+k9G4tdhVFtdf6EO/iEqOx63jKaXN1GLSdk6X2G5LpyrNo/Y3v7uRTFOsOZg1NLf+mjZMXLMWmxc97Exg7GFr0IvXxzbh3BwWUSiJFEypnXvRo1cIV+iS5oarvV6GBUI319T65/h9vBlkElT+D2o7mkCtpiT+Dh8q5+u343kVHlaXLhnHzgfHng2HJfXS32H486b7LHVy9uw6dmg4LMLvkyTJ9MSEQZaqI/tVHQeP4izRqcMfwy8jmFrFMuoKLg5u/BvSV+5WJm4tNkVihIw2WxUzxhMYGx4+x+fh59Ty+lOv2ULOB0aiAW/f6Lg3284pQOCwIRfb6ulRrgUmuw1HMjXs5Go5ramF/r6PV8wd3R/vcn+y676FBsXn8XEQuqrXQSkne4i0Ygdfxgwh5dSSqMNUoG6/l1Wuh6IyEi4Wdh/ndnw8fhqncuvVMqrRlojt14qGU4ElDcw1i60fr9vten9aD0AJvDl5cQ5Z3+pofEuZoa+zsTQrhY1h9s6nrvtBKp/UwxzhuH22alvVnUIoHGjNQYA4hzx2eB4uH0+l6zYl1iD2hxBHu0gontQ58VA/+LyaF/V/7UWNGtyqiK25zMdWu+eXDmYq1faGX2AJKPfQ8/1pkojacmYD99TxUHQcKNLzN72EjlRwGY0nHRRAKsE0LBmVUA+KPVgnulMnhHNoL+q9rDzvS0Lu/GFJHpFgTvYwSuy+xI1yEkFTSdDY/MeNiFf2yUt9NCloIiXxHDuJpJoJcRAOsW+R+DGIY5g8C27PoSSeBZx4RQMfdJJa1nGUV8ev07NnqpdvJLJToqQqGY5KvLDV4reSqNlK8iqWCPpaorOWUP5aimo08neNhMQ0SxEQqe/SigeilQJM7VLwQ+JxnaRTSMLMdEpKDRm/fJIW8mtuKVIoVe9kcqZPsiQkRlcqeUyfJLZMEoCoke+K5SQVa2R3ir+1lhjYdDf7/EmitKSoQboMeP4kPXt5yyD/GqAhO35c4jn3ORotR4VUwuNtbm0TYSalr9xc0HsxXk7n19sS/KbPlhJ41ZLnngq/ou5ykp4FtK5EvdMqQIdtbh+/Mhm4TklxSLDGy3OYDkmjDZdnnVRMbGGxgvFxWNchJFVjLkD0PjfWqd29ygOWpDFJMpLFKeJX5Bnn+PIWkn2IU8mmR/h21TpgpaIjeR6XtC5Z4RKCyRk+nFDRtCI++QOMRJgeYI6p1A9RynvZuEvW1xJ8JuuMH4Kfhs2slpvjfL7pId4ntfhloj2cSs0liUglCGSnjtZBf07lC3sYzTg1vl7O48VU5FVljSRzUeTlEufHI8E53xyG1LCwabk5TsibnuE23N+HU7QOvr5dtR6rDmHoqpz6iJarmdFSPjg+KaVEqIMEMPY2xDDyk10jZSxOC6tDTO0TSbBV45rST0qsjBKrCRJhLGF+nsODO7a5Ova49xIgWVV7zzEr9zoXrCoNPImElrSUJReF13wnRiDPNAuFlpvjXMhxkpaj8V4rgRugzf5fx9txXStBrW1oYP/X8d//1u1UKCWMuYjFM1YBf3Wpp4sC0kJ7JnYC3DRlLWEYdPh9GG4pgetsZHWZcga31Pe4+Ey4gAo0gHbtmh9Oqlp50rN0ZZuqhYIpdzWJ2stoiwWp80aSXiu4gnJXG3WQm1KPcPBRzsfLx8vQubZk6T3MfuOmxn+qrNqdxvePYTrtLi+tbqjqkQ0sJZWbP8fT97X6pZKiK/wAMRrsbZzGbVW7TskAuBtSD1wbycAOr6pAwHKVqYsUB2bCSFuVXrLUIILreunJRpQpXFDvDse0NWxxLfIqfQIG/qT2uaCbLhxRvgnxASOauWcZKWFzntX3jrX8jk2oXvT+Ch7b6Tl+jI/RqFGlYFyKcEus7GLks1jnyp9snTR88rTcHGeYn4/PBPdW9c46FXb6u/bbsYqqjDRUJc/HX9eXDmhWdomHPrLs5NKBPCrOFvrfU2EkJNrL/AL80x+GVrlSFE16Flx+qWXWkqa2MTlTH41OBWk2MFNu7ij9paKXqsoMjEefm89am34T9QDQDJl7SFqS3cuNCmyH4WRzF8/PtJ8N8WnLQ6tjTatjxtJLNnCFZcXc/3U6g9e5jk5VjG9g5FdmiZM68UufAMrk8jBV6DztDs3vSjeoYx7mGNA66BI/j19aWrTK0qhhgNPZFsQuF0lgTSgwp+lYQ+j4XO/5m3456SG+i7+2Kg1QOkOYKgWGHR0PQscx5D1/00sydwX9lrkMsxYhypiHHtvY0prhdanhN/ysLT5QdEm8ktpDRnq+Xr+/bltBncXEQOKvWtvoOXWXwW4HO7FUZeoDlIHryu8qOh2aNKnhbxxKxVksVUhbGF22ihGtVUwuH8stA8sgtNDDWKEYVTlePg57EeTlBR6c3t/C8LWv4/17cegcH1HqqaOnWLTQHRd7iRlyerkrywC6yFcBQK3Cb1JOvJa6J3UD6UfqbLy867BXlaRW74zun4fNAvaq2mcNC3nE9t8iMzEYrlw3jEhbqNXGXla8oimPBan4IPl2nnm7ZyAtBDYwb5cSkYFdA0EAXC2EV644qkXKTOtWWJUwtFau52mFW2GTLb7TRpBZXRpsjVyTBJWr2M31tqKspDCfhwJuaj5+vb7Wo1uXaqEk3Qm0d5D4cY+P5zHetzCejDmmzvJ6GVl0Jn4Naic4xVNqiH83KtSW4Xt8Vkn5kiAJqQGm67BpZh19pGoeBKhCI9NO+d2gEsatbYXBttUwVQ5+WKpkK6CUgnoKqJLHbHhTEVOlt0BVfO2WUHYHpCRfVz1aSmXFCb5f9o6PspSmVI8hVl+kTgwxeCcWG56dSJ53v5dYg0YoeSPiQkI16lY4dlELixaHlaA/mE0U3+Jg8kibUkIQa6PEmN6zNemZHS+XcTUilxqpuiB0qW4FNrfQHEkP9LgNp/FdZ/g6RQpds6SK7s2QzlIsDQkH4w5ju7ulAqTKAct1OnWA8Wur65RUzbFaxkfs9Vrqa0zjKAa/eDvlbru6FaaLq7B+XS/Pz/Ov4kIKHTlQKqdyMx4s5pujY6Yj/v61UpPbUsXu2FfQ8XLtFycyJMNfr/NzTLGK2opX9w3US1o0zDK0RnBdq1R5cZUyKmH3fMPntJQIbKUmidQJksIjknG/BA7Uizu5XhDNUmhDdqKUvRKX/rSYJLIIKmyX44/xYzX0pMr3eqgWX4afemRJjYuH8x4Dr3U7derDGLbL8KcxRlShARg5ermm7NDDfXh7ra9nK60RTL3nAku/syzKkCwJPWihpVSUbTo8Xl+T8m0iWkuUz9Cw44oKvdR7reAtE5fJGjI5sdQq7wikb5fHuw45LLV5qTUklWQ6XrYdW1Q9K6y9BGtU0D93/fY8TkeGvQax9O5Bf/f1dHrd1pZ2mR7YcIREC6316/u7vYSmRCmBj8DABl/H/u+Oz8mex6BfitNBwnXVKXnKpVrDNJXr+c3uOqXJwLW2oW47Vb3JQ3Poep9+0waPljmAkyyCc2N8RYqKLZem8moS1RrXFL0+P80ItEq5WkIqId2MdRqP5zMsJ14udBg4l1IvLJZWVehraKzbhMym9Hbimhex2eF5/DA3L5VRrWwS9tDraYPQ6zJQUCzEpVCuVKGdPqHFdTvepw6eJrC+DOvfa6hfR5UMqmFU8tRywy3QqsCEJZ5wudkVxrff4lV7p/EWbxxZSfZWXfGxRL446N+NIbtqw6hHa2AcZ2y3LglRyjLiCCCppyQxXJ6VOA9DF2L/hqwpMVCLbih162qBHbVck1xLBMtkMIjmKBpmC92Fk6DWhQYqJYSg4n0bjt/hhi2BM0Spt+HyZuv+KSlWw4q/c9PfHP4q9YpVPojNb8M9pbLo3ehUuG8LEx02XSsqZE58eFKwd9L2xdwTHyK+wS9VbTbXJSh7BT9caglC8srtLU6BdLk66CyWA1uPdunQdaxpiE7sOOAosPEYWMHuOGqsYxOl54XeL8X2INBIj2PrNNXlbVdiRjpWOhz0V2/ew9eUcSjEDhQJ9fJss3j213qJM4fgLidtWf960JEbe42tl6dVHvEaKmfc9hBTJbeprLqEo4YKk+7JXn6l1j5MhpA+kk6jn0JJQWi9lJmfur1CfLvrx2Keupzwhiv+tNBwi308nr/MjaNlyEnDQK3FAvWsY07a0rfUQ1J6+2IAHAMDdU6Fcq0vF1zyoSAyRwoxc0Ruw9Zqw/Cp5eb4+rfbdVU7TNn2+ELCqaUO/1eX1Xm8eqZ2p+vlfdSqsGIwHiqMN5vYoUKEsIi4PkZr2ziFL1toLdjc6KZ0/y9R6JVERpOgZQ+TxVN4zVogO1UYh8NbRTfw0EaN/f0cn5/zBSeISiirFYL3m05MLKfGsZh3vMOWat1Lcf5afND1AkwlslUSnWpxydVSuLZuJZKmFaDdSm5DC2P5brdVRmWpkzk+sRz36qDVfrsPj+FurrZUJmKDJUK8FXP4aUMlmjIpPbCKF9hm6zgAumPg0fPz9gKwKhj/kH70asLf1LlE0M/HbVO56fj3hkeWEZnMyFoYPMO9cWfqiVQkG0FGdbtf38dzTGmN91Vp4aiihxbljIUjLxipNsy6UcOMtmHU3XLznSU1P8jqnKtL5C2egBaGP0wdfUxrSo9sWdXCcfU5x54GfHnq7fUtyuyVIkIqoVR8ALWH2vO/Xsfz+G7jRlXQcA0dFP96Da/hYE/hVs1xDS07m1HdqlCdWjKYmmZxuAiDl7sFJO69buWWgVbCqdvlwiPJ1CGYtZJysj/Hj8/hYUySMtiErcUWFvSZ+1kF0dalgdXwC7bQlF5H2jdOlUri6144atwz9/GsI3iOee/4jzu+tKVf8sbEnimSEKDWlJ9qFbjdlmdix5Zuzxew9MsNyVAvmHtexYDV5cpwLCelQja+2HejSIJTNQnlKqlasuPrOYsVd2d4RK9UCLRXYtuzUSOcSj0myNli2+hRN4qmijSvYT5pLghudFR1hT3+3Z96G5TLlxfWcsOwhz6kXG1iSSc3DxPKh4GLI/dR4CUTk6JGA9KL+/A+ieHPwwqRK8sHP0Rqvebr6oYb2PicXB+ryhltWfyix0tonX2uAj1qEXaNeLfECqoFpdQScjyJzEW9EuUL+l7z7z8OP1OhoVSyOkFkXcejUtUEeYvyAengSWt733KMloFDbMa3MPYt9jgOG3cYUqfyGaHHK3bwC1zqUoZK4gf418scJSW3hxFPsd2qOnGZJd0xzOjYJdov1etheVbu9rDyfqtba2tYEmL7QmoVCy8xBhUMkL1//np+fkEGWSrJkIbcrxr8kwqDwZcU2HJNrbryt4YxyrHdykehALtEEC1JXcvlXw00Zu+v8xAxqO67KWujeLmYbrH8G3xG5Q5NfUVlImN9I1ZCtPlj6k5VmEFjys6UUJEJhGN11MG4nenkNxeoKhaLaXxqaJ6hdJDhZqa+rMovrpaRl/xQiVOdROtCZkTflMIJrSSBtEu0IDzccnz+HGoxmjpF6gIpiBNSF1andqqAvIPZ4+t6TK2SkbVo3jXUenMfh2/DJtYoa3o1rK+2sAbk3Fkubb3urXQtNswXWlgOcu5NePqqu5IbMsRpYRjc3N2skWx0V2oDbH62sBzcYzjeT5+LT0TrlyrvbreHXBVG24P6LsL99racmvLfIu0yN41VuVTT0uOPRNVjON11pIDKqsHNLm9FZcyyfVnuChoF3H6+ZG+rm/Ko3XsM40BXF6sEyNZyy1UgqPIJQc6TqJS+06tYIHmpwSyXaXGtbAFSOVEez9anFq/lumSO4vjsc7Asz+PzOKkgt/skrydF3tSXVdLXYVGXLludzInVLdCq7iC8LmNq/7W6t7Mp3yiwtRo4EqxjG7njMiU9f9NL4ZIKBhzKT65ybsqSpCxlAzuPOw5Y67j2fc/f9HI1RwUx2uOs6z84dTtWg9f2+WWiVNS1cUsBniXTER8LXzFEZCM1VxUcgD6G3Hw7NVfhWGj/Fj2sw5B71QUcj+tZV0tQIXoNjIV6XO8mFUw5t4oyH5L/jwciFSrVQFlVWeX8BnZHdGx8dbyseibsvRznFdRMH5OJvfILKaczHvHbEAERuEqitJywkE9dXK6bF3uUgDHAeyGltqgeM1XWlnc5w8GODeeOlbaecVNf3BQmULFePjn5JOU7YOKFvay69K5wl473lsNnr5XJpbODI5cdGw0Oi/bnMQZQQpOsPMzxOz2P963L58pcocDkIXBOSWBXT2APV4AZdfEXnhs3RKmSQkzRp9GHynbqZ31HlHJc4wMstt64JUplFstqaOC1AqmfGAxjnYutKp9RweiQ1MH6xij1FhAxbCfo1GVlx4aHUrIbWvaptGwYOXFKywXX08uL2StEvhFvjFzeOdlKgqEkAhffWbk88GHLxK1VZggfn5hlrXFqU8p0qScm1wpL5TBilEUstD2/iNT78mxDBMZqgUFNx/10HALWs5zuJSisgtdwJJ/CqmR0WyvFl8NwOIK+l7pmFTaFX9++xudzE+yXdVSYJ/Ycztgvd2zCyNep89WFcqTOXg8TlefCOod1hnapzEjROsltaWHt7MfP4W11sinVHQZRPX49bLyKSn2p4HUAz6MWi2U1VnypzDpItSx8wHpYzxlN/ZL/1SwBCPiRzHUotTIFmCa3rFCEpU8olJ7DUd+/pMBcA/3t6Z6x6RjSedYqIrmS5KlKNkqA4nW13ury9grJhWo5ydixSAssqgJ/07GQ69jr2LOa0IsfshI2J5yrdkWkzvJpqRMo3y1/B2F2ep/D6zKebG5bGcEXuLZLx46tjj3jHTtsepZAvZTNrKCtOv+suai5tNMkHaqFZkhyl6xSF5WvGje95Z2/QfFVvFCAXqwVu3e9wqGQaaaGqwI46vJU6KtJ1SzU2yp7h404iSRt5Vhcyt5JVfFaDOxp5y17kP81wBj1XFPj09z31JQF+CQRyvHvOpjFmbvbqNpbq9uA+HyUWwx5/xD/BHEorewGzxYJrswLCoQ0ZcaH47XteFU6icNeCsjWYrBLre26gUduDKqydd1K16tw4BYCC7v0mzIsKUgZ26WCkNz3NhmXkosowl2CcGoJ76tbcUCIlla3opNJZO/0aYmUEY+3tHASZeVExjq5btgtt1PL8zmpL0tS306K5U6fJKVO6jvScnPdcrO1zIMk40+yHc3I6zInoZqw6kaFwIu/00MtMFeYOuQbgnTkVCmcJNCiJiif52JVq8pbQenyy73nEg0h/oRaYhHk2u1aEhGmk2FJUUcCKz/Dxtsoli9lEGuCwZJW4DfavTa3Z6tZInQaKeLBa1qWB7FuTIzrPVuonmO2ZMqChAI6KUnqFqtbYrwI8jbLshWwYZ+pSAY2leWWVZG8lZMtKa/dyGZqlvB/IQGtFJGQQajFXqrlModaJFTtwrLB5B0lA9XJApGr26dPsiBlqZA8lZSonsZniQBDin8cqcPx9DlOp2z8B21WlftA0p1bWMM4dTZ9eTsPMfI02hJHrfaWV7tA3jZ3Yw58pyotEDwoUutcEUbrC8qVKQPc7T+G8cyWHhWReMRLSmQb8exKJLDn+fFsjXkWp4GP8iBlSHkDdDyDHe+Nnk/TXgRctWSwLpbekjq5pETLtlqCyZeiw7VfTh9Z4CK1JfOzlsifWkqS1qJG163kyywqDfWLxBc5LypNgCmKafzXPlpVPK2GTq3Uen2rn1L+pLjVtAqgLNyIY61VLZ9l78tGFgHO48I/JHSkYXkmoqNd9vxSCRpab/xYuUCUdhmqfQLp9DoOSY3NUlWfFoErxj7JWUZLUqDoKsI9anFl1B1UtNODjJNeqfk2kQrJgmGoqXmmBMeP46gj/NX1DQR5c9FH8jnrPpQyAIl50cfH+G66UKUaYVzL62W9gopLCDELxR3sqK8f8W6xhwmkLKQ5Yg4/4mSY7P4yp4UY4opyJ8cMsSpMvPc9MwPPK8d3y7KSc0pUW7lRfFpWSL7PD2hC3VUxCShSfoxvgy4kVeasBI7Y6fio7RhLd6xz9yzie9HCK9Gk8Z3KURBpbqSTfODLJhfIao+TKqLu4YJK8m8rAk55cmBmQLy6eTQFmss7PiQ7soXUfvP2Z1LBUwFGnP0crAPHqQtrcOy0jUggrcLC+/G27hcjVXbKw9jSn6MpE6gC2qH4i0k7c/TH8OczBgcYuKsqziHgtdFLzHNfE8Qy1hTmsBS92WoO5UASrJyrOzh9DqfvqTTHn6d1Kbfyol0ollJqExdDnP7hPg6PbUmgUkx2FkhMlUo3lWpOo0oZwVW9tF5FEtSmlMRf7CLfD7b4ObbdHOVxBkHN77qeTyndc7mtYQB00bONNWvKXeJg+kDs4W14Hkd9Jy6pWPiwuwzep8YJGKufLxPnCAZbqfbF1c0bG68p96+H+U6qx80FXkpMXI0v9rN1R5yKidp7rfXFUaXjFh6nselWNXrlSETnS2yc60un+qRRBdqw25T+BKNOYl+r4peuUSEaMJ82N94afHVf9N5vF6kF63dQx7WD523shz27a8euun0F6ihzH3tioAzYbqFCGjtK1PR5vSWIvsHQlYoNK6bEnkq6ZCSu0rFhlOKqEyvOdadKY4bhRalTew9smUDtlmSw3cOquBRW6xvqjkas5uguQN1fFSyPPZTc2XpHl35eyC1irfbXt1W9b6VzSe3AWooeToflctfV5nv+829/3MbbkO6x+fs//vmf//x/AzGdsGwMBgA="; \ No newline at end of file +window.searchData = "data:application/octet-stream;base64,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"; \ No newline at end of file diff --git a/docs/classes/API.html b/docs/classes/API.html index a17c1ce..6abde24 100644 --- a/docs/classes/API.html +++ b/docs/classes/API.html @@ -1,416 +1,285 @@ -API | osu-api-v2-js

You can create an API instance using its createAsync function! API.createAsync

-

Constructors

constructor +API | osu-api-v2-js

You can create an API instance without directly providing an access_token by using the API's createAsync function! API.createAsync

+

Constructors

Properties

Methods

Methods

Constructors

  • Use the API's createAsync instead of the default constructor if you don't have at least an access_token! -createAsync should always be your way of creating API instances!!

    -

    Parameters

    • Optional client: {
          id: number;
          secret: string;
      }
      • id: number
      • secret: string
    • Optional token_type: string
    • Optional expires: Date
    • Optional access_token: string
    • Optional scopes: Scope[]
    • Optional refresh_token: string
    • Optional user: number
    • verbose: "all" | "none" | "errors" = "all"
    • server: string = "https://osu.ppy.sh"

    Returns API

Properties

access_token: string
client: {
    id: number;
    secret: string;
}

Type declaration

  • id: number
  • secret: string
expires: Date
refresh_token?: string

Valid for an unknown amount of time, allows you to get a new token without going through the Authorization Code Grant! +

Beatmap Functions

Beatmapset Functions

Changelog Functions

Chat Functions

Comment Functions

Event Functions

Forum Functions

Home Functions

Multiplayer Functions

NewsPost Functions

Other Functions

Ranking Functions

User Functions

WikiPage Functions

Constructors

  • Please use the API's createAsync method instead of the default constructor if you don't have at least an access_token! +An API object without an access_token is pretty much useless!

    +

    Parameters

    • __namedParameters: {
          access_token?: string;
          client?: {
              id: number;
              secret: string;
          };
          expires?: Date;
          refresh_on_401?: boolean;
          refresh_on_expires?: boolean;
          refresh_token?: string;
          scopes?: Scope[];
          server?: string;
          token_type?: string;
          user?: number;
          verbose?: "all" | "none" | "errors";
      }
      • Optional access_token?: string

        The token used in basically all requests!

        +
      • Optional client?: {
            id: number;
            secret: string;
        }

        The details of your application client, necessary for using the refresh_token

        +
        • id: number
        • secret: string
      • Optional expires?: Date

        The expiration date of your access_token (doesn't affect application behaviour)

        +
      • Optional refresh_on_401?: boolean

        If a 401 error is gotten from the server while it has a refresh token, should it use it and try the request again? (defaults to true)

        +
      • Optional refresh_on_expires?: boolean

        Should the application schedule a task to silently refresh the token right before the access_token expires? (defaults to true)

        +
      • Optional refresh_token?: string

        The token used to update your access_token and your refresh_token

        +
      • Optional scopes?: Scope[]

        The scopes your application have, assuming it acts as a user (doesn't affect application behaviour)

        +
      • Optional server?: string

        The URL of the API server the package contacts

        +
      • Optional token_type?: string

        Should always be "Bearer"

        +
      • Optional user?: number

        The id of the user this application acts as, if any (doesn't affect application behaviour)

        +
      • Optional verbose?: "all" | "none" | "errors"

        How much stuff should the package log

        +

    Returns API

Properties

access_token: string
client: {
    id: number;
    secret: string;
}

Type declaration

  • id: number
  • secret: string
expires: Date

The expiration date of your access_token

+
refresh_on_401: boolean

If true, upon failing a request due to a 401, it will use the refresh_token and retry the request

+
refresh_on_expires: boolean

If true, the application will silently use the refresh_token right before the access_token expires, as determined by expires

+
refresh_token?: string

Valid for an unknown amount of time, allows you to get a new token without going through the Authorization Code Grant! Use the API's refreshToken function to do that

-
scopes: Scope[]
server: string

(default https://osu.ppy.sh) The base url of the server where the requests should land

+
scopes?: Scope[]

The scopes your application have, assuming it acts as a user

+
server: string

The base url of the server where the requests should land (defaults to https://osu.ppy.sh)

Remarks

For tokens, requests will be sent to the oauth/token route, other requests will be sent to the api/v2 route

-
token_type: string

Should always be "Bearer"

-
user?: number

The osu! user id of the user who went through the Authorization Code Grant

-
verbose: "all" | "none" | "errors"

(default none) Which events should be logged

-

Methods

  • Create a new announcement!

    -

    Parameters

    • channel: {
          description: string;
          name: string;
      }

      Details of the channel you're creating

      -
      • description: string
      • name: string
    • user_targets: (User | {
          id: number;
      })[]

      The people that will receive your message

      -
    • message: string

      The message to send with the announcement

      -

    Returns Promise<Channel>

    The newly created channel!

    -

    Scope

    "chat.write_manage"

    -

    Remarks

    From my understanding, this WILL 403 unless the user is kinda special

    -
  • Create/Open/Join a private messages chat channel!

    -

    Parameters

    • user_target: User | {
          id: number;
      }

      The other user able to read and send messages in this channel

      -

    Returns Promise<Channel>

    The newly created channel!

    -
  • Create a new ForumTopic in the forum of your choice!

    -

    Parameters

    • forum_id: number

      The id of the forum you're creating your topic in

      -
    • title: string

      The topic's title

      -
    • text: string

      The first post's content/message

      -
    • Optional poll: PollConfig

      If you want to make a poll, specify the parameters of that poll!

      -

    Returns Promise<{
        post: Forum.Post;
        topic: Topic;
    }>

    An object with the topic you've made, and its first initial post (which uses your text)

    -

    Scope

    "forum.write"

    -

    Remarks

    Some users may not be allowed to do that, such as newly registered users, so this can 403 even with the right scopes

    -
  • Edit a ForumPost! Note that it can be the initial one of a ForumTopic!

    -

    Parameters

    • post: Forum.Post | {
          id: number;
      }

      An object with the id of the post in question

      -
    • new_text: string

      The new content of the post (replaces the old content)

      -

    Returns Promise<Forum.Post>

    The edited ForumPost

    -
  • Edit the title of a ForumTopic!

    -

    Parameters

    • topic: Topic | {
          id: number;
      }

      An object with the id of the topic in question

      -
    • new_title: string

      The new title of the topic

      -

    Returns Promise<Topic>

    The edited ForumTopic

    -

    Scope

    "forum.write"

    -

    Remarks

    Use editForumPost if you wanna edit the post at the top of the topic

    -
  • Returns WebSocket

  • Get various data about the difficulty of a beatmap!

    -

    Parameters

    • beatmap: Beatmap | {
          id: number;
      }

      The Beatmap in question

      -
    • Optional mods: number | string[] | Mod[]

      (defaults to No Mod) (will ignore mod settings) Can be a bitset of mods, an array of mod acronyms ("DT" for DoubleTime), or an array of Mods

      -
    • Optional ruleset: Rulesets

      (defaults to the ruleset the beatmap was intended for) Useful to specify if the beatmap is a convert

      -

    Returns Promise<DifficultyAttributes | Beatmap.DifficultyAttributes.Any>

    Remarks

    You may want to use getBeatmapDifficultyAttributesOsu (or Taiko or whatever) instead for better type safety

    -
  • Get various data about the difficulty of a ctb beatmap!

    -

    Parameters

    • beatmap: Beatmap | {
          id: number;
      }

      The Beatmap in question

      -
    • Optional mods: number | string[] | Mod[]

      (defaults to No Mod) (will ignore mod settings) Can be a bitset of mods, an array of mod acronyms ("DT" for DoubleTime), or an array of Mods

      -

    Returns Promise<Fruits>

  • Get various data about the difficulty of a mania beatmap!

    -

    Parameters

    • beatmap: Beatmap | {
          id: number;
      }

      The Beatmap in question

      -
    • Optional mods: number | string[] | Mod[]

      (defaults to No Mod) (will ignore mod settings) Can be a bitset of mods, an array of mod acronyms ("DT" for DoubleTime), or an array of Mods

      -

    Returns Promise<Mania>

  • Get various data about the difficulty of an osu! beatmap!

    -

    Parameters

    • beatmap: Beatmap | {
          id: number;
      }

      The Beatmap in question

      -
    • Optional mods: number | string[] | Mod[]

      (defaults to No Mod) (will ignore mod settings) Can be a bitset of mods, an array of mod acronyms ("DT" for DoubleTime), or an array of Mods

      -

    Returns Promise<Osu>

  • Get various data about the difficulty of a taiko beatmap!

    -

    Parameters

    • beatmap: Beatmap | {
          id: number;
      }

      The Beatmap in question

      -
    • Optional mods: number | string[] | Mod[]

      (defaults to No Mod) (will ignore mod settings) Can be a bitset of mods, an array of mod acronyms ("DT" for DoubleTime), or an array of Mods

      -

    Returns Promise<Taiko>

  • Get data about a BeatmapPack using its tag!

    -

    Parameters

    • pack: Pack | {
          tag: string;
      }

      An object with the tag of the beatmappack you're trying to get

      -

    Returns Promise<Pack>

    Remarks

    Currently in https://osu.ppy.sh/beatmaps/packs, when hovering a pack, its link with its tag should show up on your browser's bottom left

    -
  • Get an Array of up to 100 BeatmapPacks of a specific type!

    -

    Parameters

    • type: "standard" | "loved" | "artist" | "featured" | "tournament" | "chart" | "theme" = "standard"

      The type of the BeatmapPacks, defaults to "standard"

      -

    Returns Promise<Pack[]>

  • Get the top scores of a beatmap!

    -

    Parameters

    • beatmap: Beatmap | {
          id: number;
      }

      The Beatmap in question

      -
    • include_lazer_scores: boolean = true

      Whether or not lazer scores should be included, defaults to true

      -
    • Optional ruleset: Rulesets

      The Ruleset used to make the scores, useful if they were made on a convert

      -
    • Optional mods: string[]

      (2023-11-16) Currently doesn't do anything

      -
    • Optional type: string

      (2023-11-16) Currently doesn't do anything

      -

    Returns Promise<Score.WithUser[]>

  • Get the top scores of a beatmap, in the "solo score" format lazer brought with it! -More info on GitHub if needed https://github.com/ppy/osu-infrastructure/blob/master/score-submission.md

    -

    Parameters

    • beatmap: Beatmap | {
          id: number;
      }

      The Beatmap in question

      -
    • Optional ruleset: Rulesets

      The Ruleset used to make the scores, useful if they were made on a convert

      -
    • Optional mods: string[]

      (2023-11-16) Currently doesn't do anything

      -
    • Optional type: string

      (2023-11-16) Currently doesn't do anything

      -

    Returns Promise<Solo[]>

  • Get the score on a beatmap made by a specific user (with specific mods and on a specific ruleset if needed)

    -

    Parameters

    • beatmap: Beatmap | {
          id: number;
      }

      The Beatmap the score was made on

      -
    • user: User | {
          id: number;
      }

      The User who made the score

      -
    • Optional mods: string[]

      The Mods used to make the score, defaults to any, you can use ["NM"] to filter out scores with mods

      -
    • Optional ruleset: Rulesets

      The Ruleset used to make the score, useful if it was made on a convert

      -

    Returns Promise<BeatmapUserScore>

    An Object with the position of the score according to the specified Mods and Ruleset, and with the score itself

    -
  • Get the score on a beatmap made by a specific user (with the possibility to specify if the scores are on a convert)

    -

    Parameters

    • beatmap: Beatmap | {
          id: number;
      }

      The Beatmap the scores were made on

      -
    • user: User | {
          id: number;
      }

      The User who made the scores

      -
    • Optional ruleset: Rulesets

      The Ruleset used to make the scores, defaults to the Ruleset the Beatmap was made for

      -

    Returns Promise<Legacy[]>

  • Get extensive beatmap data for up to 50 beatmaps at once!

    -

    Parameters

    • beatmaps: (Beatmap | {
          id: number;
      })[]

      An array of beatmaps or of objects that have the id of the beatmaps you're trying to get

      -

    Returns Promise<WithFailtimesMaxcombo[]>

  • Get extensive beatmapset data about whichever beatmapset you want!

    -

    Parameters

    • beatmapset: Beatmapset | {
          id: number;
      }

      An object with the id of the beatmapset you're trying to get

      -

    Returns Promise<Plus>

  • Get complex data about the posts of a beatmapset's discussion or of a user!

    -

    Parameters

    • Optional from: {
          discussion?: Discussion | {
              id: number;
          };
          user?: User | {
              id: number;
          };
      }

      From where/who are the posts coming from? A specific discussion, a specific user?

      -
      • Optional discussion?: Discussion | {
            id: number;
        }
      • Optional user?: User | {
            id: number;
        }
    • Optional types: ("first" | "reply" | "system")[]

      What kind of posts?

      -
    • Optional cursor_stuff: {
          cursor_string?: string;
          limit?: number;
          page?: number;
      }

      How many results maximum to get, which page of those results, a cursor_string if you have that...

      -
      • Optional cursor_string?: string
      • Optional limit?: number
      • Optional page?: number
    • sort: "id_desc" | "id_asc" = "id_desc"

      (defaults to "id_desc") "id_asc" to have the oldest recent post first, "id_desc" to have the newest instead

      -

    Returns Promise<{
        beatmapsets: WithHype[];
        cursor_string: string;
        posts: Beatmapset.Discussion.Post[];
        users: User[];
    }>

    Relevant posts and info about them

    -

    Remarks

    (2024-03-11) For months now, the API's documentation says the response is likely to change, so beware

    -
  • Get complex data about the votes of a beatmapset's discussions or/and received/given by a specific user!

    -

    Parameters

    • Optional from: {
          discussion?: Discussion | {
              id: number;
          };
          vote_giver?: User | {
              id: number;
          };
          vote_receiver?: User | {
              id: number;
          };
      }

      The discussion with the votes, the user who voted, the user who's gotten the votes...

      -
      • Optional discussion?: Discussion | {
            id: number;
        }
      • Optional vote_giver?: User | {
            id: number;
        }
      • Optional vote_receiver?: User | {
            id: number;
        }
    • Optional score: 1 | -1

      An upvote (1) or a downvote (-1)

      -
    • Optional cursor_stuff: {
          cursor_string?: string;
          limit?: number;
          page?: number;
      }

      How many results maximum to get, which page of those results, a cursor_string if you have that...

      -
      • Optional cursor_string?: string
      • Optional limit?: number
      • Optional page?: number
    • sort: "id_desc" | "id_asc" = "id_desc"

      (defaults to "id_desc") "id_asc" to have the oldest recent vote first, "id_desc" to have the newest instead

      -

    Returns Promise<{
        cursor_string: string;
        discussions: Discussion[];
        users: WithGroups[];
        votes: Vote[];
    }>

    Relevant votes and info about them

    -

    Remarks

    (2024-03-11) For months now, the API's documentation says the response is likely to change, so beware

    -
  • Get complex data about the discussion page of any beatmapet that you want!

    -

    Parameters

    • Optional from: {
          beatmapset?: Beatmapset | {
              id: number;
          };
          status?: "all" | "ranked" | "qualified" | "disqualified" | "never_qualified";
          user?: User | {
              id: number;
          };
      }

      From where/who are the discussions coming from? Maybe only qualified sets?

      -
      • Optional beatmapset?: Beatmapset | {
            id: number;
        }
      • Optional status?: "all" | "ranked" | "qualified" | "disqualified" | "never_qualified"
      • Optional user?: User | {
            id: number;
        }
    • Optional filter: {
          only_unresolved?: boolean;
          types?: ("suggestion" | "problem" | "mapper_note" | "praise" | "hype" | "review")[];
      }

      Should those discussions only be unresolved problems, for example?

      -
      • Optional only_unresolved?: boolean
      • Optional types?: ("suggestion" | "problem" | "mapper_note" | "praise" | "hype" | "review")[]
    • Optional cursor_stuff: {
          cursor_string?: string;
          limit?: number;
          page?: number;
      }

      How many results maximum to get, which page of those results, a cursor_string if you have that...

      -
      • Optional cursor_string?: string
      • Optional limit?: number
      • Optional page?: number
    • sort: "id_desc" | "id_asc" = "id_desc"

      (defaults to "id_desc") "id_asc" to have the oldest recent discussion first, "id_desc" to have the newest instead

      -

    Returns Promise<{
        beatmaps: Beatmap.Extended[];
        beatmapsets: Beatmapset.Extended[];
        cursor_string: string;
        discussions: WithStartingpost[];
        included_discussions: WithStartingpost[];
        reviews_config: {
            max_blocks: number;
        };
        users: WithGroups[];
    }>

    Relevant discussions and info about them

    -

    Remarks

    (2024-03-11) For months now, the API's documentation says the response is likely to change, so beware

    -
  • Get complex data about the events of a beatmapset and the users involved with them!

    -

    Parameters

    • Optional from: {
          beatmapset?: Beatmapset | {
              id: number;
          };
          max_date?: Date;
          min_date?: Date;
          user?: User | {
              id: number;
          };
      }

      Which beatmapset, or caused by which user? When?

      -
      • Optional beatmapset?: Beatmapset | {
            id: number;
        }
      • Optional max_date?: Date
      • Optional min_date?: Date
      • Optional user?: User | {
            id: number;
        }
    • Optional types: ("nominate" | "love" | "remove_from_loved" | "qualify" | "disqualify" | "approve" | "rank" | "kudosu_allow" | "kudosu_denied" | "kudosu_gain" | "kudosu_lost" | "kudosu_recalculate" | "issue_resolve" | "issue_reopen" | "discussion_lock" | "disccusion_unlock" | "discussion_delete" | "discussion_restore" | "discussion_post_delete" | "discussion_post_restore" | "nomination_reset" | "nomination_reset_received" | "genre_edit" | "language_edit" | "nsfw_toggle" | "offset_edit" | "tags_edit" | "beatmap_owner_change")[]

      What kinds of events?

      -
    • Optional cursor_stuff: {
          cursor_string?: string;
          limit?: number;
          page?: number;
      }

      How many results maximum to get, which page of those results, a cursor_string if you have that...

      -
      • Optional cursor_string?: string
      • Optional limit?: number
      • Optional page?: number
    • sort: "id_desc" | "id_asc" = "id_desc"

      (defaults to "id_desc") "id_asc" to have the oldest recent event first, "id_desc" to have the newest instead

      -

    Returns Promise<{
        events: Beatmapset.Event[];
        users: WithGroups[];
    }>

    Relevant events and users

    -

    Remarks

    (2024-03-11) For months now, the API's documentation says the response is likely to change, so beware, -and also there's no documentation for this route in the API, so this is only the result of my interpretation of the website's code lol

    -
  • Get details about the version/update/build of something related to osu!

    -

    Parameters

    • stream: string

      The name of the thing related to osu!, like lazer, web, cuttingedge, beta40, stable40

      -
    • build: string

      The name of the version! Usually something like 2023.1026.0 for lazer, or 20230326 for stable

      -

    Returns Promise<WithChangelogentriesVersions>

  • Get up to 21 versions/updates/builds!

    -

    Parameters

    • Optional versions: {
          from?: string;
          to?: string;
      }

      Get builds that were released before/after (and including) those versions (use the name of the versions, e.g. 2023.1109.0)

      -
      • Optional from?: string
      • Optional to?: string
    • Optional max_id: number

      Filter out builds that have an id higher than this (this takes priority over versions.to)

      -
    • Optional stream: string

      Only get builds from a specific stream

      -
    • message_formats: ("html" | "markdown")[] = ...

      Elements of changelog_entries will have a message property if markdown, message_html property if html, defaults to both

      -

    Returns Promise<WithUpdatestreamsChangelogentries[]>

  • Get a ChatChannel, and the users in it if it is a private channel!

    -

    Parameters

    • channel: Channel | {
          channel_id: number;
      }

      The channel in question

      -

    Returns Promise<WithDetails>

    Scope

    "chat.read"

    -

    Remarks

    Will 404 if the user has not joined the channel (use joinChatChannel for that)

    -
  • Get the recent messages of a specific ChatChannel!

    -

    Parameters

    • channel: Channel | {
          channel_id: number;
      }

      The Channel you wanna get the messages from

      -
    • limit: number = 20

      (defaults to 20, max 50) The maximum amount of messages you want to get!

      -
    • Optional since: Message | {
          message_id: number;
      }

      Get the messages sent after this message

      -
    • Optional until: Message | {
          message_id: number;
      }

      Get the messages sent up to but not including this message

      -

    Returns Promise<Message[]>

  • Get comments that meet any of your requirements!

    -

    Parameters

    • Optional from: {
          id: number;
          type: "beatmapset" | "build" | "news_post";
      }

      From where are the comments coming from? Maybe a beatmapset, but then, which beatmapset?

      -
      • id: number
      • type: "beatmapset" | "build" | "news_post"
    • Optional parent: Comment | {
          id: number;
      }

      The comments are replying to which comment? Make the id 0 to filter out replies (and only get top level comments)

      -
    • Optional sort: {
          after?: Comment | {
              id: number;
          };
          cursor?: null | {
              created_at: Date;
              id: number;
          };
          type?: "new" | "top" | "old";
      }

      Should the comments be sorted by votes? Should they be from after a certain date? Maybe you can give a cursor?

      -
      • Optional after?: Comment | {
            id: number;
        }
      • Optional cursor?: null | {
            created_at: Date;
            id: number;
        }
      • Optional type?: "new" | "top" | "old"

    Returns Promise<WithTotalToplevelcount>

  • Get the top countries of a specific ruleset!

    -

    Parameters

    • ruleset: Rulesets

      On which Ruleset should the countries be compared?

      -
    • page: number = 1

      (defaults to 1) Imagine Rankings as a page, it can only have a maximum of 50 countries, while 50 others may be on the next one

      -

    Returns Promise<Country>

  • Get everything note-worthy that happened on osu! recently!

    -

    Parameters

    • sort: "id_desc" | "id_asc" = "id_desc"

      (defaults to "id_desc") "id_asc" to have the oldest recent event first, "id_desc" to have the newest instead

      -
    • Optional cursor_string: string

      Use a response's cursor_string with the same parameters to get the next "page" of results, so posts in this instance!

      -

    Returns Promise<{
        cursor_string: string;
        events: Event.Any[];
    }>

  • Get a forum topic, as well as its main post (content) and the posts that were sent in it!

    -

    Parameters

    • topic: Topic | {
          id: number;
      }

      An object with the id of the topic in question

      -
    • limit: number = 20

      (defaults to 20, max 50) How many posts maximum?

      -
    • sort: "id_desc" | "id_asc" = "id_asc"

      (defaults to "id_asc") "id_asc" to have the oldest post at the beginning of the posts array, "id_desc" to have the newest instead

      -
    • Optional first_post: Forum.Post | {
          id: number;
      }

      (ignored if cursor_string) An Object with the id of the first post to be returned in posts

      -
    • Optional cursor_string: string

      Use a response's cursor_string with the same parameters to get the next "page" of results, so posts in this instance!

      -

    Returns Promise<{
        cursor_string: string;
        posts: Forum.Post[];
        topic: Topic;
    }>

    Remarks

    The oldest post of a topic is the text of a topic

    -
  • Get data of a multiplayer lobby from the stable (non-lazer) client that have URLs with community/matches or mp

    -

    Parameters

    • id: number

      Can be found at the end of the URL of said match

      -

    Returns Promise<Match>

  • Gets the info of the 50 most recently created stable (non-lazer) matches, descending order (most recent is at index 0)

    -

    Returns Promise<MatchInfo[]>

  • Get a NewsPost, its content, and the NewsPosts right before and right after it!

    -

    Parameters

    • post: News.Post | {
          id?: number;
          slug?: string;
      }

      An object with the id or the slug of a NewsPost (the slug being the filename minus the extension, used in its URL)

      -

    Returns Promise<PostWithContentNavigation>

  • Get all the NewsPosts of a specific year!

    -

    Parameters

    • Optional year: number

      (defaults to current year) The year the posts were made

      -

    Returns Promise<News.Post[]>

    Remarks

    If the specified year is invalid/has no news, it fallbacks to the default year

    -
  • Get the scores on a specific item of a room!

    -

    Parameters

    • item: PlaylistItem | {
          id: number;
          room_id: number;
      }

      An object with the id of the item in question, as well as the id of the room

      -
    • limit: number = 50

      How many scores maximum? Defaults to 50, the maximum the API will return

      -
    • sort: "score_asc" | "score_desc" = "score_desc"

      Sort by scores, ascending or descending? Defaults to descending

      -
    • Optional cursor_string: string

      Use a Multiplayer.Scores' params and cursor_string to get the next page (scores 51 to 100 for example)

      -

    Returns Promise<Scores>

    Remarks

    (2024-03-04) This may not work for rooms from before March 5th, use at your own risk -https://github.com/ppy/osu-web/issues/10725

    -
  • Get the replay for a score!

    -

    Parameters

    • score: Score | {
          id: number;
      }

      The score that has created the replay

      -

    Returns Promise<string>

    The correctly encoded content of what would be a replay file (you can just fs.writeFileSync with it!)

    -

    Scope

    "public"

    -
  • Get data about a lazer multiplayer room (realtime or playlists)!

    -

    Parameters

    • room: Room | {
          id: number;
      }

      An object with the id of the room, is at the end of its URL (after /multiplayer/rooms/)

      -

    Returns Promise<Room>

  • Get the room stats of all the users of that room!

    -

    Parameters

    • room: Room | {
          id: number;
      }

      An object with the id of the room in question

      -

    Returns Promise<Leader[]>

    Scope

    "public"

    -
  • Get playlists/realtime rooms that are active, that have ended, that the user participated in, that the user made, or just simply any room!

    -

    Parameters

    • type: "realtime" | "playlists"

      Whether the multiplayer rooms are in playlist format (like current spotlights) or realtime

      -
    • mode: "all" | "active" | "ended" | "participated" | "owned"

      The state of the room, or the relation of the authorized user with the room

      -
    • limit: number = 10

      The maximum amount of rooms to return, defaults to 10

      -
    • sort: "ended" | "created" = "created"

      Sort (where most recent is first) by creation date or end date, defaults to the creation date

      -

    Returns Promise<Room[]>

    Scope

    "public"

    -
  • Get the backgrounds made and selected for this season or for last season!

    -

    Returns Promise<{
        backgrounds: {
            url: string;
            user: User;
        }[];
        ends_at: Date;
    }>

    When the season ended, and for each background, its URL and its artist

    -
  • Get the rankings of a spotlight from 2009 to 2020 on a specific ruleset!

    -

    Parameters

    • ruleset: Rulesets

      Each spotlight has a different ranking (and often maps) depending on the ruleset

      -
    • spotlight: Spotlight | {
          id: number;
      }

      The spotlight in question

      -
    • filter: "all" | "friends" = "all"

      What kind of players do you want to see? Defaults to all, friends has no effect if no authorized user

      -

    Returns Promise<Rankings.Spotlight>

  • Get extensive user data about whoever you want!

    -

    Parameters

    • user: User | {
          id?: number;
          username?: string;
      }

      An object with either the id or the username of the user you're trying to get

      -
    • Optional ruleset: Rulesets

      Defaults to the user's default/favourite Ruleset

      -

    Returns Promise<User.Extended>

  • Get beatmaps favourited or made by a user!

    -

    Parameters

    • user: User | {
          id: number;
      }

      The user in question

      -
    • type: "pending" | "ranked" | "loved" | "favourite" | "graveyard" | "guest" | "nominated"

      The relation between the user and the beatmaps

      -
    • limit: number = 5

      (defaults to 5) The maximum amount of elements returned in the array

      -
    • Optional offset: number

      How many elements that would be at the top of the returned array get skipped (while still filling the array up to the limit)

      -

    Returns Promise<WithBeatmapExtended[]>

  • Get data about the activity of a user kudosu-wise!

    -

    Parameters

    • user: User | {
          id: number;
      }

      The user in question

      -
    • Optional limit: number

      (defaults to 5) The maximum amount of activities in the returned array

      -
    • Optional offset: number

      How many elements that would be at the top of the returned array get skipped (while still filling the array up to the limit)

      -

    Returns Promise<KudosuHistory[]>

  • Get the beatmaps most played by a user!

    -

    Parameters

    • user: User | {
          id: number;
      }

      The user who played the beatmaps

      -
    • limit: number = 5

      (defaults to 5) The maximum amount of elements returned in the array

      -
    • Optional offset: number

      How many elements that would be at the top of the returned array get skipped (while still filling the array up to the limit)

      -

    Returns Promise<Playcount[]>

  • Get the top players of the game, with some filters!

    -

    Parameters

    • ruleset: Rulesets

      Self-explanatory, is also known as "Gamemode"

      -
    • type: "performance" | "score"

      Rank players by their performance points or by their ranked score?

      -
    • page: number = 1

      (defaults to 1) Imagine Rankings as a page, it can only have a maximum of 50 players, while 50 others may be on the next one

      -
    • filter: "all" | "friends" = "all"

      What kind of players do you want to see? Defaults to all, friends has no effect if no authorized user

      -
    • Optional country: string

      Only get players from a specific country, using its ISO 3166-1 alpha-2 country code! (France would be FR, United States US)

      -
    • Optional variant: "4k" | "7k"

      If type is performance and ruleset is mania, choose between 4k and 7k!

      -

    Returns Promise<Rankings.User>

  • Get an array of Events of different types that relate to a user's activity during the last 31 days! (or 100 activities, whatever comes first)

    -

    Parameters

    • user: User | {
          id: number;
      }

      The user in question

      -
    • limit: number = 5

      (defaults to 5) The maximum amount of elements returned in the array

      -
    • Optional offset: number

      How many elements that would be at the top of the returned array get skipped (while still filling the array up to the limit)

      -

    Returns Promise<AnyRecentActivity[]>

  • Get "notable" scores from a user

    -

    Parameters

    • user: User | {
          id: number;
      }

      The user who set the scores

      -
    • type: "best" | "firsts" | "recent"

      Do you want scores: in the user's top 100, that are top 1 on a beatmap, that have been recently set?

      -
    • Optional limit: number

      The maximum amount of scores to be returned

      -
    • Optional ruleset: Rulesets

      The Ruleset the scores were made in, defaults to the user's default/favourite Ruleset

      -
    • include_fails: boolean = false

      (defaults to false) Do you want scores where the user didn't survive or quit the map?

      -
    • Optional offset: number

      How many elements that would be at the top of the returned array get skipped (while still filling the array up to the limit)

      -

    Returns Promise<WithUserBeatmapBeatmapset[]>

  • Get a wiki page!

    -

    Parameters

    • path: string

      What's in the page's URL after https://osu.ppy.sh/wiki/ (so the title, after the subtitle if there is a subtitle) -(An example for https://osu.ppy.sh/wiki/en/Game_mode/osu! would be Game_mode/osu!)

      -
    • locale: string = "en"

      (defaults to "en") The BCP 47 language (sub)tag, lowercase (for example, for the article in french, use "fr")

      -

    Returns Promise<WikiPage>

  • Join a public or multiplayer ChatChannel, allowing you to interact with it!

    -

    Parameters

    • channel: Channel | {
          channel_id: number;
      }

      The channel you wanna join

      -
    • Optional user: User | {
          id: number;
      }

      (defaults to the presumed authorized user) The user joining the channel

      -

    Returns Promise<WithDetails>

  • Needs to be done periodically to reset chat activity timeout

    -

    Parameters

    • Optional since: {
          message?: Message | {
              message_id: number;
          };
          user_silence?: UserSilence | {
              id: number;
          };
      }

      UserSilences that are before that will not be returned!

      -
      • Optional message?: Message | {
            message_id: number;
        }
      • Optional user_silence?: UserSilence | {
            id: number;
        }

    Returns Promise<UserSilence[]>

    A list of recent silences

    -

    Scope

    "chat.read"

    -

    Remarks

    Every 30 seconds is a good idea

    -
  • Leave/Close a public ChatChannel!

    -

    Parameters

    • channel: Channel | {
          channel_id: number;
      }

      The channel you wanna join

      -
    • Optional user: User | {
          id: number;
      }

      (defaults to the presumed authorized user) The user joining the channel

      -

    Returns Promise<void>

  • Use this instead of console.log to log any information

    +
token_type: string

Should always be "Bearer"

+
user?: number

The osu! user id of the user who went through the Authorization Code Grant

+
verbose: "all" | "none" | "errors"

Which events should be logged (defaults to none)

+

Methods

  • Get a websocket to get WebSocket events from!

    +

    Parameters

    • server: string = ...

      Where the "notification websocket/server" is +(defaults to the api's server's protocol and a maximum of 1 subdomain being replaced by "wss://notify." (so usually wss://notify.ppy.sh))

      +

    Returns WebSocket

  • Set most of an api's properties, like tokens, token_type, scopes, expiration_date

    +

    Parameters

    • body: {
          client_id: number;
          client_secret: string;
          code: string;
          grant_type: "authorization_code";
          redirect_uri: string;
      }

      An Object with the client id & secret, grant_type, and stuff that depends of the grant_type

      +
      • client_id: number
      • client_secret: string
      • code: string
      • grant_type: "authorization_code"
      • redirect_uri: string
    • api: API

      The api which will see its properties change

      +

    Returns Promise<API>

    api, just in case, because in theory it should modify the original object

    +
  • Parameters

    • body: {
          client_id: number;
          client_secret: string;
          grant_type: "client_credentials";
          scope: "public";
      }
      • client_id: number
      • client_secret: string
      • grant_type: "client_credentials"
      • scope: "public"
    • api: API

    Returns Promise<API>

  • Parameters

    • body: {
          client_id: number;
          client_secret: string;
          grant_type: "refresh_token";
          refresh_token: string;
      }
      • client_id: number
      • client_secret: string
      • grant_type: "refresh_token"
      • refresh_token: string
    • api: API

    Returns Promise<API>

  • Use this instead of console.log to log any information

    Parameters

    • is_error: boolean

      Is the logging happening because of an error?

    • Rest ...to_log: any[]

      Whatever you would put between the parentheses of console.log()

      -

    Returns void

  • Get extensive beatmap data about whichever beatmap you want!

    -

    Parameters

    • query: {
          checksum?: string;
          filename?: string;
          id?: string | number;
      }
      • Optional checksum?: string
      • Optional filename?: string
      • Optional id?: string | number

    Returns Promise<WithFailtimesBeatmapsetextended>

  • Get extensive data about a beatmapset by using a beatmap!

    -

    Parameters

    • beatmap: Beatmap | {
          id: number;
      }

      A beatmap from the beatmapset you're looking for

      -

    Returns Promise<Plus>

  • Get details about the version/update/build of something related to osu!

    -

    Parameters

    • changelog: string

      A build version like 2023.1026.0, a stream name like lazer or the id of a build

      -
    • is_id: boolean = false

      Whether or not changelog is the id of a build, defaults to false

      -
    • message_formats: ("html" | "markdown")[] = ...

      Elements of changelog_entries will have a message property if markdown, message_html property if html, defaults to both

      -

    Returns Promise<WithChangelogentriesVersions>

  • Mark a certain channel as read up to a given message!

    -

    Parameters

    • channel: Channel | {
          channel_id: number;
      }

      The channel in question

      -
    • message: Message | {
          message_id: number;
      }

      You're marking this and all the messages before it as read!

      -

    Returns Promise<void>

  • Set most of an api's properties, like tokens, token_type, scopes, expiration_date

    -

    Parameters

    • body: object

      An Object with the client id & secret, grant_type, and stuff that depends of the grant_type

      -
    • api: API

      The api which will see its properties change

      -

    Returns Promise<API>

    api, just in case, because in theory it should modify the original object

    -
  • Returns Promise<boolean>

    Whether or not the token has been refreshed

    -
  • Make and send a ForumPost in a ForumTopic!

    -

    Parameters

    • topic: Topic | {
          id: number;
      }

      An object with the id of the topic you're making your reply in

      -
    • text: string

      Your reply! Your message!

      -

    Returns Promise<Forum.Post>

    The reply you've made!

    -
  • Parameters

    • method: "get" | "post" | "put" | "delete"

      The type of request, each endpoint uses a specific one (if it uses multiple, the intent and parameters become different)

      +

    Returns void

  • Returns Promise<boolean>

    Whether or not the token has been refreshed

    +
  • The function that directly communicates with the API! Almost every functions of the API object uses this function!

    +

    Parameters

    • method: "get" | "post" | "put" | "delete"

      The type of request, each endpoint uses a specific one (if it uses multiple, the intent and parameters become different)

    • endpoint: string

      What comes in the URL after api/

      -
    • Optional parameters: {
          [k: string]: any;
      }

      The things to specify in the request, such as the beatmap_id when looking for a beatmap

      -
      • [k: string]: any
    • number_try: number = 1

      Attempt number for doing this specific request

      -

    Returns Promise<any>

    A Promise with the API's response

    -
  • Search for beatmapsets as if you were on the website or on lazer!

    -

    Parameters

    • Optional query: {
          categories?: "Any" | "Ranked" | "Qualified" | "Loved" | "Favourites" | "Pending" | "WIP" | "Graveyard" | "My Maps";
          cursor_string?: string;
          extra?: ("must_have_video" | "must_have_storyboard")[];
          general?: ("Recommended difficulty" | "Include converted beatmaps" | "Subscribed mappers" | "Spotlighted beatmaps" | "Featured Artists")[];
          genre?: Unspecified | any[any] | Anime | Rock | Pop | Other | Novelty | any[any] | Electronic | Metal | Classical | Folk | Jazz;
          hide_explicit_content?: true;
          keywords?: string;
          language?: Unspecified | English | Japanese | Chinese | Instrumental | Korean | French | German | Swedish | Spanish | Italian | Russian | Polish | Other;
          mode?: Rulesets;
          played?: "Played" | "Unplayed";
          rank_achieved?: ("A" | "Silver SS" | "SS" | "Silver S" | "S" | "B" | "C" | "D")[];
          sort?: {
              by: "title" | "ranked" | "artist" | "difficulty" | "rating" | "plays" | "favourites" | "updated";
              in: "desc" | "asc";
          };
      }

      All the filters and sorting options that you'd normally find on the website or on lazer

      -
      • Optional categories?: "Any" | "Ranked" | "Qualified" | "Loved" | "Favourites" | "Pending" | "WIP" | "Graveyard" | "My Maps"

        (defaults to all that have leaderboard) Filter in sets depending on their status or on their relation with the authorized user

        +
      • parameters: {
            [k: string]: any;
        } = {}

        The things to specify in the request, such as the beatmap_id when looking for a beatmap

        +
        • [k: string]: any
      • info: {
            just_refreshed: boolean;
            number_try: number;
        } = ...

        Context given by a prior request

        +
        • just_refreshed: boolean
        • number_try: number

    Returns Promise<any>

    A Promise with the API's response

    +
  • Revoke your current token! Revokes the refresh token as well

    +

    Returns Promise<true>

  • The normal way to create an API instance! Make sure to await it

    +

    Parameters

    • client: {
          id: number;
          secret: string;
      }

      The ID and the secret of your client, can be found on https://osu.ppy.sh/home/account/edit#new-oauth-application

      +
      • id: number
      • secret: string
    • Optional user: {
          code: string;
          redirect_uri: string;
      }

      If the instance is supposed to represent a user, use their Authorization Code and the Application Callback URL of your application!

      +
      • code: string

        The code that appeared as a GET argument when they got redirected to the Application Callback URl (redirect_url)

        +
      • redirect_uri: string

        The Application Callback URL; Where the User has been redirected to after saying "okay" to your application doing stuff

        +
    • verbose: "all" | "none" | "errors" = "none"
    • server: string = "https://osu.ppy.sh"

    Returns Promise<API>

    A promise with an API instance

    +

Beatmap Functions

getBeatmap: ((this, beatmap) => Promise<WithFailtimesBeatmapset>) = Beatmap.getOne

Get extensive beatmap data about whichever beatmap you want!

+

Type declaration

getBeatmapDifficultyAttributes: ((this, beatmap, mods?, ruleset?) => Promise<Beatmap.DifficultyAttributes.Any>) = Beatmap.DifficultyAttributes.get

Get various data about the difficulty of a beatmap!

+

Type declaration

Remarks

You may want to use api.getBeatmapDifficultyAttributesOsu (or Taiko or whatever) instead for better type safety

+
getBeatmapDifficultyAttributesFruits: ((this, beatmap, mods?) => Promise<Fruits>) = Beatmap.DifficultyAttributes.getFruits

Get various data about the difficulty of a ctb beatmap!

+

Type declaration

    • (this, beatmap, mods?): Promise<Fruits>
    • Parameters

      • this: API
      • beatmap: number | Beatmap
      • Optional mods: number | string[] | Mod[]

      Returns Promise<Fruits>

getBeatmapDifficultyAttributesMania: ((this, beatmap, mods?) => Promise<Mania>) = Beatmap.DifficultyAttributes.getMania

Get various data about the difficulty of a mania beatmap!

+

Type declaration

    • (this, beatmap, mods?): Promise<Mania>
    • Parameters

      • this: API
      • beatmap: number | Beatmap
      • Optional mods: number | string[] | Mod[]

      Returns Promise<Mania>

getBeatmapDifficultyAttributesOsu: ((this, beatmap, mods?) => Promise<Osu>) = Beatmap.DifficultyAttributes.getOsu

Get various data about the difficulty of an osu! beatmap!

+

Type declaration

    • (this, beatmap, mods?): Promise<Osu>
    • Parameters

      • this: API
      • beatmap: number | Beatmap
      • Optional mods: number | string[] | Mod[]

      Returns Promise<Osu>

getBeatmapDifficultyAttributesTaiko: ((this, beatmap, mods?) => Promise<Taiko>) = Beatmap.DifficultyAttributes.getTaiko

Get various data about the difficulty of a taiko beatmap!

+

Type declaration

    • (this, beatmap, mods?): Promise<Taiko>
    • Parameters

      • this: API
      • beatmap: number | Beatmap
      • Optional mods: number | string[] | Mod[]

      Returns Promise<Taiko>

getBeatmapPack: ((this, pack, legacy_only?) => Promise<Pack>) = Beatmap.Pack.getOne

Get data about a Beatmap.Pack using its tag!

+

Type declaration

    • (this, pack, legacy_only?): Promise<Pack>
    • Parameters

      • this: API
      • pack: string | Pack
      • legacy_only: boolean = false

      Returns Promise<Pack>

Remarks

Currently in https://osu.ppy.sh/beatmaps/packs, when hovering a pack, its URL with its tag should be preview by your browser

+
getBeatmapPacks: ((this, type?, cursor_string?) => Promise<{
    beatmap_packs: Pack[];
    cursor_string: string | null;
}>) = Beatmap.Pack.getMultiple

Get an Array of up to 100 Beatmap.Packs of a specific type!

+

Type declaration

    • (this, type?, cursor_string?): Promise<{
          beatmap_packs: Pack[];
          cursor_string: string | null;
      }>
    • Parameters

      • this: API
      • type: "standard" | "loved" | "artist" | "featured" | "tournament" | "chart" | "theme" = "standard"
      • Optional cursor_string: string

      Returns Promise<{
          beatmap_packs: Pack[];
          cursor_string: string | null;
      }>

getBeatmapScores: ((this, beatmap, config?) => Promise<Score.WithUser[]>) = Beatmap.getScores

Get the top scores of a beatmap!

+

Type declaration

Remarks

Please check if mods and type seem to be supported or not by the API: https://osu.ppy.sh/docs/index.html#get-beatmap-scores

+
getBeatmapSoloScores: ((this, beatmap, config?) => Promise<Solo[]>) = Beatmap.getSoloScores

Get the top scores of a beatmap, in the "solo score" format lazer brought with it! +More info on GitHub if needed https://github.com/ppy/osu-infrastructure/blob/master/score-submission.md

+

Type declaration

Remarks

Please check if mods and type seem to be supported or not by the API: https://osu.ppy.sh/docs/index.html#get-beatmap-scores-non-legacy

+
getBeatmapUserScore: ((this, beatmap, user, config?) => Promise<UserScore>) = Beatmap.UserScore.getOne

Get the score on a beatmap made by a specific user (with specific mods and on a specific ruleset if needed)

+

Type declaration

Returns

An Object with the position of the score according to the specified Mods and Ruleset, and with the score itself

+
getBeatmapUserScores: ((this, beatmap, user, config?) => Promise<Legacy[]>) = Beatmap.UserScore.getMultiple

Get the scores on a beatmap made by a specific user (with the possibility to specify if the scores are on a convert)

+

Type declaration

getBeatmaps: ((this, beatmaps) => Promise<WithFailtimesMaxcombo[]>) = Beatmap.getMultiple

Get extensive beatmap data for up to 50 beatmaps at once!

+

Type declaration

lookupBeatmap: ((this, query) => Promise<WithFailtimesBeatmapset>) = Beatmap.lookup

Get extensive beatmap data about whichever beatmap you want!

+

Type declaration

    • (this, query): Promise<WithFailtimesBeatmapset>
    • Parameters

      • this: API
      • query: {
            checksum?: string;
            filename?: string;
            id?: number;
        }
        • Optional checksum?: string
        • Optional filename?: string
        • Optional id?: number

      Returns Promise<WithFailtimesBeatmapset>

Beatmapset Functions

getBeatmapset: ((this, beatmapset) => Promise<Plus>) = Beatmapset.getOne

Get extensive beatmapset data about whichever beatmapset you want!

+

Type declaration

getBeatmapsetDiscussionPosts: ((this, from?, types?, config?) => Promise<{
    beatmapsets: WithHype[];
    cursor_string: string | null;
    posts: Beatmapset.Discussion.Post[];
    users: User[];
}>) = Beatmapset.Discussion.Post.getMultiple

Get complex data about the posts of a beatmapset's discussion or of a user!

+

Type declaration

Remarks

(2024-03-11) For months now, the API's documentation says the response is likely to change, so beware

+

Returns

Relevant posts and info about them

+
getBeatmapsetDiscussionVotes: ((this, from?, score?, config?) => Promise<{
    cursor_string: string | null;
    discussions: Discussion[];
    users: WithGroups[];
    votes: Vote[];
}>) = Beatmapset.Discussion.Vote.getMultiple

Get complex data about the votes of a beatmapset's discussions or/and received/given by a specific user!

+

Type declaration

    • (this, from?, score?, config?): Promise<{
          cursor_string: string | null;
          discussions: Discussion[];
          users: WithGroups[];
          votes: Vote[];
      }>
    • Parameters

      • this: API
      • Optional from: {
            discussion?: number | Discussion;
            vote_giver?: number | User;
            vote_receiver?: number | User;
        }
        • Optional discussion?: number | Discussion
        • Optional vote_giver?: number | User
        • Optional vote_receiver?: number | User
      • Optional score: 1 | -1
      • Optional config: Beatmapset.Discussion.Config

      Returns Promise<{
          cursor_string: string | null;
          discussions: Discussion[];
          users: WithGroups[];
          votes: Vote[];
      }>

Remarks

(2024-03-11) For months now, the API's documentation says the response is likely to change, so beware

+

Returns

Relevant votes and info about them

+
getBeatmapsetDiscussions: ((this, from?, filter?, config?) => Promise<{
    beatmaps: Beatmap.Extended[];
    beatmapsets: Beatmapset.Extended[];
    cursor_string: string | null;
    discussions: WithStartingpost[];
    included_discussions: WithStartingpost[];
    reviews_config: {
        max_blocks: number;
    };
    users: WithGroups[];
}>) = Beatmapset.Discussion.getMultiple

Get complex data about the discussion page of any beatmapet that you want!

+

Type declaration

    • (this, from?, filter?, config?): Promise<{
          beatmaps: Beatmap.Extended[];
          beatmapsets: Beatmapset.Extended[];
          cursor_string: string | null;
          discussions: WithStartingpost[];
          included_discussions: WithStartingpost[];
          reviews_config: {
              max_blocks: number;
          };
          users: WithGroups[];
      }>
    • Parameters

      • this: API
      • Optional from: {
            beatmapset?: number | Beatmapset;
            status?: "all" | "ranked" | "qualified" | "disqualified" | "never_qualified";
            user?: number | User;
        }
        • Optional beatmapset?: number | Beatmapset
        • Optional status?: "all" | "ranked" | "qualified" | "disqualified" | "never_qualified"
        • Optional user?: number | User
      • Optional filter: {
            only_unresolved?: boolean;
            types?: ("suggestion" | "problem" | "mapper_note" | "praise" | "hype" | "review")[];
        }
        • Optional only_unresolved?: boolean
        • Optional types?: ("suggestion" | "problem" | "mapper_note" | "praise" | "hype" | "review")[]
      • Optional config: Beatmapset.Discussion.Config

      Returns Promise<{
          beatmaps: Beatmap.Extended[];
          beatmapsets: Beatmapset.Extended[];
          cursor_string: string | null;
          discussions: WithStartingpost[];
          included_discussions: WithStartingpost[];
          reviews_config: {
              max_blocks: number;
          };
          users: WithGroups[];
      }>

Remarks

(2024-03-11) For months now, the API's documentation says the response is likely to change, so beware

+

Returns

Relevant discussions and info about them

+
getBeatmapsetEvents: ((this, from?, types?, cursor_stuff?, sort?) => Promise<{
    events: Beatmapset.Event[];
    users: WithGroups[];
}>) = Beatmapset.Event.getMultiple

Get complex data about the events of a beatmapset and the users involved with them!

+

Type declaration

    • (this, from?, types?, cursor_stuff?, sort?): Promise<{
          events: Beatmapset.Event[];
          users: WithGroups[];
      }>
    • Parameters

      • this: API
      • Optional from: {
            beatmapset?: number | Beatmapset;
            max_date?: Date;
            min_date?: Date;
            user?: number | User;
        }
        • Optional beatmapset?: number | Beatmapset
        • Optional max_date?: Date
        • Optional min_date?: Date
        • Optional user?: number | User
      • Optional types: ("nominate" | "love" | "remove_from_loved" | "qualify" | "disqualify" | "approve" | "rank" | "kudosu_allow" | "kudosu_denied" | "kudosu_gain" | "kudosu_lost" | "kudosu_recalculate" | "issue_resolve" | "issue_reopen" | "discussion_lock" | "disccusion_unlock" | "discussion_delete" | "discussion_restore" | "discussion_post_delete" | "discussion_post_restore" | "nomination_reset" | "nomination_reset_received" | "genre_edit" | "language_edit" | "nsfw_toggle" | "offset_edit" | "tags_edit" | "beatmap_owner_change")[]
      • Optional cursor_stuff: {
            cursor_string?: string;
            limit?: number;
            page?: number;
        }
        • Optional cursor_string?: string
        • Optional limit?: number
        • Optional page?: number
      • sort: "id_desc" | "id_asc" = "id_desc"

      Returns Promise<{
          events: Beatmapset.Event[];
          users: WithGroups[];
      }>

Remarks

(2024-03-11) For months now, the API's documentation says the response is likely to change, so beware, +and also there's no documentation for this route in the API, so this is only the result of my interpretation of the website's code lol

+

Returns

Relevant events and users

+
lookupBeatmapset: ((this, beatmap) => Promise<Plus>) = Beatmapset.lookup

Get extensive data about a beatmapset by using a beatmap!

+

Type declaration

    • (this, beatmap): Promise<Plus>
    • Parameters

      Returns Promise<Plus>

searchBeatmapsets: ((this, query?) => Promise<{
    beatmapsets: WithBeatmapPacktags[];
    cursor_string: string | null;
    error: any | null;
    recommended_difficulty: number | null;
    total: number;
}>) = Beatmapset.search

Search for beatmapsets as if you were on the website or on lazer!

+

Type declaration

    • (this, query?): Promise<{
          beatmapsets: WithBeatmapPacktags[];
          cursor_string: string | null;
          error: any | null;
          recommended_difficulty: number | null;
          total: number;
      }>
    • Parameters

      • this: API
      • Optional query: {
            categories?: "Any" | "Ranked" | "Qualified" | "Loved" | "Favourites" | "Pending" | "WIP" | "Graveyard" | "My Maps";
            cursor_string?: string;
            extra?: ("must_have_video" | "must_have_storyboard")[];
            general?: ("Recommended difficulty" | "Include converted beatmaps" | "Subscribed mappers" | "Spotlighted beatmaps" | "Featured Artists")[];
            genre?: Unspecified | any[any] | Anime | Rock | Pop | Other | Novelty | any[any] | Electronic | Metal | Classical | Folk | Jazz;
            hide_explicit_content?: true;
            keywords?: string;
            language?: Unspecified | English | Japanese | Chinese | Instrumental | Korean | French | German | Swedish | Spanish | Italian | Russian | Polish | Other;
            mode?: Rulesets;
            played?: "Played" | "Unplayed";
            rank_achieved?: ("A" | "Silver SS" | "SS" | "Silver S" | "S" | "B" | "C" | "D")[];
            sort?: {
                by: "title" | "ranked" | "artist" | "difficulty" | "rating" | "plays" | "favourites" | "updated";
                in: "desc" | "asc";
            };
        }
        • Optional categories?: "Any" | "Ranked" | "Qualified" | "Loved" | "Favourites" | "Pending" | "WIP" | "Graveyard" | "My Maps"

          Filter in sets depending on their status or on their relation with the authorized user (defaults to all that have a leaderboard)

        • Optional cursor_string?: string

          The thing you've got from a previous request to get another page of results!

        • Optional extra?: ("must_have_video" | "must_have_storyboard")[]

          Should all sets have a video, a storyboard, maybe both at once?

        • Optional general?: ("Recommended difficulty" | "Include converted beatmaps" | "Subscribed mappers" | "Spotlighted beatmaps" | "Featured Artists")[]

          Various filters to activate

          -
        • Optional genre?: Unspecified | any[any] | Anime | Rock | Pop | Other | Novelty | any[any] | Electronic | Metal | Classical | Folk | Jazz

          Specify the musical genre of the music of the beatmapsets you're searching for

          -
        • Optional hide_explicit_content?: true

          Use this to hide all sets that are marked as explicit

          +
        • Optional genre?: Unspecified | any[any] | Anime | Rock | Pop | Other | Novelty | any[any] | Electronic | Metal | Classical | Folk | Jazz

          Specify the musical genre of the music of the beatmapsets you're searching for (don't specify to get any genre)

          +

          Remarks

          "Any"/0 actually looks up sets that specifically have the Genre "Any" such as 5947, it's excluded because it's counter-intuitive +and near useless (but you can do something like 1-1 if you actually want that!)

          +
        • Optional hide_explicit_content?: true

          Use this to hide all sets that are marked as explicit

        • Optional keywords?: string

          What you'd put in the searchbar, like the name of a beatmapset or a mapper!

          -
        • Optional language?: Unspecified | English | Japanese | Chinese | Instrumental | Korean | French | German | Swedish | Spanish | Italian | Russian | Polish | Other

          Specify the spoken language of the music of the beatmapsets you're searching for

          -
        • Optional mode?: Rulesets

          Only get sets that have maps that you can play in the ruleset of your choice

          +
        • Optional language?: Unspecified | English | Japanese | Chinese | Instrumental | Korean | French | German | Swedish | Spanish | Italian | Russian | Polish | Other

          Specify the spoken language of the music of the beatmapsets you're searching for (don't specify to get any language)

          +

          Remarks

          "Any"/0 actually looks up sets that specifically have the Language "Any" (and no set has that), it's excluded because it's counter-intuitive +and near useless (but you can do something like 1-1 if you actually want that!)

          +
        • Optional mode?: Rulesets

          Only get sets that have maps that you can play in the ruleset of your choice

        • Optional played?: "Played" | "Unplayed"

          Does the authorized user with osu!supporter have already played those sets, or have they not played them yet?

        • Optional rank_achieved?: ("A" | "Silver SS" | "SS" | "Silver S" | "S" | "B" | "C" | "D")[]

          Does the authorized user with osu!supporter have already achieved certain ranks on those sets?

        • Optional sort?: {
              by: "title" | "ranked" | "artist" | "difficulty" | "rating" | "plays" | "favourites" | "updated";
              in: "desc" | "asc";
          }

          Sort by what, in ascending/descending order

          -
          • by: "title" | "ranked" | "artist" | "difficulty" | "rating" | "plays" | "favourites" | "updated"
          • in: "desc" | "asc"

      Returns Promise<{
          beatmapsets: WithBeatmapExtendedPacktags[];
          cursor_string: null | string;
          error: any;
          recommended_difficulty: null | number;
          total: number;
      }>

      Relevant Beatmapsets that contain Beatmaps, and a cursor_string to allow you to look for more of the same!

      -

      Remarks

      This does not bypass the current osu!supporter requirement for certain filters

      -
  • Look for a user like you would on the website!

    -

    Parameters

    • query: string

      What you would put in the searchbar

      -
    • page: number = 1

      (defaults to 1) You normally get the first 20 results, but if page is 2, you'd get results 21 to 40 instead for example!

      -

    Returns Promise<SearchResult.User>

  • Look for a wiki page like you would on the website!

    -

    Parameters

    • query: string

      What you would put in the searchbar

      -
    • page: number = 1

      (defaults to 1) You normally get the first 50 results, but if page is 2, you'd get results 51 to 100 instead for example!

      -

    Returns Promise<Wiki>

  • Send a message in a ChatChannel!

    -

    Parameters

    • channel: Channel | {
          channel_id: number;
      }

      The channel in which you want to send your message

      -
    • message: string

      The message you wanna send

      -
    • is_action: boolean = false

      (defaults to false) Is it a command? Like /me dances

      -

    Returns Promise<Message>

    The newly sent ChatMessage!

    -
  • Send a private message to someone!

    -

    Parameters

    • user_target: User | {
          id: number;
      }

      The User you wanna send your message to!

      -
    • message: string

      The message you wanna send

      -
    • is_action: boolean = false

      (defaults to false) Is it a command? Like /me dances

      -
    • Optional uuid: string

      A client-side message identifier

      -

    Returns Promise<{
        channel: Channel;
        message: Message;
    }>

    The message you sent

    -

    Scope

    "chat.write"

    -

    Remarks

    You don't need to use createChatPrivateChannel before sending a message

    -
  • The normal way to create an API instance! Make sure to await it

    -

    Parameters

    • client: {
          id: number;
          secret: string;
      }

      The ID and the secret of your client, can be found on https://osu.ppy.sh/home/account/edit#new-oauth-application

      -
      • id: number
      • secret: string
    • Optional user: {
          code: string;
          redirect_uri: string;
      }

      If the instance is supposed to represent a user, use their Authorization Code and the Application Callback URL of your application!

      -
      • code: string
      • redirect_uri: string
    • verbose: "all" | "none" | "errors" = "none"
    • server: string = "https://osu.ppy.sh"

    Returns Promise<API>

    A promise with an API instance

    -

Generated using TypeDoc

\ No newline at end of file +
  • by: "title" | "ranked" | "artist" | "difficulty" | "rating" | "plays" | "favourites" | "updated"
  • in: "desc" | "asc"

Returns Promise<{
    beatmapsets: WithBeatmapPacktags[];
    cursor_string: string | null;
    error: any | null;
    recommended_difficulty: number | null;
    total: number;
}>

Remarks

This does not bypass the current osu!supporter requirement for certain filters

+

Returns

Relevant Beatmapsets that contain Beatmaps, and a cursor_string to allow you to look for more of the same!

+

Changelog Functions

getChangelogBuild: ((this, stream, build) => Promise<WithChangelogentriesVersions>) = Changelog.Build.getOne

Get details about the version/update/build of something related to osu!

+

Type declaration

getChangelogBuilds: ((this, stream?, range?, message_formats?) => Promise<WithUpdatestreamsChangelogentries[]>) = Changelog.Build.getMultiple

Get up to 21 versions/updates/builds!

+

Type declaration

    • (this, stream?, range?, message_formats?): Promise<WithUpdatestreamsChangelogentries[]>
    • Parameters

      • this: API
      • Optional stream: string
      • Optional range: {
            from?: string;
            to?: string | number;
        }
        • Optional from?: string

          The name of the build

          +
        • Optional to?: string | number

          The name or the id of the build

          +
      • message_formats: ("html" | "markdown")[] = ...

      Returns Promise<WithUpdatestreamsChangelogentries[]>

getChangelogStreams: ((this) => Promise<WithLatestbuildUsercount[]>) = Changelog.UpdateStream.getAll

An effective way to get all available streams, as well as their latest version!

+

Type declaration

lookupChangelogBuild: ((this, changelog, message_formats?) => Promise<WithChangelogentriesVersions>) = Changelog.Build.lookup

Get details about the version/update/build of something related to osu!

+

Type declaration

Chat Functions

createChatAnnouncementChannel: ((this, channel, user_targets, message) => Promise<Channel>) = Chat.Channel.createAnnouncement

Create a new announcement!

+

Type declaration

    • (this, channel, user_targets, message): Promise<Channel>
    • Parameters

      • this: API
      • channel: {
            description: string;
            name: string;
        }
        • description: string
        • name: string
      • user_targets: (number | User)[]
      • message: string

      Returns Promise<Channel>

Remarks

From my understanding, this WILL 403 unless the user is kinda special

+

Returns

The newly created channel!

+
createChatPrivateChannel: ((this, user_target) => Promise<Channel>) = Chat.Channel.createPrivate

Create/Open/Join a private messages chat channel!

+

Type declaration

    • (this, user_target): Promise<Channel>
    • Parameters

      • this: API
      • user_target: number | User

      Returns Promise<Channel>

Returns

The newly created channel!

+
getChatChannel: ((this, channel) => Promise<WithDetails>) = Chat.Channel.getOne

Get a ChatChannel, and the users in it if it is a private channel!

+

Type declaration

Remarks

Will 404 if the user has not joined the channel (use joinChatChannel for that)

+
getChatChannels: ((this) => Promise<Channel[]>) = Chat.Channel.getAll

Get a list of all publicly joinable channels!

+

Type declaration

getChatMessages: ((this, channel, limit?, since?, until?) => Promise<Message[]>) = Chat.Message.getMultiple

Get the recent messages of a specific ChatChannel!

+

Type declaration

    • (this, channel, limit?, since?, until?): Promise<Message[]>
    • Parameters

      Returns Promise<Message[]>

joinChatChannel: ((this, channel, user?) => Promise<WithDetails>) = Chat.Channel.joinOne

Join a public or multiplayer ChatChannel, allowing you to interact with it!

+

Type declaration

keepChatAlive: ((this, since?) => Promise<UserSilence[]>) = Chat.keepAlive

Needs to be done periodically to reset chat activity timeout

+

Type declaration

Remarks

Every 30 seconds is a good idea

+

Returns

A list of recent silences

+
leaveChatChannel: ((this, channel, user?) => Promise<void>) = Chat.Channel.leaveOne

Leave/Close a public ChatChannel!

+

Type declaration

    • (this, channel, user?): Promise<void>
    • Parameters

      Returns Promise<void>

markChatChannelAsRead: ((this, channel, message) => Promise<void>) = Chat.Channel.markAsRead

Mark a certain channel as read up to a given message!

+

Type declaration

    • (this, channel, message): Promise<void>
    • Parameters

      Returns Promise<void>

sendChatMessage: ((this, channel, message, is_action?) => Promise<Message>) = Chat.Message.send

Send a message in a ChatChannel!

+

Type declaration

    • (this, channel, message, is_action?): Promise<Message>
    • Parameters

      • this: API
      • channel: number | Channel
      • message: string
      • is_action: boolean = false

      Returns Promise<Message>

Returns

The newly sent ChatMessage!

+
sendChatPrivateMessage: ((this, user_target, message, is_action?, uuid?) => Promise<{
    channel: Channel;
    message: Message;
}>) = Chat.Message.sendPrivate

Send a private message to someone!

+

Type declaration

    • (this, user_target, message, is_action?, uuid?): Promise<{
          channel: Channel;
          message: Message;
      }>
    • Parameters

      • this: API
      • user_target: number | User
      • message: string
      • is_action: boolean = false
      • Optional uuid: string

      Returns Promise<{
          channel: Channel;
          message: Message;
      }>

Remarks

You don't need to use createChatPrivateChannel before sending a message

+

Returns

The message you sent

+

Comment Functions

getComment: ((this, comment) => Promise<Bundle>) = Comment.getOne

Get a specific comment by using its id!

+

Type declaration

getComments: ((this, from?, parent?, sort?) => Promise<WithTotalToplevelcount>) = Comment.getMultiple

Get comments that meet any of your requirements!

+

Type declaration

    • (this, from?, parent?, sort?): Promise<WithTotalToplevelcount>
    • Parameters

      • this: API
      • Optional from: {
            id: number;
            type: "beatmapset" | "build" | "news_post";
        }
        • id: number
        • type: "beatmapset" | "build" | "news_post"
      • Optional parent: number | Comment
      • Optional sort: {
            after?: number | Comment;
            cursor?: null | {
                created_at: Date;
                id: number;
            };
            type?: "new" | "top" | "old";
        }
        • Optional after?: number | Comment
        • Optional cursor?: null | {
              created_at: Date;
              id: number;
          }
        • Optional type?: "new" | "top" | "old"

      Returns Promise<WithTotalToplevelcount>

Event Functions

getEvents: ((this, sort?, cursor_string?) => Promise<{
    cursor_string: string | null;
    events: Event.Any[];
}>) = Event.getMultiple

Get everything note-worthy that happened on osu! recently!

+

Type declaration

    • (this, sort?, cursor_string?): Promise<{
          cursor_string: string | null;
          events: Event.Any[];
      }>
    • Parameters

      • this: API
      • sort: "id_desc" | "id_asc" = "id_desc"
      • Optional cursor_string: string

      Returns Promise<{
          cursor_string: string | null;
          events: Event.Any[];
      }>

Forum Functions

createForumTopic: ((this, forum_id, title, text, poll?) => Promise<{
    post: Forum.Post;
    topic: Topic;
}>) = Forum.Topic.create

Create a new ForumTopic in the forum of your choice!

+

Type declaration

    • (this, forum_id, title, text, poll?): Promise<{
          post: Forum.Post;
          topic: Topic;
      }>
    • Parameters

      • this: API
      • forum_id: number
      • title: string
      • text: string
      • Optional poll: {
            hide_results?: boolean;
            length_days: number;
            max_options?: number;
            options: string[];
            title: string;
            vote_change?: boolean;
        }
        • Optional hide_results?: boolean

          Should the results of the poll be hidden while the voting period is still active? (defaults to false)

          +
        • length_days: number

          Length of voting period in days, 0 means forever

          +
        • Optional max_options?: number

          The maximum amount of votes per user! (defaults to 1)

          +
        • options: string[]

          The things the users can vote for

          +
        • title: string
        • Optional vote_change?: boolean

          Do you allow users to change their vote? (defaults to false)

          +

      Returns Promise<{
          post: Forum.Post;
          topic: Topic;
      }>

Remarks

Some users may not be allowed to do that, such as newly registered users, so this can 403 even with the right scopes

+

Returns

An object with the topic you've made, and its first initial post (which uses your text)

+
editForumPost: ((this, post, new_text) => Promise<Forum.Post>) = Forum.Post.edit

Edit a ForumPost! Note that it can be the initial one of a ForumTopic!

+

Type declaration

Returns

The edited ForumPost

+
editForumTopicTitle: ((this, topic, new_title) => Promise<Topic>) = Forum.Topic.editTitle

Edit the title of a Forum.Topic!

+

Type declaration

    • (this, topic, new_title): Promise<Topic>
    • Parameters

      • this: API
      • topic: number | Topic
      • new_title: string

      Returns Promise<Topic>

Remarks

Use editForumPost if you wanna edit the post at the top of the topic

+

Returns

The edited ForumTopic

+
getForumTopicAndPosts: ((this, topic, config?) => Promise<{
    cursor_string: string | null;
    posts: Forum.Post[];
    topic: Topic;
}>) = Forum.getTopicAndPosts

Get a forum topic, as well as its main post (content) and the posts that were sent in it!

+

Type declaration

    • (this, topic, config?): Promise<{
          cursor_string: string | null;
          posts: Forum.Post[];
          topic: Topic;
      }>
    • Parameters

      • this: API
      • topic: number | Topic
      • Optional config: {
            cursor_string?: string;
            first_post?: number | Forum.Post;
            limit?: number;
            sort?: "id_desc" | "id_asc";
        }
        • Optional cursor_string?: string

          Use a response's cursor_string with the same parameters to get the next "page" of results, so posts in this instance!

          +
        • Optional first_post?: number | Forum.Post

          The id (or the post itself) of the first post to be returned in posts (irrelevant if using a cursor_string)

          +
        • Optional limit?: number

          How many posts maximum, up to 50

          +
        • Optional sort?: "id_desc" | "id_asc"

          "id_asc" to have the oldest post at the beginning of the posts array, "id_desc" to have the newest instead

          +

      Returns Promise<{
          cursor_string: string | null;
          posts: Forum.Post[];
          topic: Topic;
      }>

Remarks

The oldest post of a topic is the text of a topic

+
replyForumTopic: ((this, topic, text) => Promise<Forum.Post>) = Forum.Topic.reply

Make and send a Forum.Post in a Forum.Topic!

+

Type declaration

Returns

The reply you've made, as a Forum.Post!

+

Home Functions

searchUser: ((this, query, page?) => Promise<{
    data: User[];
    total: number;
}>) = Home.Search.getUsers

Look for a user like you would on the website!

+

Type declaration

    • (this, query, page?): Promise<{
          data: User[];
          total: number;
      }>
    • Parameters

      • this: API
      • query: string
      • page: number = 1

      Returns Promise<{
          data: User[];
          total: number;
      }>

searchWiki: ((this, query, page?) => Promise<{
    data: WikiPage[];
    total: number;
}>) = Home.Search.getWikiPages

Look for a wiki page like you would on the website!

+

Type declaration

    • (this, query, page?): Promise<{
          data: WikiPage[];
          total: number;
      }>
    • Parameters

      • this: API
      • query: string
      • page: number = 1

      Returns Promise<{
          data: WikiPage[];
          total: number;
      }>

Multiplayer Functions

getMatch: ((this, match) => Promise<Match>) = Multiplayer.Match.getOne

Get data about a lazer multiplayer room (realtime or playlists)!

+

Type declaration

    • (this, match): Promise<Match>
    • Parameters

      Returns Promise<Match>

getMatches: ((this, query?) => Promise<Info[]>) = Multiplayer.Match.getMultiple

Get data about a lazer multiplayer room (realtime or playlists)!

+

Type declaration

    • (this, query?): Promise<Info[]>
    • Parameters

      • this: API
      • Optional query: {
            first_match_in_array?: number | Info;
            limit?: number;
            sort?: "id_desc" | "id_asc";
        }
        • Optional first_match_in_array?: number | Info

          Which match should be featured at index 0 of the returned array? Will get one with a similar id if it is unavailable

          +

          Remarks

          You can use this argument differently to get all matches before/after (depending of query.sort) a certain match, +by adding +1/-1 to its id! So if you want all matches after match_id 10 with sorting is_desc, just have this argument be 10 + 1, or 11!

          +
        • Optional limit?: number

          The maximum amount of elements returned in the array (defaults to 50)

          +
        • Optional sort?: "id_desc" | "id_asc"

          "id_desc" has the biggest id (most recent start_time) at the beginning of the array, "id_asc" is the opposite (defaults to id_desc)

          +

      Returns Promise<Info[]>

getPlaylistItemScores: ((this, item, limit?, sort?, cursor_string?) => Promise<Scores>) = Multiplayer.Room.PlaylistItem.getScores

Get data about a lazer multiplayer room (realtime or playlists)!

+

Type declaration

    • (this, item, limit?, sort?, cursor_string?): Promise<Scores>
    • Parameters

      • this: API
      • item: PlaylistItem | {
            id: number;
            room_id: number;
        }
      • limit: number = 50
      • sort: "score_asc" | "score_desc" = "score_desc"
      • Optional cursor_string: string

      Returns Promise<Scores>

getRoom: ((this, room) => Promise<Room>) = Multiplayer.Room.getOne

Get data about a lazer multiplayer room (realtime or playlists)!

+

Type declaration

    • (this, room): Promise<Room>
    • Parameters

      Returns Promise<Room>

getRoomLeaderboard: ((this, room) => Promise<Leader[]>) = Multiplayer.Room.getLeaderboard

Get data about a lazer multiplayer room (realtime or playlists)!

+

Type declaration

getRooms: ((this, type, mode, limit?, sort?) => Promise<Room[]>) = Multiplayer.Room.getMultiple

Get data about a lazer multiplayer room (realtime or playlists)!

+

Type declaration

    • (this, type, mode, limit?, sort?): Promise<Room[]>
    • Parameters

      • this: API
      • type: "realtime" | "playlists"
      • mode: "all" | "active" | "ended" | "participated" | "owned"
      • limit: number = 10
      • sort: "ended" | "created" = "created"

      Returns Promise<Room[]>

NewsPost Functions

getNewsPost: ((this, post) => Promise<WithContentNavigation>) = NewsPost.getOne

Get a NewsPost, its content, and the NewsPosts right before and right after it!

+

Type declaration

getNewsPosts: ((this, year?) => Promise<NewsPost[]>) = NewsPost.getMultiple

Get all the NewsPosts of a specific year!

+

Type declaration

    • (this, year?): Promise<NewsPost[]>
    • Parameters

      • this: API
      • Optional year: number

      Returns Promise<NewsPost[]>

Remarks

If the specified year is invalid/has no news, it fallbacks to the default year

+

Other Functions

getReplay: ((this, score) => Promise<string>) = Score.getReplay

Get the replay for a score!

+

Type declaration

    • (this, score): Promise<string>
    • Parameters

      Returns Promise<string>

Returns

The correctly encoded content of what would be a replay file (you can just fs.writeFileSync with it!)

+
getSpotlights: ((this) => Promise<Spotlight[]>) = Spotlight.getAll

Get ALL legacy spotlights! (2009-2020, somewhat known as charts/ranking charts, available @ https://osu.ppy.sh/rankings/osu/charts)

+

Type declaration

Remarks

The data for newer spotlights (2020-, somewhat known as seasons) can be obtained through getRoom() +but you can't really get the id of those newer spotlights without going through the website's URLs (https://osu.ppy.sh/seasons/latest) as far as I know :(

+
  • Get the backgrounds made and selected for this season or for last season!

    +

    Returns Promise<{
        backgrounds: {
            url: string;
            user: User;
        }[];
        ends_at: Date;
    }>

    When the season ended, and for each background, its URL and its artist

    +

Ranking Functions

getCountryRanking: ((this, ruleset, page?) => Promise<Country>) = Ranking.getCountry

Get the top countries of a specific ruleset!

+

Type declaration

getKudosuRanking: ((this) => Promise<WithKudosu[]>) = Ranking.getKudosu

Get the top 50 players who have the most total kudosu!

+

Type declaration

getSpotlightRanking: ((this, ruleset, spotlight, filter?) => Promise<Ranking.Spotlight>) = Ranking.getSpotlight

Get the rankings of a spotlight from 2009 to 2020 on a specific ruleset!

+

Type declaration

getUserRanking: ((this, ruleset, type, config?) => Promise<Ranking.User>) = Ranking.getUser

Get the top players of the game, with some filters!

+

Type declaration

    • (this, ruleset, type, config?): Promise<Ranking.User>
    • Parameters

      • this: API
      • ruleset: Rulesets
      • type: "performance" | "score"
      • Optional config: {
            country?: string;
            filter?: "all" | "friends";
            page?: number;
            variant?: "4k" | "7k";
        }
        • Optional country?: string

          Only get players from a specific country, using its ISO 3166-1 alpha-2 country code! (France would be FR, United States US)

          +
        • Optional filter?: "all" | "friends"

          What kind of players do you want to see? Keep in mind friends has no effect if no authorized user

          +
        • Optional page?: number

          Imagine the array you get as a page, it can only have a maximum of 50 players, while 50 others may be on the next one

          +
        • Optional variant?: "4k" | "7k"

          If type is performance and ruleset is mania, choose between 4k and 7k!

          +

      Returns Promise<Ranking.User>

User Functions

getFriends: ((this) => Promise<WithCountryCoverGroupsStatisticsSupport[]>) = User.getFriends

Get user data of each friend of the authorized user

+

Type declaration

getResourceOwner: ((this, ruleset?) => Promise<WithStatisticsrulesets>) = User.getResourceOwner

Get extensive user data about the authorized user

+

Type declaration

getUser: ((this, user, ruleset?) => Promise<User.Extended>) = User.getOne

Get extensive user data about whoever you want!

+

Type declaration

getUserBeatmaps: ((this, user, type, config?) => Promise<WithBeatmap[]>) = User.getBeatmaps

Get beatmaps favourited or made by a user!

+

Type declaration

    • (this, user, type, config?): Promise<WithBeatmap[]>
    • Parameters

      • this: API
      • user: number | User
      • type: "pending" | "favourite" | "graveyard" | "guest" | "loved" | "nominated" | "ranked"
      • Optional config: User.Config

      Returns Promise<WithBeatmap[]>

getUserKudosu: ((this, user, config?) => Promise<KudosuHistory[]>) = User.getKudosu

Get data about the activity of a user kudosu-wise!

+

Type declaration

getUserMostPlayed: ((this, user, config?) => Promise<Playcount[]>) = User.getMostPlayed

Get the beatmaps most played by a user!

+

Type declaration

getUserRecentActivity: ((this, user, config?) => Promise<AnyRecentActivity[]>) = User.getRecentActivity

Get an array of Events of different types that relate to a user's activity during the last 31 days! (or 100 activities, whatever comes first)

+

Type declaration

getUserScores: ((this, user, type, ruleset?, include?, config?) => Promise<WithUserBeatmapBeatmapset[]>) = User.getScores

Get "notable" scores from a user

+

Type declaration

getUsers: ((this, users) => Promise<WithCountryCoverGroupsStatisticsrulesets[]>) = User.getMultiple

Get user data for up to 50 users at once!

+

Type declaration

WikiPage Functions

getWikiPage: ((this, path, locale?) => Promise<WikiPage>) = WikiPage.getOne

Get a wiki page!

+

Type declaration

    • (this, path, locale?): Promise<WikiPage>
    • Parameters

      • this: API
      • path: string
      • locale: string = "en"

      Returns Promise<WikiPage>

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/classes/APIError.html b/docs/classes/APIError.html index 45ba2d5..78e2107 100644 --- a/docs/classes/APIError.html +++ b/docs/classes/APIError.html @@ -1,5 +1,5 @@ APIError | osu-api-v2-js

Class APIError

If the API throws an error, it should always be an APIError!

-

Constructors

Constructors

Properties

endpoint message parameters? @@ -8,4 +8,4 @@
  • server: string

    The server to which the request was sent

  • endpoint: string

    The type of resource that was requested from the server

  • Optional parameters: object

    The filters that were used to specify what resource was wanted

    -
  • Returns APIError

    Properties

    endpoint: string
    message: string
    parameters?: object
    server: string

    Generated using TypeDoc

    \ No newline at end of file +

    Returns APIError

    Properties

    endpoint: string
    message: string
    parameters?: object
    server: string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/enums/Beatmapset.Genres.html b/docs/enums/Beatmapset.Genres.html new file mode 100644 index 0000000..ad4e75f --- /dev/null +++ b/docs/enums/Beatmapset.Genres.html @@ -0,0 +1,15 @@ +Genres | osu-api-v2-js

    Enumeration Members

    Anime: 3
    Any: 0
    Classical: 12
    Electronic: 10
    Folk: 13
    Hip Hop: 9
    Jazz: 14
    Metal: 11
    Novelty: 7
    Other: 6
    Pop: 5
    Rock: 4
    Unspecified: 1
    Video Game: 2

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/enums/Beatmapset.Languages.html b/docs/enums/Beatmapset.Languages.html new file mode 100644 index 0000000..7bf9d27 --- /dev/null +++ b/docs/enums/Beatmapset.Languages.html @@ -0,0 +1,16 @@ +Languages | osu-api-v2-js

    Enumeration Members

    Any: 0
    Chinese: 4
    English: 2
    French: 7
    German: 8
    Instrumental: 5
    Italian: 11
    Japanese: 3
    Korean: 6
    Other: 14
    Polish: 13
    Russian: 12
    Spanish: 10
    Swedish: 9
    Unspecified: 1

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/enums/Beatmapset.RankStatus.html b/docs/enums/Beatmapset.RankStatus.html new file mode 100644 index 0000000..bef0283 --- /dev/null +++ b/docs/enums/Beatmapset.RankStatus.html @@ -0,0 +1,8 @@ +RankStatus | osu-api-v2-js

    Enumeration RankStatus

    Enumeration Members

    Enumeration Members

    Approved: 2
    Graveyard: -2
    Loved: 4
    Pending: 0
    Qualified: 3
    Ranked: 1
    Wip: -1

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/enums/Genres.html b/docs/enums/Genres.html deleted file mode 100644 index 42bb44e..0000000 --- a/docs/enums/Genres.html +++ /dev/null @@ -1,15 +0,0 @@ -Genres | osu-api-v2-js

    Enumeration Genres

    Enumeration Members

    Anime: 3
    Any: 0
    Classical: 12
    Electronic: 10
    Folk: 13
    Hip Hop: 9
    Jazz: 14
    Metal: 11
    Novelty: 7
    Other: 6
    Pop: 5
    Rock: 4
    Unspecified: 1
    Video Game: 2

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/enums/Languages.html b/docs/enums/Languages.html deleted file mode 100644 index 881edd3..0000000 --- a/docs/enums/Languages.html +++ /dev/null @@ -1,16 +0,0 @@ -Languages | osu-api-v2-js

    Enumeration Languages

    Enumeration Members

    Any: 0
    Chinese: 4
    English: 2
    French: 7
    German: 8
    Instrumental: 5
    Italian: 11
    Japanese: 3
    Korean: 6
    Other: 14
    Polish: 13
    Russian: 12
    Spanish: 10
    Swedish: 9
    Unspecified: 1

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/enums/RankStatus.html b/docs/enums/RankStatus.html deleted file mode 100644 index 86e59eb..0000000 --- a/docs/enums/RankStatus.html +++ /dev/null @@ -1,8 +0,0 @@ -RankStatus | osu-api-v2-js

    Enumeration RankStatus

    Enumeration Members

    Enumeration Members

    Approved: 2
    Graveyard: -2
    Loved: 4
    Pending: 0
    Qualified: 3
    Ranked: 1
    Wip: -1

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/enums/Rulesets.html b/docs/enums/Rulesets.html index a8e732e..1b62109 100644 --- a/docs/enums/Rulesets.html +++ b/docs/enums/Rulesets.html @@ -1,5 +1,5 @@ -Rulesets | osu-api-v2-js

    Enumeration Rulesets

    Enumeration Members

    fruits +Rulesets | osu-api-v2-js

    Enumeration Rulesets

    Enumeration Members

    Enumeration Members

    fruits: 2
    mania: 3
    osu: 0
    taiko: 1

    Generated using TypeDoc

    \ No newline at end of file +

    Enumeration Members

    fruits: 2
    mania: 3
    osu: 0
    taiko: 1

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/functions/Beatmap.DifficultyAttributes.get.html b/docs/functions/Beatmap.DifficultyAttributes.get.html new file mode 100644 index 0000000..d5174cc --- /dev/null +++ b/docs/functions/Beatmap.DifficultyAttributes.get.html @@ -0,0 +1,6 @@ +get | osu-api-v2-js
    • Get various data about the difficulty of a beatmap!

      +

      Parameters

      • this: API
      • beatmap: number | Beatmap

        The Beatmap in question

        +
      • Optional mods: number | string[] | Mod[]

        Can be a bitset of mods, an array of mod acronyms, or an array of Mods (ignores mod settings) (defaults to No Mod)

        +
      • Optional ruleset: Rulesets

        Useful to specify if the beatmap is a convert (defaults to the ruleset the beatmap was intended for)

        +

      Returns Promise<Beatmap.DifficultyAttributes.Any>

      Remarks

      You may want to use api.getBeatmapDifficultyAttributesOsu (or Taiko or whatever) instead for better type safety

      +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/functions/Beatmap.DifficultyAttributes.getFruits.html b/docs/functions/Beatmap.DifficultyAttributes.getFruits.html new file mode 100644 index 0000000..2427582 --- /dev/null +++ b/docs/functions/Beatmap.DifficultyAttributes.getFruits.html @@ -0,0 +1,4 @@ +getFruits | osu-api-v2-js
    • Get various data about the difficulty of a ctb beatmap!

      +

      Parameters

      • this: API
      • beatmap: number | Beatmap

        The Beatmap in question

        +
      • Optional mods: number | string[] | Mod[]

        Can be a bitset of mods, an array of mod acronyms, or an array of Mods (ignores mod settings) (defaults to No Mod)

        +

      Returns Promise<Fruits>

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/functions/Beatmap.DifficultyAttributes.getMania.html b/docs/functions/Beatmap.DifficultyAttributes.getMania.html new file mode 100644 index 0000000..c752d71 --- /dev/null +++ b/docs/functions/Beatmap.DifficultyAttributes.getMania.html @@ -0,0 +1,4 @@ +getMania | osu-api-v2-js
    • Get various data about the difficulty of a mania beatmap!

      +

      Parameters

      • this: API
      • beatmap: number | Beatmap

        The Beatmap in question

        +
      • Optional mods: number | string[] | Mod[]

        Can be a bitset of mods, an array of mod acronyms, or an array of Mods (ignores mod settings) (defaults to No Mod)

        +

      Returns Promise<Mania>

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/functions/Beatmap.DifficultyAttributes.getOsu.html b/docs/functions/Beatmap.DifficultyAttributes.getOsu.html new file mode 100644 index 0000000..f5aec19 --- /dev/null +++ b/docs/functions/Beatmap.DifficultyAttributes.getOsu.html @@ -0,0 +1,4 @@ +getOsu | osu-api-v2-js
    • Get various data about the difficulty of an osu! beatmap!

      +

      Parameters

      • this: API
      • beatmap: number | Beatmap

        The Beatmap in question

        +
      • Optional mods: number | string[] | Mod[]

        Can be a bitset of mods, an array of mod acronyms, or an array of Mods (ignores mod settings) (defaults to No Mod)

        +

      Returns Promise<Osu>

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/functions/Beatmap.DifficultyAttributes.getTaiko.html b/docs/functions/Beatmap.DifficultyAttributes.getTaiko.html new file mode 100644 index 0000000..7aabe34 --- /dev/null +++ b/docs/functions/Beatmap.DifficultyAttributes.getTaiko.html @@ -0,0 +1,4 @@ +getTaiko | osu-api-v2-js
    • Get various data about the difficulty of a taiko beatmap!

      +

      Parameters

      • this: API
      • beatmap: number | Beatmap

        The Beatmap in question

        +
      • Optional mods: number | string[] | Mod[]

        Can be a bitset of mods, an array of mod acronyms, or an array of Mods (ignores mod settings) (defaults to No Mod)

        +

      Returns Promise<Taiko>

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/functions/Beatmap.Pack.getMultiple.html b/docs/functions/Beatmap.Pack.getMultiple.html new file mode 100644 index 0000000..f024005 --- /dev/null +++ b/docs/functions/Beatmap.Pack.getMultiple.html @@ -0,0 +1,4 @@ +getMultiple | osu-api-v2-js
    • Get an Array of up to 100 Beatmap.Packs of a specific type!

      +

      Parameters

      • this: API
      • type: "standard" | "loved" | "artist" | "featured" | "tournament" | "chart" | "theme" = "standard"

        The type of the BeatmapPacks (defaults to standard)

        +
      • Optional cursor_string: string

        Use a response's cursor_string with the same parameters to get the next "page" of results!

        +

      Returns Promise<{
          beatmap_packs: Pack[];
          cursor_string: string | null;
      }>

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/functions/Beatmap.Pack.getOne.html b/docs/functions/Beatmap.Pack.getOne.html new file mode 100644 index 0000000..9dbc9bc --- /dev/null +++ b/docs/functions/Beatmap.Pack.getOne.html @@ -0,0 +1,5 @@ +getOne | osu-api-v2-js
    • Get data about a Beatmap.Pack using its tag!

      +

      Parameters

      • this: API
      • pack: string | Pack

        The Pack or the pack tag of the Pack you're trying to get

        +
      • legacy_only: boolean = false

        Should lazer scores be excluded from the pack's user_completion_data? (defaults to false)

        +

      Returns Promise<Pack>

      Remarks

      Currently in https://osu.ppy.sh/beatmaps/packs, when hovering a pack, its URL with its tag should be preview by your browser

      +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/functions/Beatmap.UserScore.getMultiple.html b/docs/functions/Beatmap.UserScore.getMultiple.html new file mode 100644 index 0000000..1b3e59b --- /dev/null +++ b/docs/functions/Beatmap.UserScore.getMultiple.html @@ -0,0 +1,5 @@ +getMultiple | osu-api-v2-js
    • Get the scores on a beatmap made by a specific user (with the possibility to specify if the scores are on a convert)

      +

      Parameters

      • this: API
      • beatmap: number | Beatmap

        The Beatmap the scores were made on

        +
      • user: number | User

        The User who made the scores

        +
      • Optional config: Beatmap.Config

        Specify the score's ruleset, prevent a lazer score from being returned (mods and type should not be supported)

        +

      Returns Promise<Legacy[]>

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/functions/Beatmap.UserScore.getOne.html b/docs/functions/Beatmap.UserScore.getOne.html new file mode 100644 index 0000000..ac66d5d --- /dev/null +++ b/docs/functions/Beatmap.UserScore.getOne.html @@ -0,0 +1,6 @@ +getOne | osu-api-v2-js
    • Get the score on a beatmap made by a specific user (with specific mods and on a specific ruleset if needed)

      +

      Parameters

      • this: API
      • beatmap: number | Beatmap

        The Beatmap the score was made on

        +
      • user: number | User

        The User who made the score

        +
      • Optional config: Beatmap.Config

        Specify the score's ruleset, the score's mods, prevent a lazer score from being returned (type should not be supported)

        +

      Returns Promise<UserScore>

      An Object with the position of the score according to the specified Mods and Ruleset, and with the score itself

      +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/functions/Beatmap.getMultiple.html b/docs/functions/Beatmap.getMultiple.html new file mode 100644 index 0000000..90345eb --- /dev/null +++ b/docs/functions/Beatmap.getMultiple.html @@ -0,0 +1,3 @@ +getMultiple | osu-api-v2-js

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/functions/Beatmap.getOne.html b/docs/functions/Beatmap.getOne.html new file mode 100644 index 0000000..346d9fe --- /dev/null +++ b/docs/functions/Beatmap.getOne.html @@ -0,0 +1,3 @@ +getOne | osu-api-v2-js

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/functions/Beatmap.getScores.html b/docs/functions/Beatmap.getScores.html new file mode 100644 index 0000000..c9f2f78 --- /dev/null +++ b/docs/functions/Beatmap.getScores.html @@ -0,0 +1,5 @@ +getScores | osu-api-v2-js

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/functions/Beatmap.getSoloScores.html b/docs/functions/Beatmap.getSoloScores.html new file mode 100644 index 0000000..91fb052 --- /dev/null +++ b/docs/functions/Beatmap.getSoloScores.html @@ -0,0 +1,6 @@ +getSoloScores | osu-api-v2-js

    Function getSoloScores

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/functions/Beatmap.lookup.html b/docs/functions/Beatmap.lookup.html new file mode 100644 index 0000000..3b242b3 --- /dev/null +++ b/docs/functions/Beatmap.lookup.html @@ -0,0 +1,3 @@ +lookup | osu-api-v2-js
    • Get extensive beatmap data about whichever beatmap you want!

      +

      Parameters

      • this: API
      • query: {
            checksum?: string;
            filename?: string;
            id?: number;
        }

        What to specify in order to find the right beatmap

        +
        • Optional checksum?: string
        • Optional filename?: string
        • Optional id?: number

      Returns Promise<WithFailtimesBeatmapset>

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/functions/Beatmapset.Discussion.Post.getMultiple.html b/docs/functions/Beatmapset.Discussion.Post.getMultiple.html new file mode 100644 index 0000000..51133dc --- /dev/null +++ b/docs/functions/Beatmapset.Discussion.Post.getMultiple.html @@ -0,0 +1,7 @@ +getMultiple | osu-api-v2-js
    • Get complex data about the posts of a beatmapset's discussion or of a user!

      +

      Parameters

      • this: API
      • Optional from: {
            discussion?: number | Discussion;
            user?: number | User;
        }

        From where/who are the posts coming from? A specific discussion, a specific user?

        +
        • Optional discussion?: number | Discussion
        • Optional user?: number | User
      • Optional types: ("first" | "reply" | "system")[]

        What kind of posts?

        +
      • Optional config: Beatmapset.Discussion.Config

        How many results maximum, how to sort them, which page of those, maybe a cursor_string...

        +

      Returns Promise<{
          beatmapsets: WithHype[];
          cursor_string: string | null;
          posts: Beatmapset.Discussion.Post[];
          users: User[];
      }>

      Relevant posts and info about them

      +

      Remarks

      (2024-03-11) For months now, the API's documentation says the response is likely to change, so beware

      +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/functions/Beatmapset.Discussion.Vote.getMultiple.html b/docs/functions/Beatmapset.Discussion.Vote.getMultiple.html new file mode 100644 index 0000000..fe95ba6 --- /dev/null +++ b/docs/functions/Beatmapset.Discussion.Vote.getMultiple.html @@ -0,0 +1,7 @@ +getMultiple | osu-api-v2-js
    • Get complex data about the votes of a beatmapset's discussions or/and received/given by a specific user!

      +

      Parameters

      • this: API
      • Optional from: {
            discussion?: number | Discussion;
            vote_giver?: number | User;
            vote_receiver?: number | User;
        }

        The discussion with the votes, the user who voted, the user who's gotten the votes...

        +
        • Optional discussion?: number | Discussion
        • Optional vote_giver?: number | User
        • Optional vote_receiver?: number | User
      • Optional score: 1 | -1

        An upvote (1) or a downvote (-1)

        +
      • Optional config: Beatmapset.Discussion.Config

        How many results maximum, how to sort them, which page of those, maybe a cursor_string...

        +

      Returns Promise<{
          cursor_string: string | null;
          discussions: Discussion[];
          users: WithGroups[];
          votes: Vote[];
      }>

      Relevant votes and info about them

      +

      Remarks

      (2024-03-11) For months now, the API's documentation says the response is likely to change, so beware

      +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/functions/Beatmapset.Discussion.getMultiple.html b/docs/functions/Beatmapset.Discussion.getMultiple.html new file mode 100644 index 0000000..e835a32 --- /dev/null +++ b/docs/functions/Beatmapset.Discussion.getMultiple.html @@ -0,0 +1,7 @@ +getMultiple | osu-api-v2-js
    • Get complex data about the discussion page of any beatmapet that you want!

      +

      Parameters

      • this: API
      • Optional from: {
            beatmapset?: number | Beatmapset;
            status?: "all" | "ranked" | "qualified" | "disqualified" | "never_qualified";
            user?: number | User;
        }

        From where/who are the discussions coming from? Maybe only qualified sets?

        +
        • Optional beatmapset?: number | Beatmapset
        • Optional status?: "all" | "ranked" | "qualified" | "disqualified" | "never_qualified"
        • Optional user?: number | User
      • Optional filter: {
            only_unresolved?: boolean;
            types?: ("suggestion" | "problem" | "mapper_note" | "praise" | "hype" | "review")[];
        }

        Should those discussions only be unresolved problems, for example?

        +
        • Optional only_unresolved?: boolean
        • Optional types?: ("suggestion" | "problem" | "mapper_note" | "praise" | "hype" | "review")[]
      • Optional config: Beatmapset.Discussion.Config

        How many results maximum, how to sort them, which page of those, maybe a cursor_string...

        +

      Returns Promise<{
          beatmaps: Beatmap.Extended[];
          beatmapsets: Beatmapset.Extended[];
          cursor_string: string | null;
          discussions: WithStartingpost[];
          included_discussions: WithStartingpost[];
          reviews_config: {
              max_blocks: number;
          };
          users: WithGroups[];
      }>

      Relevant discussions and info about them

      +

      Remarks

      (2024-03-11) For months now, the API's documentation says the response is likely to change, so beware

      +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/functions/Beatmapset.Event.getMultiple.html b/docs/functions/Beatmapset.Event.getMultiple.html new file mode 100644 index 0000000..fc1cdca --- /dev/null +++ b/docs/functions/Beatmapset.Event.getMultiple.html @@ -0,0 +1,9 @@ +getMultiple | osu-api-v2-js
    • Get complex data about the events of a beatmapset and the users involved with them!

      +

      Parameters

      • this: API
      • Optional from: {
            beatmapset?: number | Beatmapset;
            max_date?: Date;
            min_date?: Date;
            user?: number | User;
        }

        Which beatmapset, or caused by which user? When?

        +
        • Optional beatmapset?: number | Beatmapset
        • Optional max_date?: Date
        • Optional min_date?: Date
        • Optional user?: number | User
      • Optional types: ("nominate" | "love" | "remove_from_loved" | "qualify" | "disqualify" | "approve" | "rank" | "kudosu_allow" | "kudosu_denied" | "kudosu_gain" | "kudosu_lost" | "kudosu_recalculate" | "issue_resolve" | "issue_reopen" | "discussion_lock" | "disccusion_unlock" | "discussion_delete" | "discussion_restore" | "discussion_post_delete" | "discussion_post_restore" | "nomination_reset" | "nomination_reset_received" | "genre_edit" | "language_edit" | "nsfw_toggle" | "offset_edit" | "tags_edit" | "beatmap_owner_change")[]

        What kinds of events?

        +
      • Optional cursor_stuff: {
            cursor_string?: string;
            limit?: number;
            page?: number;
        }

        How many results maximum to get, which page of those results, a cursor_string if you have that...

        +
        • Optional cursor_string?: string
        • Optional limit?: number
        • Optional page?: number
      • sort: "id_desc" | "id_asc" = "id_desc"

        "id_asc" to have the oldest recent event first, "id_desc" to have the newest instead (defaults to id_desc)

        +

      Returns Promise<{
          events: Beatmapset.Event[];
          users: WithGroups[];
      }>

      Relevant events and users

      +

      Remarks

      (2024-03-11) For months now, the API's documentation says the response is likely to change, so beware, +and also there's no documentation for this route in the API, so this is only the result of my interpretation of the website's code lol

      +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/functions/Beatmapset.getOne.html b/docs/functions/Beatmapset.getOne.html new file mode 100644 index 0000000..6cd85df --- /dev/null +++ b/docs/functions/Beatmapset.getOne.html @@ -0,0 +1,3 @@ +getOne | osu-api-v2-js
    • Get extensive beatmapset data about whichever beatmapset you want!

      +

      Parameters

      • this: API
      • beatmapset: number | Beatmapset

        The beatmapset or the id of the beatmapset you're trying to get

        +

      Returns Promise<Plus>

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/functions/Beatmapset.lookup.html b/docs/functions/Beatmapset.lookup.html new file mode 100644 index 0000000..a45bbfb --- /dev/null +++ b/docs/functions/Beatmapset.lookup.html @@ -0,0 +1,3 @@ +lookup | osu-api-v2-js
    • Get extensive data about a beatmapset by using a beatmap!

      +

      Parameters

      • this: API
      • beatmap: number | Beatmap

        A beatmap from the beatmapset you're looking for

        +

      Returns Promise<Plus>

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/functions/Beatmapset.search.html b/docs/functions/Beatmapset.search.html new file mode 100644 index 0000000..ca08682 --- /dev/null +++ b/docs/functions/Beatmapset.search.html @@ -0,0 +1,21 @@ +search | osu-api-v2-js
    • Search for beatmapsets as if you were on the website or on lazer!

      +

      Parameters

      • this: API
      • Optional query: {
            categories?: "Any" | "Ranked" | "Qualified" | "Loved" | "Favourites" | "Pending" | "WIP" | "Graveyard" | "My Maps";
            cursor_string?: string;
            extra?: ("must_have_video" | "must_have_storyboard")[];
            general?: ("Recommended difficulty" | "Include converted beatmaps" | "Subscribed mappers" | "Spotlighted beatmaps" | "Featured Artists")[];
            genre?: Unspecified | any[any] | Anime | Rock | Pop | Other | Novelty | any[any] | Electronic | Metal | Classical | Folk | Jazz;
            hide_explicit_content?: true;
            keywords?: string;
            language?: Unspecified | English | Japanese | Chinese | Instrumental | Korean | French | German | Swedish | Spanish | Italian | Russian | Polish | Other;
            mode?: Rulesets;
            played?: "Played" | "Unplayed";
            rank_achieved?: ("A" | "Silver SS" | "SS" | "Silver S" | "S" | "B" | "C" | "D")[];
            sort?: {
                by: "title" | "ranked" | "artist" | "difficulty" | "rating" | "plays" | "favourites" | "updated";
                in: "desc" | "asc";
            };
        }

        All the filters and sorting options that you'd normally find on the website or on lazer

        +
        • Optional categories?: "Any" | "Ranked" | "Qualified" | "Loved" | "Favourites" | "Pending" | "WIP" | "Graveyard" | "My Maps"

          Filter in sets depending on their status or on their relation with the authorized user (defaults to all that have a leaderboard)

          +
        • Optional cursor_string?: string

          The thing you've got from a previous request to get another page of results!

          +
        • Optional extra?: ("must_have_video" | "must_have_storyboard")[]

          Should all sets have a video, a storyboard, maybe both at once?

          +
        • Optional general?: ("Recommended difficulty" | "Include converted beatmaps" | "Subscribed mappers" | "Spotlighted beatmaps" | "Featured Artists")[]

          Various filters to activate

          +
        • Optional genre?: Unspecified | any[any] | Anime | Rock | Pop | Other | Novelty | any[any] | Electronic | Metal | Classical | Folk | Jazz

          Specify the musical genre of the music of the beatmapsets you're searching for (don't specify to get any genre)

          +

          Remarks

          "Any"/0 actually looks up sets that specifically have the Genre "Any" such as 5947, it's excluded because it's counter-intuitive +and near useless (but you can do something like 1-1 if you actually want that!)

          +
        • Optional hide_explicit_content?: true

          Use this to hide all sets that are marked as explicit

          +
        • Optional keywords?: string

          What you'd put in the searchbar, like the name of a beatmapset or a mapper!

          +
        • Optional language?: Unspecified | English | Japanese | Chinese | Instrumental | Korean | French | German | Swedish | Spanish | Italian | Russian | Polish | Other

          Specify the spoken language of the music of the beatmapsets you're searching for (don't specify to get any language)

          +

          Remarks

          "Any"/0 actually looks up sets that specifically have the Language "Any" (and no set has that), it's excluded because it's counter-intuitive +and near useless (but you can do something like 1-1 if you actually want that!)

          +
        • Optional mode?: Rulesets

          Only get sets that have maps that you can play in the ruleset of your choice

          +
        • Optional played?: "Played" | "Unplayed"

          Does the authorized user with osu!supporter have already played those sets, or have they not played them yet?

          +
        • Optional rank_achieved?: ("A" | "Silver SS" | "SS" | "Silver S" | "S" | "B" | "C" | "D")[]

          Does the authorized user with osu!supporter have already achieved certain ranks on those sets?

          +
        • Optional sort?: {
              by: "title" | "ranked" | "artist" | "difficulty" | "rating" | "plays" | "favourites" | "updated";
              in: "desc" | "asc";
          }

          Sort by what, in ascending/descending order

          +
          • by: "title" | "ranked" | "artist" | "difficulty" | "rating" | "plays" | "favourites" | "updated"
          • in: "desc" | "asc"

      Returns Promise<{
          beatmapsets: WithBeatmapPacktags[];
          cursor_string: string | null;
          error: any | null;
          recommended_difficulty: number | null;
          total: number;
      }>

      Relevant Beatmapsets that contain Beatmaps, and a cursor_string to allow you to look for more of the same!

      +

      Remarks

      This does not bypass the current osu!supporter requirement for certain filters

      +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/functions/Changelog.Build.getMultiple.html b/docs/functions/Changelog.Build.getMultiple.html new file mode 100644 index 0000000..3314824 --- /dev/null +++ b/docs/functions/Changelog.Build.getMultiple.html @@ -0,0 +1,7 @@ +getMultiple | osu-api-v2-js
    • Get up to 21 versions/updates/builds!

      +

      Parameters

      • this: API
      • Optional stream: string

        Only get builds from a specific stream

        +
      • Optional range: {
            from?: string;
            to?: string | number;
        }

        Get builds that were released before/after (and including) those builds

        +
        • Optional from?: string

          The name of the build

          +
        • Optional to?: string | number

          The name or the id of the build

          +
      • message_formats: ("html" | "markdown")[] = ...

        changelog_entries will have a message property if markdown, message_html property if html (defaults to both)

        +

      Returns Promise<WithUpdatestreamsChangelogentries[]>

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/functions/Changelog.Build.getOne.html b/docs/functions/Changelog.Build.getOne.html new file mode 100644 index 0000000..c407eab --- /dev/null +++ b/docs/functions/Changelog.Build.getOne.html @@ -0,0 +1,4 @@ +getOne | osu-api-v2-js
    • Get details about the version/update/build of something related to osu!

      +

      Parameters

      • this: API
      • stream: string

        The name of the thing related to osu!, like lazer, web, cuttingedge, beta40, stable40

        +
      • build: string

        The name of the version! Usually something like 2023.1026.0 for lazer, or 20230326 for stable

        +

      Returns Promise<WithChangelogentriesVersions>

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/functions/Changelog.Build.lookup.html b/docs/functions/Changelog.Build.lookup.html new file mode 100644 index 0000000..c412180 --- /dev/null +++ b/docs/functions/Changelog.Build.lookup.html @@ -0,0 +1,4 @@ +lookup | osu-api-v2-js
    • Get details about the version/update/build of something related to osu!

      +

      Parameters

      • this: API
      • changelog: string | number

        A stream name like lazer, a build version like 2023.1026.0, or the id of a build

        +
      • message_formats: ("html" | "markdown")[] = ...

        changelog_entries will have a message property if markdown, message_html property if html (defaults to both)

        +

      Returns Promise<WithChangelogentriesVersions>

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/functions/Changelog.UpdateStream.getAll.html b/docs/functions/Changelog.UpdateStream.getAll.html new file mode 100644 index 0000000..953bc5d --- /dev/null +++ b/docs/functions/Changelog.UpdateStream.getAll.html @@ -0,0 +1,4 @@ +getAll | osu-api-v2-js

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/functions/Chat.Channel.createAnnouncement.html b/docs/functions/Chat.Channel.createAnnouncement.html new file mode 100644 index 0000000..595feb3 --- /dev/null +++ b/docs/functions/Chat.Channel.createAnnouncement.html @@ -0,0 +1,8 @@ +createAnnouncement | osu-api-v2-js
    • Create a new announcement!

      +

      Parameters

      • this: API
      • channel: {
            description: string;
            name: string;
        }

        Details of the channel you're creating

        +
        • description: string
        • name: string
      • user_targets: (number | User)[]

        The people that will receive your message

        +
      • message: string

        The message to send with the announcement

        +

      Returns Promise<Channel>

      The newly created channel!

      +

      Scope

      "chat.write_manage"

      +

      Remarks

      From my understanding, this WILL 403 unless the user is kinda special

      +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/functions/Chat.Channel.createPrivate.html b/docs/functions/Chat.Channel.createPrivate.html new file mode 100644 index 0000000..b2d527e --- /dev/null +++ b/docs/functions/Chat.Channel.createPrivate.html @@ -0,0 +1,5 @@ +createPrivate | osu-api-v2-js
    • Create/Open/Join a private messages chat channel!

      +

      Parameters

      • this: API
      • user_target: number | User

        The other user able to read and send messages in this channel

        +

      Returns Promise<Channel>

      The newly created channel!

      +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/functions/Chat.Channel.getAll.html b/docs/functions/Chat.Channel.getAll.html new file mode 100644 index 0000000..721a45d --- /dev/null +++ b/docs/functions/Chat.Channel.getAll.html @@ -0,0 +1,3 @@ +getAll | osu-api-v2-js

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/functions/Chat.Channel.getOne.html b/docs/functions/Chat.Channel.getOne.html new file mode 100644 index 0000000..e14c47e --- /dev/null +++ b/docs/functions/Chat.Channel.getOne.html @@ -0,0 +1,5 @@ +getOne | osu-api-v2-js
    • Get a ChatChannel, and the users in it if it is a private channel!

      +

      Parameters

      • this: API
      • channel: number | Channel

        The channel in question

        +

      Returns Promise<WithDetails>

      Scope

      "chat.read"

      +

      Remarks

      Will 404 if the user has not joined the channel (use joinChatChannel for that)

      +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/functions/Chat.Channel.joinOne.html b/docs/functions/Chat.Channel.joinOne.html new file mode 100644 index 0000000..17fb808 --- /dev/null +++ b/docs/functions/Chat.Channel.joinOne.html @@ -0,0 +1,5 @@ +joinOne | osu-api-v2-js
    • Join a public or multiplayer ChatChannel, allowing you to interact with it!

      +

      Parameters

      • this: API
      • channel: number | Channel

        The channel you wanna join

        +
      • Optional user: number | User

        The user joining the channel (defaults to the presumed authorized user (api.user))

        +

      Returns Promise<WithDetails>

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/functions/Chat.Channel.leaveOne.html b/docs/functions/Chat.Channel.leaveOne.html new file mode 100644 index 0000000..26acb94 --- /dev/null +++ b/docs/functions/Chat.Channel.leaveOne.html @@ -0,0 +1,5 @@ +leaveOne | osu-api-v2-js
    • Leave/Close a public ChatChannel!

      +

      Parameters

      • this: API
      • channel: number | Channel

        The channel you wanna leave/close

        +
      • Optional user: number | User

        The user leaving/closing the channel (defaults to the presumed authorized user (api.user))

        +

      Returns Promise<void>

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/functions/Chat.Channel.markAsRead.html b/docs/functions/Chat.Channel.markAsRead.html new file mode 100644 index 0000000..dd0062b --- /dev/null +++ b/docs/functions/Chat.Channel.markAsRead.html @@ -0,0 +1,5 @@ +markAsRead | osu-api-v2-js
    • Mark a certain channel as read up to a given message!

      +

      Parameters

      • this: API
      • channel: number | Channel

        The channel in question

        +
      • message: number | Message

        You're marking this and all the messages before it as read!

        +

      Returns Promise<void>

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/functions/Chat.Message.getMultiple.html b/docs/functions/Chat.Message.getMultiple.html new file mode 100644 index 0000000..2ee8ca4 --- /dev/null +++ b/docs/functions/Chat.Message.getMultiple.html @@ -0,0 +1,7 @@ +getMultiple | osu-api-v2-js
    • Get the recent messages of a specific ChatChannel!

      +

      Parameters

      • this: API
      • channel: number | Channel

        The Channel you wanna get the messages from

        +
      • limit: number = 20

        The maximum amount of messages you want to get, up to 50! (defaults to 20)

        +
      • Optional since: number | Message

        Get the messages sent after this message

        +
      • Optional until: number | Message

        Get the messages sent up to but not including this message

        +

      Returns Promise<Message[]>

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/functions/Chat.Message.send.html b/docs/functions/Chat.Message.send.html new file mode 100644 index 0000000..02ca893 --- /dev/null +++ b/docs/functions/Chat.Message.send.html @@ -0,0 +1,7 @@ +send | osu-api-v2-js
    • Send a message in a ChatChannel!

      +

      Parameters

      • this: API
      • channel: number | Channel

        The channel in which you want to send your message

        +
      • message: string

        The message you wanna send

        +
      • is_action: boolean = false

        Is it a command? Like /me dances (defaults to false)

        +

      Returns Promise<Message>

      The newly sent ChatMessage!

      +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/functions/Chat.Message.sendPrivate.html b/docs/functions/Chat.Message.sendPrivate.html new file mode 100644 index 0000000..952727e --- /dev/null +++ b/docs/functions/Chat.Message.sendPrivate.html @@ -0,0 +1,9 @@ +sendPrivate | osu-api-v2-js
    • Send a private message to someone!

      +

      Parameters

      • this: API
      • user_target: number | User

        The User you wanna send your message to!

        +
      • message: string

        The message you wanna send

        +
      • is_action: boolean = false

        Is it a command? Like /me dances (defaults to false)

        +
      • Optional uuid: string

        A client-side message identifier

        +

      Returns Promise<{
          channel: Channel;
          message: Message;
      }>

      The message you sent

      +

      Scope

      "chat.write"

      +

      Remarks

      You don't need to use createChatPrivateChannel before sending a message

      +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/functions/Chat.keepAlive.html b/docs/functions/Chat.keepAlive.html new file mode 100644 index 0000000..4ebac6b --- /dev/null +++ b/docs/functions/Chat.keepAlive.html @@ -0,0 +1,6 @@ +keepAlive | osu-api-v2-js

    Function keepAlive

    • Needs to be done periodically to reset chat activity timeout

      +

      Parameters

      • this: API
      • Optional since: {
            message?: number | Message;
            user_silence?: number | UserSilence;
        }

        UserSilences that are before that will not be returned!

        +

      Returns Promise<UserSilence[]>

      A list of recent silences

      +

      Scope

      "chat.read"

      +

      Remarks

      Every 30 seconds is a good idea

      +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/functions/Comment.getMultiple.html b/docs/functions/Comment.getMultiple.html new file mode 100644 index 0000000..c798af0 --- /dev/null +++ b/docs/functions/Comment.getMultiple.html @@ -0,0 +1,5 @@ +getMultiple | osu-api-v2-js
    • Get comments that meet any of your requirements!

      +

      Parameters

      • this: API
      • Optional from: {
            id: number;
            type: "beatmapset" | "build" | "news_post";
        }

        From where are the comments coming from? Maybe a beatmapset, but then, which beatmapset?

        +
        • id: number
        • type: "beatmapset" | "build" | "news_post"
      • Optional parent: number | Comment

        The comments are replying to which comment? Make the id 0 to filter out replies (and only get top level comments)

        +
      • Optional sort: {
            after?: number | Comment;
            cursor?: null | {
                created_at: Date;
                id: number;
            };
            type?: "new" | "top" | "old";
        }

        Should the comments be sorted by votes? Should they be from after a certain date? Maybe you can give a cursor?

        +
        • Optional after?: number | Comment
        • Optional cursor?: null | {
              created_at: Date;
              id: number;
          }
        • Optional type?: "new" | "top" | "old"

      Returns Promise<WithTotalToplevelcount>

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/functions/Comment.getOne.html b/docs/functions/Comment.getOne.html new file mode 100644 index 0000000..5350ac4 --- /dev/null +++ b/docs/functions/Comment.getOne.html @@ -0,0 +1,3 @@ +getOne | osu-api-v2-js
    • Get a specific comment by using its id!

      +

      Parameters

      • this: API
      • comment: number | Comment

        The comment in question

        +

      Returns Promise<Bundle>

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/functions/Event.getMultiple.html b/docs/functions/Event.getMultiple.html new file mode 100644 index 0000000..95c84b4 --- /dev/null +++ b/docs/functions/Event.getMultiple.html @@ -0,0 +1,4 @@ +getMultiple | osu-api-v2-js

    Function getMultiple

    • Get everything note-worthy that happened on osu! recently!

      +

      Parameters

      • this: API
      • sort: "id_desc" | "id_asc" = "id_desc"

        "id_asc" to have the oldest recent event first, "id_desc" to have the newest instead (defaults to id_desc)

        +
      • Optional cursor_string: string

        Use a response's cursor_string with the same parameters to get the next "page" of results, so posts in this instance!

        +

      Returns Promise<{
          cursor_string: string | null;
          events: Event.Any[];
      }>

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/functions/Forum.Post.edit.html b/docs/functions/Forum.Post.edit.html new file mode 100644 index 0000000..9e92c57 --- /dev/null +++ b/docs/functions/Forum.Post.edit.html @@ -0,0 +1,6 @@ +edit | osu-api-v2-js
    • Edit a ForumPost! Note that it can be the initial one of a ForumTopic!

      +

      Parameters

      • this: API
      • post: number | Forum.Post

        The post or the id of the post in question

        +
      • new_text: string

        The new content of the post (replaces the old content)

        +

      Returns Promise<Forum.Post>

      The edited ForumPost

      +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/functions/Forum.Topic.create.html b/docs/functions/Forum.Topic.create.html new file mode 100644 index 0000000..2fb0d5d --- /dev/null +++ b/docs/functions/Forum.Topic.create.html @@ -0,0 +1,14 @@ +create | osu-api-v2-js
    • Create a new ForumTopic in the forum of your choice!

      +

      Parameters

      • this: API
      • forum_id: number

        The id of the forum you're creating your topic in

        +
      • title: string

        The topic's title

        +
      • text: string

        The first post's content/message

        +
      • Optional poll: {
            hide_results?: boolean;
            length_days: number;
            max_options?: number;
            options: string[];
            title: string;
            vote_change?: boolean;
        }

        If you want to make a poll, specify the parameters of that poll!

        +
        • Optional hide_results?: boolean

          Should the results of the poll be hidden while the voting period is still active? (defaults to false)

          +
        • length_days: number

          Length of voting period in days, 0 means forever

          +
        • Optional max_options?: number

          The maximum amount of votes per user! (defaults to 1)

          +
        • options: string[]

          The things the users can vote for

          +
        • title: string
        • Optional vote_change?: boolean

          Do you allow users to change their vote? (defaults to false)

          +

      Returns Promise<{
          post: Forum.Post;
          topic: Topic;
      }>

      An object with the topic you've made, and its first initial post (which uses your text)

      +

      Scope

      "forum.write"

      +

      Remarks

      Some users may not be allowed to do that, such as newly registered users, so this can 403 even with the right scopes

      +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/functions/Forum.Topic.editTitle.html b/docs/functions/Forum.Topic.editTitle.html new file mode 100644 index 0000000..8473c1a --- /dev/null +++ b/docs/functions/Forum.Topic.editTitle.html @@ -0,0 +1,7 @@ +editTitle | osu-api-v2-js
    • Edit the title of a Forum.Topic!

      +

      Parameters

      • this: API
      • topic: number | Topic

        The topic or the id of the topic in question

        +
      • new_title: string

        The new title of the topic

        +

      Returns Promise<Topic>

      The edited ForumTopic

      +

      Scope

      "forum.write"

      +

      Remarks

      Use editForumPost if you wanna edit the post at the top of the topic

      +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/functions/Forum.Topic.reply.html b/docs/functions/Forum.Topic.reply.html new file mode 100644 index 0000000..7bc0501 --- /dev/null +++ b/docs/functions/Forum.Topic.reply.html @@ -0,0 +1,6 @@ +reply | osu-api-v2-js
    • Make and send a Forum.Post in a Forum.Topic!

      +

      Parameters

      • this: API
      • topic: number | Topic

        The topic or the id of the topic you're making your reply in

        +
      • text: string

        Your reply! Your message!

        +

      Returns Promise<Forum.Post>

      The reply you've made, as a Forum.Post!

      +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/functions/Forum.getTopicAndPosts.html b/docs/functions/Forum.getTopicAndPosts.html new file mode 100644 index 0000000..36b57f5 --- /dev/null +++ b/docs/functions/Forum.getTopicAndPosts.html @@ -0,0 +1,9 @@ +getTopicAndPosts | osu-api-v2-js

    Function getTopicAndPosts

    • Get a forum topic, as well as its main post (content) and the posts that were sent in it!

      +

      Parameters

      • this: API
      • topic: number | Topic

        An object with the id of the topic in question

        +
      • Optional config: {
            cursor_string?: string;
            first_post?: number | Forum.Post;
            limit?: number;
            sort?: "id_desc" | "id_asc";
        }

        How many results maximum, how to sort them, etc...

        +
        • Optional cursor_string?: string

          Use a response's cursor_string with the same parameters to get the next "page" of results, so posts in this instance!

          +
        • Optional first_post?: number | Forum.Post

          The id (or the post itself) of the first post to be returned in posts (irrelevant if using a cursor_string)

          +
        • Optional limit?: number

          How many posts maximum, up to 50

          +
        • Optional sort?: "id_desc" | "id_asc"

          "id_asc" to have the oldest post at the beginning of the posts array, "id_desc" to have the newest instead

          +

      Returns Promise<{
          cursor_string: string | null;
          posts: Forum.Post[];
          topic: Topic;
      }>

      Remarks

      The oldest post of a topic is the text of a topic

      +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/functions/Home.Search.getUsers.html b/docs/functions/Home.Search.getUsers.html new file mode 100644 index 0000000..5ef5330 --- /dev/null +++ b/docs/functions/Home.Search.getUsers.html @@ -0,0 +1,4 @@ +getUsers | osu-api-v2-js
    • Look for a user like you would on the website!

      +

      Parameters

      • this: API
      • query: string

        What you would put in the searchbar

        +
      • page: number = 1

        You normally get the first 20 results, but if page is 2, you'd get results 21 to 40 instead for example! (defaults to 1)

        +

      Returns Promise<{
          data: User[];
          total: number;
      }>

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/functions/Home.Search.getWikiPages.html b/docs/functions/Home.Search.getWikiPages.html new file mode 100644 index 0000000..9f92484 --- /dev/null +++ b/docs/functions/Home.Search.getWikiPages.html @@ -0,0 +1,4 @@ +getWikiPages | osu-api-v2-js
    • Look for a wiki page like you would on the website!

      +

      Parameters

      • this: API
      • query: string

        What you would put in the searchbar

        +
      • page: number = 1

        You normally get the first 50 results, but if page is 2, you'd get results 51 to 100 instead for example! (defaults to 1)

        +

      Returns Promise<{
          data: WikiPage[];
          total: number;
      }>

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/functions/Multiplayer.Match.getMultiple.html b/docs/functions/Multiplayer.Match.getMultiple.html new file mode 100644 index 0000000..00f5651 --- /dev/null +++ b/docs/functions/Multiplayer.Match.getMultiple.html @@ -0,0 +1,8 @@ +getMultiple | osu-api-v2-js
    • Get the info about several matches!

      +

      Parameters

      • this: API
      • Optional query: {
            first_match_in_array?: number | Info;
            limit?: number;
            sort?: "id_desc" | "id_asc";
        }

        The id of the first match of the array, and the sorting and size of said array

        +
        • Optional first_match_in_array?: number | Info

          Which match should be featured at index 0 of the returned array? Will get one with a similar id if it is unavailable

          +

          Remarks

          You can use this argument differently to get all matches before/after (depending of query.sort) a certain match, +by adding +1/-1 to its id! So if you want all matches after match_id 10 with sorting is_desc, just have this argument be 10 + 1, or 11!

          +
        • Optional limit?: number

          The maximum amount of elements returned in the array (defaults to 50)

          +
        • Optional sort?: "id_desc" | "id_asc"

          "id_desc" has the biggest id (most recent start_time) at the beginning of the array, "id_asc" is the opposite (defaults to id_desc)

          +

      Returns Promise<Info[]>

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/functions/Multiplayer.Match.getOne.html b/docs/functions/Multiplayer.Match.getOne.html new file mode 100644 index 0000000..e479ea7 --- /dev/null +++ b/docs/functions/Multiplayer.Match.getOne.html @@ -0,0 +1,3 @@ +getOne | osu-api-v2-js
    • Get data of a multiplayer lobby from the stable (non-lazer) client that have URLs with community/matches or mp

      +

      Parameters

      • this: API
      • match: number | Info

        The id of a match can be found at the end of its URL

        +

      Returns Promise<Match>

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/functions/Multiplayer.Room.PlaylistItem.getScores.html b/docs/functions/Multiplayer.Room.PlaylistItem.getScores.html new file mode 100644 index 0000000..a70f236 --- /dev/null +++ b/docs/functions/Multiplayer.Room.PlaylistItem.getScores.html @@ -0,0 +1,8 @@ +getScores | osu-api-v2-js
    • Get the scores on a specific item of a room!

      +

      Parameters

      • this: API
      • item: PlaylistItem | {
            id: number;
            room_id: number;
        }

        An object with the id of the item in question, as well as the id of the room

        +
      • limit: number = 50

        How many scores maximum? Defaults to 50, the maximum the API will return

        +
      • sort: "score_asc" | "score_desc" = "score_desc"

        Sort by scores, ascending or descending? Defaults to descending

        +
      • Optional cursor_string: string

        Use a Multiplayer.Scores' params and cursor_string to get the next page (scores 51 to 100 for example)

        +

      Returns Promise<Scores>

      Remarks

      (2024-03-04) This may not work for rooms from before March 5th 2024, use at your own risk +https://github.com/ppy/osu-web/issues/10725

      +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/functions/Multiplayer.Room.getLeaderboard.html b/docs/functions/Multiplayer.Room.getLeaderboard.html new file mode 100644 index 0000000..e0d6fe4 --- /dev/null +++ b/docs/functions/Multiplayer.Room.getLeaderboard.html @@ -0,0 +1,4 @@ +getLeaderboard | osu-api-v2-js
    • Get the room stats of all the users of that room!

      +

      Parameters

      • this: API
      • room: number | Room

        The room or the id of the room in question

        +

      Returns Promise<Leader[]>

      Scope

      "public"

      +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/functions/Multiplayer.Room.getMultiple.html b/docs/functions/Multiplayer.Room.getMultiple.html new file mode 100644 index 0000000..2738e43 --- /dev/null +++ b/docs/functions/Multiplayer.Room.getMultiple.html @@ -0,0 +1,7 @@ +getMultiple | osu-api-v2-js
    • Get playlists/realtime rooms that are active, that have ended, that the user participated in, that the user made, or just simply any room!

      +

      Parameters

      • this: API
      • type: "realtime" | "playlists"

        Whether the multiplayer rooms are in playlist format (like current spotlights) or realtime

        +
      • mode: "all" | "active" | "ended" | "participated" | "owned"

        The state of the room, or the relation of the authorized user with the room

        +
      • limit: number = 10

        The maximum amount of rooms to return, defaults to 10

        +
      • sort: "ended" | "created" = "created"

        Sort (where most recent is first) by creation date or end date, defaults to the creation date

        +

      Returns Promise<Room[]>

      Scope

      "public"

      +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/functions/Multiplayer.Room.getOne.html b/docs/functions/Multiplayer.Room.getOne.html new file mode 100644 index 0000000..c8275e1 --- /dev/null +++ b/docs/functions/Multiplayer.Room.getOne.html @@ -0,0 +1,3 @@ +getOne | osu-api-v2-js
    • Get data about a lazer multiplayer room (realtime or playlists)!

      +

      Parameters

      • this: API
      • room: number | Room

        The room or the id of the room, can be found at the end of its URL (after /multiplayer/rooms/)

        +

      Returns Promise<Room>

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/functions/NewsPost.getMultiple.html b/docs/functions/NewsPost.getMultiple.html new file mode 100644 index 0000000..09025a2 --- /dev/null +++ b/docs/functions/NewsPost.getMultiple.html @@ -0,0 +1,4 @@ +getMultiple | osu-api-v2-js
    • Get all the NewsPosts of a specific year!

      +

      Parameters

      • this: API
      • Optional year: number

        The year the posts were made (defaults to current year)

        +

      Returns Promise<NewsPost[]>

      Remarks

      If the specified year is invalid/has no news, it fallbacks to the default year

      +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/functions/NewsPost.getOne.html b/docs/functions/NewsPost.getOne.html new file mode 100644 index 0000000..d6d8226 --- /dev/null +++ b/docs/functions/NewsPost.getOne.html @@ -0,0 +1,3 @@ +getOne | osu-api-v2-js

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/functions/Ranking.getCountry.html b/docs/functions/Ranking.getCountry.html new file mode 100644 index 0000000..25612ca --- /dev/null +++ b/docs/functions/Ranking.getCountry.html @@ -0,0 +1,4 @@ +getCountry | osu-api-v2-js
    • Get the top countries of a specific ruleset!

      +

      Parameters

      • this: API
      • ruleset: Rulesets

        On which Ruleset should the countries be compared?

        +
      • page: number = 1

        Imagine the array you get as a page, it can only have a maximum of 50 countries, while 50 others may be on the next one (defaults to 1)

        +

      Returns Promise<Country>

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/functions/Ranking.getKudosu.html b/docs/functions/Ranking.getKudosu.html new file mode 100644 index 0000000..fedeeb7 --- /dev/null +++ b/docs/functions/Ranking.getKudosu.html @@ -0,0 +1,2 @@ +getKudosu | osu-api-v2-js

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/functions/Ranking.getSpotlight.html b/docs/functions/Ranking.getSpotlight.html new file mode 100644 index 0000000..fbacd24 --- /dev/null +++ b/docs/functions/Ranking.getSpotlight.html @@ -0,0 +1,5 @@ +getSpotlight | osu-api-v2-js
    • Get the rankings of a spotlight from 2009 to 2020 on a specific ruleset!

      +

      Parameters

      • this: API
      • ruleset: Rulesets

        Each spotlight has a different ranking (and often maps) depending on the ruleset

        +
      • spotlight: number | Spotlight

        The spotlight in question

        +
      • filter: "all" | "friends" = "all"

        What kind of players do you want to see? Keep in mind friends has no effect if no authorized user (defaults to all)

        +

      Returns Promise<Ranking.Spotlight>

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/functions/Ranking.getUser.html b/docs/functions/Ranking.getUser.html new file mode 100644 index 0000000..1ec378f --- /dev/null +++ b/docs/functions/Ranking.getUser.html @@ -0,0 +1,9 @@ +getUser | osu-api-v2-js
    • Get the top players of the game, with some filters!

      +

      Parameters

      • this: API
      • ruleset: Rulesets

        Self-explanatory, is also known as "Gamemode"

        +
      • type: "performance" | "score"

        Rank players by their performance points or by their ranked score?

        +
      • Optional config: {
            country?: string;
            filter?: "all" | "friends";
            page?: number;
            variant?: "4k" | "7k";
        }

        Specify which page, country, filter out non-friends...

        +
        • Optional country?: string

          Only get players from a specific country, using its ISO 3166-1 alpha-2 country code! (France would be FR, United States US)

          +
        • Optional filter?: "all" | "friends"

          What kind of players do you want to see? Keep in mind friends has no effect if no authorized user

          +
        • Optional page?: number

          Imagine the array you get as a page, it can only have a maximum of 50 players, while 50 others may be on the next one

          +
        • Optional variant?: "4k" | "7k"

          If type is performance and ruleset is mania, choose between 4k and 7k!

          +

      Returns Promise<Ranking.User>

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/functions/Score.getReplay.html b/docs/functions/Score.getReplay.html new file mode 100644 index 0000000..99d3287 --- /dev/null +++ b/docs/functions/Score.getReplay.html @@ -0,0 +1,5 @@ +getReplay | osu-api-v2-js

    Function getReplay

    • Get the replay for a score!

      +

      Parameters

      • this: API
      • score: number | Score

        The score that has created the replay

        +

      Returns Promise<string>

      The correctly encoded content of what would be a replay file (you can just fs.writeFileSync with it!)

      +

      Scope

      "public"

      +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/functions/Spotlight.getAll.html b/docs/functions/Spotlight.getAll.html new file mode 100644 index 0000000..c410c32 --- /dev/null +++ b/docs/functions/Spotlight.getAll.html @@ -0,0 +1,4 @@ +getAll | osu-api-v2-js

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/functions/User.getBeatmaps.html b/docs/functions/User.getBeatmaps.html new file mode 100644 index 0000000..2538a41 --- /dev/null +++ b/docs/functions/User.getBeatmaps.html @@ -0,0 +1,5 @@ +getBeatmaps | osu-api-v2-js

    Function getBeatmaps

    • Get beatmaps favourited or made by a user!

      +

      Parameters

      • this: API
      • user: number | User

        The user in question

        +
      • type: "pending" | "favourite" | "graveyard" | "guest" | "loved" | "nominated" | "ranked"

        The relation between the user and the beatmaps

        +
      • Optional config: User.Config

        Array limit & offset

        +

      Returns Promise<WithBeatmap[]>

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/functions/User.getFriends.html b/docs/functions/User.getFriends.html new file mode 100644 index 0000000..70acd4b --- /dev/null +++ b/docs/functions/User.getFriends.html @@ -0,0 +1,3 @@ +getFriends | osu-api-v2-js

    Function getFriends

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/functions/User.getKudosu.html b/docs/functions/User.getKudosu.html new file mode 100644 index 0000000..866dfdf --- /dev/null +++ b/docs/functions/User.getKudosu.html @@ -0,0 +1,4 @@ +getKudosu | osu-api-v2-js

    Function getKudosu

    • Get data about the activity of a user kudosu-wise!

      +

      Parameters

      • this: API
      • user: number | User

        The user in question

        +
      • Optional config: User.Config

        Array limit & offset

        +

      Returns Promise<KudosuHistory[]>

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/functions/User.getMostPlayed.html b/docs/functions/User.getMostPlayed.html new file mode 100644 index 0000000..d1ad9f4 --- /dev/null +++ b/docs/functions/User.getMostPlayed.html @@ -0,0 +1,4 @@ +getMostPlayed | osu-api-v2-js

    Function getMostPlayed

    • Get the beatmaps most played by a user!

      +

      Parameters

      • this: API
      • user: number | User

        The user who played the beatmaps

        +
      • Optional config: User.Config

        Array limit & offset

        +

      Returns Promise<Playcount[]>

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/functions/User.getMultiple.html b/docs/functions/User.getMultiple.html new file mode 100644 index 0000000..d547710 --- /dev/null +++ b/docs/functions/User.getMultiple.html @@ -0,0 +1,3 @@ +getMultiple | osu-api-v2-js

    Function getMultiple

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/functions/User.getOne.html b/docs/functions/User.getOne.html new file mode 100644 index 0000000..1ecef44 --- /dev/null +++ b/docs/functions/User.getOne.html @@ -0,0 +1,4 @@ +getOne | osu-api-v2-js
    • Get extensive user data about whoever you want!

      +

      Parameters

      • this: API
      • user: string | number | User

        A user id, a username or a User object!

        +
      • Optional ruleset: Rulesets

        The data should be relevant to which ruleset? (defaults to user's default Ruleset)

        +

      Returns Promise<User.Extended>

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/functions/User.getRecentActivity.html b/docs/functions/User.getRecentActivity.html new file mode 100644 index 0000000..cf71c60 --- /dev/null +++ b/docs/functions/User.getRecentActivity.html @@ -0,0 +1,4 @@ +getRecentActivity | osu-api-v2-js

    Function getRecentActivity

    • Get an array of Events of different types that relate to a user's activity during the last 31 days! (or 100 activities, whatever comes first)

      +

      Parameters

      • this: API
      • user: number | User

        The user in question

        +
      • Optional config: User.Config

        Array limit & offset

        +

      Returns Promise<AnyRecentActivity[]>

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/functions/User.getResourceOwner.html b/docs/functions/User.getResourceOwner.html new file mode 100644 index 0000000..5ce27c6 --- /dev/null +++ b/docs/functions/User.getResourceOwner.html @@ -0,0 +1,4 @@ +getResourceOwner | osu-api-v2-js

    Function getResourceOwner

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/functions/User.getScores.html b/docs/functions/User.getScores.html new file mode 100644 index 0000000..70ade0d --- /dev/null +++ b/docs/functions/User.getScores.html @@ -0,0 +1,7 @@ +getScores | osu-api-v2-js

    Function getScores

    • Get "notable" scores from a user

      +

      Parameters

      • this: API
      • user: number | User

        The user who set the scores

        +
      • type: "best" | "firsts" | "recent"

        Do you want scores: in the user's top 100, that are top 1 on a beatmap, that have been recently set?

        +
      • Optional ruleset: Rulesets

        The Ruleset the scores were made in (defaults to user's default Ruleset)

        +
      • include: {
            fails?: boolean;
            lazer?: boolean;
        } = ...

        Do you also want lazer scores and failed scores? (defaults to true for lazer & false for fails)

        +
        • Optional fails?: boolean
        • Optional lazer?: boolean
      • Optional config: User.Config

        Array limit & offset

        +

      Returns Promise<WithUserBeatmapBeatmapset[]>

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/functions/WikiPage.getOne.html b/docs/functions/WikiPage.getOne.html new file mode 100644 index 0000000..68242bc --- /dev/null +++ b/docs/functions/WikiPage.getOne.html @@ -0,0 +1,5 @@ +getOne | osu-api-v2-js
    • Get a wiki page!

      +

      Parameters

      • this: API
      • path: string

        What's in the page's URL after https://osu.ppy.sh/wiki/ (so the title, after the subtitle if there is a subtitle) +(An example for https://osu.ppy.sh/wiki/en/Game_mode/osu! would be Game_mode/osu!)

        +
      • locale: string = "en"

        The BCP 47 language (sub)tag lowercase (for example, for a french WikiPage, use "fr") (defaults to en)

        +

      Returns Promise<WikiPage>

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/functions/generateAuthorizationURL.html b/docs/functions/generateAuthorizationURL.html index e3836e8..3bfe676 100644 --- a/docs/functions/generateAuthorizationURL.html +++ b/docs/functions/generateAuthorizationURL.html @@ -2,6 +2,6 @@

    Parameters

    • client_id: number
    • redirect_uri: string

      The specified Application Callback URL, aka where the user will be redirected upon clicking the button to authorize

    • scopes: Scope[]

      What you want to do with/as the user

      -
    • server: string = "https://osu.ppy.sh"

      (defaults to https://osu.ppy.sh) The API server

      +
    • server: string = "https://osu.ppy.sh"

      The API server (defaults to https://osu.ppy.sh, leave as is if you don't know exactly what you're doing)

    Returns string

    The link people should click on

    -

    Generated using TypeDoc

    \ No newline at end of file +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/hierarchy.html b/docs/hierarchy.html index b903449..8b69b5a 100644 --- a/docs/hierarchy.html +++ b/docs/hierarchy.html @@ -1 +1 @@ -osu-api-v2-js

    Generated using TypeDoc

    \ No newline at end of file +osu-api-v2-js

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/index.html b/docs/index.html index 850b5ea..f9498fe 100644 --- a/docs/index.html +++ b/docs/index.html @@ -1,11 +1,11 @@ osu-api-v2-js

    osu-api-v2-js

    osu-api-v2-js

    osu-api-v2-js is a JavaScript & TypeScript package that helps you interact with osu!api (v2).

    -

    It is currently a bit unstable as it's under development, but you can find documentation on osu-v2.taevas.xyz if needed!

    +

    You can find this package's documentation on osu-v2.taevas.xyz if needed!

    How to install and get started

    To install the package, use a command from your package manager:

    npm i osu-api-v2-js # if using npm
    yarn add osu-api-v2-js # if using yarn
    pnpm add osu-api-v2-js # if using pnpm
    bun a osu-api-v2-js # if using bun

    You will want to create your own OAuth application: https://osu.ppy.sh/home/account/edit#oauth To use (import) the package in your project and start interacting with the API, you may do something like that:

    -
    // TypeScript
    import * as osu from "osu-api-v2-js"

    async function logUserTopPlayBeatmap(username: string) {
    // Because of how the API server works, it's more convenient to use `osu.API.createAsync()` instead of `new osu.API()`!
    // In a proper application, you'd use this function as soon as the app starts so you can use that object everywhere
    // (or if it acts as a user, you'd use this function at the end of the authorization flow)
    const api = await osu.API.createAsync({id: "<client_id>", secret: "<client_secret>"})

    const user = await api.getUser({username}) // We need to get the id of the user in order to request what we want
    const score = (await api.getUserScores(user, "best", 1, osu.Rulesets.osu))[0] // Specifying the Ruleset is optional
    const beatmapDifficulty = await api.getBeatmapDifficultyAttributesOsu(score.beatmap, score.mods) // Specifying the mods so the SR is adapted to them

    const x = `${score.beatmapset.artist} - ${score.beatmapset.title} [${score.beatmap.version}]`
    const y = `+${score.mods.toString()} (${beatmapDifficulty.star_rating.toFixed(2)}*)`
    console.log(`${username}'s top play is on: ${x} ${y}`)
    // Doomsday fanboy's top play is on: xi - FREEDOM DiVE [FOUR DIMENSIONS] +HR (8.07*)
    }

    logUserTopPlayBeatmap("Doomsday fanboy") +
    // TypeScript
    import * as osu from "osu-api-v2-js"

    async function logUserTopPlayBeatmap(username: string) {
    // It's more convenient to use `osu.API.createAsync()` instead of `new osu.API()` as it doesn't require you to directly provide an access_token!
    // In a proper application, you'd use this function as soon as the app starts so you can use that object everywhere
    // (or if it acts as a user, you'd use this function at the end of the authorization flow)
    const api = await osu.API.createAsync({id: "<client_id>", secret: "<client_secret>"})

    const user = await api.getUser(username) // We need to get the id of the user in order to request what we want
    const score = (await api.getUserScores(user, "best", osu.Rulesets.osu, {lazer: false}, {limit: 1}))[0] // Specifying the Ruleset is optional
    const beatmapDifficulty = await api.getBeatmapDifficultyAttributesOsu(score.beatmap, score.mods) // Specifying the mods so the SR is adapted to them

    const x = `${score.beatmapset.artist} - ${score.beatmapset.title} [${score.beatmap.version}]`
    const y = `+${score.mods.toString()} (${beatmapDifficulty.star_rating.toFixed(2)}*)`
    console.log(`${username}'s top play is on: ${x} ${y}`)
    // Doomsday fanboy's top play is on: Yamajet feat. Hiura Masako - Sunglow [Harmony] +DT (8.72*)
    }

    logUserTopPlayBeatmap("Doomsday fanboy")

    Authorization flow

    A simple guide on how to do extra fancy stuff

    The part where the user says they're okay with using your application

    If your application is meant to act on behalf of a user after they've clicked on a button to say they consent to your application identifying them and reading public data on their behalf and some other stuff maybe, then things will work differently

    @@ -20,12 +20,17 @@

    The part where you make it so your application works without the user saying okay every 2 minutes

    Congrats on making your api object! Now you should do something in order to not lose it, or not need a new one in order to request more data!

    Do note that your api object has lots of practical properties: user allows you to know which user it acts on behalf of, expires allows you to know when your requests with your current access_token will fail, and refresh_token is your key to getting a new access_token without asking the user again! -Although, you should not need to access them often, because your api object has a function to use that refresh token which you can call at any given time, and it will call it itself if, upon requesting something, it notices the date the access_token expires is in the past!

    +Although, you should not need to access them often, because your api object has a function to use that refresh token which you can call at any given time, and by default, the object will call that function on its own right before the expiration date or when a request seems to fail because of the access_token being invalid! (those are features you can deactivate if needed)

    Your refresh_token can actually also expire at a (purposefully) unknown time, so depending of how your application works, you could use it at some point around the date of expiration, or you could throw away your api object while waiting for a user to start the authorization flow again

    Reading all incoming messages

    // TypeScript
    import * as osu from "osu-api-v2-js"
    import promptSync from "prompt-sync"

    const prompt = promptSync({sigint: true})

    const id = "<client_id>"
    const secret = "<client_secret>"
    const redirect_uri = "<application_callback_url>"

    async function readChat() {
    // Somehow get the code so the application can read the messages as your osu! user
    const url = osu.generateAuthorizationURL(id, redirect_uri, ["public", "chat.read"]) // "chat.read" is 100% needed in our case
    const code = prompt(`Paste the "code" in the URL you're redicted to by accessing: ${url}\n\n`)
    const api = await osu.API.createAsync({id, secret}, {code, redirect_uri}, "errors")

    // Get a WebSocket object to interact with and get messages from
    const socket = api.generateWebSocket()

    // Tell the server you want to know whenever there's are chat messages
    socket.on("open", () => {
    socket.send(osu.WebSocket.Command.chatStart) // osu.WebSocket.Command.chatStart is simply JSON.stringify({event: "chat.start"}) but easier to remember
    api.keepChatAlive()
    setInterval(() => api.keepChatAlive(), 30 * 1000) // Tell the server every 30 seconds that you're still listening to the incoming messages
    })

    // Listen for chat messages (and other stuff)
    socket.on("message", (m: MessageEvent) => { // Mind you, "message" doesn't mean "chat message" here, it's more like a raw event
    const event: osu.WebSocket.Event.Any = JSON.parse(m.toString())
    if (event.event === "chat.message.new") { // Filter out things that aren't new chat messages and get type safety
    const message = event.data.messages.map((message) => message.content).join(" | ")
    const user = event.data.users.map((user) => user.username).join(" | ")
    console.log(`${user}: ${message}`)
    }
    })
    }

    readChat()

    Above is the code I've written to listen to incoming chat messages by using the API's WebSocket!

    Using the WebSocket namespace this package provides, it's relatively easy to send commands (anything under osu.WebSocket.Command) and you can have 100% type safety with events (anything under osu.Websocket.Event) simply by checking what the event property is! With that, anything in the data property is yours to play with!

    +

    Calling the functions, but literally

    This package's functions can be accessed both through the api object and through namespaces! It essentially means that for convenience's sake, there are two ways to do anything:

    +
    // Obtaining a match, assuming an `api` object already exists and everything from the package is imported as `osu`
    const match_1 = await api.getMatch(103845156) // through the api object
    const match_2 = await osu.Multiplayer.Match.getOne.call(api, 103845156) // through the namespaces
    // `match_1` and `match_2` are the same, because they're essentially using the same function!

    // The same, but for obtaining multiple lazer updates
    const builds_1 = await api.getChangelogBuilds("lazer")
    const builds_2 = await osu.Changelog.Build.getMultiple.call(api, "lazer")
    // `build_1` and `build_2` are also the same! +
    +

    As you may have noticed, when calling the functions through the namespaces, instead of doing something like getOne(), we instead do getOne.call() and use the call() method in order to provide a this value; the api object!

    +

    Of course, using the apply() method would also work, so just do things the way you prefer or the way that is more intuitive to you!

    Implemented endpoints

    Beatmap Packs

    • GET /beatmaps/packs -> getBeatmapPacks()
    • GET /beatmaps/packs/{pack} -> getBeatmapPack()
    • @@ -118,7 +123,5 @@

      Misc Undocumented Stuff

      • GET /seasonal-backgrounds -> getSeasonalBackgrounds()
      • GET /scores/{score}/download -> getReplay()
      • -
      • GET /scores/{rulesetOrScore}/{score}/download
      • -
      • GET /scores/{rulesetOrScore}/{score?}
      -

    Generated using TypeDoc

    \ No newline at end of file +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Beatmap-1.html b/docs/interfaces/Beatmap-1.html index 38734ae..c4d154e 100644 --- a/docs/interfaces/Beatmap-1.html +++ b/docs/interfaces/Beatmap-1.html @@ -1,4 +1,4 @@ -Beatmap | osu-api-v2-js

    Interface Beatmap

    interface Beatmap {
        beatmapset_id: number;
        difficulty_rating: number;
        id: number;
        mode: "osu" | "taiko" | "fruits" | "mania";
        status: string;
        total_length: number;
        user_id: number;
        version: string;
    }

    Hierarchy (view full)

    Properties

    beatmapset_id +Beatmap | osu-api-v2-js

    Interface Beatmap

    interface Beatmap {
        beatmapset_id: number;
        difficulty_rating: number;
        id: number;
        mode: "osu" | "taiko" | "fruits" | "mania";
        status: string;
        total_length: number;
        user_id: number;
        version: string;
    }

    Hierarchy (view full)

    Properties

    beatmapset_id: number
    difficulty_rating: number
    id: number
    mode: "osu" | "taiko" | "fruits" | "mania"
    status: string
    total_length: number
    user_id: number
    version: string

    Generated using TypeDoc

    \ No newline at end of file +

    Properties

    beatmapset_id: number
    difficulty_rating: number
    id: number
    mode: "osu" | "taiko" | "fruits" | "mania"
    status: string
    total_length: number
    user_id: number
    version: string

    The name of the difficulty, maybe something like "Someone's Insane"

    +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Beatmap.Config.html b/docs/interfaces/Beatmap.Config.html new file mode 100644 index 0000000..496b5cf --- /dev/null +++ b/docs/interfaces/Beatmap.Config.html @@ -0,0 +1,11 @@ +Config | osu-api-v2-js

    An interface to tell the API what kind of scores should be in an array returned by a function

    +

    Remarks

    Please note that some properties will be ignored by certain functions, check this in case of doubt: https://osu.ppy.sh/docs/index.html#beatmaps

    +
    interface Config {
        legacy_only?: boolean;
        mods?: string[];
        ruleset?: Rulesets;
        type?: string;
    }

    Properties

    legacy_only?: boolean

    Exclude lazer scores? (defaults to false)

    +
    mods?: string[]

    The Mods used to make the score, you can simply use ["NM"] to filter out scores with mods (defaults to any mods, no scores filtered)

    +
    ruleset?: Rulesets

    The Ruleset used to make the score, useful if it was made on a convert

    +
    type?: string

    "Beatmap score ranking type", whatever that means...

    +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Beatmap.DifficultyAttributes-1.html b/docs/interfaces/Beatmap.DifficultyAttributes-1.html index bbc3a79..622671b 100644 --- a/docs/interfaces/Beatmap.DifficultyAttributes-1.html +++ b/docs/interfaces/Beatmap.DifficultyAttributes-1.html @@ -1,4 +1,4 @@ -DifficultyAttributes | osu-api-v2-js

    Interface DifficultyAttributes

    interface DifficultyAttributes {
        max_combo: number;
        star_rating: number;
    }

    Hierarchy (view full)

    Properties

    max_combo +DifficultyAttributes | osu-api-v2-js

    Interface DifficultyAttributes

    interface DifficultyAttributes {
        max_combo: number;
        star_rating: number;
    }

    Hierarchy (view full)

    Properties

    max_combo: number
    star_rating: number

    Generated using TypeDoc

    \ No newline at end of file +

    Properties

    max_combo: number
    star_rating: number

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Beatmap.DifficultyAttributes.Fruits.html b/docs/interfaces/Beatmap.DifficultyAttributes.Fruits.html index af890a8..26bddcb 100644 --- a/docs/interfaces/Beatmap.DifficultyAttributes.Fruits.html +++ b/docs/interfaces/Beatmap.DifficultyAttributes.Fruits.html @@ -1,5 +1,5 @@ -Fruits | osu-api-v2-js
    interface Fruits {
        approach_rate: number;
        max_combo: number;
        star_rating: number;
    }

    Hierarchy (view full)

    Properties

    approach_rate +Fruits | osu-api-v2-js
    interface Fruits {
        approach_rate: number;
        max_combo: number;
        star_rating: number;
    }

    Hierarchy (view full)

    Properties

    approach_rate: number
    max_combo: number
    star_rating: number

    Generated using TypeDoc

    \ No newline at end of file +

    Properties

    approach_rate: number
    max_combo: number
    star_rating: number

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Beatmap.DifficultyAttributes.Mania.html b/docs/interfaces/Beatmap.DifficultyAttributes.Mania.html index b0d998b..c4e1bc2 100644 --- a/docs/interfaces/Beatmap.DifficultyAttributes.Mania.html +++ b/docs/interfaces/Beatmap.DifficultyAttributes.Mania.html @@ -1,7 +1,7 @@ -Mania | osu-api-v2-js
    interface Mania {
        great_hit_window: number;
        max_combo: number;
        score_multiplier?: number;
        star_rating: number;
    }

    Hierarchy (view full)

    Properties

    great_hit_window +Mania | osu-api-v2-js
    interface Mania {
        great_hit_window: number;
        max_combo: number;
        score_multiplier?: number;
        star_rating: number;
    }

    Hierarchy (view full)

    Properties

    great_hit_window: number
    max_combo: number
    score_multiplier?: number

    Remarks

    (2023-11-20) Doesn't exist anymore?

    -
    star_rating: number

    Generated using TypeDoc

    \ No newline at end of file +

    Properties

    great_hit_window: number
    max_combo: number
    score_multiplier?: number

    Remarks

    API documentation says it exists, my thorough testing says it doesn't, so...

    +
    star_rating: number

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Beatmap.DifficultyAttributes.Osu.html b/docs/interfaces/Beatmap.DifficultyAttributes.Osu.html index 8c5d79f..5cd8d5e 100644 --- a/docs/interfaces/Beatmap.DifficultyAttributes.Osu.html +++ b/docs/interfaces/Beatmap.DifficultyAttributes.Osu.html @@ -1,5 +1,5 @@ -Osu | osu-api-v2-js
    interface Osu {
        aim_difficulty: number;
        approach_rate: number;
        flashlight_difficulty: number;
        max_combo: number;
        overall_difficulty: number;
        slider_factor: number;
        speed_difficulty: number;
        speed_note_count: number;
        star_rating: number;
    }

    Hierarchy (view full)

    Properties

    aim_difficulty +Osu | osu-api-v2-js
    interface Osu {
        aim_difficulty: number;
        approach_rate: number;
        flashlight_difficulty: number;
        max_combo: number;
        overall_difficulty: number;
        slider_factor: number;
        speed_difficulty: number;
        speed_note_count: number;
        star_rating: number;
    }

    Hierarchy (view full)

    Properties

    aim_difficulty: number
    approach_rate: number
    flashlight_difficulty: number
    max_combo: number
    overall_difficulty: number
    slider_factor: number
    speed_difficulty: number
    speed_note_count: number
    star_rating: number

    Generated using TypeDoc

    \ No newline at end of file +

    Properties

    aim_difficulty: number
    approach_rate: number
    flashlight_difficulty: number
    max_combo: number
    overall_difficulty: number
    slider_factor: number
    speed_difficulty: number
    speed_note_count: number
    star_rating: number

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Beatmap.DifficultyAttributes.Taiko.html b/docs/interfaces/Beatmap.DifficultyAttributes.Taiko.html index 611a613..e67286a 100644 --- a/docs/interfaces/Beatmap.DifficultyAttributes.Taiko.html +++ b/docs/interfaces/Beatmap.DifficultyAttributes.Taiko.html @@ -1,9 +1,9 @@ -Taiko | osu-api-v2-js
    interface Taiko {
        colour_difficulty: number;
        great_hit_window: number;
        max_combo: number;
        peak_difficulty: number;
        rhythm_difficulty: number;
        stamina_difficulty: number;
        star_rating: number;
    }

    Hierarchy (view full)

    Properties

    colour_difficulty +Taiko | osu-api-v2-js
    interface Taiko {
        colour_difficulty: number;
        great_hit_window: number;
        max_combo: number;
        peak_difficulty: number;
        rhythm_difficulty: number;
        stamina_difficulty: number;
        star_rating: number;
    }

    Hierarchy (view full)

    Properties

    colour_difficulty: number
    great_hit_window: number
    max_combo: number
    peak_difficulty: number
    rhythm_difficulty: number
    stamina_difficulty: number
    star_rating: number

    Generated using TypeDoc

    \ No newline at end of file +

    Properties

    colour_difficulty: number
    great_hit_window: number
    max_combo: number
    peak_difficulty: number
    rhythm_difficulty: number
    stamina_difficulty: number
    star_rating: number

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Beatmap.Extended-1.html b/docs/interfaces/Beatmap.Extended-1.html index 1f597cc..1aba20a 100644 --- a/docs/interfaces/Beatmap.Extended-1.html +++ b/docs/interfaces/Beatmap.Extended-1.html @@ -1,4 +1,4 @@ -Extended | osu-api-v2-js
    interface Extended {
        accuracy: number;
        ar: number;
        beatmapset_id: number;
        bpm: number;
        checksum: string;
        convert: boolean;
        count_circles: number;
        count_sliders: number;
        count_spinners: number;
        cs: number;
        deleted_at: null | Date;
        difficulty_rating: number;
        drain: number;
        hit_length: number;
        id: number;
        is_scoreable: boolean;
        last_updated: Date;
        mode: "osu" | "taiko" | "fruits" | "mania";
        mode_int: Rulesets;
        passcount: number;
        playcount: number;
        ranked: RankStatus;
        status: string;
        total_length: number;
        url: string;
        user_id: number;
        version: string;
    }

    Hierarchy (view full)

    Properties

    accuracy +Extended | osu-api-v2-js
    interface Extended {
        accuracy: number;
        ar: number;
        beatmapset_id: number;
        bpm: number;
        checksum: string;
        convert: boolean;
        count_circles: number;
        count_sliders: number;
        count_spinners: number;
        cs: number;
        deleted_at: null | Date;
        difficulty_rating: number;
        drain: number;
        hit_length: number;
        id: number;
        is_scoreable: boolean;
        last_updated: Date;
        mode: "osu" | "taiko" | "fruits" | "mania";
        mode_int: Rulesets;
        passcount: number;
        playcount: number;
        ranked: RankStatus;
        status: string;
        total_length: number;
        url: string;
        user_id: number;
        version: string;
    }

    Hierarchy (view full)

    Properties

    Properties

    accuracy: number
    ar: number
    beatmapset_id: number
    bpm: number
    checksum: string
    convert: boolean
    count_circles: number
    count_sliders: number
    count_spinners: number
    cs: number
    deleted_at: null | Date
    difficulty_rating: number
    drain: number
    hit_length: number
    id: number
    is_scoreable: boolean
    last_updated: Date
    mode: "osu" | "taiko" | "fruits" | "mania"
    mode_int: Rulesets
    passcount: number
    playcount: number
    ranked: RankStatus
    status: string
    total_length: number
    url: string
    user_id: number
    version: string

    Generated using TypeDoc

    \ No newline at end of file +

    Properties

    accuracy: number
    ar: number
    beatmapset_id: number
    bpm: number
    checksum: string
    convert: boolean
    count_circles: number
    count_sliders: number
    count_spinners: number
    cs: number
    deleted_at: null | Date
    difficulty_rating: number
    drain: number
    hit_length: number
    id: number
    is_scoreable: boolean
    last_updated: Date
    mode: "osu" | "taiko" | "fruits" | "mania"
    mode_int: Rulesets
    passcount: number
    playcount: number
    ranked: RankStatus
    status: string
    total_length: number
    url: string
    user_id: number
    version: string

    The name of the difficulty, maybe something like "Someone's Insane"

    +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Beatmap.Extended.WithFailtimes.html b/docs/interfaces/Beatmap.Extended.WithFailtimes.html index a87b74b..e0f7028 100644 --- a/docs/interfaces/Beatmap.Extended.WithFailtimes.html +++ b/docs/interfaces/Beatmap.Extended.WithFailtimes.html @@ -1,4 +1,4 @@ -WithFailtimes | osu-api-v2-js
    interface WithFailtimes {
        accuracy: number;
        ar: number;
        beatmapset_id: number;
        bpm: number;
        checksum: string;
        convert: boolean;
        count_circles: number;
        count_sliders: number;
        count_spinners: number;
        cs: number;
        deleted_at: null | Date;
        difficulty_rating: number;
        drain: number;
        failtimes: {
            exit: number[];
            fail: number[];
        };
        hit_length: number;
        id: number;
        is_scoreable: boolean;
        last_updated: Date;
        mode: "osu" | "taiko" | "fruits" | "mania";
        mode_int: Rulesets;
        passcount: number;
        playcount: number;
        ranked: RankStatus;
        status: string;
        total_length: number;
        url: string;
        user_id: number;
        version: string;
    }

    Hierarchy (view full)

    Properties

    accuracy +WithFailtimes | osu-api-v2-js
    interface WithFailtimes {
        accuracy: number;
        ar: number;
        beatmapset_id: number;
        bpm: number;
        checksum: string;
        convert: boolean;
        count_circles: number;
        count_sliders: number;
        count_spinners: number;
        cs: number;
        deleted_at: null | Date;
        difficulty_rating: number;
        drain: number;
        failtimes: {
            exit: number[];
            fail: number[];
        };
        hit_length: number;
        id: number;
        is_scoreable: boolean;
        last_updated: Date;
        mode: "osu" | "taiko" | "fruits" | "mania";
        mode_int: Rulesets;
        passcount: number;
        playcount: number;
        ranked: RankStatus;
        status: string;
        total_length: number;
        url: string;
        user_id: number;
        version: string;
    }

    Hierarchy (view full)

    Properties

    Properties

    accuracy: number
    ar: number
    beatmapset_id: number
    bpm: number
    checksum: string
    convert: boolean
    count_circles: number
    count_sliders: number
    count_spinners: number
    cs: number
    deleted_at: null | Date
    difficulty_rating: number
    drain: number
    failtimes: {
        exit: number[];
        fail: number[];
    }

    Type declaration

    • exit: number[]
    • fail: number[]
    hit_length: number
    id: number
    is_scoreable: boolean
    last_updated: Date
    mode: "osu" | "taiko" | "fruits" | "mania"
    mode_int: Rulesets
    passcount: number
    playcount: number
    ranked: RankStatus
    status: string
    total_length: number
    url: string
    user_id: number
    version: string

    Generated using TypeDoc

    \ No newline at end of file +

    Properties

    accuracy: number
    ar: number
    beatmapset_id: number
    bpm: number
    checksum: string
    convert: boolean
    count_circles: number
    count_sliders: number
    count_spinners: number
    cs: number
    deleted_at: null | Date
    difficulty_rating: number
    drain: number
    failtimes: {
        exit: number[];
        fail: number[];
    }

    Type declaration

    • exit: number[]
    • fail: number[]
    hit_length: number
    id: number
    is_scoreable: boolean
    last_updated: Date
    mode: "osu" | "taiko" | "fruits" | "mania"
    mode_int: Rulesets
    passcount: number
    playcount: number
    ranked: RankStatus
    status: string
    total_length: number
    url: string
    user_id: number
    version: string

    The name of the difficulty, maybe something like "Someone's Insane"

    +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Beatmap.Extended.WithFailtimesBeatmapset.html b/docs/interfaces/Beatmap.Extended.WithFailtimesBeatmapset.html new file mode 100644 index 0000000..c75ed31 --- /dev/null +++ b/docs/interfaces/Beatmap.Extended.WithFailtimesBeatmapset.html @@ -0,0 +1,33 @@ +WithFailtimesBeatmapset | osu-api-v2-js

    Obtainable From

    API.getBeatmap

    +
    interface WithFailtimesBeatmapset {
        accuracy: number;
        ar: number;
        beatmapset: Beatmapset.Extended;
        beatmapset_id: number;
        bpm: number;
        checksum: string;
        convert: boolean;
        count_circles: number;
        count_sliders: number;
        count_spinners: number;
        cs: number;
        deleted_at: null | Date;
        difficulty_rating: number;
        drain: number;
        failtimes: {
            exit: number[];
            fail: number[];
        };
        hit_length: number;
        id: number;
        is_scoreable: boolean;
        last_updated: Date;
        max_combo: number;
        mode: "osu" | "taiko" | "fruits" | "mania";
        mode_int: Rulesets;
        passcount: number;
        playcount: number;
        ranked: RankStatus;
        status: string;
        total_length: number;
        url: string;
        user_id: number;
        version: string;
    }

    Hierarchy (view full)

    Properties

    accuracy: number
    ar: number
    beatmapset: Beatmapset.Extended
    beatmapset_id: number
    bpm: number
    checksum: string
    convert: boolean
    count_circles: number
    count_sliders: number
    count_spinners: number
    cs: number
    deleted_at: null | Date
    difficulty_rating: number
    drain: number
    failtimes: {
        exit: number[];
        fail: number[];
    }

    Type declaration

    • exit: number[]
    • fail: number[]
    hit_length: number
    id: number
    is_scoreable: boolean
    last_updated: Date
    max_combo: number
    mode: "osu" | "taiko" | "fruits" | "mania"
    mode_int: Rulesets
    passcount: number
    playcount: number
    ranked: RankStatus
    status: string
    total_length: number
    url: string
    user_id: number
    version: string

    The name of the difficulty, maybe something like "Someone's Insane"

    +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Beatmap.Extended.WithFailtimesBeatmapsetextended.html b/docs/interfaces/Beatmap.Extended.WithFailtimesBeatmapsetextended.html deleted file mode 100644 index c6b18b9..0000000 --- a/docs/interfaces/Beatmap.Extended.WithFailtimesBeatmapsetextended.html +++ /dev/null @@ -1,32 +0,0 @@ -WithFailtimesBeatmapsetextended | osu-api-v2-js

    Interface WithFailtimesBeatmapsetextended

    Obtainable From

    API.getBeatmap

    -
    interface WithFailtimesBeatmapsetextended {
        accuracy: number;
        ar: number;
        beatmapset: Beatmapset.Extended;
        beatmapset_id: number;
        bpm: number;
        checksum: string;
        convert: boolean;
        count_circles: number;
        count_sliders: number;
        count_spinners: number;
        cs: number;
        deleted_at: null | Date;
        difficulty_rating: number;
        drain: number;
        failtimes: {
            exit: number[];
            fail: number[];
        };
        hit_length: number;
        id: number;
        is_scoreable: boolean;
        last_updated: Date;
        max_combo: number;
        mode: "osu" | "taiko" | "fruits" | "mania";
        mode_int: Rulesets;
        passcount: number;
        playcount: number;
        ranked: RankStatus;
        status: string;
        total_length: number;
        url: string;
        user_id: number;
        version: string;
    }

    Hierarchy (view full)

    Properties

    accuracy: number
    ar: number
    beatmapset: Beatmapset.Extended
    beatmapset_id: number
    bpm: number
    checksum: string
    convert: boolean
    count_circles: number
    count_sliders: number
    count_spinners: number
    cs: number
    deleted_at: null | Date
    difficulty_rating: number
    drain: number
    failtimes: {
        exit: number[];
        fail: number[];
    }

    Type declaration

    • exit: number[]
    • fail: number[]
    hit_length: number
    id: number
    is_scoreable: boolean
    last_updated: Date
    max_combo: number
    mode: "osu" | "taiko" | "fruits" | "mania"
    mode_int: Rulesets
    passcount: number
    playcount: number
    ranked: RankStatus
    status: string
    total_length: number
    url: string
    user_id: number
    version: string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Beatmap.Extended.WithFailtimesMaxcombo.html b/docs/interfaces/Beatmap.Extended.WithFailtimesMaxcombo.html index cd96d9e..cde7081 100644 --- a/docs/interfaces/Beatmap.Extended.WithFailtimesMaxcombo.html +++ b/docs/interfaces/Beatmap.Extended.WithFailtimesMaxcombo.html @@ -1,5 +1,5 @@ -WithFailtimesMaxcombo | osu-api-v2-js

    Obtainable From

    API.getBeatmaps

    -
    interface WithFailtimesMaxcombo {
        accuracy: number;
        ar: number;
        beatmapset_id: number;
        bpm: number;
        checksum: string;
        convert: boolean;
        count_circles: number;
        count_sliders: number;
        count_spinners: number;
        cs: number;
        deleted_at: null | Date;
        difficulty_rating: number;
        drain: number;
        failtimes: {
            exit: number[];
            fail: number[];
        };
        hit_length: number;
        id: number;
        is_scoreable: boolean;
        last_updated: Date;
        max_combo: number;
        mode: "osu" | "taiko" | "fruits" | "mania";
        mode_int: Rulesets;
        passcount: number;
        playcount: number;
        ranked: RankStatus;
        status: string;
        total_length: number;
        url: string;
        user_id: number;
        version: string;
    }

    Hierarchy (view full)

    Properties

    accuracy +WithFailtimesMaxcombo | osu-api-v2-js

    Obtainable From

    API.getBeatmaps

    +
    interface WithFailtimesMaxcombo {
        accuracy: number;
        ar: number;
        beatmapset_id: number;
        bpm: number;
        checksum: string;
        convert: boolean;
        count_circles: number;
        count_sliders: number;
        count_spinners: number;
        cs: number;
        deleted_at: null | Date;
        difficulty_rating: number;
        drain: number;
        failtimes: {
            exit: number[];
            fail: number[];
        };
        hit_length: number;
        id: number;
        is_scoreable: boolean;
        last_updated: Date;
        max_combo: number;
        mode: "osu" | "taiko" | "fruits" | "mania";
        mode_int: Rulesets;
        passcount: number;
        playcount: number;
        ranked: RankStatus;
        status: string;
        total_length: number;
        url: string;
        user_id: number;
        version: string;
    }

    Hierarchy (view full)

    Properties

    Properties

    accuracy: number
    ar: number
    beatmapset_id: number
    bpm: number
    checksum: string
    convert: boolean
    count_circles: number
    count_sliders: number
    count_spinners: number
    cs: number
    deleted_at: null | Date
    difficulty_rating: number
    drain: number
    failtimes: {
        exit: number[];
        fail: number[];
    }

    Type declaration

    • exit: number[]
    • fail: number[]
    hit_length: number
    id: number
    is_scoreable: boolean
    last_updated: Date
    max_combo: number
    mode: "osu" | "taiko" | "fruits" | "mania"
    mode_int: Rulesets
    passcount: number
    playcount: number
    ranked: RankStatus
    status: string
    total_length: number
    url: string
    user_id: number
    version: string

    Generated using TypeDoc

    \ No newline at end of file +

    Properties

    accuracy: number
    ar: number
    beatmapset_id: number
    bpm: number
    checksum: string
    convert: boolean
    count_circles: number
    count_sliders: number
    count_spinners: number
    cs: number
    deleted_at: null | Date
    difficulty_rating: number
    drain: number
    failtimes: {
        exit: number[];
        fail: number[];
    }

    Type declaration

    • exit: number[]
    • fail: number[]
    hit_length: number
    id: number
    is_scoreable: boolean
    last_updated: Date
    max_combo: number
    mode: "osu" | "taiko" | "fruits" | "mania"
    mode_int: Rulesets
    passcount: number
    playcount: number
    ranked: RankStatus
    status: string
    total_length: number
    url: string
    user_id: number
    version: string

    The name of the difficulty, maybe something like "Someone's Insane"

    +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Beatmap.Extended.WithMaxcombo.html b/docs/interfaces/Beatmap.Extended.WithMaxcombo.html index 6e21be2..cc3f932 100644 --- a/docs/interfaces/Beatmap.Extended.WithMaxcombo.html +++ b/docs/interfaces/Beatmap.Extended.WithMaxcombo.html @@ -1,4 +1,4 @@ -WithMaxcombo | osu-api-v2-js
    interface WithMaxcombo {
        accuracy: number;
        ar: number;
        beatmapset_id: number;
        bpm: number;
        checksum: string;
        convert: boolean;
        count_circles: number;
        count_sliders: number;
        count_spinners: number;
        cs: number;
        deleted_at: null | Date;
        difficulty_rating: number;
        drain: number;
        hit_length: number;
        id: number;
        is_scoreable: boolean;
        last_updated: Date;
        max_combo: number;
        mode: "osu" | "taiko" | "fruits" | "mania";
        mode_int: Rulesets;
        passcount: number;
        playcount: number;
        ranked: RankStatus;
        status: string;
        total_length: number;
        url: string;
        user_id: number;
        version: string;
    }

    Hierarchy (view full)

    Properties

    accuracy +WithMaxcombo | osu-api-v2-js
    interface WithMaxcombo {
        accuracy: number;
        ar: number;
        beatmapset_id: number;
        bpm: number;
        checksum: string;
        convert: boolean;
        count_circles: number;
        count_sliders: number;
        count_spinners: number;
        cs: number;
        deleted_at: null | Date;
        difficulty_rating: number;
        drain: number;
        hit_length: number;
        id: number;
        is_scoreable: boolean;
        last_updated: Date;
        max_combo: number;
        mode: "osu" | "taiko" | "fruits" | "mania";
        mode_int: Rulesets;
        passcount: number;
        playcount: number;
        ranked: RankStatus;
        status: string;
        total_length: number;
        url: string;
        user_id: number;
        version: string;
    }

    Hierarchy (view full)

    Properties

    Properties

    accuracy: number
    ar: number
    beatmapset_id: number
    bpm: number
    checksum: string
    convert: boolean
    count_circles: number
    count_sliders: number
    count_spinners: number
    cs: number
    deleted_at: null | Date
    difficulty_rating: number
    drain: number
    hit_length: number
    id: number
    is_scoreable: boolean
    last_updated: Date
    max_combo: number
    mode: "osu" | "taiko" | "fruits" | "mania"
    mode_int: Rulesets
    passcount: number
    playcount: number
    ranked: RankStatus
    status: string
    total_length: number
    url: string
    user_id: number
    version: string

    Generated using TypeDoc

    \ No newline at end of file +

    Properties

    accuracy: number
    ar: number
    beatmapset_id: number
    bpm: number
    checksum: string
    convert: boolean
    count_circles: number
    count_sliders: number
    count_spinners: number
    cs: number
    deleted_at: null | Date
    difficulty_rating: number
    drain: number
    hit_length: number
    id: number
    is_scoreable: boolean
    last_updated: Date
    max_combo: number
    mode: "osu" | "taiko" | "fruits" | "mania"
    mode_int: Rulesets
    passcount: number
    playcount: number
    ranked: RankStatus
    status: string
    total_length: number
    url: string
    user_id: number
    version: string

    The name of the difficulty, maybe something like "Someone's Insane"

    +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Beatmap.Pack-1.html b/docs/interfaces/Beatmap.Pack-1.html new file mode 100644 index 0000000..785c1af --- /dev/null +++ b/docs/interfaces/Beatmap.Pack-1.html @@ -0,0 +1,15 @@ +Pack | osu-api-v2-js

    Obtainable From

    API.getBeatmapPacks

    +
    interface Pack {
        author: string;
        date: Date;
        name: string;
        no_diff_reduction: boolean;
        ruleset_id: null | Rulesets;
        tag: string;
        url: string;
        user_completion_data?: {
            beatmapset_ids: number[];
            completed: boolean;
        };
    }

    Hierarchy (view full)

    Properties

    author: string
    date: Date
    name: string
    no_diff_reduction: boolean

    Are difficulty reduction mods unable to be used to clear this pack? (is false if you can use such mods)

    +
    ruleset_id: null | Rulesets
    tag: string
    url: string

    Download page; going there with a web browser should start the download of a zip file automatically

    +
    user_completion_data?: {
        beatmapset_ids: number[];
        completed: boolean;
    }

    Not there if the application doesn't act as a specific user

    +

    Type declaration

    • beatmapset_ids: number[]

      IDs of beatmapsets completed by the user (according to the requirements of the pack)

      +
    • completed: boolean

      Whether all beatmapsets are completed by the user or not

      +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Beatmap.Pack.WithBeatmapset.html b/docs/interfaces/Beatmap.Pack.WithBeatmapset.html new file mode 100644 index 0000000..ad3978d --- /dev/null +++ b/docs/interfaces/Beatmap.Pack.WithBeatmapset.html @@ -0,0 +1,16 @@ +WithBeatmapset | osu-api-v2-js

    Obtainable From

    API.getBeatmapPack

    +
    interface WithBeatmapset {
        author: string;
        beatmapsets: Beatmapset.Extended[];
        date: Date;
        name: string;
        no_diff_reduction: boolean;
        ruleset_id: null | Rulesets;
        tag: string;
        url: string;
        user_completion_data?: {
            beatmapset_ids: number[];
            completed: boolean;
        };
    }

    Hierarchy (view full)

    Properties

    author: string
    beatmapsets: Beatmapset.Extended[]
    date: Date
    name: string
    no_diff_reduction: boolean

    Are difficulty reduction mods unable to be used to clear this pack? (is false if you can use such mods)

    +
    ruleset_id: null | Rulesets
    tag: string
    url: string

    Download page; going there with a web browser should start the download of a zip file automatically

    +
    user_completion_data?: {
        beatmapset_ids: number[];
        completed: boolean;
    }

    Not there if the application doesn't act as a specific user

    +

    Type declaration

    • beatmapset_ids: number[]

      IDs of beatmapsets completed by the user (according to the requirements of the pack)

      +
    • completed: boolean

      Whether all beatmapsets are completed by the user or not

      +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Beatmap.Pack.html b/docs/interfaces/Beatmap.Pack.html deleted file mode 100644 index fc0f405..0000000 --- a/docs/interfaces/Beatmap.Pack.html +++ /dev/null @@ -1,15 +0,0 @@ -Pack | osu-api-v2-js
    interface Pack {
        author: string;
        beatmapsets?: Beatmapset.Extended[];
        date: Date;
        name: string;
        no_diff_reduction: boolean;
        ruleset_id: null | number;
        tag: string;
        url: string;
        user_completion_data?: {
            beatmapset_ids: number[];
            completed: boolean;
        };
    }

    Properties

    author: string
    beatmapsets?: Beatmapset.Extended[]
    date: Date
    name: string
    no_diff_reduction: boolean

    Are difficulty reduction mods unable to be used to clear this pack? (is false if you can use such mods)

    -
    ruleset_id: null | number
    tag: string
    url: string
    user_completion_data?: {
        beatmapset_ids: number[];
        completed: boolean;
    }

    Type declaration

    • beatmapset_ids: number[]

      IDs of beatmapsets completed by the user (according to the requirements of the pack)

      -
    • completed: boolean

      Whether all beatmapsets are completed by the user or not

      -

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Beatmap.Playcount.html b/docs/interfaces/Beatmap.Playcount.html index ad2c42a..02f4ffb 100644 --- a/docs/interfaces/Beatmap.Playcount.html +++ b/docs/interfaces/Beatmap.Playcount.html @@ -1,7 +1,7 @@ -Playcount | osu-api-v2-js

    Obtainable From

    API.getUserMostPlayed

    -
    interface Playcount {
        beatmap: Beatmap;
        beatmap_id: number;
        beatmapset: Beatmapset;
        count: number;
    }

    Properties

    beatmap +Playcount | osu-api-v2-js

    Obtainable From

    API.getUserMostPlayed

    +
    interface Playcount {
        beatmap: Beatmap;
        beatmap_id: number;
        beatmapset: Beatmapset;
        count: number;
    }

    Properties

    beatmap: Beatmap
    beatmap_id: number
    beatmapset: Beatmapset
    count: number

    Playcount

    -

    Generated using TypeDoc

    \ No newline at end of file +

    Properties

    beatmap: Beatmap
    beatmap_id: number
    beatmapset: Beatmapset
    count: number

    Playcount

    +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Beatmap.UserScore-1.html b/docs/interfaces/Beatmap.UserScore-1.html new file mode 100644 index 0000000..c07de9c --- /dev/null +++ b/docs/interfaces/Beatmap.UserScore-1.html @@ -0,0 +1,6 @@ +UserScore | osu-api-v2-js

    Obtainable From

    API.getBeatmapUserScore

    +
    interface UserScore {
        position: number;
        score: WithUserBeatmap;
    }

    Properties

    Properties

    position: number

    Value depends on the requested mode and mods!

    +

    The score itself

    +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Beatmap.WithBeatmapset.html b/docs/interfaces/Beatmap.WithBeatmapset.html index ca49160..65cf28c 100644 --- a/docs/interfaces/Beatmap.WithBeatmapset.html +++ b/docs/interfaces/Beatmap.WithBeatmapset.html @@ -1,4 +1,4 @@ -WithBeatmapset | osu-api-v2-js

    Interface WithBeatmapset

    interface WithBeatmapset {
        beatmapset: Beatmapset;
        beatmapset_id: number;
        difficulty_rating: number;
        id: number;
        mode: "osu" | "taiko" | "fruits" | "mania";
        status: string;
        total_length: number;
        user_id: number;
        version: string;
    }

    Hierarchy (view full)

    Properties

    beatmapset +WithBeatmapset | osu-api-v2-js

    Interface WithBeatmapset

    interface WithBeatmapset {
        beatmapset: Beatmapset;
        beatmapset_id: number;
        difficulty_rating: number;
        id: number;
        mode: "osu" | "taiko" | "fruits" | "mania";
        status: string;
        total_length: number;
        user_id: number;
        version: string;
    }

    Hierarchy (view full)

    Properties

    beatmapset: Beatmapset
    beatmapset_id: number
    difficulty_rating: number
    id: number
    mode: "osu" | "taiko" | "fruits" | "mania"
    status: string
    total_length: number
    user_id: number
    version: string

    Generated using TypeDoc

    \ No newline at end of file +

    Properties

    beatmapset: Beatmapset
    beatmapset_id: number
    difficulty_rating: number
    id: number
    mode: "osu" | "taiko" | "fruits" | "mania"
    status: string
    total_length: number
    user_id: number
    version: string

    The name of the difficulty, maybe something like "Someone's Insane"

    +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Beatmap.WithBeatmapsetChecksumMaxcombo.html b/docs/interfaces/Beatmap.WithBeatmapsetChecksumMaxcombo.html index f26f40a..e6b1d67 100644 --- a/docs/interfaces/Beatmap.WithBeatmapsetChecksumMaxcombo.html +++ b/docs/interfaces/Beatmap.WithBeatmapsetChecksumMaxcombo.html @@ -1,4 +1,4 @@ -WithBeatmapsetChecksumMaxcombo | osu-api-v2-js

    Interface WithBeatmapsetChecksumMaxcombo

    interface WithBeatmapsetChecksumMaxcombo {
        beatmapset: Beatmapset;
        beatmapset_id: number;
        checksum: string;
        difficulty_rating: number;
        id: number;
        max_combo: number;
        mode: "osu" | "taiko" | "fruits" | "mania";
        status: string;
        total_length: number;
        user_id: number;
        version: string;
    }

    Hierarchy (view full)

    Properties

    beatmapset +WithBeatmapsetChecksumMaxcombo | osu-api-v2-js

    Interface WithBeatmapsetChecksumMaxcombo

    interface WithBeatmapsetChecksumMaxcombo {
        beatmapset: Beatmapset;
        beatmapset_id: number;
        checksum: string;
        difficulty_rating: number;
        id: number;
        max_combo: number;
        mode: "osu" | "taiko" | "fruits" | "mania";
        status: string;
        total_length: number;
        user_id: number;
        version: string;
    }

    Hierarchy (view full)

    Properties

    beatmapset: Beatmapset
    beatmapset_id: number
    checksum: string
    difficulty_rating: number
    id: number
    max_combo: number
    mode: "osu" | "taiko" | "fruits" | "mania"
    status: string
    total_length: number
    user_id: number
    version: string

    Generated using TypeDoc

    \ No newline at end of file +

    Properties

    beatmapset: Beatmapset
    beatmapset_id: number
    checksum: string
    difficulty_rating: number
    id: number
    max_combo: number
    mode: "osu" | "taiko" | "fruits" | "mania"
    status: string
    total_length: number
    user_id: number
    version: string

    The name of the difficulty, maybe something like "Someone's Insane"

    +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Beatmap.WithChecksum.html b/docs/interfaces/Beatmap.WithChecksum.html new file mode 100644 index 0000000..71719b4 --- /dev/null +++ b/docs/interfaces/Beatmap.WithChecksum.html @@ -0,0 +1,11 @@ +WithChecksum | osu-api-v2-js

    Interface WithChecksum

    interface WithChecksum {
        beatmapset_id: number;
        checksum: string;
        difficulty_rating: number;
        id: number;
        mode: "osu" | "taiko" | "fruits" | "mania";
        status: string;
        total_length: number;
        user_id: number;
        version: string;
    }

    Hierarchy (view full)

    Properties

    beatmapset_id: number
    checksum: string
    difficulty_rating: number
    id: number
    mode: "osu" | "taiko" | "fruits" | "mania"
    status: string
    total_length: number
    user_id: number
    version: string

    The name of the difficulty, maybe something like "Someone's Insane"

    +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/BeatmapUserScore.html b/docs/interfaces/BeatmapUserScore.html deleted file mode 100644 index 92bf896..0000000 --- a/docs/interfaces/BeatmapUserScore.html +++ /dev/null @@ -1,5 +0,0 @@ -BeatmapUserScore | osu-api-v2-js

    Interface BeatmapUserScore

    Obtainable From

    API.getBeatmapUserScore

    -
    interface BeatmapUserScore {
        position: number;
        score: WithUserBeatmap;
    }

    Properties

    Properties

    position: number

    Value depends on the requested mode and mods!

    -

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Beatmapset-1.html b/docs/interfaces/Beatmapset-1.html index 6bcea68..859e280 100644 --- a/docs/interfaces/Beatmapset-1.html +++ b/docs/interfaces/Beatmapset-1.html @@ -1,4 +1,4 @@ -Beatmapset | osu-api-v2-js

    Interface Beatmapset

    interface Beatmapset {
        artist: string;
        artist_unicode: string;
        covers: {
            card: string;
            card@2x: string;
            cover: string;
            cover@2x: string;
            list: string;
            list@2x: string;
            slimcover: string;
            slimcover@2x: string;
        };
        creator: string;
        favourite_count: number;
        id: number;
        nsfw: boolean;
        offset: number;
        play_count: number;
        preview_url: string;
        source: string;
        spotlight: boolean;
        status: string;
        title: string;
        title_unicode: string;
        user_id: number;
        video: boolean;
    }

    Hierarchy (view full)

    Properties

    artist +Beatmapset | osu-api-v2-js

    Interface Beatmapset

    interface Beatmapset {
        artist: string;
        artist_unicode: string;
        covers: {
            card: string;
            card@2x: string;
            cover: string;
            cover@2x: string;
            list: string;
            list@2x: string;
            slimcover: string;
            slimcover@2x: string;
        };
        creator: string;
        favourite_count: number;
        id: number;
        nsfw: boolean;
        offset: number;
        play_count: number;
        preview_url: string;
        source: string;
        spotlight: boolean;
        status: string;
        title: string;
        title_unicode: string;
        user_id: number;
        video: boolean;
    }

    Hierarchy (view full)

    Properties

    artist: string
    artist_unicode: string
    covers: {
        card: string;
        card@2x: string;
        cover: string;
        cover@2x: string;
        list: string;
        list@2x: string;
        slimcover: string;
        slimcover@2x: string;
    }

    Type declaration

    • card: string
    • card@2x: string
    • cover: string
    • cover@2x: string
    • list: string
    • list@2x: string
    • slimcover: string
    • slimcover@2x: string
    creator: string
    favourite_count: number
    id: number
    nsfw: boolean
    offset: number
    play_count: number
    preview_url: string

    A string like that where id is the id of the beatmapset: //b.ppy.sh/preview/58951.mp3

    -
    source: string
    spotlight: boolean
    status: string

    Is it ranked, is it graveyarded, etc

    -
    title: string

    A title readable by any english-speaking person, so it'd be in romaji if the song's title is in Japanese

    -
    title_unicode: string

    Basically the title is the original language, so with hiragana, katakana and kanji if Japanese

    -
    user_id: number
    video: boolean

    Generated using TypeDoc

    \ No newline at end of file +

    Properties

    artist: string
    artist_unicode: string
    covers: {
        card: string;
        card@2x: string;
        cover: string;
        cover@2x: string;
        list: string;
        list@2x: string;
        slimcover: string;
        slimcover@2x: string;
    }

    Type declaration

    • card: string
    • card@2x: string
    • cover: string
    • cover@2x: string
    • list: string
    • list@2x: string
    • slimcover: string
    • slimcover@2x: string
    creator: string
    favourite_count: number
    id: number
    nsfw: boolean
    offset: number
    play_count: number
    preview_url: string

    A string like that where id is the id of the beatmapset: //b.ppy.sh/preview/58951.mp3

    +
    source: string
    spotlight: boolean
    status: string

    Is it ranked, is it graveyarded, etc

    +
    title: string

    A title readable by any english-speaking person, so it'd be in romaji if the song's title is in Japanese

    +
    title_unicode: string

    Basically the title is the original language, so with hiragana, katakana and kanji if Japanese

    +
    user_id: number
    video: boolean

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Beatmapset.Discussion-1.html b/docs/interfaces/Beatmapset.Discussion-1.html index c2a9aaf..8cae3d6 100644 --- a/docs/interfaces/Beatmapset.Discussion-1.html +++ b/docs/interfaces/Beatmapset.Discussion-1.html @@ -1,4 +1,4 @@ -Discussion | osu-api-v2-js
    interface Discussion {
        beatmap_id: null | number;
        beatmapset_id: number;
        can_be_resolved: boolean;
        can_grant_kudosu: boolean;
        created_at: Date;
        deleted_at: null | Date;
        deleted_by_id: null | number;
        id: number;
        kudosu_denied: boolean;
        last_post_at: Date;
        message_type: "suggestion" | "problem" | "mapper_note" | "praise" | "hype" | "review";
        parent_id: null | number;
        resolved: boolean;
        timestamp: null | number;
        updated_at: Date;
        user_id: number;
    }

    Hierarchy (view full)

    Properties

    beatmap_id +Discussion | osu-api-v2-js
    interface Discussion {
        beatmap_id: null | number;
        beatmapset_id: number;
        can_be_resolved: boolean;
        can_grant_kudosu: boolean;
        created_at: Date;
        deleted_at: null | Date;
        deleted_by_id: null | number;
        id: number;
        kudosu_denied: boolean;
        last_post_at: Date;
        message_type: "suggestion" | "problem" | "mapper_note" | "praise" | "hype" | "review";
        parent_id: null | number;
        resolved: boolean;
        timestamp: null | number;
        updated_at: Date;
        user_id: number;
    }

    Hierarchy (view full)

    Properties

    beatmap_id: null | number
    beatmapset_id: number
    can_be_resolved: boolean
    can_grant_kudosu: boolean
    created_at: Date
    deleted_at: null | Date
    deleted_by_id: null | number
    id: number
    kudosu_denied: boolean
    last_post_at: Date
    message_type: "suggestion" | "problem" | "mapper_note" | "praise" | "hype" | "review"
    parent_id: null | number
    resolved: boolean
    timestamp: null | number
    updated_at: Date
    user_id: number

    Generated using TypeDoc

    \ No newline at end of file +

    Properties

    beatmap_id: null | number
    beatmapset_id: number
    can_be_resolved: boolean
    can_grant_kudosu: boolean
    created_at: Date
    deleted_at: null | Date
    deleted_by_id: null | number
    id: number
    kudosu_denied: boolean
    last_post_at: Date
    message_type: "suggestion" | "problem" | "mapper_note" | "praise" | "hype" | "review"
    parent_id: null | number

    For example, the id of the review this discussion is included in

    +
    resolved: boolean
    timestamp: null | number
    updated_at: Date
    user_id: number

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Beatmapset.Discussion.Config.html b/docs/interfaces/Beatmapset.Discussion.Config.html new file mode 100644 index 0000000..2bfedd1 --- /dev/null +++ b/docs/interfaces/Beatmapset.Discussion.Config.html @@ -0,0 +1,10 @@ +Config | osu-api-v2-js

    An interface to tell the API how the returned Array should be like

    +
    interface Config {
        cursor_string?: string;
        limit?: number;
        page?: number;
        sort?: "id_desc" | "id_asc";
    }

    Properties

    cursor_string?: string

    A cursor_string provided by a previous request

    +
    limit?: number

    The maximum amount of elements to get

    +
    page?: number

    Which page of the results to get

    +
    sort?: "id_desc" | "id_asc"

    "id_asc" to have the oldest element first, "id_desc" to have the newest instead

    +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Beatmapset.Discussion.Post-1.html b/docs/interfaces/Beatmapset.Discussion.Post-1.html new file mode 100644 index 0000000..cdea4e3 --- /dev/null +++ b/docs/interfaces/Beatmapset.Discussion.Post-1.html @@ -0,0 +1,11 @@ +Post | osu-api-v2-js
    interface Post {
        beatmapset_discussion_id: number;
        created_at: Date;
        deleted_at: null | Date;
        deleted_by_id: null | number;
        id: number;
        last_editor_id: null | number;
        message: string;
        system: boolean;
        updated_at: Date;
        user_id: number;
    }

    Properties

    beatmapset_discussion_id: number
    created_at: Date
    deleted_at: null | Date
    deleted_by_id: null | number
    id: number
    last_editor_id: null | number
    message: string
    system: boolean
    updated_at: Date
    user_id: number

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Beatmapset.Discussion.Post.html b/docs/interfaces/Beatmapset.Discussion.Post.html deleted file mode 100644 index 5e413db..0000000 --- a/docs/interfaces/Beatmapset.Discussion.Post.html +++ /dev/null @@ -1,11 +0,0 @@ -Post | osu-api-v2-js
    interface Post {
        beatmapset_discussion_id: number;
        created_at: Date;
        deleted_at: null | Date;
        deleted_by_id: null | number;
        id: number;
        last_editor_id: null | number;
        message: string;
        system: boolean;
        updated_at: Date;
        user_id: number;
    }

    Properties

    beatmapset_discussion_id: number
    created_at: Date
    deleted_at: null | Date
    deleted_by_id: null | number
    id: number
    last_editor_id: null | number
    message: string
    system: boolean
    updated_at: Date
    user_id: number

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Beatmapset.Discussion.Vote-1.html b/docs/interfaces/Beatmapset.Discussion.Vote-1.html new file mode 100644 index 0000000..675850b --- /dev/null +++ b/docs/interfaces/Beatmapset.Discussion.Vote-1.html @@ -0,0 +1,7 @@ +Vote | osu-api-v2-js
    interface Vote {
        beatmapset_discussion_id: number;
        created_at: Date;
        id: number;
        score: number;
        updated_at: Date;
        user_id: number;
    }

    Properties

    beatmapset_discussion_id: number
    created_at: Date
    id: number
    score: number
    updated_at: Date
    user_id: number

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Beatmapset.Discussion.Vote.html b/docs/interfaces/Beatmapset.Discussion.Vote.html deleted file mode 100644 index 377c0a5..0000000 --- a/docs/interfaces/Beatmapset.Discussion.Vote.html +++ /dev/null @@ -1,7 +0,0 @@ -Vote | osu-api-v2-js
    interface Vote {
        beatmapset_discussion_id: number;
        created_at: Date;
        id: number;
        score: number;
        updated_at: Date;
        user_id: number;
    }

    Properties

    beatmapset_discussion_id: number
    created_at: Date
    id: number
    score: number
    updated_at: Date
    user_id: number

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Beatmapset.Discussion.WithStartingpost.html b/docs/interfaces/Beatmapset.Discussion.WithStartingpost.html index fce4a85..8278f1c 100644 --- a/docs/interfaces/Beatmapset.Discussion.WithStartingpost.html +++ b/docs/interfaces/Beatmapset.Discussion.WithStartingpost.html @@ -1,4 +1,4 @@ -WithStartingpost | osu-api-v2-js
    interface WithStartingpost {
        beatmap_id: null | number;
        beatmapset_id: number;
        can_be_resolved: boolean;
        can_grant_kudosu: boolean;
        created_at: Date;
        deleted_at: null | Date;
        deleted_by_id: null | number;
        id: number;
        kudosu_denied: boolean;
        last_post_at: Date;
        message_type: "suggestion" | "problem" | "mapper_note" | "praise" | "hype" | "review";
        parent_id: null | number;
        resolved: boolean;
        starting_post: Beatmapset.Discussion.Post;
        timestamp: null | number;
        updated_at: Date;
        user_id: number;
    }

    Hierarchy (view full)

    Properties

    beatmap_id +WithStartingpost | osu-api-v2-js
    interface WithStartingpost {
        beatmap_id: null | number;
        beatmapset_id: number;
        can_be_resolved: boolean;
        can_grant_kudosu: boolean;
        created_at: Date;
        deleted_at: null | Date;
        deleted_by_id: null | number;
        id: number;
        kudosu_denied: boolean;
        last_post_at: Date;
        message_type: "suggestion" | "problem" | "mapper_note" | "praise" | "hype" | "review";
        parent_id: null | number;
        resolved: boolean;
        starting_post: Beatmapset.Discussion.Post;
        timestamp: null | number;
        updated_at: Date;
        user_id: number;
    }

    Hierarchy (view full)

    Properties

    beatmap_id: null | number
    beatmapset_id: number
    can_be_resolved: boolean
    can_grant_kudosu: boolean
    created_at: Date
    deleted_at: null | Date
    deleted_by_id: null | number
    id: number
    kudosu_denied: boolean
    last_post_at: Date
    message_type: "suggestion" | "problem" | "mapper_note" | "praise" | "hype" | "review"
    parent_id: null | number
    resolved: boolean
    starting_post: Beatmapset.Discussion.Post
    timestamp: null | number
    updated_at: Date
    user_id: number

    Generated using TypeDoc

    \ No newline at end of file +

    Properties

    beatmap_id: null | number
    beatmapset_id: number
    can_be_resolved: boolean
    can_grant_kudosu: boolean
    created_at: Date
    deleted_at: null | Date
    deleted_by_id: null | number
    id: number
    kudosu_denied: boolean
    last_post_at: Date
    message_type: "suggestion" | "problem" | "mapper_note" | "praise" | "hype" | "review"
    parent_id: null | number

    For example, the id of the review this discussion is included in

    +
    resolved: boolean
    starting_post: Beatmapset.Discussion.Post
    timestamp: null | number
    updated_at: Date
    user_id: number

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Beatmapset.Event-1.html b/docs/interfaces/Beatmapset.Event-1.html new file mode 100644 index 0000000..44bd392 --- /dev/null +++ b/docs/interfaces/Beatmapset.Event-1.html @@ -0,0 +1,10 @@ +Event | osu-api-v2-js

    Whether properties are there or not and null or not depend of the type

    +
    interface Event {
        beatmapset: WithUserHype;
        comment: null | {
            beatmap_discussion_id?: null | number;
            beatmap_discussion_post_id?: null | number;
            modes?: ("osu" | "taiko" | "fruits" | "mania")[];
            new?: boolean | "Any" | "Unspecified" | "Video Game" | "Anime" | "Rock" | "Pop" | "Other" | "Novelty" | "Hip Hop" | "Electronic" | "Metal" | "Classical" | "Folk" | "Jazz" | "English" | "Japanese" | "Chinese" | "Instrumental" | "Korean" | "French" | "German" | "Swedish" | "Spanish" | "Italian" | "Russian" | "Polish";
            new_vote?: {
                score: number;
                user_id: number;
            };
            old?: boolean | "Any" | "Unspecified" | "Video Game" | "Anime" | "Rock" | "Pop" | "Other" | "Novelty" | "Hip Hop" | "Electronic" | "Metal" | "Classical" | "Folk" | "Jazz" | "English" | "Japanese" | "Chinese" | "Instrumental" | "Korean" | "French" | "German" | "Swedish" | "Spanish" | "Italian" | "Russian" | "Polish";
            reason?: string;
            votes?: {
                score: number;
                user_id: number;
            }[];
        };
        created_at: Date;
        discussion?: null | WithStartingpost;
        id: number;
        type: "nominate" | "love" | "remove_from_loved" | "qualify" | "disqualify" | "approve" | "rank" | "kudosu_allow" | "kudosu_denied" | "kudosu_gain" | "kudosu_lost" | "kudosu_recalculate" | "issue_resolve" | "issue_reopen" | "discussion_lock" | "disccusion_unlock" | "discussion_delete" | "discussion_restore" | "discussion_post_delete" | "discussion_post_restore" | "nomination_reset" | "nomination_reset_received" | "genre_edit" | "language_edit" | "nsfw_toggle" | "offset_edit" | "tags_edit" | "beatmap_owner_change";
        user_id: null | number;
    }

    Properties

    beatmapset: WithUserHype
    comment: null | {
        beatmap_discussion_id?: null | number;
        beatmap_discussion_post_id?: null | number;
        modes?: ("osu" | "taiko" | "fruits" | "mania")[];
        new?: boolean | "Any" | "Unspecified" | "Video Game" | "Anime" | "Rock" | "Pop" | "Other" | "Novelty" | "Hip Hop" | "Electronic" | "Metal" | "Classical" | "Folk" | "Jazz" | "English" | "Japanese" | "Chinese" | "Instrumental" | "Korean" | "French" | "German" | "Swedish" | "Spanish" | "Italian" | "Russian" | "Polish";
        new_vote?: {
            score: number;
            user_id: number;
        };
        old?: boolean | "Any" | "Unspecified" | "Video Game" | "Anime" | "Rock" | "Pop" | "Other" | "Novelty" | "Hip Hop" | "Electronic" | "Metal" | "Classical" | "Folk" | "Jazz" | "English" | "Japanese" | "Chinese" | "Instrumental" | "Korean" | "French" | "German" | "Swedish" | "Spanish" | "Italian" | "Russian" | "Polish";
        reason?: string;
        votes?: {
            score: number;
            user_id: number;
        }[];
    }

    Type declaration

    • Optional beatmap_discussion_id?: null | number
    • Optional beatmap_discussion_post_id?: null | number
    • Optional modes?: ("osu" | "taiko" | "fruits" | "mania")[]
    • Optional new?: boolean | "Any" | "Unspecified" | "Video Game" | "Anime" | "Rock" | "Pop" | "Other" | "Novelty" | "Hip Hop" | "Electronic" | "Metal" | "Classical" | "Folk" | "Jazz" | "English" | "Japanese" | "Chinese" | "Instrumental" | "Korean" | "French" | "German" | "Swedish" | "Spanish" | "Italian" | "Russian" | "Polish"
    • Optional new_vote?: {
          score: number;
          user_id: number;
      }
      • score: number
      • user_id: number
    • Optional old?: boolean | "Any" | "Unspecified" | "Video Game" | "Anime" | "Rock" | "Pop" | "Other" | "Novelty" | "Hip Hop" | "Electronic" | "Metal" | "Classical" | "Folk" | "Jazz" | "English" | "Japanese" | "Chinese" | "Instrumental" | "Korean" | "French" | "German" | "Swedish" | "Spanish" | "Italian" | "Russian" | "Polish"
    • Optional reason?: string
    • Optional votes?: {
          score: number;
          user_id: number;
      }[]
    created_at: Date
    discussion?: null | WithStartingpost
    id: number
    type: "nominate" | "love" | "remove_from_loved" | "qualify" | "disqualify" | "approve" | "rank" | "kudosu_allow" | "kudosu_denied" | "kudosu_gain" | "kudosu_lost" | "kudosu_recalculate" | "issue_resolve" | "issue_reopen" | "discussion_lock" | "disccusion_unlock" | "discussion_delete" | "discussion_restore" | "discussion_post_delete" | "discussion_post_restore" | "nomination_reset" | "nomination_reset_received" | "genre_edit" | "language_edit" | "nsfw_toggle" | "offset_edit" | "tags_edit" | "beatmap_owner_change"
    user_id: null | number

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Beatmapset.Event.html b/docs/interfaces/Beatmapset.Event.html deleted file mode 100644 index 1d2f405..0000000 --- a/docs/interfaces/Beatmapset.Event.html +++ /dev/null @@ -1,10 +0,0 @@ -Event | osu-api-v2-js

    Whether properties are there or not and null or not depend of the type

    -
    interface Event {
        beatmapset: WithUserHype;
        comment: null | {
            beatmap_discussion_id?: null | number;
            beatmap_discussion_post_id?: null | number;
            modes?: ("osu" | "taiko" | "fruits" | "mania")[];
            new?: "Any" | "Unspecified" | "Video Game" | "Anime" | "Rock" | "Pop" | "Other" | "Novelty" | "Hip Hop" | "Electronic" | "Metal" | "Classical" | "Folk" | "Jazz" | "English" | "Japanese" | "Chinese" | "Instrumental" | "Korean" | "French" | "German" | "Swedish" | "Spanish" | "Italian" | "Russian" | "Polish";
            new_vote?: {
                score: -1 | 1;
                user_id: number;
            };
            old?: "Any" | "Unspecified" | "Video Game" | "Anime" | "Rock" | "Pop" | "Other" | "Novelty" | "Hip Hop" | "Electronic" | "Metal" | "Classical" | "Folk" | "Jazz" | "English" | "Japanese" | "Chinese" | "Instrumental" | "Korean" | "French" | "German" | "Swedish" | "Spanish" | "Italian" | "Russian" | "Polish";
            reason?: string;
            votes?: {
                score: -1 | 1;
                user_id: number;
            }[];
        };
        created_at: Date;
        discussion?: null | WithStartingpost;
        id: number;
        type: "nominate" | "love" | "remove_from_loved" | "qualify" | "disqualify" | "approve" | "rank" | "kudosu_allow" | "kudosu_denied" | "kudosu_gain" | "kudosu_lost" | "kudosu_recalculate" | "issue_resolve" | "issue_reopen" | "discussion_lock" | "disccusion_unlock" | "discussion_delete" | "discussion_restore" | "discussion_post_delete" | "discussion_post_restore" | "nomination_reset" | "nomination_reset_received" | "genre_edit" | "language_edit" | "nsfw_toggle" | "offset_edit" | "tags_edit" | "beatmap_owner_change";
        user_id: null | number;
    }

    Properties

    beatmapset: WithUserHype
    comment: null | {
        beatmap_discussion_id?: null | number;
        beatmap_discussion_post_id?: null | number;
        modes?: ("osu" | "taiko" | "fruits" | "mania")[];
        new?: "Any" | "Unspecified" | "Video Game" | "Anime" | "Rock" | "Pop" | "Other" | "Novelty" | "Hip Hop" | "Electronic" | "Metal" | "Classical" | "Folk" | "Jazz" | "English" | "Japanese" | "Chinese" | "Instrumental" | "Korean" | "French" | "German" | "Swedish" | "Spanish" | "Italian" | "Russian" | "Polish";
        new_vote?: {
            score: -1 | 1;
            user_id: number;
        };
        old?: "Any" | "Unspecified" | "Video Game" | "Anime" | "Rock" | "Pop" | "Other" | "Novelty" | "Hip Hop" | "Electronic" | "Metal" | "Classical" | "Folk" | "Jazz" | "English" | "Japanese" | "Chinese" | "Instrumental" | "Korean" | "French" | "German" | "Swedish" | "Spanish" | "Italian" | "Russian" | "Polish";
        reason?: string;
        votes?: {
            score: -1 | 1;
            user_id: number;
        }[];
    }

    Type declaration

    • Optional beatmap_discussion_id?: null | number
    • Optional beatmap_discussion_post_id?: null | number
    • Optional modes?: ("osu" | "taiko" | "fruits" | "mania")[]
    • Optional new?: "Any" | "Unspecified" | "Video Game" | "Anime" | "Rock" | "Pop" | "Other" | "Novelty" | "Hip Hop" | "Electronic" | "Metal" | "Classical" | "Folk" | "Jazz" | "English" | "Japanese" | "Chinese" | "Instrumental" | "Korean" | "French" | "German" | "Swedish" | "Spanish" | "Italian" | "Russian" | "Polish"
    • Optional new_vote?: {
          score: -1 | 1;
          user_id: number;
      }
      • score: -1 | 1
      • user_id: number
    • Optional old?: "Any" | "Unspecified" | "Video Game" | "Anime" | "Rock" | "Pop" | "Other" | "Novelty" | "Hip Hop" | "Electronic" | "Metal" | "Classical" | "Folk" | "Jazz" | "English" | "Japanese" | "Chinese" | "Instrumental" | "Korean" | "French" | "German" | "Swedish" | "Spanish" | "Italian" | "Russian" | "Polish"
    • Optional reason?: string
    • Optional votes?: {
          score: -1 | 1;
          user_id: number;
      }[]
    created_at: Date
    discussion?: null | WithStartingpost
    id: number
    type: "nominate" | "love" | "remove_from_loved" | "qualify" | "disqualify" | "approve" | "rank" | "kudosu_allow" | "kudosu_denied" | "kudosu_gain" | "kudosu_lost" | "kudosu_recalculate" | "issue_resolve" | "issue_reopen" | "discussion_lock" | "disccusion_unlock" | "discussion_delete" | "discussion_restore" | "discussion_post_delete" | "discussion_post_restore" | "nomination_reset" | "nomination_reset_received" | "genre_edit" | "language_edit" | "nsfw_toggle" | "offset_edit" | "tags_edit" | "beatmap_owner_change"
    user_id: null | number

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Beatmapset.Extended-1.html b/docs/interfaces/Beatmapset.Extended-1.html index c6be5a4..067eade 100644 --- a/docs/interfaces/Beatmapset.Extended-1.html +++ b/docs/interfaces/Beatmapset.Extended-1.html @@ -1,10 +1,10 @@ -Extended | osu-api-v2-js
    interface Extended {
        artist: string;
        artist_unicode: string;
        availability: {
            download_disabled: boolean;
            more_information: null | string;
        };
        bpm: number;
        can_be_hyped: boolean;
        covers: {
            card: string;
            card@2x: string;
            cover: string;
            cover@2x: string;
            list: string;
            list@2x: string;
            slimcover: string;
            slimcover@2x: string;
        };
        creator: string;
        deleted_at: null | string;
        discussion_locked: boolean;
        favourite_count: number;
        hype: null | {
            current: number;
            required: number;
        };
        id: number;
        is_scoreable: boolean;
        last_updated: Date;
        legacy_thread_url: string;
        nominations_summary: {
            current: number;
            required: number;
        };
        nsfw: boolean;
        offset: number;
        play_count: number;
        preview_url: string;
        ranked: RankStatus;
        ranked_date: null | Date;
        source: string;
        spotlight: boolean;
        status: string;
        storyboard: boolean;
        submitted_date: null | Date;
        tags: string;
        title: string;
        title_unicode: string;
        user_id: number;
        video: boolean;
    }

    Hierarchy (view full)

    Properties

    artist +Extended | osu-api-v2-js
    interface Extended {
        artist: string;
        artist_unicode: string;
        availability: {
            download_disabled: boolean;
            more_information: null | string;
        };
        bpm: number;
        can_be_hyped: boolean;
        covers: {
            card: string;
            card@2x: string;
            cover: string;
            cover@2x: string;
            list: string;
            list@2x: string;
            slimcover: string;
            slimcover@2x: string;
        };
        creator: string;
        deleted_at: null | Date;
        discussion_locked: boolean;
        favourite_count: number;
        hype: null | {
            current: number;
            required: number;
        };
        id: number;
        is_scoreable: boolean;
        last_updated: Date;
        legacy_thread_url: string;
        nominations_summary: {
            current: number;
            required: number;
        };
        nsfw: boolean;
        offset: number;
        play_count: number;
        preview_url: string;
        ranked: RankStatus;
        ranked_date: null | Date;
        source: string;
        spotlight: boolean;
        status: string;
        storyboard: boolean;
        submitted_date: null | Date;
        tags: string;
        title: string;
        title_unicode: string;
        user_id: number;
        video: boolean;
    }

    Hierarchy (view full)

    Properties

    artist: string
    artist_unicode: string
    availability: {
        download_disabled: boolean;
        more_information: null | string;
    }

    Type declaration

    • download_disabled: boolean

      So it's false if you can download it

      -
    • more_information: null | string
    bpm: number
    can_be_hyped: boolean
    covers: {
        card: string;
        card@2x: string;
        cover: string;
        cover@2x: string;
        list: string;
        list@2x: string;
        slimcover: string;
        slimcover@2x: string;
    }

    Type declaration

    • card: string
    • card@2x: string
    • cover: string
    • cover@2x: string
    • list: string
    • list@2x: string
    • slimcover: string
    • slimcover@2x: string
    creator: string
    deleted_at: null | string
    discussion_locked: boolean
    favourite_count: number
    hype: null | {
        current: number;
        required: number;
    }

    Type declaration

    • current: number
    • required: number
    id: number
    is_scoreable: boolean
    last_updated: Date
    legacy_thread_url: string
    nominations_summary: {
        current: number;
        required: number;
    }

    Type declaration

    • current: number
    • required: number
    nsfw: boolean
    offset: number
    play_count: number
    preview_url: string

    A string like that where id is the id of the beatmapset: //b.ppy.sh/preview/58951.mp3

    -
    ranked: RankStatus
    ranked_date: null | Date
    source: string
    spotlight: boolean
    status: string

    Is it ranked, is it graveyarded, etc

    -
    storyboard: boolean
    submitted_date: null | Date
    tags: string
    title: string

    A title readable by any english-speaking person, so it'd be in romaji if the song's title is in Japanese

    -
    title_unicode: string

    Basically the title is the original language, so with hiragana, katakana and kanji if Japanese

    -
    user_id: number
    video: boolean

    Generated using TypeDoc

    \ No newline at end of file +

    Properties

    artist: string
    artist_unicode: string
    availability: {
        download_disabled: boolean;
        more_information: null | string;
    }

    Type declaration

    • download_disabled: boolean

      So it's false if you can download it

      +
    • more_information: null | string
    bpm: number
    can_be_hyped: boolean
    covers: {
        card: string;
        card@2x: string;
        cover: string;
        cover@2x: string;
        list: string;
        list@2x: string;
        slimcover: string;
        slimcover@2x: string;
    }

    Type declaration

    • card: string
    • card@2x: string
    • cover: string
    • cover@2x: string
    • list: string
    • list@2x: string
    • slimcover: string
    • slimcover@2x: string
    creator: string
    deleted_at: null | Date
    discussion_locked: boolean
    favourite_count: number
    hype: null | {
        current: number;
        required: number;
    }

    Type declaration

    • current: number
    • required: number
    id: number
    is_scoreable: boolean
    last_updated: Date
    legacy_thread_url: string
    nominations_summary: {
        current: number;
        required: number;
    }

    Type declaration

    • current: number
    • required: number
    nsfw: boolean
    offset: number
    play_count: number
    preview_url: string

    A string like that where id is the id of the beatmapset: //b.ppy.sh/preview/58951.mp3

    +
    ranked: RankStatus
    ranked_date: null | Date
    source: string
    spotlight: boolean
    status: string

    Is it ranked, is it graveyarded, etc

    +
    storyboard: boolean
    submitted_date: null | Date
    tags: string
    title: string

    A title readable by any english-speaking person, so it'd be in romaji if the song's title is in Japanese

    +
    title_unicode: string

    Basically the title is the original language, so with hiragana, katakana and kanji if Japanese

    +
    user_id: number
    video: boolean

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Beatmapset.Extended.Plus.html b/docs/interfaces/Beatmapset.Extended.Plus.html index f25a89d..1409efc 100644 --- a/docs/interfaces/Beatmapset.Extended.Plus.html +++ b/docs/interfaces/Beatmapset.Extended.Plus.html @@ -1,5 +1,5 @@ -Plus | osu-api-v2-js

    Obtainable From

    API.getBeatmapset

    -
    interface Plus {
        artist: string;
        artist_unicode: string;
        availability: {
            download_disabled: boolean;
            more_information: null | string;
        };
        beatmaps: WithFailtimes[];
        bpm: number;
        can_be_hyped: boolean;
        converts: WithFailtimes[];
        covers: {
            card: string;
            card@2x: string;
            cover: string;
            cover@2x: string;
            list: string;
            list@2x: string;
            slimcover: string;
            slimcover@2x: string;
        };
        creator: string;
        current_nominations: {
            beatmapset_id: number;
            reset: boolean;
            rulesets: Rulesets[];
            user_id: number;
        }[];
        deleted_at: null | string;
        description: {
            description: string;
        };
        discussion_locked: boolean;
        favourite_count: number;
        genre: {
            id: Genres;
            name: "Any" | "Unspecified" | "Video Game" | "Anime" | "Rock" | "Pop" | "Other" | "Novelty" | "Hip Hop" | "Electronic" | "Metal" | "Classical" | "Folk" | "Jazz";
        };
        has_favourited?: boolean;
        hype: null | {
            current: number;
            required: number;
        };
        id: number;
        is_scoreable: boolean;
        language: {
            id: Languages;
            name: "Any" | "Unspecified" | "Other" | "English" | "Japanese" | "Chinese" | "Instrumental" | "Korean" | "French" | "German" | "Swedish" | "Spanish" | "Italian" | "Russian" | "Polish";
        };
        last_updated: Date;
        legacy_thread_url: string;
        nominations_summary: {
            current: number;
            required: number;
        };
        nsfw: boolean;
        offset: number;
        pack_tags: string[];
        play_count: number;
        preview_url: string;
        ranked: RankStatus;
        ranked_date: null | Date;
        ratings: number[];
        recent_favourites: User[];
        related_users: User[];
        source: string;
        spotlight: boolean;
        status: string;
        storyboard: boolean;
        submitted_date: null | Date;
        tags: string;
        title: string;
        title_unicode: string;
        user: User;
        user_id: number;
        video: boolean;
    }

    Hierarchy (view full)

    Properties

    artist +Plus | osu-api-v2-js

    Obtainable From

    API.getBeatmapset

    +
    interface Plus {
        artist: string;
        artist_unicode: string;
        availability: {
            download_disabled: boolean;
            more_information: null | string;
        };
        beatmaps: WithFailtimes[];
        bpm: number;
        can_be_hyped: boolean;
        converts: WithFailtimes[];
        covers: {
            card: string;
            card@2x: string;
            cover: string;
            cover@2x: string;
            list: string;
            list@2x: string;
            slimcover: string;
            slimcover@2x: string;
        };
        creator: string;
        current_nominations: {
            beatmapset_id: number;
            reset: boolean;
            rulesets: Rulesets[];
            user_id: number;
        }[];
        deleted_at: null | Date;
        description: {
            description: string;
        };
        discussion_locked: boolean;
        favourite_count: number;
        genre: {
            id: Genres;
            name: "Any" | "Unspecified" | "Video Game" | "Anime" | "Rock" | "Pop" | "Other" | "Novelty" | "Hip Hop" | "Electronic" | "Metal" | "Classical" | "Folk" | "Jazz";
        };
        has_favourited?: boolean;
        hype: null | {
            current: number;
            required: number;
        };
        id: number;
        is_scoreable: boolean;
        language: {
            id: Languages;
            name: "Any" | "Unspecified" | "Other" | "English" | "Japanese" | "Chinese" | "Instrumental" | "Korean" | "French" | "German" | "Swedish" | "Spanish" | "Italian" | "Russian" | "Polish";
        };
        last_updated: Date;
        legacy_thread_url: string;
        nominations_summary: {
            current: number;
            required: number;
        };
        nsfw: boolean;
        offset: number;
        pack_tags: string[];
        play_count: number;
        preview_url: string;
        ranked: RankStatus;
        ranked_date: null | Date;
        ratings: number[];
        recent_favourites: User[];
        related_users: User[];
        source: string;
        spotlight: boolean;
        status: string;
        storyboard: boolean;
        submitted_date: null | Date;
        tags: string;
        title: string;
        title_unicode: string;
        user: User;
        user_id: number;
        video: boolean;
    }

    Hierarchy (view full)

    Properties

    Properties

    artist: string
    artist_unicode: string
    availability: {
        download_disabled: boolean;
        more_information: null | string;
    }

    Type declaration

    • download_disabled: boolean

      So it's false if you can download it

      -
    • more_information: null | string
    beatmaps: WithFailtimes[]

    The different beatmaps/difficulties this beatmapset has

    -
    bpm: number
    can_be_hyped: boolean
    converts: WithFailtimes[]

    The different beatmaps made for osu!, but converted to the other Rulesets

    -
    covers: {
        card: string;
        card@2x: string;
        cover: string;
        cover@2x: string;
        list: string;
        list@2x: string;
        slimcover: string;
        slimcover@2x: string;
    }

    Type declaration

    • card: string
    • card@2x: string
    • cover: string
    • cover@2x: string
    • list: string
    • list@2x: string
    • slimcover: string
    • slimcover@2x: string
    creator: string
    current_nominations: {
        beatmapset_id: number;
        reset: boolean;
        rulesets: Rulesets[];
        user_id: number;
    }[]

    Type declaration

    • beatmapset_id: number
    • reset: boolean
    • rulesets: Rulesets[]
    • user_id: number
    deleted_at: null | string
    description: {
        description: string;
    }

    Type declaration

    • description: string

      In HTML

      -
    discussion_locked: boolean
    favourite_count: number
    genre: {
        id: Genres;
        name: "Any" | "Unspecified" | "Video Game" | "Anime" | "Rock" | "Pop" | "Other" | "Novelty" | "Hip Hop" | "Electronic" | "Metal" | "Classical" | "Folk" | "Jazz";
    }

    Type declaration

    • id: Genres
    • name: "Any" | "Unspecified" | "Video Game" | "Anime" | "Rock" | "Pop" | "Other" | "Novelty" | "Hip Hop" | "Electronic" | "Metal" | "Classical" | "Folk" | "Jazz"
    has_favourited?: boolean

    Only exists if authorized user

    -
    hype: null | {
        current: number;
        required: number;
    }

    Type declaration

    • current: number
    • required: number
    id: number
    is_scoreable: boolean
    language: {
        id: Languages;
        name: "Any" | "Unspecified" | "Other" | "English" | "Japanese" | "Chinese" | "Instrumental" | "Korean" | "French" | "German" | "Swedish" | "Spanish" | "Italian" | "Russian" | "Polish";
    }

    Type declaration

    • id: Languages
    • name: "Any" | "Unspecified" | "Other" | "English" | "Japanese" | "Chinese" | "Instrumental" | "Korean" | "French" | "German" | "Swedish" | "Spanish" | "Italian" | "Russian" | "Polish"
    last_updated: Date
    legacy_thread_url: string
    nominations_summary: {
        current: number;
        required: number;
    }

    Type declaration

    • current: number
    • required: number
    nsfw: boolean
    offset: number
    pack_tags: string[]
    play_count: number
    preview_url: string

    A string like that where id is the id of the beatmapset: //b.ppy.sh/preview/58951.mp3

    -
    ranked: RankStatus
    ranked_date: null | Date
    ratings: number[]
    recent_favourites: User[]
    related_users: User[]
    source: string
    spotlight: boolean
    status: string

    Is it ranked, is it graveyarded, etc

    -
    storyboard: boolean
    submitted_date: null | Date
    tags: string
    title: string

    A title readable by any english-speaking person, so it'd be in romaji if the song's title is in Japanese

    -
    title_unicode: string

    Basically the title is the original language, so with hiragana, katakana and kanji if Japanese

    -
    user: User
    user_id: number
    video: boolean

    Generated using TypeDoc

    \ No newline at end of file +

    Properties

    artist: string
    artist_unicode: string
    availability: {
        download_disabled: boolean;
        more_information: null | string;
    }

    Type declaration

    • download_disabled: boolean

      So it's false if you can download it

      +
    • more_information: null | string
    beatmaps: WithFailtimes[]

    The different beatmaps/difficulties this beatmapset has

    +
    bpm: number
    can_be_hyped: boolean
    converts: WithFailtimes[]

    The different beatmaps made for osu!, but converted to the other Rulesets

    +
    covers: {
        card: string;
        card@2x: string;
        cover: string;
        cover@2x: string;
        list: string;
        list@2x: string;
        slimcover: string;
        slimcover@2x: string;
    }

    Type declaration

    • card: string
    • card@2x: string
    • cover: string
    • cover@2x: string
    • list: string
    • list@2x: string
    • slimcover: string
    • slimcover@2x: string
    creator: string
    current_nominations: {
        beatmapset_id: number;
        reset: boolean;
        rulesets: Rulesets[];
        user_id: number;
    }[]

    Type declaration

    • beatmapset_id: number
    • reset: boolean
    • rulesets: Rulesets[]
    • user_id: number
    deleted_at: null | Date
    description: {
        description: string;
    }

    Type declaration

    • description: string

      In HTML

      +
    discussion_locked: boolean
    favourite_count: number
    genre: {
        id: Genres;
        name: "Any" | "Unspecified" | "Video Game" | "Anime" | "Rock" | "Pop" | "Other" | "Novelty" | "Hip Hop" | "Electronic" | "Metal" | "Classical" | "Folk" | "Jazz";
    }

    Type declaration

    • id: Genres
    • name: "Any" | "Unspecified" | "Video Game" | "Anime" | "Rock" | "Pop" | "Other" | "Novelty" | "Hip Hop" | "Electronic" | "Metal" | "Classical" | "Folk" | "Jazz"
    has_favourited?: boolean

    Only exists if authorized user

    +
    hype: null | {
        current: number;
        required: number;
    }

    Type declaration

    • current: number
    • required: number
    id: number
    is_scoreable: boolean
    language: {
        id: Languages;
        name: "Any" | "Unspecified" | "Other" | "English" | "Japanese" | "Chinese" | "Instrumental" | "Korean" | "French" | "German" | "Swedish" | "Spanish" | "Italian" | "Russian" | "Polish";
    }

    Type declaration

    • id: Languages
    • name: "Any" | "Unspecified" | "Other" | "English" | "Japanese" | "Chinese" | "Instrumental" | "Korean" | "French" | "German" | "Swedish" | "Spanish" | "Italian" | "Russian" | "Polish"
    last_updated: Date
    legacy_thread_url: string
    nominations_summary: {
        current: number;
        required: number;
    }

    Type declaration

    • current: number
    • required: number
    nsfw: boolean
    offset: number
    pack_tags: string[]
    play_count: number
    preview_url: string

    A string like that where id is the id of the beatmapset: //b.ppy.sh/preview/58951.mp3

    +
    ranked: RankStatus
    ranked_date: null | Date
    ratings: number[]
    recent_favourites: User[]
    related_users: User[]
    source: string
    spotlight: boolean
    status: string

    Is it ranked, is it graveyarded, etc

    +
    storyboard: boolean
    submitted_date: null | Date
    tags: string
    title: string

    A title readable by any english-speaking person, so it'd be in romaji if the song's title is in Japanese

    +
    title_unicode: string

    Basically the title is the original language, so with hiragana, katakana and kanji if Japanese

    +
    user: User
    user_id: number
    video: boolean

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Beatmapset.Extended.WithBeatmap.html b/docs/interfaces/Beatmapset.Extended.WithBeatmap.html new file mode 100644 index 0000000..7c628cd --- /dev/null +++ b/docs/interfaces/Beatmapset.Extended.WithBeatmap.html @@ -0,0 +1,40 @@ +WithBeatmap | osu-api-v2-js

    Obtainable From

    API.getUserBeatmaps

    +
    interface WithBeatmap {
        artist: string;
        artist_unicode: string;
        availability: {
            download_disabled: boolean;
            more_information: null | string;
        };
        beatmaps: Beatmap.Extended[];
        bpm: number;
        can_be_hyped: boolean;
        covers: {
            card: string;
            card@2x: string;
            cover: string;
            cover@2x: string;
            list: string;
            list@2x: string;
            slimcover: string;
            slimcover@2x: string;
        };
        creator: string;
        deleted_at: null | Date;
        discussion_locked: boolean;
        favourite_count: number;
        hype: null | {
            current: number;
            required: number;
        };
        id: number;
        is_scoreable: boolean;
        last_updated: Date;
        legacy_thread_url: string;
        nominations_summary: {
            current: number;
            required: number;
        };
        nsfw: boolean;
        offset: number;
        play_count: number;
        preview_url: string;
        ranked: RankStatus;
        ranked_date: null | Date;
        source: string;
        spotlight: boolean;
        status: string;
        storyboard: boolean;
        submitted_date: null | Date;
        tags: string;
        title: string;
        title_unicode: string;
        user_id: number;
        video: boolean;
    }

    Hierarchy (view full)

    Properties

    artist: string
    artist_unicode: string
    availability: {
        download_disabled: boolean;
        more_information: null | string;
    }

    Type declaration

    • download_disabled: boolean

      So it's false if you can download it

      +
    • more_information: null | string
    beatmaps: Beatmap.Extended[]
    bpm: number
    can_be_hyped: boolean
    covers: {
        card: string;
        card@2x: string;
        cover: string;
        cover@2x: string;
        list: string;
        list@2x: string;
        slimcover: string;
        slimcover@2x: string;
    }

    Type declaration

    • card: string
    • card@2x: string
    • cover: string
    • cover@2x: string
    • list: string
    • list@2x: string
    • slimcover: string
    • slimcover@2x: string
    creator: string
    deleted_at: null | Date
    discussion_locked: boolean
    favourite_count: number
    hype: null | {
        current: number;
        required: number;
    }

    Type declaration

    • current: number
    • required: number
    id: number
    is_scoreable: boolean
    last_updated: Date
    legacy_thread_url: string
    nominations_summary: {
        current: number;
        required: number;
    }

    Type declaration

    • current: number
    • required: number
    nsfw: boolean
    offset: number
    play_count: number
    preview_url: string

    A string like that where id is the id of the beatmapset: //b.ppy.sh/preview/58951.mp3

    +
    ranked: RankStatus
    ranked_date: null | Date
    source: string
    spotlight: boolean
    status: string

    Is it ranked, is it graveyarded, etc

    +
    storyboard: boolean
    submitted_date: null | Date
    tags: string
    title: string

    A title readable by any english-speaking person, so it'd be in romaji if the song's title is in Japanese

    +
    title_unicode: string

    Basically the title is the original language, so with hiragana, katakana and kanji if Japanese

    +
    user_id: number
    video: boolean

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Beatmapset.Extended.WithBeatmapExtended.html b/docs/interfaces/Beatmapset.Extended.WithBeatmapExtended.html deleted file mode 100644 index add37cf..0000000 --- a/docs/interfaces/Beatmapset.Extended.WithBeatmapExtended.html +++ /dev/null @@ -1,40 +0,0 @@ -WithBeatmapExtended | osu-api-v2-js

    Obtainable From

    API.getUserBeatmaps

    -
    interface WithBeatmapExtended {
        artist: string;
        artist_unicode: string;
        availability: {
            download_disabled: boolean;
            more_information: null | string;
        };
        beatmaps: Beatmap.Extended[];
        bpm: number;
        can_be_hyped: boolean;
        covers: {
            card: string;
            card@2x: string;
            cover: string;
            cover@2x: string;
            list: string;
            list@2x: string;
            slimcover: string;
            slimcover@2x: string;
        };
        creator: string;
        deleted_at: null | string;
        discussion_locked: boolean;
        favourite_count: number;
        hype: null | {
            current: number;
            required: number;
        };
        id: number;
        is_scoreable: boolean;
        last_updated: Date;
        legacy_thread_url: string;
        nominations_summary: {
            current: number;
            required: number;
        };
        nsfw: boolean;
        offset: number;
        play_count: number;
        preview_url: string;
        ranked: RankStatus;
        ranked_date: null | Date;
        source: string;
        spotlight: boolean;
        status: string;
        storyboard: boolean;
        submitted_date: null | Date;
        tags: string;
        title: string;
        title_unicode: string;
        user_id: number;
        video: boolean;
    }

    Hierarchy (view full)

    Properties

    artist: string
    artist_unicode: string
    availability: {
        download_disabled: boolean;
        more_information: null | string;
    }

    Type declaration

    • download_disabled: boolean

      So it's false if you can download it

      -
    • more_information: null | string
    beatmaps: Beatmap.Extended[]
    bpm: number
    can_be_hyped: boolean
    covers: {
        card: string;
        card@2x: string;
        cover: string;
        cover@2x: string;
        list: string;
        list@2x: string;
        slimcover: string;
        slimcover@2x: string;
    }

    Type declaration

    • card: string
    • card@2x: string
    • cover: string
    • cover@2x: string
    • list: string
    • list@2x: string
    • slimcover: string
    • slimcover@2x: string
    creator: string
    deleted_at: null | string
    discussion_locked: boolean
    favourite_count: number
    hype: null | {
        current: number;
        required: number;
    }

    Type declaration

    • current: number
    • required: number
    id: number
    is_scoreable: boolean
    last_updated: Date
    legacy_thread_url: string
    nominations_summary: {
        current: number;
        required: number;
    }

    Type declaration

    • current: number
    • required: number
    nsfw: boolean
    offset: number
    play_count: number
    preview_url: string

    A string like that where id is the id of the beatmapset: //b.ppy.sh/preview/58951.mp3

    -
    ranked: RankStatus
    ranked_date: null | Date
    source: string
    spotlight: boolean
    status: string

    Is it ranked, is it graveyarded, etc

    -
    storyboard: boolean
    submitted_date: null | Date
    tags: string
    title: string

    A title readable by any english-speaking person, so it'd be in romaji if the song's title is in Japanese

    -
    title_unicode: string

    Basically the title is the original language, so with hiragana, katakana and kanji if Japanese

    -
    user_id: number
    video: boolean

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Beatmapset.Extended.WithBeatmapExtendedPacktags.html b/docs/interfaces/Beatmapset.Extended.WithBeatmapExtendedPacktags.html deleted file mode 100644 index 05b7374..0000000 --- a/docs/interfaces/Beatmapset.Extended.WithBeatmapExtendedPacktags.html +++ /dev/null @@ -1,40 +0,0 @@ -WithBeatmapExtendedPacktags | osu-api-v2-js
    interface WithBeatmapExtendedPacktags {
        artist: string;
        artist_unicode: string;
        availability: {
            download_disabled: boolean;
            more_information: null | string;
        };
        beatmaps: WithMaxcombo[];
        bpm: number;
        can_be_hyped: boolean;
        covers: {
            card: string;
            card@2x: string;
            cover: string;
            cover@2x: string;
            list: string;
            list@2x: string;
            slimcover: string;
            slimcover@2x: string;
        };
        creator: string;
        deleted_at: null | string;
        discussion_locked: boolean;
        favourite_count: number;
        hype: null | {
            current: number;
            required: number;
        };
        id: number;
        is_scoreable: boolean;
        last_updated: Date;
        legacy_thread_url: string;
        nominations_summary: {
            current: number;
            required: number;
        };
        nsfw: boolean;
        offset: number;
        pack_tags: string[];
        play_count: number;
        preview_url: string;
        ranked: RankStatus;
        ranked_date: null | Date;
        source: string;
        spotlight: boolean;
        status: string;
        storyboard: boolean;
        submitted_date: null | Date;
        tags: string;
        title: string;
        title_unicode: string;
        user_id: number;
        video: boolean;
    }

    Hierarchy (view full)

    Properties

    artist: string
    artist_unicode: string
    availability: {
        download_disabled: boolean;
        more_information: null | string;
    }

    Type declaration

    • download_disabled: boolean

      So it's false if you can download it

      -
    • more_information: null | string
    beatmaps: WithMaxcombo[]
    bpm: number
    can_be_hyped: boolean
    covers: {
        card: string;
        card@2x: string;
        cover: string;
        cover@2x: string;
        list: string;
        list@2x: string;
        slimcover: string;
        slimcover@2x: string;
    }

    Type declaration

    • card: string
    • card@2x: string
    • cover: string
    • cover@2x: string
    • list: string
    • list@2x: string
    • slimcover: string
    • slimcover@2x: string
    creator: string
    deleted_at: null | string
    discussion_locked: boolean
    favourite_count: number
    hype: null | {
        current: number;
        required: number;
    }

    Type declaration

    • current: number
    • required: number
    id: number
    is_scoreable: boolean
    last_updated: Date
    legacy_thread_url: string
    nominations_summary: {
        current: number;
        required: number;
    }

    Type declaration

    • current: number
    • required: number
    nsfw: boolean
    offset: number
    pack_tags: string[]
    play_count: number
    preview_url: string

    A string like that where id is the id of the beatmapset: //b.ppy.sh/preview/58951.mp3

    -
    ranked: RankStatus
    ranked_date: null | Date
    source: string
    spotlight: boolean
    status: string

    Is it ranked, is it graveyarded, etc

    -
    storyboard: boolean
    submitted_date: null | Date
    tags: string
    title: string

    A title readable by any english-speaking person, so it'd be in romaji if the song's title is in Japanese

    -
    title_unicode: string

    Basically the title is the original language, so with hiragana, katakana and kanji if Japanese

    -
    user_id: number
    video: boolean

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Beatmapset.Extended.WithBeatmapPacktags.html b/docs/interfaces/Beatmapset.Extended.WithBeatmapPacktags.html new file mode 100644 index 0000000..672ac2a --- /dev/null +++ b/docs/interfaces/Beatmapset.Extended.WithBeatmapPacktags.html @@ -0,0 +1,40 @@ +WithBeatmapPacktags | osu-api-v2-js
    interface WithBeatmapPacktags {
        artist: string;
        artist_unicode: string;
        availability: {
            download_disabled: boolean;
            more_information: null | string;
        };
        beatmaps: WithMaxcombo[];
        bpm: number;
        can_be_hyped: boolean;
        covers: {
            card: string;
            card@2x: string;
            cover: string;
            cover@2x: string;
            list: string;
            list@2x: string;
            slimcover: string;
            slimcover@2x: string;
        };
        creator: string;
        deleted_at: null | Date;
        discussion_locked: boolean;
        favourite_count: number;
        hype: null | {
            current: number;
            required: number;
        };
        id: number;
        is_scoreable: boolean;
        last_updated: Date;
        legacy_thread_url: string;
        nominations_summary: {
            current: number;
            required: number;
        };
        nsfw: boolean;
        offset: number;
        pack_tags: string[];
        play_count: number;
        preview_url: string;
        ranked: RankStatus;
        ranked_date: null | Date;
        source: string;
        spotlight: boolean;
        status: string;
        storyboard: boolean;
        submitted_date: null | Date;
        tags: string;
        title: string;
        title_unicode: string;
        user_id: number;
        video: boolean;
    }

    Hierarchy (view full)

    Properties

    artist: string
    artist_unicode: string
    availability: {
        download_disabled: boolean;
        more_information: null | string;
    }

    Type declaration

    • download_disabled: boolean

      So it's false if you can download it

      +
    • more_information: null | string
    beatmaps: WithMaxcombo[]
    bpm: number
    can_be_hyped: boolean
    covers: {
        card: string;
        card@2x: string;
        cover: string;
        cover@2x: string;
        list: string;
        list@2x: string;
        slimcover: string;
        slimcover@2x: string;
    }

    Type declaration

    • card: string
    • card@2x: string
    • cover: string
    • cover@2x: string
    • list: string
    • list@2x: string
    • slimcover: string
    • slimcover@2x: string
    creator: string
    deleted_at: null | Date
    discussion_locked: boolean
    favourite_count: number
    hype: null | {
        current: number;
        required: number;
    }

    Type declaration

    • current: number
    • required: number
    id: number
    is_scoreable: boolean
    last_updated: Date
    legacy_thread_url: string
    nominations_summary: {
        current: number;
        required: number;
    }

    Type declaration

    • current: number
    • required: number
    nsfw: boolean
    offset: number
    pack_tags: string[]
    play_count: number
    preview_url: string

    A string like that where id is the id of the beatmapset: //b.ppy.sh/preview/58951.mp3

    +
    ranked: RankStatus
    ranked_date: null | Date
    source: string
    spotlight: boolean
    status: string

    Is it ranked, is it graveyarded, etc

    +
    storyboard: boolean
    submitted_date: null | Date
    tags: string
    title: string

    A title readable by any english-speaking person, so it'd be in romaji if the song's title is in Japanese

    +
    title_unicode: string

    Basically the title is the original language, so with hiragana, katakana and kanji if Japanese

    +
    user_id: number
    video: boolean

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Beatmapset.WithHype.html b/docs/interfaces/Beatmapset.WithHype.html index 9e8503a..963f39a 100644 --- a/docs/interfaces/Beatmapset.WithHype.html +++ b/docs/interfaces/Beatmapset.WithHype.html @@ -1,4 +1,4 @@ -WithHype | osu-api-v2-js
    interface WithHype {
        artist: string;
        artist_unicode: string;
        covers: {
            card: string;
            card@2x: string;
            cover: string;
            cover@2x: string;
            list: string;
            list@2x: string;
            slimcover: string;
            slimcover@2x: string;
        };
        creator: string;
        favourite_count: number;
        hype: null | {
            current: number;
            required: number;
        };
        id: number;
        nsfw: boolean;
        offset: number;
        play_count: number;
        preview_url: string;
        source: string;
        spotlight: boolean;
        status: string;
        title: string;
        title_unicode: string;
        user_id: number;
        video: boolean;
    }

    Hierarchy (view full)

    Properties

    artist +WithHype | osu-api-v2-js
    interface WithHype {
        artist: string;
        artist_unicode: string;
        covers: {
            card: string;
            card@2x: string;
            cover: string;
            cover@2x: string;
            list: string;
            list@2x: string;
            slimcover: string;
            slimcover@2x: string;
        };
        creator: string;
        favourite_count: number;
        hype: null | {
            current: number;
            required: number;
        };
        id: number;
        nsfw: boolean;
        offset: number;
        play_count: number;
        preview_url: string;
        source: string;
        spotlight: boolean;
        status: string;
        title: string;
        title_unicode: string;
        user_id: number;
        video: boolean;
    }

    Hierarchy (view full)

    Properties

    artist: string
    artist_unicode: string
    covers: {
        card: string;
        card@2x: string;
        cover: string;
        cover@2x: string;
        list: string;
        list@2x: string;
        slimcover: string;
        slimcover@2x: string;
    }

    Type declaration

    • card: string
    • card@2x: string
    • cover: string
    • cover@2x: string
    • list: string
    • list@2x: string
    • slimcover: string
    • slimcover@2x: string
    creator: string
    favourite_count: number
    hype: null | {
        current: number;
        required: number;
    }

    Type declaration

    • current: number
    • required: number
    id: number
    nsfw: boolean
    offset: number
    play_count: number
    preview_url: string

    A string like that where id is the id of the beatmapset: //b.ppy.sh/preview/58951.mp3

    -
    source: string
    spotlight: boolean
    status: string

    Is it ranked, is it graveyarded, etc

    -
    title: string

    A title readable by any english-speaking person, so it'd be in romaji if the song's title is in Japanese

    -
    title_unicode: string

    Basically the title is the original language, so with hiragana, katakana and kanji if Japanese

    -
    user_id: number
    video: boolean

    Generated using TypeDoc

    \ No newline at end of file +

    Properties

    artist: string
    artist_unicode: string
    covers: {
        card: string;
        card@2x: string;
        cover: string;
        cover@2x: string;
        list: string;
        list@2x: string;
        slimcover: string;
        slimcover@2x: string;
    }

    Type declaration

    • card: string
    • card@2x: string
    • cover: string
    • cover@2x: string
    • list: string
    • list@2x: string
    • slimcover: string
    • slimcover@2x: string
    creator: string
    favourite_count: number
    hype: null | {
        current: number;
        required: number;
    }

    Type declaration

    • current: number
    • required: number
    id: number
    nsfw: boolean
    offset: number
    play_count: number
    preview_url: string

    A string like that where id is the id of the beatmapset: //b.ppy.sh/preview/58951.mp3

    +
    source: string
    spotlight: boolean
    status: string

    Is it ranked, is it graveyarded, etc

    +
    title: string

    A title readable by any english-speaking person, so it'd be in romaji if the song's title is in Japanese

    +
    title_unicode: string

    Basically the title is the original language, so with hiragana, katakana and kanji if Japanese

    +
    user_id: number
    video: boolean

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Beatmapset.WithUserHype.html b/docs/interfaces/Beatmapset.WithUserHype.html index 095e820..5831035 100644 --- a/docs/interfaces/Beatmapset.WithUserHype.html +++ b/docs/interfaces/Beatmapset.WithUserHype.html @@ -1,4 +1,4 @@ -WithUserHype | osu-api-v2-js
    interface WithUserHype {
        artist: string;
        artist_unicode: string;
        covers: {
            card: string;
            card@2x: string;
            cover: string;
            cover@2x: string;
            list: string;
            list@2x: string;
            slimcover: string;
            slimcover@2x: string;
        };
        creator: string;
        favourite_count: number;
        hype: null | {
            current: number;
            required: number;
        };
        id: number;
        nsfw: boolean;
        offset: number;
        play_count: number;
        preview_url: string;
        source: string;
        spotlight: boolean;
        status: string;
        title: string;
        title_unicode: string;
        user: User;
        user_id: number;
        video: boolean;
    }

    Hierarchy (view full)

    Properties

    artist +WithUserHype | osu-api-v2-js
    interface WithUserHype {
        artist: string;
        artist_unicode: string;
        covers: {
            card: string;
            card@2x: string;
            cover: string;
            cover@2x: string;
            list: string;
            list@2x: string;
            slimcover: string;
            slimcover@2x: string;
        };
        creator: string;
        favourite_count: number;
        hype: null | {
            current: number;
            required: number;
        };
        id: number;
        nsfw: boolean;
        offset: number;
        play_count: number;
        preview_url: string;
        source: string;
        spotlight: boolean;
        status: string;
        title: string;
        title_unicode: string;
        user: User;
        user_id: number;
        video: boolean;
    }

    Hierarchy (view full)

    Properties

    Properties

    artist: string
    artist_unicode: string
    covers: {
        card: string;
        card@2x: string;
        cover: string;
        cover@2x: string;
        list: string;
        list@2x: string;
        slimcover: string;
        slimcover@2x: string;
    }

    Type declaration

    • card: string
    • card@2x: string
    • cover: string
    • cover@2x: string
    • list: string
    • list@2x: string
    • slimcover: string
    • slimcover@2x: string
    creator: string
    favourite_count: number
    hype: null | {
        current: number;
        required: number;
    }

    Type declaration

    • current: number
    • required: number
    id: number
    nsfw: boolean
    offset: number
    play_count: number
    preview_url: string

    A string like that where id is the id of the beatmapset: //b.ppy.sh/preview/58951.mp3

    -
    source: string
    spotlight: boolean
    status: string

    Is it ranked, is it graveyarded, etc

    -
    title: string

    A title readable by any english-speaking person, so it'd be in romaji if the song's title is in Japanese

    -
    title_unicode: string

    Basically the title is the original language, so with hiragana, katakana and kanji if Japanese

    -
    user: User
    user_id: number
    video: boolean

    Generated using TypeDoc

    \ No newline at end of file +

    Properties

    artist: string
    artist_unicode: string
    covers: {
        card: string;
        card@2x: string;
        cover: string;
        cover@2x: string;
        list: string;
        list@2x: string;
        slimcover: string;
        slimcover@2x: string;
    }

    Type declaration

    • card: string
    • card@2x: string
    • cover: string
    • cover@2x: string
    • list: string
    • list@2x: string
    • slimcover: string
    • slimcover@2x: string
    creator: string
    favourite_count: number
    hype: null | {
        current: number;
        required: number;
    }

    Type declaration

    • current: number
    • required: number
    id: number
    nsfw: boolean
    offset: number
    play_count: number
    preview_url: string

    A string like that where id is the id of the beatmapset: //b.ppy.sh/preview/58951.mp3

    +
    source: string
    spotlight: boolean
    status: string

    Is it ranked, is it graveyarded, etc

    +
    title: string

    A title readable by any english-speaking person, so it'd be in romaji if the song's title is in Japanese

    +
    title_unicode: string

    Basically the title is the original language, so with hiragana, katakana and kanji if Japanese

    +
    user: User
    user_id: number
    video: boolean

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Changelog.Build-1.html b/docs/interfaces/Changelog.Build-1.html index 90f8897..2b45668 100644 --- a/docs/interfaces/Changelog.Build-1.html +++ b/docs/interfaces/Changelog.Build-1.html @@ -1,11 +1,11 @@ -Build | osu-api-v2-js
    interface Build {
        created_at: Date;
        display_version: string;
        id: number;
        users: number;
        version: null | string;
        youtube_id: null | string;
    }

    Hierarchy (view full)

    Properties

    created_at +Build | osu-api-v2-js
    interface Build {
        created_at: Date;
        display_version: string;
        id: number;
        users: number;
        version: null | string;
        youtube_id: null | string;
    }

    Hierarchy (view full)

    Properties

    created_at: Date
    display_version: string
    id: number
    users: number

    How many users are playing on this version of the game? (if web, should be 0)

    -
    version: null | string

    The name of the version

    -
    youtube_id: null | string

    If a video is showcased on the changelog

    +

    Properties

    created_at: Date
    display_version: string
    id: number
    users: number

    How many users are playing on this version of the game? (if web, should be 0)

    +
    version: null | string

    The name of the version

    +
    youtube_id: null | string

    If a video is showcased on the changelog

    Remarks

    The ID of a Youtube video is whatever comes after /watch?v= in its url

    -

    Generated using TypeDoc

    \ No newline at end of file +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Changelog.Build.WithChangelogentriesVersions.html b/docs/interfaces/Changelog.Build.WithChangelogentriesVersions.html index 324ee9d..5275c2c 100644 --- a/docs/interfaces/Changelog.Build.WithChangelogentriesVersions.html +++ b/docs/interfaces/Changelog.Build.WithChangelogentriesVersions.html @@ -1,5 +1,5 @@ -WithChangelogentriesVersions | osu-api-v2-js

    Interface WithChangelogentriesVersions

    Obtainable From

    API.getChangelogBuild

    -
    interface WithChangelogentriesVersions {
        changelog_entries: {
            category: string;
            created_at: Date;
            github_pull_request_id: null | number;
            github_url: null | string;
            github_user?: {
                display_name: string;
                github_url: null | string;
                github_username: null | string;
                id: null | number;
                osu_username: null | string;
                user_id: null | number;
                user_url: null | string;
            };
            id: null | number;
            major: boolean;
            message?: null | string;
            message_html?: null | string;
            repository: null | string;
            title: null | string;
            type: string;
            url: null | string;
        }[];
        created_at: Date;
        display_version: string;
        id: number;
        users: number;
        version: null | string;
        versions: {
            next: null | WithUpdatestreams;
            previous: null | WithUpdatestreams;
        };
        youtube_id: null | string;
    }

    Hierarchy

    • WithChangelogentries
      • WithChangelogentriesVersions

    Properties

    changelog_entries +WithChangelogentriesVersions | osu-api-v2-js

    Interface WithChangelogentriesVersions

    Obtainable From

    API.getChangelogBuild

    +
    interface WithChangelogentriesVersions {
        changelog_entries: {
            category: string;
            created_at: Date;
            github_pull_request_id: null | number;
            github_url: null | string;
            github_user?: {
                display_name: string;
                github_url: null | string;
                github_username: null | string;
                id: null | number;
                osu_username: null | string;
                user_id: null | number;
                user_url: null | string;
            };
            id: null | number;
            major: boolean;
            message?: null | string;
            message_html?: null | string;
            repository: null | string;
            title: null | string;
            type: string;
            url: null | string;
        }[];
        created_at: Date;
        display_version: string;
        id: number;
        users: number;
        version: null | string;
        versions: {
            next: null | WithUpdatestreams;
            previous: null | WithUpdatestreams;
        };
        youtube_id: null | string;
    }

    Hierarchy

    • WithChangelogentries
      • WithChangelogentriesVersions

    Properties

    changelog_entries: {
        category: string;
        created_at: Date;
        github_pull_request_id: null | number;
        github_url: null | string;
        github_user?: {
            display_name: string;
            github_url: null | string;
            github_username: null | string;
            id: null | number;
            osu_username: null | string;
            user_id: null | number;
            user_url: null | string;
        };
        id: null | number;
        major: boolean;
        message?: null | string;
        message_html?: null | string;
        repository: null | string;
        title: null | string;
        type: string;
        url: null | string;
    }[]

    Type declaration

    • category: string
    • created_at: Date

      Remarks

      Can be January 1st 1970!

      -
    • github_pull_request_id: null | number
    • github_url: null | string
    • Optional github_user?: {
          display_name: string;
          github_url: null | string;
          github_username: null | string;
          id: null | number;
          osu_username: null | string;
          user_id: null | number;
          user_url: null | string;
      }

      Remarks

      Doesn't exist if no github user is associated with who's credited with the change

      +
    • github_pull_request_id: null | number
    • github_url: null | string
    • Optional github_user?: {
          display_name: string;
          github_url: null | string;
          github_username: null | string;
          id: null | number;
          osu_username: null | string;
          user_id: null | number;
          user_url: null | string;
      }

      Remarks

      Doesn't exist if no github user is associated with the person who's credited with the change

      • display_name: string
      • github_url: null | string
      • github_username: null | string
      • id: null | number
      • osu_username: null | string
      • user_id: null | number
      • user_url: null | string
    • id: null | number
    • major: boolean
    • Optional message?: null | string

      Entry message in Markdown format, embedded HTML is allowed

      -

      Remarks

      Exists only if Markdown was requested

      +

      Remarks

      Exists only if Markdown was requested, may still be null if there is no message

    • Optional message_html?: null | string

      Entry message in HTML format

      -

      Remarks

      Exists only if HTML was requested

      -
    • repository: null | string
    • title: null | string
    • type: string
    • url: null | string
    created_at: Date
    display_version: string
    id: number
    users: number

    How many users are playing on this version of the game? (if web, should be 0)

    -
    version: null | string

    The name of the version

    -
    versions: {
        next: null | WithUpdatestreams;
        previous: null | WithUpdatestreams;
    }

    Type declaration

    youtube_id: null | string

    If a video is showcased on the changelog

    +

    Remarks

    Exists only if HTML was requested, may still be null if there is no message

    +
  • repository: null | string
  • title: null | string
  • type: string
  • url: null | string
  • created_at: Date
    display_version: string
    id: number
    users: number

    How many users are playing on this version of the game? (if web, should be 0)

    +
    version: null | string

    The name of the version

    +
    versions: {
        next: null | WithUpdatestreams;
        previous: null | WithUpdatestreams;
    }

    Type declaration

    youtube_id: null | string

    If a video is showcased on the changelog

    Remarks

    The ID of a Youtube video is whatever comes after /watch?v= in its url

    -

    Generated using TypeDoc

    \ No newline at end of file +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Changelog.Build.WithUpdatestreams.html b/docs/interfaces/Changelog.Build.WithUpdatestreams.html index b5fd42e..ec647e1 100644 --- a/docs/interfaces/Changelog.Build.WithUpdatestreams.html +++ b/docs/interfaces/Changelog.Build.WithUpdatestreams.html @@ -1,13 +1,13 @@ WithUpdatestreams | osu-api-v2-js
    interface WithUpdatestreams {
        created_at: Date;
        display_version: string;
        id: number;
        update_stream: UpdateStream;
        users: number;
        version: null | string;
        youtube_id: null | string;
    }

    Hierarchy (view full)

    Properties

    interface WithUpdatestreams {
        created_at: Date;
        display_version: string;
        id: number;
        update_stream: UpdateStream;
        users: number;
        version: null | string;
        youtube_id: null | string;
    }

    Hierarchy (view full)

    Properties

    created_at: Date
    display_version: string
    id: number
    update_stream: UpdateStream
    users: number

    How many users are playing on this version of the game? (if web, should be 0)

    -
    version: null | string

    The name of the version

    -
    youtube_id: null | string

    If a video is showcased on the changelog

    +

    Properties

    created_at: Date
    display_version: string
    id: number
    update_stream: UpdateStream
    users: number

    How many users are playing on this version of the game? (if web, should be 0)

    +
    version: null | string

    The name of the version

    +
    youtube_id: null | string

    If a video is showcased on the changelog

    Remarks

    The ID of a Youtube video is whatever comes after /watch?v= in its url

    -

    Generated using TypeDoc

    \ No newline at end of file +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Changelog.Build.WithUpdatestreamsChangelogentries.html b/docs/interfaces/Changelog.Build.WithUpdatestreamsChangelogentries.html index 955be0d..95f9038 100644 --- a/docs/interfaces/Changelog.Build.WithUpdatestreamsChangelogentries.html +++ b/docs/interfaces/Changelog.Build.WithUpdatestreamsChangelogentries.html @@ -1,5 +1,5 @@ -WithUpdatestreamsChangelogentries | osu-api-v2-js

    Interface WithUpdatestreamsChangelogentries

    Obtainable From

    API.getChangelogBuilds

    -
    interface WithUpdatestreamsChangelogentries {
        changelog_entries: {
            category: string;
            created_at: Date;
            github_pull_request_id: null | number;
            github_url: null | string;
            github_user?: {
                display_name: string;
                github_url: null | string;
                github_username: null | string;
                id: null | number;
                osu_username: null | string;
                user_id: null | number;
                user_url: null | string;
            };
            id: null | number;
            major: boolean;
            message?: null | string;
            message_html?: null | string;
            repository: null | string;
            title: null | string;
            type: string;
            url: null | string;
        }[];
        created_at: Date;
        display_version: string;
        id: number;
        update_stream: UpdateStream;
        users: number;
        version: null | string;
        youtube_id: null | string;
    }

    Hierarchy (view full)

    Properties

    changelog_entries +WithUpdatestreamsChangelogentries | osu-api-v2-js

    Interface WithUpdatestreamsChangelogentries

    Obtainable From

    API.getChangelogBuilds

    +
    interface WithUpdatestreamsChangelogentries {
        changelog_entries: {
            category: string;
            created_at: Date;
            github_pull_request_id: null | number;
            github_url: null | string;
            github_user?: {
                display_name: string;
                github_url: null | string;
                github_username: null | string;
                id: null | number;
                osu_username: null | string;
                user_id: null | number;
                user_url: null | string;
            };
            id: null | number;
            major: boolean;
            message?: null | string;
            message_html?: null | string;
            repository: null | string;
            title: null | string;
            type: string;
            url: null | string;
        }[];
        created_at: Date;
        display_version: string;
        id: number;
        update_stream: UpdateStream;
        users: number;
        version: null | string;
        youtube_id: null | string;
    }

    Hierarchy (view full)

    Properties

    changelog_entries: {
        category: string;
        created_at: Date;
        github_pull_request_id: null | number;
        github_url: null | string;
        github_user?: {
            display_name: string;
            github_url: null | string;
            github_username: null | string;
            id: null | number;
            osu_username: null | string;
            user_id: null | number;
            user_url: null | string;
        };
        id: null | number;
        major: boolean;
        message?: null | string;
        message_html?: null | string;
        repository: null | string;
        title: null | string;
        type: string;
        url: null | string;
    }[]

    Type declaration

    • category: string
    • created_at: Date

      Remarks

      Can be January 1st 1970!

      -
    • github_pull_request_id: null | number
    • github_url: null | string
    • Optional github_user?: {
          display_name: string;
          github_url: null | string;
          github_username: null | string;
          id: null | number;
          osu_username: null | string;
          user_id: null | number;
          user_url: null | string;
      }

      Remarks

      Doesn't exist if no github user is associated with who's credited with the change

      +
    • github_pull_request_id: null | number
    • github_url: null | string
    • Optional github_user?: {
          display_name: string;
          github_url: null | string;
          github_username: null | string;
          id: null | number;
          osu_username: null | string;
          user_id: null | number;
          user_url: null | string;
      }

      Remarks

      Doesn't exist if no github user is associated with the person who's credited with the change

      • display_name: string
      • github_url: null | string
      • github_username: null | string
      • id: null | number
      • osu_username: null | string
      • user_id: null | number
      • user_url: null | string
    • id: null | number
    • major: boolean
    • Optional message?: null | string

      Entry message in Markdown format, embedded HTML is allowed

      -

      Remarks

      Exists only if Markdown was requested

      +

      Remarks

      Exists only if Markdown was requested, may still be null if there is no message

    • Optional message_html?: null | string

      Entry message in HTML format

      -

      Remarks

      Exists only if HTML was requested

      -
    • repository: null | string
    • title: null | string
    • type: string
    • url: null | string
    created_at: Date
    display_version: string
    id: number
    update_stream: UpdateStream
    users: number

    How many users are playing on this version of the game? (if web, should be 0)

    -
    version: null | string

    The name of the version

    -
    youtube_id: null | string

    If a video is showcased on the changelog

    +

    Remarks

    Exists only if HTML was requested, may still be null if there is no message

    +
  • repository: null | string
  • title: null | string
  • type: string
  • url: null | string
  • created_at: Date
    display_version: string
    id: number
    update_stream: UpdateStream
    users: number

    How many users are playing on this version of the game? (if web, should be 0)

    +
    version: null | string

    The name of the version

    +
    youtube_id: null | string

    If a video is showcased on the changelog

    Remarks

    The ID of a Youtube video is whatever comes after /watch?v= in its url

    -

    Generated using TypeDoc

    \ No newline at end of file +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Changelog.UpdateStream-1.html b/docs/interfaces/Changelog.UpdateStream-1.html index b8b21a2..6bad262 100644 --- a/docs/interfaces/Changelog.UpdateStream-1.html +++ b/docs/interfaces/Changelog.UpdateStream-1.html @@ -1,6 +1,8 @@ UpdateStream | osu-api-v2-js
    interface UpdateStream {
        display_name: null | string;
        id: number;
        is_featured: boolean;
        name: string;
    }

    Hierarchy (view full)

    Properties

    interface UpdateStream {
        display_name: null | string;
        id: number;
        is_featured: boolean;
        name: string;
    }

    Hierarchy (view full)

    Properties

    display_name: null | string
    id: number
    is_featured: boolean
    name: string

    Generated using TypeDoc

    \ No newline at end of file +

    Properties

    display_name: null | string

    Stable would be Stable, Lazer would be Lazer

    +
    id: number
    is_featured: boolean
    name: string

    Stable would be stable40, Lazer would be lazer

    +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Changelog.UpdateStream.WithLatestbuildUsercount.html b/docs/interfaces/Changelog.UpdateStream.WithLatestbuildUsercount.html index a938180..bbbfe96 100644 --- a/docs/interfaces/Changelog.UpdateStream.WithLatestbuildUsercount.html +++ b/docs/interfaces/Changelog.UpdateStream.WithLatestbuildUsercount.html @@ -1,10 +1,12 @@ -WithLatestbuildUsercount | osu-api-v2-js

    Obtainable From

    API.getChangelogStreams

    -
    interface WithLatestbuildUsercount {
        display_name: null | string;
        id: number;
        is_featured: boolean;
        latest_build: null | Build;
        name: string;
        user_count: number;
    }

    Hierarchy (view full)

    Properties

    display_name +WithLatestbuildUsercount | osu-api-v2-js

    Obtainable From

    API.getChangelogStreams

    +
    interface WithLatestbuildUsercount {
        display_name: null | string;
        id: number;
        is_featured: boolean;
        latest_build: null | Build;
        name: string;
        user_count: number;
    }

    Hierarchy (view full)

    Properties

    display_name: null | string
    id: number
    is_featured: boolean
    latest_build: null | Build
    name: string
    user_count: number

    How many users are playing on this?

    +

    Properties

    display_name: null | string

    Stable would be Stable, Lazer would be Lazer

    +
    id: number
    is_featured: boolean
    latest_build: null | Build
    name: string

    Stable would be stable40, Lazer would be lazer

    +
    user_count: number

    How many users are playing on this?

    Remarks

    Should be 0 if web

    -

    Generated using TypeDoc

    \ No newline at end of file +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Chat.Channel-1.html b/docs/interfaces/Chat.Channel-1.html index ae9c59f..31cb2a3 100644 --- a/docs/interfaces/Chat.Channel-1.html +++ b/docs/interfaces/Chat.Channel-1.html @@ -1,10 +1,10 @@ -Channel | osu-api-v2-js

    Interface Channel

    interface Channel {
        channel_id: number;
        description: null | string;
        icon: null | string;
        moderated: boolean;
        name: string;
        type: "PUBLIC" | "PRIVATE" | "MULTIPLAYER" | "SPECTATOR" | "TEMPORARY" | "PM" | "GROUP" | "ANNOUNCE";
        uuid: null | string;
    }

    Hierarchy (view full)

    Properties

    channel_id +Channel | osu-api-v2-js

    Interface Channel

    interface Channel {
        channel_id: number;
        description: null | string;
        icon: null | string;
        moderated: boolean;
        name: string;
        type: "PUBLIC" | "PRIVATE" | "MULTIPLAYER" | "SPECTATOR" | "TEMPORARY" | "PM" | "GROUP" | "ANNOUNCE";
        uuid: null | string;
    }

    Hierarchy (view full)

    Properties

    channel_id: number
    description: null | string
    icon: null | string
    moderated: boolean
    name: string
    type: "PUBLIC" | "PRIVATE" | "MULTIPLAYER" | "SPECTATOR" | "TEMPORARY" | "PM" | "GROUP" | "ANNOUNCE"
    uuid: null | string

    Generated using TypeDoc

    \ No newline at end of file +

    Properties

    channel_id: number
    description: null | string
    icon: null | string
    moderated: boolean
    name: string
    type: "PUBLIC" | "PRIVATE" | "MULTIPLAYER" | "SPECTATOR" | "TEMPORARY" | "PM" | "GROUP" | "ANNOUNCE"
    uuid: null | string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Chat.Channel.WithDetails.html b/docs/interfaces/Chat.Channel.WithDetails.html index de4162d..1265ad0 100644 --- a/docs/interfaces/Chat.Channel.WithDetails.html +++ b/docs/interfaces/Chat.Channel.WithDetails.html @@ -1,6 +1,6 @@ -WithDetails | osu-api-v2-js
    interface WithDetails {
        channel_id: number;
        current_user_attributes: {
            can_message: boolean;
            can_message_error: null | string;
            last_read_id: null | number;
        };
        description: null | string;
        icon: null | string;
        last_message_id: number;
        moderated: boolean;
        name: string;
        type: "PUBLIC" | "PRIVATE" | "MULTIPLAYER" | "SPECTATOR" | "TEMPORARY" | "PM" | "GROUP" | "ANNOUNCE";
        users: number[];
        uuid: null | string;
    }

    Hierarchy (view full)

    Properties

    channel_id +WithDetails | osu-api-v2-js
    interface WithDetails {
        channel_id: number;
        current_user_attributes: {
            can_message: boolean;
            can_message_error: null | string;
            last_read_id: null | number;
        };
        description: null | string;
        icon: null | string;
        last_message_id: number;
        moderated: boolean;
        name: string;
        type: "PUBLIC" | "PRIVATE" | "MULTIPLAYER" | "SPECTATOR" | "TEMPORARY" | "PM" | "GROUP" | "ANNOUNCE";
        users: number[];
        uuid: null | string;
    }

    Hierarchy (view full)

    Properties

    channel_id: number
    current_user_attributes: {
        can_message: boolean;
        can_message_error: null | string;
        last_read_id: null | number;
    }

    Type declaration

    • can_message: boolean
    • can_message_error: null | string

      The reason why messages can't be sent in this channel

      +

    Properties

    channel_id: number
    current_user_attributes: {
        can_message: boolean;
        can_message_error: null | string;
        last_read_id: null | number;
    }

    Type declaration

    • can_message: boolean
    • can_message_error: null | string

      The reason why messages can't be sent in this channel

      Remarks

      Is null if messages can be sent

    • last_read_id: null | number

      Remarks

      Is null if no message has been read (I think)

      -
    description: null | string
    icon: null | string
    last_message_id: number
    moderated: boolean
    name: string
    type: "PUBLIC" | "PRIVATE" | "MULTIPLAYER" | "SPECTATOR" | "TEMPORARY" | "PM" | "GROUP" | "ANNOUNCE"
    users: number[]

    The ids of the users that are in the channel

    +
    description: null | string
    icon: null | string
    last_message_id: number
    moderated: boolean
    name: string
    type: "PUBLIC" | "PRIVATE" | "MULTIPLAYER" | "SPECTATOR" | "TEMPORARY" | "PM" | "GROUP" | "ANNOUNCE"
    users: number[]

    The ids of the users that are in the channel

    Remarks

    Is empty for public channels

    -
    uuid: null | string

    Generated using TypeDoc

    \ No newline at end of file +
    uuid: null | string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Chat.Message-1.html b/docs/interfaces/Chat.Message-1.html new file mode 100644 index 0000000..6f11ee8 --- /dev/null +++ b/docs/interfaces/Chat.Message-1.html @@ -0,0 +1,14 @@ +Message | osu-api-v2-js

    Interface Message

    interface Message {
        channel_id: number;
        content: string;
        is_action: boolean;
        message_id: number;
        sender: User;
        sender_id: number;
        timestamp: Date;
        type: string;
        uuid?: null | string;
    }

    Properties

    channel_id: number
    content: string
    is_action: boolean
    message_id: number
    sender: User
    sender_id: number
    timestamp: Date
    type: string

    Like "action", "markdown", "plain"

    +
    uuid?: null | string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Chat.Message.html b/docs/interfaces/Chat.Message.html deleted file mode 100644 index 31154e0..0000000 --- a/docs/interfaces/Chat.Message.html +++ /dev/null @@ -1,14 +0,0 @@ -Message | osu-api-v2-js

    Interface Message

    interface Message {
        channel_id: number;
        content: string;
        is_action: boolean;
        message_id: number;
        sender: User;
        sender_id: number;
        timestamp: Date;
        type: string;
        uuid?: null | string;
    }

    Properties

    channel_id: number
    content: string
    is_action: boolean
    message_id: number
    sender: User
    sender_id: number
    timestamp: Date
    type: string

    Like "action", "markdown", "plain"

    -
    uuid?: null | string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Chat.UserSilence.html b/docs/interfaces/Chat.UserSilence.html index 100748b..006e8cd 100644 --- a/docs/interfaces/Chat.UserSilence.html +++ b/docs/interfaces/Chat.UserSilence.html @@ -1,4 +1,4 @@ -UserSilence | osu-api-v2-js

    Interface UserSilence

    Obtainable From

    API.keepChatAlive

    -
    interface UserSilence {
        id: number;
        user_id: number;
    }

    Properties

    id +UserSilence | osu-api-v2-js

    Interface UserSilence

    Obtainable From

    API.keepChatAlive

    +
    interface UserSilence {
        id: number;
        user_id: number;
    }

    Properties

    Properties

    id: number
    user_id: number

    Generated using TypeDoc

    \ No newline at end of file +

    Properties

    id: number
    user_id: number

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Comment-1.html b/docs/interfaces/Comment-1.html new file mode 100644 index 0000000..a9ffb5f --- /dev/null +++ b/docs/interfaces/Comment-1.html @@ -0,0 +1,21 @@ +Comment | osu-api-v2-js

    Interface Comment

    interface Comment {
        commentable_id: number;
        commentable_type: "beatmapset" | "build" | "news_post";
        created_at: Date;
        deleted_at: null | Date;
        edited_at: null | Date;
        edited_by_id: null | number;
        id: number;
        legacy_name: null | string;
        message?: string;
        message_html?: string;
        parent_id: null | number;
        pinned: boolean;
        replies_count: number;
        updated_at: Date;
        user_id: number;
        votes_count: number;
    }

    Properties

    commentable_id: number
    commentable_type: "beatmapset" | "build" | "news_post"

    "build" means changelog, like pretty much everywhere in the API

    +
    created_at: Date
    deleted_at: null | Date
    edited_at: null | Date
    edited_by_id: null | number
    id: number
    legacy_name: null | string

    I think it's the name used by the person who made the comment before a migration to a new comment system in 2018 or before?

    +
    message?: string

    Yes comments may not have this property, yes this is stupid

    +
    message_html?: string

    Yes comments may not have this property, yes this is stupid

    +
    parent_id: null | number
    pinned: boolean
    replies_count: number
    updated_at: Date
    user_id: number
    votes_count: number

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Comment.Bundle-1.html b/docs/interfaces/Comment.Bundle-1.html new file mode 100644 index 0000000..fbe7ac0 --- /dev/null +++ b/docs/interfaces/Comment.Bundle-1.html @@ -0,0 +1,19 @@ +Bundle | osu-api-v2-js

    Obtainable From

    API.getComment

    +
    interface Bundle {
        commentable_meta: {
            current_user_attributes: {
                can_new_comment_reason: null | string;
            };
            id: number;
            owner_id: null | number;
            owner_title: null | string;
            title: string;
            type: "beatmapset" | "build" | "news_post";
            url: string;
        }[];
        comments: Comment[];
        cursor: null | {
            created_at: Date;
            id: number;
        };
        deleted_commentable_meta: number;
        has_more: boolean;
        has_more_id: null | number;
        included_comments: Comment[];
        pinned_comments: Comment[];
        sort: "new" | "top" | "old";
        user_follow: boolean;
        user_votes: number[];
        users: User[];
    }

    Hierarchy (view full)

    Properties

    commentable_meta: {
        current_user_attributes: {
            can_new_comment_reason: null | string;
        };
        id: number;
        owner_id: null | number;
        owner_title: null | string;
        title: string;
        type: "beatmapset" | "build" | "news_post";
        url: string;
    }[]

    Type declaration

    • current_user_attributes: {
          can_new_comment_reason: null | string;
      }
      • can_new_comment_reason: null | string

        The string explains why the authorized user cannot post a new comment in this specific context, it's null if they can

        +

        Remarks

        If there is simply no authorized user, this'll be a string such as "Please sign in to proceed."

        +
    • id: number
    • owner_id: null | number
    • owner_title: null | string

      Like MAPPER

      +
    • title: string
    • type: "beatmapset" | "build" | "news_post"
    • url: string
    comments: Comment[]
    cursor: null | {
        created_at: Date;
        id: number;
    }

    Type declaration

    • created_at: Date
    • id: number
    deleted_commentable_meta: number

    This is an original property of the package that lets you know how many CommentableMetas that only consist of a title of "Deleted Item" got removed

    +

    Remarks

    This DOES COUNT the one that is always there, see https://github.com/ppy/osu-web/issues/11077

    +
    has_more: boolean
    has_more_id: null | number
    included_comments: Comment[]
    pinned_comments: Comment[]
    sort: "new" | "top" | "old"
    user_follow: boolean
    user_votes: number[]
    users: User[]

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Comment.Bundle.WithTotalToplevelcount.html b/docs/interfaces/Comment.Bundle.WithTotalToplevelcount.html new file mode 100644 index 0000000..c9ec84b --- /dev/null +++ b/docs/interfaces/Comment.Bundle.WithTotalToplevelcount.html @@ -0,0 +1,21 @@ +WithTotalToplevelcount | osu-api-v2-js

    Interface WithTotalToplevelcount

    Obtainable From

    API.getComments

    +
    interface WithTotalToplevelcount {
        commentable_meta: {
            current_user_attributes: {
                can_new_comment_reason: null | string;
            };
            id: number;
            owner_id: null | number;
            owner_title: null | string;
            title: string;
            type: "beatmapset" | "build" | "news_post";
            url: string;
        }[];
        comments: Comment[];
        cursor: null | {
            created_at: Date;
            id: number;
        };
        deleted_commentable_meta: number;
        has_more: boolean;
        has_more_id: null | number;
        included_comments: Comment[];
        pinned_comments: Comment[];
        sort: "new" | "top" | "old";
        top_level_count: number;
        total: number;
        user_follow: boolean;
        user_votes: number[];
        users: User[];
    }

    Hierarchy (view full)

    Properties

    commentable_meta: {
        current_user_attributes: {
            can_new_comment_reason: null | string;
        };
        id: number;
        owner_id: null | number;
        owner_title: null | string;
        title: string;
        type: "beatmapset" | "build" | "news_post";
        url: string;
    }[]

    Type declaration

    • current_user_attributes: {
          can_new_comment_reason: null | string;
      }
      • can_new_comment_reason: null | string

        The string explains why the authorized user cannot post a new comment in this specific context, it's null if they can

        +

        Remarks

        If there is simply no authorized user, this'll be a string such as "Please sign in to proceed."

        +
    • id: number
    • owner_id: null | number
    • owner_title: null | string

      Like MAPPER

      +
    • title: string
    • type: "beatmapset" | "build" | "news_post"
    • url: string
    comments: Comment[]
    cursor: null | {
        created_at: Date;
        id: number;
    }

    Type declaration

    • created_at: Date
    • id: number
    deleted_commentable_meta: number

    This is an original property of the package that lets you know how many CommentableMetas that only consist of a title of "Deleted Item" got removed

    +

    Remarks

    This DOES COUNT the one that is always there, see https://github.com/ppy/osu-web/issues/11077

    +
    has_more: boolean
    has_more_id: null | number
    included_comments: Comment[]
    pinned_comments: Comment[]
    sort: "new" | "top" | "old"
    top_level_count: number
    total: number
    user_follow: boolean
    user_votes: number[]
    users: User[]

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Comment.html b/docs/interfaces/Comment.html deleted file mode 100644 index bc75027..0000000 --- a/docs/interfaces/Comment.html +++ /dev/null @@ -1,21 +0,0 @@ -Comment | osu-api-v2-js

    Interface Comment

    interface Comment {
        commentable_id: number;
        commentable_type: "beatmapset" | "build" | "news_post";
        created_at: Date;
        deleted_at: null | Date;
        edited_at: null | Date;
        edited_by_id: null | number;
        id: number;
        legacy_name: null | string;
        message?: string;
        message_html?: string;
        parent_id: null | number;
        pinned: boolean;
        replies_count: number;
        updated_at: Date;
        user_id: number;
        votes_count: number;
    }

    Properties

    commentable_id: number
    commentable_type: "beatmapset" | "build" | "news_post"

    "build" means changelog, like pretty much everywhere in the API

    -
    created_at: Date
    deleted_at: null | Date
    edited_at: null | Date
    edited_by_id: null | number
    id: number
    legacy_name: null | string

    I think it's the name used by the person who made the comment before a migration to a new comment system in 2018 or before?

    -
    message?: string

    Yes comments may not have this property, yes this is stupid

    -
    message_html?: string

    Yes comments may not have this property, yes this is stupid

    -
    parent_id: null | number
    pinned: boolean
    replies_count: number
    updated_at: Date
    user_id: number
    votes_count: number

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/CommentBundle-1.html b/docs/interfaces/CommentBundle-1.html deleted file mode 100644 index b009870..0000000 --- a/docs/interfaces/CommentBundle-1.html +++ /dev/null @@ -1,18 +0,0 @@ -CommentBundle | osu-api-v2-js

    Interface CommentBundle

    Obtainable From

    API.getComment

    -
    interface CommentBundle {
        commentable_meta: {
            current_user_attributes: {
                can_new_comment_reason: null | string;
            };
            id: number;
            owner_id: null | number;
            owner_title: null | string;
            title: string;
            type: "beatmapset" | "build" | "news_post";
            url: string;
        }[];
        comments: Comment[];
        cursor: null | {
            created_at: Date;
            id: number;
        };
        deleted_commentable_meta: number;
        has_more: boolean;
        has_more_id: null | number;
        included_comments: Comment[];
        pinned_comments: Comment[];
        sort: "new" | "top" | "old";
        user_follow: boolean;
        user_votes: number[];
        users: User[];
    }

    Hierarchy (view full)

    Properties

    commentable_meta: {
        current_user_attributes: {
            can_new_comment_reason: null | string;
        };
        id: number;
        owner_id: null | number;
        owner_title: null | string;
        title: string;
        type: "beatmapset" | "build" | "news_post";
        url: string;
    }[]

    Type declaration

    • current_user_attributes: {
          can_new_comment_reason: null | string;
      }
      • can_new_comment_reason: null | string

        The string explains why the authorized user cannot post a new comment in this specific context, it's null if they can

        -

        Remarks

        If there is simply no authorized user, this'll be a string such as "Please sign in to proceed."

        -
    • id: number
    • owner_id: null | number
    • owner_title: null | string
    • title: string
    • type: "beatmapset" | "build" | "news_post"
    • url: string
    comments: Comment[]
    cursor: null | {
        created_at: Date;
        id: number;
    }

    Type declaration

    • created_at: Date
    • id: number
    deleted_commentable_meta: number

    This is an original property of the package that lets you know how many CommentableMetas that only consist of a title of "Deleted Item" got removed

    -

    Remarks

    This DOES COUNT the one that is always there, see https://github.com/ppy/osu-web/issues/11077

    -
    has_more: boolean
    has_more_id: null | number
    included_comments: Comment[]
    pinned_comments: Comment[]
    sort: "new" | "top" | "old"
    user_follow: boolean
    user_votes: number[]
    users: User[]

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/CommentBundle.WithTotalToplevelcount.html b/docs/interfaces/CommentBundle.WithTotalToplevelcount.html deleted file mode 100644 index 97c9de3..0000000 --- a/docs/interfaces/CommentBundle.WithTotalToplevelcount.html +++ /dev/null @@ -1,20 +0,0 @@ -WithTotalToplevelcount | osu-api-v2-js

    Interface WithTotalToplevelcount

    Obtainable From

    API.getComments

    -
    interface WithTotalToplevelcount {
        commentable_meta: {
            current_user_attributes: {
                can_new_comment_reason: null | string;
            };
            id: number;
            owner_id: null | number;
            owner_title: null | string;
            title: string;
            type: "beatmapset" | "build" | "news_post";
            url: string;
        }[];
        comments: Comment[];
        cursor: null | {
            created_at: Date;
            id: number;
        };
        deleted_commentable_meta: number;
        has_more: boolean;
        has_more_id: null | number;
        included_comments: Comment[];
        pinned_comments: Comment[];
        sort: "new" | "top" | "old";
        top_level_count: number;
        total: number;
        user_follow: boolean;
        user_votes: number[];
        users: User[];
    }

    Hierarchy (view full)

    Properties

    commentable_meta: {
        current_user_attributes: {
            can_new_comment_reason: null | string;
        };
        id: number;
        owner_id: null | number;
        owner_title: null | string;
        title: string;
        type: "beatmapset" | "build" | "news_post";
        url: string;
    }[]

    Type declaration

    • current_user_attributes: {
          can_new_comment_reason: null | string;
      }
      • can_new_comment_reason: null | string

        The string explains why the authorized user cannot post a new comment in this specific context, it's null if they can

        -

        Remarks

        If there is simply no authorized user, this'll be a string such as "Please sign in to proceed."

        -
    • id: number
    • owner_id: null | number
    • owner_title: null | string
    • title: string
    • type: "beatmapset" | "build" | "news_post"
    • url: string
    comments: Comment[]
    cursor: null | {
        created_at: Date;
        id: number;
    }

    Type declaration

    • created_at: Date
    • id: number
    deleted_commentable_meta: number

    This is an original property of the package that lets you know how many CommentableMetas that only consist of a title of "Deleted Item" got removed

    -

    Remarks

    This DOES COUNT the one that is always there, see https://github.com/ppy/osu-web/issues/11077

    -
    has_more: boolean
    has_more_id: null | number
    included_comments: Comment[]
    pinned_comments: Comment[]
    sort: "new" | "top" | "old"
    top_level_count: number
    total: number
    user_follow: boolean
    user_votes: number[]
    users: User[]

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Event-1.html b/docs/interfaces/Event-1.html index 63eb2ae..c6b4157 100644 --- a/docs/interfaces/Event-1.html +++ b/docs/interfaces/Event-1.html @@ -1,3 +1,3 @@ -Event | osu-api-v2-js

    Interface Event

    interface Event {
        created_at: Date;
        id: number;
    }

    Hierarchy (view full)

    Properties

    created_at +Event | osu-api-v2-js

    Interface Event

    interface Event {
        created_at: Date;
        id: number;
    }

    Hierarchy (view full)

    Properties

    Properties

    created_at: Date
    id: number

    Generated using TypeDoc

    \ No newline at end of file +

    Properties

    created_at: Date
    id: number

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Event.Achievement.html b/docs/interfaces/Event.Achievement.html index 7001052..b9679d9 100644 --- a/docs/interfaces/Event.Achievement.html +++ b/docs/interfaces/Event.Achievement.html @@ -1,8 +1,8 @@ -Achievement | osu-api-v2-js

    Interface Achievement

    interface Achievement {
        achievement: {
            description: string;
            grouping: string;
            icon_url: string;
            id: number;
            instructions: null | string;
            mode: null | "osu" | "taiko" | "fruits" | "mania";
            name: string;
            ordering: number;
            slug: string;
        };
        created_at: Date;
        id: number;
        type: "achievement";
        user: Event.SharedProperties.User;
    }

    Hierarchy (view full)

    Properties

    achievement +Achievement | osu-api-v2-js

    Interface Achievement

    interface Achievement {
        achievement: {
            description: string;
            grouping: string;
            icon_url: string;
            id: number;
            instructions: null | string;
            mode: null | "osu" | "taiko" | "fruits" | "mania";
            name: string;
            ordering: number;
            slug: string;
        };
        created_at: Date;
        id: number;
        type: "achievement";
        user: Event.SharedProperties.User;
    }

    Hierarchy (view full)

    Properties

    achievement: {
        description: string;
        grouping: string;
        icon_url: string;
        id: number;
        instructions: null | string;
        mode: null | "osu" | "taiko" | "fruits" | "mania";
        name: string;
        ordering: number;
        slug: string;
    }

    Type declaration

    • description: string
    • grouping: string
    • icon_url: string
    • id: number
    • instructions: null | string

      Remarks

      May contain HTML (like have the text between )

    • mode: null | "osu" | "taiko" | "fruits" | "mania"

      If the achievement is for a specific mode only (such as pass a 2* beatmap in taiko)

      -
    • name: string
    • ordering: number
    • slug: string
    created_at: Date
    id: number
    type: "achievement"

    Generated using TypeDoc

    \ No newline at end of file +
  • name: string
  • ordering: number
  • slug: string
  • created_at: Date
    id: number
    type: "achievement"

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Event.BeatmapPlaycount.html b/docs/interfaces/Event.BeatmapPlaycount.html index b5eb481..fd8ab07 100644 --- a/docs/interfaces/Event.BeatmapPlaycount.html +++ b/docs/interfaces/Event.BeatmapPlaycount.html @@ -1,6 +1,6 @@ -BeatmapPlaycount | osu-api-v2-js

    Interface BeatmapPlaycount

    interface BeatmapPlaycount {
        beatmap: Event.SharedProperties.Beatmap;
        count: number;
        created_at: Date;
        id: number;
        type: "beatmapPlaycount";
    }

    Hierarchy (view full)

    Properties

    beatmap +BeatmapPlaycount | osu-api-v2-js

    Interface BeatmapPlaycount

    interface BeatmapPlaycount {
        beatmap: Event.SharedProperties.Beatmap;
        count: number;
        created_at: Date;
        id: number;
        type: "beatmapPlaycount";
    }

    Hierarchy (view full)

    Properties

    count: number
    created_at: Date
    id: number
    type: "beatmapPlaycount"

    Generated using TypeDoc

    \ No newline at end of file +

    Properties

    count: number
    created_at: Date
    id: number
    type: "beatmapPlaycount"

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Event.BeatmapsetApprove.html b/docs/interfaces/Event.BeatmapsetApprove.html index adc7fb2..3e6046f 100644 --- a/docs/interfaces/Event.BeatmapsetApprove.html +++ b/docs/interfaces/Event.BeatmapsetApprove.html @@ -1,7 +1,7 @@ -BeatmapsetApprove | osu-api-v2-js

    Interface BeatmapsetApprove

    interface BeatmapsetApprove {
        approval: "ranked" | "approved" | "qualified" | "loved";
        beatmapset: Event.SharedProperties.Beatmapset;
        created_at: Date;
        id: number;
        type: "beatmapsetApprove";
        user: Event.SharedProperties.User;
    }

    Hierarchy (view full)

    Properties

    approval +BeatmapsetApprove | osu-api-v2-js

    Interface BeatmapsetApprove

    interface BeatmapsetApprove {
        approval: "loved" | "ranked" | "qualified" | "approved";
        beatmapset: Event.SharedProperties.Beatmapset;
        created_at: Date;
        id: number;
        type: "beatmapsetApprove";
        user: Event.SharedProperties.User;
    }

    Hierarchy (view full)

    Properties

    approval: "ranked" | "approved" | "qualified" | "loved"
    created_at: Date
    id: number
    type: "beatmapsetApprove"

    Generated using TypeDoc

    \ No newline at end of file +

    Properties

    approval: "loved" | "ranked" | "qualified" | "approved"
    created_at: Date
    id: number
    type: "beatmapsetApprove"

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Event.BeatmapsetDelete.html b/docs/interfaces/Event.BeatmapsetDelete.html index 23cba85..9623b34 100644 --- a/docs/interfaces/Event.BeatmapsetDelete.html +++ b/docs/interfaces/Event.BeatmapsetDelete.html @@ -1,5 +1,5 @@ -BeatmapsetDelete | osu-api-v2-js

    Interface BeatmapsetDelete

    interface BeatmapsetDelete {
        beatmapset: Event.SharedProperties.Beatmapset;
        created_at: Date;
        id: number;
        type: "beatmapsetDelete";
    }

    Hierarchy (view full)

    Properties

    beatmapset +BeatmapsetDelete | osu-api-v2-js

    Interface BeatmapsetDelete

    interface BeatmapsetDelete {
        beatmapset: Event.SharedProperties.Beatmapset;
        created_at: Date;
        id: number;
        type: "beatmapsetDelete";
    }

    Hierarchy (view full)

    Properties

    created_at: Date
    id: number
    type: "beatmapsetDelete"

    Generated using TypeDoc

    \ No newline at end of file +

    Properties

    created_at: Date
    id: number
    type: "beatmapsetDelete"

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Event.BeatmapsetRevive.html b/docs/interfaces/Event.BeatmapsetRevive.html index ddf5cc5..d98cc79 100644 --- a/docs/interfaces/Event.BeatmapsetRevive.html +++ b/docs/interfaces/Event.BeatmapsetRevive.html @@ -1,6 +1,6 @@ -BeatmapsetRevive | osu-api-v2-js

    Interface BeatmapsetRevive

    interface BeatmapsetRevive {
        beatmapset: Event.SharedProperties.Beatmapset;
        created_at: Date;
        id: number;
        type: "beatmapsetRevive";
        user: Event.SharedProperties.User;
    }

    Hierarchy (view full)

    Properties

    beatmapset +BeatmapsetRevive | osu-api-v2-js

    Interface BeatmapsetRevive

    interface BeatmapsetRevive {
        beatmapset: Event.SharedProperties.Beatmapset;
        created_at: Date;
        id: number;
        type: "beatmapsetRevive";
        user: Event.SharedProperties.User;
    }

    Hierarchy (view full)

    Properties

    created_at: Date
    id: number
    type: "beatmapsetRevive"

    Generated using TypeDoc

    \ No newline at end of file +

    Properties

    created_at: Date
    id: number
    type: "beatmapsetRevive"

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Event.BeatmapsetUpdate.html b/docs/interfaces/Event.BeatmapsetUpdate.html index bbc30eb..5b9dc93 100644 --- a/docs/interfaces/Event.BeatmapsetUpdate.html +++ b/docs/interfaces/Event.BeatmapsetUpdate.html @@ -1,6 +1,6 @@ -BeatmapsetUpdate | osu-api-v2-js

    Interface BeatmapsetUpdate

    interface BeatmapsetUpdate {
        beatmapset: Event.SharedProperties.Beatmapset;
        created_at: Date;
        id: number;
        type: "beatmapsetUpdate";
        user: Event.SharedProperties.User;
    }

    Hierarchy (view full)

    Properties

    beatmapset +BeatmapsetUpdate | osu-api-v2-js

    Interface BeatmapsetUpdate

    interface BeatmapsetUpdate {
        beatmapset: Event.SharedProperties.Beatmapset;
        created_at: Date;
        id: number;
        type: "beatmapsetUpdate";
        user: Event.SharedProperties.User;
    }

    Hierarchy (view full)

    Properties

    created_at: Date
    id: number
    type: "beatmapsetUpdate"

    Generated using TypeDoc

    \ No newline at end of file +

    Properties

    created_at: Date
    id: number
    type: "beatmapsetUpdate"

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Event.BeatmapsetUpload.html b/docs/interfaces/Event.BeatmapsetUpload.html index 4f69368..5206605 100644 --- a/docs/interfaces/Event.BeatmapsetUpload.html +++ b/docs/interfaces/Event.BeatmapsetUpload.html @@ -1,6 +1,6 @@ -BeatmapsetUpload | osu-api-v2-js

    Interface BeatmapsetUpload

    interface BeatmapsetUpload {
        beatmapset: Event.SharedProperties.Beatmapset;
        created_at: Date;
        id: number;
        type: "beatmapsetUpload";
        user: Event.SharedProperties.User;
    }

    Hierarchy (view full)

    Properties

    beatmapset +BeatmapsetUpload | osu-api-v2-js

    Interface BeatmapsetUpload

    interface BeatmapsetUpload {
        beatmapset: Event.SharedProperties.Beatmapset;
        created_at: Date;
        id: number;
        type: "beatmapsetUpload";
        user: Event.SharedProperties.User;
    }

    Hierarchy (view full)

    Properties

    created_at: Date
    id: number
    type: "beatmapsetUpload"

    Generated using TypeDoc

    \ No newline at end of file +

    Properties

    created_at: Date
    id: number
    type: "beatmapsetUpload"

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Event.Rank.html b/docs/interfaces/Event.Rank.html index c5ff292..95071af 100644 --- a/docs/interfaces/Event.Rank.html +++ b/docs/interfaces/Event.Rank.html @@ -1,4 +1,4 @@ -Rank | osu-api-v2-js
    interface Rank {
        beatmap: Event.SharedProperties.Beatmap;
        created_at: Date;
        id: number;
        mode: "osu" | "taiko" | "fruits" | "mania";
        rank: number;
        scoreRank: string;
        type: "rank";
        user: Event.SharedProperties.User;
    }

    Hierarchy (view full)

    Properties

    beatmap +Rank | osu-api-v2-js
    interface Rank {
        beatmap: Event.SharedProperties.Beatmap;
        created_at: Date;
        id: number;
        mode: "osu" | "taiko" | "fruits" | "mania";
        rank: number;
        scoreRank: string;
        type: "rank";
        user: Event.SharedProperties.User;
    }

    Hierarchy (view full)

    Properties

    Properties

    created_at: Date
    id: number
    mode: "osu" | "taiko" | "fruits" | "mania"
    rank: number

    The position achieved, like 14

    -
    scoreRank: string

    The grade, like "S"

    -
    type: "rank"

    Generated using TypeDoc

    \ No newline at end of file +

    Properties

    created_at: Date
    id: number
    mode: "osu" | "taiko" | "fruits" | "mania"
    rank: number

    The position achieved, like 14

    +
    scoreRank: string

    The grade, like "S"

    +
    type: "rank"

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Event.RankLost.html b/docs/interfaces/Event.RankLost.html index 920b20e..93a247e 100644 --- a/docs/interfaces/Event.RankLost.html +++ b/docs/interfaces/Event.RankLost.html @@ -1,7 +1,7 @@ -RankLost | osu-api-v2-js

    Interface RankLost

    interface RankLost {
        beatmap: Event.SharedProperties.Beatmap;
        created_at: Date;
        id: number;
        mode: "osu" | "taiko" | "fruits" | "mania";
        type: "rankLost";
        user: Event.SharedProperties.User;
    }

    Hierarchy (view full)

    Properties

    beatmap +RankLost | osu-api-v2-js

    Interface RankLost

    interface RankLost {
        beatmap: Event.SharedProperties.Beatmap;
        created_at: Date;
        id: number;
        mode: "osu" | "taiko" | "fruits" | "mania";
        type: "rankLost";
        user: Event.SharedProperties.User;
    }

    Hierarchy (view full)

    Properties

    created_at: Date
    id: number
    mode: "osu" | "taiko" | "fruits" | "mania"
    type: "rankLost"

    Generated using TypeDoc

    \ No newline at end of file +

    Properties

    created_at: Date
    id: number
    mode: "osu" | "taiko" | "fruits" | "mania"
    type: "rankLost"

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Event.SharedProperties.Beatmap.html b/docs/interfaces/Event.SharedProperties.Beatmap.html index bcb5a59..07943aa 100644 --- a/docs/interfaces/Event.SharedProperties.Beatmap.html +++ b/docs/interfaces/Event.SharedProperties.Beatmap.html @@ -1,5 +1,5 @@ -Beatmap | osu-api-v2-js
    interface Beatmap {
        title: string;
        url: string;
    }

    Properties

    title +Beatmap | osu-api-v2-js
    interface Beatmap {
        title: string;
        url: string;
    }

    Properties

    Properties

    title: string

    {artist} - {title} [{difficulty_name}]

    -
    url: string

    What goes after the website's URL, like it could be the /b/2980857?m=0 of https://osu.ppy.sh/b/2980857?m=0 (/{beatmap_id}?m={ruleset_id})

    -

    Generated using TypeDoc

    \ No newline at end of file +

    Properties

    title: string

    Format: {artist} - {song_name} [{difficulty_name}]

    +
    url: string

    What goes after the website's URL, like it could be the /b/2980857?m=0 of https://osu.ppy.sh/b/2980857?m=0 (/{beatmap_id}?m={ruleset_id})

    +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Event.SharedProperties.Beatmapset.html b/docs/interfaces/Event.SharedProperties.Beatmapset.html index 3fdd593..7a2dccd 100644 --- a/docs/interfaces/Event.SharedProperties.Beatmapset.html +++ b/docs/interfaces/Event.SharedProperties.Beatmapset.html @@ -1,5 +1,5 @@ -Beatmapset | osu-api-v2-js
    interface Beatmapset {
        title: string;
        url: string;
    }

    Properties

    title +Beatmapset | osu-api-v2-js
    interface Beatmapset {
        title: string;
        url: string;
    }

    Properties

    Properties

    title: string

    {artist} - {title}

    -
    url: string

    What goes after the website's URL, like it could be the /s/689155 of https://osu.ppy.sh/s/689155 (/{beatmapset_id})

    -

    Generated using TypeDoc

    \ No newline at end of file +

    Properties

    title: string

    Format: {artist} - {song_name}

    +
    url: string

    What goes after the website's URL, like it could be the /s/689155 of https://osu.ppy.sh/s/689155 (/{beatmapset_id})

    +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Event.SharedProperties.User.html b/docs/interfaces/Event.SharedProperties.User.html index a56f36d..b8d271a 100644 --- a/docs/interfaces/Event.SharedProperties.User.html +++ b/docs/interfaces/Event.SharedProperties.User.html @@ -1,4 +1,4 @@ -User | osu-api-v2-js
    interface User {
        url: string;
        username: string;
    }

    Properties

    url +User | osu-api-v2-js
    interface User {
        url: string;
        username: string;
    }

    Properties

    Properties

    url: string

    What goes after the website's URL, so for example, it could be the /u/7276846 of https://osu.ppy.sh/u/7276846 (or users instead of u)

    -
    username: string

    Generated using TypeDoc

    \ No newline at end of file +
    username: string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Event.UserSupportAgain.html b/docs/interfaces/Event.UserSupportAgain.html index 3537f24..fcfe2ee 100644 --- a/docs/interfaces/Event.UserSupportAgain.html +++ b/docs/interfaces/Event.UserSupportAgain.html @@ -1,5 +1,5 @@ -UserSupportAgain | osu-api-v2-js

    Interface UserSupportAgain

    interface UserSupportAgain {
        created_at: Date;
        id: number;
        type: "userSupportAgain";
        user: Event.SharedProperties.User;
    }

    Hierarchy (view full)

    Properties

    created_at +UserSupportAgain | osu-api-v2-js

    Interface UserSupportAgain

    interface UserSupportAgain {
        created_at: Date;
        id: number;
        type: "userSupportAgain";
        user: Event.SharedProperties.User;
    }

    Hierarchy (view full)

    Properties

    Properties

    created_at: Date
    id: number
    type: "userSupportAgain"

    Generated using TypeDoc

    \ No newline at end of file +

    Properties

    created_at: Date
    id: number
    type: "userSupportAgain"

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Event.UserSupportFirst.html b/docs/interfaces/Event.UserSupportFirst.html index 94e4d59..9f76f9d 100644 --- a/docs/interfaces/Event.UserSupportFirst.html +++ b/docs/interfaces/Event.UserSupportFirst.html @@ -1,5 +1,5 @@ -UserSupportFirst | osu-api-v2-js

    Interface UserSupportFirst

    interface UserSupportFirst {
        created_at: Date;
        id: number;
        type: "userSupportFirst";
        user: Event.SharedProperties.User;
    }

    Hierarchy (view full)

    Properties

    created_at +UserSupportFirst | osu-api-v2-js

    Interface UserSupportFirst

    interface UserSupportFirst {
        created_at: Date;
        id: number;
        type: "userSupportFirst";
        user: Event.SharedProperties.User;
    }

    Hierarchy (view full)

    Properties

    Properties

    created_at: Date
    id: number
    type: "userSupportFirst"

    Generated using TypeDoc

    \ No newline at end of file +

    Properties

    created_at: Date
    id: number
    type: "userSupportFirst"

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Event.UserSupportGift.html b/docs/interfaces/Event.UserSupportGift.html index 733956d..e35ea27 100644 --- a/docs/interfaces/Event.UserSupportGift.html +++ b/docs/interfaces/Event.UserSupportGift.html @@ -1,5 +1,5 @@ -UserSupportGift | osu-api-v2-js

    Interface UserSupportGift

    interface UserSupportGift {
        created_at: Date;
        id: number;
        type: "userSupportGift";
        user: Event.SharedProperties.User;
    }

    Hierarchy (view full)

    Properties

    created_at +UserSupportGift | osu-api-v2-js

    Interface UserSupportGift

    interface UserSupportGift {
        created_at: Date;
        id: number;
        type: "userSupportGift";
        user: Event.SharedProperties.User;
    }

    Hierarchy (view full)

    Properties

    Properties

    created_at: Date
    id: number
    type: "userSupportGift"

    Generated using TypeDoc

    \ No newline at end of file +

    Properties

    created_at: Date
    id: number
    type: "userSupportGift"

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Event.UsernameChange.html b/docs/interfaces/Event.UsernameChange.html index b24ae3b..0be63cc 100644 --- a/docs/interfaces/Event.UsernameChange.html +++ b/docs/interfaces/Event.UsernameChange.html @@ -1,6 +1,6 @@ -UsernameChange | osu-api-v2-js

    Interface UsernameChange

    interface UsernameChange {
        created_at: Date;
        id: number;
        type: "usernameChange";
        user: {
            previousUsername: string;
            url: string;
            username: string;
        };
    }

    Hierarchy (view full)

    Properties

    created_at +UsernameChange | osu-api-v2-js

    Interface UsernameChange

    interface UsernameChange {
        created_at: Date;
        id: number;
        type: "usernameChange";
        user: {
            previousUsername: string;
            url: string;
            username: string;
        };
    }

    Hierarchy (view full)

    Properties

    Properties

    created_at: Date
    id: number
    type: "usernameChange"
    user: {
        previousUsername: string;
        url: string;
        username: string;
    }

    Type declaration

    • previousUsername: string
    • url: string

      What goes after the website's URL, so for example, it could be the /u/7276846 of https://osu.ppy.sh/u/7276846 (or users instead of u)

      -
    • username: string

    Generated using TypeDoc

    \ No newline at end of file +

    Properties

    created_at: Date
    id: number
    type: "usernameChange"
    user: {
        previousUsername: string;
        url: string;
        username: string;
    }

    Type declaration

    • previousUsername: string
    • url: string

      What goes after the website's URL, so for example, it could be the /u/7276846 of https://osu.ppy.sh/u/7276846 (or users instead of u)

      +
    • username: string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Forum.Post.html b/docs/interfaces/Forum.Post-1.html similarity index 68% rename from docs/interfaces/Forum.Post.html rename to docs/interfaces/Forum.Post-1.html index 306f1e8..4219f82 100644 --- a/docs/interfaces/Forum.Post.html +++ b/docs/interfaces/Forum.Post-1.html @@ -1,16 +1,16 @@ -Post | osu-api-v2-js
    interface Post {
        body: {
            html: string;
            raw: string;
        };
        created_at: Date;
        deleted_at: null | Date;
        edited_at: null | Date;
        edited_by_id: null | number;
        forum_id: number;
        id: number;
        topic_id: number;
        user_id: number;
    }

    Properties

    body -created_at -deleted_at -edited_at -edited_by_id -forum_id -id -topic_id -user_id +Post | osu-api-v2-js
    interface Post {
        body: {
            html: string;
            raw: string;
        };
        created_at: Date;
        deleted_at: null | Date;
        edited_at: null | Date;
        edited_by_id: null | number;
        forum_id: number;
        id: number;
        topic_id: number;
        user_id: number;
    }

    Properties

    body: {
        html: string;
        raw: string;
    }

    Type declaration

    • html: string

      Post content in HTML format

    • raw: string

      Post content in BBCode format

      -
    created_at: Date
    deleted_at: null | Date
    edited_at: null | Date
    edited_by_id: null | number
    forum_id: number
    id: number
    topic_id: number
    user_id: number

    Generated using TypeDoc

    \ No newline at end of file +
    created_at: Date
    deleted_at: null | Date
    edited_at: null | Date
    edited_by_id: null | number
    forum_id: number
    id: number
    topic_id: number
    user_id: number

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Forum.Topic.html b/docs/interfaces/Forum.Topic-1.html similarity index 68% rename from docs/interfaces/Forum.Topic.html rename to docs/interfaces/Forum.Topic-1.html index 3efbae4..74caa77 100644 --- a/docs/interfaces/Forum.Topic.html +++ b/docs/interfaces/Forum.Topic-1.html @@ -1,18 +1,18 @@ -Topic | osu-api-v2-js
    interface Topic {
        created_at: Date;
        deleted_at: null | Date;
        first_post_id: number;
        forum_id: number;
        id: number;
        is_locked: boolean;
        last_post_id: number;
        poll: null | {
            allow_vote_change: boolean;
            ended_at: null | Date;
            hide_incomplete_results: boolean;
            last_vote_at: null | Date;
            max_votes: number;
            options: {
                id: number;
                text: {
                    bbcode: string;
                    html: string;
                };
                vote_count?: number;
            }[];
            started_at: Date;
            title: {
                bbcode: string;
                html: string;
            };
            total_vote_count: number;
        };
        post_count: number;
        title: string;
        type: "normal" | "sticky" | "announcement";
        updated_at: Date;
        user_id: number;
    }

    Properties

    created_at: Date
    deleted_at: null | Date
    first_post_id: number
    forum_id: number
    id: number
    is_locked: boolean
    last_post_id: number
    poll: null | {
        allow_vote_change: boolean;
        ended_at: null | Date;
        hide_incomplete_results: boolean;
        last_vote_at: null | Date;
        max_votes: number;
        options: {
            id: number;
            text: {
                bbcode: string;
                html: string;
            };
            vote_count?: number;
        }[];
        started_at: Date;
        title: {
            bbcode: string;
            html: string;
        };
        total_vote_count: number;
    }

    Type declaration

    • allow_vote_change: boolean
    • ended_at: null | Date

      Remarks

      Can be in the future

      -
    • hide_incomplete_results: boolean
    • last_vote_at: null | Date
    • max_votes: number
    • options: {
          id: number;
          text: {
              bbcode: string;
              html: string;
          };
          vote_count?: number;
      }[]
    • started_at: Date
    • title: {
          bbcode: string;
          html: string;
      }
      • bbcode: string
      • html: string
    • total_vote_count: number
    post_count: number
    title: string
    type: "normal" | "sticky" | "announcement"
    updated_at: Date
    user_id: number

    Generated using TypeDoc

    \ No newline at end of file +Topic | osu-api-v2-js
    interface Topic {
        created_at: Date;
        deleted_at: null | Date;
        first_post_id: number;
        forum_id: number;
        id: number;
        is_locked: boolean;
        last_post_id: number;
        poll: null | {
            allow_vote_change: boolean;
            ended_at: null | Date;
            hide_incomplete_results: boolean;
            last_vote_at: null | Date;
            max_votes: number;
            options: {
                id: number;
                text: {
                    bbcode: string;
                    html: string;
                };
                vote_count?: number;
            }[];
            started_at: Date;
            title: {
                bbcode: string;
                html: string;
            };
            total_vote_count: number;
        };
        post_count: number;
        title: string;
        type: "normal" | "sticky" | "announcement";
        updated_at: Date;
        user_id: number;
    }

    Properties

    created_at: Date
    deleted_at: null | Date
    first_post_id: number
    forum_id: number
    id: number
    is_locked: boolean
    last_post_id: number
    poll: null | {
        allow_vote_change: boolean;
        ended_at: null | Date;
        hide_incomplete_results: boolean;
        last_vote_at: null | Date;
        max_votes: number;
        options: {
            id: number;
            text: {
                bbcode: string;
                html: string;
            };
            vote_count?: number;
        }[];
        started_at: Date;
        title: {
            bbcode: string;
            html: string;
        };
        total_vote_count: number;
    }

    Type declaration

    • allow_vote_change: boolean
    • ended_at: null | Date

      Remarks

      Can be in the future

      +
    • hide_incomplete_results: boolean
    • last_vote_at: null | Date
    • max_votes: number
    • options: {
          id: number;
          text: {
              bbcode: string;
              html: string;
          };
          vote_count?: number;
      }[]
    • started_at: Date
    • title: {
          bbcode: string;
          html: string;
      }
      • bbcode: string
      • html: string
    • total_vote_count: number
    post_count: number
    title: string
    type: "normal" | "sticky" | "announcement"
    updated_at: Date
    user_id: number

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Multiplayer.Match-1.html b/docs/interfaces/Multiplayer.Match-1.html new file mode 100644 index 0000000..52d7059 --- /dev/null +++ b/docs/interfaces/Multiplayer.Match-1.html @@ -0,0 +1,10 @@ +Match | osu-api-v2-js

    Obtainable From

    API.getMatch

    +
    interface Match {
        current_game_id: null | number;
        events: {
            detail: {
                text?: string;
                type: string;
            };
            game?: {
                beatmap: Beatmap.WithBeatmapset;
                beatmap_id: number;
                end_time: null | Date;
                id: number;
                mode: "osu" | "taiko" | "fruits" | "mania";
                mode_int: Rulesets;
                mods: string[];
                scores: WithMatch[];
                scoring_type: string;
                start_time: Date;
                team_type: string;
            };
            id: number;
            timestamp: Date;
            user_id: null | number;
        }[];
        first_event_id: number;
        latest_event_id: number;
        match: Info;
        users: WithCountry[];
    }

    Properties

    current_game_id: null | number
    events: {
        detail: {
            text?: string;
            type: string;
        };
        game?: {
            beatmap: Beatmap.WithBeatmapset;
            beatmap_id: number;
            end_time: null | Date;
            id: number;
            mode: "osu" | "taiko" | "fruits" | "mania";
            mode_int: Rulesets;
            mods: string[];
            scores: WithMatch[];
            scoring_type: string;
            start_time: Date;
            team_type: string;
        };
        id: number;
        timestamp: Date;
        user_id: null | number;
    }[]

    Type declaration

    • detail: {
          text?: string;
          type: string;
      }
      • Optional text?: string

        If detail.type is other, this exists and will be the name of the room

        +
      • type: string
    • Optional game?: {
          beatmap: Beatmap.WithBeatmapset;
          beatmap_id: number;
          end_time: null | Date;
          id: number;
          mode: "osu" | "taiko" | "fruits" | "mania";
          mode_int: Rulesets;
          mods: string[];
          scores: WithMatch[];
          scoring_type: string;
          start_time: Date;
          team_type: string;
      }

      If detail.type is other, then this should exist!

      +
      • beatmap: Beatmap.WithBeatmapset
      • beatmap_id: number
      • end_time: null | Date
      • id: number
      • mode: "osu" | "taiko" | "fruits" | "mania"
      • mode_int: Rulesets
      • mods: string[]
      • scores: WithMatch[]
      • scoring_type: string
      • start_time: Date
      • team_type: string
    • id: number
    • timestamp: Date
    • user_id: null | number
    first_event_id: number
    latest_event_id: number
    match: Info
    users: WithCountry[]

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Multiplayer.Match.Info.html b/docs/interfaces/Multiplayer.Match.Info.html new file mode 100644 index 0000000..f51cb27 --- /dev/null +++ b/docs/interfaces/Multiplayer.Match.Info.html @@ -0,0 +1,6 @@ +Info | osu-api-v2-js

    Obtainable From

    API.getMatches

    +
    interface Info {
        end_time: null | Date;
        id: number;
        name: string;
        start_time: Date;
    }

    Properties

    Properties

    end_time: null | Date
    id: number
    name: string
    start_time: Date

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Multiplayer.Match.html b/docs/interfaces/Multiplayer.Match.html deleted file mode 100644 index c530726..0000000 --- a/docs/interfaces/Multiplayer.Match.html +++ /dev/null @@ -1,10 +0,0 @@ -Match | osu-api-v2-js

    Obtainable From

    API.getMatch

    -
    interface Match {
        current_game_id: null | number;
        events: {
            detail: {
                text?: string;
                type: string;
            };
            game?: {
                beatmap: WithBeatmapset;
                beatmap_id: number;
                end_time: null | Date;
                id: number;
                mode: "osu" | "taiko" | "fruits" | "mania";
                mode_int: Rulesets;
                mods: string[];
                scores: WithMatch[];
                scoring_type: string;
                start_time: Date;
                team_type: string;
            };
            id: number;
            timestamp: Date;
            user_id: null | number;
        }[];
        first_event_id: number;
        latest_event_id: number;
        match: MatchInfo;
        users: WithCountry[];
    }

    Properties

    current_game_id: null | number
    events: {
        detail: {
            text?: string;
            type: string;
        };
        game?: {
            beatmap: WithBeatmapset;
            beatmap_id: number;
            end_time: null | Date;
            id: number;
            mode: "osu" | "taiko" | "fruits" | "mania";
            mode_int: Rulesets;
            mods: string[];
            scores: WithMatch[];
            scoring_type: string;
            start_time: Date;
            team_type: string;
        };
        id: number;
        timestamp: Date;
        user_id: null | number;
    }[]

    Type declaration

    • detail: {
          text?: string;
          type: string;
      }
      • Optional text?: string

        If detail.type is other, this exists and will be the name of the room

        -
      • type: string
    • Optional game?: {
          beatmap: WithBeatmapset;
          beatmap_id: number;
          end_time: null | Date;
          id: number;
          mode: "osu" | "taiko" | "fruits" | "mania";
          mode_int: Rulesets;
          mods: string[];
          scores: WithMatch[];
          scoring_type: string;
          start_time: Date;
          team_type: string;
      }

      If detail.type is other, then this should exist!

      -
      • beatmap: WithBeatmapset
      • beatmap_id: number
      • end_time: null | Date
      • id: number
      • mode: "osu" | "taiko" | "fruits" | "mania"
      • mode_int: Rulesets
      • mods: string[]
      • scores: WithMatch[]
      • scoring_type: string
      • start_time: Date
      • team_type: string
    • id: number
    • timestamp: Date
    • user_id: null | number
    first_event_id: number
    latest_event_id: number
    match: MatchInfo
    users: WithCountry[]

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Multiplayer.MatchInfo.html b/docs/interfaces/Multiplayer.MatchInfo.html deleted file mode 100644 index d90599c..0000000 --- a/docs/interfaces/Multiplayer.MatchInfo.html +++ /dev/null @@ -1,6 +0,0 @@ -MatchInfo | osu-api-v2-js

    Obtainable From

    API.getMatches

    -
    interface MatchInfo {
        end_time: null | Date;
        id: number;
        name: string;
        start_time: Date;
    }

    Properties

    Properties

    end_time: null | Date
    id: number
    name: string
    start_time: Date

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Multiplayer.PlaylistItem.html b/docs/interfaces/Multiplayer.PlaylistItem.html deleted file mode 100644 index 24677f8..0000000 --- a/docs/interfaces/Multiplayer.PlaylistItem.html +++ /dev/null @@ -1,14 +0,0 @@ -PlaylistItem | osu-api-v2-js
    interface PlaylistItem {
        allowed_mods: Mod[];
        beatmap: WithBeatmapsetChecksumMaxcombo;
        beatmap_id: number;
        expired: boolean;
        id: number;
        owner_id: number;
        played_at: null | Date;
        playlist_order: null | number;
        required_mods: Mod[];
        room_id: number;
        ruleset_id: number;
    }

    Properties

    allowed_mods: Mod[]
    beatmap_id: number
    expired: boolean
    id: number
    owner_id: number
    played_at: null | Date

    Remarks

    Should be null if the room isn't the realtime multiplayer kind

    -
    playlist_order: null | number

    Remarks

    Should be null if the room isn't the realtime multiplayer kind

    -
    required_mods: Mod[]
    room_id: number
    ruleset_id: number

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Multiplayer.Room-1.html b/docs/interfaces/Multiplayer.Room-1.html new file mode 100644 index 0000000..5bd4eae --- /dev/null +++ b/docs/interfaces/Multiplayer.Room-1.html @@ -0,0 +1,23 @@ +Room | osu-api-v2-js

    Obtainable From

    API.getRoom

    +
    interface Room {
        active: boolean;
        auto_skip: boolean;
        category: string;
        channel_id: number;
        current_user_score?: {
            accuracy: number;
            attempts: number;
            completed: number;
            playlist_item_attempts: {
                attempts: number;
                id: number;
            }[];
            pp: number;
            room_id: number;
            total_score: number;
            user_id: number;
        };
        ends_at: null | Date;
        has_password: boolean;
        host: WithCountry;
        id: number;
        max_attempts: null | number;
        name: string;
        participant_count: number;
        playlist: PlaylistItem[];
        queue_mode: string;
        recent_participants: User[];
        starts_at: Date;
        type: string;
        user_id: number;
    }

    Properties

    active: boolean
    auto_skip: boolean
    category: string
    channel_id: number
    current_user_score?: {
        accuracy: number;
        attempts: number;
        completed: number;
        playlist_item_attempts: {
            attempts: number;
            id: number;
        }[];
        pp: number;
        room_id: number;
        total_score: number;
        user_id: number;
    }

    Only exists if authorized user

    +

    Type declaration

    • accuracy: number

      In a format where 96.40% would be 0.9640 (with some numbers after the zero)

      +
    • attempts: number
    • completed: number
    • playlist_item_attempts: {
          attempts: number;
          id: number;
      }[]

      How many (completed (I think)) attempts on each item? Empty array if the multiplayer room is the realtime kind

      +
    • pp: number
    • room_id: number
    • total_score: number
    • user_id: number
    ends_at: null | Date
    has_password: boolean
    id: number
    max_attempts: null | number
    name: string
    participant_count: number
    playlist: PlaylistItem[]
    queue_mode: string
    recent_participants: User[]
    starts_at: Date
    type: string
    user_id: number

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Multiplayer.Leader.html b/docs/interfaces/Multiplayer.Room.Leader.html similarity index 67% rename from docs/interfaces/Multiplayer.Leader.html rename to docs/interfaces/Multiplayer.Room.Leader.html index 8150651..f61c1d4 100644 --- a/docs/interfaces/Multiplayer.Leader.html +++ b/docs/interfaces/Multiplayer.Room.Leader.html @@ -1,10 +1,10 @@ -Leader | osu-api-v2-js
    interface Leader {
        accuracy: number;
        attempts: number;
        completed: number;
        pp: number;
        room_id: number;
        total_score: number;
        user: WithCountry;
        user_id: number;
    }

    Properties

    accuracy -attempts -completed -pp -room_id -total_score -user -user_id +Leader | osu-api-v2-js
    interface Leader {
        accuracy: number;
        attempts: number;
        completed: number;
        pp: number;
        room_id: number;
        total_score: number;
        user: WithCountry;
        user_id: number;
    }

    Properties

    accuracy: number

    In a format where 96.40% would be 0.9640 (likely with some numbers after the zero)

    -
    attempts: number
    completed: number
    pp: number
    room_id: number
    total_score: number
    user_id: number

    Generated using TypeDoc

    \ No newline at end of file +
    attempts: number
    completed: number
    pp: number
    room_id: number
    total_score: number
    user_id: number

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Multiplayer.Room.PlaylistItem-1.html b/docs/interfaces/Multiplayer.Room.PlaylistItem-1.html new file mode 100644 index 0000000..7fc71a3 --- /dev/null +++ b/docs/interfaces/Multiplayer.Room.PlaylistItem-1.html @@ -0,0 +1,14 @@ +PlaylistItem | osu-api-v2-js
    interface PlaylistItem {
        allowed_mods: Mod[];
        beatmap: WithBeatmapsetChecksumMaxcombo;
        beatmap_id: number;
        expired: boolean;
        id: number;
        owner_id: number;
        played_at: null | Date;
        playlist_order: null | number;
        required_mods: Mod[];
        room_id: number;
        ruleset_id: Rulesets;
    }

    Properties

    allowed_mods: Mod[]
    beatmap_id: number
    expired: boolean
    id: number
    owner_id: number
    played_at: null | Date

    Remarks

    Should be null if the room isn't the realtime multiplayer kind

    +
    playlist_order: null | number

    Remarks

    Should be null if the room isn't the realtime multiplayer kind

    +
    required_mods: Mod[]
    room_id: number
    ruleset_id: Rulesets

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Multiplayer.Scores.html b/docs/interfaces/Multiplayer.Room.PlaylistItem.Scores.html similarity index 71% rename from docs/interfaces/Multiplayer.Scores.html rename to docs/interfaces/Multiplayer.Room.PlaylistItem.Scores.html index cbd6374..54e4baf 100644 --- a/docs/interfaces/Multiplayer.Scores.html +++ b/docs/interfaces/Multiplayer.Room.PlaylistItem.Scores.html @@ -1,10 +1,10 @@ -Scores | osu-api-v2-js

    Obtainable From

    API.getPlaylistItemScores

    -
    interface Scores {
        cursor_string: null | string;
        params: {
            limit: number;
            sort: string;
        };
        scores: Multiplayer[];
        total: number;
        user_score: null | Multiplayer;
    }

    Properties

    cursor_string -params -scores -total -user_score +Scores | osu-api-v2-js

    Obtainable From

    API.getPlaylistItemScores

    +
    interface Scores {
        cursor_string: null | string;
        params: {
            limit: number;
            sort: string;
        };
        scores: Multiplayer[];
        total: number;
        user_score: null | Multiplayer;
    }

    Properties

    cursor_string: null | string

    Remarks

    Will be null if there is no next page

    -
    params: {
        limit: number;
        sort: string;
    }

    Type declaration

    • limit: number
    • sort: string
    scores: Multiplayer[]
    total: number

    How many scores there are across all pages, not necessarily scores.length

    -
    user_score: null | Multiplayer

    Remarks

    Will be null if not an authorized user or if the authorized user has no score

    -

    Generated using TypeDoc

    \ No newline at end of file +
    params: {
        limit: number;
        sort: string;
    }

    Type declaration

    • limit: number
    • sort: string
    scores: Multiplayer[]
    total: number

    How many scores there are across all pages, not necessarily scores.length

    +
    user_score: null | Multiplayer

    Remarks

    Will be null if not an authorized user or if the authorized user has no score

    +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Multiplayer.Room.html b/docs/interfaces/Multiplayer.Room.html deleted file mode 100644 index 0f8fb18..0000000 --- a/docs/interfaces/Multiplayer.Room.html +++ /dev/null @@ -1,23 +0,0 @@ -Room | osu-api-v2-js

    Obtainable From

    API.getRoom

    -
    interface Room {
        active: boolean;
        auto_skip: boolean;
        category: string;
        channel_id: number;
        current_user_score?: {
            accuracy: number;
            attempts: number;
            completed: number;
            playlist_item_attempts: {
                attempts: number;
                id: number;
            }[];
            pp: number;
            room_id: number;
            total_score: number;
            user_id: number;
        };
        ends_at: null | Date;
        has_password: boolean;
        host: WithCountry;
        id: number;
        max_attempts: null | number;
        name: string;
        participant_count: number;
        playlist: PlaylistItem[];
        queue_mode: string;
        recent_participants: User[];
        starts_at: Date;
        type: string;
        user_id: number;
    }

    Properties

    active: boolean
    auto_skip: boolean
    category: string
    channel_id: number
    current_user_score?: {
        accuracy: number;
        attempts: number;
        completed: number;
        playlist_item_attempts: {
            attempts: number;
            id: number;
        }[];
        pp: number;
        room_id: number;
        total_score: number;
        user_id: number;
    }

    Only exists if authorized user

    -

    Type declaration

    • accuracy: number

      In a format where 96.40% would be 0.9640 (with some numbers after the zero)

      -
    • attempts: number
    • completed: number
    • playlist_item_attempts: {
          attempts: number;
          id: number;
      }[]

      How many (completed (I think)) attempts on each item? Empty array if the multiplayer room is the realtime kind

      -
    • pp: number
    • room_id: number
    • total_score: number
    • user_id: number
    ends_at: null | Date
    has_password: boolean
    id: number
    max_attempts: null | number
    name: string
    participant_count: number
    playlist: PlaylistItem[]
    queue_mode: string
    recent_participants: User[]
    starts_at: Date
    type: string
    user_id: number

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/News.Post.html b/docs/interfaces/News.Post.html deleted file mode 100644 index 12d978f..0000000 --- a/docs/interfaces/News.Post.html +++ /dev/null @@ -1,13 +0,0 @@ -Post | osu-api-v2-js

    Interface Post

    Obtainable From

    API.getNewsPosts

    -
    interface Post {
        author: string;
        edit_url: string;
        first_image: null | string;
        id: number;
        published_at: Date;
        slug: string;
        title: string;
        updated_at: Date;
    }

    Hierarchy (view full)

    Properties

    author: string
    edit_url: string

    Link to view the file on GitHub

    -
    first_image: null | string

    Link to the first image in the document

    -
    id: number
    published_at: Date
    slug: string

    Filename without the extension, used in URLs

    -
    title: string
    updated_at: Date

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/News.PostWithContentNavigation.html b/docs/interfaces/News.PostWithContentNavigation.html deleted file mode 100644 index 8419a6e..0000000 --- a/docs/interfaces/News.PostWithContentNavigation.html +++ /dev/null @@ -1,16 +0,0 @@ -PostWithContentNavigation | osu-api-v2-js

    Interface PostWithContentNavigation

    Obtainable From

    API.getNewsPost

    -
    interface PostWithContentNavigation {
        author: string;
        content: string;
        edit_url: string;
        first_image: null | string;
        id: number;
        navigation: {
            newer?: News.Post;
            older?: News.Post;
        };
        published_at: Date;
        slug: string;
        title: string;
        updated_at: Date;
    }

    Hierarchy (view full)

    Properties

    author: string
    content: string

    With HTML

    -
    edit_url: string

    Link to view the file on GitHub

    -
    first_image: null | string

    Link to the first image in the document

    -
    id: number
    navigation: {
        newer?: News.Post;
        older?: News.Post;
    }

    Type declaration

    published_at: Date
    slug: string

    Filename without the extension, used in URLs

    -
    title: string
    updated_at: Date

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/NewsPost-1.html b/docs/interfaces/NewsPost-1.html new file mode 100644 index 0000000..62762c2 --- /dev/null +++ b/docs/interfaces/NewsPost-1.html @@ -0,0 +1,13 @@ +NewsPost | osu-api-v2-js

    Interface NewsPost

    Obtainable From

    API.getNewsPosts

    +
    interface NewsPost {
        author: string;
        edit_url: string;
        first_image: null | string;
        id: number;
        published_at: Date;
        slug: string;
        title: string;
        updated_at: Date;
    }

    Hierarchy (view full)

    Properties

    author: string
    edit_url: string

    Link to view the file on GitHub

    +
    first_image: null | string

    Link to the first image in the document

    +
    id: number
    published_at: Date
    slug: string

    Filename without the extension, used in URLs

    +
    title: string
    updated_at: Date

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/NewsPost.WithContentNavigation.html b/docs/interfaces/NewsPost.WithContentNavigation.html new file mode 100644 index 0000000..a89f20f --- /dev/null +++ b/docs/interfaces/NewsPost.WithContentNavigation.html @@ -0,0 +1,16 @@ +WithContentNavigation | osu-api-v2-js

    Interface WithContentNavigation

    Obtainable From

    API.getNewsPost

    +
    interface WithContentNavigation {
        author: string;
        content: string;
        edit_url: string;
        first_image: null | string;
        id: number;
        navigation: {
            newer?: NewsPost;
            older?: NewsPost;
        };
        published_at: Date;
        slug: string;
        title: string;
        updated_at: Date;
    }

    Hierarchy (view full)

    Properties

    author: string
    content: string

    With HTML

    +
    edit_url: string

    Link to view the file on GitHub

    +
    first_image: null | string

    Link to the first image in the document

    +
    id: number
    navigation: {
        newer?: NewsPost;
        older?: NewsPost;
    }

    Type declaration

    published_at: Date
    slug: string

    Filename without the extension, used in URLs

    +
    title: string
    updated_at: Date

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/PollConfig.html b/docs/interfaces/PollConfig.html deleted file mode 100644 index 9cc22b1..0000000 --- a/docs/interfaces/PollConfig.html +++ /dev/null @@ -1,13 +0,0 @@ -PollConfig | osu-api-v2-js

    Interface PollConfig

    Feel free to use this interface to help you create polls with API.createForumTopic!

    -
    interface PollConfig {
        hide_results?: boolean;
        length_days: number;
        max_options?: number;
        options: string[];
        title: string;
        vote_change?: boolean;
    }

    Properties

    hide_results?: boolean

    (defaults to false) Should the results of the poll be hidden while the voting period is still active?

    -
    length_days: number

    Length of voting period in days, 0 means forever

    -
    max_options?: number

    (defaults to 1) The maximum amount of votes per user!

    -
    options: string[]

    The things the users can vote for

    -
    title: string
    vote_change?: boolean

    defaults to false) Do you allow users to change their vote?

    -

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Ranking.Country.html b/docs/interfaces/Ranking.Country.html new file mode 100644 index 0000000..31d4ae1 --- /dev/null +++ b/docs/interfaces/Ranking.Country.html @@ -0,0 +1,9 @@ +Country | osu-api-v2-js

    Obtainable From

    API.getCountryRanking

    +
    interface Country {
        cursor: {
            page: null | number;
        };
        ranking: {
            active_users: number;
            code: string;
            country: {
                code: string;
                name: string;
            };
            performance: number;
            play_count: number;
            ranked_score: number;
        }[];
        total: number;
    }

    Hierarchy

    • Ranking
      • Country

    Properties

    Properties

    cursor: {
        page: null | number;
    }

    Type declaration

    • page: null | number

      The number of the next page, is null if no more results are available

      +
    ranking: {
        active_users: number;
        code: string;
        country: {
            code: string;
            name: string;
        };
        performance: number;
        play_count: number;
        ranked_score: number;
    }[]

    Type declaration

    • active_users: number
    • code: string

      Same as country.code

      +
    • country: {
          code: string;
          name: string;
      }
      • code: string

        The country's ISO 3166-1 alpha-2 code! (France would be FR, United States US)

        +
      • name: string
    • performance: number
    • play_count: number
    • ranked_score: number
    total: number

    Total amount of elements available across all pages, not on this specific page! Maximum of 10000

    +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Rankings.Spotlight.html b/docs/interfaces/Ranking.Spotlight.html similarity index 71% rename from docs/interfaces/Rankings.Spotlight.html rename to docs/interfaces/Ranking.Spotlight.html index 6e00153..dbb2e88 100644 --- a/docs/interfaces/Rankings.Spotlight.html +++ b/docs/interfaces/Ranking.Spotlight.html @@ -1,5 +1,5 @@ -Spotlight | osu-api-v2-js

    Obtainable From

    API.getSpotlightRanking

    -
    interface Spotlight {
        beatmapsets: Beatmapset.Extended[];
        ranking: User.Statistics.WithUser[];
        spotlight: WithParticipantcount;
    }

    Properties

    beatmapsets: Beatmapset.Extended[]

    Generated using TypeDoc

    \ No newline at end of file +Spotlight | osu-api-v2-js

    Obtainable From

    API.getSpotlightRanking

    +
    interface Spotlight {
        beatmapsets: Beatmapset.Extended[];
        ranking: User.Statistics.WithUser[];
        spotlight: WithParticipantcount;
    }

    Properties

    beatmapsets: Beatmapset.Extended[]

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Ranking.User.html b/docs/interfaces/Ranking.User.html new file mode 100644 index 0000000..f727117 --- /dev/null +++ b/docs/interfaces/Ranking.User.html @@ -0,0 +1,7 @@ +User | osu-api-v2-js

    Obtainable From

    API.getUserRanking

    +
    interface User {
        cursor: {
            page: null | number;
        };
        ranking: User.Statistics.WithUser[];
        total: number;
    }

    Hierarchy

    • Ranking
      • User

    Properties

    Properties

    cursor: {
        page: null | number;
    }

    Type declaration

    • page: null | number

      The number of the next page, is null if no more results are available

      +
    total: number

    Total amount of elements available across all pages, not on this specific page! Maximum of 10000

    +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Rankings.Country.html b/docs/interfaces/Rankings.Country.html deleted file mode 100644 index efc5497..0000000 --- a/docs/interfaces/Rankings.Country.html +++ /dev/null @@ -1,9 +0,0 @@ -Country | osu-api-v2-js

    Obtainable From

    API.getCountryRanking

    -
    interface Country {
        cursor: {
            page: null | number;
        };
        ranking: {
            active_users: number;
            code: string;
            country: {
                code: string;
                name: string;
            };
            performance: number;
            play_count: number;
            ranked_score: number;
        }[];
        total: number;
    }

    Hierarchy

    • RankingsBare
      • Country

    Properties

    Properties

    cursor: {
        page: null | number;
    }

    Type declaration

    • page: null | number

      The number of the next page, is null if no more results are available

      -
    ranking: {
        active_users: number;
        code: string;
        country: {
            code: string;
            name: string;
        };
        performance: number;
        play_count: number;
        ranked_score: number;
    }[]

    Type declaration

    • active_users: number
    • code: string

      Same as country.code

      -
    • country: {
          code: string;
          name: string;
      }
      • code: string

        The country's ISO 3166-1 alpha-2 code! (France would be FR, United States US)

        -
      • name: string
    • performance: number
    • play_count: number
    • ranked_score: number
    total: number

    Total amount of elements available across all pages, not on this specific page! Maximum of 10000

    -

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Rankings.User.html b/docs/interfaces/Rankings.User.html deleted file mode 100644 index 2034265..0000000 --- a/docs/interfaces/Rankings.User.html +++ /dev/null @@ -1,7 +0,0 @@ -User | osu-api-v2-js

    Obtainable From

    API.getUserRanking

    -
    interface User {
        cursor: {
            page: null | number;
        };
        ranking: User.Statistics.WithUser[];
        total: number;
    }

    Hierarchy

    • RankingsBare
      • User

    Properties

    Properties

    cursor: {
        page: null | number;
    }

    Type declaration

    • page: null | number

      The number of the next page, is null if no more results are available

      -
    total: number

    Total amount of elements available across all pages, not on this specific page! Maximum of 10000

    -

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Score-1.html b/docs/interfaces/Score-1.html index a80becb..c8be064 100644 --- a/docs/interfaces/Score-1.html +++ b/docs/interfaces/Score-1.html @@ -1,4 +1,4 @@ -Score | osu-api-v2-js

    Interface Score

    interface Score {
        accuracy: number;
        best_id: null | number;
        id: null | number;
        max_combo: number;
        mods: string[] | Mod[];
        passed: boolean;
        pp: null | number;
        rank: string;
        replay: boolean;
        type: string;
        user_id: number;
    }

    Hierarchy (view full)

    Properties

    accuracy +Score | osu-api-v2-js

    Interface Score

    interface Score {
        accuracy: number;
        best_id: null | number;
        id: null | number;
        max_combo: number;
        mods: string[] | Mod[];
        passed: boolean;
        pp: null | number;
        rank: string;
        replay: boolean;
        type: string;
        user_id: number;
    }

    Hierarchy (view full)

    Properties

    Properties

    accuracy: number

    In a format where 96.40% would be 0.9640 (likely with some numbers after the zero)

    -
    best_id: null | number
    id: null | number
    max_combo: number
    mods: string[] | Mod[]
    passed: boolean
    pp: null | number

    Remarks

    Is null when Beatmap is Loved (for example)

    -
    rank: string

    Also known as a grade, for example this is X (SS) if accuracy is 1 (100.00%)

    -
    replay: boolean

    Can this score's replay be downloaded from the website?

    -
    type: string
    user_id: number

    The ID of the user who made the score

    -

    Generated using TypeDoc

    \ No newline at end of file +
    best_id: null | number
    id: null | number
    max_combo: number
    mods: string[] | Mod[]
    passed: boolean
    pp: null | number

    Remarks

    Is null when Beatmap is Loved (for example)

    +
    rank: string

    Also known as a grade, for example this is X (SS) if accuracy is 1 (100.00%)

    +
    replay: boolean

    Can this score's replay be downloaded from the website?

    +
    type: string
    user_id: number

    The ID of the user who made the score

    +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Score.Legacy.html b/docs/interfaces/Score.Legacy.html index 48ddc53..5842121 100644 --- a/docs/interfaces/Score.Legacy.html +++ b/docs/interfaces/Score.Legacy.html @@ -1,6 +1,6 @@ Legacy | osu-api-v2-js

    Interface Legacy

    The version of Score without lazer-related stuff, used almost everywhere!

    -

    Obtainable From

    API.getBeatmapUserScores

    -
    interface Legacy {
        accuracy: number;
        best_id: null | number;
        created_at: Date;
        id: null | number;
        max_combo: number;
        mode: "osu" | "taiko" | "fruits" | "mania";
        mode_int: Rulesets;
        mods: string[];
        passed: boolean;
        perfect: boolean;
        pp: null | number;
        rank: string;
        replay: boolean;
        score: number;
        statistics: {
            count_100: number;
            count_300: number;
            count_50: null | number;
            count_geki: null | number;
            count_katu: null | number;
            count_miss: number;
        };
        type: string;
        user_id: number;
    }

    Hierarchy (view full)

    Properties

    Obtainable From

    API.getBeatmapUserScores

    +
    interface Legacy {
        accuracy: number;
        best_id: null | number;
        created_at: Date;
        id: null | number;
        max_combo: number;
        mode: "osu" | "taiko" | "fruits" | "mania";
        mode_int: Rulesets;
        mods: string[];
        passed: boolean;
        perfect: boolean;
        pp: null | number;
        rank: string;
        replay: boolean;
        score: number;
        statistics: {
            count_100: number;
            count_300: number;
            count_50: null | number;
            count_geki: null | number;
            count_katu: null | number;
            count_miss: number;
        };
        type: string;
        user_id: number;
    }

    Hierarchy (view full)

    Properties

    Properties

    accuracy: number

    In a format where 96.40% would be 0.9640 (likely with some numbers after the zero)

    -
    best_id: null | number
    created_at: Date
    id: null | number
    max_combo: number
    mode: "osu" | "taiko" | "fruits" | "mania"
    mode_int: Rulesets
    mods: string[]
    passed: boolean
    perfect: boolean
    pp: null | number

    Remarks

    Is null when Beatmap is Loved (for example)

    -
    rank: string

    Also known as a grade, for example this is X (SS) if accuracy is 1 (100.00%)

    -
    replay: boolean

    Can this score's replay be downloaded from the website?

    -
    score: number
    statistics: {
        count_100: number;
        count_300: number;
        count_50: null | number;
        count_geki: null | number;
        count_katu: null | number;
        count_miss: number;
    }

    Type declaration

    • count_100: number
    • count_300: number
    • count_50: null | number

      Remarks

      Is null if the score's gamemode is Taiko

      -
    • count_geki: null | number
    • count_katu: null | number
    • count_miss: number
    type: string
    user_id: number

    The ID of the user who made the score

    -

    Generated using TypeDoc

    \ No newline at end of file +
    best_id: null | number
    created_at: Date
    id: null | number
    max_combo: number
    mode: "osu" | "taiko" | "fruits" | "mania"
    mode_int: Rulesets
    mods: string[]
    passed: boolean
    perfect: boolean
    pp: null | number

    Remarks

    Is null when Beatmap is Loved (for example)

    +
    rank: string

    Also known as a grade, for example this is X (SS) if accuracy is 1 (100.00%)

    +
    replay: boolean

    Can this score's replay be downloaded from the website?

    +
    score: number
    statistics: {
        count_100: number;
        count_300: number;
        count_50: null | number;
        count_geki: null | number;
        count_katu: null | number;
        count_miss: number;
    }

    Type declaration

    • count_100: number
    • count_300: number
    • count_50: null | number

      Remarks

      Is null if the score's gamemode is Taiko

      +
    • count_geki: null | number
    • count_katu: null | number
    • count_miss: number
    type: string
    user_id: number

    The ID of the user who made the score

    +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Score.Multiplayer.html b/docs/interfaces/Score.Multiplayer.html index 227d013..c9d880e 100644 --- a/docs/interfaces/Score.Multiplayer.html +++ b/docs/interfaces/Score.Multiplayer.html @@ -1,4 +1,4 @@ -Multiplayer | osu-api-v2-js

    Interface Multiplayer

    interface Multiplayer {
        accuracy: number;
        beatmap_id: number;
        ended_at: Date;
        id: number;
        max_combo: number;
        maximum_statistics: Score.Statistics;
        mods: Mod[];
        passed: boolean;
        playlist_item_id: number;
        pp: null | number;
        rank: string;
        replay: boolean;
        room_id: number;
        ruleset_id: number;
        started_at: Date;
        statistics: Score.Statistics;
        total_score: number;
        type: string;
        user: WithCountryCover;
        user_id: number;
    }

    Hierarchy

    • Bare
      • Multiplayer

    Properties

    accuracy +Multiplayer | osu-api-v2-js

    Interface Multiplayer

    interface Multiplayer {
        accuracy: number;
        beatmap_id: number;
        ended_at: Date;
        id: number;
        max_combo: number;
        maximum_statistics: Score.Statistics;
        mods: Mod[];
        passed: boolean;
        playlist_item_id: number;
        pp: null | number;
        rank: string;
        replay: boolean;
        room_id: number;
        ruleset_id: Rulesets;
        started_at: Date;
        statistics: Score.Statistics;
        total_score: number;
        type: string;
        user: WithCountryCover;
        user_id: number;
    }

    Hierarchy

    • Bare
      • Multiplayer

    Properties

    Properties

    accuracy: number

    In a format where 96.40% would be 0.9640 (and no number afterwards)

    -
    beatmap_id: number
    ended_at: Date
    id: number
    max_combo: number
    maximum_statistics: Score.Statistics
    mods: Mod[]
    passed: boolean
    playlist_item_id: number
    pp: null | number
    rank: string

    Also known as a grade, for example this is X (SS) if accuracy is 1 (100.00%)

    -
    replay: boolean

    Can this score's replay be downloaded from the website?

    -
    room_id: number
    ruleset_id: number
    started_at: Date
    statistics: Score.Statistics
    total_score: number
    type: string
    user_id: number

    The ID of the user who made the score

    -

    Generated using TypeDoc

    \ No newline at end of file +
    beatmap_id: number
    ended_at: Date
    id: number
    max_combo: number
    maximum_statistics: Score.Statistics
    mods: Mod[]
    passed: boolean
    playlist_item_id: number
    pp: null | number
    rank: string

    Also known as a grade, for example this is X (SS) if accuracy is 1 (100.00%)

    +
    replay: boolean

    Can this score's replay be downloaded from the website?

    +
    room_id: number
    ruleset_id: Rulesets
    started_at: Date
    statistics: Score.Statistics
    total_score: number
    type: string
    user_id: number

    The ID of the user who made the score

    +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Score.Solo.html b/docs/interfaces/Score.Solo.html index 0988918..c07b3f0 100644 --- a/docs/interfaces/Score.Solo.html +++ b/docs/interfaces/Score.Solo.html @@ -1,6 +1,6 @@ Solo | osu-api-v2-js

    Scores called "solo-scores" are more relevant to lazer stuff, it's the opposite of legacy

    -

    Obtainable From

    API.getBeatmapSoloScores

    -
    interface Solo {
        accuracy: number;
        beatmap_id: number;
        best_id: null | number;
        build_id: null | number;
        ended_at: Date;
        has_replay: boolean;
        id: null | number;
        is_perfect_combo: boolean;
        legacy_perfect: boolean;
        legacy_score_id: null | number;
        legacy_total_score: number;
        max_combo: number;
        maximum_statistics?: Score.Statistics;
        mods: Mod[];
        passed: boolean;
        pp: null | number;
        preserve: boolean;
        rank: string;
        ranked: boolean;
        replay: boolean;
        started_at: null | Date;
        statistics: Score.Statistics;
        total_score: number;
        type: string;
        user: WithCountryCover;
        user_id: number;
    }

    Hierarchy (view full)

    Properties

    Obtainable From

    API.getBeatmapSoloScores

    +
    interface Solo {
        accuracy: number;
        beatmap_id: number;
        best_id: null | number;
        build_id: null | number;
        ended_at: Date;
        has_replay: boolean;
        id: null | number;
        is_perfect_combo: boolean;
        legacy_perfect: boolean;
        legacy_score_id: null | number;
        legacy_total_score: number;
        max_combo: number;
        maximum_statistics?: Score.Statistics;
        mods: Mod[];
        passed: boolean;
        pp: null | number;
        preserve: boolean;
        rank: string;
        ranked: boolean;
        replay: boolean;
        started_at: null | Date;
        statistics: Score.Statistics;
        total_score: number;
        type: string;
        user: WithCountryCover;
        user_id: number;
    }

    Hierarchy (view full)

    Properties

    Properties

    accuracy: number

    In a format where 96.40% would be 0.9640 (likely with some numbers after the zero)

    -
    beatmap_id: number
    best_id: null | number
    build_id: null | number

    Remarks

    Is null if the score has not been set on lazer

    -
    ended_at: Date
    has_replay: boolean
    id: null | number
    is_perfect_combo: boolean
    legacy_perfect: boolean
    legacy_score_id: null | number
    legacy_total_score: number
    max_combo: number
    maximum_statistics?: Score.Statistics
    mods: Mod[]
    passed: boolean
    pp: null | number

    Remarks

    Is null when Beatmap is Loved (for example)

    -
    preserve: boolean
    rank: string

    Also known as a grade, for example this is X (SS) if accuracy is 1 (100.00%)

    -
    ranked: boolean
    replay: boolean

    Can this score's replay be downloaded from the website?

    -
    started_at: null | Date
    statistics: Score.Statistics
    total_score: number
    type: string
    user_id: number

    The ID of the user who made the score

    -

    Generated using TypeDoc

    \ No newline at end of file +
    beatmap_id: number
    best_id: null | number
    build_id: null | number

    Remarks

    Is null if the score has not been set on lazer

    +
    ended_at: Date
    has_replay: boolean
    id: null | number
    is_perfect_combo: boolean
    legacy_perfect: boolean
    legacy_score_id: null | number
    legacy_total_score: number
    max_combo: number
    maximum_statistics?: Score.Statistics
    mods: Mod[]
    passed: boolean
    pp: null | number

    Remarks

    Is null when Beatmap is Loved (for example)

    +
    preserve: boolean
    rank: string

    Also known as a grade, for example this is X (SS) if accuracy is 1 (100.00%)

    +
    ranked: boolean
    replay: boolean

    Can this score's replay be downloaded from the website?

    +
    started_at: null | Date
    statistics: Score.Statistics
    total_score: number
    type: string
    user_id: number

    The ID of the user who made the score

    +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Score.Statistics.html b/docs/interfaces/Score.Statistics.html index 8ac38b0..3019fb0 100644 --- a/docs/interfaces/Score.Statistics.html +++ b/docs/interfaces/Score.Statistics.html @@ -1,5 +1,5 @@ Statistics | osu-api-v2-js

    Interface Statistics

    All of its properties are optional because instead of being 0, the property actually disappears instead

    -
    interface Statistics {
        great?: number;
        ignore_hit?: number;
        ignore_miss?: number;
        large_bonus?: number;
        large_tick_hit?: number;
        legacy_combo_increase?: number;
        meh?: number;
        miss?: number;
        ok?: number;
        small_bonus?: number;
        small_tick_hit?: number;
        small_tick_miss?: number;
    }

    Properties

    interface Statistics {
        great?: number;
        ignore_hit?: number;
        ignore_miss?: number;
        large_bonus?: number;
        large_tick_hit?: number;
        legacy_combo_increase?: number;
        meh?: number;
        miss?: number;
        ok?: number;
        small_bonus?: number;
        small_tick_hit?: number;
        small_tick_miss?: number;
    }

    Properties

    great?: number
    ignore_hit?: number
    ignore_miss?: number
    large_bonus?: number
    large_tick_hit?: number
    legacy_combo_increase?: number

    Exclusively for the maximum_statistics of solo-scores that were not set on lazer

    -
    meh?: number
    miss?: number
    ok?: number
    small_bonus?: number
    small_tick_hit?: number
    small_tick_miss?: number

    Generated using TypeDoc

    \ No newline at end of file +

    Properties

    great?: number
    ignore_hit?: number
    ignore_miss?: number
    large_bonus?: number
    large_tick_hit?: number
    legacy_combo_increase?: number

    Exclusively for the maximum_statistics of solo-scores that were not set on lazer

    +
    meh?: number
    miss?: number
    ok?: number
    small_bonus?: number
    small_tick_hit?: number
    small_tick_miss?: number

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Score.WithMatch.html b/docs/interfaces/Score.WithMatch.html index 4d561fd..f9da1af 100644 --- a/docs/interfaces/Score.WithMatch.html +++ b/docs/interfaces/Score.WithMatch.html @@ -1,6 +1,6 @@ WithMatch | osu-api-v2-js

    Interface WithMatch

    The version of Score without lazer-related stuff, used almost everywhere!

    -

    Obtainable From

    API.getBeatmapUserScores

    -
    interface WithMatch {
        accuracy: number;
        best_id: null | number;
        created_at: Date;
        id: null | number;
        match: {
            pass: boolean;
            slot: number;
            team: string;
        };
        max_combo: number;
        mode: "osu" | "taiko" | "fruits" | "mania";
        mode_int: Rulesets;
        mods: string[];
        passed: boolean;
        perfect: boolean;
        pp: null | number;
        rank: string;
        replay: boolean;
        score: number;
        statistics: {
            count_100: number;
            count_300: number;
            count_50: null | number;
            count_geki: null | number;
            count_katu: null | number;
            count_miss: number;
        };
        type: string;
        user_id: number;
    }

    Hierarchy (view full)

    Properties

    Obtainable From

    API.getBeatmapUserScores

    +
    interface WithMatch {
        accuracy: number;
        best_id: null | number;
        created_at: Date;
        id: null | number;
        match: {
            pass: boolean;
            slot: number;
            team: string;
        };
        max_combo: number;
        mode: "osu" | "taiko" | "fruits" | "mania";
        mode_int: Rulesets;
        mods: string[];
        passed: boolean;
        perfect: boolean;
        pp: null | number;
        rank: string;
        replay: boolean;
        score: number;
        statistics: {
            count_100: number;
            count_300: number;
            count_50: null | number;
            count_geki: null | number;
            count_katu: null | number;
            count_miss: number;
        };
        type: string;
        user_id: number;
    }

    Hierarchy (view full)

    Properties

    Properties

    accuracy: number

    In a format where 96.40% would be 0.9640 (likely with some numbers after the zero)

    -
    best_id: null | number
    created_at: Date
    id: null | number
    match: {
        pass: boolean;
        slot: number;
        team: string;
    }

    Type declaration

    • pass: boolean
    • slot: number
    • team: string
    max_combo: number
    mode: "osu" | "taiko" | "fruits" | "mania"
    mode_int: Rulesets
    mods: string[]
    passed: boolean
    perfect: boolean
    pp: null | number

    Remarks

    Is null when Beatmap is Loved (for example)

    -
    rank: string

    Also known as a grade, for example this is X (SS) if accuracy is 1 (100.00%)

    -
    replay: boolean

    Can this score's replay be downloaded from the website?

    -
    score: number
    statistics: {
        count_100: number;
        count_300: number;
        count_50: null | number;
        count_geki: null | number;
        count_katu: null | number;
        count_miss: number;
    }

    Type declaration

    • count_100: number
    • count_300: number
    • count_50: null | number

      Remarks

      Is null if the score's gamemode is Taiko

      -
    • count_geki: null | number
    • count_katu: null | number
    • count_miss: number
    type: string
    user_id: number

    The ID of the user who made the score

    -

    Generated using TypeDoc

    \ No newline at end of file +
    best_id: null | number
    created_at: Date
    id: null | number
    match: {
        pass: boolean;
        slot: number;
        team: string;
    }

    Type declaration

    • pass: boolean
    • slot: number
    • team: string
    max_combo: number
    mode: "osu" | "taiko" | "fruits" | "mania"
    mode_int: Rulesets
    mods: string[]
    passed: boolean
    perfect: boolean
    pp: null | number

    Remarks

    Is null when Beatmap is Loved (for example)

    +
    rank: string

    Also known as a grade, for example this is X (SS) if accuracy is 1 (100.00%)

    +
    replay: boolean

    Can this score's replay be downloaded from the website?

    +
    score: number
    statistics: {
        count_100: number;
        count_300: number;
        count_50: null | number;
        count_geki: null | number;
        count_katu: null | number;
        count_miss: number;
    }

    Type declaration

    • count_100: number
    • count_300: number
    • count_50: null | number

      Remarks

      Is null if the score's gamemode is Taiko

      +
    • count_geki: null | number
    • count_katu: null | number
    • count_miss: number
    type: string
    user_id: number

    The ID of the user who made the score

    +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Score.WithUser.html b/docs/interfaces/Score.WithUser.html index 5de496f..6cf561a 100644 --- a/docs/interfaces/Score.WithUser.html +++ b/docs/interfaces/Score.WithUser.html @@ -1,5 +1,5 @@ -WithUser | osu-api-v2-js

    Interface WithUser

    Obtainable From

    API.getBeatmapScores

    -
    interface WithUser {
        accuracy: number;
        best_id: null | number;
        created_at: Date;
        id: null | number;
        max_combo: number;
        mode: "osu" | "taiko" | "fruits" | "mania";
        mode_int: Rulesets;
        mods: string[];
        passed: boolean;
        perfect: boolean;
        pp: null | number;
        rank: string;
        replay: boolean;
        score: number;
        statistics: {
            count_100: number;
            count_300: number;
            count_50: null | number;
            count_geki: null | number;
            count_katu: null | number;
            count_miss: number;
        };
        type: string;
        user: WithCountryCover;
        user_id: number;
    }

    Hierarchy (view full)

    Properties

    accuracy +WithUser | osu-api-v2-js

    Interface WithUser

    Obtainable From

    API.getBeatmapScores

    +
    interface WithUser {
        accuracy: number;
        best_id: null | number;
        created_at: Date;
        id: null | number;
        max_combo: number;
        mode: "osu" | "taiko" | "fruits" | "mania";
        mode_int: Rulesets;
        mods: string[];
        passed: boolean;
        perfect: boolean;
        pp: null | number;
        rank: string;
        replay: boolean;
        score: number;
        statistics: {
            count_100: number;
            count_300: number;
            count_50: null | number;
            count_geki: null | number;
            count_katu: null | number;
            count_miss: number;
        };
        type: string;
        user: WithCountryCover;
        user_id: number;
    }

    Hierarchy (view full)

    Properties

    Properties

    accuracy: number

    In a format where 96.40% would be 0.9640 (likely with some numbers after the zero)

    -
    best_id: null | number
    created_at: Date
    id: null | number
    max_combo: number
    mode: "osu" | "taiko" | "fruits" | "mania"
    mode_int: Rulesets
    mods: string[]
    passed: boolean
    perfect: boolean
    pp: null | number

    Remarks

    Is null when Beatmap is Loved (for example)

    -
    rank: string

    Also known as a grade, for example this is X (SS) if accuracy is 1 (100.00%)

    -
    replay: boolean

    Can this score's replay be downloaded from the website?

    -
    score: number
    statistics: {
        count_100: number;
        count_300: number;
        count_50: null | number;
        count_geki: null | number;
        count_katu: null | number;
        count_miss: number;
    }

    Type declaration

    • count_100: number
    • count_300: number
    • count_50: null | number

      Remarks

      Is null if the score's gamemode is Taiko

      -
    • count_geki: null | number
    • count_katu: null | number
    • count_miss: number
    type: string
    user_id: number

    The ID of the user who made the score

    -

    Generated using TypeDoc

    \ No newline at end of file +
    best_id: null | number
    created_at: Date
    id: null | number
    max_combo: number
    mode: "osu" | "taiko" | "fruits" | "mania"
    mode_int: Rulesets
    mods: string[]
    passed: boolean
    perfect: boolean
    pp: null | number

    Remarks

    Is null when Beatmap is Loved (for example)

    +
    rank: string

    Also known as a grade, for example this is X (SS) if accuracy is 1 (100.00%)

    +
    replay: boolean

    Can this score's replay be downloaded from the website?

    +
    score: number
    statistics: {
        count_100: number;
        count_300: number;
        count_50: null | number;
        count_geki: null | number;
        count_katu: null | number;
        count_miss: number;
    }

    Type declaration

    • count_100: number
    • count_300: number
    • count_50: null | number

      Remarks

      Is null if the score's gamemode is Taiko

      +
    • count_geki: null | number
    • count_katu: null | number
    • count_miss: number
    type: string
    user_id: number

    The ID of the user who made the score

    +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Score.WithUserBeatmap.html b/docs/interfaces/Score.WithUserBeatmap.html index 765eb45..684f30b 100644 --- a/docs/interfaces/Score.WithUserBeatmap.html +++ b/docs/interfaces/Score.WithUserBeatmap.html @@ -1,6 +1,6 @@ WithUserBeatmap | osu-api-v2-js

    Interface WithUserBeatmap

    The version of Score without lazer-related stuff, used almost everywhere!

    -

    Obtainable From

    API.getBeatmapUserScores

    -
    interface WithUserBeatmap {
        accuracy: number;
        beatmap: Beatmap.Extended;
        best_id: null | number;
        created_at: Date;
        id: null | number;
        max_combo: number;
        mode: "osu" | "taiko" | "fruits" | "mania";
        mode_int: Rulesets;
        mods: string[];
        passed: boolean;
        perfect: boolean;
        pp: null | number;
        rank: string;
        replay: boolean;
        score: number;
        statistics: {
            count_100: number;
            count_300: number;
            count_50: null | number;
            count_geki: null | number;
            count_katu: null | number;
            count_miss: number;
        };
        type: string;
        user: User;
        user_id: number;
    }

    Hierarchy (view full)

    Properties

    Obtainable From

    API.getBeatmapUserScores

    +
    interface WithUserBeatmap {
        accuracy: number;
        beatmap: Beatmap.Extended;
        best_id: null | number;
        created_at: Date;
        id: null | number;
        max_combo: number;
        mode: "osu" | "taiko" | "fruits" | "mania";
        mode_int: Rulesets;
        mods: string[];
        passed: boolean;
        perfect: boolean;
        pp: null | number;
        rank: string;
        replay: boolean;
        score: number;
        statistics: {
            count_100: number;
            count_300: number;
            count_50: null | number;
            count_geki: null | number;
            count_katu: null | number;
            count_miss: number;
        };
        type: string;
        user: User;
        user_id: number;
    }

    Hierarchy (view full)

    Properties

    Properties

    accuracy: number

    In a format where 96.40% would be 0.9640 (likely with some numbers after the zero)

    -
    beatmap: Beatmap.Extended
    best_id: null | number
    created_at: Date
    id: null | number
    max_combo: number
    mode: "osu" | "taiko" | "fruits" | "mania"
    mode_int: Rulesets
    mods: string[]
    passed: boolean
    perfect: boolean
    pp: null | number

    Remarks

    Is null when Beatmap is Loved (for example)

    -
    rank: string

    Also known as a grade, for example this is X (SS) if accuracy is 1 (100.00%)

    -
    replay: boolean

    Can this score's replay be downloaded from the website?

    -
    score: number
    statistics: {
        count_100: number;
        count_300: number;
        count_50: null | number;
        count_geki: null | number;
        count_katu: null | number;
        count_miss: number;
    }

    Type declaration

    • count_100: number
    • count_300: number
    • count_50: null | number

      Remarks

      Is null if the score's gamemode is Taiko

      -
    • count_geki: null | number
    • count_katu: null | number
    • count_miss: number
    type: string
    user: User
    user_id: number

    The ID of the user who made the score

    -

    Generated using TypeDoc

    \ No newline at end of file +
    beatmap: Beatmap.Extended
    best_id: null | number
    created_at: Date
    id: null | number
    max_combo: number
    mode: "osu" | "taiko" | "fruits" | "mania"
    mode_int: Rulesets
    mods: string[]
    passed: boolean
    perfect: boolean
    pp: null | number

    Remarks

    Is null when Beatmap is Loved (for example)

    +
    rank: string

    Also known as a grade, for example this is X (SS) if accuracy is 1 (100.00%)

    +
    replay: boolean

    Can this score's replay be downloaded from the website?

    +
    score: number
    statistics: {
        count_100: number;
        count_300: number;
        count_50: null | number;
        count_geki: null | number;
        count_katu: null | number;
        count_miss: number;
    }

    Type declaration

    • count_100: number
    • count_300: number
    • count_50: null | number

      Remarks

      Is null if the score's gamemode is Taiko

      +
    • count_geki: null | number
    • count_katu: null | number
    • count_miss: number
    type: string
    user: User
    user_id: number

    The ID of the user who made the score

    +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Score.WithUserBeatmapBeatmapset.html b/docs/interfaces/Score.WithUserBeatmapBeatmapset.html index 213fc10..7a54c3b 100644 --- a/docs/interfaces/Score.WithUserBeatmapBeatmapset.html +++ b/docs/interfaces/Score.WithUserBeatmapBeatmapset.html @@ -1,5 +1,5 @@ -WithUserBeatmapBeatmapset | osu-api-v2-js

    Interface WithUserBeatmapBeatmapset

    Obtainable From

    API.getUserScores

    -
    interface WithUserBeatmapBeatmapset {
        accuracy: number;
        beatmap: Beatmap.Extended;
        beatmapset: Beatmapset;
        best_id: null | number;
        created_at: Date;
        id: null | number;
        max_combo: number;
        mode: "osu" | "taiko" | "fruits" | "mania";
        mode_int: Rulesets;
        mods: string[];
        passed: boolean;
        perfect: boolean;
        pp: null | number;
        rank: string;
        replay: boolean;
        score: number;
        statistics: {
            count_100: number;
            count_300: number;
            count_50: null | number;
            count_geki: null | number;
            count_katu: null | number;
            count_miss: number;
        };
        type: string;
        user: User;
        user_id: number;
        weight?: {
            percentage: number;
            pp: number;
        };
    }

    Hierarchy (view full)

    Properties

    accuracy +WithUserBeatmapBeatmapset | osu-api-v2-js

    Interface WithUserBeatmapBeatmapset

    Obtainable From

    API.getUserScores

    +
    interface WithUserBeatmapBeatmapset {
        accuracy: number;
        beatmap: Beatmap.Extended;
        beatmapset: Beatmapset;
        best_id: null | number;
        created_at: Date;
        id: null | number;
        max_combo: number;
        mode: "osu" | "taiko" | "fruits" | "mania";
        mode_int: Rulesets;
        mods: string[];
        passed: boolean;
        perfect: boolean;
        pp: null | number;
        rank: string;
        replay: boolean;
        score: number;
        statistics: {
            count_100: number;
            count_300: number;
            count_50: null | number;
            count_geki: null | number;
            count_katu: null | number;
            count_miss: number;
        };
        type: string;
        user: User;
        user_id: number;
        weight?: {
            percentage: number;
            pp: number;
        };
    }

    Hierarchy (view full)

    Properties

    Properties

    accuracy: number

    In a format where 96.40% would be 0.9640 (likely with some numbers after the zero)

    -
    beatmap: Beatmap.Extended
    beatmapset: Beatmapset
    best_id: null | number
    created_at: Date
    id: null | number
    max_combo: number
    mode: "osu" | "taiko" | "fruits" | "mania"
    mode_int: Rulesets
    mods: string[]
    passed: boolean
    perfect: boolean
    pp: null | number

    Remarks

    Is null when Beatmap is Loved (for example)

    -
    rank: string

    Also known as a grade, for example this is X (SS) if accuracy is 1 (100.00%)

    -
    replay: boolean

    Can this score's replay be downloaded from the website?

    -
    score: number
    statistics: {
        count_100: number;
        count_300: number;
        count_50: null | number;
        count_geki: null | number;
        count_katu: null | number;
        count_miss: number;
    }

    Type declaration

    • count_100: number
    • count_300: number
    • count_50: null | number

      Remarks

      Is null if the score's gamemode is Taiko

      -
    • count_geki: null | number
    • count_katu: null | number
    • count_miss: number
    type: string
    user: User
    user_id: number

    The ID of the user who made the score

    -
    weight?: {
        percentage: number;
        pp: number;
    }

    Type declaration

    • percentage: number
    • pp: number

    Remarks

    Only if type is set to best on API.getUserScores

    -

    Generated using TypeDoc

    \ No newline at end of file +
    beatmap: Beatmap.Extended
    beatmapset: Beatmapset
    best_id: null | number
    created_at: Date
    id: null | number
    max_combo: number
    mode: "osu" | "taiko" | "fruits" | "mania"
    mode_int: Rulesets
    mods: string[]
    passed: boolean
    perfect: boolean
    pp: null | number

    Remarks

    Is null when Beatmap is Loved (for example)

    +
    rank: string

    Also known as a grade, for example this is X (SS) if accuracy is 1 (100.00%)

    +
    replay: boolean

    Can this score's replay be downloaded from the website?

    +
    score: number
    statistics: {
        count_100: number;
        count_300: number;
        count_50: null | number;
        count_geki: null | number;
        count_katu: null | number;
        count_miss: number;
    }

    Type declaration

    • count_100: number
    • count_300: number
    • count_50: null | number

      Remarks

      Is null if the score's gamemode is Taiko

      +
    • count_geki: null | number
    • count_katu: null | number
    • count_miss: number
    type: string
    user: User
    user_id: number

    The ID of the user who made the score

    +
    weight?: {
        percentage: number;
        pp: number;
    }

    Type declaration

    • percentage: number
    • pp: number

    Remarks

    Only if type is set to best on API.getUserScores

    +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/SearchResult.User.html b/docs/interfaces/SearchResult.User.html deleted file mode 100644 index 0a78c75..0000000 --- a/docs/interfaces/SearchResult.User.html +++ /dev/null @@ -1,6 +0,0 @@ -User | osu-api-v2-js

    Obtainable From

    API.searchUser

    -
    interface User {
        data: User[];
        total: number;
    }

    Hierarchy

    • SearchResult
      • User

    Properties

    Properties

    data: User[]

    The Users that have been found

    -
    total: number

    How many results there are across all pages

    -

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/SearchResult.Wiki.html b/docs/interfaces/SearchResult.Wiki.html deleted file mode 100644 index 4ff0451..0000000 --- a/docs/interfaces/SearchResult.Wiki.html +++ /dev/null @@ -1,6 +0,0 @@ -Wiki | osu-api-v2-js

    Obtainable From

    API.searchWiki

    -
    interface Wiki {
        data: WikiPage[];
        total: number;
    }

    Hierarchy

    • SearchResult
      • Wiki

    Properties

    Properties

    data: WikiPage[]

    The WikiPages that have been found

    -
    total: number

    How many results there are across all pages

    -

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Spotlight-1.html b/docs/interfaces/Spotlight-1.html index 65e03cf..8f7579b 100644 --- a/docs/interfaces/Spotlight-1.html +++ b/docs/interfaces/Spotlight-1.html @@ -1,9 +1,9 @@ -Spotlight | osu-api-v2-js

    Interface Spotlight

    Obtainable From

    API.getSpotlights

    -
    interface Spotlight {
        end_date: Date;
        id: number;
        mode_specific: boolean;
        name: string;
        start_date: Date;
        type: string;
    }

    Hierarchy (view full)

    Properties

    end_date +Spotlight | osu-api-v2-js

    Interface Spotlight

    Obtainable From

    API.getSpotlights

    +
    interface Spotlight {
        end_date: Date;
        id: number;
        mode_specific: boolean;
        name: string;
        start_date: Date;
        type: string;
    }

    Hierarchy (view full)

    Properties

    end_date: Date
    id: number
    mode_specific: boolean

    Pretty sure this is only true when the spotlight has different beatmaps for each ruleset

    -
    name: string
    start_date: Date
    type: string

    Generated using TypeDoc

    \ No newline at end of file +

    Properties

    end_date: Date
    id: number
    mode_specific: boolean

    Pretty sure this is only true when the spotlight has different beatmaps for each ruleset

    +
    name: string
    start_date: Date
    type: string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Spotlight.WithParticipantcount.html b/docs/interfaces/Spotlight.WithParticipantcount.html index a85fcde..2140ecc 100644 --- a/docs/interfaces/Spotlight.WithParticipantcount.html +++ b/docs/interfaces/Spotlight.WithParticipantcount.html @@ -1,10 +1,10 @@ -WithParticipantcount | osu-api-v2-js

    Interface WithParticipantcount

    Obtainable From

    API.getSpotlights

    -
    interface WithParticipantcount {
        end_date: Date;
        id: number;
        mode_specific: boolean;
        name: string;
        participant_count: number;
        start_date: Date;
        type: string;
    }

    Hierarchy (view full)

    Properties

    end_date +WithParticipantcount | osu-api-v2-js

    Interface WithParticipantcount

    Obtainable From

    API.getSpotlights

    +
    interface WithParticipantcount {
        end_date: Date;
        id: number;
        mode_specific: boolean;
        name: string;
        participant_count: number;
        start_date: Date;
        type: string;
    }

    Hierarchy (view full)

    Properties

    end_date: Date
    id: number
    mode_specific: boolean

    Pretty sure this is only true when the spotlight has different beatmaps for each ruleset

    -
    name: string
    participant_count: number
    start_date: Date
    type: string

    Generated using TypeDoc

    \ No newline at end of file +

    Properties

    end_date: Date
    id: number
    mode_specific: boolean

    Pretty sure this is only true when the spotlight has different beatmaps for each ruleset

    +
    name: string
    participant_count: number
    start_date: Date
    type: string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/User-1.html b/docs/interfaces/User-1.html index a3d77bf..0583b69 100644 --- a/docs/interfaces/User-1.html +++ b/docs/interfaces/User-1.html @@ -1,4 +1,4 @@ -User | osu-api-v2-js

    Interface User

    interface User {
        avatar_url: string;
        country_code: string;
        default_group: string;
        id: number;
        is_active: boolean;
        is_bot: boolean;
        is_deleted: boolean;
        is_online: boolean;
        is_supporter: boolean;
        last_visit: null | Date;
        pm_friends_only: boolean;
        profile_colour: null | string;
        username: string;
    }

    Hierarchy (view full)

    Properties

    avatar_url +User | osu-api-v2-js

    Interface User

    interface User {
        avatar_url: string;
        country_code: string;
        default_group: string;
        id: number;
        is_active: boolean;
        is_bot: boolean;
        is_deleted: boolean;
        is_online: boolean;
        is_supporter: boolean;
        last_visit: null | Date;
        pm_friends_only: boolean;
        profile_colour: null | string;
        username: string;
    }

    Hierarchy (view full)

    Properties

    avatar_url: string
    country_code: string
    default_group: string
    id: number
    is_active: boolean
    is_bot: boolean
    is_deleted: boolean
    is_online: boolean
    is_supporter: boolean
    last_visit: null | Date
    pm_friends_only: boolean
    profile_colour: null | string
    username: string

    Generated using TypeDoc

    \ No newline at end of file +

    Properties

    avatar_url: string
    country_code: string
    default_group: string
    id: number
    is_active: boolean
    is_bot: boolean
    is_deleted: boolean
    is_online: boolean
    is_supporter: boolean
    last_visit: null | Date
    pm_friends_only: boolean
    profile_colour: null | string
    username: string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/User.Config.html b/docs/interfaces/User.Config.html new file mode 100644 index 0000000..fdb6f4a --- /dev/null +++ b/docs/interfaces/User.Config.html @@ -0,0 +1,7 @@ +Config | osu-api-v2-js

    Interface Config

    An interface to tell the API how the returned Array should be like

    +
    interface Config {
        limit?: number;
        offset?: number;
    }

    Properties

    Properties

    limit?: number

    The maximum amount of elements returned in the array

    +

    Remarks

    The server could send less than the limit because it deliberately limits itself; Putting this at 1000 doesn't mean you'll even get close to 200

    +
    offset?: number

    How many elements that would be at the top of the returned array get skipped (while still filling the array up to the limit)

    +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/User.Extended-1.html b/docs/interfaces/User.Extended-1.html index 0b690cd..8602757 100644 --- a/docs/interfaces/User.Extended-1.html +++ b/docs/interfaces/User.Extended-1.html @@ -1,5 +1,5 @@ -Extended | osu-api-v2-js

    Interface Extended

    Obtainable From

    API.getUser

    -
    interface Extended {
        account_history: {
            description: null | string;
            id: number;
            length: number;
            permanent: boolean;
            timestamp: Date;
            type: "note" | "restriction" | "silence";
        }[];
        active_tournament_banners: {
            id: number;
            image: string;
            tournament_id: number;
        }[];
        avatar_url: string;
        badges: {
            awarded_at: Date;
            description: string;
            image_url: string;
            url: string;
        }[];
        beatmap_playcounts_count: number;
        comments_count: number;
        country: {
            code: string;
            name: string;
        };
        country_code: string;
        cover: {
            custom_url: null | string;
            id: null | number;
            url: string;
        };
        cover_url: string;
        default_group: string;
        discord: null | string;
        favourite_beatmapset_count: number;
        follower_count: number;
        graveyard_beatmapset_count: number;
        groups: {
            colour: null | string;
            has_listing: boolean;
            has_playmodes: boolean;
            id: number;
            identifier: string;
            is_probationary: boolean;
            name: string;
            playmodes: null | ("osu" | "taiko" | "fruits" | "mania")[];
            short_name: string;
        }[];
        guest_beatmapset_count: number;
        has_supported: boolean;
        id: number;
        interests: null | string;
        is_active: boolean;
        is_bot: boolean;
        is_deleted: boolean;
        is_online: boolean;
        is_supporter: boolean;
        join_date: Date;
        kudosu: {
            available: number;
            total: number;
        };
        last_visit: null | Date;
        location: null | string;
        loved_beatmapset_count: number;
        mapping_follower_count: number;
        max_blocks: number;
        max_friends: number;
        monthly_playcounts: {
            count: number;
            start_date: Date;
        }[];
        nominated_beatmapset_count: number;
        occupation: null | string;
        page: {
            html: string;
            raw: string;
        };
        pending_beatmapset_count: number;
        playmode: "osu" | "taiko" | "fruits" | "mania";
        playstyle: string[];
        pm_friends_only: boolean;
        post_count: number;
        previous_usernames: string[];
        profile_colour: null | string;
        profile_order: ("me" | "recent_activity" | "beatmaps" | "historical" | "kudosu" | "top_ranks" | "medals")[];
        rank_highest: null | {
            rank: number;
            updated_at: Date;
        };
        rank_history: null | {
            data: number[];
            mode: "osu" | "taiko" | "fruits" | "mania";
        };
        replays_watched_counts: {
            count: number;
            start_date: Date;
        }[];
        scores_best_count: number;
        scores_first_count: number;
        scores_pinned_count: number;
        scores_recent_count: number;
        statistics: WithCountryrank;
        support_level: number;
        title: null | string;
        title_url: null | string;
        twitter: null | string;
        user_achievements: {
            achieved_at: Date;
            achievement_id: number;
        }[];
        username: string;
        website: null | string;
    }

    Hierarchy (view full)

    Properties

    account_history +Extended | osu-api-v2-js

    Interface Extended

    Obtainable From

    API.getUser

    +
    interface Extended {
        account_history: {
            description: null | string;
            id: number;
            length: number;
            permanent: boolean;
            timestamp: Date;
            type: "note" | "restriction" | "silence";
        }[];
        active_tournament_banners: {
            id: number;
            image: string;
            tournament_id: number;
        }[];
        avatar_url: string;
        badges: {
            awarded_at: Date;
            description: string;
            image_url: string;
            url: string;
        }[];
        beatmap_playcounts_count: number;
        comments_count: number;
        country: {
            code: string;
            name: string;
        };
        country_code: string;
        cover: {
            custom_url: null | string;
            id: null | number;
            url: string;
        };
        cover_url: string;
        default_group: string;
        discord: null | string;
        favourite_beatmapset_count: number;
        follower_count: number;
        graveyard_beatmapset_count: number;
        groups: {
            colour: null | string;
            has_listing: boolean;
            has_playmodes: boolean;
            id: number;
            identifier: string;
            is_probationary: boolean;
            name: string;
            playmodes: null | ("osu" | "taiko" | "fruits" | "mania")[];
            short_name: string;
        }[];
        guest_beatmapset_count: number;
        has_supported: boolean;
        id: number;
        interests: null | string;
        is_active: boolean;
        is_bot: boolean;
        is_deleted: boolean;
        is_online: boolean;
        is_supporter: boolean;
        join_date: Date;
        kudosu: {
            available: number;
            total: number;
        };
        last_visit: null | Date;
        location: null | string;
        loved_beatmapset_count: number;
        mapping_follower_count: number;
        max_blocks: number;
        max_friends: number;
        monthly_playcounts: {
            count: number;
            start_date: Date;
        }[];
        nominated_beatmapset_count: number;
        occupation: null | string;
        page: {
            html: string;
            raw: string;
        };
        pending_beatmapset_count: number;
        playmode: "osu" | "taiko" | "fruits" | "mania";
        playstyle: string[];
        pm_friends_only: boolean;
        post_count: number;
        previous_usernames: string[];
        profile_colour: null | string;
        profile_order: ("me" | "recent_activity" | "beatmaps" | "historical" | "kudosu" | "top_ranks" | "medals")[];
        rank_highest: null | {
            rank: number;
            updated_at: Date;
        };
        rank_history: null | {
            data: number[];
            mode: "osu" | "taiko" | "fruits" | "mania";
        };
        replays_watched_counts: {
            count: number;
            start_date: Date;
        }[];
        scores_best_count: number;
        scores_first_count: number;
        scores_pinned_count: number;
        scores_recent_count: number;
        statistics: WithCountryrank;
        support_level: number;
        title: null | string;
        title_url: null | string;
        twitter: null | string;
        user_achievements: {
            achieved_at: Date;
            achievement_id: number;
        }[];
        username: string;
        website: null | string;
    }

    Hierarchy (view full)

    Properties

    account_history: {
        description: null | string;
        id: number;
        length: number;
        permanent: boolean;
        timestamp: Date;
        type: "note" | "restriction" | "silence";
    }[]

    Type declaration

    • description: null | string
    • id: number
    • length: number
    • permanent: boolean
    • timestamp: Date
    • type: "note" | "restriction" | "silence"
    active_tournament_banners: {
        id: number;
        image: string;
        tournament_id: number;
    }[]

    Type declaration

    • id: number
    • image: string
    • tournament_id: number
    avatar_url: string
    badges: {
        awarded_at: Date;
        description: string;
        image_url: string;
        url: string;
    }[]

    Type declaration

    • awarded_at: Date
    • description: string
    • image_url: string
    • url: string
    beatmap_playcounts_count: number
    comments_count: number
    country: {
        code: string;
        name: string;
    }

    Type declaration

    • code: string
    • name: string
    country_code: string
    cover: {
        custom_url: null | string;
        id: null | number;
        url: string;
    }

    Type declaration

    • custom_url: null | string
    • id: null | number
    • url: string
    cover_url: string
    default_group: string
    discord: null | string
    favourite_beatmapset_count: number
    follower_count: number
    graveyard_beatmapset_count: number
    groups: {
        colour: null | string;
        has_listing: boolean;
        has_playmodes: boolean;
        id: number;
        identifier: string;
        is_probationary: boolean;
        name: string;
        playmodes: null | ("osu" | "taiko" | "fruits" | "mania")[];
        short_name: string;
    }[]

    Type declaration

    • colour: null | string
    • has_listing: boolean
    • has_playmodes: boolean
    • id: number
    • identifier: string
    • is_probationary: boolean
    • name: string
    • playmodes: null | ("osu" | "taiko" | "fruits" | "mania")[]
    • short_name: string
    guest_beatmapset_count: number
    has_supported: boolean
    id: number
    interests: null | string
    is_active: boolean
    is_bot: boolean
    is_deleted: boolean
    is_online: boolean
    is_supporter: boolean
    join_date: Date
    kudosu: {
        available: number;
        total: number;
    }

    Type declaration

    • available: number
    • total: number
    last_visit: null | Date
    location: null | string
    loved_beatmapset_count: number
    mapping_follower_count: number
    max_blocks: number
    max_friends: number
    monthly_playcounts: {
        count: number;
        start_date: Date;
    }[]

    Type declaration

    • count: number
    • start_date: Date
    nominated_beatmapset_count: number
    occupation: null | string
    page: {
        html: string;
        raw: string;
    }

    Type declaration

    • html: string
    • raw: string

      Basically the text with the BBCode

      -
    pending_beatmapset_count: number
    playmode: "osu" | "taiko" | "fruits" | "mania"
    playstyle: string[]
    pm_friends_only: boolean
    post_count: number
    previous_usernames: string[]
    profile_colour: null | string
    profile_order: ("me" | "recent_activity" | "beatmaps" | "historical" | "kudosu" | "top_ranks" | "medals")[]
    rank_highest: null | {
        rank: number;
        updated_at: Date;
    }

    Type declaration

    • rank: number
    • updated_at: Date
    rank_history: null | {
        data: number[];
        mode: "osu" | "taiko" | "fruits" | "mania";
    }

    Type declaration

    • data: number[]
    • mode: "osu" | "taiko" | "fruits" | "mania"
    replays_watched_counts: {
        count: number;
        start_date: Date;
    }[]

    Type declaration

    • count: number
    • start_date: Date
    scores_best_count: number
    scores_first_count: number
    scores_pinned_count: number

    Specific to the Ruleset (playmode)

    -
    scores_recent_count: number
    statistics: WithCountryrank
    support_level: number
    title: null | string
    title_url: null | string
    twitter: null | string
    user_achievements: {
        achieved_at: Date;
        achievement_id: number;
    }[]

    Type declaration

    • achieved_at: Date
    • achievement_id: number
    username: string
    website: null | string

    Generated using TypeDoc

    \ No newline at end of file +

    Properties

    account_history: {
        description: null | string;
        id: number;
        length: number;
        permanent: boolean;
        timestamp: Date;
        type: "note" | "restriction" | "silence";
    }[]

    Type declaration

    • description: null | string
    • id: number
    • length: number
    • permanent: boolean
    • timestamp: Date
    • type: "note" | "restriction" | "silence"
    active_tournament_banners: {
        id: number;
        image: string;
        tournament_id: number;
    }[]

    Type declaration

    • id: number
    • image: string
    • tournament_id: number
    avatar_url: string
    badges: {
        awarded_at: Date;
        description: string;
        image_url: string;
        url: string;
    }[]

    Type declaration

    • awarded_at: Date
    • description: string
    • image_url: string
    • url: string
    beatmap_playcounts_count: number
    comments_count: number
    country: {
        code: string;
        name: string;
    }

    Type declaration

    • code: string
    • name: string
    country_code: string
    cover: {
        custom_url: null | string;
        id: null | number;
        url: string;
    }

    Type declaration

    • custom_url: null | string
    • id: null | number
    • url: string
    cover_url: string
    default_group: string
    discord: null | string
    favourite_beatmapset_count: number
    follower_count: number
    graveyard_beatmapset_count: number
    groups: {
        colour: null | string;
        has_listing: boolean;
        has_playmodes: boolean;
        id: number;
        identifier: string;
        is_probationary: boolean;
        name: string;
        playmodes: null | ("osu" | "taiko" | "fruits" | "mania")[];
        short_name: string;
    }[]

    Type declaration

    • colour: null | string
    • has_listing: boolean
    • has_playmodes: boolean
    • id: number
    • identifier: string
    • is_probationary: boolean
    • name: string
    • playmodes: null | ("osu" | "taiko" | "fruits" | "mania")[]
    • short_name: string
    guest_beatmapset_count: number
    has_supported: boolean
    id: number
    interests: null | string
    is_active: boolean
    is_bot: boolean
    is_deleted: boolean
    is_online: boolean
    is_supporter: boolean
    join_date: Date
    kudosu: {
        available: number;
        total: number;
    }

    Type declaration

    • available: number
    • total: number
    last_visit: null | Date
    location: null | string
    loved_beatmapset_count: number
    mapping_follower_count: number
    max_blocks: number
    max_friends: number
    monthly_playcounts: {
        count: number;
        start_date: Date;
    }[]

    Type declaration

    • count: number
    • start_date: Date
    nominated_beatmapset_count: number
    occupation: null | string
    page: {
        html: string;
        raw: string;
    }

    Type declaration

    • html: string
    • raw: string

      Basically the text with the BBCode

      +
    pending_beatmapset_count: number
    playmode: "osu" | "taiko" | "fruits" | "mania"
    playstyle: string[]
    pm_friends_only: boolean
    post_count: number
    previous_usernames: string[]
    profile_colour: null | string
    profile_order: ("me" | "recent_activity" | "beatmaps" | "historical" | "kudosu" | "top_ranks" | "medals")[]
    rank_highest: null | {
        rank: number;
        updated_at: Date;
    }

    Type declaration

    • rank: number
    • updated_at: Date
    rank_history: null | {
        data: number[];
        mode: "osu" | "taiko" | "fruits" | "mania";
    }

    Type declaration

    • data: number[]
    • mode: "osu" | "taiko" | "fruits" | "mania"
    replays_watched_counts: {
        count: number;
        start_date: Date;
    }[]

    Type declaration

    • count: number
    • start_date: Date
    scores_best_count: number
    scores_first_count: number
    scores_pinned_count: number

    Specific to the Ruleset (playmode)

    +
    scores_recent_count: number
    statistics: WithCountryrank
    support_level: number
    title: null | string
    title_url: null | string
    twitter: null | string
    user_achievements: {
        achieved_at: Date;
        achievement_id: number;
    }[]

    Type declaration

    • achieved_at: Date
    • achievement_id: number
    username: string
    website: null | string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/User.Extended.WithStatisticsrulesets.html b/docs/interfaces/User.Extended.WithStatisticsrulesets.html index 2bd0bc0..22c5aef 100644 --- a/docs/interfaces/User.Extended.WithStatisticsrulesets.html +++ b/docs/interfaces/User.Extended.WithStatisticsrulesets.html @@ -1,5 +1,5 @@ -WithStatisticsrulesets | osu-api-v2-js

    Interface WithStatisticsrulesets

    Obtainable From

    API.getResourceOwner

    -
    interface WithStatisticsrulesets {
        account_history: {
            description: null | string;
            id: number;
            length: number;
            permanent: boolean;
            timestamp: Date;
            type: "note" | "restriction" | "silence";
        }[];
        active_tournament_banners: {
            id: number;
            image: string;
            tournament_id: number;
        }[];
        avatar_url: string;
        badges: {
            awarded_at: Date;
            description: string;
            image_url: string;
            url: string;
        }[];
        beatmap_playcounts_count: number;
        comments_count: number;
        country: {
            code: string;
            name: string;
        };
        country_code: string;
        cover: {
            custom_url: null | string;
            id: null | number;
            url: string;
        };
        cover_url: string;
        default_group: string;
        discord: null | string;
        favourite_beatmapset_count: number;
        follower_count: number;
        graveyard_beatmapset_count: number;
        groups: {
            colour: null | string;
            has_listing: boolean;
            has_playmodes: boolean;
            id: number;
            identifier: string;
            is_probationary: boolean;
            name: string;
            playmodes: null | ("osu" | "taiko" | "fruits" | "mania")[];
            short_name: string;
        }[];
        guest_beatmapset_count: number;
        has_supported: boolean;
        id: number;
        interests: null | string;
        is_active: boolean;
        is_bot: boolean;
        is_deleted: boolean;
        is_online: boolean;
        is_restricted: boolean;
        is_supporter: boolean;
        join_date: Date;
        kudosu: {
            available: number;
            total: number;
        };
        last_visit: null | Date;
        location: null | string;
        loved_beatmapset_count: number;
        mapping_follower_count: number;
        max_blocks: number;
        max_friends: number;
        monthly_playcounts: {
            count: number;
            start_date: Date;
        }[];
        nominated_beatmapset_count: number;
        occupation: null | string;
        page: {
            html: string;
            raw: string;
        };
        pending_beatmapset_count: number;
        playmode: "osu" | "taiko" | "fruits" | "mania";
        playstyle: string[];
        pm_friends_only: boolean;
        post_count: number;
        previous_usernames: string[];
        profile_colour: null | string;
        profile_order: ("me" | "recent_activity" | "beatmaps" | "historical" | "kudosu" | "top_ranks" | "medals")[];
        rank_highest: null | {
            rank: number;
            updated_at: Date;
        };
        rank_history: null | {
            data: number[];
            mode: "osu" | "taiko" | "fruits" | "mania";
        };
        replays_watched_counts: {
            count: number;
            start_date: Date;
        }[];
        scores_best_count: number;
        scores_first_count: number;
        scores_pinned_count: number;
        scores_recent_count: number;
        statistics: WithCountryrank;
        statistics_rulesets: {
            fruits?: User.Statistics;
            mania?: User.Statistics;
            osu?: User.Statistics;
            taiko?: User.Statistics;
        };
        support_level: number;
        title: null | string;
        title_url: null | string;
        twitter: null | string;
        user_achievements: {
            achieved_at: Date;
            achievement_id: number;
        }[];
        username: string;
        website: null | string;
    }

    Hierarchy (view full)

    Properties

    account_history +WithStatisticsrulesets | osu-api-v2-js

    Interface WithStatisticsrulesets

    Obtainable From

    API.getResourceOwner

    +
    interface WithStatisticsrulesets {
        account_history: {
            description: null | string;
            id: number;
            length: number;
            permanent: boolean;
            timestamp: Date;
            type: "note" | "restriction" | "silence";
        }[];
        active_tournament_banners: {
            id: number;
            image: string;
            tournament_id: number;
        }[];
        avatar_url: string;
        badges: {
            awarded_at: Date;
            description: string;
            image_url: string;
            url: string;
        }[];
        beatmap_playcounts_count: number;
        comments_count: number;
        country: {
            code: string;
            name: string;
        };
        country_code: string;
        cover: {
            custom_url: null | string;
            id: null | number;
            url: string;
        };
        cover_url: string;
        default_group: string;
        discord: null | string;
        favourite_beatmapset_count: number;
        follower_count: number;
        graveyard_beatmapset_count: number;
        groups: {
            colour: null | string;
            has_listing: boolean;
            has_playmodes: boolean;
            id: number;
            identifier: string;
            is_probationary: boolean;
            name: string;
            playmodes: null | ("osu" | "taiko" | "fruits" | "mania")[];
            short_name: string;
        }[];
        guest_beatmapset_count: number;
        has_supported: boolean;
        id: number;
        interests: null | string;
        is_active: boolean;
        is_bot: boolean;
        is_deleted: boolean;
        is_online: boolean;
        is_restricted: boolean;
        is_supporter: boolean;
        join_date: Date;
        kudosu: {
            available: number;
            total: number;
        };
        last_visit: null | Date;
        location: null | string;
        loved_beatmapset_count: number;
        mapping_follower_count: number;
        max_blocks: number;
        max_friends: number;
        monthly_playcounts: {
            count: number;
            start_date: Date;
        }[];
        nominated_beatmapset_count: number;
        occupation: null | string;
        page: {
            html: string;
            raw: string;
        };
        pending_beatmapset_count: number;
        playmode: "osu" | "taiko" | "fruits" | "mania";
        playstyle: string[];
        pm_friends_only: boolean;
        post_count: number;
        previous_usernames: string[];
        profile_colour: null | string;
        profile_order: ("me" | "recent_activity" | "beatmaps" | "historical" | "kudosu" | "top_ranks" | "medals")[];
        rank_highest: null | {
            rank: number;
            updated_at: Date;
        };
        rank_history: null | {
            data: number[];
            mode: "osu" | "taiko" | "fruits" | "mania";
        };
        replays_watched_counts: {
            count: number;
            start_date: Date;
        }[];
        scores_best_count: number;
        scores_first_count: number;
        scores_pinned_count: number;
        scores_recent_count: number;
        statistics: WithCountryrank;
        statistics_rulesets: {
            fruits?: User.Statistics;
            mania?: User.Statistics;
            osu?: User.Statistics;
            taiko?: User.Statistics;
        };
        support_level: number;
        title: null | string;
        title_url: null | string;
        twitter: null | string;
        user_achievements: {
            achieved_at: Date;
            achievement_id: number;
        }[];
        username: string;
        website: null | string;
    }

    Hierarchy (view full)

    Properties

    account_history: {
        description: null | string;
        id: number;
        length: number;
        permanent: boolean;
        timestamp: Date;
        type: "note" | "restriction" | "silence";
    }[]

    Type declaration

    • description: null | string
    • id: number
    • length: number
    • permanent: boolean
    • timestamp: Date
    • type: "note" | "restriction" | "silence"
    active_tournament_banners: {
        id: number;
        image: string;
        tournament_id: number;
    }[]

    Type declaration

    • id: number
    • image: string
    • tournament_id: number
    avatar_url: string
    badges: {
        awarded_at: Date;
        description: string;
        image_url: string;
        url: string;
    }[]

    Type declaration

    • awarded_at: Date
    • description: string
    • image_url: string
    • url: string
    beatmap_playcounts_count: number
    comments_count: number
    country: {
        code: string;
        name: string;
    }

    Type declaration

    • code: string
    • name: string
    country_code: string
    cover: {
        custom_url: null | string;
        id: null | number;
        url: string;
    }

    Type declaration

    • custom_url: null | string
    • id: null | number
    • url: string
    cover_url: string
    default_group: string
    discord: null | string
    favourite_beatmapset_count: number
    follower_count: number
    graveyard_beatmapset_count: number
    groups: {
        colour: null | string;
        has_listing: boolean;
        has_playmodes: boolean;
        id: number;
        identifier: string;
        is_probationary: boolean;
        name: string;
        playmodes: null | ("osu" | "taiko" | "fruits" | "mania")[];
        short_name: string;
    }[]

    Type declaration

    • colour: null | string
    • has_listing: boolean
    • has_playmodes: boolean
    • id: number
    • identifier: string
    • is_probationary: boolean
    • name: string
    • playmodes: null | ("osu" | "taiko" | "fruits" | "mania")[]
    • short_name: string
    guest_beatmapset_count: number
    has_supported: boolean
    id: number
    interests: null | string
    is_active: boolean
    is_bot: boolean
    is_deleted: boolean
    is_online: boolean
    is_restricted: boolean
    is_supporter: boolean
    join_date: Date
    kudosu: {
        available: number;
        total: number;
    }

    Type declaration

    • available: number
    • total: number
    last_visit: null | Date
    location: null | string
    loved_beatmapset_count: number
    mapping_follower_count: number
    max_blocks: number
    max_friends: number
    monthly_playcounts: {
        count: number;
        start_date: Date;
    }[]

    Type declaration

    • count: number
    • start_date: Date
    nominated_beatmapset_count: number
    occupation: null | string
    page: {
        html: string;
        raw: string;
    }

    Type declaration

    • html: string
    • raw: string

      Basically the text with the BBCode

      -
    pending_beatmapset_count: number
    playmode: "osu" | "taiko" | "fruits" | "mania"
    playstyle: string[]
    pm_friends_only: boolean
    post_count: number
    previous_usernames: string[]
    profile_colour: null | string
    profile_order: ("me" | "recent_activity" | "beatmaps" | "historical" | "kudosu" | "top_ranks" | "medals")[]
    rank_highest: null | {
        rank: number;
        updated_at: Date;
    }

    Type declaration

    • rank: number
    • updated_at: Date
    rank_history: null | {
        data: number[];
        mode: "osu" | "taiko" | "fruits" | "mania";
    }

    Type declaration

    • data: number[]
    • mode: "osu" | "taiko" | "fruits" | "mania"
    replays_watched_counts: {
        count: number;
        start_date: Date;
    }[]

    Type declaration

    • count: number
    • start_date: Date
    scores_best_count: number
    scores_first_count: number
    scores_pinned_count: number

    Specific to the Ruleset (playmode)

    -
    scores_recent_count: number
    statistics: WithCountryrank
    statistics_rulesets: {
        fruits?: User.Statistics;
        mania?: User.Statistics;
        osu?: User.Statistics;
        taiko?: User.Statistics;
    }

    Type declaration

    support_level: number
    title: null | string
    title_url: null | string
    twitter: null | string
    user_achievements: {
        achieved_at: Date;
        achievement_id: number;
    }[]

    Type declaration

    • achieved_at: Date
    • achievement_id: number
    username: string
    website: null | string

    Generated using TypeDoc

    \ No newline at end of file +

    Properties

    account_history: {
        description: null | string;
        id: number;
        length: number;
        permanent: boolean;
        timestamp: Date;
        type: "note" | "restriction" | "silence";
    }[]

    Type declaration

    • description: null | string
    • id: number
    • length: number
    • permanent: boolean
    • timestamp: Date
    • type: "note" | "restriction" | "silence"
    active_tournament_banners: {
        id: number;
        image: string;
        tournament_id: number;
    }[]

    Type declaration

    • id: number
    • image: string
    • tournament_id: number
    avatar_url: string
    badges: {
        awarded_at: Date;
        description: string;
        image_url: string;
        url: string;
    }[]

    Type declaration

    • awarded_at: Date
    • description: string
    • image_url: string
    • url: string
    beatmap_playcounts_count: number
    comments_count: number
    country: {
        code: string;
        name: string;
    }

    Type declaration

    • code: string
    • name: string
    country_code: string
    cover: {
        custom_url: null | string;
        id: null | number;
        url: string;
    }

    Type declaration

    • custom_url: null | string
    • id: null | number
    • url: string
    cover_url: string
    default_group: string
    discord: null | string
    favourite_beatmapset_count: number
    follower_count: number
    graveyard_beatmapset_count: number
    groups: {
        colour: null | string;
        has_listing: boolean;
        has_playmodes: boolean;
        id: number;
        identifier: string;
        is_probationary: boolean;
        name: string;
        playmodes: null | ("osu" | "taiko" | "fruits" | "mania")[];
        short_name: string;
    }[]

    Type declaration

    • colour: null | string
    • has_listing: boolean
    • has_playmodes: boolean
    • id: number
    • identifier: string
    • is_probationary: boolean
    • name: string
    • playmodes: null | ("osu" | "taiko" | "fruits" | "mania")[]
    • short_name: string
    guest_beatmapset_count: number
    has_supported: boolean
    id: number
    interests: null | string
    is_active: boolean
    is_bot: boolean
    is_deleted: boolean
    is_online: boolean
    is_restricted: boolean
    is_supporter: boolean
    join_date: Date
    kudosu: {
        available: number;
        total: number;
    }

    Type declaration

    • available: number
    • total: number
    last_visit: null | Date
    location: null | string
    loved_beatmapset_count: number
    mapping_follower_count: number
    max_blocks: number
    max_friends: number
    monthly_playcounts: {
        count: number;
        start_date: Date;
    }[]

    Type declaration

    • count: number
    • start_date: Date
    nominated_beatmapset_count: number
    occupation: null | string
    page: {
        html: string;
        raw: string;
    }

    Type declaration

    • html: string
    • raw: string

      Basically the text with the BBCode

      +
    pending_beatmapset_count: number
    playmode: "osu" | "taiko" | "fruits" | "mania"
    playstyle: string[]
    pm_friends_only: boolean
    post_count: number
    previous_usernames: string[]
    profile_colour: null | string
    profile_order: ("me" | "recent_activity" | "beatmaps" | "historical" | "kudosu" | "top_ranks" | "medals")[]
    rank_highest: null | {
        rank: number;
        updated_at: Date;
    }

    Type declaration

    • rank: number
    • updated_at: Date
    rank_history: null | {
        data: number[];
        mode: "osu" | "taiko" | "fruits" | "mania";
    }

    Type declaration

    • data: number[]
    • mode: "osu" | "taiko" | "fruits" | "mania"
    replays_watched_counts: {
        count: number;
        start_date: Date;
    }[]

    Type declaration

    • count: number
    • start_date: Date
    scores_best_count: number
    scores_first_count: number
    scores_pinned_count: number

    Specific to the Ruleset (playmode)

    +
    scores_recent_count: number
    statistics: WithCountryrank
    statistics_rulesets: {
        fruits?: User.Statistics;
        mania?: User.Statistics;
        osu?: User.Statistics;
        taiko?: User.Statistics;
    }

    Type declaration

    support_level: number
    title: null | string
    title_url: null | string
    twitter: null | string
    user_achievements: {
        achieved_at: Date;
        achievement_id: number;
    }[]

    Type declaration

    • achieved_at: Date
    • achievement_id: number
    username: string
    website: null | string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/User.KudosuHistory.html b/docs/interfaces/User.KudosuHistory.html index bc7f4ce..5b63f5d 100644 --- a/docs/interfaces/User.KudosuHistory.html +++ b/docs/interfaces/User.KudosuHistory.html @@ -1,9 +1,9 @@ -KudosuHistory | osu-api-v2-js

    Interface KudosuHistory

    Obtainable From

    API.getUserKudosu

    -
    interface KudosuHistory {
        action: "reset" | "give" | "vote.give" | "vote.reset" | "revoke" | "vote.revoke";
        amount: number;
        created_at: Date;
        giver: null | {
            url: string;
            username: string;
        };
        id: number;
        model: string;
        post: {
            title: string;
            url: null | string;
        };
    }

    Properties

    action +KudosuHistory | osu-api-v2-js

    Interface KudosuHistory

    Obtainable From

    API.getUserKudosu

    +
    interface KudosuHistory {
        action: "reset" | "give" | "vote.give" | "vote.reset" | "revoke" | "vote.revoke";
        amount: number;
        created_at: Date;
        giver: null | {
            url: string;
            username: string;
        };
        id: number;
        model: string;
        post: {
            title: string;
            url: null | string;
        };
    }

    Properties

    action: "reset" | "give" | "vote.give" | "vote.reset" | "revoke" | "vote.revoke"
    amount: number
    created_at: Date
    giver: null | {
        url: string;
        username: string;
    }

    Type declaration

    • url: string
    • username: string
    id: number
    model: string
    post: {
        title: string;
        url: null | string;
    }

    Type declaration

    • title: string
    • url: null | string

    Generated using TypeDoc

    \ No newline at end of file +

    Properties

    action: "reset" | "give" | "vote.give" | "vote.reset" | "revoke" | "vote.revoke"
    amount: number
    created_at: Date
    giver: null | {
        url: string;
        username: string;
    }

    Type declaration

    • url: string
    • username: string
    id: number
    model: string
    post: {
        title: string;
        url: null | string;
    }

    Type declaration

    • title: string
    • url: null | string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/User.Statistics-1.html b/docs/interfaces/User.Statistics-1.html index 375e716..a9d6891 100644 --- a/docs/interfaces/User.Statistics-1.html +++ b/docs/interfaces/User.Statistics-1.html @@ -1,4 +1,4 @@ -Statistics | osu-api-v2-js

    Interface Statistics

    interface Statistics {
        count_100: number;
        count_300: number;
        count_50: number;
        count_miss: number;
        global_rank: null | number;
        global_rank_exp: null | number;
        grade_counts: {
            a: number;
            s: number;
            sh: number;
            ss: number;
            ssh: number;
        };
        hit_accuracy: number;
        is_ranked: boolean;
        level: {
            current: number;
            progress: number;
        };
        maximum_combo: number;
        play_count: number;
        play_time: null | number;
        pp: null | number;
        pp_exp: number;
        ranked_score: number;
        replays_watched_by_others: number;
        total_hits: number;
        total_score: number;
    }

    Hierarchy (view full)

    Properties

    count_100 +Statistics | osu-api-v2-js

    Interface Statistics

    interface Statistics {
        count_100: number;
        count_300: number;
        count_50: number;
        count_miss: number;
        global_rank: null | number;
        global_rank_exp: null | number;
        grade_counts: {
            a: number;
            s: number;
            sh: number;
            ss: number;
            ssh: number;
        };
        hit_accuracy: number;
        is_ranked: boolean;
        level: {
            current: number;
            progress: number;
        };
        maximum_combo: number;
        play_count: number;
        play_time: null | number;
        pp: null | number;
        pp_exp: number;
        ranked_score: number;
        replays_watched_by_others: number;
        total_hits: number;
        total_score: number;
    }

    Hierarchy (view full)

    Properties

    count_100: number
    count_300: number
    count_50: number
    count_miss: number
    global_rank: null | number
    global_rank_exp: null | number
    grade_counts: {
        a: number;
        s: number;
        sh: number;
        ss: number;
        ssh: number;
    }

    Type declaration

    • a: number
    • s: number
    • sh: number
    • ss: number
    • ssh: number
    hit_accuracy: number

    Accuracy in the normal format, where 96.56% would be 96.56

    -
    is_ranked: boolean

    Hasn't become inactive in the rankings

    -
    level: {
        current: number;
        progress: number;
    }

    Type declaration

    • current: number
    • progress: number
    maximum_combo: number
    play_count: number
    play_time: null | number
    pp: null | number
    pp_exp: number
    ranked_score: number
    replays_watched_by_others: number
    total_hits: number
    total_score: number

    Generated using TypeDoc

    \ No newline at end of file +

    Properties

    count_100: number
    count_300: number
    count_50: number
    count_miss: number
    global_rank: null | number
    global_rank_exp: null | number
    grade_counts: {
        a: number;
        s: number;
        sh: number;
        ss: number;
        ssh: number;
    }

    Type declaration

    • a: number
    • s: number
    • sh: number
    • ss: number
    • ssh: number
    hit_accuracy: number

    Accuracy in the normal format, where 96.56% would be 96.56

    +
    is_ranked: boolean

    Hasn't become inactive in the rankings

    +
    level: {
        current: number;
        progress: number;
    }

    Type declaration

    • current: number
    • progress: number
    maximum_combo: number
    play_count: number
    play_time: null | number
    pp: null | number
    pp_exp: number
    ranked_score: number
    replays_watched_by_others: number
    total_hits: number
    total_score: number

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/User.Statistics.WithCountryrank.html b/docs/interfaces/User.Statistics.WithCountryrank.html index d15939f..13ac6c6 100644 --- a/docs/interfaces/User.Statistics.WithCountryrank.html +++ b/docs/interfaces/User.Statistics.WithCountryrank.html @@ -1,4 +1,4 @@ -WithCountryrank | osu-api-v2-js
    interface WithCountryrank {
        count_100: number;
        count_300: number;
        count_50: number;
        count_miss: number;
        country_rank: number;
        global_rank: null | number;
        global_rank_exp: null | number;
        grade_counts: {
            a: number;
            s: number;
            sh: number;
            ss: number;
            ssh: number;
        };
        hit_accuracy: number;
        is_ranked: boolean;
        level: {
            current: number;
            progress: number;
        };
        maximum_combo: number;
        play_count: number;
        play_time: null | number;
        pp: null | number;
        pp_exp: number;
        ranked_score: number;
        replays_watched_by_others: number;
        total_hits: number;
        total_score: number;
    }

    Hierarchy (view full)

    Properties

    count_100 +WithCountryrank | osu-api-v2-js
    interface WithCountryrank {
        count_100: number;
        count_300: number;
        count_50: number;
        count_miss: number;
        country_rank: number;
        global_rank: null | number;
        global_rank_exp: null | number;
        grade_counts: {
            a: number;
            s: number;
            sh: number;
            ss: number;
            ssh: number;
        };
        hit_accuracy: number;
        is_ranked: boolean;
        level: {
            current: number;
            progress: number;
        };
        maximum_combo: number;
        play_count: number;
        play_time: null | number;
        pp: null | number;
        pp_exp: number;
        ranked_score: number;
        replays_watched_by_others: number;
        total_hits: number;
        total_score: number;
    }

    Hierarchy (view full)

    Properties

    count_100: number
    count_300: number
    count_50: number
    count_miss: number
    country_rank: number
    global_rank: null | number
    global_rank_exp: null | number
    grade_counts: {
        a: number;
        s: number;
        sh: number;
        ss: number;
        ssh: number;
    }

    Type declaration

    • a: number
    • s: number
    • sh: number
    • ss: number
    • ssh: number
    hit_accuracy: number

    Accuracy in the normal format, where 96.56% would be 96.56

    -
    is_ranked: boolean

    Hasn't become inactive in the rankings

    -
    level: {
        current: number;
        progress: number;
    }

    Type declaration

    • current: number
    • progress: number
    maximum_combo: number
    play_count: number
    play_time: null | number
    pp: null | number
    pp_exp: number
    ranked_score: number
    replays_watched_by_others: number
    total_hits: number
    total_score: number

    Generated using TypeDoc

    \ No newline at end of file +

    Properties

    count_100: number
    count_300: number
    count_50: number
    count_miss: number
    country_rank: number
    global_rank: null | number
    global_rank_exp: null | number
    grade_counts: {
        a: number;
        s: number;
        sh: number;
        ss: number;
        ssh: number;
    }

    Type declaration

    • a: number
    • s: number
    • sh: number
    • ss: number
    • ssh: number
    hit_accuracy: number

    Accuracy in the normal format, where 96.56% would be 96.56

    +
    is_ranked: boolean

    Hasn't become inactive in the rankings

    +
    level: {
        current: number;
        progress: number;
    }

    Type declaration

    • current: number
    • progress: number
    maximum_combo: number
    play_count: number
    play_time: null | number
    pp: null | number
    pp_exp: number
    ranked_score: number
    replays_watched_by_others: number
    total_hits: number
    total_score: number

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/User.Statistics.WithUser.html b/docs/interfaces/User.Statistics.WithUser.html index 2fa0a02..ed4448a 100644 --- a/docs/interfaces/User.Statistics.WithUser.html +++ b/docs/interfaces/User.Statistics.WithUser.html @@ -1,4 +1,4 @@ -WithUser | osu-api-v2-js
    interface WithUser {
        count_100: number;
        count_300: number;
        count_50: number;
        count_miss: number;
        global_rank: null | number;
        global_rank_exp: null | number;
        grade_counts: {
            a: number;
            s: number;
            sh: number;
            ss: number;
            ssh: number;
        };
        hit_accuracy: number;
        is_ranked: boolean;
        level: {
            current: number;
            progress: number;
        };
        maximum_combo: number;
        play_count: number;
        play_time: null | number;
        pp: null | number;
        pp_exp: number;
        ranked_score: number;
        replays_watched_by_others: number;
        total_hits: number;
        total_score: number;
        user: WithCountryCover;
    }

    Hierarchy (view full)

    Properties

    count_100 +WithUser | osu-api-v2-js
    interface WithUser {
        count_100: number;
        count_300: number;
        count_50: number;
        count_miss: number;
        global_rank: null | number;
        global_rank_exp: null | number;
        grade_counts: {
            a: number;
            s: number;
            sh: number;
            ss: number;
            ssh: number;
        };
        hit_accuracy: number;
        is_ranked: boolean;
        level: {
            current: number;
            progress: number;
        };
        maximum_combo: number;
        play_count: number;
        play_time: null | number;
        pp: null | number;
        pp_exp: number;
        ranked_score: number;
        replays_watched_by_others: number;
        total_hits: number;
        total_score: number;
        user: WithCountryCover;
    }

    Hierarchy (view full)

    Properties

    count_100: number
    count_300: number
    count_50: number
    count_miss: number
    global_rank: null | number
    global_rank_exp: null | number
    grade_counts: {
        a: number;
        s: number;
        sh: number;
        ss: number;
        ssh: number;
    }

    Type declaration

    • a: number
    • s: number
    • sh: number
    • ss: number
    • ssh: number
    hit_accuracy: number

    Accuracy in the normal format, where 96.56% would be 96.56

    -
    is_ranked: boolean

    Hasn't become inactive in the rankings

    -
    level: {
        current: number;
        progress: number;
    }

    Type declaration

    • current: number
    • progress: number
    maximum_combo: number
    play_count: number
    play_time: null | number
    pp: null | number
    pp_exp: number
    ranked_score: number
    replays_watched_by_others: number
    total_hits: number
    total_score: number

    Generated using TypeDoc

    \ No newline at end of file +

    Properties

    count_100: number
    count_300: number
    count_50: number
    count_miss: number
    global_rank: null | number
    global_rank_exp: null | number
    grade_counts: {
        a: number;
        s: number;
        sh: number;
        ss: number;
        ssh: number;
    }

    Type declaration

    • a: number
    • s: number
    • sh: number
    • ss: number
    • ssh: number
    hit_accuracy: number

    Accuracy in the normal format, where 96.56% would be 96.56

    +
    is_ranked: boolean

    Hasn't become inactive in the rankings

    +
    level: {
        current: number;
        progress: number;
    }

    Type declaration

    • current: number
    • progress: number
    maximum_combo: number
    play_count: number
    play_time: null | number
    pp: null | number
    pp_exp: number
    ranked_score: number
    replays_watched_by_others: number
    total_hits: number
    total_score: number

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/User.WithCountry.html b/docs/interfaces/User.WithCountry.html index d191bca..3be39d4 100644 --- a/docs/interfaces/User.WithCountry.html +++ b/docs/interfaces/User.WithCountry.html @@ -1,5 +1,5 @@ -WithCountry | osu-api-v2-js

    Interface WithCountry

    Obtainable From

    API.getMatch

    -
    interface WithCountry {
        avatar_url: string;
        country: {
            code: string;
            name: string;
        };
        country_code: string;
        default_group: string;
        id: number;
        is_active: boolean;
        is_bot: boolean;
        is_deleted: boolean;
        is_online: boolean;
        is_supporter: boolean;
        last_visit: null | Date;
        pm_friends_only: boolean;
        profile_colour: null | string;
        username: string;
    }

    Hierarchy (view full)

    Properties

    avatar_url +WithCountry | osu-api-v2-js

    Interface WithCountry

    Obtainable From

    API.getMatch

    +
    interface WithCountry {
        avatar_url: string;
        country: {
            code: string;
            name: string;
        };
        country_code: string;
        default_group: string;
        id: number;
        is_active: boolean;
        is_bot: boolean;
        is_deleted: boolean;
        is_online: boolean;
        is_supporter: boolean;
        last_visit: null | Date;
        pm_friends_only: boolean;
        profile_colour: null | string;
        username: string;
    }

    Hierarchy (view full)

    Properties

    avatar_url: string
    country: {
        code: string;
        name: string;
    }

    Type declaration

    • code: string
    • name: string
    country_code: string
    default_group: string
    id: number
    is_active: boolean
    is_bot: boolean
    is_deleted: boolean
    is_online: boolean
    is_supporter: boolean
    last_visit: null | Date
    pm_friends_only: boolean
    profile_colour: null | string
    username: string

    Generated using TypeDoc

    \ No newline at end of file +

    Properties

    avatar_url: string
    country: {
        code: string;
        name: string;
    }

    Type declaration

    • code: string
    • name: string
    country_code: string
    default_group: string
    id: number
    is_active: boolean
    is_bot: boolean
    is_deleted: boolean
    is_online: boolean
    is_supporter: boolean
    last_visit: null | Date
    pm_friends_only: boolean
    profile_colour: null | string
    username: string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/User.WithCountryCover.html b/docs/interfaces/User.WithCountryCover.html index 60c392c..d058ce8 100644 --- a/docs/interfaces/User.WithCountryCover.html +++ b/docs/interfaces/User.WithCountryCover.html @@ -1,5 +1,5 @@ -WithCountryCover | osu-api-v2-js

    Interface WithCountryCover

    Obtainable From

    API.getMatch

    -
    interface WithCountryCover {
        avatar_url: string;
        country: {
            code: string;
            name: string;
        };
        country_code: string;
        cover: {
            custom_url: null | string;
            id: null | number;
            url: string;
        };
        default_group: string;
        id: number;
        is_active: boolean;
        is_bot: boolean;
        is_deleted: boolean;
        is_online: boolean;
        is_supporter: boolean;
        last_visit: null | Date;
        pm_friends_only: boolean;
        profile_colour: null | string;
        username: string;
    }

    Hierarchy (view full)

    Properties

    avatar_url +WithCountryCover | osu-api-v2-js

    Interface WithCountryCover

    Obtainable From

    API.getMatch

    +
    interface WithCountryCover {
        avatar_url: string;
        country: {
            code: string;
            name: string;
        };
        country_code: string;
        cover: {
            custom_url: null | string;
            id: null | number;
            url: string;
        };
        default_group: string;
        id: number;
        is_active: boolean;
        is_bot: boolean;
        is_deleted: boolean;
        is_online: boolean;
        is_supporter: boolean;
        last_visit: null | Date;
        pm_friends_only: boolean;
        profile_colour: null | string;
        username: string;
    }

    Hierarchy (view full)

    Properties

    avatar_url: string
    country: {
        code: string;
        name: string;
    }

    Type declaration

    • code: string
    • name: string
    country_code: string
    cover: {
        custom_url: null | string;
        id: null | number;
        url: string;
    }

    Type declaration

    • custom_url: null | string
    • id: null | number
    • url: string
    default_group: string
    id: number
    is_active: boolean
    is_bot: boolean
    is_deleted: boolean
    is_online: boolean
    is_supporter: boolean
    last_visit: null | Date
    pm_friends_only: boolean
    profile_colour: null | string
    username: string

    Generated using TypeDoc

    \ No newline at end of file +

    Properties

    avatar_url: string
    country: {
        code: string;
        name: string;
    }

    Type declaration

    • code: string
    • name: string
    country_code: string
    cover: {
        custom_url: null | string;
        id: null | number;
        url: string;
    }

    Type declaration

    • custom_url: null | string
    • id: null | number
    • url: string
    default_group: string
    id: number
    is_active: boolean
    is_bot: boolean
    is_deleted: boolean
    is_online: boolean
    is_supporter: boolean
    last_visit: null | Date
    pm_friends_only: boolean
    profile_colour: null | string
    username: string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/User.WithCountryCoverGroupsStatisticsSupport.html b/docs/interfaces/User.WithCountryCoverGroupsStatisticsSupport.html index bbd8958..05811b9 100644 --- a/docs/interfaces/User.WithCountryCoverGroupsStatisticsSupport.html +++ b/docs/interfaces/User.WithCountryCoverGroupsStatisticsSupport.html @@ -1,5 +1,5 @@ -WithCountryCoverGroupsStatisticsSupport | osu-api-v2-js

    Interface WithCountryCoverGroupsStatisticsSupport

    Obtainable From

    API.getFriends

    -
    interface WithCountryCoverGroupsStatisticsSupport {
        avatar_url: string;
        country: {
            code: string;
            name: string;
        };
        country_code: string;
        cover: {
            custom_url: null | string;
            id: null | number;
            url: string;
        };
        default_group: string;
        groups: {
            colour: null | string;
            has_listing: boolean;
            has_playmodes: boolean;
            id: number;
            identifier: string;
            is_probationary: boolean;
            name: string;
            playmodes: null | ("osu" | "taiko" | "fruits" | "mania")[];
            short_name: string;
        }[];
        id: number;
        is_active: boolean;
        is_bot: boolean;
        is_deleted: boolean;
        is_online: boolean;
        is_supporter: boolean;
        last_visit: null | Date;
        pm_friends_only: boolean;
        profile_colour: null | string;
        statistics: User.Statistics;
        support_level: number;
        username: string;
    }

    Hierarchy (view full)

    Properties

    avatar_url +WithCountryCoverGroupsStatisticsSupport | osu-api-v2-js

    Interface WithCountryCoverGroupsStatisticsSupport

    Obtainable From

    API.getFriends

    +
    interface WithCountryCoverGroupsStatisticsSupport {
        avatar_url: string;
        country: {
            code: string;
            name: string;
        };
        country_code: string;
        cover: {
            custom_url: null | string;
            id: null | number;
            url: string;
        };
        default_group: string;
        groups: {
            colour: null | string;
            has_listing: boolean;
            has_playmodes: boolean;
            id: number;
            identifier: string;
            is_probationary: boolean;
            name: string;
            playmodes: null | ("osu" | "taiko" | "fruits" | "mania")[];
            short_name: string;
        }[];
        id: number;
        is_active: boolean;
        is_bot: boolean;
        is_deleted: boolean;
        is_online: boolean;
        is_supporter: boolean;
        last_visit: null | Date;
        pm_friends_only: boolean;
        profile_colour: null | string;
        statistics: User.Statistics;
        support_level: number;
        username: string;
    }

    Hierarchy (view full)

    Properties

    avatar_url: string
    country: {
        code: string;
        name: string;
    }

    Type declaration

    • code: string
    • name: string
    country_code: string
    cover: {
        custom_url: null | string;
        id: null | number;
        url: string;
    }

    Type declaration

    • custom_url: null | string
    • id: null | number
    • url: string
    default_group: string
    groups: {
        colour: null | string;
        has_listing: boolean;
        has_playmodes: boolean;
        id: number;
        identifier: string;
        is_probationary: boolean;
        name: string;
        playmodes: null | ("osu" | "taiko" | "fruits" | "mania")[];
        short_name: string;
    }[]

    Type declaration

    • colour: null | string
    • has_listing: boolean
    • has_playmodes: boolean
    • id: number
    • identifier: string
    • is_probationary: boolean
    • name: string
    • playmodes: null | ("osu" | "taiko" | "fruits" | "mania")[]
    • short_name: string
    id: number
    is_active: boolean
    is_bot: boolean
    is_deleted: boolean
    is_online: boolean
    is_supporter: boolean
    last_visit: null | Date
    pm_friends_only: boolean
    profile_colour: null | string
    statistics: User.Statistics
    support_level: number
    username: string

    Generated using TypeDoc

    \ No newline at end of file +

    Properties

    avatar_url: string
    country: {
        code: string;
        name: string;
    }

    Type declaration

    • code: string
    • name: string
    country_code: string
    cover: {
        custom_url: null | string;
        id: null | number;
        url: string;
    }

    Type declaration

    • custom_url: null | string
    • id: null | number
    • url: string
    default_group: string
    groups: {
        colour: null | string;
        has_listing: boolean;
        has_playmodes: boolean;
        id: number;
        identifier: string;
        is_probationary: boolean;
        name: string;
        playmodes: null | ("osu" | "taiko" | "fruits" | "mania")[];
        short_name: string;
    }[]

    Type declaration

    • colour: null | string
    • has_listing: boolean
    • has_playmodes: boolean
    • id: number
    • identifier: string
    • is_probationary: boolean
    • name: string
    • playmodes: null | ("osu" | "taiko" | "fruits" | "mania")[]
    • short_name: string
    id: number
    is_active: boolean
    is_bot: boolean
    is_deleted: boolean
    is_online: boolean
    is_supporter: boolean
    last_visit: null | Date
    pm_friends_only: boolean
    profile_colour: null | string
    statistics: User.Statistics
    support_level: number
    username: string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/User.WithCountryCoverGroupsStatisticsrulesets.html b/docs/interfaces/User.WithCountryCoverGroupsStatisticsrulesets.html index 80768ea..85d5644 100644 --- a/docs/interfaces/User.WithCountryCoverGroupsStatisticsrulesets.html +++ b/docs/interfaces/User.WithCountryCoverGroupsStatisticsrulesets.html @@ -1,5 +1,5 @@ -WithCountryCoverGroupsStatisticsrulesets | osu-api-v2-js

    Interface WithCountryCoverGroupsStatisticsrulesets

    Obtainable From

    API.getUsers

    -
    interface WithCountryCoverGroupsStatisticsrulesets {
        avatar_url: string;
        country: {
            code: string;
            name: string;
        };
        country_code: string;
        cover: {
            custom_url: null | string;
            id: null | number;
            url: string;
        };
        default_group: string;
        groups: {
            colour: null | string;
            has_listing: boolean;
            has_playmodes: boolean;
            id: number;
            identifier: string;
            is_probationary: boolean;
            name: string;
            playmodes: null | ("osu" | "taiko" | "fruits" | "mania")[];
            short_name: string;
        }[];
        id: number;
        is_active: boolean;
        is_bot: boolean;
        is_deleted: boolean;
        is_online: boolean;
        is_supporter: boolean;
        last_visit: null | Date;
        pm_friends_only: boolean;
        profile_colour: null | string;
        statistics_rulesets: {
            fruits?: User.Statistics;
            mania?: User.Statistics;
            osu?: User.Statistics;
            taiko?: User.Statistics;
        };
        username: string;
    }

    Hierarchy (view full)

    Properties

    avatar_url +WithCountryCoverGroupsStatisticsrulesets | osu-api-v2-js

    Interface WithCountryCoverGroupsStatisticsrulesets

    Obtainable From

    API.getUsers

    +
    interface WithCountryCoverGroupsStatisticsrulesets {
        avatar_url: string;
        country: {
            code: string;
            name: string;
        };
        country_code: string;
        cover: {
            custom_url: null | string;
            id: null | number;
            url: string;
        };
        default_group: string;
        groups: {
            colour: null | string;
            has_listing: boolean;
            has_playmodes: boolean;
            id: number;
            identifier: string;
            is_probationary: boolean;
            name: string;
            playmodes: null | ("osu" | "taiko" | "fruits" | "mania")[];
            short_name: string;
        }[];
        id: number;
        is_active: boolean;
        is_bot: boolean;
        is_deleted: boolean;
        is_online: boolean;
        is_supporter: boolean;
        last_visit: null | Date;
        pm_friends_only: boolean;
        profile_colour: null | string;
        statistics_rulesets: {
            fruits?: User.Statistics;
            mania?: User.Statistics;
            osu?: User.Statistics;
            taiko?: User.Statistics;
        };
        username: string;
    }

    Hierarchy (view full)

    Properties

    avatar_url: string
    country: {
        code: string;
        name: string;
    }

    Type declaration

    • code: string
    • name: string
    country_code: string
    cover: {
        custom_url: null | string;
        id: null | number;
        url: string;
    }

    Type declaration

    • custom_url: null | string
    • id: null | number
    • url: string
    default_group: string
    groups: {
        colour: null | string;
        has_listing: boolean;
        has_playmodes: boolean;
        id: number;
        identifier: string;
        is_probationary: boolean;
        name: string;
        playmodes: null | ("osu" | "taiko" | "fruits" | "mania")[];
        short_name: string;
    }[]

    Type declaration

    • colour: null | string
    • has_listing: boolean
    • has_playmodes: boolean
    • id: number
    • identifier: string
    • is_probationary: boolean
    • name: string
    • playmodes: null | ("osu" | "taiko" | "fruits" | "mania")[]
    • short_name: string
    id: number
    is_active: boolean
    is_bot: boolean
    is_deleted: boolean
    is_online: boolean
    is_supporter: boolean
    last_visit: null | Date
    pm_friends_only: boolean
    profile_colour: null | string
    statistics_rulesets: {
        fruits?: User.Statistics;
        mania?: User.Statistics;
        osu?: User.Statistics;
        taiko?: User.Statistics;
    }

    Type declaration

    username: string

    Generated using TypeDoc

    \ No newline at end of file +

    Properties

    avatar_url: string
    country: {
        code: string;
        name: string;
    }

    Type declaration

    • code: string
    • name: string
    country_code: string
    cover: {
        custom_url: null | string;
        id: null | number;
        url: string;
    }

    Type declaration

    • custom_url: null | string
    • id: null | number
    • url: string
    default_group: string
    groups: {
        colour: null | string;
        has_listing: boolean;
        has_playmodes: boolean;
        id: number;
        identifier: string;
        is_probationary: boolean;
        name: string;
        playmodes: null | ("osu" | "taiko" | "fruits" | "mania")[];
        short_name: string;
    }[]

    Type declaration

    • colour: null | string
    • has_listing: boolean
    • has_playmodes: boolean
    • id: number
    • identifier: string
    • is_probationary: boolean
    • name: string
    • playmodes: null | ("osu" | "taiko" | "fruits" | "mania")[]
    • short_name: string
    id: number
    is_active: boolean
    is_bot: boolean
    is_deleted: boolean
    is_online: boolean
    is_supporter: boolean
    last_visit: null | Date
    pm_friends_only: boolean
    profile_colour: null | string
    statistics_rulesets: {
        fruits?: User.Statistics;
        mania?: User.Statistics;
        osu?: User.Statistics;
        taiko?: User.Statistics;
    }

    Type declaration

    username: string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/User.WithGroups.html b/docs/interfaces/User.WithGroups.html index 06403e3..5303c51 100644 --- a/docs/interfaces/User.WithGroups.html +++ b/docs/interfaces/User.WithGroups.html @@ -1,4 +1,4 @@ -WithGroups | osu-api-v2-js

    Interface WithGroups

    interface WithGroups {
        avatar_url: string;
        country_code: string;
        default_group: string;
        groups: {
            colour: null | string;
            has_listing: boolean;
            has_playmodes: boolean;
            id: number;
            identifier: string;
            is_probationary: boolean;
            name: string;
            playmodes: null | ("osu" | "taiko" | "fruits" | "mania")[];
            short_name: string;
        }[];
        id: number;
        is_active: boolean;
        is_bot: boolean;
        is_deleted: boolean;
        is_online: boolean;
        is_supporter: boolean;
        last_visit: null | Date;
        pm_friends_only: boolean;
        profile_colour: null | string;
        username: string;
    }

    Hierarchy (view full)

    Properties

    avatar_url +WithGroups | osu-api-v2-js

    Interface WithGroups

    interface WithGroups {
        avatar_url: string;
        country_code: string;
        default_group: string;
        groups: {
            colour: null | string;
            has_listing: boolean;
            has_playmodes: boolean;
            id: number;
            identifier: string;
            is_probationary: boolean;
            name: string;
            playmodes: null | ("osu" | "taiko" | "fruits" | "mania")[];
            short_name: string;
        }[];
        id: number;
        is_active: boolean;
        is_bot: boolean;
        is_deleted: boolean;
        is_online: boolean;
        is_supporter: boolean;
        last_visit: null | Date;
        pm_friends_only: boolean;
        profile_colour: null | string;
        username: string;
    }

    Hierarchy (view full)

    Properties

    avatar_url: string
    country_code: string
    default_group: string
    groups: {
        colour: null | string;
        has_listing: boolean;
        has_playmodes: boolean;
        id: number;
        identifier: string;
        is_probationary: boolean;
        name: string;
        playmodes: null | ("osu" | "taiko" | "fruits" | "mania")[];
        short_name: string;
    }[]

    Type declaration

    • colour: null | string
    • has_listing: boolean
    • has_playmodes: boolean
    • id: number
    • identifier: string
    • is_probationary: boolean
    • name: string
    • playmodes: null | ("osu" | "taiko" | "fruits" | "mania")[]
    • short_name: string
    id: number
    is_active: boolean
    is_bot: boolean
    is_deleted: boolean
    is_online: boolean
    is_supporter: boolean
    last_visit: null | Date
    pm_friends_only: boolean
    profile_colour: null | string
    username: string

    Generated using TypeDoc

    \ No newline at end of file +

    Properties

    avatar_url: string
    country_code: string
    default_group: string
    groups: {
        colour: null | string;
        has_listing: boolean;
        has_playmodes: boolean;
        id: number;
        identifier: string;
        is_probationary: boolean;
        name: string;
        playmodes: null | ("osu" | "taiko" | "fruits" | "mania")[];
        short_name: string;
    }[]

    Type declaration

    • colour: null | string
    • has_listing: boolean
    • has_playmodes: boolean
    • id: number
    • identifier: string
    • is_probationary: boolean
    • name: string
    • playmodes: null | ("osu" | "taiko" | "fruits" | "mania")[]
    • short_name: string
    id: number
    is_active: boolean
    is_bot: boolean
    is_deleted: boolean
    is_online: boolean
    is_supporter: boolean
    last_visit: null | Date
    pm_friends_only: boolean
    profile_colour: null | string
    username: string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/User.WithKudosu.html b/docs/interfaces/User.WithKudosu.html index 185b165..7244091 100644 --- a/docs/interfaces/User.WithKudosu.html +++ b/docs/interfaces/User.WithKudosu.html @@ -1,4 +1,4 @@ -WithKudosu | osu-api-v2-js

    Interface WithKudosu

    interface WithKudosu {
        avatar_url: string;
        country_code: string;
        default_group: string;
        id: number;
        is_active: boolean;
        is_bot: boolean;
        is_deleted: boolean;
        is_online: boolean;
        is_supporter: boolean;
        kudosu: {
            available: number;
            total: number;
        };
        last_visit: null | Date;
        pm_friends_only: boolean;
        profile_colour: null | string;
        username: string;
    }

    Hierarchy (view full)

    Properties

    avatar_url +WithKudosu | osu-api-v2-js

    Interface WithKudosu

    interface WithKudosu {
        avatar_url: string;
        country_code: string;
        default_group: string;
        id: number;
        is_active: boolean;
        is_bot: boolean;
        is_deleted: boolean;
        is_online: boolean;
        is_supporter: boolean;
        kudosu: {
            available: number;
            total: number;
        };
        last_visit: null | Date;
        pm_friends_only: boolean;
        profile_colour: null | string;
        username: string;
    }

    Hierarchy (view full)

    Properties

    avatar_url: string
    country_code: string
    default_group: string
    id: number
    is_active: boolean
    is_bot: boolean
    is_deleted: boolean
    is_online: boolean
    is_supporter: boolean
    kudosu: {
        available: number;
        total: number;
    }

    Type declaration

    • available: number
    • total: number
    last_visit: null | Date
    pm_friends_only: boolean
    profile_colour: null | string
    username: string

    Generated using TypeDoc

    \ No newline at end of file +

    Properties

    avatar_url: string
    country_code: string
    default_group: string
    id: number
    is_active: boolean
    is_bot: boolean
    is_deleted: boolean
    is_online: boolean
    is_supporter: boolean
    kudosu: {
        available: number;
        total: number;
    }

    Type declaration

    • available: number
    • total: number
    last_visit: null | Date
    pm_friends_only: boolean
    profile_colour: null | string
    username: string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/WebSocket.Event.ChatChannelJoin.html b/docs/interfaces/WebSocket.Event.ChatChannelJoin.html index 7d5a6eb..a79a63e 100644 --- a/docs/interfaces/WebSocket.Event.ChatChannelJoin.html +++ b/docs/interfaces/WebSocket.Event.ChatChannelJoin.html @@ -1,3 +1,3 @@ -ChatChannelJoin | osu-api-v2-js
    interface ChatChannelJoin {
        data: WithDetails;
        event: "chat.channel.join";
    }

    Properties

    data +ChatChannelJoin | osu-api-v2-js
    interface ChatChannelJoin {
        data: WithDetails;
        event: "chat.channel.join";
    }

    Properties

    Properties

    event: "chat.channel.join"

    Generated using TypeDoc

    \ No newline at end of file +

    Properties

    event: "chat.channel.join"

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/WebSocket.Event.ChatChannelLeave.html b/docs/interfaces/WebSocket.Event.ChatChannelLeave.html index 5e7dd37..b8e38a7 100644 --- a/docs/interfaces/WebSocket.Event.ChatChannelLeave.html +++ b/docs/interfaces/WebSocket.Event.ChatChannelLeave.html @@ -1,3 +1,3 @@ -ChatChannelLeave | osu-api-v2-js
    interface ChatChannelLeave {
        data: WithDetails;
        event: "chat.channel.part";
    }

    Properties

    data +ChatChannelLeave | osu-api-v2-js
    interface ChatChannelLeave {
        data: WithDetails;
        event: "chat.channel.part";
    }

    Properties

    Properties

    event: "chat.channel.part"

    Generated using TypeDoc

    \ No newline at end of file +

    Properties

    event: "chat.channel.part"

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/WebSocket.Event.ChatMessageNew.html b/docs/interfaces/WebSocket.Event.ChatMessageNew.html index 65d9d26..bd1f050 100644 --- a/docs/interfaces/WebSocket.Event.ChatMessageNew.html +++ b/docs/interfaces/WebSocket.Event.ChatMessageNew.html @@ -1,3 +1,3 @@ -ChatMessageNew | osu-api-v2-js
    interface ChatMessageNew {
        data: {
            messages: Message[];
            users: User[];
        };
        event: "chat.message.new";
    }

    Properties

    data +ChatMessageNew | osu-api-v2-js
    interface ChatMessageNew {
        data: {
            messages: Message[];
            users: User[];
        };
        event: "chat.message.new";
    }

    Properties

    Properties

    data: {
        messages: Message[];
        users: User[];
    }

    Type declaration

    event: "chat.message.new"

    Generated using TypeDoc

    \ No newline at end of file +

    Properties

    data: {
        messages: Message[];
        users: User[];
    }

    Type declaration

    event: "chat.message.new"

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/WikiPage.html b/docs/interfaces/WikiPage-1.html similarity index 70% rename from docs/interfaces/WikiPage.html rename to docs/interfaces/WikiPage-1.html index e255019..13fbfb3 100644 --- a/docs/interfaces/WikiPage.html +++ b/docs/interfaces/WikiPage-1.html @@ -1,14 +1,14 @@ -WikiPage | osu-api-v2-js

    Interface WikiPage

    Expected from api.getWikiPage(), SearchResultWiki

    -
    interface WikiPage {
        available_locales: string[];
        layout: string;
        locale: string;
        markdown: string;
        path: string;
        subtitle: null | string;
        tags: string[];
        title: string;
    }

    Properties

    available_locales: string[]
    layout: string
    locale: string

    BCP 47 language (sub)tag, lowercase (for example, en for english)

    -
    markdown: string
    path: string

    It's what should be after https://osu.ppy.sh/wiki/{locale}/

    -
    subtitle: null | string

    Think of it as the title of the parent wiki page

    +WikiPage | osu-api-v2-js

    Interface WikiPage

    Obtainable From

    API.getWikiPage

    +
    interface WikiPage {
        available_locales: string[];
        layout: string;
        locale: string;
        markdown: string;
        path: string;
        subtitle: null | string;
        tags: string[];
        title: string;
    }

    Properties

    available_locales: string[]
    layout: string
    locale: string

    Lowercase BCP 47 language (sub)tag (for example, en for english)

    +
    markdown: string
    path: string

    It's what should be after https://osu.ppy.sh/wiki/{locale}/

    +
    subtitle: null | string

    Think of it as the title of the parent wiki page

    Remarks

    If the title in the path (assuming it's in it (very unlikely if locale is not en)) is after a slash (/), this is what is before the slash

    -
    tags: string[]
    title: string

    Generated using TypeDoc

    \ No newline at end of file +
    tags: string[]
    title: string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/modules.html b/docs/modules.html index 6f42091..2c048b9 100644 --- a/docs/modules.html +++ b/docs/modules.html @@ -2,34 +2,30 @@ Beatmapset Changelog Chat -CommentBundle +Comment Event Forum +Home Multiplayer -News -Rankings +NewsPost +Ranking Score -SearchResult Spotlight User WebSocket -

    Enumerations

    Enumerations

    Classes

    Interfaces

    Type Aliases

    Functions

    generateAuthorizationURL diff --git a/docs/modules/Beatmap.DifficultyAttributes.html b/docs/modules/Beatmap.DifficultyAttributes.html index 3e004ff..61d9f86 100644 --- a/docs/modules/Beatmap.DifficultyAttributes.html +++ b/docs/modules/Beatmap.DifficultyAttributes.html @@ -1,6 +1,11 @@ -DifficultyAttributes | osu-api-v2-js

    Namespace DifficultyAttributes

    Index

    Interfaces

    Fruits +DifficultyAttributes | osu-api-v2-js

    Namespace DifficultyAttributes

    Index

    Interfaces

    Type Aliases

    Any +

    Functions

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/modules/Beatmap.Extended.html b/docs/modules/Beatmap.Extended.html index 0047714..d0bf541 100644 --- a/docs/modules/Beatmap.Extended.html +++ b/docs/modules/Beatmap.Extended.html @@ -1,5 +1,5 @@ -Extended | osu-api-v2-js

    Index

    Interfaces

    WithFailtimes -WithFailtimesBeatmapsetextended +Extended | osu-api-v2-js

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/modules/Beatmap.Pack.html b/docs/modules/Beatmap.Pack.html new file mode 100644 index 0000000..09d4259 --- /dev/null +++ b/docs/modules/Beatmap.Pack.html @@ -0,0 +1,4 @@ +Pack | osu-api-v2-js

    Index

    Interfaces

    Functions

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/modules/Beatmap.UserScore.html b/docs/modules/Beatmap.UserScore.html new file mode 100644 index 0000000..6185746 --- /dev/null +++ b/docs/modules/Beatmap.UserScore.html @@ -0,0 +1,3 @@ +UserScore | osu-api-v2-js

    Index

    Functions

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/modules/Beatmap.html b/docs/modules/Beatmap.html index 16ac6bf..6042ac3 100644 --- a/docs/modules/Beatmap.html +++ b/docs/modules/Beatmap.html @@ -1,9 +1,19 @@ -Beatmap | osu-api-v2-js

    Namespace Beatmap

    Index

    Namespaces

    DifficultyAttributes +Beatmap | osu-api-v2-js

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/modules/Beatmapset.Discussion.Post.html b/docs/modules/Beatmapset.Discussion.Post.html new file mode 100644 index 0000000..db4683d --- /dev/null +++ b/docs/modules/Beatmapset.Discussion.Post.html @@ -0,0 +1,2 @@ +Post | osu-api-v2-js

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/modules/Beatmapset.Discussion.Vote.html b/docs/modules/Beatmapset.Discussion.Vote.html new file mode 100644 index 0000000..2e925e3 --- /dev/null +++ b/docs/modules/Beatmapset.Discussion.Vote.html @@ -0,0 +1,2 @@ +Vote | osu-api-v2-js

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/modules/Beatmapset.Discussion.html b/docs/modules/Beatmapset.Discussion.html index 36084c2..e46a2a0 100644 --- a/docs/modules/Beatmapset.Discussion.html +++ b/docs/modules/Beatmapset.Discussion.html @@ -1,4 +1,8 @@ -Discussion | osu-api-v2-js

    Index

    Interfaces

    Post -Vote +Discussion | osu-api-v2-js

    Index

    Namespaces

    Interfaces

    Functions

    Parameter Object Interfaces

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/modules/Beatmapset.Event.html b/docs/modules/Beatmapset.Event.html new file mode 100644 index 0000000..ca903ca --- /dev/null +++ b/docs/modules/Beatmapset.Event.html @@ -0,0 +1,2 @@ +Event | osu-api-v2-js

    Index

    Functions

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/modules/Beatmapset.Extended.html b/docs/modules/Beatmapset.Extended.html index e5bdfa2..b745b64 100644 --- a/docs/modules/Beatmapset.Extended.html +++ b/docs/modules/Beatmapset.Extended.html @@ -1,4 +1,4 @@ -Extended | osu-api-v2-js

    Index

    Interfaces

    Plus -WithBeatmapExtended -WithBeatmapExtendedPacktags +Extended | osu-api-v2-js

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/modules/Beatmapset.html b/docs/modules/Beatmapset.html index b38eef7..a2324d1 100644 --- a/docs/modules/Beatmapset.html +++ b/docs/modules/Beatmapset.html @@ -1,8 +1,15 @@ -Beatmapset | osu-api-v2-js

    Namespace Beatmapset

    Index

    Namespaces

    Discussion +Beatmapset | osu-api-v2-js

    Namespace Beatmapset

    Index

    Namespaces

    Enumerations

    Interfaces

    Functions

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/modules/Changelog.Build.html b/docs/modules/Changelog.Build.html index 277b820..1d868a1 100644 --- a/docs/modules/Changelog.Build.html +++ b/docs/modules/Changelog.Build.html @@ -1,4 +1,7 @@ -Build | osu-api-v2-js

    Index

    Interfaces

    WithChangelogentriesVersions +Build | osu-api-v2-js

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/modules/Changelog.UpdateStream.html b/docs/modules/Changelog.UpdateStream.html index 6aa91cf..586fcd8 100644 --- a/docs/modules/Changelog.UpdateStream.html +++ b/docs/modules/Changelog.UpdateStream.html @@ -1,2 +1,3 @@ -UpdateStream | osu-api-v2-js

    Index

    Interfaces

    WithLatestbuildUsercount +UpdateStream | osu-api-v2-js

    Index

    Interfaces

    Functions

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/modules/Changelog.html b/docs/modules/Changelog.html index 233f8fc..f71542e 100644 --- a/docs/modules/Changelog.html +++ b/docs/modules/Changelog.html @@ -1,4 +1,4 @@ -Changelog | osu-api-v2-js

    Namespace Changelog

    Index

    Namespaces

    Build +Changelog | osu-api-v2-js

    Namespace Changelog

    Index

    Namespaces

    Interfaces

    Build UpdateStream diff --git a/docs/modules/Chat.Channel.html b/docs/modules/Chat.Channel.html index 1b84eb0..5f15ad4 100644 --- a/docs/modules/Chat.Channel.html +++ b/docs/modules/Chat.Channel.html @@ -1,2 +1,9 @@ -Channel | osu-api-v2-js

    Namespace Channel

    Index

    Interfaces

    WithDetails +Channel | osu-api-v2-js

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/modules/Chat.Message.html b/docs/modules/Chat.Message.html new file mode 100644 index 0000000..716e6af --- /dev/null +++ b/docs/modules/Chat.Message.html @@ -0,0 +1,4 @@ +Message | osu-api-v2-js

    Namespace Message

    Index

    Functions

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/modules/Chat.html b/docs/modules/Chat.html index 628d1c1..dcfaf33 100644 --- a/docs/modules/Chat.html +++ b/docs/modules/Chat.html @@ -1,5 +1,7 @@ -Chat | osu-api-v2-js

    Namespace Chat

    Index

    Namespaces

    Channel +Chat | osu-api-v2-js

    Namespace Chat

    Index

    Namespaces

    Interfaces

    Functions

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/modules/Comment.Bundle.html b/docs/modules/Comment.Bundle.html new file mode 100644 index 0000000..007a22c --- /dev/null +++ b/docs/modules/Comment.Bundle.html @@ -0,0 +1,2 @@ +Bundle | osu-api-v2-js

    Index

    Interfaces

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/modules/Comment.html b/docs/modules/Comment.html new file mode 100644 index 0000000..178b0ed --- /dev/null +++ b/docs/modules/Comment.html @@ -0,0 +1,5 @@ +Comment | osu-api-v2-js

    Namespace Comment

    Index

    Namespaces

    Interfaces

    Functions

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/modules/Event.SharedProperties.html b/docs/modules/Event.SharedProperties.html index 1f1289e..10f12fd 100644 --- a/docs/modules/Event.SharedProperties.html +++ b/docs/modules/Event.SharedProperties.html @@ -1,5 +1,5 @@ SharedProperties | osu-api-v2-js

    Namespace SharedProperties

    Those are used as properties by Events, they're not events themselves

    -

    Index

    Interfaces

    Index

    Interfaces

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/modules/Event.html b/docs/modules/Event.html index b7e0f02..3a2e353 100644 --- a/docs/modules/Event.html +++ b/docs/modules/Event.html @@ -1,4 +1,4 @@ -Event | osu-api-v2-js

    Namespace Event

    Index

    Namespaces

    SharedProperties +Event | osu-api-v2-js

    Namespace Event

    Index

    Namespaces

    Interfaces

    Type Aliases

    Functions

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/modules/CommentBundle.html b/docs/modules/Forum.Post.html similarity index 54% rename from docs/modules/CommentBundle.html rename to docs/modules/Forum.Post.html index 4ff2470..83c0219 100644 --- a/docs/modules/CommentBundle.html +++ b/docs/modules/Forum.Post.html @@ -1,2 +1,2 @@ -CommentBundle | osu-api-v2-js

    Namespace CommentBundle

    Index

    Interfaces

    WithTotalToplevelcount +Post | osu-api-v2-js

    Index

    Functions

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/modules/Forum.Topic.html b/docs/modules/Forum.Topic.html new file mode 100644 index 0000000..ee85169 --- /dev/null +++ b/docs/modules/Forum.Topic.html @@ -0,0 +1,4 @@ +Topic | osu-api-v2-js

    Index

    Functions

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/modules/Forum.html b/docs/modules/Forum.html index 5fafbdc..fa53b8f 100644 --- a/docs/modules/Forum.html +++ b/docs/modules/Forum.html @@ -1,3 +1,6 @@ -Forum | osu-api-v2-js

    Namespace Forum

    Index

    Interfaces

    Post -Topic +Forum | osu-api-v2-js

    Namespace Forum

    Index

    Namespaces

    Interfaces

    Functions

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/modules/Home.Search.html b/docs/modules/Home.Search.html new file mode 100644 index 0000000..56ba174 --- /dev/null +++ b/docs/modules/Home.Search.html @@ -0,0 +1,3 @@ +Search | osu-api-v2-js

    Namespace Search

    Index

    Functions

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/modules/News.html b/docs/modules/Home.html similarity index 87% rename from docs/modules/News.html rename to docs/modules/Home.html index f0e843e..2981ea2 100644 --- a/docs/modules/News.html +++ b/docs/modules/Home.html @@ -1,3 +1,2 @@ -News | osu-api-v2-js

    Namespace News

    Index

    Interfaces

    Post -PostWithContentNavigation +Home | osu-api-v2-js

    Namespace Home

    Index

    Namespaces

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/modules/Multiplayer.Match.html b/docs/modules/Multiplayer.Match.html new file mode 100644 index 0000000..fff8074 --- /dev/null +++ b/docs/modules/Multiplayer.Match.html @@ -0,0 +1,4 @@ +Match | osu-api-v2-js

    Index

    Interfaces

    Functions

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/modules/SearchResult.html b/docs/modules/Multiplayer.Room.PlaylistItem.html similarity index 78% rename from docs/modules/SearchResult.html rename to docs/modules/Multiplayer.Room.PlaylistItem.html index 0c3471b..72f29d1 100644 --- a/docs/modules/SearchResult.html +++ b/docs/modules/Multiplayer.Room.PlaylistItem.html @@ -1,3 +1,3 @@ -SearchResult | osu-api-v2-js

    Namespace SearchResult

    Index

    Interfaces

    User -Wiki +PlaylistItem | osu-api-v2-js

    Index

    Interfaces

    Functions

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/modules/Multiplayer.Room.html b/docs/modules/Multiplayer.Room.html new file mode 100644 index 0000000..37d88a7 --- /dev/null +++ b/docs/modules/Multiplayer.Room.html @@ -0,0 +1,7 @@ +Room | osu-api-v2-js

    Index

    Namespaces

    Interfaces

    Functions

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/modules/Multiplayer.html b/docs/modules/Multiplayer.html index 0f8b146..3101664 100644 --- a/docs/modules/Multiplayer.html +++ b/docs/modules/Multiplayer.html @@ -1,7 +1,5 @@ -Multiplayer | osu-api-v2-js

    Namespace Multiplayer

    Index

    Interfaces

    Leader -Match -MatchInfo -PlaylistItem -Room -Scores +Multiplayer | osu-api-v2-js

    Namespace Multiplayer

    Index

    Namespaces

    Interfaces

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/modules/NewsPost.html b/docs/modules/NewsPost.html new file mode 100644 index 0000000..7ce3759 --- /dev/null +++ b/docs/modules/NewsPost.html @@ -0,0 +1,4 @@ +NewsPost | osu-api-v2-js

    Namespace NewsPost

    Index

    Interfaces

    Functions

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/modules/Ranking.html b/docs/modules/Ranking.html new file mode 100644 index 0000000..4eff3c4 --- /dev/null +++ b/docs/modules/Ranking.html @@ -0,0 +1,8 @@ +Ranking | osu-api-v2-js

    Namespace Ranking

    Index

    Interfaces

    Functions

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/modules/Score.html b/docs/modules/Score.html index 38ec5cc..9917ad2 100644 --- a/docs/modules/Score.html +++ b/docs/modules/Score.html @@ -1,4 +1,4 @@ -Score | osu-api-v2-js

    Namespace Score

    Index

    Interfaces

    Legacy +Score | osu-api-v2-js

    Namespace Score

    Index

    Interfaces

    Functions

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/modules/Spotlight.html b/docs/modules/Spotlight.html index 816e7ba..0f2b754 100644 --- a/docs/modules/Spotlight.html +++ b/docs/modules/Spotlight.html @@ -1,2 +1,3 @@ -Spotlight | osu-api-v2-js

    Namespace Spotlight

    Index

    Interfaces

    WithParticipantcount +Spotlight | osu-api-v2-js

    Namespace Spotlight

    Index

    Interfaces

    Functions

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/modules/User.Extended.html b/docs/modules/User.Extended.html index 26f3273..db307e4 100644 --- a/docs/modules/User.Extended.html +++ b/docs/modules/User.Extended.html @@ -1,2 +1,2 @@ -Extended | osu-api-v2-js

    Namespace Extended

    Index

    Interfaces

    WithStatisticsrulesets +Extended | osu-api-v2-js

    Namespace Extended

    Index

    Interfaces

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/modules/User.Statistics.html b/docs/modules/User.Statistics.html index f3ea91d..68f60c5 100644 --- a/docs/modules/User.Statistics.html +++ b/docs/modules/User.Statistics.html @@ -1,3 +1,3 @@ -Statistics | osu-api-v2-js

    Namespace Statistics

    Index

    Interfaces

    WithCountryrank +Statistics | osu-api-v2-js

    Namespace Statistics

    Index

    Interfaces

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/modules/User.html b/docs/modules/User.html index e06b99d..44e87c4 100644 --- a/docs/modules/User.html +++ b/docs/modules/User.html @@ -1,4 +1,4 @@ -User | osu-api-v2-js

    Namespace User

    Index

    Namespaces

    Extended +User | osu-api-v2-js

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/modules/WebSocket.Command.html b/docs/modules/WebSocket.Command.html index 2e7a622..6ea3cdd 100644 --- a/docs/modules/WebSocket.Command.html +++ b/docs/modules/WebSocket.Command.html @@ -1,6 +1,6 @@ Command | osu-api-v2-js

    Use any of those with socket.send() to send a command to the WebSocket!

    Example

    `socket.send(osu.WebSocket.Command.chatStart)`
     
    -

    Index

    Variables

    Index

    Variables

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/modules/WebSocket.Event.html b/docs/modules/WebSocket.Event.html index f91b571..52d7cde 100644 --- a/docs/modules/WebSocket.Event.html +++ b/docs/modules/WebSocket.Event.html @@ -1,5 +1,5 @@ Event | osu-api-v2-js

    Those are what you'll get from WebSocket's MessageEvents!

    -

    Index

    Interfaces

    Index

    Interfaces

    Type Aliases

    Any diff --git a/docs/modules/WebSocket.html b/docs/modules/WebSocket.html index 25459ac..61c1a1b 100644 --- a/docs/modules/WebSocket.html +++ b/docs/modules/WebSocket.html @@ -1,4 +1,4 @@ WebSocket | osu-api-v2-js

    Namespace WebSocket

    Everything here is great to use with the WebSocket you can get with API.generateWebSocket!

    -

    Index

    Namespaces

    Index

    Namespaces

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/modules/Rankings.html b/docs/modules/WikiPage.html similarity index 81% rename from docs/modules/Rankings.html rename to docs/modules/WikiPage.html index d703b1a..af6e1ac 100644 --- a/docs/modules/Rankings.html +++ b/docs/modules/WikiPage.html @@ -1,4 +1,2 @@ -Rankings | osu-api-v2-js

    Namespace Rankings

    Index

    Interfaces

    Country -Spotlight -User +WikiPage | osu-api-v2-js

    Namespace WikiPage

    Index

    Functions

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/types/Beatmap.DifficultyAttributes.Any.html b/docs/types/Beatmap.DifficultyAttributes.Any.html index e4ce39d..e5166c9 100644 --- a/docs/types/Beatmap.DifficultyAttributes.Any.html +++ b/docs/types/Beatmap.DifficultyAttributes.Any.html @@ -1 +1 @@ -Any | osu-api-v2-js

    Generated using TypeDoc

    \ No newline at end of file +Any | osu-api-v2-js

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/types/Event.Any.html b/docs/types/Event.Any.html index 1414a76..1a13d49 100644 --- a/docs/types/Event.Any.html +++ b/docs/types/Event.Any.html @@ -1 +1 @@ -Any | osu-api-v2-js

    Generated using TypeDoc

    \ No newline at end of file +Any | osu-api-v2-js

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/types/Event.AnyRecentActivity.html b/docs/types/Event.AnyRecentActivity.html index dd4d153..0da509f 100644 --- a/docs/types/Event.AnyRecentActivity.html +++ b/docs/types/Event.AnyRecentActivity.html @@ -1,2 +1,2 @@ AnyRecentActivity | osu-api-v2-js

    Type alias AnyRecentActivity

    This includes everything in this namespace, except BeatmapPlaycount

    -

    Generated using TypeDoc

    \ No newline at end of file +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/types/Mod.html b/docs/types/Mod.html index dae322e..abc70c4 100644 --- a/docs/types/Mod.html +++ b/docs/types/Mod.html @@ -1 +1 @@ -Mod | osu-api-v2-js

    Type alias Mod

    Mod: {
        acronym: string;
        settings?: {
            [k: string]: any;
        };
    }

    Type declaration

    • acronym: string
    • Optional settings?: {
          [k: string]: any;
      }
      • [k: string]: any

    Generated using TypeDoc

    \ No newline at end of file +Mod | osu-api-v2-js

    Type alias Mod

    Mod: {
        acronym: string;
        settings?: {
            [k: string]: any;
        };
    }

    Type declaration

    • acronym: string
    • Optional settings?: {
          [k: string]: any;
      }
      • [k: string]: any

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/types/Scope.html b/docs/types/Scope.html index e76cc1f..fe44ff9 100644 --- a/docs/types/Scope.html +++ b/docs/types/Scope.html @@ -1,4 +1,5 @@ Scope | osu-api-v2-js

    Type alias Scope

    Scope: "chat.read" | "chat.write" | "chat.write_manage" | "delegate" | "forum.write" | "friends.read" | "identify" | "public"

    Scopes determine what the API instance can do as a user! https://osu.ppy.sh/docs/index.html#scopes

    -

    Remarks

    "identify" is always implicity provided, "public" is implicitly needed for almost everything

    -

    Generated using TypeDoc

    \ No newline at end of file +

    Remarks

    "identify" is always implicity provided, "public" is implicitly needed for almost everything!! +The need for the "public" scope is only made explicit when the function can't be used unless the application acts as as a user (non-guest)

    +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/types/WebSocket.Event.Any.html b/docs/types/WebSocket.Event.Any.html index 214a707..2d75428 100644 --- a/docs/types/WebSocket.Event.Any.html +++ b/docs/types/WebSocket.Event.Any.html @@ -1,2 +1,2 @@ Any | osu-api-v2-js

    That's the type of JSON.parse(m.toString()) where m is a WebSocket's MessageEvent!

    -

    Generated using TypeDoc

    \ No newline at end of file +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/variables/WebSocket.Command.chatEnd.html b/docs/variables/WebSocket.Command.chatEnd.html index 8951dcf..0ddcbdb 100644 --- a/docs/variables/WebSocket.Command.chatEnd.html +++ b/docs/variables/WebSocket.Command.chatEnd.html @@ -1 +1 @@ -chatEnd | osu-api-v2-js
    chatEnd: string = ...

    Generated using TypeDoc

    \ No newline at end of file +chatEnd | osu-api-v2-js
    chatEnd: string = ...

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/variables/WebSocket.Command.chatStart.html b/docs/variables/WebSocket.Command.chatStart.html index 5984701..61b640e 100644 --- a/docs/variables/WebSocket.Command.chatStart.html +++ b/docs/variables/WebSocket.Command.chatStart.html @@ -1 +1 @@ -chatStart | osu-api-v2-js
    chatStart: string = ...

    Generated using TypeDoc

    \ No newline at end of file +chatStart | osu-api-v2-js
    chatStart: string = ...

    Generated using TypeDoc

    \ No newline at end of file diff --git a/lib/index.ts b/lib/index.ts index 72a0956..55cbb48 100644 --- a/lib/index.ts +++ b/lib/index.ts @@ -192,8 +192,10 @@ export class API { secret: string }, user?: { - code: string, - redirect_uri: string + /** The Application Callback URL; Where the User has been redirected to after saying "okay" to your application doing stuff */ + redirect_uri: string, + /** The code that appeared as a GET argument when they got redirected to the Application Callback URl (`redirect_url`) */ + code: string }, verbose: "none" | "errors" | "all" = "none", server: string = "https://osu.ppy.sh" diff --git a/package.json b/package.json index 4e55e32..9097ba3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "osu-api-v2-js", - "version": "0.5.2", + "version": "0.6.0", "description": "Package to easily access osu!api version 2.0", "type": "module", "main": "dist/index.js", @@ -17,6 +17,16 @@ "type": "git", "url": "https://github.com/TTTaevas/osu-api-v2-js.git" }, + "homepage": "https://osu-v2.taevas.xyz/", + "keywords": [ + "osu", + "api", + "osu-api", + "v2", + "wrapper", + "api-wrapper", + "lazer" + ], "license": "WTFPL", "devDependencies": { "@types/node": "^20.8.10",