디스코드 출석 체크 봇 만들기

2026. 5. 14. 17:00·봇 개발 팁/Discord.py

출석 기능은 단순해 보여도 실제 운영에서는 리셋 시각, 중복 방지, 보상 기준이 바로 붙습니다.

그래서 /출석 명령어 하나만 만들고 끝내면 금방 "자정 기준이 뭐죠", "재시작하니 기록이 사라졌어요" 같은 질문이 나옵니다.

이 글에서는 슬래시 명령어로 하루 1회 출석을 기록하고, 누적 출석 수를 보여 주는 기본형을 만들면서 어디서부터 운영형으로 갈라지는지도 같이 정리합니다.

1. 출석 기능은 리셋 기준부터 정해야 덜 꼬인다

반복 방문을 유도하고 싶을 때 잘 맞습니다.

예를 들면 아래 상황입니다.

  • 스터디 서버 출석 확인
  • 게임 길드 일일 참여 체크
  • 커뮤니티 이벤트용 일일 보상

레벨링처럼 활동량 전체를 보는 기능과는 성격이 조금 다릅니다.

레벨링은 디스코드 레벨링 봇 만들기에서 먼저 정리했습니다.

2. 하루 1회보다 리셋 시각이 더 중요하다

출석 기능은 기준이 명확해야 합니다.

같은 날 여러 번 인정되면 바로 의미가 사라집니다.

처음에는 날짜 문자열 기준으로 하루 1회만 허용하는 구조가 가장 단순합니다.

다만 실운영에서는 서버 기준 시간이 한국 시간인지, UTC 기준인지 먼저 정해 둬야 합니다.

특히 자정 직전과 직후에 출석하는 유저가 많은 서버에서는 이 기준을 안내문에 같이 적어 두지 않으면 바로 분쟁이 생깁니다.

3. 출석 채널과 저장 값 정리

DISCORD_TOKEN=여기에_봇_토큰
GUILD_ID=테스트_서버_ID


이 글에서는 가장 기본형으로 슬래시 명령어 두 개만 만듭니다.

4. 날짜별 출석을 기록하는 코드

import os
from datetime import datetime
from collections import defaultdict

import discord
from discord import app_commands
from dotenv import load_dotenv

load_dotenv()

TOKEN = os.getenv("DISCORD_TOKEN")
GUILD_ID = int(os.getenv("GUILD_ID"))
attendance_data = defaultdict(lambda: {"last_date": "", "count": 0})

intents = discord.Intents.default()
client = discord.Client(intents=intents)
tree = app_commands.CommandTree(client)
guild = discord.Object(id=GUILD_ID)


@client.event
async def on_ready():
    await tree.sync(guild=guild)
    print(f"로그인 성공: {client.user}")


@tree.command(name="출석", description="오늘 출석을 기록합니다.", guild=guild)
async def check_attendance(interaction: discord.Interaction):
    today = datetime.now().strftime("%Y-%m-%d")
    data = attendance_data[interaction.user.id]

    if data["last_date"] == today:
        await interaction.response.send_message("오늘은 이미 출석을 완료했습니다.", ephemeral=True)
        return

    data["last_date"] = today
    data["count"] += 1
    await interaction.response.send_message(
        f"출석 완료. 현재 누적 출석은 {data['count']}회입니다.",
        ephemeral=True,
    )


@tree.command(name="출석정보", description="내 출석 현황을 봅니다.", guild=guild)
async def attendance_info(interaction: discord.Interaction):
    data = attendance_data[interaction.user.id]
    await interaction.response.send_message(
        f"누적 출석: {data['count']}회\n마지막 출석일: {data['last_date'] or '없음'}",
        ephemeral=True,
    )


if not TOKEN:
    raise ValueError("DISCORD_TOKEN 값이 없습니다.")

client.run(TOKEN)


핵심은 유저별 마지막 출석 날짜와 누적 횟수를 저장하는 부분입니다.
가장 작은 형태로 시작하면 이해가 쉽습니다.

5. 중복 출석과 리셋 시각 점검

python main.py


`/출석`을 한 번 실행하고, 같은 날 다시 실행해 중복 출석이 막히는지 확인합니다.
그다음 `/출석정보`로 누적 값이 보이는지 보면 됩니다.

6. 날짜 기준에서 자주 엉키는 부분

  • 같은 날 여러 번 출석되는 경우 날짜 비교 로직이 빠졌을 수 있습니다.
  • 재시작 뒤 기록이 사라지는 경우 메모리 저장 구조라 정상입니다.

    실운영에서는 파일 저장이나 DB 저장을 붙여야 합니다.
  • 슬래시 명령어가 안 보이는 경우 서버 sync나 applications.commands 스코프를 먼저 봐야 합니다.

7. 주간 보상보다 기록 안정화가 먼저다

처음부터 코인 지급, 역할 보상, 주간 랭킹까지 한 번에 넣지 않아도 됩니다.

먼저 출석 기록이 안정적으로 쌓이는지 확인해야 합니다.

여기서 많이 막히는 부분은 기능 추가보다 저장 방식입니다.

메모리 저장으로는 재시작 뒤 출석 이력이 바로 사라지기 때문에, 출석을 이벤트나 보상에 연결할 계획이라면 파일 저장이나 DB 전환 시점을 초반에 잡아 둬야 안전합니다.

8. 참여 유도 기능과 묶기 좋다

출석 기능은 투표, 이벤트, 레벨링과 묶을 때 체감이 더 좋습니다.

서버에 하루 한 번 들어올 이유를 만들기 때문입니다.

이벤트 흐름은 디스코드 이벤트 채널 기획법, 활동 보상 흐름은 디스코드 레벨링 봇 만들기와 같이 보면 좋습니다.

9. 상시 운영 환경이 필요하다

출석은 하루 어느 시간에든 찍힐 수 있습니다.

로컬 PC를 꺼 두면 출석 기능도 멈춥니다.

실운영용이라면 24시간 디스코드 봇 무료 호스팅, 디스호스트처럼 계속 켜진 환경이 필요합니다.

10. 출석 다음에는 보상보다 참여 채널을 먼저 손본다

출석이 안정적으로 쌓이기 시작하면 그다음은 보상과 비교 지표를 붙이는 순서가 자연스럽습니다.

활동 보상 흐름을 넓혀 볼 때는 디스코드 레벨링 봇 만들기와 디스코드 이벤트 채널 기획법을 같이 보면 참여 기능이 어떻게 서로 다른 역할을 하는지 감이 잘 잡힙니다.

'봇 개발 팁 > Discord.py' 카테고리의 다른 글

디스코드 레벨링 봇 만들기  (0) 2026.05.13
초대 링크 추적 디스코드 봇 만들기  (0) 2026.05.09
욕설 필터 디스코드 봇 만들기  (0) 2026.05.08
링크 차단 디스코드 봇 만들기  (0) 2026.05.07
스팸 방지 디스코드 봇 만들기  (0) 2026.05.06
'봇 개발 팁/Discord.py' 카테고리의 다른 글
  • 디스코드 레벨링 봇 만들기
  • 초대 링크 추적 디스코드 봇 만들기
  • 욕설 필터 디스코드 봇 만들기
  • 링크 차단 디스코드 봇 만들기
디스호스트
디스호스트
쉽고 안정적인 디스코드 봇 호스팅 서비스, 디스호스트의 기술 블로그입니다. 디스호스트는 24시간 구동되는 서버를 통해 디스코드 봇을 대신 구동시켜 드리는 서비스를 제공하고 있습니다.
  • 디스호스트
    디스호스트 기술 블로그
    디스호스트
  • 블로그 메뉴

    • 홈
    • 디스호스트 사용 가이드
    • 디스코드 봇 호스팅, 24시간 서버 구동
    • 분류 전체보기 (106) N
      • 디스코드 (9)
      • 디스호스트 가이드 (12)
      • 봇 개발 팁 (41) N
        • Discord.js (11)
        • Discord.py (29) N
      • DiscordJS 개발 튜토리얼 (15)
      • 디스코드 서버 운영 (18)
      • 디스코드 봇 오류 해결 (10) N
  • 링크

    • 디스호스트
  • hELLO· Designed By정상우.v4.10.3
디스호스트
디스코드 출석 체크 봇 만들기
상단으로

티스토리툴바