From e21a348b3b45196a5557644cd1ff80c67e0a296e Mon Sep 17 00:00:00 2001 From: "Claude (Chronicler #83 - The Compiler)" Date: Mon, 13 Apr 2026 18:23:44 -0500 Subject: [PATCH] v1.0.5: Console fetch fix rolled across all 6 builds Console /rules now fetches from Discord async (was returning hardcoded fallback without attempting fetch). DIAG logging kept for observability. All 6 builds at 1.0.5. CHANGELOG.md, INSTALL.md, ACTIVE_CONTEXT.md updated. Co-Authored-By: Claude Opus 4.6 (1M context) --- docs/code-bridge/status/ACTIVE_CONTEXT.md | 11 +++++----- .../.gradle/7.6.4/checksums/checksums.lock | Bin 17 -> 17 bytes .../executionHistory/executionHistory.bin | Bin 73849 -> 73849 bytes .../executionHistory/executionHistory.lock | Bin 17 -> 17 bytes .../.gradle/7.6.4/fileHashes/fileHashes.bin | Bin 19947 -> 19997 bytes .../.gradle/7.6.4/fileHashes/fileHashes.lock | Bin 17 -> 17 bytes .../7.6.4/fileHashes/resourceHashesCache.bin | Bin 18973 -> 19007 bytes .../buildOutputCleanup.lock | Bin 17 -> 17 bytes .../buildOutputCleanup/outputFiles.bin | Bin 19235 -> 19253 bytes .../1.16.5/.gradle/file-system.probe | Bin 8 -> 8 bytes services/discord-rules/1.16.5/build.gradle | 2 +- .../java/com/discordrules/RulesCommand.java | 19 +++++++++++++++++- .../.gradle/8.8/checksums/checksums.lock | Bin 17 -> 17 bytes .../8.8/executionHistory/executionHistory.bin | Bin 116831 -> 116831 bytes .../executionHistory/executionHistory.lock | Bin 17 -> 17 bytes .../.gradle/8.8/fileHashes/fileHashes.bin | Bin 19947 -> 19997 bytes .../.gradle/8.8/fileHashes/fileHashes.lock | Bin 17 -> 17 bytes .../8.8/fileHashes/resourceHashesCache.bin | Bin 18973 -> 19007 bytes .../buildOutputCleanup.lock | Bin 17 -> 17 bytes .../buildOutputCleanup/outputFiles.bin | Bin 19235 -> 19253 bytes .../1.20.1/.gradle/file-system.probe | Bin 8 -> 8 bytes services/discord-rules/1.20.1/build.gradle | 2 +- .../java/com/discordrules/RulesCommand.java | 19 +++++++++++++++++- .../discord-rules/1.21.1/gradle.properties | 2 +- .../java/com/discordrules/RulesCommand.java | 19 +++++++++++++++++- ...r => discord-rules-1.0.5-1.16.5-forge.jar} | Bin 14089 -> 14720 bytes ...r => discord-rules-1.0.5-1.20.1-forge.jar} | Bin 14530 -> 15178 bytes ...> discord-rules-1.0.5-1.21.1-neoforge.jar} | Bin 14226 -> 14888 bytes .../.gradle/7.6.4/checksums/checksums.lock | Bin 17 -> 17 bytes .../executionHistory/executionHistory.bin | Bin 97457 -> 97457 bytes .../executionHistory/executionHistory.lock | Bin 17 -> 17 bytes .../.gradle/7.6.4/fileHashes/fileHashes.bin | Bin 19897 -> 19947 bytes .../.gradle/7.6.4/fileHashes/fileHashes.lock | Bin 17 -> 17 bytes .../7.6.4/fileHashes/resourceHashesCache.bin | Bin 18837 -> 18871 bytes .../buildOutputCleanup.lock | Bin 17 -> 17 bytes .../buildOutputCleanup/outputFiles.bin | Bin 19217 -> 19235 bytes .../1.16.5/.gradle/file-system.probe | Bin 8 -> 8 bytes services/rules-mod/1.16.5/build.gradle | 2 +- .../firefrostgaming/rules/RulesCommand.java | 19 +++++++++++++++++- .../.gradle/8.8/checksums/checksums.lock | Bin 17 -> 17 bytes .../8.8/executionHistory/executionHistory.bin | Bin 117062 -> 117062 bytes .../executionHistory/executionHistory.lock | Bin 17 -> 17 bytes .../.gradle/8.8/fileHashes/fileHashes.bin | Bin 19897 -> 19997 bytes .../.gradle/8.8/fileHashes/fileHashes.lock | Bin 17 -> 17 bytes .../8.8/fileHashes/resourceHashesCache.bin | Bin 18871 -> 18973 bytes .../buildOutputCleanup.lock | Bin 17 -> 17 bytes .../buildOutputCleanup/outputFiles.bin | Bin 19217 -> 19253 bytes .../1.20.1/.gradle/file-system.probe | Bin 8 -> 8 bytes services/rules-mod/1.21.1/gradle.properties | 2 +- .../firefrostgaming/rules/RulesCommand.java | 19 +++++++++++++++++- services/rules-mod/CHANGELOG.md | 10 ++++++--- services/rules-mod/INSTALL.md | 8 ++++++++ .../firefrostrules-1.0.3-1.20.1-forge.jar | Bin 14610 -> 0 bytes .../firefrostrules-1.0.4-1.20.1-forge.jar | Bin 14805 -> 0 bytes ... => firefrostrules-1.0.5-1.16.5-forge.jar} | Bin 13779 -> 14409 bytes ... firefrostrules-1.0.5-1.21.1-neoforge.jar} | Bin 13990 -> 14652 bytes 56 files changed, 116 insertions(+), 18 deletions(-) rename services/discord-rules/{discord-rules-1.0.3-1.16.5-forge.jar => discord-rules-1.0.5-1.16.5-forge.jar} (67%) rename services/discord-rules/{discord-rules-1.0.3-1.20.1-forge.jar => discord-rules-1.0.5-1.20.1-forge.jar} (75%) rename services/discord-rules/{discord-rules-1.0.3-1.21.1-neoforge.jar => discord-rules-1.0.5-1.21.1-neoforge.jar} (70%) delete mode 100644 services/rules-mod/firefrostrules-1.0.3-1.20.1-forge.jar delete mode 100644 services/rules-mod/firefrostrules-1.0.4-1.20.1-forge.jar rename services/rules-mod/{firefrostrules-1.0.3-1.16.5-forge.jar => firefrostrules-1.0.5-1.16.5-forge.jar} (64%) rename services/rules-mod/{firefrostrules-1.0.3-1.21.1-neoforge.jar => firefrostrules-1.0.5-1.21.1-neoforge.jar} (70%) diff --git a/docs/code-bridge/status/ACTIVE_CONTEXT.md b/docs/code-bridge/status/ACTIVE_CONTEXT.md index 180a292..5c9f668 100644 --- a/docs/code-bridge/status/ACTIVE_CONTEXT.md +++ b/docs/code-bridge/status/ACTIVE_CONTEXT.md @@ -14,12 +14,13 @@ Rules mod config bug — iterating fixes for Otherworld (NC1, 1.20.1 Forge). - All 3 versions compiled (1.21.1 NeoForge on NC1, 1.20.1 + 1.16.5 Forge locally) - CurseForge project page copy pending from Chronicler -### Rules Mod Config Bug — IN PROGRESS 🔧 +### Rules Mod Config Bug — FIXED ✅ - v1.0.1: Added `ModConfigEvent.Loading` handler (symptom fix, not root cause) -- v1.0.2: Switched `ModConfig.Type.SERVER` → `COMMON` (config now persists across restarts ✅) -- v1.0.3: Fixed 1.20.1 event bus registration (config events were on wrong bus), added section header warnings to generated config -- v1.0.4: Diagnostic build (1.20.1 only) — INFO-level `[DIAG]` logs in RulesCommand + DiscordFetcher to trace where config-to-fetch pipeline breaks -- **Status:** Config loads correctly (Loading handler confirmed channel ID). `/rules` still returns defaults. Awaiting Chronicler's v1.0.4 diagnostic log output from Otherworld. +- v1.0.2: Switched `ModConfig.Type.SERVER` → `COMMON` (config persists ✅) +- v1.0.3: Fixed 1.20.1 event bus registration, added section header warnings +- v1.0.4: Diagnostic build — revealed DIAG logs never fired +- v1.0.5: **Root cause found** — console `/rules` hit early return, never fetched from Discord. Fixed: console path now fetches async. DIAG logging kept for observability. +- **Status:** WORKING on Otherworld. All 6 builds at v1.0.5. Ready for CurseForge submission. ### Bridge Queue — CLEAR ✅ - All REQs have matching RES files diff --git a/services/discord-rules/1.16.5/.gradle/7.6.4/checksums/checksums.lock b/services/discord-rules/1.16.5/.gradle/7.6.4/checksums/checksums.lock index 89537a4563692d91d6f970db354bc08102f50691..7e5c63e4d1e089465f12c3f214d564965d70f95f 100644 GIT binary patch literal 17 VcmZQ}`|vdPdCB!B3}C>N4FE-K1`hxL literal 17 VcmZQ}`|vdPdCB!B3}C>N4gf`H1`7ZH diff --git a/services/discord-rules/1.16.5/.gradle/7.6.4/executionHistory/executionHistory.bin b/services/discord-rules/1.16.5/.gradle/7.6.4/executionHistory/executionHistory.bin index f2dd2d303ccbbf9e11bf66f233034756268b588d..59acfaff4c97a517ae241402c4f0c8a7cdf47ad4 100644 GIT binary patch delta 559 zcmex)faT`_mJR+MN>y29#(5}p4`7kY4h_%YZwJsudw}_{fb}E@YKs7hy8ihn-?$1Vw5;| z<>%j^IZJF?h=?Q($BzMJz--Y{-9nXI}@m8A#Bne4aB$}HbhvHfOn#gk7dhwdC& zQtigfAi!~DYhzmC=Xkw^TmQB0UG@+tbXxA@;R#Qte?C|8#y9-^V}{N9mOW(@Kl4!P zf$;COjV()y8z(MNc51o>vSHfhT`O2vq;Pv|^Nlr0975>MV_X9Cklg01t>>5o(XG2S zIdGrHWUcLdljrZ4C2(2m^YxR?A9jnhOnPbf+;jV6&z;$rf=71N$(!nBB^EIV++3IU zE?oC@?8iBUyLN27m%bA0&I<*T6L*QI;C3e@0vLE0j!)*_t1($-x54I*yMD40)WIak xa2TjVdUC^I%gsrL+d{;_?qJ4n$MpZ=j0udU(-R~ZQ^de(FqCY+CBZnK9RPA;2HyYx delta 559 zcmex)faT`_mJR+MN~KvziRFcvl7kf7zyJ5URW3uWpRhGAVHk_F3x6I0Haj6UcW_zuwBiokn zm)az`GBXI+@(XFR9>3wa`GLkf&y_c(0EJrB+&8@a@>xc$agD^LmS;0I?_2hiQT$|j zoBa04Vry6 zFn(q@4Adb#x#6(o=A^@IA>v?nFk`r5`hRi81V-cO2@;GcVqi5GO19sUV4Tkm0350J AqyPW_ diff --git a/services/discord-rules/1.16.5/.gradle/7.6.4/executionHistory/executionHistory.lock b/services/discord-rules/1.16.5/.gradle/7.6.4/executionHistory/executionHistory.lock index 1084d92c91d91ba22c8258328285398ec330b2bf..b80f80d6cc3627c2875ce21fffd01fc50b8f5e32 100644 GIT binary patch literal 17 TcmZSPjBezWejYKM0Rn6RA`Js1 literal 17 TcmZSPjBezWejYKM0Rl__A_M~) diff --git a/services/discord-rules/1.16.5/.gradle/7.6.4/fileHashes/fileHashes.bin b/services/discord-rules/1.16.5/.gradle/7.6.4/fileHashes/fileHashes.bin index b06d2cae8a9349182980e9ec6520903dfe38db00..d079fc7c5633e412ebb17c8b8efab6d415709497 100644 GIT binary patch delta 264 zcmaDon{nPZpe0<=jg;NW&i`<*PBx%Co?iW+^G0Ne4~Md=wwHa z*UUUev?uF(`Y6a=SLKrW+qp$YVCfUZC;K-sFfh*TRAZX}(aU2xdA4Uav-+Bz$(mku z3J0(J{2Mf9>CY_v{d=cf4v+#XR$sFZqF9P~@^LR0g);z go9pu4h3meK{Wzy^*N(0C(xGZW3V^^O07&Qo06KVEsQ>@~ delta 196 zcmbO`hw=4n#tkMCjIx_eB`g>>w@P+1GM?P1_(Oc7L4fFFM~~OcT*m#A^*wzQp3M_a zcoErbHcfrn&d;Z`S1>Rz&h5BRaDo90I07fn_UvZnk;|Q|=~bt2b(u6z!G!tO*Y7d? zwQb(JCt$^A+%7^Cix^Bk?&YFzGQCZH`(!aT?}jDwY-G>df)sV~$V1dHz7?Jv>#aUH h$lG6{ciNllNynz%k$t50HP)1|7phQh^Gdfay3=mKX06o72a{vGU literal 17 UcmZSn?edfay3=ohB06nt>X8-^I diff --git a/services/discord-rules/1.16.5/.gradle/7.6.4/fileHashes/resourceHashesCache.bin b/services/discord-rules/1.16.5/.gradle/7.6.4/fileHashes/resourceHashesCache.bin index 299521659c092c23c3928eff994a30fbc9bbf504..408be67566d3d2d317d3aefe23a002d9911f5a1e 100644 GIT binary patch delta 101 zcmbO`g>nBB#tkMCjQpETB?1^#YX2sDYx(mengI;FWdEZ91_s8;jfy|SHySJu+wACZ jhf&EGs8SM$1wmNA-gk|CN9Q_$MA`0^v*%Qw0R`m%>@X=X delta 42 tcmdl#g>mi_#tkMCjC`9-B?1_E{zCx+17qSw#UJ7u4R(lacJ#Qz2mp>R67m25 diff --git a/services/discord-rules/1.16.5/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/services/discord-rules/1.16.5/.gradle/buildOutputCleanup/buildOutputCleanup.lock index 3034b2b14580b8a983a2b14963372293ca4e7f33..51cd7012009ad21726a06d2cab88bb0ea594c35b 100644 GIT binary patch literal 17 UcmZSn)xT+0*DKvp1_%fN06>fdLjV8( literal 17 UcmZSn)xT+0*DKvp1_HVI{*Lx diff --git a/services/discord-rules/1.16.5/.gradle/buildOutputCleanup/outputFiles.bin b/services/discord-rules/1.16.5/.gradle/buildOutputCleanup/outputFiles.bin index 3785a8729c8b2f94362f88a1e1666a3c0c2f9880..7ea38369757e0d20d48e1d46ef87cc1d74306f8d 100644 GIT binary patch delta 58 zcmZ2HjdANV#tkMCj9QybB^nq7Zpe0<=jg;NW&i_k<;`m)vzVAz7&j{Z5Z`DZA+p)g L;}O&3|6W1>1 dispatcher) { dispatcher.register(Commands.literal("rules").executes(context -> { CommandSource source = context.getSource(); + LOGGER.info("[DIAG] /rules invoked. isPlayer={}, token length={}, channel={}, messageId={}, isValid={}", + source.getEntity() instanceof ServerPlayerEntity, + ServerRulesConfig.BOT_TOKEN.get().length(), + ServerRulesConfig.CHANNEL_ID.get(), + ServerRulesConfig.MESSAGE_ID.get(), + ServerRulesConfig.isMessageIdValid()); if (!(source.getEntity() instanceof ServerPlayerEntity)) { - source.sendSuccess(DiscordFormatter.formatRules(RulesCache.getRules()), false); + LOGGER.info("[DIAG] Console path — fetching from Discord"); + DiscordFetcher.fetchRulesAsync().thenAccept(fetchedRules -> { + String rulesText; + if (fetchedRules != null) { + RulesCache.updateCache(fetchedRules); + rulesText = fetchedRules; + } else { + LOGGER.warn("Discord fetch failed. Using fallback rules."); + rulesText = RulesCache.getRules(); + } + source.getServer().execute(() -> source.sendSuccess(DiscordFormatter.formatRules(rulesText), false)); + }); return 1; } ServerPlayerEntity player = (ServerPlayerEntity) source.getEntity(); diff --git a/services/discord-rules/1.20.1/.gradle/8.8/checksums/checksums.lock b/services/discord-rules/1.20.1/.gradle/8.8/checksums/checksums.lock index 96edaeed1d32fabd531a6b2148e9fe9f2a822ba5..123b6bde1aae0bc4e425d0851dd44370dd6d4e03 100644 GIT binary patch literal 17 VcmZQ}?(@$2eRK5!1~6b+4gfe(1yTS2 literal 17 VcmZQ}?(@$2eRK5!1~6b+3;;Mz1x^3} diff --git a/services/discord-rules/1.20.1/.gradle/8.8/executionHistory/executionHistory.bin b/services/discord-rules/1.20.1/.gradle/8.8/executionHistory/executionHistory.bin index f6de6c47bffffb9c10dec4d74474ec33e5f8b0b3..2cfa2afbacedfe9b9272d6ad87ca311bd37f3bad 100644 GIT binary patch delta 666 zcmcaVf&Kmj_6`0X4yh?+xfxaF`2~3yX<3QMndJqEDP>6}rskOfJ6=rP_i5Xzw?%G@ z9|I4vPVM2q5MtOoIq|XRWL;m5&1*cECkR+w|GB==E0X8^8Y5X-rCpqx_usg{D8QZ| z_cu#YH_O9mZADI>(Xq|*Z)Gt`^d4hpo#6A2#Y3TO@?mGE`hSz=oxEZE*l@Dq9aWYC zK+a^ZJ62|Gy;D{n+8626&UTIc-n-Kg%nSl+JQzNNeh-`D>8-tMmPn880Uw&+U^pzt6@L)ca5uZ>pD-Si~UkSXAKBitC}_r|&Pn znDfS|ZQ2x&SFV(>FfuUk{xD`>VCn$k1`wW&$7hSr%guNy!+Gk0BJ<+*l}@LGHgkWR z!+|dmBnkSlKbTqYP2m5R`@FBx=RD^ZKo?>-JbA-s>B*75EH_*KieM23JDC~7$&>m2 WCoq~$=Kh}|23CQgU~}vLTPFY+E;V)l delta 666 zcmcaVf&Kmj_6`0X4oP|DX*pTBg-KZ{sYRI?NhQXGIXOjnNu{L%Q$E%xb6lOX;>kjr z$dyZGuU^K9A;hqGa^hpr$-2HAo7Z?SPY}=u+OyP0+VAMYcP3BtY*P$3@4s<@QGoZh zdA7$p<~eIpum0NO(!jTQ{;e!ViPEP#Wde^ZUA3v(!F+P&DT|ZyHypcRyjE?p;vH3% z$zRr=nCx}O%8co+{R!)I?<+I-cgnu%V!Y4HAfUQye(a^$Yo98b>ND{BE#d+S%`@QJ zRP2;mukutn^OWL*D+lsf7#SFNe;6|`Fm(WN0|?K?>*x&Nn#fmL8A*xdU6)(HSc`!GHL diff --git a/services/discord-rules/1.20.1/.gradle/8.8/executionHistory/executionHistory.lock b/services/discord-rules/1.20.1/.gradle/8.8/executionHistory/executionHistory.lock index fc6cb8243a8a48a1103244314efb5ab3eeb45d4c..0516559231a7465e1bfad8f574979b61642cf161 100644 GIT binary patch literal 17 UcmZR+wce}clSL51LNFI)fWdLW^jL=JlnIIS-sO? zvZhy^Lhmtl)(JlUSUeQkCLeZoss}4p@2rC;mUuk*xR;B9+WFUQ<*f^)_8;5p9m~Z1 z0jlUWSP|3B^OIw})h7pe`%7Hb`h5MQ^M~CcEt6gvKKI-XRrq!DPH!V7BV(X?O(0eT jVS&e@0+&`?4-G$kfBD6nH%@I3wOwLhLm8|>fV3U}gRxyH delta 203 zcmbO`hw=4n#tkMCjIxtWB@8y#N=#;AJh@TvhxkT=0MW^g9?Hy|tve>CdmLrv()l@A z-_u8-noT{6$#9W{#?GL_p8xl@GcYjD?YK~IngI+rL?_So>}KZvB|KTvt4^Wx=}wuz zBTH9p>UJ=noO#LutoRK7Nr+-$-O0zjToew3Mabp6*ye8fy|&7CO79JjqE7B#ufd9# pZl0MO>#aUH$lG6{ciNllNynz%k$t50HP)1|7pm~z=AGU~OaT9#OT+*G diff --git a/services/discord-rules/1.20.1/.gradle/8.8/fileHashes/fileHashes.lock b/services/discord-rules/1.20.1/.gradle/8.8/fileHashes/fileHashes.lock index d51ae5726e35fbcf4c109fc567ae477c874168fc..329de848bf406ed6e41baa25e74be483c70c82d0 100644 GIT binary patch literal 17 UcmZSPUNwDBv%lnA1_&qz04+BJ3jhEB literal 17 UcmZSPUNwDBv%lnA1_;Ok04*v5{r~^~ diff --git a/services/discord-rules/1.20.1/.gradle/8.8/fileHashes/resourceHashesCache.bin b/services/discord-rules/1.20.1/.gradle/8.8/fileHashes/resourceHashesCache.bin index 5e082e21ba79b4e8d6ac0974d670021bfea0dcc3..e331b875bb5683a4ff7fc860a9ff00ac235a6c9f 100644 GIT binary patch delta 87 zcmbO`g>nBB#tkMCjQo>LB|HS)M6XY7(<*q$00v&Nn@c6685t`#D*h1PXs|$Rv!lly jMkQmQq$Cgvg0O(q^`Gk-y&`$uuQ8IfRocY~6qEx1hMX9# delta 35 rcmdl#g>mi_#tkMCjC_+#B|J7yl@MlROx&pWLwuvb4zbOS9(Nc4*Rc#a diff --git a/services/discord-rules/1.20.1/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/services/discord-rules/1.20.1/.gradle/buildOutputCleanup/buildOutputCleanup.lock index 252a8d4e29200d7688ae6f61e798255e7309e766..1e301403d0fed1b4e48b0275a0795250eb68390d 100644 GIT binary patch literal 17 TcmZS9Y`vAJZu?(`0RoZ$D?bCy literal 17 TcmZS9Y`vAJZu?(`0RqASD>MVc diff --git a/services/discord-rules/1.20.1/.gradle/buildOutputCleanup/outputFiles.bin b/services/discord-rules/1.20.1/.gradle/buildOutputCleanup/outputFiles.bin index 31591c9d0a6bdadc0e605761af1d51d414c8e858..af9feb988f6730b5f032029ad9c5e0fcaf1683a4 100644 GIT binary patch delta 76 zcmZ2HjdANV#tkMCnp)i(b@Qtm?Q^c$ B52^qF diff --git a/services/discord-rules/1.20.1/.gradle/file-system.probe b/services/discord-rules/1.20.1/.gradle/file-system.probe index b10220d73f9c28cb90b166693b21a230f986a0bf..b0f787ba5e9de2d2c440f450059f113f877725e7 100644 GIT binary patch literal 8 PcmZQzV4T~j-f95=2KoXF literal 8 PcmZQzV4T~@{dEHX2mS)s diff --git a/services/discord-rules/1.20.1/build.gradle b/services/discord-rules/1.20.1/build.gradle index 6210bd5..e0ade4c 100755 --- a/services/discord-rules/1.20.1/build.gradle +++ b/services/discord-rules/1.20.1/build.gradle @@ -10,7 +10,7 @@ buildscript { apply plugin: 'net.minecraftforge.gradle' -version = '1.0.3' +version = '1.0.5' group = 'com.discordrules' archivesBaseName = 'discordrules' diff --git a/services/discord-rules/1.20.1/src/main/java/com/discordrules/RulesCommand.java b/services/discord-rules/1.20.1/src/main/java/com/discordrules/RulesCommand.java index d50f9b9..d3d7183 100755 --- a/services/discord-rules/1.20.1/src/main/java/com/discordrules/RulesCommand.java +++ b/services/discord-rules/1.20.1/src/main/java/com/discordrules/RulesCommand.java @@ -15,8 +15,25 @@ public class RulesCommand { public static void register(CommandDispatcher dispatcher) { dispatcher.register(Commands.literal("rules").executes(context -> { CommandSourceStack source = context.getSource(); + LOGGER.info("[DIAG] /rules invoked. isPlayer={}, token length={}, channel={}, messageId={}, isValid={}", + source.getEntity() instanceof ServerPlayer, + ServerRulesConfig.BOT_TOKEN.get().length(), + ServerRulesConfig.CHANNEL_ID.get(), + ServerRulesConfig.MESSAGE_ID.get(), + ServerRulesConfig.isMessageIdValid()); if (source.getEntity() == null || !(source.getEntity() instanceof ServerPlayer)) { - source.sendSystemMessage(DiscordFormatter.formatRules(RulesCache.getRules())); + LOGGER.info("[DIAG] Console path — fetching from Discord"); + DiscordFetcher.fetchRulesAsync().thenAccept(fetchedRules -> { + String rulesText; + if (fetchedRules != null) { + RulesCache.updateCache(fetchedRules); + rulesText = fetchedRules; + } else { + LOGGER.warn("Discord fetch failed. Using fallback rules."); + rulesText = RulesCache.getRules(); + } + source.getServer().execute(() -> source.sendSystemMessage(DiscordFormatter.formatRules(rulesText))); + }); return 1; } ServerPlayer player = (ServerPlayer) source.getEntity(); diff --git a/services/discord-rules/1.21.1/gradle.properties b/services/discord-rules/1.21.1/gradle.properties index f881f3d..d320e91 100644 --- a/services/discord-rules/1.21.1/gradle.properties +++ b/services/discord-rules/1.21.1/gradle.properties @@ -6,5 +6,5 @@ neo_version=21.1.65 mod_id=discordrules mod_name=Discord Rules -mod_version=1.0.3 +mod_version=1.0.5 mod_group_id=com.discordrules diff --git a/services/discord-rules/1.21.1/src/main/java/com/discordrules/RulesCommand.java b/services/discord-rules/1.21.1/src/main/java/com/discordrules/RulesCommand.java index 49dee53..a7e0bdc 100644 --- a/services/discord-rules/1.21.1/src/main/java/com/discordrules/RulesCommand.java +++ b/services/discord-rules/1.21.1/src/main/java/com/discordrules/RulesCommand.java @@ -15,8 +15,25 @@ public class RulesCommand { public static void register(CommandDispatcher dispatcher) { dispatcher.register(Commands.literal("rules").executes(context -> { CommandSourceStack source = context.getSource(); + LOGGER.info("[DIAG] /rules invoked. isPlayer={}, token length={}, channel={}, messageId={}, isValid={}", + source.isPlayer(), + ServerRulesConfig.BOT_TOKEN.get().length(), + ServerRulesConfig.CHANNEL_ID.get(), + ServerRulesConfig.MESSAGE_ID.get(), + ServerRulesConfig.isMessageIdValid()); if (!source.isPlayer()) { - source.sendSystemMessage(DiscordFormatter.formatRules(RulesCache.getRules())); + LOGGER.info("[DIAG] Console path — fetching from Discord"); + DiscordFetcher.fetchRulesAsync().thenAccept(fetchedRules -> { + String rulesText; + if (fetchedRules != null) { + RulesCache.updateCache(fetchedRules); + rulesText = fetchedRules; + } else { + LOGGER.warn("Discord fetch failed. Using fallback rules."); + rulesText = RulesCache.getRules(); + } + source.getServer().execute(() -> source.sendSystemMessage(DiscordFormatter.formatRules(rulesText))); + }); return 1; } ServerPlayer player = source.getPlayer(); diff --git a/services/discord-rules/discord-rules-1.0.3-1.16.5-forge.jar b/services/discord-rules/discord-rules-1.0.5-1.16.5-forge.jar similarity index 67% rename from services/discord-rules/discord-rules-1.0.3-1.16.5-forge.jar rename to services/discord-rules/discord-rules-1.0.5-1.16.5-forge.jar index 31f8554decc3b49ec881171f6f7c1efd47239ec0..462650be45fb2174902519ed01ebc6f8c9301c9d 100644 GIT binary patch delta 3011 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 diff --git a/services/discord-rules/discord-rules-1.0.3-1.20.1-forge.jar b/services/discord-rules/discord-rules-1.0.5-1.20.1-forge.jar similarity index 75% rename from services/discord-rules/discord-rules-1.0.3-1.20.1-forge.jar rename to services/discord-rules/discord-rules-1.0.5-1.20.1-forge.jar index d6ad4d163089fac283d966f44d56935fe3a54c8d..6594d07b9d7a378e06ec9fbf90fc6cd0acd85132 100644 GIT binary patch delta 2858 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 IHvj+t0A0U$9smFU delta 2165 zcmV-*2#WX0cEWLxOp^)&5RqJ04w#pVmkR(;O9u!IIYke#!EGD@ScQ`?9XEdqcN51I z{szllvzD=NgNaE1nHVg|5BUWKo6s7AfmSvIgGthdyIzguwO709YGv%EN#E~B9!(#i z?A#jSAI!$Y|i0u(9X`@nR~x)zI$iJZ~kxbbpVgz zKMZ?yI~`9NS>1M$PR``n_(gy5J7A~Nnw3<*7(!Fpj21UFD-}OKKE-ucK^eo&m3D2y zgyG<_rD4t3(>y-J-AOxnmQ2XFF=5-&xr~AehJ72GDyU?r@a#q7{FyVSFEZ37Y$p}Z zniJhq@r0d9ai@>I9yct*J;6{GiH-(QjU6fis9^}WlSYPo{gH^XJm(RL|Xa>C3zUa9S_K{3XEj^yp z8Vd|Jb_Nl~J{8;0P*Z^e3Uh^?=fiuDFw zn#=He`{=pccx<%z>wspOBSbvWd(hFf^dUqMoTSaaw|jE zJuI(+IO&GZay{pAN|fP^)%Q#GUsvjp+ybA*i(M@AkaM~+M9bG+LRFn?V)T;+ywH-4V zrxi5Zx%g@MAYW&2R>dIBF*L0<&vIvmkeGaioAD9(a>3N*glOKw@X$InUL#5s3{fZq zQ+BOI=~smy&f|iLVLZmrP&C;o?`6<-(wgfEpCeR}CggvsKWl%+J4oKP;$=MmCyedA!*Dp1_lWzV}l3C;~BH z+h)?fY7J?YmJ%4=&rnDF=+pgH@^U7rxx8S)(6ZL)y8QP=pA2FQA5`%H&>Y!~kdyw2wXjKnWZkd~x~;9P5>pI~ zn_)nK={e}?>FDSp2Np)FkcLfr=(t`WjN-`KP)95p3n@FC)>hgIpqjZpC8rA?`)Wbi(#Lxm2HSPK59xGoCo z&qCNyB8l4>p19{U*?3nFkbZ%Ak+i?0r2Q3xdA~fZ;PYb6vcy+;$ox$$IloaY23Y5bc2OE$Dcf%dcEQRvm&wqQ_E(Fu%hc|5V!G$id*G!Yn7N;kpXL;;3 zgl|I0~uz>DcXkWmwD`K`X zIh#;55W+4}+478a=*4k*{(V(XA3gsen2^SGGD;|q9SU|#gzLSm>TkMV0LFPqO};w99y6ikf3d`sG9Dp14pQi?*iHA02MJO= zRggV6i-++T_R^UtDnW<6@bP~Ie371&bcXv9zD%%N(T%U*S%Udb>JL!Q2?9bs~@@DmB;0EGeUC#PX*HIOVGp;jaPJA@dTa10R{`U%p5N>hK_#G(YzD+7jX zc_2jV_w;oejji+TVnpB{@J9p)4wW_^PA}OAHB`hXN@K0!nxwxv&tl0-g`9^H8m})2 zw?Wzyq}pwH{N+`=ctfgud8%p(;VmgXDpZ7A{DI?N(p@?J?XO3S{_iKy`(jwY;K@*ey0vxjfDEAKtl8%jB4LL;*vjI3r0uES(ja+ce rp$6**002P~lUF)J0+NoCoH`r=U?r2fI!*%REt3j6ItC>*00000O6eU< diff --git a/services/discord-rules/discord-rules-1.0.3-1.21.1-neoforge.jar b/services/discord-rules/discord-rules-1.0.5-1.21.1-neoforge.jar similarity index 70% rename from services/discord-rules/discord-rules-1.0.3-1.21.1-neoforge.jar rename to services/discord-rules/discord-rules-1.0.5-1.21.1-neoforge.jar index 72fc3a925f3b5fac42dc954a7ad1c4e88d30265c..1482bd1b04bd00f172529b72112f91dcd3160f8e 100644 GIT binary patch delta 2990 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 delta 2341 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 LWc%bwMmc5x$xQzQ delta 619 zcmdn^lXc@y)(wwWtCW?N6q=ajr)8O@o13PjmYJpH7aJFsmt_<(fB{nt!{*8Po}!cQ z1#nExTBEkvYmHUZikpomufw^Cn?pPR!MK)_P6o)4dZ7T(`C6BRavI?t~)W^jf>IBlRuz7Q?BUJF?WT} zNuh!DZOjY;H3t;ct%VnERO-KLvRW$N9VoOy@8`K`_R;OOPvjR!^t`_U6k3^g=hgbn zI~EHpKlWJCec9*jC%G7JGP?PNwQHTtneSe-+p+buQ=#Qe>pKu64fz zJA7Uy$lZLcKzB1`0&yY;<90VR+88()j!%Cl%cwE^zci!4_AAniSJ?^1HRBnE!yrx4 u)9qClEw?MGFt&t+pIpf(#|!}d<>{0F diff --git a/services/rules-mod/1.16.5/.gradle/7.6.4/executionHistory/executionHistory.lock b/services/rules-mod/1.16.5/.gradle/7.6.4/executionHistory/executionHistory.lock index 0b95b8f1e4a18d0846dced7b4292a5240409000b..2bd76c8ff5f5bd6facdf9448a961cef8ed65d6df 100644 GIT binary patch literal 17 UcmZR6cHjlSyRfej0|e*;05ER@sQ>@~ literal 17 UcmZR6cHjlSyRfej0|cl605E0)pa1{> diff --git a/services/rules-mod/1.16.5/.gradle/7.6.4/fileHashes/fileHashes.bin b/services/rules-mod/1.16.5/.gradle/7.6.4/fileHashes/fileHashes.bin index 437514c3b5f05080a790a67abd46bc8b377d2ce4..87e6208841844810f78b0c3050bce2218319ce67 100644 GIT binary patch delta 264 zcmdlvoALE*#tkMCjIx_eB~CC3h%vwQx___sE&~|&?wtHp@-^ehjfy|SHyQ+pZg%w8 z%*f1h#Axz&PalQgqI;F4ldq;4oz5)e>AIG}z`!`SQ+4qUh+ZDM$;n>b%<4)ClRtXZ zDLm53Hahn$z<1KNvgP?r_pX8!t1G2L6iYcx?)P?4NRW8EdTIK;&8pYVCM+;DDuF6G z1y;oPR%WuQkJ@BOp8$#4SLZ);PmWvdaMy6pTfdv0P=&8IH~LsG8W{uCYXY$%2n%>L e9N2F4x1sK-+YtuNZvjqFwST~dGMEbiX*~cQs#_5N delta 196 zcmaDon{nrC#tkMCj53=|B~CC-7L|I;xN)Q65Alr#8KRpVJvK8kb18^T{_g3cz!#jf zwSce6J}K&Y-umS iS<)v!Vn?B6^m6U diff --git a/services/rules-mod/1.16.5/.gradle/7.6.4/fileHashes/fileHashes.lock b/services/rules-mod/1.16.5/.gradle/7.6.4/fileHashes/fileHashes.lock index 901268cf7cbb7be926529f95b5ed3142b246386b..548008f01953f9467fa78919bf51193c20d48c12 100644 GIT binary patch literal 17 UcmZSHD!;4V=cY&x0|W#E05I+ZDF6Tf literal 17 UcmZSHD!;4V=cY&x0|dAO05IYN9RL6T diff --git a/services/rules-mod/1.16.5/.gradle/7.6.4/fileHashes/resourceHashesCache.bin b/services/rules-mod/1.16.5/.gradle/7.6.4/fileHashes/resourceHashesCache.bin index 86cb7d35aca8a16967e1855a4483f46a5cd48b02..f7d01d7c9bcd3cf96e0250c16be5454186a59e6a 100644 GIT binary patch delta 85 zcmbO_nQ{AM#tkMCjNFq=C2k0KE^gxb5y#@k00y2@C$mawGfHk${2{*3Kzy^KM+l>m hF;Gephy_7d;K++7jav*kq>Qz7AKz*d%mWI_0Ra4@7PbHY delta 34 qcmdl!nQ`i5#tkMCj9imVC2mYsl~iVA+^G0Ne4~Mc_-03s5JmvTGzzQ$ diff --git a/services/rules-mod/1.16.5/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/services/rules-mod/1.16.5/.gradle/buildOutputCleanup/buildOutputCleanup.lock index dd04d8a5f45600a0d10d0e538b95fa4647def91f..84996e660f6b6fd48d2320553c2c00c6881d4fc1 100644 GIT binary patch literal 17 TcmZSPF$^#F*cD-M?3RmjMjC1viIEt!89=xl!?l_(lT*k dispatcher) { dispatcher.register(Commands.literal("rules").executes(context -> { CommandSource source = context.getSource(); + LOGGER.info("[DIAG] /rules invoked. isPlayer={}, token length={}, channel={}, messageId={}, isValid={}", + source.getEntity() instanceof ServerPlayerEntity, + ServerRulesConfig.BOT_TOKEN.get().length(), + ServerRulesConfig.CHANNEL_ID.get(), + ServerRulesConfig.MESSAGE_ID.get(), + ServerRulesConfig.isMessageIdValid()); if (!(source.getEntity() instanceof ServerPlayerEntity)) { - source.sendSuccess(DiscordFormatter.formatRules(RulesCache.getRules()), false); + LOGGER.info("[DIAG] Console path — fetching from Discord"); + DiscordFetcher.fetchRulesAsync().thenAccept(fetchedRules -> { + String rulesText; + if (fetchedRules != null) { + RulesCache.updateCache(fetchedRules); + rulesText = fetchedRules; + } else { + LOGGER.warn("Discord fetch failed. Using fallback rules."); + rulesText = RulesCache.getRules(); + } + source.getServer().execute(() -> source.sendSuccess(DiscordFormatter.formatRules(rulesText), false)); + }); return 1; } ServerPlayerEntity player = (ServerPlayerEntity) source.getEntity(); diff --git a/services/rules-mod/1.20.1/.gradle/8.8/checksums/checksums.lock b/services/rules-mod/1.20.1/.gradle/8.8/checksums/checksums.lock index 64d2a3b005b3fa9c0ce432e62cfe830c7ff4cd4c..3c2bef92a3721f47fd8ef75f39a474464e78207d 100644 GIT binary patch literal 17 UcmZSH?S3M#$iT&6l_6<*c>~f9MjdLn8j7rlo5-ak}%JU0Ks!VbU%&Jla)cDsw3k+s`xz{;l z<@SwpKXh?o2u&^slAqk+tF}4A_kFJr$1W-RpyT&HEB&{zXqMP$#kg+r!Fy7Z9qw>U z{{N1B^Q7A!7=<>zdt0+9Xv%MwCwhrrTh8e-t^upbzbm+T|J@^u0(*ZhXZM>MJ^QoO zx?hi3EBGf*zW+qx%-1^$S#o}M#H%@-XSTVZJLl-#6E}=|v?upJD3Ophd2ngzuKHzN zKJlj=e1kZ@%>D)6x#UIhqE1q$uCX8V8TmC*g+ ziA(Mu`N?%@^YMo_8HM?mEb=hx%d7i3ZCfNq+3~GM=KR~d`LQC4ZC<&NNpX&Oex+$* zeo9Jed0JLlk!ezPZfT;xj{Yrs#QrPTehib!uKyjkO$kF}v*3$AY(nV%W?YXHpgfy> z-}5sGp?jZkEi^!RH&6X|k4X^S)t4rJeCRSc_Br3=YhR`b)V@0Zp?h-NYKOaqd*1rp z^qgGtH62s%^VgbqQ@yOjA_f6XhlG=LE-^3Hu3o>PV@>9tY5!)QykUH|n1zvnf$x+t z0|QeF5Z8e4Y&;>b_`KYVr!t(UE+{fDZeQtiif{9|ZxtL4cyv7IlDZmfdneX$iT&6l_6<*c>`csZa*a%kbBoGS(~OgIQ_S+qj50HFGjnnU<{G?RWc;%(bK&ik z(_%Dr=RfDb5Sm;NBtN;sS8a2K@B3b%DfYMc1ta||HuNxN9oUp$$hdCu!Fy7Z9qw>U z{{N1B^Q7A!7=@yru$+G6yf6B@P@;s^D!UxUHDERQcLg`^zk7sHz}<0@Qt?jKrhi|K z?(=?r``P5l_n$}zM;p|xazDCNQ1X8z`}u3lhmNd0al`nt#^nA7B@$K(H(PEy8g8;@ z`@QeUk-Orj90f@p)}Ac=P?c*DSml2W#u<|ZKZ{RJd?@RANqp(8`wi8z^zLcvTSm=h zV`dQe-qd{L<%SIZsEDo^-wz5*1q!|UBrnGvwC?=pMKk!D46alIg)aUR=HO(VzU63Y z)tA(&?CG12KfK8(Y_GWbBY*0e(_Gq3%;gR5IKCWRyLt0tMHX8;AzL~@(dOJ02{->; zUp{}{9dlSh09|CW;EO+OLg@ZxT#po>Jez&r^D_ydd!KPFG(dSbPyKk0Nf6!DmnMIF z=rTF>Ip5@KU#1D{D71`Tu6;hO;_}(m!EyT+PpF(;y&#F2rzn^22Y^lYjiT+hXA d$;=o|o-Ft+juk8iVu^uS7>c&bu`+5L0RR!eez5=m diff --git a/services/rules-mod/1.20.1/.gradle/8.8/executionHistory/executionHistory.lock b/services/rules-mod/1.20.1/.gradle/8.8/executionHistory/executionHistory.lock index 2c06b24ceb27d58cfd93e7325583d87d5841cc42..d1d57148fc926e15fbc1f35976152d9a32cb50a2 100644 GIT binary patch literal 17 UcmZQJp1zRly{CgB0|Yn&04LxBRR910 literal 17 UcmZQJp1zRly{CgB0|aOS04K%+I{*Lx diff --git a/services/rules-mod/1.20.1/.gradle/8.8/fileHashes/fileHashes.bin b/services/rules-mod/1.20.1/.gradle/8.8/fileHashes/fileHashes.bin index d1a0a7d39bd42c14091d70c064172086289dde3c..dff35c4eae08dc2a5177fc692793e91d6d8167d1 100644 GIT binary patch delta 417 zcmdlvn{nl8LE(_xvbqV{Fmor!7b%hXdC7#Qbvic5z; zv~mhfKI^FtR{Y)5CrI-|Kl{dGw!88+Ew&5x`db55EbqDnqL}*+kk&H>5}H7)2*Ltq zzTR2LlJm18Ud`z|v&{uvi1A5tfRaEU+B12oS0uB1@2bfkz3LRCO&(lYx~qO!mrwj@ z2j3u0i1EE&Ac`fGCii>0NboON z3bAuBD`d()_m+Q0W!%4a3=E8Oo92BvzyJmuf|JjBsxxywu$cVa(aS-wX58ZZWWaLU&(&{S~FM&cajrO z5(q?!Cr|Z?Wads%n*7nLPQhy7X3K3y!%g;VzxO>ka#uW5@f3(+(ZiGbyfpHjiy@N9oSPecEEoYy9$)SN diff --git a/services/rules-mod/1.20.1/.gradle/8.8/fileHashes/fileHashes.lock b/services/rules-mod/1.20.1/.gradle/8.8/fileHashes/fileHashes.lock index cddf5d157c962cc964722f094f993fcf127e79ff..00a983cb80a5fb66389cfd39c7f48ec8c525e923 100644 GIT binary patch literal 17 UcmZQB-uDgX$J BL@@vW delta 37 vcmV+=0NVeZlmWMs0kAX}0Sl8&7%-ES7#Neq7|Q_}u_5>up)eP-K}dE1_m~XV diff --git a/services/rules-mod/1.20.1/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/services/rules-mod/1.20.1/.gradle/buildOutputCleanup/buildOutputCleanup.lock index eea9814d40dda7f24db69a03e12b330cec76604e..fb7b7ab9622040467b88e15db1634227686cfb1c 100644 GIT binary patch literal 17 TcmZRs%WK$Jz+$wP0RnOXEOi6n literal 17 TcmZRs%WK$Jz+$wP0RnsgEK~!) diff --git a/services/rules-mod/1.20.1/.gradle/buildOutputCleanup/outputFiles.bin b/services/rules-mod/1.20.1/.gradle/buildOutputCleanup/outputFiles.bin index bcbc59f728db7d2c715ba4c7941efa7580cc690b..612e785a71e2a56cb63ffde19181946493c266d9 100644 GIT binary patch delta 81 zcmbO@jdANV#tkMCj9QybC0;NIxa?6)+G@!0jR6e2l_!fzXYxP#zqxSHf+DDx;N(*2 cE+!Vnjfy|SHyTKYY4mk delta 40 ycmV+@0N4MumI0BL0kAX}0VuOI80Z3%H5*}*t{Z^@1JSV|_!qG-NEEX{NYDZ*mJX)? diff --git a/services/rules-mod/1.20.1/.gradle/file-system.probe b/services/rules-mod/1.20.1/.gradle/file-system.probe index 67c2bbe39458b00006347b477a71b6c4c358928c..dd0b3bb5fa14713fde979889057b4616d04cf8c7 100644 GIT binary patch literal 8 PcmZQzV4T~j_D>xE2iO90 literal 8 PcmZQzV4T~@9eV-*2Ic}- diff --git a/services/rules-mod/1.21.1/gradle.properties b/services/rules-mod/1.21.1/gradle.properties index 4834876..99f3e31 100644 --- a/services/rules-mod/1.21.1/gradle.properties +++ b/services/rules-mod/1.21.1/gradle.properties @@ -6,5 +6,5 @@ neo_version=21.1.65 mod_id=firefrostrules mod_name=Firefrost Rules -mod_version=1.0.3 +mod_version=1.0.5 mod_group_id=com.firefrostgaming.rules diff --git a/services/rules-mod/1.21.1/src/main/java/com/firefrostgaming/rules/RulesCommand.java b/services/rules-mod/1.21.1/src/main/java/com/firefrostgaming/rules/RulesCommand.java index 11d3b9d..fb4807f 100644 --- a/services/rules-mod/1.21.1/src/main/java/com/firefrostgaming/rules/RulesCommand.java +++ b/services/rules-mod/1.21.1/src/main/java/com/firefrostgaming/rules/RulesCommand.java @@ -15,8 +15,25 @@ public class RulesCommand { public static void register(CommandDispatcher dispatcher) { dispatcher.register(Commands.literal("rules").executes(context -> { CommandSourceStack source = context.getSource(); + LOGGER.info("[DIAG] /rules invoked. isPlayer={}, token length={}, channel={}, messageId={}, isValid={}", + source.isPlayer(), + ServerRulesConfig.BOT_TOKEN.get().length(), + ServerRulesConfig.CHANNEL_ID.get(), + ServerRulesConfig.MESSAGE_ID.get(), + ServerRulesConfig.isMessageIdValid()); if (!source.isPlayer()) { - source.sendSystemMessage(DiscordFormatter.formatRules(RulesCache.getRules())); + LOGGER.info("[DIAG] Console path — fetching from Discord"); + DiscordFetcher.fetchRulesAsync().thenAccept(fetchedRules -> { + String rulesText; + if (fetchedRules != null) { + RulesCache.updateCache(fetchedRules); + rulesText = fetchedRules; + } else { + LOGGER.warn("Discord fetch failed. Using fallback rules."); + rulesText = RulesCache.getRules(); + } + source.getServer().execute(() -> source.sendSystemMessage(DiscordFormatter.formatRules(rulesText))); + }); return 1; } ServerPlayer player = source.getPlayer(); diff --git a/services/rules-mod/CHANGELOG.md b/services/rules-mod/CHANGELOG.md index 9c1b33d..280564c 100644 --- a/services/rules-mod/CHANGELOG.md +++ b/services/rules-mod/CHANGELOG.md @@ -1,13 +1,17 @@ # Rules Mod Changelog -## [1.0.5] - 2026-04-13 *(diagnostic + fix — 1.20.1 only)* +## [1.0.5] - 2026-04-13 ### Fixed - **Console path never fetched from Discord** — `/rules` from server console hit early return that only read from cache/fallback, never triggered `DiscordFetcher`. Console now fetches async like the player path. - **DIAG logs placed after early exit** — moved `[DIAG]` logging before the player/console branch so it fires on every invocation regardless of source -### Note -- Only `firefrostrules-1.0.5-1.20.1-forge.jar` was built. Other versions remain at 1.0.3. +### Added +- `[DIAG]` INFO-level logging on every `/rules` invocation: isPlayer, token length, channel, messageId, isValid +- INSTALL.md note about testing from console vs in-game + +### Applies To +- All 6 builds at 1.0.5 (3 firefrostrules + 3 discordrules) --- diff --git a/services/rules-mod/INSTALL.md b/services/rules-mod/INSTALL.md index f9895c7..e905cc4 100644 --- a/services/rules-mod/INSTALL.md +++ b/services/rules-mod/INSTALL.md @@ -30,6 +30,14 @@ Rules mod is using default config values! Edit config/firefrostrules-common.toml The config lives at `config/firefrostrules-common.toml` (COMMON type). This loads once at startup and persists reliably across restarts. +## Testing /rules + +Both console and in-game `/rules` will fetch from Discord. However, +for the best test, have a player run `/rules` in-game. The console +path fetches async and displays the result, but the in-game path +also shows the "Fetching latest rules..." message and applies the +per-player cooldown. + ## Upgrading from v1.0.0 or v1.0.1 Old versions used `world/serverconfig/firefrostrules-server.toml`. diff --git a/services/rules-mod/firefrostrules-1.0.3-1.20.1-forge.jar b/services/rules-mod/firefrostrules-1.0.3-1.20.1-forge.jar deleted file mode 100644 index aea7a769723b9dc9b2f372d5651c563495658d81..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14610 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 diff --git a/services/rules-mod/firefrostrules-1.0.4-1.20.1-forge.jar b/services/rules-mod/firefrostrules-1.0.4-1.20.1-forge.jar deleted file mode 100644 index 4dc0d750dc9b3786a0291da86caa41b052745cd7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14805 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 H%NzI~md$E) diff --git a/services/rules-mod/firefrostrules-1.0.3-1.21.1-neoforge.jar b/services/rules-mod/firefrostrules-1.0.5-1.21.1-neoforge.jar similarity index 70% rename from services/rules-mod/firefrostrules-1.0.3-1.21.1-neoforge.jar rename to services/rules-mod/firefrostrules-1.0.5-1.21.1-neoforge.jar index 768bc09260fa3ac0b6a508a6d0bc893f7456e61c..5ee9c0b78e971304f526978f0f1fbe901d1b9bb0 100644 GIT binary patch delta 3009 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