diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..8d7a434 Binary files /dev/null and b/.DS_Store differ diff --git a/.agents/rules/graphify.md b/.agents/rules/graphify.md new file mode 100644 index 0000000..b8ada11 --- /dev/null +++ b/.agents/rules/graphify.md @@ -0,0 +1,11 @@ +--- +trigger: model_decision +description: Graphify +--- + +# Graphify (Knowledge Graph) + +- This project uses `graphify` to build and maintain a knowledge graph in `graphify-out/`. +- When the user triggers `/graphify`, refer to `SKILL.md` in the project root for execution steps. +- Always check `graphify-out/GRAPH_REPORT.md` before answering architecture or codebase-wide questions. +- If you see `graphify-out/graph.json` missing or outdated, suggest running `/graphify .`. diff --git a/.agents/rules/kord_routine.md b/.agents/rules/kord_routine.md index 7f5a3b6..51d7a42 100644 --- a/.agents/rules/kord_routine.md +++ b/.agents/rules/kord_routine.md @@ -9,7 +9,7 @@ description: work routine ## 기본 원칙 (Work Rules) -1. **인프라 자율 사용**: 에이전트는 프로젝트에 설정된 Docker 기반 인프라(PostgreSQL, Redis 등)를 사용자의 추가 승인 없이 자유롭게 구동(`docker-compose up -d`) 및 활용할 수 있습니다. +1. **인프라 자율 사용**: 에이전트는 프로젝트에 설정된 Docker 기반 인프라(PostgreSQL 등)를 사용자의 추가 승인 없이 자유롭게 구동(`docker-compose up -d`) 및 활용할 수 있습니다. 2. **협력적 기획, 독립적 실행**: 기능 기획과 설계(Architecture, Schema 등)는 사용자와 함께 논리적인 완결성을 갖출 때까지 충분히 논의합니다. 기획이 "완료 및 승인"된 후에는 후속 구현, 에러 디버깅, 자체 테스트를 추가적인 중간 확인 없이 에이전트가 주도를 가지고 끝마친 뒤 최종 결과를 보고합니다. ## 단계별 작업 루틴 diff --git a/.cursorrules b/.cursorrules index 71e1dcc..45569b0 100644 --- a/.cursorrules +++ b/.cursorrules @@ -15,3 +15,9 @@ - 유저에게 노출되는 모든 기능(메시지, 임베드, 상태 메시지 등)을 구성할 때는 별도의 요청이 없더라도 **반드시 다국어 지원(i18n) 적용을 검토하고 구현**해야 합니다. (자세한 내용은 `Docs/Rules/i18n_guidelines.md` 참조) - 단순 문법 검증에 그치지 말고, `yarn dev` 등의 명령어로 봇을 백그라운드에서 직접 구동(Boot)시켜 DB/캐시 커넥트 및 이벤트 리스너 초기화 중 런타임 에러(예: Intents 권한 거부 등)가 발생하지 않는지 스스로 눈으로 확인하고 완벽히 디버깅해야 합니다. - 봇이 성공적으로 온라인 상태(`Ready`)에 진입한 것을 확인한 뒤에만 사용자에게 작업 완료를 보고합니다. + +## Graphify Rules +- 사용자가 `/graphify` 혹은 지식 그래프 관련 질의를 할 경우, 프로젝트 루트의 `SKILL.md` 및 `Docs/Features/Graphify_Setup_Guide.md` 지침을 준수하여 실행합니다. +- 대규모 리팩토링이나 구조 파악이 필요할 때는 `graphify-out/GRAPH_REPORT.md`를 우선적으로 참조하여 의존 관계를 파악합니다. +- 로컬 Ollama 환경이 감지되면 (`http://localhost:11434`), 대량의 데이터 처리에 대해 `--ollama` 옵션 사용을 우선적으로 검토합니다. +- 개발 및 잦은 코드 수정 시 항상 `python3 -m graphify.watch .` 를 백그라운드에 구동시켜 지식 그래프의 최신화를 자동화하는 것을 검토하십시오. diff --git a/.env.example b/.env.example index fabe1a6..32f994d 100644 --- a/.env.example +++ b/.env.example @@ -6,5 +6,10 @@ DISCORD_CLIENT_ID=your_client_id_here # User/pass from docker-compose.yml DATABASE_URL="postgresql://kord:password@localhost:5432/kord_db?schema=public" -## NOTE -## This project does not use Redis. \ No newline at end of file +# Logging (log4js — file only under LOG_DIR, no console appender) +# Levels: trace, debug, info, warn, error, fatal +LOG_LEVEL=info +# Log directory (kord.log + dated rotations). Relative = from process cwd; use an absolute path on servers +# if the deploy directory is wiped (e.g. Jenkins): LOG_DIR=/var/lib/kord/logs +LOG_DIR=logs + diff --git a/.graphify_cached.json b/.graphify_cached.json new file mode 100644 index 0000000..adf76be --- /dev/null +++ b/.graphify_cached.json @@ -0,0 +1 @@ +{"nodes": [{"id": "jest_config", "label": "jest.config.js", "file_type": "code", "source_file": "jest.config.js", "source_location": "L1"}, {"id": "prisma_config", "label": "prisma.config.ts", "file_type": "code", "source_file": "prisma.config.ts", "source_location": "L1"}, {"id": "seed", "label": "seed.ts", "file_type": "code", "source_file": "prisma/seed.ts", "source_location": "L1"}, {"id": "seed_main", "label": "main()", "file_type": "code", "source_file": "prisma/seed.ts", "source_location": "L10"}, {"id": "boterror_test", "label": "BotError.test.ts", "file_type": "code", "source_file": "tests/errors/BotError.test.ts", "source_location": "L1"}, {"id": "errorreporter_test", "label": "ErrorReporter.test.ts", "file_type": "code", "source_file": "tests/errors/ErrorReporter.test.ts", "source_location": "L1"}, {"id": "i18n_test", "label": "i18n.test.ts", "file_type": "code", "source_file": "tests/i18n/i18n.test.ts", "source_location": "L1"}, {"id": "inviteservice_test", "label": "InviteService.test.ts", "file_type": "code", "source_file": "tests/services/InviteService.test.ts", "source_location": "L1"}, {"id": "fishingservice_test", "label": "FishingService.test.ts", "file_type": "code", "source_file": "tests/services/FishingService.test.ts", "source_location": "L1"}, {"id": "musicservice_test", "label": "MusicService.test.ts", "file_type": "code", "source_file": "tests/services/MusicService.test.ts", "source_location": "L1"}, {"id": "mimicservice_test", "label": "MimicService.test.ts", "file_type": "code", "source_file": "tests/services/MimicService.test.ts", "source_location": "L1"}, {"id": "voiceservice_test", "label": "VoiceService.test.ts", "file_type": "code", "source_file": "tests/services/VoiceService.test.ts", "source_location": "L1"}, {"id": "check_i18n_tests", "label": "check-i18n-tests.ts", "file_type": "code", "source_file": "scripts/check-i18n-tests.ts", "source_location": "L1"}, {"id": "check_i18n_tests_walk", "label": "walk()", "file_type": "code", "source_file": "scripts/check-i18n-tests.ts", "source_location": "L19"}, {"id": "check_i18n_tests_getfiles", "label": "getFiles()", "file_type": "code", "source_file": "scripts/check-i18n-tests.ts", "source_location": "L43"}, {"id": "check_i18n_tests_checkfile", "label": "checkFile()", "file_type": "code", "source_file": "scripts/check-i18n-tests.ts", "source_location": "L64"}, {"id": "index", "label": "index.ts", "file_type": "code", "source_file": "src/index.ts", "source_location": "L1"}, {"id": "index", "label": "index.ts", "file_type": "code", "source_file": "src/database/index.ts", "source_location": "L1"}, {"id": "index_createpgpoolconfig", "label": "createPgPoolConfig()", "file_type": "code", "source_file": "src/database/index.ts", "source_location": "L13"}, {"id": "index_connectdb", "label": "connectDB()", "file_type": "code", "source_file": "src/database/index.ts", "source_location": "L40"}, {"id": "refinementhandler", "label": "refinementHandler.ts", "file_type": "code", "source_file": "src/interactions/handlers/refinementHandler.ts", "source_location": "L1"}, {"id": "refinementhandler_handlerefinementinteraction", "label": "handleRefinementInteraction()", "file_type": "code", "source_file": "src/interactions/handlers/refinementHandler.ts", "source_location": "L7"}, {"id": "setupwizardhandler", "label": "setupWizardHandler.ts", "file_type": "code", "source_file": "src/interactions/handlers/setupWizardHandler.ts", "source_location": "L1"}, {"id": "setupwizardhandler_handlesetupwizardinteraction", "label": "handleSetupWizardInteraction()", "file_type": "code", "source_file": "src/interactions/handlers/setupWizardHandler.ts", "source_location": "L7"}, {"id": "env", "label": "env.ts", "file_type": "code", "source_file": "src/config/env.ts", "source_location": "L1"}, {"id": "env_generateinstanceid", "label": "generateInstanceId()", "file_type": "code", "source_file": "src/config/env.ts", "source_location": "L8"}, {"id": "errorhandler", "label": "errorHandler.ts", "file_type": "code", "source_file": "src/utils/errorHandler.ts", "source_location": "L1"}, {"id": "errorhandler_handleglobalexceptions", "label": "handleGlobalExceptions()", "file_type": "code", "source_file": "src/utils/errorHandler.ts", "source_location": "L3"}, {"id": "logger", "label": "logger.ts", "file_type": "code", "source_file": "src/utils/logger.ts", "source_location": "L1"}, {"id": "logger_resolveloglevel", "label": "resolveLogLevel()", "file_type": "code", "source_file": "src/utils/logger.ts", "source_location": "L9"}, {"id": "logger_resolvelogdir", "label": "resolveLogDir()", "file_type": "code", "source_file": "src/utils/logger.ts", "source_location": "L15"}, {"id": "logger_ensurelogdir", "label": "ensureLogDir()", "file_type": "code", "source_file": "src/utils/logger.ts", "source_location": "L23"}, {"id": "language", "label": "language.ts", "file_type": "code", "source_file": "src/commands/language.ts", "source_location": "L1"}, {"id": "language_execute", "label": "execute()", "file_type": "code", "source_file": "src/commands/language.ts", "source_location": "L25"}, {"id": "setup", "label": "setup.ts", "file_type": "code", "source_file": "src/commands/setup.ts", "source_location": "L1"}, {"id": "setup_execute", "label": "execute()", "file_type": "code", "source_file": "src/commands/setup.ts", "source_location": "L18"}, {"id": "voice", "label": "voice.ts", "file_type": "code", "source_file": "src/commands/voice.ts", "source_location": "L1"}, {"id": "voice_execute", "label": "execute()", "file_type": "code", "source_file": "src/commands/voice.ts", "source_location": "L79"}, {"id": "music", "label": "music.ts", "file_type": "code", "source_file": "src/commands/music.ts", "source_location": "L1"}, {"id": "music_builderrormessage", "label": "buildErrorMessage()", "file_type": "code", "source_file": "src/commands/music.ts", "source_location": "L6"}, {"id": "music_respond", "label": "respond()", "file_type": "code", "source_file": "src/commands/music.ts", "source_location": "L14"}, {"id": "music_execute", "label": "execute()", "file_type": "code", "source_file": "src/commands/music.ts", "source_location": "L130"}, {"id": "refine", "label": "refine.ts", "file_type": "code", "source_file": "src/commands/refine.ts", "source_location": "L1"}, {"id": "refine_execute", "label": "execute()", "file_type": "code", "source_file": "src/commands/refine.ts", "source_location": "L91"}, {"id": "minigame", "label": "minigame.ts", "file_type": "code", "source_file": "src/commands/minigame.ts", "source_location": "L1"}, {"id": "minigame_execute", "label": "execute()", "file_type": "code", "source_file": "src/commands/minigame.ts", "source_location": "L62"}, {"id": "config", "label": "config.ts", "file_type": "code", "source_file": "src/commands/config.ts", "source_location": "L1"}, {"id": "config_execute", "label": "execute()", "file_type": "code", "source_file": "src/commands/config.ts", "source_location": "L66"}, {"id": "audit", "label": "audit.ts", "file_type": "code", "source_file": "src/commands/audit.ts", "source_location": "L1"}, {"id": "audit_getoverallcolor", "label": "getOverallColor()", "file_type": "code", "source_file": "src/commands/audit.ts", "source_location": "L20"}, {"id": "audit_buildresultline", "label": "buildResultLine()", "file_type": "code", "source_file": "src/commands/audit.ts", "source_location": "L26"}, {"id": "audit_execute", "label": "execute()", "file_type": "code", "source_file": "src/commands/audit.ts", "source_location": "L110"}, {"id": "event", "label": "event.ts", "file_type": "code", "source_file": "src/commands/event.ts", "source_location": "L1"}, {"id": "event_parseseouldatetime", "label": "parseSeoulDateTime()", "file_type": "code", "source_file": "src/commands/event.ts", "source_location": "L18"}, {"id": "event_todiscordtimestamps", "label": "toDiscordTimestamps()", "file_type": "code", "source_file": "src/commands/event.ts", "source_location": "L51"}, {"id": "event_parsereminderoffsets", "label": "parseReminderOffsets()", "file_type": "code", "source_file": "src/commands/event.ts", "source_location": "L59"}, {"id": "event_formatreminderoffsets", "label": "formatReminderOffsets()", "file_type": "code", "source_file": "src/commands/event.ts", "source_location": "L77"}, {"id": "event_buildstatuslabel", "label": "buildStatusLabel()", "file_type": "code", "source_file": "src/commands/event.ts", "source_location": "L85"}, {"id": "event_execute", "label": "execute()", "file_type": "code", "source_file": "src/commands/event.ts", "source_location": "L189"}, {"id": "fishing", "label": "fishing.ts", "file_type": "code", "source_file": "src/commands/fishing.ts", "source_location": "L1"}, {"id": "fishing_execute", "label": "execute()", "file_type": "code", "source_file": "src/commands/fishing.ts", "source_location": "L83"}, {"id": "boterror", "label": "BotError.ts", "file_type": "code", "source_file": "src/errors/BotError.ts", "source_location": "L1"}, {"id": "boterror_boterror", "label": "BotError", "file_type": "code", "source_file": "src/errors/BotError.ts", "source_location": "L16"}, {"id": "boterror_boterror_constructor", "label": ".constructor()", "file_type": "code", "source_file": "src/errors/BotError.ts", "source_location": "L29"}, {"id": "errorreporter", "label": "ErrorReporter.ts", "file_type": "code", "source_file": "src/errors/ErrorReporter.ts", "source_location": "L1"}, {"id": "errorreporter_errorreporter", "label": "ErrorReporter", "file_type": "code", "source_file": "src/errors/ErrorReporter.ts", "source_location": "L38"}, {"id": "errorreporter_errorreporter_report", "label": ".report()", "file_type": "code", "source_file": "src/errors/ErrorReporter.ts", "source_location": "L43"}, {"id": "errorreporter_errorreporter_wrap", "label": ".wrap()", "file_type": "code", "source_file": "src/errors/ErrorReporter.ts", "source_location": "L73"}, {"id": "errorreporter_errorreporter_buildembed", "label": ".buildEmbed()", "file_type": "code", "source_file": "src/errors/ErrorReporter.ts", "source_location": "L107"}, {"id": "errorreporter_witherrorhandler", "label": "withErrorHandler()", "file_type": "code", "source_file": "src/errors/ErrorReporter.ts", "source_location": "L136"}, {"id": "errorcodes", "label": "ErrorCodes.ts", "file_type": "code", "source_file": "src/errors/ErrorCodes.ts", "source_location": "L1"}, {"id": "errorcodes_createboterror", "label": "createBotError()", "file_type": "code", "source_file": "src/errors/ErrorCodes.ts", "source_location": "L123"}, {"id": "voicestateupdate", "label": "voiceStateUpdate.ts", "file_type": "code", "source_file": "src/events/voiceStateUpdate.ts", "source_location": "L1"}, {"id": "voicestateupdate_execute", "label": "execute()", "file_type": "code", "source_file": "src/events/voiceStateUpdate.ts", "source_location": "L7"}, {"id": "interactioncreate", "label": "interactionCreate.ts", "file_type": "code", "source_file": "src/events/interactionCreate.ts", "source_location": "L1"}, {"id": "interactioncreate_execute", "label": "execute()", "file_type": "code", "source_file": "src/events/interactionCreate.ts", "source_location": "L16"}, {"id": "messagecreate", "label": "messageCreate.ts", "file_type": "code", "source_file": "src/events/messageCreate.ts", "source_location": "L1"}, {"id": "messagecreate_execute", "label": "execute()", "file_type": "code", "source_file": "src/events/messageCreate.ts", "source_location": "L10"}, {"id": "guildmemberadd", "label": "guildMemberAdd.ts", "file_type": "code", "source_file": "src/events/guildMemberAdd.ts", "source_location": "L1"}, {"id": "guildmemberadd_execute", "label": "execute()", "file_type": "code", "source_file": "src/events/guildMemberAdd.ts", "source_location": "L7"}, {"id": "guilddelete", "label": "guildDelete.ts", "file_type": "code", "source_file": "src/events/guildDelete.ts", "source_location": "L1"}, {"id": "guilddelete_execute", "label": "execute()", "file_type": "code", "source_file": "src/events/guildDelete.ts", "source_location": "L7"}, {"id": "invitedelete", "label": "inviteDelete.ts", "file_type": "code", "source_file": "src/events/inviteDelete.ts", "source_location": "L1"}, {"id": "invitedelete_execute", "label": "execute()", "file_type": "code", "source_file": "src/events/inviteDelete.ts", "source_location": "L7"}, {"id": "invitecreate", "label": "inviteCreate.ts", "file_type": "code", "source_file": "src/events/inviteCreate.ts", "source_location": "L1"}, {"id": "invitecreate_execute", "label": "execute()", "file_type": "code", "source_file": "src/events/inviteCreate.ts", "source_location": "L7"}, {"id": "ready", "label": "ready.ts", "file_type": "code", "source_file": "src/events/ready.ts", "source_location": "L1"}, {"id": "ready_execute", "label": "execute()", "file_type": "code", "source_file": "src/events/ready.ts", "source_location": "L14"}, {"id": "guildcreate", "label": "guildCreate.ts", "file_type": "code", "source_file": "src/events/guildCreate.ts", "source_location": "L1"}, {"id": "guildcreate_execute", "label": "execute()", "file_type": "code", "source_file": "src/events/guildCreate.ts", "source_location": "L8"}, {"id": "localehelper", "label": "localeHelper.ts", "file_type": "code", "source_file": "src/i18n/localeHelper.ts", "source_location": "L1"}, {"id": "localehelper_getinteractionlocale", "label": "getInteractionLocale()", "file_type": "code", "source_file": "src/i18n/localeHelper.ts", "source_location": "L21"}, {"id": "localehelper_getcontextlocale", "label": "getContextLocale()", "file_type": "code", "source_file": "src/i18n/localeHelper.ts", "source_location": "L55"}, {"id": "types", "label": "types.ts", "file_type": "code", "source_file": "src/i18n/types.ts", "source_location": "L1"}, {"id": "index", "label": "index.ts", "file_type": "code", "source_file": "src/i18n/index.ts", "source_location": "L1"}, {"id": "index_statici18nprovider", "label": "StaticI18nProvider", "file_type": "code", "source_file": "src/i18n/index.ts", "source_location": "L28"}, {"id": "index_statici18nprovider_get", "label": ".get()", "file_type": "code", "source_file": "src/i18n/index.ts", "source_location": "L29"}, {"id": "index_statici18nprovider_issupported", "label": ".isSupported()", "file_type": "code", "source_file": "src/i18n/index.ts", "source_location": "L33"}, {"id": "index_statici18nprovider_getsupportedlocales", "label": ".getSupportedLocales()", "file_type": "code", "source_file": "src/i18n/index.ts", "source_location": "L37"}, {"id": "index_seti18nprovider", "label": "setI18nProvider()", "file_type": "code", "source_file": "src/i18n/index.ts", "source_location": "L50"}, {"id": "index_geti18nprovider", "label": "getI18nProvider()", "file_type": "code", "source_file": "src/i18n/index.ts", "source_location": "L55"}, {"id": "index_resolvelocale", "label": "resolveLocale()", "file_type": "code", "source_file": "src/i18n/index.ts", "source_location": "L68"}, {"id": "index_normalizediscordlocale", "label": "normalizeDiscordLocale()", "file_type": "code", "source_file": "src/i18n/index.ts", "source_location": "L88"}, {"id": "index_t", "label": "t()", "file_type": "code", "source_file": "src/i18n/index.ts", "source_location": "L109"}, {"id": "index_getnestedvalue", "label": "getNestedValue()", "file_type": "code", "source_file": "src/i18n/index.ts", "source_location": "L134"}, {"id": "en", "label": "en.ts", "file_type": "code", "source_file": "src/i18n/locales/en.ts", "source_location": "L1"}, {"id": "ko", "label": "ko.ts", "file_type": "code", "source_file": "src/i18n/locales/ko.ts", "source_location": "L1"}, {"id": "kordclient", "label": "KordClient.ts", "file_type": "code", "source_file": "src/client/KordClient.ts", "source_location": "L1"}, {"id": "kordclient_kordclient", "label": "KordClient", "file_type": "code", "source_file": "src/client/KordClient.ts", "source_location": "L10"}, {"id": "kordclient_kordclient_constructor", "label": ".constructor()", "file_type": "code", "source_file": "src/client/KordClient.ts", "source_location": "L13"}, {"id": "kordclient_kordclient_start", "label": ".start()", "file_type": "code", "source_file": "src/client/KordClient.ts", "source_location": "L26"}, {"id": "eventloader", "label": "EventLoader.ts", "file_type": "code", "source_file": "src/handlers/EventLoader.ts", "source_location": "L1"}, {"id": "eventloader_loadevents", "label": "loadEvents()", "file_type": "code", "source_file": "src/handlers/EventLoader.ts", "source_location": "L6"}, {"id": "commandloader", "label": "CommandLoader.ts", "file_type": "code", "source_file": "src/handlers/CommandLoader.ts", "source_location": "L1"}, {"id": "commandloader_loadcommands", "label": "loadCommands()", "file_type": "code", "source_file": "src/handlers/CommandLoader.ts", "source_location": "L6"}, {"id": "inviteservice", "label": "InviteService.ts", "file_type": "code", "source_file": "src/services/InviteService.ts", "source_location": "L1"}, {"id": "inviteservice_inviteservice", "label": "InviteService", "file_type": "code", "source_file": "src/services/InviteService.ts", "source_location": "L5"}, {"id": "inviteservice_inviteservice_cacheallinvites", "label": ".cacheAllInvites()", "file_type": "code", "source_file": "src/services/InviteService.ts", "source_location": "L9"}, {"id": "inviteservice_inviteservice_cacheguildinvites", "label": ".cacheGuildInvites()", "file_type": "code", "source_file": "src/services/InviteService.ts", "source_location": "L16"}, {"id": "inviteservice_inviteservice_handleinvitecreate", "label": ".handleInviteCreate()", "file_type": "code", "source_file": "src/services/InviteService.ts", "source_location": "L29"}, {"id": "inviteservice_inviteservice_handleinvitedelete", "label": ".handleInviteDelete()", "file_type": "code", "source_file": "src/services/InviteService.ts", "source_location": "L35"}, {"id": "inviteservice_inviteservice_handlememberadd", "label": ".handleMemberAdd()", "file_type": "code", "source_file": "src/services/InviteService.ts", "source_location": "L41"}, {"id": "mimicservice", "label": "MimicService.ts", "file_type": "code", "source_file": "src/services/MimicService.ts", "source_location": "L1"}, {"id": "mimicservice_mimicservice", "label": "MimicService", "file_type": "code", "source_file": "src/services/MimicService.ts", "source_location": "L5"}, {"id": "mimicservice_mimicservice_handlemessage", "label": ".handleMessage()", "file_type": "code", "source_file": "src/services/MimicService.ts", "source_location": "L6"}, {"id": "refinementservice", "label": "RefinementService.ts", "file_type": "code", "source_file": "src/services/RefinementService.ts", "source_location": "L1"}, {"id": "refinementservice_refinementservice", "label": "RefinementService", "file_type": "code", "source_file": "src/services/RefinementService.ts", "source_location": "L28"}, {"id": "refinementservice_refinementservice_getmaxdurability", "label": ".getMaxDurability()", "file_type": "code", "source_file": "src/services/RefinementService.ts", "source_location": "L38"}, {"id": "refinementservice_refinementservice_loadconfigs", "label": ".loadConfigs()", "file_type": "code", "source_file": "src/services/RefinementService.ts", "source_location": "L45"}, {"id": "refinementservice_refinementservice_getsysconfig", "label": ".getSysConfig()", "file_type": "code", "source_file": "src/services/RefinementService.ts", "source_location": "L67"}, {"id": "refinementservice_refinementservice_getsysconfignum", "label": ".getSysConfigNum()", "file_type": "code", "source_file": "src/services/RefinementService.ts", "source_location": "L71"}, {"id": "refinementservice_refinementservice_getcost", "label": ".getCost()", "file_type": "code", "source_file": "src/services/RefinementService.ts", "source_location": "L79"}, {"id": "refinementservice_refinementservice_tryrefine", "label": ".tryRefine()", "file_type": "code", "source_file": "src/services/RefinementService.ts", "source_location": "L86"}, {"id": "refinementservice_refinementservice_startbattle", "label": ".startBattle()", "file_type": "code", "source_file": "src/services/RefinementService.ts", "source_location": "L153"}, {"id": "refinementservice_refinementservice_checkin", "label": ".checkIn()", "file_type": "code", "source_file": "src/services/RefinementService.ts", "source_location": "L249"}, {"id": "refinementservice_refinementservice_sellweapon", "label": ".sellWeapon()", "file_type": "code", "source_file": "src/services/RefinementService.ts", "source_location": "L277"}, {"id": "refinementservice_refinementservice_getprofile", "label": ".getProfile()", "file_type": "code", "source_file": "src/services/RefinementService.ts", "source_location": "L299"}, {"id": "refinementservice_refinementservice_addgold", "label": ".addGold()", "file_type": "code", "source_file": "src/services/RefinementService.ts", "source_location": "L303"}, {"id": "refinementservice_refinementservice_getorcreateprofile", "label": ".getOrCreateProfile()", "file_type": "code", "source_file": "src/services/RefinementService.ts", "source_location": "L315"}, {"id": "activitytrackerservice", "label": "ActivityTrackerService.ts", "file_type": "code", "source_file": "src/services/ActivityTrackerService.ts", "source_location": "L1"}, {"id": "activitytrackerservice_activitytrackerservice", "label": "ActivityTrackerService", "file_type": "code", "source_file": "src/services/ActivityTrackerService.ts", "source_location": "L4"}, {"id": "activitytrackerservice_activitytrackerservice_recordactivity", "label": ".recordActivity()", "file_type": "code", "source_file": "src/services/ActivityTrackerService.ts", "source_location": "L9"}, {"id": "activitytrackerservice_activitytrackerservice_getpeakhour", "label": ".getPeakHour()", "file_type": "code", "source_file": "src/services/ActivityTrackerService.ts", "source_location": "L48"}, {"id": "bigemojiservice", "label": "BigEmojiService.ts", "file_type": "code", "source_file": "src/services/BigEmojiService.ts", "source_location": "L1"}, {"id": "bigemojiservice_bigemojiservice", "label": "BigEmojiService", "file_type": "code", "source_file": "src/services/BigEmojiService.ts", "source_location": "L5"}, {"id": "bigemojiservice_bigemojiservice_handlemessage", "label": ".handleMessage()", "file_type": "code", "source_file": "src/services/BigEmojiService.ts", "source_location": "L6"}, {"id": "feverservice", "label": "FeverService.ts", "file_type": "code", "source_file": "src/services/FeverService.ts", "source_location": "L1"}, {"id": "feverservice_feverservice", "label": "FeverService", "file_type": "code", "source_file": "src/services/FeverService.ts", "source_location": "L5"}, {"id": "feverservice_feverservice_startscheduler", "label": ".startScheduler()", "file_type": "code", "source_file": "src/services/FeverService.ts", "source_location": "L11"}, {"id": "feverservice_feverservice_updatefeverstate", "label": ".updateFeverState()", "file_type": "code", "source_file": "src/services/FeverService.ts", "source_location": "L28"}, {"id": "feverservice_feverservice_getfeverbonus", "label": ".getFeverBonus()", "file_type": "code", "source_file": "src/services/FeverService.ts", "source_location": "L64"}, {"id": "presenceservice", "label": "PresenceService.ts", "file_type": "code", "source_file": "src/services/PresenceService.ts", "source_location": "L1"}, {"id": "presenceservice_presenceservice", "label": "PresenceService", "file_type": "code", "source_file": "src/services/PresenceService.ts", "source_location": "L9"}, {"id": "presenceservice_presenceservice_startactivepresence", "label": ".startActivePresence()", "file_type": "code", "source_file": "src/services/PresenceService.ts", "source_location": "L28"}, {"id": "presenceservice_presenceservice_updatepresence", "label": ".updatePresence()", "file_type": "code", "source_file": "src/services/PresenceService.ts", "source_location": "L54"}, {"id": "presenceservice_presenceservice_stoprotation", "label": ".stopRotation()", "file_type": "code", "source_file": "src/services/PresenceService.ts", "source_location": "L74"}, {"id": "musicservice", "label": "MusicService.ts", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L1"}, {"id": "musicservice_extractyoutubevideoid", "label": "extractYouTubeVideoId()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L79"}, {"id": "musicservice_isyoutubeplaylisturl", "label": "isYouTubePlaylistUrl()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L118"}, {"id": "musicservice_parsedurationseconds", "label": "parseDurationSeconds()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L133"}, {"id": "musicservice_parsedurationtexttoseconds", "label": "parseDurationTextToSeconds()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L145"}, {"id": "musicservice_formatduration", "label": "formatDuration()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L175"}, {"id": "musicservice_musicservice", "label": "MusicService", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L191"}, {"id": "musicservice_musicservice_getyoutube", "label": ".getYouTube()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L199"}, {"id": "musicservice_musicservice_addfromquery", "label": ".addFromQuery()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L207"}, {"id": "musicservice_musicservice_addfromurl", "label": ".addFromUrl()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L231"}, {"id": "musicservice_musicservice_getqueueembed", "label": ".getQueueEmbed()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L260"}, {"id": "musicservice_musicservice_getactivevoicechannelid", "label": ".getActiveVoiceChannelId()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L300"}, {"id": "musicservice_musicservice_skip", "label": ".skip()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L304"}, {"id": "musicservice_musicservice_pause", "label": ".pause()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L314"}, {"id": "musicservice_musicservice_resume", "label": ".resume()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L334"}, {"id": "musicservice_musicservice_stop", "label": ".stop()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L351"}, {"id": "musicservice_musicservice_remove", "label": ".remove()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L368"}, {"id": "musicservice_musicservice_leave", "label": ".leave()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L384"}, {"id": "musicservice_musicservice_handlecontrolinteraction", "label": ".handleControlInteraction()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L404"}, {"id": "musicservice_musicservice_createqueueitem", "label": ".createQueueItem()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L454"}, {"id": "musicservice_musicservice_enqueuetracks", "label": ".enqueueTracks()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L476"}, {"id": "musicservice_musicservice_ensuresession", "label": ".ensureSession()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L505"}, {"id": "musicservice_musicservice_bindsessionevents", "label": ".bindSessionEvents()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L561"}, {"id": "musicservice_musicservice_ontrackfinished", "label": ".onTrackFinished()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L577"}, {"id": "musicservice_musicservice_notifyplaybackfailure", "label": ".notifyPlaybackFailure()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L597"}, {"id": "musicservice_musicservice_playnext", "label": ".playNext()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L618"}, {"id": "musicservice_musicservice_resolvestreamurl", "label": ".resolveStreamUrl()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L660"}, {"id": "musicservice_musicservice_extractplaylist", "label": ".extractPlaylist()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L711"}, {"id": "musicservice_musicservice_spawnffmpeg", "label": ".spawnFfmpeg()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L754"}, {"id": "musicservice_musicservice_cleanupprocess", "label": ".cleanupProcess()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L796"}, {"id": "musicservice_musicservice_rendernowplaying", "label": ".renderNowPlaying()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L805"}, {"id": "musicservice_musicservice_renderidlestate", "label": ".renderIdleState()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L822"}, {"id": "musicservice_musicservice_buildcontrolrow", "label": ".buildControlRow()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L840"}, {"id": "musicservice_musicservice_buildfallbackcontrolrow", "label": ".buildFallbackControlRow()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L866"}, {"id": "musicservice_musicservice_buildnowplayingembed", "label": ".buildNowPlayingEmbed()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L891"}, {"id": "musicservice_musicservice_buildprogressbar", "label": ".buildProgressBar()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L948"}, {"id": "musicservice_musicservice_buildindeterminateprogressbar", "label": ".buildIndeterminateProgressBar()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L955"}, {"id": "musicservice_musicservice_startprogressupdates", "label": ".startProgressUpdates()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L961"}, {"id": "musicservice_musicservice_stopprogressupdates", "label": ".stopProgressUpdates()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L984"}, {"id": "musicservice_musicservice_ispaused", "label": ".isPaused()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L991"}, {"id": "musicservice_musicservice_getelapsedseconds", "label": ".getElapsedSeconds()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L995"}, {"id": "musicservice_musicservice_refreshcontrolmessage", "label": ".refreshControlMessage()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L1005"}, {"id": "musicservice_musicservice_formattrackline", "label": ".formatTrackLine()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L1027"}, {"id": "musicservice_musicservice_safesend", "label": ".safeSend()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L1031"}, {"id": "minigameregistry", "label": "MiniGameRegistry.ts", "file_type": "code", "source_file": "src/services/MiniGameRegistry.ts", "source_location": "L1"}, {"id": "minigameregistry_getminigame", "label": "getMiniGame()", "file_type": "code", "source_file": "src/services/MiniGameRegistry.ts", "source_location": "L20"}, {"id": "minigameregistry_getallminigames", "label": "getAllMiniGames()", "file_type": "code", "source_file": "src/services/MiniGameRegistry.ts", "source_location": "L24"}, {"id": "voiceservice", "label": "VoiceService.ts", "file_type": "code", "source_file": "src/services/VoiceService.ts", "source_location": "L1"}, {"id": "voiceservice_voiceservice", "label": "VoiceService", "file_type": "code", "source_file": "src/services/VoiceService.ts", "source_location": "L9"}, {"id": "voiceservice_voiceservice_syncchannels", "label": ".syncChannels()", "file_type": "code", "source_file": "src/services/VoiceService.ts", "source_location": "L10"}, {"id": "voiceservice_voiceservice_handlevoicestateupdate", "label": ".handleVoiceStateUpdate()", "file_type": "code", "source_file": "src/services/VoiceService.ts", "source_location": "L49"}, {"id": "voiceservice_voiceservice_handlejoin", "label": ".handleJoin()", "file_type": "code", "source_file": "src/services/VoiceService.ts", "source_location": "L65"}, {"id": "voiceservice_voiceservice_handleleave", "label": ".handleLeave()", "file_type": "code", "source_file": "src/services/VoiceService.ts", "source_location": "L211"}, {"id": "voiceservice_voiceservice_applyownershiptransfer", "label": ".applyOwnershipTransfer()", "file_type": "code", "source_file": "src/services/VoiceService.ts", "source_location": "L277"}, {"id": "voiceservice_voiceservice_sendcontrolpanel", "label": ".sendControlPanel()", "file_type": "code", "source_file": "src/services/VoiceService.ts", "source_location": "L301"}, {"id": "voiceservice_voiceservice_geteffectivename", "label": ".getEffectiveName()", "file_type": "code", "source_file": "src/services/VoiceService.ts", "source_location": "L336"}, {"id": "permissionauditservice", "label": "PermissionAuditService.ts", "file_type": "code", "source_file": "src/services/PermissionAuditService.ts", "source_location": "L1"}, {"id": "permissionauditservice_permissionauditservice", "label": "PermissionAuditService", "file_type": "code", "source_file": "src/services/PermissionAuditService.ts", "source_location": "L143"}, {"id": "permissionauditservice_permissionauditservice_auditguild", "label": ".auditGuild()", "file_type": "code", "source_file": "src/services/PermissionAuditService.ts", "source_location": "L144"}, {"id": "permissionauditservice_permissionauditservice_checkguildpermissions", "label": ".checkGuildPermissions()", "file_type": "code", "source_file": "src/services/PermissionAuditService.ts", "source_location": "L181"}, {"id": "permissionauditservice_permissionauditservice_checkchannelpermissions", "label": ".checkChannelPermissions()", "file_type": "code", "source_file": "src/services/PermissionAuditService.ts", "source_location": "L194"}, {"id": "permissionauditservice_permissionauditservice_checkhierarchy", "label": ".checkHierarchy()", "file_type": "code", "source_file": "src/services/PermissionAuditService.ts", "source_location": "L210"}, {"id": "permissionauditservice_permissionauditservice_getmissing", "label": ".getMissing()", "file_type": "code", "source_file": "src/services/PermissionAuditService.ts", "source_location": "L231"}, {"id": "permissionauditservice_permissionauditservice_permtostring", "label": ".permToString()", "file_type": "code", "source_file": "src/services/PermissionAuditService.ts", "source_location": "L236"}, {"id": "setupwizardrenderer", "label": "SetupWizardRenderer.ts", "file_type": "code", "source_file": "src/services/SetupWizardRenderer.ts", "source_location": "L1"}, {"id": "setupwizardrenderer_setupwizardrenderer", "label": "SetupWizardRenderer", "file_type": "code", "source_file": "src/services/SetupWizardRenderer.ts", "source_location": "L17"}, {"id": "setupwizardrenderer_setupwizardrenderer_renderstep", "label": ".renderStep()", "file_type": "code", "source_file": "src/services/SetupWizardRenderer.ts", "source_location": "L18"}, {"id": "fishingservice", "label": "FishingService.ts", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L1"}, {"id": "fishingservice_fishingservice", "label": "FishingService", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L102"}, {"id": "fishingservice_fishingservice_enterthread", "label": ".enterThread()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L109"}, {"id": "fishingservice_fishingservice_isownedfishingthread", "label": ".isOwnedFishingThread()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L135"}, {"id": "fishingservice_fishingservice_startsessioninthread", "label": ".startSessionInThread()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L145"}, {"id": "fishingservice_fishingservice_endthreadbyuser", "label": ".endThreadByUser()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L168"}, {"id": "fishingservice_fishingservice_handlebutton", "label": ".handleButton()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L189"}, {"id": "fishingservice_fishingservice_getprofile", "label": ".getProfile()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L234"}, {"id": "fishingservice_fishingservice_getcollection", "label": ".getCollection()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L242"}, {"id": "fishingservice_fishingservice_getsizeranking", "label": ".getSizeRanking()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L256"}, {"id": "fishingservice_fishingservice_getfishdisplayname", "label": ".getFishDisplayName()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L271"}, {"id": "fishingservice_fishingservice_getraritydisplaynamebyid", "label": ".getRarityDisplayNameById()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L275"}, {"id": "fishingservice_fishingservice_ticksession", "label": ".tickSession()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L283"}, {"id": "fishingservice_fishingservice_queueaction", "label": ".queueAction()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L307"}, {"id": "fishingservice_fishingservice_resolvesuccessfulpull", "label": ".resolveSuccessfulPull()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L323"}, {"id": "fishingservice_fishingservice_resolvemiss", "label": ".resolveMiss()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L353"}, {"id": "fishingservice_fishingservice_startnextphase", "label": ".startNextPhase()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L369"}, {"id": "fishingservice_fishingservice_finishsession", "label": ".finishSession()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L375"}, {"id": "fishingservice_fishingservice_getactivesession", "label": ".getActiveSession()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L397"}, {"id": "fishingservice_fishingservice_issessionstale", "label": ".isSessionStale()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L411"}, {"id": "fishingservice_fishingservice_clearstalesession", "label": ".clearStaleSession()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L424"}, {"id": "fishingservice_fishingservice_deletethread", "label": ".deleteThread()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L430"}, {"id": "fishingservice_fishingservice_rendersession", "label": ".renderSession()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L444"}, {"id": "fishingservice_fishingservice_buildembed", "label": ".buildEmbed()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L467"}, {"id": "fishingservice_fishingservice_buildcontrolrow", "label": ".buildControlRow()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L527"}, {"id": "fishingservice_fishingservice_buildgauge", "label": ".buildGauge()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L552"}, {"id": "fishingservice_fishingservice_createsessioninthread", "label": ".createSessionInThread()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L558"}, {"id": "fishingservice_fishingservice_findorcreatethread", "label": ".findOrCreateThread()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L613"}, {"id": "fishingservice_fishingservice_findownedfishingthread", "label": ".findOwnedFishingThread()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L632"}, {"id": "fishingservice_fishingservice_sendcatchresult", "label": ".sendCatchResult()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L646"}, {"id": "fishingservice_fishingservice_previewfishlane", "label": ".previewFishLane()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L702"}, {"id": "fishingservice_fishingservice_previewgauge", "label": ".previewGauge()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L706"}, {"id": "fishingservice_fishingservice_buildfishlane", "label": ".buildFishLane()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L710"}, {"id": "fishingservice_fishingservice_randomdirection", "label": ".randomDirection()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L716"}, {"id": "fishingservice_fishingservice_buildthreadname", "label": ".buildThreadName()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L721"}, {"id": "fishingservice_fishingservice_loadfishingcatalog", "label": ".loadFishingCatalog()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L726"}, {"id": "fishingservice_fishingservice_pickfishbyrate", "label": ".pickFishByRate()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L738"}, {"id": "fishingservice_fishingservice_pickraritybyrate", "label": ".pickRarityByRate()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L752"}, {"id": "fishingservice_fishingservice_getreactionwindowms", "label": ".getReactionWindowMs()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L766"}, {"id": "fishingservice_fishingservice_rollrange", "label": ".rollRange()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L772"}, {"id": "fishingservice_fishingservice_pickrandomartpath", "label": ".pickRandomArtPath()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L780"}, {"id": "fishingservice_fishingservice_resolveresourcepath", "label": ".resolveResourcePath()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L789"}, {"id": "fishingservice_fishingservice_loadfishingrarities", "label": ".loadFishingRarities()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L793"}, {"id": "fishingservice_fishingservice_getraritydisplayname", "label": ".getRarityDisplayName()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L805"}, {"id": "fishingservice_fishingservice_recordprofileresult", "label": ".recordProfileResult()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L809"}, {"id": "fishingservice_fishingservice_recordcollectioncatch", "label": ".recordCollectionCatch()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L852"}, {"id": "fishingservice_fishingservice_getraritycountfield", "label": ".getRarityCountField()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L898"}, {"id": "fishingservice_fishingservice_getrarityrank", "label": ".getRarityRank()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L906"}, {"id": "fishingservice_fishingservice_getraritybadge", "label": ".getRarityBadge()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L914"}, {"id": "fishingservice_fishingservice_composerarityart", "label": ".composeRarityArt()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L922"}, {"id": "fishingservice_fishingservice_hextocolorint", "label": ".hexToColorInt()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L946"}, {"id": "fishingservice_fishingservice_rollcatchsizecm", "label": ".rollCatchSizeCm()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L950"}, {"id": "fishingservice_fishingservice_formatselectedaction", "label": ".formatSelectedAction()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L956"}, {"id": "fishingservice_fishingservice_cleartick", "label": ".clearTick()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L964"}, {"id": "fishingservice_fishingservice_getuserkey", "label": ".getUserKey()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L971"}, {"id": "fishingservice_fishingservice_rolldecimalrange", "label": ".rollDecimalRange()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L975"}, {"id": "fishingservice_buildfishinggauge", "label": "buildFishingGauge()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L984"}, {"id": "fishingservice_buildfishinglane", "label": "buildFishingLane()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L988"}, {"id": "webhookservice", "label": "WebhookService.ts", "file_type": "code", "source_file": "src/services/WebhookService.ts", "source_location": "L1"}, {"id": "webhookservice_webhookservice", "label": "WebhookService", "file_type": "code", "source_file": "src/services/WebhookService.ts", "source_location": "L4"}, {"id": "webhookservice_webhookservice_getwebhookclient", "label": ".getWebhookClient()", "file_type": "code", "source_file": "src/services/WebhookService.ts", "source_location": "L13"}, {"id": "auditlogservice", "label": "AuditLogService.ts", "file_type": "code", "source_file": "src/services/AuditLogService.ts", "source_location": "L1"}, {"id": "auditlogservice_auditlogservice", "label": "AuditLogService", "file_type": "code", "source_file": "src/services/AuditLogService.ts", "source_location": "L23"}, {"id": "auditlogservice_auditlogservice_log", "label": ".log()", "file_type": "code", "source_file": "src/services/AuditLogService.ts", "source_location": "L29"}, {"id": "auditlogservice_auditlogservice_setchannel", "label": ".setChannel()", "file_type": "code", "source_file": "src/services/AuditLogService.ts", "source_location": "L71"}, {"id": "auditlogservice_auditlogservice_clearchannel", "label": ".clearChannel()", "file_type": "code", "source_file": "src/services/AuditLogService.ts", "source_location": "L87"}, {"id": "auditlogservice_auditlogservice_getchannel", "label": ".getChannel()", "file_type": "code", "source_file": "src/services/AuditLogService.ts", "source_location": "L96"}, {"id": "auditlogservice_auditlogservice_setfilter", "label": ".setFilter()", "file_type": "code", "source_file": "src/services/AuditLogService.ts", "source_location": "L107"}, {"id": "eventservice", "label": "EventService.ts", "file_type": "code", "source_file": "src/services/EventService.ts", "source_location": "L1"}, {"id": "eventservice_todiscordtimestamps", "label": "toDiscordTimestamps()", "file_type": "code", "source_file": "src/services/EventService.ts", "source_location": "L10"}, {"id": "eventservice_buildeventembed", "label": "buildEventEmbed()", "file_type": "code", "source_file": "src/services/EventService.ts", "source_location": "L18"}, {"id": "eventservice_resolveannouncementchannel", "label": "resolveAnnouncementChannel()", "file_type": "code", "source_file": "src/services/EventService.ts", "source_location": "L68"}, {"id": "eventservice_eventservice", "label": "EventService", "file_type": "code", "source_file": "src/services/EventService.ts", "source_location": "L79"}, {"id": "eventservice_eventservice_announceevent", "label": ".announceEvent()", "file_type": "code", "source_file": "src/services/EventService.ts", "source_location": "L82"}, {"id": "eventservice_eventservice_startreminderloop", "label": ".startReminderLoop()", "file_type": "code", "source_file": "src/services/EventService.ts", "source_location": "L115"}, {"id": "eventservice_eventservice_stopreminderloop", "label": ".stopReminderLoop()", "file_type": "code", "source_file": "src/services/EventService.ts", "source_location": "L133"}, {"id": "eventservice_eventservice_processdueevents", "label": ".processDueEvents()", "file_type": "code", "source_file": "src/services/EventService.ts", "source_location": "L141"}, {"id": "eventservice_eventservice_sendreminder", "label": ".sendReminder()", "file_type": "code", "source_file": "src/services/EventService.ts", "source_location": "L226"}], "edges": [{"source": "prisma_config", "target": "node_path", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "prisma.config.ts", "source_location": "L1", "weight": 1.0}, {"source": "prisma_config", "target": "config", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "prisma.config.ts", "source_location": "L2", "weight": 1.0}, {"source": "prisma_config", "target": "config", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "prisma.config.ts", "source_location": "L3", "weight": 1.0}, {"source": "seed", "target": "pg", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "prisma/seed.ts", "source_location": "L1", "weight": 1.0}, {"source": "seed", "target": "adapter_pg", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "prisma/seed.ts", "source_location": "L2", "weight": 1.0}, {"source": "seed", "target": "client", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "prisma/seed.ts", "source_location": "L3", "weight": 1.0}, {"source": "seed", "target": "config", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "prisma/seed.ts", "source_location": "L4", "weight": 1.0}, {"source": "seed", "target": "seed_main", "relation": "contains", "confidence": "EXTRACTED", "source_file": "prisma/seed.ts", "source_location": "L10", "weight": 1.0}, {"source": "boterror_test", "target": "boterror", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "tests/errors/BotError.test.ts", "source_location": "L1", "weight": 1.0}, {"source": "errorreporter_test", "target": "boterror", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "tests/errors/ErrorReporter.test.ts", "source_location": "L1", "weight": 1.0}, {"source": "errorreporter_test", "target": "errorcodes", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "tests/errors/ErrorReporter.test.ts", "source_location": "L2", "weight": 1.0}, {"source": "errorreporter_test", "target": "errorreporter", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "tests/errors/ErrorReporter.test.ts", "source_location": "L3", "weight": 1.0}, {"source": "i18n_test", "target": "i18n", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "tests/i18n/i18n.test.ts", "source_location": "L1", "weight": 1.0}, {"source": "i18n_test", "target": "i18n", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "tests/i18n/i18n.test.ts", "source_location": "L2", "weight": 1.0}, {"source": "inviteservice_test", "target": "inviteservice", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "tests/services/InviteService.test.ts", "source_location": "L1", "weight": 1.0}, {"source": "fishingservice_test", "target": "fishingservice", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "tests/services/FishingService.test.ts", "source_location": "L1", "weight": 1.0}, {"source": "musicservice_test", "target": "musicservice", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "tests/services/MusicService.test.ts", "source_location": "L1", "weight": 1.0}, {"source": "mimicservice_test", "target": "mimicservice", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "tests/services/MimicService.test.ts", "source_location": "L1", "weight": 1.0}, {"source": "voiceservice_test", "target": "voiceservice", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "tests/services/VoiceService.test.ts", "source_location": "L1", "weight": 1.0}, {"source": "voiceservice_test", "target": "discord_js", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "tests/services/VoiceService.test.ts", "source_location": "L2", "weight": 1.0}, {"source": "check_i18n_tests", "target": "fs", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "scripts/check-i18n-tests.ts", "source_location": "L1", "weight": 1.0}, {"source": "check_i18n_tests", "target": "path", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "scripts/check-i18n-tests.ts", "source_location": "L2", "weight": 1.0}, {"source": "check_i18n_tests", "target": "ko", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "scripts/check-i18n-tests.ts", "source_location": "L3", "weight": 1.0}, {"source": "check_i18n_tests", "target": "en", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "scripts/check-i18n-tests.ts", "source_location": "L4", "weight": 1.0}, {"source": "check_i18n_tests", "target": "check_i18n_tests_walk", "relation": "contains", "confidence": "EXTRACTED", "source_file": "scripts/check-i18n-tests.ts", "source_location": "L19", "weight": 1.0}, {"source": "check_i18n_tests", "target": "check_i18n_tests_getfiles", "relation": "contains", "confidence": "EXTRACTED", "source_file": "scripts/check-i18n-tests.ts", "source_location": "L43", "weight": 1.0}, {"source": "check_i18n_tests", "target": "check_i18n_tests_checkfile", "relation": "contains", "confidence": "EXTRACTED", "source_file": "scripts/check-i18n-tests.ts", "source_location": "L64", "weight": 1.0}, {"source": "index", "target": "kordclient", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/index.ts", "source_location": "L1", "weight": 1.0}, {"source": "index", "target": "pg", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/database/index.ts", "source_location": "L1", "weight": 1.0}, {"source": "index", "target": "pg", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/database/index.ts", "source_location": "L2", "weight": 1.0}, {"source": "index", "target": "adapter_pg", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/database/index.ts", "source_location": "L3", "weight": 1.0}, {"source": "index", "target": "client", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/database/index.ts", "source_location": "L4", "weight": 1.0}, {"source": "index", "target": "env", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/database/index.ts", "source_location": "L5", "weight": 1.0}, {"source": "index", "target": "logger", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/database/index.ts", "source_location": "L6", "weight": 1.0}, {"source": "index", "target": "index_createpgpoolconfig", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/database/index.ts", "source_location": "L13", "weight": 1.0}, {"source": "index", "target": "index_connectdb", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/database/index.ts", "source_location": "L40", "weight": 1.0}, {"source": "refinementhandler", "target": "discord_js", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/interactions/handlers/refinementHandler.ts", "source_location": "L1", "weight": 1.0}, {"source": "refinementhandler", "target": "refinementservice", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/interactions/handlers/refinementHandler.ts", "source_location": "L2", "weight": 1.0}, {"source": "refinementhandler", "target": "feverservice", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/interactions/handlers/refinementHandler.ts", "source_location": "L3", "weight": 1.0}, {"source": "refinementhandler", "target": "database", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/interactions/handlers/refinementHandler.ts", "source_location": "L4", "weight": 1.0}, {"source": "refinementhandler", "target": "i18n", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/interactions/handlers/refinementHandler.ts", "source_location": "L5", "weight": 1.0}, {"source": "refinementhandler", "target": "refinementhandler_handlerefinementinteraction", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/interactions/handlers/refinementHandler.ts", "source_location": "L7", "weight": 1.0}, {"source": "setupwizardhandler", "target": "discord_js", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/interactions/handlers/setupWizardHandler.ts", "source_location": "L1", "weight": 1.0}, {"source": "setupwizardhandler", "target": "setupwizardrenderer", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/interactions/handlers/setupWizardHandler.ts", "source_location": "L2", "weight": 1.0}, {"source": "setupwizardhandler", "target": "i18n", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/interactions/handlers/setupWizardHandler.ts", "source_location": "L3", "weight": 1.0}, {"source": "setupwizardhandler", "target": "errorcodes", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/interactions/handlers/setupWizardHandler.ts", "source_location": "L4", "weight": 1.0}, {"source": "setupwizardhandler", "target": "database", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/interactions/handlers/setupWizardHandler.ts", "source_location": "L5", "weight": 1.0}, {"source": "setupwizardhandler", "target": "setupwizardhandler_handlesetupwizardinteraction", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/interactions/handlers/setupWizardHandler.ts", "source_location": "L7", "weight": 1.0}, {"source": "env", "target": "dotenv", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/config/env.ts", "source_location": "L1", "weight": 1.0}, {"source": "env", "target": "os", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/config/env.ts", "source_location": "L2", "weight": 1.0}, {"source": "env", "target": "path", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/config/env.ts", "source_location": "L3", "weight": 1.0}, {"source": "env", "target": "env_generateinstanceid", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/config/env.ts", "source_location": "L8", "weight": 1.0}, {"source": "errorhandler", "target": "logger", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/utils/errorHandler.ts", "source_location": "L1", "weight": 1.0}, {"source": "errorhandler", "target": "errorhandler_handleglobalexceptions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/utils/errorHandler.ts", "source_location": "L3", "weight": 1.0}, {"source": "logger", "target": "fs", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/utils/logger.ts", "source_location": "L1", "weight": 1.0}, {"source": "logger", "target": "log4js", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/utils/logger.ts", "source_location": "L2", "weight": 1.0}, {"source": "logger", "target": "path", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/utils/logger.ts", "source_location": "L3", "weight": 1.0}, {"source": "logger", "target": "env", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/utils/logger.ts", "source_location": "L4", "weight": 1.0}, {"source": "logger", "target": "logger_resolveloglevel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/utils/logger.ts", "source_location": "L9", "weight": 1.0}, {"source": "logger", "target": "logger_resolvelogdir", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/utils/logger.ts", "source_location": "L15", "weight": 1.0}, {"source": "logger", "target": "logger_ensurelogdir", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/utils/logger.ts", "source_location": "L23", "weight": 1.0}, {"source": "language", "target": "discord_js", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/commands/language.ts", "source_location": "L1", "weight": 1.0}, {"source": "language", "target": "database", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/commands/language.ts", "source_location": "L2", "weight": 1.0}, {"source": "language", "target": "i18n", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/commands/language.ts", "source_location": "L3", "weight": 1.0}, {"source": "language", "target": "language_execute", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/commands/language.ts", "source_location": "L25", "weight": 1.0}, {"source": "setup", "target": "discord_js", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/commands/setup.ts", "source_location": "L1", "weight": 1.0}, {"source": "setup", "target": "setupwizardrenderer", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/commands/setup.ts", "source_location": "L6", "weight": 1.0}, {"source": "setup", "target": "i18n", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/commands/setup.ts", "source_location": "L7", "weight": 1.0}, {"source": "setup", "target": "setup_execute", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/commands/setup.ts", "source_location": "L18", "weight": 1.0}, {"source": "voice", "target": "discord_js", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/commands/voice.ts", "source_location": "L1", "weight": 1.0}, {"source": "voice", "target": "database", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/commands/voice.ts", "source_location": "L9", "weight": 1.0}, {"source": "voice", "target": "i18n", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/commands/voice.ts", "source_location": "L10", "weight": 1.0}, {"source": "voice", "target": "logger", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/commands/voice.ts", "source_location": "L11", "weight": 1.0}, {"source": "voice", "target": "voice_execute", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/commands/voice.ts", "source_location": "L79", "weight": 1.0}, {"source": "music", "target": "discord_js", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/commands/music.ts", "source_location": "L1", "weight": 1.0}, {"source": "music", "target": "i18n", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/commands/music.ts", "source_location": "L2", "weight": 1.0}, {"source": "music", "target": "musicservice", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/commands/music.ts", "source_location": "L3", "weight": 1.0}, {"source": "music", "target": "logger", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/commands/music.ts", "source_location": "L4", "weight": 1.0}, {"source": "music", "target": "music_builderrormessage", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/commands/music.ts", "source_location": "L6", "weight": 1.0}, {"source": "music", "target": "music_respond", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/commands/music.ts", "source_location": "L14", "weight": 1.0}, {"source": "music", "target": "music_execute", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/commands/music.ts", "source_location": "L130", "weight": 1.0}, {"source": "music_execute", "target": "music_builderrormessage", "relation": "calls", "confidence": "INFERRED", "source_file": "src/commands/music.ts", "source_location": "L140", "weight": 0.8}, {"source": "music_execute", "target": "music_respond", "relation": "calls", "confidence": "INFERRED", "source_file": "src/commands/music.ts", "source_location": "L377", "weight": 0.8}, {"source": "refine", "target": "discord_js", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/commands/refine.ts", "source_location": "L1", "weight": 1.0}, {"source": "refine", "target": "database", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/commands/refine.ts", "source_location": "L11", "weight": 1.0}, {"source": "refine", "target": "i18n", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/commands/refine.ts", "source_location": "L12", "weight": 1.0}, {"source": "refine", "target": "refinementservice", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/commands/refine.ts", "source_location": "L13", "weight": 1.0}, {"source": "refine", "target": "feverservice", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/commands/refine.ts", "source_location": "L14", "weight": 1.0}, {"source": "refine", "target": "refine_execute", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/commands/refine.ts", "source_location": "L91", "weight": 1.0}, {"source": "minigame", "target": "discord_js", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/commands/minigame.ts", "source_location": "L1", "weight": 1.0}, {"source": "minigame", "target": "database", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/commands/minigame.ts", "source_location": "L9", "weight": 1.0}, {"source": "minigame", "target": "i18n", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/commands/minigame.ts", "source_location": "L10", "weight": 1.0}, {"source": "minigame", "target": "minigameregistry", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/commands/minigame.ts", "source_location": "L11", "weight": 1.0}, {"source": "minigame", "target": "minigame_execute", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/commands/minigame.ts", "source_location": "L62", "weight": 1.0}, {"source": "config", "target": "discord_js", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/commands/config.ts", "source_location": "L1", "weight": 1.0}, {"source": "config", "target": "database", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/commands/config.ts", "source_location": "L8", "weight": 1.0}, {"source": "config", "target": "i18n", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/commands/config.ts", "source_location": "L9", "weight": 1.0}, {"source": "config", "target": "config_execute", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/commands/config.ts", "source_location": "L66", "weight": 1.0}, {"source": "audit", "target": "discord_js", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/commands/audit.ts", "source_location": "L1", "weight": 1.0}, {"source": "audit", "target": "auditlogservice", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/commands/audit.ts", "source_location": "L10", "weight": 1.0}, {"source": "audit", "target": "permissionauditservice", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/commands/audit.ts", "source_location": "L11", "weight": 1.0}, {"source": "audit", "target": "i18n", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/commands/audit.ts", "source_location": "L12", "weight": 1.0}, {"source": "audit", "target": "audit_getoverallcolor", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/commands/audit.ts", "source_location": "L20", "weight": 1.0}, {"source": "audit", "target": "audit_buildresultline", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/commands/audit.ts", "source_location": "L26", "weight": 1.0}, {"source": "audit", "target": "audit_execute", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/commands/audit.ts", "source_location": "L110", "weight": 1.0}, {"source": "audit_execute", "target": "audit_getoverallcolor", "relation": "calls", "confidence": "INFERRED", "source_file": "src/commands/audit.ts", "source_location": "L202", "weight": 0.8}, {"source": "event", "target": "discord_js", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/commands/event.ts", "source_location": "L1", "weight": 1.0}, {"source": "event", "target": "database", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/commands/event.ts", "source_location": "L10", "weight": 1.0}, {"source": "event", "target": "i18n", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/commands/event.ts", "source_location": "L11", "weight": 1.0}, {"source": "event", "target": "eventservice", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/commands/event.ts", "source_location": "L12", "weight": 1.0}, {"source": "event", "target": "event_parseseouldatetime", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/commands/event.ts", "source_location": "L18", "weight": 1.0}, {"source": "event", "target": "event_todiscordtimestamps", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/commands/event.ts", "source_location": "L51", "weight": 1.0}, {"source": "event", "target": "event_parsereminderoffsets", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/commands/event.ts", "source_location": "L59", "weight": 1.0}, {"source": "event", "target": "event_formatreminderoffsets", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/commands/event.ts", "source_location": "L77", "weight": 1.0}, {"source": "event", "target": "event_buildstatuslabel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/commands/event.ts", "source_location": "L85", "weight": 1.0}, {"source": "event", "target": "event_execute", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/commands/event.ts", "source_location": "L189", "weight": 1.0}, {"source": "event_execute", "target": "event_parseseouldatetime", "relation": "calls", "confidence": "INFERRED", "source_file": "src/commands/event.ts", "source_location": "L202", "weight": 0.8}, {"source": "event_execute", "target": "event_parsereminderoffsets", "relation": "calls", "confidence": "INFERRED", "source_file": "src/commands/event.ts", "source_location": "L217", "weight": 0.8}, {"source": "event_execute", "target": "event_todiscordtimestamps", "relation": "calls", "confidence": "INFERRED", "source_file": "src/commands/event.ts", "source_location": "L239", "weight": 0.8}, {"source": "event_execute", "target": "event_formatreminderoffsets", "relation": "calls", "confidence": "INFERRED", "source_file": "src/commands/event.ts", "source_location": "L247", "weight": 0.8}, {"source": "event_execute", "target": "event_buildstatuslabel", "relation": "calls", "confidence": "INFERRED", "source_file": "src/commands/event.ts", "source_location": "L286", "weight": 0.8}, {"source": "fishing", "target": "discord_js", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/commands/fishing.ts", "source_location": "L1", "weight": 1.0}, {"source": "fishing", "target": "database", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/commands/fishing.ts", "source_location": "L7", "weight": 1.0}, {"source": "fishing", "target": "i18n", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/commands/fishing.ts", "source_location": "L8", "weight": 1.0}, {"source": "fishing", "target": "fishingservice", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/commands/fishing.ts", "source_location": "L9", "weight": 1.0}, {"source": "fishing", "target": "fishing_execute", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/commands/fishing.ts", "source_location": "L83", "weight": 1.0}, {"source": "boterror", "target": "boterror_boterror", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/errors/BotError.ts", "source_location": "L16", "weight": 1.0}, {"source": "boterror_boterror", "target": "boterror_boterror_constructor", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/errors/BotError.ts", "source_location": "L29", "weight": 1.0}, {"source": "errorreporter", "target": "discord_js", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/errors/ErrorReporter.ts", "source_location": "L1", "weight": 1.0}, {"source": "errorreporter", "target": "boterror", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/errors/ErrorReporter.ts", "source_location": "L8", "weight": 1.0}, {"source": "errorreporter", "target": "errorcodes", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/errors/ErrorReporter.ts", "source_location": "L9", "weight": 1.0}, {"source": "errorreporter", "target": "logger", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/errors/ErrorReporter.ts", "source_location": "L10", "weight": 1.0}, {"source": "errorreporter", "target": "i18n", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/errors/ErrorReporter.ts", "source_location": "L11", "weight": 1.0}, {"source": "errorreporter", "target": "errorreporter_errorreporter", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/errors/ErrorReporter.ts", "source_location": "L38", "weight": 1.0}, {"source": "errorreporter_errorreporter", "target": "errorreporter_errorreporter_report", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/errors/ErrorReporter.ts", "source_location": "L43", "weight": 1.0}, {"source": "errorreporter_errorreporter", "target": "errorreporter_errorreporter_wrap", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/errors/ErrorReporter.ts", "source_location": "L73", "weight": 1.0}, {"source": "errorreporter_errorreporter", "target": "errorreporter_errorreporter_buildembed", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/errors/ErrorReporter.ts", "source_location": "L107", "weight": 1.0}, {"source": "errorreporter", "target": "errorreporter_witherrorhandler", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/errors/ErrorReporter.ts", "source_location": "L136", "weight": 1.0}, {"source": "errorreporter_errorreporter_report", "target": "errorreporter_errorreporter_buildembed", "relation": "calls", "confidence": "INFERRED", "source_file": "src/errors/ErrorReporter.ts", "source_location": "L55", "weight": 0.8}, {"source": "errorreporter_witherrorhandler", "target": "errorreporter_errorreporter_wrap", "relation": "calls", "confidence": "INFERRED", "source_file": "src/errors/ErrorReporter.ts", "source_location": "L144", "weight": 0.8}, {"source": "errorreporter_witherrorhandler", "target": "errorreporter_errorreporter_report", "relation": "calls", "confidence": "INFERRED", "source_file": "src/errors/ErrorReporter.ts", "source_location": "L145", "weight": 0.8}, {"source": "errorcodes", "target": "boterror", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/errors/ErrorCodes.ts", "source_location": "L1", "weight": 1.0}, {"source": "errorcodes", "target": "errorcodes_createboterror", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/errors/ErrorCodes.ts", "source_location": "L123", "weight": 1.0}, {"source": "voicestateupdate", "target": "discord_js", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/events/voiceStateUpdate.ts", "source_location": "L1", "weight": 1.0}, {"source": "voicestateupdate", "target": "voiceservice", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/events/voiceStateUpdate.ts", "source_location": "L2", "weight": 1.0}, {"source": "voicestateupdate", "target": "voicestateupdate_execute", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/events/voiceStateUpdate.ts", "source_location": "L7", "weight": 1.0}, {"source": "interactioncreate", "target": "discord_js", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/events/interactionCreate.ts", "source_location": "L1", "weight": 1.0}, {"source": "interactioncreate", "target": "kordclient", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/events/interactionCreate.ts", "source_location": "L2", "weight": 1.0}, {"source": "interactioncreate", "target": "logger", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/events/interactionCreate.ts", "source_location": "L3", "weight": 1.0}, {"source": "interactioncreate", "target": "database", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/events/interactionCreate.ts", "source_location": "L4", "weight": 1.0}, {"source": "interactioncreate", "target": "boterror", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/events/interactionCreate.ts", "source_location": "L5", "weight": 1.0}, {"source": "interactioncreate", "target": "errorcodes", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/events/interactionCreate.ts", "source_location": "L6", "weight": 1.0}, {"source": "interactioncreate", "target": "errorreporter", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/events/interactionCreate.ts", "source_location": "L7", "weight": 1.0}, {"source": "interactioncreate", "target": "i18n", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/events/interactionCreate.ts", "source_location": "L8", "weight": 1.0}, {"source": "interactioncreate", "target": "localehelper", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/events/interactionCreate.ts", "source_location": "L9", "weight": 1.0}, {"source": "interactioncreate", "target": "setupwizardhandler", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/events/interactionCreate.ts", "source_location": "L10", "weight": 1.0}, {"source": "interactioncreate", "target": "musicservice", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/events/interactionCreate.ts", "source_location": "L11", "weight": 1.0}, {"source": "interactioncreate", "target": "interactioncreate_execute", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/events/interactionCreate.ts", "source_location": "L16", "weight": 1.0}, {"source": "messagecreate", "target": "discord_js", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/events/messageCreate.ts", "source_location": "L1", "weight": 1.0}, {"source": "messagecreate", "target": "mimicservice", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/events/messageCreate.ts", "source_location": "L2", "weight": 1.0}, {"source": "messagecreate", "target": "bigemojiservice", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/events/messageCreate.ts", "source_location": "L3", "weight": 1.0}, {"source": "messagecreate", "target": "database", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/events/messageCreate.ts", "source_location": "L4", "weight": 1.0}, {"source": "messagecreate", "target": "activitytrackerservice", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/events/messageCreate.ts", "source_location": "L5", "weight": 1.0}, {"source": "messagecreate", "target": "messagecreate_execute", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/events/messageCreate.ts", "source_location": "L10", "weight": 1.0}, {"source": "guildmemberadd", "target": "discord_js", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/events/guildMemberAdd.ts", "source_location": "L1", "weight": 1.0}, {"source": "guildmemberadd", "target": "inviteservice", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/events/guildMemberAdd.ts", "source_location": "L2", "weight": 1.0}, {"source": "guildmemberadd", "target": "guildmemberadd_execute", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/events/guildMemberAdd.ts", "source_location": "L7", "weight": 1.0}, {"source": "guilddelete", "target": "discord_js", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/events/guildDelete.ts", "source_location": "L1", "weight": 1.0}, {"source": "guilddelete", "target": "presenceservice", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/events/guildDelete.ts", "source_location": "L2", "weight": 1.0}, {"source": "guilddelete", "target": "guilddelete_execute", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/events/guildDelete.ts", "source_location": "L7", "weight": 1.0}, {"source": "invitedelete", "target": "discord_js", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/events/inviteDelete.ts", "source_location": "L1", "weight": 1.0}, {"source": "invitedelete", "target": "inviteservice", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/events/inviteDelete.ts", "source_location": "L2", "weight": 1.0}, {"source": "invitedelete", "target": "invitedelete_execute", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/events/inviteDelete.ts", "source_location": "L7", "weight": 1.0}, {"source": "invitecreate", "target": "discord_js", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/events/inviteCreate.ts", "source_location": "L1", "weight": 1.0}, {"source": "invitecreate", "target": "inviteservice", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/events/inviteCreate.ts", "source_location": "L2", "weight": 1.0}, {"source": "invitecreate", "target": "invitecreate_execute", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/events/inviteCreate.ts", "source_location": "L7", "weight": 1.0}, {"source": "ready", "target": "discord_js", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/events/ready.ts", "source_location": "L1", "weight": 1.0}, {"source": "ready", "target": "kordclient", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/events/ready.ts", "source_location": "L2", "weight": 1.0}, {"source": "ready", "target": "logger", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/events/ready.ts", "source_location": "L3", "weight": 1.0}, {"source": "ready", "target": "inviteservice", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/events/ready.ts", "source_location": "L4", "weight": 1.0}, {"source": "ready", "target": "voiceservice", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/events/ready.ts", "source_location": "L5", "weight": 1.0}, {"source": "ready", "target": "presenceservice", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/events/ready.ts", "source_location": "L6", "weight": 1.0}, {"source": "ready", "target": "eventservice", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/events/ready.ts", "source_location": "L7", "weight": 1.0}, {"source": "ready", "target": "auditlogservice", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/events/ready.ts", "source_location": "L8", "weight": 1.0}, {"source": "ready", "target": "env", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/events/ready.ts", "source_location": "L9", "weight": 1.0}, {"source": "ready", "target": "ready_execute", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/events/ready.ts", "source_location": "L14", "weight": 1.0}, {"source": "guildcreate", "target": "discord_js", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/events/guildCreate.ts", "source_location": "L1", "weight": 1.0}, {"source": "guildcreate", "target": "inviteservice", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/events/guildCreate.ts", "source_location": "L2", "weight": 1.0}, {"source": "guildcreate", "target": "presenceservice", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/events/guildCreate.ts", "source_location": "L3", "weight": 1.0}, {"source": "guildcreate", "target": "guildcreate_execute", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/events/guildCreate.ts", "source_location": "L8", "weight": 1.0}, {"source": "localehelper", "target": "discord_js", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/i18n/localeHelper.ts", "source_location": "L8", "weight": 1.0}, {"source": "localehelper", "target": "i18n", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/i18n/localeHelper.ts", "source_location": "L9", "weight": 1.0}, {"source": "localehelper", "target": "database", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/i18n/localeHelper.ts", "source_location": "L10", "weight": 1.0}, {"source": "localehelper", "target": "localehelper_getinteractionlocale", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/i18n/localeHelper.ts", "source_location": "L21", "weight": 1.0}, {"source": "localehelper", "target": "localehelper_getcontextlocale", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/i18n/localeHelper.ts", "source_location": "L55", "weight": 1.0}, {"source": "index", "target": "types", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/i18n/index.ts", "source_location": "L9", "weight": 1.0}, {"source": "index", "target": "en", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/i18n/index.ts", "source_location": "L17", "weight": 1.0}, {"source": "index", "target": "ko", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/i18n/index.ts", "source_location": "L18", "weight": 1.0}, {"source": "index", "target": "index_statici18nprovider", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/i18n/index.ts", "source_location": "L28", "weight": 1.0}, {"source": "index_statici18nprovider", "target": "index_statici18nprovider_get", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/i18n/index.ts", "source_location": "L29", "weight": 1.0}, {"source": "index_statici18nprovider", "target": "index_statici18nprovider_issupported", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/i18n/index.ts", "source_location": "L33", "weight": 1.0}, {"source": "index_statici18nprovider", "target": "index_statici18nprovider_getsupportedlocales", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/i18n/index.ts", "source_location": "L37", "weight": 1.0}, {"source": "index", "target": "index_seti18nprovider", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/i18n/index.ts", "source_location": "L50", "weight": 1.0}, {"source": "index", "target": "index_geti18nprovider", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/i18n/index.ts", "source_location": "L55", "weight": 1.0}, {"source": "index", "target": "index_resolvelocale", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/i18n/index.ts", "source_location": "L68", "weight": 1.0}, {"source": "index", "target": "index_normalizediscordlocale", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/i18n/index.ts", "source_location": "L88", "weight": 1.0}, {"source": "index", "target": "index_t", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/i18n/index.ts", "source_location": "L109", "weight": 1.0}, {"source": "index", "target": "index_getnestedvalue", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/i18n/index.ts", "source_location": "L134", "weight": 1.0}, {"source": "index_statici18nprovider_get", "target": "index_getnestedvalue", "relation": "calls", "confidence": "INFERRED", "source_file": "src/i18n/index.ts", "source_location": "L30", "weight": 0.8}, {"source": "index_resolvelocale", "target": "index_normalizediscordlocale", "relation": "calls", "confidence": "INFERRED", "source_file": "src/i18n/index.ts", "source_location": "L72", "weight": 0.8}, {"source": "index_resolvelocale", "target": "index_statici18nprovider_issupported", "relation": "calls", "confidence": "INFERRED", "source_file": "src/i18n/index.ts", "source_location": "L76", "weight": 0.8}, {"source": "index_t", "target": "index_statici18nprovider_get", "relation": "calls", "confidence": "INFERRED", "source_file": "src/i18n/index.ts", "source_location": "L115", "weight": 0.8}, {"source": "en", "target": "types", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/i18n/locales/en.ts", "source_location": "L1", "weight": 1.0}, {"source": "ko", "target": "types", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/i18n/locales/ko.ts", "source_location": "L1", "weight": 1.0}, {"source": "kordclient", "target": "discord_js", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/client/KordClient.ts", "source_location": "L1", "weight": 1.0}, {"source": "kordclient", "target": "logger", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/client/KordClient.ts", "source_location": "L2", "weight": 1.0}, {"source": "kordclient", "target": "env", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/client/KordClient.ts", "source_location": "L3", "weight": 1.0}, {"source": "kordclient", "target": "commandloader", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/client/KordClient.ts", "source_location": "L4", "weight": 1.0}, {"source": "kordclient", "target": "eventloader", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/client/KordClient.ts", "source_location": "L5", "weight": 1.0}, {"source": "kordclient", "target": "errorhandler", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/client/KordClient.ts", "source_location": "L6", "weight": 1.0}, {"source": "kordclient", "target": "database", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/client/KordClient.ts", "source_location": "L7", "weight": 1.0}, {"source": "kordclient", "target": "feverservice", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/client/KordClient.ts", "source_location": "L8", "weight": 1.0}, {"source": "kordclient", "target": "kordclient_kordclient", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/client/KordClient.ts", "source_location": "L10", "weight": 1.0}, {"source": "kordclient_kordclient", "target": "kordclient_kordclient_constructor", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/client/KordClient.ts", "source_location": "L13", "weight": 1.0}, {"source": "kordclient_kordclient", "target": "kordclient_kordclient_start", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/client/KordClient.ts", "source_location": "L26", "weight": 1.0}, {"source": "eventloader", "target": "kordclient", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/handlers/EventLoader.ts", "source_location": "L1", "weight": 1.0}, {"source": "eventloader", "target": "logger", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/handlers/EventLoader.ts", "source_location": "L2", "weight": 1.0}, {"source": "eventloader", "target": "fs", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/handlers/EventLoader.ts", "source_location": "L3", "weight": 1.0}, {"source": "eventloader", "target": "path", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/handlers/EventLoader.ts", "source_location": "L4", "weight": 1.0}, {"source": "eventloader", "target": "eventloader_loadevents", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/handlers/EventLoader.ts", "source_location": "L6", "weight": 1.0}, {"source": "commandloader", "target": "kordclient", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/handlers/CommandLoader.ts", "source_location": "L1", "weight": 1.0}, {"source": "commandloader", "target": "logger", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/handlers/CommandLoader.ts", "source_location": "L2", "weight": 1.0}, {"source": "commandloader", "target": "fs", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/handlers/CommandLoader.ts", "source_location": "L3", "weight": 1.0}, {"source": "commandloader", "target": "path", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/handlers/CommandLoader.ts", "source_location": "L4", "weight": 1.0}, {"source": "commandloader", "target": "commandloader_loadcommands", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/handlers/CommandLoader.ts", "source_location": "L6", "weight": 1.0}, {"source": "inviteservice", "target": "discord_js", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/InviteService.ts", "source_location": "L1", "weight": 1.0}, {"source": "inviteservice", "target": "database", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/InviteService.ts", "source_location": "L2", "weight": 1.0}, {"source": "inviteservice", "target": "logger", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/InviteService.ts", "source_location": "L3", "weight": 1.0}, {"source": "inviteservice", "target": "inviteservice_inviteservice", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/services/InviteService.ts", "source_location": "L5", "weight": 1.0}, {"source": "inviteservice_inviteservice", "target": "inviteservice_inviteservice_cacheallinvites", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/InviteService.ts", "source_location": "L9", "weight": 1.0}, {"source": "inviteservice_inviteservice", "target": "inviteservice_inviteservice_cacheguildinvites", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/InviteService.ts", "source_location": "L16", "weight": 1.0}, {"source": "inviteservice_inviteservice", "target": "inviteservice_inviteservice_handleinvitecreate", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/InviteService.ts", "source_location": "L29", "weight": 1.0}, {"source": "inviteservice_inviteservice", "target": "inviteservice_inviteservice_handleinvitedelete", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/InviteService.ts", "source_location": "L35", "weight": 1.0}, {"source": "inviteservice_inviteservice", "target": "inviteservice_inviteservice_handlememberadd", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/InviteService.ts", "source_location": "L41", "weight": 1.0}, {"source": "inviteservice_inviteservice_cacheallinvites", "target": "inviteservice_inviteservice_cacheguildinvites", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/InviteService.ts", "source_location": "L11", "weight": 0.8}, {"source": "inviteservice_inviteservice_handleinvitecreate", "target": "inviteservice_inviteservice_cacheguildinvites", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/InviteService.ts", "source_location": "L32", "weight": 0.8}, {"source": "inviteservice_inviteservice_handleinvitedelete", "target": "inviteservice_inviteservice_cacheguildinvites", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/InviteService.ts", "source_location": "L38", "weight": 0.8}, {"source": "inviteservice_inviteservice_handlememberadd", "target": "inviteservice_inviteservice_cacheguildinvites", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/InviteService.ts", "source_location": "L61", "weight": 0.8}, {"source": "mimicservice", "target": "discord_js", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/MimicService.ts", "source_location": "L1", "weight": 1.0}, {"source": "mimicservice", "target": "webhookservice", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/MimicService.ts", "source_location": "L2", "weight": 1.0}, {"source": "mimicservice", "target": "logger", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/MimicService.ts", "source_location": "L3", "weight": 1.0}, {"source": "mimicservice", "target": "mimicservice_mimicservice", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/services/MimicService.ts", "source_location": "L5", "weight": 1.0}, {"source": "mimicservice_mimicservice", "target": "mimicservice_mimicservice_handlemessage", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/MimicService.ts", "source_location": "L6", "weight": 1.0}, {"source": "refinementservice", "target": "database", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/RefinementService.ts", "source_location": "L1", "weight": 1.0}, {"source": "refinementservice", "target": "logger", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/RefinementService.ts", "source_location": "L2", "weight": 1.0}, {"source": "refinementservice", "target": "feverservice", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/RefinementService.ts", "source_location": "L3", "weight": 1.0}, {"source": "refinementservice", "target": "client", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/RefinementService.ts", "source_location": "L4", "weight": 1.0}, {"source": "refinementservice", "target": "refinementservice_refinementservice", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/services/RefinementService.ts", "source_location": "L28", "weight": 1.0}, {"source": "refinementservice_refinementservice", "target": "refinementservice_refinementservice_getmaxdurability", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/RefinementService.ts", "source_location": "L38", "weight": 1.0}, {"source": "refinementservice_refinementservice", "target": "refinementservice_refinementservice_loadconfigs", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/RefinementService.ts", "source_location": "L45", "weight": 1.0}, {"source": "refinementservice_refinementservice", "target": "refinementservice_refinementservice_getsysconfig", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/RefinementService.ts", "source_location": "L67", "weight": 1.0}, {"source": "refinementservice_refinementservice", "target": "refinementservice_refinementservice_getsysconfignum", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/RefinementService.ts", "source_location": "L71", "weight": 1.0}, {"source": "refinementservice_refinementservice", "target": "refinementservice_refinementservice_getcost", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/RefinementService.ts", "source_location": "L79", "weight": 1.0}, {"source": "refinementservice_refinementservice", "target": "refinementservice_refinementservice_tryrefine", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/RefinementService.ts", "source_location": "L86", "weight": 1.0}, {"source": "refinementservice_refinementservice", "target": "refinementservice_refinementservice_startbattle", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/RefinementService.ts", "source_location": "L153", "weight": 1.0}, {"source": "refinementservice_refinementservice", "target": "refinementservice_refinementservice_checkin", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/RefinementService.ts", "source_location": "L249", "weight": 1.0}, {"source": "refinementservice_refinementservice", "target": "refinementservice_refinementservice_sellweapon", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/RefinementService.ts", "source_location": "L277", "weight": 1.0}, {"source": "refinementservice_refinementservice", "target": "refinementservice_refinementservice_getprofile", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/RefinementService.ts", "source_location": "L299", "weight": 1.0}, {"source": "refinementservice_refinementservice", "target": "refinementservice_refinementservice_addgold", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/RefinementService.ts", "source_location": "L303", "weight": 1.0}, {"source": "refinementservice_refinementservice", "target": "refinementservice_refinementservice_getorcreateprofile", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/RefinementService.ts", "source_location": "L315", "weight": 1.0}, {"source": "refinementservice_refinementservice_tryrefine", "target": "refinementservice_refinementservice_loadconfigs", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/RefinementService.ts", "source_location": "L87", "weight": 0.8}, {"source": "refinementservice_refinementservice_tryrefine", "target": "refinementservice_refinementservice_getorcreateprofile", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/RefinementService.ts", "source_location": "L88", "weight": 0.8}, {"source": "refinementservice_refinementservice_tryrefine", "target": "refinementservice_refinementservice_getsysconfignum", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/RefinementService.ts", "source_location": "L90", "weight": 0.8}, {"source": "refinementservice_refinementservice_tryrefine", "target": "refinementservice_refinementservice_getmaxdurability", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/RefinementService.ts", "source_location": "L115", "weight": 0.8}, {"source": "refinementservice_refinementservice_startbattle", "target": "refinementservice_refinementservice_loadconfigs", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/RefinementService.ts", "source_location": "L154", "weight": 0.8}, {"source": "refinementservice_refinementservice_startbattle", "target": "refinementservice_refinementservice_getorcreateprofile", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/RefinementService.ts", "source_location": "L155", "weight": 0.8}, {"source": "refinementservice_refinementservice_startbattle", "target": "refinementservice_refinementservice_getsysconfignum", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/RefinementService.ts", "source_location": "L163", "weight": 0.8}, {"source": "refinementservice_refinementservice_startbattle", "target": "refinementservice_refinementservice_getcost", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/RefinementService.ts", "source_location": "L188", "weight": 0.8}, {"source": "refinementservice_refinementservice_checkin", "target": "refinementservice_refinementservice_getorcreateprofile", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/RefinementService.ts", "source_location": "L250", "weight": 0.8}, {"source": "refinementservice_refinementservice_checkin", "target": "refinementservice_refinementservice_getsysconfignum", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/RefinementService.ts", "source_location": "L262", "weight": 0.8}, {"source": "refinementservice_refinementservice_sellweapon", "target": "refinementservice_refinementservice_loadconfigs", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/RefinementService.ts", "source_location": "L278", "weight": 0.8}, {"source": "refinementservice_refinementservice_sellweapon", "target": "refinementservice_refinementservice_getorcreateprofile", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/RefinementService.ts", "source_location": "L279", "weight": 0.8}, {"source": "refinementservice_refinementservice_sellweapon", "target": "refinementservice_refinementservice_getcost", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/RefinementService.ts", "source_location": "L281", "weight": 0.8}, {"source": "refinementservice_refinementservice_getprofile", "target": "refinementservice_refinementservice_getorcreateprofile", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/RefinementService.ts", "source_location": "L300", "weight": 0.8}, {"source": "refinementservice_refinementservice_addgold", "target": "refinementservice_refinementservice_getorcreateprofile", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/RefinementService.ts", "source_location": "L304", "weight": 0.8}, {"source": "refinementservice_refinementservice_getorcreateprofile", "target": "refinementservice_refinementservice_loadconfigs", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/RefinementService.ts", "source_location": "L321", "weight": 0.8}, {"source": "refinementservice_refinementservice_getorcreateprofile", "target": "refinementservice_refinementservice_getsysconfignum", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/RefinementService.ts", "source_location": "L322", "weight": 0.8}, {"source": "activitytrackerservice", "target": "database", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/ActivityTrackerService.ts", "source_location": "L1", "weight": 1.0}, {"source": "activitytrackerservice", "target": "logger", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/ActivityTrackerService.ts", "source_location": "L2", "weight": 1.0}, {"source": "activitytrackerservice", "target": "activitytrackerservice_activitytrackerservice", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/services/ActivityTrackerService.ts", "source_location": "L4", "weight": 1.0}, {"source": "activitytrackerservice_activitytrackerservice", "target": "activitytrackerservice_activitytrackerservice_recordactivity", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/ActivityTrackerService.ts", "source_location": "L9", "weight": 1.0}, {"source": "activitytrackerservice_activitytrackerservice", "target": "activitytrackerservice_activitytrackerservice_getpeakhour", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/ActivityTrackerService.ts", "source_location": "L48", "weight": 1.0}, {"source": "bigemojiservice", "target": "discord_js", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/BigEmojiService.ts", "source_location": "L1", "weight": 1.0}, {"source": "bigemojiservice", "target": "webhookservice", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/BigEmojiService.ts", "source_location": "L2", "weight": 1.0}, {"source": "bigemojiservice", "target": "logger", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/BigEmojiService.ts", "source_location": "L3", "weight": 1.0}, {"source": "bigemojiservice", "target": "bigemojiservice_bigemojiservice", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/services/BigEmojiService.ts", "source_location": "L5", "weight": 1.0}, {"source": "bigemojiservice_bigemojiservice", "target": "bigemojiservice_bigemojiservice_handlemessage", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/BigEmojiService.ts", "source_location": "L6", "weight": 1.0}, {"source": "feverservice", "target": "database", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/FeverService.ts", "source_location": "L1", "weight": 1.0}, {"source": "feverservice", "target": "logger", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/FeverService.ts", "source_location": "L2", "weight": 1.0}, {"source": "feverservice", "target": "activitytrackerservice", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/FeverService.ts", "source_location": "L3", "weight": 1.0}, {"source": "feverservice", "target": "feverservice_feverservice", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/services/FeverService.ts", "source_location": "L5", "weight": 1.0}, {"source": "feverservice_feverservice", "target": "feverservice_feverservice_startscheduler", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FeverService.ts", "source_location": "L11", "weight": 1.0}, {"source": "feverservice_feverservice", "target": "feverservice_feverservice_updatefeverstate", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FeverService.ts", "source_location": "L28", "weight": 1.0}, {"source": "feverservice_feverservice", "target": "feverservice_feverservice_getfeverbonus", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FeverService.ts", "source_location": "L64", "weight": 1.0}, {"source": "presenceservice", "target": "discord_js", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/PresenceService.ts", "source_location": "L1", "weight": 1.0}, {"source": "presenceservice", "target": "logger", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/PresenceService.ts", "source_location": "L2", "weight": 1.0}, {"source": "presenceservice", "target": "i18n", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/PresenceService.ts", "source_location": "L3", "weight": 1.0}, {"source": "presenceservice", "target": "presenceservice_presenceservice", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/services/PresenceService.ts", "source_location": "L9", "weight": 1.0}, {"source": "presenceservice_presenceservice", "target": "presenceservice_presenceservice_startactivepresence", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/PresenceService.ts", "source_location": "L28", "weight": 1.0}, {"source": "presenceservice_presenceservice", "target": "presenceservice_presenceservice_updatepresence", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/PresenceService.ts", "source_location": "L54", "weight": 1.0}, {"source": "presenceservice_presenceservice", "target": "presenceservice_presenceservice_stoprotation", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/PresenceService.ts", "source_location": "L74", "weight": 1.0}, {"source": "presenceservice_presenceservice_startactivepresence", "target": "presenceservice_presenceservice_updatepresence", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/PresenceService.ts", "source_location": "L34", "weight": 0.8}, {"source": "musicservice", "target": "discord_js", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L1", "weight": 1.0}, {"source": "musicservice", "target": "voice", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L9", "weight": 1.0}, {"source": "musicservice", "target": "ffmpeg_static", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L21", "weight": 1.0}, {"source": "musicservice", "target": "child_process", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L22", "weight": 1.0}, {"source": "musicservice", "target": "util", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L23", "weight": 1.0}, {"source": "musicservice", "target": "i18n", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L24", "weight": 1.0}, {"source": "musicservice", "target": "logger", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L25", "weight": 1.0}, {"source": "musicservice", "target": "musicservice_extractyoutubevideoid", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L79", "weight": 1.0}, {"source": "musicservice", "target": "musicservice_isyoutubeplaylisturl", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L118", "weight": 1.0}, {"source": "musicservice", "target": "musicservice_parsedurationseconds", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L133", "weight": 1.0}, {"source": "musicservice", "target": "musicservice_parsedurationtexttoseconds", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L145", "weight": 1.0}, {"source": "musicservice", "target": "musicservice_formatduration", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L175", "weight": 1.0}, {"source": "musicservice", "target": "musicservice_musicservice", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L191", "weight": 1.0}, {"source": "musicservice_musicservice", "target": "musicservice_musicservice_getyoutube", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L199", "weight": 1.0}, {"source": "musicservice_musicservice", "target": "musicservice_musicservice_addfromquery", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L207", "weight": 1.0}, {"source": "musicservice_musicservice", "target": "musicservice_musicservice_addfromurl", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L231", "weight": 1.0}, {"source": "musicservice_musicservice", "target": "musicservice_musicservice_getqueueembed", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L260", "weight": 1.0}, {"source": "musicservice_musicservice", "target": "musicservice_musicservice_getactivevoicechannelid", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L300", "weight": 1.0}, {"source": "musicservice_musicservice", "target": "musicservice_musicservice_skip", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L304", "weight": 1.0}, {"source": "musicservice_musicservice", "target": "musicservice_musicservice_pause", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L314", "weight": 1.0}, {"source": "musicservice_musicservice", "target": "musicservice_musicservice_resume", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L334", "weight": 1.0}, {"source": "musicservice_musicservice", "target": "musicservice_musicservice_stop", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L351", "weight": 1.0}, {"source": "musicservice_musicservice", "target": "musicservice_musicservice_remove", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L368", "weight": 1.0}, {"source": "musicservice_musicservice", "target": "musicservice_musicservice_leave", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L384", "weight": 1.0}, {"source": "musicservice_musicservice", "target": "musicservice_musicservice_handlecontrolinteraction", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L404", "weight": 1.0}, {"source": "musicservice_musicservice", "target": "musicservice_musicservice_createqueueitem", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L454", "weight": 1.0}, {"source": "musicservice_musicservice", "target": "musicservice_musicservice_enqueuetracks", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L476", "weight": 1.0}, {"source": "musicservice_musicservice", "target": "musicservice_musicservice_ensuresession", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L505", "weight": 1.0}, {"source": "musicservice_musicservice", "target": "musicservice_musicservice_bindsessionevents", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L561", "weight": 1.0}, {"source": "musicservice_musicservice", "target": "musicservice_musicservice_ontrackfinished", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L577", "weight": 1.0}, {"source": "musicservice_musicservice", "target": "musicservice_musicservice_notifyplaybackfailure", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L597", "weight": 1.0}, {"source": "musicservice_musicservice", "target": "musicservice_musicservice_playnext", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L618", "weight": 1.0}, {"source": "musicservice_musicservice", "target": "musicservice_musicservice_resolvestreamurl", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L660", "weight": 1.0}, {"source": "musicservice_musicservice", "target": "musicservice_musicservice_extractplaylist", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L711", "weight": 1.0}, {"source": "musicservice_musicservice", "target": "musicservice_musicservice_spawnffmpeg", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L754", "weight": 1.0}, {"source": "musicservice_musicservice", "target": "musicservice_musicservice_cleanupprocess", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L796", "weight": 1.0}, {"source": "musicservice_musicservice", "target": "musicservice_musicservice_rendernowplaying", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L805", "weight": 1.0}, {"source": "musicservice_musicservice", "target": "musicservice_musicservice_renderidlestate", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L822", "weight": 1.0}, {"source": "musicservice_musicservice", "target": "musicservice_musicservice_buildcontrolrow", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L840", "weight": 1.0}, {"source": "musicservice_musicservice", "target": "musicservice_musicservice_buildfallbackcontrolrow", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L866", "weight": 1.0}, {"source": "musicservice_musicservice", "target": "musicservice_musicservice_buildnowplayingembed", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L891", "weight": 1.0}, {"source": "musicservice_musicservice", "target": "musicservice_musicservice_buildprogressbar", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L948", "weight": 1.0}, {"source": "musicservice_musicservice", "target": "musicservice_musicservice_buildindeterminateprogressbar", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L955", "weight": 1.0}, {"source": "musicservice_musicservice", "target": "musicservice_musicservice_startprogressupdates", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L961", "weight": 1.0}, {"source": "musicservice_musicservice", "target": "musicservice_musicservice_stopprogressupdates", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L984", "weight": 1.0}, {"source": "musicservice_musicservice", "target": "musicservice_musicservice_ispaused", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L991", "weight": 1.0}, {"source": "musicservice_musicservice", "target": "musicservice_musicservice_getelapsedseconds", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L995", "weight": 1.0}, {"source": "musicservice_musicservice", "target": "musicservice_musicservice_refreshcontrolmessage", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L1005", "weight": 1.0}, {"source": "musicservice_musicservice", "target": "musicservice_musicservice_formattrackline", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L1027", "weight": 1.0}, {"source": "musicservice_musicservice", "target": "musicservice_musicservice_safesend", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L1031", "weight": 1.0}, {"source": "musicservice_musicservice_addfromquery", "target": "musicservice_musicservice_getyoutube", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L208", "weight": 0.8}, {"source": "musicservice_musicservice_addfromquery", "target": "musicservice_musicservice_createqueueitem", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L227", "weight": 0.8}, {"source": "musicservice_musicservice_addfromquery", "target": "musicservice_musicservice_enqueuetracks", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L228", "weight": 0.8}, {"source": "musicservice_musicservice_addfromurl", "target": "musicservice_isyoutubeplaylisturl", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L232", "weight": 0.8}, {"source": "musicservice_musicservice_addfromurl", "target": "musicservice_musicservice_extractplaylist", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L233", "weight": 0.8}, {"source": "musicservice_musicservice_addfromurl", "target": "musicservice_musicservice_enqueuetracks", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L248", "weight": 0.8}, {"source": "musicservice_musicservice_addfromurl", "target": "musicservice_extractyoutubevideoid", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L251", "weight": 0.8}, {"source": "musicservice_musicservice_addfromurl", "target": "musicservice_musicservice_createqueueitem", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L256", "weight": 0.8}, {"source": "musicservice_musicservice_getqueueembed", "target": "musicservice_musicservice_formattrackline", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L274", "weight": 0.8}, {"source": "musicservice_musicservice_skip", "target": "musicservice_musicservice_stop", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L310", "weight": 0.8}, {"source": "musicservice_musicservice_pause", "target": "musicservice_musicservice_ispaused", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L320", "weight": 0.8}, {"source": "musicservice_musicservice_pause", "target": "musicservice_musicservice_refreshcontrolmessage", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L330", "weight": 0.8}, {"source": "musicservice_musicservice_resume", "target": "musicservice_musicservice_refreshcontrolmessage", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L347", "weight": 0.8}, {"source": "musicservice_musicservice_stop", "target": "musicservice_musicservice_renderidlestate", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L364", "weight": 0.8}, {"source": "musicservice_musicservice_remove", "target": "musicservice_musicservice_refreshcontrolmessage", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L380", "weight": 0.8}, {"source": "musicservice_musicservice_leave", "target": "musicservice_musicservice_cleanupprocess", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L392", "weight": 0.8}, {"source": "musicservice_musicservice_leave", "target": "musicservice_musicservice_stop", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L393", "weight": 0.8}, {"source": "musicservice_musicservice_leave", "target": "musicservice_musicservice_renderidlestate", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L399", "weight": 0.8}, {"source": "musicservice_musicservice_handlecontrolinteraction", "target": "musicservice_musicservice_buildfallbackcontrolrow", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L408", "weight": 0.8}, {"source": "musicservice_musicservice_handlecontrolinteraction", "target": "musicservice_musicservice_pause", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L430", "weight": 0.8}, {"source": "musicservice_musicservice_handlecontrolinteraction", "target": "musicservice_musicservice_resume", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L435", "weight": 0.8}, {"source": "musicservice_musicservice_handlecontrolinteraction", "target": "musicservice_musicservice_skip", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L440", "weight": 0.8}, {"source": "musicservice_musicservice_handlecontrolinteraction", "target": "musicservice_musicservice_stop", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L445", "weight": 0.8}, {"source": "musicservice_musicservice_handlecontrolinteraction", "target": "musicservice_musicservice_leave", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L450", "weight": 0.8}, {"source": "musicservice_musicservice_createqueueitem", "target": "musicservice_musicservice_getyoutube", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L460", "weight": 0.8}, {"source": "musicservice_musicservice_createqueueitem", "target": "musicservice_parsedurationseconds", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L463", "weight": 0.8}, {"source": "musicservice_musicservice_createqueueitem", "target": "musicservice_parsedurationtexttoseconds", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L463", "weight": 0.8}, {"source": "musicservice_musicservice_createqueueitem", "target": "musicservice_formatduration", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L469", "weight": 0.8}, {"source": "musicservice_musicservice_enqueuetracks", "target": "musicservice_musicservice_ensuresession", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L482", "weight": 0.8}, {"source": "musicservice_musicservice_enqueuetracks", "target": "musicservice_musicservice_playnext", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L491", "weight": 0.8}, {"source": "musicservice_musicservice_enqueuetracks", "target": "musicservice_musicservice_refreshcontrolmessage", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L493", "weight": 0.8}, {"source": "musicservice_musicservice_ensuresession", "target": "musicservice_musicservice_bindsessionevents", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L556", "weight": 0.8}, {"source": "musicservice_musicservice_ontrackfinished", "target": "musicservice_musicservice_cleanupprocess", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L583", "weight": 0.8}, {"source": "musicservice_musicservice_ontrackfinished", "target": "musicservice_musicservice_renderidlestate", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L590", "weight": 0.8}, {"source": "musicservice_musicservice_ontrackfinished", "target": "musicservice_musicservice_playnext", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L594", "weight": 0.8}, {"source": "musicservice_musicservice_notifyplaybackfailure", "target": "musicservice_musicservice_cleanupprocess", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L599", "weight": 0.8}, {"source": "musicservice_musicservice_notifyplaybackfailure", "target": "musicservice_musicservice_safesend", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L606", "weight": 0.8}, {"source": "musicservice_musicservice_notifyplaybackfailure", "target": "musicservice_musicservice_playnext", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L612", "weight": 0.8}, {"source": "musicservice_musicservice_notifyplaybackfailure", "target": "musicservice_musicservice_renderidlestate", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L614", "weight": 0.8}, {"source": "musicservice_musicservice_playnext", "target": "musicservice_musicservice_renderidlestate", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L628", "weight": 0.8}, {"source": "musicservice_musicservice_playnext", "target": "musicservice_musicservice_resolvestreamurl", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L638", "weight": 0.8}, {"source": "musicservice_musicservice_playnext", "target": "musicservice_musicservice_spawnffmpeg", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L639", "weight": 0.8}, {"source": "musicservice_musicservice_playnext", "target": "musicservice_musicservice_rendernowplaying", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L648", "weight": 0.8}, {"source": "musicservice_musicservice_playnext", "target": "musicservice_musicservice_safesend", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L651", "weight": 0.8}, {"source": "musicservice_musicservice_resolvestreamurl", "target": "musicservice_musicservice_getyoutube", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L697", "weight": 0.8}, {"source": "musicservice_musicservice_cleanupprocess", "target": "musicservice_musicservice_stopprogressupdates", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L797", "weight": 0.8}, {"source": "musicservice_musicservice_rendernowplaying", "target": "musicservice_musicservice_buildnowplayingembed", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L810", "weight": 0.8}, {"source": "musicservice_musicservice_rendernowplaying", "target": "musicservice_musicservice_buildcontrolrow", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L811", "weight": 0.8}, {"source": "musicservice_musicservice_rendernowplaying", "target": "musicservice_musicservice_safesend", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L816", "weight": 0.8}, {"source": "musicservice_musicservice_rendernowplaying", "target": "musicservice_musicservice_startprogressupdates", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L819", "weight": 0.8}, {"source": "musicservice_musicservice_renderidlestate", "target": "musicservice_musicservice_stopprogressupdates", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L823", "weight": 0.8}, {"source": "musicservice_musicservice_renderidlestate", "target": "musicservice_musicservice_buildcontrolrow", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L836", "weight": 0.8}, {"source": "musicservice_musicservice_buildcontrolrow", "target": "musicservice_musicservice_ispaused", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L841", "weight": 0.8}, {"source": "musicservice_musicservice_buildnowplayingembed", "target": "musicservice_musicservice_getelapsedseconds", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L894", "weight": 0.8}, {"source": "musicservice_musicservice_buildnowplayingembed", "target": "musicservice_formatduration", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L898", "weight": 0.8}, {"source": "musicservice_musicservice_buildnowplayingembed", "target": "musicservice_musicservice_buildprogressbar", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L898", "weight": 0.8}, {"source": "musicservice_musicservice_buildnowplayingembed", "target": "musicservice_musicservice_buildindeterminateprogressbar", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L899", "weight": 0.8}, {"source": "musicservice_musicservice_buildnowplayingembed", "target": "musicservice_musicservice_ispaused", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L901", "weight": 0.8}, {"source": "musicservice_musicservice_buildnowplayingembed", "target": "musicservice_musicservice_formattrackline", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L941", "weight": 0.8}, {"source": "musicservice_musicservice_startprogressupdates", "target": "musicservice_musicservice_stopprogressupdates", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L962", "weight": 0.8}, {"source": "musicservice_musicservice_refreshcontrolmessage", "target": "musicservice_musicservice_renderidlestate", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L1011", "weight": 0.8}, {"source": "musicservice_musicservice_refreshcontrolmessage", "target": "musicservice_musicservice_buildnowplayingembed", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L1016", "weight": 0.8}, {"source": "musicservice_musicservice_refreshcontrolmessage", "target": "musicservice_musicservice_buildcontrolrow", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L1017", "weight": 0.8}, {"source": "musicservice_musicservice_refreshcontrolmessage", "target": "musicservice_musicservice_ispaused", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L1020", "weight": 0.8}, {"source": "musicservice_musicservice_refreshcontrolmessage", "target": "musicservice_musicservice_stopprogressupdates", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L1021", "weight": 0.8}, {"source": "musicservice_musicservice_refreshcontrolmessage", "target": "musicservice_musicservice_startprogressupdates", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L1023", "weight": 0.8}, {"source": "minigameregistry", "target": "minigameregistry_getminigame", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/services/MiniGameRegistry.ts", "source_location": "L20", "weight": 1.0}, {"source": "minigameregistry", "target": "minigameregistry_getallminigames", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/services/MiniGameRegistry.ts", "source_location": "L24", "weight": 1.0}, {"source": "voiceservice", "target": "discord_js", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/VoiceService.ts", "source_location": "L1", "weight": 1.0}, {"source": "voiceservice", "target": "database", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/VoiceService.ts", "source_location": "L2", "weight": 1.0}, {"source": "voiceservice", "target": "logger", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/VoiceService.ts", "source_location": "L3", "weight": 1.0}, {"source": "voiceservice", "target": "errorcodes", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/VoiceService.ts", "source_location": "L4", "weight": 1.0}, {"source": "voiceservice", "target": "i18n", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/VoiceService.ts", "source_location": "L5", "weight": 1.0}, {"source": "voiceservice", "target": "localehelper", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/VoiceService.ts", "source_location": "L6", "weight": 1.0}, {"source": "voiceservice", "target": "auditlogservice", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/VoiceService.ts", "source_location": "L7", "weight": 1.0}, {"source": "voiceservice", "target": "voiceservice_voiceservice", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/services/VoiceService.ts", "source_location": "L9", "weight": 1.0}, {"source": "voiceservice_voiceservice", "target": "voiceservice_voiceservice_syncchannels", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/VoiceService.ts", "source_location": "L10", "weight": 1.0}, {"source": "voiceservice_voiceservice", "target": "voiceservice_voiceservice_handlevoicestateupdate", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/VoiceService.ts", "source_location": "L49", "weight": 1.0}, {"source": "voiceservice_voiceservice", "target": "voiceservice_voiceservice_handlejoin", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/VoiceService.ts", "source_location": "L65", "weight": 1.0}, {"source": "voiceservice_voiceservice", "target": "voiceservice_voiceservice_handleleave", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/VoiceService.ts", "source_location": "L211", "weight": 1.0}, {"source": "voiceservice_voiceservice", "target": "voiceservice_voiceservice_applyownershiptransfer", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/VoiceService.ts", "source_location": "L277", "weight": 1.0}, {"source": "voiceservice_voiceservice", "target": "voiceservice_voiceservice_sendcontrolpanel", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/VoiceService.ts", "source_location": "L301", "weight": 1.0}, {"source": "voiceservice_voiceservice", "target": "voiceservice_voiceservice_geteffectivename", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/VoiceService.ts", "source_location": "L336", "weight": 1.0}, {"source": "voiceservice_voiceservice_handlevoicestateupdate", "target": "voiceservice_voiceservice_handlejoin", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/VoiceService.ts", "source_location": "L56", "weight": 0.8}, {"source": "voiceservice_voiceservice_handlevoicestateupdate", "target": "voiceservice_voiceservice_handleleave", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/VoiceService.ts", "source_location": "L58", "weight": 0.8}, {"source": "voiceservice_voiceservice_handlejoin", "target": "voiceservice_voiceservice_geteffectivename", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/VoiceService.ts", "source_location": "L130", "weight": 0.8}, {"source": "voiceservice_voiceservice_handlejoin", "target": "voiceservice_voiceservice_sendcontrolpanel", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/VoiceService.ts", "source_location": "L205", "weight": 0.8}, {"source": "voiceservice_voiceservice_handleleave", "target": "voiceservice_voiceservice_applyownershiptransfer", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/VoiceService.ts", "source_location": "L268", "weight": 0.8}, {"source": "voiceservice_voiceservice_applyownershiptransfer", "target": "voiceservice_voiceservice_sendcontrolpanel", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/VoiceService.ts", "source_location": "L298", "weight": 0.8}, {"source": "permissionauditservice", "target": "discord_js", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/PermissionAuditService.ts", "source_location": "L1", "weight": 1.0}, {"source": "permissionauditservice", "target": "database", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/PermissionAuditService.ts", "source_location": "L8", "weight": 1.0}, {"source": "permissionauditservice", "target": "logger", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/PermissionAuditService.ts", "source_location": "L9", "weight": 1.0}, {"source": "permissionauditservice", "target": "permissionauditservice_permissionauditservice", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/services/PermissionAuditService.ts", "source_location": "L143", "weight": 1.0}, {"source": "permissionauditservice_permissionauditservice", "target": "permissionauditservice_permissionauditservice_auditguild", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/PermissionAuditService.ts", "source_location": "L144", "weight": 1.0}, {"source": "permissionauditservice_permissionauditservice", "target": "permissionauditservice_permissionauditservice_checkguildpermissions", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/PermissionAuditService.ts", "source_location": "L181", "weight": 1.0}, {"source": "permissionauditservice_permissionauditservice", "target": "permissionauditservice_permissionauditservice_checkchannelpermissions", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/PermissionAuditService.ts", "source_location": "L194", "weight": 1.0}, {"source": "permissionauditservice_permissionauditservice", "target": "permissionauditservice_permissionauditservice_checkhierarchy", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/PermissionAuditService.ts", "source_location": "L210", "weight": 1.0}, {"source": "permissionauditservice_permissionauditservice", "target": "permissionauditservice_permissionauditservice_getmissing", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/PermissionAuditService.ts", "source_location": "L231", "weight": 1.0}, {"source": "permissionauditservice_permissionauditservice", "target": "permissionauditservice_permissionauditservice_permtostring", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/PermissionAuditService.ts", "source_location": "L236", "weight": 1.0}, {"source": "permissionauditservice_permissionauditservice_auditguild", "target": "permissionauditservice_permissionauditservice_checkguildpermissions", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/PermissionAuditService.ts", "source_location": "L153", "weight": 0.8}, {"source": "permissionauditservice_permissionauditservice_auditguild", "target": "permissionauditservice_permissionauditservice_checkchannelpermissions", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/PermissionAuditService.ts", "source_location": "L159", "weight": 0.8}, {"source": "permissionauditservice_permissionauditservice_auditguild", "target": "permissionauditservice_permissionauditservice_checkhierarchy", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/PermissionAuditService.ts", "source_location": "L167", "weight": 0.8}, {"source": "permissionauditservice_permissionauditservice_checkguildpermissions", "target": "permissionauditservice_permissionauditservice_getmissing", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/PermissionAuditService.ts", "source_location": "L185", "weight": 0.8}, {"source": "permissionauditservice_permissionauditservice_checkchannelpermissions", "target": "permissionauditservice_permissionauditservice_getmissing", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/PermissionAuditService.ts", "source_location": "L200", "weight": 0.8}, {"source": "setupwizardrenderer", "target": "discord_js", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/SetupWizardRenderer.ts", "source_location": "L1", "weight": 1.0}, {"source": "setupwizardrenderer", "target": "i18n", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/SetupWizardRenderer.ts", "source_location": "L13", "weight": 1.0}, {"source": "setupwizardrenderer", "target": "permissionauditservice", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/SetupWizardRenderer.ts", "source_location": "L14", "weight": 1.0}, {"source": "setupwizardrenderer", "target": "database", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/SetupWizardRenderer.ts", "source_location": "L15", "weight": 1.0}, {"source": "setupwizardrenderer", "target": "setupwizardrenderer_setupwizardrenderer", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/services/SetupWizardRenderer.ts", "source_location": "L17", "weight": 1.0}, {"source": "setupwizardrenderer_setupwizardrenderer", "target": "setupwizardrenderer_setupwizardrenderer_renderstep", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/SetupWizardRenderer.ts", "source_location": "L18", "weight": 1.0}, {"source": "fishingservice", "target": "discord_js", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L1", "weight": 1.0}, {"source": "fishingservice", "target": "node_fs", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L15", "weight": 1.0}, {"source": "fishingservice", "target": "node_path", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L16", "weight": 1.0}, {"source": "fishingservice", "target": "sharp", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L17", "weight": 1.0}, {"source": "fishingservice", "target": "database", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L18", "weight": 1.0}, {"source": "fishingservice", "target": "i18n", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L19", "weight": 1.0}, {"source": "fishingservice", "target": "refinementservice", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L20", "weight": 1.0}, {"source": "fishingservice", "target": "logger", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L21", "weight": 1.0}, {"source": "fishingservice", "target": "fishingservice_fishingservice", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L102", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_enterthread", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L109", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_isownedfishingthread", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L135", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_startsessioninthread", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L145", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_endthreadbyuser", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L168", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_handlebutton", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L189", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_getprofile", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L234", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_getcollection", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L242", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_getsizeranking", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L256", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_getfishdisplayname", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L271", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_getraritydisplaynamebyid", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L275", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_ticksession", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L283", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_queueaction", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L307", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_resolvesuccessfulpull", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L323", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_resolvemiss", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L353", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_startnextphase", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L369", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_finishsession", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L375", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_getactivesession", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L397", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_issessionstale", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L411", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_clearstalesession", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L424", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_deletethread", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L430", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_rendersession", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L444", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_buildembed", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L467", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_buildcontrolrow", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L527", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_buildgauge", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L552", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_createsessioninthread", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L558", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_findorcreatethread", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L613", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_findownedfishingthread", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L632", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_sendcatchresult", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L646", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_previewfishlane", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L702", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_previewgauge", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L706", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_buildfishlane", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L710", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_randomdirection", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L716", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_buildthreadname", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L721", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_loadfishingcatalog", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L726", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_pickfishbyrate", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L738", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_pickraritybyrate", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L752", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_getreactionwindowms", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L766", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_rollrange", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L772", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_pickrandomartpath", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L780", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_resolveresourcepath", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L789", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_loadfishingrarities", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L793", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_getraritydisplayname", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L805", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_recordprofileresult", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L809", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_recordcollectioncatch", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L852", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_getraritycountfield", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L898", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_getrarityrank", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L906", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_getraritybadge", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L914", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_composerarityart", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L922", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_hextocolorint", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L946", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_rollcatchsizecm", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L950", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_formatselectedaction", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L956", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_cleartick", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L964", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_getuserkey", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L971", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_rolldecimalrange", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L975", "weight": 1.0}, {"source": "fishingservice", "target": "fishingservice_buildfishinggauge", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L984", "weight": 1.0}, {"source": "fishingservice", "target": "fishingservice_buildfishinglane", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L988", "weight": 1.0}, {"source": "fishingservice_fishingservice_enterthread", "target": "fishingservice_fishingservice_getuserkey", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L114", "weight": 0.8}, {"source": "fishingservice_fishingservice_enterthread", "target": "fishingservice_fishingservice_findorcreatethread", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L120", "weight": 0.8}, {"source": "fishingservice_fishingservice_isownedfishingthread", "target": "fishingservice_fishingservice_buildthreadname", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L142", "weight": 0.8}, {"source": "fishingservice_fishingservice_startsessioninthread", "target": "fishingservice_fishingservice_isownedfishingthread", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L146", "weight": 0.8}, {"source": "fishingservice_fishingservice_startsessioninthread", "target": "fishingservice_fishingservice_getuserkey", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L150", "weight": 0.8}, {"source": "fishingservice_fishingservice_startsessioninthread", "target": "fishingservice_fishingservice_getactivesession", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L151", "weight": 0.8}, {"source": "fishingservice_fishingservice_startsessioninthread", "target": "fishingservice_fishingservice_createsessioninthread", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L157", "weight": 0.8}, {"source": "fishingservice_fishingservice_endthreadbyuser", "target": "fishingservice_fishingservice_getactivesession", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L173", "weight": 0.8}, {"source": "fishingservice_fishingservice_endthreadbyuser", "target": "fishingservice_fishingservice_getuserkey", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L173", "weight": 0.8}, {"source": "fishingservice_fishingservice_endthreadbyuser", "target": "fishingservice_fishingservice_findownedfishingthread", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L175", "weight": 0.8}, {"source": "fishingservice_fishingservice_endthreadbyuser", "target": "fishingservice_fishingservice_deletethread", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L180", "weight": 0.8}, {"source": "fishingservice_fishingservice_endthreadbyuser", "target": "fishingservice_fishingservice_finishsession", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L185", "weight": 0.8}, {"source": "fishingservice_fishingservice_handlebutton", "target": "fishingservice_fishingservice_getuserkey", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L192", "weight": 0.8}, {"source": "fishingservice_fishingservice_handlebutton", "target": "fishingservice_fishingservice_buildcontrolrow", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L197", "weight": 0.8}, {"source": "fishingservice_fishingservice_handlebutton", "target": "fishingservice_fishingservice_queueaction", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L231", "weight": 0.8}, {"source": "fishingservice_fishingservice_getraritydisplaynamebyid", "target": "fishingservice_fishingservice_getraritydisplayname", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L280", "weight": 0.8}, {"source": "fishingservice_fishingservice_ticksession", "target": "fishingservice_fishingservice_getuserkey", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L284", "weight": 0.8}, {"source": "fishingservice_fishingservice_ticksession", "target": "fishingservice_fishingservice_cleartick", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L285", "weight": 0.8}, {"source": "fishingservice_fishingservice_ticksession", "target": "fishingservice_fishingservice_getreactionwindowms", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L290", "weight": 0.8}, {"source": "fishingservice_fishingservice_ticksession", "target": "fishingservice_fishingservice_resolvesuccessfulpull", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L298", "weight": 0.8}, {"source": "fishingservice_fishingservice_ticksession", "target": "fishingservice_fishingservice_resolvemiss", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L303", "weight": 0.8}, {"source": "fishingservice_fishingservice_queueaction", "target": "fishingservice_fishingservice_startnextphase", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L314", "weight": 0.8}, {"source": "fishingservice_fishingservice_queueaction", "target": "fishingservice_fishingservice_rendersession", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L315", "weight": 0.8}, {"source": "fishingservice_fishingservice_resolvesuccessfulpull", "target": "fishingservice_fishingservice_rollrange", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L324", "weight": 0.8}, {"source": "fishingservice_fishingservice_resolvesuccessfulpull", "target": "fishingservice_fishingservice_rollcatchsizecm", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L338", "weight": 0.8}, {"source": "fishingservice_fishingservice_resolvesuccessfulpull", "target": "fishingservice_fishingservice_finishsession", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L340", "weight": 0.8}, {"source": "fishingservice_fishingservice_resolvesuccessfulpull", "target": "fishingservice_fishingservice_startnextphase", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L349", "weight": 0.8}, {"source": "fishingservice_fishingservice_resolvesuccessfulpull", "target": "fishingservice_fishingservice_rendersession", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L350", "weight": 0.8}, {"source": "fishingservice_fishingservice_resolvemiss", "target": "fishingservice_fishingservice_finishsession", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L361", "weight": 0.8}, {"source": "fishingservice_fishingservice_resolvemiss", "target": "fishingservice_fishingservice_startnextphase", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L365", "weight": 0.8}, {"source": "fishingservice_fishingservice_resolvemiss", "target": "fishingservice_fishingservice_rendersession", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L366", "weight": 0.8}, {"source": "fishingservice_fishingservice_startnextphase", "target": "fishingservice_fishingservice_randomdirection", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L372", "weight": 0.8}, {"source": "fishingservice_fishingservice_finishsession", "target": "fishingservice_fishingservice_cleartick", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L377", "weight": 0.8}, {"source": "fishingservice_fishingservice_finishsession", "target": "fishingservice_fishingservice_recordprofileresult", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L381", "weight": 0.8}, {"source": "fishingservice_fishingservice_finishsession", "target": "fishingservice_fishingservice_rendersession", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L383", "weight": 0.8}, {"source": "fishingservice_fishingservice_finishsession", "target": "fishingservice_fishingservice_getuserkey", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L385", "weight": 0.8}, {"source": "fishingservice_fishingservice_finishsession", "target": "fishingservice_fishingservice_sendcatchresult", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L389", "weight": 0.8}, {"source": "fishingservice_fishingservice_finishsession", "target": "fishingservice_fishingservice_deletethread", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L393", "weight": 0.8}, {"source": "fishingservice_fishingservice_getactivesession", "target": "fishingservice_fishingservice_issessionstale", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L403", "weight": 0.8}, {"source": "fishingservice_fishingservice_getactivesession", "target": "fishingservice_fishingservice_clearstalesession", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L404", "weight": 0.8}, {"source": "fishingservice_fishingservice_clearstalesession", "target": "fishingservice_fishingservice_cleartick", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L425", "weight": 0.8}, {"source": "fishingservice_fishingservice_clearstalesession", "target": "fishingservice_fishingservice_getuserkey", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L426", "weight": 0.8}, {"source": "fishingservice_fishingservice_rendersession", "target": "fishingservice_fishingservice_buildembed", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L454", "weight": 0.8}, {"source": "fishingservice_fishingservice_rendersession", "target": "fishingservice_fishingservice_buildcontrolrow", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L455", "weight": 0.8}, {"source": "fishingservice_fishingservice_buildembed", "target": "fishingservice_fishingservice_buildgauge", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L471", "weight": 0.8}, {"source": "fishingservice_fishingservice_buildembed", "target": "fishingservice_fishingservice_formatselectedaction", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L474", "weight": 0.8}, {"source": "fishingservice_fishingservice_buildembed", "target": "fishingservice_fishingservice_hextocolorint", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L479", "weight": 0.8}, {"source": "fishingservice_fishingservice_buildembed", "target": "fishingservice_fishingservice_buildfishlane", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L492", "weight": 0.8}, {"source": "fishingservice_fishingservice_createsessioninthread", "target": "fishingservice_fishingservice_pickfishbyrate", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L565", "weight": 0.8}, {"source": "fishingservice_fishingservice_createsessioninthread", "target": "fishingservice_fishingservice_pickraritybyrate", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L566", "weight": 0.8}, {"source": "fishingservice_fishingservice_createsessioninthread", "target": "fishingservice_fishingservice_randomdirection", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L576", "weight": 0.8}, {"source": "fishingservice_fishingservice_createsessioninthread", "target": "fishingservice_fishingservice_buildembed", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L590", "weight": 0.8}, {"source": "fishingservice_fishingservice_createsessioninthread", "target": "fishingservice_fishingservice_buildcontrolrow", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L591", "weight": 0.8}, {"source": "fishingservice_fishingservice_createsessioninthread", "target": "fishingservice_fishingservice_getuserkey", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L599", "weight": 0.8}, {"source": "fishingservice_fishingservice_findorcreatethread", "target": "fishingservice_fishingservice_buildthreadname", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L614", "weight": 0.8}, {"source": "fishingservice_fishingservice_findownedfishingthread", "target": "fishingservice_fishingservice_isownedfishingthread", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L633", "weight": 0.8}, {"source": "fishingservice_fishingservice_sendcatchresult", "target": "fishingservice_fishingservice_pickrandomartpath", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L647", "weight": 0.8}, {"source": "fishingservice_fishingservice_sendcatchresult", "target": "fishingservice_fishingservice_getraritydisplayname", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L648", "weight": 0.8}, {"source": "fishingservice_fishingservice_sendcatchresult", "target": "fishingservice_fishingservice_getraritybadge", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L649", "weight": 0.8}, {"source": "fishingservice_fishingservice_sendcatchresult", "target": "fishingservice_fishingservice_hextocolorint", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L651", "weight": 0.8}, {"source": "fishingservice_fishingservice_sendcatchresult", "target": "fishingservice_fishingservice_composerarityart", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L675", "weight": 0.8}, {"source": "fishingservice_fishingservice_previewfishlane", "target": "fishingservice_fishingservice_buildfishlane", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L703", "weight": 0.8}, {"source": "fishingservice_fishingservice_previewgauge", "target": "fishingservice_fishingservice_buildgauge", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L707", "weight": 0.8}, {"source": "fishingservice_fishingservice_loadfishingcatalog", "target": "fishingservice_fishingservice_resolveresourcepath", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L727", "weight": 0.8}, {"source": "fishingservice_fishingservice_pickrandomartpath", "target": "fishingservice_fishingservice_resolveresourcepath", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L786", "weight": 0.8}, {"source": "fishingservice_fishingservice_loadfishingrarities", "target": "fishingservice_fishingservice_resolveresourcepath", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L794", "weight": 0.8}, {"source": "fishingservice_fishingservice_recordprofileresult", "target": "fishingservice_fishingservice_getraritycountfield", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L811", "weight": 0.8}, {"source": "fishingservice_fishingservice_recordprofileresult", "target": "fishingservice_fishingservice_getprofile", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L812", "weight": 0.8}, {"source": "fishingservice_fishingservice_recordprofileresult", "target": "fishingservice_fishingservice_recordcollectioncatch", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L848", "weight": 0.8}, {"source": "fishingservice_fishingservice_recordcollectioncatch", "target": "fishingservice_fishingservice_getrarityrank", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L853", "weight": 0.8}, {"source": "fishingservice_fishingservice_rollcatchsizecm", "target": "fishingservice_fishingservice_rolldecimalrange", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L951", "weight": 0.8}, {"source": "fishingservice_buildfishinggauge", "target": "fishingservice_fishingservice_previewgauge", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L985", "weight": 0.8}, {"source": "fishingservice_buildfishinglane", "target": "fishingservice_fishingservice_previewfishlane", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L989", "weight": 0.8}, {"source": "webhookservice", "target": "discord_js", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/WebhookService.ts", "source_location": "L1", "weight": 1.0}, {"source": "webhookservice", "target": "logger", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/WebhookService.ts", "source_location": "L2", "weight": 1.0}, {"source": "webhookservice", "target": "webhookservice_webhookservice", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/services/WebhookService.ts", "source_location": "L4", "weight": 1.0}, {"source": "webhookservice_webhookservice", "target": "webhookservice_webhookservice_getwebhookclient", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/WebhookService.ts", "source_location": "L13", "weight": 1.0}, {"source": "auditlogservice", "target": "discord_js", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/AuditLogService.ts", "source_location": "L1", "weight": 1.0}, {"source": "auditlogservice", "target": "database", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/AuditLogService.ts", "source_location": "L2", "weight": 1.0}, {"source": "auditlogservice", "target": "env", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/AuditLogService.ts", "source_location": "L3", "weight": 1.0}, {"source": "auditlogservice", "target": "auditlogservice_auditlogservice", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/services/AuditLogService.ts", "source_location": "L23", "weight": 1.0}, {"source": "auditlogservice_auditlogservice", "target": "auditlogservice_auditlogservice_log", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/AuditLogService.ts", "source_location": "L29", "weight": 1.0}, {"source": "auditlogservice_auditlogservice", "target": "auditlogservice_auditlogservice_setchannel", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/AuditLogService.ts", "source_location": "L71", "weight": 1.0}, {"source": "auditlogservice_auditlogservice", "target": "auditlogservice_auditlogservice_clearchannel", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/AuditLogService.ts", "source_location": "L87", "weight": 1.0}, {"source": "auditlogservice_auditlogservice", "target": "auditlogservice_auditlogservice_getchannel", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/AuditLogService.ts", "source_location": "L96", "weight": 1.0}, {"source": "auditlogservice_auditlogservice", "target": "auditlogservice_auditlogservice_setfilter", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/AuditLogService.ts", "source_location": "L107", "weight": 1.0}, {"source": "auditlogservice_auditlogservice_log", "target": "auditlogservice_auditlogservice_getchannel", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/AuditLogService.ts", "source_location": "L31", "weight": 0.8}, {"source": "auditlogservice_auditlogservice_setfilter", "target": "auditlogservice_auditlogservice_getchannel", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/AuditLogService.ts", "source_location": "L108", "weight": 0.8}, {"source": "eventservice", "target": "discord_js", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/EventService.ts", "source_location": "L1", "weight": 1.0}, {"source": "eventservice", "target": "database", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/EventService.ts", "source_location": "L2", "weight": 1.0}, {"source": "eventservice", "target": "logger", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/EventService.ts", "source_location": "L3", "weight": 1.0}, {"source": "eventservice", "target": "auditlogservice", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/EventService.ts", "source_location": "L4", "weight": 1.0}, {"source": "eventservice", "target": "eventservice_todiscordtimestamps", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/services/EventService.ts", "source_location": "L10", "weight": 1.0}, {"source": "eventservice", "target": "eventservice_buildeventembed", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/services/EventService.ts", "source_location": "L18", "weight": 1.0}, {"source": "eventservice", "target": "eventservice_resolveannouncementchannel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/services/EventService.ts", "source_location": "L68", "weight": 1.0}, {"source": "eventservice", "target": "eventservice_eventservice", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/services/EventService.ts", "source_location": "L79", "weight": 1.0}, {"source": "eventservice_eventservice", "target": "eventservice_eventservice_announceevent", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/EventService.ts", "source_location": "L82", "weight": 1.0}, {"source": "eventservice_eventservice", "target": "eventservice_eventservice_startreminderloop", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/EventService.ts", "source_location": "L115", "weight": 1.0}, {"source": "eventservice_eventservice", "target": "eventservice_eventservice_stopreminderloop", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/EventService.ts", "source_location": "L133", "weight": 1.0}, {"source": "eventservice_eventservice", "target": "eventservice_eventservice_processdueevents", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/EventService.ts", "source_location": "L141", "weight": 1.0}, {"source": "eventservice_eventservice", "target": "eventservice_eventservice_sendreminder", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/EventService.ts", "source_location": "L226", "weight": 1.0}, {"source": "eventservice_buildeventembed", "target": "eventservice_todiscordtimestamps", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/EventService.ts", "source_location": "L25", "weight": 0.8}, {"source": "eventservice_eventservice_announceevent", "target": "eventservice_resolveannouncementchannel", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/EventService.ts", "source_location": "L94", "weight": 0.8}, {"source": "eventservice_eventservice_announceevent", "target": "eventservice_buildeventembed", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/EventService.ts", "source_location": "L99", "weight": 0.8}, {"source": "eventservice_eventservice_startreminderloop", "target": "eventservice_eventservice_processdueevents", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/EventService.ts", "source_location": "L120", "weight": 0.8}, {"source": "eventservice_eventservice_processdueevents", "target": "eventservice_resolveannouncementchannel", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/EventService.ts", "source_location": "L159", "weight": 0.8}, {"source": "eventservice_eventservice_processdueevents", "target": "eventservice_eventservice_sendreminder", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/EventService.ts", "source_location": "L172", "weight": 0.8}, {"source": "eventservice_eventservice_processdueevents", "target": "eventservice_buildeventembed", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/EventService.ts", "source_location": "L193", "weight": 0.8}, {"source": "eventservice_eventservice_sendreminder", "target": "eventservice_buildeventembed", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/EventService.ts", "source_location": "L236", "weight": 0.8}], "hyperedges": []} \ No newline at end of file diff --git a/.graphify_python b/.graphify_python new file mode 100644 index 0000000..3ba4794 --- /dev/null +++ b/.graphify_python @@ -0,0 +1 @@ +/Users/wemadeplay/workspace/graphify/venv/bin/python diff --git a/.windsurfrules b/.windsurfrules index a1ade21..0db4f8a 100644 --- a/.windsurfrules +++ b/.windsurfrules @@ -16,3 +16,8 @@ - 유저에게 노출되는 모든 기능(메시지, 임베드, 상태 메시지 등)을 구성할 때는 별도의 요청이 없더라도 **반드시 다국어 지원(i18n) 적용을 검토하고 구현**해야 합니다. (자세한 내용은 `Docs/Rules/i18n_guidelines.md` 참조) - 단순 문법 검증에 그치지 말고, `yarn dev` 등의 명령어로 봇을 백그라운드에서 직접 구동(Boot)시켜 DB/캐시 커넥트 및 이벤트 리스너 초기화 중 런타임 에러(예: Intents 권한 거부 등)가 발생하지 않는지 스스로 눈으로 확인하고 완벽히 디버깅해야 합니다. - 봇이 성공적으로 온라인 상태(`Ready`)에 진입한 것을 확인한 뒤에만 사용자에게 작업 완료를 보고합니다. + +## Graphify Rules +- 사용자가 `/graphify` 혹은 지식 그래프 관련 질의를 할 경우, `SKILL.md`와 `Docs/Features/Graphify_Setup_Guide.md`의 워크플로우를 참조합니다. +- 대규모 리팩토링이나 구조 파악이 필요할 때는 `graphify-out/GRAPH_REPORT.md`를 우선적으로 참조하여 의존 관계를 파악합니다. +- 로컬 모델을 위한 시맨틱 추출이 필요한 경우 `--ollama` 옵션의 활용을 검토하며, 코드 기반 갱신은 `python3 -m graphify.watch .` 를 이용합니다. diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..aa7c811 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,5 @@ +# graphify +- **graphify** (`SKILL.md`) - any input to knowledge graph. Trigger: `/graphify` +When the user types `/graphify`, invoke the Skill tool with `skill: "graphify"` before doing anything else. +- 프로젝트의 구조 변경이나 문서 갱신시 실시간 업데이트를 원한다면 `python3 -m graphify.watch .` 실행을 추천하세요. +- Ollama 연동 및 트러블슈팅 설정 등은 `Docs/Features/Graphify_Setup_Guide.md` 문서를 참고하세요. diff --git a/Docs/Features/Graphify_Setup_Guide.md b/Docs/Features/Graphify_Setup_Guide.md new file mode 100644 index 0000000..e440dc7 --- /dev/null +++ b/Docs/Features/Graphify_Setup_Guide.md @@ -0,0 +1,62 @@ +# Graphify Setup & Guide + +이 문서는 프로젝트 내 코드 및 문서의 지식 그래프(Knowledge Graph)를 생성하고 유지관리하기 위한 `graphify` 도구의 설치부터 Ollama 모델 연동, 그리고 실시간 자동 갱신(Watch Mode)을 적용하는 과정을 다른 환경에서도 쉽게 따라 할 수 있도록 정리한 가이드입니다. + +## 1. Graphify 설치 및 기본 환경 설정 + +`graphify`는 코드베이스, 문서 등을 분석하여 구조적/시맨틱(의미론적) 연결망을 만들어주는 지식 그래프 도구입니다. + +### Python 인터프리터 구성 +- 시스템 전역 파이썬 대신 `venv` 등의 가상 환경에 구성된 파이썬을 이용하는 것을 권장합니다. +- `graphify` 설치 명령어: + ```bash + python3 -m pip install graphifyy -q --break-system-packages + ``` +- 에이전트(Claude 등)가 일관된 파이썬을 사용할 수 있게 프로젝트 루트에 `.graphify_python` 파일을 생성해 파이썬 경로를 저장합니다. + ```bash + python3 -c "import sys; open('.graphify_python', 'w').write(sys.executable)" + ``` + +## 2. 로컬 LLM (Ollama) 연동 및 시맨틱 분석 + +`graphify`는 문서나 코드의 주석 등을 기반으로 추론된 엣지(INFERRED)를 찾을 때 LLM을 사용합니다. 외부 API 대신 로컬 Ollama 모델을 활용하면 토큰 비용을 아낄 수 있습니다. + +### Ollama 연결 확인 및 모델 설정 +- 로컬의 `11434` 포트에서 Ollama 데몬이 실행 중인지 확인합니다. + ```bash + curl -s http://localhost:11434/api/tags > .ollama_tags.json + ``` +- 로드된 언어 모델(예: `gemma4:e4b-it-q4_K_M`, `llama3` 등)을 `.ollama_models.json` 캐시로 저장합니다. +- 이후 그래프 생성 명령 시 `--ollama` 플래그를 붙여 로컬 연동을 지시합니다. + ```bash + /graphify . --ollama --model gemma4:e4b-it-q4_K_M + ``` + +### 트러블슈팅: f-string 및 패키지 오류 (semantic_llm.py) +파이썬 버전 또는 패키지 업데이트 상태에 따라 Ollama API를 호출하는 `semantic_llm.py` 내부 로직에서 몇 가지 오류가 발생할 수 있습니다. (에이전트가 실행 시 자동 수정하거나, 수동으로 수정해야 합니다.) +1. **f-string `{}` 파싱 오류**: `extract_semantic` 프롬프트 내 JSON 예시의 괄호(`{`, `}`)가 f-string의 변수로 인식되어 `ValueError`가 발생할 수 있습니다. JSON 중괄호를 모두 `{{`, `}}`로 더블 이스케이프해야 합니다. +2. **urllib Request 오류**: `urllib.request.Request` 호출 시 `content_type="application/json"` 인자가 거부될 경우, `headers={"Content-Type": "application/json"}` 형태로 교체해야 합니다. + +## 3. 지식 그래프 자동 갱신 설정 (Watch Mode) + +개발 과정 중 코드나 문서가 빈번하게수정될 때, 그래프를 백그라운드에서 실시간으로 최신화하는 `watch` 모드를 설정할 수 있습니다. (문서 수정은 수동 업데이트 필요, 코드는 자동 재구성) + +### 의존성 설치 +watch 모드는 `watchdog` 라이브러리를 요구합니다. +```bash +python3 -m pip install watchdog +``` + +### 상태 감시 실행 +터미널을 열어 아래 명령어를 유지합니다: +```bash +python3 -m graphify.watch . +``` + +- **코드 파일**이 변경된 경우: 백그라운드에서 즉각적으로 AST 추출이 다시 실행되고 `graph.json`과 리포트가 갱신됩니다. +- **문서 파일**이 변경된 경우: LLM 추론이 필요하므로 `need_update` 플래그만 기록합니다. 이후 에이전트나 사용자가 명시적으로 `/graphify . --update` 를 실행하여 최신화합니다. + +## 4. 에이전트 설정(IDE Rules) 연계 + +- **CLAUDE.md 및 .cursorrules**: AI 에이전트가 `graphify` 관련 요청을 받을 경우 `SKILL.md`를 우선 확인하도록 규칙이 지정되어 있습니다. +- 백그라운드에서 감지될 수 있도록 에이전트는 "대규모 리팩토링이나 구조 파악 전 `GRAPH_REPORT.md` 검토", "코드 작성 중 `watchdog`에 의한 자동 갱신 확인" 등을 수행합니다. diff --git a/Docs/Plans/Error_Guidance_Plan.md b/Docs/Plans/Error_Guidance_Plan.md index 68c1cae..5e9c11f 100644 --- a/Docs/Plans/Error_Guidance_Plan.md +++ b/Docs/Plans/Error_Guidance_Plan.md @@ -39,7 +39,7 @@ |----------|-------------|------|------------------| | `USER_INPUT` | `E1xxx` | 잘못된 입력값 (범위 초과, 형식 오류 등) | 올바른 입력 예시 안내, 재입력 유도 | | `PERMISSION` | `E2xxx` | 봇 또는 사용자 권한 부족 | 필요 권한 안내, 서버 관리자 문의 유도 | -| `BOT_INTERNAL` | `E3xxx` | 봇 내부 오류 (DB, Redis, 로직 오류) | 잠시 후 재시도 안내, 지속 시 관리자 문의 | +| `BOT_INTERNAL` | `E3xxx` | 봇 내부 오류 (DB, 로직 오류 등) | 잠시 후 재시도 안내, 지속 시 관리자 문의 | | `DISCORD_API` | `E4xxx` | Discord API 오류 (Rate Limit, 서비스 장애 등) | 잠시 후 재시도, Discord 상태 확인 안내 | ### 주요 에러 코드 예시 @@ -51,7 +51,7 @@ E2001 봇에 Manage Channels 권한 없음 E2002 사용자에게 관리자 권한 없음 E2003 채널 소유자만 사용 가능 E3001 데이터베이스 연결/쿼리 실패 -E3002 캐시(Redis) 연결 실패 +E3002 내부 캐시/상태 계층 오류 E4001 Discord API Rate Limit E4002 Discord API 50013 (Missing Permissions) E4003 Discord API 일시적 오류 diff --git a/Docs/Plans/Event_Schedule_Management_Plan.md b/Docs/Plans/Event_Schedule_Management_Plan.md index e9da768..afc4efc 100644 --- a/Docs/Plans/Event_Schedule_Management_Plan.md +++ b/Docs/Plans/Event_Schedule_Management_Plan.md @@ -173,11 +173,10 @@ enum EventStatus { ### 중복 방지 - 전송 직후 `remindedOneHour`, `remindedTenMinutes` 업데이트 -- 다중 인스턴스 환경에서는 Redis lock 또는 `INSTANCE_ID` 기반 단일 실행 제어 고려 +- 다중 인스턴스 환경에서는 DB advisory lock 또는 `INSTANCE_ID` 기반 단일 실행 제어 고려 > [!NOTE] -> 현재 프로젝트는 글로벌 커맨드 동기화 시 Redis lock을 사용하므로, -> 이벤트 리마인더도 같은 방식으로 확장하기 좋습니다. +> 글로벌 커맨드 등록 등은 애플리케이션 레벨에서 처리하며, 이벤트 리마인더도 유사한 단일 실행 패턴으로 확장할 수 있습니다. --- diff --git a/Docs/Plans/Fishing_MiniGame_Plan.md b/Docs/Plans/Fishing_MiniGame_Plan.md index b05a963..b306980 100644 --- a/Docs/Plans/Fishing_MiniGame_Plan.md +++ b/Docs/Plans/Fishing_MiniGame_Plan.md @@ -1,4 +1,4 @@ -# 낚시 미니게임 구현 기획안 +# 낚시 미니게임 구현 기획안 이 문서는 Kord의 `낚시(Fishing)` 미니게임 시스템에 대한 설계 방향과 구현 범위를 정리한 기획서입니다. @@ -182,7 +182,9 @@ 후속 버전에서는 아래 요소를 추가할 수 있습니다. - 물고기 희귀도 +- 물고기 크기(cm) 시스템 - 개별 물고기 인벤토리 +- 물고기 도감 / 컬렉션 - 미끼 종류 - 낚싯대 및 업그레이드 - 물고기 판매 시스템 @@ -253,6 +255,41 @@ Phase 1에서는 직접 `gold`를 주는 방식이 가장 단순하고 호환성 이 정도면 초반 통계 추적에 충분하고, 너무 이르게 인벤토리를 과설계하지 않을 수 있습니다. +도감/크기 확장 시에는 아래 모델을 추가합니다. + +- `FishingCollectionEntry` +- `userId` +- `guildId` +- `fishId` +- `catchCount` +- `bestRarity` +- `bestSizeCm` +- `lastCaughtAt` +- `createdAt` +- `updatedAt` + +이 모델은 유저가 어떤 물고기를 몇 번 잡았는지, 최고 레어도와 최고 크기가 무엇인지 추적하는 데 사용합니다. + +### 물고기 크기 시스템 + +- 낚시 성공 시 물고기마다 `cm` 단위의 크기를 부여합니다. +- 기본 크기 범위는 물고기별 데이터에서 관리합니다. +- 최종 크기는 `물고기 기본 크기 범위 × 레어도 보정치`로 계산합니다. +- 즉, 같은 물고기라도 레어도가 높을수록 더 큰 개체가 등장할 수 있습니다. +- 성공 결과 메시지에는 잡은 물고기의 크기를 함께 표시합니다. +- 도감에는 해당 물고기의 최고 크기를 기록합니다. + +### 도감 (Dex / Collection) + +- `/fishing dex` 명령을 통해 개인 도감을 조회할 수 있어야 합니다. +- 도감에는 아래 정보를 보여줍니다. +- 잡아본 물고기 목록 +- 각 물고기의 포획 횟수 +- 최고 레어도 +- 최고 크기(cm) +- 마지막 포획 시각 +- 아직 잡지 못한 물고기는 후속 버전에서 실루엣/잠금 상태로 표시할 수 있습니다. + ### 세션 모델 낚시 플레이 자체는 즉각적인 반응을 위해 메모리 세션 기반이 적합합니다. @@ -318,17 +355,23 @@ Phase 1에서는 직접 `gold`를 주는 방식이 가장 단순하고 호환성 ### Phase 2 - `/fishing status` 추가 +- `/fishing ranking` 추가 - 사용자별 낚시 통계 추가 - 낚시 프로필 영속화 - 물고기 이동 패턴 개선 - 보상 밸런스 조정 +- `/fishing dex` 추가 +- 물고기 크기(cm) 시스템 추가 +- 도감용 포획 기록 저장 +- 길드 내 최고 크기 기준 Top 10 랭킹 표시 ### Phase 3 - 희귀도 체계 추가 -- 인벤토리 / 도감 추가 +- 인벤토리 / 도감 고도화 - 미끼 / 낚싯대 보정치 추가 - 리더보드 지원 +- 미포획 물고기 잠금/실루엣 UI 추가 ## 검증 / 테스트 diff --git a/Docs/Plans/Setup_Wizard_Plan.md b/Docs/Plans/Setup_Wizard_Plan.md index 4f9a189..c253772 100644 --- a/Docs/Plans/Setup_Wizard_Plan.md +++ b/Docs/Plans/Setup_Wizard_Plan.md @@ -71,7 +71,7 @@ - **State Management (상태 관리)**: - 마법사는 ephemeral 메시지로 띄워지며, 세션 식별은 `customId` 릴레이 방식을 권장합니다. - 예시: `setup_action_next_2` (현재 Step 2, 다음으로 이동) 등 Stateless하게 관리하거나, - - 사용자/서버별 임시 Map/Redis에 `SetupSession` (진행 단계 등) 보관. (구현 편의상 `customId` payload에 스텝 인덱스를 담는 Stateless 방식 채택) + - 사용자/서버별 임시 Map 등에 `SetupSession` (진행 단계 등) 보관. (구현 편의상 `customId` payload에 스텝 인덱스를 담는 Stateless 방식 채택) - **i18n 통합**: - 버튼 레이블 및 Embed 내용은 모두 `t()` 함수를 거쳐야 합니다. - Step 1에서 언어가 변경되면, 즉시 그 언어 기준의 `t()`를 이용해 현재 뷰(View)를 갱신합니다. diff --git a/Docs/Rules/security_guidelines.md b/Docs/Rules/security_guidelines.md index 54c24f9..9731601 100644 --- a/Docs/Rules/security_guidelines.md +++ b/Docs/Rules/security_guidelines.md @@ -13,7 +13,7 @@ #### 절대 금지 대상 예시: - 디스코드 봇 토큰 (Discord Bot Tokens) - 데이터베이스 비밀번호 및 접속 주소 (e.g. `postgresql://user:password@host/db`) -- Redis 비밀번호, API 인증 키(Keys), 비밀 암호 해시, 사내용 중요 자격증명 리스트 +- 외부 서비스 비밀번호, API 인증 키(Keys), 비밀 암호 해시, 사내용 중요 자격증명 리스트 #### 올바른 해결 방법 1. **환경 변수 파일 (`.env`) 사용**: diff --git a/Docs/WorkDone/2026-03-27_Project_Initial_Setup.md b/Docs/WorkDone/2026-03-27_Project_Initial_Setup.md index b83a6de..8afb153 100644 --- a/Docs/WorkDone/2026-03-27_Project_Initial_Setup.md +++ b/Docs/WorkDone/2026-03-27_Project_Initial_Setup.md @@ -7,7 +7,7 @@ ### 1. 기술 스택 확정 및 초기화 - **언어 및 런타임**: Node.js, TypeScript - **프레임워크**: discord.js (v14+) -- **데이터베이스**: Prisma (PostgreSQL) + Redis (캐싱 및 동기화) +- **데이터베이스**: Prisma (PostgreSQL) - **빌드 도구**: ts-node, tsx, tsc ### 2. 프로젝트 기본 구조 설계 diff --git a/Docs/WorkDone/2026-03-27_Voice_Channels_Implementation.md b/Docs/WorkDone/2026-03-27_Voice_Channels_Implementation.md index 67c9553..e3e93c9 100644 --- a/Docs/WorkDone/2026-03-27_Voice_Channels_Implementation.md +++ b/Docs/WorkDone/2026-03-27_Voice_Channels_Implementation.md @@ -38,6 +38,6 @@ - **퇴장 시 채널 미삭제 및 유령 방 버그**: - *문제*: 채널 내에 음악봇 등 봇만 남았을 때 삭제 조건이 작동하지 않고, 권한 문제로 삭제가 실패했을 때 DB 무결성이 깨지는 버그. - *해결*: 휴먼 카운트(`humanCount`) 도입 및 삭제 롤백 검증 처리. 자세한 사항은 [handleLeave_ghost_channel.md](../Troubleshooting/handleLeave_ghost_channel.md) 참조. -- **멀티 인스턴스 대응 및 봇 재부팅 복구 (Boot Recovery)**: - - *사유*: 봇 재시작, 크래시, 혹은 다중 노드(Multi-Instance) 환경에서 DB와 디스코드 실제 채널 상태가 어긋나게 될 경우를 방지. - - *해결*: `ioredis` 분산 락(Distributed Lock)과 결합된 `VoiceService.syncChannels` 메서드를 구현하여, 부팅 시 딱 하나의 인스턴스만 DB를 훑으며 삭제되어야 할 유령 방들을 크로스체크 및 안전하게 청소(Garbage Collection)하도록 반영. +- **봇 재부팅 복구 (Boot Recovery)**: + - *사유*: 봇 재시작·크래시 등으로 DB와 디스코드 실제 채널 상태가 어긋나게 될 경우를 방지. + - *해결*: `VoiceService.syncChannels`로 부팅 시 DB를 기준으로 유령 방을 크로스체크 및 청소(Garbage Collection)하도록 반영. (다중 인스턴스 동시 실행 시 동일 작업이 겹칠 수 있으나 작업은 멱등에 가깝게 설계됨.) diff --git a/Docs/WorkDone/2026-03-31_Fishing_MiniGame_Phase1_Implementation.md b/Docs/WorkDone/2026-03-31_Fishing_MiniGame_Phase1_Implementation.md index cb2e422..bed2600 100644 --- a/Docs/WorkDone/2026-03-31_Fishing_MiniGame_Phase1_Implementation.md +++ b/Docs/WorkDone/2026-03-31_Fishing_MiniGame_Phase1_Implementation.md @@ -1,4 +1,4 @@ -# 2026-03-31 낚시 미니게임 Phase 1 구현 +# 2026-03-31 낚시 미니게임 Phase 1 구현 ## 개요 diff --git a/Docs/WorkDone/2026-04-07_Fishing_Dex_And_Size_Implementation.md b/Docs/WorkDone/2026-04-07_Fishing_Dex_And_Size_Implementation.md new file mode 100644 index 0000000..858c542 --- /dev/null +++ b/Docs/WorkDone/2026-04-07_Fishing_Dex_And_Size_Implementation.md @@ -0,0 +1,29 @@ +# 2026-04-07 Fishing Dex and Size Implementation + +## 요약 + +낚시 미니게임에 물고기 크기(`cm`) 시스템과 도감(`/fishing dex`) 기능을 추가했다. + +## 구현 내용 + +- 물고기별 기본 크기 범위를 `fish_catalog.json`에 추가 +- 레어도별 크기 보정치를 `fish_rarities.json`에 추가 +- 낚시 성공 시 최종 물고기 크기를 계산하여 결과 메시지에 표시 +- `FishingCollectionEntry` 모델 추가 + - 물고기별 포획 수 + - 최고 레어도 + - 최고 크기 + - 마지막 포획 시각 +- `/fishing dex` 서브커맨드 추가 + - 유저별 물고기 도감 조회 + - 포획 수, 최고 레어도, 최고 크기 표시 +- 성공 결과 메시지에 크기 필드 추가 + +## 검증 + +- `yarn prisma generate` +- `yarn build` +- `yarn test --runInBand` +- `yarn prisma migrate deploy` + +모든 단계가 정상 통과했다. diff --git a/Docs/WorkDone/2026-04-07_Fishing_MiniGame_Phase2_Implementation.md b/Docs/WorkDone/2026-04-07_Fishing_MiniGame_Phase2_Implementation.md new file mode 100644 index 0000000..2131c20 --- /dev/null +++ b/Docs/WorkDone/2026-04-07_Fishing_MiniGame_Phase2_Implementation.md @@ -0,0 +1,39 @@ +# 2026-04-07 Fishing Mini-Game Phase 2 Implementation + +## 요약 + +낚시 미니게임의 Phase 2로 `FishingProfile` 기반 통계 영속화와 `/fishing status` 조회 기능을 추가했다. + +## 구현 내용 + +- `FishingProfile` Prisma 모델 추가 + - `userId`, `guildId` 복합 키 + - 총 시도 수, 성공/실패 수 + - 누적 획득 골드 + - 최고 보상 + - 레어도별 포획 수 + - 마지막 낚시 시각 +- `FishingService`에 프로필 저장 로직 추가 + - 성공 시 보상과 레어도별 포획 수 누적 + - 실패 시 실패 횟수 누적 + - 모든 세션 종료 시 총 시도 수와 마지막 낚시 시각 갱신 +- `/fishing status` 서브커맨드 추가 + - 본인 또는 지정 유저의 낚시 통계 조회 + - 총 시도, 성공률, 누적 골드, 최고 보상, 마지막 낚시 시각 표시 + - 레어도별 포획 수를 별도 필드로 표시 +- 낚시 i18n 문자열 추가 + - 통계 Embed 제목/필드명/빈 기록 메시지 + +## 검증 + +- `yarn prisma generate` +- `yarn prisma migrate deploy` +- `yarn build` +- `yarn test --runInBand` + +모든 단계가 정상 통과했다. + +## 비고 + +- `FishingProfile`은 현재 낚시 진행 통계 전용 모델이다. +- 이후 랭킹, 도감, 업적, 장비 시스템은 이 프로필을 기반으로 확장할 수 있다. diff --git a/Docs/WorkDone/2026-04-07_Fishing_Size_Ranking_Implementation.md b/Docs/WorkDone/2026-04-07_Fishing_Size_Ranking_Implementation.md new file mode 100644 index 0000000..267a19e --- /dev/null +++ b/Docs/WorkDone/2026-04-07_Fishing_Size_Ranking_Implementation.md @@ -0,0 +1,26 @@ +# 2026-04-07: 낚시 크기 랭킹 구현 + +## 개요 + +낚시 시스템에 `/fishing ranking` 명령을 추가해, 서버 내 최고 물고기 크기 기록 상위 10개를 조회할 수 있도록 구현했습니다. + +랭킹은 `FishingCollectionEntry`에 저장된 각 유저의 물고기별 최고 크기 기록을 기준으로 정렬하며, 각 항목에는 아래 정보가 포함됩니다. + +- 유저 +- 물고기 종류 +- 최고 레어도 +- 최고 크기(cm) + +## 구현 내용 + +- `/fishing ranking` 서브커맨드 추가 +- 길드 기준 최고 크기 기록 Top 10 조회 서비스 추가 +- 같은 크기일 경우 최고 레어도, 포획 횟수 순으로 정렬 +- 랭킹이 비어 있을 때의 안내 메시지 추가 +- 낚시 기획서에 랭킹 항목 반영 + +## 사용자 확인 포인트 + +- `/fishing ranking` 실행 시 서버 기준 상위 10개 기록이 표시되는지 +- 각 항목에 유저, 물고기, 레어도, 크기가 함께 보이는지 +- 기록이 없는 서버에서는 빈 상태 안내가 표시되는지 diff --git a/Docs/index.md b/Docs/index.md index e89dc24..b2f45be 100644 --- a/Docs/index.md +++ b/Docs/index.md @@ -15,6 +15,7 @@ ## 기능 명세 (Features) - [임시 음성 채널 자동화 (Temp Voice Channels)](Features/temp_voice_channels.md) +- [Graphify 설정 및 연동 가이드 (Graphify Setup Guide)](Features/Graphify_Setup_Guide.md) ## 기획서 (Plans) @@ -63,3 +64,6 @@ - [2026-03-30: 미니게임 시스템 및 재련 게임 구현 (Mini-Game System & Refinement Implementation)](WorkDone/2026-03-30_RefinementImplementation.md) - [2026-03-31: 낚시 미니게임 Phase 1 구현 (Fishing Mini-Game Phase 1 Implementation)](WorkDone/2026-03-31_Fishing_MiniGame_Phase1_Implementation.md) - [2026-03-31: 낚시 미니게임 Phase 1 완료 (Fishing Mini-Game Phase 1 Completion)](WorkDone/2026-03-31_Fishing_MiniGame_Phase1_Completion.md) +- [2026-04-07: 낚시 미니게임 Phase 2 구현 (Fishing Mini-Game Phase 2 Implementation)](WorkDone/2026-04-07_Fishing_MiniGame_Phase2_Implementation.md) +- [2026-04-07: 낚시 도감 및 크기 시스템 구현 (Fishing Dex and Size Implementation)](WorkDone/2026-04-07_Fishing_Dex_And_Size_Implementation.md) +- [2026-04-07: 낚시 크기 랭킹 구현 (Fishing Size Ranking Implementation)](WorkDone/2026-04-07_Fishing_Size_Ranking_Implementation.md) diff --git a/README.md b/README.md index e26aa43..f9aa12b 100644 --- a/README.md +++ b/README.md @@ -58,7 +58,8 @@ Kord는 Discord 서버 관리를 돕는 강력하고 유연한 다기능 봇입 1. **빌드**: `yarn build` 2. **실행**: `yarn start` -3. **Docker**: `docker-compose up -d`를 통해 전체 스택(Bot, DB)을 실행할 수 있습니다. +3. **Docker**: `docker-compose up -d`를 통해 PostgreSQL 등 로컬 인프라를 실행할 수 있습니다. + ## 5. 기능 목록 (Feature List) diff --git a/SKILL.md b/SKILL.md new file mode 100644 index 0000000..a54d170 --- /dev/null +++ b/SKILL.md @@ -0,0 +1,855 @@ +--- +name: graphify +description: any input (code, docs, papers, images) → knowledge graph → clustered communities → HTML + JSON + audit report +trigger: /graphify +--- + +# /graphify + +Turn any folder of files into a navigable knowledge graph with community detection, an honest audit trail, and three outputs: interactive HTML, GraphRAG-ready JSON, and a plain-language GRAPH_REPORT.md. + +## Usage + +``` +/graphify # full pipeline on current directory → Obsidian vault +/graphify # full pipeline on specific path +/graphify --mode deep # thorough extraction, richer INFERRED edges +/graphify --update # incremental - re-extract only new/changed files +/graphify --cluster-only # rerun clustering on existing graph +/graphify --no-viz # skip visualization, just report + JSON +/graphify --html # (HTML is generated by default - this flag is a no-op) +/graphify --svg # also export graph.svg (embeds in Notion, GitHub) +/graphify --graphml # export graph.graphml (Gephi, yEd) +/graphify --neo4j # generate graphify-out/cypher.txt for Neo4j +/graphify --neo4j-push bolt://localhost:7687 # push directly to Neo4j +/graphify --mcp # start MCP stdio server for agent access +/graphify --watch # watch folder, auto-rebuild on code changes (no LLM needed) +/graphify --wiki # build agent-crawlable wiki (index.md + one article per community) +/graphify --obsidian --obsidian-dir ~/vaults/my-project # write vault to custom path (e.g. existing vault) +/graphify add # fetch URL, save to ./raw, update graph +/graphify add --author "Name" # tag who wrote it +/graphify add --contributor "Name" # tag who added it to the corpus +/graphify query "" # BFS traversal - broad context +/graphify query "" --dfs # DFS - trace a specific path +/graphify query "" --budget 1500 # cap answer at N tokens +/graphify path "AuthModule" "Database" # shortest path between two concepts +/graphify explain "SwinTransformer" # plain-language explanation of a node +/graphify --ollama # use local Ollama for semantic extraction +/graphify --ollama --model gemma4 # use specific Ollama model (default: llama3) +``` + +## What graphify is for + +graphify is built around Andrej Karpathy's /raw folder workflow: drop anything into a folder - papers, tweets, screenshots, code, notes - and get a structured knowledge graph that shows you what you didn't know was connected. + +Three things it does that Claude alone cannot: +1. **Persistent graph** - relationships are stored in `graphify-out/graph.json` and survive across sessions. Ask questions weeks later without re-reading everything. +2. **Honest audit trail** - every edge is tagged EXTRACTED, INFERRED, or AMBIGUOUS. You know what was found vs invented. +3. **Cross-document surprise** - community detection finds connections between concepts in different files that you would never think to ask about directly. + +Use it for: +- A codebase you're new to (understand architecture before touching anything) +- A reading list (papers + tweets + notes → one navigable graph) +- A research corpus (citation graph + concept graph in one) +- Your personal /raw folder (drop everything in, let it grow, query it) + +## What You Must Do When Invoked + +If no path was given, use `.` (current directory). Do not ask the user for a path. + +Follow these steps in order. Do not skip steps. + +### Step 1 - Ensure graphify is installed + +```bash +# Detect the correct Python interpreter (handles pipx, venv, system installs) +GRAPHIFY_BIN=$(which graphify 2>/dev/null) +if [ -n "$GRAPHIFY_BIN" ]; then + PYTHON=$(head -1 "$GRAPHIFY_BIN" | tr -d '#!') +else + PYTHON="python3" +fi +$PYTHON -c "import graphify" 2>/dev/null || pip install graphifyy -q --break-system-packages 2>&1 | tail -3 +# Write interpreter path for all subsequent steps +$PYTHON -c "import sys; open('.graphify_python', 'w').write(sys.executable)" + +# Check Ollama connectivity +OLLAMA_UP=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:11434/api/tags 2>/dev/null) +if [ "$OLLAMA_UP" = "200" ]; then + echo "Ollama: CONNECTED" + $PYTHON -c "import json; print(json.dumps([m['name'] for m in json.loads(open('.ollama_tags.json').read()).get('models', [])]))" > .ollama_models.json 2>/dev/null || (curl -s http://localhost:11434/api/tags > .ollama_tags.json && $PYTHON -c "import json; print(json.dumps([m['name'] for m in json.loads(open('.ollama_tags.json').read()).get('models', [])]))" > .ollama_models.json && rm .ollama_tags.json) +else + echo "Ollama: DISCONNECTED" + rm -f .ollama_models.json +fi +``` + +If the import succeeds, print nothing and move straight to Step 2. + +**In every subsequent bash block, replace `python3` with `$(cat .graphify_python)` to use the correct interpreter.** + +### Step 2 - Detect files + +```bash +$(cat .graphify_python) -c " +import json +from graphify.detect import detect +from pathlib import Path +result = detect(Path('INPUT_PATH')) +print(json.dumps(result)) +" > .graphify_detect.json +``` + +Replace INPUT_PATH with the actual path the user provided. Do NOT cat or print the JSON - read it silently and present a clean summary instead: + +``` +Corpus: X files · ~Y words + code: N files (.py .ts .go ...) + docs: N files (.md .txt ...) + papers: N files (.pdf ...) + images: N files +``` + +Then act on it: +- If `total_files` is 0: stop with "No supported files found in [path]." +- If `skipped_sensitive` is non-empty: mention file count skipped, not the file names. +- If `total_words` > 2,000,000 OR `total_files` > 200: show the warning and the top 5 subdirectories by file count, then ask which subfolder to run on. Wait for the user's answer before proceeding. +- Otherwise: proceed directly to Step 3 - no need to ask anything. + +### Step 3 - Extract entities and relationships + +**Before starting:** note whether `--mode deep` was given. You must pass `DEEP_MODE=true` to every subagent in Step B2 if it was. Track this from the original invocation - do not lose it. + +This step has two parts: **structural extraction** (deterministic, free) and **semantic extraction** (Claude, costs tokens). + +**Run Part A (AST) and Part B (semantic) in parallel. Dispatch all semantic subagents AND start AST extraction in the same message. Both can run simultaneously since they operate on different file types. Merge results in Part C as before.** + +Note: Parallelizing AST + semantic saves 5-15s on large corpora. AST is deterministic and fast; start it while subagents are processing docs/papers. + +#### Part A - Structural extraction for code files + +For any code files detected, run AST extraction in parallel with Part B subagents: + +```bash +$(cat .graphify_python) -c " +import sys, json +from graphify.extract import collect_files, extract +from pathlib import Path +import json + +code_files = [] +detect = json.loads(Path('.graphify_detect.json').read_text()) +for f in detect.get('files', {}).get('code', []): + code_files.extend(collect_files(Path(f)) if Path(f).is_dir() else [Path(f)]) + +if code_files: + result = extract(code_files) + Path('.graphify_ast.json').write_text(json.dumps(result, indent=2)) + print(f'AST: {len(result[\"nodes\"])} nodes, {len(result[\"edges\"])} edges') +else: + Path('.graphify_ast.json').write_text(json.dumps({'nodes':[],'edges':[],'input_tokens':0,'output_tokens':0})) + print('No code files - skipping AST extraction') +" +``` + +#### Part B - Semantic extraction (parallel subagents or local LLM) + +**Fast path:** If detection found zero docs, papers, and images (code-only corpus), skip Part B entirely and go straight to Part C. AST handles code - there is nothing for semantic subagents to do. + +**Ollama Choice:** If Ollama is CONNECTED (check `.ollama_models.json`) AND `--ollama` was given: +Run semantic extraction locally for each chunk of files. + +```bash +$(cat .graphify_python) -c " +import json +from graphify.semantic_llm import extract_semantic +from pathlib import Path + +uncached = Path('.graphify_uncached.txt').read_text().splitlines() +# Split into chunks of 15 files (local models are slower) +chunks = [uncached[i:i + 15] for i in range(0, len(uncached), 15)] +all_results = {'nodes': [], 'edges': [], 'hyperedges': [], 'input_tokens': 0, 'output_tokens': 0} + +model = 'MODEL_NAME' # Use --model value or 'llama3' or first found in .ollama_models.json +deep = DEEP_MODE_VAR # True if --mode deep + +for i, chunk in enumerate(chunks): + print(f'Local Extraction: chunk {i+1}/{len(chunks)} ({len(chunk)} files)...') + res = extract_semantic(chunk, model=model, deep_mode=deep) + all_results['nodes'].extend(res.get('nodes', [])) + all_results['edges'].extend(res.get('edges', [])) + all_results['hyperedges'].extend(res.get('hyperedges', [])) + +Path('.graphify_semantic_new.json').write_text(json.dumps(all_results, indent=2)) +" +``` + +**Otherwise (Cloud Model - DEFAULT):** +**MANDATORY: You MUST use the Agent tool here. Reading files yourself one-by-one is forbidden - it is 5-10x slower. If you do not use the Agent tool you are doing this wrong.** + +Before dispatching subagents, print a timing estimate: +- Load `total_words` and file counts from `.graphify_detect.json` +- Estimate agents needed: `ceil(uncached_non_code_files / 22)` (chunk size is 20-25) +- Estimate time: ~45s per agent batch (they run in parallel, so total ≈ 45s × ceil(agents/parallel_limit)) +- Print: "Semantic extraction: ~N files → X agents, estimated ~Ys" + +**Step B0 - Check extraction cache first** + +Before dispatching any subagents, check which files already have cached extraction results: + +```bash +$(cat .graphify_python) -c " +import json +from graphify.cache import check_semantic_cache +from pathlib import Path + +detect = json.loads(Path('.graphify_detect.json').read_text()) +all_files = [f for files in detect['files'].values() for f in files] + +cached_nodes, cached_edges, cached_hyperedges, uncached = check_semantic_cache(all_files) + +if cached_nodes or cached_edges or cached_hyperedges: + Path('.graphify_cached.json').write_text(json.dumps({'nodes': cached_nodes, 'edges': cached_edges, 'hyperedges': cached_hyperedges})) +Path('.graphify_uncached.txt').write_text('\n'.join(uncached)) +print(f'Cache: {len(all_files)-len(uncached)} files hit, {len(uncached)} files need extraction') +" +``` + +Only dispatch subagents for files listed in `.graphify_uncached.txt`. If all files are cached, skip to Part C directly. + +**Step B1 - Split into chunks** + +Load files from `.graphify_uncached.txt`. Split into chunks of 20-25 files each. Each image gets its own chunk (vision needs separate context). + +**Step B2 - Dispatch ALL subagents in a single message** + +Call the Agent tool multiple times IN THE SAME RESPONSE - one call per chunk. This is the only way they run in parallel. If you make one Agent call, wait, then make another, you are doing it sequentially and defeating the purpose. + +Concrete example for 3 chunks: +``` +[Agent tool call 1: files 1-15] +[Agent tool call 2: files 16-30] +[Agent tool call 3: files 31-45] +``` +All three in one message. Not three separate messages. + +Each subagent receives this exact prompt (substitute FILE_LIST, CHUNK_NUM, TOTAL_CHUNKS, and DEEP_MODE): + +``` +You are a graphify extraction subagent. Read the files listed and extract a knowledge graph fragment. +Output ONLY valid JSON matching the schema below - no explanation, no markdown fences, no preamble. + +Files (chunk CHUNK_NUM of TOTAL_CHUNKS): +FILE_LIST + +Rules: +- EXTRACTED: relationship explicit in source (import, call, citation, "see §3.2") +- INFERRED: reasonable inference (shared data structure, implied dependency) +- AMBIGUOUS: uncertain - flag for review, do not omit + +Code files: focus on semantic edges AST cannot find (call relationships, shared data, arch patterns). + Do not re-extract imports - AST already has those. +Doc/paper files: extract named concepts, entities, citations. Also extract rationale — sections that explain WHY a decision was made, trade-offs chosen, or design intent. These become nodes with `rationale_for` edges pointing to the concept they explain. +Image files: use vision to understand what the image IS - do not just OCR. + UI screenshot: layout patterns, design decisions, key elements, purpose. + Chart: metric, trend/insight, data source. + Tweet/post: claim as node, author, concepts mentioned. + Diagram: components and connections. + Research figure: what it demonstrates, method, result. + Handwritten/whiteboard: ideas and arrows, mark uncertain readings AMBIGUOUS. + +DEEP_MODE (if --mode deep was given): be aggressive with INFERRED edges - indirect deps, + shared assumptions, latent couplings. Mark uncertain ones AMBIGUOUS instead of omitting. + +Semantic similarity: if two concepts in this chunk solve the same problem or represent the same idea without any structural link (no import, no call, no citation), add a `semantically_similar_to` edge marked INFERRED with a confidence_score reflecting how similar they are (0.6-0.95). Examples: +- Two functions that both validate user input but never call each other +- A class in code and a concept in a paper that describe the same algorithm +- Two error types that handle the same failure mode differently +Only add these when the similarity is genuinely non-obvious and cross-cutting. Do not add them for trivially similar things. + +Hyperedges: if 3 or more nodes clearly participate together in a shared concept, flow, or pattern that is not captured by pairwise edges alone, add a hyperedge to a top-level `hyperedges` array. Examples: +- All classes that implement a common protocol or interface +- All functions in an authentication flow (even if they don't all call each other) +- All concepts from a paper section that form one coherent idea +Use sparingly — only when the group relationship adds information beyond the pairwise edges. Maximum 3 hyperedges per chunk. + +If a file has YAML frontmatter (--- ... ---), copy source_url, captured_at, author, + contributor onto every node from that file. + +confidence_score is REQUIRED on every edge - never omit it, never use 0.5 as a default: +- EXTRACTED edges: confidence_score = 1.0 always +- INFERRED edges: reason about each edge individually. + Direct structural evidence (shared data structure, clear dependency): 0.8-0.9. + Reasonable inference with some uncertainty: 0.6-0.7. + Weak or speculative: 0.4-0.5. Most edges should be 0.6-0.9, not 0.5. +- AMBIGUOUS edges: 0.1-0.3 + +Output exactly this JSON (no other text): +{"nodes":[{"id":"filestem_entityname","label":"Human Readable Name","file_type":"code|document|paper|image","source_file":"relative/path","source_location":null,"source_url":null,"captured_at":null,"author":null,"contributor":null}],"edges":[{"source":"node_id","target":"node_id","relation":"calls|implements|references|cites|conceptually_related_to|shares_data_with|semantically_similar_to|rationale_for","confidence":"EXTRACTED|INFERRED|AMBIGUOUS","confidence_score":1.0,"source_file":"relative/path","source_location":null,"weight":1.0}],"hyperedges":[{"id":"snake_case_id","label":"Human Readable Label","nodes":["node_id1","node_id2","node_id3"],"relation":"participate_in|implement|form","confidence":"EXTRACTED|INFERRED","confidence_score":0.75,"source_file":"relative/path"}],"input_tokens":0,"output_tokens":0} +``` + +**Step B3 - Collect, cache, and merge** + +Wait for all subagents. For each result: +- If a subagent returned valid JSON with `nodes` and `edges`, include it and save each file's nodes/edges to the cache +- If a subagent failed or returned invalid JSON, print a warning and skip that chunk - do not abort + +If more than half the chunks failed, stop and tell the user. + +Save new results to cache: +```bash +$(cat .graphify_python) -c " +import json +from graphify.cache import save_semantic_cache +from pathlib import Path + +new = json.loads(Path('.graphify_semantic_new.json').read_text()) if Path('.graphify_semantic_new.json').exists() else {'nodes':[],'edges':[],'hyperedges':[]} +saved = save_semantic_cache(new.get('nodes', []), new.get('edges', []), new.get('hyperedges', [])) +print(f'Cached {saved} files') +" +``` + +Merge cached + new results into `.graphify_semantic.json`: +```bash +$(cat .graphify_python) -c " +import json +from pathlib import Path + +cached = json.loads(Path('.graphify_cached.json').read_text()) if Path('.graphify_cached.json').exists() else {'nodes':[],'edges':[],'hyperedges':[]} +new = json.loads(Path('.graphify_semantic_new.json').read_text()) if Path('.graphify_semantic_new.json').exists() else {'nodes':[],'edges':[],'hyperedges':[]} + +all_nodes = cached['nodes'] + new.get('nodes', []) +all_edges = cached['edges'] + new.get('edges', []) +all_hyperedges = cached.get('hyperedges', []) + new.get('hyperedges', []) +seen = set() +deduped = [] +for n in all_nodes: + if n['id'] not in seen: + seen.add(n['id']) + deduped.append(n) + +merged = { + 'nodes': deduped, + 'edges': all_edges, + 'hyperedges': all_hyperedges, + 'input_tokens': new.get('input_tokens', 0), + 'output_tokens': new.get('output_tokens', 0), +} +Path('.graphify_semantic.json').write_text(json.dumps(merged, indent=2)) +print(f'Extraction complete - {len(deduped)} nodes, {len(all_edges)} edges ({len(cached[\"nodes\"])} from cache, {len(new.get(\"nodes\",[]))} new)') +" +``` +Clean up temp files: `rm -f .graphify_cached.json .graphify_uncached.txt .graphify_semantic_new.json` + +#### Part C - Merge AST + semantic into final extraction + +```bash +$(cat .graphify_python) -c " +import sys, json +from pathlib import Path + +ast = json.loads(Path('.graphify_ast.json').read_text()) +sem = json.loads(Path('.graphify_semantic.json').read_text()) + +# Merge: AST nodes first, semantic nodes deduplicated by id +seen = {n['id'] for n in ast['nodes']} +merged_nodes = list(ast['nodes']) +for n in sem['nodes']: + if n['id'] not in seen: + merged_nodes.append(n) + seen.add(n['id']) + +merged_edges = ast['edges'] + sem['edges'] +merged_hyperedges = sem.get('hyperedges', []) +merged = { + 'nodes': merged_nodes, + 'edges': merged_edges, + 'hyperedges': merged_hyperedges, + 'input_tokens': sem.get('input_tokens', 0), + 'output_tokens': sem.get('output_tokens', 0), +} +Path('.graphify_extract.json').write_text(json.dumps(merged, indent=2)) +total = len(merged_nodes) +edges = len(merged_edges) +print(f'Merged: {total} nodes, {edges} edges ({len(ast[\"nodes\"])} AST + {len(sem[\"nodes\"])} semantic)') +" +``` + +### Step 4 - Build graph, cluster, analyze, generate outputs + +```bash +mkdir -p graphify-out +$(cat .graphify_python) -c " +import sys, json +from graphify.build import build_from_json +from graphify.cluster import cluster, score_all +from graphify.analyze import god_nodes, surprising_connections, suggest_questions +from graphify.report import generate +from graphify.export import to_json +from pathlib import Path + +extraction = json.loads(Path('.graphify_extract.json').read_text()) +detection = json.loads(Path('.graphify_detect.json').read_text()) + +G = build_from_json(extraction) +communities = cluster(G) +cohesion = score_all(G, communities) +tokens = {'input': extraction.get('input_tokens', 0), 'output': extraction.get('output_tokens', 0)} +gods = god_nodes(G) +surprises = surprising_connections(G, communities) +labels = {cid: 'Community ' + str(cid) for cid in communities} +# Placeholder questions - regenerated with real labels in Step 5 +questions = suggest_questions(G, communities, labels) + +report = generate(G, communities, cohesion, labels, gods, surprises, detection, tokens, 'INPUT_PATH', suggested_questions=questions) +Path('graphify-out/GRAPH_REPORT.md').write_text(report) +to_json(G, communities, 'graphify-out/graph.json') + +analysis = { + 'communities': {str(k): v for k, v in communities.items()}, + 'cohesion': {str(k): v for k, v in cohesion.items()}, + 'gods': gods, + 'surprises': surprises, + 'questions': questions, +} +Path('.graphify_analysis.json').write_text(json.dumps(analysis, indent=2)) +if G.number_of_nodes() == 0: + print('ERROR: Graph is empty - extraction produced no nodes.') + print('Possible causes: all files were skipped, binary-only corpus, or extraction failed.') + raise SystemExit(1) +print(f'Graph: {G.number_of_nodes()} nodes, {G.number_of_edges()} edges, {len(communities)} communities') +" +``` + +If this step prints `ERROR: Graph is empty`, stop and tell the user what happened - do not proceed to labeling or visualization. + +Replace INPUT_PATH with the actual path. + +### Step 5 - Label communities + +Read `.graphify_analysis.json`. For each community key, look at its node labels and write a 2-5 word plain-language name (e.g. "Attention Mechanism", "Training Pipeline", "Data Loading"). + +Then regenerate the report and save the labels for the visualizer: + +```bash +$(cat .graphify_python) -c " +import sys, json +from graphify.build import build_from_json +from graphify.cluster import score_all +from graphify.analyze import god_nodes, surprising_connections, suggest_questions +from graphify.report import generate +from pathlib import Path + +extraction = json.loads(Path('.graphify_extract.json').read_text()) +detection = json.loads(Path('.graphify_detect.json').read_text()) +analysis = json.loads(Path('.graphify_analysis.json').read_text()) + +G = build_from_json(extraction) +communities = {int(k): v for k, v in analysis['communities'].items()} +cohesion = {int(k): v for k, v in analysis['cohesion'].items()} +tokens = {'input': extraction.get('input_tokens', 0), 'output': extraction.get('output_tokens', 0)} + +# LABELS - replace these with the names you chose above +labels = LABELS_DICT + +# Regenerate questions with real community labels (labels affect question phrasing) +questions = suggest_questions(G, communities, labels) + +report = generate(G, communities, cohesion, labels, analysis['gods'], analysis['surprises'], detection, tokens, 'INPUT_PATH', suggested_questions=questions) +Path('graphify-out/GRAPH_REPORT.md').write_text(report) +Path('.graphify_labels.json').write_text(json.dumps({str(k): v for k, v in labels.items()})) +print('Report updated with community labels') +" +``` + +Replace `LABELS_DICT` with the actual dict you constructed (e.g. `{0: "Attention Mechanism", 1: "Training Pipeline"}`). +Replace INPUT_PATH with the actual path. + +### Step 6 - Generate Obsidian vault (opt-in) + HTML + +**Generate HTML always** (unless `--no-viz`). **Obsidian vault only if `--obsidian` was explicitly given** — skip it otherwise, it generates one file per node. + +If `--obsidian` was given: + +- If `--obsidian-dir ` was also given, use that path as the vault directory. Otherwise default to `graphify-out/obsidian`. + +```bash +$(cat .graphify_python) -c " +import sys, json +from graphify.build import build_from_json +from graphify.export import to_obsidian, to_canvas +from pathlib import Path + +extraction = json.loads(Path('.graphify_extract.json').read_text()) +analysis = json.loads(Path('.graphify_analysis.json').read_text()) +labels_raw = json.loads(Path('.graphify_labels.json').read_text()) if Path('.graphify_labels.json').exists() else {} + +G = build_from_json(extraction) +communities = {int(k): v for k, v in analysis['communities'].items()} +cohesion = {int(k): v for k, v in analysis['cohesion'].items()} +labels = {int(k): v for k, v in labels_raw.items()} + +obsidian_dir = 'OBSIDIAN_DIR' # replace with --obsidian-dir value, or 'graphify-out/obsidian' if not given + +n = to_obsidian(G, communities, obsidian_dir, community_labels=labels or None, cohesion=cohesion) +print(f'Obsidian vault: {n} notes in {obsidian_dir}/') + +to_canvas(G, communities, f'{obsidian_dir}/graph.canvas', community_labels=labels or None) +print(f'Canvas: {obsidian_dir}/graph.canvas - open in Obsidian for structured community layout') +print() +print(f'Open {obsidian_dir}/ as a vault in Obsidian.') +print(' Graph view - nodes colored by community (set automatically)') +print(' graph.canvas - structured layout with communities as groups') +print(' _COMMUNITY_* - overview notes with cohesion scores and dataview queries') +" +``` + +Generate the HTML graph (always, unless `--no-viz`): + +```bash +$(cat .graphify_python) -c " +import sys, json +from graphify.build import build_from_json +from graphify.export import to_html +from pathlib import Path + +extraction = json.loads(Path('.graphify_extract.json').read_text()) +analysis = json.loads(Path('.graphify_analysis.json').read_text()) +labels_raw = json.loads(Path('.graphify_labels.json').read_text()) if Path('.graphify_labels.json').exists() else {} + +G = build_from_json(extraction) +communities = {int(k): v for k, v in analysis['communities'].items()} +labels = {int(k): v for k, v in labels_raw.items()} + +if G.number_of_nodes() > 5000: + print(f'Graph has {G.number_of_nodes()} nodes - too large for HTML viz. Use Obsidian vault instead.') +else: + to_html(G, communities, 'graphify-out/graph.html', community_labels=labels or None) + print('graph.html written - open in any browser, no server needed') +" +``` + +### Step 7 - Neo4j export (only if --neo4j or --neo4j-push flag) + +**If `--neo4j`** - generate a Cypher file for manual import: + +```bash +$(cat .graphify_python) -c " +import sys, json +from graphify.build import build_from_json +from graphify.export import to_cypher +from pathlib import Path + +G = build_from_json(json.loads(Path('.graphify_extract.json').read_text())) +to_cypher(G, 'graphify-out/cypher.txt') +print('cypher.txt written - import with: cypher-shell < graphify-out/cypher.txt') +" +``` + +**If `--neo4j-push `** - push directly to a running Neo4j instance. Ask the user for credentials if not provided: + +```bash +$(cat .graphify_python) -c " +import sys, json +from graphify.build import build_from_json +from graphify.cluster import cluster +from graphify.export import push_to_neo4j +from pathlib import Path + +extraction = json.loads(Path('.graphify_extract.json').read_text()) +analysis = json.loads(Path('.graphify_analysis.json').read_text()) +G = build_from_json(extraction) +communities = {int(k): v for k, v in analysis['communities'].items()} + +result = push_to_neo4j(G, uri='NEO4J_URI', user='NEO4J_USER', password='NEO4J_PASSWORD', communities=communities) +print(f'Pushed to Neo4j: {result[\"nodes\"]} nodes, {result[\"edges\"]} edges') +" +``` + +Replace `NEO4J_URI`, `NEO4J_USER`, `NEO4J_PASSWORD` with actual values. Default URI is `bolt://localhost:7687`, default user is `neo4j`. Uses MERGE - safe to re-run without creating duplicates. + +### Step 7b - SVG export (only if --svg flag) + +```bash +$(cat .graphify_python) -c " +import sys, json +from graphify.build import build_from_json +from graphify.export import to_svg +from pathlib import Path + +extraction = json.loads(Path('.graphify_extract.json').read_text()) +analysis = json.loads(Path('.graphify_analysis.json').read_text()) +labels_raw = json.loads(Path('.graphify_labels.json').read_text()) if Path('.graphify_labels.json').exists() else {} + +G = build_from_json(extraction) +communities = {int(k): v for k, v in analysis['communities'].items()} +labels = {int(k): v for k, v in labels_raw.items()} + +to_svg(G, communities, 'graphify-out/graph.svg', community_labels=labels or None) +print('graph.svg written - embeds in Obsidian, Notion, GitHub READMEs') +" +``` + +### Step 7c - GraphML export (only if --graphml flag) + +```bash +$(cat .graphify_python) -c " +import json +from graphify.build import build_from_json +from graphify.export import to_graphml +from pathlib import Path + +extraction = json.loads(Path('.graphify_extract.json').read_text()) +analysis = json.loads(Path('.graphify_analysis.json').read_text()) + +G = build_from_json(extraction) +communities = {int(k): v for k, v in analysis['communities'].items()} + +to_graphml(G, communities, 'graphify-out/graph.graphml') +print('graph.graphml written - open in Gephi, yEd, or any GraphML tool') +" +``` + +### Step 7d - MCP server (only if --mcp flag) + +```bash +python3 -m graphify.serve graphify-out/graph.json +``` + +This starts a stdio MCP server that exposes tools: `query_graph`, `get_node`, `get_neighbors`, `get_community`, `god_nodes`, `graph_stats`, `shortest_path`. Add to Claude Desktop or any MCP-compatible agent orchestrator so other agents can query the graph live. + +To configure in Claude Desktop, add to `claude_desktop_config.json`: +```json +{ + "mcpServers": { + "graphify": { + "command": "python3", + "args": ["-m", "graphify.serve", "/absolute/path/to/graphify-out/graph.json"] + } + } +} +``` + +### Step 8 - Token reduction benchmark (only if total_words > 5000) + +If `total_words` from `.graphify_detect.json` is greater than 5,000, run: + +```bash +$(cat .graphify_python) -c " +import json +from graphify.benchmark import run_benchmark, print_benchmark +from pathlib import Path + +detection = json.loads(Path('.graphify_detect.json').read_text()) +result = run_benchmark('graphify-out/graph.json', corpus_words=detection['total_words']) +print_benchmark(result) +" +``` + +Print the output directly in chat. If `total_words <= 5000`, skip silently - the graph value is structural clarity, not token compression, for small corpora. + +--- + +### Step 9 - Save manifest, update cost tracker, clean up, and report + +```bash +$(cat .graphify_python) -c " +import json +from pathlib import Path +from datetime import datetime, timezone +from graphify.detect import save_manifest + +# Save manifest for --update +detect = json.loads(Path('.graphify_detect.json').read_text()) +save_manifest(detect['files']) + +# Update cumulative cost tracker +extract = json.loads(Path('.graphify_extract.json').read_text()) +input_tok = extract.get('input_tokens', 0) +output_tok = extract.get('output_tokens', 0) + +cost_path = Path('graphify-out/cost.json') +if cost_path.exists(): + cost = json.loads(cost_path.read_text()) +else: + cost = {'runs': [], 'total_input_tokens': 0, 'total_output_tokens': 0} + +cost['runs'].append({ + 'date': datetime.now(timezone.utc).isoformat(), + 'input_tokens': input_tok, + 'output_tokens': output_tok, + 'files': detect.get('total_files', 0), +}) +cost['total_input_tokens'] += input_tok +cost['total_output_tokens'] += output_tok +cost_path.write_text(json.dumps(cost, indent=2)) + +print(f'This run: {input_tok:,} input tokens, {output_tok:,} output tokens') +print(f'All time: {cost[\"total_input_tokens\"]:,} input, {cost[\"total_output_tokens\"]:,} output ({len(cost[\"runs\"])} runs)') +" +rm -f .graphify_detect.json .graphify_extract.json .graphify_ast.json .graphify_semantic.json .graphify_analysis.json .graphify_labels.json .graphify_python +rm -f graphify-out/.needs_update 2>/dev/null || true +``` + +Tell the user (omit the obsidian line unless --obsidian was given): +``` +Graph complete. Outputs in PATH_TO_DIR/graphify-out/ + + graph.html - interactive graph, open in browser + GRAPH_REPORT.md - audit report + graph.json - raw graph data + obsidian/ - Obsidian vault (only if --obsidian was given) +``` + +Replace PATH_TO_DIR with the actual absolute path of the directory that was processed. + +Then paste these sections from GRAPH_REPORT.md directly into the chat: +- God Nodes +- Surprising Connections +- Suggested Questions + +Do NOT paste the full report - just those three sections. Keep it concise. + +Then immediately offer to explore. Pick the single most interesting suggested question from the report - the one that crosses the most community boundaries or has the most surprising bridge node - and ask: + +> "The most interesting question this graph can answer: **[question]**. Want me to trace it?" + +If the user says yes, run `/graphify query "[question]"` on the graph and walk them through the answer using the graph structure - which nodes connect, which community boundaries get crossed, what the path reveals. Keep going as long as they want to explore. Each answer should end with a natural follow-up ("this connects to X - want to go deeper?") so the session feels like navigation, not a one-shot report. + +The graph is the map. Your job after the pipeline is to be the guide. + +--- + +## For --update (incremental re-extraction) + +Use when you've added or modified files since the last run. Only re-extracts changed files - saves tokens and time. + +```bash +$(cat .graphify_python) -c " +import sys, json +from graphify.detect import detect_incremental, save_manifest +from pathlib import Path + +result = detect_incremental(Path('INPUT_PATH')) +new_total = result.get('new_total', 0) +print(json.dumps(result, indent=2)) +Path('.graphify_incremental.json').write_text(json.dumps(result)) +if new_total == 0: + print('No files changed since last run. Nothing to update.') + raise SystemExit(0) +print(f'{new_total} new/changed file(s) to re-extract.') +" +``` + +If new files exist, first check whether all changed files are code files: + +```bash +$(cat .graphify_python) -c " +import json +from pathlib import Path + +result = json.loads(open('.graphify_incremental.json').read()) if Path('.graphify_incremental.json').exists() else {} +code_exts = {'.py','.ts','.js','.go','.rs','.java','.cpp','.c','.rb','.swift','.kt','.cs','.scala','.php','.cc','.cxx','.hpp','.h','.kts','.lua','.toc'} +new_files = result.get('new_files', {}) +all_changed = [f for files in new_files.values() for f in files] +code_only = all(Path(f).suffix.lower() in code_exts for f in all_changed) +print('code_only:', code_only) +" +``` + +If `code_only` is True: print `[graphify update] Code-only changes detected - skipping semantic extraction (no LLM needed)`, run only Step 3A (AST) on the changed files, skip Step 3B entirely (no subagents), then go straight to merge and Steps 4–8. + +If `code_only` is False (any changed file is a doc/paper/image): run the full Steps 3A–3C pipeline as normal. + +Then: + +```bash +$(cat .graphify_python) -c " +import sys, json +from graphify.build import build_from_json +from graphify.export import to_json +from networkx.readwrite import json_graph +import networkx as nx +from pathlib import Path + +# Load existing graph +existing_data = json.loads(Path('graphify-out/graph.json').read_text()) +G_existing = json_graph.node_link_graph(existing_data, edges='links') + +# Load new extraction +new_extraction = json.loads(Path('.graphify_extract.json').read_text()) +G_new = build_from_json(new_extraction) + +# Merge: new nodes/edges into existing graph +G_existing.update(G_new) +print(f'Merged: {G_existing.number_of_nodes()} nodes, {G_existing.number_of_edges()} edges') +" +``` + +Then run Steps 4–8 on the merged graph as normal. + +After Step 4, show the graph diff: + +```bash +$(cat .graphify_python) -c " +import json +from graphify.analyze import graph_diff +from graphify.build import build_from_json +from networkx.readwrite import json_graph +import networkx as nx +from pathlib import Path + +# Load old graph (before update) from backup written before merge +old_data = json.loads(Path('.graphify_old.json').read_text()) if Path('.graphify_old.json').exists() else None +new_extract = json.loads(Path('.graphify_extract.json').read_text()) +G_new = build_from_json(new_extract) + +if old_data: + G_old = json_graph.node_link_graph(old_data, edges='links') + diff = graph_diff(G_old, G_new) + print(diff['summary']) + if diff['new_nodes']: + print('New nodes:', ', '.join(n['label'] for n in diff['new_nodes'][:5])) + if diff['new_edges']: + print('New edges:', len(diff['new_edges'])) +" +``` + +Before the merge step, save the old graph: `cp graphify-out/graph.json .graphify_old.json` +Clean up after: `rm -f .graphify_old.json` + +--- + +## For --cluster-only + +Skip Steps 1–3. Load the existing graph from `graphify-out/graph.json` and re-run clustering: + +```bash +$(cat .graphify_python) -c " +import sys, json +from graphify.cluster import cluster, score_all +from graphify.analyze import god_nodes, surprising_connections +from graphify.report import generate +from graphify.export import to_json +from networkx.readwrite import json_graph +import networkx as nx +from pathlib import Path + +data = json.loads(Path('graphify-out/graph.json').read_text()) +G = json_graph.node_link_graph(data, edges='links') + +detection = {'total_files': 0, 'total_words': 99999, 'needs_graph': True, 'warning': None, 'files': {}} + +communities = cluster(G) +cohesion = score_all(G, communities) +gods = god_nodes(G) +surprises = surprising_connections(G, communities) +labels = {cid: 'Community ' + str(cid) for cid in communities} +report = generate(G, communities, cohesion, labels, gods, surprises, detection, {'input':0,'output':0}, 'INPUT_PATH') +Path('graphify-out/GRAPH_REPORT.md').write_text(report) +to_json(G, communities, 'graphify-out/graph.json') +print(f'Re-clustered: {len(communities)} communities') +" +``` + +Then proceed to Step 5 (Labeling) as normal. diff --git a/graphify-out/GRAPH_REPORT.md b/graphify-out/GRAPH_REPORT.md new file mode 100644 index 0000000..3dc6712 --- /dev/null +++ b/graphify-out/GRAPH_REPORT.md @@ -0,0 +1,181 @@ +# Graph Report - . (2026-04-09) + +## Corpus Check +- 124 files · ~92,302 words +- Verdict: corpus is large enough that graph structure adds value. + +## Summary +- 316 nodes · 549 edges · 29 communities detected +- Extraction: 64% EXTRACTED · 36% INFERRED · 0% AMBIGUOUS · INFERRED: 197 edges (avg confidence: 0.5) +- Token cost: 0 input · 0 output + +## God Nodes (most connected - your core abstractions) +1. `FishingService` - 55 edges +2. `MusicService` - 38 edges +3. `RefinementService` - 13 edges +4. `VoiceService` - 8 edges +5. `PermissionAuditService` - 7 edges +6. `execute()` - 6 edges +7. `InviteService` - 6 edges +8. `AuditLogService` - 6 edges +9. `EventService` - 6 edges +10. `buildEventEmbed()` - 5 edges + +## Surprising Connections (you probably didn't know these) +- None detected - all connections are within the same source files. + +## Communities + +### Community 0 - "Community 0" +Cohesion: 0.05 +Nodes (6): ActivityTrackerService, buildEventEmbed(), EventService, resolveAnnouncementChannel(), toDiscordTimestamps(), KordClient + +### Community 1 - "Community 1" +Cohesion: 0.08 +Nodes (1): FishingService + +### Community 2 - "Community 2" +Cohesion: 0.11 +Nodes (6): extractYouTubeVideoId(), formatDuration(), isYouTubePlaylistUrl(), MusicService, parseDurationSeconds(), parseDurationTextToSeconds() + +### Community 3 - "Community 3" +Cohesion: 0.14 +Nodes (5): getNestedValue(), normalizeDiscordLocale(), resolveLocale(), StaticI18nProvider, t() + +### Community 4 - "Community 4" +Cohesion: 0.15 +Nodes (3): BotError, ErrorReporter, withErrorHandler() + +### Community 5 - "Community 5" +Cohesion: 0.16 +Nodes (4): execute(), getOverallColor(), PermissionAuditService, SetupWizardRenderer + +### Community 6 - "Community 6" +Cohesion: 0.37 +Nodes (1): RefinementService + +### Community 7 - "Community 7" +Cohesion: 0.18 +Nodes (3): BigEmojiService, MimicService, WebhookService + +### Community 8 - "Community 8" +Cohesion: 0.36 +Nodes (9): Fishing Game Backend Logic, Authentication/Authorization Layer, Database Schema Design (User/Item), Frontend Game Client (React/Unity), Payment Gateway Integration (Stripe/PayPal), Real-time Communication (WebSockets), Game State Management (Session/Persistence), Analytics/Telemetry Tracking (+1 more) + +### Community 9 - "Community 9" +Cohesion: 0.46 +Nodes (1): VoiceService + +### Community 10 - "Community 10" +Cohesion: 0.52 +Nodes (6): buildStatusLabel(), execute(), formatReminderOffsets(), parseReminderOffsets(), parseSeoulDateTime(), toDiscordTimestamps() + +### Community 11 - "Community 11" +Cohesion: 0.33 +Nodes (2): buildFishingGauge(), buildFishingLane() + +### Community 12 - "Community 12" +Cohesion: 0.6 +Nodes (1): InviteService + +### Community 13 - "Community 13" +Cohesion: 0.47 +Nodes (1): AuditLogService + +### Community 14 - "Community 14" +Cohesion: 0.4 +Nodes (0): + +### Community 15 - "Community 15" +Cohesion: 0.4 +Nodes (0): + +### Community 16 - "Community 16" +Cohesion: 0.83 +Nodes (3): buildErrorMessage(), execute(), respond() + +### Community 17 - "Community 17" +Cohesion: 0.5 +Nodes (1): FeverService + +### Community 18 - "Community 18" +Cohesion: 0.67 +Nodes (1): PresenceService + +### Community 19 - "Community 19" +Cohesion: 1.0 +Nodes (0): + +### Community 20 - "Community 20" +Cohesion: 1.0 +Nodes (2): main.ts, config.ts + +### Community 21 - "Community 21" +Cohesion: 1.0 +Nodes (1): FishingGameConcept + +### Community 22 - "Community 22" +Cohesion: 1.0 +Nodes (0): + +### Community 23 - "Community 23" +Cohesion: 1.0 +Nodes (0): + +### Community 24 - "Community 24" +Cohesion: 1.0 +Nodes (1): Gemma 4 Response + +### Community 25 - "Community 25" +Cohesion: 1.0 +Nodes (1): Tool Use Concept + +### Community 26 - "Community 26" +Cohesion: 1.0 +Nodes (1): Capability Summary + +### Community 27 - "Community 27" +Cohesion: 1.0 +Nodes (1): db.ts + +### Community 28 - "Community 28" +Cohesion: 1.0 +Nodes (1): logger.ts + +## Knowledge Gaps +- **Thin community `Community 19`** (2 nodes): `language.ts`, `execute()` + Too small to be a meaningful cluster - may be noise or needs more connections extracted. +- **Thin community `Community 20`** (2 nodes): `main.ts`, `config.ts` + Too small to be a meaningful cluster - may be noise or needs more connections extracted. +- **Thin community `Community 21`** (1 nodes): `FishingGameConcept` + Too small to be a meaningful cluster - may be noise or needs more connections extracted. +- **Thin community `Community 22`** (1 nodes): `jest.config.js` + Too small to be a meaningful cluster - may be noise or needs more connections extracted. +- **Thin community `Community 23`** (1 nodes): `i18n.test.ts` + Too small to be a meaningful cluster - may be noise or needs more connections extracted. +- **Thin community `Community 24`** (1 nodes): `Gemma 4 Response` + Too small to be a meaningful cluster - may be noise or needs more connections extracted. +- **Thin community `Community 25`** (1 nodes): `Tool Use Concept` + Too small to be a meaningful cluster - may be noise or needs more connections extracted. +- **Thin community `Community 26`** (1 nodes): `Capability Summary` + Too small to be a meaningful cluster - may be noise or needs more connections extracted. +- **Thin community `Community 27`** (1 nodes): `db.ts` + Too small to be a meaningful cluster - may be noise or needs more connections extracted. +- **Thin community `Community 28`** (1 nodes): `logger.ts` + Too small to be a meaningful cluster - may be noise or needs more connections extracted. + +## Suggested Questions +_Questions this graph is uniquely positioned to answer:_ + +- **Why does `FishingService` connect `Community 1` to `Community 11`?** + _High betweenness centrality (0.272) - this node is a cross-community bridge._ +- **Why does `RefinementService` connect `Community 6` to `Community 0`?** + _High betweenness centrality (0.067) - this node is a cross-community bridge._ +- **Should `Community 0` be split into smaller, more focused modules?** + _Cohesion score 0.05 - nodes in this community are weakly interconnected._ +- **Should `Community 1` be split into smaller, more focused modules?** + _Cohesion score 0.08 - nodes in this community are weakly interconnected._ +- **Should `Community 2` be split into smaller, more focused modules?** + _Cohesion score 0.11 - nodes in this community are weakly interconnected._ +- **Should `Community 3` be split into smaller, more focused modules?** + _Cohesion score 0.14 - nodes in this community are weakly interconnected._ \ No newline at end of file diff --git a/graphify-out/cache/00a2cd4cc7c2d18e3c20321b450b5fc2cd486be94971106e6219ab65ce5be3de.json b/graphify-out/cache/00a2cd4cc7c2d18e3c20321b450b5fc2cd486be94971106e6219ab65ce5be3de.json new file mode 100644 index 0000000..72e5c02 --- /dev/null +++ b/graphify-out/cache/00a2cd4cc7c2d18e3c20321b450b5fc2cd486be94971106e6219ab65ce5be3de.json @@ -0,0 +1 @@ +{"nodes": [{"id": "invitedelete", "label": "inviteDelete.ts", "file_type": "code", "source_file": "src/events/inviteDelete.ts", "source_location": "L1"}, {"id": "invitedelete_execute", "label": "execute()", "file_type": "code", "source_file": "src/events/inviteDelete.ts", "source_location": "L7"}], "edges": [{"source": "invitedelete", "target": "discord_js", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/events/inviteDelete.ts", "source_location": "L1", "weight": 1.0}, {"source": "invitedelete", "target": "inviteservice", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/events/inviteDelete.ts", "source_location": "L2", "weight": 1.0}, {"source": "invitedelete", "target": "invitedelete_execute", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/events/inviteDelete.ts", "source_location": "L7", "weight": 1.0}]} \ No newline at end of file diff --git a/graphify-out/cache/00f4acf38399e006ae7b0ed0fa3124e1b4a914e41eaa46f3afdb191ec837e977.json b/graphify-out/cache/00f4acf38399e006ae7b0ed0fa3124e1b4a914e41eaa46f3afdb191ec837e977.json new file mode 100644 index 0000000..88afdf7 --- /dev/null +++ b/graphify-out/cache/00f4acf38399e006ae7b0ed0fa3124e1b4a914e41eaa46f3afdb191ec837e977.json @@ -0,0 +1 @@ +{"nodes": [{"id": "kordclient", "label": "KordClient.ts", "file_type": "code", "source_file": "src/client/KordClient.ts", "source_location": "L1"}, {"id": "kordclient_kordclient", "label": "KordClient", "file_type": "code", "source_file": "src/client/KordClient.ts", "source_location": "L10"}, {"id": "kordclient_kordclient_constructor", "label": ".constructor()", "file_type": "code", "source_file": "src/client/KordClient.ts", "source_location": "L13"}, {"id": "kordclient_kordclient_start", "label": ".start()", "file_type": "code", "source_file": "src/client/KordClient.ts", "source_location": "L26"}], "edges": [{"source": "kordclient", "target": "discord_js", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/client/KordClient.ts", "source_location": "L1", "weight": 1.0}, {"source": "kordclient", "target": "logger", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/client/KordClient.ts", "source_location": "L2", "weight": 1.0}, {"source": "kordclient", "target": "env", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/client/KordClient.ts", "source_location": "L3", "weight": 1.0}, {"source": "kordclient", "target": "commandloader", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/client/KordClient.ts", "source_location": "L4", "weight": 1.0}, {"source": "kordclient", "target": "eventloader", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/client/KordClient.ts", "source_location": "L5", "weight": 1.0}, {"source": "kordclient", "target": "errorhandler", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/client/KordClient.ts", "source_location": "L6", "weight": 1.0}, {"source": "kordclient", "target": "database", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/client/KordClient.ts", "source_location": "L7", "weight": 1.0}, {"source": "kordclient", "target": "feverservice", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/client/KordClient.ts", "source_location": "L8", "weight": 1.0}, {"source": "kordclient", "target": "kordclient_kordclient", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/client/KordClient.ts", "source_location": "L10", "weight": 1.0}, {"source": "kordclient_kordclient", "target": "kordclient_kordclient_constructor", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/client/KordClient.ts", "source_location": "L13", "weight": 1.0}, {"source": "kordclient_kordclient", "target": "kordclient_kordclient_start", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/client/KordClient.ts", "source_location": "L26", "weight": 1.0}]} \ No newline at end of file diff --git a/graphify-out/cache/059b0e598b09e629a19dd338e0f8e91ac0f76d0a28aed4a3e1aad10423b26dcd.json b/graphify-out/cache/059b0e598b09e629a19dd338e0f8e91ac0f76d0a28aed4a3e1aad10423b26dcd.json new file mode 100644 index 0000000..98cb2b4 --- /dev/null +++ b/graphify-out/cache/059b0e598b09e629a19dd338e0f8e91ac0f76d0a28aed4a3e1aad10423b26dcd.json @@ -0,0 +1 @@ +{"nodes": [{"id": "error_guidance_ux", "label": "\uc5d0\ub7ec \uc548\ub0b4 UX \uac1c\uc120", "file_type": "document", "source_file": "Docs/WorkDone/2026-03-27_Error_Guidance_UX_Implementation.md"}, {"id": "BotError class", "label": "BotError \ud074\ub798\uc2a4", "file_type": "document", "source_file": "Docs/WorkDone/2026-03-27_Error_Guidance_UX_Implementation.md"}], "edges": [], "hyperedges": []} \ No newline at end of file diff --git a/graphify-out/cache/06719babca05eab7476c13fac1672c8a6c408f6da2210c395b962ed3fe2412de.json b/graphify-out/cache/06719babca05eab7476c13fac1672c8a6c408f6da2210c395b962ed3fe2412de.json new file mode 100644 index 0000000..af2f8d4 --- /dev/null +++ b/graphify-out/cache/06719babca05eab7476c13fac1672c8a6c408f6da2210c395b962ed3fe2412de.json @@ -0,0 +1 @@ +{"nodes": [{"id": "AuditChannel", "label": "Audit Channel Model", "file_type": "document", "source_file": "Docs/WorkDone/2026-03-27_Audit_Log_Channel_Implementation.md"}, {"id": "AuditLogService", "label": "Audit Log Service", "file_type": "document", "source_file": "Docs/WorkDone/2026-03-27_Audit_Log_Channel_Implementation.md"}], "edges": [], "hyperedges": []} \ No newline at end of file diff --git a/graphify-out/cache/08484a4b353e3a79ee3e32164bc88c2476061c5968e162517504b2096222480e.json b/graphify-out/cache/08484a4b353e3a79ee3e32164bc88c2476061c5968e162517504b2096222480e.json new file mode 100644 index 0000000..ccb55b7 --- /dev/null +++ b/graphify-out/cache/08484a4b353e3a79ee3e32164bc88c2476061c5968e162517504b2096222480e.json @@ -0,0 +1 @@ +{"nodes": [{"id": "Discord Bot Tokens", "label": "\ub514\uc2a4\ucf54\ub4dc \ubd07 \ud1a0\ud070", "file_type": "secret", "source_file": "Docs/Rules/security_guidelines.md"}, {"id": "Database Credentials", "label": "\ub370\uc774\ud130\ubca0\uc774\uc2a4 \ube44\ubc00\ubc88\ud638 \ubc0f \uc811\uc18d \uc8fc\uc18c", "file_type": "secret", "source_file": "Docs/Rules/security_guidelines.md"}, {"id": "Environment Variables", "label": "\ud658\uacbd \ubcc0\uc218", "file_type": "concept", "source_file": "Docs/Rules/security_guidelines.md"}], "edges": [{"source": "Environment Variables", "target": "Discord Bot Tokens", "relation": "is_preferred_storage_for", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "Docs/Rules/security_guidelines.md"}, {"source": "Environment Variables", "target": "Database Credentials", "relation": "is_preferred_storage_for", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "Docs/Rules/security_guidelines.md"}], "hyperedges": []} \ No newline at end of file diff --git a/graphify-out/cache/090e46c6e13f9ded1e8f64fb9bf48035504805e2963611d82cb564c5ee1f4a2b.json b/graphify-out/cache/090e46c6e13f9ded1e8f64fb9bf48035504805e2963611d82cb564c5ee1f4a2b.json new file mode 100644 index 0000000..878bf9d --- /dev/null +++ b/graphify-out/cache/090e46c6e13f9ded1e8f64fb9bf48035504805e2963611d82cb564c5ee1f4a2b.json @@ -0,0 +1 @@ +{"nodes": [{"id": "eventservice", "label": "EventService.ts", "file_type": "code", "source_file": "src/services/EventService.ts", "source_location": "L1"}, {"id": "eventservice_todiscordtimestamps", "label": "toDiscordTimestamps()", "file_type": "code", "source_file": "src/services/EventService.ts", "source_location": "L10"}, {"id": "eventservice_buildeventembed", "label": "buildEventEmbed()", "file_type": "code", "source_file": "src/services/EventService.ts", "source_location": "L18"}, {"id": "eventservice_resolveannouncementchannel", "label": "resolveAnnouncementChannel()", "file_type": "code", "source_file": "src/services/EventService.ts", "source_location": "L68"}, {"id": "eventservice_eventservice", "label": "EventService", "file_type": "code", "source_file": "src/services/EventService.ts", "source_location": "L79"}, {"id": "eventservice_eventservice_announceevent", "label": ".announceEvent()", "file_type": "code", "source_file": "src/services/EventService.ts", "source_location": "L82"}, {"id": "eventservice_eventservice_startreminderloop", "label": ".startReminderLoop()", "file_type": "code", "source_file": "src/services/EventService.ts", "source_location": "L115"}, {"id": "eventservice_eventservice_stopreminderloop", "label": ".stopReminderLoop()", "file_type": "code", "source_file": "src/services/EventService.ts", "source_location": "L133"}, {"id": "eventservice_eventservice_processdueevents", "label": ".processDueEvents()", "file_type": "code", "source_file": "src/services/EventService.ts", "source_location": "L141"}, {"id": "eventservice_eventservice_sendreminder", "label": ".sendReminder()", "file_type": "code", "source_file": "src/services/EventService.ts", "source_location": "L226"}], "edges": [{"source": "eventservice", "target": "discord_js", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/EventService.ts", "source_location": "L1", "weight": 1.0}, {"source": "eventservice", "target": "database", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/EventService.ts", "source_location": "L2", "weight": 1.0}, {"source": "eventservice", "target": "logger", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/EventService.ts", "source_location": "L3", "weight": 1.0}, {"source": "eventservice", "target": "auditlogservice", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/EventService.ts", "source_location": "L4", "weight": 1.0}, {"source": "eventservice", "target": "eventservice_todiscordtimestamps", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/services/EventService.ts", "source_location": "L10", "weight": 1.0}, {"source": "eventservice", "target": "eventservice_buildeventembed", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/services/EventService.ts", "source_location": "L18", "weight": 1.0}, {"source": "eventservice", "target": "eventservice_resolveannouncementchannel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/services/EventService.ts", "source_location": "L68", "weight": 1.0}, {"source": "eventservice", "target": "eventservice_eventservice", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/services/EventService.ts", "source_location": "L79", "weight": 1.0}, {"source": "eventservice_eventservice", "target": "eventservice_eventservice_announceevent", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/EventService.ts", "source_location": "L82", "weight": 1.0}, {"source": "eventservice_eventservice", "target": "eventservice_eventservice_startreminderloop", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/EventService.ts", "source_location": "L115", "weight": 1.0}, {"source": "eventservice_eventservice", "target": "eventservice_eventservice_stopreminderloop", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/EventService.ts", "source_location": "L133", "weight": 1.0}, {"source": "eventservice_eventservice", "target": "eventservice_eventservice_processdueevents", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/EventService.ts", "source_location": "L141", "weight": 1.0}, {"source": "eventservice_eventservice", "target": "eventservice_eventservice_sendreminder", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/EventService.ts", "source_location": "L226", "weight": 1.0}, {"source": "eventservice_buildeventembed", "target": "eventservice_todiscordtimestamps", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/EventService.ts", "source_location": "L25", "weight": 0.8}, {"source": "eventservice_eventservice_announceevent", "target": "eventservice_resolveannouncementchannel", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/EventService.ts", "source_location": "L94", "weight": 0.8}, {"source": "eventservice_eventservice_announceevent", "target": "eventservice_buildeventembed", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/EventService.ts", "source_location": "L99", "weight": 0.8}, {"source": "eventservice_eventservice_startreminderloop", "target": "eventservice_eventservice_processdueevents", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/EventService.ts", "source_location": "L120", "weight": 0.8}, {"source": "eventservice_eventservice_processdueevents", "target": "eventservice_resolveannouncementchannel", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/EventService.ts", "source_location": "L159", "weight": 0.8}, {"source": "eventservice_eventservice_processdueevents", "target": "eventservice_eventservice_sendreminder", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/EventService.ts", "source_location": "L172", "weight": 0.8}, {"source": "eventservice_eventservice_processdueevents", "target": "eventservice_buildeventembed", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/EventService.ts", "source_location": "L193", "weight": 0.8}, {"source": "eventservice_eventservice_sendreminder", "target": "eventservice_buildeventembed", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/EventService.ts", "source_location": "L236", "weight": 0.8}]} \ No newline at end of file diff --git a/graphify-out/cache/09c71efb477211c7eacae4f17c87fc2f8969670b6b55833513932afc3e0d1c8b.json b/graphify-out/cache/09c71efb477211c7eacae4f17c87fc2f8969670b6b55833513932afc3e0d1c8b.json new file mode 100644 index 0000000..a1da651 --- /dev/null +++ b/graphify-out/cache/09c71efb477211c7eacae4f17c87fc2f8969670b6b55833513932afc3e0d1c8b.json @@ -0,0 +1 @@ +{"nodes": [{"id": "event", "label": "event.ts", "file_type": "code", "source_file": "src/commands/event.ts", "source_location": "L1"}, {"id": "event_parseseouldatetime", "label": "parseSeoulDateTime()", "file_type": "code", "source_file": "src/commands/event.ts", "source_location": "L18"}, {"id": "event_todiscordtimestamps", "label": "toDiscordTimestamps()", "file_type": "code", "source_file": "src/commands/event.ts", "source_location": "L51"}, {"id": "event_parsereminderoffsets", "label": "parseReminderOffsets()", "file_type": "code", "source_file": "src/commands/event.ts", "source_location": "L59"}, {"id": "event_formatreminderoffsets", "label": "formatReminderOffsets()", "file_type": "code", "source_file": "src/commands/event.ts", "source_location": "L77"}, {"id": "event_buildstatuslabel", "label": "buildStatusLabel()", "file_type": "code", "source_file": "src/commands/event.ts", "source_location": "L85"}, {"id": "event_execute", "label": "execute()", "file_type": "code", "source_file": "src/commands/event.ts", "source_location": "L189"}], "edges": [{"source": "event", "target": "discord_js", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/commands/event.ts", "source_location": "L1", "weight": 1.0}, {"source": "event", "target": "database", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/commands/event.ts", "source_location": "L10", "weight": 1.0}, {"source": "event", "target": "i18n", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/commands/event.ts", "source_location": "L11", "weight": 1.0}, {"source": "event", "target": "eventservice", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/commands/event.ts", "source_location": "L12", "weight": 1.0}, {"source": "event", "target": "event_parseseouldatetime", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/commands/event.ts", "source_location": "L18", "weight": 1.0}, {"source": "event", "target": "event_todiscordtimestamps", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/commands/event.ts", "source_location": "L51", "weight": 1.0}, {"source": "event", "target": "event_parsereminderoffsets", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/commands/event.ts", "source_location": "L59", "weight": 1.0}, {"source": "event", "target": "event_formatreminderoffsets", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/commands/event.ts", "source_location": "L77", "weight": 1.0}, {"source": "event", "target": "event_buildstatuslabel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/commands/event.ts", "source_location": "L85", "weight": 1.0}, {"source": "event", "target": "event_execute", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/commands/event.ts", "source_location": "L189", "weight": 1.0}, {"source": "event_execute", "target": "event_parseseouldatetime", "relation": "calls", "confidence": "INFERRED", "source_file": "src/commands/event.ts", "source_location": "L202", "weight": 0.8}, {"source": "event_execute", "target": "event_parsereminderoffsets", "relation": "calls", "confidence": "INFERRED", "source_file": "src/commands/event.ts", "source_location": "L217", "weight": 0.8}, {"source": "event_execute", "target": "event_todiscordtimestamps", "relation": "calls", "confidence": "INFERRED", "source_file": "src/commands/event.ts", "source_location": "L239", "weight": 0.8}, {"source": "event_execute", "target": "event_formatreminderoffsets", "relation": "calls", "confidence": "INFERRED", "source_file": "src/commands/event.ts", "source_location": "L247", "weight": 0.8}, {"source": "event_execute", "target": "event_buildstatuslabel", "relation": "calls", "confidence": "INFERRED", "source_file": "src/commands/event.ts", "source_location": "L286", "weight": 0.8}]} \ No newline at end of file diff --git a/graphify-out/cache/186bdd2a725cb0c71741dc2650e450f3230f710fccada3550230d0591f192fb9.json b/graphify-out/cache/186bdd2a725cb0c71741dc2650e450f3230f710fccada3550230d0591f192fb9.json new file mode 100644 index 0000000..0da9cc1 --- /dev/null +++ b/graphify-out/cache/186bdd2a725cb0c71741dc2650e450f3230f710fccada3550230d0591f192fb9.json @@ -0,0 +1 @@ +{"nodes": [{"id": "minigameregistry", "label": "MiniGameRegistry.ts", "file_type": "code", "source_file": "src/services/MiniGameRegistry.ts", "source_location": "L1"}, {"id": "minigameregistry_getminigame", "label": "getMiniGame()", "file_type": "code", "source_file": "src/services/MiniGameRegistry.ts", "source_location": "L20"}, {"id": "minigameregistry_getallminigames", "label": "getAllMiniGames()", "file_type": "code", "source_file": "src/services/MiniGameRegistry.ts", "source_location": "L24"}], "edges": [{"source": "minigameregistry", "target": "minigameregistry_getminigame", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/services/MiniGameRegistry.ts", "source_location": "L20", "weight": 1.0}, {"source": "minigameregistry", "target": "minigameregistry_getallminigames", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/services/MiniGameRegistry.ts", "source_location": "L24", "weight": 1.0}]} \ No newline at end of file diff --git a/graphify-out/cache/1a8a9beefe2c821445d373751835363ae59ae22522299f3736a6107cce37f50b.json b/graphify-out/cache/1a8a9beefe2c821445d373751835363ae59ae22522299f3736a6107cce37f50b.json new file mode 100644 index 0000000..4b901e3 --- /dev/null +++ b/graphify-out/cache/1a8a9beefe2c821445d373751835363ae59ae22522299f3736a6107cce37f50b.json @@ -0,0 +1 @@ +{"nodes": [{"id": "interactioncreate", "label": "interactionCreate.ts", "file_type": "code", "source_file": "src/events/interactionCreate.ts", "source_location": "L1"}, {"id": "interactioncreate_execute", "label": "execute()", "file_type": "code", "source_file": "src/events/interactionCreate.ts", "source_location": "L16"}], "edges": [{"source": "interactioncreate", "target": "discord_js", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/events/interactionCreate.ts", "source_location": "L1", "weight": 1.0}, {"source": "interactioncreate", "target": "kordclient", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/events/interactionCreate.ts", "source_location": "L2", "weight": 1.0}, {"source": "interactioncreate", "target": "logger", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/events/interactionCreate.ts", "source_location": "L3", "weight": 1.0}, {"source": "interactioncreate", "target": "database", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/events/interactionCreate.ts", "source_location": "L4", "weight": 1.0}, {"source": "interactioncreate", "target": "boterror", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/events/interactionCreate.ts", "source_location": "L5", "weight": 1.0}, {"source": "interactioncreate", "target": "errorcodes", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/events/interactionCreate.ts", "source_location": "L6", "weight": 1.0}, {"source": "interactioncreate", "target": "errorreporter", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/events/interactionCreate.ts", "source_location": "L7", "weight": 1.0}, {"source": "interactioncreate", "target": "i18n", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/events/interactionCreate.ts", "source_location": "L8", "weight": 1.0}, {"source": "interactioncreate", "target": "localehelper", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/events/interactionCreate.ts", "source_location": "L9", "weight": 1.0}, {"source": "interactioncreate", "target": "setupwizardhandler", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/events/interactionCreate.ts", "source_location": "L10", "weight": 1.0}, {"source": "interactioncreate", "target": "musicservice", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/events/interactionCreate.ts", "source_location": "L11", "weight": 1.0}, {"source": "interactioncreate", "target": "interactioncreate_execute", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/events/interactionCreate.ts", "source_location": "L16", "weight": 1.0}]} \ No newline at end of file diff --git a/graphify-out/cache/2116f1b7a0a4a186fa2b082ce7d7f8f1607505783a2d584c72215d63df54b488.json b/graphify-out/cache/2116f1b7a0a4a186fa2b082ce7d7f8f1607505783a2d584c72215d63df54b488.json new file mode 100644 index 0000000..c3293f2 --- /dev/null +++ b/graphify-out/cache/2116f1b7a0a4a186fa2b082ce7d7f8f1607505783a2d584c72215d63df54b488.json @@ -0,0 +1 @@ +{"nodes": [{"id": "fishingservice", "label": "FishingService.ts", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L1"}, {"id": "fishingservice_fishingservice", "label": "FishingService", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L102"}, {"id": "fishingservice_fishingservice_enterthread", "label": ".enterThread()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L109"}, {"id": "fishingservice_fishingservice_isownedfishingthread", "label": ".isOwnedFishingThread()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L135"}, {"id": "fishingservice_fishingservice_startsessioninthread", "label": ".startSessionInThread()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L145"}, {"id": "fishingservice_fishingservice_endthreadbyuser", "label": ".endThreadByUser()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L168"}, {"id": "fishingservice_fishingservice_handlebutton", "label": ".handleButton()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L189"}, {"id": "fishingservice_fishingservice_getprofile", "label": ".getProfile()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L234"}, {"id": "fishingservice_fishingservice_getcollection", "label": ".getCollection()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L242"}, {"id": "fishingservice_fishingservice_getsizeranking", "label": ".getSizeRanking()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L256"}, {"id": "fishingservice_fishingservice_getfishdisplayname", "label": ".getFishDisplayName()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L271"}, {"id": "fishingservice_fishingservice_getraritydisplaynamebyid", "label": ".getRarityDisplayNameById()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L275"}, {"id": "fishingservice_fishingservice_ticksession", "label": ".tickSession()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L283"}, {"id": "fishingservice_fishingservice_queueaction", "label": ".queueAction()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L307"}, {"id": "fishingservice_fishingservice_resolvesuccessfulpull", "label": ".resolveSuccessfulPull()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L323"}, {"id": "fishingservice_fishingservice_resolvemiss", "label": ".resolveMiss()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L353"}, {"id": "fishingservice_fishingservice_startnextphase", "label": ".startNextPhase()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L369"}, {"id": "fishingservice_fishingservice_finishsession", "label": ".finishSession()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L375"}, {"id": "fishingservice_fishingservice_getactivesession", "label": ".getActiveSession()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L397"}, {"id": "fishingservice_fishingservice_issessionstale", "label": ".isSessionStale()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L411"}, {"id": "fishingservice_fishingservice_clearstalesession", "label": ".clearStaleSession()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L424"}, {"id": "fishingservice_fishingservice_deletethread", "label": ".deleteThread()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L430"}, {"id": "fishingservice_fishingservice_rendersession", "label": ".renderSession()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L444"}, {"id": "fishingservice_fishingservice_buildembed", "label": ".buildEmbed()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L467"}, {"id": "fishingservice_fishingservice_buildcontrolrow", "label": ".buildControlRow()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L527"}, {"id": "fishingservice_fishingservice_buildgauge", "label": ".buildGauge()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L552"}, {"id": "fishingservice_fishingservice_createsessioninthread", "label": ".createSessionInThread()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L558"}, {"id": "fishingservice_fishingservice_findorcreatethread", "label": ".findOrCreateThread()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L613"}, {"id": "fishingservice_fishingservice_findownedfishingthread", "label": ".findOwnedFishingThread()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L632"}, {"id": "fishingservice_fishingservice_sendcatchresult", "label": ".sendCatchResult()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L646"}, {"id": "fishingservice_fishingservice_previewfishlane", "label": ".previewFishLane()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L702"}, {"id": "fishingservice_fishingservice_previewgauge", "label": ".previewGauge()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L706"}, {"id": "fishingservice_fishingservice_buildfishlane", "label": ".buildFishLane()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L710"}, {"id": "fishingservice_fishingservice_randomdirection", "label": ".randomDirection()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L716"}, {"id": "fishingservice_fishingservice_buildthreadname", "label": ".buildThreadName()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L721"}, {"id": "fishingservice_fishingservice_loadfishingcatalog", "label": ".loadFishingCatalog()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L726"}, {"id": "fishingservice_fishingservice_pickfishbyrate", "label": ".pickFishByRate()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L738"}, {"id": "fishingservice_fishingservice_pickraritybyrate", "label": ".pickRarityByRate()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L752"}, {"id": "fishingservice_fishingservice_getreactionwindowms", "label": ".getReactionWindowMs()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L766"}, {"id": "fishingservice_fishingservice_rollrange", "label": ".rollRange()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L772"}, {"id": "fishingservice_fishingservice_pickrandomartpath", "label": ".pickRandomArtPath()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L780"}, {"id": "fishingservice_fishingservice_resolveresourcepath", "label": ".resolveResourcePath()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L789"}, {"id": "fishingservice_fishingservice_loadfishingrarities", "label": ".loadFishingRarities()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L793"}, {"id": "fishingservice_fishingservice_getraritydisplayname", "label": ".getRarityDisplayName()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L805"}, {"id": "fishingservice_fishingservice_recordprofileresult", "label": ".recordProfileResult()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L809"}, {"id": "fishingservice_fishingservice_recordcollectioncatch", "label": ".recordCollectionCatch()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L852"}, {"id": "fishingservice_fishingservice_getraritycountfield", "label": ".getRarityCountField()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L898"}, {"id": "fishingservice_fishingservice_getrarityrank", "label": ".getRarityRank()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L906"}, {"id": "fishingservice_fishingservice_getraritybadge", "label": ".getRarityBadge()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L914"}, {"id": "fishingservice_fishingservice_composerarityart", "label": ".composeRarityArt()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L922"}, {"id": "fishingservice_fishingservice_hextocolorint", "label": ".hexToColorInt()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L946"}, {"id": "fishingservice_fishingservice_rollcatchsizecm", "label": ".rollCatchSizeCm()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L950"}, {"id": "fishingservice_fishingservice_formatselectedaction", "label": ".formatSelectedAction()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L956"}, {"id": "fishingservice_fishingservice_cleartick", "label": ".clearTick()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L964"}, {"id": "fishingservice_fishingservice_getuserkey", "label": ".getUserKey()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L971"}, {"id": "fishingservice_fishingservice_rolldecimalrange", "label": ".rollDecimalRange()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L975"}, {"id": "fishingservice_buildfishinggauge", "label": "buildFishingGauge()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L984"}, {"id": "fishingservice_buildfishinglane", "label": "buildFishingLane()", "file_type": "code", "source_file": "src/services/FishingService.ts", "source_location": "L988"}], "edges": [{"source": "fishingservice", "target": "discord_js", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L1", "weight": 1.0}, {"source": "fishingservice", "target": "node_fs", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L15", "weight": 1.0}, {"source": "fishingservice", "target": "node_path", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L16", "weight": 1.0}, {"source": "fishingservice", "target": "sharp", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L17", "weight": 1.0}, {"source": "fishingservice", "target": "database", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L18", "weight": 1.0}, {"source": "fishingservice", "target": "i18n", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L19", "weight": 1.0}, {"source": "fishingservice", "target": "refinementservice", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L20", "weight": 1.0}, {"source": "fishingservice", "target": "logger", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L21", "weight": 1.0}, {"source": "fishingservice", "target": "fishingservice_fishingservice", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L102", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_enterthread", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L109", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_isownedfishingthread", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L135", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_startsessioninthread", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L145", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_endthreadbyuser", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L168", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_handlebutton", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L189", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_getprofile", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L234", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_getcollection", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L242", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_getsizeranking", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L256", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_getfishdisplayname", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L271", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_getraritydisplaynamebyid", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L275", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_ticksession", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L283", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_queueaction", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L307", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_resolvesuccessfulpull", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L323", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_resolvemiss", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L353", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_startnextphase", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L369", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_finishsession", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L375", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_getactivesession", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L397", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_issessionstale", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L411", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_clearstalesession", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L424", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_deletethread", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L430", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_rendersession", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L444", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_buildembed", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L467", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_buildcontrolrow", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L527", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_buildgauge", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L552", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_createsessioninthread", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L558", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_findorcreatethread", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L613", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_findownedfishingthread", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L632", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_sendcatchresult", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L646", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_previewfishlane", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L702", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_previewgauge", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L706", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_buildfishlane", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L710", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_randomdirection", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L716", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_buildthreadname", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L721", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_loadfishingcatalog", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L726", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_pickfishbyrate", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L738", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_pickraritybyrate", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L752", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_getreactionwindowms", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L766", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_rollrange", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L772", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_pickrandomartpath", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L780", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_resolveresourcepath", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L789", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_loadfishingrarities", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L793", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_getraritydisplayname", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L805", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_recordprofileresult", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L809", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_recordcollectioncatch", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L852", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_getraritycountfield", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L898", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_getrarityrank", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L906", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_getraritybadge", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L914", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_composerarityart", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L922", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_hextocolorint", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L946", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_rollcatchsizecm", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L950", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_formatselectedaction", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L956", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_cleartick", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L964", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_getuserkey", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L971", "weight": 1.0}, {"source": "fishingservice_fishingservice", "target": "fishingservice_fishingservice_rolldecimalrange", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L975", "weight": 1.0}, {"source": "fishingservice", "target": "fishingservice_buildfishinggauge", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L984", "weight": 1.0}, {"source": "fishingservice", "target": "fishingservice_buildfishinglane", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/services/FishingService.ts", "source_location": "L988", "weight": 1.0}, {"source": "fishingservice_fishingservice_enterthread", "target": "fishingservice_fishingservice_getuserkey", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L114", "weight": 0.8}, {"source": "fishingservice_fishingservice_enterthread", "target": "fishingservice_fishingservice_findorcreatethread", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L120", "weight": 0.8}, {"source": "fishingservice_fishingservice_isownedfishingthread", "target": "fishingservice_fishingservice_buildthreadname", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L142", "weight": 0.8}, {"source": "fishingservice_fishingservice_startsessioninthread", "target": "fishingservice_fishingservice_isownedfishingthread", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L146", "weight": 0.8}, {"source": "fishingservice_fishingservice_startsessioninthread", "target": "fishingservice_fishingservice_getuserkey", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L150", "weight": 0.8}, {"source": "fishingservice_fishingservice_startsessioninthread", "target": "fishingservice_fishingservice_getactivesession", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L151", "weight": 0.8}, {"source": "fishingservice_fishingservice_startsessioninthread", "target": "fishingservice_fishingservice_createsessioninthread", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L157", "weight": 0.8}, {"source": "fishingservice_fishingservice_endthreadbyuser", "target": "fishingservice_fishingservice_getactivesession", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L173", "weight": 0.8}, {"source": "fishingservice_fishingservice_endthreadbyuser", "target": "fishingservice_fishingservice_getuserkey", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L173", "weight": 0.8}, {"source": "fishingservice_fishingservice_endthreadbyuser", "target": "fishingservice_fishingservice_findownedfishingthread", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L175", "weight": 0.8}, {"source": "fishingservice_fishingservice_endthreadbyuser", "target": "fishingservice_fishingservice_deletethread", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L180", "weight": 0.8}, {"source": "fishingservice_fishingservice_endthreadbyuser", "target": "fishingservice_fishingservice_finishsession", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L185", "weight": 0.8}, {"source": "fishingservice_fishingservice_handlebutton", "target": "fishingservice_fishingservice_getuserkey", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L192", "weight": 0.8}, {"source": "fishingservice_fishingservice_handlebutton", "target": "fishingservice_fishingservice_buildcontrolrow", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L197", "weight": 0.8}, {"source": "fishingservice_fishingservice_handlebutton", "target": "fishingservice_fishingservice_queueaction", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L231", "weight": 0.8}, {"source": "fishingservice_fishingservice_getraritydisplaynamebyid", "target": "fishingservice_fishingservice_getraritydisplayname", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L280", "weight": 0.8}, {"source": "fishingservice_fishingservice_ticksession", "target": "fishingservice_fishingservice_getuserkey", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L284", "weight": 0.8}, {"source": "fishingservice_fishingservice_ticksession", "target": "fishingservice_fishingservice_cleartick", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L285", "weight": 0.8}, {"source": "fishingservice_fishingservice_ticksession", "target": "fishingservice_fishingservice_getreactionwindowms", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L290", "weight": 0.8}, {"source": "fishingservice_fishingservice_ticksession", "target": "fishingservice_fishingservice_resolvesuccessfulpull", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L298", "weight": 0.8}, {"source": "fishingservice_fishingservice_ticksession", "target": "fishingservice_fishingservice_resolvemiss", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L303", "weight": 0.8}, {"source": "fishingservice_fishingservice_queueaction", "target": "fishingservice_fishingservice_startnextphase", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L314", "weight": 0.8}, {"source": "fishingservice_fishingservice_queueaction", "target": "fishingservice_fishingservice_rendersession", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L315", "weight": 0.8}, {"source": "fishingservice_fishingservice_resolvesuccessfulpull", "target": "fishingservice_fishingservice_rollrange", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L324", "weight": 0.8}, {"source": "fishingservice_fishingservice_resolvesuccessfulpull", "target": "fishingservice_fishingservice_rollcatchsizecm", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L338", "weight": 0.8}, {"source": "fishingservice_fishingservice_resolvesuccessfulpull", "target": "fishingservice_fishingservice_finishsession", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L340", "weight": 0.8}, {"source": "fishingservice_fishingservice_resolvesuccessfulpull", "target": "fishingservice_fishingservice_startnextphase", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L349", "weight": 0.8}, {"source": "fishingservice_fishingservice_resolvesuccessfulpull", "target": "fishingservice_fishingservice_rendersession", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L350", "weight": 0.8}, {"source": "fishingservice_fishingservice_resolvemiss", "target": "fishingservice_fishingservice_finishsession", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L361", "weight": 0.8}, {"source": "fishingservice_fishingservice_resolvemiss", "target": "fishingservice_fishingservice_startnextphase", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L365", "weight": 0.8}, {"source": "fishingservice_fishingservice_resolvemiss", "target": "fishingservice_fishingservice_rendersession", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L366", "weight": 0.8}, {"source": "fishingservice_fishingservice_startnextphase", "target": "fishingservice_fishingservice_randomdirection", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L372", "weight": 0.8}, {"source": "fishingservice_fishingservice_finishsession", "target": "fishingservice_fishingservice_cleartick", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L377", "weight": 0.8}, {"source": "fishingservice_fishingservice_finishsession", "target": "fishingservice_fishingservice_recordprofileresult", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L381", "weight": 0.8}, {"source": "fishingservice_fishingservice_finishsession", "target": "fishingservice_fishingservice_rendersession", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L383", "weight": 0.8}, {"source": "fishingservice_fishingservice_finishsession", "target": "fishingservice_fishingservice_getuserkey", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L385", "weight": 0.8}, {"source": "fishingservice_fishingservice_finishsession", "target": "fishingservice_fishingservice_sendcatchresult", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L389", "weight": 0.8}, {"source": "fishingservice_fishingservice_finishsession", "target": "fishingservice_fishingservice_deletethread", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L393", "weight": 0.8}, {"source": "fishingservice_fishingservice_getactivesession", "target": "fishingservice_fishingservice_issessionstale", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L403", "weight": 0.8}, {"source": "fishingservice_fishingservice_getactivesession", "target": "fishingservice_fishingservice_clearstalesession", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L404", "weight": 0.8}, {"source": "fishingservice_fishingservice_clearstalesession", "target": "fishingservice_fishingservice_cleartick", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L425", "weight": 0.8}, {"source": "fishingservice_fishingservice_clearstalesession", "target": "fishingservice_fishingservice_getuserkey", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L426", "weight": 0.8}, {"source": "fishingservice_fishingservice_rendersession", "target": "fishingservice_fishingservice_buildembed", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L454", "weight": 0.8}, {"source": "fishingservice_fishingservice_rendersession", "target": "fishingservice_fishingservice_buildcontrolrow", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L455", "weight": 0.8}, {"source": "fishingservice_fishingservice_buildembed", "target": "fishingservice_fishingservice_buildgauge", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L471", "weight": 0.8}, {"source": "fishingservice_fishingservice_buildembed", "target": "fishingservice_fishingservice_formatselectedaction", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L474", "weight": 0.8}, {"source": "fishingservice_fishingservice_buildembed", "target": "fishingservice_fishingservice_hextocolorint", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L479", "weight": 0.8}, {"source": "fishingservice_fishingservice_buildembed", "target": "fishingservice_fishingservice_buildfishlane", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L492", "weight": 0.8}, {"source": "fishingservice_fishingservice_createsessioninthread", "target": "fishingservice_fishingservice_pickfishbyrate", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L565", "weight": 0.8}, {"source": "fishingservice_fishingservice_createsessioninthread", "target": "fishingservice_fishingservice_pickraritybyrate", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L566", "weight": 0.8}, {"source": "fishingservice_fishingservice_createsessioninthread", "target": "fishingservice_fishingservice_randomdirection", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L576", "weight": 0.8}, {"source": "fishingservice_fishingservice_createsessioninthread", "target": "fishingservice_fishingservice_buildembed", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L590", "weight": 0.8}, {"source": "fishingservice_fishingservice_createsessioninthread", "target": "fishingservice_fishingservice_buildcontrolrow", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L591", "weight": 0.8}, {"source": "fishingservice_fishingservice_createsessioninthread", "target": "fishingservice_fishingservice_getuserkey", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L599", "weight": 0.8}, {"source": "fishingservice_fishingservice_findorcreatethread", "target": "fishingservice_fishingservice_buildthreadname", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L614", "weight": 0.8}, {"source": "fishingservice_fishingservice_findownedfishingthread", "target": "fishingservice_fishingservice_isownedfishingthread", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L633", "weight": 0.8}, {"source": "fishingservice_fishingservice_sendcatchresult", "target": "fishingservice_fishingservice_pickrandomartpath", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L647", "weight": 0.8}, {"source": "fishingservice_fishingservice_sendcatchresult", "target": "fishingservice_fishingservice_getraritydisplayname", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L648", "weight": 0.8}, {"source": "fishingservice_fishingservice_sendcatchresult", "target": "fishingservice_fishingservice_getraritybadge", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L649", "weight": 0.8}, {"source": "fishingservice_fishingservice_sendcatchresult", "target": "fishingservice_fishingservice_hextocolorint", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L651", "weight": 0.8}, {"source": "fishingservice_fishingservice_sendcatchresult", "target": "fishingservice_fishingservice_composerarityart", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L675", "weight": 0.8}, {"source": "fishingservice_fishingservice_previewfishlane", "target": "fishingservice_fishingservice_buildfishlane", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L703", "weight": 0.8}, {"source": "fishingservice_fishingservice_previewgauge", "target": "fishingservice_fishingservice_buildgauge", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L707", "weight": 0.8}, {"source": "fishingservice_fishingservice_loadfishingcatalog", "target": "fishingservice_fishingservice_resolveresourcepath", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L727", "weight": 0.8}, {"source": "fishingservice_fishingservice_pickrandomartpath", "target": "fishingservice_fishingservice_resolveresourcepath", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L786", "weight": 0.8}, {"source": "fishingservice_fishingservice_loadfishingrarities", "target": "fishingservice_fishingservice_resolveresourcepath", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L794", "weight": 0.8}, {"source": "fishingservice_fishingservice_recordprofileresult", "target": "fishingservice_fishingservice_getraritycountfield", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L811", "weight": 0.8}, {"source": "fishingservice_fishingservice_recordprofileresult", "target": "fishingservice_fishingservice_getprofile", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L812", "weight": 0.8}, {"source": "fishingservice_fishingservice_recordprofileresult", "target": "fishingservice_fishingservice_recordcollectioncatch", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L848", "weight": 0.8}, {"source": "fishingservice_fishingservice_recordcollectioncatch", "target": "fishingservice_fishingservice_getrarityrank", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L853", "weight": 0.8}, {"source": "fishingservice_fishingservice_rollcatchsizecm", "target": "fishingservice_fishingservice_rolldecimalrange", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L951", "weight": 0.8}, {"source": "fishingservice_buildfishinggauge", "target": "fishingservice_fishingservice_previewgauge", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L985", "weight": 0.8}, {"source": "fishingservice_buildfishinglane", "target": "fishingservice_fishingservice_previewfishlane", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/FishingService.ts", "source_location": "L989", "weight": 0.8}]} \ No newline at end of file diff --git a/graphify-out/cache/26b375eb793d46d5d81d47e232a92db1561aee2126ba5071d084ba212c31077e.json b/graphify-out/cache/26b375eb793d46d5d81d47e232a92db1561aee2126ba5071d084ba212c31077e.json new file mode 100644 index 0000000..2806d8b --- /dev/null +++ b/graphify-out/cache/26b375eb793d46d5d81d47e232a92db1561aee2126ba5071d084ba212c31077e.json @@ -0,0 +1 @@ +{"nodes": [{"id": "boterror", "label": "BotError.ts", "file_type": "code", "source_file": "src/errors/BotError.ts", "source_location": "L1"}, {"id": "boterror_boterror", "label": "BotError", "file_type": "code", "source_file": "src/errors/BotError.ts", "source_location": "L16"}, {"id": "boterror_boterror_constructor", "label": ".constructor()", "file_type": "code", "source_file": "src/errors/BotError.ts", "source_location": "L29"}], "edges": [{"source": "boterror", "target": "boterror_boterror", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/errors/BotError.ts", "source_location": "L16", "weight": 1.0}, {"source": "boterror_boterror", "target": "boterror_boterror_constructor", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/errors/BotError.ts", "source_location": "L29", "weight": 1.0}]} \ No newline at end of file diff --git a/graphify-out/cache/315cb461f311ca0798cae925a8bbcabd9122adbae8f472e44b330deb50bd785b.json b/graphify-out/cache/315cb461f311ca0798cae925a8bbcabd9122adbae8f472e44b330deb50bd785b.json new file mode 100644 index 0000000..55e1ed6 --- /dev/null +++ b/graphify-out/cache/315cb461f311ca0798cae925a8bbcabd9122adbae8f472e44b330deb50bd785b.json @@ -0,0 +1 @@ +{"nodes": [{"id": "i18n_test", "label": "i18n.test.ts", "file_type": "code", "source_file": "tests/i18n/i18n.test.ts", "source_location": "L1"}], "edges": [{"source": "i18n_test", "target": "i18n", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "tests/i18n/i18n.test.ts", "source_location": "L1", "weight": 1.0}, {"source": "i18n_test", "target": "i18n", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "tests/i18n/i18n.test.ts", "source_location": "L2", "weight": 1.0}]} \ No newline at end of file diff --git a/graphify-out/cache/37c5b6a9067b07b59e2ddc8cb8f92add8b21a4cec99fe6cef97734b8665d1853.json b/graphify-out/cache/37c5b6a9067b07b59e2ddc8cb8f92add8b21a4cec99fe6cef97734b8665d1853.json new file mode 100644 index 0000000..5fb4b5e --- /dev/null +++ b/graphify-out/cache/37c5b6a9067b07b59e2ddc8cb8f92add8b21a4cec99fe6cef97734b8665d1853.json @@ -0,0 +1 @@ +{"nodes": [{"id": "GuildEvent", "label": "\uc774\ubca4\ud2b8 \uc774\ubca4\ud2b8", "file_type": "model", "source_file": "Docs/WorkDone/2026-03-30_Event_Reminder_Offsets_Implementation.md"}, {"id": "reminderOffsets", "label": "\uc774\ubca4\ud2b8 \ub9ac\ub9c8\uc778\ub354 \uc624\ud504\uc14b \ubaa9\ub85d", "file_type": "data_field", "source_file": "Docs/WorkDone/2026-03-30_Event_Reminder_Offsets_Implementation.md"}], "edges": [], "hyperedges": []} \ No newline at end of file diff --git a/graphify-out/cache/384657876b593be5d705ff999ffd362486962d2d1f73c8683016797135d5541e.json b/graphify-out/cache/384657876b593be5d705ff999ffd362486962d2d1f73c8683016797135d5541e.json new file mode 100644 index 0000000..4780715 --- /dev/null +++ b/graphify-out/cache/384657876b593be5d705ff999ffd362486962d2d1f73c8683016797135d5541e.json @@ -0,0 +1 @@ +{"nodes": [{"id": "ko", "label": "ko.ts", "file_type": "code", "source_file": "src/i18n/locales/ko.ts", "source_location": "L1"}], "edges": [{"source": "ko", "target": "types", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/i18n/locales/ko.ts", "source_location": "L1", "weight": 1.0}]} \ No newline at end of file diff --git a/graphify-out/cache/3ad72a003b4836c46c5f3e308fbb7f2f40f77716078451fdc56b72c1ad2cbd94.json b/graphify-out/cache/3ad72a003b4836c46c5f3e308fbb7f2f40f77716078451fdc56b72c1ad2cbd94.json new file mode 100644 index 0000000..7ee30a7 --- /dev/null +++ b/graphify-out/cache/3ad72a003b4836c46c5f3e308fbb7f2f40f77716078451fdc56b72c1ad2cbd94.json @@ -0,0 +1 @@ +{"nodes": [{"id": "errorcodes", "label": "ErrorCodes.ts", "file_type": "code", "source_file": "src/errors/ErrorCodes.ts", "source_location": "L1"}, {"id": "errorcodes_createboterror", "label": "createBotError()", "file_type": "code", "source_file": "src/errors/ErrorCodes.ts", "source_location": "L123"}], "edges": [{"source": "errorcodes", "target": "boterror", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/errors/ErrorCodes.ts", "source_location": "L1", "weight": 1.0}, {"source": "errorcodes", "target": "errorcodes_createboterror", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/errors/ErrorCodes.ts", "source_location": "L123", "weight": 1.0}]} \ No newline at end of file diff --git a/graphify-out/cache/4301a7be1a39b805e2fafcbb0dc758b9536cfd882ba6b2f620d9131a60bfe615.json b/graphify-out/cache/4301a7be1a39b805e2fafcbb0dc758b9536cfd882ba6b2f620d9131a60bfe615.json new file mode 100644 index 0000000..4b02261 --- /dev/null +++ b/graphify-out/cache/4301a7be1a39b805e2fafcbb0dc758b9536cfd882ba6b2f620d9131a60bfe615.json @@ -0,0 +1 @@ +{"nodes": [{"id": "voiceservice_test", "label": "VoiceService.test.ts", "file_type": "code", "source_file": "tests/services/VoiceService.test.ts", "source_location": "L1"}], "edges": [{"source": "voiceservice_test", "target": "voiceservice", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "tests/services/VoiceService.test.ts", "source_location": "L1", "weight": 1.0}, {"source": "voiceservice_test", "target": "discord_js", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "tests/services/VoiceService.test.ts", "source_location": "L2", "weight": 1.0}]} \ No newline at end of file diff --git a/graphify-out/cache/445c99f512a909d664b2cf022794b2d77e6ee113394832d54ea34700ff794a41.json b/graphify-out/cache/445c99f512a909d664b2cf022794b2d77e6ee113394832d54ea34700ff794a41.json new file mode 100644 index 0000000..5014b80 --- /dev/null +++ b/graphify-out/cache/445c99f512a909d664b2cf022794b2d77e6ee113394832d54ea34700ff794a41.json @@ -0,0 +1 @@ +{"nodes": [{"id": "subscription_tier_system", "label": "\uad6c\ub3c5 \ud2f0\uc5b4 \uc2dc\uc2a4\ud15c", "file_type": "document", "source_file": "Docs/Decisions/subscription_tiers.md"}, {"id": "User", "label": "\uc0ac\uc6a9\uc790", "file_type": "concept", "source_file": "Docs/Decisions/subscription_tiers.md"}, {"id": "Guild", "label": "\uc11c\ubc84", "file_type": "concept", "source_file": "Docs/Decisions/subscription_tiers.md"}, {"id": "Free", "label": "FREE (\ud504\ub9ac)", "file_type": "concept", "source_file": "Docs/Decisions/subscription_tiers.md"}, {"id": "Standard", "label": "STANDARD (\uc2a4\ud0e0\ub2e4\ub4dc)", "file_type": "concept", "source_file": "Docs/Decisions/subscription_tiers.md"}, {"id": "Pro", "label": "PRO (\ud504\ub85c)", "file_type": "concept", "source_file": "Docs/Decisions/subscription_tiers.md"}, {"id": "Premium", "label": "PREMIUM (\ud504\ub9ac\ubbf8\uc5c4)", "file_type": "concept", "source_file": "Docs/Decisions/subscription_tiers.md"}, {"id": "UserSubscription", "label": "UserSubscription", "file_type": "model", "source_file": "Docs/Decisions/subscription_tiers.md"}, {"id": "GuildOwnership", "label": "GuildOwnership", "file_type": "model", "source_file": "Docs/Decisions/subscription_tiers.md"}], "edges": [{"source": "User", "target": "subscription_tier_system", "relation": "is_holder_of_tier", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "Docs/Decisions/subscription_tiers.md"}, {"source": "Guild", "target": "subscription_tier_system", "relation": "is_controlled_by", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "Docs/Decisions/subscription_tiers.md"}, {"source": "Free", "target": "subscription_tier_system", "relation": "defines_limit", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "Docs/Decisions/subscription_tiers.md"}, {"source": "Standard", "target": "subscription_tier_system", "relation": "defines_limit", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "Docs/Decisions/subscription_tiers.md"}, {"source": "Pro", "target": "subscription_tier_system", "relation": "defines_limit", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "Docs/Decisions/subscription_tiers.md"}, {"source": "Premium", "target": "subscription_tier_system", "relation": "defines_limit", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "Docs/Decisions/subscription_tiers.md"}, {"source": "GuildOwnership", "target": "subscription_tier_system", "relation": "manages_association", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "Docs/Decisions/subscription_tiers.md"}, {"source": "UserSubscription", "target": "subscription_tier_system", "relation": "is_used_for_validation", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "Docs/Decisions/subscription_tiers.md"}], "hyperedges": []} \ No newline at end of file diff --git a/graphify-out/cache/469a7c2d871ca9d1460d40e06be1390b3c9085fe80d77492a732ad9de1f5ef0a.json b/graphify-out/cache/469a7c2d871ca9d1460d40e06be1390b3c9085fe80d77492a732ad9de1f5ef0a.json new file mode 100644 index 0000000..dbbdf17 --- /dev/null +++ b/graphify-out/cache/469a7c2d871ca9d1460d40e06be1390b3c9085fe80d77492a732ad9de1f5ef0a.json @@ -0,0 +1 @@ +{"nodes": [{"id": "inviteservice", "label": "InviteService.ts", "file_type": "code", "source_file": "src/services/InviteService.ts", "source_location": "L1"}, {"id": "inviteservice_inviteservice", "label": "InviteService", "file_type": "code", "source_file": "src/services/InviteService.ts", "source_location": "L5"}, {"id": "inviteservice_inviteservice_cacheallinvites", "label": ".cacheAllInvites()", "file_type": "code", "source_file": "src/services/InviteService.ts", "source_location": "L9"}, {"id": "inviteservice_inviteservice_cacheguildinvites", "label": ".cacheGuildInvites()", "file_type": "code", "source_file": "src/services/InviteService.ts", "source_location": "L16"}, {"id": "inviteservice_inviteservice_handleinvitecreate", "label": ".handleInviteCreate()", "file_type": "code", "source_file": "src/services/InviteService.ts", "source_location": "L29"}, {"id": "inviteservice_inviteservice_handleinvitedelete", "label": ".handleInviteDelete()", "file_type": "code", "source_file": "src/services/InviteService.ts", "source_location": "L35"}, {"id": "inviteservice_inviteservice_handlememberadd", "label": ".handleMemberAdd()", "file_type": "code", "source_file": "src/services/InviteService.ts", "source_location": "L41"}], "edges": [{"source": "inviteservice", "target": "discord_js", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/InviteService.ts", "source_location": "L1", "weight": 1.0}, {"source": "inviteservice", "target": "database", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/InviteService.ts", "source_location": "L2", "weight": 1.0}, {"source": "inviteservice", "target": "logger", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/InviteService.ts", "source_location": "L3", "weight": 1.0}, {"source": "inviteservice", "target": "inviteservice_inviteservice", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/services/InviteService.ts", "source_location": "L5", "weight": 1.0}, {"source": "inviteservice_inviteservice", "target": "inviteservice_inviteservice_cacheallinvites", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/InviteService.ts", "source_location": "L9", "weight": 1.0}, {"source": "inviteservice_inviteservice", "target": "inviteservice_inviteservice_cacheguildinvites", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/InviteService.ts", "source_location": "L16", "weight": 1.0}, {"source": "inviteservice_inviteservice", "target": "inviteservice_inviteservice_handleinvitecreate", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/InviteService.ts", "source_location": "L29", "weight": 1.0}, {"source": "inviteservice_inviteservice", "target": "inviteservice_inviteservice_handleinvitedelete", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/InviteService.ts", "source_location": "L35", "weight": 1.0}, {"source": "inviteservice_inviteservice", "target": "inviteservice_inviteservice_handlememberadd", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/InviteService.ts", "source_location": "L41", "weight": 1.0}, {"source": "inviteservice_inviteservice_cacheallinvites", "target": "inviteservice_inviteservice_cacheguildinvites", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/InviteService.ts", "source_location": "L11", "weight": 0.8}, {"source": "inviteservice_inviteservice_handleinvitecreate", "target": "inviteservice_inviteservice_cacheguildinvites", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/InviteService.ts", "source_location": "L32", "weight": 0.8}, {"source": "inviteservice_inviteservice_handleinvitedelete", "target": "inviteservice_inviteservice_cacheguildinvites", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/InviteService.ts", "source_location": "L38", "weight": 0.8}, {"source": "inviteservice_inviteservice_handlememberadd", "target": "inviteservice_inviteservice_cacheguildinvites", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/InviteService.ts", "source_location": "L61", "weight": 0.8}]} \ No newline at end of file diff --git a/graphify-out/cache/47b8d6ce33f3752f5404874c352dd693fdf5d1440653123b624b9ecc14cf48ae.json b/graphify-out/cache/47b8d6ce33f3752f5404874c352dd693fdf5d1440653123b624b9ecc14cf48ae.json new file mode 100644 index 0000000..bfc3a2d --- /dev/null +++ b/graphify-out/cache/47b8d6ce33f3752f5404874c352dd693fdf5d1440653123b624b9ecc14cf48ae.json @@ -0,0 +1 @@ +{"nodes": [{"id": "refinementhandler", "label": "refinementHandler.ts", "file_type": "code", "source_file": "src/interactions/handlers/refinementHandler.ts", "source_location": "L1"}, {"id": "refinementhandler_handlerefinementinteraction", "label": "handleRefinementInteraction()", "file_type": "code", "source_file": "src/interactions/handlers/refinementHandler.ts", "source_location": "L7"}], "edges": [{"source": "refinementhandler", "target": "discord_js", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/interactions/handlers/refinementHandler.ts", "source_location": "L1", "weight": 1.0}, {"source": "refinementhandler", "target": "refinementservice", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/interactions/handlers/refinementHandler.ts", "source_location": "L2", "weight": 1.0}, {"source": "refinementhandler", "target": "feverservice", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/interactions/handlers/refinementHandler.ts", "source_location": "L3", "weight": 1.0}, {"source": "refinementhandler", "target": "database", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/interactions/handlers/refinementHandler.ts", "source_location": "L4", "weight": 1.0}, {"source": "refinementhandler", "target": "i18n", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/interactions/handlers/refinementHandler.ts", "source_location": "L5", "weight": 1.0}, {"source": "refinementhandler", "target": "refinementhandler_handlerefinementinteraction", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/interactions/handlers/refinementHandler.ts", "source_location": "L7", "weight": 1.0}]} \ No newline at end of file diff --git a/graphify-out/cache/52196d0838462969b801f046144c14988a97de531e0006db8a5ee39098f631c9.json b/graphify-out/cache/52196d0838462969b801f046144c14988a97de531e0006db8a5ee39098f631c9.json new file mode 100644 index 0000000..c9fd8ed --- /dev/null +++ b/graphify-out/cache/52196d0838462969b801f046144c14988a97de531e0006db8a5ee39098f631c9.json @@ -0,0 +1 @@ +{"nodes": [{"id": "minigame", "label": "minigame.ts", "file_type": "code", "source_file": "src/commands/minigame.ts", "source_location": "L1"}, {"id": "minigame_execute", "label": "execute()", "file_type": "code", "source_file": "src/commands/minigame.ts", "source_location": "L62"}], "edges": [{"source": "minigame", "target": "discord_js", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/commands/minigame.ts", "source_location": "L1", "weight": 1.0}, {"source": "minigame", "target": "database", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/commands/minigame.ts", "source_location": "L9", "weight": 1.0}, {"source": "minigame", "target": "i18n", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/commands/minigame.ts", "source_location": "L10", "weight": 1.0}, {"source": "minigame", "target": "minigameregistry", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/commands/minigame.ts", "source_location": "L11", "weight": 1.0}, {"source": "minigame", "target": "minigame_execute", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/commands/minigame.ts", "source_location": "L62", "weight": 1.0}]} \ No newline at end of file diff --git a/graphify-out/cache/587a852536395f149ac1a601a4cfc87fc241b1d0411c86dc1fd4c3b43d68d40a.json b/graphify-out/cache/587a852536395f149ac1a601a4cfc87fc241b1d0411c86dc1fd4c3b43d68d40a.json new file mode 100644 index 0000000..2e0b828 --- /dev/null +++ b/graphify-out/cache/587a852536395f149ac1a601a4cfc87fc241b1d0411c86dc1fd4c3b43d68d40a.json @@ -0,0 +1 @@ +{"nodes": [{"id": "types", "label": "types.ts", "file_type": "code", "source_file": "src/i18n/types.ts", "source_location": "L1"}], "edges": []} \ No newline at end of file diff --git a/graphify-out/cache/5959fd70b309a93a213e08b8ee29802f1e5f8d816bf9be768e38f60526bd8aba.json b/graphify-out/cache/5959fd70b309a93a213e08b8ee29802f1e5f8d816bf9be768e38f60526bd8aba.json new file mode 100644 index 0000000..d9eb885 --- /dev/null +++ b/graphify-out/cache/5959fd70b309a93a213e08b8ee29802f1e5f8d816bf9be768e38f60526bd8aba.json @@ -0,0 +1 @@ +{"nodes": [{"id": "jest_config", "label": "jest.config.js", "file_type": "code", "source_file": "jest.config.js", "source_location": "L1"}], "edges": []} \ No newline at end of file diff --git a/graphify-out/cache/5a69ea71a741811eaff8a626c9fee0f0b13f79ffde6d79f57ea9e3971dc2a7a9.json b/graphify-out/cache/5a69ea71a741811eaff8a626c9fee0f0b13f79ffde6d79f57ea9e3971dc2a7a9.json new file mode 100644 index 0000000..084bd53 --- /dev/null +++ b/graphify-out/cache/5a69ea71a741811eaff8a626c9fee0f0b13f79ffde6d79f57ea9e3971dc2a7a9.json @@ -0,0 +1 @@ +{"nodes": [{"id": "voiceservice", "label": "VoiceService.ts", "file_type": "code", "source_file": "src/services/VoiceService.ts", "source_location": "L1"}, {"id": "voiceservice_voiceservice", "label": "VoiceService", "file_type": "code", "source_file": "src/services/VoiceService.ts", "source_location": "L9"}, {"id": "voiceservice_voiceservice_syncchannels", "label": ".syncChannels()", "file_type": "code", "source_file": "src/services/VoiceService.ts", "source_location": "L10"}, {"id": "voiceservice_voiceservice_handlevoicestateupdate", "label": ".handleVoiceStateUpdate()", "file_type": "code", "source_file": "src/services/VoiceService.ts", "source_location": "L49"}, {"id": "voiceservice_voiceservice_handlejoin", "label": ".handleJoin()", "file_type": "code", "source_file": "src/services/VoiceService.ts", "source_location": "L65"}, {"id": "voiceservice_voiceservice_handleleave", "label": ".handleLeave()", "file_type": "code", "source_file": "src/services/VoiceService.ts", "source_location": "L211"}, {"id": "voiceservice_voiceservice_applyownershiptransfer", "label": ".applyOwnershipTransfer()", "file_type": "code", "source_file": "src/services/VoiceService.ts", "source_location": "L277"}, {"id": "voiceservice_voiceservice_sendcontrolpanel", "label": ".sendControlPanel()", "file_type": "code", "source_file": "src/services/VoiceService.ts", "source_location": "L301"}, {"id": "voiceservice_voiceservice_geteffectivename", "label": ".getEffectiveName()", "file_type": "code", "source_file": "src/services/VoiceService.ts", "source_location": "L336"}], "edges": [{"source": "voiceservice", "target": "discord_js", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/VoiceService.ts", "source_location": "L1", "weight": 1.0}, {"source": "voiceservice", "target": "database", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/VoiceService.ts", "source_location": "L2", "weight": 1.0}, {"source": "voiceservice", "target": "logger", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/VoiceService.ts", "source_location": "L3", "weight": 1.0}, {"source": "voiceservice", "target": "errorcodes", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/VoiceService.ts", "source_location": "L4", "weight": 1.0}, {"source": "voiceservice", "target": "i18n", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/VoiceService.ts", "source_location": "L5", "weight": 1.0}, {"source": "voiceservice", "target": "localehelper", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/VoiceService.ts", "source_location": "L6", "weight": 1.0}, {"source": "voiceservice", "target": "auditlogservice", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/VoiceService.ts", "source_location": "L7", "weight": 1.0}, {"source": "voiceservice", "target": "voiceservice_voiceservice", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/services/VoiceService.ts", "source_location": "L9", "weight": 1.0}, {"source": "voiceservice_voiceservice", "target": "voiceservice_voiceservice_syncchannels", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/VoiceService.ts", "source_location": "L10", "weight": 1.0}, {"source": "voiceservice_voiceservice", "target": "voiceservice_voiceservice_handlevoicestateupdate", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/VoiceService.ts", "source_location": "L49", "weight": 1.0}, {"source": "voiceservice_voiceservice", "target": "voiceservice_voiceservice_handlejoin", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/VoiceService.ts", "source_location": "L65", "weight": 1.0}, {"source": "voiceservice_voiceservice", "target": "voiceservice_voiceservice_handleleave", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/VoiceService.ts", "source_location": "L211", "weight": 1.0}, {"source": "voiceservice_voiceservice", "target": "voiceservice_voiceservice_applyownershiptransfer", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/VoiceService.ts", "source_location": "L277", "weight": 1.0}, {"source": "voiceservice_voiceservice", "target": "voiceservice_voiceservice_sendcontrolpanel", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/VoiceService.ts", "source_location": "L301", "weight": 1.0}, {"source": "voiceservice_voiceservice", "target": "voiceservice_voiceservice_geteffectivename", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/VoiceService.ts", "source_location": "L336", "weight": 1.0}, {"source": "voiceservice_voiceservice_handlevoicestateupdate", "target": "voiceservice_voiceservice_handlejoin", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/VoiceService.ts", "source_location": "L56", "weight": 0.8}, {"source": "voiceservice_voiceservice_handlevoicestateupdate", "target": "voiceservice_voiceservice_handleleave", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/VoiceService.ts", "source_location": "L58", "weight": 0.8}, {"source": "voiceservice_voiceservice_handlejoin", "target": "voiceservice_voiceservice_geteffectivename", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/VoiceService.ts", "source_location": "L130", "weight": 0.8}, {"source": "voiceservice_voiceservice_handlejoin", "target": "voiceservice_voiceservice_sendcontrolpanel", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/VoiceService.ts", "source_location": "L205", "weight": 0.8}, {"source": "voiceservice_voiceservice_handleleave", "target": "voiceservice_voiceservice_applyownershiptransfer", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/VoiceService.ts", "source_location": "L268", "weight": 0.8}, {"source": "voiceservice_voiceservice_applyownershiptransfer", "target": "voiceservice_voiceservice_sendcontrolpanel", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/VoiceService.ts", "source_location": "L298", "weight": 0.8}]} \ No newline at end of file diff --git a/graphify-out/cache/5fab837ba75876894baa1f7cb1b542e680c9d161ec0148c7d02fcf220847071e.json b/graphify-out/cache/5fab837ba75876894baa1f7cb1b542e680c9d161ec0148c7d02fcf220847071e.json new file mode 100644 index 0000000..a6eb9b2 --- /dev/null +++ b/graphify-out/cache/5fab837ba75876894baa1f7cb1b542e680c9d161ec0148c7d02fcf220847071e.json @@ -0,0 +1 @@ +{"nodes": [{"id": "mimicservice_test", "label": "MimicService.test.ts", "file_type": "code", "source_file": "tests/services/MimicService.test.ts", "source_location": "L1"}], "edges": [{"source": "mimicservice_test", "target": "mimicservice", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "tests/services/MimicService.test.ts", "source_location": "L1", "weight": 1.0}]} \ No newline at end of file diff --git a/graphify-out/cache/605d91587b0396fc047b75bfc28b4db465c472863ec248c29329562f52f4551f.json b/graphify-out/cache/605d91587b0396fc047b75bfc28b4db465c472863ec248c29329562f52f4551f.json new file mode 100644 index 0000000..c1f379a --- /dev/null +++ b/graphify-out/cache/605d91587b0396fc047b75bfc28b4db465c472863ec248c29329562f52f4551f.json @@ -0,0 +1 @@ +{"nodes": [{"id": "musicservice_test", "label": "MusicService.test.ts", "file_type": "code", "source_file": "tests/services/MusicService.test.ts", "source_location": "L1"}], "edges": [{"source": "musicservice_test", "target": "musicservice", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "tests/services/MusicService.test.ts", "source_location": "L1", "weight": 1.0}]} \ No newline at end of file diff --git a/graphify-out/cache/60ffac0c59ca98fcc70c16a3ad365bf51216b687fc88881389b8cbc7ee98657d.json b/graphify-out/cache/60ffac0c59ca98fcc70c16a3ad365bf51216b687fc88881389b8cbc7ee98657d.json new file mode 100644 index 0000000..22877d8 --- /dev/null +++ b/graphify-out/cache/60ffac0c59ca98fcc70c16a3ad365bf51216b687fc88881389b8cbc7ee98657d.json @@ -0,0 +1 @@ +{"nodes": [{"id": "boterror_test", "label": "BotError.test.ts", "file_type": "code", "source_file": "tests/errors/BotError.test.ts", "source_location": "L1"}], "edges": [{"source": "boterror_test", "target": "boterror", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "tests/errors/BotError.test.ts", "source_location": "L1", "weight": 1.0}]} \ No newline at end of file diff --git a/graphify-out/cache/6234eaf357e39d9e517114e353a74cee8e30aec05195398d317f1cfc695c8c11.json b/graphify-out/cache/6234eaf357e39d9e517114e353a74cee8e30aec05195398d317f1cfc695c8c11.json new file mode 100644 index 0000000..0d4407f --- /dev/null +++ b/graphify-out/cache/6234eaf357e39d9e517114e353a74cee8e30aec05195398d317f1cfc695c8c11.json @@ -0,0 +1 @@ +{"nodes": [{"id": "audit", "label": "audit.ts", "file_type": "code", "source_file": "src/commands/audit.ts", "source_location": "L1"}, {"id": "audit_getoverallcolor", "label": "getOverallColor()", "file_type": "code", "source_file": "src/commands/audit.ts", "source_location": "L20"}, {"id": "audit_buildresultline", "label": "buildResultLine()", "file_type": "code", "source_file": "src/commands/audit.ts", "source_location": "L26"}, {"id": "audit_execute", "label": "execute()", "file_type": "code", "source_file": "src/commands/audit.ts", "source_location": "L110"}], "edges": [{"source": "audit", "target": "discord_js", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/commands/audit.ts", "source_location": "L1", "weight": 1.0}, {"source": "audit", "target": "auditlogservice", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/commands/audit.ts", "source_location": "L10", "weight": 1.0}, {"source": "audit", "target": "permissionauditservice", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/commands/audit.ts", "source_location": "L11", "weight": 1.0}, {"source": "audit", "target": "i18n", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/commands/audit.ts", "source_location": "L12", "weight": 1.0}, {"source": "audit", "target": "audit_getoverallcolor", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/commands/audit.ts", "source_location": "L20", "weight": 1.0}, {"source": "audit", "target": "audit_buildresultline", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/commands/audit.ts", "source_location": "L26", "weight": 1.0}, {"source": "audit", "target": "audit_execute", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/commands/audit.ts", "source_location": "L110", "weight": 1.0}, {"source": "audit_execute", "target": "audit_getoverallcolor", "relation": "calls", "confidence": "INFERRED", "source_file": "src/commands/audit.ts", "source_location": "L202", "weight": 0.8}]} \ No newline at end of file diff --git a/graphify-out/cache/65451ac81dd0d6c14dbfaae1bd8278d8adde121bf5b6ea048ff1b7204475bc68.json b/graphify-out/cache/65451ac81dd0d6c14dbfaae1bd8278d8adde121bf5b6ea048ff1b7204475bc68.json new file mode 100644 index 0000000..77fc6ab --- /dev/null +++ b/graphify-out/cache/65451ac81dd0d6c14dbfaae1bd8278d8adde121bf5b6ea048ff1b7204475bc68.json @@ -0,0 +1 @@ +{"nodes": [{"id": "bigemojiservice", "label": "BigEmojiService.ts", "file_type": "code", "source_file": "src/services/BigEmojiService.ts", "source_location": "L1"}, {"id": "bigemojiservice_bigemojiservice", "label": "BigEmojiService", "file_type": "code", "source_file": "src/services/BigEmojiService.ts", "source_location": "L5"}, {"id": "bigemojiservice_bigemojiservice_handlemessage", "label": ".handleMessage()", "file_type": "code", "source_file": "src/services/BigEmojiService.ts", "source_location": "L6"}], "edges": [{"source": "bigemojiservice", "target": "discord_js", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/BigEmojiService.ts", "source_location": "L1", "weight": 1.0}, {"source": "bigemojiservice", "target": "webhookservice", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/BigEmojiService.ts", "source_location": "L2", "weight": 1.0}, {"source": "bigemojiservice", "target": "logger", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/BigEmojiService.ts", "source_location": "L3", "weight": 1.0}, {"source": "bigemojiservice", "target": "bigemojiservice_bigemojiservice", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/services/BigEmojiService.ts", "source_location": "L5", "weight": 1.0}, {"source": "bigemojiservice_bigemojiservice", "target": "bigemojiservice_bigemojiservice_handlemessage", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/BigEmojiService.ts", "source_location": "L6", "weight": 1.0}]} \ No newline at end of file diff --git a/graphify-out/cache/7154b0233ecb76317882d53a645ec5b7cd563fefefa825fb9ae179a48a786532.json b/graphify-out/cache/7154b0233ecb76317882d53a645ec5b7cd563fefefa825fb9ae179a48a786532.json new file mode 100644 index 0000000..7ce3cac --- /dev/null +++ b/graphify-out/cache/7154b0233ecb76317882d53a645ec5b7cd563fefefa825fb9ae179a48a786532.json @@ -0,0 +1 @@ +{"nodes": [{"id": "index", "label": "index.ts", "file_type": "code", "source_file": "src/index.ts", "source_location": "L1"}], "edges": [{"source": "index", "target": "kordclient", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/index.ts", "source_location": "L1", "weight": 1.0}]} \ No newline at end of file diff --git a/graphify-out/cache/794e41c8fce2149cb51e53b9582114b0ab7a89cb2aa40c3b0bac5237dabcffe2.json b/graphify-out/cache/794e41c8fce2149cb51e53b9582114b0ab7a89cb2aa40c3b0bac5237dabcffe2.json new file mode 100644 index 0000000..71594da --- /dev/null +++ b/graphify-out/cache/794e41c8fce2149cb51e53b9582114b0ab7a89cb2aa40c3b0bac5237dabcffe2.json @@ -0,0 +1 @@ +{"nodes": [{"id": "fishing_mini_game", "label": "\ub09a\uc2dc \ubbf8\ub2c8\uac8c\uc784", "file_type": "document", "source_file": "Docs/WorkDone/2026-03-31_Fishing_MiniGame_Phase1_Implementation.md"}, {"id": "fishing_mini_game_registry", "label": "\uacf5\uc6a9 \ubbf8\ub2c8\uac8c\uc784 \ub808\uc9c0\uc2a4\ud2b8\ub9ac", "file_type": "document", "source_file": "Docs/WorkDone/2026-03-31_Fishing_MiniGame_Phase1_Implementation.md"}, {"id": "/fishing cast command", "label": "/fishing cast \uba85\ub839\uc5b4", "file_type": "document", "source_file": "Docs/WorkDone/2026-03-31_Fishing_MiniGame_Phase1_Implementation.md"}, {"id": "/fishing end command", "label": "/fishing end \uba85\ub839\uc5b4", "file_type": "document", "source_file": "Docs/WorkDone/2026-03-31_Fishing_MiniGame_Phase1_Implementation.md"}, {"id": " \uc804\uc6a9 \uc2a4\ub808\ub4dc \uae30\ubc18 \uc138\uc158", "label": "\uc804\uc6a9 \uc2a4\ub808\ub4dc \uae30\ubc18 \uc138\uc158", "file_type": "document", "source_file": "Docs/WorkDone/2026-03-31_Fishing_MiniGame_Phase1_Implementation.md"}, {"id": "\uba54\ubaa8\ub9ac \uae30\ubc18 \uc138\uc158 \uad00\ub9ac", "label": "\uba54\ubaa8\ub9ac \uae30\ubc18 \uc138\uc158 \uad00\ub9ac", "file_type": "document", "source_file": "Docs/WorkDone/2026-03-31_Fishing_MiniGame_Phase1_Implementation.md"}, {"id": "\uac70\ub9ac/\ub04a\uc5b4\uc9d0 \uac8c\uc774\uc9c0", "label": "\uac70\ub9ac/\ub04a\uc5b4\uc9d0 \uac8c\uc774\uc9c0", "file_type": "document", "source_file": "Docs/WorkDone/2026-03-31_Fishing_MiniGame_Phase1_Implementation.md"}, {"id": "\uace8\ub4dc \uc9c0\uae09", "label": "\uace8\ub4dc \uc9c0\uae09", "file_type": "document", "source_file": "Docs/WorkDone/2026-03-31_Fishing_MiniGame_Phase1_Implementation.md"}, {"id": "RefinementProfile.gold", "label": "RefinementProfile.gold", "file_type": "document", "source_file": "Docs/WorkDone/2026-03-31_Fishing_MiniGame_Phase1_Implementation.md"}, {"id": "src/commands/fishing.ts", "label": "src/commands/fishing.ts", "file_type": "code", "source_file": "Docs/WorkDone/2026-03-31_Fishing_MiniGame_Phase1_Implementation.md"}, {"id": "src/services/FishingService.ts", "label": "src/services/FishingService.ts", "file_type": "code", "source_file": "Docs/WorkDone/2026-03-31_Fishing_MiniGame_Phase1_Implementation.md"}, {"id": "src/events/interactionCreate.ts", "label": "src/events/interactionCreate.ts", "file_type": "code", "source_file": "Docs/WorkDone/2026-03-31_Fishing_MiniGame_Phase1_Implementation.md"}, {"id": "src/services/MiniGameRegistry.ts", "label": "src/services/MiniGameRegistry.ts", "file_type": "code", "source_file": "Docs/WorkDone/2026-03-31_Fishing_MiniGame_Phase1_Implementation.md"}, {"id": "src/services/RefinementService.ts", "label": "src/services/RefinementService.ts", "file_type": "code", "source_file": "Docs/WorkDone/2026-03-31_Fishing_MiniGame_Phase1_Implementation.md"}, {"id": "src/i18n/types.ts", "label": "src/i18n/types.ts", "file_type": "code", "source_file": "Docs/WorkDone/2026-03-31_Fishing_MiniGame_Phase1_Implementation.md"}, {"id": "src/i18n/locales/en.ts", "label": "src/i18n/locales/en.ts", "file_type": "code", "source_file": "Docs/WorkDone/2026-03-31_Fishing_MiniGame_Phase1_Implementation.md"}, {"id": "src/i18n/locales/ko.ts", "label": "src/i18n/locales/ko.ts", "file_type": "code", "source_file": "Docs/WorkDone/2026-03-31_Fishing_MiniGame_Phase1_Implementation.md"}, {"id": "tests/services/FishingService.test.ts", "label": "tests/services/FishingService.test.ts", "file_type": "code", "source_file": "Docs/WorkDone/2026-03-31_Fishing_MiniGame_Phase1_Implementation.md"}], "edges": [], "hyperedges": []} \ No newline at end of file diff --git a/graphify-out/cache/7abf12b812b6cf1544adfaa69081fcd3f42741ff4e25bfa1f4c319569248d14e.json b/graphify-out/cache/7abf12b812b6cf1544adfaa69081fcd3f42741ff4e25bfa1f4c319569248d14e.json new file mode 100644 index 0000000..47a4d6f --- /dev/null +++ b/graphify-out/cache/7abf12b812b6cf1544adfaa69081fcd3f42741ff4e25bfa1f4c319569248d14e.json @@ -0,0 +1 @@ +{"nodes": [{"id": "activitytrackerservice", "label": "ActivityTrackerService.ts", "file_type": "code", "source_file": "src/services/ActivityTrackerService.ts", "source_location": "L1"}, {"id": "activitytrackerservice_activitytrackerservice", "label": "ActivityTrackerService", "file_type": "code", "source_file": "src/services/ActivityTrackerService.ts", "source_location": "L4"}, {"id": "activitytrackerservice_activitytrackerservice_recordactivity", "label": ".recordActivity()", "file_type": "code", "source_file": "src/services/ActivityTrackerService.ts", "source_location": "L9"}, {"id": "activitytrackerservice_activitytrackerservice_getpeakhour", "label": ".getPeakHour()", "file_type": "code", "source_file": "src/services/ActivityTrackerService.ts", "source_location": "L48"}], "edges": [{"source": "activitytrackerservice", "target": "database", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/ActivityTrackerService.ts", "source_location": "L1", "weight": 1.0}, {"source": "activitytrackerservice", "target": "logger", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/ActivityTrackerService.ts", "source_location": "L2", "weight": 1.0}, {"source": "activitytrackerservice", "target": "activitytrackerservice_activitytrackerservice", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/services/ActivityTrackerService.ts", "source_location": "L4", "weight": 1.0}, {"source": "activitytrackerservice_activitytrackerservice", "target": "activitytrackerservice_activitytrackerservice_recordactivity", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/ActivityTrackerService.ts", "source_location": "L9", "weight": 1.0}, {"source": "activitytrackerservice_activitytrackerservice", "target": "activitytrackerservice_activitytrackerservice_getpeakhour", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/ActivityTrackerService.ts", "source_location": "L48", "weight": 1.0}]} \ No newline at end of file diff --git a/graphify-out/cache/7d21f3ea3eee9329629dc4745e30ee09fa773a5786045c996156e980b4316acd.json b/graphify-out/cache/7d21f3ea3eee9329629dc4745e30ee09fa773a5786045c996156e980b4316acd.json new file mode 100644 index 0000000..1d9ccb5 --- /dev/null +++ b/graphify-out/cache/7d21f3ea3eee9329629dc4745e30ee09fa773a5786045c996156e980b4316acd.json @@ -0,0 +1 @@ +{"nodes": [{"id": "feverservice", "label": "FeverService.ts", "file_type": "code", "source_file": "src/services/FeverService.ts", "source_location": "L1"}, {"id": "feverservice_feverservice", "label": "FeverService", "file_type": "code", "source_file": "src/services/FeverService.ts", "source_location": "L5"}, {"id": "feverservice_feverservice_startscheduler", "label": ".startScheduler()", "file_type": "code", "source_file": "src/services/FeverService.ts", "source_location": "L11"}, {"id": "feverservice_feverservice_updatefeverstate", "label": ".updateFeverState()", "file_type": "code", "source_file": "src/services/FeverService.ts", "source_location": "L28"}, {"id": "feverservice_feverservice_getfeverbonus", "label": ".getFeverBonus()", "file_type": "code", "source_file": "src/services/FeverService.ts", "source_location": "L64"}], "edges": [{"source": "feverservice", "target": "database", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/FeverService.ts", "source_location": "L1", "weight": 1.0}, {"source": "feverservice", "target": "logger", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/FeverService.ts", "source_location": "L2", "weight": 1.0}, {"source": "feverservice", "target": "activitytrackerservice", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/FeverService.ts", "source_location": "L3", "weight": 1.0}, {"source": "feverservice", "target": "feverservice_feverservice", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/services/FeverService.ts", "source_location": "L5", "weight": 1.0}, {"source": "feverservice_feverservice", "target": "feverservice_feverservice_startscheduler", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FeverService.ts", "source_location": "L11", "weight": 1.0}, {"source": "feverservice_feverservice", "target": "feverservice_feverservice_updatefeverstate", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FeverService.ts", "source_location": "L28", "weight": 1.0}, {"source": "feverservice_feverservice", "target": "feverservice_feverservice_getfeverbonus", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/FeverService.ts", "source_location": "L64", "weight": 1.0}]} \ No newline at end of file diff --git a/graphify-out/cache/813d22ec6d146b5df2bd88eb4372d617798143c129fda4e09341f5ca62b9a1dd.json b/graphify-out/cache/813d22ec6d146b5df2bd88eb4372d617798143c129fda4e09341f5ca62b9a1dd.json new file mode 100644 index 0000000..1a0fc28 --- /dev/null +++ b/graphify-out/cache/813d22ec6d146b5df2bd88eb4372d617798143c129fda4e09341f5ca62b9a1dd.json @@ -0,0 +1 @@ +{"nodes": [{"id": "index", "label": "index.ts", "file_type": "code", "source_file": "src/i18n/index.ts", "source_location": "L1"}, {"id": "index_statici18nprovider", "label": "StaticI18nProvider", "file_type": "code", "source_file": "src/i18n/index.ts", "source_location": "L28"}, {"id": "index_statici18nprovider_get", "label": ".get()", "file_type": "code", "source_file": "src/i18n/index.ts", "source_location": "L29"}, {"id": "index_statici18nprovider_issupported", "label": ".isSupported()", "file_type": "code", "source_file": "src/i18n/index.ts", "source_location": "L33"}, {"id": "index_statici18nprovider_getsupportedlocales", "label": ".getSupportedLocales()", "file_type": "code", "source_file": "src/i18n/index.ts", "source_location": "L37"}, {"id": "index_seti18nprovider", "label": "setI18nProvider()", "file_type": "code", "source_file": "src/i18n/index.ts", "source_location": "L50"}, {"id": "index_geti18nprovider", "label": "getI18nProvider()", "file_type": "code", "source_file": "src/i18n/index.ts", "source_location": "L55"}, {"id": "index_resolvelocale", "label": "resolveLocale()", "file_type": "code", "source_file": "src/i18n/index.ts", "source_location": "L68"}, {"id": "index_normalizediscordlocale", "label": "normalizeDiscordLocale()", "file_type": "code", "source_file": "src/i18n/index.ts", "source_location": "L88"}, {"id": "index_t", "label": "t()", "file_type": "code", "source_file": "src/i18n/index.ts", "source_location": "L109"}, {"id": "index_getnestedvalue", "label": "getNestedValue()", "file_type": "code", "source_file": "src/i18n/index.ts", "source_location": "L134"}], "edges": [{"source": "index", "target": "types", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/i18n/index.ts", "source_location": "L9", "weight": 1.0}, {"source": "index", "target": "en", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/i18n/index.ts", "source_location": "L17", "weight": 1.0}, {"source": "index", "target": "ko", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/i18n/index.ts", "source_location": "L18", "weight": 1.0}, {"source": "index", "target": "index_statici18nprovider", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/i18n/index.ts", "source_location": "L28", "weight": 1.0}, {"source": "index_statici18nprovider", "target": "index_statici18nprovider_get", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/i18n/index.ts", "source_location": "L29", "weight": 1.0}, {"source": "index_statici18nprovider", "target": "index_statici18nprovider_issupported", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/i18n/index.ts", "source_location": "L33", "weight": 1.0}, {"source": "index_statici18nprovider", "target": "index_statici18nprovider_getsupportedlocales", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/i18n/index.ts", "source_location": "L37", "weight": 1.0}, {"source": "index", "target": "index_seti18nprovider", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/i18n/index.ts", "source_location": "L50", "weight": 1.0}, {"source": "index", "target": "index_geti18nprovider", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/i18n/index.ts", "source_location": "L55", "weight": 1.0}, {"source": "index", "target": "index_resolvelocale", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/i18n/index.ts", "source_location": "L68", "weight": 1.0}, {"source": "index", "target": "index_normalizediscordlocale", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/i18n/index.ts", "source_location": "L88", "weight": 1.0}, {"source": "index", "target": "index_t", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/i18n/index.ts", "source_location": "L109", "weight": 1.0}, {"source": "index", "target": "index_getnestedvalue", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/i18n/index.ts", "source_location": "L134", "weight": 1.0}, {"source": "index_statici18nprovider_get", "target": "index_getnestedvalue", "relation": "calls", "confidence": "INFERRED", "source_file": "src/i18n/index.ts", "source_location": "L30", "weight": 0.8}, {"source": "index_resolvelocale", "target": "index_normalizediscordlocale", "relation": "calls", "confidence": "INFERRED", "source_file": "src/i18n/index.ts", "source_location": "L72", "weight": 0.8}, {"source": "index_resolvelocale", "target": "index_statici18nprovider_issupported", "relation": "calls", "confidence": "INFERRED", "source_file": "src/i18n/index.ts", "source_location": "L76", "weight": 0.8}, {"source": "index_t", "target": "index_statici18nprovider_get", "relation": "calls", "confidence": "INFERRED", "source_file": "src/i18n/index.ts", "source_location": "L115", "weight": 0.8}]} \ No newline at end of file diff --git a/graphify-out/cache/8afe1acdad15e56a50199188f23eca22f357955f9d728790b1e2b50052eff01c.json b/graphify-out/cache/8afe1acdad15e56a50199188f23eca22f357955f9d728790b1e2b50052eff01c.json new file mode 100644 index 0000000..b2c659c --- /dev/null +++ b/graphify-out/cache/8afe1acdad15e56a50199188f23eca22f357955f9d728790b1e2b50052eff01c.json @@ -0,0 +1 @@ +{"nodes": [{"id": "env", "label": "env.ts", "file_type": "code", "source_file": "src/config/env.ts", "source_location": "L1"}, {"id": "env_generateinstanceid", "label": "generateInstanceId()", "file_type": "code", "source_file": "src/config/env.ts", "source_location": "L8"}], "edges": [{"source": "env", "target": "dotenv", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/config/env.ts", "source_location": "L1", "weight": 1.0}, {"source": "env", "target": "os", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/config/env.ts", "source_location": "L2", "weight": 1.0}, {"source": "env", "target": "path", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/config/env.ts", "source_location": "L3", "weight": 1.0}, {"source": "env", "target": "env_generateinstanceid", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/config/env.ts", "source_location": "L8", "weight": 1.0}]} \ No newline at end of file diff --git a/graphify-out/cache/8e29dd662dcc393c23b38fabc94476f5c9da9e5016c244ce542b914740993b73.json b/graphify-out/cache/8e29dd662dcc393c23b38fabc94476f5c9da9e5016c244ce542b914740993b73.json new file mode 100644 index 0000000..359b5cc --- /dev/null +++ b/graphify-out/cache/8e29dd662dcc393c23b38fabc94476f5c9da9e5016c244ce542b914740993b73.json @@ -0,0 +1 @@ +{"nodes": [{"id": "config", "label": "config.ts", "file_type": "code", "source_file": "src/commands/config.ts", "source_location": "L1"}, {"id": "config_execute", "label": "execute()", "file_type": "code", "source_file": "src/commands/config.ts", "source_location": "L66"}], "edges": [{"source": "config", "target": "discord_js", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/commands/config.ts", "source_location": "L1", "weight": 1.0}, {"source": "config", "target": "database", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/commands/config.ts", "source_location": "L8", "weight": 1.0}, {"source": "config", "target": "i18n", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/commands/config.ts", "source_location": "L9", "weight": 1.0}, {"source": "config", "target": "config_execute", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/commands/config.ts", "source_location": "L66", "weight": 1.0}]} \ No newline at end of file diff --git a/graphify-out/cache/918eb4eada13027b0f45fb527cca00b8cca7c04c65d463e4087fd7ddd79359b4.json b/graphify-out/cache/918eb4eada13027b0f45fb527cca00b8cca7c04c65d463e4087fd7ddd79359b4.json new file mode 100644 index 0000000..defa747 --- /dev/null +++ b/graphify-out/cache/918eb4eada13027b0f45fb527cca00b8cca7c04c65d463e4087fd7ddd79359b4.json @@ -0,0 +1 @@ +{"nodes": [{"id": "inviteservice_test", "label": "InviteService.test.ts", "file_type": "code", "source_file": "tests/services/InviteService.test.ts", "source_location": "L1"}], "edges": [{"source": "inviteservice_test", "target": "inviteservice", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "tests/services/InviteService.test.ts", "source_location": "L1", "weight": 1.0}]} \ No newline at end of file diff --git a/graphify-out/cache/936b5bed8a5fa5677f75f2ab71aee5c4a7b98de123a00b170f74018eebbff135.json b/graphify-out/cache/936b5bed8a5fa5677f75f2ab71aee5c4a7b98de123a00b170f74018eebbff135.json new file mode 100644 index 0000000..4683a70 --- /dev/null +++ b/graphify-out/cache/936b5bed8a5fa5677f75f2ab71aee5c4a7b98de123a00b170f74018eebbff135.json @@ -0,0 +1 @@ +{"nodes": [{"id": "i18n System", "label": "i18n \uc2dc\uc2a4\ud15c", "file_type": "concept", "source_file": "Docs/Rules/i18n_guidelines.md"}, {"id": "TranslationSchema", "label": "TranslationSchema", "file_type": "interface", "source_file": "Docs/Rules/i18n_guidelines.md"}, {"id": "src/i18n/locales/en.ts", "label": "\uc601\uc5b4 \ubc88\uc5ed \ub370\uc774\ud130", "file_type": "module", "source_file": "Docs/Rules/i18n_guidelines.md"}, {"id": "src/i18n/locales/ko.ts", "label": "\ud55c\uad6d\uc5b4 \ubc88\uc5ed \ub370\uc774\ud130", "file_type": "module", "source_file": "Docs/Rules/i18n_guidelines.md"}], "edges": [], "hyperedges": []} \ No newline at end of file diff --git a/graphify-out/cache/96ed57a6a67387141f40de6e1032843f79ef880913714f6125d93d733aee3516.json b/graphify-out/cache/96ed57a6a67387141f40de6e1032843f79ef880913714f6125d93d733aee3516.json new file mode 100644 index 0000000..28cb500 --- /dev/null +++ b/graphify-out/cache/96ed57a6a67387141f40de6e1032843f79ef880913714f6125d93d733aee3516.json @@ -0,0 +1 @@ +{"nodes": [{"id": "mimicservice", "label": "MimicService.ts", "file_type": "code", "source_file": "src/services/MimicService.ts", "source_location": "L1"}, {"id": "mimicservice_mimicservice", "label": "MimicService", "file_type": "code", "source_file": "src/services/MimicService.ts", "source_location": "L5"}, {"id": "mimicservice_mimicservice_handlemessage", "label": ".handleMessage()", "file_type": "code", "source_file": "src/services/MimicService.ts", "source_location": "L6"}], "edges": [{"source": "mimicservice", "target": "discord_js", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/MimicService.ts", "source_location": "L1", "weight": 1.0}, {"source": "mimicservice", "target": "webhookservice", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/MimicService.ts", "source_location": "L2", "weight": 1.0}, {"source": "mimicservice", "target": "logger", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/MimicService.ts", "source_location": "L3", "weight": 1.0}, {"source": "mimicservice", "target": "mimicservice_mimicservice", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/services/MimicService.ts", "source_location": "L5", "weight": 1.0}, {"source": "mimicservice_mimicservice", "target": "mimicservice_mimicservice_handlemessage", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/MimicService.ts", "source_location": "L6", "weight": 1.0}]} \ No newline at end of file diff --git a/graphify-out/cache/985f6e4e3f8a6cc3b6677ac5e06bc94fc5ec415dfdc7dbdd9ae4214fe6248729.json b/graphify-out/cache/985f6e4e3f8a6cc3b6677ac5e06bc94fc5ec415dfdc7dbdd9ae4214fe6248729.json new file mode 100644 index 0000000..26a138e --- /dev/null +++ b/graphify-out/cache/985f6e4e3f8a6cc3b6677ac5e06bc94fc5ec415dfdc7dbdd9ae4214fe6248729.json @@ -0,0 +1 @@ +{"nodes": [{"id": "ready", "label": "ready.ts", "file_type": "code", "source_file": "src/events/ready.ts", "source_location": "L1"}, {"id": "ready_execute", "label": "execute()", "file_type": "code", "source_file": "src/events/ready.ts", "source_location": "L14"}], "edges": [{"source": "ready", "target": "discord_js", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/events/ready.ts", "source_location": "L1", "weight": 1.0}, {"source": "ready", "target": "kordclient", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/events/ready.ts", "source_location": "L2", "weight": 1.0}, {"source": "ready", "target": "logger", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/events/ready.ts", "source_location": "L3", "weight": 1.0}, {"source": "ready", "target": "inviteservice", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/events/ready.ts", "source_location": "L4", "weight": 1.0}, {"source": "ready", "target": "voiceservice", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/events/ready.ts", "source_location": "L5", "weight": 1.0}, {"source": "ready", "target": "presenceservice", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/events/ready.ts", "source_location": "L6", "weight": 1.0}, {"source": "ready", "target": "eventservice", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/events/ready.ts", "source_location": "L7", "weight": 1.0}, {"source": "ready", "target": "auditlogservice", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/events/ready.ts", "source_location": "L8", "weight": 1.0}, {"source": "ready", "target": "env", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/events/ready.ts", "source_location": "L9", "weight": 1.0}, {"source": "ready", "target": "ready_execute", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/events/ready.ts", "source_location": "L14", "weight": 1.0}]} \ No newline at end of file diff --git a/graphify-out/cache/9862594404efdc754750ae50c4c7ee81b61cdeb195785f2c962047044ead208e.json b/graphify-out/cache/9862594404efdc754750ae50c4c7ee81b61cdeb195785f2c962047044ead208e.json new file mode 100644 index 0000000..357d878 --- /dev/null +++ b/graphify-out/cache/9862594404efdc754750ae50c4c7ee81b61cdeb195785f2c962047044ead208e.json @@ -0,0 +1 @@ +{"nodes": [{"id": "voice", "label": "voice.ts", "file_type": "code", "source_file": "src/commands/voice.ts", "source_location": "L1"}, {"id": "voice_execute", "label": "execute()", "file_type": "code", "source_file": "src/commands/voice.ts", "source_location": "L79"}], "edges": [{"source": "voice", "target": "discord_js", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/commands/voice.ts", "source_location": "L1", "weight": 1.0}, {"source": "voice", "target": "database", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/commands/voice.ts", "source_location": "L9", "weight": 1.0}, {"source": "voice", "target": "i18n", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/commands/voice.ts", "source_location": "L10", "weight": 1.0}, {"source": "voice", "target": "logger", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/commands/voice.ts", "source_location": "L11", "weight": 1.0}, {"source": "voice", "target": "voice_execute", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/commands/voice.ts", "source_location": "L79", "weight": 1.0}]} \ No newline at end of file diff --git a/graphify-out/cache/9b39a185fa87ea4b154f4136a97b899cd97b50f16b7d0b9ea9a93691d58bddbc.json b/graphify-out/cache/9b39a185fa87ea4b154f4136a97b899cd97b50f16b7d0b9ea9a93691d58bddbc.json new file mode 100644 index 0000000..d33824f --- /dev/null +++ b/graphify-out/cache/9b39a185fa87ea4b154f4136a97b899cd97b50f16b7d0b9ea9a93691d58bddbc.json @@ -0,0 +1 @@ +{"nodes": [{"id": "presenceservice", "label": "PresenceService.ts", "file_type": "code", "source_file": "src/services/PresenceService.ts", "source_location": "L1"}, {"id": "presenceservice_presenceservice", "label": "PresenceService", "file_type": "code", "source_file": "src/services/PresenceService.ts", "source_location": "L9"}, {"id": "presenceservice_presenceservice_startactivepresence", "label": ".startActivePresence()", "file_type": "code", "source_file": "src/services/PresenceService.ts", "source_location": "L28"}, {"id": "presenceservice_presenceservice_updatepresence", "label": ".updatePresence()", "file_type": "code", "source_file": "src/services/PresenceService.ts", "source_location": "L54"}, {"id": "presenceservice_presenceservice_stoprotation", "label": ".stopRotation()", "file_type": "code", "source_file": "src/services/PresenceService.ts", "source_location": "L74"}], "edges": [{"source": "presenceservice", "target": "discord_js", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/PresenceService.ts", "source_location": "L1", "weight": 1.0}, {"source": "presenceservice", "target": "logger", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/PresenceService.ts", "source_location": "L2", "weight": 1.0}, {"source": "presenceservice", "target": "i18n", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/PresenceService.ts", "source_location": "L3", "weight": 1.0}, {"source": "presenceservice", "target": "presenceservice_presenceservice", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/services/PresenceService.ts", "source_location": "L9", "weight": 1.0}, {"source": "presenceservice_presenceservice", "target": "presenceservice_presenceservice_startactivepresence", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/PresenceService.ts", "source_location": "L28", "weight": 1.0}, {"source": "presenceservice_presenceservice", "target": "presenceservice_presenceservice_updatepresence", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/PresenceService.ts", "source_location": "L54", "weight": 1.0}, {"source": "presenceservice_presenceservice", "target": "presenceservice_presenceservice_stoprotation", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/PresenceService.ts", "source_location": "L74", "weight": 1.0}, {"source": "presenceservice_presenceservice_startactivepresence", "target": "presenceservice_presenceservice_updatepresence", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/PresenceService.ts", "source_location": "L34", "weight": 0.8}]} \ No newline at end of file diff --git a/graphify-out/cache/9b7837e909ff863bc9d43e7ba6220f89da5f170e7692bbc1abe22211b24186a7.json b/graphify-out/cache/9b7837e909ff863bc9d43e7ba6220f89da5f170e7692bbc1abe22211b24186a7.json new file mode 100644 index 0000000..e5c3d38 --- /dev/null +++ b/graphify-out/cache/9b7837e909ff863bc9d43e7ba6220f89da5f170e7692bbc1abe22211b24186a7.json @@ -0,0 +1 @@ +{"nodes": [{"id": "commandloader", "label": "CommandLoader.ts", "file_type": "code", "source_file": "src/handlers/CommandLoader.ts", "source_location": "L1"}, {"id": "commandloader_loadcommands", "label": "loadCommands()", "file_type": "code", "source_file": "src/handlers/CommandLoader.ts", "source_location": "L6"}], "edges": [{"source": "commandloader", "target": "kordclient", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/handlers/CommandLoader.ts", "source_location": "L1", "weight": 1.0}, {"source": "commandloader", "target": "logger", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/handlers/CommandLoader.ts", "source_location": "L2", "weight": 1.0}, {"source": "commandloader", "target": "fs", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/handlers/CommandLoader.ts", "source_location": "L3", "weight": 1.0}, {"source": "commandloader", "target": "path", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/handlers/CommandLoader.ts", "source_location": "L4", "weight": 1.0}, {"source": "commandloader", "target": "commandloader_loadcommands", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/handlers/CommandLoader.ts", "source_location": "L6", "weight": 1.0}]} \ No newline at end of file diff --git a/graphify-out/cache/9bca1de8726e1cabddce01653a7cbc5ffda1af5652b4edebb4680bcef5946a7c.json b/graphify-out/cache/9bca1de8726e1cabddce01653a7cbc5ffda1af5652b4edebb4680bcef5946a7c.json new file mode 100644 index 0000000..fa02682 --- /dev/null +++ b/graphify-out/cache/9bca1de8726e1cabddce01653a7cbc5ffda1af5652b4edebb4680bcef5946a7c.json @@ -0,0 +1 @@ +{"nodes": [{"id": "setup", "label": "setup.ts", "file_type": "code", "source_file": "src/commands/setup.ts", "source_location": "L1"}, {"id": "setup_execute", "label": "execute()", "file_type": "code", "source_file": "src/commands/setup.ts", "source_location": "L18"}], "edges": [{"source": "setup", "target": "discord_js", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/commands/setup.ts", "source_location": "L1", "weight": 1.0}, {"source": "setup", "target": "setupwizardrenderer", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/commands/setup.ts", "source_location": "L6", "weight": 1.0}, {"source": "setup", "target": "i18n", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/commands/setup.ts", "source_location": "L7", "weight": 1.0}, {"source": "setup", "target": "setup_execute", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/commands/setup.ts", "source_location": "L18", "weight": 1.0}]} \ No newline at end of file diff --git a/graphify-out/cache/9e2f0a19a89a97db28d6578c98a078a5b83dbc746c0c5107e1b145fa873a4e0f.json b/graphify-out/cache/9e2f0a19a89a97db28d6578c98a078a5b83dbc746c0c5107e1b145fa873a4e0f.json new file mode 100644 index 0000000..950f13d --- /dev/null +++ b/graphify-out/cache/9e2f0a19a89a97db28d6578c98a078a5b83dbc746c0c5107e1b145fa873a4e0f.json @@ -0,0 +1 @@ +{"nodes": [{"id": "localehelper", "label": "localeHelper.ts", "file_type": "code", "source_file": "src/i18n/localeHelper.ts", "source_location": "L1"}, {"id": "localehelper_getinteractionlocale", "label": "getInteractionLocale()", "file_type": "code", "source_file": "src/i18n/localeHelper.ts", "source_location": "L21"}, {"id": "localehelper_getcontextlocale", "label": "getContextLocale()", "file_type": "code", "source_file": "src/i18n/localeHelper.ts", "source_location": "L55"}], "edges": [{"source": "localehelper", "target": "discord_js", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/i18n/localeHelper.ts", "source_location": "L8", "weight": 1.0}, {"source": "localehelper", "target": "i18n", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/i18n/localeHelper.ts", "source_location": "L9", "weight": 1.0}, {"source": "localehelper", "target": "database", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/i18n/localeHelper.ts", "source_location": "L10", "weight": 1.0}, {"source": "localehelper", "target": "localehelper_getinteractionlocale", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/i18n/localeHelper.ts", "source_location": "L21", "weight": 1.0}, {"source": "localehelper", "target": "localehelper_getcontextlocale", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/i18n/localeHelper.ts", "source_location": "L55", "weight": 1.0}]} \ No newline at end of file diff --git a/graphify-out/cache/a3fe352288ee19c0134b6105a09acfc87841bcc13dfd98f0215720b12bf4461b.json b/graphify-out/cache/a3fe352288ee19c0134b6105a09acfc87841bcc13dfd98f0215720b12bf4461b.json new file mode 100644 index 0000000..0a42bf2 --- /dev/null +++ b/graphify-out/cache/a3fe352288ee19c0134b6105a09acfc87841bcc13dfd98f0215720b12bf4461b.json @@ -0,0 +1 @@ +{"nodes": [{"id": "refinementservice", "label": "RefinementService.ts", "file_type": "code", "source_file": "src/services/RefinementService.ts", "source_location": "L1"}, {"id": "refinementservice_refinementservice", "label": "RefinementService", "file_type": "code", "source_file": "src/services/RefinementService.ts", "source_location": "L28"}, {"id": "refinementservice_refinementservice_getmaxdurability", "label": ".getMaxDurability()", "file_type": "code", "source_file": "src/services/RefinementService.ts", "source_location": "L38"}, {"id": "refinementservice_refinementservice_loadconfigs", "label": ".loadConfigs()", "file_type": "code", "source_file": "src/services/RefinementService.ts", "source_location": "L45"}, {"id": "refinementservice_refinementservice_getsysconfig", "label": ".getSysConfig()", "file_type": "code", "source_file": "src/services/RefinementService.ts", "source_location": "L67"}, {"id": "refinementservice_refinementservice_getsysconfignum", "label": ".getSysConfigNum()", "file_type": "code", "source_file": "src/services/RefinementService.ts", "source_location": "L71"}, {"id": "refinementservice_refinementservice_getcost", "label": ".getCost()", "file_type": "code", "source_file": "src/services/RefinementService.ts", "source_location": "L79"}, {"id": "refinementservice_refinementservice_tryrefine", "label": ".tryRefine()", "file_type": "code", "source_file": "src/services/RefinementService.ts", "source_location": "L86"}, {"id": "refinementservice_refinementservice_startbattle", "label": ".startBattle()", "file_type": "code", "source_file": "src/services/RefinementService.ts", "source_location": "L153"}, {"id": "refinementservice_refinementservice_checkin", "label": ".checkIn()", "file_type": "code", "source_file": "src/services/RefinementService.ts", "source_location": "L249"}, {"id": "refinementservice_refinementservice_sellweapon", "label": ".sellWeapon()", "file_type": "code", "source_file": "src/services/RefinementService.ts", "source_location": "L277"}, {"id": "refinementservice_refinementservice_getprofile", "label": ".getProfile()", "file_type": "code", "source_file": "src/services/RefinementService.ts", "source_location": "L299"}, {"id": "refinementservice_refinementservice_addgold", "label": ".addGold()", "file_type": "code", "source_file": "src/services/RefinementService.ts", "source_location": "L303"}, {"id": "refinementservice_refinementservice_getorcreateprofile", "label": ".getOrCreateProfile()", "file_type": "code", "source_file": "src/services/RefinementService.ts", "source_location": "L315"}], "edges": [{"source": "refinementservice", "target": "database", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/RefinementService.ts", "source_location": "L1", "weight": 1.0}, {"source": "refinementservice", "target": "logger", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/RefinementService.ts", "source_location": "L2", "weight": 1.0}, {"source": "refinementservice", "target": "feverservice", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/RefinementService.ts", "source_location": "L3", "weight": 1.0}, {"source": "refinementservice", "target": "client", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/RefinementService.ts", "source_location": "L4", "weight": 1.0}, {"source": "refinementservice", "target": "refinementservice_refinementservice", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/services/RefinementService.ts", "source_location": "L28", "weight": 1.0}, {"source": "refinementservice_refinementservice", "target": "refinementservice_refinementservice_getmaxdurability", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/RefinementService.ts", "source_location": "L38", "weight": 1.0}, {"source": "refinementservice_refinementservice", "target": "refinementservice_refinementservice_loadconfigs", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/RefinementService.ts", "source_location": "L45", "weight": 1.0}, {"source": "refinementservice_refinementservice", "target": "refinementservice_refinementservice_getsysconfig", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/RefinementService.ts", "source_location": "L67", "weight": 1.0}, {"source": "refinementservice_refinementservice", "target": "refinementservice_refinementservice_getsysconfignum", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/RefinementService.ts", "source_location": "L71", "weight": 1.0}, {"source": "refinementservice_refinementservice", "target": "refinementservice_refinementservice_getcost", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/RefinementService.ts", "source_location": "L79", "weight": 1.0}, {"source": "refinementservice_refinementservice", "target": "refinementservice_refinementservice_tryrefine", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/RefinementService.ts", "source_location": "L86", "weight": 1.0}, {"source": "refinementservice_refinementservice", "target": "refinementservice_refinementservice_startbattle", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/RefinementService.ts", "source_location": "L153", "weight": 1.0}, {"source": "refinementservice_refinementservice", "target": "refinementservice_refinementservice_checkin", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/RefinementService.ts", "source_location": "L249", "weight": 1.0}, {"source": "refinementservice_refinementservice", "target": "refinementservice_refinementservice_sellweapon", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/RefinementService.ts", "source_location": "L277", "weight": 1.0}, {"source": "refinementservice_refinementservice", "target": "refinementservice_refinementservice_getprofile", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/RefinementService.ts", "source_location": "L299", "weight": 1.0}, {"source": "refinementservice_refinementservice", "target": "refinementservice_refinementservice_addgold", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/RefinementService.ts", "source_location": "L303", "weight": 1.0}, {"source": "refinementservice_refinementservice", "target": "refinementservice_refinementservice_getorcreateprofile", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/RefinementService.ts", "source_location": "L315", "weight": 1.0}, {"source": "refinementservice_refinementservice_tryrefine", "target": "refinementservice_refinementservice_loadconfigs", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/RefinementService.ts", "source_location": "L87", "weight": 0.8}, {"source": "refinementservice_refinementservice_tryrefine", "target": "refinementservice_refinementservice_getorcreateprofile", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/RefinementService.ts", "source_location": "L88", "weight": 0.8}, {"source": "refinementservice_refinementservice_tryrefine", "target": "refinementservice_refinementservice_getsysconfignum", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/RefinementService.ts", "source_location": "L90", "weight": 0.8}, {"source": "refinementservice_refinementservice_tryrefine", "target": "refinementservice_refinementservice_getmaxdurability", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/RefinementService.ts", "source_location": "L115", "weight": 0.8}, {"source": "refinementservice_refinementservice_startbattle", "target": "refinementservice_refinementservice_loadconfigs", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/RefinementService.ts", "source_location": "L154", "weight": 0.8}, {"source": "refinementservice_refinementservice_startbattle", "target": "refinementservice_refinementservice_getorcreateprofile", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/RefinementService.ts", "source_location": "L155", "weight": 0.8}, {"source": "refinementservice_refinementservice_startbattle", "target": "refinementservice_refinementservice_getsysconfignum", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/RefinementService.ts", "source_location": "L163", "weight": 0.8}, {"source": "refinementservice_refinementservice_startbattle", "target": "refinementservice_refinementservice_getcost", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/RefinementService.ts", "source_location": "L188", "weight": 0.8}, {"source": "refinementservice_refinementservice_checkin", "target": "refinementservice_refinementservice_getorcreateprofile", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/RefinementService.ts", "source_location": "L250", "weight": 0.8}, {"source": "refinementservice_refinementservice_checkin", "target": "refinementservice_refinementservice_getsysconfignum", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/RefinementService.ts", "source_location": "L262", "weight": 0.8}, {"source": "refinementservice_refinementservice_sellweapon", "target": "refinementservice_refinementservice_loadconfigs", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/RefinementService.ts", "source_location": "L278", "weight": 0.8}, {"source": "refinementservice_refinementservice_sellweapon", "target": "refinementservice_refinementservice_getorcreateprofile", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/RefinementService.ts", "source_location": "L279", "weight": 0.8}, {"source": "refinementservice_refinementservice_sellweapon", "target": "refinementservice_refinementservice_getcost", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/RefinementService.ts", "source_location": "L281", "weight": 0.8}, {"source": "refinementservice_refinementservice_getprofile", "target": "refinementservice_refinementservice_getorcreateprofile", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/RefinementService.ts", "source_location": "L300", "weight": 0.8}, {"source": "refinementservice_refinementservice_addgold", "target": "refinementservice_refinementservice_getorcreateprofile", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/RefinementService.ts", "source_location": "L304", "weight": 0.8}, {"source": "refinementservice_refinementservice_getorcreateprofile", "target": "refinementservice_refinementservice_loadconfigs", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/RefinementService.ts", "source_location": "L321", "weight": 0.8}, {"source": "refinementservice_refinementservice_getorcreateprofile", "target": "refinementservice_refinementservice_getsysconfignum", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/RefinementService.ts", "source_location": "L322", "weight": 0.8}]} \ No newline at end of file diff --git a/graphify-out/cache/a597646ab3eb8e0db7420a9987107cba79837eff71857a59526bdbc0a9680d4e.json b/graphify-out/cache/a597646ab3eb8e0db7420a9987107cba79837eff71857a59526bdbc0a9680d4e.json new file mode 100644 index 0000000..432bbc3 --- /dev/null +++ b/graphify-out/cache/a597646ab3eb8e0db7420a9987107cba79837eff71857a59526bdbc0a9680d4e.json @@ -0,0 +1 @@ +{"nodes": [{"id": "errorhandler", "label": "errorHandler.ts", "file_type": "code", "source_file": "src/utils/errorHandler.ts", "source_location": "L1"}, {"id": "errorhandler_handleglobalexceptions", "label": "handleGlobalExceptions()", "file_type": "code", "source_file": "src/utils/errorHandler.ts", "source_location": "L3"}], "edges": [{"source": "errorhandler", "target": "logger", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/utils/errorHandler.ts", "source_location": "L1", "weight": 1.0}, {"source": "errorhandler", "target": "errorhandler_handleglobalexceptions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/utils/errorHandler.ts", "source_location": "L3", "weight": 1.0}]} \ No newline at end of file diff --git a/graphify-out/cache/a90e63e7a622a8820a650e45a1d16cd181ef6ed58b83dfc1be563a868d011aa9.json b/graphify-out/cache/a90e63e7a622a8820a650e45a1d16cd181ef6ed58b83dfc1be563a868d011aa9.json new file mode 100644 index 0000000..d0fd130 --- /dev/null +++ b/graphify-out/cache/a90e63e7a622a8820a650e45a1d16cd181ef6ed58b83dfc1be563a868d011aa9.json @@ -0,0 +1 @@ +{"nodes": [{"id": "music", "label": "music.ts", "file_type": "code", "source_file": "src/commands/music.ts", "source_location": "L1"}, {"id": "music_builderrormessage", "label": "buildErrorMessage()", "file_type": "code", "source_file": "src/commands/music.ts", "source_location": "L6"}, {"id": "music_respond", "label": "respond()", "file_type": "code", "source_file": "src/commands/music.ts", "source_location": "L14"}, {"id": "music_execute", "label": "execute()", "file_type": "code", "source_file": "src/commands/music.ts", "source_location": "L130"}], "edges": [{"source": "music", "target": "discord_js", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/commands/music.ts", "source_location": "L1", "weight": 1.0}, {"source": "music", "target": "i18n", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/commands/music.ts", "source_location": "L2", "weight": 1.0}, {"source": "music", "target": "musicservice", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/commands/music.ts", "source_location": "L3", "weight": 1.0}, {"source": "music", "target": "logger", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/commands/music.ts", "source_location": "L4", "weight": 1.0}, {"source": "music", "target": "music_builderrormessage", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/commands/music.ts", "source_location": "L6", "weight": 1.0}, {"source": "music", "target": "music_respond", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/commands/music.ts", "source_location": "L14", "weight": 1.0}, {"source": "music", "target": "music_execute", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/commands/music.ts", "source_location": "L130", "weight": 1.0}, {"source": "music_execute", "target": "music_builderrormessage", "relation": "calls", "confidence": "INFERRED", "source_file": "src/commands/music.ts", "source_location": "L140", "weight": 0.8}, {"source": "music_execute", "target": "music_respond", "relation": "calls", "confidence": "INFERRED", "source_file": "src/commands/music.ts", "source_location": "L377", "weight": 0.8}]} \ No newline at end of file diff --git a/graphify-out/cache/a9e92c3854f2e7979e3cbbc34f593be19f6ed2c3700c4665dcf084625826936a.json b/graphify-out/cache/a9e92c3854f2e7979e3cbbc34f593be19f6ed2c3700c4665dcf084625826936a.json new file mode 100644 index 0000000..b07c333 --- /dev/null +++ b/graphify-out/cache/a9e92c3854f2e7979e3cbbc34f593be19f6ed2c3700c4665dcf084625826936a.json @@ -0,0 +1 @@ +{"nodes": [{"id": "messagecreate", "label": "messageCreate.ts", "file_type": "code", "source_file": "src/events/messageCreate.ts", "source_location": "L1"}, {"id": "messagecreate_execute", "label": "execute()", "file_type": "code", "source_file": "src/events/messageCreate.ts", "source_location": "L10"}], "edges": [{"source": "messagecreate", "target": "discord_js", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/events/messageCreate.ts", "source_location": "L1", "weight": 1.0}, {"source": "messagecreate", "target": "mimicservice", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/events/messageCreate.ts", "source_location": "L2", "weight": 1.0}, {"source": "messagecreate", "target": "bigemojiservice", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/events/messageCreate.ts", "source_location": "L3", "weight": 1.0}, {"source": "messagecreate", "target": "database", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/events/messageCreate.ts", "source_location": "L4", "weight": 1.0}, {"source": "messagecreate", "target": "activitytrackerservice", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/events/messageCreate.ts", "source_location": "L5", "weight": 1.0}, {"source": "messagecreate", "target": "messagecreate_execute", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/events/messageCreate.ts", "source_location": "L10", "weight": 1.0}]} \ No newline at end of file diff --git a/graphify-out/cache/afe490840cbc66befee9feb178db4a74c0d23bb1474717c26978b0d8f9784453.json b/graphify-out/cache/afe490840cbc66befee9feb178db4a74c0d23bb1474717c26978b0d8f9784453.json new file mode 100644 index 0000000..3fc7a0b --- /dev/null +++ b/graphify-out/cache/afe490840cbc66befee9feb178db4a74c0d23bb1474717c26978b0d8f9784453.json @@ -0,0 +1 @@ +{"nodes": [{"id": "webhookservice", "label": "WebhookService.ts", "file_type": "code", "source_file": "src/services/WebhookService.ts", "source_location": "L1"}, {"id": "webhookservice_webhookservice", "label": "WebhookService", "file_type": "code", "source_file": "src/services/WebhookService.ts", "source_location": "L4"}, {"id": "webhookservice_webhookservice_getwebhookclient", "label": ".getWebhookClient()", "file_type": "code", "source_file": "src/services/WebhookService.ts", "source_location": "L13"}], "edges": [{"source": "webhookservice", "target": "discord_js", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/WebhookService.ts", "source_location": "L1", "weight": 1.0}, {"source": "webhookservice", "target": "logger", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/WebhookService.ts", "source_location": "L2", "weight": 1.0}, {"source": "webhookservice", "target": "webhookservice_webhookservice", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/services/WebhookService.ts", "source_location": "L4", "weight": 1.0}, {"source": "webhookservice_webhookservice", "target": "webhookservice_webhookservice_getwebhookclient", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/WebhookService.ts", "source_location": "L13", "weight": 1.0}]} \ No newline at end of file diff --git a/graphify-out/cache/b213040b892f77bd2c7ef6654209ecd7ec346532cd89a6ecc2504a9978f7b413.json b/graphify-out/cache/b213040b892f77bd2c7ef6654209ecd7ec346532cd89a6ecc2504a9978f7b413.json new file mode 100644 index 0000000..d68ac06 --- /dev/null +++ b/graphify-out/cache/b213040b892f77bd2c7ef6654209ecd7ec346532cd89a6ecc2504a9978f7b413.json @@ -0,0 +1 @@ +{"nodes": [{"id": "en", "label": "en.ts", "file_type": "code", "source_file": "src/i18n/locales/en.ts", "source_location": "L1"}], "edges": [{"source": "en", "target": "types", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/i18n/locales/en.ts", "source_location": "L1", "weight": 1.0}]} \ No newline at end of file diff --git a/graphify-out/cache/b5039ca0d0c50968f70bc1239f1446284489b68663f81fbe458c24e2eec70003.json b/graphify-out/cache/b5039ca0d0c50968f70bc1239f1446284489b68663f81fbe458c24e2eec70003.json new file mode 100644 index 0000000..a4c38ba --- /dev/null +++ b/graphify-out/cache/b5039ca0d0c50968f70bc1239f1446284489b68663f81fbe458c24e2eec70003.json @@ -0,0 +1 @@ +{"nodes": [{"id": "errorreporter", "label": "ErrorReporter.ts", "file_type": "code", "source_file": "src/errors/ErrorReporter.ts", "source_location": "L1"}, {"id": "errorreporter_errorreporter", "label": "ErrorReporter", "file_type": "code", "source_file": "src/errors/ErrorReporter.ts", "source_location": "L38"}, {"id": "errorreporter_errorreporter_report", "label": ".report()", "file_type": "code", "source_file": "src/errors/ErrorReporter.ts", "source_location": "L43"}, {"id": "errorreporter_errorreporter_wrap", "label": ".wrap()", "file_type": "code", "source_file": "src/errors/ErrorReporter.ts", "source_location": "L73"}, {"id": "errorreporter_errorreporter_buildembed", "label": ".buildEmbed()", "file_type": "code", "source_file": "src/errors/ErrorReporter.ts", "source_location": "L107"}, {"id": "errorreporter_witherrorhandler", "label": "withErrorHandler()", "file_type": "code", "source_file": "src/errors/ErrorReporter.ts", "source_location": "L136"}], "edges": [{"source": "errorreporter", "target": "discord_js", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/errors/ErrorReporter.ts", "source_location": "L1", "weight": 1.0}, {"source": "errorreporter", "target": "boterror", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/errors/ErrorReporter.ts", "source_location": "L8", "weight": 1.0}, {"source": "errorreporter", "target": "errorcodes", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/errors/ErrorReporter.ts", "source_location": "L9", "weight": 1.0}, {"source": "errorreporter", "target": "logger", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/errors/ErrorReporter.ts", "source_location": "L10", "weight": 1.0}, {"source": "errorreporter", "target": "i18n", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/errors/ErrorReporter.ts", "source_location": "L11", "weight": 1.0}, {"source": "errorreporter", "target": "errorreporter_errorreporter", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/errors/ErrorReporter.ts", "source_location": "L38", "weight": 1.0}, {"source": "errorreporter_errorreporter", "target": "errorreporter_errorreporter_report", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/errors/ErrorReporter.ts", "source_location": "L43", "weight": 1.0}, {"source": "errorreporter_errorreporter", "target": "errorreporter_errorreporter_wrap", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/errors/ErrorReporter.ts", "source_location": "L73", "weight": 1.0}, {"source": "errorreporter_errorreporter", "target": "errorreporter_errorreporter_buildembed", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/errors/ErrorReporter.ts", "source_location": "L107", "weight": 1.0}, {"source": "errorreporter", "target": "errorreporter_witherrorhandler", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/errors/ErrorReporter.ts", "source_location": "L136", "weight": 1.0}, {"source": "errorreporter_errorreporter_report", "target": "errorreporter_errorreporter_buildembed", "relation": "calls", "confidence": "INFERRED", "source_file": "src/errors/ErrorReporter.ts", "source_location": "L55", "weight": 0.8}, {"source": "errorreporter_witherrorhandler", "target": "errorreporter_errorreporter_wrap", "relation": "calls", "confidence": "INFERRED", "source_file": "src/errors/ErrorReporter.ts", "source_location": "L144", "weight": 0.8}, {"source": "errorreporter_witherrorhandler", "target": "errorreporter_errorreporter_report", "relation": "calls", "confidence": "INFERRED", "source_file": "src/errors/ErrorReporter.ts", "source_location": "L145", "weight": 0.8}]} \ No newline at end of file diff --git a/graphify-out/cache/b50ce4d70d8a675e9133039a73b0415776ae4610212da03b506a808331662a7e.json b/graphify-out/cache/b50ce4d70d8a675e9133039a73b0415776ae4610212da03b506a808331662a7e.json new file mode 100644 index 0000000..e550231 --- /dev/null +++ b/graphify-out/cache/b50ce4d70d8a675e9133039a73b0415776ae4610212da03b506a808331662a7e.json @@ -0,0 +1 @@ +{"nodes": [{"id": "fishing", "label": "fishing.ts", "file_type": "code", "source_file": "src/commands/fishing.ts", "source_location": "L1"}, {"id": "fishing_execute", "label": "execute()", "file_type": "code", "source_file": "src/commands/fishing.ts", "source_location": "L83"}], "edges": [{"source": "fishing", "target": "discord_js", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/commands/fishing.ts", "source_location": "L1", "weight": 1.0}, {"source": "fishing", "target": "database", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/commands/fishing.ts", "source_location": "L7", "weight": 1.0}, {"source": "fishing", "target": "i18n", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/commands/fishing.ts", "source_location": "L8", "weight": 1.0}, {"source": "fishing", "target": "fishingservice", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/commands/fishing.ts", "source_location": "L9", "weight": 1.0}, {"source": "fishing", "target": "fishing_execute", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/commands/fishing.ts", "source_location": "L83", "weight": 1.0}]} \ No newline at end of file diff --git a/graphify-out/cache/b69662b6b95e0b41c21b613d350629db99a0f8b0a1fd7b1d29787f6dfd991b78.json b/graphify-out/cache/b69662b6b95e0b41c21b613d350629db99a0f8b0a1fd7b1d29787f6dfd991b78.json new file mode 100644 index 0000000..5010525 --- /dev/null +++ b/graphify-out/cache/b69662b6b95e0b41c21b613d350629db99a0f8b0a1fd7b1d29787f6dfd991b78.json @@ -0,0 +1 @@ +{"nodes": [{"id": "setupwizardhandler", "label": "setupWizardHandler.ts", "file_type": "code", "source_file": "src/interactions/handlers/setupWizardHandler.ts", "source_location": "L1"}, {"id": "setupwizardhandler_handlesetupwizardinteraction", "label": "handleSetupWizardInteraction()", "file_type": "code", "source_file": "src/interactions/handlers/setupWizardHandler.ts", "source_location": "L7"}], "edges": [{"source": "setupwizardhandler", "target": "discord_js", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/interactions/handlers/setupWizardHandler.ts", "source_location": "L1", "weight": 1.0}, {"source": "setupwizardhandler", "target": "setupwizardrenderer", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/interactions/handlers/setupWizardHandler.ts", "source_location": "L2", "weight": 1.0}, {"source": "setupwizardhandler", "target": "i18n", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/interactions/handlers/setupWizardHandler.ts", "source_location": "L3", "weight": 1.0}, {"source": "setupwizardhandler", "target": "errorcodes", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/interactions/handlers/setupWizardHandler.ts", "source_location": "L4", "weight": 1.0}, {"source": "setupwizardhandler", "target": "database", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/interactions/handlers/setupWizardHandler.ts", "source_location": "L5", "weight": 1.0}, {"source": "setupwizardhandler", "target": "setupwizardhandler_handlesetupwizardinteraction", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/interactions/handlers/setupWizardHandler.ts", "source_location": "L7", "weight": 1.0}]} \ No newline at end of file diff --git a/graphify-out/cache/babbe0b67b93c3a346d4c68529bb575367acbe7eae803fe066af550e3adc2dfc.json b/graphify-out/cache/babbe0b67b93c3a346d4c68529bb575367acbe7eae803fe066af550e3adc2dfc.json new file mode 100644 index 0000000..2326cd2 --- /dev/null +++ b/graphify-out/cache/babbe0b67b93c3a346d4c68529bb575367acbe7eae803fe066af550e3adc2dfc.json @@ -0,0 +1 @@ +{"nodes": [{"id": "eventloader", "label": "EventLoader.ts", "file_type": "code", "source_file": "src/handlers/EventLoader.ts", "source_location": "L1"}, {"id": "eventloader_loadevents", "label": "loadEvents()", "file_type": "code", "source_file": "src/handlers/EventLoader.ts", "source_location": "L6"}], "edges": [{"source": "eventloader", "target": "kordclient", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/handlers/EventLoader.ts", "source_location": "L1", "weight": 1.0}, {"source": "eventloader", "target": "logger", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/handlers/EventLoader.ts", "source_location": "L2", "weight": 1.0}, {"source": "eventloader", "target": "fs", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/handlers/EventLoader.ts", "source_location": "L3", "weight": 1.0}, {"source": "eventloader", "target": "path", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/handlers/EventLoader.ts", "source_location": "L4", "weight": 1.0}, {"source": "eventloader", "target": "eventloader_loadevents", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/handlers/EventLoader.ts", "source_location": "L6", "weight": 1.0}]} \ No newline at end of file diff --git a/graphify-out/cache/bb61faf69f4f91b9c7c57f545d1bd9122320b6e17055a8b2943d5c7df3f0d4ba.json b/graphify-out/cache/bb61faf69f4f91b9c7c57f545d1bd9122320b6e17055a8b2943d5c7df3f0d4ba.json new file mode 100644 index 0000000..255dc56 --- /dev/null +++ b/graphify-out/cache/bb61faf69f4f91b9c7c57f545d1bd9122320b6e17055a8b2943d5c7df3f0d4ba.json @@ -0,0 +1 @@ +{"nodes": [{"id": "setupwizardrenderer", "label": "SetupWizardRenderer.ts", "file_type": "code", "source_file": "src/services/SetupWizardRenderer.ts", "source_location": "L1"}, {"id": "setupwizardrenderer_setupwizardrenderer", "label": "SetupWizardRenderer", "file_type": "code", "source_file": "src/services/SetupWizardRenderer.ts", "source_location": "L17"}, {"id": "setupwizardrenderer_setupwizardrenderer_renderstep", "label": ".renderStep()", "file_type": "code", "source_file": "src/services/SetupWizardRenderer.ts", "source_location": "L18"}], "edges": [{"source": "setupwizardrenderer", "target": "discord_js", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/SetupWizardRenderer.ts", "source_location": "L1", "weight": 1.0}, {"source": "setupwizardrenderer", "target": "i18n", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/SetupWizardRenderer.ts", "source_location": "L13", "weight": 1.0}, {"source": "setupwizardrenderer", "target": "permissionauditservice", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/SetupWizardRenderer.ts", "source_location": "L14", "weight": 1.0}, {"source": "setupwizardrenderer", "target": "database", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/SetupWizardRenderer.ts", "source_location": "L15", "weight": 1.0}, {"source": "setupwizardrenderer", "target": "setupwizardrenderer_setupwizardrenderer", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/services/SetupWizardRenderer.ts", "source_location": "L17", "weight": 1.0}, {"source": "setupwizardrenderer_setupwizardrenderer", "target": "setupwizardrenderer_setupwizardrenderer_renderstep", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/SetupWizardRenderer.ts", "source_location": "L18", "weight": 1.0}]} \ No newline at end of file diff --git a/graphify-out/cache/bdbde68acdf804fb04d4c319ad900ece7988db03c0fa45ad22d9c6e752ebc838.json b/graphify-out/cache/bdbde68acdf804fb04d4c319ad900ece7988db03c0fa45ad22d9c6e752ebc838.json new file mode 100644 index 0000000..dff9f2b --- /dev/null +++ b/graphify-out/cache/bdbde68acdf804fb04d4c319ad900ece7988db03c0fa45ad22d9c6e752ebc838.json @@ -0,0 +1 @@ +{"nodes": [{"id": "fishingservice_test", "label": "FishingService.test.ts", "file_type": "code", "source_file": "tests/services/FishingService.test.ts", "source_location": "L1"}], "edges": [{"source": "fishingservice_test", "target": "fishingservice", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "tests/services/FishingService.test.ts", "source_location": "L1", "weight": 1.0}]} \ No newline at end of file diff --git a/graphify-out/cache/c46b0c785692d3348831796c1eaac37fbeaba54687b9c43d9c638b6cc8c00bbf.json b/graphify-out/cache/c46b0c785692d3348831796c1eaac37fbeaba54687b9c43d9c638b6cc8c00bbf.json new file mode 100644 index 0000000..7301fed --- /dev/null +++ b/graphify-out/cache/c46b0c785692d3348831796c1eaac37fbeaba54687b9c43d9c638b6cc8c00bbf.json @@ -0,0 +1 @@ +{"nodes": [{"id": "FishingCollectionEntry", "label": "Fishing Collection Entry", "file_type": "document", "source_file": "Docs/WorkDone/2026-04-07_Fishing_Size_Ranking_Implementation.md"}, {"id": "/fishing ranking", "label": "/fishing ranking command", "file_type": "document", "source_file": "Docs/WorkDone/2026-04-07_Fishing_Size_Ranking_Implementation.md"}], "edges": [], "hyperedges": []} \ No newline at end of file diff --git a/graphify-out/cache/c65d63ddd0100a1548ae2d0d91da37aca4e1805f6bddfeeb2f78236f6f9aebaf.json b/graphify-out/cache/c65d63ddd0100a1548ae2d0d91da37aca4e1805f6bddfeeb2f78236f6f9aebaf.json new file mode 100644 index 0000000..2807ebc --- /dev/null +++ b/graphify-out/cache/c65d63ddd0100a1548ae2d0d91da37aca4e1805f6bddfeeb2f78236f6f9aebaf.json @@ -0,0 +1 @@ +{"nodes": [{"id": "PermissionAuditService", "label": "Permission Audit Service", "file_type": "document", "source_file": "Docs/WorkDone/2026-03-27_Permission_Audit_Implementation.md"}, {"id": "/audit-permissions", "label": "/audit-permissions command", "file_type": "document", "source_file": "Docs/WorkDone/2026-03-27_Permission_Audit_Implementation.md"}], "edges": [], "hyperedges": []} \ No newline at end of file diff --git a/graphify-out/cache/ca8b60a3287c3c616c01ab52d5b557b1f77543920cbb926cb4477c392abd0bf8.json b/graphify-out/cache/ca8b60a3287c3c616c01ab52d5b557b1f77543920cbb926cb4477c392abd0bf8.json new file mode 100644 index 0000000..6a68a5c --- /dev/null +++ b/graphify-out/cache/ca8b60a3287c3c616c01ab52d5b557b1f77543920cbb926cb4477c392abd0bf8.json @@ -0,0 +1 @@ +{"nodes": [{"id": "guildmemberadd", "label": "guildMemberAdd.ts", "file_type": "code", "source_file": "src/events/guildMemberAdd.ts", "source_location": "L1"}, {"id": "guildmemberadd_execute", "label": "execute()", "file_type": "code", "source_file": "src/events/guildMemberAdd.ts", "source_location": "L7"}], "edges": [{"source": "guildmemberadd", "target": "discord_js", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/events/guildMemberAdd.ts", "source_location": "L1", "weight": 1.0}, {"source": "guildmemberadd", "target": "inviteservice", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/events/guildMemberAdd.ts", "source_location": "L2", "weight": 1.0}, {"source": "guildmemberadd", "target": "guildmemberadd_execute", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/events/guildMemberAdd.ts", "source_location": "L7", "weight": 1.0}]} \ No newline at end of file diff --git a/graphify-out/cache/d4f1a6c739e8662e5a88603e014233a3ddb0e0544df737320c90f91446cc9af4.json b/graphify-out/cache/d4f1a6c739e8662e5a88603e014233a3ddb0e0544df737320c90f91446cc9af4.json new file mode 100644 index 0000000..ff1bf7a --- /dev/null +++ b/graphify-out/cache/d4f1a6c739e8662e5a88603e014233a3ddb0e0544df737320c90f91446cc9af4.json @@ -0,0 +1 @@ +{"nodes": [{"id": "musicservice", "label": "MusicService.ts", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L1"}, {"id": "musicservice_extractyoutubevideoid", "label": "extractYouTubeVideoId()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L79"}, {"id": "musicservice_isyoutubeplaylisturl", "label": "isYouTubePlaylistUrl()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L118"}, {"id": "musicservice_parsedurationseconds", "label": "parseDurationSeconds()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L133"}, {"id": "musicservice_parsedurationtexttoseconds", "label": "parseDurationTextToSeconds()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L145"}, {"id": "musicservice_formatduration", "label": "formatDuration()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L175"}, {"id": "musicservice_musicservice", "label": "MusicService", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L191"}, {"id": "musicservice_musicservice_getyoutube", "label": ".getYouTube()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L199"}, {"id": "musicservice_musicservice_addfromquery", "label": ".addFromQuery()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L207"}, {"id": "musicservice_musicservice_addfromurl", "label": ".addFromUrl()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L231"}, {"id": "musicservice_musicservice_getqueueembed", "label": ".getQueueEmbed()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L260"}, {"id": "musicservice_musicservice_getactivevoicechannelid", "label": ".getActiveVoiceChannelId()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L300"}, {"id": "musicservice_musicservice_skip", "label": ".skip()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L304"}, {"id": "musicservice_musicservice_pause", "label": ".pause()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L314"}, {"id": "musicservice_musicservice_resume", "label": ".resume()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L334"}, {"id": "musicservice_musicservice_stop", "label": ".stop()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L351"}, {"id": "musicservice_musicservice_remove", "label": ".remove()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L368"}, {"id": "musicservice_musicservice_leave", "label": ".leave()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L384"}, {"id": "musicservice_musicservice_handlecontrolinteraction", "label": ".handleControlInteraction()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L404"}, {"id": "musicservice_musicservice_createqueueitem", "label": ".createQueueItem()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L454"}, {"id": "musicservice_musicservice_enqueuetracks", "label": ".enqueueTracks()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L476"}, {"id": "musicservice_musicservice_ensuresession", "label": ".ensureSession()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L505"}, {"id": "musicservice_musicservice_bindsessionevents", "label": ".bindSessionEvents()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L561"}, {"id": "musicservice_musicservice_ontrackfinished", "label": ".onTrackFinished()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L577"}, {"id": "musicservice_musicservice_notifyplaybackfailure", "label": ".notifyPlaybackFailure()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L597"}, {"id": "musicservice_musicservice_playnext", "label": ".playNext()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L618"}, {"id": "musicservice_musicservice_resolvestreamurl", "label": ".resolveStreamUrl()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L660"}, {"id": "musicservice_musicservice_extractplaylist", "label": ".extractPlaylist()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L711"}, {"id": "musicservice_musicservice_spawnffmpeg", "label": ".spawnFfmpeg()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L754"}, {"id": "musicservice_musicservice_cleanupprocess", "label": ".cleanupProcess()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L796"}, {"id": "musicservice_musicservice_rendernowplaying", "label": ".renderNowPlaying()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L805"}, {"id": "musicservice_musicservice_renderidlestate", "label": ".renderIdleState()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L822"}, {"id": "musicservice_musicservice_buildcontrolrow", "label": ".buildControlRow()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L840"}, {"id": "musicservice_musicservice_buildfallbackcontrolrow", "label": ".buildFallbackControlRow()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L866"}, {"id": "musicservice_musicservice_buildnowplayingembed", "label": ".buildNowPlayingEmbed()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L891"}, {"id": "musicservice_musicservice_buildprogressbar", "label": ".buildProgressBar()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L948"}, {"id": "musicservice_musicservice_buildindeterminateprogressbar", "label": ".buildIndeterminateProgressBar()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L955"}, {"id": "musicservice_musicservice_startprogressupdates", "label": ".startProgressUpdates()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L961"}, {"id": "musicservice_musicservice_stopprogressupdates", "label": ".stopProgressUpdates()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L984"}, {"id": "musicservice_musicservice_ispaused", "label": ".isPaused()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L991"}, {"id": "musicservice_musicservice_getelapsedseconds", "label": ".getElapsedSeconds()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L995"}, {"id": "musicservice_musicservice_refreshcontrolmessage", "label": ".refreshControlMessage()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L1005"}, {"id": "musicservice_musicservice_formattrackline", "label": ".formatTrackLine()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L1027"}, {"id": "musicservice_musicservice_safesend", "label": ".safeSend()", "file_type": "code", "source_file": "src/services/MusicService.ts", "source_location": "L1031"}], "edges": [{"source": "musicservice", "target": "discord_js", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L1", "weight": 1.0}, {"source": "musicservice", "target": "voice", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L9", "weight": 1.0}, {"source": "musicservice", "target": "ffmpeg_static", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L21", "weight": 1.0}, {"source": "musicservice", "target": "child_process", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L22", "weight": 1.0}, {"source": "musicservice", "target": "util", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L23", "weight": 1.0}, {"source": "musicservice", "target": "i18n", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L24", "weight": 1.0}, {"source": "musicservice", "target": "logger", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L25", "weight": 1.0}, {"source": "musicservice", "target": "musicservice_extractyoutubevideoid", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L79", "weight": 1.0}, {"source": "musicservice", "target": "musicservice_isyoutubeplaylisturl", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L118", "weight": 1.0}, {"source": "musicservice", "target": "musicservice_parsedurationseconds", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L133", "weight": 1.0}, {"source": "musicservice", "target": "musicservice_parsedurationtexttoseconds", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L145", "weight": 1.0}, {"source": "musicservice", "target": "musicservice_formatduration", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L175", "weight": 1.0}, {"source": "musicservice", "target": "musicservice_musicservice", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L191", "weight": 1.0}, {"source": "musicservice_musicservice", "target": "musicservice_musicservice_getyoutube", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L199", "weight": 1.0}, {"source": "musicservice_musicservice", "target": "musicservice_musicservice_addfromquery", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L207", "weight": 1.0}, {"source": "musicservice_musicservice", "target": "musicservice_musicservice_addfromurl", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L231", "weight": 1.0}, {"source": "musicservice_musicservice", "target": "musicservice_musicservice_getqueueembed", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L260", "weight": 1.0}, {"source": "musicservice_musicservice", "target": "musicservice_musicservice_getactivevoicechannelid", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L300", "weight": 1.0}, {"source": "musicservice_musicservice", "target": "musicservice_musicservice_skip", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L304", "weight": 1.0}, {"source": "musicservice_musicservice", "target": "musicservice_musicservice_pause", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L314", "weight": 1.0}, {"source": "musicservice_musicservice", "target": "musicservice_musicservice_resume", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L334", "weight": 1.0}, {"source": "musicservice_musicservice", "target": "musicservice_musicservice_stop", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L351", "weight": 1.0}, {"source": "musicservice_musicservice", "target": "musicservice_musicservice_remove", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L368", "weight": 1.0}, {"source": "musicservice_musicservice", "target": "musicservice_musicservice_leave", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L384", "weight": 1.0}, {"source": "musicservice_musicservice", "target": "musicservice_musicservice_handlecontrolinteraction", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L404", "weight": 1.0}, {"source": "musicservice_musicservice", "target": "musicservice_musicservice_createqueueitem", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L454", "weight": 1.0}, {"source": "musicservice_musicservice", "target": "musicservice_musicservice_enqueuetracks", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L476", "weight": 1.0}, {"source": "musicservice_musicservice", "target": "musicservice_musicservice_ensuresession", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L505", "weight": 1.0}, {"source": "musicservice_musicservice", "target": "musicservice_musicservice_bindsessionevents", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L561", "weight": 1.0}, {"source": "musicservice_musicservice", "target": "musicservice_musicservice_ontrackfinished", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L577", "weight": 1.0}, {"source": "musicservice_musicservice", "target": "musicservice_musicservice_notifyplaybackfailure", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L597", "weight": 1.0}, {"source": "musicservice_musicservice", "target": "musicservice_musicservice_playnext", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L618", "weight": 1.0}, {"source": "musicservice_musicservice", "target": "musicservice_musicservice_resolvestreamurl", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L660", "weight": 1.0}, {"source": "musicservice_musicservice", "target": "musicservice_musicservice_extractplaylist", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L711", "weight": 1.0}, {"source": "musicservice_musicservice", "target": "musicservice_musicservice_spawnffmpeg", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L754", "weight": 1.0}, {"source": "musicservice_musicservice", "target": "musicservice_musicservice_cleanupprocess", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L796", "weight": 1.0}, {"source": "musicservice_musicservice", "target": "musicservice_musicservice_rendernowplaying", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L805", "weight": 1.0}, {"source": "musicservice_musicservice", "target": "musicservice_musicservice_renderidlestate", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L822", "weight": 1.0}, {"source": "musicservice_musicservice", "target": "musicservice_musicservice_buildcontrolrow", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L840", "weight": 1.0}, {"source": "musicservice_musicservice", "target": "musicservice_musicservice_buildfallbackcontrolrow", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L866", "weight": 1.0}, {"source": "musicservice_musicservice", "target": "musicservice_musicservice_buildnowplayingembed", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L891", "weight": 1.0}, {"source": "musicservice_musicservice", "target": "musicservice_musicservice_buildprogressbar", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L948", "weight": 1.0}, {"source": "musicservice_musicservice", "target": "musicservice_musicservice_buildindeterminateprogressbar", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L955", "weight": 1.0}, {"source": "musicservice_musicservice", "target": "musicservice_musicservice_startprogressupdates", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L961", "weight": 1.0}, {"source": "musicservice_musicservice", "target": "musicservice_musicservice_stopprogressupdates", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L984", "weight": 1.0}, {"source": "musicservice_musicservice", "target": "musicservice_musicservice_ispaused", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L991", "weight": 1.0}, {"source": "musicservice_musicservice", "target": "musicservice_musicservice_getelapsedseconds", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L995", "weight": 1.0}, {"source": "musicservice_musicservice", "target": "musicservice_musicservice_refreshcontrolmessage", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L1005", "weight": 1.0}, {"source": "musicservice_musicservice", "target": "musicservice_musicservice_formattrackline", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L1027", "weight": 1.0}, {"source": "musicservice_musicservice", "target": "musicservice_musicservice_safesend", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/MusicService.ts", "source_location": "L1031", "weight": 1.0}, {"source": "musicservice_musicservice_addfromquery", "target": "musicservice_musicservice_getyoutube", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L208", "weight": 0.8}, {"source": "musicservice_musicservice_addfromquery", "target": "musicservice_musicservice_createqueueitem", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L227", "weight": 0.8}, {"source": "musicservice_musicservice_addfromquery", "target": "musicservice_musicservice_enqueuetracks", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L228", "weight": 0.8}, {"source": "musicservice_musicservice_addfromurl", "target": "musicservice_isyoutubeplaylisturl", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L232", "weight": 0.8}, {"source": "musicservice_musicservice_addfromurl", "target": "musicservice_musicservice_extractplaylist", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L233", "weight": 0.8}, {"source": "musicservice_musicservice_addfromurl", "target": "musicservice_musicservice_enqueuetracks", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L248", "weight": 0.8}, {"source": "musicservice_musicservice_addfromurl", "target": "musicservice_extractyoutubevideoid", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L251", "weight": 0.8}, {"source": "musicservice_musicservice_addfromurl", "target": "musicservice_musicservice_createqueueitem", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L256", "weight": 0.8}, {"source": "musicservice_musicservice_getqueueembed", "target": "musicservice_musicservice_formattrackline", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L274", "weight": 0.8}, {"source": "musicservice_musicservice_skip", "target": "musicservice_musicservice_stop", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L310", "weight": 0.8}, {"source": "musicservice_musicservice_pause", "target": "musicservice_musicservice_ispaused", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L320", "weight": 0.8}, {"source": "musicservice_musicservice_pause", "target": "musicservice_musicservice_refreshcontrolmessage", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L330", "weight": 0.8}, {"source": "musicservice_musicservice_resume", "target": "musicservice_musicservice_refreshcontrolmessage", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L347", "weight": 0.8}, {"source": "musicservice_musicservice_stop", "target": "musicservice_musicservice_renderidlestate", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L364", "weight": 0.8}, {"source": "musicservice_musicservice_remove", "target": "musicservice_musicservice_refreshcontrolmessage", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L380", "weight": 0.8}, {"source": "musicservice_musicservice_leave", "target": "musicservice_musicservice_cleanupprocess", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L392", "weight": 0.8}, {"source": "musicservice_musicservice_leave", "target": "musicservice_musicservice_stop", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L393", "weight": 0.8}, {"source": "musicservice_musicservice_leave", "target": "musicservice_musicservice_renderidlestate", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L399", "weight": 0.8}, {"source": "musicservice_musicservice_handlecontrolinteraction", "target": "musicservice_musicservice_buildfallbackcontrolrow", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L408", "weight": 0.8}, {"source": "musicservice_musicservice_handlecontrolinteraction", "target": "musicservice_musicservice_pause", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L430", "weight": 0.8}, {"source": "musicservice_musicservice_handlecontrolinteraction", "target": "musicservice_musicservice_resume", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L435", "weight": 0.8}, {"source": "musicservice_musicservice_handlecontrolinteraction", "target": "musicservice_musicservice_skip", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L440", "weight": 0.8}, {"source": "musicservice_musicservice_handlecontrolinteraction", "target": "musicservice_musicservice_stop", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L445", "weight": 0.8}, {"source": "musicservice_musicservice_handlecontrolinteraction", "target": "musicservice_musicservice_leave", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L450", "weight": 0.8}, {"source": "musicservice_musicservice_createqueueitem", "target": "musicservice_musicservice_getyoutube", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L460", "weight": 0.8}, {"source": "musicservice_musicservice_createqueueitem", "target": "musicservice_parsedurationseconds", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L463", "weight": 0.8}, {"source": "musicservice_musicservice_createqueueitem", "target": "musicservice_parsedurationtexttoseconds", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L463", "weight": 0.8}, {"source": "musicservice_musicservice_createqueueitem", "target": "musicservice_formatduration", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L469", "weight": 0.8}, {"source": "musicservice_musicservice_enqueuetracks", "target": "musicservice_musicservice_ensuresession", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L482", "weight": 0.8}, {"source": "musicservice_musicservice_enqueuetracks", "target": "musicservice_musicservice_playnext", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L491", "weight": 0.8}, {"source": "musicservice_musicservice_enqueuetracks", "target": "musicservice_musicservice_refreshcontrolmessage", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L493", "weight": 0.8}, {"source": "musicservice_musicservice_ensuresession", "target": "musicservice_musicservice_bindsessionevents", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L556", "weight": 0.8}, {"source": "musicservice_musicservice_ontrackfinished", "target": "musicservice_musicservice_cleanupprocess", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L583", "weight": 0.8}, {"source": "musicservice_musicservice_ontrackfinished", "target": "musicservice_musicservice_renderidlestate", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L590", "weight": 0.8}, {"source": "musicservice_musicservice_ontrackfinished", "target": "musicservice_musicservice_playnext", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L594", "weight": 0.8}, {"source": "musicservice_musicservice_notifyplaybackfailure", "target": "musicservice_musicservice_cleanupprocess", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L599", "weight": 0.8}, {"source": "musicservice_musicservice_notifyplaybackfailure", "target": "musicservice_musicservice_safesend", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L606", "weight": 0.8}, {"source": "musicservice_musicservice_notifyplaybackfailure", "target": "musicservice_musicservice_playnext", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L612", "weight": 0.8}, {"source": "musicservice_musicservice_notifyplaybackfailure", "target": "musicservice_musicservice_renderidlestate", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L614", "weight": 0.8}, {"source": "musicservice_musicservice_playnext", "target": "musicservice_musicservice_renderidlestate", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L628", "weight": 0.8}, {"source": "musicservice_musicservice_playnext", "target": "musicservice_musicservice_resolvestreamurl", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L638", "weight": 0.8}, {"source": "musicservice_musicservice_playnext", "target": "musicservice_musicservice_spawnffmpeg", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L639", "weight": 0.8}, {"source": "musicservice_musicservice_playnext", "target": "musicservice_musicservice_rendernowplaying", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L648", "weight": 0.8}, {"source": "musicservice_musicservice_playnext", "target": "musicservice_musicservice_safesend", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L651", "weight": 0.8}, {"source": "musicservice_musicservice_resolvestreamurl", "target": "musicservice_musicservice_getyoutube", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L697", "weight": 0.8}, {"source": "musicservice_musicservice_cleanupprocess", "target": "musicservice_musicservice_stopprogressupdates", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L797", "weight": 0.8}, {"source": "musicservice_musicservice_rendernowplaying", "target": "musicservice_musicservice_buildnowplayingembed", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L810", "weight": 0.8}, {"source": "musicservice_musicservice_rendernowplaying", "target": "musicservice_musicservice_buildcontrolrow", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L811", "weight": 0.8}, {"source": "musicservice_musicservice_rendernowplaying", "target": "musicservice_musicservice_safesend", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L816", "weight": 0.8}, {"source": "musicservice_musicservice_rendernowplaying", "target": "musicservice_musicservice_startprogressupdates", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L819", "weight": 0.8}, {"source": "musicservice_musicservice_renderidlestate", "target": "musicservice_musicservice_stopprogressupdates", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L823", "weight": 0.8}, {"source": "musicservice_musicservice_renderidlestate", "target": "musicservice_musicservice_buildcontrolrow", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L836", "weight": 0.8}, {"source": "musicservice_musicservice_buildcontrolrow", "target": "musicservice_musicservice_ispaused", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L841", "weight": 0.8}, {"source": "musicservice_musicservice_buildnowplayingembed", "target": "musicservice_musicservice_getelapsedseconds", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L894", "weight": 0.8}, {"source": "musicservice_musicservice_buildnowplayingembed", "target": "musicservice_formatduration", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L898", "weight": 0.8}, {"source": "musicservice_musicservice_buildnowplayingembed", "target": "musicservice_musicservice_buildprogressbar", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L898", "weight": 0.8}, {"source": "musicservice_musicservice_buildnowplayingembed", "target": "musicservice_musicservice_buildindeterminateprogressbar", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L899", "weight": 0.8}, {"source": "musicservice_musicservice_buildnowplayingembed", "target": "musicservice_musicservice_ispaused", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L901", "weight": 0.8}, {"source": "musicservice_musicservice_buildnowplayingembed", "target": "musicservice_musicservice_formattrackline", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L941", "weight": 0.8}, {"source": "musicservice_musicservice_startprogressupdates", "target": "musicservice_musicservice_stopprogressupdates", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L962", "weight": 0.8}, {"source": "musicservice_musicservice_refreshcontrolmessage", "target": "musicservice_musicservice_renderidlestate", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L1011", "weight": 0.8}, {"source": "musicservice_musicservice_refreshcontrolmessage", "target": "musicservice_musicservice_buildnowplayingembed", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L1016", "weight": 0.8}, {"source": "musicservice_musicservice_refreshcontrolmessage", "target": "musicservice_musicservice_buildcontrolrow", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L1017", "weight": 0.8}, {"source": "musicservice_musicservice_refreshcontrolmessage", "target": "musicservice_musicservice_ispaused", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L1020", "weight": 0.8}, {"source": "musicservice_musicservice_refreshcontrolmessage", "target": "musicservice_musicservice_stopprogressupdates", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L1021", "weight": 0.8}, {"source": "musicservice_musicservice_refreshcontrolmessage", "target": "musicservice_musicservice_startprogressupdates", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/MusicService.ts", "source_location": "L1023", "weight": 0.8}]} \ No newline at end of file diff --git a/graphify-out/cache/d6c5231356211c76ccf4fbb590702974292ed0420a716cb825cefe150fc64c24.json b/graphify-out/cache/d6c5231356211c76ccf4fbb590702974292ed0420a716cb825cefe150fc64c24.json new file mode 100644 index 0000000..d6e10ad --- /dev/null +++ b/graphify-out/cache/d6c5231356211c76ccf4fbb590702974292ed0420a716cb825cefe150fc64c24.json @@ -0,0 +1 @@ +{"nodes": [{"id": "errorreporter_test", "label": "ErrorReporter.test.ts", "file_type": "code", "source_file": "tests/errors/ErrorReporter.test.ts", "source_location": "L1"}], "edges": [{"source": "errorreporter_test", "target": "boterror", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "tests/errors/ErrorReporter.test.ts", "source_location": "L1", "weight": 1.0}, {"source": "errorreporter_test", "target": "errorcodes", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "tests/errors/ErrorReporter.test.ts", "source_location": "L2", "weight": 1.0}, {"source": "errorreporter_test", "target": "errorreporter", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "tests/errors/ErrorReporter.test.ts", "source_location": "L3", "weight": 1.0}]} \ No newline at end of file diff --git a/graphify-out/cache/d8c212c669415b086b2a577114894843cb620a1c60591d31e1ae7fe3e72b7272.json b/graphify-out/cache/d8c212c669415b086b2a577114894843cb620a1c60591d31e1ae7fe3e72b7272.json new file mode 100644 index 0000000..0e00bc3 --- /dev/null +++ b/graphify-out/cache/d8c212c669415b086b2a577114894843cb620a1c60591d31e1ae7fe3e72b7272.json @@ -0,0 +1 @@ +{"nodes": [{"id": "guildcreate", "label": "guildCreate.ts", "file_type": "code", "source_file": "src/events/guildCreate.ts", "source_location": "L1"}, {"id": "guildcreate_execute", "label": "execute()", "file_type": "code", "source_file": "src/events/guildCreate.ts", "source_location": "L8"}], "edges": [{"source": "guildcreate", "target": "discord_js", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/events/guildCreate.ts", "source_location": "L1", "weight": 1.0}, {"source": "guildcreate", "target": "inviteservice", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/events/guildCreate.ts", "source_location": "L2", "weight": 1.0}, {"source": "guildcreate", "target": "presenceservice", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/events/guildCreate.ts", "source_location": "L3", "weight": 1.0}, {"source": "guildcreate", "target": "guildcreate_execute", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/events/guildCreate.ts", "source_location": "L8", "weight": 1.0}]} \ No newline at end of file diff --git a/graphify-out/cache/d92f43e561779c0faa66c028a0f03f9a326203a78f0055a040d4f6c1bb74d5ac.json b/graphify-out/cache/d92f43e561779c0faa66c028a0f03f9a326203a78f0055a040d4f6c1bb74d5ac.json new file mode 100644 index 0000000..01d0020 --- /dev/null +++ b/graphify-out/cache/d92f43e561779c0faa66c028a0f03f9a326203a78f0055a040d4f6c1bb74d5ac.json @@ -0,0 +1 @@ +{"nodes": [{"id": "voicestateupdate", "label": "voiceStateUpdate.ts", "file_type": "code", "source_file": "src/events/voiceStateUpdate.ts", "source_location": "L1"}, {"id": "voicestateupdate_execute", "label": "execute()", "file_type": "code", "source_file": "src/events/voiceStateUpdate.ts", "source_location": "L7"}], "edges": [{"source": "voicestateupdate", "target": "discord_js", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/events/voiceStateUpdate.ts", "source_location": "L1", "weight": 1.0}, {"source": "voicestateupdate", "target": "voiceservice", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/events/voiceStateUpdate.ts", "source_location": "L2", "weight": 1.0}, {"source": "voicestateupdate", "target": "voicestateupdate_execute", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/events/voiceStateUpdate.ts", "source_location": "L7", "weight": 1.0}]} \ No newline at end of file diff --git a/graphify-out/cache/da5de30b092e638e10eff1764aec1d6645cb1dc8d52287f31279d35c3815c33a.json b/graphify-out/cache/da5de30b092e638e10eff1764aec1d6645cb1dc8d52287f31279d35c3815c33a.json new file mode 100644 index 0000000..e59f162 --- /dev/null +++ b/graphify-out/cache/da5de30b092e638e10eff1764aec1d6645cb1dc8d52287f31279d35c3815c33a.json @@ -0,0 +1 @@ +{"nodes": [{"id": "check_i18n_tests", "label": "check-i18n-tests.ts", "file_type": "code", "source_file": "scripts/check-i18n-tests.ts", "source_location": "L1"}, {"id": "check_i18n_tests_walk", "label": "walk()", "file_type": "code", "source_file": "scripts/check-i18n-tests.ts", "source_location": "L19"}, {"id": "check_i18n_tests_getfiles", "label": "getFiles()", "file_type": "code", "source_file": "scripts/check-i18n-tests.ts", "source_location": "L43"}, {"id": "check_i18n_tests_checkfile", "label": "checkFile()", "file_type": "code", "source_file": "scripts/check-i18n-tests.ts", "source_location": "L64"}], "edges": [{"source": "check_i18n_tests", "target": "fs", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "scripts/check-i18n-tests.ts", "source_location": "L1", "weight": 1.0}, {"source": "check_i18n_tests", "target": "path", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "scripts/check-i18n-tests.ts", "source_location": "L2", "weight": 1.0}, {"source": "check_i18n_tests", "target": "ko", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "scripts/check-i18n-tests.ts", "source_location": "L3", "weight": 1.0}, {"source": "check_i18n_tests", "target": "en", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "scripts/check-i18n-tests.ts", "source_location": "L4", "weight": 1.0}, {"source": "check_i18n_tests", "target": "check_i18n_tests_walk", "relation": "contains", "confidence": "EXTRACTED", "source_file": "scripts/check-i18n-tests.ts", "source_location": "L19", "weight": 1.0}, {"source": "check_i18n_tests", "target": "check_i18n_tests_getfiles", "relation": "contains", "confidence": "EXTRACTED", "source_file": "scripts/check-i18n-tests.ts", "source_location": "L43", "weight": 1.0}, {"source": "check_i18n_tests", "target": "check_i18n_tests_checkfile", "relation": "contains", "confidence": "EXTRACTED", "source_file": "scripts/check-i18n-tests.ts", "source_location": "L64", "weight": 1.0}]} \ No newline at end of file diff --git a/graphify-out/cache/dc44700481001f09c52fc07b0e1eded82456b24893e2ed59871d0c76726d2df2.json b/graphify-out/cache/dc44700481001f09c52fc07b0e1eded82456b24893e2ed59871d0c76726d2df2.json new file mode 100644 index 0000000..70f885c --- /dev/null +++ b/graphify-out/cache/dc44700481001f09c52fc07b0e1eded82456b24893e2ed59871d0c76726d2df2.json @@ -0,0 +1 @@ +{"nodes": [{"id": "invitecreate", "label": "inviteCreate.ts", "file_type": "code", "source_file": "src/events/inviteCreate.ts", "source_location": "L1"}, {"id": "invitecreate_execute", "label": "execute()", "file_type": "code", "source_file": "src/events/inviteCreate.ts", "source_location": "L7"}], "edges": [{"source": "invitecreate", "target": "discord_js", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/events/inviteCreate.ts", "source_location": "L1", "weight": 1.0}, {"source": "invitecreate", "target": "inviteservice", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/events/inviteCreate.ts", "source_location": "L2", "weight": 1.0}, {"source": "invitecreate", "target": "invitecreate_execute", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/events/inviteCreate.ts", "source_location": "L7", "weight": 1.0}]} \ No newline at end of file diff --git a/graphify-out/cache/dee9777a0880930735c0720f758859700a47f57f4a597384557b8c9633b7609f.json b/graphify-out/cache/dee9777a0880930735c0720f758859700a47f57f4a597384557b8c9633b7609f.json new file mode 100644 index 0000000..4f8a99c --- /dev/null +++ b/graphify-out/cache/dee9777a0880930735c0720f758859700a47f57f4a597384557b8c9633b7609f.json @@ -0,0 +1 @@ +{"nodes": [{"id": "PresenceService", "label": "Presence Service", "file_type": "document", "source_file": "Docs/WorkDone/2026-03-27_Presence_Implementation.md"}], "edges": [], "hyperedges": []} \ No newline at end of file diff --git a/graphify-out/cache/dfe541ed0095ecff0e6896ced045b4e76923fc0080aad9a91a5cf23e9ef379d2.json b/graphify-out/cache/dfe541ed0095ecff0e6896ced045b4e76923fc0080aad9a91a5cf23e9ef379d2.json new file mode 100644 index 0000000..818fb8b --- /dev/null +++ b/graphify-out/cache/dfe541ed0095ecff0e6896ced045b4e76923fc0080aad9a91a5cf23e9ef379d2.json @@ -0,0 +1 @@ +{"nodes": [{"id": "prisma_config", "label": "prisma.config.ts", "file_type": "code", "source_file": "prisma.config.ts", "source_location": "L1"}], "edges": [{"source": "prisma_config", "target": "node_path", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "prisma.config.ts", "source_location": "L1", "weight": 1.0}, {"source": "prisma_config", "target": "config", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "prisma.config.ts", "source_location": "L2", "weight": 1.0}, {"source": "prisma_config", "target": "config", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "prisma.config.ts", "source_location": "L3", "weight": 1.0}]} \ No newline at end of file diff --git a/graphify-out/cache/dfef862774bd1f26d72c37a2238822988008a0f30ccfcb213fe51e3642a58e3e.json b/graphify-out/cache/dfef862774bd1f26d72c37a2238822988008a0f30ccfcb213fe51e3642a58e3e.json new file mode 100644 index 0000000..29e8bce --- /dev/null +++ b/graphify-out/cache/dfef862774bd1f26d72c37a2238822988008a0f30ccfcb213fe51e3642a58e3e.json @@ -0,0 +1 @@ +{"nodes": [{"id": "FishingProfile", "label": "Fishing Profile (User Stats)", "file_type": "document", "source_file": "Docs/WorkDone/2026-04-07_Fishing_MiniGame_Phase2_Implementation.md"}, {"id": "FishingService", "label": "Fishing Service", "file_type": "document", "source_file": "Docs/WorkDone/2026-04-07_Fishing_MiniGame_Phase2_Implementation.md"}, {"id": "/fishing status", "label": "/fishing status command", "file_type": "document", "source_file": "Docs/WorkDone/2026-04-07_Fishing_MiniGame_Phase2_Implementation.md"}], "edges": [], "hyperedges": []} \ No newline at end of file diff --git a/graphify-out/cache/e20570ed8bc3f0242be91718149248b644cf91440c877e0f92e454d43607de6d.json b/graphify-out/cache/e20570ed8bc3f0242be91718149248b644cf91440c877e0f92e454d43607de6d.json new file mode 100644 index 0000000..045ac16 --- /dev/null +++ b/graphify-out/cache/e20570ed8bc3f0242be91718149248b644cf91440c877e0f92e454d43607de6d.json @@ -0,0 +1 @@ +{"nodes": [{"id": "guilddelete", "label": "guildDelete.ts", "file_type": "code", "source_file": "src/events/guildDelete.ts", "source_location": "L1"}, {"id": "guilddelete_execute", "label": "execute()", "file_type": "code", "source_file": "src/events/guildDelete.ts", "source_location": "L7"}], "edges": [{"source": "guilddelete", "target": "discord_js", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/events/guildDelete.ts", "source_location": "L1", "weight": 1.0}, {"source": "guilddelete", "target": "presenceservice", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/events/guildDelete.ts", "source_location": "L2", "weight": 1.0}, {"source": "guilddelete", "target": "guilddelete_execute", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/events/guildDelete.ts", "source_location": "L7", "weight": 1.0}]} \ No newline at end of file diff --git a/graphify-out/cache/eead347409f28f9c86b17d486f5bdb0b946789cd720f2458b5dbf78290e2c5a3.json b/graphify-out/cache/eead347409f28f9c86b17d486f5bdb0b946789cd720f2458b5dbf78290e2c5a3.json new file mode 100644 index 0000000..a3734d3 --- /dev/null +++ b/graphify-out/cache/eead347409f28f9c86b17d486f5bdb0b946789cd720f2458b5dbf78290e2c5a3.json @@ -0,0 +1 @@ +{"nodes": [{"id": "refine", "label": "refine.ts", "file_type": "code", "source_file": "src/commands/refine.ts", "source_location": "L1"}, {"id": "refine_execute", "label": "execute()", "file_type": "code", "source_file": "src/commands/refine.ts", "source_location": "L91"}], "edges": [{"source": "refine", "target": "discord_js", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/commands/refine.ts", "source_location": "L1", "weight": 1.0}, {"source": "refine", "target": "database", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/commands/refine.ts", "source_location": "L11", "weight": 1.0}, {"source": "refine", "target": "i18n", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/commands/refine.ts", "source_location": "L12", "weight": 1.0}, {"source": "refine", "target": "refinementservice", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/commands/refine.ts", "source_location": "L13", "weight": 1.0}, {"source": "refine", "target": "feverservice", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/commands/refine.ts", "source_location": "L14", "weight": 1.0}, {"source": "refine", "target": "refine_execute", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/commands/refine.ts", "source_location": "L91", "weight": 1.0}]} \ No newline at end of file diff --git a/graphify-out/cache/f427d3031500d109c91a02d322e1ecf7f935eb3021b6685aed97cf6bf9039953.json b/graphify-out/cache/f427d3031500d109c91a02d322e1ecf7f935eb3021b6685aed97cf6bf9039953.json new file mode 100644 index 0000000..2cbf7a1 --- /dev/null +++ b/graphify-out/cache/f427d3031500d109c91a02d322e1ecf7f935eb3021b6685aed97cf6bf9039953.json @@ -0,0 +1 @@ +{"nodes": [{"id": "auditlogservice", "label": "AuditLogService.ts", "file_type": "code", "source_file": "src/services/AuditLogService.ts", "source_location": "L1"}, {"id": "auditlogservice_auditlogservice", "label": "AuditLogService", "file_type": "code", "source_file": "src/services/AuditLogService.ts", "source_location": "L23"}, {"id": "auditlogservice_auditlogservice_log", "label": ".log()", "file_type": "code", "source_file": "src/services/AuditLogService.ts", "source_location": "L29"}, {"id": "auditlogservice_auditlogservice_setchannel", "label": ".setChannel()", "file_type": "code", "source_file": "src/services/AuditLogService.ts", "source_location": "L71"}, {"id": "auditlogservice_auditlogservice_clearchannel", "label": ".clearChannel()", "file_type": "code", "source_file": "src/services/AuditLogService.ts", "source_location": "L87"}, {"id": "auditlogservice_auditlogservice_getchannel", "label": ".getChannel()", "file_type": "code", "source_file": "src/services/AuditLogService.ts", "source_location": "L96"}, {"id": "auditlogservice_auditlogservice_setfilter", "label": ".setFilter()", "file_type": "code", "source_file": "src/services/AuditLogService.ts", "source_location": "L107"}], "edges": [{"source": "auditlogservice", "target": "discord_js", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/AuditLogService.ts", "source_location": "L1", "weight": 1.0}, {"source": "auditlogservice", "target": "database", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/AuditLogService.ts", "source_location": "L2", "weight": 1.0}, {"source": "auditlogservice", "target": "env", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/AuditLogService.ts", "source_location": "L3", "weight": 1.0}, {"source": "auditlogservice", "target": "auditlogservice_auditlogservice", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/services/AuditLogService.ts", "source_location": "L23", "weight": 1.0}, {"source": "auditlogservice_auditlogservice", "target": "auditlogservice_auditlogservice_log", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/AuditLogService.ts", "source_location": "L29", "weight": 1.0}, {"source": "auditlogservice_auditlogservice", "target": "auditlogservice_auditlogservice_setchannel", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/AuditLogService.ts", "source_location": "L71", "weight": 1.0}, {"source": "auditlogservice_auditlogservice", "target": "auditlogservice_auditlogservice_clearchannel", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/AuditLogService.ts", "source_location": "L87", "weight": 1.0}, {"source": "auditlogservice_auditlogservice", "target": "auditlogservice_auditlogservice_getchannel", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/AuditLogService.ts", "source_location": "L96", "weight": 1.0}, {"source": "auditlogservice_auditlogservice", "target": "auditlogservice_auditlogservice_setfilter", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/AuditLogService.ts", "source_location": "L107", "weight": 1.0}, {"source": "auditlogservice_auditlogservice_log", "target": "auditlogservice_auditlogservice_getchannel", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/AuditLogService.ts", "source_location": "L31", "weight": 0.8}, {"source": "auditlogservice_auditlogservice_setfilter", "target": "auditlogservice_auditlogservice_getchannel", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/AuditLogService.ts", "source_location": "L108", "weight": 0.8}]} \ No newline at end of file diff --git a/graphify-out/cache/f71c5929b341a90daaf4760e235ba8e813178294eab730a86c5c66d14f26869f.json b/graphify-out/cache/f71c5929b341a90daaf4760e235ba8e813178294eab730a86c5c66d14f26869f.json new file mode 100644 index 0000000..bec5e2b --- /dev/null +++ b/graphify-out/cache/f71c5929b341a90daaf4760e235ba8e813178294eab730a86c5c66d14f26869f.json @@ -0,0 +1 @@ +{"nodes": [{"id": "language", "label": "language.ts", "file_type": "code", "source_file": "src/commands/language.ts", "source_location": "L1"}, {"id": "language_execute", "label": "execute()", "file_type": "code", "source_file": "src/commands/language.ts", "source_location": "L25"}], "edges": [{"source": "language", "target": "discord_js", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/commands/language.ts", "source_location": "L1", "weight": 1.0}, {"source": "language", "target": "database", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/commands/language.ts", "source_location": "L2", "weight": 1.0}, {"source": "language", "target": "i18n", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/commands/language.ts", "source_location": "L3", "weight": 1.0}, {"source": "language", "target": "language_execute", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/commands/language.ts", "source_location": "L25", "weight": 1.0}]} \ No newline at end of file diff --git a/graphify-out/cache/f73aaf7137c3da241dc4b71b960b22471c22f2ec95d38ea2460be3cd59a4ea64.json b/graphify-out/cache/f73aaf7137c3da241dc4b71b960b22471c22f2ec95d38ea2460be3cd59a4ea64.json new file mode 100644 index 0000000..6f8e0a6 --- /dev/null +++ b/graphify-out/cache/f73aaf7137c3da241dc4b71b960b22471c22f2ec95d38ea2460be3cd59a4ea64.json @@ -0,0 +1 @@ +{"nodes": [{"id": "YouTube Music Playback", "label": "YouTube \uc74c\uc545 \uc7ac\uc0dd \uae30\ub2a5", "file_type": "feature", "source_file": "Docs/WorkDone/2026-03-31_YouTube_Music_Playback_Phase2_Implementation.md"}, {"id": "MusicService", "label": "MusicService", "file_type": "service", "source_file": "Docs/WorkDone/2026-03-31_YouTube_Music_Playback_Phase2_Implementation.md"}, {"id": "Slash Command", "label": "Slash Command", "file_type": "feature", "source_file": "Docs/WorkDone/2026-03-31_YouTube_Music_Playback_Phase2_Implementation.md"}], "edges": [], "hyperedges": []} \ No newline at end of file diff --git a/graphify-out/cache/fb380cc4858d5721727b1408e07c0406d801733fc0ff3c37ae8cbaeca76e1245.json b/graphify-out/cache/fb380cc4858d5721727b1408e07c0406d801733fc0ff3c37ae8cbaeca76e1245.json new file mode 100644 index 0000000..02eac0b --- /dev/null +++ b/graphify-out/cache/fb380cc4858d5721727b1408e07c0406d801733fc0ff3c37ae8cbaeca76e1245.json @@ -0,0 +1 @@ +{"nodes": [{"id": "permissionauditservice", "label": "PermissionAuditService.ts", "file_type": "code", "source_file": "src/services/PermissionAuditService.ts", "source_location": "L1"}, {"id": "permissionauditservice_permissionauditservice", "label": "PermissionAuditService", "file_type": "code", "source_file": "src/services/PermissionAuditService.ts", "source_location": "L143"}, {"id": "permissionauditservice_permissionauditservice_auditguild", "label": ".auditGuild()", "file_type": "code", "source_file": "src/services/PermissionAuditService.ts", "source_location": "L144"}, {"id": "permissionauditservice_permissionauditservice_checkguildpermissions", "label": ".checkGuildPermissions()", "file_type": "code", "source_file": "src/services/PermissionAuditService.ts", "source_location": "L181"}, {"id": "permissionauditservice_permissionauditservice_checkchannelpermissions", "label": ".checkChannelPermissions()", "file_type": "code", "source_file": "src/services/PermissionAuditService.ts", "source_location": "L194"}, {"id": "permissionauditservice_permissionauditservice_checkhierarchy", "label": ".checkHierarchy()", "file_type": "code", "source_file": "src/services/PermissionAuditService.ts", "source_location": "L210"}, {"id": "permissionauditservice_permissionauditservice_getmissing", "label": ".getMissing()", "file_type": "code", "source_file": "src/services/PermissionAuditService.ts", "source_location": "L231"}, {"id": "permissionauditservice_permissionauditservice_permtostring", "label": ".permToString()", "file_type": "code", "source_file": "src/services/PermissionAuditService.ts", "source_location": "L236"}], "edges": [{"source": "permissionauditservice", "target": "discord_js", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/PermissionAuditService.ts", "source_location": "L1", "weight": 1.0}, {"source": "permissionauditservice", "target": "database", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/PermissionAuditService.ts", "source_location": "L8", "weight": 1.0}, {"source": "permissionauditservice", "target": "logger", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/services/PermissionAuditService.ts", "source_location": "L9", "weight": 1.0}, {"source": "permissionauditservice", "target": "permissionauditservice_permissionauditservice", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/services/PermissionAuditService.ts", "source_location": "L143", "weight": 1.0}, {"source": "permissionauditservice_permissionauditservice", "target": "permissionauditservice_permissionauditservice_auditguild", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/PermissionAuditService.ts", "source_location": "L144", "weight": 1.0}, {"source": "permissionauditservice_permissionauditservice", "target": "permissionauditservice_permissionauditservice_checkguildpermissions", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/PermissionAuditService.ts", "source_location": "L181", "weight": 1.0}, {"source": "permissionauditservice_permissionauditservice", "target": "permissionauditservice_permissionauditservice_checkchannelpermissions", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/PermissionAuditService.ts", "source_location": "L194", "weight": 1.0}, {"source": "permissionauditservice_permissionauditservice", "target": "permissionauditservice_permissionauditservice_checkhierarchy", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/PermissionAuditService.ts", "source_location": "L210", "weight": 1.0}, {"source": "permissionauditservice_permissionauditservice", "target": "permissionauditservice_permissionauditservice_getmissing", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/PermissionAuditService.ts", "source_location": "L231", "weight": 1.0}, {"source": "permissionauditservice_permissionauditservice", "target": "permissionauditservice_permissionauditservice_permtostring", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/services/PermissionAuditService.ts", "source_location": "L236", "weight": 1.0}, {"source": "permissionauditservice_permissionauditservice_auditguild", "target": "permissionauditservice_permissionauditservice_checkguildpermissions", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/PermissionAuditService.ts", "source_location": "L153", "weight": 0.8}, {"source": "permissionauditservice_permissionauditservice_auditguild", "target": "permissionauditservice_permissionauditservice_checkchannelpermissions", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/PermissionAuditService.ts", "source_location": "L159", "weight": 0.8}, {"source": "permissionauditservice_permissionauditservice_auditguild", "target": "permissionauditservice_permissionauditservice_checkhierarchy", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/PermissionAuditService.ts", "source_location": "L167", "weight": 0.8}, {"source": "permissionauditservice_permissionauditservice_checkguildpermissions", "target": "permissionauditservice_permissionauditservice_getmissing", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/PermissionAuditService.ts", "source_location": "L185", "weight": 0.8}, {"source": "permissionauditservice_permissionauditservice_checkchannelpermissions", "target": "permissionauditservice_permissionauditservice_getmissing", "relation": "calls", "confidence": "INFERRED", "source_file": "src/services/PermissionAuditService.ts", "source_location": "L200", "weight": 0.8}]} \ No newline at end of file diff --git a/graphify-out/cache/fc30c7077dfb37fa12c558f4c4078bf551f1f6729312bbffaba030302115ae0a.json b/graphify-out/cache/fc30c7077dfb37fa12c558f4c4078bf551f1f6729312bbffaba030302115ae0a.json new file mode 100644 index 0000000..ecc6166 --- /dev/null +++ b/graphify-out/cache/fc30c7077dfb37fa12c558f4c4078bf551f1f6729312bbffaba030302115ae0a.json @@ -0,0 +1 @@ +{"nodes": [{"id": "seed", "label": "seed.ts", "file_type": "code", "source_file": "prisma/seed.ts", "source_location": "L1"}, {"id": "seed_main", "label": "main()", "file_type": "code", "source_file": "prisma/seed.ts", "source_location": "L10"}], "edges": [{"source": "seed", "target": "pg", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "prisma/seed.ts", "source_location": "L1", "weight": 1.0}, {"source": "seed", "target": "adapter_pg", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "prisma/seed.ts", "source_location": "L2", "weight": 1.0}, {"source": "seed", "target": "client", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "prisma/seed.ts", "source_location": "L3", "weight": 1.0}, {"source": "seed", "target": "config", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "prisma/seed.ts", "source_location": "L4", "weight": 1.0}, {"source": "seed", "target": "seed_main", "relation": "contains", "confidence": "EXTRACTED", "source_file": "prisma/seed.ts", "source_location": "L10", "weight": 1.0}]} \ No newline at end of file diff --git a/graphify-out/cache/fc9d031a396ebf9f4baa6305836ccfc7b113fb61d3871c7b4daf3bf5454e1c23.json b/graphify-out/cache/fc9d031a396ebf9f4baa6305836ccfc7b113fb61d3871c7b4daf3bf5454e1c23.json new file mode 100644 index 0000000..c4b5956 --- /dev/null +++ b/graphify-out/cache/fc9d031a396ebf9f4baa6305836ccfc7b113fb61d3871c7b4daf3bf5454e1c23.json @@ -0,0 +1 @@ +{"nodes": [{"id": "index", "label": "index.ts", "file_type": "code", "source_file": "src/database/index.ts", "source_location": "L1"}, {"id": "index_createpgpoolconfig", "label": "createPgPoolConfig()", "file_type": "code", "source_file": "src/database/index.ts", "source_location": "L13"}, {"id": "index_connectdb", "label": "connectDB()", "file_type": "code", "source_file": "src/database/index.ts", "source_location": "L40"}], "edges": [{"source": "index", "target": "pg", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/database/index.ts", "source_location": "L1", "weight": 1.0}, {"source": "index", "target": "pg", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/database/index.ts", "source_location": "L2", "weight": 1.0}, {"source": "index", "target": "adapter_pg", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/database/index.ts", "source_location": "L3", "weight": 1.0}, {"source": "index", "target": "client", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/database/index.ts", "source_location": "L4", "weight": 1.0}, {"source": "index", "target": "env", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/database/index.ts", "source_location": "L5", "weight": 1.0}, {"source": "index", "target": "logger", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/database/index.ts", "source_location": "L6", "weight": 1.0}, {"source": "index", "target": "index_createpgpoolconfig", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/database/index.ts", "source_location": "L13", "weight": 1.0}, {"source": "index", "target": "index_connectdb", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/database/index.ts", "source_location": "L40", "weight": 1.0}]} \ No newline at end of file diff --git a/graphify-out/cache/feb2fd67df547b6eb7887337a89ac4ab5f3ab141b0e1a25243b54da7aacdf386.json b/graphify-out/cache/feb2fd67df547b6eb7887337a89ac4ab5f3ab141b0e1a25243b54da7aacdf386.json new file mode 100644 index 0000000..28a8ecc --- /dev/null +++ b/graphify-out/cache/feb2fd67df547b6eb7887337a89ac4ab5f3ab141b0e1a25243b54da7aacdf386.json @@ -0,0 +1 @@ +{"nodes": [{"id": "logger", "label": "logger.ts", "file_type": "code", "source_file": "src/utils/logger.ts", "source_location": "L1"}, {"id": "logger_resolveloglevel", "label": "resolveLogLevel()", "file_type": "code", "source_file": "src/utils/logger.ts", "source_location": "L9"}, {"id": "logger_resolvelogdir", "label": "resolveLogDir()", "file_type": "code", "source_file": "src/utils/logger.ts", "source_location": "L15"}, {"id": "logger_ensurelogdir", "label": "ensureLogDir()", "file_type": "code", "source_file": "src/utils/logger.ts", "source_location": "L23"}], "edges": [{"source": "logger", "target": "fs", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/utils/logger.ts", "source_location": "L1", "weight": 1.0}, {"source": "logger", "target": "log4js", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/utils/logger.ts", "source_location": "L2", "weight": 1.0}, {"source": "logger", "target": "path", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/utils/logger.ts", "source_location": "L3", "weight": 1.0}, {"source": "logger", "target": "env", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "src/utils/logger.ts", "source_location": "L4", "weight": 1.0}, {"source": "logger", "target": "logger_resolveloglevel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/utils/logger.ts", "source_location": "L9", "weight": 1.0}, {"source": "logger", "target": "logger_resolvelogdir", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/utils/logger.ts", "source_location": "L15", "weight": 1.0}, {"source": "logger", "target": "logger_ensurelogdir", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/utils/logger.ts", "source_location": "L23", "weight": 1.0}]} \ No newline at end of file diff --git a/graphify-out/cache/ff59dceb46ab023326e992faf9ea1aaef083b33eff32525b868b062038364146.json b/graphify-out/cache/ff59dceb46ab023326e992faf9ea1aaef083b33eff32525b868b062038364146.json new file mode 100644 index 0000000..b1d69c9 --- /dev/null +++ b/graphify-out/cache/ff59dceb46ab023326e992faf9ea1aaef083b33eff32525b868b062038364146.json @@ -0,0 +1 @@ +{"nodes": [{"id": "youtube_music_playback", "label": "YouTube Music Playback", "file_type": "document", "source_file": "Docs/WorkDone/2026-03-31_YouTube_Music_Playback_Phase3_Implementation.md"}, {"id": "pause/resume control", "label": "pause/resume control", "file_type": "document", "source_file": "Docs/WorkDone/2026-03-31_YouTube_Music_Playback_Phase3_Implementation.md"}, {"id": "next-track preview", "label": "next-track preview", "file_type": "document", "source_file": "Docs/WorkDone/2026-03-31_YouTube_Music_Playback_Phase3_Implementation.md"}, {"id": "src/commands/music.ts", "label": "src/commands/music.ts", "file_type": "code", "source_file": "Docs/WorkDone/2026-03-31_YouTube_Music_Playback_Phase3_Implementation.md"}, {"id": "src/services/MusicService.ts", "label": "src/services/MusicService.ts", "file_type": "code", "source_file": "Docs/WorkDone/2026-03-31_YouTube_Music_Playback_Phase3_Implementation.md"}], "edges": [], "hyperedges": []} \ No newline at end of file diff --git a/graphify-out/graph.html b/graphify-out/graph.html new file mode 100644 index 0000000..db712cc --- /dev/null +++ b/graphify-out/graph.html @@ -0,0 +1,266 @@ + + + + +graphify - graphify-out/graph.html + + + + +
+ + + + + \ No newline at end of file diff --git a/graphify-out/graph.json b/graphify-out/graph.json new file mode 100644 index 0000000..8ffa5b1 --- /dev/null +++ b/graphify-out/graph.json @@ -0,0 +1,9037 @@ +{ + "directed": false, + "multigraph": false, + "graph": {}, + "nodes": [ + { + "label": "jest.config.js", + "file_type": "code", + "source_file": "jest.config.js", + "source_location": "L1", + "id": "jest_config", + "community": 22 + }, + { + "label": "prisma.config.ts", + "file_type": "code", + "source_file": "prisma.config.ts", + "source_location": "L1", + "id": "prisma_config", + "community": 14 + }, + { + "label": "seed.ts", + "file_type": "code", + "source_file": "prisma/seed.ts", + "source_location": "L1", + "id": "seed", + "community": 14 + }, + { + "label": "main()", + "file_type": "code", + "source_file": "prisma/seed.ts", + "source_location": "L10", + "id": "seed_main", + "community": 14 + }, + { + "label": "BotError.test.ts", + "file_type": "code", + "source_file": "tests/errors/BotError.test.ts", + "source_location": "L1", + "id": "boterror_test", + "community": 4 + }, + { + "label": "ErrorReporter.test.ts", + "file_type": "code", + "source_file": "tests/errors/ErrorReporter.test.ts", + "source_location": "L1", + "id": "errorreporter_test", + "community": 4 + }, + { + "label": "i18n.test.ts", + "file_type": "code", + "source_file": "tests/i18n/i18n.test.ts", + "source_location": "L1", + "id": "i18n_test", + "community": 23 + }, + { + "label": "InviteService.test.ts", + "file_type": "code", + "source_file": "tests/services/InviteService.test.ts", + "source_location": "L1", + "id": "inviteservice_test", + "community": 0 + }, + { + "label": "FishingService.test.ts", + "file_type": "code", + "source_file": "tests/services/FishingService.test.ts", + "source_location": "L1", + "id": "fishingservice_test", + "community": 11 + }, + { + "label": "MusicService.test.ts", + "file_type": "code", + "source_file": "tests/services/MusicService.test.ts", + "source_location": "L1", + "id": "musicservice_test", + "community": 2 + }, + { + "label": "MimicService.test.ts", + "file_type": "code", + "source_file": "tests/services/MimicService.test.ts", + "source_location": "L1", + "id": "mimicservice_test", + "community": 7 + }, + { + "label": "VoiceService.test.ts", + "file_type": "code", + "source_file": "tests/services/VoiceService.test.ts", + "source_location": "L1", + "id": "voiceservice_test", + "community": 0 + }, + { + "label": "check-i18n-tests.ts", + "file_type": "code", + "source_file": "scripts/check-i18n-tests.ts", + "source_location": "L1", + "id": "check_i18n_tests", + "community": 3 + }, + { + "label": "walk()", + "file_type": "code", + "source_file": "scripts/check-i18n-tests.ts", + "source_location": "L19", + "id": "check_i18n_tests_walk", + "community": 3 + }, + { + "label": "getFiles()", + "file_type": "code", + "source_file": "scripts/check-i18n-tests.ts", + "source_location": "L43", + "id": "check_i18n_tests_getfiles", + "community": 3 + }, + { + "label": "checkFile()", + "file_type": "code", + "source_file": "scripts/check-i18n-tests.ts", + "source_location": "L64", + "id": "check_i18n_tests_checkfile", + "community": 3 + }, + { + "label": "index.ts", + "file_type": "code", + "source_file": "src/index.ts", + "source_location": "L1", + "id": "index", + "community": 3 + }, + { + "label": "createPgPoolConfig()", + "file_type": "code", + "source_file": "src/database/index.ts", + "source_location": "L13", + "id": "index_createpgpoolconfig", + "community": 3 + }, + { + "label": "connectDB()", + "file_type": "code", + "source_file": "src/database/index.ts", + "source_location": "L40", + "id": "index_connectdb", + "community": 3 + }, + { + "label": "refinementHandler.ts", + "file_type": "code", + "source_file": "src/interactions/handlers/refinementHandler.ts", + "source_location": "L1", + "id": "refinementhandler", + "community": 0 + }, + { + "label": "handleRefinementInteraction()", + "file_type": "code", + "source_file": "src/interactions/handlers/refinementHandler.ts", + "source_location": "L7", + "id": "refinementhandler_handlerefinementinteraction", + "community": 0 + }, + { + "label": "setupWizardHandler.ts", + "file_type": "code", + "source_file": "src/interactions/handlers/setupWizardHandler.ts", + "source_location": "L1", + "id": "setupwizardhandler", + "community": 4 + }, + { + "label": "handleSetupWizardInteraction()", + "file_type": "code", + "source_file": "src/interactions/handlers/setupWizardHandler.ts", + "source_location": "L7", + "id": "setupwizardhandler_handlesetupwizardinteraction", + "community": 4 + }, + { + "label": "env.ts", + "file_type": "code", + "source_file": "src/config/env.ts", + "source_location": "L1", + "id": "env", + "community": 0 + }, + { + "label": "generateInstanceId()", + "file_type": "code", + "source_file": "src/config/env.ts", + "source_location": "L8", + "id": "env_generateinstanceid", + "community": 0 + }, + { + "label": "errorHandler.ts", + "file_type": "code", + "source_file": "src/utils/errorHandler.ts", + "source_location": "L1", + "id": "errorhandler", + "community": 0 + }, + { + "label": "handleGlobalExceptions()", + "file_type": "code", + "source_file": "src/utils/errorHandler.ts", + "source_location": "L3", + "id": "errorhandler_handleglobalexceptions", + "community": 0 + }, + { + "label": "logger.ts", + "file_type": "code", + "source_file": "src/utils/logger.ts", + "source_location": "L1", + "id": "logger", + "community": 0 + }, + { + "label": "resolveLogLevel()", + "file_type": "code", + "source_file": "src/utils/logger.ts", + "source_location": "L9", + "id": "logger_resolveloglevel", + "community": 0 + }, + { + "label": "resolveLogDir()", + "file_type": "code", + "source_file": "src/utils/logger.ts", + "source_location": "L15", + "id": "logger_resolvelogdir", + "community": 0 + }, + { + "label": "ensureLogDir()", + "file_type": "code", + "source_file": "src/utils/logger.ts", + "source_location": "L23", + "id": "logger_ensurelogdir", + "community": 0 + }, + { + "label": "language.ts", + "file_type": "code", + "source_file": "src/commands/language.ts", + "source_location": "L1", + "id": "language", + "community": 19 + }, + { + "label": "execute()", + "file_type": "code", + "source_file": "src/commands/language.ts", + "source_location": "L25", + "id": "language_execute", + "community": 19 + }, + { + "label": "setup.ts", + "file_type": "code", + "source_file": "src/commands/setup.ts", + "source_location": "L1", + "id": "setup", + "community": 5 + }, + { + "label": "execute()", + "file_type": "code", + "source_file": "src/commands/setup.ts", + "source_location": "L18", + "id": "setup_execute", + "community": 5 + }, + { + "label": "voice.ts", + "file_type": "code", + "source_file": "src/commands/voice.ts", + "source_location": "L1", + "id": "voice", + "community": 0 + }, + { + "label": "execute()", + "file_type": "code", + "source_file": "src/commands/voice.ts", + "source_location": "L79", + "id": "voice_execute", + "community": 0 + }, + { + "label": "music.ts", + "file_type": "code", + "source_file": "src/commands/music.ts", + "source_location": "L1", + "id": "music", + "community": 16 + }, + { + "label": "buildErrorMessage()", + "file_type": "code", + "source_file": "src/commands/music.ts", + "source_location": "L6", + "id": "music_builderrormessage", + "community": 16 + }, + { + "label": "respond()", + "file_type": "code", + "source_file": "src/commands/music.ts", + "source_location": "L14", + "id": "music_respond", + "community": 16 + }, + { + "label": "execute()", + "file_type": "code", + "source_file": "src/commands/music.ts", + "source_location": "L130", + "id": "music_execute", + "community": 16 + }, + { + "label": "refine.ts", + "file_type": "code", + "source_file": "src/commands/refine.ts", + "source_location": "L1", + "id": "refine", + "community": 0 + }, + { + "label": "execute()", + "file_type": "code", + "source_file": "src/commands/refine.ts", + "source_location": "L91", + "id": "refine_execute", + "community": 0 + }, + { + "label": "minigame.ts", + "file_type": "code", + "source_file": "src/commands/minigame.ts", + "source_location": "L1", + "id": "minigame", + "community": 15 + }, + { + "label": "execute()", + "file_type": "code", + "source_file": "src/commands/minigame.ts", + "source_location": "L62", + "id": "minigame_execute", + "community": 15 + }, + { + "label": "config.ts", + "file_type": "code", + "source_file": "src/commands/config.ts", + "source_location": "L1", + "id": "config", + "community": 14 + }, + { + "label": "execute()", + "file_type": "code", + "source_file": "src/commands/config.ts", + "source_location": "L66", + "id": "config_execute", + "community": 14 + }, + { + "label": "audit.ts", + "file_type": "code", + "source_file": "src/commands/audit.ts", + "source_location": "L1", + "id": "audit", + "community": 5 + }, + { + "label": "getOverallColor()", + "file_type": "code", + "source_file": "src/commands/audit.ts", + "source_location": "L20", + "id": "audit_getoverallcolor", + "community": 5 + }, + { + "label": "buildResultLine()", + "file_type": "code", + "source_file": "src/commands/audit.ts", + "source_location": "L26", + "id": "audit_buildresultline", + "community": 5 + }, + { + "label": "execute()", + "file_type": "code", + "source_file": "src/commands/audit.ts", + "source_location": "L110", + "id": "audit_execute", + "community": 5 + }, + { + "label": "event.ts", + "file_type": "code", + "source_file": "src/commands/event.ts", + "source_location": "L1", + "id": "event", + "community": 10 + }, + { + "label": "parseSeoulDateTime()", + "file_type": "code", + "source_file": "src/commands/event.ts", + "source_location": "L18", + "id": "event_parseseouldatetime", + "community": 10 + }, + { + "label": "toDiscordTimestamps()", + "file_type": "code", + "source_file": "src/commands/event.ts", + "source_location": "L51", + "id": "event_todiscordtimestamps", + "community": 10 + }, + { + "label": "parseReminderOffsets()", + "file_type": "code", + "source_file": "src/commands/event.ts", + "source_location": "L59", + "id": "event_parsereminderoffsets", + "community": 10 + }, + { + "label": "formatReminderOffsets()", + "file_type": "code", + "source_file": "src/commands/event.ts", + "source_location": "L77", + "id": "event_formatreminderoffsets", + "community": 10 + }, + { + "label": "buildStatusLabel()", + "file_type": "code", + "source_file": "src/commands/event.ts", + "source_location": "L85", + "id": "event_buildstatuslabel", + "community": 10 + }, + { + "label": "execute()", + "file_type": "code", + "source_file": "src/commands/event.ts", + "source_location": "L189", + "id": "event_execute", + "community": 10 + }, + { + "label": "fishing.ts", + "file_type": "code", + "source_file": "src/commands/fishing.ts", + "source_location": "L1", + "id": "fishing", + "community": 11 + }, + { + "label": "execute()", + "file_type": "code", + "source_file": "src/commands/fishing.ts", + "source_location": "L83", + "id": "fishing_execute", + "community": 11 + }, + { + "label": "BotError.ts", + "file_type": "code", + "source_file": "src/errors/BotError.ts", + "source_location": "L1", + "id": "boterror", + "community": 4 + }, + { + "label": "BotError", + "file_type": "code", + "source_file": "src/errors/BotError.ts", + "source_location": "L16", + "id": "boterror_boterror", + "community": 4 + }, + { + "label": ".constructor()", + "file_type": "code", + "source_file": "src/errors/BotError.ts", + "source_location": "L29", + "id": "boterror_boterror_constructor", + "community": 4 + }, + { + "label": "ErrorReporter.ts", + "file_type": "code", + "source_file": "src/errors/ErrorReporter.ts", + "source_location": "L1", + "id": "errorreporter", + "community": 4 + }, + { + "label": "ErrorReporter", + "file_type": "code", + "source_file": "src/errors/ErrorReporter.ts", + "source_location": "L38", + "id": "errorreporter_errorreporter", + "community": 4 + }, + { + "label": ".report()", + "file_type": "code", + "source_file": "src/errors/ErrorReporter.ts", + "source_location": "L43", + "id": "errorreporter_errorreporter_report", + "community": 4 + }, + { + "label": ".wrap()", + "file_type": "code", + "source_file": "src/errors/ErrorReporter.ts", + "source_location": "L73", + "id": "errorreporter_errorreporter_wrap", + "community": 4 + }, + { + "label": ".buildEmbed()", + "file_type": "code", + "source_file": "src/errors/ErrorReporter.ts", + "source_location": "L107", + "id": "errorreporter_errorreporter_buildembed", + "community": 4 + }, + { + "label": "withErrorHandler()", + "file_type": "code", + "source_file": "src/errors/ErrorReporter.ts", + "source_location": "L136", + "id": "errorreporter_witherrorhandler", + "community": 4 + }, + { + "label": "ErrorCodes.ts", + "file_type": "code", + "source_file": "src/errors/ErrorCodes.ts", + "source_location": "L1", + "id": "errorcodes", + "community": 4 + }, + { + "label": "createBotError()", + "file_type": "code", + "source_file": "src/errors/ErrorCodes.ts", + "source_location": "L123", + "id": "errorcodes_createboterror", + "community": 4 + }, + { + "label": "voiceStateUpdate.ts", + "file_type": "code", + "source_file": "src/events/voiceStateUpdate.ts", + "source_location": "L1", + "id": "voicestateupdate", + "community": 0 + }, + { + "label": "execute()", + "file_type": "code", + "source_file": "src/events/voiceStateUpdate.ts", + "source_location": "L7", + "id": "voicestateupdate_execute", + "community": 0 + }, + { + "label": "interactionCreate.ts", + "file_type": "code", + "source_file": "src/events/interactionCreate.ts", + "source_location": "L1", + "id": "interactioncreate", + "community": 4 + }, + { + "label": "execute()", + "file_type": "code", + "source_file": "src/events/interactionCreate.ts", + "source_location": "L16", + "id": "interactioncreate_execute", + "community": 4 + }, + { + "label": "messageCreate.ts", + "file_type": "code", + "source_file": "src/events/messageCreate.ts", + "source_location": "L1", + "id": "messagecreate", + "community": 7 + }, + { + "label": "execute()", + "file_type": "code", + "source_file": "src/events/messageCreate.ts", + "source_location": "L10", + "id": "messagecreate_execute", + "community": 7 + }, + { + "label": "guildMemberAdd.ts", + "file_type": "code", + "source_file": "src/events/guildMemberAdd.ts", + "source_location": "L1", + "id": "guildmemberadd", + "community": 0 + }, + { + "label": "execute()", + "file_type": "code", + "source_file": "src/events/guildMemberAdd.ts", + "source_location": "L7", + "id": "guildmemberadd_execute", + "community": 0 + }, + { + "label": "guildDelete.ts", + "file_type": "code", + "source_file": "src/events/guildDelete.ts", + "source_location": "L1", + "id": "guilddelete", + "community": 0 + }, + { + "label": "execute()", + "file_type": "code", + "source_file": "src/events/guildDelete.ts", + "source_location": "L7", + "id": "guilddelete_execute", + "community": 0 + }, + { + "label": "inviteDelete.ts", + "file_type": "code", + "source_file": "src/events/inviteDelete.ts", + "source_location": "L1", + "id": "invitedelete", + "community": 0 + }, + { + "label": "execute()", + "file_type": "code", + "source_file": "src/events/inviteDelete.ts", + "source_location": "L7", + "id": "invitedelete_execute", + "community": 0 + }, + { + "label": "inviteCreate.ts", + "file_type": "code", + "source_file": "src/events/inviteCreate.ts", + "source_location": "L1", + "id": "invitecreate", + "community": 0 + }, + { + "label": "execute()", + "file_type": "code", + "source_file": "src/events/inviteCreate.ts", + "source_location": "L7", + "id": "invitecreate_execute", + "community": 0 + }, + { + "label": "ready.ts", + "file_type": "code", + "source_file": "src/events/ready.ts", + "source_location": "L1", + "id": "ready", + "community": 0 + }, + { + "label": "execute()", + "file_type": "code", + "source_file": "src/events/ready.ts", + "source_location": "L14", + "id": "ready_execute", + "community": 0 + }, + { + "label": "guildCreate.ts", + "file_type": "code", + "source_file": "src/events/guildCreate.ts", + "source_location": "L1", + "id": "guildcreate", + "community": 0 + }, + { + "label": "execute()", + "file_type": "code", + "source_file": "src/events/guildCreate.ts", + "source_location": "L8", + "id": "guildcreate_execute", + "community": 0 + }, + { + "label": "localeHelper.ts", + "file_type": "code", + "source_file": "src/i18n/localeHelper.ts", + "source_location": "L1", + "id": "localehelper", + "community": 4 + }, + { + "label": "getInteractionLocale()", + "file_type": "code", + "source_file": "src/i18n/localeHelper.ts", + "source_location": "L21", + "id": "localehelper_getinteractionlocale", + "community": 4 + }, + { + "label": "getContextLocale()", + "file_type": "code", + "source_file": "src/i18n/localeHelper.ts", + "source_location": "L55", + "id": "localehelper_getcontextlocale", + "community": 4 + }, + { + "label": "types.ts", + "file_type": "code", + "source_file": "src/i18n/types.ts", + "source_location": "L1", + "id": "types", + "community": 3 + }, + { + "label": "StaticI18nProvider", + "file_type": "code", + "source_file": "src/i18n/index.ts", + "source_location": "L28", + "id": "index_statici18nprovider", + "community": 3 + }, + { + "label": ".get()", + "file_type": "code", + "source_file": "src/i18n/index.ts", + "source_location": "L29", + "id": "index_statici18nprovider_get", + "community": 3 + }, + { + "label": ".isSupported()", + "file_type": "code", + "source_file": "src/i18n/index.ts", + "source_location": "L33", + "id": "index_statici18nprovider_issupported", + "community": 3 + }, + { + "label": ".getSupportedLocales()", + "file_type": "code", + "source_file": "src/i18n/index.ts", + "source_location": "L37", + "id": "index_statici18nprovider_getsupportedlocales", + "community": 3 + }, + { + "label": "setI18nProvider()", + "file_type": "code", + "source_file": "src/i18n/index.ts", + "source_location": "L50", + "id": "index_seti18nprovider", + "community": 3 + }, + { + "label": "getI18nProvider()", + "file_type": "code", + "source_file": "src/i18n/index.ts", + "source_location": "L55", + "id": "index_geti18nprovider", + "community": 3 + }, + { + "label": "resolveLocale()", + "file_type": "code", + "source_file": "src/i18n/index.ts", + "source_location": "L68", + "id": "index_resolvelocale", + "community": 3 + }, + { + "label": "normalizeDiscordLocale()", + "file_type": "code", + "source_file": "src/i18n/index.ts", + "source_location": "L88", + "id": "index_normalizediscordlocale", + "community": 3 + }, + { + "label": "t()", + "file_type": "code", + "source_file": "src/i18n/index.ts", + "source_location": "L109", + "id": "index_t", + "community": 3 + }, + { + "label": "getNestedValue()", + "file_type": "code", + "source_file": "src/i18n/index.ts", + "source_location": "L134", + "id": "index_getnestedvalue", + "community": 3 + }, + { + "label": "en.ts", + "file_type": "code", + "source_file": "src/i18n/locales/en.ts", + "source_location": "L1", + "id": "en", + "community": 3 + }, + { + "label": "ko.ts", + "file_type": "code", + "source_file": "src/i18n/locales/ko.ts", + "source_location": "L1", + "id": "ko", + "community": 3 + }, + { + "label": "KordClient.ts", + "file_type": "code", + "source_file": "src/client/KordClient.ts", + "source_location": "L1", + "id": "kordclient", + "community": 0 + }, + { + "label": "KordClient", + "file_type": "code", + "source_file": "src/client/KordClient.ts", + "source_location": "L10", + "id": "kordclient_kordclient", + "community": 0 + }, + { + "label": ".constructor()", + "file_type": "code", + "source_file": "src/client/KordClient.ts", + "source_location": "L13", + "id": "kordclient_kordclient_constructor", + "community": 0 + }, + { + "label": ".start()", + "file_type": "code", + "source_file": "src/client/KordClient.ts", + "source_location": "L26", + "id": "kordclient_kordclient_start", + "community": 0 + }, + { + "label": "EventLoader.ts", + "file_type": "code", + "source_file": "src/handlers/EventLoader.ts", + "source_location": "L1", + "id": "eventloader", + "community": 0 + }, + { + "label": "loadEvents()", + "file_type": "code", + "source_file": "src/handlers/EventLoader.ts", + "source_location": "L6", + "id": "eventloader_loadevents", + "community": 0 + }, + { + "label": "CommandLoader.ts", + "file_type": "code", + "source_file": "src/handlers/CommandLoader.ts", + "source_location": "L1", + "id": "commandloader", + "community": 0 + }, + { + "label": "loadCommands()", + "file_type": "code", + "source_file": "src/handlers/CommandLoader.ts", + "source_location": "L6", + "id": "commandloader_loadcommands", + "community": 0 + }, + { + "label": "InviteService.ts", + "file_type": "code", + "source_file": "src/services/InviteService.ts", + "source_location": "L1", + "id": "inviteservice", + "community": 0 + }, + { + "label": "InviteService", + "file_type": "code", + "source_file": "src/services/InviteService.ts", + "source_location": "L5", + "id": "inviteservice_inviteservice", + "community": 12 + }, + { + "label": ".cacheAllInvites()", + "file_type": "code", + "source_file": "src/services/InviteService.ts", + "source_location": "L9", + "id": "inviteservice_inviteservice_cacheallinvites", + "community": 12 + }, + { + "label": ".cacheGuildInvites()", + "file_type": "code", + "source_file": "src/services/InviteService.ts", + "source_location": "L16", + "id": "inviteservice_inviteservice_cacheguildinvites", + "community": 12 + }, + { + "label": ".handleInviteCreate()", + "file_type": "code", + "source_file": "src/services/InviteService.ts", + "source_location": "L29", + "id": "inviteservice_inviteservice_handleinvitecreate", + "community": 12 + }, + { + "label": ".handleInviteDelete()", + "file_type": "code", + "source_file": "src/services/InviteService.ts", + "source_location": "L35", + "id": "inviteservice_inviteservice_handleinvitedelete", + "community": 12 + }, + { + "label": ".handleMemberAdd()", + "file_type": "code", + "source_file": "src/services/InviteService.ts", + "source_location": "L41", + "id": "inviteservice_inviteservice_handlememberadd", + "community": 12 + }, + { + "label": "MimicService.ts", + "file_type": "code", + "source_file": "src/services/MimicService.ts", + "source_location": "L1", + "id": "mimicservice", + "community": 7 + }, + { + "label": "MimicService", + "file_type": "code", + "source_file": "src/services/MimicService.ts", + "source_location": "L5", + "id": "mimicservice_mimicservice", + "community": 7 + }, + { + "label": ".handleMessage()", + "file_type": "code", + "source_file": "src/services/MimicService.ts", + "source_location": "L6", + "id": "mimicservice_mimicservice_handlemessage", + "community": 7 + }, + { + "label": "RefinementService.ts", + "file_type": "code", + "source_file": "src/services/RefinementService.ts", + "source_location": "L1", + "id": "refinementservice", + "community": 0 + }, + { + "label": "RefinementService", + "file_type": "code", + "source_file": "src/services/RefinementService.ts", + "source_location": "L28", + "id": "refinementservice_refinementservice", + "community": 6 + }, + { + "label": ".getMaxDurability()", + "file_type": "code", + "source_file": "src/services/RefinementService.ts", + "source_location": "L38", + "id": "refinementservice_refinementservice_getmaxdurability", + "community": 6 + }, + { + "label": ".loadConfigs()", + "file_type": "code", + "source_file": "src/services/RefinementService.ts", + "source_location": "L45", + "id": "refinementservice_refinementservice_loadconfigs", + "community": 6 + }, + { + "label": ".getSysConfig()", + "file_type": "code", + "source_file": "src/services/RefinementService.ts", + "source_location": "L67", + "id": "refinementservice_refinementservice_getsysconfig", + "community": 6 + }, + { + "label": ".getSysConfigNum()", + "file_type": "code", + "source_file": "src/services/RefinementService.ts", + "source_location": "L71", + "id": "refinementservice_refinementservice_getsysconfignum", + "community": 6 + }, + { + "label": ".getCost()", + "file_type": "code", + "source_file": "src/services/RefinementService.ts", + "source_location": "L79", + "id": "refinementservice_refinementservice_getcost", + "community": 6 + }, + { + "label": ".tryRefine()", + "file_type": "code", + "source_file": "src/services/RefinementService.ts", + "source_location": "L86", + "id": "refinementservice_refinementservice_tryrefine", + "community": 6 + }, + { + "label": ".startBattle()", + "file_type": "code", + "source_file": "src/services/RefinementService.ts", + "source_location": "L153", + "id": "refinementservice_refinementservice_startbattle", + "community": 6 + }, + { + "label": ".checkIn()", + "file_type": "code", + "source_file": "src/services/RefinementService.ts", + "source_location": "L249", + "id": "refinementservice_refinementservice_checkin", + "community": 6 + }, + { + "label": ".sellWeapon()", + "file_type": "code", + "source_file": "src/services/RefinementService.ts", + "source_location": "L277", + "id": "refinementservice_refinementservice_sellweapon", + "community": 6 + }, + { + "label": ".getProfile()", + "file_type": "code", + "source_file": "src/services/RefinementService.ts", + "source_location": "L299", + "id": "refinementservice_refinementservice_getprofile", + "community": 6 + }, + { + "label": ".addGold()", + "file_type": "code", + "source_file": "src/services/RefinementService.ts", + "source_location": "L303", + "id": "refinementservice_refinementservice_addgold", + "community": 6 + }, + { + "label": ".getOrCreateProfile()", + "file_type": "code", + "source_file": "src/services/RefinementService.ts", + "source_location": "L315", + "id": "refinementservice_refinementservice_getorcreateprofile", + "community": 6 + }, + { + "label": "ActivityTrackerService.ts", + "file_type": "code", + "source_file": "src/services/ActivityTrackerService.ts", + "source_location": "L1", + "id": "activitytrackerservice", + "community": 0 + }, + { + "label": "ActivityTrackerService", + "file_type": "code", + "source_file": "src/services/ActivityTrackerService.ts", + "source_location": "L4", + "id": "activitytrackerservice_activitytrackerservice", + "community": 0 + }, + { + "label": ".recordActivity()", + "file_type": "code", + "source_file": "src/services/ActivityTrackerService.ts", + "source_location": "L9", + "id": "activitytrackerservice_activitytrackerservice_recordactivity", + "community": 0 + }, + { + "label": ".getPeakHour()", + "file_type": "code", + "source_file": "src/services/ActivityTrackerService.ts", + "source_location": "L48", + "id": "activitytrackerservice_activitytrackerservice_getpeakhour", + "community": 0 + }, + { + "label": "BigEmojiService.ts", + "file_type": "code", + "source_file": "src/services/BigEmojiService.ts", + "source_location": "L1", + "id": "bigemojiservice", + "community": 7 + }, + { + "label": "BigEmojiService", + "file_type": "code", + "source_file": "src/services/BigEmojiService.ts", + "source_location": "L5", + "id": "bigemojiservice_bigemojiservice", + "community": 7 + }, + { + "label": ".handleMessage()", + "file_type": "code", + "source_file": "src/services/BigEmojiService.ts", + "source_location": "L6", + "id": "bigemojiservice_bigemojiservice_handlemessage", + "community": 7 + }, + { + "label": "FeverService.ts", + "file_type": "code", + "source_file": "src/services/FeverService.ts", + "source_location": "L1", + "id": "feverservice", + "community": 0 + }, + { + "label": "FeverService", + "file_type": "code", + "source_file": "src/services/FeverService.ts", + "source_location": "L5", + "id": "feverservice_feverservice", + "community": 17 + }, + { + "label": ".startScheduler()", + "file_type": "code", + "source_file": "src/services/FeverService.ts", + "source_location": "L11", + "id": "feverservice_feverservice_startscheduler", + "community": 17 + }, + { + "label": ".updateFeverState()", + "file_type": "code", + "source_file": "src/services/FeverService.ts", + "source_location": "L28", + "id": "feverservice_feverservice_updatefeverstate", + "community": 17 + }, + { + "label": ".getFeverBonus()", + "file_type": "code", + "source_file": "src/services/FeverService.ts", + "source_location": "L64", + "id": "feverservice_feverservice_getfeverbonus", + "community": 17 + }, + { + "label": "PresenceService.ts", + "file_type": "code", + "source_file": "src/services/PresenceService.ts", + "source_location": "L1", + "id": "presenceservice", + "community": 0 + }, + { + "label": "PresenceService", + "file_type": "code", + "source_file": "src/services/PresenceService.ts", + "source_location": "L9", + "id": "presenceservice_presenceservice", + "community": 18 + }, + { + "label": ".startActivePresence()", + "file_type": "code", + "source_file": "src/services/PresenceService.ts", + "source_location": "L28", + "id": "presenceservice_presenceservice_startactivepresence", + "community": 18 + }, + { + "label": ".updatePresence()", + "file_type": "code", + "source_file": "src/services/PresenceService.ts", + "source_location": "L54", + "id": "presenceservice_presenceservice_updatepresence", + "community": 18 + }, + { + "label": ".stopRotation()", + "file_type": "code", + "source_file": "src/services/PresenceService.ts", + "source_location": "L74", + "id": "presenceservice_presenceservice_stoprotation", + "community": 18 + }, + { + "label": "MusicService.ts", + "file_type": "code", + "source_file": "src/services/MusicService.ts", + "source_location": "L1", + "id": "musicservice", + "community": 2 + }, + { + "label": "extractYouTubeVideoId()", + "file_type": "code", + "source_file": "src/services/MusicService.ts", + "source_location": "L79", + "id": "musicservice_extractyoutubevideoid", + "community": 2 + }, + { + "label": "isYouTubePlaylistUrl()", + "file_type": "code", + "source_file": "src/services/MusicService.ts", + "source_location": "L118", + "id": "musicservice_isyoutubeplaylisturl", + "community": 2 + }, + { + "label": "parseDurationSeconds()", + "file_type": "code", + "source_file": "src/services/MusicService.ts", + "source_location": "L133", + "id": "musicservice_parsedurationseconds", + "community": 2 + }, + { + "label": "parseDurationTextToSeconds()", + "file_type": "code", + "source_file": "src/services/MusicService.ts", + "source_location": "L145", + "id": "musicservice_parsedurationtexttoseconds", + "community": 2 + }, + { + "label": "formatDuration()", + "file_type": "code", + "source_file": "src/services/MusicService.ts", + "source_location": "L175", + "id": "musicservice_formatduration", + "community": 2 + }, + { + "label": "MusicService", + "file_type": "code", + "source_file": "src/services/MusicService.ts", + "source_location": "L191", + "id": "musicservice_musicservice", + "community": 2 + }, + { + "label": ".getYouTube()", + "file_type": "code", + "source_file": "src/services/MusicService.ts", + "source_location": "L199", + "id": "musicservice_musicservice_getyoutube", + "community": 2 + }, + { + "label": ".addFromQuery()", + "file_type": "code", + "source_file": "src/services/MusicService.ts", + "source_location": "L207", + "id": "musicservice_musicservice_addfromquery", + "community": 2 + }, + { + "label": ".addFromUrl()", + "file_type": "code", + "source_file": "src/services/MusicService.ts", + "source_location": "L231", + "id": "musicservice_musicservice_addfromurl", + "community": 2 + }, + { + "label": ".getQueueEmbed()", + "file_type": "code", + "source_file": "src/services/MusicService.ts", + "source_location": "L260", + "id": "musicservice_musicservice_getqueueembed", + "community": 2 + }, + { + "label": ".getActiveVoiceChannelId()", + "file_type": "code", + "source_file": "src/services/MusicService.ts", + "source_location": "L300", + "id": "musicservice_musicservice_getactivevoicechannelid", + "community": 2 + }, + { + "label": ".skip()", + "file_type": "code", + "source_file": "src/services/MusicService.ts", + "source_location": "L304", + "id": "musicservice_musicservice_skip", + "community": 2 + }, + { + "label": ".pause()", + "file_type": "code", + "source_file": "src/services/MusicService.ts", + "source_location": "L314", + "id": "musicservice_musicservice_pause", + "community": 2 + }, + { + "label": ".resume()", + "file_type": "code", + "source_file": "src/services/MusicService.ts", + "source_location": "L334", + "id": "musicservice_musicservice_resume", + "community": 2 + }, + { + "label": ".stop()", + "file_type": "code", + "source_file": "src/services/MusicService.ts", + "source_location": "L351", + "id": "musicservice_musicservice_stop", + "community": 2 + }, + { + "label": ".remove()", + "file_type": "code", + "source_file": "src/services/MusicService.ts", + "source_location": "L368", + "id": "musicservice_musicservice_remove", + "community": 2 + }, + { + "label": ".leave()", + "file_type": "code", + "source_file": "src/services/MusicService.ts", + "source_location": "L384", + "id": "musicservice_musicservice_leave", + "community": 2 + }, + { + "label": ".handleControlInteraction()", + "file_type": "code", + "source_file": "src/services/MusicService.ts", + "source_location": "L404", + "id": "musicservice_musicservice_handlecontrolinteraction", + "community": 2 + }, + { + "label": ".createQueueItem()", + "file_type": "code", + "source_file": "src/services/MusicService.ts", + "source_location": "L454", + "id": "musicservice_musicservice_createqueueitem", + "community": 2 + }, + { + "label": ".enqueueTracks()", + "file_type": "code", + "source_file": "src/services/MusicService.ts", + "source_location": "L476", + "id": "musicservice_musicservice_enqueuetracks", + "community": 2 + }, + { + "label": ".ensureSession()", + "file_type": "code", + "source_file": "src/services/MusicService.ts", + "source_location": "L505", + "id": "musicservice_musicservice_ensuresession", + "community": 2 + }, + { + "label": ".bindSessionEvents()", + "file_type": "code", + "source_file": "src/services/MusicService.ts", + "source_location": "L561", + "id": "musicservice_musicservice_bindsessionevents", + "community": 2 + }, + { + "label": ".onTrackFinished()", + "file_type": "code", + "source_file": "src/services/MusicService.ts", + "source_location": "L577", + "id": "musicservice_musicservice_ontrackfinished", + "community": 2 + }, + { + "label": ".notifyPlaybackFailure()", + "file_type": "code", + "source_file": "src/services/MusicService.ts", + "source_location": "L597", + "id": "musicservice_musicservice_notifyplaybackfailure", + "community": 2 + }, + { + "label": ".playNext()", + "file_type": "code", + "source_file": "src/services/MusicService.ts", + "source_location": "L618", + "id": "musicservice_musicservice_playnext", + "community": 2 + }, + { + "label": ".resolveStreamUrl()", + "file_type": "code", + "source_file": "src/services/MusicService.ts", + "source_location": "L660", + "id": "musicservice_musicservice_resolvestreamurl", + "community": 2 + }, + { + "label": ".extractPlaylist()", + "file_type": "code", + "source_file": "src/services/MusicService.ts", + "source_location": "L711", + "id": "musicservice_musicservice_extractplaylist", + "community": 2 + }, + { + "label": ".spawnFfmpeg()", + "file_type": "code", + "source_file": "src/services/MusicService.ts", + "source_location": "L754", + "id": "musicservice_musicservice_spawnffmpeg", + "community": 2 + }, + { + "label": ".cleanupProcess()", + "file_type": "code", + "source_file": "src/services/MusicService.ts", + "source_location": "L796", + "id": "musicservice_musicservice_cleanupprocess", + "community": 2 + }, + { + "label": ".renderNowPlaying()", + "file_type": "code", + "source_file": "src/services/MusicService.ts", + "source_location": "L805", + "id": "musicservice_musicservice_rendernowplaying", + "community": 2 + }, + { + "label": ".renderIdleState()", + "file_type": "code", + "source_file": "src/services/MusicService.ts", + "source_location": "L822", + "id": "musicservice_musicservice_renderidlestate", + "community": 2 + }, + { + "label": ".buildControlRow()", + "file_type": "code", + "source_file": "src/services/MusicService.ts", + "source_location": "L840", + "id": "musicservice_musicservice_buildcontrolrow", + "community": 2 + }, + { + "label": ".buildFallbackControlRow()", + "file_type": "code", + "source_file": "src/services/MusicService.ts", + "source_location": "L866", + "id": "musicservice_musicservice_buildfallbackcontrolrow", + "community": 2 + }, + { + "label": ".buildNowPlayingEmbed()", + "file_type": "code", + "source_file": "src/services/MusicService.ts", + "source_location": "L891", + "id": "musicservice_musicservice_buildnowplayingembed", + "community": 2 + }, + { + "label": ".buildProgressBar()", + "file_type": "code", + "source_file": "src/services/MusicService.ts", + "source_location": "L948", + "id": "musicservice_musicservice_buildprogressbar", + "community": 2 + }, + { + "label": ".buildIndeterminateProgressBar()", + "file_type": "code", + "source_file": "src/services/MusicService.ts", + "source_location": "L955", + "id": "musicservice_musicservice_buildindeterminateprogressbar", + "community": 2 + }, + { + "label": ".startProgressUpdates()", + "file_type": "code", + "source_file": "src/services/MusicService.ts", + "source_location": "L961", + "id": "musicservice_musicservice_startprogressupdates", + "community": 2 + }, + { + "label": ".stopProgressUpdates()", + "file_type": "code", + "source_file": "src/services/MusicService.ts", + "source_location": "L984", + "id": "musicservice_musicservice_stopprogressupdates", + "community": 2 + }, + { + "label": ".isPaused()", + "file_type": "code", + "source_file": "src/services/MusicService.ts", + "source_location": "L991", + "id": "musicservice_musicservice_ispaused", + "community": 2 + }, + { + "label": ".getElapsedSeconds()", + "file_type": "code", + "source_file": "src/services/MusicService.ts", + "source_location": "L995", + "id": "musicservice_musicservice_getelapsedseconds", + "community": 2 + }, + { + "label": ".refreshControlMessage()", + "file_type": "code", + "source_file": "src/services/MusicService.ts", + "source_location": "L1005", + "id": "musicservice_musicservice_refreshcontrolmessage", + "community": 2 + }, + { + "label": ".formatTrackLine()", + "file_type": "code", + "source_file": "src/services/MusicService.ts", + "source_location": "L1027", + "id": "musicservice_musicservice_formattrackline", + "community": 2 + }, + { + "label": ".safeSend()", + "file_type": "code", + "source_file": "src/services/MusicService.ts", + "source_location": "L1031", + "id": "musicservice_musicservice_safesend", + "community": 2 + }, + { + "label": "MiniGameRegistry.ts", + "file_type": "code", + "source_file": "src/services/MiniGameRegistry.ts", + "source_location": "L1", + "id": "minigameregistry", + "community": 15 + }, + { + "label": "getMiniGame()", + "file_type": "code", + "source_file": "src/services/MiniGameRegistry.ts", + "source_location": "L20", + "id": "minigameregistry_getminigame", + "community": 15 + }, + { + "label": "getAllMiniGames()", + "file_type": "code", + "source_file": "src/services/MiniGameRegistry.ts", + "source_location": "L24", + "id": "minigameregistry_getallminigames", + "community": 15 + }, + { + "label": "VoiceService.ts", + "file_type": "code", + "source_file": "src/services/VoiceService.ts", + "source_location": "L1", + "id": "voiceservice", + "community": 0 + }, + { + "label": "VoiceService", + "file_type": "code", + "source_file": "src/services/VoiceService.ts", + "source_location": "L9", + "id": "voiceservice_voiceservice", + "community": 9 + }, + { + "label": ".syncChannels()", + "file_type": "code", + "source_file": "src/services/VoiceService.ts", + "source_location": "L10", + "id": "voiceservice_voiceservice_syncchannels", + "community": 9 + }, + { + "label": ".handleVoiceStateUpdate()", + "file_type": "code", + "source_file": "src/services/VoiceService.ts", + "source_location": "L49", + "id": "voiceservice_voiceservice_handlevoicestateupdate", + "community": 9 + }, + { + "label": ".handleJoin()", + "file_type": "code", + "source_file": "src/services/VoiceService.ts", + "source_location": "L65", + "id": "voiceservice_voiceservice_handlejoin", + "community": 9 + }, + { + "label": ".handleLeave()", + "file_type": "code", + "source_file": "src/services/VoiceService.ts", + "source_location": "L211", + "id": "voiceservice_voiceservice_handleleave", + "community": 9 + }, + { + "label": ".applyOwnershipTransfer()", + "file_type": "code", + "source_file": "src/services/VoiceService.ts", + "source_location": "L277", + "id": "voiceservice_voiceservice_applyownershiptransfer", + "community": 9 + }, + { + "label": ".sendControlPanel()", + "file_type": "code", + "source_file": "src/services/VoiceService.ts", + "source_location": "L301", + "id": "voiceservice_voiceservice_sendcontrolpanel", + "community": 9 + }, + { + "label": ".getEffectiveName()", + "file_type": "code", + "source_file": "src/services/VoiceService.ts", + "source_location": "L336", + "id": "voiceservice_voiceservice_geteffectivename", + "community": 9 + }, + { + "label": "PermissionAuditService.ts", + "file_type": "code", + "source_file": "src/services/PermissionAuditService.ts", + "source_location": "L1", + "id": "permissionauditservice", + "community": 5 + }, + { + "label": "PermissionAuditService", + "file_type": "code", + "source_file": "src/services/PermissionAuditService.ts", + "source_location": "L143", + "id": "permissionauditservice_permissionauditservice", + "community": 5 + }, + { + "label": ".auditGuild()", + "file_type": "code", + "source_file": "src/services/PermissionAuditService.ts", + "source_location": "L144", + "id": "permissionauditservice_permissionauditservice_auditguild", + "community": 5 + }, + { + "label": ".checkGuildPermissions()", + "file_type": "code", + "source_file": "src/services/PermissionAuditService.ts", + "source_location": "L181", + "id": "permissionauditservice_permissionauditservice_checkguildpermissions", + "community": 5 + }, + { + "label": ".checkChannelPermissions()", + "file_type": "code", + "source_file": "src/services/PermissionAuditService.ts", + "source_location": "L194", + "id": "permissionauditservice_permissionauditservice_checkchannelpermissions", + "community": 5 + }, + { + "label": ".checkHierarchy()", + "file_type": "code", + "source_file": "src/services/PermissionAuditService.ts", + "source_location": "L210", + "id": "permissionauditservice_permissionauditservice_checkhierarchy", + "community": 5 + }, + { + "label": ".getMissing()", + "file_type": "code", + "source_file": "src/services/PermissionAuditService.ts", + "source_location": "L231", + "id": "permissionauditservice_permissionauditservice_getmissing", + "community": 5 + }, + { + "label": ".permToString()", + "file_type": "code", + "source_file": "src/services/PermissionAuditService.ts", + "source_location": "L236", + "id": "permissionauditservice_permissionauditservice_permtostring", + "community": 5 + }, + { + "label": "SetupWizardRenderer.ts", + "file_type": "code", + "source_file": "src/services/SetupWizardRenderer.ts", + "source_location": "L1", + "id": "setupwizardrenderer", + "community": 5 + }, + { + "label": "SetupWizardRenderer", + "file_type": "code", + "source_file": "src/services/SetupWizardRenderer.ts", + "source_location": "L17", + "id": "setupwizardrenderer_setupwizardrenderer", + "community": 5 + }, + { + "label": ".renderStep()", + "file_type": "code", + "source_file": "src/services/SetupWizardRenderer.ts", + "source_location": "L18", + "id": "setupwizardrenderer_setupwizardrenderer_renderstep", + "community": 5 + }, + { + "label": "FishingService.ts", + "file_type": "code", + "source_file": "src/services/FishingService.ts", + "source_location": "L1", + "id": "fishingservice", + "community": 11 + }, + { + "label": "FishingService", + "file_type": "code", + "source_file": "src/services/FishingService.ts", + "source_location": "L102", + "id": "fishingservice_fishingservice", + "community": 1 + }, + { + "label": ".enterThread()", + "file_type": "code", + "source_file": "src/services/FishingService.ts", + "source_location": "L109", + "id": "fishingservice_fishingservice_enterthread", + "community": 1 + }, + { + "label": ".isOwnedFishingThread()", + "file_type": "code", + "source_file": "src/services/FishingService.ts", + "source_location": "L135", + "id": "fishingservice_fishingservice_isownedfishingthread", + "community": 1 + }, + { + "label": ".startSessionInThread()", + "file_type": "code", + "source_file": "src/services/FishingService.ts", + "source_location": "L145", + "id": "fishingservice_fishingservice_startsessioninthread", + "community": 1 + }, + { + "label": ".endThreadByUser()", + "file_type": "code", + "source_file": "src/services/FishingService.ts", + "source_location": "L168", + "id": "fishingservice_fishingservice_endthreadbyuser", + "community": 1 + }, + { + "label": ".handleButton()", + "file_type": "code", + "source_file": "src/services/FishingService.ts", + "source_location": "L189", + "id": "fishingservice_fishingservice_handlebutton", + "community": 1 + }, + { + "label": ".getProfile()", + "file_type": "code", + "source_file": "src/services/FishingService.ts", + "source_location": "L234", + "id": "fishingservice_fishingservice_getprofile", + "community": 1 + }, + { + "label": ".getCollection()", + "file_type": "code", + "source_file": "src/services/FishingService.ts", + "source_location": "L242", + "id": "fishingservice_fishingservice_getcollection", + "community": 1 + }, + { + "label": ".getSizeRanking()", + "file_type": "code", + "source_file": "src/services/FishingService.ts", + "source_location": "L256", + "id": "fishingservice_fishingservice_getsizeranking", + "community": 1 + }, + { + "label": ".getFishDisplayName()", + "file_type": "code", + "source_file": "src/services/FishingService.ts", + "source_location": "L271", + "id": "fishingservice_fishingservice_getfishdisplayname", + "community": 1 + }, + { + "label": ".getRarityDisplayNameById()", + "file_type": "code", + "source_file": "src/services/FishingService.ts", + "source_location": "L275", + "id": "fishingservice_fishingservice_getraritydisplaynamebyid", + "community": 1 + }, + { + "label": ".tickSession()", + "file_type": "code", + "source_file": "src/services/FishingService.ts", + "source_location": "L283", + "id": "fishingservice_fishingservice_ticksession", + "community": 1 + }, + { + "label": ".queueAction()", + "file_type": "code", + "source_file": "src/services/FishingService.ts", + "source_location": "L307", + "id": "fishingservice_fishingservice_queueaction", + "community": 1 + }, + { + "label": ".resolveSuccessfulPull()", + "file_type": "code", + "source_file": "src/services/FishingService.ts", + "source_location": "L323", + "id": "fishingservice_fishingservice_resolvesuccessfulpull", + "community": 1 + }, + { + "label": ".resolveMiss()", + "file_type": "code", + "source_file": "src/services/FishingService.ts", + "source_location": "L353", + "id": "fishingservice_fishingservice_resolvemiss", + "community": 1 + }, + { + "label": ".startNextPhase()", + "file_type": "code", + "source_file": "src/services/FishingService.ts", + "source_location": "L369", + "id": "fishingservice_fishingservice_startnextphase", + "community": 1 + }, + { + "label": ".finishSession()", + "file_type": "code", + "source_file": "src/services/FishingService.ts", + "source_location": "L375", + "id": "fishingservice_fishingservice_finishsession", + "community": 1 + }, + { + "label": ".getActiveSession()", + "file_type": "code", + "source_file": "src/services/FishingService.ts", + "source_location": "L397", + "id": "fishingservice_fishingservice_getactivesession", + "community": 1 + }, + { + "label": ".isSessionStale()", + "file_type": "code", + "source_file": "src/services/FishingService.ts", + "source_location": "L411", + "id": "fishingservice_fishingservice_issessionstale", + "community": 1 + }, + { + "label": ".clearStaleSession()", + "file_type": "code", + "source_file": "src/services/FishingService.ts", + "source_location": "L424", + "id": "fishingservice_fishingservice_clearstalesession", + "community": 1 + }, + { + "label": ".deleteThread()", + "file_type": "code", + "source_file": "src/services/FishingService.ts", + "source_location": "L430", + "id": "fishingservice_fishingservice_deletethread", + "community": 1 + }, + { + "label": ".renderSession()", + "file_type": "code", + "source_file": "src/services/FishingService.ts", + "source_location": "L444", + "id": "fishingservice_fishingservice_rendersession", + "community": 1 + }, + { + "label": ".buildEmbed()", + "file_type": "code", + "source_file": "src/services/FishingService.ts", + "source_location": "L467", + "id": "fishingservice_fishingservice_buildembed", + "community": 1 + }, + { + "label": ".buildControlRow()", + "file_type": "code", + "source_file": "src/services/FishingService.ts", + "source_location": "L527", + "id": "fishingservice_fishingservice_buildcontrolrow", + "community": 1 + }, + { + "label": ".buildGauge()", + "file_type": "code", + "source_file": "src/services/FishingService.ts", + "source_location": "L552", + "id": "fishingservice_fishingservice_buildgauge", + "community": 1 + }, + { + "label": ".createSessionInThread()", + "file_type": "code", + "source_file": "src/services/FishingService.ts", + "source_location": "L558", + "id": "fishingservice_fishingservice_createsessioninthread", + "community": 1 + }, + { + "label": ".findOrCreateThread()", + "file_type": "code", + "source_file": "src/services/FishingService.ts", + "source_location": "L613", + "id": "fishingservice_fishingservice_findorcreatethread", + "community": 1 + }, + { + "label": ".findOwnedFishingThread()", + "file_type": "code", + "source_file": "src/services/FishingService.ts", + "source_location": "L632", + "id": "fishingservice_fishingservice_findownedfishingthread", + "community": 1 + }, + { + "label": ".sendCatchResult()", + "file_type": "code", + "source_file": "src/services/FishingService.ts", + "source_location": "L646", + "id": "fishingservice_fishingservice_sendcatchresult", + "community": 1 + }, + { + "label": ".previewFishLane()", + "file_type": "code", + "source_file": "src/services/FishingService.ts", + "source_location": "L702", + "id": "fishingservice_fishingservice_previewfishlane", + "community": 1 + }, + { + "label": ".previewGauge()", + "file_type": "code", + "source_file": "src/services/FishingService.ts", + "source_location": "L706", + "id": "fishingservice_fishingservice_previewgauge", + "community": 1 + }, + { + "label": ".buildFishLane()", + "file_type": "code", + "source_file": "src/services/FishingService.ts", + "source_location": "L710", + "id": "fishingservice_fishingservice_buildfishlane", + "community": 1 + }, + { + "label": ".randomDirection()", + "file_type": "code", + "source_file": "src/services/FishingService.ts", + "source_location": "L716", + "id": "fishingservice_fishingservice_randomdirection", + "community": 1 + }, + { + "label": ".buildThreadName()", + "file_type": "code", + "source_file": "src/services/FishingService.ts", + "source_location": "L721", + "id": "fishingservice_fishingservice_buildthreadname", + "community": 1 + }, + { + "label": ".loadFishingCatalog()", + "file_type": "code", + "source_file": "src/services/FishingService.ts", + "source_location": "L726", + "id": "fishingservice_fishingservice_loadfishingcatalog", + "community": 1 + }, + { + "label": ".pickFishByRate()", + "file_type": "code", + "source_file": "src/services/FishingService.ts", + "source_location": "L738", + "id": "fishingservice_fishingservice_pickfishbyrate", + "community": 1 + }, + { + "label": ".pickRarityByRate()", + "file_type": "code", + "source_file": "src/services/FishingService.ts", + "source_location": "L752", + "id": "fishingservice_fishingservice_pickraritybyrate", + "community": 1 + }, + { + "label": ".getReactionWindowMs()", + "file_type": "code", + "source_file": "src/services/FishingService.ts", + "source_location": "L766", + "id": "fishingservice_fishingservice_getreactionwindowms", + "community": 1 + }, + { + "label": ".rollRange()", + "file_type": "code", + "source_file": "src/services/FishingService.ts", + "source_location": "L772", + "id": "fishingservice_fishingservice_rollrange", + "community": 1 + }, + { + "label": ".pickRandomArtPath()", + "file_type": "code", + "source_file": "src/services/FishingService.ts", + "source_location": "L780", + "id": "fishingservice_fishingservice_pickrandomartpath", + "community": 1 + }, + { + "label": ".resolveResourcePath()", + "file_type": "code", + "source_file": "src/services/FishingService.ts", + "source_location": "L789", + "id": "fishingservice_fishingservice_resolveresourcepath", + "community": 1 + }, + { + "label": ".loadFishingRarities()", + "file_type": "code", + "source_file": "src/services/FishingService.ts", + "source_location": "L793", + "id": "fishingservice_fishingservice_loadfishingrarities", + "community": 1 + }, + { + "label": ".getRarityDisplayName()", + "file_type": "code", + "source_file": "src/services/FishingService.ts", + "source_location": "L805", + "id": "fishingservice_fishingservice_getraritydisplayname", + "community": 1 + }, + { + "label": ".recordProfileResult()", + "file_type": "code", + "source_file": "src/services/FishingService.ts", + "source_location": "L809", + "id": "fishingservice_fishingservice_recordprofileresult", + "community": 1 + }, + { + "label": ".recordCollectionCatch()", + "file_type": "code", + "source_file": "src/services/FishingService.ts", + "source_location": "L852", + "id": "fishingservice_fishingservice_recordcollectioncatch", + "community": 1 + }, + { + "label": ".getRarityCountField()", + "file_type": "code", + "source_file": "src/services/FishingService.ts", + "source_location": "L898", + "id": "fishingservice_fishingservice_getraritycountfield", + "community": 1 + }, + { + "label": ".getRarityRank()", + "file_type": "code", + "source_file": "src/services/FishingService.ts", + "source_location": "L906", + "id": "fishingservice_fishingservice_getrarityrank", + "community": 1 + }, + { + "label": ".getRarityBadge()", + "file_type": "code", + "source_file": "src/services/FishingService.ts", + "source_location": "L914", + "id": "fishingservice_fishingservice_getraritybadge", + "community": 1 + }, + { + "label": ".composeRarityArt()", + "file_type": "code", + "source_file": "src/services/FishingService.ts", + "source_location": "L922", + "id": "fishingservice_fishingservice_composerarityart", + "community": 1 + }, + { + "label": ".hexToColorInt()", + "file_type": "code", + "source_file": "src/services/FishingService.ts", + "source_location": "L946", + "id": "fishingservice_fishingservice_hextocolorint", + "community": 1 + }, + { + "label": ".rollCatchSizeCm()", + "file_type": "code", + "source_file": "src/services/FishingService.ts", + "source_location": "L950", + "id": "fishingservice_fishingservice_rollcatchsizecm", + "community": 1 + }, + { + "label": ".formatSelectedAction()", + "file_type": "code", + "source_file": "src/services/FishingService.ts", + "source_location": "L956", + "id": "fishingservice_fishingservice_formatselectedaction", + "community": 1 + }, + { + "label": ".clearTick()", + "file_type": "code", + "source_file": "src/services/FishingService.ts", + "source_location": "L964", + "id": "fishingservice_fishingservice_cleartick", + "community": 1 + }, + { + "label": ".getUserKey()", + "file_type": "code", + "source_file": "src/services/FishingService.ts", + "source_location": "L971", + "id": "fishingservice_fishingservice_getuserkey", + "community": 1 + }, + { + "label": ".rollDecimalRange()", + "file_type": "code", + "source_file": "src/services/FishingService.ts", + "source_location": "L975", + "id": "fishingservice_fishingservice_rolldecimalrange", + "community": 1 + }, + { + "label": "buildFishingGauge()", + "file_type": "code", + "source_file": "src/services/FishingService.ts", + "source_location": "L984", + "id": "fishingservice_buildfishinggauge", + "community": 11 + }, + { + "label": "buildFishingLane()", + "file_type": "code", + "source_file": "src/services/FishingService.ts", + "source_location": "L988", + "id": "fishingservice_buildfishinglane", + "community": 11 + }, + { + "label": "WebhookService.ts", + "file_type": "code", + "source_file": "src/services/WebhookService.ts", + "source_location": "L1", + "id": "webhookservice", + "community": 7 + }, + { + "label": "WebhookService", + "file_type": "code", + "source_file": "src/services/WebhookService.ts", + "source_location": "L4", + "id": "webhookservice_webhookservice", + "community": 7 + }, + { + "label": ".getWebhookClient()", + "file_type": "code", + "source_file": "src/services/WebhookService.ts", + "source_location": "L13", + "id": "webhookservice_webhookservice_getwebhookclient", + "community": 7 + }, + { + "label": "AuditLogService.ts", + "file_type": "code", + "source_file": "src/services/AuditLogService.ts", + "source_location": "L1", + "id": "auditlogservice", + "community": 0 + }, + { + "label": "AuditLogService", + "file_type": "code", + "source_file": "src/services/AuditLogService.ts", + "source_location": "L23", + "id": "auditlogservice_auditlogservice", + "community": 13 + }, + { + "label": ".log()", + "file_type": "code", + "source_file": "src/services/AuditLogService.ts", + "source_location": "L29", + "id": "auditlogservice_auditlogservice_log", + "community": 13 + }, + { + "label": ".setChannel()", + "file_type": "code", + "source_file": "src/services/AuditLogService.ts", + "source_location": "L71", + "id": "auditlogservice_auditlogservice_setchannel", + "community": 13 + }, + { + "label": ".clearChannel()", + "file_type": "code", + "source_file": "src/services/AuditLogService.ts", + "source_location": "L87", + "id": "auditlogservice_auditlogservice_clearchannel", + "community": 13 + }, + { + "label": ".getChannel()", + "file_type": "code", + "source_file": "src/services/AuditLogService.ts", + "source_location": "L96", + "id": "auditlogservice_auditlogservice_getchannel", + "community": 13 + }, + { + "label": ".setFilter()", + "file_type": "code", + "source_file": "src/services/AuditLogService.ts", + "source_location": "L107", + "id": "auditlogservice_auditlogservice_setfilter", + "community": 13 + }, + { + "label": "EventService.ts", + "file_type": "code", + "source_file": "src/services/EventService.ts", + "source_location": "L1", + "id": "eventservice", + "community": 0 + }, + { + "label": "toDiscordTimestamps()", + "file_type": "code", + "source_file": "src/services/EventService.ts", + "source_location": "L10", + "id": "eventservice_todiscordtimestamps", + "community": 0 + }, + { + "label": "buildEventEmbed()", + "file_type": "code", + "source_file": "src/services/EventService.ts", + "source_location": "L18", + "id": "eventservice_buildeventembed", + "community": 0 + }, + { + "label": "resolveAnnouncementChannel()", + "file_type": "code", + "source_file": "src/services/EventService.ts", + "source_location": "L68", + "id": "eventservice_resolveannouncementchannel", + "community": 0 + }, + { + "label": "EventService", + "file_type": "code", + "source_file": "src/services/EventService.ts", + "source_location": "L79", + "id": "eventservice_eventservice", + "community": 0 + }, + { + "label": ".announceEvent()", + "file_type": "code", + "source_file": "src/services/EventService.ts", + "source_location": "L82", + "id": "eventservice_eventservice_announceevent", + "community": 0 + }, + { + "label": ".startReminderLoop()", + "file_type": "code", + "source_file": "src/services/EventService.ts", + "source_location": "L115", + "id": "eventservice_eventservice_startreminderloop", + "community": 0 + }, + { + "label": ".stopReminderLoop()", + "file_type": "code", + "source_file": "src/services/EventService.ts", + "source_location": "L133", + "id": "eventservice_eventservice_stopreminderloop", + "community": 0 + }, + { + "label": ".processDueEvents()", + "file_type": "code", + "source_file": "src/services/EventService.ts", + "source_location": "L141", + "id": "eventservice_eventservice_processdueevents", + "community": 0 + }, + { + "label": ".sendReminder()", + "file_type": "code", + "source_file": "src/services/EventService.ts", + "source_location": "L226", + "id": "eventservice_eventservice_sendreminder", + "community": 0 + }, + { + "type": "concept", + "name": "\ub09a\uc2dc \uac8c\uc784 \uba54\ucee4\ub2c8\uc998", + "description": "\uc0ac\uc6a9\uc790\uc5d0\uac8c \uc0dd\uc0dd\ud55c \ub09a\uc2dc \uacbd\ud5d8\uc744 \uc81c\uacf5\ud558\uba70, \ub2e4\uc591\ud55c \uc0c1\ud638\uc791\uc6a9 \uc694\uc18c\ub97c \ud3ec\ud568\ud558\ub294 \uac8c\uc784 \uba54\ucee4\ub2c8\uc998.", + "id": "FishingGameConcept", + "community": 21 + }, + { + "label": "Gemma 4 Response", + "type": "text", + "content": "I am Gemma 4, a Large Language Model developed by Google DeepMind. I can process both text and image inputs, and I generate text outputs. I do not have the capability to generate images or use external tools unless specific endpoints are provided to me in the context.", + "id": "gemma_response", + "community": 24 + }, + { + "label": "Tool Use Concept", + "type": "text", + "content": "The model explicitly states it cannot use tools unless specific endpoints are provided. This is a crucial constraint to monitor for adherence.", + "id": "tool_use_concept", + "community": 25 + }, + { + "label": "Capability Summary", + "type": "text", + "content": "Text/Image Input accepted; Text Output only; No Image Generation; Tool Use conditional.", + "id": "capability_summary", + "community": 26 + }, + { + "label": "main.ts", + "type": "code", + "id": "files/src/main.ts", + "community": 20 + }, + { + "label": "config.ts", + "type": "code", + "id": "files/src/utils/config.ts", + "community": 20 + }, + { + "label": "db.ts", + "type": "code", + "id": "files/src/utils/db.ts", + "community": 27 + }, + { + "label": "logger.ts", + "type": "code", + "id": "files/src/utils/logger.ts", + "community": 28 + }, + { + "label": "Fishing Game Backend Logic", + "type": "Concept", + "id": "Node_A", + "community": 8 + }, + { + "label": "Authentication/Authorization Layer", + "type": "Concept", + "id": "Node_B", + "community": 8 + }, + { + "label": "Database Schema Design (User/Item)", + "type": "Concept", + "id": "Node_C", + "community": 8 + }, + { + "label": "Frontend Game Client (React/Unity)", + "type": "Concept", + "id": "Node_D", + "community": 8 + }, + { + "label": "Payment Gateway Integration (Stripe/PayPal)", + "type": "Concept", + "id": "Node_E", + "community": 8 + }, + { + "label": "Real-time Communication (WebSockets)", + "type": "Concept", + "id": "Node_F", + "community": 8 + }, + { + "label": "Game State Management (Session/Persistence)", + "type": "Concept", + "id": "Node_G", + "community": 8 + }, + { + "label": "Analytics/Telemetry Tracking", + "type": "Concept", + "id": "Node_H", + "community": 8 + }, + { + "label": "API Gateway Definition (REST/GraphQL)", + "type": "Concept", + "id": "Node_I", + "community": 8 + } + ], + "links": [ + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "prisma.config.ts", + "source_location": "L3", + "weight": 1.0, + "_src": "prisma_config", + "_tgt": "config", + "source": "prisma_config", + "target": "config", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "prisma/seed.ts", + "source_location": "L4", + "weight": 1.0, + "_src": "seed", + "_tgt": "config", + "source": "seed", + "target": "config", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "prisma/seed.ts", + "source_location": "L10", + "weight": 1.0, + "_src": "seed", + "_tgt": "seed_main", + "source": "seed", + "target": "seed_main", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "tests/errors/BotError.test.ts", + "source_location": "L1", + "weight": 1.0, + "_src": "boterror_test", + "_tgt": "boterror", + "source": "boterror_test", + "target": "boterror", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "tests/errors/ErrorReporter.test.ts", + "source_location": "L1", + "weight": 1.0, + "_src": "errorreporter_test", + "_tgt": "boterror", + "source": "errorreporter_test", + "target": "boterror", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "tests/errors/ErrorReporter.test.ts", + "source_location": "L2", + "weight": 1.0, + "_src": "errorreporter_test", + "_tgt": "errorcodes", + "source": "errorreporter_test", + "target": "errorcodes", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "tests/errors/ErrorReporter.test.ts", + "source_location": "L3", + "weight": 1.0, + "_src": "errorreporter_test", + "_tgt": "errorreporter", + "source": "errorreporter_test", + "target": "errorreporter", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "tests/services/InviteService.test.ts", + "source_location": "L1", + "weight": 1.0, + "_src": "inviteservice_test", + "_tgt": "inviteservice", + "source": "inviteservice_test", + "target": "inviteservice", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "tests/services/FishingService.test.ts", + "source_location": "L1", + "weight": 1.0, + "_src": "fishingservice_test", + "_tgt": "fishingservice", + "source": "fishingservice_test", + "target": "fishingservice", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "tests/services/MusicService.test.ts", + "source_location": "L1", + "weight": 1.0, + "_src": "musicservice_test", + "_tgt": "musicservice", + "source": "musicservice_test", + "target": "musicservice", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "tests/services/MimicService.test.ts", + "source_location": "L1", + "weight": 1.0, + "_src": "mimicservice_test", + "_tgt": "mimicservice", + "source": "mimicservice_test", + "target": "mimicservice", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "tests/services/VoiceService.test.ts", + "source_location": "L1", + "weight": 1.0, + "_src": "voiceservice_test", + "_tgt": "voiceservice", + "source": "voiceservice_test", + "target": "voiceservice", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "scripts/check-i18n-tests.ts", + "source_location": "L3", + "weight": 1.0, + "_src": "check_i18n_tests", + "_tgt": "ko", + "source": "check_i18n_tests", + "target": "ko", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "scripts/check-i18n-tests.ts", + "source_location": "L4", + "weight": 1.0, + "_src": "check_i18n_tests", + "_tgt": "en", + "source": "check_i18n_tests", + "target": "en", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/check-i18n-tests.ts", + "source_location": "L19", + "weight": 1.0, + "_src": "check_i18n_tests", + "_tgt": "check_i18n_tests_walk", + "source": "check_i18n_tests", + "target": "check_i18n_tests_walk", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/check-i18n-tests.ts", + "source_location": "L43", + "weight": 1.0, + "_src": "check_i18n_tests", + "_tgt": "check_i18n_tests_getfiles", + "source": "check_i18n_tests", + "target": "check_i18n_tests_getfiles", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/check-i18n-tests.ts", + "source_location": "L64", + "weight": 1.0, + "_src": "check_i18n_tests", + "_tgt": "check_i18n_tests_checkfile", + "source": "check_i18n_tests", + "target": "check_i18n_tests_checkfile", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/index.ts", + "source_location": "L1", + "weight": 1.0, + "_src": "index", + "_tgt": "kordclient", + "source": "index", + "target": "kordclient", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/database/index.ts", + "source_location": "L5", + "weight": 1.0, + "_src": "index", + "_tgt": "env", + "source": "index", + "target": "env", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/database/index.ts", + "source_location": "L6", + "weight": 1.0, + "_src": "index", + "_tgt": "logger", + "source": "index", + "target": "logger", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/database/index.ts", + "source_location": "L13", + "weight": 1.0, + "_src": "index", + "_tgt": "index_createpgpoolconfig", + "source": "index", + "target": "index_createpgpoolconfig", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/database/index.ts", + "source_location": "L40", + "weight": 1.0, + "_src": "index", + "_tgt": "index_connectdb", + "source": "index", + "target": "index_connectdb", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/i18n/index.ts", + "source_location": "L9", + "weight": 1.0, + "_src": "index", + "_tgt": "types", + "source": "index", + "target": "types", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/i18n/index.ts", + "source_location": "L17", + "weight": 1.0, + "_src": "index", + "_tgt": "en", + "source": "index", + "target": "en", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/i18n/index.ts", + "source_location": "L18", + "weight": 1.0, + "_src": "index", + "_tgt": "ko", + "source": "index", + "target": "ko", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/i18n/index.ts", + "source_location": "L28", + "weight": 1.0, + "_src": "index", + "_tgt": "index_statici18nprovider", + "source": "index", + "target": "index_statici18nprovider", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/i18n/index.ts", + "source_location": "L50", + "weight": 1.0, + "_src": "index", + "_tgt": "index_seti18nprovider", + "source": "index", + "target": "index_seti18nprovider", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/i18n/index.ts", + "source_location": "L55", + "weight": 1.0, + "_src": "index", + "_tgt": "index_geti18nprovider", + "source": "index", + "target": "index_geti18nprovider", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/i18n/index.ts", + "source_location": "L68", + "weight": 1.0, + "_src": "index", + "_tgt": "index_resolvelocale", + "source": "index", + "target": "index_resolvelocale", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/i18n/index.ts", + "source_location": "L88", + "weight": 1.0, + "_src": "index", + "_tgt": "index_normalizediscordlocale", + "source": "index", + "target": "index_normalizediscordlocale", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/i18n/index.ts", + "source_location": "L109", + "weight": 1.0, + "_src": "index", + "_tgt": "index_t", + "source": "index", + "target": "index_t", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/i18n/index.ts", + "source_location": "L134", + "weight": 1.0, + "_src": "index", + "_tgt": "index_getnestedvalue", + "source": "index", + "target": "index_getnestedvalue", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/interactions/handlers/refinementHandler.ts", + "source_location": "L2", + "weight": 1.0, + "_src": "refinementhandler", + "_tgt": "refinementservice", + "source": "refinementhandler", + "target": "refinementservice", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/interactions/handlers/refinementHandler.ts", + "source_location": "L3", + "weight": 1.0, + "_src": "refinementhandler", + "_tgt": "feverservice", + "source": "refinementhandler", + "target": "feverservice", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/interactions/handlers/refinementHandler.ts", + "source_location": "L7", + "weight": 1.0, + "_src": "refinementhandler", + "_tgt": "refinementhandler_handlerefinementinteraction", + "source": "refinementhandler", + "target": "refinementhandler_handlerefinementinteraction", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/interactions/handlers/setupWizardHandler.ts", + "source_location": "L2", + "weight": 1.0, + "_src": "setupwizardhandler", + "_tgt": "setupwizardrenderer", + "source": "setupwizardhandler", + "target": "setupwizardrenderer", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/interactions/handlers/setupWizardHandler.ts", + "source_location": "L4", + "weight": 1.0, + "_src": "setupwizardhandler", + "_tgt": "errorcodes", + "source": "setupwizardhandler", + "target": "errorcodes", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/interactions/handlers/setupWizardHandler.ts", + "source_location": "L7", + "weight": 1.0, + "_src": "setupwizardhandler", + "_tgt": "setupwizardhandler_handlesetupwizardinteraction", + "source": "setupwizardhandler", + "target": "setupwizardhandler_handlesetupwizardinteraction", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/events/interactionCreate.ts", + "source_location": "L10", + "weight": 1.0, + "_src": "interactioncreate", + "_tgt": "setupwizardhandler", + "source": "setupwizardhandler", + "target": "interactioncreate", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/config/env.ts", + "source_location": "L8", + "weight": 1.0, + "_src": "env", + "_tgt": "env_generateinstanceid", + "source": "env", + "target": "env_generateinstanceid", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/utils/logger.ts", + "source_location": "L4", + "weight": 1.0, + "_src": "logger", + "_tgt": "env", + "source": "env", + "target": "logger", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/events/ready.ts", + "source_location": "L9", + "weight": 1.0, + "_src": "ready", + "_tgt": "env", + "source": "env", + "target": "ready", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/client/KordClient.ts", + "source_location": "L3", + "weight": 1.0, + "_src": "kordclient", + "_tgt": "env", + "source": "env", + "target": "kordclient", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/services/AuditLogService.ts", + "source_location": "L3", + "weight": 1.0, + "_src": "auditlogservice", + "_tgt": "env", + "source": "env", + "target": "auditlogservice", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/utils/errorHandler.ts", + "source_location": "L1", + "weight": 1.0, + "_src": "errorhandler", + "_tgt": "logger", + "source": "errorhandler", + "target": "logger", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/utils/errorHandler.ts", + "source_location": "L3", + "weight": 1.0, + "_src": "errorhandler", + "_tgt": "errorhandler_handleglobalexceptions", + "source": "errorhandler", + "target": "errorhandler_handleglobalexceptions", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/client/KordClient.ts", + "source_location": "L6", + "weight": 1.0, + "_src": "kordclient", + "_tgt": "errorhandler", + "source": "errorhandler", + "target": "kordclient", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/utils/logger.ts", + "source_location": "L9", + "weight": 1.0, + "_src": "logger", + "_tgt": "logger_resolveloglevel", + "source": "logger", + "target": "logger_resolveloglevel", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/utils/logger.ts", + "source_location": "L15", + "weight": 1.0, + "_src": "logger", + "_tgt": "logger_resolvelogdir", + "source": "logger", + "target": "logger_resolvelogdir", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/utils/logger.ts", + "source_location": "L23", + "weight": 1.0, + "_src": "logger", + "_tgt": "logger_ensurelogdir", + "source": "logger", + "target": "logger_ensurelogdir", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/commands/voice.ts", + "source_location": "L11", + "weight": 1.0, + "_src": "voice", + "_tgt": "logger", + "source": "logger", + "target": "voice", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/commands/music.ts", + "source_location": "L4", + "weight": 1.0, + "_src": "music", + "_tgt": "logger", + "source": "logger", + "target": "music", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/errors/ErrorReporter.ts", + "source_location": "L10", + "weight": 1.0, + "_src": "errorreporter", + "_tgt": "logger", + "source": "logger", + "target": "errorreporter", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/events/interactionCreate.ts", + "source_location": "L3", + "weight": 1.0, + "_src": "interactioncreate", + "_tgt": "logger", + "source": "logger", + "target": "interactioncreate", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/events/ready.ts", + "source_location": "L3", + "weight": 1.0, + "_src": "ready", + "_tgt": "logger", + "source": "logger", + "target": "ready", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/client/KordClient.ts", + "source_location": "L2", + "weight": 1.0, + "_src": "kordclient", + "_tgt": "logger", + "source": "logger", + "target": "kordclient", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/handlers/EventLoader.ts", + "source_location": "L2", + "weight": 1.0, + "_src": "eventloader", + "_tgt": "logger", + "source": "logger", + "target": "eventloader", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/handlers/CommandLoader.ts", + "source_location": "L2", + "weight": 1.0, + "_src": "commandloader", + "_tgt": "logger", + "source": "logger", + "target": "commandloader", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/services/InviteService.ts", + "source_location": "L3", + "weight": 1.0, + "_src": "inviteservice", + "_tgt": "logger", + "source": "logger", + "target": "inviteservice", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/services/MimicService.ts", + "source_location": "L3", + "weight": 1.0, + "_src": "mimicservice", + "_tgt": "logger", + "source": "logger", + "target": "mimicservice", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/services/RefinementService.ts", + "source_location": "L2", + "weight": 1.0, + "_src": "refinementservice", + "_tgt": "logger", + "source": "logger", + "target": "refinementservice", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/services/ActivityTrackerService.ts", + "source_location": "L2", + "weight": 1.0, + "_src": "activitytrackerservice", + "_tgt": "logger", + "source": "logger", + "target": "activitytrackerservice", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/services/BigEmojiService.ts", + "source_location": "L3", + "weight": 1.0, + "_src": "bigemojiservice", + "_tgt": "logger", + "source": "logger", + "target": "bigemojiservice", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/services/FeverService.ts", + "source_location": "L2", + "weight": 1.0, + "_src": "feverservice", + "_tgt": "logger", + "source": "logger", + "target": "feverservice", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/services/PresenceService.ts", + "source_location": "L2", + "weight": 1.0, + "_src": "presenceservice", + "_tgt": "logger", + "source": "logger", + "target": "presenceservice", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/services/MusicService.ts", + "source_location": "L25", + "weight": 1.0, + "_src": "musicservice", + "_tgt": "logger", + "source": "logger", + "target": "musicservice", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/services/VoiceService.ts", + "source_location": "L3", + "weight": 1.0, + "_src": "voiceservice", + "_tgt": "logger", + "source": "logger", + "target": "voiceservice", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/services/PermissionAuditService.ts", + "source_location": "L9", + "weight": 1.0, + "_src": "permissionauditservice", + "_tgt": "logger", + "source": "logger", + "target": "permissionauditservice", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/services/FishingService.ts", + "source_location": "L21", + "weight": 1.0, + "_src": "fishingservice", + "_tgt": "logger", + "source": "logger", + "target": "fishingservice", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/services/WebhookService.ts", + "source_location": "L2", + "weight": 1.0, + "_src": "webhookservice", + "_tgt": "logger", + "source": "logger", + "target": "webhookservice", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/services/EventService.ts", + "source_location": "L3", + "weight": 1.0, + "_src": "eventservice", + "_tgt": "logger", + "source": "logger", + "target": "eventservice", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/commands/language.ts", + "source_location": "L25", + "weight": 1.0, + "_src": "language", + "_tgt": "language_execute", + "source": "language", + "target": "language_execute", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/commands/setup.ts", + "source_location": "L6", + "weight": 1.0, + "_src": "setup", + "_tgt": "setupwizardrenderer", + "source": "setup", + "target": "setupwizardrenderer", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/commands/setup.ts", + "source_location": "L18", + "weight": 1.0, + "_src": "setup", + "_tgt": "setup_execute", + "source": "setup", + "target": "setup_execute", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/commands/voice.ts", + "source_location": "L79", + "weight": 1.0, + "_src": "voice", + "_tgt": "voice_execute", + "source": "voice", + "target": "voice_execute", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/services/MusicService.ts", + "source_location": "L9", + "weight": 1.0, + "_src": "musicservice", + "_tgt": "voice", + "source": "voice", + "target": "musicservice", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/commands/music.ts", + "source_location": "L3", + "weight": 1.0, + "_src": "music", + "_tgt": "musicservice", + "source": "music", + "target": "musicservice", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/commands/music.ts", + "source_location": "L6", + "weight": 1.0, + "_src": "music", + "_tgt": "music_builderrormessage", + "source": "music", + "target": "music_builderrormessage", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/commands/music.ts", + "source_location": "L14", + "weight": 1.0, + "_src": "music", + "_tgt": "music_respond", + "source": "music", + "target": "music_respond", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/commands/music.ts", + "source_location": "L130", + "weight": 1.0, + "_src": "music", + "_tgt": "music_execute", + "source": "music", + "target": "music_execute", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/commands/music.ts", + "source_location": "L140", + "weight": 0.8, + "_src": "music_execute", + "_tgt": "music_builderrormessage", + "source": "music_builderrormessage", + "target": "music_execute", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/commands/music.ts", + "source_location": "L377", + "weight": 0.8, + "_src": "music_execute", + "_tgt": "music_respond", + "source": "music_respond", + "target": "music_execute", + "confidence_score": 0.5 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/commands/refine.ts", + "source_location": "L13", + "weight": 1.0, + "_src": "refine", + "_tgt": "refinementservice", + "source": "refine", + "target": "refinementservice", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/commands/refine.ts", + "source_location": "L14", + "weight": 1.0, + "_src": "refine", + "_tgt": "feverservice", + "source": "refine", + "target": "feverservice", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/commands/refine.ts", + "source_location": "L91", + "weight": 1.0, + "_src": "refine", + "_tgt": "refine_execute", + "source": "refine", + "target": "refine_execute", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/commands/minigame.ts", + "source_location": "L11", + "weight": 1.0, + "_src": "minigame", + "_tgt": "minigameregistry", + "source": "minigame", + "target": "minigameregistry", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/commands/minigame.ts", + "source_location": "L62", + "weight": 1.0, + "_src": "minigame", + "_tgt": "minigame_execute", + "source": "minigame", + "target": "minigame_execute", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/commands/config.ts", + "source_location": "L66", + "weight": 1.0, + "_src": "config", + "_tgt": "config_execute", + "source": "config", + "target": "config_execute", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/commands/audit.ts", + "source_location": "L10", + "weight": 1.0, + "_src": "audit", + "_tgt": "auditlogservice", + "source": "audit", + "target": "auditlogservice", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/commands/audit.ts", + "source_location": "L11", + "weight": 1.0, + "_src": "audit", + "_tgt": "permissionauditservice", + "source": "audit", + "target": "permissionauditservice", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/commands/audit.ts", + "source_location": "L20", + "weight": 1.0, + "_src": "audit", + "_tgt": "audit_getoverallcolor", + "source": "audit", + "target": "audit_getoverallcolor", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/commands/audit.ts", + "source_location": "L26", + "weight": 1.0, + "_src": "audit", + "_tgt": "audit_buildresultline", + "source": "audit", + "target": "audit_buildresultline", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/commands/audit.ts", + "source_location": "L110", + "weight": 1.0, + "_src": "audit", + "_tgt": "audit_execute", + "source": "audit", + "target": "audit_execute", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/commands/audit.ts", + "source_location": "L202", + "weight": 0.8, + "_src": "audit_execute", + "_tgt": "audit_getoverallcolor", + "source": "audit_getoverallcolor", + "target": "audit_execute", + "confidence_score": 0.5 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/commands/event.ts", + "source_location": "L12", + "weight": 1.0, + "_src": "event", + "_tgt": "eventservice", + "source": "event", + "target": "eventservice", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/commands/event.ts", + "source_location": "L18", + "weight": 1.0, + "_src": "event", + "_tgt": "event_parseseouldatetime", + "source": "event", + "target": "event_parseseouldatetime", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/commands/event.ts", + "source_location": "L51", + "weight": 1.0, + "_src": "event", + "_tgt": "event_todiscordtimestamps", + "source": "event", + "target": "event_todiscordtimestamps", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/commands/event.ts", + "source_location": "L59", + "weight": 1.0, + "_src": "event", + "_tgt": "event_parsereminderoffsets", + "source": "event", + "target": "event_parsereminderoffsets", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/commands/event.ts", + "source_location": "L77", + "weight": 1.0, + "_src": "event", + "_tgt": "event_formatreminderoffsets", + "source": "event", + "target": "event_formatreminderoffsets", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/commands/event.ts", + "source_location": "L85", + "weight": 1.0, + "_src": "event", + "_tgt": "event_buildstatuslabel", + "source": "event", + "target": "event_buildstatuslabel", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/commands/event.ts", + "source_location": "L189", + "weight": 1.0, + "_src": "event", + "_tgt": "event_execute", + "source": "event", + "target": "event_execute", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/commands/event.ts", + "source_location": "L202", + "weight": 0.8, + "_src": "event_execute", + "_tgt": "event_parseseouldatetime", + "source": "event_parseseouldatetime", + "target": "event_execute", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/commands/event.ts", + "source_location": "L239", + "weight": 0.8, + "_src": "event_execute", + "_tgt": "event_todiscordtimestamps", + "source": "event_todiscordtimestamps", + "target": "event_execute", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/commands/event.ts", + "source_location": "L217", + "weight": 0.8, + "_src": "event_execute", + "_tgt": "event_parsereminderoffsets", + "source": "event_parsereminderoffsets", + "target": "event_execute", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/commands/event.ts", + "source_location": "L247", + "weight": 0.8, + "_src": "event_execute", + "_tgt": "event_formatreminderoffsets", + "source": "event_formatreminderoffsets", + "target": "event_execute", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/commands/event.ts", + "source_location": "L286", + "weight": 0.8, + "_src": "event_execute", + "_tgt": "event_buildstatuslabel", + "source": "event_buildstatuslabel", + "target": "event_execute", + "confidence_score": 0.5 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/commands/fishing.ts", + "source_location": "L9", + "weight": 1.0, + "_src": "fishing", + "_tgt": "fishingservice", + "source": "fishing", + "target": "fishingservice", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/commands/fishing.ts", + "source_location": "L83", + "weight": 1.0, + "_src": "fishing", + "_tgt": "fishing_execute", + "source": "fishing", + "target": "fishing_execute", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/errors/BotError.ts", + "source_location": "L16", + "weight": 1.0, + "_src": "boterror", + "_tgt": "boterror_boterror", + "source": "boterror", + "target": "boterror_boterror", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/errors/ErrorReporter.ts", + "source_location": "L8", + "weight": 1.0, + "_src": "errorreporter", + "_tgt": "boterror", + "source": "boterror", + "target": "errorreporter", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/errors/ErrorCodes.ts", + "source_location": "L1", + "weight": 1.0, + "_src": "errorcodes", + "_tgt": "boterror", + "source": "boterror", + "target": "errorcodes", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/events/interactionCreate.ts", + "source_location": "L5", + "weight": 1.0, + "_src": "interactioncreate", + "_tgt": "boterror", + "source": "boterror", + "target": "interactioncreate", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/errors/BotError.ts", + "source_location": "L29", + "weight": 1.0, + "_src": "boterror_boterror", + "_tgt": "boterror_boterror_constructor", + "source": "boterror_boterror", + "target": "boterror_boterror_constructor", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/errors/ErrorReporter.ts", + "source_location": "L9", + "weight": 1.0, + "_src": "errorreporter", + "_tgt": "errorcodes", + "source": "errorreporter", + "target": "errorcodes", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/errors/ErrorReporter.ts", + "source_location": "L38", + "weight": 1.0, + "_src": "errorreporter", + "_tgt": "errorreporter_errorreporter", + "source": "errorreporter", + "target": "errorreporter_errorreporter", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/errors/ErrorReporter.ts", + "source_location": "L136", + "weight": 1.0, + "_src": "errorreporter", + "_tgt": "errorreporter_witherrorhandler", + "source": "errorreporter", + "target": "errorreporter_witherrorhandler", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/events/interactionCreate.ts", + "source_location": "L7", + "weight": 1.0, + "_src": "interactioncreate", + "_tgt": "errorreporter", + "source": "errorreporter", + "target": "interactioncreate", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/errors/ErrorReporter.ts", + "source_location": "L43", + "weight": 1.0, + "_src": "errorreporter_errorreporter", + "_tgt": "errorreporter_errorreporter_report", + "source": "errorreporter_errorreporter", + "target": "errorreporter_errorreporter_report", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/errors/ErrorReporter.ts", + "source_location": "L73", + "weight": 1.0, + "_src": "errorreporter_errorreporter", + "_tgt": "errorreporter_errorreporter_wrap", + "source": "errorreporter_errorreporter", + "target": "errorreporter_errorreporter_wrap", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/errors/ErrorReporter.ts", + "source_location": "L107", + "weight": 1.0, + "_src": "errorreporter_errorreporter", + "_tgt": "errorreporter_errorreporter_buildembed", + "source": "errorreporter_errorreporter", + "target": "errorreporter_errorreporter_buildembed", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/errors/ErrorReporter.ts", + "source_location": "L55", + "weight": 0.8, + "_src": "errorreporter_errorreporter_report", + "_tgt": "errorreporter_errorreporter_buildembed", + "source": "errorreporter_errorreporter_report", + "target": "errorreporter_errorreporter_buildembed", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/errors/ErrorReporter.ts", + "source_location": "L145", + "weight": 0.8, + "_src": "errorreporter_witherrorhandler", + "_tgt": "errorreporter_errorreporter_report", + "source": "errorreporter_errorreporter_report", + "target": "errorreporter_witherrorhandler", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/errors/ErrorReporter.ts", + "source_location": "L144", + "weight": 0.8, + "_src": "errorreporter_witherrorhandler", + "_tgt": "errorreporter_errorreporter_wrap", + "source": "errorreporter_errorreporter_wrap", + "target": "errorreporter_witherrorhandler", + "confidence_score": 0.5 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/errors/ErrorCodes.ts", + "source_location": "L123", + "weight": 1.0, + "_src": "errorcodes", + "_tgt": "errorcodes_createboterror", + "source": "errorcodes", + "target": "errorcodes_createboterror", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/events/interactionCreate.ts", + "source_location": "L6", + "weight": 1.0, + "_src": "interactioncreate", + "_tgt": "errorcodes", + "source": "errorcodes", + "target": "interactioncreate", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/services/VoiceService.ts", + "source_location": "L4", + "weight": 1.0, + "_src": "voiceservice", + "_tgt": "errorcodes", + "source": "errorcodes", + "target": "voiceservice", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/events/voiceStateUpdate.ts", + "source_location": "L2", + "weight": 1.0, + "_src": "voicestateupdate", + "_tgt": "voiceservice", + "source": "voicestateupdate", + "target": "voiceservice", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/events/voiceStateUpdate.ts", + "source_location": "L7", + "weight": 1.0, + "_src": "voicestateupdate", + "_tgt": "voicestateupdate_execute", + "source": "voicestateupdate", + "target": "voicestateupdate_execute", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/events/interactionCreate.ts", + "source_location": "L2", + "weight": 1.0, + "_src": "interactioncreate", + "_tgt": "kordclient", + "source": "interactioncreate", + "target": "kordclient", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/events/interactionCreate.ts", + "source_location": "L9", + "weight": 1.0, + "_src": "interactioncreate", + "_tgt": "localehelper", + "source": "interactioncreate", + "target": "localehelper", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/events/interactionCreate.ts", + "source_location": "L11", + "weight": 1.0, + "_src": "interactioncreate", + "_tgt": "musicservice", + "source": "interactioncreate", + "target": "musicservice", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/events/interactionCreate.ts", + "source_location": "L16", + "weight": 1.0, + "_src": "interactioncreate", + "_tgt": "interactioncreate_execute", + "source": "interactioncreate", + "target": "interactioncreate_execute", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/events/messageCreate.ts", + "source_location": "L2", + "weight": 1.0, + "_src": "messagecreate", + "_tgt": "mimicservice", + "source": "messagecreate", + "target": "mimicservice", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/events/messageCreate.ts", + "source_location": "L3", + "weight": 1.0, + "_src": "messagecreate", + "_tgt": "bigemojiservice", + "source": "messagecreate", + "target": "bigemojiservice", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/events/messageCreate.ts", + "source_location": "L5", + "weight": 1.0, + "_src": "messagecreate", + "_tgt": "activitytrackerservice", + "source": "messagecreate", + "target": "activitytrackerservice", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/events/messageCreate.ts", + "source_location": "L10", + "weight": 1.0, + "_src": "messagecreate", + "_tgt": "messagecreate_execute", + "source": "messagecreate", + "target": "messagecreate_execute", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/events/guildMemberAdd.ts", + "source_location": "L2", + "weight": 1.0, + "_src": "guildmemberadd", + "_tgt": "inviteservice", + "source": "guildmemberadd", + "target": "inviteservice", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/events/guildMemberAdd.ts", + "source_location": "L7", + "weight": 1.0, + "_src": "guildmemberadd", + "_tgt": "guildmemberadd_execute", + "source": "guildmemberadd", + "target": "guildmemberadd_execute", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/events/guildDelete.ts", + "source_location": "L2", + "weight": 1.0, + "_src": "guilddelete", + "_tgt": "presenceservice", + "source": "guilddelete", + "target": "presenceservice", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/events/guildDelete.ts", + "source_location": "L7", + "weight": 1.0, + "_src": "guilddelete", + "_tgt": "guilddelete_execute", + "source": "guilddelete", + "target": "guilddelete_execute", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/events/inviteDelete.ts", + "source_location": "L2", + "weight": 1.0, + "_src": "invitedelete", + "_tgt": "inviteservice", + "source": "invitedelete", + "target": "inviteservice", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/events/inviteDelete.ts", + "source_location": "L7", + "weight": 1.0, + "_src": "invitedelete", + "_tgt": "invitedelete_execute", + "source": "invitedelete", + "target": "invitedelete_execute", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/events/inviteCreate.ts", + "source_location": "L2", + "weight": 1.0, + "_src": "invitecreate", + "_tgt": "inviteservice", + "source": "invitecreate", + "target": "inviteservice", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/events/inviteCreate.ts", + "source_location": "L7", + "weight": 1.0, + "_src": "invitecreate", + "_tgt": "invitecreate_execute", + "source": "invitecreate", + "target": "invitecreate_execute", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/events/ready.ts", + "source_location": "L2", + "weight": 1.0, + "_src": "ready", + "_tgt": "kordclient", + "source": "ready", + "target": "kordclient", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/events/ready.ts", + "source_location": "L4", + "weight": 1.0, + "_src": "ready", + "_tgt": "inviteservice", + "source": "ready", + "target": "inviteservice", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/events/ready.ts", + "source_location": "L5", + "weight": 1.0, + "_src": "ready", + "_tgt": "voiceservice", + "source": "ready", + "target": "voiceservice", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/events/ready.ts", + "source_location": "L6", + "weight": 1.0, + "_src": "ready", + "_tgt": "presenceservice", + "source": "ready", + "target": "presenceservice", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/events/ready.ts", + "source_location": "L7", + "weight": 1.0, + "_src": "ready", + "_tgt": "eventservice", + "source": "ready", + "target": "eventservice", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/events/ready.ts", + "source_location": "L8", + "weight": 1.0, + "_src": "ready", + "_tgt": "auditlogservice", + "source": "ready", + "target": "auditlogservice", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/events/ready.ts", + "source_location": "L14", + "weight": 1.0, + "_src": "ready", + "_tgt": "ready_execute", + "source": "ready", + "target": "ready_execute", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/events/guildCreate.ts", + "source_location": "L2", + "weight": 1.0, + "_src": "guildcreate", + "_tgt": "inviteservice", + "source": "guildcreate", + "target": "inviteservice", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/events/guildCreate.ts", + "source_location": "L3", + "weight": 1.0, + "_src": "guildcreate", + "_tgt": "presenceservice", + "source": "guildcreate", + "target": "presenceservice", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/events/guildCreate.ts", + "source_location": "L8", + "weight": 1.0, + "_src": "guildcreate", + "_tgt": "guildcreate_execute", + "source": "guildcreate", + "target": "guildcreate_execute", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/i18n/localeHelper.ts", + "source_location": "L21", + "weight": 1.0, + "_src": "localehelper", + "_tgt": "localehelper_getinteractionlocale", + "source": "localehelper", + "target": "localehelper_getinteractionlocale", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/i18n/localeHelper.ts", + "source_location": "L55", + "weight": 1.0, + "_src": "localehelper", + "_tgt": "localehelper_getcontextlocale", + "source": "localehelper", + "target": "localehelper_getcontextlocale", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/services/VoiceService.ts", + "source_location": "L6", + "weight": 1.0, + "_src": "voiceservice", + "_tgt": "localehelper", + "source": "localehelper", + "target": "voiceservice", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/i18n/locales/en.ts", + "source_location": "L1", + "weight": 1.0, + "_src": "en", + "_tgt": "types", + "source": "types", + "target": "en", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/i18n/locales/ko.ts", + "source_location": "L1", + "weight": 1.0, + "_src": "ko", + "_tgt": "types", + "source": "types", + "target": "ko", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/i18n/index.ts", + "source_location": "L29", + "weight": 1.0, + "_src": "index_statici18nprovider", + "_tgt": "index_statici18nprovider_get", + "source": "index_statici18nprovider", + "target": "index_statici18nprovider_get", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/i18n/index.ts", + "source_location": "L33", + "weight": 1.0, + "_src": "index_statici18nprovider", + "_tgt": "index_statici18nprovider_issupported", + "source": "index_statici18nprovider", + "target": "index_statici18nprovider_issupported", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/i18n/index.ts", + "source_location": "L37", + "weight": 1.0, + "_src": "index_statici18nprovider", + "_tgt": "index_statici18nprovider_getsupportedlocales", + "source": "index_statici18nprovider", + "target": "index_statici18nprovider_getsupportedlocales", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/i18n/index.ts", + "source_location": "L30", + "weight": 0.8, + "_src": "index_statici18nprovider_get", + "_tgt": "index_getnestedvalue", + "source": "index_statici18nprovider_get", + "target": "index_getnestedvalue", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/i18n/index.ts", + "source_location": "L115", + "weight": 0.8, + "_src": "index_t", + "_tgt": "index_statici18nprovider_get", + "source": "index_statici18nprovider_get", + "target": "index_t", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/i18n/index.ts", + "source_location": "L76", + "weight": 0.8, + "_src": "index_resolvelocale", + "_tgt": "index_statici18nprovider_issupported", + "source": "index_statici18nprovider_issupported", + "target": "index_resolvelocale", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/i18n/index.ts", + "source_location": "L72", + "weight": 0.8, + "_src": "index_resolvelocale", + "_tgt": "index_normalizediscordlocale", + "source": "index_resolvelocale", + "target": "index_normalizediscordlocale", + "confidence_score": 0.5 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/handlers/CommandLoader.ts", + "source_location": "L1", + "weight": 1.0, + "_src": "commandloader", + "_tgt": "kordclient", + "source": "kordclient", + "target": "commandloader", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/handlers/EventLoader.ts", + "source_location": "L1", + "weight": 1.0, + "_src": "eventloader", + "_tgt": "kordclient", + "source": "kordclient", + "target": "eventloader", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/client/KordClient.ts", + "source_location": "L8", + "weight": 1.0, + "_src": "kordclient", + "_tgt": "feverservice", + "source": "kordclient", + "target": "feverservice", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/client/KordClient.ts", + "source_location": "L10", + "weight": 1.0, + "_src": "kordclient", + "_tgt": "kordclient_kordclient", + "source": "kordclient", + "target": "kordclient_kordclient", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/client/KordClient.ts", + "source_location": "L13", + "weight": 1.0, + "_src": "kordclient_kordclient", + "_tgt": "kordclient_kordclient_constructor", + "source": "kordclient_kordclient", + "target": "kordclient_kordclient_constructor", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/client/KordClient.ts", + "source_location": "L26", + "weight": 1.0, + "_src": "kordclient_kordclient", + "_tgt": "kordclient_kordclient_start", + "source": "kordclient_kordclient", + "target": "kordclient_kordclient_start", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/handlers/EventLoader.ts", + "source_location": "L6", + "weight": 1.0, + "_src": "eventloader", + "_tgt": "eventloader_loadevents", + "source": "eventloader", + "target": "eventloader_loadevents", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/handlers/CommandLoader.ts", + "source_location": "L6", + "weight": 1.0, + "_src": "commandloader", + "_tgt": "commandloader_loadcommands", + "source": "commandloader", + "target": "commandloader_loadcommands", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/InviteService.ts", + "source_location": "L5", + "weight": 1.0, + "_src": "inviteservice", + "_tgt": "inviteservice_inviteservice", + "source": "inviteservice", + "target": "inviteservice_inviteservice", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/InviteService.ts", + "source_location": "L9", + "weight": 1.0, + "_src": "inviteservice_inviteservice", + "_tgt": "inviteservice_inviteservice_cacheallinvites", + "source": "inviteservice_inviteservice", + "target": "inviteservice_inviteservice_cacheallinvites", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/InviteService.ts", + "source_location": "L16", + "weight": 1.0, + "_src": "inviteservice_inviteservice", + "_tgt": "inviteservice_inviteservice_cacheguildinvites", + "source": "inviteservice_inviteservice", + "target": "inviteservice_inviteservice_cacheguildinvites", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/InviteService.ts", + "source_location": "L29", + "weight": 1.0, + "_src": "inviteservice_inviteservice", + "_tgt": "inviteservice_inviteservice_handleinvitecreate", + "source": "inviteservice_inviteservice", + "target": "inviteservice_inviteservice_handleinvitecreate", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/InviteService.ts", + "source_location": "L35", + "weight": 1.0, + "_src": "inviteservice_inviteservice", + "_tgt": "inviteservice_inviteservice_handleinvitedelete", + "source": "inviteservice_inviteservice", + "target": "inviteservice_inviteservice_handleinvitedelete", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/InviteService.ts", + "source_location": "L41", + "weight": 1.0, + "_src": "inviteservice_inviteservice", + "_tgt": "inviteservice_inviteservice_handlememberadd", + "source": "inviteservice_inviteservice", + "target": "inviteservice_inviteservice_handlememberadd", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/InviteService.ts", + "source_location": "L11", + "weight": 0.8, + "_src": "inviteservice_inviteservice_cacheallinvites", + "_tgt": "inviteservice_inviteservice_cacheguildinvites", + "source": "inviteservice_inviteservice_cacheallinvites", + "target": "inviteservice_inviteservice_cacheguildinvites", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/InviteService.ts", + "source_location": "L32", + "weight": 0.8, + "_src": "inviteservice_inviteservice_handleinvitecreate", + "_tgt": "inviteservice_inviteservice_cacheguildinvites", + "source": "inviteservice_inviteservice_cacheguildinvites", + "target": "inviteservice_inviteservice_handleinvitecreate", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/InviteService.ts", + "source_location": "L38", + "weight": 0.8, + "_src": "inviteservice_inviteservice_handleinvitedelete", + "_tgt": "inviteservice_inviteservice_cacheguildinvites", + "source": "inviteservice_inviteservice_cacheguildinvites", + "target": "inviteservice_inviteservice_handleinvitedelete", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/InviteService.ts", + "source_location": "L61", + "weight": 0.8, + "_src": "inviteservice_inviteservice_handlememberadd", + "_tgt": "inviteservice_inviteservice_cacheguildinvites", + "source": "inviteservice_inviteservice_cacheguildinvites", + "target": "inviteservice_inviteservice_handlememberadd", + "confidence_score": 0.5 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/services/MimicService.ts", + "source_location": "L2", + "weight": 1.0, + "_src": "mimicservice", + "_tgt": "webhookservice", + "source": "mimicservice", + "target": "webhookservice", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/MimicService.ts", + "source_location": "L5", + "weight": 1.0, + "_src": "mimicservice", + "_tgt": "mimicservice_mimicservice", + "source": "mimicservice", + "target": "mimicservice_mimicservice", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/MimicService.ts", + "source_location": "L6", + "weight": 1.0, + "_src": "mimicservice_mimicservice", + "_tgt": "mimicservice_mimicservice_handlemessage", + "source": "mimicservice_mimicservice", + "target": "mimicservice_mimicservice_handlemessage", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/services/RefinementService.ts", + "source_location": "L3", + "weight": 1.0, + "_src": "refinementservice", + "_tgt": "feverservice", + "source": "refinementservice", + "target": "feverservice", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/RefinementService.ts", + "source_location": "L28", + "weight": 1.0, + "_src": "refinementservice", + "_tgt": "refinementservice_refinementservice", + "source": "refinementservice", + "target": "refinementservice_refinementservice", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/services/FishingService.ts", + "source_location": "L20", + "weight": 1.0, + "_src": "fishingservice", + "_tgt": "refinementservice", + "source": "refinementservice", + "target": "fishingservice", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/RefinementService.ts", + "source_location": "L38", + "weight": 1.0, + "_src": "refinementservice_refinementservice", + "_tgt": "refinementservice_refinementservice_getmaxdurability", + "source": "refinementservice_refinementservice", + "target": "refinementservice_refinementservice_getmaxdurability", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/RefinementService.ts", + "source_location": "L45", + "weight": 1.0, + "_src": "refinementservice_refinementservice", + "_tgt": "refinementservice_refinementservice_loadconfigs", + "source": "refinementservice_refinementservice", + "target": "refinementservice_refinementservice_loadconfigs", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/RefinementService.ts", + "source_location": "L67", + "weight": 1.0, + "_src": "refinementservice_refinementservice", + "_tgt": "refinementservice_refinementservice_getsysconfig", + "source": "refinementservice_refinementservice", + "target": "refinementservice_refinementservice_getsysconfig", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/RefinementService.ts", + "source_location": "L71", + "weight": 1.0, + "_src": "refinementservice_refinementservice", + "_tgt": "refinementservice_refinementservice_getsysconfignum", + "source": "refinementservice_refinementservice", + "target": "refinementservice_refinementservice_getsysconfignum", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/RefinementService.ts", + "source_location": "L79", + "weight": 1.0, + "_src": "refinementservice_refinementservice", + "_tgt": "refinementservice_refinementservice_getcost", + "source": "refinementservice_refinementservice", + "target": "refinementservice_refinementservice_getcost", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/RefinementService.ts", + "source_location": "L86", + "weight": 1.0, + "_src": "refinementservice_refinementservice", + "_tgt": "refinementservice_refinementservice_tryrefine", + "source": "refinementservice_refinementservice", + "target": "refinementservice_refinementservice_tryrefine", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/RefinementService.ts", + "source_location": "L153", + "weight": 1.0, + "_src": "refinementservice_refinementservice", + "_tgt": "refinementservice_refinementservice_startbattle", + "source": "refinementservice_refinementservice", + "target": "refinementservice_refinementservice_startbattle", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/RefinementService.ts", + "source_location": "L249", + "weight": 1.0, + "_src": "refinementservice_refinementservice", + "_tgt": "refinementservice_refinementservice_checkin", + "source": "refinementservice_refinementservice", + "target": "refinementservice_refinementservice_checkin", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/RefinementService.ts", + "source_location": "L277", + "weight": 1.0, + "_src": "refinementservice_refinementservice", + "_tgt": "refinementservice_refinementservice_sellweapon", + "source": "refinementservice_refinementservice", + "target": "refinementservice_refinementservice_sellweapon", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/RefinementService.ts", + "source_location": "L299", + "weight": 1.0, + "_src": "refinementservice_refinementservice", + "_tgt": "refinementservice_refinementservice_getprofile", + "source": "refinementservice_refinementservice", + "target": "refinementservice_refinementservice_getprofile", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/RefinementService.ts", + "source_location": "L303", + "weight": 1.0, + "_src": "refinementservice_refinementservice", + "_tgt": "refinementservice_refinementservice_addgold", + "source": "refinementservice_refinementservice", + "target": "refinementservice_refinementservice_addgold", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/RefinementService.ts", + "source_location": "L315", + "weight": 1.0, + "_src": "refinementservice_refinementservice", + "_tgt": "refinementservice_refinementservice_getorcreateprofile", + "source": "refinementservice_refinementservice", + "target": "refinementservice_refinementservice_getorcreateprofile", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/RefinementService.ts", + "source_location": "L115", + "weight": 0.8, + "_src": "refinementservice_refinementservice_tryrefine", + "_tgt": "refinementservice_refinementservice_getmaxdurability", + "source": "refinementservice_refinementservice_getmaxdurability", + "target": "refinementservice_refinementservice_tryrefine", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/RefinementService.ts", + "source_location": "L87", + "weight": 0.8, + "_src": "refinementservice_refinementservice_tryrefine", + "_tgt": "refinementservice_refinementservice_loadconfigs", + "source": "refinementservice_refinementservice_loadconfigs", + "target": "refinementservice_refinementservice_tryrefine", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/RefinementService.ts", + "source_location": "L154", + "weight": 0.8, + "_src": "refinementservice_refinementservice_startbattle", + "_tgt": "refinementservice_refinementservice_loadconfigs", + "source": "refinementservice_refinementservice_loadconfigs", + "target": "refinementservice_refinementservice_startbattle", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/RefinementService.ts", + "source_location": "L278", + "weight": 0.8, + "_src": "refinementservice_refinementservice_sellweapon", + "_tgt": "refinementservice_refinementservice_loadconfigs", + "source": "refinementservice_refinementservice_loadconfigs", + "target": "refinementservice_refinementservice_sellweapon", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/RefinementService.ts", + "source_location": "L321", + "weight": 0.8, + "_src": "refinementservice_refinementservice_getorcreateprofile", + "_tgt": "refinementservice_refinementservice_loadconfigs", + "source": "refinementservice_refinementservice_loadconfigs", + "target": "refinementservice_refinementservice_getorcreateprofile", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/RefinementService.ts", + "source_location": "L90", + "weight": 0.8, + "_src": "refinementservice_refinementservice_tryrefine", + "_tgt": "refinementservice_refinementservice_getsysconfignum", + "source": "refinementservice_refinementservice_getsysconfignum", + "target": "refinementservice_refinementservice_tryrefine", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/RefinementService.ts", + "source_location": "L163", + "weight": 0.8, + "_src": "refinementservice_refinementservice_startbattle", + "_tgt": "refinementservice_refinementservice_getsysconfignum", + "source": "refinementservice_refinementservice_getsysconfignum", + "target": "refinementservice_refinementservice_startbattle", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/RefinementService.ts", + "source_location": "L262", + "weight": 0.8, + "_src": "refinementservice_refinementservice_checkin", + "_tgt": "refinementservice_refinementservice_getsysconfignum", + "source": "refinementservice_refinementservice_getsysconfignum", + "target": "refinementservice_refinementservice_checkin", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/RefinementService.ts", + "source_location": "L322", + "weight": 0.8, + "_src": "refinementservice_refinementservice_getorcreateprofile", + "_tgt": "refinementservice_refinementservice_getsysconfignum", + "source": "refinementservice_refinementservice_getsysconfignum", + "target": "refinementservice_refinementservice_getorcreateprofile", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/RefinementService.ts", + "source_location": "L188", + "weight": 0.8, + "_src": "refinementservice_refinementservice_startbattle", + "_tgt": "refinementservice_refinementservice_getcost", + "source": "refinementservice_refinementservice_getcost", + "target": "refinementservice_refinementservice_startbattle", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/RefinementService.ts", + "source_location": "L281", + "weight": 0.8, + "_src": "refinementservice_refinementservice_sellweapon", + "_tgt": "refinementservice_refinementservice_getcost", + "source": "refinementservice_refinementservice_getcost", + "target": "refinementservice_refinementservice_sellweapon", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/RefinementService.ts", + "source_location": "L88", + "weight": 0.8, + "_src": "refinementservice_refinementservice_tryrefine", + "_tgt": "refinementservice_refinementservice_getorcreateprofile", + "source": "refinementservice_refinementservice_tryrefine", + "target": "refinementservice_refinementservice_getorcreateprofile", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/RefinementService.ts", + "source_location": "L155", + "weight": 0.8, + "_src": "refinementservice_refinementservice_startbattle", + "_tgt": "refinementservice_refinementservice_getorcreateprofile", + "source": "refinementservice_refinementservice_startbattle", + "target": "refinementservice_refinementservice_getorcreateprofile", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/RefinementService.ts", + "source_location": "L250", + "weight": 0.8, + "_src": "refinementservice_refinementservice_checkin", + "_tgt": "refinementservice_refinementservice_getorcreateprofile", + "source": "refinementservice_refinementservice_checkin", + "target": "refinementservice_refinementservice_getorcreateprofile", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/RefinementService.ts", + "source_location": "L279", + "weight": 0.8, + "_src": "refinementservice_refinementservice_sellweapon", + "_tgt": "refinementservice_refinementservice_getorcreateprofile", + "source": "refinementservice_refinementservice_sellweapon", + "target": "refinementservice_refinementservice_getorcreateprofile", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/RefinementService.ts", + "source_location": "L300", + "weight": 0.8, + "_src": "refinementservice_refinementservice_getprofile", + "_tgt": "refinementservice_refinementservice_getorcreateprofile", + "source": "refinementservice_refinementservice_getprofile", + "target": "refinementservice_refinementservice_getorcreateprofile", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/RefinementService.ts", + "source_location": "L304", + "weight": 0.8, + "_src": "refinementservice_refinementservice_addgold", + "_tgt": "refinementservice_refinementservice_getorcreateprofile", + "source": "refinementservice_refinementservice_addgold", + "target": "refinementservice_refinementservice_getorcreateprofile", + "confidence_score": 0.5 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/ActivityTrackerService.ts", + "source_location": "L4", + "weight": 1.0, + "_src": "activitytrackerservice", + "_tgt": "activitytrackerservice_activitytrackerservice", + "source": "activitytrackerservice", + "target": "activitytrackerservice_activitytrackerservice", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/services/FeverService.ts", + "source_location": "L3", + "weight": 1.0, + "_src": "feverservice", + "_tgt": "activitytrackerservice", + "source": "activitytrackerservice", + "target": "feverservice", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/ActivityTrackerService.ts", + "source_location": "L9", + "weight": 1.0, + "_src": "activitytrackerservice_activitytrackerservice", + "_tgt": "activitytrackerservice_activitytrackerservice_recordactivity", + "source": "activitytrackerservice_activitytrackerservice", + "target": "activitytrackerservice_activitytrackerservice_recordactivity", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/ActivityTrackerService.ts", + "source_location": "L48", + "weight": 1.0, + "_src": "activitytrackerservice_activitytrackerservice", + "_tgt": "activitytrackerservice_activitytrackerservice_getpeakhour", + "source": "activitytrackerservice_activitytrackerservice", + "target": "activitytrackerservice_activitytrackerservice_getpeakhour", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/services/BigEmojiService.ts", + "source_location": "L2", + "weight": 1.0, + "_src": "bigemojiservice", + "_tgt": "webhookservice", + "source": "bigemojiservice", + "target": "webhookservice", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/BigEmojiService.ts", + "source_location": "L5", + "weight": 1.0, + "_src": "bigemojiservice", + "_tgt": "bigemojiservice_bigemojiservice", + "source": "bigemojiservice", + "target": "bigemojiservice_bigemojiservice", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/BigEmojiService.ts", + "source_location": "L6", + "weight": 1.0, + "_src": "bigemojiservice_bigemojiservice", + "_tgt": "bigemojiservice_bigemojiservice_handlemessage", + "source": "bigemojiservice_bigemojiservice", + "target": "bigemojiservice_bigemojiservice_handlemessage", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/FeverService.ts", + "source_location": "L5", + "weight": 1.0, + "_src": "feverservice", + "_tgt": "feverservice_feverservice", + "source": "feverservice", + "target": "feverservice_feverservice", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/FeverService.ts", + "source_location": "L11", + "weight": 1.0, + "_src": "feverservice_feverservice", + "_tgt": "feverservice_feverservice_startscheduler", + "source": "feverservice_feverservice", + "target": "feverservice_feverservice_startscheduler", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/FeverService.ts", + "source_location": "L28", + "weight": 1.0, + "_src": "feverservice_feverservice", + "_tgt": "feverservice_feverservice_updatefeverstate", + "source": "feverservice_feverservice", + "target": "feverservice_feverservice_updatefeverstate", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/FeverService.ts", + "source_location": "L64", + "weight": 1.0, + "_src": "feverservice_feverservice", + "_tgt": "feverservice_feverservice_getfeverbonus", + "source": "feverservice_feverservice", + "target": "feverservice_feverservice_getfeverbonus", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/PresenceService.ts", + "source_location": "L9", + "weight": 1.0, + "_src": "presenceservice", + "_tgt": "presenceservice_presenceservice", + "source": "presenceservice", + "target": "presenceservice_presenceservice", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/PresenceService.ts", + "source_location": "L28", + "weight": 1.0, + "_src": "presenceservice_presenceservice", + "_tgt": "presenceservice_presenceservice_startactivepresence", + "source": "presenceservice_presenceservice", + "target": "presenceservice_presenceservice_startactivepresence", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/PresenceService.ts", + "source_location": "L54", + "weight": 1.0, + "_src": "presenceservice_presenceservice", + "_tgt": "presenceservice_presenceservice_updatepresence", + "source": "presenceservice_presenceservice", + "target": "presenceservice_presenceservice_updatepresence", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/PresenceService.ts", + "source_location": "L74", + "weight": 1.0, + "_src": "presenceservice_presenceservice", + "_tgt": "presenceservice_presenceservice_stoprotation", + "source": "presenceservice_presenceservice", + "target": "presenceservice_presenceservice_stoprotation", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/PresenceService.ts", + "source_location": "L34", + "weight": 0.8, + "_src": "presenceservice_presenceservice_startactivepresence", + "_tgt": "presenceservice_presenceservice_updatepresence", + "source": "presenceservice_presenceservice_startactivepresence", + "target": "presenceservice_presenceservice_updatepresence", + "confidence_score": 0.5 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/MusicService.ts", + "source_location": "L79", + "weight": 1.0, + "_src": "musicservice", + "_tgt": "musicservice_extractyoutubevideoid", + "source": "musicservice", + "target": "musicservice_extractyoutubevideoid", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/MusicService.ts", + "source_location": "L118", + "weight": 1.0, + "_src": "musicservice", + "_tgt": "musicservice_isyoutubeplaylisturl", + "source": "musicservice", + "target": "musicservice_isyoutubeplaylisturl", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/MusicService.ts", + "source_location": "L133", + "weight": 1.0, + "_src": "musicservice", + "_tgt": "musicservice_parsedurationseconds", + "source": "musicservice", + "target": "musicservice_parsedurationseconds", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/MusicService.ts", + "source_location": "L145", + "weight": 1.0, + "_src": "musicservice", + "_tgt": "musicservice_parsedurationtexttoseconds", + "source": "musicservice", + "target": "musicservice_parsedurationtexttoseconds", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/MusicService.ts", + "source_location": "L175", + "weight": 1.0, + "_src": "musicservice", + "_tgt": "musicservice_formatduration", + "source": "musicservice", + "target": "musicservice_formatduration", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/MusicService.ts", + "source_location": "L191", + "weight": 1.0, + "_src": "musicservice", + "_tgt": "musicservice_musicservice", + "source": "musicservice", + "target": "musicservice_musicservice", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/MusicService.ts", + "source_location": "L251", + "weight": 0.8, + "_src": "musicservice_musicservice_addfromurl", + "_tgt": "musicservice_extractyoutubevideoid", + "source": "musicservice_extractyoutubevideoid", + "target": "musicservice_musicservice_addfromurl", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/MusicService.ts", + "source_location": "L232", + "weight": 0.8, + "_src": "musicservice_musicservice_addfromurl", + "_tgt": "musicservice_isyoutubeplaylisturl", + "source": "musicservice_isyoutubeplaylisturl", + "target": "musicservice_musicservice_addfromurl", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/MusicService.ts", + "source_location": "L463", + "weight": 0.8, + "_src": "musicservice_musicservice_createqueueitem", + "_tgt": "musicservice_parsedurationseconds", + "source": "musicservice_parsedurationseconds", + "target": "musicservice_musicservice_createqueueitem", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/MusicService.ts", + "source_location": "L463", + "weight": 0.8, + "_src": "musicservice_musicservice_createqueueitem", + "_tgt": "musicservice_parsedurationtexttoseconds", + "source": "musicservice_parsedurationtexttoseconds", + "target": "musicservice_musicservice_createqueueitem", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/MusicService.ts", + "source_location": "L469", + "weight": 0.8, + "_src": "musicservice_musicservice_createqueueitem", + "_tgt": "musicservice_formatduration", + "source": "musicservice_formatduration", + "target": "musicservice_musicservice_createqueueitem", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/MusicService.ts", + "source_location": "L898", + "weight": 0.8, + "_src": "musicservice_musicservice_buildnowplayingembed", + "_tgt": "musicservice_formatduration", + "source": "musicservice_formatduration", + "target": "musicservice_musicservice_buildnowplayingembed", + "confidence_score": 0.5 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/MusicService.ts", + "source_location": "L199", + "weight": 1.0, + "_src": "musicservice_musicservice", + "_tgt": "musicservice_musicservice_getyoutube", + "source": "musicservice_musicservice", + "target": "musicservice_musicservice_getyoutube", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/MusicService.ts", + "source_location": "L207", + "weight": 1.0, + "_src": "musicservice_musicservice", + "_tgt": "musicservice_musicservice_addfromquery", + "source": "musicservice_musicservice", + "target": "musicservice_musicservice_addfromquery", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/MusicService.ts", + "source_location": "L231", + "weight": 1.0, + "_src": "musicservice_musicservice", + "_tgt": "musicservice_musicservice_addfromurl", + "source": "musicservice_musicservice", + "target": "musicservice_musicservice_addfromurl", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/MusicService.ts", + "source_location": "L260", + "weight": 1.0, + "_src": "musicservice_musicservice", + "_tgt": "musicservice_musicservice_getqueueembed", + "source": "musicservice_musicservice", + "target": "musicservice_musicservice_getqueueembed", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/MusicService.ts", + "source_location": "L300", + "weight": 1.0, + "_src": "musicservice_musicservice", + "_tgt": "musicservice_musicservice_getactivevoicechannelid", + "source": "musicservice_musicservice", + "target": "musicservice_musicservice_getactivevoicechannelid", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/MusicService.ts", + "source_location": "L304", + "weight": 1.0, + "_src": "musicservice_musicservice", + "_tgt": "musicservice_musicservice_skip", + "source": "musicservice_musicservice", + "target": "musicservice_musicservice_skip", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/MusicService.ts", + "source_location": "L314", + "weight": 1.0, + "_src": "musicservice_musicservice", + "_tgt": "musicservice_musicservice_pause", + "source": "musicservice_musicservice", + "target": "musicservice_musicservice_pause", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/MusicService.ts", + "source_location": "L334", + "weight": 1.0, + "_src": "musicservice_musicservice", + "_tgt": "musicservice_musicservice_resume", + "source": "musicservice_musicservice", + "target": "musicservice_musicservice_resume", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/MusicService.ts", + "source_location": "L351", + "weight": 1.0, + "_src": "musicservice_musicservice", + "_tgt": "musicservice_musicservice_stop", + "source": "musicservice_musicservice", + "target": "musicservice_musicservice_stop", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/MusicService.ts", + "source_location": "L368", + "weight": 1.0, + "_src": "musicservice_musicservice", + "_tgt": "musicservice_musicservice_remove", + "source": "musicservice_musicservice", + "target": "musicservice_musicservice_remove", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/MusicService.ts", + "source_location": "L384", + "weight": 1.0, + "_src": "musicservice_musicservice", + "_tgt": "musicservice_musicservice_leave", + "source": "musicservice_musicservice", + "target": "musicservice_musicservice_leave", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/MusicService.ts", + "source_location": "L404", + "weight": 1.0, + "_src": "musicservice_musicservice", + "_tgt": "musicservice_musicservice_handlecontrolinteraction", + "source": "musicservice_musicservice", + "target": "musicservice_musicservice_handlecontrolinteraction", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/MusicService.ts", + "source_location": "L454", + "weight": 1.0, + "_src": "musicservice_musicservice", + "_tgt": "musicservice_musicservice_createqueueitem", + "source": "musicservice_musicservice", + "target": "musicservice_musicservice_createqueueitem", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/MusicService.ts", + "source_location": "L476", + "weight": 1.0, + "_src": "musicservice_musicservice", + "_tgt": "musicservice_musicservice_enqueuetracks", + "source": "musicservice_musicservice", + "target": "musicservice_musicservice_enqueuetracks", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/MusicService.ts", + "source_location": "L505", + "weight": 1.0, + "_src": "musicservice_musicservice", + "_tgt": "musicservice_musicservice_ensuresession", + "source": "musicservice_musicservice", + "target": "musicservice_musicservice_ensuresession", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/MusicService.ts", + "source_location": "L561", + "weight": 1.0, + "_src": "musicservice_musicservice", + "_tgt": "musicservice_musicservice_bindsessionevents", + "source": "musicservice_musicservice", + "target": "musicservice_musicservice_bindsessionevents", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/MusicService.ts", + "source_location": "L577", + "weight": 1.0, + "_src": "musicservice_musicservice", + "_tgt": "musicservice_musicservice_ontrackfinished", + "source": "musicservice_musicservice", + "target": "musicservice_musicservice_ontrackfinished", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/MusicService.ts", + "source_location": "L597", + "weight": 1.0, + "_src": "musicservice_musicservice", + "_tgt": "musicservice_musicservice_notifyplaybackfailure", + "source": "musicservice_musicservice", + "target": "musicservice_musicservice_notifyplaybackfailure", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/MusicService.ts", + "source_location": "L618", + "weight": 1.0, + "_src": "musicservice_musicservice", + "_tgt": "musicservice_musicservice_playnext", + "source": "musicservice_musicservice", + "target": "musicservice_musicservice_playnext", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/MusicService.ts", + "source_location": "L660", + "weight": 1.0, + "_src": "musicservice_musicservice", + "_tgt": "musicservice_musicservice_resolvestreamurl", + "source": "musicservice_musicservice", + "target": "musicservice_musicservice_resolvestreamurl", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/MusicService.ts", + "source_location": "L711", + "weight": 1.0, + "_src": "musicservice_musicservice", + "_tgt": "musicservice_musicservice_extractplaylist", + "source": "musicservice_musicservice", + "target": "musicservice_musicservice_extractplaylist", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/MusicService.ts", + "source_location": "L754", + "weight": 1.0, + "_src": "musicservice_musicservice", + "_tgt": "musicservice_musicservice_spawnffmpeg", + "source": "musicservice_musicservice", + "target": "musicservice_musicservice_spawnffmpeg", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/MusicService.ts", + "source_location": "L796", + "weight": 1.0, + "_src": "musicservice_musicservice", + "_tgt": "musicservice_musicservice_cleanupprocess", + "source": "musicservice_musicservice", + "target": "musicservice_musicservice_cleanupprocess", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/MusicService.ts", + "source_location": "L805", + "weight": 1.0, + "_src": "musicservice_musicservice", + "_tgt": "musicservice_musicservice_rendernowplaying", + "source": "musicservice_musicservice", + "target": "musicservice_musicservice_rendernowplaying", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/MusicService.ts", + "source_location": "L822", + "weight": 1.0, + "_src": "musicservice_musicservice", + "_tgt": "musicservice_musicservice_renderidlestate", + "source": "musicservice_musicservice", + "target": "musicservice_musicservice_renderidlestate", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/MusicService.ts", + "source_location": "L840", + "weight": 1.0, + "_src": "musicservice_musicservice", + "_tgt": "musicservice_musicservice_buildcontrolrow", + "source": "musicservice_musicservice", + "target": "musicservice_musicservice_buildcontrolrow", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/MusicService.ts", + "source_location": "L866", + "weight": 1.0, + "_src": "musicservice_musicservice", + "_tgt": "musicservice_musicservice_buildfallbackcontrolrow", + "source": "musicservice_musicservice", + "target": "musicservice_musicservice_buildfallbackcontrolrow", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/MusicService.ts", + "source_location": "L891", + "weight": 1.0, + "_src": "musicservice_musicservice", + "_tgt": "musicservice_musicservice_buildnowplayingembed", + "source": "musicservice_musicservice", + "target": "musicservice_musicservice_buildnowplayingembed", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/MusicService.ts", + "source_location": "L948", + "weight": 1.0, + "_src": "musicservice_musicservice", + "_tgt": "musicservice_musicservice_buildprogressbar", + "source": "musicservice_musicservice", + "target": "musicservice_musicservice_buildprogressbar", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/MusicService.ts", + "source_location": "L955", + "weight": 1.0, + "_src": "musicservice_musicservice", + "_tgt": "musicservice_musicservice_buildindeterminateprogressbar", + "source": "musicservice_musicservice", + "target": "musicservice_musicservice_buildindeterminateprogressbar", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/MusicService.ts", + "source_location": "L961", + "weight": 1.0, + "_src": "musicservice_musicservice", + "_tgt": "musicservice_musicservice_startprogressupdates", + "source": "musicservice_musicservice", + "target": "musicservice_musicservice_startprogressupdates", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/MusicService.ts", + "source_location": "L984", + "weight": 1.0, + "_src": "musicservice_musicservice", + "_tgt": "musicservice_musicservice_stopprogressupdates", + "source": "musicservice_musicservice", + "target": "musicservice_musicservice_stopprogressupdates", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/MusicService.ts", + "source_location": "L991", + "weight": 1.0, + "_src": "musicservice_musicservice", + "_tgt": "musicservice_musicservice_ispaused", + "source": "musicservice_musicservice", + "target": "musicservice_musicservice_ispaused", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/MusicService.ts", + "source_location": "L995", + "weight": 1.0, + "_src": "musicservice_musicservice", + "_tgt": "musicservice_musicservice_getelapsedseconds", + "source": "musicservice_musicservice", + "target": "musicservice_musicservice_getelapsedseconds", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/MusicService.ts", + "source_location": "L1005", + "weight": 1.0, + "_src": "musicservice_musicservice", + "_tgt": "musicservice_musicservice_refreshcontrolmessage", + "source": "musicservice_musicservice", + "target": "musicservice_musicservice_refreshcontrolmessage", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/MusicService.ts", + "source_location": "L1027", + "weight": 1.0, + "_src": "musicservice_musicservice", + "_tgt": "musicservice_musicservice_formattrackline", + "source": "musicservice_musicservice", + "target": "musicservice_musicservice_formattrackline", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/MusicService.ts", + "source_location": "L1031", + "weight": 1.0, + "_src": "musicservice_musicservice", + "_tgt": "musicservice_musicservice_safesend", + "source": "musicservice_musicservice", + "target": "musicservice_musicservice_safesend", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/MusicService.ts", + "source_location": "L208", + "weight": 0.8, + "_src": "musicservice_musicservice_addfromquery", + "_tgt": "musicservice_musicservice_getyoutube", + "source": "musicservice_musicservice_getyoutube", + "target": "musicservice_musicservice_addfromquery", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/MusicService.ts", + "source_location": "L460", + "weight": 0.8, + "_src": "musicservice_musicservice_createqueueitem", + "_tgt": "musicservice_musicservice_getyoutube", + "source": "musicservice_musicservice_getyoutube", + "target": "musicservice_musicservice_createqueueitem", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/MusicService.ts", + "source_location": "L697", + "weight": 0.8, + "_src": "musicservice_musicservice_resolvestreamurl", + "_tgt": "musicservice_musicservice_getyoutube", + "source": "musicservice_musicservice_getyoutube", + "target": "musicservice_musicservice_resolvestreamurl", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/MusicService.ts", + "source_location": "L227", + "weight": 0.8, + "_src": "musicservice_musicservice_addfromquery", + "_tgt": "musicservice_musicservice_createqueueitem", + "source": "musicservice_musicservice_addfromquery", + "target": "musicservice_musicservice_createqueueitem", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/MusicService.ts", + "source_location": "L228", + "weight": 0.8, + "_src": "musicservice_musicservice_addfromquery", + "_tgt": "musicservice_musicservice_enqueuetracks", + "source": "musicservice_musicservice_addfromquery", + "target": "musicservice_musicservice_enqueuetracks", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/MusicService.ts", + "source_location": "L233", + "weight": 0.8, + "_src": "musicservice_musicservice_addfromurl", + "_tgt": "musicservice_musicservice_extractplaylist", + "source": "musicservice_musicservice_addfromurl", + "target": "musicservice_musicservice_extractplaylist", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/MusicService.ts", + "source_location": "L248", + "weight": 0.8, + "_src": "musicservice_musicservice_addfromurl", + "_tgt": "musicservice_musicservice_enqueuetracks", + "source": "musicservice_musicservice_addfromurl", + "target": "musicservice_musicservice_enqueuetracks", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/MusicService.ts", + "source_location": "L256", + "weight": 0.8, + "_src": "musicservice_musicservice_addfromurl", + "_tgt": "musicservice_musicservice_createqueueitem", + "source": "musicservice_musicservice_addfromurl", + "target": "musicservice_musicservice_createqueueitem", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/MusicService.ts", + "source_location": "L274", + "weight": 0.8, + "_src": "musicservice_musicservice_getqueueembed", + "_tgt": "musicservice_musicservice_formattrackline", + "source": "musicservice_musicservice_getqueueembed", + "target": "musicservice_musicservice_formattrackline", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/MusicService.ts", + "source_location": "L310", + "weight": 0.8, + "_src": "musicservice_musicservice_skip", + "_tgt": "musicservice_musicservice_stop", + "source": "musicservice_musicservice_skip", + "target": "musicservice_musicservice_stop", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/MusicService.ts", + "source_location": "L440", + "weight": 0.8, + "_src": "musicservice_musicservice_handlecontrolinteraction", + "_tgt": "musicservice_musicservice_skip", + "source": "musicservice_musicservice_skip", + "target": "musicservice_musicservice_handlecontrolinteraction", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/MusicService.ts", + "source_location": "L320", + "weight": 0.8, + "_src": "musicservice_musicservice_pause", + "_tgt": "musicservice_musicservice_ispaused", + "source": "musicservice_musicservice_pause", + "target": "musicservice_musicservice_ispaused", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/MusicService.ts", + "source_location": "L330", + "weight": 0.8, + "_src": "musicservice_musicservice_pause", + "_tgt": "musicservice_musicservice_refreshcontrolmessage", + "source": "musicservice_musicservice_pause", + "target": "musicservice_musicservice_refreshcontrolmessage", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/MusicService.ts", + "source_location": "L430", + "weight": 0.8, + "_src": "musicservice_musicservice_handlecontrolinteraction", + "_tgt": "musicservice_musicservice_pause", + "source": "musicservice_musicservice_pause", + "target": "musicservice_musicservice_handlecontrolinteraction", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/MusicService.ts", + "source_location": "L347", + "weight": 0.8, + "_src": "musicservice_musicservice_resume", + "_tgt": "musicservice_musicservice_refreshcontrolmessage", + "source": "musicservice_musicservice_resume", + "target": "musicservice_musicservice_refreshcontrolmessage", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/MusicService.ts", + "source_location": "L435", + "weight": 0.8, + "_src": "musicservice_musicservice_handlecontrolinteraction", + "_tgt": "musicservice_musicservice_resume", + "source": "musicservice_musicservice_resume", + "target": "musicservice_musicservice_handlecontrolinteraction", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/MusicService.ts", + "source_location": "L364", + "weight": 0.8, + "_src": "musicservice_musicservice_stop", + "_tgt": "musicservice_musicservice_renderidlestate", + "source": "musicservice_musicservice_stop", + "target": "musicservice_musicservice_renderidlestate", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/MusicService.ts", + "source_location": "L393", + "weight": 0.8, + "_src": "musicservice_musicservice_leave", + "_tgt": "musicservice_musicservice_stop", + "source": "musicservice_musicservice_stop", + "target": "musicservice_musicservice_leave", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/MusicService.ts", + "source_location": "L445", + "weight": 0.8, + "_src": "musicservice_musicservice_handlecontrolinteraction", + "_tgt": "musicservice_musicservice_stop", + "source": "musicservice_musicservice_stop", + "target": "musicservice_musicservice_handlecontrolinteraction", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/MusicService.ts", + "source_location": "L380", + "weight": 0.8, + "_src": "musicservice_musicservice_remove", + "_tgt": "musicservice_musicservice_refreshcontrolmessage", + "source": "musicservice_musicservice_remove", + "target": "musicservice_musicservice_refreshcontrolmessage", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/MusicService.ts", + "source_location": "L392", + "weight": 0.8, + "_src": "musicservice_musicservice_leave", + "_tgt": "musicservice_musicservice_cleanupprocess", + "source": "musicservice_musicservice_leave", + "target": "musicservice_musicservice_cleanupprocess", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/MusicService.ts", + "source_location": "L399", + "weight": 0.8, + "_src": "musicservice_musicservice_leave", + "_tgt": "musicservice_musicservice_renderidlestate", + "source": "musicservice_musicservice_leave", + "target": "musicservice_musicservice_renderidlestate", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/MusicService.ts", + "source_location": "L450", + "weight": 0.8, + "_src": "musicservice_musicservice_handlecontrolinteraction", + "_tgt": "musicservice_musicservice_leave", + "source": "musicservice_musicservice_leave", + "target": "musicservice_musicservice_handlecontrolinteraction", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/MusicService.ts", + "source_location": "L408", + "weight": 0.8, + "_src": "musicservice_musicservice_handlecontrolinteraction", + "_tgt": "musicservice_musicservice_buildfallbackcontrolrow", + "source": "musicservice_musicservice_handlecontrolinteraction", + "target": "musicservice_musicservice_buildfallbackcontrolrow", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/MusicService.ts", + "source_location": "L482", + "weight": 0.8, + "_src": "musicservice_musicservice_enqueuetracks", + "_tgt": "musicservice_musicservice_ensuresession", + "source": "musicservice_musicservice_enqueuetracks", + "target": "musicservice_musicservice_ensuresession", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/MusicService.ts", + "source_location": "L491", + "weight": 0.8, + "_src": "musicservice_musicservice_enqueuetracks", + "_tgt": "musicservice_musicservice_playnext", + "source": "musicservice_musicservice_enqueuetracks", + "target": "musicservice_musicservice_playnext", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/MusicService.ts", + "source_location": "L493", + "weight": 0.8, + "_src": "musicservice_musicservice_enqueuetracks", + "_tgt": "musicservice_musicservice_refreshcontrolmessage", + "source": "musicservice_musicservice_enqueuetracks", + "target": "musicservice_musicservice_refreshcontrolmessage", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/MusicService.ts", + "source_location": "L556", + "weight": 0.8, + "_src": "musicservice_musicservice_ensuresession", + "_tgt": "musicservice_musicservice_bindsessionevents", + "source": "musicservice_musicservice_ensuresession", + "target": "musicservice_musicservice_bindsessionevents", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/MusicService.ts", + "source_location": "L583", + "weight": 0.8, + "_src": "musicservice_musicservice_ontrackfinished", + "_tgt": "musicservice_musicservice_cleanupprocess", + "source": "musicservice_musicservice_ontrackfinished", + "target": "musicservice_musicservice_cleanupprocess", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/MusicService.ts", + "source_location": "L590", + "weight": 0.8, + "_src": "musicservice_musicservice_ontrackfinished", + "_tgt": "musicservice_musicservice_renderidlestate", + "source": "musicservice_musicservice_ontrackfinished", + "target": "musicservice_musicservice_renderidlestate", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/MusicService.ts", + "source_location": "L594", + "weight": 0.8, + "_src": "musicservice_musicservice_ontrackfinished", + "_tgt": "musicservice_musicservice_playnext", + "source": "musicservice_musicservice_ontrackfinished", + "target": "musicservice_musicservice_playnext", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/MusicService.ts", + "source_location": "L599", + "weight": 0.8, + "_src": "musicservice_musicservice_notifyplaybackfailure", + "_tgt": "musicservice_musicservice_cleanupprocess", + "source": "musicservice_musicservice_notifyplaybackfailure", + "target": "musicservice_musicservice_cleanupprocess", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/MusicService.ts", + "source_location": "L606", + "weight": 0.8, + "_src": "musicservice_musicservice_notifyplaybackfailure", + "_tgt": "musicservice_musicservice_safesend", + "source": "musicservice_musicservice_notifyplaybackfailure", + "target": "musicservice_musicservice_safesend", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/MusicService.ts", + "source_location": "L612", + "weight": 0.8, + "_src": "musicservice_musicservice_notifyplaybackfailure", + "_tgt": "musicservice_musicservice_playnext", + "source": "musicservice_musicservice_notifyplaybackfailure", + "target": "musicservice_musicservice_playnext", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/MusicService.ts", + "source_location": "L614", + "weight": 0.8, + "_src": "musicservice_musicservice_notifyplaybackfailure", + "_tgt": "musicservice_musicservice_renderidlestate", + "source": "musicservice_musicservice_notifyplaybackfailure", + "target": "musicservice_musicservice_renderidlestate", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/MusicService.ts", + "source_location": "L628", + "weight": 0.8, + "_src": "musicservice_musicservice_playnext", + "_tgt": "musicservice_musicservice_renderidlestate", + "source": "musicservice_musicservice_playnext", + "target": "musicservice_musicservice_renderidlestate", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/MusicService.ts", + "source_location": "L638", + "weight": 0.8, + "_src": "musicservice_musicservice_playnext", + "_tgt": "musicservice_musicservice_resolvestreamurl", + "source": "musicservice_musicservice_playnext", + "target": "musicservice_musicservice_resolvestreamurl", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/MusicService.ts", + "source_location": "L639", + "weight": 0.8, + "_src": "musicservice_musicservice_playnext", + "_tgt": "musicservice_musicservice_spawnffmpeg", + "source": "musicservice_musicservice_playnext", + "target": "musicservice_musicservice_spawnffmpeg", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/MusicService.ts", + "source_location": "L648", + "weight": 0.8, + "_src": "musicservice_musicservice_playnext", + "_tgt": "musicservice_musicservice_rendernowplaying", + "source": "musicservice_musicservice_playnext", + "target": "musicservice_musicservice_rendernowplaying", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/MusicService.ts", + "source_location": "L651", + "weight": 0.8, + "_src": "musicservice_musicservice_playnext", + "_tgt": "musicservice_musicservice_safesend", + "source": "musicservice_musicservice_playnext", + "target": "musicservice_musicservice_safesend", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/MusicService.ts", + "source_location": "L797", + "weight": 0.8, + "_src": "musicservice_musicservice_cleanupprocess", + "_tgt": "musicservice_musicservice_stopprogressupdates", + "source": "musicservice_musicservice_cleanupprocess", + "target": "musicservice_musicservice_stopprogressupdates", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/MusicService.ts", + "source_location": "L810", + "weight": 0.8, + "_src": "musicservice_musicservice_rendernowplaying", + "_tgt": "musicservice_musicservice_buildnowplayingembed", + "source": "musicservice_musicservice_rendernowplaying", + "target": "musicservice_musicservice_buildnowplayingembed", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/MusicService.ts", + "source_location": "L811", + "weight": 0.8, + "_src": "musicservice_musicservice_rendernowplaying", + "_tgt": "musicservice_musicservice_buildcontrolrow", + "source": "musicservice_musicservice_rendernowplaying", + "target": "musicservice_musicservice_buildcontrolrow", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/MusicService.ts", + "source_location": "L816", + "weight": 0.8, + "_src": "musicservice_musicservice_rendernowplaying", + "_tgt": "musicservice_musicservice_safesend", + "source": "musicservice_musicservice_rendernowplaying", + "target": "musicservice_musicservice_safesend", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/MusicService.ts", + "source_location": "L819", + "weight": 0.8, + "_src": "musicservice_musicservice_rendernowplaying", + "_tgt": "musicservice_musicservice_startprogressupdates", + "source": "musicservice_musicservice_rendernowplaying", + "target": "musicservice_musicservice_startprogressupdates", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/MusicService.ts", + "source_location": "L823", + "weight": 0.8, + "_src": "musicservice_musicservice_renderidlestate", + "_tgt": "musicservice_musicservice_stopprogressupdates", + "source": "musicservice_musicservice_renderidlestate", + "target": "musicservice_musicservice_stopprogressupdates", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/MusicService.ts", + "source_location": "L836", + "weight": 0.8, + "_src": "musicservice_musicservice_renderidlestate", + "_tgt": "musicservice_musicservice_buildcontrolrow", + "source": "musicservice_musicservice_renderidlestate", + "target": "musicservice_musicservice_buildcontrolrow", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/MusicService.ts", + "source_location": "L1011", + "weight": 0.8, + "_src": "musicservice_musicservice_refreshcontrolmessage", + "_tgt": "musicservice_musicservice_renderidlestate", + "source": "musicservice_musicservice_renderidlestate", + "target": "musicservice_musicservice_refreshcontrolmessage", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/MusicService.ts", + "source_location": "L841", + "weight": 0.8, + "_src": "musicservice_musicservice_buildcontrolrow", + "_tgt": "musicservice_musicservice_ispaused", + "source": "musicservice_musicservice_buildcontrolrow", + "target": "musicservice_musicservice_ispaused", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/MusicService.ts", + "source_location": "L1017", + "weight": 0.8, + "_src": "musicservice_musicservice_refreshcontrolmessage", + "_tgt": "musicservice_musicservice_buildcontrolrow", + "source": "musicservice_musicservice_buildcontrolrow", + "target": "musicservice_musicservice_refreshcontrolmessage", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/MusicService.ts", + "source_location": "L894", + "weight": 0.8, + "_src": "musicservice_musicservice_buildnowplayingembed", + "_tgt": "musicservice_musicservice_getelapsedseconds", + "source": "musicservice_musicservice_buildnowplayingembed", + "target": "musicservice_musicservice_getelapsedseconds", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/MusicService.ts", + "source_location": "L898", + "weight": 0.8, + "_src": "musicservice_musicservice_buildnowplayingembed", + "_tgt": "musicservice_musicservice_buildprogressbar", + "source": "musicservice_musicservice_buildnowplayingembed", + "target": "musicservice_musicservice_buildprogressbar", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/MusicService.ts", + "source_location": "L899", + "weight": 0.8, + "_src": "musicservice_musicservice_buildnowplayingembed", + "_tgt": "musicservice_musicservice_buildindeterminateprogressbar", + "source": "musicservice_musicservice_buildnowplayingembed", + "target": "musicservice_musicservice_buildindeterminateprogressbar", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/MusicService.ts", + "source_location": "L901", + "weight": 0.8, + "_src": "musicservice_musicservice_buildnowplayingembed", + "_tgt": "musicservice_musicservice_ispaused", + "source": "musicservice_musicservice_buildnowplayingembed", + "target": "musicservice_musicservice_ispaused", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/MusicService.ts", + "source_location": "L941", + "weight": 0.8, + "_src": "musicservice_musicservice_buildnowplayingembed", + "_tgt": "musicservice_musicservice_formattrackline", + "source": "musicservice_musicservice_buildnowplayingembed", + "target": "musicservice_musicservice_formattrackline", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/MusicService.ts", + "source_location": "L1016", + "weight": 0.8, + "_src": "musicservice_musicservice_refreshcontrolmessage", + "_tgt": "musicservice_musicservice_buildnowplayingembed", + "source": "musicservice_musicservice_buildnowplayingembed", + "target": "musicservice_musicservice_refreshcontrolmessage", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/MusicService.ts", + "source_location": "L962", + "weight": 0.8, + "_src": "musicservice_musicservice_startprogressupdates", + "_tgt": "musicservice_musicservice_stopprogressupdates", + "source": "musicservice_musicservice_startprogressupdates", + "target": "musicservice_musicservice_stopprogressupdates", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/MusicService.ts", + "source_location": "L1023", + "weight": 0.8, + "_src": "musicservice_musicservice_refreshcontrolmessage", + "_tgt": "musicservice_musicservice_startprogressupdates", + "source": "musicservice_musicservice_startprogressupdates", + "target": "musicservice_musicservice_refreshcontrolmessage", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/MusicService.ts", + "source_location": "L1021", + "weight": 0.8, + "_src": "musicservice_musicservice_refreshcontrolmessage", + "_tgt": "musicservice_musicservice_stopprogressupdates", + "source": "musicservice_musicservice_stopprogressupdates", + "target": "musicservice_musicservice_refreshcontrolmessage", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/MusicService.ts", + "source_location": "L1020", + "weight": 0.8, + "_src": "musicservice_musicservice_refreshcontrolmessage", + "_tgt": "musicservice_musicservice_ispaused", + "source": "musicservice_musicservice_ispaused", + "target": "musicservice_musicservice_refreshcontrolmessage", + "confidence_score": 0.5 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/MiniGameRegistry.ts", + "source_location": "L20", + "weight": 1.0, + "_src": "minigameregistry", + "_tgt": "minigameregistry_getminigame", + "source": "minigameregistry", + "target": "minigameregistry_getminigame", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/MiniGameRegistry.ts", + "source_location": "L24", + "weight": 1.0, + "_src": "minigameregistry", + "_tgt": "minigameregistry_getallminigames", + "source": "minigameregistry", + "target": "minigameregistry_getallminigames", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/services/VoiceService.ts", + "source_location": "L7", + "weight": 1.0, + "_src": "voiceservice", + "_tgt": "auditlogservice", + "source": "voiceservice", + "target": "auditlogservice", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/VoiceService.ts", + "source_location": "L9", + "weight": 1.0, + "_src": "voiceservice", + "_tgt": "voiceservice_voiceservice", + "source": "voiceservice", + "target": "voiceservice_voiceservice", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/VoiceService.ts", + "source_location": "L10", + "weight": 1.0, + "_src": "voiceservice_voiceservice", + "_tgt": "voiceservice_voiceservice_syncchannels", + "source": "voiceservice_voiceservice", + "target": "voiceservice_voiceservice_syncchannels", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/VoiceService.ts", + "source_location": "L49", + "weight": 1.0, + "_src": "voiceservice_voiceservice", + "_tgt": "voiceservice_voiceservice_handlevoicestateupdate", + "source": "voiceservice_voiceservice", + "target": "voiceservice_voiceservice_handlevoicestateupdate", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/VoiceService.ts", + "source_location": "L65", + "weight": 1.0, + "_src": "voiceservice_voiceservice", + "_tgt": "voiceservice_voiceservice_handlejoin", + "source": "voiceservice_voiceservice", + "target": "voiceservice_voiceservice_handlejoin", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/VoiceService.ts", + "source_location": "L211", + "weight": 1.0, + "_src": "voiceservice_voiceservice", + "_tgt": "voiceservice_voiceservice_handleleave", + "source": "voiceservice_voiceservice", + "target": "voiceservice_voiceservice_handleleave", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/VoiceService.ts", + "source_location": "L277", + "weight": 1.0, + "_src": "voiceservice_voiceservice", + "_tgt": "voiceservice_voiceservice_applyownershiptransfer", + "source": "voiceservice_voiceservice", + "target": "voiceservice_voiceservice_applyownershiptransfer", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/VoiceService.ts", + "source_location": "L301", + "weight": 1.0, + "_src": "voiceservice_voiceservice", + "_tgt": "voiceservice_voiceservice_sendcontrolpanel", + "source": "voiceservice_voiceservice", + "target": "voiceservice_voiceservice_sendcontrolpanel", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/VoiceService.ts", + "source_location": "L336", + "weight": 1.0, + "_src": "voiceservice_voiceservice", + "_tgt": "voiceservice_voiceservice_geteffectivename", + "source": "voiceservice_voiceservice", + "target": "voiceservice_voiceservice_geteffectivename", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/VoiceService.ts", + "source_location": "L56", + "weight": 0.8, + "_src": "voiceservice_voiceservice_handlevoicestateupdate", + "_tgt": "voiceservice_voiceservice_handlejoin", + "source": "voiceservice_voiceservice_handlevoicestateupdate", + "target": "voiceservice_voiceservice_handlejoin", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/VoiceService.ts", + "source_location": "L58", + "weight": 0.8, + "_src": "voiceservice_voiceservice_handlevoicestateupdate", + "_tgt": "voiceservice_voiceservice_handleleave", + "source": "voiceservice_voiceservice_handlevoicestateupdate", + "target": "voiceservice_voiceservice_handleleave", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/VoiceService.ts", + "source_location": "L130", + "weight": 0.8, + "_src": "voiceservice_voiceservice_handlejoin", + "_tgt": "voiceservice_voiceservice_geteffectivename", + "source": "voiceservice_voiceservice_handlejoin", + "target": "voiceservice_voiceservice_geteffectivename", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/VoiceService.ts", + "source_location": "L205", + "weight": 0.8, + "_src": "voiceservice_voiceservice_handlejoin", + "_tgt": "voiceservice_voiceservice_sendcontrolpanel", + "source": "voiceservice_voiceservice_handlejoin", + "target": "voiceservice_voiceservice_sendcontrolpanel", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/VoiceService.ts", + "source_location": "L268", + "weight": 0.8, + "_src": "voiceservice_voiceservice_handleleave", + "_tgt": "voiceservice_voiceservice_applyownershiptransfer", + "source": "voiceservice_voiceservice_handleleave", + "target": "voiceservice_voiceservice_applyownershiptransfer", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/VoiceService.ts", + "source_location": "L298", + "weight": 0.8, + "_src": "voiceservice_voiceservice_applyownershiptransfer", + "_tgt": "voiceservice_voiceservice_sendcontrolpanel", + "source": "voiceservice_voiceservice_applyownershiptransfer", + "target": "voiceservice_voiceservice_sendcontrolpanel", + "confidence_score": 0.5 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/PermissionAuditService.ts", + "source_location": "L143", + "weight": 1.0, + "_src": "permissionauditservice", + "_tgt": "permissionauditservice_permissionauditservice", + "source": "permissionauditservice", + "target": "permissionauditservice_permissionauditservice", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/services/SetupWizardRenderer.ts", + "source_location": "L14", + "weight": 1.0, + "_src": "setupwizardrenderer", + "_tgt": "permissionauditservice", + "source": "permissionauditservice", + "target": "setupwizardrenderer", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/PermissionAuditService.ts", + "source_location": "L144", + "weight": 1.0, + "_src": "permissionauditservice_permissionauditservice", + "_tgt": "permissionauditservice_permissionauditservice_auditguild", + "source": "permissionauditservice_permissionauditservice", + "target": "permissionauditservice_permissionauditservice_auditguild", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/PermissionAuditService.ts", + "source_location": "L181", + "weight": 1.0, + "_src": "permissionauditservice_permissionauditservice", + "_tgt": "permissionauditservice_permissionauditservice_checkguildpermissions", + "source": "permissionauditservice_permissionauditservice", + "target": "permissionauditservice_permissionauditservice_checkguildpermissions", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/PermissionAuditService.ts", + "source_location": "L194", + "weight": 1.0, + "_src": "permissionauditservice_permissionauditservice", + "_tgt": "permissionauditservice_permissionauditservice_checkchannelpermissions", + "source": "permissionauditservice_permissionauditservice", + "target": "permissionauditservice_permissionauditservice_checkchannelpermissions", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/PermissionAuditService.ts", + "source_location": "L210", + "weight": 1.0, + "_src": "permissionauditservice_permissionauditservice", + "_tgt": "permissionauditservice_permissionauditservice_checkhierarchy", + "source": "permissionauditservice_permissionauditservice", + "target": "permissionauditservice_permissionauditservice_checkhierarchy", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/PermissionAuditService.ts", + "source_location": "L231", + "weight": 1.0, + "_src": "permissionauditservice_permissionauditservice", + "_tgt": "permissionauditservice_permissionauditservice_getmissing", + "source": "permissionauditservice_permissionauditservice", + "target": "permissionauditservice_permissionauditservice_getmissing", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/PermissionAuditService.ts", + "source_location": "L236", + "weight": 1.0, + "_src": "permissionauditservice_permissionauditservice", + "_tgt": "permissionauditservice_permissionauditservice_permtostring", + "source": "permissionauditservice_permissionauditservice", + "target": "permissionauditservice_permissionauditservice_permtostring", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/PermissionAuditService.ts", + "source_location": "L153", + "weight": 0.8, + "_src": "permissionauditservice_permissionauditservice_auditguild", + "_tgt": "permissionauditservice_permissionauditservice_checkguildpermissions", + "source": "permissionauditservice_permissionauditservice_auditguild", + "target": "permissionauditservice_permissionauditservice_checkguildpermissions", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/PermissionAuditService.ts", + "source_location": "L159", + "weight": 0.8, + "_src": "permissionauditservice_permissionauditservice_auditguild", + "_tgt": "permissionauditservice_permissionauditservice_checkchannelpermissions", + "source": "permissionauditservice_permissionauditservice_auditguild", + "target": "permissionauditservice_permissionauditservice_checkchannelpermissions", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/PermissionAuditService.ts", + "source_location": "L167", + "weight": 0.8, + "_src": "permissionauditservice_permissionauditservice_auditguild", + "_tgt": "permissionauditservice_permissionauditservice_checkhierarchy", + "source": "permissionauditservice_permissionauditservice_auditguild", + "target": "permissionauditservice_permissionauditservice_checkhierarchy", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/PermissionAuditService.ts", + "source_location": "L185", + "weight": 0.8, + "_src": "permissionauditservice_permissionauditservice_checkguildpermissions", + "_tgt": "permissionauditservice_permissionauditservice_getmissing", + "source": "permissionauditservice_permissionauditservice_checkguildpermissions", + "target": "permissionauditservice_permissionauditservice_getmissing", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/PermissionAuditService.ts", + "source_location": "L200", + "weight": 0.8, + "_src": "permissionauditservice_permissionauditservice_checkchannelpermissions", + "_tgt": "permissionauditservice_permissionauditservice_getmissing", + "source": "permissionauditservice_permissionauditservice_checkchannelpermissions", + "target": "permissionauditservice_permissionauditservice_getmissing", + "confidence_score": 0.5 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/SetupWizardRenderer.ts", + "source_location": "L17", + "weight": 1.0, + "_src": "setupwizardrenderer", + "_tgt": "setupwizardrenderer_setupwizardrenderer", + "source": "setupwizardrenderer", + "target": "setupwizardrenderer_setupwizardrenderer", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/SetupWizardRenderer.ts", + "source_location": "L18", + "weight": 1.0, + "_src": "setupwizardrenderer_setupwizardrenderer", + "_tgt": "setupwizardrenderer_setupwizardrenderer_renderstep", + "source": "setupwizardrenderer_setupwizardrenderer", + "target": "setupwizardrenderer_setupwizardrenderer_renderstep", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/FishingService.ts", + "source_location": "L102", + "weight": 1.0, + "_src": "fishingservice", + "_tgt": "fishingservice_fishingservice", + "source": "fishingservice", + "target": "fishingservice_fishingservice", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/FishingService.ts", + "source_location": "L984", + "weight": 1.0, + "_src": "fishingservice", + "_tgt": "fishingservice_buildfishinggauge", + "source": "fishingservice", + "target": "fishingservice_buildfishinggauge", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/FishingService.ts", + "source_location": "L988", + "weight": 1.0, + "_src": "fishingservice", + "_tgt": "fishingservice_buildfishinglane", + "source": "fishingservice", + "target": "fishingservice_buildfishinglane", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/FishingService.ts", + "source_location": "L109", + "weight": 1.0, + "_src": "fishingservice_fishingservice", + "_tgt": "fishingservice_fishingservice_enterthread", + "source": "fishingservice_fishingservice", + "target": "fishingservice_fishingservice_enterthread", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/FishingService.ts", + "source_location": "L135", + "weight": 1.0, + "_src": "fishingservice_fishingservice", + "_tgt": "fishingservice_fishingservice_isownedfishingthread", + "source": "fishingservice_fishingservice", + "target": "fishingservice_fishingservice_isownedfishingthread", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/FishingService.ts", + "source_location": "L145", + "weight": 1.0, + "_src": "fishingservice_fishingservice", + "_tgt": "fishingservice_fishingservice_startsessioninthread", + "source": "fishingservice_fishingservice", + "target": "fishingservice_fishingservice_startsessioninthread", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/FishingService.ts", + "source_location": "L168", + "weight": 1.0, + "_src": "fishingservice_fishingservice", + "_tgt": "fishingservice_fishingservice_endthreadbyuser", + "source": "fishingservice_fishingservice", + "target": "fishingservice_fishingservice_endthreadbyuser", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/FishingService.ts", + "source_location": "L189", + "weight": 1.0, + "_src": "fishingservice_fishingservice", + "_tgt": "fishingservice_fishingservice_handlebutton", + "source": "fishingservice_fishingservice", + "target": "fishingservice_fishingservice_handlebutton", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/FishingService.ts", + "source_location": "L234", + "weight": 1.0, + "_src": "fishingservice_fishingservice", + "_tgt": "fishingservice_fishingservice_getprofile", + "source": "fishingservice_fishingservice", + "target": "fishingservice_fishingservice_getprofile", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/FishingService.ts", + "source_location": "L242", + "weight": 1.0, + "_src": "fishingservice_fishingservice", + "_tgt": "fishingservice_fishingservice_getcollection", + "source": "fishingservice_fishingservice", + "target": "fishingservice_fishingservice_getcollection", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/FishingService.ts", + "source_location": "L256", + "weight": 1.0, + "_src": "fishingservice_fishingservice", + "_tgt": "fishingservice_fishingservice_getsizeranking", + "source": "fishingservice_fishingservice", + "target": "fishingservice_fishingservice_getsizeranking", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/FishingService.ts", + "source_location": "L271", + "weight": 1.0, + "_src": "fishingservice_fishingservice", + "_tgt": "fishingservice_fishingservice_getfishdisplayname", + "source": "fishingservice_fishingservice", + "target": "fishingservice_fishingservice_getfishdisplayname", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/FishingService.ts", + "source_location": "L275", + "weight": 1.0, + "_src": "fishingservice_fishingservice", + "_tgt": "fishingservice_fishingservice_getraritydisplaynamebyid", + "source": "fishingservice_fishingservice", + "target": "fishingservice_fishingservice_getraritydisplaynamebyid", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/FishingService.ts", + "source_location": "L283", + "weight": 1.0, + "_src": "fishingservice_fishingservice", + "_tgt": "fishingservice_fishingservice_ticksession", + "source": "fishingservice_fishingservice", + "target": "fishingservice_fishingservice_ticksession", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/FishingService.ts", + "source_location": "L307", + "weight": 1.0, + "_src": "fishingservice_fishingservice", + "_tgt": "fishingservice_fishingservice_queueaction", + "source": "fishingservice_fishingservice", + "target": "fishingservice_fishingservice_queueaction", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/FishingService.ts", + "source_location": "L323", + "weight": 1.0, + "_src": "fishingservice_fishingservice", + "_tgt": "fishingservice_fishingservice_resolvesuccessfulpull", + "source": "fishingservice_fishingservice", + "target": "fishingservice_fishingservice_resolvesuccessfulpull", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/FishingService.ts", + "source_location": "L353", + "weight": 1.0, + "_src": "fishingservice_fishingservice", + "_tgt": "fishingservice_fishingservice_resolvemiss", + "source": "fishingservice_fishingservice", + "target": "fishingservice_fishingservice_resolvemiss", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/FishingService.ts", + "source_location": "L369", + "weight": 1.0, + "_src": "fishingservice_fishingservice", + "_tgt": "fishingservice_fishingservice_startnextphase", + "source": "fishingservice_fishingservice", + "target": "fishingservice_fishingservice_startnextphase", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/FishingService.ts", + "source_location": "L375", + "weight": 1.0, + "_src": "fishingservice_fishingservice", + "_tgt": "fishingservice_fishingservice_finishsession", + "source": "fishingservice_fishingservice", + "target": "fishingservice_fishingservice_finishsession", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/FishingService.ts", + "source_location": "L397", + "weight": 1.0, + "_src": "fishingservice_fishingservice", + "_tgt": "fishingservice_fishingservice_getactivesession", + "source": "fishingservice_fishingservice", + "target": "fishingservice_fishingservice_getactivesession", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/FishingService.ts", + "source_location": "L411", + "weight": 1.0, + "_src": "fishingservice_fishingservice", + "_tgt": "fishingservice_fishingservice_issessionstale", + "source": "fishingservice_fishingservice", + "target": "fishingservice_fishingservice_issessionstale", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/FishingService.ts", + "source_location": "L424", + "weight": 1.0, + "_src": "fishingservice_fishingservice", + "_tgt": "fishingservice_fishingservice_clearstalesession", + "source": "fishingservice_fishingservice", + "target": "fishingservice_fishingservice_clearstalesession", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/FishingService.ts", + "source_location": "L430", + "weight": 1.0, + "_src": "fishingservice_fishingservice", + "_tgt": "fishingservice_fishingservice_deletethread", + "source": "fishingservice_fishingservice", + "target": "fishingservice_fishingservice_deletethread", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/FishingService.ts", + "source_location": "L444", + "weight": 1.0, + "_src": "fishingservice_fishingservice", + "_tgt": "fishingservice_fishingservice_rendersession", + "source": "fishingservice_fishingservice", + "target": "fishingservice_fishingservice_rendersession", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/FishingService.ts", + "source_location": "L467", + "weight": 1.0, + "_src": "fishingservice_fishingservice", + "_tgt": "fishingservice_fishingservice_buildembed", + "source": "fishingservice_fishingservice", + "target": "fishingservice_fishingservice_buildembed", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/FishingService.ts", + "source_location": "L527", + "weight": 1.0, + "_src": "fishingservice_fishingservice", + "_tgt": "fishingservice_fishingservice_buildcontrolrow", + "source": "fishingservice_fishingservice", + "target": "fishingservice_fishingservice_buildcontrolrow", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/FishingService.ts", + "source_location": "L552", + "weight": 1.0, + "_src": "fishingservice_fishingservice", + "_tgt": "fishingservice_fishingservice_buildgauge", + "source": "fishingservice_fishingservice", + "target": "fishingservice_fishingservice_buildgauge", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/FishingService.ts", + "source_location": "L558", + "weight": 1.0, + "_src": "fishingservice_fishingservice", + "_tgt": "fishingservice_fishingservice_createsessioninthread", + "source": "fishingservice_fishingservice", + "target": "fishingservice_fishingservice_createsessioninthread", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/FishingService.ts", + "source_location": "L613", + "weight": 1.0, + "_src": "fishingservice_fishingservice", + "_tgt": "fishingservice_fishingservice_findorcreatethread", + "source": "fishingservice_fishingservice", + "target": "fishingservice_fishingservice_findorcreatethread", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/FishingService.ts", + "source_location": "L632", + "weight": 1.0, + "_src": "fishingservice_fishingservice", + "_tgt": "fishingservice_fishingservice_findownedfishingthread", + "source": "fishingservice_fishingservice", + "target": "fishingservice_fishingservice_findownedfishingthread", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/FishingService.ts", + "source_location": "L646", + "weight": 1.0, + "_src": "fishingservice_fishingservice", + "_tgt": "fishingservice_fishingservice_sendcatchresult", + "source": "fishingservice_fishingservice", + "target": "fishingservice_fishingservice_sendcatchresult", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/FishingService.ts", + "source_location": "L702", + "weight": 1.0, + "_src": "fishingservice_fishingservice", + "_tgt": "fishingservice_fishingservice_previewfishlane", + "source": "fishingservice_fishingservice", + "target": "fishingservice_fishingservice_previewfishlane", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/FishingService.ts", + "source_location": "L706", + "weight": 1.0, + "_src": "fishingservice_fishingservice", + "_tgt": "fishingservice_fishingservice_previewgauge", + "source": "fishingservice_fishingservice", + "target": "fishingservice_fishingservice_previewgauge", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/FishingService.ts", + "source_location": "L710", + "weight": 1.0, + "_src": "fishingservice_fishingservice", + "_tgt": "fishingservice_fishingservice_buildfishlane", + "source": "fishingservice_fishingservice", + "target": "fishingservice_fishingservice_buildfishlane", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/FishingService.ts", + "source_location": "L716", + "weight": 1.0, + "_src": "fishingservice_fishingservice", + "_tgt": "fishingservice_fishingservice_randomdirection", + "source": "fishingservice_fishingservice", + "target": "fishingservice_fishingservice_randomdirection", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/FishingService.ts", + "source_location": "L721", + "weight": 1.0, + "_src": "fishingservice_fishingservice", + "_tgt": "fishingservice_fishingservice_buildthreadname", + "source": "fishingservice_fishingservice", + "target": "fishingservice_fishingservice_buildthreadname", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/FishingService.ts", + "source_location": "L726", + "weight": 1.0, + "_src": "fishingservice_fishingservice", + "_tgt": "fishingservice_fishingservice_loadfishingcatalog", + "source": "fishingservice_fishingservice", + "target": "fishingservice_fishingservice_loadfishingcatalog", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/FishingService.ts", + "source_location": "L738", + "weight": 1.0, + "_src": "fishingservice_fishingservice", + "_tgt": "fishingservice_fishingservice_pickfishbyrate", + "source": "fishingservice_fishingservice", + "target": "fishingservice_fishingservice_pickfishbyrate", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/FishingService.ts", + "source_location": "L752", + "weight": 1.0, + "_src": "fishingservice_fishingservice", + "_tgt": "fishingservice_fishingservice_pickraritybyrate", + "source": "fishingservice_fishingservice", + "target": "fishingservice_fishingservice_pickraritybyrate", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/FishingService.ts", + "source_location": "L766", + "weight": 1.0, + "_src": "fishingservice_fishingservice", + "_tgt": "fishingservice_fishingservice_getreactionwindowms", + "source": "fishingservice_fishingservice", + "target": "fishingservice_fishingservice_getreactionwindowms", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/FishingService.ts", + "source_location": "L772", + "weight": 1.0, + "_src": "fishingservice_fishingservice", + "_tgt": "fishingservice_fishingservice_rollrange", + "source": "fishingservice_fishingservice", + "target": "fishingservice_fishingservice_rollrange", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/FishingService.ts", + "source_location": "L780", + "weight": 1.0, + "_src": "fishingservice_fishingservice", + "_tgt": "fishingservice_fishingservice_pickrandomartpath", + "source": "fishingservice_fishingservice", + "target": "fishingservice_fishingservice_pickrandomartpath", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/FishingService.ts", + "source_location": "L789", + "weight": 1.0, + "_src": "fishingservice_fishingservice", + "_tgt": "fishingservice_fishingservice_resolveresourcepath", + "source": "fishingservice_fishingservice", + "target": "fishingservice_fishingservice_resolveresourcepath", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/FishingService.ts", + "source_location": "L793", + "weight": 1.0, + "_src": "fishingservice_fishingservice", + "_tgt": "fishingservice_fishingservice_loadfishingrarities", + "source": "fishingservice_fishingservice", + "target": "fishingservice_fishingservice_loadfishingrarities", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/FishingService.ts", + "source_location": "L805", + "weight": 1.0, + "_src": "fishingservice_fishingservice", + "_tgt": "fishingservice_fishingservice_getraritydisplayname", + "source": "fishingservice_fishingservice", + "target": "fishingservice_fishingservice_getraritydisplayname", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/FishingService.ts", + "source_location": "L809", + "weight": 1.0, + "_src": "fishingservice_fishingservice", + "_tgt": "fishingservice_fishingservice_recordprofileresult", + "source": "fishingservice_fishingservice", + "target": "fishingservice_fishingservice_recordprofileresult", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/FishingService.ts", + "source_location": "L852", + "weight": 1.0, + "_src": "fishingservice_fishingservice", + "_tgt": "fishingservice_fishingservice_recordcollectioncatch", + "source": "fishingservice_fishingservice", + "target": "fishingservice_fishingservice_recordcollectioncatch", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/FishingService.ts", + "source_location": "L898", + "weight": 1.0, + "_src": "fishingservice_fishingservice", + "_tgt": "fishingservice_fishingservice_getraritycountfield", + "source": "fishingservice_fishingservice", + "target": "fishingservice_fishingservice_getraritycountfield", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/FishingService.ts", + "source_location": "L906", + "weight": 1.0, + "_src": "fishingservice_fishingservice", + "_tgt": "fishingservice_fishingservice_getrarityrank", + "source": "fishingservice_fishingservice", + "target": "fishingservice_fishingservice_getrarityrank", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/FishingService.ts", + "source_location": "L914", + "weight": 1.0, + "_src": "fishingservice_fishingservice", + "_tgt": "fishingservice_fishingservice_getraritybadge", + "source": "fishingservice_fishingservice", + "target": "fishingservice_fishingservice_getraritybadge", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/FishingService.ts", + "source_location": "L922", + "weight": 1.0, + "_src": "fishingservice_fishingservice", + "_tgt": "fishingservice_fishingservice_composerarityart", + "source": "fishingservice_fishingservice", + "target": "fishingservice_fishingservice_composerarityart", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/FishingService.ts", + "source_location": "L946", + "weight": 1.0, + "_src": "fishingservice_fishingservice", + "_tgt": "fishingservice_fishingservice_hextocolorint", + "source": "fishingservice_fishingservice", + "target": "fishingservice_fishingservice_hextocolorint", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/FishingService.ts", + "source_location": "L950", + "weight": 1.0, + "_src": "fishingservice_fishingservice", + "_tgt": "fishingservice_fishingservice_rollcatchsizecm", + "source": "fishingservice_fishingservice", + "target": "fishingservice_fishingservice_rollcatchsizecm", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/FishingService.ts", + "source_location": "L956", + "weight": 1.0, + "_src": "fishingservice_fishingservice", + "_tgt": "fishingservice_fishingservice_formatselectedaction", + "source": "fishingservice_fishingservice", + "target": "fishingservice_fishingservice_formatselectedaction", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/FishingService.ts", + "source_location": "L964", + "weight": 1.0, + "_src": "fishingservice_fishingservice", + "_tgt": "fishingservice_fishingservice_cleartick", + "source": "fishingservice_fishingservice", + "target": "fishingservice_fishingservice_cleartick", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/FishingService.ts", + "source_location": "L971", + "weight": 1.0, + "_src": "fishingservice_fishingservice", + "_tgt": "fishingservice_fishingservice_getuserkey", + "source": "fishingservice_fishingservice", + "target": "fishingservice_fishingservice_getuserkey", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/FishingService.ts", + "source_location": "L975", + "weight": 1.0, + "_src": "fishingservice_fishingservice", + "_tgt": "fishingservice_fishingservice_rolldecimalrange", + "source": "fishingservice_fishingservice", + "target": "fishingservice_fishingservice_rolldecimalrange", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/FishingService.ts", + "source_location": "L114", + "weight": 0.8, + "_src": "fishingservice_fishingservice_enterthread", + "_tgt": "fishingservice_fishingservice_getuserkey", + "source": "fishingservice_fishingservice_enterthread", + "target": "fishingservice_fishingservice_getuserkey", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/FishingService.ts", + "source_location": "L120", + "weight": 0.8, + "_src": "fishingservice_fishingservice_enterthread", + "_tgt": "fishingservice_fishingservice_findorcreatethread", + "source": "fishingservice_fishingservice_enterthread", + "target": "fishingservice_fishingservice_findorcreatethread", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/FishingService.ts", + "source_location": "L142", + "weight": 0.8, + "_src": "fishingservice_fishingservice_isownedfishingthread", + "_tgt": "fishingservice_fishingservice_buildthreadname", + "source": "fishingservice_fishingservice_isownedfishingthread", + "target": "fishingservice_fishingservice_buildthreadname", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/FishingService.ts", + "source_location": "L146", + "weight": 0.8, + "_src": "fishingservice_fishingservice_startsessioninthread", + "_tgt": "fishingservice_fishingservice_isownedfishingthread", + "source": "fishingservice_fishingservice_isownedfishingthread", + "target": "fishingservice_fishingservice_startsessioninthread", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/FishingService.ts", + "source_location": "L633", + "weight": 0.8, + "_src": "fishingservice_fishingservice_findownedfishingthread", + "_tgt": "fishingservice_fishingservice_isownedfishingthread", + "source": "fishingservice_fishingservice_isownedfishingthread", + "target": "fishingservice_fishingservice_findownedfishingthread", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/FishingService.ts", + "source_location": "L150", + "weight": 0.8, + "_src": "fishingservice_fishingservice_startsessioninthread", + "_tgt": "fishingservice_fishingservice_getuserkey", + "source": "fishingservice_fishingservice_startsessioninthread", + "target": "fishingservice_fishingservice_getuserkey", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/FishingService.ts", + "source_location": "L151", + "weight": 0.8, + "_src": "fishingservice_fishingservice_startsessioninthread", + "_tgt": "fishingservice_fishingservice_getactivesession", + "source": "fishingservice_fishingservice_startsessioninthread", + "target": "fishingservice_fishingservice_getactivesession", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/FishingService.ts", + "source_location": "L157", + "weight": 0.8, + "_src": "fishingservice_fishingservice_startsessioninthread", + "_tgt": "fishingservice_fishingservice_createsessioninthread", + "source": "fishingservice_fishingservice_startsessioninthread", + "target": "fishingservice_fishingservice_createsessioninthread", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/FishingService.ts", + "source_location": "L173", + "weight": 0.8, + "_src": "fishingservice_fishingservice_endthreadbyuser", + "_tgt": "fishingservice_fishingservice_getactivesession", + "source": "fishingservice_fishingservice_endthreadbyuser", + "target": "fishingservice_fishingservice_getactivesession", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/FishingService.ts", + "source_location": "L173", + "weight": 0.8, + "_src": "fishingservice_fishingservice_endthreadbyuser", + "_tgt": "fishingservice_fishingservice_getuserkey", + "source": "fishingservice_fishingservice_endthreadbyuser", + "target": "fishingservice_fishingservice_getuserkey", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/FishingService.ts", + "source_location": "L175", + "weight": 0.8, + "_src": "fishingservice_fishingservice_endthreadbyuser", + "_tgt": "fishingservice_fishingservice_findownedfishingthread", + "source": "fishingservice_fishingservice_endthreadbyuser", + "target": "fishingservice_fishingservice_findownedfishingthread", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/FishingService.ts", + "source_location": "L180", + "weight": 0.8, + "_src": "fishingservice_fishingservice_endthreadbyuser", + "_tgt": "fishingservice_fishingservice_deletethread", + "source": "fishingservice_fishingservice_endthreadbyuser", + "target": "fishingservice_fishingservice_deletethread", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/FishingService.ts", + "source_location": "L185", + "weight": 0.8, + "_src": "fishingservice_fishingservice_endthreadbyuser", + "_tgt": "fishingservice_fishingservice_finishsession", + "source": "fishingservice_fishingservice_endthreadbyuser", + "target": "fishingservice_fishingservice_finishsession", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/FishingService.ts", + "source_location": "L192", + "weight": 0.8, + "_src": "fishingservice_fishingservice_handlebutton", + "_tgt": "fishingservice_fishingservice_getuserkey", + "source": "fishingservice_fishingservice_handlebutton", + "target": "fishingservice_fishingservice_getuserkey", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/FishingService.ts", + "source_location": "L197", + "weight": 0.8, + "_src": "fishingservice_fishingservice_handlebutton", + "_tgt": "fishingservice_fishingservice_buildcontrolrow", + "source": "fishingservice_fishingservice_handlebutton", + "target": "fishingservice_fishingservice_buildcontrolrow", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/FishingService.ts", + "source_location": "L231", + "weight": 0.8, + "_src": "fishingservice_fishingservice_handlebutton", + "_tgt": "fishingservice_fishingservice_queueaction", + "source": "fishingservice_fishingservice_handlebutton", + "target": "fishingservice_fishingservice_queueaction", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/FishingService.ts", + "source_location": "L812", + "weight": 0.8, + "_src": "fishingservice_fishingservice_recordprofileresult", + "_tgt": "fishingservice_fishingservice_getprofile", + "source": "fishingservice_fishingservice_getprofile", + "target": "fishingservice_fishingservice_recordprofileresult", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/FishingService.ts", + "source_location": "L280", + "weight": 0.8, + "_src": "fishingservice_fishingservice_getraritydisplaynamebyid", + "_tgt": "fishingservice_fishingservice_getraritydisplayname", + "source": "fishingservice_fishingservice_getraritydisplaynamebyid", + "target": "fishingservice_fishingservice_getraritydisplayname", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/FishingService.ts", + "source_location": "L284", + "weight": 0.8, + "_src": "fishingservice_fishingservice_ticksession", + "_tgt": "fishingservice_fishingservice_getuserkey", + "source": "fishingservice_fishingservice_ticksession", + "target": "fishingservice_fishingservice_getuserkey", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/FishingService.ts", + "source_location": "L285", + "weight": 0.8, + "_src": "fishingservice_fishingservice_ticksession", + "_tgt": "fishingservice_fishingservice_cleartick", + "source": "fishingservice_fishingservice_ticksession", + "target": "fishingservice_fishingservice_cleartick", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/FishingService.ts", + "source_location": "L290", + "weight": 0.8, + "_src": "fishingservice_fishingservice_ticksession", + "_tgt": "fishingservice_fishingservice_getreactionwindowms", + "source": "fishingservice_fishingservice_ticksession", + "target": "fishingservice_fishingservice_getreactionwindowms", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/FishingService.ts", + "source_location": "L298", + "weight": 0.8, + "_src": "fishingservice_fishingservice_ticksession", + "_tgt": "fishingservice_fishingservice_resolvesuccessfulpull", + "source": "fishingservice_fishingservice_ticksession", + "target": "fishingservice_fishingservice_resolvesuccessfulpull", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/FishingService.ts", + "source_location": "L303", + "weight": 0.8, + "_src": "fishingservice_fishingservice_ticksession", + "_tgt": "fishingservice_fishingservice_resolvemiss", + "source": "fishingservice_fishingservice_ticksession", + "target": "fishingservice_fishingservice_resolvemiss", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/FishingService.ts", + "source_location": "L314", + "weight": 0.8, + "_src": "fishingservice_fishingservice_queueaction", + "_tgt": "fishingservice_fishingservice_startnextphase", + "source": "fishingservice_fishingservice_queueaction", + "target": "fishingservice_fishingservice_startnextphase", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/FishingService.ts", + "source_location": "L315", + "weight": 0.8, + "_src": "fishingservice_fishingservice_queueaction", + "_tgt": "fishingservice_fishingservice_rendersession", + "source": "fishingservice_fishingservice_queueaction", + "target": "fishingservice_fishingservice_rendersession", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/FishingService.ts", + "source_location": "L324", + "weight": 0.8, + "_src": "fishingservice_fishingservice_resolvesuccessfulpull", + "_tgt": "fishingservice_fishingservice_rollrange", + "source": "fishingservice_fishingservice_resolvesuccessfulpull", + "target": "fishingservice_fishingservice_rollrange", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/FishingService.ts", + "source_location": "L338", + "weight": 0.8, + "_src": "fishingservice_fishingservice_resolvesuccessfulpull", + "_tgt": "fishingservice_fishingservice_rollcatchsizecm", + "source": "fishingservice_fishingservice_resolvesuccessfulpull", + "target": "fishingservice_fishingservice_rollcatchsizecm", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/FishingService.ts", + "source_location": "L340", + "weight": 0.8, + "_src": "fishingservice_fishingservice_resolvesuccessfulpull", + "_tgt": "fishingservice_fishingservice_finishsession", + "source": "fishingservice_fishingservice_resolvesuccessfulpull", + "target": "fishingservice_fishingservice_finishsession", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/FishingService.ts", + "source_location": "L349", + "weight": 0.8, + "_src": "fishingservice_fishingservice_resolvesuccessfulpull", + "_tgt": "fishingservice_fishingservice_startnextphase", + "source": "fishingservice_fishingservice_resolvesuccessfulpull", + "target": "fishingservice_fishingservice_startnextphase", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/FishingService.ts", + "source_location": "L350", + "weight": 0.8, + "_src": "fishingservice_fishingservice_resolvesuccessfulpull", + "_tgt": "fishingservice_fishingservice_rendersession", + "source": "fishingservice_fishingservice_resolvesuccessfulpull", + "target": "fishingservice_fishingservice_rendersession", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/FishingService.ts", + "source_location": "L361", + "weight": 0.8, + "_src": "fishingservice_fishingservice_resolvemiss", + "_tgt": "fishingservice_fishingservice_finishsession", + "source": "fishingservice_fishingservice_resolvemiss", + "target": "fishingservice_fishingservice_finishsession", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/FishingService.ts", + "source_location": "L365", + "weight": 0.8, + "_src": "fishingservice_fishingservice_resolvemiss", + "_tgt": "fishingservice_fishingservice_startnextphase", + "source": "fishingservice_fishingservice_resolvemiss", + "target": "fishingservice_fishingservice_startnextphase", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/FishingService.ts", + "source_location": "L366", + "weight": 0.8, + "_src": "fishingservice_fishingservice_resolvemiss", + "_tgt": "fishingservice_fishingservice_rendersession", + "source": "fishingservice_fishingservice_resolvemiss", + "target": "fishingservice_fishingservice_rendersession", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/FishingService.ts", + "source_location": "L372", + "weight": 0.8, + "_src": "fishingservice_fishingservice_startnextphase", + "_tgt": "fishingservice_fishingservice_randomdirection", + "source": "fishingservice_fishingservice_startnextphase", + "target": "fishingservice_fishingservice_randomdirection", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/FishingService.ts", + "source_location": "L377", + "weight": 0.8, + "_src": "fishingservice_fishingservice_finishsession", + "_tgt": "fishingservice_fishingservice_cleartick", + "source": "fishingservice_fishingservice_finishsession", + "target": "fishingservice_fishingservice_cleartick", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/FishingService.ts", + "source_location": "L381", + "weight": 0.8, + "_src": "fishingservice_fishingservice_finishsession", + "_tgt": "fishingservice_fishingservice_recordprofileresult", + "source": "fishingservice_fishingservice_finishsession", + "target": "fishingservice_fishingservice_recordprofileresult", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/FishingService.ts", + "source_location": "L383", + "weight": 0.8, + "_src": "fishingservice_fishingservice_finishsession", + "_tgt": "fishingservice_fishingservice_rendersession", + "source": "fishingservice_fishingservice_finishsession", + "target": "fishingservice_fishingservice_rendersession", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/FishingService.ts", + "source_location": "L385", + "weight": 0.8, + "_src": "fishingservice_fishingservice_finishsession", + "_tgt": "fishingservice_fishingservice_getuserkey", + "source": "fishingservice_fishingservice_finishsession", + "target": "fishingservice_fishingservice_getuserkey", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/FishingService.ts", + "source_location": "L389", + "weight": 0.8, + "_src": "fishingservice_fishingservice_finishsession", + "_tgt": "fishingservice_fishingservice_sendcatchresult", + "source": "fishingservice_fishingservice_finishsession", + "target": "fishingservice_fishingservice_sendcatchresult", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/FishingService.ts", + "source_location": "L393", + "weight": 0.8, + "_src": "fishingservice_fishingservice_finishsession", + "_tgt": "fishingservice_fishingservice_deletethread", + "source": "fishingservice_fishingservice_finishsession", + "target": "fishingservice_fishingservice_deletethread", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/FishingService.ts", + "source_location": "L403", + "weight": 0.8, + "_src": "fishingservice_fishingservice_getactivesession", + "_tgt": "fishingservice_fishingservice_issessionstale", + "source": "fishingservice_fishingservice_getactivesession", + "target": "fishingservice_fishingservice_issessionstale", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/FishingService.ts", + "source_location": "L404", + "weight": 0.8, + "_src": "fishingservice_fishingservice_getactivesession", + "_tgt": "fishingservice_fishingservice_clearstalesession", + "source": "fishingservice_fishingservice_getactivesession", + "target": "fishingservice_fishingservice_clearstalesession", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/FishingService.ts", + "source_location": "L425", + "weight": 0.8, + "_src": "fishingservice_fishingservice_clearstalesession", + "_tgt": "fishingservice_fishingservice_cleartick", + "source": "fishingservice_fishingservice_clearstalesession", + "target": "fishingservice_fishingservice_cleartick", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/FishingService.ts", + "source_location": "L426", + "weight": 0.8, + "_src": "fishingservice_fishingservice_clearstalesession", + "_tgt": "fishingservice_fishingservice_getuserkey", + "source": "fishingservice_fishingservice_clearstalesession", + "target": "fishingservice_fishingservice_getuserkey", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/FishingService.ts", + "source_location": "L454", + "weight": 0.8, + "_src": "fishingservice_fishingservice_rendersession", + "_tgt": "fishingservice_fishingservice_buildembed", + "source": "fishingservice_fishingservice_rendersession", + "target": "fishingservice_fishingservice_buildembed", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/FishingService.ts", + "source_location": "L455", + "weight": 0.8, + "_src": "fishingservice_fishingservice_rendersession", + "_tgt": "fishingservice_fishingservice_buildcontrolrow", + "source": "fishingservice_fishingservice_rendersession", + "target": "fishingservice_fishingservice_buildcontrolrow", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/FishingService.ts", + "source_location": "L471", + "weight": 0.8, + "_src": "fishingservice_fishingservice_buildembed", + "_tgt": "fishingservice_fishingservice_buildgauge", + "source": "fishingservice_fishingservice_buildembed", + "target": "fishingservice_fishingservice_buildgauge", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/FishingService.ts", + "source_location": "L474", + "weight": 0.8, + "_src": "fishingservice_fishingservice_buildembed", + "_tgt": "fishingservice_fishingservice_formatselectedaction", + "source": "fishingservice_fishingservice_buildembed", + "target": "fishingservice_fishingservice_formatselectedaction", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/FishingService.ts", + "source_location": "L479", + "weight": 0.8, + "_src": "fishingservice_fishingservice_buildembed", + "_tgt": "fishingservice_fishingservice_hextocolorint", + "source": "fishingservice_fishingservice_buildembed", + "target": "fishingservice_fishingservice_hextocolorint", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/FishingService.ts", + "source_location": "L492", + "weight": 0.8, + "_src": "fishingservice_fishingservice_buildembed", + "_tgt": "fishingservice_fishingservice_buildfishlane", + "source": "fishingservice_fishingservice_buildembed", + "target": "fishingservice_fishingservice_buildfishlane", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/FishingService.ts", + "source_location": "L590", + "weight": 0.8, + "_src": "fishingservice_fishingservice_createsessioninthread", + "_tgt": "fishingservice_fishingservice_buildembed", + "source": "fishingservice_fishingservice_buildembed", + "target": "fishingservice_fishingservice_createsessioninthread", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/FishingService.ts", + "source_location": "L591", + "weight": 0.8, + "_src": "fishingservice_fishingservice_createsessioninthread", + "_tgt": "fishingservice_fishingservice_buildcontrolrow", + "source": "fishingservice_fishingservice_buildcontrolrow", + "target": "fishingservice_fishingservice_createsessioninthread", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/FishingService.ts", + "source_location": "L707", + "weight": 0.8, + "_src": "fishingservice_fishingservice_previewgauge", + "_tgt": "fishingservice_fishingservice_buildgauge", + "source": "fishingservice_fishingservice_buildgauge", + "target": "fishingservice_fishingservice_previewgauge", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/FishingService.ts", + "source_location": "L565", + "weight": 0.8, + "_src": "fishingservice_fishingservice_createsessioninthread", + "_tgt": "fishingservice_fishingservice_pickfishbyrate", + "source": "fishingservice_fishingservice_createsessioninthread", + "target": "fishingservice_fishingservice_pickfishbyrate", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/FishingService.ts", + "source_location": "L566", + "weight": 0.8, + "_src": "fishingservice_fishingservice_createsessioninthread", + "_tgt": "fishingservice_fishingservice_pickraritybyrate", + "source": "fishingservice_fishingservice_createsessioninthread", + "target": "fishingservice_fishingservice_pickraritybyrate", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/FishingService.ts", + "source_location": "L576", + "weight": 0.8, + "_src": "fishingservice_fishingservice_createsessioninthread", + "_tgt": "fishingservice_fishingservice_randomdirection", + "source": "fishingservice_fishingservice_createsessioninthread", + "target": "fishingservice_fishingservice_randomdirection", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/FishingService.ts", + "source_location": "L599", + "weight": 0.8, + "_src": "fishingservice_fishingservice_createsessioninthread", + "_tgt": "fishingservice_fishingservice_getuserkey", + "source": "fishingservice_fishingservice_createsessioninthread", + "target": "fishingservice_fishingservice_getuserkey", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/FishingService.ts", + "source_location": "L614", + "weight": 0.8, + "_src": "fishingservice_fishingservice_findorcreatethread", + "_tgt": "fishingservice_fishingservice_buildthreadname", + "source": "fishingservice_fishingservice_findorcreatethread", + "target": "fishingservice_fishingservice_buildthreadname", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/FishingService.ts", + "source_location": "L647", + "weight": 0.8, + "_src": "fishingservice_fishingservice_sendcatchresult", + "_tgt": "fishingservice_fishingservice_pickrandomartpath", + "source": "fishingservice_fishingservice_sendcatchresult", + "target": "fishingservice_fishingservice_pickrandomartpath", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/FishingService.ts", + "source_location": "L648", + "weight": 0.8, + "_src": "fishingservice_fishingservice_sendcatchresult", + "_tgt": "fishingservice_fishingservice_getraritydisplayname", + "source": "fishingservice_fishingservice_sendcatchresult", + "target": "fishingservice_fishingservice_getraritydisplayname", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/FishingService.ts", + "source_location": "L649", + "weight": 0.8, + "_src": "fishingservice_fishingservice_sendcatchresult", + "_tgt": "fishingservice_fishingservice_getraritybadge", + "source": "fishingservice_fishingservice_sendcatchresult", + "target": "fishingservice_fishingservice_getraritybadge", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/FishingService.ts", + "source_location": "L651", + "weight": 0.8, + "_src": "fishingservice_fishingservice_sendcatchresult", + "_tgt": "fishingservice_fishingservice_hextocolorint", + "source": "fishingservice_fishingservice_sendcatchresult", + "target": "fishingservice_fishingservice_hextocolorint", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/FishingService.ts", + "source_location": "L675", + "weight": 0.8, + "_src": "fishingservice_fishingservice_sendcatchresult", + "_tgt": "fishingservice_fishingservice_composerarityart", + "source": "fishingservice_fishingservice_sendcatchresult", + "target": "fishingservice_fishingservice_composerarityart", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/FishingService.ts", + "source_location": "L703", + "weight": 0.8, + "_src": "fishingservice_fishingservice_previewfishlane", + "_tgt": "fishingservice_fishingservice_buildfishlane", + "source": "fishingservice_fishingservice_previewfishlane", + "target": "fishingservice_fishingservice_buildfishlane", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/FishingService.ts", + "source_location": "L989", + "weight": 0.8, + "_src": "fishingservice_buildfishinglane", + "_tgt": "fishingservice_fishingservice_previewfishlane", + "source": "fishingservice_fishingservice_previewfishlane", + "target": "fishingservice_buildfishinglane", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/FishingService.ts", + "source_location": "L985", + "weight": 0.8, + "_src": "fishingservice_buildfishinggauge", + "_tgt": "fishingservice_fishingservice_previewgauge", + "source": "fishingservice_fishingservice_previewgauge", + "target": "fishingservice_buildfishinggauge", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/FishingService.ts", + "source_location": "L727", + "weight": 0.8, + "_src": "fishingservice_fishingservice_loadfishingcatalog", + "_tgt": "fishingservice_fishingservice_resolveresourcepath", + "source": "fishingservice_fishingservice_loadfishingcatalog", + "target": "fishingservice_fishingservice_resolveresourcepath", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/FishingService.ts", + "source_location": "L786", + "weight": 0.8, + "_src": "fishingservice_fishingservice_pickrandomartpath", + "_tgt": "fishingservice_fishingservice_resolveresourcepath", + "source": "fishingservice_fishingservice_pickrandomartpath", + "target": "fishingservice_fishingservice_resolveresourcepath", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/FishingService.ts", + "source_location": "L794", + "weight": 0.8, + "_src": "fishingservice_fishingservice_loadfishingrarities", + "_tgt": "fishingservice_fishingservice_resolveresourcepath", + "source": "fishingservice_fishingservice_resolveresourcepath", + "target": "fishingservice_fishingservice_loadfishingrarities", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/FishingService.ts", + "source_location": "L811", + "weight": 0.8, + "_src": "fishingservice_fishingservice_recordprofileresult", + "_tgt": "fishingservice_fishingservice_getraritycountfield", + "source": "fishingservice_fishingservice_recordprofileresult", + "target": "fishingservice_fishingservice_getraritycountfield", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/FishingService.ts", + "source_location": "L848", + "weight": 0.8, + "_src": "fishingservice_fishingservice_recordprofileresult", + "_tgt": "fishingservice_fishingservice_recordcollectioncatch", + "source": "fishingservice_fishingservice_recordprofileresult", + "target": "fishingservice_fishingservice_recordcollectioncatch", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/FishingService.ts", + "source_location": "L853", + "weight": 0.8, + "_src": "fishingservice_fishingservice_recordcollectioncatch", + "_tgt": "fishingservice_fishingservice_getrarityrank", + "source": "fishingservice_fishingservice_recordcollectioncatch", + "target": "fishingservice_fishingservice_getrarityrank", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/FishingService.ts", + "source_location": "L951", + "weight": 0.8, + "_src": "fishingservice_fishingservice_rollcatchsizecm", + "_tgt": "fishingservice_fishingservice_rolldecimalrange", + "source": "fishingservice_fishingservice_rollcatchsizecm", + "target": "fishingservice_fishingservice_rolldecimalrange", + "confidence_score": 0.5 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/WebhookService.ts", + "source_location": "L4", + "weight": 1.0, + "_src": "webhookservice", + "_tgt": "webhookservice_webhookservice", + "source": "webhookservice", + "target": "webhookservice_webhookservice", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/WebhookService.ts", + "source_location": "L13", + "weight": 1.0, + "_src": "webhookservice_webhookservice", + "_tgt": "webhookservice_webhookservice_getwebhookclient", + "source": "webhookservice_webhookservice", + "target": "webhookservice_webhookservice_getwebhookclient", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/AuditLogService.ts", + "source_location": "L23", + "weight": 1.0, + "_src": "auditlogservice", + "_tgt": "auditlogservice_auditlogservice", + "source": "auditlogservice", + "target": "auditlogservice_auditlogservice", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "src/services/EventService.ts", + "source_location": "L4", + "weight": 1.0, + "_src": "eventservice", + "_tgt": "auditlogservice", + "source": "auditlogservice", + "target": "eventservice", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/AuditLogService.ts", + "source_location": "L29", + "weight": 1.0, + "_src": "auditlogservice_auditlogservice", + "_tgt": "auditlogservice_auditlogservice_log", + "source": "auditlogservice_auditlogservice", + "target": "auditlogservice_auditlogservice_log", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/AuditLogService.ts", + "source_location": "L71", + "weight": 1.0, + "_src": "auditlogservice_auditlogservice", + "_tgt": "auditlogservice_auditlogservice_setchannel", + "source": "auditlogservice_auditlogservice", + "target": "auditlogservice_auditlogservice_setchannel", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/AuditLogService.ts", + "source_location": "L87", + "weight": 1.0, + "_src": "auditlogservice_auditlogservice", + "_tgt": "auditlogservice_auditlogservice_clearchannel", + "source": "auditlogservice_auditlogservice", + "target": "auditlogservice_auditlogservice_clearchannel", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/AuditLogService.ts", + "source_location": "L96", + "weight": 1.0, + "_src": "auditlogservice_auditlogservice", + "_tgt": "auditlogservice_auditlogservice_getchannel", + "source": "auditlogservice_auditlogservice", + "target": "auditlogservice_auditlogservice_getchannel", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/AuditLogService.ts", + "source_location": "L107", + "weight": 1.0, + "_src": "auditlogservice_auditlogservice", + "_tgt": "auditlogservice_auditlogservice_setfilter", + "source": "auditlogservice_auditlogservice", + "target": "auditlogservice_auditlogservice_setfilter", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/AuditLogService.ts", + "source_location": "L31", + "weight": 0.8, + "_src": "auditlogservice_auditlogservice_log", + "_tgt": "auditlogservice_auditlogservice_getchannel", + "source": "auditlogservice_auditlogservice_log", + "target": "auditlogservice_auditlogservice_getchannel", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/AuditLogService.ts", + "source_location": "L108", + "weight": 0.8, + "_src": "auditlogservice_auditlogservice_setfilter", + "_tgt": "auditlogservice_auditlogservice_getchannel", + "source": "auditlogservice_auditlogservice_getchannel", + "target": "auditlogservice_auditlogservice_setfilter", + "confidence_score": 0.5 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/EventService.ts", + "source_location": "L10", + "weight": 1.0, + "_src": "eventservice", + "_tgt": "eventservice_todiscordtimestamps", + "source": "eventservice", + "target": "eventservice_todiscordtimestamps", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/EventService.ts", + "source_location": "L18", + "weight": 1.0, + "_src": "eventservice", + "_tgt": "eventservice_buildeventembed", + "source": "eventservice", + "target": "eventservice_buildeventembed", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/EventService.ts", + "source_location": "L68", + "weight": 1.0, + "_src": "eventservice", + "_tgt": "eventservice_resolveannouncementchannel", + "source": "eventservice", + "target": "eventservice_resolveannouncementchannel", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/EventService.ts", + "source_location": "L79", + "weight": 1.0, + "_src": "eventservice", + "_tgt": "eventservice_eventservice", + "source": "eventservice", + "target": "eventservice_eventservice", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/EventService.ts", + "source_location": "L25", + "weight": 0.8, + "_src": "eventservice_buildeventembed", + "_tgt": "eventservice_todiscordtimestamps", + "source": "eventservice_todiscordtimestamps", + "target": "eventservice_buildeventembed", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/EventService.ts", + "source_location": "L99", + "weight": 0.8, + "_src": "eventservice_eventservice_announceevent", + "_tgt": "eventservice_buildeventembed", + "source": "eventservice_buildeventembed", + "target": "eventservice_eventservice_announceevent", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/EventService.ts", + "source_location": "L193", + "weight": 0.8, + "_src": "eventservice_eventservice_processdueevents", + "_tgt": "eventservice_buildeventembed", + "source": "eventservice_buildeventembed", + "target": "eventservice_eventservice_processdueevents", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/EventService.ts", + "source_location": "L236", + "weight": 0.8, + "_src": "eventservice_eventservice_sendreminder", + "_tgt": "eventservice_buildeventembed", + "source": "eventservice_buildeventembed", + "target": "eventservice_eventservice_sendreminder", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/EventService.ts", + "source_location": "L94", + "weight": 0.8, + "_src": "eventservice_eventservice_announceevent", + "_tgt": "eventservice_resolveannouncementchannel", + "source": "eventservice_resolveannouncementchannel", + "target": "eventservice_eventservice_announceevent", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/EventService.ts", + "source_location": "L159", + "weight": 0.8, + "_src": "eventservice_eventservice_processdueevents", + "_tgt": "eventservice_resolveannouncementchannel", + "source": "eventservice_resolveannouncementchannel", + "target": "eventservice_eventservice_processdueevents", + "confidence_score": 0.5 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/EventService.ts", + "source_location": "L82", + "weight": 1.0, + "_src": "eventservice_eventservice", + "_tgt": "eventservice_eventservice_announceevent", + "source": "eventservice_eventservice", + "target": "eventservice_eventservice_announceevent", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/EventService.ts", + "source_location": "L115", + "weight": 1.0, + "_src": "eventservice_eventservice", + "_tgt": "eventservice_eventservice_startreminderloop", + "source": "eventservice_eventservice", + "target": "eventservice_eventservice_startreminderloop", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/EventService.ts", + "source_location": "L133", + "weight": 1.0, + "_src": "eventservice_eventservice", + "_tgt": "eventservice_eventservice_stopreminderloop", + "source": "eventservice_eventservice", + "target": "eventservice_eventservice_stopreminderloop", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/EventService.ts", + "source_location": "L141", + "weight": 1.0, + "_src": "eventservice_eventservice", + "_tgt": "eventservice_eventservice_processdueevents", + "source": "eventservice_eventservice", + "target": "eventservice_eventservice_processdueevents", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/EventService.ts", + "source_location": "L226", + "weight": 1.0, + "_src": "eventservice_eventservice", + "_tgt": "eventservice_eventservice_sendreminder", + "source": "eventservice_eventservice", + "target": "eventservice_eventservice_sendreminder", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/EventService.ts", + "source_location": "L120", + "weight": 0.8, + "_src": "eventservice_eventservice_startreminderloop", + "_tgt": "eventservice_eventservice_processdueevents", + "source": "eventservice_eventservice_startreminderloop", + "target": "eventservice_eventservice_processdueevents", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "confidence": "INFERRED", + "source_file": "src/services/EventService.ts", + "source_location": "L172", + "weight": 0.8, + "_src": "eventservice_eventservice_processdueevents", + "_tgt": "eventservice_eventservice_sendreminder", + "source": "eventservice_eventservice_processdueevents", + "target": "eventservice_eventservice_sendreminder", + "confidence_score": 0.5 + }, + { + "type": "relationship", + "description": "\ud575\uc2ec \uba54\ucee4\ub2c8\uc998\uc744 \uc815\uc758\ud568.", + "_src": "FishingGameConcept", + "_tgt": "FishingGameConcept", + "source": "FishingGameConcept", + "target": "FishingGameConcept", + "confidence_score": 1.0 + }, + { + "type": "uses", + "_src": "files/src/utils/config.ts", + "_tgt": "files/src/main.ts", + "source": "files/src/main.ts", + "target": "files/src/utils/config.ts", + "confidence_score": 1.0 + }, + { + "type": "secures", + "_src": "Node_B", + "_tgt": "Node_A", + "source": "Node_A", + "target": "Node_B", + "confidence_score": 1.0 + }, + { + "type": "supports", + "_src": "Node_C", + "_tgt": "Node_A", + "source": "Node_A", + "target": "Node_C", + "confidence_score": 1.0 + }, + { + "type": "facilitates", + "_src": "Node_F", + "_tgt": "Node_A", + "source": "Node_A", + "target": "Node_F", + "confidence_score": 1.0 + }, + { + "type": "is_managed_by", + "_src": "Node_G", + "_tgt": "Node_A", + "source": "Node_A", + "target": "Node_G", + "confidence_score": 1.0 + }, + { + "type": "exposed_via", + "_src": "Node_A", + "_tgt": "Node_I", + "source": "Node_A", + "target": "Node_I", + "confidence_score": 1.0 + }, + { + "type": "handles_transactions_for", + "_src": "Node_E", + "_tgt": "Node_A", + "source": "Node_A", + "target": "Node_E", + "confidence_score": 1.0 + }, + { + "type": "sends_data_to", + "_src": "Node_H", + "_tgt": "Node_A", + "source": "Node_A", + "target": "Node_H", + "confidence_score": 1.0 + }, + { + "type": "gatekept_by", + "_src": "Node_B", + "_tgt": "Node_I", + "source": "Node_B", + "target": "Node_I", + "confidence_score": 1.0 + }, + { + "type": "validates_with", + "_src": "Node_E", + "_tgt": "Node_B", + "source": "Node_B", + "target": "Node_E", + "confidence_score": 1.0 + }, + { + "type": "reads_from", + "_src": "Node_G", + "_tgt": "Node_C", + "source": "Node_C", + "target": "Node_G", + "confidence_score": 1.0 + }, + { + "type": "consumes", + "_src": "Node_D", + "_tgt": "Node_I", + "source": "Node_D", + "target": "Node_I", + "confidence_score": 1.0 + }, + { + "type": "is_consumed_by", + "_src": "Node_F", + "_tgt": "Node_D", + "source": "Node_D", + "target": "Node_F", + "confidence_score": 1.0 + }, + { + "type": "is_logged_through", + "_src": "Node_H", + "_tgt": "Node_I", + "source": "Node_H", + "target": "Node_I", + "confidence_score": 1.0 + } + ], + "hyperedges": [] +} \ No newline at end of file diff --git a/graphify-out/manifest.json b/graphify-out/manifest.json new file mode 100644 index 0000000..5be0f48 --- /dev/null +++ b/graphify-out/manifest.json @@ -0,0 +1,126 @@ +{ + "jest.config.js": 1774571422.4803143, + "prisma.config.ts": 1774918538.6434188, + "prisma/seed.ts": 1774918538.6496096, + "tests/errors/BotError.test.ts": 1774588825.527758, + "tests/errors/ErrorReporter.test.ts": 1774588849.277971, + "tests/i18n/i18n.test.ts": 1774600096.8217826, + "tests/services/InviteService.test.ts": 1774571740.0343363, + "tests/services/FishingService.test.ts": 1775722242.1879332, + "tests/services/MusicService.test.ts": 1774918535.0025818, + "tests/services/MimicService.test.ts": 1774571738.0233335, + "tests/services/VoiceService.test.ts": 1774593270.2652578, + "scripts/check-i18n-tests.ts": 1774600082.4865544, + "src/index.ts": 1774571562.6781328, + "src/database/index.ts": 1775722242.1774926, + "src/interactions/handlers/refinementHandler.ts": 1774918538.6533442, + "src/interactions/handlers/setupWizardHandler.ts": 1774598731.289426, + "src/config/env.ts": 1775722242.176957, + "src/utils/errorHandler.ts": 1774571551.662454, + "src/utils/logger.ts": 1775722242.1875317, + "src/commands/language.ts": 1775722242.1737049, + "src/commands/setup.ts": 1775722242.1755886, + "src/commands/voice.ts": 1775722242.176055, + "src/commands/music.ts": 1775722242.17478, + "src/commands/refine.ts": 1775722242.1751437, + "src/commands/minigame.ts": 1775722242.1743767, + "src/commands/config.ts": 1775722242.1722655, + "src/commands/audit.ts": 1775722242.1716485, + "src/commands/event.ts": 1775722242.1727855, + "src/commands/fishing.ts": 1775722242.1732998, + "src/errors/BotError.ts": 1774588562.374911, + "src/errors/ErrorReporter.ts": 1774588597.6821375, + "src/errors/ErrorCodes.ts": 1774588564.379933, + "src/events/voiceStateUpdate.ts": 1774571610.0571978, + "src/events/interactionCreate.ts": 1775722242.1793354, + "src/events/messageCreate.ts": 1774918538.6527166, + "src/events/guildMemberAdd.ts": 1775722242.1787882, + "src/events/guildDelete.ts": 1774590833.4664512, + "src/events/inviteDelete.ts": 1775722242.1802852, + "src/events/inviteCreate.ts": 1775722242.1799588, + "src/events/ready.ts": 1775722242.180798, + "src/events/guildCreate.ts": 1775722242.1778648, + "src/i18n/localeHelper.ts": 1775722242.1811333, + "src/i18n/types.ts": 1775722242.182978, + "src/i18n/index.ts": 1774588449.7640572, + "src/i18n/locales/en.ts": 1775722242.1817925, + "src/i18n/locales/ko.ts": 1775722242.1824102, + "src/client/KordClient.ts": 1775722242.1712153, + "src/handlers/EventLoader.ts": 1774571558.64962, + "src/handlers/CommandLoader.ts": 1774599031.7416685, + "src/services/InviteService.ts": 1775722242.185216, + "src/services/MimicService.ts": 1774598604.4866827, + "src/services/RefinementService.ts": 1775453009.6675217, + "src/services/ActivityTrackerService.ts": 1774918538.6558175, + "src/services/BigEmojiService.ts": 1774598602.4735262, + "src/services/FeverService.ts": 1774918538.6576529, + "src/services/PresenceService.ts": 1774590989.0406036, + "src/services/MusicService.ts": 1775722242.1856987, + "src/services/MiniGameRegistry.ts": 1775453009.6657462, + "src/services/VoiceService.ts": 1775722242.186675, + "src/services/PermissionAuditService.ts": 1775722242.186223, + "src/services/SetupWizardRenderer.ts": 1774600985.018157, + "src/services/FishingService.ts": 1775722242.18478, + "src/services/WebhookService.ts": 1775722242.1871085, + "src/services/AuditLogService.ts": 1775722242.1835542, + "src/services/EventService.ts": 1775722242.1841214, + "README.md": 1775722242.1674438, + "SKILL.md": 1775722785.2808125, + "CLAUDE.md": 1775723873.131704, + "Docs/Design_Principles.md": 1774598572.9831665, + "Docs/index.md": 1775723855.2843096, + "Docs/Plans/Error_Guidance_Plan.md": 1775722242.1612005, + "Docs/Plans/Setup_Wizard_Plan.md": 1775722242.1630588, + "Docs/Plans/i18n_Plan.md": 1774588012.258152, + "Docs/Plans/Event_Schedule_Management_Plan.md": 1775722242.1619325, + "Docs/Plans/Fishing_MiniGame_Plan.md": 1775722242.1624796, + "Docs/Plans/Temp_Voice_Channel_Plan.md": 1774585288.3667107, + "Docs/Plans/Audit_Channel_Plan.md": 1774592477.0163357, + "Docs/Plans/Bot_Presence_Plan.md": 1774590869.3717222, + "Docs/Plans/Feature_Roadmap.md": 1774594265.4661448, + "Docs/Plans/YouTube_Music_Playback_Plan.md": 1774918534.990895, + "Docs/Plans/MiniGame_Refinement_Plan.md": 1774918538.6405315, + "Docs/Plans/Permission_Audit_Plan.md": 1774591590.8996832, + "Docs/Features/temp_voice_channels.md": 1774575239.847267, + "Docs/Features/Graphify_Setup_Guide.md": 1775723844.6598463, + "Docs/Troubleshooting/handleLeave_ghost_channel.md": 1774585636.7110996, + "Docs/Troubleshooting/50013_Missing_Permissions.md": 1774585295.2497365, + "Docs/Decisions/subscription_tiers.md": 1774575243.7232716, + "Docs/Rules/security_guidelines.md": 1775722242.1637704, + "Docs/Rules/i18n_guidelines.md": 1774600270.9918053, + "Docs/WorkDone/2026-03-31_YouTube_Music_Playback_Phase2_Implementation.md": 1774918534.9938169, + "Docs/WorkDone/2026-03-30_Event_Reminder_Offsets_Implementation.md": 1774918534.9915524, + "Docs/WorkDone/2026-03-31_Fishing_MiniGame_Phase1_Implementation.md": 1775722242.1651776, + "Docs/WorkDone/2026-03-31_YouTube_Music_Playback_Phase3_Implementation.md": 1774918534.9944665, + "Docs/WorkDone/2026-03-27_Error_Guidance_UX_Implementation.md": 1774600631.1437528, + "Docs/WorkDone/2026-03-27_Project_Initial_Setup.md": 1775722242.1642985, + "Docs/WorkDone/2026-03-30_Event_Schedule_Phase2_Implementation.md": 1774918534.992362, + "Docs/WorkDone/2026-03-30_YouTube_Music_Playback_Phase1_Implementation.md": 1774918534.9931364, + "Docs/WorkDone/2026-03-27_i18n_Implementation.md": 1774588938.4764922, + "Docs/WorkDone/2026-03-27_Voice_Channels_Improvements.md": 1774600635.7413785, + "Docs/WorkDone/2026-03-30_Event_Schedule_Phase1_Implementation.md": 1774918534.9920316, + "Docs/WorkDone/2026-03-30_Event_Schedule_Start_Announcement_Implementation.md": 1774918534.9927633, + "Docs/WorkDone/2026-04-07_Fishing_MiniGame_Phase2_Implementation.md": 1775722242.166051, + "Docs/WorkDone/2026-04-07_Fishing_Size_Ranking_Implementation.md": 1775722242.1664512, + "Docs/WorkDone/2026-03-27_Permission_Audit_Implementation.md": 1774600627.6658287, + "Docs/WorkDone/2026-03-27_Presence_Implementation.md": 1774590855.8430753, + "Docs/WorkDone/2026-03-27_Audit_Log_Channel_Implementation.md": 1774600623.83235, + "Docs/WorkDone/2026-03-27_Voice_Channels_Implementation.md": 1775722242.1647897, + "Docs/WorkDone/2026-03-27_Config_And_Feature_Refactoring.md": 1774600620.4091363, + "Docs/WorkDone/2026-03-27_i18n_Check_Tool_Implementation.md": 1774600473.3988183, + "Docs/WorkDone/2026-03-30_HierarchicalRefactor.md": 1774834007.145832, + "Docs/WorkDone/2026-03-31_Fishing_MiniGame_Phase1_Completion.md": 1775453009.618051, + "Docs/WorkDone/2026-04-07_Fishing_Dex_And_Size_Implementation.md": 1775722242.1655571, + "Docs/WorkDone/2026-03-30_RefinementImplementation.md": 1774918538.641237, + "graphify-out/GRAPH_REPORT.md": 1775724155.4207373, + "resource/art/fishing/07_jellyfish.png": 1775453009.64163, + "resource/art/fishing/01_clownfish.png": 1775453009.630693, + "resource/art/fishing/02_bluefish.png": 1775453009.6327178, + "resource/art/fishing/09_swordfish.png": 1775453009.6456802, + "resource/art/fishing/04_greenfish.png": 1775453009.6362019, + "resource/art/fishing/03_pufferfish.png": 1775453009.6336637, + "resource/art/fishing/05_octopus.png": 1775453009.6381915, + "resource/art/fishing/08_crab.png": 1775453009.6436708, + "resource/art/fishing/10_shark.png": 1775453009.6480966, + "resource/art/fishing/06_starfish.png": 1775453009.639631 +} \ No newline at end of file diff --git a/package.json b/package.json index 09fe0aa..bcfed99 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "discord.js": "^14.25.1", "dotenv": "^17.3.1", "ffmpeg-static": "^5.3.0", - "ioredis": "^5.10.1", + "log4js": "^6.9.1", "pg": "^8.20.0", "prism-media": "^1.3.5", "sharp": "^0.34.5", diff --git a/prisma/migrations/20260407093500_add_fishing_profile/migration.sql b/prisma/migrations/20260407093500_add_fishing_profile/migration.sql new file mode 100644 index 0000000..1ebf59f --- /dev/null +++ b/prisma/migrations/20260407093500_add_fishing_profile/migration.sql @@ -0,0 +1,21 @@ +CREATE TABLE "FishingProfile" ( + "userId" TEXT NOT NULL, + "guildId" TEXT NOT NULL, + "totalCastCount" INTEGER NOT NULL DEFAULT 0, + "successCount" INTEGER NOT NULL DEFAULT 0, + "failCount" INTEGER NOT NULL DEFAULT 0, + "totalGoldEarned" INTEGER NOT NULL DEFAULT 0, + "bestCatchReward" INTEGER NOT NULL DEFAULT 0, + "commonCatchCount" INTEGER NOT NULL DEFAULT 0, + "uncommonCatchCount" INTEGER NOT NULL DEFAULT 0, + "rareCatchCount" INTEGER NOT NULL DEFAULT 0, + "epicCatchCount" INTEGER NOT NULL DEFAULT 0, + "legendaryCatchCount" INTEGER NOT NULL DEFAULT 0, + "lastCastAt" TIMESTAMP(3), + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "FishingProfile_pkey" PRIMARY KEY ("userId","guildId") +); + +CREATE INDEX "FishingProfile_guildId_successCount_idx" ON "FishingProfile"("guildId", "successCount" DESC); diff --git a/prisma/migrations/20260407101000_add_fishing_collection_and_size/migration.sql b/prisma/migrations/20260407101000_add_fishing_collection_and_size/migration.sql new file mode 100644 index 0000000..d7b8ec2 --- /dev/null +++ b/prisma/migrations/20260407101000_add_fishing_collection_and_size/migration.sql @@ -0,0 +1,16 @@ +CREATE TABLE "FishingCollectionEntry" ( + "userId" TEXT NOT NULL, + "guildId" TEXT NOT NULL, + "fishId" TEXT NOT NULL, + "catchCount" INTEGER NOT NULL DEFAULT 0, + "bestRarityId" TEXT NOT NULL, + "bestRarityRank" INTEGER NOT NULL DEFAULT 0, + "bestSizeCm" DOUBLE PRECISION NOT NULL DEFAULT 0, + "lastCaughtAt" TIMESTAMP(3) NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "FishingCollectionEntry_pkey" PRIMARY KEY ("userId","guildId","fishId") +); + +CREATE INDEX "FishingCollectionEntry_guildId_userId_idx" ON "FishingCollectionEntry"("guildId", "userId"); diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 09d6b3b..64b7605 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -177,26 +177,8 @@ model RefinementProfile { @@index([guildId, weaponLevel(sort: Desc)]) } -model ActivityLog { - id String @id @default(uuid()) - guildId String - hour Int - dayOfWeek Int - count Int @default(0) - weekStart DateTime - @@index([guildId, weekStart]) - @@unique([guildId, hour, dayOfWeek, weekStart]) -} -model FeverState { - guildId String @id - isActive Boolean @default(false) - peakHour Int? - bonusRate Float @default(0.1) - expiresAt DateTime? - updatedAt DateTime @updatedAt -} model AutoRoleConfig { guildId String @id @@ -233,3 +215,64 @@ model RefinementSystemConfig { description String? updatedAt DateTime @updatedAt } + +// 서버 활동 추이 (시간대별 메시지 수) +model ActivityLog { + id String @id @default(uuid()) + guildId String + hour Int + dayOfWeek Int + count Int @default(0) + weekStart DateTime + + @@unique([guildId, hour, dayOfWeek, weekStart]) + @@index([guildId, weekStart]) +} + +// 피버 상태 +model FeverState { + guildId String @id + isActive Boolean @default(false) + peakHour Int? + bonusRate Float @default(0.1) + expiresAt DateTime? + updatedAt DateTime @updatedAt +} + +model FishingProfile { + userId String + guildId String + totalCastCount Int @default(0) + successCount Int @default(0) + failCount Int @default(0) + totalGoldEarned Int @default(0) + bestCatchReward Int @default(0) + commonCatchCount Int @default(0) + uncommonCatchCount Int @default(0) + rareCatchCount Int @default(0) + epicCatchCount Int @default(0) + legendaryCatchCount Int @default(0) + lastCastAt DateTime? + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + + @@id([userId, guildId]) + @@index([guildId, successCount(sort: Desc)]) +} + +model FishingCollectionEntry { + userId String + guildId String + fishId String + catchCount Int @default(0) + bestRarityId String + bestRarityRank Int @default(0) + bestSizeCm Float @default(0) + lastCaughtAt DateTime + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + + @@id([userId, guildId, fishId]) + @@index([guildId, userId]) +} + diff --git a/resource/data/fishing/fish_catalog.json b/resource/data/fishing/fish_catalog.json index 05929f2..6390acf 100644 --- a/resource/data/fishing/fish_catalog.json +++ b/resource/data/fishing/fish_catalog.json @@ -11,6 +11,10 @@ "min": 120, "max": 180 }, + "sizeCm": { + "min": 9, + "max": 16 + }, "reactionWindowSec": 2.0, "distanceReductionByPosition": { "left": { @@ -38,6 +42,10 @@ "min": 150, "max": 220 }, + "sizeCm": { + "min": 18, + "max": 32 + }, "reactionWindowSec": 1.8, "distanceReductionByPosition": { "left": { @@ -65,6 +73,10 @@ "min": 180, "max": 260 }, + "sizeCm": { + "min": 14, + "max": 26 + }, "reactionWindowSec": 1.6, "distanceReductionByPosition": { "left": { @@ -92,6 +104,10 @@ "min": 200, "max": 300 }, + "sizeCm": { + "min": 22, + "max": 38 + }, "reactionWindowSec": 1.5, "distanceReductionByPosition": { "left": { @@ -119,6 +135,10 @@ "min": 230, "max": 340 }, + "sizeCm": { + "min": 35, + "max": 70 + }, "reactionWindowSec": 1.4, "distanceReductionByPosition": { "left": { @@ -146,6 +166,10 @@ "min": 260, "max": 380 }, + "sizeCm": { + "min": 12, + "max": 24 + }, "reactionWindowSec": 1.3, "distanceReductionByPosition": { "left": { @@ -173,6 +197,10 @@ "min": 320, "max": 460 }, + "sizeCm": { + "min": 28, + "max": 55 + }, "reactionWindowSec": 1.25, "distanceReductionByPosition": { "left": { @@ -200,6 +228,10 @@ "min": 380, "max": 540 }, + "sizeCm": { + "min": 20, + "max": 42 + }, "reactionWindowSec": 1.2, "distanceReductionByPosition": { "left": { @@ -227,6 +259,10 @@ "min": 520, "max": 720 }, + "sizeCm": { + "min": 90, + "max": 160 + }, "reactionWindowSec": 1.2, "distanceReductionByPosition": { "left": { @@ -254,6 +290,10 @@ "min": 800, "max": 1200 }, + "sizeCm": { + "min": 140, + "max": 260 + }, "reactionWindowSec": 1.2, "distanceReductionByPosition": { "left": { diff --git a/resource/data/fishing/fish_rarities.json b/resource/data/fishing/fish_rarities.json index 9584006..799fdb7 100644 --- a/resource/data/fishing/fish_rarities.json +++ b/resource/data/fishing/fish_rarities.json @@ -10,6 +10,10 @@ "rewardMultiplier": 1.0, "reactionWindowMultiplier": 1.0, "tensionMultiplier": 1.0, + "sizeMultiplier": { + "min": 1.0, + "max": 1.05 + }, "backgroundColor": "#6B7280" }, { @@ -20,6 +24,10 @@ "rewardMultiplier": 1.2, "reactionWindowMultiplier": 1.08, "tensionMultiplier": 1.08, + "sizeMultiplier": { + "min": 1.02, + "max": 1.12 + }, "backgroundColor": "#22C55E" }, { @@ -30,6 +38,10 @@ "rewardMultiplier": 1.55, "reactionWindowMultiplier": 1.16, "tensionMultiplier": 1.14, + "sizeMultiplier": { + "min": 1.1, + "max": 1.25 + }, "backgroundColor": "#3B82F6" }, { @@ -40,6 +52,10 @@ "rewardMultiplier": 2.1, "reactionWindowMultiplier": 1.28, "tensionMultiplier": 1.24, + "sizeMultiplier": { + "min": 1.22, + "max": 1.45 + }, "backgroundColor": "#A855F7" }, { @@ -50,6 +66,10 @@ "rewardMultiplier": 3.0, "reactionWindowMultiplier": 1.42, "tensionMultiplier": 1.36, + "sizeMultiplier": { + "min": 1.4, + "max": 1.8 + }, "backgroundColor": "#F59E0B" } ] diff --git a/scripts/setup-kord-user-log-file.sh b/scripts/setup-kord-user-log-file.sh new file mode 100644 index 0000000..bd725f0 --- /dev/null +++ b/scripts/setup-kord-user-log-file.sh @@ -0,0 +1,81 @@ +#!/usr/bin/env bash +# Run ON THE SERVER as the same user that runs kord (e.g. psa), after: ssh psa@server +# Switches kord user service from journal-only to append stdout/stderr under LOG_DIR/kord.log +# LOG_DIR is read from $KORD_HOME/.env (LOG_DIR=...) when present, else $KORD_HOME/logs. + +set -euo pipefail + +KORD_HOME="${KORD_HOME:-$HOME/kord}" +ENV_FILE="${KORD_ENV_FILE:-$KORD_HOME/.env}" +UNIT="${XDG_CONFIG_HOME:-$HOME/.config}/systemd/user/kord.service" + +# Last LOG_DIR= line from .env; strip quotes and ~ ; relative paths are under KORD_HOME +resolve_log_dir() { + local default="${KORD_HOME}/logs" line raw + [[ -f "$ENV_FILE" ]] || { echo "$default"; return; } + line="$(grep -E '^[[:space:]]*LOG_DIR[[:space:]]*=' "$ENV_FILE" | tail -n1 || true)" + [[ -z "$line" ]] && { echo "$default"; return; } + raw="${line#*=}" + raw="$(printf '%s' "$raw" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//' -e $'s/\r$//')" + if [[ "$raw" =~ ^\".*\"$ ]]; then raw="${raw#\"}"; raw="${raw%\"}"; fi + if [[ "$raw" =~ ^\'.*\'$ ]]; then raw="${raw#\'}"; raw="${raw%\'}"; fi + raw="${raw//\~/$HOME}" + [[ -z "$raw" ]] && { echo "$default"; return; } + if [[ "$raw" = /* ]]; then + echo "$raw" + else + echo "${KORD_HOME}/${raw#./}" + fi +} + +LOG_DIR="$(resolve_log_dir)" +LOG_FILE="${LOG_DIR}/kord.log" + +mkdir -p "$LOG_DIR" + +if [[ ! -f "$UNIT" ]]; then + echo "Unit not found: $UNIT" >&2 + exit 1 +fi + +cp -a "$UNIT" "${UNIT}.bak.$(date +%Y%m%d%H%M%S)" + +# Point journal or any previous append paths at the log file derived from .env LOG_DIR +sed -i \ + -e "s|^StandardOutput=journal|StandardOutput=append:${LOG_FILE}|" \ + -e "s|^StandardError=journal|StandardError=append:${LOG_FILE}|" \ + "$UNIT" +sed -i \ + -e "s|^StandardOutput=append:.*|StandardOutput=append:${LOG_FILE}|" \ + -e "s|^StandardError=append:.*|StandardError=append:${LOG_FILE}|" \ + "$UNIT" + +# systemd opens StandardOutput=append before ExecStart; missing parent dir → status 209/STDOUT +sed -i '/^ExecStartPre=-\/usr\/bin\/mkdir -p /d' "$UNIT" +tmp="$(mktemp)" +inserted=0 +while IFS= read -r line || [[ -n "$line" ]]; do + if [[ "$line" =~ ^ExecStart= ]] && [[ "$inserted" -eq 0 ]]; then + printf '%s\n' "ExecStartPre=-/usr/bin/mkdir -p ${LOG_DIR}" + inserted=1 + fi + printf '%s\n' "$line" +done <"$UNIT" >"$tmp" +mv "$tmp" "$UNIT" + +systemctl --user daemon-reload +systemctl --user restart kord + +sleep 2 +systemctl --user --no-pager status kord || true + +echo "--- Last lines of $LOG_FILE (if any) ---" +if [[ -f "$LOG_FILE" ]]; then + tail -n 20 "$LOG_FILE" +else + echo "(file not created yet; check status above)" +fi + +echo +echo "LOG_DIR=$LOG_DIR" +echo "Follow logs: tail -f $LOG_FILE" diff --git a/src/cache/index.ts b/src/cache/index.ts deleted file mode 100644 index 009f66a..0000000 --- a/src/cache/index.ts +++ /dev/null @@ -1,52 +0,0 @@ -type CacheEntry = { value: string; expiresAtMs?: number }; - -const nowMs = () => Date.now(); - -class LocalCache { - private store = new Map(); - - private isExpired(entry: CacheEntry | undefined) { - return entry?.expiresAtMs !== undefined && entry.expiresAtMs <= nowMs(); - } - - private getEntry(key: string): CacheEntry | undefined { - const entry = this.store.get(key); - if (!entry) return undefined; - if (this.isExpired(entry)) { - this.store.delete(key); - return undefined; - } - return entry; - } - - async get(key: string): Promise { - const entry = this.getEntry(key); - return entry ? entry.value : null; - } - - async set(key: string, value: string, opts?: { exSeconds?: number; nx?: boolean }): Promise { - const existing = this.getEntry(key); - if (opts?.nx && existing) return false; - - const expiresAtMs = opts?.exSeconds !== undefined ? nowMs() + opts.exSeconds * 1000 : undefined; - this.store.set(key, { value, expiresAtMs }); - return true; - } - - async del(key: string): Promise { - const existed = this.getEntry(key) !== undefined; - this.store.delete(key); - return existed; - } -} - -export const cache = new LocalCache(); - -/** - * Best-effort local process lock. - * - Returns true only once per key during ttl window. - * - Single process only (no cross-instance coordination). - */ -export const tryAcquireLock = async (key: string, ttlSeconds: number): Promise => { - return cache.set(`lock:${key}`, '1', { exSeconds: ttlSeconds, nx: true }); -}; diff --git a/src/client/KordClient.ts b/src/client/KordClient.ts index 02cf2c3..33b5e0c 100644 --- a/src/client/KordClient.ts +++ b/src/client/KordClient.ts @@ -5,6 +5,8 @@ import { loadCommands } from '../handlers/CommandLoader'; import { loadEvents } from '../handlers/EventLoader'; import { handleGlobalExceptions } from '../utils/errorHandler'; import { connectDB } from '../database'; +import { FeverService } from '../services/FeverService'; + export class KordClient extends Client { public commands: Collection = new Collection(); @@ -17,7 +19,9 @@ export class KordClient extends Client { GatewayIntentBits.GuildMessages, GatewayIntentBits.MessageContent, GatewayIntentBits.GuildMembers, + GatewayIntentBits.GuildInvites, ], + partials: [Partials.Message, Partials.Channel, Partials.GuildMember], }); } diff --git a/src/commands/audit.ts b/src/commands/audit.ts index c680994..7ae9409 100644 --- a/src/commands/audit.ts +++ b/src/commands/audit.ts @@ -118,9 +118,8 @@ export default { if (action === 'set') { const channel = interaction.options.getChannel('channel') as TextChannel; - if (!channel) return interaction.reply({ content: '❌ `channel` 옵션을 선택해주세요.', ephemeral: true }); + if (!channel) return interaction.editReply({ content: '❌ `channel` 옵션을 선택해주세요.' }); - await interaction.deferReply({ ephemeral: true }); const botMember = guild.members.me; if (!botMember) return; const perms = channel.permissionsFor(botMember); @@ -141,13 +140,11 @@ export default { } if (action === 'clear') { - await interaction.deferReply({ ephemeral: true }); await auditLogService.clearChannel(guild.id); return interaction.editReply({ content: `✅ 감사 채널 설정이 해제되었습니다.` }); } if (action === 'status') { - await interaction.deferReply({ ephemeral: true }); const config = await auditLogService.getChannel(guild.id); if (!config) return interaction.editReply({ content: `설정된 감사 채널이 없습니다. 먼저 \`/audit channel action:set\` 명령어로 채널을 설정해주세요.` }); @@ -168,10 +165,9 @@ export default { const enable = interaction.options.getBoolean('enable'); if (!category || enable === null) { - return interaction.reply({ content: '❌ `category` 및 `enable` 옵션을 모두 입력해주세요.', ephemeral: true }); + return interaction.editReply({ content: '❌ `category` 및 `enable` 옵션을 모두 입력해주세요.' }); } - await interaction.deferReply({ ephemeral: true }); const config = await auditLogService.getChannel(guild.id); if (!config) return interaction.editReply({ content: `설정된 감사 채널이 없습니다. 먼저 \`/audit channel action:set\` 명령어로 채널을 설정해주세요.` }); @@ -185,7 +181,6 @@ export default { const action = interaction.options.getString('action', true); if (action === 'permissions') { - await interaction.deferReply({ ephemeral: true }); const results = await PermissionAuditService.auditGuild(guild); if (results.length === 0) return interaction.editReply({ content: t(locale, 'commands.permissionAudit.noResults') }); @@ -230,8 +225,7 @@ export default { } } catch (error) { console.error('Error in audit command', error); - const reply = interaction.deferred ? interaction.editReply : interaction.reply; - return (reply as any)({ content: '명령 실행 중 오류가 발생했습니다.', ephemeral: true }); + return interaction.editReply({ content: '명령 실행 중 오류가 발생했습니다.' }); } }, }; diff --git a/src/commands/config.ts b/src/commands/config.ts index 3d687c2..66d7c42 100644 --- a/src/commands/config.ts +++ b/src/commands/config.ts @@ -76,14 +76,13 @@ export default { if (action === 'language') { const newLocale = interaction.options.getString('locale') as SupportedLocale; if (!newLocale) { - return interaction.reply({ + return interaction.editReply({ content: '❌ `locale` 옵션을 선택해주세요.', - ephemeral: true }); } if (!SUPPORTED_LOCALES.includes(newLocale)) { - return interaction.reply({ content: `Unsupported locale: ${newLocale}`, ephemeral: true }); + return interaction.editReply({ content: `Unsupported locale: ${newLocale}` }); } await prisma.guildConfig.upsert({ @@ -92,9 +91,8 @@ export default { create: { guildId: interaction.guildId, locale: newLocale }, }); - return interaction.reply({ + return interaction.editReply({ content: t(newLocale, 'commands.language.serverSet', { locale: newLocale === 'ko' ? '한국어' : 'English' }), - ephemeral: true, }); } } @@ -132,7 +130,7 @@ export default { .setTitle(t(locale, 'commands.config.title')) .setDescription(`${label}: **${state}**`); - return interaction.reply({ embeds: [embed], ephemeral: true }); + return interaction.editReply({ embeds: [embed] }); } }, }; diff --git a/src/commands/event.ts b/src/commands/event.ts index 7986e4c..411ba87 100644 --- a/src/commands/event.ts +++ b/src/commands/event.ts @@ -201,26 +201,23 @@ export default { const startsAt = parseSeoulDateTime(date, time); if (!startsAt) { - await interaction.reply({ + await interaction.editReply({ content: `${t(locale, 'commands.event.invalidDateTime')}\n${t(locale, 'commands.event.invalidDateTimeResolution')}`, - ephemeral: true, }); return; } if (startsAt.getTime() <= Date.now()) { - await interaction.reply({ + await interaction.editReply({ content: `${t(locale, 'commands.event.invalidPastDateTime')}\n${t(locale, 'commands.event.invalidPastDateTimeResolution')}`, - ephemeral: true, }); return; } const reminderOffsets = parseReminderOffsets(reminderRaw); if (!reminderOffsets) { - await interaction.reply({ + await interaction.editReply({ content: `${t(locale, 'commands.event.invalidReminderOffsets')}\n${t(locale, 'commands.event.invalidReminderOffsetsResolution')}`, - ephemeral: true, }); return; } @@ -252,7 +249,7 @@ export default { ) .setTimestamp(); - await interaction.reply({ embeds: [embed], ephemeral: true }); + await interaction.editReply({ embeds: [embed] }); return; } @@ -268,9 +265,8 @@ export default { }); if (events.length === 0) { - await interaction.reply({ + await interaction.editReply({ content: t(locale, 'commands.event.listEmpty'), - ephemeral: true, }); return; } @@ -295,7 +291,7 @@ export default { }); } - await interaction.reply({ embeds: [embed], ephemeral: true }); + await interaction.editReply({ embeds: [embed] }); return; } @@ -311,9 +307,8 @@ export default { }); if (!event) { - await interaction.reply({ + await interaction.editReply({ content: t(locale, 'commands.event.cancelNotFound', { id }), - ephemeral: true, }); return; } @@ -323,9 +318,8 @@ export default { data: { status: 'CANCELLED' }, }); - await interaction.reply({ + await interaction.editReply({ content: t(locale, 'commands.event.cancelSuccess', { id }), - ephemeral: true, }); return; } @@ -340,34 +334,30 @@ export default { }); if (!event) { - await interaction.reply({ + await interaction.editReply({ content: t(locale, 'commands.event.cancelNotFound', { id }), - ephemeral: true, }); return; } if (!event.announcementChannelId) { - await interaction.reply({ + await interaction.editReply({ content: t(locale, 'commands.event.announceNotAvailable'), - ephemeral: true, }); return; } try { await EventService.announceEvent(interaction.guild!, event.id); - await interaction.reply({ + await interaction.editReply({ content: t(locale, 'commands.event.announceSuccess', { id, channel: `<#${event.announcementChannelId}>`, }), - ephemeral: true, }); } catch { - await interaction.reply({ + await interaction.editReply({ content: t(locale, 'commands.event.announceNotAvailable'), - ephemeral: true, }); } } diff --git a/src/commands/fishing.ts b/src/commands/fishing.ts index e31bc17..5409c09 100644 --- a/src/commands/fishing.ts +++ b/src/commands/fishing.ts @@ -1,6 +1,7 @@ -import { +import { ChannelType, ChatInputCommandInteraction, + EmbedBuilder, SlashCommandBuilder, } from 'discord.js'; import { prisma } from '../database'; @@ -37,6 +38,46 @@ export default { .setDescriptionLocalizations({ ko: '진행 중인 낚시 세션을 종료하고 스레드를 삭제합니다.', }), + ) + .addSubcommand((subcommand) => + subcommand + .setName('status') + .setDescription('View fishing statistics.') + .setDescriptionLocalizations({ + ko: '낚시 통계를 확인합니다.', + }) + .addUserOption((option) => + option + .setName('user') + .setDescription('User to view') + .setDescriptionLocalizations({ + ko: '조회할 유저', + }), + ), + ) + .addSubcommand((subcommand) => + subcommand + .setName('dex') + .setDescription('View your fishing collection book.') + .setDescriptionLocalizations({ + ko: '낚시 도감을 확인합니다.', + }) + .addUserOption((option) => + option + .setName('user') + .setDescription('User to view') + .setDescriptionLocalizations({ + ko: '조회할 유저', + }), + ), + ) + .addSubcommand((subcommand) => + subcommand + .setName('ranking') + .setDescription('View the biggest fish size ranking in this server.') + .setDescriptionLocalizations({ + ko: '이 서버의 물고기 크기 랭킹을 확인합니다.', + }), ), async execute(interaction: ChatInputCommandInteraction, locale: SupportedLocale) { @@ -48,8 +89,6 @@ export default { const subcommand = interaction.options.getSubcommand(); if (subcommand === 'enter') { - await interaction.deferReply({ ephemeral: true }); - if (!config || !config.enabled) { await interaction.editReply({ content: t(locale, 'commands.fishing.disabled'), @@ -83,8 +122,6 @@ export default { } if (subcommand === 'cast') { - await interaction.deferReply({ ephemeral: true }); - if (!config || !config.enabled) { await interaction.editReply({ content: t(locale, 'commands.fishing.disabled'), @@ -109,8 +146,6 @@ export default { } if (subcommand === 'end') { - await interaction.deferReply({ ephemeral: true }); - const ended = await FishingService.endThreadByUser(interaction, locale); if (!ended) { await interaction.editReply({ @@ -122,6 +157,135 @@ export default { await interaction.editReply({ content: t(locale, 'commands.fishing.endDeleted'), }); + return; + } + + if (subcommand === 'status') { + const targetUser = interaction.options.getUser('user') ?? interaction.user; + const profile = await FishingService.getProfile(targetUser.id, interaction.guildId); + + const totalCasts = profile?.totalCastCount ?? 0; + const successCount = profile?.successCount ?? 0; + const failCount = profile?.failCount ?? 0; + const totalGoldEarned = profile?.totalGoldEarned ?? 0; + const bestCatchReward = profile?.bestCatchReward ?? 0; + const successRate = totalCasts > 0 ? ((successCount / totalCasts) * 100).toFixed(1) : '0.0'; + const rarityBreakdown = [ + `⚪ ${profile?.commonCatchCount ?? 0}`, + `🟢 ${profile?.uncommonCatchCount ?? 0}`, + `🔵 ${profile?.rareCatchCount ?? 0}`, + `🟣 ${profile?.epicCatchCount ?? 0}`, + `🟠 ${profile?.legendaryCatchCount ?? 0}`, + ].join('\n'); + + const embed = new EmbedBuilder() + .setColor(0x3b82f6) + .setTitle(t(locale, 'commands.fishing.profileTitle', { user: targetUser.username })) + .setThumbnail(targetUser.displayAvatarURL()) + .addFields( + { + name: t(locale, 'commands.fishing.totalCasts'), + value: String(totalCasts), + inline: true, + }, + { + name: t(locale, 'commands.fishing.successRate'), + value: `${successRate}% (${successCount}/${successCount + failCount})`, + inline: true, + }, + { + name: t(locale, 'commands.fishing.totalGoldEarned'), + value: `${totalGoldEarned} G`, + inline: true, + }, + { + name: t(locale, 'commands.fishing.bestCatchReward'), + value: `${bestCatchReward} G`, + inline: true, + }, + { + name: t(locale, 'commands.fishing.lastCastAt'), + value: profile?.lastCastAt + ? `` + : t(locale, 'commands.fishing.noRecord'), + inline: true, + }, + { + name: t(locale, 'commands.fishing.rarityBreakdown'), + value: rarityBreakdown, + inline: false, + }, + ); + + if (!profile) { + embed.setDescription(t(locale, 'commands.fishing.profileEmpty')); + } + + await interaction.editReply({ embeds: [embed] }); + return; + } + + if (subcommand === 'dex') { + const targetUser = interaction.options.getUser('user') ?? interaction.user; + const collection = await FishingService.getCollection(targetUser.id, interaction.guildId); + + const embed = new EmbedBuilder() + .setColor(0x14b8a6) + .setTitle(t(locale, 'commands.fishing.dexTitle', { user: targetUser.username })) + .setThumbnail(targetUser.displayAvatarURL()); + + if (!collection.length) { + embed.setDescription(t(locale, 'commands.fishing.dexEmpty')); + await interaction.editReply({ embeds: [embed] }); + return; + } + + for (const entry of collection.slice(0, 10)) { + const fishName = FishingService.getFishDisplayName(entry.fishId); + const rarityName = FishingService.getRarityDisplayNameById(entry.bestRarityId, locale); + embed.addFields({ + name: fishName, + value: [ + `${t(locale, 'commands.fishing.catchCount')}: ${entry.catchCount}`, + `${t(locale, 'commands.fishing.bestRarity')}: ${rarityName}`, + `${t(locale, 'commands.fishing.bestSize')}: ${entry.bestSizeCm.toFixed(1)} cm`, + ].join('\n'), + inline: true, + }); + } + + await interaction.editReply({ embeds: [embed] }); + return; + } + + if (subcommand === 'ranking') { + const ranking = await FishingService.getSizeRanking(interaction.guildId); + + const embed = new EmbedBuilder() + .setColor(0xf59e0b) + .setTitle(t(locale, 'commands.fishing.rankingTitle')); + + if (!ranking.length) { + embed.setDescription(t(locale, 'commands.fishing.rankingEmpty')); + await interaction.editReply({ embeds: [embed] }); + return; + } + + for (const [index, entry] of ranking.entries()) { + const fishName = FishingService.getFishDisplayName(entry.fishId); + const rarityName = FishingService.getRarityDisplayNameById(entry.bestRarityId, locale); + embed.addFields({ + name: `#${index + 1} <@${entry.userId}>`, + value: [ + `${t(locale, 'commands.fishing.targetFish')}: ${fishName}`, + `${t(locale, 'commands.fishing.rarity')}: ${rarityName}`, + `${t(locale, 'commands.fishing.size')}: ${entry.bestSizeCm.toFixed(1)} cm`, + ].join('\n'), + inline: false, + }); + } + + await interaction.editReply({ embeds: [embed] }); } }, }; diff --git a/src/commands/language.ts b/src/commands/language.ts index 476670c..7701053 100644 --- a/src/commands/language.ts +++ b/src/commands/language.ts @@ -27,7 +27,7 @@ export default { // Validate locale (safety check) if (!SUPPORTED_LOCALES.includes(newLocale)) { - await interaction.reply({ content: `Unsupported locale: ${newLocale}`, ephemeral: true }); + await interaction.editReply({ content: `Unsupported locale: ${newLocale}` }); return; } @@ -38,9 +38,8 @@ export default { }); // Respond in the NEWLY selected locale - await interaction.reply({ + await interaction.editReply({ content: t(newLocale, 'commands.language.userSet', { locale: newLocale === 'ko' ? '한국어' : 'English' }), - ephemeral: true, }); }, }; diff --git a/src/commands/minigame.ts b/src/commands/minigame.ts index 7fb9086..d57085f 100644 --- a/src/commands/minigame.ts +++ b/src/commands/minigame.ts @@ -81,7 +81,7 @@ export default { .setTitle('🎮 미니게임 설정 변경') .setDescription(`${game.name} 미니게임이 **${state}**되었습니다.`); - return interaction.reply({ embeds: [embed], ephemeral: true }); + return interaction.editReply({ embeds: [embed] }); } if (subcommand === 'status') { @@ -106,7 +106,7 @@ export default { }); }); - return interaction.reply({ embeds: [embed], ephemeral: true }); + return interaction.editReply({ embeds: [embed] }); } if (subcommand === 'channel') { @@ -127,7 +127,7 @@ export default { .setTitle('🎮 미니게임 채널 설정') .setDescription(`${game.name} 미니게임 전용 채널이 **${channelMsg}**로 설정되었습니다.`); - return interaction.reply({ embeds: [embed], ephemeral: true }); + return interaction.editReply({ embeds: [embed] }); } }, }; diff --git a/src/commands/music.ts b/src/commands/music.ts index 0beb3c4..afb7514 100644 --- a/src/commands/music.ts +++ b/src/commands/music.ts @@ -1,4 +1,4 @@ -import { ChatInputCommandInteraction, GuildMember, SlashCommandBuilder } from 'discord.js'; +import { ChatInputCommandInteraction, GuildMember, SlashCommandBuilder } from 'discord.js'; import { SupportedLocale, t } from '../i18n'; import { MusicService } from '../services/MusicService'; import { logger } from '../utils/logger'; @@ -26,7 +26,7 @@ async function respond( return; } - await interaction.reply({ content, ephemeral }); + await interaction.editReply({ content }); } export default { @@ -136,33 +136,28 @@ export default { const url = interaction.options.getString('url'); if ((!query && !url) || (query && url)) { - await interaction.reply({ + await interaction.editReply({ content: buildErrorMessage(locale, 'addMutuallyExclusive'), - ephemeral: true, }); return; } const member = interaction.member as GuildMember; if (!member.voice.channel) { - await interaction.reply({ + await interaction.editReply({ content: buildErrorMessage(locale, 'notInVoice'), - ephemeral: true, }); return; } const textChannel = interaction.channel as any; if (!textChannel?.send) { - await interaction.reply({ + await interaction.editReply({ content: t(locale, 'errors.E3003.userMessage'), - ephemeral: true, }); return; } - await interaction.deferReply(); - const result = query ? await MusicService.addFromQuery(member, textChannel, query, locale) : await MusicService.addFromUrl(member, textChannel, url!, locale); @@ -191,7 +186,7 @@ export default { } if (subcommand === 'queue') { - await interaction.reply({ + await interaction.editReply({ embeds: [MusicService.getQueueEmbed(interaction.guildId!, locale)], }); return; @@ -200,18 +195,16 @@ export default { if (subcommand === 'remove') { const member = interaction.member as GuildMember; if (!member.voice.channel) { - await interaction.reply({ + await interaction.editReply({ content: buildErrorMessage(locale, 'notInVoice'), - ephemeral: true, }); return; } const activeVoiceChannelId = MusicService.getActiveVoiceChannelId(interaction.guildId!); if (activeVoiceChannelId && activeVoiceChannelId !== member.voice.channelId) { - await interaction.reply({ + await interaction.editReply({ content: buildErrorMessage(locale, 'differentVoiceChannel'), - ephemeral: true, }); return; } @@ -219,14 +212,13 @@ export default { const index = interaction.options.getInteger('index', true); const removed = await MusicService.remove(interaction.guildId!, index); if (!removed) { - await interaction.reply({ + await interaction.editReply({ content: buildErrorMessage(locale, 'noActiveSession'), - ephemeral: true, }); return; } - await interaction.reply({ + await interaction.editReply({ content: t(locale, 'commands.music.queueRemoved', { title: removed.title, }), @@ -237,160 +229,145 @@ export default { if (subcommand === 'pause') { const member = interaction.member as GuildMember; if (!member.voice.channel) { - await interaction.reply({ + await interaction.editReply({ content: buildErrorMessage(locale, 'notInVoice'), - ephemeral: true, }); return; } const activeVoiceChannelId = MusicService.getActiveVoiceChannelId(interaction.guildId!); if (activeVoiceChannelId && activeVoiceChannelId !== member.voice.channelId) { - await interaction.reply({ + await interaction.editReply({ content: buildErrorMessage(locale, 'differentVoiceChannel'), - ephemeral: true, }); return; } const paused = await MusicService.pause(interaction.guildId!, locale); if (!paused) { - await interaction.reply({ + await interaction.editReply({ content: buildErrorMessage(locale, 'noActiveSession'), - ephemeral: true, }); return; } - await interaction.reply({ content: t(locale, 'commands.music.pauseSuccess') }); + await interaction.editReply({ content: t(locale, 'commands.music.pauseSuccess') }); return; } if (subcommand === 'resume') { const member = interaction.member as GuildMember; if (!member.voice.channel) { - await interaction.reply({ + await interaction.editReply({ content: buildErrorMessage(locale, 'notInVoice'), - ephemeral: true, }); return; } const activeVoiceChannelId = MusicService.getActiveVoiceChannelId(interaction.guildId!); if (activeVoiceChannelId && activeVoiceChannelId !== member.voice.channelId) { - await interaction.reply({ + await interaction.editReply({ content: buildErrorMessage(locale, 'differentVoiceChannel'), - ephemeral: true, }); return; } const resumed = await MusicService.resume(interaction.guildId!, locale); if (!resumed) { - await interaction.reply({ + await interaction.editReply({ content: buildErrorMessage(locale, 'noActiveSession'), - ephemeral: true, }); return; } - await interaction.reply({ content: t(locale, 'commands.music.resumeSuccess') }); + await interaction.editReply({ content: t(locale, 'commands.music.resumeSuccess') }); return; } if (subcommand === 'skip') { const member = interaction.member as GuildMember; if (!member.voice.channel) { - await interaction.reply({ + await interaction.editReply({ content: buildErrorMessage(locale, 'notInVoice'), - ephemeral: true, }); return; } const activeVoiceChannelId = MusicService.getActiveVoiceChannelId(interaction.guildId!); if (activeVoiceChannelId && activeVoiceChannelId !== member.voice.channelId) { - await interaction.reply({ + await interaction.editReply({ content: buildErrorMessage(locale, 'differentVoiceChannel'), - ephemeral: true, }); return; } const skipped = await MusicService.skip(interaction.guildId!); if (!skipped) { - await interaction.reply({ + await interaction.editReply({ content: buildErrorMessage(locale, 'noActiveSession'), - ephemeral: true, }); return; } - await interaction.reply({ content: t(locale, 'commands.music.skipSuccess') }); + await interaction.editReply({ content: t(locale, 'commands.music.skipSuccess') }); return; } if (subcommand === 'stop') { const member = interaction.member as GuildMember; if (!member.voice.channel) { - await interaction.reply({ + await interaction.editReply({ content: buildErrorMessage(locale, 'notInVoice'), - ephemeral: true, }); return; } const activeVoiceChannelId = MusicService.getActiveVoiceChannelId(interaction.guildId!); if (activeVoiceChannelId && activeVoiceChannelId !== member.voice.channelId) { - await interaction.reply({ + await interaction.editReply({ content: buildErrorMessage(locale, 'differentVoiceChannel'), - ephemeral: true, }); return; } const stopped = await MusicService.stop(interaction.guildId!, locale); if (!stopped) { - await interaction.reply({ + await interaction.editReply({ content: buildErrorMessage(locale, 'noActiveSession'), - ephemeral: true, }); return; } - await interaction.reply({ content: t(locale, 'commands.music.stopSuccess') }); + await interaction.editReply({ content: t(locale, 'commands.music.stopSuccess') }); return; } if (subcommand === 'leave') { const member = interaction.member as GuildMember; if (!member.voice.channel) { - await interaction.reply({ + await interaction.editReply({ content: buildErrorMessage(locale, 'notInVoice'), - ephemeral: true, }); return; } const activeVoiceChannelId = MusicService.getActiveVoiceChannelId(interaction.guildId!); if (activeVoiceChannelId && activeVoiceChannelId !== member.voice.channelId) { - await interaction.reply({ + await interaction.editReply({ content: buildErrorMessage(locale, 'differentVoiceChannel'), - ephemeral: true, }); return; } const left = await MusicService.leave(interaction.guildId!, locale); if (!left) { - await interaction.reply({ + await interaction.editReply({ content: buildErrorMessage(locale, 'noActiveSession'), - ephemeral: true, }); return; } - await interaction.reply({ content: t(locale, 'commands.music.leaveSuccess') }); + await interaction.editReply({ content: t(locale, 'commands.music.leaveSuccess') }); } } catch (error) { logger.error('Error in music command:', error); @@ -417,15 +394,7 @@ export default { return; } - if (interaction.replied || interaction.deferred) { - await respond(interaction, t(locale, 'errors.E3003.userMessage'), true); - return; - } - - await interaction.reply({ - content: t(locale, 'errors.E3003.userMessage'), - ephemeral: true, - }); + await respond(interaction, t(locale, 'errors.E3003.userMessage'), true); } }, }; diff --git a/src/commands/refine.ts b/src/commands/refine.ts index b576f9e..8022c5a 100644 --- a/src/commands/refine.ts +++ b/src/commands/refine.ts @@ -97,11 +97,11 @@ export default { }); if (!config || !config.enabled) { - return interaction.reply({ content: '❌ 이 서버에서는 재련 미니게임이 비활성화되어 있습니다.', ephemeral: true }); + return interaction.editReply({ content: '❌ 이 서버에서는 재련 미니게임이 비활성화되어 있습니다.' }); } if (config.channelId && config.channelId !== interaction.channelId) { - return interaction.reply({ content: `❌ 재련 미니게임은 <#${config.channelId}> 채널에서만 이용 가능합니다.`, ephemeral: true }); + return interaction.editReply({ content: `❌ 재련 미니게임은 <#${config.channelId}> 채널에서만 이용 가능합니다.` }); } const subcommand = interaction.options.getSubcommand(); @@ -132,9 +132,9 @@ export default { const row = new ActionRowBuilder().addComponents(retryBtn); - return interaction.reply({ embeds: [embed], components: [row] }); + return interaction.editReply({ embeds: [embed], components: [row] }); } catch (err: any) { - return interaction.reply({ content: `❌ 오류: ${err.message}`, ephemeral: true }); + return interaction.editReply({ content: `❌ 오류: ${err.message}` }); } } @@ -142,10 +142,10 @@ export default { if (subcommand === 'battle') { const targetUser = interaction.options.getUser('target', true); if (targetUser.id === interaction.user.id) { - return interaction.reply({ content: '❌ 자신을 공격할 수 없습니다.', ephemeral: true }); + return interaction.editReply({ content: '❌ 자신을 공격할 수 없습니다.' }); } if (targetUser.bot) { - return interaction.reply({ content: '❌ 봇과 전투할 수 없습니다.', ephemeral: true }); + return interaction.editReply({ content: '❌ 봇과 전투할 수 없습니다.' }); } try { @@ -170,9 +170,9 @@ export default { if (result.attackerDurability <= 0) embed.setFooter({ text: '⚠️ [경고] 무기가 전투 불능이 되었습니다. 내구도 0에서 다시 공격하면 파괴됩니다!' }); } - return interaction.reply({ embeds: [embed] }); + return interaction.editReply({ embeds: [embed] }); } catch (err: any) { - return interaction.reply({ content: `❌ 오류: ${err.message}`, ephemeral: true }); + return interaction.editReply({ content: `❌ 오류: ${err.message}` }); } } @@ -180,9 +180,9 @@ export default { if (subcommand === 'checkin') { try { const res = await RefinementService.checkIn(interaction.user.id, interaction.guildId); - return interaction.reply({ content: `✅ 출석 완료! **${res.goldAdded} G**를 수령했습니다. (총: ${res.totalGold} G)`, ephemeral: true }); + return interaction.editReply({ content: `✅ 출석 완료! **${res.goldAdded} G**를 수령했습니다. (총: ${res.totalGold} G)` }); } catch (err: any) { - return interaction.reply({ content: `❌ 오류: ${err.message}`, ephemeral: true }); + return interaction.editReply({ content: `❌ 오류: ${err.message}` }); } } @@ -208,7 +208,7 @@ export default { { name: '전투', value: `승리: ${profile.battleWin} | 패배: ${profile.battleLoss}`, inline: false } ); - return interaction.reply({ embeds: [embed] }); + return interaction.editReply({ embeds: [embed] }); } // --- RANKING --- @@ -243,16 +243,16 @@ export default { }).join('\n') || '데이터가 없습니다.'; embed.setDescription(listStr); - return interaction.reply({ embeds: [embed] }); + return interaction.editReply({ embeds: [embed] }); } // --- SELL --- if (subcommand === 'sell') { try { const res = await RefinementService.sellWeapon(interaction.user.id, interaction.guildId); - return interaction.reply({ content: `💰 **${res.level}단계** 무기를 판매하고 **${res.price} G**를 받았습니다. (총: ${res.gold} G)`, ephemeral: true }); + return interaction.editReply({ content: `💰 **${res.level}단계** 무기를 판매하고 **${res.price} G**를 받았습니다. (총: ${res.gold} G)` }); } catch (err: any) { - return interaction.reply({ content: `❌ 오류: ${err.message}`, ephemeral: true }); + return interaction.editReply({ content: `❌ 오류: ${err.message}` }); } } @@ -271,7 +271,7 @@ export default { { name: '🔥 피버 타임', value: '서버가 가장 활발한 시간대에 재련 성공 확률이 10% 증가합니다!' } ); - return interaction.reply({ embeds: [embed] }); + return interaction.editReply({ embeds: [embed] }); } }, }; diff --git a/src/commands/setup.ts b/src/commands/setup.ts index d676a51..f814f23 100644 --- a/src/commands/setup.ts +++ b/src/commands/setup.ts @@ -19,10 +19,9 @@ export default { if (!interaction.guildId) return; const { embed, components } = await SetupWizardRenderer.renderStep(0, interaction, locale); - return interaction.reply({ + return interaction.editReply({ embeds: [embed], components, - ephemeral: true, }); }, }; diff --git a/src/commands/voice.ts b/src/commands/voice.ts index ba86aff..573b7e4 100644 --- a/src/commands/voice.ts +++ b/src/commands/voice.ts @@ -88,22 +88,21 @@ export default { if (action === 'set') { const channel = interaction.options.getChannel('channel'); - if (!channel) return interaction.reply({ content: '❌ `channel` 옵션을 선택해주세요.', ephemeral: true }); + if (!channel) return interaction.editReply({ content: '❌ `channel` 옵션을 선택해주세요.' }); await prisma.voiceGenerator.upsert({ where: { channelId: channel.id }, update: { categoryId: category?.id || null, guildId }, create: { channelId: channel.id, guildId, categoryId: category?.id || null } }); - return interaction.reply({ + return interaction.editReply({ content: t(locale, 'commands.voiceSetup.setSuccess', { channel: `${channel}` }), - ephemeral: true }); } if (action === 'create') { const name = interaction.options.getString('name'); - if (!name) return interaction.reply({ content: '❌ `name` 옵션을 입력해주세요.', ephemeral: true }); + if (!name) return interaction.editReply({ content: '❌ `name` 옵션을 입력해주세요.' }); const newChannel = await interaction.guild!.channels.create({ name, @@ -113,9 +112,8 @@ export default { await prisma.voiceGenerator.create({ data: { channelId: newChannel.id, guildId, categoryId: category?.id || null } }); - return interaction.reply({ + return interaction.editReply({ content: t(locale, 'commands.voiceSetup.createSuccess', { channel: `${newChannel}` }), - ephemeral: true }); } } @@ -126,31 +124,29 @@ export default { if (action === 'name') { const template = interaction.options.getString('template'); - if (!template) return interaction.reply({ content: '❌ `template` 옵션을 입력해주세요.', ephemeral: true }); + if (!template) return interaction.editReply({ content: '❌ `template` 옵션을 입력해주세요.' }); await prisma.voiceGuildConfig.upsert({ where: { guildId }, update: { defaultNameTemplate: template }, create: { guildId, defaultNameTemplate: template } }); - return interaction.reply({ + return interaction.editReply({ content: t(locale, 'commands.voiceConfig.setSuccess'), - ephemeral: true }); } if (action === 'limit') { const limit = interaction.options.getInteger('limit'); - if (limit === null) return interaction.reply({ content: '❌ `limit` 옵션을 입력해주세요.', ephemeral: true }); + if (limit === null) return interaction.editReply({ content: '❌ `limit` 옵션을 입력해주세요.' }); await prisma.voiceGuildConfig.upsert({ where: { guildId }, update: { defaultUserLimit: limit }, create: { guildId, defaultUserLimit: limit } }); - return interaction.reply({ + return interaction.editReply({ content: t(locale, 'commands.voiceConfig.setSuccess'), - ephemeral: true }); } @@ -171,14 +167,13 @@ export default { inline: true } ); - return interaction.reply({ embeds: [embed], ephemeral: true }); + return interaction.editReply({ embeds: [embed] }); } } } catch (error) { logger.error('Error in voice command', error); - return interaction.reply({ + return interaction.editReply({ content: t(locale, 'errors.E3003.userMessage'), - ephemeral: true }); } }, diff --git a/src/config/env.ts b/src/config/env.ts index 0c3a0a7..046a3cf 100644 --- a/src/config/env.ts +++ b/src/config/env.ts @@ -1,6 +1,9 @@ import { config } from 'dotenv'; import { hostname } from 'os'; -config(); +import { resolve } from 'path'; + +// Prefer systemd/cron-set DOTENV_CONFIG_PATH; otherwise cwd .env (default dotenv behavior). +config({ path: process.env.DOTENV_CONFIG_PATH || resolve(process.cwd(), '.env') }); const generateInstanceId = () => { return process.env.INSTANCE_ID || hostname() || `kord-${Math.random().toString(36).substring(2, 7)}`; @@ -13,5 +16,13 @@ export const env = { DATABASE_URL: process.env.DATABASE_URL || '', VOICE_WAITING_ROOM_ID: process.env.VOICE_WAITING_ROOM_ID || '', VOICE_CATEGORY_ID: process.env.VOICE_CATEGORY_ID || '', + /** log4js level: trace | debug | info | warn | error | fatal */ + LOG_LEVEL: process.env.LOG_LEVEL || 'info', + /** + * Directory for log4js `kord.log` (created at startup). Relative paths resolve from `process.cwd()`. + * For Jenkins or wipe-and-redeploy flows, set an absolute path **outside** the deploy tree (e.g. `/var/lib/kord/logs`) + * so logs survive redeploys and match `StandardOutput=append` in systemd if you point it at the same file. + */ + LOG_DIR: process.env.LOG_DIR || 'logs', INSTANCE_ID: generateInstanceId(), }; diff --git a/src/database/index.ts b/src/database/index.ts index 474e501..2bc929b 100644 --- a/src/database/index.ts +++ b/src/database/index.ts @@ -1,11 +1,36 @@ +import type { PoolConfig } from 'pg'; import { Pool } from 'pg'; import { PrismaPg } from '@prisma/adapter-pg'; import { PrismaClient } from '@prisma/client'; +import { env } from '../config/env'; import { logger } from '../utils/logger'; -// Prisma 7 requires a driver adapter for direct database connections. -const pool = new Pool({ connectionString: process.env.DATABASE_URL }); -const adapter = new PrismaPg(pool); +/** + * `?schema=` in DATABASE_URL is a Prisma URL extension. node-postgres does not apply it, + * so connections default to `search_path=public`. PrismaPg also needs an explicit schema + * option in some setups (see prisma/prisma#28611). + */ +function createPgPoolConfig(connectionString: string): { poolConfig: PoolConfig; prismaSchema?: string } { + if (!connectionString) { + return { poolConfig: { connectionString: '' } }; + } + try { + const url = new URL(connectionString); + const schema = url.searchParams.get('schema')?.trim(); + const poolConfig: PoolConfig = { connectionString }; + if (schema) { + const escaped = schema.replace(/"/g, '""'); + poolConfig.options = `-c search_path="${escaped}"`; + } + return { poolConfig, prismaSchema: schema || undefined }; + } catch { + return { poolConfig: { connectionString } }; + } +} + +const { poolConfig, prismaSchema } = createPgPoolConfig(env.DATABASE_URL); +const pool = new Pool(poolConfig); +const adapter = prismaSchema ? new PrismaPg(pool, { schema: prismaSchema }) : new PrismaPg(pool); export const prisma = new PrismaClient({ adapter, diff --git a/src/events/interactionCreate.ts b/src/events/interactionCreate.ts index 4387a64..7ffc37f 100644 --- a/src/events/interactionCreate.ts +++ b/src/events/interactionCreate.ts @@ -18,6 +18,8 @@ export default { const command = client.commands.get(interaction.commandName); if (!command) return; + // Acknowledge before locale DB reads so Discord's ~3s interaction window is never missed. + await interaction.deferReply({ ephemeral: true }); const locale = await getInteractionLocale(interaction); await withErrorHandler(interaction, async () => { await command.execute(interaction, locale); diff --git a/src/events/ready.ts b/src/events/ready.ts index 5f256bc..d6f9ca4 100644 --- a/src/events/ready.ts +++ b/src/events/ready.ts @@ -5,7 +5,8 @@ import { VoiceService } from '../services/VoiceService'; import { PresenceService } from '../services/PresenceService'; import { EventService } from '../services/EventService'; import { auditLogService } from '../services/AuditLogService'; -import { tryAcquireLock } from '../cache'; + + import { env } from '../config/env'; export default { @@ -18,18 +19,11 @@ export default { EventService.startReminderLoop(client); try { - const lockKey = 'commands:sync:lock'; - // EX 300 = 5 minutes lock. Only one instance needs to do this per boot cycle. - const acquired = await tryAcquireLock(lockKey, 300); - - if (acquired) { - const commandsData = Array.from(client.commands.values()).map(c => c.data.toJSON()); - await client.application?.commands.set(commandsData); - logger.info(`Successfully registered ${commandsData.length} global application commands.`); - } else { - logger.info('Global commands registration skipped (already handled by another instance).'); - } + const commandsData = Array.from(client.commands.values()).map(c => c.data.toJSON()); + await client.application?.commands.set(commandsData); + logger.info(`Successfully registered ${commandsData.length} global application commands.`); } catch (e) { + logger.error('Failed to register global commands', e); } diff --git a/src/i18n/localeHelper.ts b/src/i18n/localeHelper.ts index 663fd8d..c3391d6 100644 --- a/src/i18n/localeHelper.ts +++ b/src/i18n/localeHelper.ts @@ -23,21 +23,20 @@ export async function getInteractionLocale(interaction: Interaction): Promise; artResourcePaths: string[]; @@ -50,6 +52,10 @@ interface FishingRarityEntry { rewardMultiplier: number; reactionWindowMultiplier: number; tensionMultiplier: number; + sizeMultiplier: { + min: number; + max: number; + }; backgroundColor: string; } @@ -74,6 +80,7 @@ interface FishingSession { lineTension: number; status: FishingState; reward: number | null; + catchSizeCm: number | null; tickInterval: NodeJS.Timeout | null; isRendering: boolean; needsRender: boolean; @@ -141,7 +148,7 @@ export class FishingService { } const userKey = this.getUserKey(interaction.guildId, interaction.user.id); - const existing = this.sessionsByUser.get(userKey); + const existing = await this.getActiveSession(userKey); if (existing) { return { thread: existing.thread, existed: true }; } @@ -163,7 +170,7 @@ export class FishingService { return false; } - const session = this.sessionsByUser.get(this.getUserKey(interaction.guildId, interaction.user.id)); + const session = await this.getActiveSession(this.getUserKey(interaction.guildId, interaction.user.id)); if (!session) { const thread = await this.findOwnedFishingThread(interaction); if (!thread) { @@ -196,6 +203,13 @@ export class FishingService { return; } + if (session.status === 'success' || session.status === 'failed') { + await interaction.update({ + components: [this.buildControlRow(session.userId, true)], + }); + return; + } + if (interaction.user.id !== session.userId) { await interaction.reply({ content: t(locale, 'commands.fishing.ownerOnly'), @@ -217,6 +231,55 @@ export class FishingService { await this.queueAction(session, action as FishingAction); } + static async getProfile(userId: string, guildId: string) { + return (prisma as any).fishingProfile.findUnique({ + where: { + userId_guildId: { userId, guildId }, + }, + }); + } + + static async getCollection(userId: string, guildId: string) { + return (prisma as any).fishingCollectionEntry.findMany({ + where: { + userId, + guildId, + }, + orderBy: [ + { bestRarityRank: 'desc' }, + { bestSizeCm: 'desc' }, + { catchCount: 'desc' }, + ], + }); + } + + static async getSizeRanking(guildId: string) { + return (prisma as any).fishingCollectionEntry.findMany({ + where: { + guildId, + }, + orderBy: [ + { bestSizeCm: 'desc' }, + { bestRarityRank: 'desc' }, + { catchCount: 'desc' }, + { lastCaughtAt: 'asc' }, + ], + take: 10, + }); + } + + static getFishDisplayName(fishId: string) { + return this.fishingCatalog.find((fish) => fish.id === fishId)?.displayName ?? fishId; + } + + static getRarityDisplayNameById(rarityId: string, locale: SupportedLocale) { + const rarity = this.fishingRarities.find((entry) => entry.id === rarityId); + if (!rarity) { + return rarityId; + } + return this.getRarityDisplayName(rarity, locale); + } + private static async tickSession(session: FishingSession) { if (!this.sessionsByUser.has(this.getUserKey(session.guildId, session.userId))) { this.clearTick(session); @@ -272,6 +335,7 @@ export class FishingService { Math.round(this.rollRange(session.currentFish.rewardGold) * session.currentRarity.rewardMultiplier), ); session.reward = reward; + session.catchSizeCm = this.rollCatchSizeCm(session.currentFish, session.currentRarity); await RefinementService.addGold(session.userId, session.guildId, reward); await this.finishSession(session, 'success', false); return; @@ -311,13 +375,16 @@ export class FishingService { private static async finishSession(session: FishingSession, finalState: 'success' | 'failed', deleteThread: boolean) { session.status = finalState; this.clearTick(session); - this.sessionsByUser.delete(this.getUserKey(session.guildId, session.userId)); - this.sessionsByThread.delete(session.threadId); logger.info(`[Fishing] Finished session for ${session.userId} with state ${finalState}.`); + await this.recordProfileResult(session, finalState); + await this.renderSession(session, true); + this.sessionsByUser.delete(this.getUserKey(session.guildId, session.userId)); + this.sessionsByThread.delete(session.threadId); + if (finalState === 'success') { await this.sendCatchResult(session); } @@ -327,6 +394,39 @@ export class FishingService { } } + private static async getActiveSession(userKey: string) { + const session = this.sessionsByUser.get(userKey); + if (!session) { + return null; + } + + if (await this.isSessionStale(session)) { + this.clearStaleSession(session); + return null; + } + + return session; + } + + private static async isSessionStale(session: FishingSession) { + try { + await session.thread.fetch(); + await session.controlMessage.fetch(); + return false; + } catch (error) { + logger.info( + `[Fishing] Clearing stale session for ${session.userId} in thread ${session.threadId}: ${error instanceof Error ? error.message : String(error)}`, + ); + return true; + } + } + + private static clearStaleSession(session: FishingSession) { + this.clearTick(session); + this.sessionsByUser.delete(this.getUserKey(session.guildId, session.userId)); + this.sessionsByThread.delete(session.threadId); + } + private static async deleteThread(thread: ThreadChannel) { try { await thread.delete(); @@ -480,6 +580,7 @@ export class FishingService { lineTension: 0, status: 'hooked' as FishingState, reward: null, + catchSizeCm: null, tickInterval: null, isRendering: false, needsRender: false, @@ -553,6 +654,7 @@ export class FishingService { t(session.locale, 'commands.fishing.catchResultBody', { rarity: rarityName, fish: session.currentFish.displayName, + sizeCm: (session.catchSizeCm ?? 0).toFixed(1), reward: String(session.reward ?? 0), }), ) @@ -560,6 +662,11 @@ export class FishingService { name: t(session.locale, 'commands.fishing.rarity'), value: rarityName, inline: true, + }) + .addFields({ + name: t(session.locale, 'commands.fishing.size'), + value: `${(session.catchSizeCm ?? 0).toFixed(1)} cm`, + inline: true, }); if (artPath && fs.existsSync(artPath)) { @@ -699,6 +806,111 @@ export class FishingService { return locale === 'ko' && rarity.displayNameKo ? rarity.displayNameKo : rarity.displayName; } + private static async recordProfileResult(session: FishingSession, finalState: 'success' | 'failed') { + const reward = session.reward ?? 0; + const rarityField = this.getRarityCountField(session.currentRarity.id); + const existingProfile = await this.getProfile(session.userId, session.guildId); + + await (prisma as any).fishingProfile.upsert({ + where: { + userId_guildId: { + userId: session.userId, + guildId: session.guildId, + }, + }, + create: { + userId: session.userId, + guildId: session.guildId, + totalCastCount: 1, + successCount: finalState === 'success' ? 1 : 0, + failCount: finalState === 'failed' ? 1 : 0, + totalGoldEarned: reward, + bestCatchReward: reward, + commonCatchCount: rarityField === 'commonCatchCount' && finalState === 'success' ? 1 : 0, + uncommonCatchCount: rarityField === 'uncommonCatchCount' && finalState === 'success' ? 1 : 0, + rareCatchCount: rarityField === 'rareCatchCount' && finalState === 'success' ? 1 : 0, + epicCatchCount: rarityField === 'epicCatchCount' && finalState === 'success' ? 1 : 0, + legendaryCatchCount: rarityField === 'legendaryCatchCount' && finalState === 'success' ? 1 : 0, + lastCastAt: new Date(), + }, + update: { + totalCastCount: { increment: 1 }, + successCount: finalState === 'success' ? { increment: 1 } : undefined, + failCount: finalState === 'failed' ? { increment: 1 } : undefined, + totalGoldEarned: reward > 0 ? { increment: reward } : undefined, + bestCatchReward: reward > 0 ? Math.max(reward, existingProfile?.bestCatchReward ?? 0) : undefined, + [rarityField]: finalState === 'success' ? { increment: 1 } : undefined, + lastCastAt: new Date(), + }, + }); + + if (finalState === 'success') { + await this.recordCollectionCatch(session); + } + } + + private static async recordCollectionCatch(session: FishingSession) { + const rarityRank = this.getRarityRank(session.currentRarity.id); + const existingEntry = await (prisma as any).fishingCollectionEntry.findUnique({ + where: { + userId_guildId_fishId: { + userId: session.userId, + guildId: session.guildId, + fishId: session.currentFish.id, + }, + }, + }); + + const bestRarityRank = Math.max(existingEntry?.bestRarityRank ?? 0, rarityRank); + const bestRarityId = bestRarityRank === rarityRank + ? session.currentRarity.id + : existingEntry?.bestRarityId ?? session.currentRarity.id; + const bestSizeCm = Math.max(existingEntry?.bestSizeCm ?? 0, session.catchSizeCm ?? 0); + + await (prisma as any).fishingCollectionEntry.upsert({ + where: { + userId_guildId_fishId: { + userId: session.userId, + guildId: session.guildId, + fishId: session.currentFish.id, + }, + }, + create: { + userId: session.userId, + guildId: session.guildId, + fishId: session.currentFish.id, + catchCount: 1, + bestRarityId: session.currentRarity.id, + bestRarityRank: rarityRank, + bestSizeCm: session.catchSizeCm ?? 0, + lastCaughtAt: new Date(), + }, + update: { + catchCount: { increment: 1 }, + bestRarityId, + bestRarityRank, + bestSizeCm, + lastCaughtAt: new Date(), + }, + }); + } + + private static getRarityCountField(rarityId: string) { + if (rarityId === 'legendary') return 'legendaryCatchCount'; + if (rarityId === 'epic') return 'epicCatchCount'; + if (rarityId === 'rare') return 'rareCatchCount'; + if (rarityId === 'uncommon') return 'uncommonCatchCount'; + return 'commonCatchCount'; + } + + private static getRarityRank(rarityId: string) { + if (rarityId === 'legendary') return 5; + if (rarityId === 'epic') return 4; + if (rarityId === 'rare') return 3; + if (rarityId === 'uncommon') return 2; + return 1; + } + private static getRarityBadge(rarityId: string) { if (rarityId === 'legendary') return '🟠'; if (rarityId === 'epic') return '🟣'; @@ -735,6 +947,12 @@ export class FishingService { return Number.parseInt(value.replace('#', ''), 16); } + private static rollCatchSizeCm(fish: FishingCatalogEntry, rarity: FishingRarityEntry) { + const base = this.rollDecimalRange(fish.sizeCm); + const multiplier = this.rollDecimalRange(rarity.sizeMultiplier); + return Math.round(base * multiplier * 10) / 10; + } + private static formatSelectedAction(action: FishingAction | null) { if (action === 'left') return '⬅️'; if (action === 'center') return '⏺️'; @@ -753,6 +971,14 @@ export class FishingService { private static getUserKey(guildId: string, userId: string) { return `${guildId}:${userId}`; } + + private static rollDecimalRange(range: { min: number; max: number }) { + if (range.min === range.max) { + return range.min; + } + + return range.min + Math.random() * (range.max - range.min); + } } export function buildFishingGauge(current: number, max: number, width: number) { diff --git a/src/services/MusicService.ts b/src/services/MusicService.ts index a2a2f69..23658d8 100644 --- a/src/services/MusicService.ts +++ b/src/services/MusicService.ts @@ -1,4 +1,4 @@ -import { +import { ActionRowBuilder, ButtonBuilder, ButtonInteraction, diff --git a/src/services/VoiceService.ts b/src/services/VoiceService.ts index 900f507..3335de1 100644 --- a/src/services/VoiceService.ts +++ b/src/services/VoiceService.ts @@ -1,7 +1,8 @@ import { VoiceState, ChannelType, PermissionFlagsBits, VoiceChannel, ActionRowBuilder, StringSelectMenuBuilder, StringSelectMenuOptionBuilder, Client, GuildMember } from 'discord.js'; import { prisma } from '../database'; import { logger } from '../utils/logger'; -import { tryAcquireLock } from '../cache'; + + import { ErrorDefs } from '../errors/ErrorCodes'; import { t, SupportedLocale, DEFAULT_LOCALE } from '../i18n'; import { getContextLocale } from '../i18n/localeHelper'; @@ -9,54 +10,45 @@ import { auditLogService } from './AuditLogService'; export class VoiceService { public static async syncChannels(client: Client) { - const lockKey = 'voice:sync:lock'; - const acquired = await tryAcquireLock(lockKey, 60); - if (!acquired) { - logger.info('VoiceService: Another instance is already syncing channels. Skipping.'); - return; - } + logger.info('VoiceService: Starting channel synchronization...'); + const channels = await prisma.tempVoiceChannel.findMany(); - try { - logger.info('VoiceService: Starting channel synchronization...'); - const channels = await prisma.tempVoiceChannel.findMany(); + for (const temp of channels) { + try { + const guild = client.guilds.cache.get(temp.guildId) || await client.guilds.fetch(temp.guildId).catch(() => null); + if (!guild) continue; - for (const temp of channels) { - try { - const guild = client.guilds.cache.get(temp.guildId) || await client.guilds.fetch(temp.guildId).catch(() => null); - if (!guild) continue; - const channel = guild.channels.cache.get(temp.channelId) || await guild.channels.fetch(temp.channelId).catch(() => null); - - if (!channel || channel.type !== ChannelType.GuildVoice) { - await prisma.tempVoiceChannel.delete({ where: { channelId: temp.channelId } }); - logger.info(`VoiceService: Purged missing Discord channel ${temp.channelId} from DB`); - continue; - } + const channel = guild.channels.cache.get(temp.channelId) || await guild.channels.fetch(temp.channelId).catch(() => null); - const voiceChannel = channel as VoiceChannel; - const humanCount = voiceChannel.members.filter(m => !m.user.bot).size; - - let shouldDelete = false; - if (temp.deleteWhen === 'EMPTY' && humanCount === 0) { - shouldDelete = true; - } else if (temp.deleteWhen === 'OWNER_LEAVE') { - const ownerInChannel = voiceChannel.members.has(temp.ownerId); - if (!ownerInChannel) shouldDelete = true; - } - - if (shouldDelete) { - await voiceChannel.delete().catch(() => {}); - await prisma.tempVoiceChannel.delete({ where: { channelId: temp.channelId } }).catch(() => {}); - logger.info(`VoiceService: Cleaned up orphaned channel ${voiceChannel.name} during boot`); - } - } catch (error) { - logger.error(`VoiceService: Error syncing channel ${temp.channelId}`, error); + if (!channel || channel.type !== ChannelType.GuildVoice) { + await prisma.tempVoiceChannel.delete({ where: { channelId: temp.channelId } }); + logger.info(`VoiceService: Purged missing Discord channel ${temp.channelId} from DB`); + continue; } + + const voiceChannel = channel as VoiceChannel; + const humanCount = voiceChannel.members.filter(m => !m.user.bot).size; + + let shouldDelete = false; + if (temp.deleteWhen === 'EMPTY' && humanCount === 0) { + shouldDelete = true; + } else if (temp.deleteWhen === 'OWNER_LEAVE') { + const ownerInChannel = voiceChannel.members.has(temp.ownerId); + if (!ownerInChannel) shouldDelete = true; + } + + if (shouldDelete) { + await voiceChannel.delete().catch(() => {}); + await prisma.tempVoiceChannel.delete({ where: { channelId: temp.channelId } }).catch(() => {}); + logger.info(`VoiceService: Cleaned up orphaned channel ${voiceChannel.name} during boot`); + } + } catch (error) { + logger.error(`VoiceService: Error syncing channel ${temp.channelId}`, error); } - logger.info('VoiceService: Channel synchronization complete.'); - } catch (error) { - logger.error('VoiceService: Failed during channel synchronization', error); } + logger.info('VoiceService: Channel synchronization complete.'); + } public static async handleVoiceStateUpdate(oldState: VoiceState, newState: VoiceState) { const member = newState.member; diff --git a/src/services/WebhookService.ts b/src/services/WebhookService.ts index 2f2d3bc..8dcf87e 100644 --- a/src/services/WebhookService.ts +++ b/src/services/WebhookService.ts @@ -1,18 +1,24 @@ import { TextChannel, WebhookClient } from 'discord.js'; import { logger } from '../utils/logger'; -import { cache } from '../cache'; + + export class WebhookService { private static readonly MAX_WEBHOOKS = 10; private static readonly WEBHOOK_NAME = 'Kord Mimic Webhook'; + private static readonly WEBHOOK_CACHE_TTL_MS = 86400 * 1000; + private static readonly webhookCache = new Map< + string, + { id: string; token: string; expiresAt: number } + >(); public static async getWebhookClient(channel: TextChannel): Promise { try { - // 1. Check cache - const cachedData = await cache.get(`webhook:${channel.id}`); - if (cachedData) { - const { id, token } = JSON.parse(cachedData); - return new WebhookClient({ id, token }); + const now = Date.now(); + const cached = this.webhookCache.get(channel.id); + if (cached && now < cached.expiresAt) { + return new WebhookClient({ id: cached.id, token: cached.token }); + } // 2. Fetch from Discord API @@ -40,10 +46,12 @@ export class WebhookService { logger.info(`Created new webhook for channel ${channel.id}`); } - // 3. Save to cache (expire in 1 day to ensure token freshness) if (kordWebhook.token) { - await cache.set(`webhook:${channel.id}`, JSON.stringify({ id: kordWebhook.id, token: kordWebhook.token }), { - exSeconds: 86400, + this.webhookCache.set(channel.id, { + id: kordWebhook.id, + token: kordWebhook.token, + expiresAt: Date.now() + this.WEBHOOK_CACHE_TTL_MS, + }); return new WebhookClient({ id: kordWebhook.id, token: kordWebhook.token }); } diff --git a/src/utils/logger.ts b/src/utils/logger.ts index 36cf729..ac21e7a 100644 --- a/src/utils/logger.ts +++ b/src/utils/logger.ts @@ -1,6 +1,65 @@ -export const logger = { - info: (...args: any[]) => console.log('\x1b[36m[INFO]\x1b[0m', ...args), - warn: (...args: any[]) => console.log('\x1b[33m[WARN]\x1b[0m', ...args), - error: (...args: any[]) => console.error('\x1b[31m[ERROR]\x1b[0m', ...args), - debug: (...args: any[]) => console.debug('\x1b[90m[DEBUG]\x1b[0m', ...args), -}; +import { mkdirSync } from 'fs'; +import log4js from 'log4js'; +import { resolve } from 'path'; +import { env } from '../config/env'; + +const LOG_LEVELS = ['trace', 'debug', 'info', 'warn', 'error', 'fatal'] as const; +type LogLevel = (typeof LOG_LEVELS)[number]; + +function resolveLogLevel(): LogLevel { + const raw = env.LOG_LEVEL.toLowerCase(); + return (LOG_LEVELS as readonly string[]).includes(raw) ? (raw as LogLevel) : 'info'; +} + +/** Resolves LOG_DIR from .env: absolute paths unchanged; relative paths from cwd. */ +function resolveLogDir(raw: string): string { + const trimmed = raw.trim(); + if (!trimmed) { + return resolve('logs'); + } + return resolve(trimmed); +} + +function ensureLogDir(dir: string): void { + try { + mkdirSync(dir, { recursive: true }); + } catch (err) { + const msg = err instanceof Error ? err.message : String(err); + process.stderr.write(`[kord] Failed to create LOG_DIR "${dir}": ${msg}\n`); + throw err; + } +} + +const logDir = resolveLogDir(env.LOG_DIR); +const level = resolveLogLevel(); + +ensureLogDir(logDir); + +log4js.configure({ + appenders: { + file: { + type: 'dateFile', + filename: resolve(logDir, 'kord.log'), + pattern: 'yyyy-MM-dd', + alwaysIncludePattern: true, + numBackups: 7, + layout: { + type: 'pattern', + pattern: '%d{yyyy-MM-dd hh:mm:ss.SSS} [%p] %m', + }, + }, + }, + categories: { + default: { appenders: ['file'], level }, + }, +}); + +process.on('exit', () => { + try { + log4js.shutdown(); + } catch { + // ignore + } +}); + +export const logger = log4js.getLogger(); diff --git a/tests/services/FishingService.test.ts b/tests/services/FishingService.test.ts index 11eaff6..36c6e2f 100644 --- a/tests/services/FishingService.test.ts +++ b/tests/services/FishingService.test.ts @@ -1,4 +1,4 @@ -import { buildFishingGauge, buildFishingLane } from '../../src/services/FishingService'; +import { buildFishingGauge, buildFishingLane } from '../../src/services/FishingService'; describe('FishingService helpers', () => { it('renders a gauge with filled and empty segments', () => { diff --git a/yarn.lock b/yarn.lock index bbfc7aa..0e179a3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1120,13 +1120,6 @@ __metadata: languageName: node linkType: hard -"@ioredis/commands@npm:1.5.1": - version: 1.5.1 - resolution: "@ioredis/commands@npm:1.5.1" - checksum: 10c0/cb8f6d13cff0753e3e7ef001fb895491985d9a623248192538f13bc2fd9bfdfde3c18cf2ba6f20ec8ceaa681b0771070d3a09b82eed044c798bcfef5e3ae54b3 - languageName: node - linkType: hard - "@isaacs/cliui@npm:^8.0.2": version: 8.0.2 resolution: "@isaacs/cliui@npm:8.0.2" @@ -3017,13 +3010,6 @@ __metadata: languageName: node linkType: hard -"cluster-key-slot@npm:^1.1.0": - version: 1.1.2 - resolution: "cluster-key-slot@npm:1.1.2" - checksum: 10c0/d7d39ca28a8786e9e801eeb8c770e3c3236a566625d7299a47bb71113fb2298ce1039596acb82590e598c52dbc9b1f088c8f587803e697cb58e1867a95ff94d3 - languageName: node - linkType: hard - "co@npm:^4.6.0": version: 4.6.0 resolution: "co@npm:4.6.0" @@ -3121,6 +3107,13 @@ __metadata: languageName: node linkType: hard +"date-format@npm:^4.0.14": + version: 4.0.14 + resolution: "date-format@npm:4.0.14" + checksum: 10c0/1c67a4d77c677bb880328c81d81f5b9ed7fbf672bdaff74e5a0f7314b21188f3a829b06acf120c70cc1df876a7724e3e5c23d511e86d64656a3035a76ac3930b + languageName: node + linkType: hard + "debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4, debug@npm:^4.4.3": version: 4.4.3 resolution: "debug@npm:4.4.3" @@ -3720,7 +3713,7 @@ __metadata: languageName: node linkType: hard -"flatted@npm:^3.2.9": +"flatted@npm:^3.2.7, flatted@npm:^3.2.9": version: 3.4.2 resolution: "flatted@npm:3.4.2" checksum: 10c0/a65b67aae7172d6cdf63691be7de6c5cd5adbdfdfe2e9da1a09b617c9512ed794037741ee53d93114276bff3f93cd3b0d97d54f9b316e1e4885dde6e9ffdf7ed @@ -3737,6 +3730,17 @@ __metadata: languageName: node linkType: hard +"fs-extra@npm:^8.1.0": + version: 8.1.0 + resolution: "fs-extra@npm:8.1.0" + dependencies: + graceful-fs: "npm:^4.2.0" + jsonfile: "npm:^4.0.0" + universalify: "npm:^0.1.0" + checksum: 10c0/259f7b814d9e50d686899550c4f9ded85c46c643f7fe19be69504888e007fcbc08f306fae8ec495b8b998635e997c9e3e175ff2eeed230524ef1c1684cc96423 + languageName: node + linkType: hard + "fs-minipass@npm:^2.0.0": version: 2.1.0 resolution: "fs-minipass@npm:2.1.0" @@ -3917,7 +3921,7 @@ __metadata: languageName: node linkType: hard -"graceful-fs@npm:^4.2.11, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6": +"graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.11, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6": version: 4.2.11 resolution: "graceful-fs@npm:4.2.11" checksum: 10c0/386d011a553e02bc594ac2ca0bd6d9e4c22d7fa8cfbfc448a6d148c59ea881b092db9dbe3547ae4b88e55f1b01f7c4a2ecc53b310c042793e63aa44cf6c257f2 @@ -4103,23 +4107,6 @@ __metadata: languageName: node linkType: hard -"ioredis@npm:^5.10.1": - version: 5.10.1 - resolution: "ioredis@npm:5.10.1" - dependencies: - "@ioredis/commands": "npm:1.5.1" - cluster-key-slot: "npm:^1.1.0" - debug: "npm:^4.3.4" - denque: "npm:^2.1.0" - lodash.defaults: "npm:^4.2.0" - lodash.isarguments: "npm:^3.1.0" - redis-errors: "npm:^1.2.0" - redis-parser: "npm:^3.0.0" - standard-as-callback: "npm:^2.1.0" - checksum: 10c0/d0507b52520d3bdd5dacaa33aed9dd3133794d8633b43a6b7fc3199a5e73f92cb77409f6904abe68e3221a95a630d97073b8c1c9e2c0c7613124db67e97c0eb0 - languageName: node - linkType: hard - "ip-address@npm:^10.0.1": version: 10.1.0 resolution: "ip-address@npm:10.1.0" @@ -4775,6 +4762,18 @@ __metadata: languageName: node linkType: hard +"jsonfile@npm:^4.0.0": + version: 4.0.0 + resolution: "jsonfile@npm:4.0.0" + dependencies: + graceful-fs: "npm:^4.1.6" + dependenciesMeta: + graceful-fs: + optional: true + checksum: 10c0/7dc94b628d57a66b71fb1b79510d460d662eb975b5f876d723f81549c2e9cd316d58a2ddf742b2b93a4fa6b17b2accaf1a738a0e2ea114bdfb13a32e5377e480 + languageName: node + linkType: hard + "keyv@npm:^4.5.4": version: 4.5.4 resolution: "keyv@npm:4.5.4" @@ -4802,8 +4801,8 @@ __metadata: dotenv: "npm:^17.3.1" eslint: "npm:^10.1.0" ffmpeg-static: "npm:^5.3.0" - ioredis: "npm:^5.10.1" jest: "npm:^30.3.0" + log4js: "npm:^6.9.1" pg: "npm:^8.20.0" prettier: "npm:^3.8.1" prism-media: "npm:^1.3.5" @@ -4858,20 +4857,6 @@ __metadata: languageName: node linkType: hard -"lodash.defaults@npm:^4.2.0": - version: 4.2.0 - resolution: "lodash.defaults@npm:4.2.0" - checksum: 10c0/d5b77aeb702caa69b17be1358faece33a84497bcca814897383c58b28a2f8dfc381b1d9edbec239f8b425126a3bbe4916223da2a576bb0411c2cefd67df80707 - languageName: node - linkType: hard - -"lodash.isarguments@npm:^3.1.0": - version: 3.1.0 - resolution: "lodash.isarguments@npm:3.1.0" - checksum: 10c0/5e8f95ba10975900a3920fb039a3f89a5a79359a1b5565e4e5b4310ed6ebe64011e31d402e34f577eca983a1fc01ff86c926e3cbe602e1ddfc858fdd353e62d8 - languageName: node - linkType: hard - "lodash.memoize@npm:^4.1.2": version: 4.1.2 resolution: "lodash.memoize@npm:4.1.2" @@ -4893,6 +4878,19 @@ __metadata: languageName: node linkType: hard +"log4js@npm:^6.9.1": + version: 6.9.1 + resolution: "log4js@npm:6.9.1" + dependencies: + date-format: "npm:^4.0.14" + debug: "npm:^4.3.4" + flatted: "npm:^3.2.7" + rfdc: "npm:^1.3.0" + streamroller: "npm:^3.1.5" + checksum: 10c0/05846e48f72d662800c8189bd178c42b4aa2f0c574cfc90a1942cf90b76f621c44019e26796c8fd88da1b6f0fe8272cba607cbaad6ae6ede50a7a096b58197ea + languageName: node + linkType: hard + "long@npm:^5.2.1": version: 5.3.2 resolution: "long@npm:5.3.2" @@ -5841,22 +5839,6 @@ __metadata: languageName: node linkType: hard -"redis-errors@npm:^1.0.0, redis-errors@npm:^1.2.0": - version: 1.2.0 - resolution: "redis-errors@npm:1.2.0" - checksum: 10c0/5b316736e9f532d91a35bff631335137a4f974927bb2fb42bf8c2f18879173a211787db8ac4c3fde8f75ed6233eb0888e55d52510b5620e30d69d7d719c8b8a7 - languageName: node - linkType: hard - -"redis-parser@npm:^3.0.0": - version: 3.0.0 - resolution: "redis-parser@npm:3.0.0" - dependencies: - redis-errors: "npm:^1.0.0" - checksum: 10c0/ee16ac4c7b2a60b1f42a2cdaee22b005bd4453eb2d0588b8a4939718997ae269da717434da5d570fe0b05030466eeb3f902a58cf2e8e1ca058bf6c9c596f632f - languageName: node - linkType: hard - "remeda@npm:2.33.4": version: 2.33.4 resolution: "remeda@npm:2.33.4" @@ -5908,6 +5890,13 @@ __metadata: languageName: node linkType: hard +"rfdc@npm:^1.3.0": + version: 1.4.1 + resolution: "rfdc@npm:1.4.1" + checksum: 10c0/4614e4292356cafade0b6031527eea9bc90f2372a22c012313be1dcc69a3b90c7338158b414539be863fa95bfcb2ddcd0587be696841af4e6679d85e62c060c7 + languageName: node + linkType: hard + "rimraf@npm:^3.0.2": version: 3.0.2 resolution: "rimraf@npm:3.0.2" @@ -6177,13 +6166,6 @@ __metadata: languageName: node linkType: hard -"standard-as-callback@npm:^2.1.0": - version: 2.1.0 - resolution: "standard-as-callback@npm:2.1.0" - checksum: 10c0/012677236e3d3fdc5689d29e64ea8a599331c4babe86956bf92fc5e127d53f85411c5536ee0079c52c43beb0026b5ce7aa1d834dd35dd026e82a15d1bcaead1f - languageName: node - linkType: hard - "std-env@npm:3.10.0": version: 3.10.0 resolution: "std-env@npm:3.10.0" @@ -6191,6 +6173,17 @@ __metadata: languageName: node linkType: hard +"streamroller@npm:^3.1.5": + version: 3.1.5 + resolution: "streamroller@npm:3.1.5" + dependencies: + date-format: "npm:^4.0.14" + debug: "npm:^4.3.4" + fs-extra: "npm:^8.1.0" + checksum: 10c0/0bdeec34ad37487d959ba908f17067c938f544db88b5bb1669497a67a6b676413229ce5a6145c2812d06959ebeb8842e751076647d4b323ca06be612963b9099 + languageName: node + linkType: hard + "string-length@npm:^4.0.2": version: 4.0.2 resolution: "string-length@npm:4.0.2" @@ -6533,6 +6526,13 @@ __metadata: languageName: node linkType: hard +"universalify@npm:^0.1.0": + version: 0.1.2 + resolution: "universalify@npm:0.1.2" + checksum: 10c0/e70e0339f6b36f34c9816f6bf9662372bd241714dc77508d231d08386d94f2c4aa1ba1318614f92015f40d45aae1b9075cd30bd490efbe39387b60a76ca3f045 + languageName: node + linkType: hard + "unrs-resolver@npm:^1.7.11": version: 1.11.1 resolution: "unrs-resolver@npm:1.11.1"