새소식

Discord Bot

숫자야구 게임 디스코드 봇(Bulls and Cows)

  • -
반응형

python의 random 모듈과

discord 봇을 활용하여

제작한 숫자야구 게임 봇입니다.

 

파이썬 디스코드 봇의

기본 틀로 활용하기 좋습니다

 

$사용법을 통해 자세한 명령어를 확인할 수 있습니다

 

첫 구동 시에는 $초기화 명령어가 필요합니다.

(이후에는 게임이 끝나면 자동 초기화)

 

$시작 명령어를 사용하면

random모듈로 숫자가 임의로 정해집니다

(중복 숫자x, 4자리 수)

 

 

https://github.com/CuriHuS/Discord-Bot/blob/main/Bulls%20and%20Cows.py

 

 

import random
import requests
import discord
import asyncio
from bs4 import BeautifulSoup
from urllib.request import urlretrieve

client = discord.Client()

token = "your token"
@client.event
async def on_ready():
    print("=========================")
    print("다음으로 로그인 합니다 : ")
    print(client.user.name)
    print("connection was successful")
    game = discord.Game("궁금하다면? $사용법")
    print("=========================")
    await client.change_presence(status=discord.Status.online, activity=game)

@client.event
async def on_message(message):
    if message.content.startswith("$사용법"):
        embed = discord.Embed(title="숫자야구 봇 사용방법", description="숫자야구 봇으로 활용할 수 있는 명령어 목록입니다", color=0xd5d5d5)
        embed.add_field(name="$초기화",value="숫자야구 봇이 처음 구동됐을 때 사용합니다" ,inline=False)
        embed.add_field(name="$시작",value="게임을 시작할 때 사용합니다" ,inline=False)
        embed.add_field(name="$정답",value="게임 도중 정답을 외칠 때 사용합니다 ex)$정답 1234" ,inline=False)
        await message.channel.send(embed=embed)

    if message.content.startswith("$초기화"):
        global Number
        global Number_list
        global tries
        Number = "0"
        Number_list = []
        tries = 0
        await message.channel.send("초기화 완료, 게임을 시작해주세요.")
    else:
        if message.content.startswith('$시작'):

            if Number == "0":

                Number_list.append(random.randrange(1, 10))
                while True:
                    a = random.randrange(0, 10)
                    if len(Number_list) == 4:
                        break
                    elif a in Number_list:
                        continue
                    else:
                        Number_list.append(a)
                Number = str(Number_list[0]) + str(Number_list[1]) + str(Number_list[2]) + str(Number_list[3])
                print(Number_list)
                embed = discord.Embed(title="", description="", color=0xd5d5d5)
                embed.add_field(name="숫자가 세팅되었습니다",value="이제 게임을 진행해 주세요" ,inline=True)

                await message.channel.send(embed=embed)

            else:
                await message.channel.send("게임이 진행중입니다.")

        if message.content.startswith('$정답'):
            if Number == "0":
                await message.channel.send("세팅을 먼저 진행해 주세요")
            else:
                Score = message.content[4:len(message.content)]
                if len(Score) == 4:
                    Strike = 0
                    Ball = 0
                    Index = [] #Strike, Ball index list
                    for i in range(0, 4):
                        if Score[i] == Number[i]: #Strike
                            Strike += 1
                            Index.append(i)
                    tries += 1
                    if len(Index) == 4:
                        embed = discord.Embed(title="", description="", color=0xd5d5d5)
                        embed.add_field(name="정답입니다!",value=str(tries)+"시도 만에 성공하였습니다" ,inline=False)
                        embed.add_field(name="초기화가 완료되었습니다",value="다시시작 하려면 $시작" ,inline=False)
                        await message.channel.send(embed=embed)
                        Number = "0"
                        Number_list = []
                        tries = 0

                    else: #Here is Ball Algorithm
                        for i in range(0, 4):
                            if i not in Index:
                                print(i)
                                if int(Score[i]) in Number_list:
                                    Ball += 1
                        await message.channel.send(str(Strike)+"S "+str(Ball)+"B")
                else:
                    embed = discord.Embed(title="", description="", color=0xd5d5d5)
                    embed.add_field(name="오류가 발생했습니다",value="정답은 4자리 수로 적어주세요" ,inline=False)
                    await message.channel.send(embed=embed)


client.run(token)
반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.