반응형
목차
명령어 맨 뒤에 숫자를 추가로 입력하면 숫자만큼 추천해주는 기능을 만들어 볼 것입니다.
#3번 글에서 계속하겠습니다.
https://howbeautifulworld.tistory.com/55
lol.py
lol.py의 getResult 함수에서 다음과 같이 수정했습니다.
랜덤으로 선택하는 부분에서 투탑이나 투정글 등을 갈 수 있겠지만
라인과 챔피언은 중복이 되면 안되기 때문에 더 괜찮은 코드가 있을 수도 있겠지만
일단 리스트에 제거를 해서 중복되지 않게 했습니다.
def getResult(text):
words = text.split() # 입력받은 문장
number = 0 # 몇 명인지
lanes_list = lanes.copy() # 라인 복사
champions_list = champions.copy() # 챔피언 복사
# 마지막 단어가 숫자면 number에 입력받은 명수
try:
number = int(words[-1])
except ValueError:
number = 1
# 사람 수만큼 추가
result = []
for _ in range(number):
result.append({"라인": '', "룬": '', "아이템": '', '챔피언': ''})
# 랜덤으로 선택
for i in range(number):
for word in words:
if word == "라인":
index = random.randrange(0, len(lanes_list))
result[i]["라인"] = lanes_list[index]
del lanes_list[index]
elif word == "룬":
index = random.randrange(0, len(keystones))
result[i]["룬"] = keystones[index]
elif word == "아이템":
index = random.randrange(0, len(items))
result[i]["아이템"] = items[index]
elif word == "챔피언":
index = random.randrange(0, len(champions_list))
result[i]["챔피언"] = champions_list[index]
del champions_list[index]
return result
main.py
위에 getResult 함수에서 반환되는 값이 변경되었기 때문에
main.py 에서 random_lol 함수에서 다음과 같이 수정했습니다.
출력되는 형식은 취향에 따라 변경하면 될 것 같습니다.
async def random_lol(ctx, *, text=''):
message = ''
result = lol.getResult(text)
for i in range(len(result)):
message += '#' + str(i + 1) + '\n'
for key, value in result[i].items():
if value != '':
message += key + ' : ' + value + '\n'
message += '\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 i in range(len(result)):
message += '#' + str(i + 1) + '\n'
for key, value in result[i].items():
if value != '':
message += key + ' : ' + value + '\n'
message += '\n'
await ctx.send(message)
bot.run('token') # 이곳에 본인 토큰
lol.py
더보기
# lol.py
import random
lanes = ['탑', '정글', '미드', '봇', '서포터']
keystones = ['집중 공격', '치명적 속도', '기민한 발놀림' ...]
items = ['돌풍', '크라켄 학살자', '불멸의 철갑궁', ...]
champions = ['가렌', '갈리오', '갱플랭크', '그라가스', '그레이브즈', ...]
def getResult(text):
words = text.split() # 입력받은 문장
number = 0 # 몇 명인지
lanes_list = lanes.copy() # 라인 복사
champions_list = champions.copy() # 챔피언 복사
# 마지막 단어가 숫자면 number에 입력받은 명수
try:
number = int(words[-1])
except ValueError:
number = 1
# 사람 수만큼 추가
result = []
for _ in range(number):
result.append({"라인": '', "룬": '', "아이템": '', '챔피언': ''})
# 랜덤으로 선택
for i in range(number):
for word in words:
if word == "라인":
index = random.randrange(0, len(lanes_list))
result[i]["라인"] = lanes_list[index]
del lanes_list[index]
elif word == "룬":
index = random.randrange(0, len(keystones))
result[i]["룬"] = keystones[index]
elif word == "아이템":
index = random.randrange(0, len(items))
result[i]["아이템"] = items[index]
elif word == "챔피언":
index = random.randrange(0, len(champions_list))
result[i]["챔피언"] = champions_list[index]
del champions_list[index]
return result
반응형
'프로젝트 > 디스코드 봇' 카테고리의 다른 글
[Python] #5 디스코드 봇 만들기 - Data Dragon (0) | 2022.03.27 |
---|---|
[Python] #4 디스코드 봇 만들기 - Embed (4) | 2021.07.11 |
[Python] #3 디스코드 봇 만들기 - 랜덤 추천 (4) | 2021.07.11 |
[Python] #2 디스코드 봇 만들기 - 명령어 (0) | 2021.07.10 |
[Python] #1 디스코드 봇 만들기 - 봇 생성 (0) | 2021.07.06 |
댓글