728x90
반응형
생각해보니 내 정보를 디코에서 볼 수가 없었다
해봤자 돈이랑 레벨, 이름정도밖에 없지만 나중을 위해서라도 미리 만들어두기로 했다
#user.py
...
def userInfo(_namd, _id):
if not checkName(_namd, _id):
for row in range(2, ws.max_row+2):
if ws.cell(row, 1).value == _name and ws.cell(row, 2).value == _id:
return ws.cell(row,1).value, ws.cell(row,c_lvl).value
break
else:
return None, None
...
#main.py
...
@bot.command()
async def 내정보(ctx):
money, level = userInfo(ctx.author.name, ctx.author.id)
if money == None or level == None:
await ctx.send("등록되지 않은 사용자입니다.")
else:
emebed = discord.Embed(title="유저 정보", description = ctx.author.name, color = 0x62D0F6)
embed.add_field(name="레벨", value = level)
embed.add_field(name="보유 자산", value = money)
await ctx.send(embed=embed)
명령어 자체는 잘 작동하는듯 했으나 문제가 생겼다.
봇을 껐다 킨 후에 !내정보를 입력하면 DB에 없다고 판단하고 등록되지 않았다고 한다
엑셀파일에도 그대로 있는데 왜...
여러가지 값들을 출력해보니 id 값이 정수로 표현하기에 너무 커서 엑셀에서 지수형태로 표현하기 때문이었다
id말고 name만 확인하는 방법도 있을수 있으나 id까지 확인하는 것이 더 나을것 같기에 검색을 좀 해봤다
엑셀 파일에서 id의 column을 숫자로 바꿔보았으나 딱히 성과는 없었다
결국 10진수를 16진수로 바꾸어 저장하기로 했다
파이썬에서 자체적으로 hex()함수를 지원하고 있기 때문에
_id를 모두 hex(_id)로 바꾸어서 저장도 16진수로, 비교도 16진수로 하면 해결된듯 하다
또한 user.py의 모든 함수 처음에 아래의 loadFile()과 마지막에 wb.save()와 wb.close()를 추가했다
#user.py
...
def loadFile():
wb.load_workbook("userDB.xlsx")
ws= wb.active
...
def _func():
loadFile()
...
wb.save("userDB.xlsx")
wb.close()
...
'프로젝트 > 디스코드 봇' 카테고리의 다른 글
디스코드 봇 만들기#9 - 홀짝 게임 (4) | 2021.03.12 |
---|---|
디스코드 봇 만들기#8 - 송금 (0) | 2021.03.05 |
디스코드 봇 만들기#7 - 회원가입 (12) | 2021.02.19 |
디스코드 봇 만들기#6 - 게임봇 계획 (0) | 2021.02.12 |
디스코드 봇 만들기#5 - 음악재생 (2) | 2021.02.05 |