저번 포스팅에서 메뉴로 분리했었는데 메뉴 두번째에 만들 항목은 컨셉질에 맞게 토정비결 보는 것을
만들어보려고 한다.
이 블로그에서 상세하게 이 토정비결에 대해서 설명하기는 좀 그렇고
그냥 간단하게 운세 보는 책이라고 생각하면 된다.
위의 이미지에서 나이를 보고 상괘를 뽑고 태어난 월에 맞는 중괘, 태어난 날에 맞는 하괘를 뽑는다.
단, 생년월일은 음력기준으로 한다.
예를 들어, 스무살 2003년생 4월 15일 생인 경우 작괘(숫자)는 '451'이 된다.
451 작괘에 대한 운세이고, 주소는 네이버 지식백과에서 이용하였다.
먼저 괘를 계산하기 편하려면 육십갑자 달력이 있으면 편하다.
위의 이미지에서 태세수, 월건수, 일진수 등이 전부 나와있다. (블로그참조)
계산법은 해당 블로그에 상세하게 나와있어 참고하였다.
상괘 = (올해의 나이 + 태세수) % 8
올해 2022년은 임인년이므로 태세수는 16이다.
위에 게산했던 2003년생 기준으로 하면 (20 + 16) % 8 이 되고
나머지가 4가 나오며 이게 바로 본인의 상괘가 된다.
중괘 = (당해의 음력월 달수 + 월건수) % 6
중괘는 월건수를 더한 후 6으로 나눈 나머지가 된다.
하괘 = (음력 생일 + 일진수) % 3
너무 토정비결 관련 내용이 많아졌는데
결론은 육십갑자에 나오는 년도에 있는 태세수, 월건수, 일진수를 가지고 있으면 입력 하는 생년월일에 따라
괘를 계산할 수 있을 것으로 보인다.
우선은 육십갑자 중 2022년인 임인년을 기준으로 해서 하드코딩으로 수들을 세팅한 후 입력했을 때
상,중,하괘를 찾는 것으로 시작해본다.
async def tojeong_secret_book(birthdate: str):
if not birthdate:
message = "생년월일을 입력해 주시기 바랍니다."
return message
if len(birthdate) != 6:
message = "생년월일 6자리를 맞춰서 입력해 주시기 바랍니다."
return message
# 임인년 육십갑자 세팅
rule1 = 16 # 태세수
rule2 = 13 # 월건수
rule3 = 14 # 일진수
year = birthdate[0:2]
month = birthdate[2:4]
day = birthdate[4:6]
message = f"{year}/{month}/{day}"
return message
생년월일을 6자리 ('030415') 형태로 입력받고 슬라이스해서 각각 년, 월, 일을 분리해준다.
임인년 육십갑자 세팅은 우선은 하드코딩으로 작성하였고 나중에는
연도별로 db에서 관리할수도 있을것같다.
@router.post("/interactive")
async def post_message(request: Request, db: Session = Depends(get_db)):
form_data = await request.form()
payload = json.loads(form_data.get("payload"))
message = "message"
actions = payload["actions"][0]
plain_text = payload["message"]["text"]
text_input_value = payload["actions"][0]["value"]
if payload:
if actions["type"] == "plain_text_input":
if plain_text == "나의이름은":
message = await interactive_myname(myname=text_input_value, db=db)
elif plain_text == "토정비결":
message = await tojeong_secret_book(birthdate=text_input_value)
elif actions["type"] == "button":
if actions["value"] == "menu1":
await input_myname()
return
elif actions["value"] == "menu2":
await input_birthdate()
return
slack_client.post_message(
channel_id=url.channel_id,
text=message,
)
return
menu2를 눌렀을 때 마찬가지로 plain_text_input
를 유저에게 제공하고
생년월일을 입력하면 토정비결 로직으로 이동할 수 있게 수정한다.
다음 포스팅에서 이어서...