서버 홍보를 시작하면 어느 초대 링크로 유입이 들어오는지 궁금해집니다.
링크를 여러 군데에 뿌려도 실제로 남는 유입이 어디서 오는지는 따로 봐야 합니다.
이럴 때 초대 링크 사용량을 기록해 두면 홍보 효율과 유입 품질을 같이 보기 쉬워집니다.
이번 글에서는 서버의 초대 링크 목록을 캐시해 두고, 새 멤버가 들어올 때 어떤 링크 사용량이 늘었는지 추적하는 기본 봇을 만듭니다.
1. 왜 초대 링크 추적이 필요할까
홍보는 많이 했는데 잔류가 낮을 수 있습니다.
반대로 유입 수는 적어도 오래 남는 링크가 있을 수 있습니다.
그래서 아래 두 가지를 같이 봐야 합니다.
- 어디서 유입됐는가
- 들어온 뒤 남았는가
홍보 문구와 서버 입구 구조는 디스코드 서버 홍보 방법과 디스코드 서버 온보딩 채널 구성 예시에서 먼저 다뤘습니다.
2. 초대 링크 사용량은 어떻게 추적할까
디스코드 봇이 멤버 입장 이벤트를 받을 때 현재 초대 링크 목록을 다시 읽어 옵니다.
이전에 저장해 둔 사용량과 비교해서 어떤 링크의 uses가 늘었는지 보면 됩니다.
완벽하게 100% 잡히는 구조는 아니지만, 초반 운영용 분석으로는 충분히 쓸 만합니다.
3. 추적할 초대 링크 값 넣기
DISCORD_TOKEN=여기에_봇_토큰
LOG_CHANNEL_ID=입장로그채널_ID
로그 채널에는 어떤 초대 링크로 유입됐는지 기록을 남깁니다.
4. 초대 사용량 변화를 읽는 코드
import os
import discord
from dotenv import load_dotenv
load_dotenv()
TOKEN = os.getenv("DISCORD_TOKEN")
LOG_CHANNEL_ID = int(os.getenv("LOG_CHANNEL_ID"))
invite_cache: dict[int, dict[str, int]] = {}
intents = discord.Intents.default()
intents.members = True
intents.guilds = True
client = discord.Client(intents=intents)
async def refresh_invite_cache(guild: discord.Guild):
invites = await guild.invites()
invite_cache[guild.id] = {invite.code: invite.uses or 0 for invite in invites}
async def send_log(guild: discord.Guild, description: str):
channel = guild.get_channel(LOG_CHANNEL_ID)
if isinstance(channel, discord.TextChannel):
embed = discord.Embed(title="초대 링크 추적 로그", description=description, color=discord.Color.green())
await channel.send(embed=embed)
@client.event
async def on_ready():
for guild in client.guilds:
await refresh_invite_cache(guild)
print(f"로그인 성공: {client.user}")
@client.event
async def on_member_join(member: discord.Member):
guild = member.guild
before_uses = invite_cache.get(guild.id, {})
invites = await guild.invites()
used_invite = None
for invite in invites:
old_uses = before_uses.get(invite.code, 0)
new_uses = invite.uses or 0
if new_uses > old_uses:
used_invite = invite
break
await refresh_invite_cache(guild)
if used_invite is None:
await send_log(guild, f"{member.mention} 님이 입장했습니다. 사용된 초대 링크는 확인하지 못했습니다.")
return
await send_log(
guild,
(
f"{member.mention} 님이 입장했습니다.\n"
f"사용된 초대 코드: {used_invite.code}\n"
f"현재 사용 횟수: {used_invite.uses}"
),
)
if not TOKEN:
raise ValueError("DISCORD_TOKEN 값이 없습니다.")
client.run(TOKEN)
핵심은 서버별 초대 링크 사용량을 캐시해 두고, 입장 순간에 증가한 링크를 찾는 부분입니다.
홍보 실험을 여러 개 돌릴 때 특히 도움이 됩니다.
5. 먼저 확인할 것
초대 링크를 추적하려면 서버에 링크가 여러 개 있어야 의미가 있습니다.
링크 하나만 쓰면 어디서 들어왔는지까지 구분할 수 없습니다.
그래서 홍보용, 프로필용, 이벤트용처럼 링크를 나눠 둬야 합니다.
이 부분은 디스코드 서버 홍보 방법에서 먼저 설명했습니다.
6. 입장 한 번으로 사용량 차이 확인
python main.py
서버에 초대 링크를 두 개 이상 만든 뒤, 각 링크로 테스트 계정을 입장시켜 봅니다.
로그 채널에 어떤 초대 코드가 사용됐는지 기록되면 정상입니다.
7. 캐시와 재시작에서 자주 꼬이는 부분
- 사용된 링크를 못 찾는 경우 초대 링크가 너무 자주 재생성되거나, 캐시를 초기화한 직후 타이밍이 겹칠 수 있습니다.
guild.invites()가 실패하는 경우 봇에 초대 링크 조회 권한이 부족할 수 있습니다.- 입장 이벤트 자체가 안 도는 경우
SERVER MEMBERS INTENT설정을 먼저 봐야 합니다.
8. 입장 퇴장 로그와 같이 보면 유입 품질이 보인다
초대 링크 추적은 유입 경로를 보여 주고, 입장 퇴장 로그는 남는 정도를 보여 줍니다.
둘을 같이 보면 어디서 들어온 유저가 더 오래 남는지 보기 쉬워집니다.
입장 로그는 입장 퇴장 로그 디스코드 봇 만들기와 같이 보면 됩니다.
9. 배포는 거의 필수다
유입은 사람이 없는 시간에도 들어옵니다.
초대 링크 추적도 그 순간 켜져 있어야 기록이 남습니다.
실운영용이라면 24시간 디스코드 봇 무료 호스팅, 디스호스트처럼 계속 켜진 환경이 필요합니다.
10. 유입 추적 뒤에는 로그와 환영 메시지를 묶는다
유입 분석까지 정리됐다면 이제 봇이 초대는 되었는데 온라인으로 안 뜨는 문제처럼 실제 운영에서 자주 만나는 오류 해결 글로 넘어갈 수 있습니다.
그 전에 홍보 흐름을 더 다듬고 싶다면 디스코드 서버 홍보 방법과 디스코드 서버 소개문 작성법을 같이 보면 됩니다.
'봇 개발 팁 > Discord.py' 카테고리의 다른 글
| 욕설 필터 디스코드 봇 만들기 (0) | 2026.05.08 |
|---|---|
| 링크 차단 디스코드 봇 만들기 (0) | 2026.05.07 |
| 스팸 방지 디스코드 봇 만들기 (0) | 2026.05.06 |
| 처벌 로그 디스코드 봇 만들기 (0) | 2026.05.04 |
| 입장 퇴장 로그 디스코드 봇 만들기 (0) | 2026.05.03 |