From dec7f35a608631bae08847a1aed1379a510ef2b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=AF=BC=EC=A4=80?= Date: Thu, 23 Jul 2026 12:59:33 +0900 Subject: [PATCH 01/14] =?UTF-8?q?Update=20bot=20status=20name=20to=20'Made?= =?UTF-8?q?=20With=20:=20=EB=AF=BC'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/config/bot.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/config/bot.js b/src/config/bot.js index 86dc861cc3..ae54fc2b50 100644 --- a/src/config/bot.js +++ b/src/config/bot.js @@ -23,7 +23,7 @@ export const botConfig = { // 5 = Competing activities: [ { - name: "Custom Status", // required by Discord API, not shown in the client + name: "Made With : 민", // required by Discord API, not shown in the client state: "stalking", // this is what people actually see type: 4, // Custom }, @@ -648,4 +648,4 @@ export function getRandomColor() { return colors[Math.floor(Math.random() * colors.length)]; } -export default botConfig; \ No newline at end of file +export default botConfig; From 0c371c345cab63454483150aa53fd24eba549f0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=AF=BC=EC=A4=80?= Date: Thu, 23 Jul 2026 13:03:22 +0900 Subject: [PATCH 02/14] Update bot activity state message --- src/config/bot.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/config/bot.js b/src/config/bot.js index ae54fc2b50..59c227968e 100644 --- a/src/config/bot.js +++ b/src/config/bot.js @@ -24,7 +24,7 @@ export const botConfig = { activities: [ { name: "Made With : 민", // required by Discord API, not shown in the client - state: "stalking", // this is what people actually see + state: "Made With : 민준", // this is what people actually see type: 4, // Custom }, ], From dd4161247ce05f1ddf0a8f54a00b135376b3be42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=AF=BC=EC=A4=80?= Date: Thu, 23 Jul 2026 13:04:10 +0900 Subject: [PATCH 03/14] Update bot activity state message --- src/config/bot.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/config/bot.js b/src/config/bot.js index 59c227968e..a1d66a7014 100644 --- a/src/config/bot.js +++ b/src/config/bot.js @@ -24,7 +24,7 @@ export const botConfig = { activities: [ { name: "Made With : 민", // required by Discord API, not shown in the client - state: "Made With : 민준", // this is what people actually see + state: "/도움말 | 1개의 서버에서 활동중", // this is what people actually see type: 4, // Custom }, ], From 8317edb3f140aef8687d430eba734964a28285fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=AF=BC=EC=A4=80?= Date: Thu, 23 Jul 2026 13:11:06 +0900 Subject: [PATCH 04/14] Translate bot messages to Korean --- src/config/bot.js | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/config/bot.js b/src/config/bot.js index a1d66a7014..24a5bffee9 100644 --- a/src/config/bot.js +++ b/src/config/bot.js @@ -61,9 +61,9 @@ export const botConfig = { applications: { // Default questions shown when someone fills out an application. defaultQuestions: [ - { question: "What is your name?", required: true }, - { question: "How old are you?", required: true }, - { question: "Why do you want to join?", required: true }, + { question: "이름이 무엇인가요? 닉네임도 괜찮아요?", required: true }, + { question: "몇 살 이신가요?", required: true }, + { question: "왜 여기에 참여하고 싶으셨나요?", required: true }, ], // Embed colors by application status. @@ -141,7 +141,7 @@ export const botConfig = { }, footer: { // Default footer text used in bot embeds. - text: "Titan Bot", + text: "민쭌봇", // Footer icon URL (null = no icon). icon: null, }, @@ -302,10 +302,10 @@ export const botConfig = { // ========================= verification: { // Message shown when posting the verification panel. - defaultMessage: "Click the button below to verify yourself and gain access to the server!", + defaultMessage: "아래 버튼을 클릭하여 인증을 완료하세요. 인증하면 서버에서 인증하였다는 사실을 알 수 있습니다.", // Text on the verification button. - defaultButtonText: "Verify", + defaultButtonText: "인증시작", // Automatic verification behavior. autoVerify: { @@ -372,11 +372,11 @@ export const botConfig = { // Welcome template posted when a user joins. // Placeholders: {user}, {server}, {memberCount} defaultWelcomeMessage: - "Welcome {user} to {server}! We now have {memberCount} members!", + "{user} 님! 여기는 {server} 입니다! 반나뵙게 되어 정말 반갑습니다. {memberCount} 번째 유저입니다", // Goodbye template posted when a user leaves. // Placeholders: {user}, {memberCount} defaultGoodbyeMessage: - "{user} has left the server. We now have {memberCount} members.", + "{user} 님이 서버에서 나갔습니다. {memberCount} 명의 유저가 남았습니다.", // Channel ID for welcome messages. defaultWelcomeChannel: null, // Channel ID for goodbye messages. @@ -404,9 +404,9 @@ export const botConfig = { }, messages: { // Default response messages for counter actions. - created: "✅ Created counter **{name}**", - deleted: "🗑️ Deleted counter **{name}**", - updated: "🔄 Updated counter **{name}**", + created: "✅ 다음 이름으로 카운터를 만들었어요. **{name}**", + deleted: "🗑️ 다음 이름의 카운터를 지웠어요. **{name}**", + updated: "🔄 다음 이름의 카운터를 업데이트 했어요. **{name}**", }, types: { // Built-in counter types and how each count is calculated. From 7d07d2002cbe59ca2fbd908ead20f6eaed01613f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=AF=BC=EC=A4=80?= Date: Thu, 23 Jul 2026 13:17:35 +0900 Subject: [PATCH 05/14] Localize bot configuration strings to Korean Updated comments and strings in bot configuration to Korean for better localization. --- src/config/bot.js | 287 ++++++++++------------------------------------ 1 file changed, 58 insertions(+), 229 deletions(-) diff --git a/src/config/bot.js b/src/config/bot.js index 24a5bffee9..a5a0ebc33e 100644 --- a/src/config/bot.js +++ b/src/config/bot.js @@ -2,120 +2,71 @@ import { logger } from '../utils/logger.js'; export const botConfig = { // ========================= - // BOT PRESENCE (what users see under the bot name) + // BOT PRESENCE (봇 상태 메시지) // ========================= - // `status` options: - // - "online" = green dot - // - "idle" = yellow moon - // - "dnd" = red do-not-disturb - // - "invisible" = appears offline presence: { - // Current online state shown on Discord. status: "online", - - // Activity lines shown under the bot name. - // `type` number mapping from Discord: - // 0 = Playing - // 1 = Streaming - // 2 = Listening - // 3 = Watching - // 4 = Custom - // 5 = Competing activities: [ { - name: "Made With : 민", // required by Discord API, not shown in the client - state: "/도움말 | 1개의 서버에서 활동중", // this is what people actually see - type: 4, // Custom + name: "Made With : 민", + state: "/도움말 | 1개의 서버에서 활동중", + type: 4, }, ], }, // ========================= - // COMMAND BEHAVIOR + // COMMAND BEHAVIOR (명령어 설정) // ========================= commands: { - // Bot owner user IDs (comma-separated in OWNER_IDS env var). - // Owners can access owner/admin-level bot commands. owners: process.env.OWNER_IDS?.split(",").map((id) => id.trim()).filter(Boolean) || [], - - // Default wait time between command uses (in seconds). defaultCooldown: 3, - - // If true, old commands are removed before re-registering. deleteCommands: false, - - // Optional server ID retained for tutorial compatibility; not used for command registration. testGuildId: process.env.TEST_GUILD_ID, - - // When true (or MAINTENANCE_MODE=true), only bot owners can run commands. maintenanceMode: process.env.MAINTENANCE_MODE === "true", - - // Command prefix for text-based commands (e.g., "!" for "!ping"). - // Supports both slash commands and prefix commands. prefix: process.env.PREFIX || "!", }, // ========================= - // APPLICATIONS SYSTEM + // APPLICATIONS SYSTEM (지원서 시스템) // ========================= applications: { - // Default questions shown when someone fills out an application. defaultQuestions: [ { question: "이름이 무엇인가요? 닉네임도 괜찮아요?", required: true }, { question: "몇 살 이신가요?", required: true }, { question: "왜 여기에 참여하고 싶으셨나요?", required: true }, ], - - // Embed colors by application status. statusColors: { pending: "#FFA500", approved: "#00FF00", denied: "#FF0000", }, - - // How long users must wait before submitting another application (hours). applicationCooldown: 24, - - // Auto-delete denied applications after this many days. deleteDeniedAfter: 7, - - // Auto-delete approved applications after this many days. deleteApprovedAfter: 30, - - // Role IDs allowed to manage applications. - managerRoles: [], // Will be populated from environment or database + managerRoles: [], }, // ========================= - // EMBED COLORS & BRANDING + // EMBED COLORS & BRANDING (임베드 색상 및 브랜드 설정) // ========================= - // IMPORTANT: This is the SINGLE SOURCE OF TRUTH for all bot colors embeds: { colors: { - // Main brand colors. primary: "#336699", secondary: "#2F3136", - - // Standard status colors for success/error/warning/info messages. success: "#57F287", error: "#ED4245", warning: "#FEE75C", info: "#3498DB", - - // Neutral utility colors. light: "#FFFFFF", dark: "#202225", gray: "#99AAB5", - - // Discord-style palette shortcuts. blurple: "#5865F2", green: "#57F287", yellow: "#FEE75C", fuchsia: "#EB459E", red: "#ED4245", black: "#000000", - - // Feature-specific colors. giveaway: { active: "#57F287", ended: "#ED4245", @@ -129,8 +80,6 @@ export const botConfig = { economy: "#F1C40F", birthday: "#E91E63", moderation: "#9B59B6", - - // Ticket priority color mapping. priority: { none: "#95A5A6", low: "#3498db", @@ -140,15 +89,11 @@ export const botConfig = { }, }, footer: { - // Default footer text used in bot embeds. text: "민쭌봇", - // Footer icon URL (null = no icon). icon: null, }, - // Default thumbnail URL for embeds (null = no thumbnail). thumbnail: null, author: { - // Optional default embed author block. name: null, icon: null, url: null, @@ -156,274 +101,171 @@ export const botConfig = { }, // ========================= - // ECONOMY SETTINGS + // ECONOMY SETTINGS (경제 시스템) // ========================= economy: { currency: { - // Currency display name. - name: "coins", - // Plural display name. - namePlural: "coins", - // Currency symbol shown in balances. + name: "코인", + namePlural: "코인", symbol: "$", }, - - // Starting balance for new users. startingBalance: 0, - - // Maximum bank amount before upgrades (if upgrades are used). baseBankCapacity: 100000, - - // Daily reward amount. dailyAmount: 100, - - // Work command random payout range. workMin: 10, workMax: 100, - - // Beg command random payout range. begMin: 5, begMax: 50, - - // Command cooldowns (milliseconds). cooldowns: { daily: 24 * 60 * 60 * 1000, work: 60 * 60 * 1000, crime: 2 * 60 * 60 * 1000, rob: 4 * 60 * 60 * 1000, }, - - // Chance to succeed when robbing (0.4 = 40%). robSuccessRate: 0.4, - - // Jail time after failed rob (milliseconds). - // 3600000 = 1 hour. robFailJailTime: 3600000, }, // ========================= - // SHOP SETTINGS + // SHOP SETTINGS (상점 시스템) // ========================= - // Add shop defaults here when needed. - shop: { - - }, + shop: {}, // ========================= - // TICKET SYSTEM + // TICKET SYSTEM (티켓 시스템) // ========================= tickets: { - // Category ID where new tickets are created (null = no forced category). defaultCategory: null, - - // Role IDs allowed to manage/support tickets. supportRoles: [], - - // Priority options users/staff can assign. priorities: { none: { emoji: "⚪", color: "#95A5A6", - label: "None", + label: "없음", }, low: { emoji: "🟢", color: "#2ECC71", - label: "Low", + label: "낮음", }, medium: { emoji: "🟡", color: "#F1C40F", - label: "Medium", + label: "보통", }, high: { emoji: "🔴", color: "#E74C3C", - label: "High", + label: "높음", }, urgent: { emoji: "🚨", color: "#E91E63", - label: "Urgent", + label: "긴급", }, }, - - // Default priority for new tickets. defaultPriority: "none", - - // Category ID where closed tickets are archived. archiveCategory: null, - - // Channel ID where ticket logs are sent. logChannel: null, }, // ========================= - // GIVEAWAY SETTINGS + // GIVEAWAY SETTINGS (이벤트/추첨 시스템) // ========================= giveaways: { - // Default giveaway duration in milliseconds. - // 86400000 = 24 hours. defaultDuration: 86400000, - - // Allowed winner count range. minimumWinners: 1, maximumWinners: 10, - - // Allowed giveaway duration range in milliseconds. - // 300000 = 5 minutes. minimumDuration: 300000, - // 2592000000 = 30 days. maximumDuration: 2592000000, - - // Role IDs allowed to host giveaways. allowedRoles: [], - - // Role IDs that bypass giveaway restrictions. bypassRoles: [], }, // ========================= - // BIRTHDAY SETTINGS + // BIRTHDAY SETTINGS (생일 알림 시스템) // ========================= birthday: { - // Role ID given to users on their birthday. defaultRole: null, - - // Channel ID where birthday announcements are posted. announcementChannel: null, - - // Timezone used to calculate birthday dates. - timezone: "UTC", + timezone: "KST", }, // ========================= - // VERIFICATION SETTINGS + // VERIFICATION SETTINGS (인증 시스템) // ========================= verification: { - // Message shown when posting the verification panel. defaultMessage: "아래 버튼을 클릭하여 인증을 완료하세요. 인증하면 서버에서 인증하였다는 사실을 알 수 있습니다.", - - // Text on the verification button. defaultButtonText: "인증시작", - - // Automatic verification behavior. autoVerify: { - // How automatic verification decides who is auto-approved: - // - "none" = everyone is auto-verified immediately - // - "account_age" = account must be older than set days - // - "server_size" = auto-verify everyone only in smaller servers defaultCriteria: "none", - - // Days used when `defaultCriteria` is `account_age`. defaultAccountAgeDays: 7, - - // Member count threshold used when `defaultCriteria` is `server_size`. - // Example: 1000 means auto-verify if server has fewer than 1000 members. serverSizeThreshold: 1000, - - // Allowed safety limits for account-age requirements. - // 1 = minimum day, 365 = maximum days. minAccountAge: 1, maxAccountAge: 365, - - // If true, user receives a DM after verification. sendDMNotification: true, - - // Human-readable descriptions for each criteria mode. criteria: { - account_age: "Account must be older than specified days", - server_size: "All users if server has less than 1000 members", - none: "All users immediately" + account_age: "계정이 지정된 일수보다 오래되어야 해요", + server_size: "서버 인원이 1000명 미만일 경우 모든 유저가 대상이에요", + none: "모든 유저가 즉시 인증돼요" } }, - - // Minimum time between verification attempts (milliseconds). - // 5000 = 5 seconds. verificationCooldown: 5000, - - // Maximum failed attempts allowed inside the time window below. maxVerificationAttempts: 3, - - // Time window for counting attempts (milliseconds). - // 60000 = 1 minute. attemptWindow: 60000, - - // In-memory safety limits (helps avoid unbounded memory growth). maxCooldownEntries: 10000, maxAttemptEntries: 10000, - // Cleanup frequency for cooldown/attempt maps (milliseconds). - // 300000 = 5 minutes. cooldownCleanupInterval: 300000, - // Maximum metadata payload size for audit entries (bytes). maxAuditMetadataBytes: 4096, - // Maximum number of audit entries kept in memory. maxInMemoryAuditEntries: 1000, - // If true, log every verification action. logAllVerifications: true, - // If true, preserve verification audit history. keepAuditTrail: true, }, // ========================= - // WELCOME / GOODBYE MESSAGES + // WELCOME / GOODBYE MESSAGES (환영/퇴장 메시지) // ========================= welcome: { - // Welcome template posted when a user joins. - // Placeholders: {user}, {server}, {memberCount} - defaultWelcomeMessage: - "{user} 님! 여기는 {server} 입니다! 반나뵙게 되어 정말 반갑습니다. {memberCount} 번째 유저입니다", - // Goodbye template posted when a user leaves. - // Placeholders: {user}, {memberCount} - defaultGoodbyeMessage: - "{user} 님이 서버에서 나갔습니다. {memberCount} 명의 유저가 남았습니다.", - // Channel ID for welcome messages. + defaultWelcomeMessage: "{user} 님! 여기는 {server} 입니다! 만나뵙게 되어 정말 반갑습니다. {memberCount} 번째 유저입니다", + defaultGoodbyeMessage: "{user} 님이 서버에서 나갔습니다. {memberCount} 명의 유저가 남았습니다.", defaultWelcomeChannel: null, - // Channel ID for goodbye messages. defaultGoodbyeChannel: null, }, // ========================= - // COUNTER CHANNELS + // COUNTER CHANNELS (서버 카운터 시스템) // ========================= counters: { defaults: { - // Default naming/description templates for counter entries. - name: "{name} Counter", - description: "Server {name} counter", - // Channel type used for counters (typically "voice"). + name: "{name} 카운터", + description: "서버 {name} 카운터예요", type: "voice", - // Channel name format. `{count}` is replaced automatically. channelName: "{name}-{count}", }, permissions: { - // Default denied permissions for the counter channel. deny: ["VIEW_CHANNEL"], - // Default allowed permissions for the counter channel. allow: ["VIEW_CHANNEL", "CONNECT", "SPEAK"], }, messages: { - // Default response messages for counter actions. created: "✅ 다음 이름으로 카운터를 만들었어요. **{name}**", deleted: "🗑️ 다음 이름의 카운터를 지웠어요. **{name}**", updated: "🔄 다음 이름의 카운터를 업데이트 했어요. **{name}**", }, types: { - // Built-in counter types and how each count is calculated. members: { - name: "👥 Members", - description: "Total members in the server", + name: "👥 전체 유저", + description: "서버의 총 인원 수예요", getCount: (guild) => guild.memberCount.toString(), }, bots: { - name: "🤖 Bots", - description: "Total bot accounts in the server", + name: "🤖 봇", + description: "서버의 봇 계정 수예요", getCount: (guild) => guild.members.cache.filter((m) => m.user.bot).size.toString(), }, members_only: { - name: "👤 Humans", - description: "Total human members (non-bots)", + name: "👤 실제 유저", + description: "서버의 실제 유저 수예요 (봇 제외)", getCount: (guild) => guild.members.cache.filter((m) => !m.user.bot).size.toString(), }, @@ -431,42 +273,33 @@ export const botConfig = { }, // ========================= - // GENERIC BOT MESSAGES + // GENERIC BOT MESSAGES (봇 공통 메시지) // ========================= messages: { - noPermission: "You do not have permission to use this command.", - cooldownActive: "Please wait {time} before using this command again.", - errorOccurred: "An error occurred while executing this command.", - missingPermissions: - "I am missing required permissions to perform this action.", - commandDisabled: "This command has been disabled.", - maintenanceMode: "The bot is currently in maintenance mode.", + noPermission: "이 명령어를 사용할 권한이 없어요.", + cooldownActive: "이 명령어를 다시 사용하려면 {time}을(를) 기다려야 해요.", + errorOccurred: "명령어를 실행하는 중에 오류가 발생했어요.", + missingPermissions: "이 작업을 수행하는 데 필요한 권한이 제게 없어요.", + commandDisabled: "이 명령어는 현재 비활성화되어 있어요.", + maintenanceMode: "봇이 현재 점검 중이에요. 조금만 기다려 주세요!", }, // ========================= - // FEATURE TOGGLES + // FEATURE TOGGLES (기능 활성화 설정) // ========================= - // Set any feature to `false` to disable it globally. features: { - // Core systems. economy: true, leveling: true, moderation: true, logging: true, welcome: true, - - // Community engagement systems. tickets: true, giveaways: true, birthday: true, counter: true, - - // Security and self-service systems. verification: true, reactionRoles: true, joinToCreate: true, - - // Utility/quality-of-life modules. voice: true, search: true, tools: true, @@ -481,37 +314,35 @@ export function validateConfig(config) { const errors = []; if (process.env.NODE_ENV !== 'production') { - logger.debug('Environment variables check:'); - logger.debug('DISCORD_TOKEN exists:', !!process.env.DISCORD_TOKEN); - logger.debug('TOKEN exists:', !!process.env.TOKEN); - logger.debug('CLIENT_ID exists:', !!process.env.CLIENT_ID); - logger.debug('GUILD_ID exists:', !!process.env.GUILD_ID); - logger.debug('POSTGRES_HOST exists:', !!process.env.POSTGRES_HOST); + logger.debug('환경 변수 확인 중:'); + logger.debug('DISCORD_TOKEN 존재 여부:', !!process.env.DISCORD_TOKEN); + logger.debug('TOKEN 존재 여부:', !!process.env.TOKEN); + logger.debug('CLIENT_ID 존재 여부:', !!process.env.CLIENT_ID); + logger.debug('GUILD_ID 존재 여부:', !!process.env.GUILD_ID); + logger.debug('POSTGRES_HOST 존재 여부:', !!process.env.POSTGRES_HOST); logger.debug('NODE_ENV:', process.env.NODE_ENV); } if (!process.env.DISCORD_TOKEN && !process.env.TOKEN) { - errors.push("Bot token is required (DISCORD_TOKEN or TOKEN environment variable)"); + errors.push("봇 토큰이 필요해요 (DISCORD_TOKEN 또는 TOKEN 환경 변수를 설정해 주세요)"); } if (!process.env.CLIENT_ID) { - errors.push("Client ID is required (CLIENT_ID environment variable)"); + errors.push("클라이언트 ID가 필요해요 (CLIENT_ID 환경 변수를 설정해 주세요)"); } if (process.env.NODE_ENV === 'production') { - // A full connection URL (DATABASE_URL / POSTGRES_URL) satisfies all Postgres - // requirements, matching how src/config/database/postgres.js resolves the pool config. const hasConnectionUrl = Boolean(process.env.POSTGRES_URL || process.env.DATABASE_URL); if (!hasConnectionUrl) { if (!process.env.POSTGRES_HOST) { - errors.push("PostgreSQL connection is required in production (set DATABASE_URL/POSTGRES_URL, or POSTGRES_HOST)"); + errors.push("프로덕션 환경에서는 PostgreSQL 연결이 필요해요 (DATABASE_URL/POSTGRES_URL 또는 POSTGRES_HOST를 설정해 주세요)"); } if (!process.env.POSTGRES_USER) { - errors.push("PostgreSQL user is required in production (set DATABASE_URL/POSTGRES_URL, or POSTGRES_USER)"); + errors.push("프로덕션 환경에서는 PostgreSQL 사용자 이름이 필요해요 (DATABASE_URL/POSTGRES_URL 또는 POSTGRES_USER를 설정해 주세요)"); } if (!process.env.POSTGRES_PASSWORD) { - errors.push("PostgreSQL password is required in production (set DATABASE_URL/POSTGRES_URL, or POSTGRES_PASSWORD)"); + errors.push("프로덕션 환경에서는 PostgreSQL 비밀번호가 필요해요 (DATABASE_URL/POSTGRES_URL 또는 POSTGRES_PASSWORD를 설정해 주세요)"); } } } @@ -521,7 +352,7 @@ export function validateConfig(config) { const configErrors = validateConfig(botConfig); if (configErrors.length > 0) { - logger.error("Bot configuration errors:", configErrors.join("\n")); + logger.error("봇 설정 오류:", configErrors.join("\n")); if (process.env.NODE_ENV === "production") { process.exit(1); } @@ -622,10 +453,8 @@ export function getDefaultApplicationQuestions() { } export function getColor(path, fallback = "#99AAB5") { - if (typeof path === "number") return path; if (typeof path === "string" && path.startsWith("#")) { - return parseInt(path.replace("#", ""), 16); } const result = path From 38999801c5bb9a2775c4a50141b8700ccb6c743c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=AF=BC=EC=A4=80?= Date: Thu, 23 Jul 2026 13:17:50 +0900 Subject: [PATCH 06/14] Update default question in bot configuration --- src/config/bot.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/config/bot.js b/src/config/bot.js index a5a0ebc33e..e4986b5b03 100644 --- a/src/config/bot.js +++ b/src/config/bot.js @@ -32,7 +32,7 @@ export const botConfig = { // ========================= applications: { defaultQuestions: [ - { question: "이름이 무엇인가요? 닉네임도 괜찮아요?", required: true }, + { question: "이름이 무엇인가요?", required: true }, { question: "몇 살 이신가요?", required: true }, { question: "왜 여기에 참여하고 싶으셨나요?", required: true }, ], From c2606285ee55893f47126e43d88c9248b2713789 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=AF=BC=EC=A4=80?= Date: Thu, 23 Jul 2026 13:22:46 +0900 Subject: [PATCH 07/14] Translate birthday command to Korean --- src/commands/Birthday/birthday.js | 49 ++++++++++++++++--------------- 1 file changed, 25 insertions(+), 24 deletions(-) diff --git a/src/commands/Birthday/birthday.js b/src/commands/Birthday/birthday.js index c1f8672d00..28c48e9757 100644 --- a/src/commands/Birthday/birthday.js +++ b/src/commands/Birthday/birthday.js @@ -10,26 +10,27 @@ import nextBirthdays from './modules/next_birthdays.js'; import birthdaySetchannel from './modules/birthday_setchannel.js'; import { InteractionHelper } from '../../utils/interactionHelper.js'; + export default { data: new SlashCommandBuilder() - .setName('birthday') - .setDescription('Birthday system commands') + .setName('생일 설정') + .setDescription('생일 시스템 명령어 모음이에요') .addSubcommand(subcommand => subcommand - .setName('set') - .setDescription('Set your birthday') + .setName('설정') + .setDescription('내 생일을 설정해요') .addIntegerOption(option => option - .setName('month') - .setDescription('Birth month (1-12)') + .setName('월') + .setDescription('태어난 월 (1-12)') .setRequired(true) .setMinValue(1) .setMaxValue(12) ) .addIntegerOption(option => option - .setName('day') - .setDescription('Birth day (1-31)') + .setName('일') + .setDescription('태어난 일 (1-31)') .setRequired(true) .setMinValue(1) .setMaxValue(31) @@ -37,38 +38,38 @@ export default { ) .addSubcommand(subcommand => subcommand - .setName('info') - .setDescription('View birthday information') + .setName('정보') + .setDescription('생일 정보를 확인해요') .addUserOption(option => option - .setName('user') - .setDescription('User to check birthday for') + .setName('유저') + .setDescription('생일을 확인할 유저를 선택해요') .setRequired(false) ) ) .addSubcommand(subcommand => subcommand - .setName('list') - .setDescription('List all birthdays in the server') + .setName('생일 목록') + .setDescription('서버 내 모든 유저의 생일 목록을 봐요') ) .addSubcommand(subcommand => subcommand - .setName('remove') - .setDescription('Remove your birthday') + .setName('생일 삭제') + .setDescription('등록된 내 생일을 삭제해요') ) .addSubcommand(subcommand => subcommand - .setName('next') - .setDescription('Show upcoming birthdays') + .setName('다음 생일 목록') + .setDescription('다가오는 생일 목록을 확인해요') ) .addSubcommand(subcommand => subcommand - .setName('setchannel') - .setDescription('Set or disable the channel for birthday announcements. (Manage Server required)') + .setName('알림 설정') + .setDescription('생일 알림 채널을 설정하거나 비활성화해요. (서버 관리 권한 필요)') .addChannelOption(option => option - .setName('channel') - .setDescription('The text channel for announcements. Leave empty to disable.') + .setName('알림 보낼 채널') + .setDescription('알림을 보낼 텍스트 채널이에요. 비워두면 비활성화돼요.') .addChannelTypes(ChannelType.GuildText) .setRequired(false) ) @@ -91,7 +92,7 @@ export default { case 'setchannel': return await birthdaySetchannel.execute(interaction, config, client); default: - return await replyUserError(interaction, { type: ErrorTypes.UNKNOWN, message: 'Unknown subcommand' }); + return await replyUserError(interaction, { type: ErrorTypes.UNKNOWN, message: '알 수 없는 하위 명령어예요.' }); } } -}; \ No newline at end of file +} From b97375a58c35055511bd86eb71334c1779e22607 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=AF=BC=EC=A4=80?= Date: Fri, 24 Jul 2026 01:54:00 +0900 Subject: [PATCH 08/14] Update bot presence activity name --- src/config/bot.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/config/bot.js b/src/config/bot.js index e4986b5b03..f6894ecc5e 100644 --- a/src/config/bot.js +++ b/src/config/bot.js @@ -8,7 +8,7 @@ export const botConfig = { status: "online", activities: [ { - name: "Made With : 민", + name: "name", state: "/도움말 | 1개의 서버에서 활동중", type: 4, }, From 509693f97ad7e4f9f068cbc55ab0a797f0111ba9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=AF=BC=EC=A4=80?= Date: Fri, 24 Jul 2026 19:27:11 +0900 Subject: [PATCH 09/14] chore: translate command folder names to Korean (copy stubs) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 자동 생성: 새 폴더에 원본 파일을 require하는 'proxy' 모듈을 생성했습니다. 원본 파일은 그대로 유지됩니다. --- "src/commands/\352\262\200\354\203\211/modules/.gitkeep" | 1 + "src/commands/\352\262\200\354\203\211/search.js" | 1 + "src/commands/\352\262\275\354\240\234/balance.js" | 1 + "src/commands/\352\262\275\354\240\234/beg.js" | 1 + "src/commands/\352\262\275\354\240\234/buy.js" | 1 + "src/commands/\352\262\275\354\240\234/crime.js" | 1 + "src/commands/\352\262\275\354\240\234/daily.js" | 1 + "src/commands/\352\262\275\354\240\234/deposit.js" | 1 + "src/commands/\352\262\275\355\222\210/gcreate.js" | 1 + "src/commands/\352\262\275\355\222\210/gdelete.js" | 1 + "src/commands/\352\262\275\355\222\210/gend.js" | 1 + "src/commands/\352\262\275\355\222\210/greroll.js" | 1 + "src/commands/\352\264\200\353\246\254/ban.js" | 1 + "src/commands/\352\264\200\353\246\254/cases.js" | 1 + "src/commands/\352\264\200\353\246\254/dm.js" | 1 + "src/commands/\352\264\200\353\246\254/kick.js" | 1 + "src/commands/\352\264\200\353\246\254/lock.js" | 1 + "src/commands/\352\264\200\353\246\254/massban.js" | 1 + "src/commands/\352\264\200\353\246\254/masskick.js" | 1 + "src/commands/\352\264\200\353\246\254/purge.js" | 1 + "src/commands/\352\264\200\353\246\254/say.js" | 1 + "src/commands/\352\264\200\353\246\254/timeout.js" | 1 + "src/commands/\352\264\200\353\246\254/unban.js" | 1 + "src/commands/\352\264\200\353\246\254/unlock.js" | 1 + "src/commands/\352\264\200\353\246\254/untimeout.js" | 1 + "src/commands/\352\264\200\353\246\254/usernotes.js" | 1 + "src/commands/\352\264\200\353\246\254/warn.js" | 1 + "src/commands/\352\264\200\353\246\254/warnings.js" | 1 + "src/commands/\353\217\204\352\265\254/baseconvert.js" | 1 + "src/commands/\353\217\204\352\265\254/calculate.js" | 1 + "src/commands/\353\217\204\352\265\254/countdown.js" | 1 + "src/commands/\353\217\204\352\265\254/embedbuilder.js" | 1 + "src/commands/\353\217\204\352\265\254/generatepassword.js" | 1 + "src/commands/\353\217\204\352\265\254/hexcolor.js" | 1 + "src/commands/\353\217\204\352\265\254/poll.js" | 1 + "src/commands/\353\217\204\352\265\254/randomuser.js" | 1 + "src/commands/\353\217\204\352\265\254/shorten.js" | 1 + "src/commands/\353\217\204\352\265\254/time.js" | 1 + "src/commands/\353\217\204\352\265\254/unixtime.js" | 1 + .../\353\240\210\353\262\250\353\247\201/leaderboard.js" | 1 + "src/commands/\353\240\210\353\262\250\353\247\201/level.js" | 1 + .../commands/\353\240\210\353\262\250\353\247\201/leveladd.js" | 1 + .../\353\240\210\353\262\250\353\247\201/levelremove.js" | 1 + .../commands/\353\240\210\353\262\250\353\247\201/levelset.js" | 1 + .../\353\240\210\353\262\250\353\247\201/modules/.gitkeep" | 1 + "src/commands/\353\241\234\352\271\205/logging.js" | 1 + "src/commands/\353\241\234\352\271\205/modules/.gitkeep" | 1 + .../reactroles.js" | 1 + "src/commands/\354\203\235\354\235\274/birthday.js" | 3 +++ "src/commands/\354\203\235\354\235\274/modules/.gitkeep" | 1 + .../modules/.gitkeep" | 1 + .../serverstats.js" | 1 + .../avatar.js" | 1 + .../firstmsg.js" | 1 + .../report.js" | 1 + .../serverinfo.js" | 1 + .../\354\234\240\355\213\270\353\246\254\355\213\260/todo.js" | 1 + .../userinfo.js" | 1 + .../weather.js" | 1 + .../wipedata.js" | 1 + "src/commands/\354\235\214\354\225\205/join.js" | 1 + "src/commands/\354\235\214\354\225\205/music.js" | 1 + "src/commands/\354\235\214\354\225\205/nowplaying.js" | 1 + "src/commands/\354\235\214\354\225\205/play.js" | 1 + "src/commands/\354\235\214\354\225\205/queue.js" | 1 + "src/commands/\354\235\270\354\246\235/autoverify.js" | 1 + "src/commands/\354\235\270\354\246\235/verification.js" | 1 + "src/commands/\354\235\270\354\246\235/verify.js" | 1 + "src/commands/\354\236\254\353\257\270/count.js" | 1 + "src/commands/\354\236\254\353\257\270/fight.js" | 1 + "src/commands/\354\236\254\353\257\270/flip.js" | 1 + "src/commands/\354\236\254\353\257\270/roll.js" | 1 + .../jointocreate.js" | 1 + .../modules/.gitkeep" | 1 + .../app-admin.js" | 1 + .../\354\273\244\353\256\244\353\213\210\355\213\260/apply.js" | 1 + .../modules/.gitkeep" | 1 + "src/commands/\354\275\224\354\226\264/commands.js" | 1 + "src/commands/\354\275\224\354\226\264/configWizard.js" | 1 + "src/commands/\354\275\224\354\226\264/help.js" | 1 + "src/commands/\354\275\224\354\226\264/modules/.gitkeep" | 1 + "src/commands/\355\213\260\354\274\223/claim.js" | 1 + "src/commands/\355\213\260\354\274\223/close.js" | 1 + "src/commands/\355\213\260\354\274\223/modules/.gitkeep" | 1 + "src/commands/\355\231\230\354\230\201/autorole.js" | 1 + "src/commands/\355\231\230\354\230\201/goodbye.js" | 1 + "src/commands/\355\231\230\354\230\201/greet.js" | 1 + "src/commands/\355\231\230\354\230\201/modules/.gitkeep" | 1 + "src/commands/\355\231\230\354\230\201/welcome.js" | 1 + 89 files changed, 91 insertions(+) create mode 100644 "src/commands/\352\262\200\354\203\211/modules/.gitkeep" create mode 100644 "src/commands/\352\262\200\354\203\211/search.js" create mode 100644 "src/commands/\352\262\275\354\240\234/balance.js" create mode 100644 "src/commands/\352\262\275\354\240\234/beg.js" create mode 100644 "src/commands/\352\262\275\354\240\234/buy.js" create mode 100644 "src/commands/\352\262\275\354\240\234/crime.js" create mode 100644 "src/commands/\352\262\275\354\240\234/daily.js" create mode 100644 "src/commands/\352\262\275\354\240\234/deposit.js" create mode 100644 "src/commands/\352\262\275\355\222\210/gcreate.js" create mode 100644 "src/commands/\352\262\275\355\222\210/gdelete.js" create mode 100644 "src/commands/\352\262\275\355\222\210/gend.js" create mode 100644 "src/commands/\352\262\275\355\222\210/greroll.js" create mode 100644 "src/commands/\352\264\200\353\246\254/ban.js" create mode 100644 "src/commands/\352\264\200\353\246\254/cases.js" create mode 100644 "src/commands/\352\264\200\353\246\254/dm.js" create mode 100644 "src/commands/\352\264\200\353\246\254/kick.js" create mode 100644 "src/commands/\352\264\200\353\246\254/lock.js" create mode 100644 "src/commands/\352\264\200\353\246\254/massban.js" create mode 100644 "src/commands/\352\264\200\353\246\254/masskick.js" create mode 100644 "src/commands/\352\264\200\353\246\254/purge.js" create mode 100644 "src/commands/\352\264\200\353\246\254/say.js" create mode 100644 "src/commands/\352\264\200\353\246\254/timeout.js" create mode 100644 "src/commands/\352\264\200\353\246\254/unban.js" create mode 100644 "src/commands/\352\264\200\353\246\254/unlock.js" create mode 100644 "src/commands/\352\264\200\353\246\254/untimeout.js" create mode 100644 "src/commands/\352\264\200\353\246\254/usernotes.js" create mode 100644 "src/commands/\352\264\200\353\246\254/warn.js" create mode 100644 "src/commands/\352\264\200\353\246\254/warnings.js" create mode 100644 "src/commands/\353\217\204\352\265\254/baseconvert.js" create mode 100644 "src/commands/\353\217\204\352\265\254/calculate.js" create mode 100644 "src/commands/\353\217\204\352\265\254/countdown.js" create mode 100644 "src/commands/\353\217\204\352\265\254/embedbuilder.js" create mode 100644 "src/commands/\353\217\204\352\265\254/generatepassword.js" create mode 100644 "src/commands/\353\217\204\352\265\254/hexcolor.js" create mode 100644 "src/commands/\353\217\204\352\265\254/poll.js" create mode 100644 "src/commands/\353\217\204\352\265\254/randomuser.js" create mode 100644 "src/commands/\353\217\204\352\265\254/shorten.js" create mode 100644 "src/commands/\353\217\204\352\265\254/time.js" create mode 100644 "src/commands/\353\217\204\352\265\254/unixtime.js" create mode 100644 "src/commands/\353\240\210\353\262\250\353\247\201/leaderboard.js" create mode 100644 "src/commands/\353\240\210\353\262\250\353\247\201/level.js" create mode 100644 "src/commands/\353\240\210\353\262\250\353\247\201/leveladd.js" create mode 100644 "src/commands/\353\240\210\353\262\250\353\247\201/levelremove.js" create mode 100644 "src/commands/\353\240\210\353\262\250\353\247\201/levelset.js" create mode 100644 "src/commands/\353\240\210\353\262\250\353\247\201/modules/.gitkeep" create mode 100644 "src/commands/\353\241\234\352\271\205/logging.js" create mode 100644 "src/commands/\353\241\234\352\271\205/modules/.gitkeep" create mode 100644 "src/commands/\353\260\230\354\235\221_\354\227\255\355\225\240/reactroles.js" create mode 100644 "src/commands/\354\203\235\354\235\274/birthday.js" create mode 100644 "src/commands/\354\203\235\354\235\274/modules/.gitkeep" create mode 100644 "src/commands/\354\204\234\353\262\204_\355\206\265\352\263\204/modules/.gitkeep" create mode 100644 "src/commands/\354\204\234\353\262\204_\355\206\265\352\263\204/serverstats.js" create mode 100644 "src/commands/\354\234\240\355\213\270\353\246\254\355\213\260/avatar.js" create mode 100644 "src/commands/\354\234\240\355\213\270\353\246\254\355\213\260/firstmsg.js" create mode 100644 "src/commands/\354\234\240\355\213\270\353\246\254\355\213\260/report.js" create mode 100644 "src/commands/\354\234\240\355\213\270\353\246\254\355\213\260/serverinfo.js" create mode 100644 "src/commands/\354\234\240\355\213\270\353\246\254\355\213\260/todo.js" create mode 100644 "src/commands/\354\234\240\355\213\270\353\246\254\355\213\260/userinfo.js" create mode 100644 "src/commands/\354\234\240\355\213\270\353\246\254\355\213\260/weather.js" create mode 100644 "src/commands/\354\234\240\355\213\270\353\246\254\355\213\260/wipedata.js" create mode 100644 "src/commands/\354\235\214\354\225\205/join.js" create mode 100644 "src/commands/\354\235\214\354\225\205/music.js" create mode 100644 "src/commands/\354\235\214\354\225\205/nowplaying.js" create mode 100644 "src/commands/\354\235\214\354\225\205/play.js" create mode 100644 "src/commands/\354\235\214\354\225\205/queue.js" create mode 100644 "src/commands/\354\235\270\354\246\235/autoverify.js" create mode 100644 "src/commands/\354\235\270\354\246\235/verification.js" create mode 100644 "src/commands/\354\235\270\354\246\235/verify.js" create mode 100644 "src/commands/\354\236\254\353\257\270/count.js" create mode 100644 "src/commands/\354\236\254\353\257\270/fight.js" create mode 100644 "src/commands/\354\236\254\353\257\270/flip.js" create mode 100644 "src/commands/\354\236\254\353\257\270/roll.js" create mode 100644 "src/commands/\354\260\270\354\227\254\353\241\234_\354\203\235\354\204\261/jointocreate.js" create mode 100644 "src/commands/\354\260\270\354\227\254\353\241\234_\354\203\235\354\204\261/modules/.gitkeep" create mode 100644 "src/commands/\354\273\244\353\256\244\353\213\210\355\213\260/app-admin.js" create mode 100644 "src/commands/\354\273\244\353\256\244\353\213\210\355\213\260/apply.js" create mode 100644 "src/commands/\354\273\244\353\256\244\353\213\210\355\213\260/modules/.gitkeep" create mode 100644 "src/commands/\354\275\224\354\226\264/commands.js" create mode 100644 "src/commands/\354\275\224\354\226\264/configWizard.js" create mode 100644 "src/commands/\354\275\224\354\226\264/help.js" create mode 100644 "src/commands/\354\275\224\354\226\264/modules/.gitkeep" create mode 100644 "src/commands/\355\213\260\354\274\223/claim.js" create mode 100644 "src/commands/\355\213\260\354\274\223/close.js" create mode 100644 "src/commands/\355\213\260\354\274\223/modules/.gitkeep" create mode 100644 "src/commands/\355\231\230\354\230\201/autorole.js" create mode 100644 "src/commands/\355\231\230\354\230\201/goodbye.js" create mode 100644 "src/commands/\355\231\230\354\230\201/greet.js" create mode 100644 "src/commands/\355\231\230\354\230\201/modules/.gitkeep" create mode 100644 "src/commands/\355\231\230\354\230\201/welcome.js" diff --git "a/src/commands/\352\262\200\354\203\211/modules/.gitkeep" "b/src/commands/\352\262\200\354\203\211/modules/.gitkeep" new file mode 100644 index 0000000000..ff7bd09c0c --- /dev/null +++ "b/src/commands/\352\262\200\354\203\211/modules/.gitkeep" @@ -0,0 +1 @@ +// placeholder diff --git "a/src/commands/\352\262\200\354\203\211/search.js" "b/src/commands/\352\262\200\354\203\211/search.js" new file mode 100644 index 0000000000..2915831420 --- /dev/null +++ "b/src/commands/\352\262\200\354\203\211/search.js" @@ -0,0 +1 @@ +module.exports = require('../../src/commands/Search/search.js'); \ No newline at end of file diff --git "a/src/commands/\352\262\275\354\240\234/balance.js" "b/src/commands/\352\262\275\354\240\234/balance.js" new file mode 100644 index 0000000000..fec949d858 --- /dev/null +++ "b/src/commands/\352\262\275\354\240\234/balance.js" @@ -0,0 +1 @@ +module.exports = require('../../src/commands/Economy/balance.js'); \ No newline at end of file diff --git "a/src/commands/\352\262\275\354\240\234/beg.js" "b/src/commands/\352\262\275\354\240\234/beg.js" new file mode 100644 index 0000000000..b2f84618d1 --- /dev/null +++ "b/src/commands/\352\262\275\354\240\234/beg.js" @@ -0,0 +1 @@ +module.exports = require('../../src/commands/Economy/beg.js'); \ No newline at end of file diff --git "a/src/commands/\352\262\275\354\240\234/buy.js" "b/src/commands/\352\262\275\354\240\234/buy.js" new file mode 100644 index 0000000000..ffffeafc34 --- /dev/null +++ "b/src/commands/\352\262\275\354\240\234/buy.js" @@ -0,0 +1 @@ +module.exports = require('../../src/commands/Economy/buy.js'); \ No newline at end of file diff --git "a/src/commands/\352\262\275\354\240\234/crime.js" "b/src/commands/\352\262\275\354\240\234/crime.js" new file mode 100644 index 0000000000..bb5c7aa7a9 --- /dev/null +++ "b/src/commands/\352\262\275\354\240\234/crime.js" @@ -0,0 +1 @@ +module.exports = require('../../src/commands/Economy/crime.js'); \ No newline at end of file diff --git "a/src/commands/\352\262\275\354\240\234/daily.js" "b/src/commands/\352\262\275\354\240\234/daily.js" new file mode 100644 index 0000000000..9ee861d22b --- /dev/null +++ "b/src/commands/\352\262\275\354\240\234/daily.js" @@ -0,0 +1 @@ +module.exports = require('../../src/commands/Economy/daily.js'); \ No newline at end of file diff --git "a/src/commands/\352\262\275\354\240\234/deposit.js" "b/src/commands/\352\262\275\354\240\234/deposit.js" new file mode 100644 index 0000000000..fe7ef05741 --- /dev/null +++ "b/src/commands/\352\262\275\354\240\234/deposit.js" @@ -0,0 +1 @@ +module.exports = require('../../src/commands/Economy/deposit.js'); \ No newline at end of file diff --git "a/src/commands/\352\262\275\355\222\210/gcreate.js" "b/src/commands/\352\262\275\355\222\210/gcreate.js" new file mode 100644 index 0000000000..b3e9ff4415 --- /dev/null +++ "b/src/commands/\352\262\275\355\222\210/gcreate.js" @@ -0,0 +1 @@ +module.exports = require('../../src/commands/Giveaway/gcreate.js'); \ No newline at end of file diff --git "a/src/commands/\352\262\275\355\222\210/gdelete.js" "b/src/commands/\352\262\275\355\222\210/gdelete.js" new file mode 100644 index 0000000000..53cc9a6a6f --- /dev/null +++ "b/src/commands/\352\262\275\355\222\210/gdelete.js" @@ -0,0 +1 @@ +module.exports = require('../../src/commands/Giveaway/gdelete.js'); \ No newline at end of file diff --git "a/src/commands/\352\262\275\355\222\210/gend.js" "b/src/commands/\352\262\275\355\222\210/gend.js" new file mode 100644 index 0000000000..257785ef0b --- /dev/null +++ "b/src/commands/\352\262\275\355\222\210/gend.js" @@ -0,0 +1 @@ +module.exports = require('../../src/commands/Giveaway/gend.js'); \ No newline at end of file diff --git "a/src/commands/\352\262\275\355\222\210/greroll.js" "b/src/commands/\352\262\275\355\222\210/greroll.js" new file mode 100644 index 0000000000..f9251a9ac6 --- /dev/null +++ "b/src/commands/\352\262\275\355\222\210/greroll.js" @@ -0,0 +1 @@ +module.exports = require('../../src/commands/Giveaway/greroll.js'); \ No newline at end of file diff --git "a/src/commands/\352\264\200\353\246\254/ban.js" "b/src/commands/\352\264\200\353\246\254/ban.js" new file mode 100644 index 0000000000..86e3415f81 --- /dev/null +++ "b/src/commands/\352\264\200\353\246\254/ban.js" @@ -0,0 +1 @@ +module.exports = require('../../src/commands/Moderation/ban.js'); \ No newline at end of file diff --git "a/src/commands/\352\264\200\353\246\254/cases.js" "b/src/commands/\352\264\200\353\246\254/cases.js" new file mode 100644 index 0000000000..1ece27b223 --- /dev/null +++ "b/src/commands/\352\264\200\353\246\254/cases.js" @@ -0,0 +1 @@ +module.exports = require('../../src/commands/Moderation/cases.js'); \ No newline at end of file diff --git "a/src/commands/\352\264\200\353\246\254/dm.js" "b/src/commands/\352\264\200\353\246\254/dm.js" new file mode 100644 index 0000000000..7b0cfd39d4 --- /dev/null +++ "b/src/commands/\352\264\200\353\246\254/dm.js" @@ -0,0 +1 @@ +module.exports = require('../../src/commands/Moderation/dm.js'); \ No newline at end of file diff --git "a/src/commands/\352\264\200\353\246\254/kick.js" "b/src/commands/\352\264\200\353\246\254/kick.js" new file mode 100644 index 0000000000..b96b2038ed --- /dev/null +++ "b/src/commands/\352\264\200\353\246\254/kick.js" @@ -0,0 +1 @@ +module.exports = require('../../src/commands/Moderation/kick.js'); \ No newline at end of file diff --git "a/src/commands/\352\264\200\353\246\254/lock.js" "b/src/commands/\352\264\200\353\246\254/lock.js" new file mode 100644 index 0000000000..565796da49 --- /dev/null +++ "b/src/commands/\352\264\200\353\246\254/lock.js" @@ -0,0 +1 @@ +module.exports = require('../../src/commands/Moderation/lock.js'); \ No newline at end of file diff --git "a/src/commands/\352\264\200\353\246\254/massban.js" "b/src/commands/\352\264\200\353\246\254/massban.js" new file mode 100644 index 0000000000..b92b139e03 --- /dev/null +++ "b/src/commands/\352\264\200\353\246\254/massban.js" @@ -0,0 +1 @@ +module.exports = require('../../src/commands/Moderation/massban.js'); \ No newline at end of file diff --git "a/src/commands/\352\264\200\353\246\254/masskick.js" "b/src/commands/\352\264\200\353\246\254/masskick.js" new file mode 100644 index 0000000000..6695380995 --- /dev/null +++ "b/src/commands/\352\264\200\353\246\254/masskick.js" @@ -0,0 +1 @@ +module.exports = require('../../src/commands/Moderation/masskick.js'); \ No newline at end of file diff --git "a/src/commands/\352\264\200\353\246\254/purge.js" "b/src/commands/\352\264\200\353\246\254/purge.js" new file mode 100644 index 0000000000..7ff716df28 --- /dev/null +++ "b/src/commands/\352\264\200\353\246\254/purge.js" @@ -0,0 +1 @@ +module.exports = require('../../src/commands/Moderation/purge.js'); \ No newline at end of file diff --git "a/src/commands/\352\264\200\353\246\254/say.js" "b/src/commands/\352\264\200\353\246\254/say.js" new file mode 100644 index 0000000000..ead912f667 --- /dev/null +++ "b/src/commands/\352\264\200\353\246\254/say.js" @@ -0,0 +1 @@ +module.exports = require('../../src/commands/Moderation/say.js'); \ No newline at end of file diff --git "a/src/commands/\352\264\200\353\246\254/timeout.js" "b/src/commands/\352\264\200\353\246\254/timeout.js" new file mode 100644 index 0000000000..eb5c646e0d --- /dev/null +++ "b/src/commands/\352\264\200\353\246\254/timeout.js" @@ -0,0 +1 @@ +module.exports = require('../../src/commands/Moderation/timeout.js'); \ No newline at end of file diff --git "a/src/commands/\352\264\200\353\246\254/unban.js" "b/src/commands/\352\264\200\353\246\254/unban.js" new file mode 100644 index 0000000000..e8e586ebd7 --- /dev/null +++ "b/src/commands/\352\264\200\353\246\254/unban.js" @@ -0,0 +1 @@ +module.exports = require('../../src/commands/Moderation/unban.js'); \ No newline at end of file diff --git "a/src/commands/\352\264\200\353\246\254/unlock.js" "b/src/commands/\352\264\200\353\246\254/unlock.js" new file mode 100644 index 0000000000..4a07a3d022 --- /dev/null +++ "b/src/commands/\352\264\200\353\246\254/unlock.js" @@ -0,0 +1 @@ +module.exports = require('../../src/commands/Moderation/unlock.js'); \ No newline at end of file diff --git "a/src/commands/\352\264\200\353\246\254/untimeout.js" "b/src/commands/\352\264\200\353\246\254/untimeout.js" new file mode 100644 index 0000000000..6aa904c9a3 --- /dev/null +++ "b/src/commands/\352\264\200\353\246\254/untimeout.js" @@ -0,0 +1 @@ +module.exports = require('../../src/commands/Moderation/untimeout.js'); \ No newline at end of file diff --git "a/src/commands/\352\264\200\353\246\254/usernotes.js" "b/src/commands/\352\264\200\353\246\254/usernotes.js" new file mode 100644 index 0000000000..f0899873e2 --- /dev/null +++ "b/src/commands/\352\264\200\353\246\254/usernotes.js" @@ -0,0 +1 @@ +module.exports = require('../../src/commands/Moderation/usernotes.js'); \ No newline at end of file diff --git "a/src/commands/\352\264\200\353\246\254/warn.js" "b/src/commands/\352\264\200\353\246\254/warn.js" new file mode 100644 index 0000000000..a678d9d58d --- /dev/null +++ "b/src/commands/\352\264\200\353\246\254/warn.js" @@ -0,0 +1 @@ +module.exports = require('../../src/commands/Moderation/warn.js'); \ No newline at end of file diff --git "a/src/commands/\352\264\200\353\246\254/warnings.js" "b/src/commands/\352\264\200\353\246\254/warnings.js" new file mode 100644 index 0000000000..c654439917 --- /dev/null +++ "b/src/commands/\352\264\200\353\246\254/warnings.js" @@ -0,0 +1 @@ +module.exports = require('../../src/commands/Moderation/warnings.js'); \ No newline at end of file diff --git "a/src/commands/\353\217\204\352\265\254/baseconvert.js" "b/src/commands/\353\217\204\352\265\254/baseconvert.js" new file mode 100644 index 0000000000..2b14f1cd9d --- /dev/null +++ "b/src/commands/\353\217\204\352\265\254/baseconvert.js" @@ -0,0 +1 @@ +module.exports = require('../../src/commands/Tools/baseconvert.js'); \ No newline at end of file diff --git "a/src/commands/\353\217\204\352\265\254/calculate.js" "b/src/commands/\353\217\204\352\265\254/calculate.js" new file mode 100644 index 0000000000..1b1d6f795d --- /dev/null +++ "b/src/commands/\353\217\204\352\265\254/calculate.js" @@ -0,0 +1 @@ +module.exports = require('../../src/commands/Tools/calculate.js'); \ No newline at end of file diff --git "a/src/commands/\353\217\204\352\265\254/countdown.js" "b/src/commands/\353\217\204\352\265\254/countdown.js" new file mode 100644 index 0000000000..a3fee7f074 --- /dev/null +++ "b/src/commands/\353\217\204\352\265\254/countdown.js" @@ -0,0 +1 @@ +module.exports = require('../../src/commands/Tools/countdown.js'); \ No newline at end of file diff --git "a/src/commands/\353\217\204\352\265\254/embedbuilder.js" "b/src/commands/\353\217\204\352\265\254/embedbuilder.js" new file mode 100644 index 0000000000..15ebe8e309 --- /dev/null +++ "b/src/commands/\353\217\204\352\265\254/embedbuilder.js" @@ -0,0 +1 @@ +module.exports = require('../../src/commands/Tools/embedbuilder.js'); \ No newline at end of file diff --git "a/src/commands/\353\217\204\352\265\254/generatepassword.js" "b/src/commands/\353\217\204\352\265\254/generatepassword.js" new file mode 100644 index 0000000000..5c838799cf --- /dev/null +++ "b/src/commands/\353\217\204\352\265\254/generatepassword.js" @@ -0,0 +1 @@ +module.exports = require('../../src/commands/Tools/generatepassword.js'); \ No newline at end of file diff --git "a/src/commands/\353\217\204\352\265\254/hexcolor.js" "b/src/commands/\353\217\204\352\265\254/hexcolor.js" new file mode 100644 index 0000000000..f1bbbf322d --- /dev/null +++ "b/src/commands/\353\217\204\352\265\254/hexcolor.js" @@ -0,0 +1 @@ +module.exports = require('../../src/commands/Tools/hexcolor.js'); \ No newline at end of file diff --git "a/src/commands/\353\217\204\352\265\254/poll.js" "b/src/commands/\353\217\204\352\265\254/poll.js" new file mode 100644 index 0000000000..211b30961f --- /dev/null +++ "b/src/commands/\353\217\204\352\265\254/poll.js" @@ -0,0 +1 @@ +module.exports = require('../../src/commands/Tools/poll.js'); \ No newline at end of file diff --git "a/src/commands/\353\217\204\352\265\254/randomuser.js" "b/src/commands/\353\217\204\352\265\254/randomuser.js" new file mode 100644 index 0000000000..7cee64b499 --- /dev/null +++ "b/src/commands/\353\217\204\352\265\254/randomuser.js" @@ -0,0 +1 @@ +module.exports = require('../../src/commands/Tools/randomuser.js'); \ No newline at end of file diff --git "a/src/commands/\353\217\204\352\265\254/shorten.js" "b/src/commands/\353\217\204\352\265\254/shorten.js" new file mode 100644 index 0000000000..676f84d209 --- /dev/null +++ "b/src/commands/\353\217\204\352\265\254/shorten.js" @@ -0,0 +1 @@ +module.exports = require('../../src/commands/Tools/shorten.js'); \ No newline at end of file diff --git "a/src/commands/\353\217\204\352\265\254/time.js" "b/src/commands/\353\217\204\352\265\254/time.js" new file mode 100644 index 0000000000..6f0c8ba165 --- /dev/null +++ "b/src/commands/\353\217\204\352\265\254/time.js" @@ -0,0 +1 @@ +module.exports = require('../../src/commands/Tools/time.js'); \ No newline at end of file diff --git "a/src/commands/\353\217\204\352\265\254/unixtime.js" "b/src/commands/\353\217\204\352\265\254/unixtime.js" new file mode 100644 index 0000000000..fbf13b7e48 --- /dev/null +++ "b/src/commands/\353\217\204\352\265\254/unixtime.js" @@ -0,0 +1 @@ +module.exports = require('../../src/commands/Tools/unixtime.js'); \ No newline at end of file diff --git "a/src/commands/\353\240\210\353\262\250\353\247\201/leaderboard.js" "b/src/commands/\353\240\210\353\262\250\353\247\201/leaderboard.js" new file mode 100644 index 0000000000..90451c2577 --- /dev/null +++ "b/src/commands/\353\240\210\353\262\250\353\247\201/leaderboard.js" @@ -0,0 +1 @@ +module.exports = require('../../src/commands/Leveling/leaderboard.js'); \ No newline at end of file diff --git "a/src/commands/\353\240\210\353\262\250\353\247\201/level.js" "b/src/commands/\353\240\210\353\262\250\353\247\201/level.js" new file mode 100644 index 0000000000..3f88cad03c --- /dev/null +++ "b/src/commands/\353\240\210\353\262\250\353\247\201/level.js" @@ -0,0 +1 @@ +module.exports = require('../../src/commands/Leveling/level.js'); \ No newline at end of file diff --git "a/src/commands/\353\240\210\353\262\250\353\247\201/leveladd.js" "b/src/commands/\353\240\210\353\262\250\353\247\201/leveladd.js" new file mode 100644 index 0000000000..1015cc32f4 --- /dev/null +++ "b/src/commands/\353\240\210\353\262\250\353\247\201/leveladd.js" @@ -0,0 +1 @@ +module.exports = require('../../src/commands/Leveling/leveladd.js'); \ No newline at end of file diff --git "a/src/commands/\353\240\210\353\262\250\353\247\201/levelremove.js" "b/src/commands/\353\240\210\353\262\250\353\247\201/levelremove.js" new file mode 100644 index 0000000000..e29eedec7d --- /dev/null +++ "b/src/commands/\353\240\210\353\262\250\353\247\201/levelremove.js" @@ -0,0 +1 @@ +module.exports = require('../../src/commands/Leveling/levelremove.js'); \ No newline at end of file diff --git "a/src/commands/\353\240\210\353\262\250\353\247\201/levelset.js" "b/src/commands/\353\240\210\353\262\250\353\247\201/levelset.js" new file mode 100644 index 0000000000..0abcd3770e --- /dev/null +++ "b/src/commands/\353\240\210\353\262\250\353\247\201/levelset.js" @@ -0,0 +1 @@ +module.exports = require('../../src/commands/Leveling/levelset.js'); \ No newline at end of file diff --git "a/src/commands/\353\240\210\353\262\250\353\247\201/modules/.gitkeep" "b/src/commands/\353\240\210\353\262\250\353\247\201/modules/.gitkeep" new file mode 100644 index 0000000000..ff7bd09c0c --- /dev/null +++ "b/src/commands/\353\240\210\353\262\250\353\247\201/modules/.gitkeep" @@ -0,0 +1 @@ +// placeholder diff --git "a/src/commands/\353\241\234\352\271\205/logging.js" "b/src/commands/\353\241\234\352\271\205/logging.js" new file mode 100644 index 0000000000..18ff21267e --- /dev/null +++ "b/src/commands/\353\241\234\352\271\205/logging.js" @@ -0,0 +1 @@ +module.exports = require('../../src/commands/Logging/logging.js'); \ No newline at end of file diff --git "a/src/commands/\353\241\234\352\271\205/modules/.gitkeep" "b/src/commands/\353\241\234\352\271\205/modules/.gitkeep" new file mode 100644 index 0000000000..ff7bd09c0c --- /dev/null +++ "b/src/commands/\353\241\234\352\271\205/modules/.gitkeep" @@ -0,0 +1 @@ +// placeholder diff --git "a/src/commands/\353\260\230\354\235\221_\354\227\255\355\225\240/reactroles.js" "b/src/commands/\353\260\230\354\235\221_\354\227\255\355\225\240/reactroles.js" new file mode 100644 index 0000000000..e7ad2e91f9 --- /dev/null +++ "b/src/commands/\353\260\230\354\235\221_\354\227\255\355\225\240/reactroles.js" @@ -0,0 +1 @@ +module.exports = require('../../src/commands/Reaction_roles/reactroles.js'); \ No newline at end of file diff --git "a/src/commands/\354\203\235\354\235\274/birthday.js" "b/src/commands/\354\203\235\354\235\274/birthday.js" new file mode 100644 index 0000000000..525aa14d40 --- /dev/null +++ "b/src/commands/\354\203\235\354\235\274/birthday.js" @@ -0,0 +1,3 @@ +// Copied from src/commands/Birthday/birthday.js +// (파일 내용은 그대로 유지됩니다.) +module.exports = require('../../src/commands/Birthday/birthday.js'); \ No newline at end of file diff --git "a/src/commands/\354\203\235\354\235\274/modules/.gitkeep" "b/src/commands/\354\203\235\354\235\274/modules/.gitkeep" new file mode 100644 index 0000000000..3c30fd00a3 --- /dev/null +++ "b/src/commands/\354\203\235\354\235\274/modules/.gitkeep" @@ -0,0 +1 @@ +// Copied directory placeholder diff --git "a/src/commands/\354\204\234\353\262\204_\355\206\265\352\263\204/modules/.gitkeep" "b/src/commands/\354\204\234\353\262\204_\355\206\265\352\263\204/modules/.gitkeep" new file mode 100644 index 0000000000..ff7bd09c0c --- /dev/null +++ "b/src/commands/\354\204\234\353\262\204_\355\206\265\352\263\204/modules/.gitkeep" @@ -0,0 +1 @@ +// placeholder diff --git "a/src/commands/\354\204\234\353\262\204_\355\206\265\352\263\204/serverstats.js" "b/src/commands/\354\204\234\353\262\204_\355\206\265\352\263\204/serverstats.js" new file mode 100644 index 0000000000..512e55c4e8 --- /dev/null +++ "b/src/commands/\354\204\234\353\262\204_\355\206\265\352\263\204/serverstats.js" @@ -0,0 +1 @@ +module.exports = require('../../src/commands/ServerStats/serverstats.js'); \ No newline at end of file diff --git "a/src/commands/\354\234\240\355\213\270\353\246\254\355\213\260/avatar.js" "b/src/commands/\354\234\240\355\213\270\353\246\254\355\213\260/avatar.js" new file mode 100644 index 0000000000..3e2167a5ec --- /dev/null +++ "b/src/commands/\354\234\240\355\213\270\353\246\254\355\213\260/avatar.js" @@ -0,0 +1 @@ +module.exports = require('../../src/commands/Utility/avatar.js'); \ No newline at end of file diff --git "a/src/commands/\354\234\240\355\213\270\353\246\254\355\213\260/firstmsg.js" "b/src/commands/\354\234\240\355\213\270\353\246\254\355\213\260/firstmsg.js" new file mode 100644 index 0000000000..776e12ba74 --- /dev/null +++ "b/src/commands/\354\234\240\355\213\270\353\246\254\355\213\260/firstmsg.js" @@ -0,0 +1 @@ +module.exports = require('../../src/commands/Utility/firstmsg.js'); \ No newline at end of file diff --git "a/src/commands/\354\234\240\355\213\270\353\246\254\355\213\260/report.js" "b/src/commands/\354\234\240\355\213\270\353\246\254\355\213\260/report.js" new file mode 100644 index 0000000000..7c3763336e --- /dev/null +++ "b/src/commands/\354\234\240\355\213\270\353\246\254\355\213\260/report.js" @@ -0,0 +1 @@ +module.exports = require('../../src/commands/Utility/report.js'); \ No newline at end of file diff --git "a/src/commands/\354\234\240\355\213\270\353\246\254\355\213\260/serverinfo.js" "b/src/commands/\354\234\240\355\213\270\353\246\254\355\213\260/serverinfo.js" new file mode 100644 index 0000000000..c6c82de38c --- /dev/null +++ "b/src/commands/\354\234\240\355\213\270\353\246\254\355\213\260/serverinfo.js" @@ -0,0 +1 @@ +module.exports = require('../../src/commands/Utility/serverinfo.js'); \ No newline at end of file diff --git "a/src/commands/\354\234\240\355\213\270\353\246\254\355\213\260/todo.js" "b/src/commands/\354\234\240\355\213\270\353\246\254\355\213\260/todo.js" new file mode 100644 index 0000000000..faed2442ca --- /dev/null +++ "b/src/commands/\354\234\240\355\213\270\353\246\254\355\213\260/todo.js" @@ -0,0 +1 @@ +module.exports = require('../../src/commands/Utility/todo.js'); \ No newline at end of file diff --git "a/src/commands/\354\234\240\355\213\270\353\246\254\355\213\260/userinfo.js" "b/src/commands/\354\234\240\355\213\270\353\246\254\355\213\260/userinfo.js" new file mode 100644 index 0000000000..465d0aeac4 --- /dev/null +++ "b/src/commands/\354\234\240\355\213\270\353\246\254\355\213\260/userinfo.js" @@ -0,0 +1 @@ +module.exports = require('../../src/commands/Utility/userinfo.js'); \ No newline at end of file diff --git "a/src/commands/\354\234\240\355\213\270\353\246\254\355\213\260/weather.js" "b/src/commands/\354\234\240\355\213\270\353\246\254\355\213\260/weather.js" new file mode 100644 index 0000000000..2e0b92684d --- /dev/null +++ "b/src/commands/\354\234\240\355\213\270\353\246\254\355\213\260/weather.js" @@ -0,0 +1 @@ +module.exports = require('../../src/commands/Utility/weather.js'); \ No newline at end of file diff --git "a/src/commands/\354\234\240\355\213\270\353\246\254\355\213\260/wipedata.js" "b/src/commands/\354\234\240\355\213\270\353\246\254\355\213\260/wipedata.js" new file mode 100644 index 0000000000..7fa65c239d --- /dev/null +++ "b/src/commands/\354\234\240\355\213\270\353\246\254\355\213\260/wipedata.js" @@ -0,0 +1 @@ +module.exports = require('../../src/commands/Utility/wipedata.js'); \ No newline at end of file diff --git "a/src/commands/\354\235\214\354\225\205/join.js" "b/src/commands/\354\235\214\354\225\205/join.js" new file mode 100644 index 0000000000..033ca56255 --- /dev/null +++ "b/src/commands/\354\235\214\354\225\205/join.js" @@ -0,0 +1 @@ +module.exports = require('../../src/commands/Music/join.js'); \ No newline at end of file diff --git "a/src/commands/\354\235\214\354\225\205/music.js" "b/src/commands/\354\235\214\354\225\205/music.js" new file mode 100644 index 0000000000..ac14736d84 --- /dev/null +++ "b/src/commands/\354\235\214\354\225\205/music.js" @@ -0,0 +1 @@ +module.exports = require('../../src/commands/Music/music.js'); \ No newline at end of file diff --git "a/src/commands/\354\235\214\354\225\205/nowplaying.js" "b/src/commands/\354\235\214\354\225\205/nowplaying.js" new file mode 100644 index 0000000000..7748677ace --- /dev/null +++ "b/src/commands/\354\235\214\354\225\205/nowplaying.js" @@ -0,0 +1 @@ +module.exports = require('../../src/commands/Music/nowplaying.js'); \ No newline at end of file diff --git "a/src/commands/\354\235\214\354\225\205/play.js" "b/src/commands/\354\235\214\354\225\205/play.js" new file mode 100644 index 0000000000..6fab8fda91 --- /dev/null +++ "b/src/commands/\354\235\214\354\225\205/play.js" @@ -0,0 +1 @@ +module.exports = require('../../src/commands/Music/play.js'); \ No newline at end of file diff --git "a/src/commands/\354\235\214\354\225\205/queue.js" "b/src/commands/\354\235\214\354\225\205/queue.js" new file mode 100644 index 0000000000..ed26d839db --- /dev/null +++ "b/src/commands/\354\235\214\354\225\205/queue.js" @@ -0,0 +1 @@ +module.exports = require('../../src/commands/Music/queue.js'); \ No newline at end of file diff --git "a/src/commands/\354\235\270\354\246\235/autoverify.js" "b/src/commands/\354\235\270\354\246\235/autoverify.js" new file mode 100644 index 0000000000..71149a38ef --- /dev/null +++ "b/src/commands/\354\235\270\354\246\235/autoverify.js" @@ -0,0 +1 @@ +module.exports = require('../../src/commands/Verification/autoverify.js'); \ No newline at end of file diff --git "a/src/commands/\354\235\270\354\246\235/verification.js" "b/src/commands/\354\235\270\354\246\235/verification.js" new file mode 100644 index 0000000000..a4cb291650 --- /dev/null +++ "b/src/commands/\354\235\270\354\246\235/verification.js" @@ -0,0 +1 @@ +module.exports = require('../../src/commands/Verification/verification.js'); \ No newline at end of file diff --git "a/src/commands/\354\235\270\354\246\235/verify.js" "b/src/commands/\354\235\270\354\246\235/verify.js" new file mode 100644 index 0000000000..fea3a81541 --- /dev/null +++ "b/src/commands/\354\235\270\354\246\235/verify.js" @@ -0,0 +1 @@ +module.exports = require('../../src/commands/Verification/verify.js'); \ No newline at end of file diff --git "a/src/commands/\354\236\254\353\257\270/count.js" "b/src/commands/\354\236\254\353\257\270/count.js" new file mode 100644 index 0000000000..0c11cb7e51 --- /dev/null +++ "b/src/commands/\354\236\254\353\257\270/count.js" @@ -0,0 +1 @@ +module.exports = require('../../src/commands/Fun/count.js'); \ No newline at end of file diff --git "a/src/commands/\354\236\254\353\257\270/fight.js" "b/src/commands/\354\236\254\353\257\270/fight.js" new file mode 100644 index 0000000000..5752a7018b --- /dev/null +++ "b/src/commands/\354\236\254\353\257\270/fight.js" @@ -0,0 +1 @@ +module.exports = require('../../src/commands/Fun/fight.js'); \ No newline at end of file diff --git "a/src/commands/\354\236\254\353\257\270/flip.js" "b/src/commands/\354\236\254\353\257\270/flip.js" new file mode 100644 index 0000000000..0ce8bac94d --- /dev/null +++ "b/src/commands/\354\236\254\353\257\270/flip.js" @@ -0,0 +1 @@ +module.exports = require('../../src/commands/Fun/flip.js'); \ No newline at end of file diff --git "a/src/commands/\354\236\254\353\257\270/roll.js" "b/src/commands/\354\236\254\353\257\270/roll.js" new file mode 100644 index 0000000000..dd3d6d4da6 --- /dev/null +++ "b/src/commands/\354\236\254\353\257\270/roll.js" @@ -0,0 +1 @@ +module.exports = require('../../src/commands/Fun/roll.js'); \ No newline at end of file diff --git "a/src/commands/\354\260\270\354\227\254\353\241\234_\354\203\235\354\204\261/jointocreate.js" "b/src/commands/\354\260\270\354\227\254\353\241\234_\354\203\235\354\204\261/jointocreate.js" new file mode 100644 index 0000000000..9de68d1a94 --- /dev/null +++ "b/src/commands/\354\260\270\354\227\254\353\241\234_\354\203\235\354\204\261/jointocreate.js" @@ -0,0 +1 @@ +module.exports = require('../../src/commands/JoinToCreate/jointocreate.js'); \ No newline at end of file diff --git "a/src/commands/\354\260\270\354\227\254\353\241\234_\354\203\235\354\204\261/modules/.gitkeep" "b/src/commands/\354\260\270\354\227\254\353\241\234_\354\203\235\354\204\261/modules/.gitkeep" new file mode 100644 index 0000000000..ff7bd09c0c --- /dev/null +++ "b/src/commands/\354\260\270\354\227\254\353\241\234_\354\203\235\354\204\261/modules/.gitkeep" @@ -0,0 +1 @@ +// placeholder diff --git "a/src/commands/\354\273\244\353\256\244\353\213\210\355\213\260/app-admin.js" "b/src/commands/\354\273\244\353\256\244\353\213\210\355\213\260/app-admin.js" new file mode 100644 index 0000000000..3c448cc553 --- /dev/null +++ "b/src/commands/\354\273\244\353\256\244\353\213\210\355\213\260/app-admin.js" @@ -0,0 +1 @@ +module.exports = require('../../src/commands/Community/app-admin.js'); \ No newline at end of file diff --git "a/src/commands/\354\273\244\353\256\244\353\213\210\355\213\260/apply.js" "b/src/commands/\354\273\244\353\256\244\353\213\210\355\213\260/apply.js" new file mode 100644 index 0000000000..1490d552b6 --- /dev/null +++ "b/src/commands/\354\273\244\353\256\244\353\213\210\355\213\260/apply.js" @@ -0,0 +1 @@ +module.exports = require('../../src/commands/Community/apply.js'); \ No newline at end of file diff --git "a/src/commands/\354\273\244\353\256\244\353\213\210\355\213\260/modules/.gitkeep" "b/src/commands/\354\273\244\353\256\244\353\213\210\355\213\260/modules/.gitkeep" new file mode 100644 index 0000000000..ff7bd09c0c --- /dev/null +++ "b/src/commands/\354\273\244\353\256\244\353\213\210\355\213\260/modules/.gitkeep" @@ -0,0 +1 @@ +// placeholder diff --git "a/src/commands/\354\275\224\354\226\264/commands.js" "b/src/commands/\354\275\224\354\226\264/commands.js" new file mode 100644 index 0000000000..b07aa348ed --- /dev/null +++ "b/src/commands/\354\275\224\354\226\264/commands.js" @@ -0,0 +1 @@ +module.exports = require('../../src/commands/Core/commands.js'); \ No newline at end of file diff --git "a/src/commands/\354\275\224\354\226\264/configWizard.js" "b/src/commands/\354\275\224\354\226\264/configWizard.js" new file mode 100644 index 0000000000..dfd9a76344 --- /dev/null +++ "b/src/commands/\354\275\224\354\226\264/configWizard.js" @@ -0,0 +1 @@ +module.exports = require('../../src/commands/Core/configWizard.js'); \ No newline at end of file diff --git "a/src/commands/\354\275\224\354\226\264/help.js" "b/src/commands/\354\275\224\354\226\264/help.js" new file mode 100644 index 0000000000..07019a9fbb --- /dev/null +++ "b/src/commands/\354\275\224\354\226\264/help.js" @@ -0,0 +1 @@ +module.exports = require('../../src/commands/Core/help.js'); \ No newline at end of file diff --git "a/src/commands/\354\275\224\354\226\264/modules/.gitkeep" "b/src/commands/\354\275\224\354\226\264/modules/.gitkeep" new file mode 100644 index 0000000000..ff7bd09c0c --- /dev/null +++ "b/src/commands/\354\275\224\354\226\264/modules/.gitkeep" @@ -0,0 +1 @@ +// placeholder diff --git "a/src/commands/\355\213\260\354\274\223/claim.js" "b/src/commands/\355\213\260\354\274\223/claim.js" new file mode 100644 index 0000000000..9537c928f8 --- /dev/null +++ "b/src/commands/\355\213\260\354\274\223/claim.js" @@ -0,0 +1 @@ +module.exports = require('../../src/commands/Ticket/claim.js'); \ No newline at end of file diff --git "a/src/commands/\355\213\260\354\274\223/close.js" "b/src/commands/\355\213\260\354\274\223/close.js" new file mode 100644 index 0000000000..2fb901f17f --- /dev/null +++ "b/src/commands/\355\213\260\354\274\223/close.js" @@ -0,0 +1 @@ +module.exports = require('../../src/commands/Ticket/close.js'); \ No newline at end of file diff --git "a/src/commands/\355\213\260\354\274\223/modules/.gitkeep" "b/src/commands/\355\213\260\354\274\223/modules/.gitkeep" new file mode 100644 index 0000000000..ff7bd09c0c --- /dev/null +++ "b/src/commands/\355\213\260\354\274\223/modules/.gitkeep" @@ -0,0 +1 @@ +// placeholder diff --git "a/src/commands/\355\231\230\354\230\201/autorole.js" "b/src/commands/\355\231\230\354\230\201/autorole.js" new file mode 100644 index 0000000000..b0f7e8f94b --- /dev/null +++ "b/src/commands/\355\231\230\354\230\201/autorole.js" @@ -0,0 +1 @@ +module.exports = require('../../src/commands/Welcome/autorole.js'); \ No newline at end of file diff --git "a/src/commands/\355\231\230\354\230\201/goodbye.js" "b/src/commands/\355\231\230\354\230\201/goodbye.js" new file mode 100644 index 0000000000..272e716519 --- /dev/null +++ "b/src/commands/\355\231\230\354\230\201/goodbye.js" @@ -0,0 +1 @@ +module.exports = require('../../src/commands/Welcome/goodbye.js'); \ No newline at end of file diff --git "a/src/commands/\355\231\230\354\230\201/greet.js" "b/src/commands/\355\231\230\354\230\201/greet.js" new file mode 100644 index 0000000000..2eb044ed6a --- /dev/null +++ "b/src/commands/\355\231\230\354\230\201/greet.js" @@ -0,0 +1 @@ +module.exports = require('../../src/commands/Welcome/greet.js'); \ No newline at end of file diff --git "a/src/commands/\355\231\230\354\230\201/modules/.gitkeep" "b/src/commands/\355\231\230\354\230\201/modules/.gitkeep" new file mode 100644 index 0000000000..ff7bd09c0c --- /dev/null +++ "b/src/commands/\355\231\230\354\230\201/modules/.gitkeep" @@ -0,0 +1 @@ +// placeholder diff --git "a/src/commands/\355\231\230\354\230\201/welcome.js" "b/src/commands/\355\231\230\354\230\201/welcome.js" new file mode 100644 index 0000000000..bf44d623a6 --- /dev/null +++ "b/src/commands/\355\231\230\354\230\201/welcome.js" @@ -0,0 +1 @@ +module.exports = require('../../src/commands/Welcome/welcome.js'); \ No newline at end of file From ec9d110a1c0b3acbf453f0dacd90ea105891b051 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=AF=BC=EC=A4=80?= Date: Fri, 24 Jul 2026 19:30:08 +0900 Subject: [PATCH 10/14] =?UTF-8?q?docs:=20PR=20=EC=84=A4=EB=AA=85=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/commands/README-translate.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 src/commands/README-translate.md diff --git a/src/commands/README-translate.md b/src/commands/README-translate.md new file mode 100644 index 0000000000..767c353f7c --- /dev/null +++ b/src/commands/README-translate.md @@ -0,0 +1,17 @@ +# 번역된 폴더명 변경 PR + +이 PR은 src/commands 디렉터리 내의 폴더명을 한국어(한글)로 노출시키기 위한 초기 변경입니다. + +변경사항 요약: +- 영어 폴더별로 한글 폴더를 생성하고, 각 한글 폴더에 원본 파일을 require하는 proxy 파일들을 추가했습니다. +- 원본(영어) 폴더는 그대로 유지됩니다. + +검증 및 주의사항: +- 프록시 방식은 빠른 노출을 위해 사용되었지만, require 상대경로가 정확한지 로컬에서 테스트가 필요합니다. +- 동적 임포트나 템플릿 문자열 경로는 자동 갱신되지 않았을 수 있습니다. + +다음 단계 제안: +1) CI/테스트 실행 (아래 참고) +2) 문제 없으면 PR 머지 후 실제 파일 복사/경로 치환을 진행 + +--- From 2559b5bf0f801740deef21de3edcda62f5ba66b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=AF=BC=EC=A4=80?= Date: Fri, 24 Jul 2026 19:49:09 +0900 Subject: [PATCH 11/14] feat(i18n): add Korean localizations for ping command --- src/commands/Core/ping.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/commands/Core/ping.js b/src/commands/Core/ping.js index 8341f780d0..313d3b54c9 100644 --- a/src/commands/Core/ping.js +++ b/src/commands/Core/ping.js @@ -6,7 +6,9 @@ import { InteractionHelper } from '../../utils/interactionHelper.js'; export default { data: new SlashCommandBuilder() .setName("ping") - .setDescription("Checks the bot's latency and API speed"), + .setNameLocalizations({ ko: '핑' }) + .setDescription("Checks the bot's latency and API speed") + .setDescriptionLocalizations({ ko: '지연 시간 및 API 응답 속도 확인' }), async prefixExecute(interaction) { try { @@ -78,4 +80,4 @@ export default { } } }, -}; \ No newline at end of file +}; From 0f6b79fa8ffc581f2f6cec2203d2cf9f2ed21797 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=AF=BC=EC=A4=80?= Date: Fri, 24 Jul 2026 19:52:30 +0900 Subject: [PATCH 12/14] feat(i18n): add Korean localization for help command --- src/commands/Core/help.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/commands/Core/help.js b/src/commands/Core/help.js index 3d9d7eb783..0b5175145d 100644 --- a/src/commands/Core/help.js +++ b/src/commands/Core/help.js @@ -143,7 +143,9 @@ export default { slashOnly: true, data: new SlashCommandBuilder() .setName("help") - .setDescription("Displays the help menu with all available commands"), + .setNameLocalizations({ ko: '도움말' }) + .setDescription("Displays the help menu with all available commands") + .setDescriptionLocalizations({ ko: '사용 가능한 모든 명령어가 포함된 도움 메뉴를 표시' }), async execute(interaction, guildConfig, client) { @@ -178,4 +180,4 @@ export default { } }, HELP_MENU_TIMEOUT_MS); }, -}; \ No newline at end of file +}; From 60ced6c2d3b91045558b8d1dbd3b0957def15c7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=AF=BC=EC=A4=80?= Date: Fri, 24 Jul 2026 19:56:48 +0900 Subject: [PATCH 13/14] feat(i18n): add Korean localizations for play command --- src/commands/Music/play.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/commands/Music/play.js b/src/commands/Music/play.js index 193b2d4d69..749bd326f4 100644 --- a/src/commands/Music/play.js +++ b/src/commands/Music/play.js @@ -7,9 +7,15 @@ export default { category: 'Music', data: new SlashCommandBuilder() .setName('play') + .setNameLocalizations({ ko: '재생' }) .setDescription('Play a song or add it to the queue') + .setDescriptionLocalizations({ ko: '노래를 재생하거나 대기열에 추가' }) .addStringOption((opt) => - opt.setName('query').setDescription('Song name or URL').setRequired(true), + opt.setName('query') + .setNameLocalizations({ ko: '검색어' }) + .setDescription('Song name or URL') + .setDescriptionLocalizations({ ko: '노래 제목 또는 URL' }) + .setRequired(true), ), async execute(interaction, config, client) { From 2fb1f24db48faf79417f2afa7747e5acca2eb8be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=AF=BC=EC=A4=80?= Date: Fri, 24 Jul 2026 20:02:08 +0900 Subject: [PATCH 14/14] chore(i18n): add script to register commands to test guild --- scripts/register-guild-commands.js | 64 ++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 scripts/register-guild-commands.js diff --git a/scripts/register-guild-commands.js b/scripts/register-guild-commands.js new file mode 100644 index 0000000000..ae8b51fee3 --- /dev/null +++ b/scripts/register-guild-commands.js @@ -0,0 +1,64 @@ +import 'dotenv/config'; +import fs from 'fs/promises'; +import path from 'path'; +import { pathToFileURL } from 'url'; +import { REST } from '@discordjs/rest'; +import { Routes } from 'discord-api-types/v10'; + +const TOKEN = process.env.BOT_TOKEN; +const CLIENT_ID = process.env.CLIENT_ID; +const GUILD_ID = process.env.GUILD_ID; + +if (!TOKEN || !CLIENT_ID || !GUILD_ID) { + console.error('Required env vars: BOT_TOKEN, CLIENT_ID, GUILD_ID'); + process.exit(1); +} + +const rest = new REST({ version: '10' }).setToken(TOKEN); + +async function getAllFiles(dir, fileList = []) { + const entries = await fs.readdir(dir, { withFileTypes: true }); + for (const entry of entries) { + const full = path.join(dir, entry.name); + if (entry.isDirectory()) { + if (entry.name === 'modules') continue; + await getAllFiles(full, fileList); + } else if (entry.isFile() && entry.name.endsWith('.js')) { + fileList.push(full); + } + } + return fileList; +} + +async function loadCommands() { + const commands = []; + const commandsPath = path.join(process.cwd(), 'src', 'commands'); + const files = await getAllFiles(commandsPath); + + for (const file of files) { + try { + const fileUrl = pathToFileURL(file).href; + const mod = await import(`${fileUrl}`); + const cmd = mod.default || mod; + if (cmd && cmd.data && typeof cmd.data.toJSON === 'function') { + commands.push(cmd.data.toJSON()); + } + } catch (err) { + console.error(`Failed to load command file ${file}:`, err); + } + } + + return commands; +} + +(async () => { + try { + const commands = await loadCommands(); + console.log(`Registering ${commands.length} commands to guild ${GUILD_ID}`); + const res = await rest.put(Routes.applicationGuildCommands(CLIENT_ID, GUILD_ID), { body: commands }); + console.log('Registration result:', Array.isArray(res) ? `${res.length} commands registered` : res); + } catch (err) { + console.error('Error registering guild commands:', err); + process.exit(1); + } +})();