본문 바로가기
PROGRAMMING/배포 프로그램

[GIT/Discord] Discord에서 정해진 시간에 자동 메시지를 보내주는 봇 만들기

by PIZA 2025. 7. 1.

 

월~금 09:00~12:00 스터디에서

평일 12시에 스터디가 끝났음을 자동으로 알려주는 디스코드 봇을 만들어 보자.

외부 봇을 사용하지 않고 디스코드의 기능인 webhook과 외부 지원 프로그램 git만을 사용해서 python 코드로 작성할 것이다. (다른 언어도 물론 가능하다!)

 

 

 

1. 자동 채팅을 보내고 싶은 채널에서 채널 편집 -> 연동 -> 웹후크에서 새 웹후크를 만들어 준다.

 

 

 

2. 코드를 작성한다.(Python) -> discord_notify.yml 로 저장한다.(저장 명을 '.py'가 아니라 '.yml'로 바꾼다.)

name: Discord Notify

on:
  schedule:
    - cron: '0 3 * * 1-5'  #한국 시간으로 평일 오전 12시이다. 입맛에 맞게 수정하자.
  workflow_dispatch:

jobs:
  send-discord-message:
    runs-on: ubuntu-latest

    steps:
      - name: Set up Python
        uses: actions/setup-python@v4
        with:
          python-version: '3.x'

      - name: Install requests
        run: pip install requests

      - name: Create Python script safely
        run: |
          echo "import requests" > notify.py
          echo "from datetime import datetime" >> notify.py
          echo "" >> notify.py
          echo "WEBHOOK_URL = '${{ secrets.DISCORD_WEBHOOK }}'" >> notify.py
          echo "weekday = datetime.now().weekday()" >> notify.py
          echo "" >> notify.py
          echo "message = {" >> notify.py
          echo "    'content': '✨[자동화된 채팅입니다]✨\\n오늘 스터디 끝! 다들 맛점심하시길...\\n오늘 한 내용 내용공유방에 올리기!\\n ~*** 올림~'" >> notify.py
          echo "}" >> notify.py
          echo "" >> notify.py
          echo "if weekday < 5:" >> notify.py
          echo "    response = requests.post(WEBHOOK_URL, json=message)" >> notify.py
          echo "    if response.status_code == 204:" >> notify.py
          echo "        print('메시지 전송 성공')" >> notify.py
          echo "    else:" >> notify.py
          echo "        print(f'전송 실패: {response.status_code} - {response.text}')" >> notify.py
          echo "else:" >> notify.py
          echo "    print('오늘은 평일이 아님')" >> notify.py

      - name: Run Python script
        run: python notify.py
cron: '0 3 * * 1-5' 는 UTC 기준 매일 03:00으로, 한국 시간 기준 12:00이다. 1-5는 요일을 뜻한다.(월-금)
원하는 시간, 요일로 변경 가능할 것이다!
나는 평일 12:00으로 설정했다.

 

 

3. Github에서 Repository 생성

Repositories에 discordauto 라는 레포지토리를 생성했다. (처음 생성하면 아래 그림과 달리 비어 있는 레포지토리가 만들어질 것이다.)

 

3-1. root(main)에 requirements.txt 를 생성해 아래 코드를 붙여넣는다.

requests

 

 

3-2. Settings -> Secrets and variables -> Actions에서

Repository secrets를 생성한다.

 

이름은 DISCORD_WEBHOOK 로 했다.

VALUE에는 디스코드에서 만든 웹후크의 URL을 붙여넣는다.

https://discordapp.com/api/webhooks/***...

새로운 repository secret을 생성한다

 

 

 

 

4. cmd(명령 프롬프트)에 들어가 git을 클론한다. (내 컴퓨터에 저장소를 복사한다.)

순서대로 이렇게 입력한다.

 

4-1.

cd 폴더경로

* cd C:/Users/...

git clone https://github.com/내 아이디/discord-webhook-notify.git

* 자신의 git아이디를 입력한다

cd discord-webhook-notify

*클론한 폴더로 이동한다.

 

 

 

5. 커밋, 푸시하기

그리고 순서대로 이렇게 입력한다.

(혹시 cmd를 껐다 켰거나 위치가 올바르지 않은 경우를 생각해 이동한다.)

cd C:\Users\AMD\Desktop\discodegit\discordauto

 

5-1. 일단 클론한 곳에 worksflow 폴더를 생성한다.

mkdir .github
mkdir .github\workflows

 

 

5-2. 커밋 및 푸시한다.

git add .github/workflows/discord_notify.yml
git commit -m "Add discord notify script and workflow"
git push origin main

 

 

 

이렇게 출력되면 성공이다!

이제 평일 12시에 자동으로 채팅이 입력될 것이다.

 

 

 

6. 테스트

discordauto에서

Actions -> Discord Notify -> Run workflow 를 해 보자.

오류가 있다면 아래쪽 x처럼 뜰 것이고, 성공했다면 디스코드에 메시지가 가고 위쪽 체크처럼 뜰 것이다.

 

 

----

 

2025.07.13 

관찰 결과, 하루는 12:52, 하루는 12:54분에 메시지가 전송되었다.

 

깃허브 딜레이 때문인 것으로 추정되어서, 넉넉히 55분 빨리 울리도록 코드를 수정하였다.

cron: '5 2 * * 1-5'  # 한국시간 오전 12시(실제 55분정도 딜레이 일어나므로 UTC 02:05분쯤 예약 실행)

 

 

 

 

2015.07.07

여전히 git의 딜레이로 인한 문제가 있어 정시성이 중요한 봇의 특성을 살리기 위해, awslambda로 교체 작업 수행하였다.

https://r-pizzza.tistory.com/71