@takaro/modules 0.0.0-next.0da151e

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 (352) hide show
  1. package/README.md +3 -0
  2. package/dist/BuiltinModule.d.ts +62 -0
  3. package/dist/BuiltinModule.d.ts.map +1 -0
  4. package/dist/BuiltinModule.js +245 -0
  5. package/dist/BuiltinModule.js.map +1 -0
  6. package/dist/community-modules.json +21 -0
  7. package/dist/dto/base.d.ts +7 -0
  8. package/dist/dto/base.d.ts.map +1 -0
  9. package/dist/dto/base.js +28 -0
  10. package/dist/dto/base.js.map +1 -0
  11. package/dist/dto/discordEvents.d.ts +32 -0
  12. package/dist/dto/discordEvents.d.ts.map +1 -0
  13. package/dist/dto/discordEvents.js +92 -0
  14. package/dist/dto/discordEvents.js.map +1 -0
  15. package/dist/dto/gameEvents.d.ts +83 -0
  16. package/dist/dto/gameEvents.d.ts.map +1 -0
  17. package/dist/dto/gameEvents.js +205 -0
  18. package/dist/dto/gameEvents.js.map +1 -0
  19. package/dist/dto/index.d.ts +54 -0
  20. package/dist/dto/index.d.ts.map +1 -0
  21. package/dist/dto/index.js +18 -0
  22. package/dist/dto/index.js.map +1 -0
  23. package/dist/dto/takaroEvents.d.ts +276 -0
  24. package/dist/dto/takaroEvents.d.ts.map +1 -0
  25. package/dist/dto/takaroEvents.js +794 -0
  26. package/dist/dto/takaroEvents.js.map +1 -0
  27. package/dist/main.d.ts +5 -0
  28. package/dist/main.d.ts.map +1 -0
  29. package/dist/main.js +35 -0
  30. package/dist/main.js.map +1 -0
  31. package/dist/modules/chatBridge/hooks/DiscordToGame.d.ts +2 -0
  32. package/dist/modules/chatBridge/hooks/DiscordToGame.d.ts.map +1 -0
  33. package/dist/modules/chatBridge/hooks/DiscordToGame.js +18 -0
  34. package/dist/modules/chatBridge/hooks/DiscordToGame.js.map +1 -0
  35. package/dist/modules/chatBridge/hooks/GameToDiscord.d.ts +2 -0
  36. package/dist/modules/chatBridge/hooks/GameToDiscord.d.ts.map +1 -0
  37. package/dist/modules/chatBridge/hooks/GameToDiscord.js +14 -0
  38. package/dist/modules/chatBridge/hooks/GameToDiscord.js.map +1 -0
  39. package/dist/modules/chatBridge/hooks/PlayerConnected.d.ts +2 -0
  40. package/dist/modules/chatBridge/hooks/PlayerConnected.d.ts.map +1 -0
  41. package/dist/modules/chatBridge/hooks/PlayerConnected.js +9 -0
  42. package/dist/modules/chatBridge/hooks/PlayerConnected.js.map +1 -0
  43. package/dist/modules/chatBridge/hooks/PlayerDisconnected.d.ts +2 -0
  44. package/dist/modules/chatBridge/hooks/PlayerDisconnected.d.ts.map +1 -0
  45. package/dist/modules/chatBridge/hooks/PlayerDisconnected.js +9 -0
  46. package/dist/modules/chatBridge/hooks/PlayerDisconnected.js.map +1 -0
  47. package/dist/modules/chatBridge/index.d.ts +5 -0
  48. package/dist/modules/chatBridge/index.d.ts.map +1 -0
  49. package/dist/modules/chatBridge/index.js +64 -0
  50. package/dist/modules/chatBridge/index.js.map +1 -0
  51. package/dist/modules/dailyRewards/commands/daily.d.ts +2 -0
  52. package/dist/modules/dailyRewards/commands/daily.d.ts.map +1 -0
  53. package/dist/modules/dailyRewards/commands/daily.js +103 -0
  54. package/dist/modules/dailyRewards/commands/daily.js.map +1 -0
  55. package/dist/modules/dailyRewards/commands/streak.d.ts +2 -0
  56. package/dist/modules/dailyRewards/commands/streak.d.ts.map +1 -0
  57. package/dist/modules/dailyRewards/commands/streak.js +34 -0
  58. package/dist/modules/dailyRewards/commands/streak.js.map +1 -0
  59. package/dist/modules/dailyRewards/commands/topstreak.d.ts +2 -0
  60. package/dist/modules/dailyRewards/commands/topstreak.d.ts.map +1 -0
  61. package/dist/modules/dailyRewards/commands/topstreak.js +44 -0
  62. package/dist/modules/dailyRewards/commands/topstreak.js.map +1 -0
  63. package/dist/modules/dailyRewards/functions/utils.d.ts +6 -0
  64. package/dist/modules/dailyRewards/functions/utils.d.ts.map +1 -0
  65. package/dist/modules/dailyRewards/functions/utils.js +32 -0
  66. package/dist/modules/dailyRewards/functions/utils.js.map +1 -0
  67. package/dist/modules/dailyRewards/hooks/dailyLoginCheck.d.ts +2 -0
  68. package/dist/modules/dailyRewards/hooks/dailyLoginCheck.d.ts.map +1 -0
  69. package/dist/modules/dailyRewards/hooks/dailyLoginCheck.js +19 -0
  70. package/dist/modules/dailyRewards/hooks/dailyLoginCheck.js.map +1 -0
  71. package/dist/modules/dailyRewards/index.d.ts +5 -0
  72. package/dist/modules/dailyRewards/index.d.ts.map +1 -0
  73. package/dist/modules/dailyRewards/index.js +127 -0
  74. package/dist/modules/dailyRewards/index.js.map +1 -0
  75. package/dist/modules/economyUtils/commands/balance.d.ts +2 -0
  76. package/dist/modules/economyUtils/commands/balance.d.ts.map +1 -0
  77. package/dist/modules/economyUtils/commands/balance.js +7 -0
  78. package/dist/modules/economyUtils/commands/balance.js.map +1 -0
  79. package/dist/modules/economyUtils/commands/claim.d.ts +2 -0
  80. package/dist/modules/economyUtils/commands/claim.d.ts.map +1 -0
  81. package/dist/modules/economyUtils/commands/claim.js +35 -0
  82. package/dist/modules/economyUtils/commands/claim.js.map +1 -0
  83. package/dist/modules/economyUtils/commands/confirmTransfer.d.ts +2 -0
  84. package/dist/modules/economyUtils/commands/confirmTransfer.d.ts.map +1 -0
  85. package/dist/modules/economyUtils/commands/confirmTransfer.js +38 -0
  86. package/dist/modules/economyUtils/commands/confirmTransfer.js.map +1 -0
  87. package/dist/modules/economyUtils/commands/grantCurrency.d.ts +2 -0
  88. package/dist/modules/economyUtils/commands/grantCurrency.d.ts.map +1 -0
  89. package/dist/modules/economyUtils/commands/grantCurrency.js +28 -0
  90. package/dist/modules/economyUtils/commands/grantCurrency.js.map +1 -0
  91. package/dist/modules/economyUtils/commands/revokeCurrency.d.ts +2 -0
  92. package/dist/modules/economyUtils/commands/revokeCurrency.d.ts.map +1 -0
  93. package/dist/modules/economyUtils/commands/revokeCurrency.js +28 -0
  94. package/dist/modules/economyUtils/commands/revokeCurrency.js.map +1 -0
  95. package/dist/modules/economyUtils/commands/shop.d.ts +2 -0
  96. package/dist/modules/economyUtils/commands/shop.d.ts.map +1 -0
  97. package/dist/modules/economyUtils/commands/shop.js +69 -0
  98. package/dist/modules/economyUtils/commands/shop.js.map +1 -0
  99. package/dist/modules/economyUtils/commands/topCurrency.d.ts +2 -0
  100. package/dist/modules/economyUtils/commands/topCurrency.d.ts.map +1 -0
  101. package/dist/modules/economyUtils/commands/topCurrency.js +22 -0
  102. package/dist/modules/economyUtils/commands/topCurrency.js.map +1 -0
  103. package/dist/modules/economyUtils/commands/transfer.d.ts +2 -0
  104. package/dist/modules/economyUtils/commands/transfer.d.ts.map +1 -0
  105. package/dist/modules/economyUtils/commands/transfer.js +55 -0
  106. package/dist/modules/economyUtils/commands/transfer.js.map +1 -0
  107. package/dist/modules/economyUtils/cronJobs/zombieKillReward.d.ts +2 -0
  108. package/dist/modules/economyUtils/cronJobs/zombieKillReward.d.ts.map +1 -0
  109. package/dist/modules/economyUtils/cronJobs/zombieKillReward.js +66 -0
  110. package/dist/modules/economyUtils/cronJobs/zombieKillReward.js.map +1 -0
  111. package/dist/modules/economyUtils/index.d.ts +5 -0
  112. package/dist/modules/economyUtils/index.d.ts.map +1 -0
  113. package/dist/modules/economyUtils/index.js +192 -0
  114. package/dist/modules/economyUtils/index.js.map +1 -0
  115. package/dist/modules/geoBlock/hooks/IPDetected.d.ts +2 -0
  116. package/dist/modules/geoBlock/hooks/IPDetected.d.ts.map +1 -0
  117. package/dist/modules/geoBlock/hooks/IPDetected.js +50 -0
  118. package/dist/modules/geoBlock/hooks/IPDetected.js.map +1 -0
  119. package/dist/modules/geoBlock/index.d.ts +9 -0
  120. package/dist/modules/geoBlock/index.d.ts.map +1 -0
  121. package/dist/modules/geoBlock/index.js +329 -0
  122. package/dist/modules/geoBlock/index.js.map +1 -0
  123. package/dist/modules/gimme/commands/gimme.d.ts +2 -0
  124. package/dist/modules/gimme/commands/gimme.d.ts.map +1 -0
  125. package/dist/modules/gimme/commands/gimme.js +25 -0
  126. package/dist/modules/gimme/commands/gimme.js.map +1 -0
  127. package/dist/modules/gimme/index.d.ts +5 -0
  128. package/dist/modules/gimme/index.d.ts.map +1 -0
  129. package/dist/modules/gimme/index.js +75 -0
  130. package/dist/modules/gimme/index.js.map +1 -0
  131. package/dist/modules/highPingKicker/cronJobs/Ping check.d.ts +2 -0
  132. package/dist/modules/highPingKicker/cronJobs/Ping check.d.ts.map +1 -0
  133. package/dist/modules/highPingKicker/cronJobs/Ping check.js +59 -0
  134. package/dist/modules/highPingKicker/cronJobs/Ping check.js.map +1 -0
  135. package/dist/modules/highPingKicker/index.d.ts +5 -0
  136. package/dist/modules/highPingKicker/index.d.ts.map +1 -0
  137. package/dist/modules/highPingKicker/index.js +44 -0
  138. package/dist/modules/highPingKicker/index.js.map +1 -0
  139. package/dist/modules/lottery/commands/buyTicket.d.ts +2 -0
  140. package/dist/modules/lottery/commands/buyTicket.d.ts.map +1 -0
  141. package/dist/modules/lottery/commands/buyTicket.js +51 -0
  142. package/dist/modules/lottery/commands/buyTicket.js.map +1 -0
  143. package/dist/modules/lottery/commands/nextDraw.d.ts +2 -0
  144. package/dist/modules/lottery/commands/nextDraw.d.ts.map +1 -0
  145. package/dist/modules/lottery/commands/nextDraw.js +34 -0
  146. package/dist/modules/lottery/commands/nextDraw.js.map +1 -0
  147. package/dist/modules/lottery/commands/viewTickets.d.ts +2 -0
  148. package/dist/modules/lottery/commands/viewTickets.d.ts.map +1 -0
  149. package/dist/modules/lottery/commands/viewTickets.js +20 -0
  150. package/dist/modules/lottery/commands/viewTickets.js.map +1 -0
  151. package/dist/modules/lottery/cronJobs/drawLottery.d.ts +2 -0
  152. package/dist/modules/lottery/cronJobs/drawLottery.d.ts.map +1 -0
  153. package/dist/modules/lottery/cronJobs/drawLottery.js +96 -0
  154. package/dist/modules/lottery/cronJobs/drawLottery.js.map +1 -0
  155. package/dist/modules/lottery/index.d.ts +5 -0
  156. package/dist/modules/lottery/index.d.ts.map +1 -0
  157. package/dist/modules/lottery/index.js +85 -0
  158. package/dist/modules/lottery/index.js.map +1 -0
  159. package/dist/modules/playerOnboarding/commands/starterkit.d.ts +2 -0
  160. package/dist/modules/playerOnboarding/commands/starterkit.d.ts.map +1 -0
  161. package/dist/modules/playerOnboarding/commands/starterkit.js +47 -0
  162. package/dist/modules/playerOnboarding/commands/starterkit.js.map +1 -0
  163. package/dist/modules/playerOnboarding/hooks/playerConnected.d.ts +2 -0
  164. package/dist/modules/playerOnboarding/hooks/playerConnected.d.ts.map +1 -0
  165. package/dist/modules/playerOnboarding/hooks/playerConnected.js +11 -0
  166. package/dist/modules/playerOnboarding/hooks/playerConnected.js.map +1 -0
  167. package/dist/modules/playerOnboarding/index.d.ts +5 -0
  168. package/dist/modules/playerOnboarding/index.d.ts.map +1 -0
  169. package/dist/modules/playerOnboarding/index.js +83 -0
  170. package/dist/modules/playerOnboarding/index.js.map +1 -0
  171. package/dist/modules/serverMessages/cronJobs/Automated message.d.ts +2 -0
  172. package/dist/modules/serverMessages/cronJobs/Automated message.d.ts.map +1 -0
  173. package/dist/modules/serverMessages/cronJobs/Automated message.js +41 -0
  174. package/dist/modules/serverMessages/cronJobs/Automated message.js.map +1 -0
  175. package/dist/modules/serverMessages/index.d.ts +5 -0
  176. package/dist/modules/serverMessages/index.d.ts.map +1 -0
  177. package/dist/modules/serverMessages/index.js +45 -0
  178. package/dist/modules/serverMessages/index.js.map +1 -0
  179. package/dist/modules/teleports/commands/deletetp.d.ts +2 -0
  180. package/dist/modules/teleports/commands/deletetp.d.ts.map +1 -0
  181. package/dist/modules/teleports/commands/deletetp.js +20 -0
  182. package/dist/modules/teleports/commands/deletetp.js.map +1 -0
  183. package/dist/modules/teleports/commands/deletewaypoint.d.ts +2 -0
  184. package/dist/modules/teleports/commands/deletewaypoint.d.ts.map +1 -0
  185. package/dist/modules/teleports/commands/deletewaypoint.js +20 -0
  186. package/dist/modules/teleports/commands/deletewaypoint.js.map +1 -0
  187. package/dist/modules/teleports/commands/listwaypoints.d.ts +2 -0
  188. package/dist/modules/teleports/commands/listwaypoints.d.ts.map +1 -0
  189. package/dist/modules/teleports/commands/listwaypoints.js +17 -0
  190. package/dist/modules/teleports/commands/listwaypoints.js.map +1 -0
  191. package/dist/modules/teleports/commands/setprivate.d.ts +2 -0
  192. package/dist/modules/teleports/commands/setprivate.d.ts.map +1 -0
  193. package/dist/modules/teleports/commands/setprivate.js +29 -0
  194. package/dist/modules/teleports/commands/setprivate.js.map +1 -0
  195. package/dist/modules/teleports/commands/setpublic.d.ts +2 -0
  196. package/dist/modules/teleports/commands/setpublic.d.ts.map +1 -0
  197. package/dist/modules/teleports/commands/setpublic.js +45 -0
  198. package/dist/modules/teleports/commands/setpublic.js.map +1 -0
  199. package/dist/modules/teleports/commands/settp.d.ts +2 -0
  200. package/dist/modules/teleports/commands/settp.d.ts.map +1 -0
  201. package/dist/modules/teleports/commands/settp.js +40 -0
  202. package/dist/modules/teleports/commands/settp.js.map +1 -0
  203. package/dist/modules/teleports/commands/setwaypoint.d.ts +2 -0
  204. package/dist/modules/teleports/commands/setwaypoint.d.ts.map +1 -0
  205. package/dist/modules/teleports/commands/setwaypoint.js +28 -0
  206. package/dist/modules/teleports/commands/setwaypoint.js.map +1 -0
  207. package/dist/modules/teleports/commands/teleport.d.ts +2 -0
  208. package/dist/modules/teleports/commands/teleport.d.ts.map +1 -0
  209. package/dist/modules/teleports/commands/teleport.js +68 -0
  210. package/dist/modules/teleports/commands/teleport.js.map +1 -0
  211. package/dist/modules/teleports/commands/teleportwaypoint.d.ts +2 -0
  212. package/dist/modules/teleports/commands/teleportwaypoint.d.ts.map +1 -0
  213. package/dist/modules/teleports/commands/teleportwaypoint.js +43 -0
  214. package/dist/modules/teleports/commands/teleportwaypoint.js.map +1 -0
  215. package/dist/modules/teleports/commands/tplist.d.ts +2 -0
  216. package/dist/modules/teleports/commands/tplist.d.ts.map +1 -0
  217. package/dist/modules/teleports/commands/tplist.js +46 -0
  218. package/dist/modules/teleports/commands/tplist.js.map +1 -0
  219. package/dist/modules/teleports/cronJobs/Waypoint reconciler.d.ts +2 -0
  220. package/dist/modules/teleports/cronJobs/Waypoint reconciler.d.ts.map +1 -0
  221. package/dist/modules/teleports/cronJobs/Waypoint reconciler.js +6 -0
  222. package/dist/modules/teleports/cronJobs/Waypoint reconciler.js.map +1 -0
  223. package/dist/modules/teleports/functions/utils.d.ts +14 -0
  224. package/dist/modules/teleports/functions/utils.d.ts.map +1 -0
  225. package/dist/modules/teleports/functions/utils.js +156 -0
  226. package/dist/modules/teleports/functions/utils.js.map +1 -0
  227. package/dist/modules/teleports/index.d.ts +5 -0
  228. package/dist/modules/teleports/index.d.ts.map +1 -0
  229. package/dist/modules/teleports/index.js +208 -0
  230. package/dist/modules/teleports/index.js.map +1 -0
  231. package/dist/modules/timedShutdown/cronJobs/Shutdown.d.ts +2 -0
  232. package/dist/modules/timedShutdown/cronJobs/Shutdown.d.ts.map +1 -0
  233. package/dist/modules/timedShutdown/cronJobs/Shutdown.js +7 -0
  234. package/dist/modules/timedShutdown/cronJobs/Shutdown.js.map +1 -0
  235. package/dist/modules/timedShutdown/cronJobs/warning.d.ts +2 -0
  236. package/dist/modules/timedShutdown/cronJobs/warning.d.ts.map +1 -0
  237. package/dist/modules/timedShutdown/cronJobs/warning.js +10 -0
  238. package/dist/modules/timedShutdown/cronJobs/warning.js.map +1 -0
  239. package/dist/modules/timedShutdown/index.d.ts +5 -0
  240. package/dist/modules/timedShutdown/index.d.ts.map +1 -0
  241. package/dist/modules/timedShutdown/index.js +43 -0
  242. package/dist/modules/timedShutdown/index.js.map +1 -0
  243. package/dist/modules/utils/commands/help.d.ts +2 -0
  244. package/dist/modules/utils/commands/help.d.ts.map +1 -0
  245. package/dist/modules/utils/commands/help.js +84 -0
  246. package/dist/modules/utils/commands/help.js.map +1 -0
  247. package/dist/modules/utils/commands/ping.d.ts +2 -0
  248. package/dist/modules/utils/commands/ping.d.ts.map +1 -0
  249. package/dist/modules/utils/commands/ping.js +6 -0
  250. package/dist/modules/utils/commands/ping.js.map +1 -0
  251. package/dist/modules/utils/index.d.ts +5 -0
  252. package/dist/modules/utils/index.d.ts.map +1 -0
  253. package/dist/modules/utils/index.js +52 -0
  254. package/dist/modules/utils/index.js.map +1 -0
  255. package/dist/modules.json +757 -0
  256. package/package.json +17 -0
  257. package/scripts/buildBuiltinJson.ts +81 -0
  258. package/src/BuiltinModule.ts +159 -0
  259. package/src/__tests__/aliases.integration.test.ts +90 -0
  260. package/src/__tests__/bugRepros.integration.test.ts +485 -0
  261. package/src/__tests__/builtinmodule.unit.test.ts +15 -0
  262. package/src/__tests__/commandArgs.integration.test.ts +291 -0
  263. package/src/__tests__/crossServerPlayer.integration.test.ts +176 -0
  264. package/src/__tests__/economy/claim.integration.test.ts +250 -0
  265. package/src/__tests__/economy/economyUtils.integration.test.ts +495 -0
  266. package/src/__tests__/economy/shop.integration.test.ts +177 -0
  267. package/src/__tests__/economy/zombieKillReward.integration.test.ts +293 -0
  268. package/src/__tests__/geoblock.integration.test.ts +322 -0
  269. package/src/__tests__/gimme.integration.test.ts +106 -0
  270. package/src/__tests__/help.integration.test.ts +314 -0
  271. package/src/__tests__/highPingKicker.integration.test.ts +618 -0
  272. package/src/__tests__/lottery.integration.test.ts +344 -0
  273. package/src/__tests__/modulePermission.integration.test.ts +387 -0
  274. package/src/__tests__/onboarding.integration.test.ts +122 -0
  275. package/src/__tests__/ping.integration.test.ts +36 -0
  276. package/src/__tests__/roleExpiry.integration.test.ts +78 -0
  277. package/src/__tests__/serverMessages.integration.test.ts +116 -0
  278. package/src/__tests__/systemConfigCooldown.integration.test.ts +84 -0
  279. package/src/__tests__/systemConfigCost.integration.test.ts +194 -0
  280. package/src/__tests__/teleports/listtp.integration.test.ts +189 -0
  281. package/src/__tests__/teleports/publicteleports.integration.test.ts +345 -0
  282. package/src/__tests__/teleports/teleport.integration.test.ts +153 -0
  283. package/src/__tests__/teleports/tpManagement.integration.test.ts +175 -0
  284. package/src/__tests__/teleports/waypoints.integration.test.ts +832 -0
  285. package/src/community-modules/README.md +5 -0
  286. package/src/community-modules/modules/vote.json +19 -0
  287. package/src/dto/base.ts +13 -0
  288. package/src/dto/discordEvents.ts +69 -0
  289. package/src/dto/gameEvents.ts +159 -0
  290. package/src/dto/index.ts +25 -0
  291. package/src/dto/takaroEvents.ts +525 -0
  292. package/src/main.ts +47 -0
  293. package/src/modules/.eslintrc +5 -0
  294. package/src/modules/chatBridge/hooks/DiscordToGame.js +18 -0
  295. package/src/modules/chatBridge/hooks/GameToDiscord.js +18 -0
  296. package/src/modules/chatBridge/hooks/PlayerConnected.js +11 -0
  297. package/src/modules/chatBridge/hooks/PlayerDisconnected.js +11 -0
  298. package/src/modules/chatBridge/index.ts +64 -0
  299. package/src/modules/dailyRewards/commands/daily.js +114 -0
  300. package/src/modules/dailyRewards/commands/streak.js +42 -0
  301. package/src/modules/dailyRewards/commands/topstreak.js +54 -0
  302. package/src/modules/dailyRewards/functions/utils.js +36 -0
  303. package/src/modules/dailyRewards/hooks/dailyLoginCheck.js +24 -0
  304. package/src/modules/dailyRewards/index.ts +138 -0
  305. package/src/modules/economyUtils/commands/balance.js +8 -0
  306. package/src/modules/economyUtils/commands/claim.js +42 -0
  307. package/src/modules/economyUtils/commands/confirmTransfer.js +55 -0
  308. package/src/modules/economyUtils/commands/grantCurrency.js +34 -0
  309. package/src/modules/economyUtils/commands/revokeCurrency.js +34 -0
  310. package/src/modules/economyUtils/commands/shop.js +87 -0
  311. package/src/modules/economyUtils/commands/topCurrency.js +29 -0
  312. package/src/modules/economyUtils/commands/transfer.js +73 -0
  313. package/src/modules/economyUtils/cronJobs/zombieKillReward.js +82 -0
  314. package/src/modules/economyUtils/index.ts +197 -0
  315. package/src/modules/geoBlock/hooks/IPDetected.js +53 -0
  316. package/src/modules/geoBlock/index.ts +333 -0
  317. package/src/modules/gimme/commands/gimme.js +30 -0
  318. package/src/modules/gimme/index.ts +76 -0
  319. package/src/modules/highPingKicker/cronJobs/Ping check.js +68 -0
  320. package/src/modules/highPingKicker/index.ts +44 -0
  321. package/src/modules/lottery/commands/buyTicket.js +64 -0
  322. package/src/modules/lottery/commands/nextDraw.js +47 -0
  323. package/src/modules/lottery/commands/viewTickets.js +28 -0
  324. package/src/modules/lottery/cronJobs/drawLottery.js +124 -0
  325. package/src/modules/lottery/index.ts +86 -0
  326. package/src/modules/playerOnboarding/commands/starterkit.js +61 -0
  327. package/src/modules/playerOnboarding/hooks/playerConnected.js +14 -0
  328. package/src/modules/playerOnboarding/index.ts +86 -0
  329. package/src/modules/serverMessages/cronJobs/Automated message.js +47 -0
  330. package/src/modules/serverMessages/index.ts +46 -0
  331. package/src/modules/teleports/commands/deletetp.js +25 -0
  332. package/src/modules/teleports/commands/deletewaypoint.js +24 -0
  333. package/src/modules/teleports/commands/listwaypoints.js +23 -0
  334. package/src/modules/teleports/commands/setprivate.js +39 -0
  335. package/src/modules/teleports/commands/setpublic.js +60 -0
  336. package/src/modules/teleports/commands/settp.js +50 -0
  337. package/src/modules/teleports/commands/setwaypoint.js +31 -0
  338. package/src/modules/teleports/commands/teleport.js +84 -0
  339. package/src/modules/teleports/commands/teleportwaypoint.js +57 -0
  340. package/src/modules/teleports/commands/tplist.js +62 -0
  341. package/src/modules/teleports/cronJobs/Waypoint reconciler.js +7 -0
  342. package/src/modules/teleports/functions/utils.js +189 -0
  343. package/src/modules/teleports/index.ts +217 -0
  344. package/src/modules/timedShutdown/cronJobs/Shutdown.js +8 -0
  345. package/src/modules/timedShutdown/cronJobs/warning.js +13 -0
  346. package/src/modules/timedShutdown/index.ts +45 -0
  347. package/src/modules/utils/commands/help.js +100 -0
  348. package/src/modules/utils/commands/ping.js +7 -0
  349. package/src/modules/utils/index.ts +53 -0
  350. package/tsconfig.build.json +10 -0
  351. package/tsconfig.json +9 -0
  352. package/typedoc.json +3 -0
@@ -0,0 +1,116 @@
1
+ import { IntegrationTest, expect, IModuleTestsSetupData, modulesTestSetup, EventsAwaiter } from '@takaro/test';
2
+ import { GameEvents } from '../dto/index.js';
3
+ import { describe } from 'node:test';
4
+
5
+ const group = 'Server messages';
6
+
7
+ const tests = [
8
+ new IntegrationTest<IModuleTestsSetupData>({
9
+ group,
10
+ snapshot: false,
11
+ setup: modulesTestSetup,
12
+ name: 'Default install sends the default message',
13
+ test: async function () {
14
+ await this.client.module.moduleInstallationsControllerInstallModule({
15
+ gameServerId: this.setupData.gameserver.id,
16
+ versionId: this.setupData.serverMessagesModule.latestVersion.id,
17
+ });
18
+
19
+ const events = (await new EventsAwaiter().connect(this.client)).waitForEvents(GameEvents.CHAT_MESSAGE);
20
+
21
+ await this.client.cronjob.cronJobControllerTrigger({
22
+ cronjobId: this.setupData.serverMessagesModule.latestVersion.cronJobs[0].id,
23
+ gameServerId: this.setupData.gameserver.id,
24
+ moduleId: this.setupData.serverMessagesModule.id,
25
+ });
26
+
27
+ expect((await events).length).to.be.eq(1);
28
+ expect((await events)[0].data.meta.msg).to.be.eq(
29
+ "This is an automated message, don't forget to read the server rules!",
30
+ );
31
+ },
32
+ }),
33
+ new IntegrationTest<IModuleTestsSetupData>({
34
+ group,
35
+ snapshot: false,
36
+ setup: modulesTestSetup,
37
+ name: 'Can override default message via userConfig',
38
+ test: async function () {
39
+ await this.client.module.moduleInstallationsControllerInstallModule({
40
+ gameServerId: this.setupData.gameserver.id,
41
+ versionId: this.setupData.serverMessagesModule.latestVersion.id,
42
+ userConfig: JSON.stringify({
43
+ messages: ['This is a custom message'],
44
+ }),
45
+ });
46
+
47
+ const events = (await new EventsAwaiter().connect(this.client)).waitForEvents(GameEvents.CHAT_MESSAGE);
48
+
49
+ await this.client.cronjob.cronJobControllerTrigger({
50
+ cronjobId: this.setupData.serverMessagesModule.latestVersion.cronJobs[0].id,
51
+ gameServerId: this.setupData.gameserver.id,
52
+ moduleId: this.setupData.serverMessagesModule.id,
53
+ });
54
+
55
+ expect((await events).length).to.be.eq(1);
56
+ expect((await events)[0].data.meta.msg).to.be.eq('This is a custom message');
57
+ },
58
+ }),
59
+ new IntegrationTest<IModuleTestsSetupData>({
60
+ group,
61
+ snapshot: false,
62
+ setup: modulesTestSetup,
63
+ name: 'Can override default message via userConfig with multiple messages',
64
+ test: async function () {
65
+ await this.client.module.moduleInstallationsControllerInstallModule({
66
+ gameServerId: this.setupData.gameserver.id,
67
+ versionId: this.setupData.serverMessagesModule.latestVersion.id,
68
+ userConfig: JSON.stringify({
69
+ messages: ['Test message 1', 'Test message 2'],
70
+ }),
71
+ });
72
+
73
+ // We should see each of our test messages at least once
74
+
75
+ const firstEvents = (await new EventsAwaiter().connect(this.client)).waitForEvents(GameEvents.CHAT_MESSAGE, 1);
76
+
77
+ await this.client.cronjob.cronJobControllerTrigger({
78
+ cronjobId: this.setupData.serverMessagesModule.latestVersion.cronJobs[0].id,
79
+ gameServerId: this.setupData.gameserver.id,
80
+ moduleId: this.setupData.serverMessagesModule.id,
81
+ });
82
+
83
+ expect((await firstEvents).length).to.be.eq(1);
84
+ expect((await firstEvents)[0].data.meta.msg).to.be.eq('Test message 1');
85
+
86
+ const secondEvents = (await new EventsAwaiter().connect(this.client)).waitForEvents(GameEvents.CHAT_MESSAGE, 1);
87
+
88
+ await this.client.cronjob.cronJobControllerTrigger({
89
+ cronjobId: this.setupData.serverMessagesModule.latestVersion.cronJobs[0].id,
90
+ gameServerId: this.setupData.gameserver.id,
91
+ moduleId: this.setupData.serverMessagesModule.id,
92
+ });
93
+
94
+ expect((await secondEvents).length).to.be.eq(1);
95
+ expect((await secondEvents)[0].data.meta.msg).to.be.eq('Test message 2');
96
+
97
+ // After this, it should loop back to the first message
98
+ const thirdEvents = (await new EventsAwaiter().connect(this.client)).waitForEvents(GameEvents.CHAT_MESSAGE, 1);
99
+
100
+ await this.client.cronjob.cronJobControllerTrigger({
101
+ cronjobId: this.setupData.serverMessagesModule.latestVersion.cronJobs[0].id,
102
+ gameServerId: this.setupData.gameserver.id,
103
+ moduleId: this.setupData.serverMessagesModule.id,
104
+ });
105
+
106
+ expect((await thirdEvents).length).to.be.eq(1);
107
+ expect((await thirdEvents)[0].data.meta.msg).to.be.eq('Test message 1');
108
+ },
109
+ }),
110
+ ];
111
+
112
+ describe(group, function () {
113
+ tests.forEach((test) => {
114
+ test.run();
115
+ });
116
+ });
@@ -0,0 +1,84 @@
1
+ import { IntegrationTest, expect, IModuleTestsSetupData, modulesTestSetup, EventsAwaiter } from '@takaro/test';
2
+ import { HookEvents } from '../dto/index.js';
3
+ import { describe } from 'node:test';
4
+
5
+ const group = 'System config - cooldown';
6
+
7
+ const customSetup = async function (this: IntegrationTest<IModuleTestsSetupData>): Promise<IModuleTestsSetupData> {
8
+ const setupData = await modulesTestSetup.bind(this)();
9
+
10
+ await this.client.module.moduleInstallationsControllerInstallModule({
11
+ gameServerId: setupData.gameserver.id,
12
+ versionId: setupData.utilsModule.latestVersion.id,
13
+ systemConfig: JSON.stringify({
14
+ commands: {
15
+ ping: {
16
+ cooldown: 60,
17
+ },
18
+ },
19
+ }),
20
+ });
21
+ return setupData;
22
+ };
23
+
24
+ const tests = [
25
+ new IntegrationTest<IModuleTestsSetupData>({
26
+ group,
27
+ snapshot: false,
28
+ setup: customSetup,
29
+ name: 'Returns error when player tries to execute command that is on cooldown',
30
+ test: async function () {
31
+ const events = (await new EventsAwaiter().connect(this.client)).waitForEvents(HookEvents.COMMAND_EXECUTED, 1);
32
+ await this.client.command.commandControllerTrigger(this.setupData.gameserver.id, {
33
+ msg: '/ping',
34
+ playerId: this.setupData.players[0].id,
35
+ });
36
+
37
+ expect((await events).length).to.be.eq(1);
38
+
39
+ const events2 = (await new EventsAwaiter().connect(this.client)).waitForEvents(HookEvents.CHAT_MESSAGE, 1);
40
+ await this.client.command.commandControllerTrigger(this.setupData.gameserver.id, {
41
+ msg: '/ping',
42
+ playerId: this.setupData.players[0].id,
43
+ });
44
+
45
+ expect((await events2).length).to.be.eq(1);
46
+ expect((await events2)[0].data.meta.msg).to.match(
47
+ /This command can only be executed once every 60 seconds\. You can execute it again at /,
48
+ );
49
+ },
50
+ }),
51
+ new IntegrationTest<IModuleTestsSetupData>({
52
+ group,
53
+ snapshot: false,
54
+ attempts: 5,
55
+ setup: customSetup,
56
+ name: 'Handles cooldown when using commands in rapid succession',
57
+ test: async function () {
58
+ const events = (await new EventsAwaiter().connect(this.client)).waitForEvents(HookEvents.CHAT_MESSAGE, 2);
59
+ await Promise.all([
60
+ this.client.command.commandControllerTrigger(this.setupData.gameserver.id, {
61
+ msg: '/ping',
62
+ playerId: this.setupData.players[0].id,
63
+ }),
64
+ this.client.command.commandControllerTrigger(this.setupData.gameserver.id, {
65
+ msg: '/ping',
66
+ playerId: this.setupData.players[0].id,
67
+ }),
68
+ ]);
69
+
70
+ const sorted = (await events).sort((a, b) => a.data.meta.msg - b.data.meta.msg);
71
+ expect(sorted.length).to.be.eq(2);
72
+ expect(sorted[0].data.meta.msg).to.be.eq(
73
+ 'You can only execute one command at a time. Please wait for the previous command to finish.',
74
+ );
75
+ expect(sorted[1].data.meta.msg).to.be.eq('Pong!');
76
+ },
77
+ }),
78
+ ];
79
+
80
+ describe(group, function () {
81
+ tests.forEach((test) => {
82
+ test.run();
83
+ });
84
+ });
@@ -0,0 +1,194 @@
1
+ import { IntegrationTest, expect, IModuleTestsSetupData, modulesTestSetup, EventsAwaiter } from '@takaro/test';
2
+ import { GameEvents } from '../dto/index.js';
3
+ import { sleep } from '@takaro/util';
4
+ import { describe } from 'node:test';
5
+
6
+ const group = 'System config - cost';
7
+
8
+ const customSetup = async function (this: IntegrationTest<IModuleTestsSetupData>): Promise<IModuleTestsSetupData> {
9
+ const setupData = await modulesTestSetup.bind(this)();
10
+ await this.client.settings.settingsControllerSet('economyEnabled', {
11
+ value: 'true',
12
+ gameServerId: setupData.gameserver.id,
13
+ });
14
+
15
+ await this.client.module.moduleInstallationsControllerInstallModule({
16
+ gameServerId: setupData.gameserver.id,
17
+ versionId: setupData.teleportsModule.latestVersion.id,
18
+ userConfig: JSON.stringify({
19
+ timeout: 0,
20
+ }),
21
+ systemConfig: JSON.stringify({
22
+ commands: {
23
+ teleport: {
24
+ delay: 0,
25
+ aliases: [],
26
+ cost: 10,
27
+ },
28
+ },
29
+ }),
30
+ });
31
+
32
+ const setEvents = (await new EventsAwaiter().connect(this.client)).waitForEvents(GameEvents.CHAT_MESSAGE, 1);
33
+ await this.client.command.commandControllerTrigger(setupData.gameserver.id, {
34
+ msg: '/settp test',
35
+ playerId: setupData.players[0].id,
36
+ });
37
+
38
+ expect((await setEvents).length).to.be.eq(1);
39
+ expect((await setEvents)[0].data.meta.msg).to.be.eq('Teleport test set.');
40
+
41
+ const giveCurrencies = setupData.players.map(async (player) => {
42
+ const playerOnGameServer = (
43
+ await this.client.playerOnGameserver.playerOnGameServerControllerSearch({
44
+ filters: { playerId: [player.id], gameServerId: [setupData.gameserver.id] },
45
+ })
46
+ ).data.data;
47
+ if (playerOnGameServer.length === 0) throw new Error('player not found');
48
+ return this.client.playerOnGameserver.playerOnGameServerControllerSetCurrency(
49
+ playerOnGameServer[0].gameServerId,
50
+ playerOnGameServer[0].playerId,
51
+ {
52
+ currency: 100,
53
+ },
54
+ );
55
+ });
56
+ await Promise.all(giveCurrencies);
57
+
58
+ return setupData;
59
+ };
60
+
61
+ const tests = [
62
+ new IntegrationTest<IModuleTestsSetupData>({
63
+ group,
64
+ snapshot: false,
65
+ setup: customSetup,
66
+ name: 'Deducts money when cost is configured',
67
+ test: async function () {
68
+ const events = (await new EventsAwaiter().connect(this.client)).waitForEvents('command-executed', 1);
69
+ await this.client.command.commandControllerTrigger(this.setupData.gameserver.id, {
70
+ msg: '/tp test',
71
+ playerId: this.setupData.players[0].id,
72
+ });
73
+
74
+ expect((await events).length).to.be.eq(1);
75
+
76
+ const playerOnGameServerAfter = (
77
+ await this.client.playerOnGameserver.playerOnGameServerControllerSearch({
78
+ filters: { playerId: [this.setupData.players[0].id], gameServerId: [this.setupData.gameserver.id] },
79
+ })
80
+ ).data.data;
81
+
82
+ expect(playerOnGameServerAfter[0].currency).to.be.eq(90);
83
+ },
84
+ }),
85
+ new IntegrationTest<IModuleTestsSetupData>({
86
+ group,
87
+ snapshot: false,
88
+ setup: customSetup,
89
+ name: 'Handles concurrent commands properly',
90
+ test: async function () {
91
+ const amount = 10;
92
+
93
+ const setEvents = (await new EventsAwaiter().connect(this.client)).waitForEvents('command-executed', amount);
94
+
95
+ await Promise.all(
96
+ Array.from({ length: amount }).map(async (_, index) => {
97
+ await sleep(10);
98
+ await this.client.command.commandControllerTrigger(this.setupData.gameserver.id, {
99
+ msg: `/settp test${index}`,
100
+ playerId: this.setupData.players[0].id,
101
+ });
102
+ }),
103
+ );
104
+
105
+ expect((await setEvents).length).to.be.eq(amount);
106
+
107
+ const events = (await new EventsAwaiter().connect(this.client)).waitForEvents('command-executed', amount);
108
+ await Promise.all(
109
+ Array.from({ length: amount }).map(async (_, index) => {
110
+ await sleep(1);
111
+ await this.client.command.commandControllerTrigger(this.setupData.gameserver.id, {
112
+ msg: `/tp test${index}`,
113
+ playerId: this.setupData.players[0].id,
114
+ });
115
+ }),
116
+ );
117
+
118
+ expect((await events).length).to.be.eq(amount);
119
+ for (const event of await events) {
120
+ expect(event.data.meta.result.success).to.be.eq(true);
121
+ }
122
+
123
+ const playerOnGameServerAfter = (
124
+ await this.client.playerOnGameserver.playerOnGameServerControllerSearch({
125
+ filters: { playerId: [this.setupData.players[0].id], gameServerId: [this.setupData.gameserver.id] },
126
+ })
127
+ ).data.data;
128
+
129
+ expect(playerOnGameServerAfter[0].currency).to.be.eq(0);
130
+ },
131
+ }),
132
+ new IntegrationTest<IModuleTestsSetupData>({
133
+ group,
134
+ snapshot: false,
135
+ setup: customSetup,
136
+ name: 'Does not deduct currency when command unsuccessful',
137
+ test: async function () {
138
+ const events = (await new EventsAwaiter().connect(this.client)).waitForEvents('command-executed', 1);
139
+ await this.client.command.commandControllerTrigger(this.setupData.gameserver.id, {
140
+ msg: '/tp doesntexist',
141
+ playerId: this.setupData.players[0].id,
142
+ });
143
+
144
+ expect((await events).length).to.be.eq(1);
145
+ expect((await events)[0].data.meta.result.success).to.be.eq(false);
146
+
147
+ const playerOnGameServerAfter = (
148
+ await this.client.playerOnGameserver.playerOnGameServerControllerSearch({
149
+ filters: { playerId: [this.setupData.players[0].id], gameServerId: [this.setupData.gameserver.id] },
150
+ })
151
+ ).data.data;
152
+
153
+ expect(playerOnGameServerAfter[0].currency).to.be.eq(100);
154
+ },
155
+ }),
156
+ new IntegrationTest<IModuleTestsSetupData>({
157
+ group,
158
+ snapshot: false,
159
+ setup: customSetup,
160
+ name: 'Rejects command if player does not have enough currency',
161
+ test: async function () {
162
+ // set players' currency to 5
163
+ const playerOnGameServer = (
164
+ await this.client.playerOnGameserver.playerOnGameServerControllerSearch({
165
+ filters: { playerId: [this.setupData.players[1].id], gameServerId: [this.setupData.gameserver.id] },
166
+ })
167
+ ).data.data;
168
+
169
+ if (playerOnGameServer.length === 0) throw new Error('player not found');
170
+ await this.client.playerOnGameserver.playerOnGameServerControllerSetCurrency(
171
+ playerOnGameServer[0].gameServerId,
172
+ playerOnGameServer[0].playerId,
173
+ {
174
+ currency: 5,
175
+ },
176
+ );
177
+
178
+ const events = (await new EventsAwaiter().connect(this.client)).waitForEvents(GameEvents.CHAT_MESSAGE, 1);
179
+ await this.client.command.commandControllerTrigger(this.setupData.gameserver.id, {
180
+ msg: '/tp test',
181
+ playerId: this.setupData.players[1].id,
182
+ });
183
+
184
+ expect((await events).length).to.be.eq(1);
185
+ expect((await events)[0].data.meta.msg).to.be.eq('You do not have enough currency to execute this command.');
186
+ },
187
+ }),
188
+ ];
189
+
190
+ describe(group, function () {
191
+ tests.forEach((test) => {
192
+ test.run();
193
+ });
194
+ });
@@ -0,0 +1,189 @@
1
+ import { IntegrationTest, expect, IModuleTestsSetupData, modulesTestSetup, EventsAwaiter } from '@takaro/test';
2
+ import { GameEvents } from '../../dto/index.js';
3
+ import { describe } from 'node:test';
4
+
5
+ const group = 'Teleports suite';
6
+
7
+ const tests = [
8
+ new IntegrationTest<IModuleTestsSetupData>({
9
+ group,
10
+ snapshot: false,
11
+ setup: modulesTestSetup,
12
+ name: 'Can list teleports with /tplist',
13
+ test: async function () {
14
+ await this.client.module.moduleInstallationsControllerInstallModule({
15
+ gameServerId: this.setupData.gameserver.id,
16
+ versionId: this.setupData.teleportsModule.latestVersion.id,
17
+ });
18
+
19
+ const setEvents = (await new EventsAwaiter().connect(this.client)).waitForEvents(GameEvents.CHAT_MESSAGE, 3);
20
+
21
+ await Promise.all(
22
+ Array.from({ length: 3 }).map(async (_, i) => {
23
+ return this.client.command.commandControllerTrigger(this.setupData.gameserver.id, {
24
+ msg: `/settp test${i}`,
25
+ playerId: this.setupData.players[0].id,
26
+ });
27
+ }),
28
+ );
29
+
30
+ expect((await setEvents).length).to.be.eq(3);
31
+
32
+ for (const event of await setEvents) {
33
+ expect(event.data.meta.msg).to.match(/Teleport test\d set\./);
34
+ }
35
+
36
+ const events = (await new EventsAwaiter().connect(this.client)).waitForEvents(GameEvents.CHAT_MESSAGE, 4);
37
+
38
+ await this.client.command.commandControllerTrigger(this.setupData.gameserver.id, {
39
+ msg: '/tplist',
40
+ playerId: this.setupData.players[0].id,
41
+ });
42
+
43
+ expect((await events).length).to.be.eq(4);
44
+ expect((await events)[0].data.meta.msg).to.be.eq('You have 3 teleports available');
45
+ expect((await events)[1].data.meta.msg).to.match(/test0: \([-\d]+,[-\d]+,[-\d]+\)/);
46
+ expect((await events)[2].data.meta.msg).to.match(/test1: \([-\d]+,[-\d]+,[-\d]+\)/);
47
+ expect((await events)[3].data.meta.msg).to.match(/test2: \([-\d]+,[-\d]+,[-\d]+\)/);
48
+ },
49
+ }),
50
+ new IntegrationTest<IModuleTestsSetupData>({
51
+ group,
52
+ snapshot: false,
53
+ setup: modulesTestSetup,
54
+ name: 'Public teleports show up in /tplist',
55
+ test: async function () {
56
+ await this.client.module.moduleInstallationsControllerInstallModule({
57
+ gameServerId: this.setupData.gameserver.id,
58
+ versionId: this.setupData.teleportsModule.latestVersion.id,
59
+ userConfig: JSON.stringify({
60
+ allowPublicTeleports: true,
61
+ }),
62
+ });
63
+
64
+ const setTpEvent = (await new EventsAwaiter().connect(this.client)).waitForEvents(GameEvents.CHAT_MESSAGE, 1);
65
+
66
+ await this.client.command.commandControllerTrigger(this.setupData.gameserver.id, {
67
+ msg: '/settp test',
68
+ playerId: this.setupData.players[0].id,
69
+ });
70
+
71
+ expect((await setTpEvent).length).to.be.eq(1);
72
+ expect((await setTpEvent)[0].data.meta.msg).to.be.eq('Teleport test set.');
73
+
74
+ const setPublicEvent = (await new EventsAwaiter().connect(this.client)).waitForEvents(GameEvents.CHAT_MESSAGE, 1);
75
+
76
+ await this.client.command.commandControllerTrigger(this.setupData.gameserver.id, {
77
+ msg: '/setpublic test',
78
+ playerId: this.setupData.players[0].id,
79
+ });
80
+
81
+ expect((await setPublicEvent).length).to.be.eq(1);
82
+ expect((await setPublicEvent)[0].data.meta.msg).to.be.eq('Teleport test is now public.');
83
+
84
+ const setTpEvent2 = (await new EventsAwaiter().connect(this.client)).waitForEvents(GameEvents.CHAT_MESSAGE, 1);
85
+
86
+ await this.client.command.commandControllerTrigger(this.setupData.gameserver.id, {
87
+ msg: '/settp test2',
88
+ playerId: this.setupData.players[0].id,
89
+ });
90
+
91
+ expect((await setTpEvent2).length).to.be.eq(1);
92
+ expect((await setTpEvent2)[0].data.meta.msg).to.be.eq('Teleport test2 set.');
93
+
94
+ const tpEvent = (await new EventsAwaiter().connect(this.client)).waitForEvents(GameEvents.CHAT_MESSAGE, 2);
95
+
96
+ await this.client.command.commandControllerTrigger(this.setupData.gameserver.id, {
97
+ msg: '/tplist',
98
+ playerId: this.setupData.players[1].id,
99
+ });
100
+
101
+ expect((await tpEvent).length).to.be.eq(2);
102
+ expect((await tpEvent)[0].data.meta.msg).to.be.eq('You have 1 teleport available');
103
+ expect((await tpEvent)[1].data.meta.msg).to.match(/test: \([-\d]+,[-\d]+,[-\d]+\) \(public\)/);
104
+ },
105
+ }),
106
+ new IntegrationTest<IModuleTestsSetupData>({
107
+ group,
108
+ snapshot: false,
109
+ setup: modulesTestSetup,
110
+ name: 'Teleports set by player A cannot be seen by player B with /tplist',
111
+ test: async function () {
112
+ await this.client.module.moduleInstallationsControllerInstallModule({
113
+ gameServerId: this.setupData.gameserver.id,
114
+ versionId: this.setupData.teleportsModule.latestVersion.id,
115
+ });
116
+
117
+ const setTpEvent = (await new EventsAwaiter().connect(this.client)).waitForEvents(GameEvents.CHAT_MESSAGE, 1);
118
+
119
+ await this.client.command.commandControllerTrigger(this.setupData.gameserver.id, {
120
+ msg: '/settp test',
121
+ playerId: this.setupData.players[0].id,
122
+ });
123
+
124
+ expect((await setTpEvent).length).to.be.eq(1);
125
+ expect((await setTpEvent)[0].data.meta.msg).to.be.eq('Teleport test set.');
126
+
127
+ const tpEvent = (await new EventsAwaiter().connect(this.client)).waitForEvents(GameEvents.CHAT_MESSAGE, 1);
128
+
129
+ await this.client.command.commandControllerTrigger(this.setupData.gameserver.id, {
130
+ msg: '/tplist',
131
+ playerId: this.setupData.players[1].id,
132
+ });
133
+
134
+ expect((await tpEvent).length).to.be.eq(1);
135
+ expect((await tpEvent)[0].data.meta.msg).to.be.eq(
136
+ 'You have no teleports available, use /settp <name> to set one.',
137
+ );
138
+ },
139
+ }),
140
+ new IntegrationTest<IModuleTestsSetupData>({
141
+ group,
142
+ snapshot: false,
143
+ setup: modulesTestSetup,
144
+ name: "bug repro /tplist: Player A and B have teleports set but B cannot see A's teleports",
145
+ test: async function () {
146
+ await this.client.module.moduleInstallationsControllerInstallModule({
147
+ gameServerId: this.setupData.gameserver.id,
148
+ versionId: this.setupData.teleportsModule.latestVersion.id,
149
+ });
150
+
151
+ const setTpEvent = (await new EventsAwaiter().connect(this.client)).waitForEvents(GameEvents.CHAT_MESSAGE, 1);
152
+
153
+ await this.client.command.commandControllerTrigger(this.setupData.gameserver.id, {
154
+ msg: '/settp test',
155
+ playerId: this.setupData.players[0].id,
156
+ });
157
+
158
+ expect((await setTpEvent).length).to.be.eq(1);
159
+ expect((await setTpEvent)[0].data.meta.msg).to.be.eq('Teleport test set.');
160
+
161
+ const setTpEvent2 = (await new EventsAwaiter().connect(this.client)).waitForEvents(GameEvents.CHAT_MESSAGE, 1);
162
+
163
+ await this.client.command.commandControllerTrigger(this.setupData.gameserver.id, {
164
+ msg: '/settp test2',
165
+ playerId: this.setupData.players[1].id,
166
+ });
167
+
168
+ expect((await setTpEvent2).length).to.be.eq(1);
169
+ expect((await setTpEvent2)[0].data.meta.msg).to.be.eq('Teleport test2 set.');
170
+
171
+ const tpEvent = (await new EventsAwaiter().connect(this.client)).waitForEvents(GameEvents.CHAT_MESSAGE, 2);
172
+
173
+ await this.client.command.commandControllerTrigger(this.setupData.gameserver.id, {
174
+ msg: '/tplist',
175
+ playerId: this.setupData.players[1].id,
176
+ });
177
+
178
+ expect((await tpEvent).length).to.be.eq(2);
179
+ expect((await tpEvent)[0].data.meta.msg).to.be.eq('You have 1 teleport available');
180
+ expect((await tpEvent)[1].data.meta.msg).to.match(/test2: \([-\d]+,[-\d]+,[-\d]+\)/);
181
+ },
182
+ }),
183
+ ];
184
+
185
+ describe(group, function () {
186
+ tests.forEach((test) => {
187
+ test.run();
188
+ });
189
+ });