728x90
반응형
이번에는 다른사람에게 돈을 보내는 기능을 만들어보자
이 기능은 게임봇을 만들게 된 동기중 하나다
#user.py
...
def getMoney(_name, _id):
loadFile()
for row in range(2, ws.max_row+2):
if ws.cell(row, c_name).value == _name and ws.cell(row,c_id).value == hex(_id):
return ws.cell(row,c_money).value
break
else:
return 0
break
...
@bot.command()
async def 송금(ctx, user: discord.User, money):
if checkName(user.name, user.id):
await ctx.send("등록되지 않는 사용자입니다.")
else:
if getMoney(ctx.author.name, ctx.author.id) >= int(money):
await ctx.send("송금")
else:
await ctx.send("돈이 충분하지 않습니다.")
돈이 충분하면 송금
불충분하면 충분하지 않다고 나온다
이제 진짜로 돈을 보내보자
그전에 로직개선을 한번 했다
lektion-von-erfolglosigkeit.tistory.com/90
유저가 보낼만한 돈이 있는 것도 확인했으니 DB에서 수정하고 그에 따른 안내 메세지를 보내면 될듯 하다
#user.py
...
def remit(sender, s_id, receiver, r_id, _amount):
loadFile()
receiver_row = findRow(receiver, r_id)
sender_row = findRow(sender, s_id)
ws.cell(receiver_row, c_money).value += int(_amount)
ws.cell(sender_row, c_money).value -= int(_amount)
saveFile()
...
보내는 사람과 받는 사람의 이름과 아이디를 받고
각각의 위치를 찾은 다음
DB의 값을 수정한 뒤 저장한다
더보기
나중에 한번 더 로직을 개선할 필요가 있는 것 같다
보기 쉽게 블로그의 코드에는 print가 다 빠져있지만 github에 올라간 코드에는 수많은 print가 있다
송금 한번 하는데 findRow만 6번 쓰이니 그만큼의 엄청난 print가 찍히고 있다
그리고 print가 많은만큼 함수마다 구분도 해주어야 할 것같다
마지막으로 확인해보니 보내는 사람이 DB에 있는지는 확인하지 않아 돈이 부족하다고만 나온다
그리고 main.py의 송금함수는 아래와 같다
#main.py
...
@bot.command()
async def 송금(ctx, user: discord.User, money):
if findRow(user.name, user.id) == None:
await ctx.send("등록되지 않는 사용자입니다.")
else:
s_money = getMoney(ctx.author.name, ctx.author.id)
r_money = getMoney(user.name, user.id)
if s_money >= int(money):
remit(ctx.author.name, ctx.author.id, user.name, user.id, money)
embed = discord.Embed(title="송금 완료", description = "송금된 돈: " + money, color = 0x77ff00)
embed.add_field(name = "보낸 사람: " + ctx.author.name, value = "현재 자산: " + str(getMoney(ctx.author.name, ctx.author.id)))
embed.add_field(name = ":arrow_forward:", value = "")
embed.add_field(name="받은 사람: " + user.name, value="현재 자산: " + str(getMoney(user.name, user.id)))
await ctx.send(embed=embed)
else:
await ctx.send("돈이 충분하지 않습니다.")
...
위에서 말했듯이 로직 개선을 한번 한뒤에 본격적으로 돈으로 할 수 있는 컨텐츠를 만들 예정이다
'프로젝트 > 디스코드 봇' 카테고리의 다른 글
디스코드 봇 만들기#10 - 레벨과 랭킹 (4) | 2021.03.19 |
---|---|
디스코드 봇 만들기#9 - 홀짝 게임 (4) | 2021.03.12 |
디스코드 봇 만들기#7.5 - 내정보 확인 (0) | 2021.02.26 |
디스코드 봇 만들기#7 - 회원가입 (12) | 2021.02.19 |
디스코드 봇 만들기#6 - 게임봇 계획 (0) | 2021.02.12 |