// ── slot ─────────────────────────────────────────────────────────────────── if (group === "slot") { if (sub === "add") { const hour = interaction.options.getInteger("hour", true); const pollOpens = interaction.options.getString("poll_opens", true); const slots = Config.get({ section: "poll", key: "slots" }); if (slots.some((s) => s.tgHour === hour)) return void replyAndDelete(interaction, `❌ Slot ${hour}:00 already exists.`); slots.push({ tgHour: hour, pollOpens, closesAfter: Config.get({ section: "tg", key: "durationMinutes" }), active: true }); Config.set({ section: "poll", key: "slots", value: slots }); return void replyAndDelete(interaction, `✅ Slot ${hour}:00 added (poll opens at ${pollOpens}).`); } if (sub === "remove") { const hour = interaction.options.getInteger("hour", true); const slots = Config.get({ section: "poll", key: "slots" }).filter((s) => s.tgHour !== hour); Config.set({ section: "poll", key: "slots", value: slots }); return void replyAndDelete(interaction, `✅ Slot ${hour}:00 removed.`); } } // ── wrank ────────────────────────────────────────────────────────────────── if (group === "wrank") { if (sub === "set-goal") { setCfg("wRankGoal", interaction.options.getInteger("goal", true)); return void replyAndDelete(interaction, "✅ W.Rank goal updated."); } if (sub === "set-post-on-reset") { setCfg("wRankPostOnReset", interaction.options.getBoolean("enabled", true)); return void replyAndDelete(interaction, "✅ W.Rank post on reset updated."); } } // ── tg ───────────────────────────────────────────────────────────────────── if (group === "tg") { if (sub === "set-score-window") { setCfg("scoreWindowHours", interaction.options.getNumber("hours", true)); return void replyAndDelete(interaction, "✅ Score window updated."); } if (sub === "set-duration") { setCfg("tgDurationMinutes", interaction.options.getInteger("minutes", true)); return void replyAndDelete(interaction, "✅ TG duration updated."); } if (sub === "set-no-display") { setCfg("showNoInNationField" as any, interaction.options.getString("mode", true) === "inline"); return void replyAndDelete(interaction, "✅ No voter display updated."); } if (sub === "set-nation-source"){ setCfg("nationSource", interaction.options.getString("nation", true) as Nation); return void replyAndDelete(interaction, "✅ Nation source updated."); } } if (group === "poll") { if (sub === "set-layout") return handleSetLayout(interaction); } }