@nekosuneprojects/gaming-infos 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (257) hide show
  1. package/.github/workflows/npm-publish-github-packages.yml +56 -0
  2. package/.github/workflows/npm-publish.yml +71 -0
  3. package/CHANGELOG.md +36 -0
  4. package/CONTRIBUTING.md +217 -0
  5. package/DATA.md +292 -0
  6. package/README.md +206 -0
  7. package/data/genshinimpact/characters/albedo.json +11 -0
  8. package/data/genshinimpact/characters/alhaitham.json +12 -0
  9. package/data/genshinimpact/characters/aloy.json +11 -0
  10. package/data/genshinimpact/characters/amber.json +12 -0
  11. package/data/genshinimpact/characters/aratakiitto.json +12 -0
  12. package/data/genshinimpact/characters/arlecchino.json +12 -0
  13. package/data/genshinimpact/characters/baizhu.json +12 -0
  14. package/data/genshinimpact/characters/barbara.json +11 -0
  15. package/data/genshinimpact/characters/beidou.json +12 -0
  16. package/data/genshinimpact/characters/bennett.json +11 -0
  17. package/data/genshinimpact/characters/candace.json +12 -0
  18. package/data/genshinimpact/characters/charlotte.json +11 -0
  19. package/data/genshinimpact/characters/chasca.json +11 -0
  20. package/data/genshinimpact/characters/chevreuse.json +11 -0
  21. package/data/genshinimpact/characters/chiori.json +11 -0
  22. package/data/genshinimpact/characters/chongyun.json +12 -0
  23. package/data/genshinimpact/characters/citlali.json +11 -0
  24. package/data/genshinimpact/characters/clorinde.json +11 -0
  25. package/data/genshinimpact/characters/collei.json +12 -0
  26. package/data/genshinimpact/characters/cyno.json +12 -0
  27. package/data/genshinimpact/characters/dahlia.json +10 -0
  28. package/data/genshinimpact/characters/dehya.json +11 -0
  29. package/data/genshinimpact/characters/diluc.json +11 -0
  30. package/data/genshinimpact/characters/diona.json +11 -0
  31. package/data/genshinimpact/characters/dori.json +11 -0
  32. package/data/genshinimpact/characters/durin.json +11 -0
  33. package/data/genshinimpact/characters/emilie.json +11 -0
  34. package/data/genshinimpact/characters/escoffier.json +12 -0
  35. package/data/genshinimpact/characters/eula.json +11 -0
  36. package/data/genshinimpact/characters/faruzan.json +12 -0
  37. package/data/genshinimpact/characters/fischl.json +12 -0
  38. package/data/genshinimpact/characters/freminet.json +11 -0
  39. package/data/genshinimpact/characters/furina.json +12 -0
  40. package/data/genshinimpact/characters/gaming.json +11 -0
  41. package/data/genshinimpact/characters/ganyu.json +11 -0
  42. package/data/genshinimpact/characters/gorou.json +12 -0
  43. package/data/genshinimpact/characters/hutao.json +12 -0
  44. package/data/genshinimpact/characters/iansan.json +11 -0
  45. package/data/genshinimpact/characters/ineffa.json +11 -0
  46. package/data/genshinimpact/characters/jean.json +11 -0
  47. package/data/genshinimpact/characters/kachina.json +11 -0
  48. package/data/genshinimpact/characters/kaedeharakazuha.json +12 -0
  49. package/data/genshinimpact/characters/kaeya.json +11 -0
  50. package/data/genshinimpact/characters/kamisatoayaka.json +11 -0
  51. package/data/genshinimpact/characters/kamisatoayato.json +11 -0
  52. package/data/genshinimpact/characters/kaveh.json +12 -0
  53. package/data/genshinimpact/characters/keqing.json +11 -0
  54. package/data/genshinimpact/characters/kinich.json +11 -0
  55. package/data/genshinimpact/characters/kirara.json +11 -0
  56. package/data/genshinimpact/characters/klee.json +11 -0
  57. package/data/genshinimpact/characters/kujousara.json +11 -0
  58. package/data/genshinimpact/characters/kukishinobu.json +12 -0
  59. package/data/genshinimpact/characters/lanyan.json +11 -0
  60. package/data/genshinimpact/characters/layla.json +11 -0
  61. package/data/genshinimpact/characters/lisa.json +12 -0
  62. package/data/genshinimpact/characters/lohen.json +11 -0
  63. package/data/genshinimpact/characters/lynette.json +11 -0
  64. package/data/genshinimpact/characters/lyney.json +11 -0
  65. package/data/genshinimpact/characters/mavuika.json +11 -0
  66. package/data/genshinimpact/characters/mikaschmidt.json +11 -0
  67. package/data/genshinimpact/characters/mona.json +12 -0
  68. package/data/genshinimpact/characters/mualani.json +11 -0
  69. package/data/genshinimpact/characters/nahida.json +12 -0
  70. package/data/genshinimpact/characters/navia.json +11 -0
  71. package/data/genshinimpact/characters/neuvillette.json +11 -0
  72. package/data/genshinimpact/characters/nilou.json +11 -0
  73. package/data/genshinimpact/characters/ningguang.json +11 -0
  74. package/data/genshinimpact/characters/noelle.json +12 -0
  75. package/data/genshinimpact/characters/ororon.json +11 -0
  76. package/data/genshinimpact/characters/prune.json +10 -0
  77. package/data/genshinimpact/characters/qiqi.json +12 -0
  78. package/data/genshinimpact/characters/raidenshogun.json +12 -0
  79. package/data/genshinimpact/characters/razor.json +11 -0
  80. package/data/genshinimpact/characters/rosaria.json +12 -0
  81. package/data/genshinimpact/characters/sangonomiyakokomi.json +12 -0
  82. package/data/genshinimpact/characters/sayu.json +11 -0
  83. package/data/genshinimpact/characters/sethos.json +11 -0
  84. package/data/genshinimpact/characters/shenhe.json +12 -0
  85. package/data/genshinimpact/characters/shikanoinheizou.json +12 -0
  86. package/data/genshinimpact/characters/sigewinne.json +11 -0
  87. package/data/genshinimpact/characters/skirk.json +11 -0
  88. package/data/genshinimpact/characters/sucrose.json +12 -0
  89. package/data/genshinimpact/characters/thoma.json +11 -0
  90. package/data/genshinimpact/characters/tighnari.json +12 -0
  91. package/data/genshinimpact/characters/varesa.json +11 -0
  92. package/data/genshinimpact/characters/varka.json +10 -0
  93. package/data/genshinimpact/characters/venti.json +12 -0
  94. package/data/genshinimpact/characters/wanderer.json +11 -0
  95. package/data/genshinimpact/characters/wriothesley.json +12 -0
  96. package/data/genshinimpact/characters/xiangling.json +12 -0
  97. package/data/genshinimpact/characters/xianyun.json +11 -0
  98. package/data/genshinimpact/characters/xiao.json +11 -0
  99. package/data/genshinimpact/characters/xilonen.json +11 -0
  100. package/data/genshinimpact/characters/xingqiu.json +12 -0
  101. package/data/genshinimpact/characters/xinyan.json +12 -0
  102. package/data/genshinimpact/characters/yaemiko.json +12 -0
  103. package/data/genshinimpact/characters/yanfei.json +12 -0
  104. package/data/genshinimpact/characters/yaoyao.json +12 -0
  105. package/data/genshinimpact/characters/yelan.json +11 -0
  106. package/data/genshinimpact/characters/yoimiya.json +12 -0
  107. package/data/genshinimpact/characters/yumemizukimizuki.json +11 -0
  108. package/data/genshinimpact/characters/yunjin.json +11 -0
  109. package/data/genshinimpact/characters/zhongli.json +11 -0
  110. package/data/genshinimpact/characters/zibai.json +11 -0
  111. package/data/genshinimpact/meta.json +14 -0
  112. package/data/honkaistarrail/characters/acheron.json +12 -0
  113. package/data/honkaistarrail/characters/aglaea.json +12 -0
  114. package/data/honkaistarrail/characters/anaxa.json +12 -0
  115. package/data/honkaistarrail/characters/argenti.json +12 -0
  116. package/data/honkaistarrail/characters/arlan.json +12 -0
  117. package/data/honkaistarrail/characters/ashveil.json +12 -0
  118. package/data/honkaistarrail/characters/asta.json +12 -0
  119. package/data/honkaistarrail/characters/aventurine.json +12 -0
  120. package/data/honkaistarrail/characters/bailu.json +12 -0
  121. package/data/honkaistarrail/characters/blackswan.json +12 -0
  122. package/data/honkaistarrail/characters/blade.json +12 -0
  123. package/data/honkaistarrail/characters/boothill.json +12 -0
  124. package/data/honkaistarrail/characters/bronya.json +12 -0
  125. package/data/honkaistarrail/characters/castorice.json +12 -0
  126. package/data/honkaistarrail/characters/cerydra.json +12 -0
  127. package/data/honkaistarrail/characters/cipher.json +12 -0
  128. package/data/honkaistarrail/characters/clara.json +12 -0
  129. package/data/honkaistarrail/characters/constance.json +12 -0
  130. package/data/honkaistarrail/characters/cyrene.json +12 -0
  131. package/data/honkaistarrail/characters/danheng.json +12 -0
  132. package/data/honkaistarrail/characters/drratio.json +12 -0
  133. package/data/honkaistarrail/characters/feixiao.json +12 -0
  134. package/data/honkaistarrail/characters/firefly.json +12 -0
  135. package/data/honkaistarrail/characters/fuxuan.json +12 -0
  136. package/data/honkaistarrail/characters/gallagher.json +12 -0
  137. package/data/honkaistarrail/characters/gepard.json +12 -0
  138. package/data/honkaistarrail/characters/guinaifen.json +12 -0
  139. package/data/honkaistarrail/characters/hanya.json +12 -0
  140. package/data/honkaistarrail/characters/herta.json +12 -0
  141. package/data/honkaistarrail/characters/himeko.json +13 -0
  142. package/data/honkaistarrail/characters/hook.json +12 -0
  143. package/data/honkaistarrail/characters/huohuo.json +12 -0
  144. package/data/honkaistarrail/characters/hyacine.json +12 -0
  145. package/data/honkaistarrail/characters/hysilens.json +12 -0
  146. package/data/honkaistarrail/characters/jade.json +12 -0
  147. package/data/honkaistarrail/characters/jiaoqiu.json +12 -0
  148. package/data/honkaistarrail/characters/jingliu.json +12 -0
  149. package/data/honkaistarrail/characters/jingyuan.json +12 -0
  150. package/data/honkaistarrail/characters/kafka.json +12 -0
  151. package/data/honkaistarrail/characters/lingsha.json +12 -0
  152. package/data/honkaistarrail/characters/lisushang.json +12 -0
  153. package/data/honkaistarrail/characters/luka.json +12 -0
  154. package/data/honkaistarrail/characters/luocha.json +12 -0
  155. package/data/honkaistarrail/characters/lynx.json +12 -0
  156. package/data/honkaistarrail/characters/march7th.json +12 -0
  157. package/data/honkaistarrail/characters/misha.json +12 -0
  158. package/data/honkaistarrail/characters/moze.json +12 -0
  159. package/data/honkaistarrail/characters/mydei.json +12 -0
  160. package/data/honkaistarrail/characters/natasha.json +12 -0
  161. package/data/honkaistarrail/characters/pela.json +12 -0
  162. package/data/honkaistarrail/characters/phainon.json +12 -0
  163. package/data/honkaistarrail/characters/qingque.json +12 -0
  164. package/data/honkaistarrail/characters/rappa.json +12 -0
  165. package/data/honkaistarrail/characters/robin.json +12 -0
  166. package/data/honkaistarrail/characters/ruanmei.json +12 -0
  167. package/data/honkaistarrail/characters/sampo.json +12 -0
  168. package/data/honkaistarrail/characters/seele.json +12 -0
  169. package/data/honkaistarrail/characters/serval.json +12 -0
  170. package/data/honkaistarrail/characters/silverwolf.json +12 -0
  171. package/data/honkaistarrail/characters/sparkle.json +12 -0
  172. package/data/honkaistarrail/characters/tingyun.json +12 -0
  173. package/data/honkaistarrail/characters/topaz.json +12 -0
  174. package/data/honkaistarrail/characters/tribbie.json +12 -0
  175. package/data/honkaistarrail/characters/weltyang.json +12 -0
  176. package/data/honkaistarrail/characters/xueyi.json +12 -0
  177. package/data/honkaistarrail/characters/yanqing.json +12 -0
  178. package/data/honkaistarrail/characters/yaoguang.json +12 -0
  179. package/data/honkaistarrail/characters/yukong.json +12 -0
  180. package/data/honkaistarrail/characters/yunli.json +12 -0
  181. package/data/honkaistarrail/meta.json +14 -0
  182. package/data/nte/characters/adler.json +14 -0
  183. package/data/nte/characters/aurelia.json +14 -0
  184. package/data/nte/characters/baicang.json +14 -0
  185. package/data/nte/characters/chaos.json +14 -0
  186. package/data/nte/characters/chiz.json +14 -0
  187. package/data/nte/characters/daffodill.json +14 -0
  188. package/data/nte/characters/edgar.json +14 -0
  189. package/data/nte/characters/esperzero.json +14 -0
  190. package/data/nte/characters/fadia.json +14 -0
  191. package/data/nte/characters/haniel.json +14 -0
  192. package/data/nte/characters/hathor.json +14 -0
  193. package/data/nte/characters/hotori.json +14 -0
  194. package/data/nte/characters/iroi.json +14 -0
  195. package/data/nte/characters/jiuyuan.json +14 -0
  196. package/data/nte/characters/lacrimosa.json +14 -0
  197. package/data/nte/characters/mint.json +14 -0
  198. package/data/nte/characters/nanally.json +14 -0
  199. package/data/nte/characters/sakiri.json +14 -0
  200. package/data/nte/characters/shinku.json +14 -0
  201. package/data/nte/characters/skia.json +14 -0
  202. package/data/nte/meta.json +14 -0
  203. package/data/vrchat/groups/clubzodiac.json +7 -0
  204. package/data/vrchat/groups/dirtydancers.json +7 -0
  205. package/data/vrchat/groups/drumsynews.json +7 -0
  206. package/data/vrchat/groups/ebola20.json +7 -0
  207. package/data/vrchat/groups/internationaldancersassociation.json +7 -0
  208. package/data/vrchat/groups/kannagang.json +6 -0
  209. package/data/vrchat/groups/lolisquad.json +7 -0
  210. package/data/vrchat/groups/nekonightsnightclub.json +7 -0
  211. package/data/vrchat/groups/nekostudios.json +7 -0
  212. package/data/vrchat/groups/nekosunecommunity.json +7 -0
  213. package/data/vrchat/groups/voidclub.json +7 -0
  214. package/data/vrchat/groups/voltdanceclub.json +7 -0
  215. package/data/vrchat/groups/vrceventsgroup.json +7 -0
  216. package/data/vrchat/groups/vrchatcommunitydiscord.json +6 -0
  217. package/data/vrchat/meta.json +13 -0
  218. package/data/vrchat/players/alto.json +9 -0
  219. package/data/vrchat/players/arcadum.json +10 -0
  220. package/data/vrchat/players/chairhandler.json +9 -0
  221. package/data/vrchat/players/chipz.json +9 -0
  222. package/data/vrchat/players/hikarivr.json +10 -0
  223. package/data/vrchat/players/kimple.json +10 -0
  224. package/data/vrchat/players/linkzr.json +8 -0
  225. package/data/vrchat/players/nagzz21.json +9 -0
  226. package/data/vrchat/players/nebride.json +10 -0
  227. package/data/vrchat/players/nekosunevr.json +10 -0
  228. package/data/vrchat/players/pokelawls.json +9 -0
  229. package/data/vrchat/players/qwonk.json +8 -0
  230. package/data/vrchat/players/roflgator.json +10 -0
  231. package/data/vrchat/players/scifri.json +7 -0
  232. package/data/vrchat/players/sodapoppin.json +9 -0
  233. package/data/vrchat/players/woops.json +9 -0
  234. package/data/vrchat/players/zentreya.json +10 -0
  235. package/data/vrchat/worlds/ascensionacademy.json +7 -0
  236. package/data/vrchat/worlds/clubvgl.json +8 -0
  237. package/data/vrchat/worlds/fightfinder.json +8 -0
  238. package/data/vrchat/worlds/hangouthouse.json +7 -0
  239. package/data/vrchat/worlds/nekostudioshalloween.json +9 -0
  240. package/data/vrchat/worlds/nekostudiosnewyear.json +9 -0
  241. package/data/vrchat/worlds/nekostudiosxmas.json +9 -0
  242. package/data/vrchat/worlds/nekosunevranimations2023.json +9 -0
  243. package/data/vrchat/worlds/nekosunevranimations2024.json +9 -0
  244. package/data/vrchat/worlds/nekosunevranimations2025.json +9 -0
  245. package/data/vrchat/worlds/rumhamsavatarworld.json +7 -0
  246. package/data/vrchat/worlds/smewsranch.json +7 -0
  247. package/data/vrchat/worlds/smewsroom.json +7 -0
  248. package/data/vrchat/worlds/sunsetbar.json +7 -0
  249. package/data/vrchat/worlds/theblackcat.json +9 -0
  250. package/data/vrchat/worlds/thegreatpug.json +8 -0
  251. package/data/vrchat/worlds/themidnightbar.json +7 -0
  252. package/data/vrchat/worlds/voidclub.json +7 -0
  253. package/data/vrchat/worlds/voltdanceclub.json +7 -0
  254. package/data/vrchat/worlds/vrchathome.json +8 -0
  255. package/data/vrchat/worlds/whatalegend.json +6 -0
  256. package/index.js +207 -0
  257. package/package.json +30 -0
@@ -0,0 +1,9 @@
1
+ {
2
+ "name": "Chipz",
3
+ "species": "Human (formerly), Vampire",
4
+ "gender": "Male",
5
+ "aliases": "StealthRG, Pringles, Tortilla, Cool Ranch",
6
+ "image": "https://static.wikia.nocookie.net/vrchat-legends/images/e/ec/Chipz_Fanart.jpg/revision/latest?cb=20190409145909",
7
+ "description": "Chipz is the VRChat roleplay persona of streamer StealthRG, portrayed as a nightclub owner whose character arc shifted from human to vampire over the course of long-running community storylines. He led his own venue through the [Chipz Night Club RP Collective](https://vrchat-legends.fandom.com/wiki/Chipz_Night_Club_RP_collective) and was a central figure in large-scale community roleplay events such as [The Crossover](https://vrchat-legends.fandom.com/wiki/The_Crossover), alongside other well-known VRChat personas.",
8
+ "url": "https://vrchat-legends.fandom.com/wiki/Chipz_(Present_Day)"
9
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "name": "HikariVR",
3
+ "title": "The cutie himself",
4
+ "species": "half human - half wolf",
5
+ "gender": "Male",
6
+ "aliases": "Jack, Luci",
7
+ "image": "https://static.wikia.nocookie.net/vrchat-legends/images/0/0e/HikariVRupdate.jpg",
8
+ "description": "A long time ago, in a land far far away, there was a small VRChat player named JackSederwall (later known as HikarVR). He had been hanging out in a place called [The Black Cat](https://vrchat-legends.fandom.com/wiki/The_Black_Cat). He had been talking about how he wanted to show off his cute face to the world of [twitch](https://www.twitch.tv/hikarivr). Eventually he did set sail on this road to streaming.",
9
+ "url": "https://vrchat-legends.fandom.com/wiki/HikariVR"
10
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "name": "KimplE",
3
+ "title": "Mother of VRChat",
4
+ "species": "Kitty bot (robot cat)",
5
+ "gender": "Female",
6
+ "aliases": "Kimple, Detective Kimple, Battle Disc Sensei, Kittybot",
7
+ "image": "https://static.wikia.nocookie.net/vrchat-legends/images/1/13/Kimple.png/revision/latest?cb=20180421053133",
8
+ "description": "KimplE (also known as Kimple or KimplEClonE) is one of the earliest and most iconic content creators in VRChat's history, portraying an easygoing robot cat who communicates through a text-to-speech engine. A member of [Team Five](https://vrchat-legends.fandom.com/wiki/Team_Five) in 2017-2018, she was known for dancing, showing off a large avatar collection, and playing jokes, and is sometimes credited as one of the platform's earliest VTubers for streaming with a virtual avatar overlay while playing other games. She remained a fixture of VRChat's roleplay scene for years afterward, known for her friendly, observer-like presence in community events.",
9
+ "url": "https://vrchat-legends.fandom.com/wiki/KimplE"
10
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "name": "LiNkzr",
3
+ "species": "Kitsune",
4
+ "gender": "Male",
5
+ "image": "https://static.wikia.nocookie.net/vrchat-legends/images/a/a6/Crump_May_11th_2021_43_Linkzr.png/revision/latest?cb=20210513003243",
6
+ "description": "LiNkzr is a Twitch streamer and former professional Overwatch esports player who became a regular participant in [VRChat](https://vrchat-legends.fandom.com/wiki/VRChat) roleplay. He is known as a fixture of [The Golden Gator](https://vrchat-legends.fandom.com/wiki/The_Golden_Gator) community, taking part in improv RP scenes and community game shows alongside other streamers.",
7
+ "url": "https://vrchat-legends.fandom.com/wiki/LiNkzr"
8
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "name": "Nagzz21",
3
+ "species": "Human",
4
+ "gender": "Male",
5
+ "aliases": "Joey Bagels",
6
+ "image": "https://static.wikia.nocookie.net/vrchat-legends/images/d/d9/Nagzz21_New.png/revision/latest?cb=20190507090123",
7
+ "description": "Nagzz21, also known in VRChat as Joey Bagels, is a YouTuber and Twitch streamer who became one of the platform's most popular creators through episodic VRChat adventure videos featuring a recurring cast of friends. His original YouTube episodes ran for several seasons before he shifted toward livestreaming a variety of games on Twitch. He has also organized charity livestream events with the VRChat community.",
8
+ "url": "https://vrchat-legends.fandom.com/wiki/Nagzz21"
9
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "name": "Nebride",
3
+ "title": "The slime goddess",
4
+ "species": "Shape-shifting slime (usually a foxgirl; also appears as many other forms)",
5
+ "gender": "Female",
6
+ "aliases": "Neb, Nebby, Nebbie, Nebi",
7
+ "image": "https://static.wikia.nocookie.net/vrchat-legends/images/b/bc/Nebride_Mili_slime_promo_01.png/revision/latest?cb=20231111155333",
8
+ "description": "Nebride is a Norwegian VTuber and [VRChat](https://vrchat-legends.fandom.com/wiki/VRChat) streamer whose lore casts her as a shape-shifting slime creature, explaining the frequent, often dramatic avatar changes during her broadcasts. She tried VRChat as early as 2017 but became a dedicated full-body streamer after getting a Quest 2 headset in 2020, building a community around high-energy dance streams, horror games, and listener-requested music playlists. She has streamed on both Twitch and Kick, branding herself as 'your favorite shiny vibetuber.'",
9
+ "url": "https://vrchat-legends.fandom.com/wiki/Nebride"
10
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "name": "NekoSuneVR",
3
+ "title": "The Cutie Streamer",
4
+ "species": "half human - half catgirl",
5
+ "gender": "Male",
6
+ "aliases": "ChisdealHDYT, Chisdeal2013, Chisdeal2014, ChisdealHD, progamer-gr, DarkBlackWolfs",
7
+ "image": "https://media.discordapp.net/attachments/794229972490387496/794231249652678696/VRChat_1920x1080_2020-09-14_09-22-18.855.png",
8
+ "description": "A long time ago, Wild Player Chisdeal2013 (later known as ChisdealHDYT). He had been hanging out in a place called [The Black Cat](https://vrchat-legends.fandom.com/wiki/The_Black_Cat), [The Great Pug](https://vrchat-legends.fandom.com/wiki/The_Great_Pug) and [Japan Shrine (ITOAR)](https://vrchat-legends.fandom.com/wiki/Japan_Shrine_(ITOAR)). He had been talking about how he wanted to be Popular on [Twitch](https://twitch.tv/chisdealhdyt) and [TikTok](https://www.tiktok.com/@chisdealhd) / [YouTube](https://www.youtube.com/chisdealhd). Then he did started to streaming on Twitch and Upload Videos on TikTok / YouTube. He loves interest Cryptocurrency Money making and has lot support from [ZENZO Community](https://zenzo.io). He building Community with VRChat, Warframe and many more. He want become as VTuber as Twitch and doing a lot of VR Gaming. That dream is coming very soon in stage getting VR Headset and Brand new VR Ready PC.\n\nYou should Support this Cutie Streamer much on your Heart it can go.",
9
+ "url": "https://creator.nekosunevr.co.uk"
10
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "name": "Pokelawls",
3
+ "species": "Human",
4
+ "gender": "Male",
5
+ "aliases": "Poke, Amish Doink",
6
+ "image": "https://static.wikia.nocookie.net/vrchat-legends/images/9/98/Rofl_Sept_13th_6_Pokelawls.jpg/revision/latest?cb=20180917185747",
7
+ "description": "Pokelawls is one of the earliest VRChat Twitch streamers, having started playing in 2017 and co-founding [Team Five](https://vrchat-legends.fandom.com/wiki/Team_Five) alongside fellow streamers Vince, Woops, Strippin, and Dyrus. In-game he most often goes by the character name Amish Doink, occasionally roleplaying alongside other content creators, though he dissolved Team Five's leadership in 2018 and has since only returned to VRChat occasionally, usually visiting friends like [Roflgator](https://vrchat-legends.fandom.com/wiki/Roflgator).",
8
+ "url": "https://vrchat-legends.fandom.com/wiki/Pokelawls"
9
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "name": "Qwonk",
3
+ "title": "The most famous VRChat player",
4
+ "gender": "Male",
5
+ "image": "https://static.wikia.nocookie.net/vrchat-legends/images/4/4c/Q.PNG/revision/latest?cb=20181022040819",
6
+ "description": "Qwonk is an American YouTuber who began making videos with friends back in 2007 before becoming closely associated with [VRChat](https://vrchat-legends.fandom.com/wiki/VRChat) content. After losing a channel with over a million subscribers in 2017, he restarted from scratch in 2018 and rebuilt his audience partly through appearances alongside other well-known VRChat YouTubers. He has never done a public face reveal, keeping his real-life identity private, and is often cited by the wiki community (somewhat tongue-in-cheek) as one of the platform's most-searched personalities.",
7
+ "url": "https://vrchat-legends.fandom.com/wiki/Qwonk"
8
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "name": "Roflgator",
3
+ "title": "Wingman Robot",
4
+ "species": "Alligator (also portrays a robot, an android, and other personas)",
5
+ "gender": "Male",
6
+ "aliases": "Rob, Robert, Coach, Boss, Ron, Ronald von Awfulgator",
7
+ "image": "https://static.wikia.nocookie.net/vrchat-legends/images/0/08/Roflgator_Cute_Green_Gator_Avatar.jpg/revision/latest?cb=20251024123217",
8
+ "description": "Roflgator is a full-time Twitch streamer known for improvised roleplay in [VRChat](https://vrchat-legends.fandom.com/wiki/VRChat), portraying a mischievous alligator persona who runs his own bar community, [The Golden Gator](https://vrchat-legends.fandom.com/wiki/The_Golden_Gator). Before streaming full-time starting in 2018, he worked in competitive esports, coaching League of Legends and Overwatch teams including Fnatic. He is known for wing-manning and stirring up lighthearted RP drama, has cycled through many alternate avatars and personas over the years, and regularly hosts community game shows and dating-style events with guest streamers.",
9
+ "url": "https://vrchat-legends.fandom.com/wiki/Roflgator"
10
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "name": "SciFri",
3
+ "gender": "Male",
4
+ "image": "",
5
+ "description": "SciFri is a roleplayer who streamed VRChat from 2018 to 2021, serving as a member and admin of several VRChat roleplay groups during that time. After stepping away from VRChat due to general burnout, he transitioned into a general variety streamer, continuing to focus on roleplay-driven games such as Dungeons & Dragons and GTA V.",
6
+ "url": "https://vrchat-legends.fandom.com/wiki/SciFri"
7
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "name": "Sodapoppin",
3
+ "species": "Human",
4
+ "gender": "Male",
5
+ "aliases": "Soda, Chance",
6
+ "image": "https://static.wikia.nocookie.net/vrchat-legends/images/6/6c/Rofl_April_24th_2020_60_Sodapoppin.png/revision/latest?cb=20200424234624",
7
+ "description": "Sodapoppin is a major Twitch personality, historically known for streaming World of Warcraft, who has made recurring guest appearances in VRChat's roleplay scene. His in-VRChat persona is often referred to as Sodapoppin80085 or simply Soda, and he is best known in the community for visiting [Roflgator](https://vrchat-legends.fandom.com/wiki/Roflgator)'s bar communities alongside other prominent streamers such as xQc and Hasanabi.",
8
+ "url": "https://vrchat-legends.fandom.com/wiki/Sodapoppin"
9
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "name": "Woops",
3
+ "title": "The Purple-Haired Fox Girl",
4
+ "species": "Kitsune (fox girl)",
5
+ "gender": "Male",
6
+ "image": "https://static.wikia.nocookie.net/vrchat-legends/images/3/3d/Woops.PNG/revision/latest?cb=20180603105244",
7
+ "description": "Woops is a VRChat YouTuber and Twitch streamer, one of the five original leaders of [Team Five](https://vrchat-legends.fandom.com/wiki/Team_Five), first known for a custom fox-girl avatar in VRChat's public worlds. Described as happy-go-lucky and mischievous but loyal to friends, he records both roleplay and casual VRChat content for his channel and is affiliated with the [Midnite Central](https://vrchat-legends.fandom.com/wiki/Midnite_Central) community.",
8
+ "url": "https://vrchat-legends.fandom.com/wiki/Woops"
9
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "name": "Zentreya",
3
+ "title": "The Red Devil",
4
+ "species": "Devil/Demon Dragon (formerly Devil/Demon Human)",
5
+ "gender": "Female",
6
+ "aliases": "Zen, Fearless Leader",
7
+ "image": "https://static.wikia.nocookie.net/vrchat-legends/images/0/0e/Zentryey.png/revision/latest?cb=20180529152540",
8
+ "description": "Zentreya is a roleplayer, streamer, and VTuber who was the leader and founder of the [Anti-Lewd Army](https://vrchat-legends.fandom.com/wiki/Anti-Lewd_Army), a prominent VRChat community faction, earning the nickname 'The Red Devil.' Portrayed as a demon who evolved from a demon-human hybrid into a demon-dragon persona, she is remembered in community lore as a strong-willed, strategic leader with a warmer side beneath a tough exterior. She has since become a well-known independent VTuber on platforms like Twitch and YouTube.",
9
+ "url": "https://vrchat-legends.fandom.com/wiki/Zentreya"
10
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "name": "Ascension Academy",
3
+ "creator": "Lnik Forstruth",
4
+ "image": "",
5
+ "description": "Ascension Academy is a large fantasy-themed roleplay map created by Lnik Forstruth, built as the setting for the Ascension Academy RP series organized by StealthRG (Chipz). Within the fiction of the roleplay, it depicts a military academy that trains cadets in magic, weaponry, and tactics; as a physical VRChat map it provides the classrooms, halls, and grounds used by that community's ongoing storylines. It stands out as one of the more elaborate purpose-built roleplay campuses documented on the wiki.",
6
+ "url": "https://vrchat-legends.fandom.com/wiki/Ascension_Academy"
7
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "name": "Club VGL",
3
+ "aliases": "Varneon's Gaming Lounge",
4
+ "creator": "Varneon",
5
+ "image": "",
6
+ "description": "Club VGL is a realistic-looking nightclub world made by Varneon, made public in December 2018. Its name stands for Varneon's Gaming Lounge, and the map includes a dance floor with working lighting, a private catwalk area with a central dance pole, and lockable rooms with jacuzzis. It has been kept updated over the years and remains a recognizable nightclub-style hangout in VRChat.",
7
+ "url": "https://vrchat-legends.fandom.com/wiki/Club_VGL"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "name": "FIGHT FINDER",
3
+ "aliases": "Sky Stadium, FIGHT FINDER HUB",
4
+ "creator": "Gormundr",
5
+ "image": "",
6
+ "description": "FIGHT FINDER (originally released as Sky Stadium) is a PC and Quest compatible arena world co-created by Gormundr along with Mortugues, Wobblins, N1no001, and KazeTheAlien. It's built around stadium-style spaces where visitors perform choreographed roleplay fights and showcase avatar animations for recognition within affiliated combat and roleplay sub-groups. After growing quickly in mid-2024, the world and its Discord were rebranded as a permanent public hub supporting many independent fighting-roleplay communities.",
7
+ "url": "https://vrchat-legends.fandom.com/wiki/FIGHT_FINDER"
8
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "name": "Hangout House",
3
+ "creator": "Munificent",
4
+ "image": "",
5
+ "description": "Hangout House is an indoor social world created in mid-2018 by the user Munificent. It offers a cozy house-style layout with tabletop-style social games such as chess and four-in-a-row, plus a basement movie theater where visitors can queue up videos to watch together. It has remained a low-key, long-running spot for small-group hangouts rather than a large public party space.",
6
+ "url": "https://vrchat-legends.fandom.com/wiki/Hangout_House"
7
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "name": "NekoStudios - Halloween Animations",
3
+ "title": "Halloween Animations",
4
+ "creator": "NekoStudios",
5
+ "aliases": "nekostudios animations",
6
+ "image": "https://api.vrchat.cloud/api/1/file/file_fae4a508-97c4-4fea-82ff-e16eea083087/1/file",
7
+ "description": "NekoStudios - Halloween Animations is a festive world featuring holiday-themed animations and decorations. Perfect for celebrating the season with your friends!",
8
+ "url": "https://vrchat.com/home/world/wrld_bf840eeb-6a85-446b-9734-8f1d63c36ee9"
9
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "name": "NekoStudios - New Year Animations",
3
+ "title": "New Year Animations",
4
+ "creator": "NekoStudios",
5
+ "aliases": "nekostudios animations",
6
+ "image": "https://api.vrchat.cloud/api/1/file/file_ccf6fc05-b0a1-45b4-b4f3-e63460adf69d/1/file",
7
+ "description": "NekoStudios - New Year Animations is a festive world featuring holiday-themed animations and decorations. Perfect for celebrating the season with your friends!",
8
+ "url": "https://vrchat.com/home/world/wrld_7d7f9c06-1e16-4eb7-ac9c-cdcdd09e3ed1"
9
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "name": "NekoStudios - XMAS Animations",
3
+ "title": "XMAS Animations",
4
+ "creator": "NekoStudios",
5
+ "aliases": "nekostudios animations",
6
+ "image": "https://api.vrchat.cloud/api/1/file/file_6f8aecbb-1e7f-419a-b6fc-eb335866f031/1/file",
7
+ "description": "NekoStudios - XMAS Animations is a festive world featuring holiday-themed animations and decorations. Perfect for celebrating the season with your friends!",
8
+ "url": "https://vrchat.com/home/world/wrld_e753bcf7-8c65-4b8f-b5b6-fe0c1ccbd9d9"
9
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "name": "NekoSuneVR Animations 2023",
3
+ "title": "Animations 2023",
4
+ "creator": "NekoSuneVR",
5
+ "aliases": "nekostudios animations",
6
+ "image": "https://api.vrchat.cloud/api/1/file/file_ebcbd7e6-16a5-43a5-bde8-e842ede5f9dc/4/file",
7
+ "description": "NekoSuneVR Animations World is where NekoSuneVR, formerly part of LatinGang (LTG) back in 2023, left at the end of the year to create their own, NekoStudios. This world features all animations from 2023 to 2024, with an exciting new world coming for 2025 animations—so stay tuned!",
8
+ "url": "https://vrchat.com/home/world/wrld_f150bf66-e25b-42fb-9cf6-cd87794304c1"
9
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "name": "NekoSuneVR Animations 2024",
3
+ "title": "Animations 2024",
4
+ "creator": "NekoSuneVR",
5
+ "aliases": "nekostudios animations",
6
+ "image": "https://api.vrchat.cloud/api/1/file/file_ff27d04e-2469-4299-86e6-042892c6c2a8/2/file",
7
+ "description": "NekoSuneVR Animations World is where NekoSuneVR, formerly part of LatinGang (LTG) back in 2023, left at the end of the year to create their own, NekoStudios. This world features all animations from 2023 to 2024, with an exciting new world coming for 2025 animations—so stay tuned!",
8
+ "url": "https://vrchat.com/home/world/wrld_e5f19a02-2d19-4e37-bef2-e954566ce693"
9
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "name": "NekoSuneVR Animations 2025",
3
+ "title": "Animations 2025",
4
+ "creator": "NekoSuneVR",
5
+ "aliases": "nekostudios animations",
6
+ "image": "https://api.vrchat.cloud/api/1/file/file_35088ee5-4601-40b4-911a-8d7751110aad/2/file",
7
+ "description": "NekoSuneVR Animations World is where NekoSuneVR, formerly part of LatinGang (LTG) back in 2023, left at the end of the year to create their own, NekoStudios. This world features all animations from 2023 to 2024, with an exciting new world coming for 2025 animations—so stay tuned!",
8
+ "url": "https://vrchat.com/home/world/wrld_35c3d0ee-72c7-44b7-b518-1ea0ba7cdf66"
9
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "name": "Rum Ham's Avatar World",
3
+ "creator": "Rum Ham",
4
+ "image": "",
5
+ "description": "Rum Ham's Avatar World is a meme-focused avatar showcase built by the creator Rum Ham, gathering a large collection of silly and intentionally over-the-top avatars, many accompanied by loud music or sound effects. Numerous avatars use clip-art-style cutouts and figures of internet personalities and celebrities, with Danny DeVito and Nicolas Cage recurring as particular running jokes throughout the world, including a small shrine-style area referencing DeVito. The world has been a favorite drop-in spot for comedic roleplay and random character events within the community.",
6
+ "url": "https://vrchat-legends.fandom.com/wiki/Rum_Ham's_Avatar_World"
7
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "name": "Smew's Ranch",
3
+ "creator": "Smew",
4
+ "image": "",
5
+ "description": "Smew's Ranch is a follow-up world from creator Smew, built as a lighter, more playful companion to Smew's Room. It has an amusement-park feel, featuring a large Ferris wheel, a roller coaster, and assorted throwable gadgets and toys for visitors to mess around with. Since its release it has steadily grown in popularity as a fun, low-pressure hangout spot.",
6
+ "url": "https://vrchat-legends.fandom.com/wiki/Smew's_Room"
7
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "name": "Smew's Room",
3
+ "creator": "Smew",
4
+ "image": "",
5
+ "description": "Smew's Room is a Quest-friendly hangout world built by the creator Smew as a comfortable space to relax with friends. Alongside various interactive gadgets, it doubles as a personal museum of sorts, displaying photos from Smew's travels through VRChat. It is also known as the birthplace of Simp Wars, a fan-made Star Wars parody that started here.",
6
+ "url": "https://vrchat-legends.fandom.com/wiki/Smew's_Room"
7
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "name": "Sunset Bar",
3
+ "creator": "Lingie",
4
+ "image": "",
5
+ "description": "Sunset Bar is a PCVR and Oculus Quest compatible bar/club world published in August 2023, built to support up to around 60 players per instance. It centers on an elaborate drink-making system with customizable alcohol types, colors, and glassware, alongside a DJ and sound system, private rooms, and a video player. The world grew quickly into one of the more visited bar hangouts in VRChat's social scene.",
6
+ "url": "https://vrchat-legends.fandom.com/wiki/Sunset_Bar"
7
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "name": "The Black Cat",
3
+ "title": "Main Hall",
4
+ "creator": "spookyghostboo",
5
+ "aliases": "Black Cat",
6
+ "image": "https://static.wikia.nocookie.net/vrchat-legends/images/2/25/The_Black_Cat_6.png",
7
+ "description": "The Black Cat is an [Oculus Quest](https://en.wikipedia.org/wiki/Oculus_Quest) enabled world featuring a restaurant, two bars, two stages and many lounging areas. The map is fairly small but roomy enough that its possible to move to a private areas when needed. It has separate bathrooms for male and female visitors. The world has a mirror.",
8
+ "url": "https://vrchat-legends.fandom.com/wiki/The_Black_Cat"
9
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "name": "The Great Pug",
3
+ "title": "Night View Hall",
4
+ "creator": "owlboy",
5
+ "image": "",
6
+ "description": "The Great Pug is a PC-only bar world launched in February 2017 by owlboy, modeled after a real pub called The Great Dane in Madison, Wisconsin. It spans three floors: a ground-floor bar with booths and tables, a second-floor bar and stage area known as Night View Hall with a billiards table, and a top-floor lounge called The Roost with a fireplace and loft seating. It became one of the most iconic early meeting places in VRChat's social and roleplay communities, later spawning a sister world, The Great Pug - West.",
7
+ "url": "https://vrchat-legends.fandom.com/wiki/The_Great_Pug"
8
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "name": "The Midnight Bar",
3
+ "creator": "[Jmelt] Kurisu",
4
+ "image": "",
5
+ "description": "The Midnight Bar is an Oculus Quest and PCVR bar world commissioned by the group Midnights In Valhalla and built by [Jmelt] Kurisu. Its design draws inspiration from the visual novel [VA-11 Hall-A](https://en.wikipedia.org/wiki/VA-11_Hall-A), centering on an elaborate drink-mixing system where different concoctions produce different effects on the player. What began as a personal streaming space grew into one of VRChat's most-visited bar worlds, racking up several million visits and spawning a wider community of affiliated bar groups.",
6
+ "url": "https://vrchat-legends.fandom.com/wiki/The_Midnight_Bar"
7
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "name": "Void Club",
3
+ "creator": "Lycon",
4
+ "image": "",
5
+ "description": "Void Club is one of VRChat's earliest well-known dance clubs, created in January 2018 and substantially redesigned in April of that year. It combines a bar, dance floor, and private rooms, and for years ran music around the clock as a public gathering spot. As a long-running, high-traffic public lobby it developed a mixed reputation depending on who visited, but remained an iconic fixture of VRChat's early nightlife scene.",
6
+ "url": "https://vrchat-legends.fandom.com/wiki/Void_Club"
7
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "name": "VOLT Dance Club",
3
+ "creator": "DigitrevX",
4
+ "image": "",
5
+ "description": "VOLT Dance Club is a highly detailed mega-club world created by DigitrevX, featuring custom LED wall visuals, dynamic lighting, multiple bars, private rooms, a dart game, and jacuzzis. It's built to feel like a genuine high-end nightclub experience and even includes an optional RTX ray-tracing graphics mode for compatible Nvidia GPUs. The polish and scale of the build have made it a popular destination among VRChat's club and dance community.",
6
+ "url": "https://vrchat-legends.fandom.com/wiki/VOLT_Dance_Club"
7
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "name": "VRChat Home",
3
+ "aliases": "The Hub (former default world)",
4
+ "creator": "VRChat",
5
+ "image": "",
6
+ "description": "VRChat Home is the official default landing world that new players arrive in after finishing the tutorial, replacing the older world known as The Hub and later refreshed by VRChat's own developers. It's set in a calm, space-themed environment with visible stars and galaxies, alien architecture, plants, and decorative motifs like mushrooms, flowers, and rainbows. Signage throughout explains core VRChat features, a mirror area lets new users try on different starter avatars, and portals lead out to a rotating selection of other worlds.",
7
+ "url": "https://vrchat-legends.fandom.com/wiki/VRChat_Home"
8
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "name": "What a Legend!",
3
+ "image": "",
4
+ "description": "What a Legend! is a puzzle-dungeon world originally built as a birthday gift for a VRChat user known as Legend, later released publicly for others to play. Visitors explore a central corridor branching into six themed portal realms, each crafted by a different \"Cheese Guardian\" (including Lakuza, CyanLaser, Mimi, and Phasedragon) with its own puzzles to solve. Collecting all six cheese pieces from these realms unlocks the door to a final room, completing the game-like experience.",
5
+ "url": "https://vrchat-legends.fandom.com/wiki/What_a_Legend!"
6
+ }
package/index.js ADDED
@@ -0,0 +1,207 @@
1
+ const fs = require('fs');
2
+ const path = require('path');
3
+
4
+ const DATA_DIR = path.join(__dirname, 'data');
5
+ const DEFAULT_API_BASE = 'https://api.nekosunevr.co.uk';
6
+ const DEFAULT_API_PATH = '/v5/games/api/gaming-infos';
7
+ const DEFAULT_TIMEOUT_MS = 4000;
8
+
9
+ function apiBase() {
10
+ return (process.env.GAMING_INFOS_API_BASE || DEFAULT_API_BASE).replace(/\/+$/, '');
11
+ }
12
+
13
+ function apiPath() {
14
+ return process.env.GAMING_INFOS_API_PATH || DEFAULT_API_PATH;
15
+ }
16
+
17
+ function apiDisabled() {
18
+ return process.env.GAMING_INFOS_DISABLE_API === '1' || process.env.GAMING_INFOS_DISABLE_API === 'true';
19
+ }
20
+
21
+ function timeoutMs() {
22
+ const raw = Number(process.env.GAMING_INFOS_TIMEOUT_MS);
23
+ return Number.isFinite(raw) && raw > 0 ? raw : DEFAULT_TIMEOUT_MS;
24
+ }
25
+
26
+ // Live lookups go through the NekoSuneVR V5 API first so data can be updated
27
+ // in real time without republishing this package. The bundled JSON under
28
+ // data/ is only the offline fallback for when the API can't be reached.
29
+ async function fetchFromApi(game, type, name) {
30
+ if (apiDisabled() || typeof fetch !== 'function') return null;
31
+
32
+ const url = `${apiBase()}${apiPath()}/${encodeURIComponent(game.toLowerCase())}/${encodeURIComponent(type)}/${encodeURIComponent(name.toLowerCase())}`;
33
+ const controller = new AbortController();
34
+ const timer = setTimeout(() => controller.abort(), timeoutMs());
35
+
36
+ try {
37
+ const res = await fetch(url, { signal: controller.signal });
38
+ if (!res.ok) return null;
39
+ const body = await res.json();
40
+ if (!body || body.success === false) return null;
41
+ return body.data !== undefined ? body.data : body;
42
+ } catch (err) {
43
+ return null;
44
+ } finally {
45
+ clearTimeout(timer);
46
+ }
47
+ }
48
+
49
+ async function loadLocal(game, type, name) {
50
+ const filePath = path.join(DATA_DIR, game.toLowerCase(), type, `${name.toLowerCase()}.json`);
51
+ if (!fs.existsSync(filePath)) {
52
+ throw new Error(`${type} "${name}" not found for game "${game}"`);
53
+ }
54
+
55
+ const raw = await fs.promises.readFile(filePath, 'utf8');
56
+ return JSON.parse(raw);
57
+ }
58
+
59
+ async function fetchListFromApi(game, type) {
60
+ if (apiDisabled() || typeof fetch !== 'function') return null;
61
+
62
+ const url = `${apiBase()}${apiPath()}/${encodeURIComponent(game.toLowerCase())}/${encodeURIComponent(type)}`;
63
+ const controller = new AbortController();
64
+ const timer = setTimeout(() => controller.abort(), timeoutMs());
65
+
66
+ try {
67
+ const res = await fetch(url, { signal: controller.signal });
68
+ if (!res.ok) return null;
69
+ const body = await res.json();
70
+ if (!body || body.success === false) return null;
71
+ const data = body.data !== undefined ? body.data : body;
72
+ return Array.isArray(data) ? data : null;
73
+ } catch (err) {
74
+ return null;
75
+ } finally {
76
+ clearTimeout(timer);
77
+ }
78
+ }
79
+
80
+ async function listLocal(game, type) {
81
+ const dir = path.join(DATA_DIR, game.toLowerCase(), type);
82
+ if (!fs.existsSync(dir)) return [];
83
+
84
+ const files = await fs.promises.readdir(dir);
85
+ const items = [];
86
+ for (const file of files) {
87
+ if (!file.endsWith('.json')) continue;
88
+ const raw = await fs.promises.readFile(path.join(dir, file), 'utf8');
89
+ items.push(JSON.parse(raw));
90
+ }
91
+ return items;
92
+ }
93
+
94
+ async function list(game, type) {
95
+ if (!game || !type) {
96
+ return { error: 'game and type are both required' };
97
+ }
98
+
99
+ const fromApi = await fetchListFromApi(game, type);
100
+ if (fromApi) return fromApi;
101
+
102
+ try {
103
+ return await listLocal(game, type);
104
+ } catch (err) {
105
+ return { error: err.message };
106
+ }
107
+ }
108
+
109
+ async function fetchGamesFromApi() {
110
+ if (apiDisabled() || typeof fetch !== 'function') return null;
111
+
112
+ const url = `${apiBase()}${apiPath()}`;
113
+ const controller = new AbortController();
114
+ const timer = setTimeout(() => controller.abort(), timeoutMs());
115
+
116
+ try {
117
+ const res = await fetch(url, { signal: controller.signal });
118
+ if (!res.ok) return null;
119
+ const body = await res.json();
120
+ if (!body || body.success === false) return null;
121
+ const data = body.data !== undefined ? body.data : body;
122
+ return Array.isArray(data) ? data : null;
123
+ } catch (err) {
124
+ return null;
125
+ } finally {
126
+ clearTimeout(timer);
127
+ }
128
+ }
129
+
130
+ async function listGamesLocal() {
131
+ const entries = await fs.promises.readdir(DATA_DIR, { withFileTypes: true });
132
+ const games = [];
133
+ for (const entry of entries) {
134
+ if (!entry.isDirectory()) continue;
135
+ const metaPath = path.join(DATA_DIR, entry.name, 'meta.json');
136
+ if (!fs.existsSync(metaPath)) continue;
137
+ const raw = await fs.promises.readFile(metaPath, 'utf8');
138
+ games.push(JSON.parse(raw));
139
+ }
140
+ return games;
141
+ }
142
+
143
+ async function games() {
144
+ const fromApi = await fetchGamesFromApi();
145
+ if (fromApi) return fromApi;
146
+
147
+ try {
148
+ return await listGamesLocal();
149
+ } catch (err) {
150
+ return { error: err.message };
151
+ }
152
+ }
153
+
154
+ async function load(game, type, name) {
155
+ if (!game || !type || !name) {
156
+ return { error: 'game, type, and name are all required' };
157
+ }
158
+
159
+ const fromApi = await fetchFromApi(game, type, name);
160
+ if (fromApi) return fromApi;
161
+
162
+ try {
163
+ return await loadLocal(game, type, name);
164
+ } catch (err) {
165
+ return { error: err.message };
166
+ }
167
+ }
168
+
169
+ async function loadGameMeta(game) {
170
+ if (!game) return { error: 'game is required' };
171
+
172
+ const fromApi = await fetchFromApi(game, 'meta', game);
173
+ if (fromApi) return fromApi;
174
+
175
+ try {
176
+ const filePath = path.join(DATA_DIR, game.toLowerCase(), 'meta.json');
177
+ if (!fs.existsSync(filePath)) {
178
+ throw new Error(`meta info for game "${game}" not found`);
179
+ }
180
+
181
+ const raw = await fs.promises.readFile(filePath, 'utf8');
182
+ return JSON.parse(raw);
183
+ } catch (err) {
184
+ return { error: err.message };
185
+ }
186
+ }
187
+
188
+ module.exports = {
189
+ // All supported games, e.g. Games() -> [data/vrchat/meta.json, data/genshinimpact/meta.json, ...]
190
+ Games: () => games(),
191
+
192
+ // Game-level info, e.g. Game('vrchat') -> data/vrchat/meta.json
193
+ Game: (game) => loadGameMeta(game),
194
+
195
+ // Entity lookups, scoped per game: Worlds('vrchat', 'theblackcat')
196
+ Worlds: (game, name) => load(game, 'worlds', name),
197
+ Groups: (game, name) => load(game, 'groups', name),
198
+ Players: (game, name) => load(game, 'players', name),
199
+ Characters: (game, name) => load(game, 'characters', name),
200
+
201
+ // Generic escape hatch for entity types not covered above
202
+ // (new games may need types other than worlds/groups/players/characters)
203
+ Get: (game, type, name) => load(game, type, name),
204
+
205
+ // Full listing of every entry of a given type for a game, e.g. List('genshinimpact', 'characters')
206
+ List: (game, type) => list(game, type),
207
+ };
package/package.json ADDED
@@ -0,0 +1,30 @@
1
+ {
2
+ "name": "@nekosuneprojects/gaming-infos",
3
+ "version": "2.1.0",
4
+ "description": "Multi-game data loader (VRChat, Genshin Impact, and more to come) for worlds, groups, players, and characters. Fetches live from the NekoSuneVR V5 API with local JSON fallback.",
5
+ "main": "index.js",
6
+ "type": "commonjs",
7
+ "engines": {
8
+ "node": ">=18"
9
+ },
10
+ "repository": {
11
+ "type": "git",
12
+ "url": "https://github.com/NekoSuneProjects/gaming-infos.git"
13
+ },
14
+ "bugs": {
15
+ "url": "https://github.com/NekoSuneProjects/gaming-infos/issues"
16
+ },
17
+ "funding": "https://github.com/NekoSuneProjects/gaming-infos?sponsor",
18
+ "keywords": [
19
+ "gaming",
20
+ "infos",
21
+ "vrchat",
22
+ "genshin-impact",
23
+ "worlds",
24
+ "groups",
25
+ "players",
26
+ "characters"
27
+ ],
28
+ "author": "NekoSuneVR",
29
+ "license": "MIT"
30
+ }