@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,28 @@
1
+ import { takaro, data } from '@takaro/helpers';
2
+
3
+ async function main() {
4
+ const { pog, gameServerId, module: mod } = data;
5
+
6
+ const varKey = 'lottery_tickets_bought';
7
+
8
+ const tickets = (
9
+ await takaro.variable.variableControllerSearch({
10
+ filters: {
11
+ gameServerId: [gameServerId],
12
+ key: [varKey],
13
+ moduleId: [mod.moduleId],
14
+ playerId: [pog.playerId],
15
+ },
16
+ })
17
+ ).data.data;
18
+
19
+ let ticketsBought = 0;
20
+
21
+ if (tickets.length === 1) {
22
+ ticketsBought = parseInt(JSON.parse(tickets[0].value).amount, 10);
23
+ }
24
+
25
+ await pog.pm(`You have bought ${ticketsBought} tickets.`);
26
+ }
27
+
28
+ await main();
@@ -0,0 +1,124 @@
1
+ import { takaro, data } from '@takaro/helpers';
2
+
3
+ function getTotalPrize(tickets, ticketPrice, profitMargin) {
4
+ const amount = tickets.reduce((acc, ticket) => {
5
+ const ticketAmount = parseInt(JSON.parse(ticket.value).amount, 10);
6
+
7
+ return acc + ticketAmount;
8
+ }, 0);
9
+
10
+ const rawTotal = amount * ticketPrice;
11
+ const profit = rawTotal * profitMargin;
12
+ const totalPrize = rawTotal - profit;
13
+
14
+ return totalPrize;
15
+ }
16
+
17
+ async function drawWinner(takaro, gameServerId, tickets) {
18
+ const randomIndex = Math.floor(Math.random() * tickets.length);
19
+ const winnerTicket = tickets[randomIndex];
20
+
21
+ const winner = (await takaro.player.playerControllerGetOne(winnerTicket.playerId)).data.data;
22
+ const pog = await takaro.playerOnGameserver.playerOnGameServerControllerSearch({
23
+ filters: {
24
+ gameServerId: [gameServerId],
25
+ playerId: [winner.id],
26
+ },
27
+ });
28
+
29
+ return {
30
+ name: winner.name,
31
+ playerId: pog.data.data[0].playerId,
32
+ };
33
+ }
34
+
35
+ async function refundPlayer(takaro, gameServerId, playerId, amount, currencyName) {
36
+ const pog = (
37
+ await takaro.playerOnGameserver.playerOnGameServerControllerSearch({
38
+ filters: {
39
+ gameServerId: [gameServerId],
40
+ playerId: [playerId],
41
+ },
42
+ })
43
+ ).data.data[0];
44
+
45
+ await takaro.playerOnGameserver.playerOnGameServerControllerAddCurrency(gameServerId, pog.playerId, {
46
+ currency: amount,
47
+ });
48
+
49
+ await takaro.gameserver.gameServerControllerSendMessage(gameServerId, {
50
+ message: `You have been refunded ${amount} ${currencyName} because the lottery has been cancelled.`,
51
+ opts: {
52
+ recipient: {
53
+ gameId: pog.gameId,
54
+ },
55
+ },
56
+ });
57
+ }
58
+
59
+ async function cleanUp(takaro, tickets) {
60
+ const deleteTasks = tickets.map((ticket) => takaro.variable.variableControllerDelete(ticket.id));
61
+ await Promise.allSettled(deleteTasks);
62
+ }
63
+
64
+ async function main() {
65
+ const { gameServerId, module: mod } = data;
66
+
67
+ let tickets = [];
68
+
69
+ try {
70
+ const currencyName = (await takaro.settings.settingsControllerGetOne('currencyName', gameServerId)).data.data.value;
71
+ const ticketCost = mod.systemConfig.commands.buyTicket.cost;
72
+
73
+ tickets = (
74
+ await takaro.variable.variableControllerSearch({
75
+ filters: {
76
+ gameServerId: [gameServerId],
77
+ moduleId: [mod.moduleId],
78
+ key: ['lottery_tickets_bought'],
79
+ },
80
+ })
81
+ ).data.data;
82
+
83
+ if (tickets.length === 0) {
84
+ await takaro.gameserver.gameServerControllerSendMessage(gameServerId, {
85
+ message: 'No one has bought any tickets. The lottery has been cancelled.',
86
+ });
87
+
88
+ return;
89
+ }
90
+
91
+ if (tickets.length === 1) {
92
+ await takaro.gameserver.gameServerControllerSendMessage(gameServerId, {
93
+ message: 'Only one person has bought a ticket. The lottery has been cancelled.',
94
+ });
95
+
96
+ const amount = parseInt(JSON.parse(tickets[0].value).amount, 10) * ticketCost;
97
+
98
+ await refundPlayer(takaro, gameServerId, tickets[0].playerId, amount, currencyName);
99
+
100
+ return;
101
+ }
102
+
103
+ const totalPrize = getTotalPrize(tickets, ticketCost, mod.userConfig.profitMargin);
104
+ const { name: winnerName, playerId } = await drawWinner(takaro, gameServerId, tickets);
105
+
106
+ await takaro.gameserver.gameServerControllerSendMessage(gameServerId, {
107
+ message: 'The lottery raffle is about to start!',
108
+ });
109
+ await takaro.gameserver.gameServerControllerSendMessage(gameServerId, { message: 'drumrolls please...' });
110
+ await takaro.gameserver.gameServerControllerSendMessage(gameServerId, { message: 'The winner is...' });
111
+
112
+ await takaro.playerOnGameserver.playerOnGameServerControllerAddCurrency(gameServerId, playerId, {
113
+ currency: totalPrize,
114
+ });
115
+
116
+ await takaro.gameserver.gameServerControllerSendMessage(gameServerId, {
117
+ message: `${winnerName}! Congratulations! You have won ${totalPrize} ${currencyName}!`,
118
+ });
119
+ } finally {
120
+ await cleanUp(takaro, tickets);
121
+ }
122
+ }
123
+
124
+ await main();
@@ -0,0 +1,86 @@
1
+ import { ModuleTransferDTO, ICommand, ICronJob, IPermission, ModuleTransferVersionDTO } from '../../BuiltinModule.js';
2
+
3
+ export class Lottery extends ModuleTransferDTO<Lottery> {
4
+ constructor() {
5
+ super();
6
+
7
+ this.name = 'lottery';
8
+ this.author = 'Takaro';
9
+ this.supportedGames = ['all'];
10
+ this.versions = [
11
+ new ModuleTransferVersionDTO({
12
+ tag: '0.0.2',
13
+ description: 'Players can buy tickets for a lottery, and the winner is chosen at random.',
14
+ configSchema: JSON.stringify({
15
+ $schema: 'http://json-schema.org/draft-07/schema#',
16
+ type: 'object',
17
+ properties: {
18
+ profitMargin: {
19
+ type: 'number',
20
+ maximum: 1,
21
+ minimum: 0,
22
+ description: 'The profit margin the server takes from the lottery.',
23
+ default: 0.1,
24
+ },
25
+ },
26
+ required: [],
27
+ additionalProperties: false,
28
+ }),
29
+ permissions: [
30
+ new IPermission({
31
+ permission: 'LOTTERY_BUY',
32
+ friendlyName: 'Buy Lottery Tickets',
33
+ canHaveCount: false,
34
+ description: 'Allows the player to buy lottery tickets.',
35
+ }),
36
+ new IPermission({
37
+ permission: 'LOTTERY_VIEW_TICKETS',
38
+ friendlyName: 'View Lottery Tickets',
39
+ description: 'Allows the player to view his lottery tickets.',
40
+ canHaveCount: false,
41
+ }),
42
+ ],
43
+ cronJobs: [
44
+ new ICronJob({
45
+ name: 'drawLottery',
46
+ temporalValue: '0 0 * * *',
47
+ function: this.loadFn('cronJobs', 'drawLottery'),
48
+ }),
49
+ ],
50
+ commands: [
51
+ new ICommand({
52
+ function: this.loadFn('commands', 'buyTicket'),
53
+ name: 'buyTicket',
54
+ trigger: 'buyTicket',
55
+ helpText: 'Buy a lottery ticket.',
56
+ requiredPermissions: ['LOTTERY_BUY'],
57
+ arguments: [
58
+ {
59
+ name: 'amount',
60
+ type: 'number',
61
+ helpText: 'The amount of tickets to buy.',
62
+ position: 0,
63
+ defaultValue: null,
64
+ },
65
+ ],
66
+ }),
67
+ new ICommand({
68
+ function: this.loadFn('commands', 'viewTickets'),
69
+ name: 'viewTickets',
70
+ trigger: 'viewTickets',
71
+ helpText: 'View your lottery tickets.',
72
+ requiredPermissions: ['LOTTERY_VIEW_TICKETS'],
73
+ arguments: [],
74
+ }),
75
+ new ICommand({
76
+ function: this.loadFn('commands', 'nextDraw'),
77
+ name: 'nextDraw',
78
+ trigger: 'nextDraw',
79
+ helpText: 'View when the next draw is.',
80
+ arguments: [],
81
+ }),
82
+ ],
83
+ }),
84
+ ];
85
+ }
86
+ }
@@ -0,0 +1,61 @@
1
+ import { takaro, data, TakaroUserError } from '@takaro/helpers';
2
+
3
+ const VARIABLE_KEY = 't_starterkit_lock';
4
+
5
+ async function main() {
6
+ const items = data.module.userConfig.starterKitItems;
7
+
8
+ if (!items || items.length === 0) {
9
+ throw new TakaroUserError(
10
+ 'No starter kit items configured. Please ask your server administrator to configure this.',
11
+ );
12
+ }
13
+
14
+ const starterKitLockRes = await takaro.variable.variableControllerSearch({
15
+ filters: {
16
+ key: [VARIABLE_KEY],
17
+ gameServerId: [data.gameServerId],
18
+ playerId: [data.player.id],
19
+ },
20
+ });
21
+
22
+ if (starterKitLockRes.data.data.length > 0) {
23
+ throw new TakaroUserError('You already used starterkit on this server');
24
+ }
25
+
26
+ await data.player.pm('You are about to receive your starter kit...');
27
+
28
+ const itemRecords = (await takaro.item.itemControllerSearch({ filters: { id: items.map((_) => _.item) } })).data.data;
29
+ const fullItems = items.map((item) => {
30
+ const itemRecord = itemRecords.find((record) => record.id === item.item);
31
+ if (!itemRecord) {
32
+ throw new TakaroUserError(`Item with ID ${item.item} not found.`);
33
+ }
34
+ return {
35
+ id: itemRecord.id,
36
+ quality: item.quality,
37
+ amount: item.amount,
38
+ };
39
+ });
40
+
41
+ await Promise.all(
42
+ fullItems.map(async (item) => {
43
+ return takaro.gameserver.gameServerControllerGiveItem(data.gameServerId, data.player.id, {
44
+ name: item.id,
45
+ quality: item.quality ?? '',
46
+ amount: item.amount,
47
+ });
48
+ }),
49
+ );
50
+
51
+ await takaro.variable.variableControllerCreate({
52
+ key: VARIABLE_KEY,
53
+ value: '1',
54
+ gameServerId: data.gameServerId,
55
+ playerId: data.player.id,
56
+ });
57
+
58
+ await data.player.pm(`Gave ${items.length} items, enjoy!`);
59
+ }
60
+
61
+ await main();
@@ -0,0 +1,14 @@
1
+ import { takaro, data } from '@takaro/helpers';
2
+
3
+ async function main() {
4
+ const { player } = data;
5
+
6
+ const rawMessage = data.module.userConfig.message;
7
+ const message = rawMessage.replace('{player}', player.name);
8
+
9
+ await takaro.gameserver.gameServerControllerSendMessage(data.gameServerId, {
10
+ message,
11
+ });
12
+ }
13
+
14
+ await main();
@@ -0,0 +1,86 @@
1
+ import { ModuleTransferDTO, ICommand, IHook, ModuleTransferVersionDTO } from '../../BuiltinModule.js';
2
+ import { HookEvents } from '../../dto/index.js';
3
+
4
+ export class PlayerOnboarding extends ModuleTransferDTO<PlayerOnboarding> {
5
+ constructor() {
6
+ super();
7
+
8
+ this.name = 'playerOnboarding';
9
+ this.author = 'Takaro';
10
+ this.supportedGames = ['all'];
11
+ this.versions = [
12
+ new ModuleTransferVersionDTO({
13
+ tag: '0.0.3',
14
+ description:
15
+ 'Collection of functions that are executed when a player joins the server. Helps with onboarding new players, like sending a welcome message. Fixed issue with starterkit item identifiers.',
16
+ configSchema: JSON.stringify({
17
+ $schema: 'http://json-schema.org/draft-07/schema#',
18
+ type: 'object',
19
+ properties: {
20
+ message: {
21
+ title: 'Message',
22
+ description: 'The message to send to the player when they join the server.',
23
+ type: 'string',
24
+ minLength: 1,
25
+ maxLength: 256,
26
+ default: 'Welcome {player} to the server!',
27
+ },
28
+ starterKitItems: {
29
+ type: 'array',
30
+ title: 'Starter kit items',
31
+ 'x-component': 'item',
32
+ description:
33
+ 'List of items a player will receive when they execute the starterkit command for the first time.',
34
+ uniqueItems: true,
35
+ items: {
36
+ type: 'object',
37
+ title: 'Item',
38
+ properties: {
39
+ item: {
40
+ type: 'string',
41
+ title: 'Item',
42
+ },
43
+ amount: {
44
+ type: 'number',
45
+ title: 'Amount',
46
+ },
47
+ quality: {
48
+ type: 'string',
49
+ title: 'Quality',
50
+ },
51
+ },
52
+ },
53
+ },
54
+ },
55
+ required: [],
56
+ additionalProperties: false,
57
+ }),
58
+ uiSchema: JSON.stringify({
59
+ starterKitItems: {
60
+ items: {
61
+ item: {
62
+ 'ui:widget': 'item',
63
+ },
64
+ },
65
+ },
66
+ }),
67
+ hooks: [
68
+ new IHook({
69
+ eventType: HookEvents.PLAYER_CONNECTED,
70
+ name: 'playerConnected',
71
+ function: this.loadFn('hooks', 'playerConnected'),
72
+ }),
73
+ ],
74
+ commands: [
75
+ new ICommand({
76
+ name: 'starterkit',
77
+ function: this.loadFn('commands', 'starterkit'),
78
+ trigger: 'starterkit',
79
+ helpText: 'Get a starter kit, you can only execute this once on a server!',
80
+ arguments: [],
81
+ }),
82
+ ],
83
+ }),
84
+ ];
85
+ }
86
+ }
@@ -0,0 +1,47 @@
1
+ import { data, takaro } from '@takaro/helpers';
2
+
3
+ async function main() {
4
+ const { module: mod, gameServerId } = data;
5
+
6
+ // Check what the last message we sent was
7
+ const lastMessageVar = (
8
+ await takaro.variable.variableControllerSearch({
9
+ filters: {
10
+ key: ['lastMessage'],
11
+ moduleId: [mod.moduleId],
12
+ gameServerId: [gameServerId],
13
+ },
14
+ })
15
+ ).data.data[0];
16
+
17
+ // If we haven't sent any messages yet, start with the first one
18
+ const lastMessage = lastMessageVar ? parseInt(lastMessageVar.value, 10) : -1;
19
+ // The next message we should send is the next in the array
20
+ // However, if we're at the end of the array, we should start over
21
+ const nextMessage = data.module.userConfig.messages[lastMessage + 1] ? lastMessage + 1 : 0;
22
+ // The actual text of the message we're going to send
23
+ const messageToSend = data.module.userConfig.messages[nextMessage];
24
+
25
+ // Send the message to the game server
26
+ await takaro.gameserver.gameServerControllerSendMessage(data.gameServerId, {
27
+ message: messageToSend,
28
+ });
29
+
30
+ // Update the last message variable so the next time this cron job runs, we know what to send
31
+ if (lastMessageVar) {
32
+ // The variable already exists, update it
33
+ await takaro.variable.variableControllerUpdate(lastMessageVar.id, {
34
+ value: nextMessage.toString(),
35
+ });
36
+ } else {
37
+ // The variable doesn't exist, create it
38
+ await takaro.variable.variableControllerCreate({
39
+ key: 'lastMessage',
40
+ value: nextMessage.toString(),
41
+ moduleId: mod.moduleId,
42
+ gameServerId: gameServerId,
43
+ });
44
+ }
45
+ }
46
+
47
+ await main();
@@ -0,0 +1,46 @@
1
+ import { ModuleTransferDTO, ICronJob, ModuleTransferVersionDTO } from '../../BuiltinModule.js';
2
+
3
+ export class ServerMessages extends ModuleTransferDTO<ServerMessages> {
4
+ constructor() {
5
+ super();
6
+
7
+ this.name = 'serverMessages';
8
+ this.author = 'Takaro';
9
+ this.supportedGames = ['all'];
10
+ this.versions = [
11
+ new ModuleTransferVersionDTO({
12
+ tag: '0.0.1',
13
+ description: 'Send automated, rotated, configurable messages to players on the server.',
14
+ configSchema: JSON.stringify({
15
+ $schema: 'http://json-schema.org/draft-07/schema#',
16
+ type: 'object',
17
+ properties: {
18
+ messages: {
19
+ type: 'array',
20
+ title: 'Messages',
21
+ description: 'List of messages that will be sent to players on the server.',
22
+ default: [
23
+ // prettier-ignore
24
+ 'This is an automated message, don\'t forget to read the server rules!',
25
+ ],
26
+ items: {
27
+ type: 'string',
28
+ minLength: 5,
29
+ maxLength: 1024,
30
+ },
31
+ minItems: 1,
32
+ },
33
+ },
34
+ required: ['messages'],
35
+ }),
36
+ cronJobs: [
37
+ new ICronJob({
38
+ name: 'Automated message',
39
+ temporalValue: '*/30 * * * *',
40
+ function: this.loadFn('cronJobs', 'Automated message'),
41
+ }),
42
+ ],
43
+ }),
44
+ ];
45
+ }
46
+ }
@@ -0,0 +1,25 @@
1
+ import { takaro, data, TakaroUserError } from '@takaro/helpers';
2
+ import { getVariableKey } from './utils.js';
3
+
4
+ async function main() {
5
+ const { pog, gameServerId, arguments: args, module: mod } = data;
6
+
7
+ const existingVariable = await takaro.variable.variableControllerSearch({
8
+ filters: {
9
+ key: [getVariableKey(args.tp), getVariableKey(args.tp, true)],
10
+ gameServerId: [gameServerId],
11
+ playerId: [pog.playerId],
12
+ moduleId: [mod.moduleId],
13
+ },
14
+ });
15
+
16
+ if (existingVariable.data.data.length === 0) {
17
+ throw new TakaroUserError(`Teleport ${args.tp} does not exist.`);
18
+ }
19
+
20
+ await takaro.variable.variableControllerDelete(existingVariable.data.data[0].id);
21
+
22
+ await data.player.pm(`Teleport ${args.tp} deleted.`);
23
+ }
24
+
25
+ await main();
@@ -0,0 +1,24 @@
1
+ import { takaro, data, TakaroUserError } from '@takaro/helpers';
2
+ import { getWaypointName, waypointReconciler } from './utils.js';
3
+
4
+ async function main() {
5
+ const { pog, gameServerId, arguments: args, module: mod } = data;
6
+
7
+ const variable = await takaro.variable.variableControllerSearch({
8
+ filters: {
9
+ key: [getWaypointName(args.waypoint)],
10
+ gameServerId: [gameServerId],
11
+ moduleId: [mod.moduleId],
12
+ },
13
+ });
14
+
15
+ if (!variable.data.data.length) {
16
+ throw new TakaroUserError(`Waypoint ${args.waypoint} doesn't exist.`);
17
+ }
18
+
19
+ await takaro.variable.variableControllerDelete(variable.data.data[0].id);
20
+ await waypointReconciler();
21
+ await pog.pm(`Waypoint ${args.waypoint} deleted.`);
22
+ }
23
+
24
+ await main();
@@ -0,0 +1,23 @@
1
+ import { data, checkPermission } from '@takaro/helpers';
2
+ import { ensureWaypointsModule } from './utils.js';
3
+
4
+ async function main() {
5
+ const { pog, gameServerId } = data;
6
+
7
+ const { waypointsDefinition } = await ensureWaypointsModule();
8
+
9
+ const allWaypoints = waypointsDefinition.latestVersion.commands;
10
+
11
+ const waypointsWithPermission = allWaypoints
12
+ .filter((waypoint) => checkPermission(pog, `WAYPOINTS_USE_${waypoint.trigger.toUpperCase()}_${gameServerId}`))
13
+ .sort((a, b) => a.trigger.localeCompare(b.trigger));
14
+
15
+ if (!waypointsWithPermission.length) {
16
+ await pog.pm('There are no waypoints available.');
17
+ return;
18
+ }
19
+
20
+ await pog.pm(`Available waypoints: ${waypointsWithPermission.map((waypoint) => waypoint.trigger).join(', ')}`);
21
+ }
22
+
23
+ await main();
@@ -0,0 +1,39 @@
1
+ import { takaro, data, TakaroUserError } from '@takaro/helpers';
2
+ import { getVariableKey } from './utils.js';
3
+
4
+ async function main() {
5
+ const { pog, gameServerId, arguments: args, module: mod } = data;
6
+
7
+ const prefix = (await takaro.settings.settingsControllerGetOne('commandPrefix', gameServerId)).data.data;
8
+
9
+ const teleportRes = await takaro.variable.variableControllerSearch({
10
+ filters: {
11
+ gameServerId: [gameServerId],
12
+ playerId: [pog.playerId],
13
+ key: [getVariableKey(args.tp, true)],
14
+ moduleId: [mod.moduleId],
15
+ },
16
+ sortBy: 'key',
17
+ sortDirection: 'asc',
18
+ });
19
+
20
+ const teleports = teleportRes.data.data;
21
+
22
+ if (teleports.length === 0) {
23
+ throw new TakaroUserError(
24
+ `No public teleport with name ${args.tp} found, use ${prefix}settp <name> to set one first.`
25
+ );
26
+ }
27
+
28
+ const teleportRecord = teleports[0];
29
+ const teleport = JSON.parse(teleportRecord.value);
30
+
31
+ await takaro.variable.variableControllerUpdate(teleportRecord.id, {
32
+ key: getVariableKey(args.tp),
33
+ value: JSON.stringify(teleport),
34
+ });
35
+
36
+ await data.player.pm(`Teleport ${args.tp} is now private.`);
37
+ }
38
+
39
+ await main();
@@ -0,0 +1,60 @@
1
+ import { takaro, data, checkPermission, TakaroUserError } from '@takaro/helpers';
2
+ import { getVariableKey } from './utils.js';
3
+
4
+ async function main() {
5
+ const { pog, gameServerId, module: mod, arguments: args } = data;
6
+
7
+ const prefix = (await takaro.settings.settingsControllerGetOne('commandPrefix', gameServerId)).data.data.value;
8
+
9
+ if (!mod.userConfig.allowPublicTeleports) {
10
+ throw new TakaroUserError('Public teleports are disabled.');
11
+ }
12
+
13
+ const hasPermission = checkPermission(pog, 'TELEPORTS_CREATE_PUBLIC');
14
+
15
+ const existingPublicTeleportsForPlayerRes = await takaro.variable.variableControllerSearch({
16
+ search: {
17
+ key: ['pubtp_'],
18
+ },
19
+ filters: {
20
+ gameServerId: [gameServerId],
21
+ playerId: [pog.playerId],
22
+ moduleId: [mod.moduleId],
23
+ },
24
+ });
25
+
26
+ if (existingPublicTeleportsForPlayerRes.data.data.length >= hasPermission.count) {
27
+ throw new TakaroUserError(
28
+ `You have reached the maximum number of public teleports for your role, maximum allowed is ${hasPermission.count}`,
29
+ );
30
+ }
31
+
32
+ const teleports = (
33
+ await takaro.variable.variableControllerSearch({
34
+ filters: {
35
+ gameServerId: [gameServerId],
36
+ playerId: [pog.playerId],
37
+ moduleId: [mod.moduleId],
38
+ key: [getVariableKey(args.tp)],
39
+ },
40
+ sortBy: 'key',
41
+ sortDirection: 'asc',
42
+ })
43
+ ).data.data;
44
+
45
+ if (teleports.length === 0) {
46
+ throw new TakaroUserError(`No teleport with name ${args.tp} found, use ${prefix}settp <name> to set one first.`);
47
+ }
48
+
49
+ const teleportRecord = teleports[0];
50
+ const teleport = JSON.parse(teleportRecord.value);
51
+
52
+ await takaro.variable.variableControllerUpdate(teleportRecord.id, {
53
+ key: getVariableKey(args.tp, true),
54
+ value: JSON.stringify(teleport),
55
+ });
56
+
57
+ await data.player.pm(`Teleport ${args.tp} is now public.`);
58
+ }
59
+
60
+ await main();