안녕하세요!김코딩입니다
지난번에는 디스코드 퀴즈 봇을 만들었는데요. 이번에는 미니 게임 기능을 추가해볼 거예요. 친구들과 간단하게 즐길 수 있는 가위바위보 게임을 구현해봅시다. 기존 퀴즈 점수 시스템과 연동하여, 게임에서 승리하면 점수를 얻을 수 있도록 만들 거예요.
(간단한 미니 게임 봇)
목표
!rps [가위/바위/보]
명령어로 가위바위보 시작- 사용자가 선택하면 봇과 대결 후 승패 판정
- 승리하면 점수를 획득하여 기존 퀴즈 점수와 통합
준비물
- 필요한 모듈
discord.py
,random
,json
- 추가 설치는 필요 없어요.
- 환경
- 기존 퀴즈 봇 코드 기반
- 봇에 “Send Messages” 권한이 있어야 합니다.
미니 게임 봇 코드 구현
import discord
from discord.ext import commands
import random
import json
import asyncio
bot = commands.Bot(command_prefix="!", intents=discord.Intents.all())
scores = {}
current_quiz = {}
# 데이터 로드 및 저장
def load_scores():
global scores
try:
with open('scores.json', 'r') as f:
scores = json.load(f)
except FileNotFoundError:
scores = {}
def save_scores():
with open('scores.json', 'w') as f:
json.dump(scores, f, indent=4)
@bot.event
async def on_ready():
load_scores()
print(f"{bot.user}가 온라인이에요!")
await bot.change_presence(activity=discord.Game("퀴즈 & 가위바위보"))
# 가위바위보 명령어
@bot.command()
async def rps(ctx, choice: str):
user_id = str(ctx.author.id)
choices = ["가위", "바위", "보"]
if choice not in choices:
await ctx.send("가위, 바위, 보 중 하나를 입력해주세요! (예: `!rps 가위`)")
return
bot_choice = random.choice(choices)
result = ""
if choice == bot_choice:
result = "비겼어요!"
elif (choice == "가위" and bot_choice == "보") or \
(choice == "바위" and bot_choice == "가위") or \
(choice == "보" and bot_choice == "바위"):
result = "당신이 이겼어요! +5점"
scores[user_id] = scores.get(user_id, 0) + 5
save_scores()
else:
result = "봇이 이겼어요..."
embed = discord.Embed(title="가위바위보 대결!", color=discord.Color.orange())
embed.add_field(name="당신의 선택", value=choice, inline=True)
embed.add_field(name="봇의 선택", value=bot_choice, inline=True)
embed.add_field(name="결과", value=result, inline=False)
embed.set_footer(text=f"현재 점수: {scores.get(user_id, 0)}점")
await ctx.send(embed=embed)
# 점수 확인 명령어
@bot.command()
async def score(ctx):
user_id = str(ctx.author.id)
user_score = scores.get(user_id, 0)
embed = discord.Embed(title=f"{ctx.author.name}의 점수", color=discord.Color.blue())
embed.add_field(name="점수", value=f"{user_score}점", inline=False)
await ctx.send(embed=embed)
bot.run("YOUR_BOT_TOKEN")

미니 게임 봇 코드 설명
1. !rps
가위바위보 명령어
- 사용자가
가위
,바위
,보
중 하나를 입력하면 봇이 랜덤으로 선택합니다. - 승패를 판정하고, 이기면 5점을 추가합니다.
- 결과를 Embed 메시지로 깔끔하게 출력합니다.
2. !score
점수 확인 명령어
- 현재 자신의 점수를 확인할 수 있습니다.
- 가위바위보 점수와 퀴즈 점수가 통합 관리됩니다.
3. 점수 저장 및 관리
scores.json
파일을 사용하여 점수를 저장합니다.- 봇이 종료되어도 점수가 유지됩니다.
▶ 실행 방법
- 코드를
quiz_rps_bot.py
파일로 저장하세요. bot.run("YOUR_BOT_TOKEN")
에 디스코드 봇 토큰을 입력하세요.- 터미널에서 실행:
python quiz_rps_bot.py
- 디스코드에서 다음 명령어를 사용해보세요!
!quiz
→ 퀴즈 풀기!rps 가위
→ 가위바위보 대결!score
→ 점수 확인
문제 해결 팁
❓ “봇이 응답하지 않아요!”
- 봇이 올바르게 실행되었는지 확인하세요.
bot.run("YOUR_BOT_TOKEN")
에 토큰을 제대로 입력했나요?
❓ “점수가 저장되지 않아요!”
scores.json
파일이 정상적으로 생성되었는지 확인하세요.
❓ “Embed 메시지가 보이지 않아요!”
- 봇에 “Embed Links” 권한이 있는지 확인하세요.
추가로 할 수 있는 것
!rps @유저
로 친구와 1:1 대결 기능 추가
제한 시간 안에 응답해야 하는 타이머 기능 추가
숫자 맞추기, 주사위 굴리기 같은 다른 미니 게임 추가
마무리
오늘은 가위바위보 게임을 추가하여 디스코드 봇을 더 재미있게 만들어 보았습니다!
이제 친구들과 점수를 경쟁하며 즐겨보세요. 다음에는 SQLite 데이터베이스 연동이나 더 다양한 미니 게임을 다뤄볼까요?
궁금한 점이나 추가하고 싶은 기능이 있다면 댓글로 알려주세요!