55 lines
1.5 KiB
Python
55 lines
1.5 KiB
Python
from typing import Any, Dict, List
|
|
|
|
import requests
|
|
from menu import Menu
|
|
|
|
def markdown(text: str) -> Dict[str, Any]:
|
|
return {
|
|
'type': 'section',
|
|
'text': {
|
|
'type': 'mrkdwn',
|
|
'text': text
|
|
}
|
|
}
|
|
|
|
def img(text: str, img_url: str) -> Dict[str, Any]:
|
|
return {
|
|
'type': 'image',
|
|
'title': {
|
|
'type': 'plain_text',
|
|
'text': text
|
|
},
|
|
'image_url': img_url,
|
|
'alt_text': text
|
|
}
|
|
|
|
def menu_to_str(m: Menu) -> str:
|
|
ret = '\n'.join([
|
|
f'*식사 시간*: {m.meal_time}',
|
|
f'*식사 종류*: {m.meal_type}',
|
|
f'*대표 메뉴*: {m.rep_menu}',
|
|
f'*상세 메뉴*: {m.detailed_menu}',
|
|
f'*칼로리*: {m.calory}',
|
|
])
|
|
return ret
|
|
|
|
def for_slack(date: str, data: List[Menu]) -> Dict[str, Any]:
|
|
blocks = [markdown(f'*{date} 일자 메뉴*')]
|
|
if len(data) == 0:
|
|
blocks.append(markdown('메뉴가 존재하지 않습니다'))
|
|
return {'blocks': blocks}
|
|
for each in data:
|
|
blocks.append(markdown(menu_to_str(each)))
|
|
if each.menu_image:
|
|
blocks.append(img(each.rep_menu, each.menu_image))
|
|
else:
|
|
blocks.append(markdown('이미지가 존재하지 않습니다'))
|
|
return {'blocks': blocks}
|
|
|
|
def send(slack_url: str, date: str, data: List[Menu]) -> bool:
|
|
payload = for_slack(date, data)
|
|
print(payload)
|
|
res = requests.post(url= slack_url, json=payload)
|
|
print(res.text)
|
|
return res.text == 'ok'
|
|
|