728x90
반응형

유저정보 받아오기

명령어를 입력한 유저의 name과 id를 받아오자

@bot.command()
async def 회원가입(ctx):
    print(ctx.author.name)
    print(ctx.author.id)

정상적으로 출력된다

 

회원가입 만들기

각각 이름과 고유번호로 userDB.xlsx에 저장하고 레벨과 돈을 설정할 예정이다

이를 위한 파일을 또 따로 만들어주자

#user.py

from openpyxl import load_workbook, Workbook

c_name = 1
c_id = 2
c_money = 3
c_lvl = 4

default_money = 10000

wb = load_workbook("userDB.xlsx")
ws = wb.active

def signup(_name, _id):
    ws.cell(row=2, column=c_name, value=_name)
    ws.cell(row=2, column=c_id, value =_id)
    ws.cell(row=2, column=c_money, value = default_money)
    ws.cell(row=2, column=c_lvl, value = 1)

    wb.save("userDB.xlsx")
@bot.command()
async def 회원가입(ctx):
    signup(ctx.author.name, ctx.author.id)

 

아래와 같이 userDB.xlsx에 저장되었다.

id가 이상하게 나오긴 하지만 코드상에서 출력해보면 정상적으로 출력된다.

 

현재 상태에서는 계속 같은 장소에 데이터가 덮어쓰기만 될테니

위에서부터 빈 줄을 찾아서 row에 넣어주도록 하겠다

 

...

def checkRow():
    for row in range(2, ws.max_row + 1):
        if ws.cell(row,1).value is None:
            return row
            break
    #return ws.max_row 불안정하지만 훨씬 간단함

def signup(_name, _id):
    _row = checkRow()
    
    ws.cell(row=_row, column=c_name, value=_name)
    ws.cell(row=_row, column=c_id, value =_id)
    ws.cell(row=_row, column=c_money, value = default_money)
    ws.cell(row=_row, column=c_lvl, value = 1)
    
...

ws.max_row는 값이 있는 가장 마지막 row를 가져온다

 

디코 채팅방에서 !회원가입 을 입력하면 메세지와 함께 엑셀 파일에 추가된것을 볼 수 있다

 

다음은 중복 가입을 방지하기 위한 조건문을 작성한다

 

#user.py

...
def checkName(_name, _id):
    for row in range(2, ws.max_row+1):
        if ws.cell(row,1).value == _name and ws.cell(row,2).value == _id:
            break
            return False
        else:
            return True
            break
...
#main.py

...
@bot.command()
async def 회원가입(ctx):
    #print(ctx.author.name)
    #print(ctx.author.id)
    if checkName(ctx.author.name, ctx.author.id):
        signup(ctx.author.name, ctx.author.id)
        await ctx.send("회원가입이 완료되었습니다.")
    else:
        await ctx.send("이미 가입하셨습니다.")
...

 

위 코드를 각각 추가한 뒤 회원가입을 하면 이미 가입했다는 메세지가 나온다

 

또 테스트할 때마다 매번 엑셀을 열고 데이터를 지운다음 엑셀을 닫는게 귀찮아서 리셋명령어도 만들었다

#user.py
...
def delete():
ws.delete_rows(2,ws.max_row)
wb.save("userDB.xlsx")
#main.py
...
@bot.command()
async def reset(ctx):
delete()
...

 

이제 회원가입을 할 수 있다

 

원래는 좀 더 개발하려고 했으나 시간이 없는 관계로 유저 간의 돈 거래는 다음에 만들어 보겠다