Discord.py로 미니 게임 봇 만들기 #6: 가위바위보 추가하기

안녕하세요!김코딩입니다

지난번에는 디스코드 퀴즈 봇을 만들었는데요. 이번에는 미니 게임 기능을 추가해볼 거예요. 친구들과 간단하게 즐길 수 있는 가위바위보 게임을 구현해봅시다. 기존 퀴즈 점수 시스템과 연동하여, 게임에서 승리하면 점수를 얻을 수 있도록 만들 거예요.
(간단한 미니 게임 봇)


목표


  • !rps [가위/바위/보] 명령어로 가위바위보 시작
  • 사용자가 선택하면 봇과 대결 후 승패 판정
  • 승리하면 점수를 획득하여 기존 퀴즈 점수와 통합

준비물

  1. 필요한 모듈
    • discord.py, random, json
    • 추가 설치는 필요 없어요.
  2. 환경
    • 기존 퀴즈 봇 코드 기반
    • 봇에 “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 파일을 사용하여 점수를 저장합니다.
  • 봇이 종료되어도 점수가 유지됩니다.

▶ 실행 방법

  1. 코드를 quiz_rps_bot.py 파일로 저장하세요.
  2. bot.run("YOUR_BOT_TOKEN")디스코드 봇 토큰을 입력하세요.
  3. 터미널에서 실행: python quiz_rps_bot.py
  4. 디스코드에서 다음 명령어를 사용해보세요!
    • !quiz → 퀴즈 풀기
    • !rps 가위 → 가위바위보 대결
    • !score → 점수 확인

문제 해결 팁

“봇이 응답하지 않아요!”

  • 봇이 올바르게 실행되었는지 확인하세요.
  • bot.run("YOUR_BOT_TOKEN")에 토큰을 제대로 입력했나요?

“점수가 저장되지 않아요!”

  • scores.json 파일이 정상적으로 생성되었는지 확인하세요.

“Embed 메시지가 보이지 않아요!”

  • 봇에 “Embed Links” 권한이 있는지 확인하세요.

추가로 할 수 있는 것

!rps @유저로 친구와 1:1 대결 기능 추가
제한 시간 안에 응답해야 하는 타이머 기능 추가
숫자 맞추기, 주사위 굴리기 같은 다른 미니 게임 추가


마무리

오늘은 가위바위보 게임을 추가하여 디스코드 봇을 더 재미있게 만들어 보았습니다!
이제 친구들과 점수를 경쟁하며 즐겨보세요. 다음에는 SQLite 데이터베이스 연동이나 더 다양한 미니 게임을 다뤄볼까요?
궁금한 점이나 추가하고 싶은 기능이 있다면 댓글로 알려주세요!

Leave a Reply

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다