STATUSBOT ARCHITECTURE

텔레그램 AI 봇 StatusBot 작동 원리

DeepSeek v4-flash가 대화를 담당하고, 실제 서버 작업은 opencode 에이전트가 수행하는 2단계 하이브리드 구조

전체 메시지 흐름
1

사용자 메시지

텔레그램에서 봇(@Duck_ro_bot)에게 대화를 보냅니다.

2

long-polling 수신

bot.pygetUpdates(25초 폴링)로 메시지를 받고 offset 파일로 중복 처리를 방지합니다.

3

명령어 분기

/status, /hk, /노드 상태, /공지 같은 명령은 전용 핸들러가 처리합니다. 그 외는 AI로 전달합니다.

4

DeepSeek 판단

ai.py가 시스템 프롬프트 + 대화 히스토리 + 새 메시지를 deepseek-v4-flash에 보내 답변을 생성합니다.

5

도구 호출 (run_opencode)

서버 작업이면 DeepSeek가 run_opencode 도구를 호출하고 작업 내용을 넘깁니다.

6

opencode 에이전트 실행

localhost:4096의 opencode 세션에 작업을 전달합니다. busy면 abort 후 재시도합니다. 에이전트가 bash·파일·웹 도구로 작업을 수행합니다.

7

결과 반환

작업 결과가 DeepSeek 대화 히스토리에 저장되고, sendMessage로 사용자에게 전달됩니다.

Component구성 요소

StatusBot은 3개의 핵심 컴포넌트로 나뉘어 동작합니다.

💬 bot.py — 텔레그램 게이트웨이

  • 텔레그램 Bot API와 long-polling 방식으로 통신 (webhook 불필요)
  • offset 파일에 마지막 update_id를 저장해 유실·중복 없음
  • 명령어(/status /hk /노드 상태 /공지 /new) 전용 처리
  • 홍콩 서버 자동 모니터링: CPU>25% (3분 지속), 메모리>85%, 트래픽>95% → 알림
  • AI 응답은 4000자 단위로 분할 전송 (텔레그램 제한)

🧠 ai.py — AI 라우터

  • DeepSeek chat/completions API 호출 (모델 deepseek-v4-flash)
  • 채팅방별 대화 히스토리를 ai_history.json에 저장 (최대 30개)
  • 시스템 프롬프트에 knowledge.md 지식 베이스를 주입
  • 함수 호출(Function Calling)으로 run_opencode 도구 제공
  • 서버 작업 여부를 DeepSeek가 스스로 판단해 위임

Routing작업 라우팅 규칙

모든 메시지는 DeepSeek가 먼저 받아 처리 방식을 결정합니다.

메시지 유형담당처리 방식
일반 대화 / 정보 질문DeepSeek시스템 프롬프트 + 히스토리로 바로 답변
서버 작업 요청 ("X 실행해줘", "X 설치해줘", 배포 등)opencoderun_opencode 도구 호출 → 에이전트가 실제 작업 수행
상태 조회 (/status, /hk)bot.pystatus.sh / hk_status.sh 실행 후 결과 전송
그룹 공지 (/공지)bot.pySSH로 홍콩 서버에서 AebbPT 채팅방 목록을 읽어 병렬 전송

Delegationopencode 에이전트와의 연동

서버 작업은 로컬에서 실행 중인 opencode 서버(localhost:4096)에게 위임됩니다.

🛠️ HTTP API 위임 방식

채팅방당 하나의 opencode 세션을 유지해 대화 맥락을 보존합니다.

# 1. 세션 생성 (채팅방 최초 메시지 시) POST http://localhost:4096/session → { "id": "..." } # 2. 세션 busy 확인 (이전 작업 미완료/권한 대기 시 abort 후 재시도) GET http://localhost:4096/session/status # 3. 작업 전송 POST http://localhost:4096/session/<id>/message { "parts": [{ "type": "text", "text": "작업 지시" }], "model": { "providerID": "opencode-go", "modelID": "deepseek-v4-flash" } }

동작 방식: opencode는 이 서버에서 opencode web으로 실행되며, bash(명령 실행)·파일 읽기/쓰기·검색·웹 조회 도구를 갖춘 AI 에이전트입니다. 작업 중 새 요청이 오면 기존 세션이 busy라 판단하고 abort 후 재시도합니다.

Code실제 구현 (ai.py 핵심 로직)

🧩 DeepSeek 도구 정의 & 위임 분기

TOOLS = [{ "type": "function", "function": { "name": "run_opencode", "description": "사용자가 실제 서버 작업(명령 실행, 파일 생성/수정, 서비스 관리, 배포 등)을 요청했을 때만 호출", "parameters": { "task": { "type": "string" } } } }] # 도구 호출이 감지되면 → opencode 위임 if tool_calls: task = ... # run_opencode 인자에서 추출 sid = opencode_create_session(f"TG AI {chat_id}") result = opencode_send(sid, task) # busy면 abort 후 재시도 return result

Summary한눈에 보기

항목내용
봇 이름@Duck_ro_bot (텔레그램)
수신 방식long-polling (getUpdates + offset)
대화 모델DeepSeek deepseek-v4-flash
작업 에이전트opencode (localhost:4096, Basic Auth)
대화 기억ai_history.json — 채팅방별 최대 30개
지식 베이스knowledge.md — 서버 현황·라우팅 규칙
모니터링홍콩 서버 CPU·메모리·트래픽 임계값 자동 알림