본문 바로가기
프로젝트/디스코드 봇

[Python] #3 디스코드 봇 만들기 - 랜덤 추천

by 알래스카비버 2021. 7. 11.
반응형

목차

     

    이번에는 봇이 랜덤으로 라인, 룬, 아이템, 챔피언을 추천해주는 기능을 만들 것입니다.

     

    lol.py

    lol.py라는 python 파일을 만듭니다.

     

    라인, 룬, 아이템, 챔피언들이 있는 리스트들을 만들어줍니다.

    lanes = ['탑', '정글', '미드', '봇', '서포터']
    keystones = ['집중 공격', '치명적 속도', '기민한 발놀림' ...]
    items = ['돌풍', '크라켄 학살자', '불멸의 철갑궁', ...]
    champions = ['가렌', '갈리오', '갱플랭크', '그라가스', '그레이브즈', ...]

    -- 2022/03/27

    https://howbeautifulworld.tistory.com/83 에 챔피언, 아이템 룬 정보를 갖고 오는 글을 썼습니다.

    리스트에 값들을 조금만 적고 글을 차례대로 가는 것을 추천합니다.

    미리 위 글을 보고 와서 해도 될 듯합니다.

     

    리스트에서 랜덤한 값을 얻을 것이기 때문에 random을 import 합니다.

    import random

     

    결과를 받아오는 getResult라는 함수를 만듭니다.

    '$롤 라인 룬 아이템 챔피언' -- 이런 식으로 명령어를 입력해서 결과를 받아올 것이기 때문에 text를 공백을 기준으로 나누어 words 안에 담아줍니다.

    word가 '라인'이면 index는 0부터 위에서 선언한 lanes 리스트의 길이 - 1까지 랜덤한 수가 되고 result

    딕셔너리의 '라인'의 값은 lanes[index]가 됩니다.

    이렇게 for문이 끝나면 result 딕셔너리를 반환합니다.

    def getResult(text):
        words = text.split()
    
        result = {"라인": '', "룬": '', "아이템": '', '챔피언': ''}
    
        for word in words:
            if word == "라인":
                index = random.randrange(0, len(lanes))
                result["라인"] = lanes[index]
            elif word == "룬":
                index = random.randrange(0, len(keystones))
                result["룬"] = keystones[index]
            elif word == "아이템":
                index = random.randrange(0, len(items))
                result["아이템"] = items[index]
            elif word == "챔피언":
                index = random.randrange(0, len(champions))
                result["챔피언"] = champions[index]
    
        return result

     

    main.py

    다시 main.py로 돌아와서

    아까 만든 모듈을 불러옵니다.

    import lol

     

    명령어는 롤,

    result에 결과를 받아옵니다.

    message에 key와 value를 더해주고 보냅니다.

    @bot.command(name='롤')
    async def random_lol(ctx, *, text=''):
        message = ''
        result = lol.getResult(text)
        for key, value in result.items():
            if value != '':
                message += key + ' : ' + value + '\n'
        await ctx.send(message)

     

    결과

    실행을 해보면

    잘 나옵니다.

    라인, 룬, 아이템, 챔피언 중 일부도 가능하며

    순서가 바뀌어도 가능합니다.

     

    전체 코드

    main.py

    더보기
    import discord
    from discord.ext import commands
    import lol
    
    bot = commands.Bot(command_prefix='$')  # 접두사가 '$'
    
    
    @bot.event
    async def on_ready():
        print('We have logged in as {0.user}'.format(bot))
    
    
    @bot.command()
    async def hello(ctx):  # '$hello'라는 메시지를 보냈을 때 @이름 Hello!를 보내줌
        await ctx.send('{0.author.mention} Hello!'.format(ctx))
    
    
    @bot.command(name='롤')
    async def random_lol(ctx, *, text=''):
        message = ''
        result = lol.getResult(text)
        for key, value in result.items():
            if value != '':
                message += key + ' : ' + value + '\n'
        await ctx.send(message)
    
    
    bot.run('token')  # 이곳에 본인 토큰
    

    lol.py

    더보기
    # lol.py
    
    import random
    
    lanes = ['탑', '정글', '미드', '봇', '서포터']
    keystones = ['집중 공격', '치명적 속도', '기민한 발놀림' ...]
    items = ['돌풍', '크라켄 학살자', '불멸의 철갑궁', ...]
    champions = ['가렌', '갈리오', '갱플랭크', '그라가스', '그레이브즈', ...]
    
    
    def getResult(text):
        words = text.split()
    
        result = {"라인": '', "룬": '', "아이템": '', '챔피언': ''}
    
        for word in words:
            if word == "라인":
                index = random.randrange(0, len(lanes))
                result["라인"] = lanes[index]
            elif word == "룬":
                index = random.randrange(0, len(keystones))
                result["룬"] = keystones[index]
            elif word == "아이템":
                index = random.randrange(0, len(items))
                result["아이템"] = items[index]
            elif word == "챔피언":
                index = random.randrange(0, len(champions))
                result["챔피언"] = champions[index]
    
        return result
    

     

    4번 글로 이어집니다.

    https://howbeautifulworld.tistory.com/56

     

    [Python] #4 디스코드 봇 만들기 - Embed

    목차 이번 글에서는 Embed를 사용해 메시지를 박스 같은 곳 안에 담아 보내보겠습니다. #3번 글에서 계속하겠습니다. https://howbeautifulworld.tistory.com/55 Embed 생성 embed를 만드는 코드입니다. embed = d..

    howbeautifulworld.tistory.com

    반응형

    댓글