지원서 접수 디스코드 봇 만들기

2026. 4. 29. 16:53·봇 개발 팁/Discord.py

지원서를 받는데 답변 형식이 매번 달라서 운영진이 비교도 못 하고 있다면, 그건 사람 문제가 아니라 수집 방식 문제입니다.

이 글의 역할은 티켓처럼 즉시 대화하는 구조가 아니라, 같은 질문을 같은 순서로 받아 비동기 검토가 가능하게 만드는 데 있습니다.

즉 이 글은 운영진 모집이나 신청 접수처럼 구조화된 답변을 DM 흐름으로 모으는 워크플로 글입니다.

1. 대화보다 '같은 질문을 빠짐없이 받는 것'이 중요할 때 쓴다

아래 같은 상황에서 유용합니다.

  • 운영진 지원서 접수
  • 이벤트 신청 폼
  • 파트너 제휴 문의 초안 수집
  • 기본 정보를 빠짐없이 받아야 하는 경우

문의 대기열 구조와 같이 쓰고 싶다면 고객 지원 대기열 디스코드 봇 만들기와 묶어서 생각하면 됩니다.

2. 지원 접수용 변수 먼저 정리

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


답변 결과를 운영진이 보는 검토 채널 하나가 필요합니다.

3. 질문 수집과 검토 채널 전달 코드

import asyncio
import os

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"))
REVIEW_CHANNEL_ID = int(os.getenv("REVIEW_CHANNEL_ID"))
QUESTIONS = [
    "닉네임을 적어 주세요.",
    "지원하는 역할을 적어 주세요.",
    "관련 경험이 있다면 간단히 적어 주세요.",
    "하루 평균 활동 가능한 시간을 적어 주세요.",
]

intents = discord.Intents.default()
intents.messages = True
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="DM으로 지원서 질문을 시작합니다.", guild=guild)
async def apply_start(interaction: discord.Interaction):
    await interaction.response.send_message("DM으로 지원서를 시작합니다.", ephemeral=True)

    try:
        dm_channel = await interaction.user.create_dm()
        answers = []

        for question in QUESTIONS:
            await dm_channel.send(question)

            def check(message: discord.Message) -> bool:
                return message.author.id == interaction.user.id and message.channel.id == dm_channel.id

            reply = await client.wait_for("message", timeout=300, check=check)
            answers.append(reply.content.strip())

        review_channel = client.get_channel(REVIEW_CHANNEL_ID)
        if isinstance(review_channel, discord.TextChannel):
            embed = discord.Embed(title="새 지원서", color=discord.Color.green())
            embed.add_field(name="지원자", value=interaction.user.mention, inline=False)
            for question, answer in zip(QUESTIONS, answers):
                embed.add_field(name=question, value=answer or "응답 없음", inline=False)
            await review_channel.send(embed=embed)

        await dm_channel.send("지원서 접수가 완료되었습니다. 검토 후 안내드리겠습니다.")
    except discord.Forbidden:
        await interaction.followup.send("DM을 보낼 수 없습니다. 개인 메시지 허용 설정을 먼저 확인해 주세요.", ephemeral=True)
    except asyncio.TimeoutError:
        await interaction.followup.send("응답 시간이 지나 지원서가 종료되었습니다. 다시 /지원시작 명령어를 실행해 주세요.", ephemeral=True)


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

client.run(TOKEN)


이 구조는 답변을 순서대로 받아 검토 채널에 모으는 가장 기본형입니다.
질문을 바꾸고 싶다면 `QUESTIONS` 리스트만 바꿔도 됩니다.

4. 질문 입력부터 검토 채널까지 확인

python main.py


그다음 `/지원시작`을 실행합니다.
DM으로 질문이 순서대로 오고, 마지막 답변 뒤 검토 채널에 임베드가 올라오면 정상입니다.

5. 지원 흐름에서 자주 끊기는 곳

  • DM이 안 오는 경우 유저 개인 설정에서 서버 멤버 DM 차단을 켠 경우가 많습니다.
  • 중간에 응답이 끊기는 경우 기본 타임아웃 300초를 넘겼을 수 있습니다.

    지원서가 길다면 시간을 늘려야 합니다.
  • 검토 채널에 아무것도 안 올라오는 경우 REVIEW_CHANNEL_ID가 틀렸거나 봇이 채널을 못 보는 경우가 많습니다.

6. 질문 수는 너무 많지 않게 둔다

항목이 많을수록 중간 이탈이 늘어납니다.

초반에는 꼭 필요한 질문만 남겨야 합니다.

보통 4~6개 안쪽이 무난합니다.

7. 일반 문의와 지원서를 분리한다

지원서는 정해진 형식이 필요하고, 일반 문의는 유연성이 필요합니다.

둘을 같은 동선으로 섞으면 둘 다 불편해지기 쉽습니다.

그래서 문의는 티켓이나 대기열로 받고, 지원서는 별도 명령어나 버튼으로 받으면 됩니다.

8. 운영 단계에서는 저장 방식도 강화한다

지금 구조는 검토 채널 메시지에 결과가 남는 정도로 충분합니다.

지원량이 많아지면 CSV 저장이나 DB 저장을 붙이면 더 편해질 수 있습니다.

이번 글에서는 먼저 질문 흐름을 빠르게 구현하는 데 집중했습니다.

9. 배포는 거의 필수다

지원서는 운영 시간 밖에도 들어올 수 있습니다.

개발용 PC를 꺼 두면 질문 흐름도 같이 멈춥니다.

실제 모집에 쓸 생각이라면 24시간 디스코드 봇 무료 호스팅, 디스호스트처럼 상시 실행 환경을 같이 준비해야 현실적입니다.

10. DM 순차형이 답답해지면 모달형으로 넘어간다

한 질문씩 순서대로 받는 구조가 길고 답답하게 느껴지면, 이 글의 질문 수를 줄이거나 검토 채널 포맷부터 더 짧게 다듬는 게 먼저입니다.

입구 버튼과 검토 채널 동선부터 다시 정리하고 싶다면 티켓 디스코드 봇 만들기과 디스코드 티켓 카테고리 설계법을 같이 놓고 보면 동선이 정리됩니다.

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

고객 지원 대기열 디스코드 봇 만들기  (0) 2026.04.28
티켓 디스코드 봇 만들기  (0) 2026.04.25
온보딩 체크리스트 디스코드 봇 만들기  (0) 2026.04.24
인증 디스코드 봇 만들기  (0) 2026.04.23
규칙 동의 인증 디스코드 봇 만들기  (0) 2026.04.22
'봇 개발 팁/Discord.py' 카테고리의 다른 글
  • 고객 지원 대기열 디스코드 봇 만들기
  • 티켓 디스코드 봇 만들기
  • 온보딩 체크리스트 디스코드 봇 만들기
  • 인증 디스코드 봇 만들기
디스호스트
디스호스트
쉽고 안정적인 디스코드 봇 호스팅 서비스, 디스호스트의 기술 블로그입니다. 디스호스트는 24시간 구동되는 서버를 통해 디스코드 봇을 대신 구동시켜 드리는 서비스를 제공하고 있습니다.
  • 디스호스트
    디스호스트 기술 블로그
    디스호스트
  • 블로그 메뉴

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

    • 디스호스트
  • hELLO· Designed By정상우.v4.10.3
디스호스트
지원서 접수 디스코드 봇 만들기
상단으로

티스토리툴바