관리자방을 이용한 공지봇 만들기

소개

관리자방에서 작성한 메세지가 다른 방에서 작성이 되도록 하는 방식을 구현했습니다

진행 방법

현우님이 주신 noticebridgebot을 이용해서 직접 서버에도 올리고 코드를 작성을 해야 실행이 되기에

코덱스와 클로드코드 서로 검증을 통해서 구현을 했습니다

한국어 문자 메시지 앱의 스크린샷

휴대폰으로 한국어로 된 메시지

테스트방에 테스트 중 메세지를 보내라고 했는데 보내는데 성공했습니다

근데 중요한 예약발송 기능을 하려했는데 대답이 :

현재 상황 분석

폴링 간격: 60초마다 한 번씩 서버 체크 시나리오 예시:

  • 예약 시각: 09:00:00

  • 실제 폴링: 09:00:45 (45초 늦음)

  • 결과: 메시지가 45초 늦게 전송됨

해결 방안: Catch-up Mode (권장)

가장 실용적인 해결책은 "놓친 스케줄은 즉시 실행" 방식입니다:

서버 측 로직 (server.py)

@app.get("/notices/pending")
def get_pending_notices(last_id: int = 0):
    now = datetime.now()
    
    # scheduled_at이 현재 시간보다 과거면 즉시 반환
    notices = db.execute("""
        SELECT * FROM notices 
        WHERE id > ? 
        AND status IN ('pending', 'scheduled')
        AND (scheduled_at IS NULL OR scheduled_at <= ?)  -- 과거 시간도 포함
        ORDER BY scheduled_at ASC
    """, (last_id, now.isoformat()))
    
    return notices

실제 동작 예시

Case 1: 정상 실행

09:00:00 - 메시지 예약됨
09:00:15 - 폴링 발생 → 메시지 전송 (15초 지연)

Case 2: 봇이 꺼져있다가 재시작

09:00:00 - 메시지 예약됨
09:00:00~09:30:00 - 봇 OFF 상태
09:30:15 - 봇 켜짐, 폴링 발생 → 즉시 전송 (30분 15초 지연)

Case 3: 반복 스케줄

매일 09:00:00 예약
12/03 09:00:45 - 첫 실행 (45초 지연)
12/04 09:00:30 - 다음 실행 (30초 지연)
12/05 09:00:10 - 그 다음 실행 (10초 지연)

지연 시간 허용 범위

대부분의 공지 사용 케이스에서 60초 이내 지연은 허용 가능합니다:

허용 가능한 케이스:

  • "매일 오전 9시 출석체크" → 9시 1분에 도착해도 OK

  • "10분 후 회의 알림" → 10분 30초 후에 도착해도 OK

문제가 될 수 있는 케이스:

  • 정확한 타이밍이 중요한 경매 종료 알림

  • 초 단위 정밀도가 필요한 거래 알림

만약 더 정밀한 타이밍이 필요하면 폴링 간격을 줄일 수 있습니다:

// NoticeBridgeBot.js CONFIG 수정
POLLING_INTERVAL: 10000,  // 60초 → 10초로 변경

하지만 이렇게 하면:

  • 서버 부하 6배 증가

  • 배터리 소모 증가

  • 네트워크 사용량 증가

이 방식으로 하면 원하는 시간에 안 된다는 걸 저번 perplexitybot을 만들때도 잘 알기에 더 이상 진행을 하지 않았습니다

결론

결과와 배운 점

이번에도 서로서로 전문적인 용어를 써서 100%이해는 못했는데

그렇지만 활용하는 법을 배워서 좋았습니다

도움 받은 글

현우님이 주신 noticebridgebot

1개의 답글

뉴스레터 무료 구독

👉 이 게시글도 읽어보세요