DeepSeek v4-flash가 대화를 담당하고, 실제 서버 작업은 opencode 에이전트가 수행하는 2단계 하이브리드 구조
텔레그램에서 봇(@Duck_ro_bot)에게 대화를 보냅니다.
bot.py가 getUpdates(25초 폴링)로 메시지를 받고 offset 파일로 중복 처리를 방지합니다.
/status, /hk, /노드 상태, /공지 같은 명령은 전용 핸들러가 처리합니다. 그 외는 AI로 전달합니다.
ai.py가 시스템 프롬프트 + 대화 히스토리 + 새 메시지를 deepseek-v4-flash에 보내 답변을 생성합니다.
서버 작업이면 DeepSeek가 run_opencode 도구를 호출하고 작업 내용을 넘깁니다.
localhost:4096의 opencode 세션에 작업을 전달합니다. busy면 abort 후 재시도합니다. 에이전트가 bash·파일·웹 도구로 작업을 수행합니다.
작업 결과가 DeepSeek 대화 히스토리에 저장되고, sendMessage로 사용자에게 전달됩니다.
StatusBot은 3개의 핵심 컴포넌트로 나뉘어 동작합니다.
offset 파일에 마지막 update_id를 저장해 유실·중복 없음/status /hk /노드 상태 /공지 /new) 전용 처리chat/completions API 호출 (모델 deepseek-v4-flash)ai_history.json에 저장 (최대 30개)knowledge.md 지식 베이스를 주입run_opencode 도구 제공모든 메시지는 DeepSeek가 먼저 받아 처리 방식을 결정합니다.
| 메시지 유형 | 담당 | 처리 방식 |
|---|---|---|
| 일반 대화 / 정보 질문 | DeepSeek | 시스템 프롬프트 + 히스토리로 바로 답변 |
| 서버 작업 요청 ("X 실행해줘", "X 설치해줘", 배포 등) | opencode | run_opencode 도구 호출 → 에이전트가 실제 작업 수행 |
상태 조회 (/status, /hk) | bot.py | status.sh / hk_status.sh 실행 후 결과 전송 |
그룹 공지 (/공지) | bot.py | SSH로 홍콩 서버에서 AebbPT 채팅방 목록을 읽어 병렬 전송 |
서버 작업은 로컬에서 실행 중인 opencode 서버(localhost:4096)에게 위임됩니다.
채팅방당 하나의 opencode 세션을 유지해 대화 맥락을 보존합니다.
동작 방식: opencode는 이 서버에서 opencode web으로 실행되며, bash(명령 실행)·파일 읽기/쓰기·검색·웹 조회 도구를 갖춘 AI 에이전트입니다. 작업 중 새 요청이 오면 기존 세션이 busy라 판단하고 abort 후 재시도합니다.
| 항목 | 내용 |
|---|---|
| 봇 이름 | @Duck_ro_bot (텔레그램) |
| 수신 방식 | long-polling (getUpdates + offset) |
| 대화 모델 | DeepSeek deepseek-v4-flash |
| 작업 에이전트 | opencode (localhost:4096, Basic Auth) |
| 대화 기억 | ai_history.json — 채팅방별 최대 30개 |
| 지식 베이스 | knowledge.md — 서버 현황·라우팅 규칙 |
| 모니터링 | 홍콩 서버 CPU·메모리·트래픽 임계값 자동 알림 |