feat(prod-commands): wipe dev guild commands before global registration

When `Config.dev` is true, the operator typically registers slash
commands per-guild (Config.guildId) during iteration so they appear
instantly. Once those leak past dev, the same commands show up in
Discord twice — once from the dev guild registration and once from
the global registration.

Before doing the global PUT, also PUT an empty array against the
dev guild so any stale per-guild commands are cleared. Behavior in
production (Config.dev=false) is unchanged.
This commit is contained in:
Claude Owner
2026-05-27 10:20:41 +09:00
parent 1841828f7a
commit 1d383d9a03

View File

@@ -6,6 +6,18 @@ import { Logger } from "./Logger";
async function main() {
const rest = new REST({ version: "10" }).setToken(Config.token);
const body = Array.from(handler.commands.values().filter(cmd => cmd.visible).map(cmd => cmd.metaData));
// 개발 모드에서는 Config.guildId 길드에 따로 등록된 슬래시가 남아
// 전역 명령어와 디스코드에 두 번 보이는 경우가 생긴다.
// 전역 등록 전에 해당 길드의 명령어를 전부 비워둔다.
if (Config.dev) {
await rest.put(
Routes.applicationGuildCommands(Config.appId, Config.guildId),
{ body: [] },
);
Logger.ready(`개발 길드(${Config.guildId}) 슬래시 전체 삭제 완료`);
}
// 전역 등록 (권장: 배포 파이프라인에서만 실행)
await rest.put(Routes.applicationCommands(Config.appId), { body });
Logger.ready(`전역 슬래시 등록 요청 완료: ${body.length}`);