- GuildPlayer: 타이머 레이스 컨디션 수정, 모든 타이머 정리 로직 통합 (clearAllTimers) - GuildPlayer: 이벤트 핸들러에 try-catch 추가 (end, exception, stuck) - GuildPlayer: start 이벤트에서 endTimer 정리, autoPlay tracks 길이 검증 추가 - RedisClient: player_seek, player_volume에 누락된 return ���가 - RedisClient: queue_remove 인덱스 검증 주석 명확화 - Handler: runCommand에 try-catch 추가하여 에러 시 사용자에게 응답 - Channel: getGuildById에 누락된 await 추가, getMemberById/getVoiceChannelById 안전한 에러 처리 - Command.d.ts: 잘못된 타입 ChatInputChatInputCommandInteraction → ChatInputCommandInteraction 수정 - join.ts: 채널 멘션 닫는 괄호 누락 수정 - shuffle.ts: 제네릭 타입 적용, 불필요한 5회 반복 제거 - import 경로 대소문자 수정 (Shuffle → shuffle) - Linux 호환 - YoutubeMusic/Spotify: 하드코딩된 IP를 환경변수로 분리 - console.log/error → Logger 통일 (YoutubeMusic, Button, channel) - interactionCreate: 전체 try-catch 추가, silent catch에 로깅 추가 - Database: schema 경로 __dirname 기반으로 수정, 컬럼 화이트리스트 추가 - 사용하지 않는 코드 정리 (axios 의존성, 주석처리된 user 관련 코드) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
31 lines
1.2 KiB
TypeScript
31 lines
1.2 KiB
TypeScript
import { ChatInputCommandInteraction, Collection } from "discord.js";
|
|
import { readdirSync } from "node:fs";
|
|
import { Command } from "../types/Command";
|
|
import { COMMAND_PATH, COMMANDS_PATH } from "../utils/Config";
|
|
import { Logger } from "../utils/Logger";
|
|
|
|
export class Handler {
|
|
public commands: Collection<string, Command> = new Collection();
|
|
public coolDown: Map<string, number> = new Map();
|
|
|
|
public constructor() {
|
|
const commandFiles = readdirSync(COMMANDS_PATH);
|
|
for (const commandFile of commandFiles) {
|
|
const command = new (require(COMMAND_PATH(commandFile)).default)() as Command;
|
|
this.commands.set(command.metaData.name, command);
|
|
}
|
|
}
|
|
|
|
public async runCommand(interaction: ChatInputCommandInteraction) {
|
|
const commandName = interaction.commandName;
|
|
const command = this.commands.get(commandName);
|
|
|
|
if (!command) return;
|
|
try {
|
|
if (command.slashRun) await command.slashRun(interaction);
|
|
} catch (err) {
|
|
Logger.error(`[Handler] 명령어 '${commandName}' 실행 중 에러: ${String(err)}`);
|
|
await interaction.editReply({ content: "명령어 실행 중 오류가 발생했습니다." }).catch(() => {});
|
|
}
|
|
}
|
|
} |