from slackbot.bot import respond_to
from TodoistApiController import TodoistItems
from datetime import datetime
from pytz import timezone
import os
@respond_to('^(.*)の予定$')
def todoist_task_list(message, param_date):
t = TodoistItems(os.environ['TODOIST_API_TOKEN'])
if param_date == '今日':
target_date = datetime.now().astimezone(timezone('Asia/Tokyo')).strftime('%Y/%m/%d')
else:
# 文字列型からdate型に変換
target_date = datetime.strptime(param_date, '%Y/%m/%d').astimezone(timezone('Asia/Tokyo')).strftime('%Y/%m/%d')
output = "%sの予定n" % target_date
texts = {}
# 指定した日付のタスクを取得する
items = t.find_by_date(target_date, False)
for i, item in enumerate(items):
key_check_due = t.key_check(item, 'due')
# 取得したタスクを表示
if item['checked']:
mark = ':white_check_mark:'
else:
# 繰り返しのタスクをチェック
if key_check_due:
if item['due']['is_recurring'] and target_date.replace('/', '-') not in item['due']['date']:
mark = ':white_check_mark:'
else:
mark = ':white_square:'
else:
mark = ':white_square:'
# date_langが「ja」かどうかチェック
if key_check_due:
if item['due']['lang'] == 'ja':
if '毎週' in item['due']['string']:
date, time = item['due']['string'].replace(' ', '').split('曜日')
else:
date, time = item['due']['string'].replace('月', '/').replace(' ', '').split('日')
else:
if 'every' in item['due']['string']:
if 'at' in item['due']['string']:
date, time = item['due']['string'].replace(' ', '').replace('sat', 'sa').split('at')
else:
date = item['due']['string'].replace(' ', '')
time = '12:00'
else:
date, time = item['date_string'].replace('-', '/').split(' ')
else:
if item['date_lang'] == 'ja':
if '毎週' in item['date_string']:
date, time = item['date_string'].replace(' ', '').split('曜日')
else:
date, time = item['date_string'].replace('月', '/').replace(' ', '').split('日')
# 「en」になってしまうケースがある
else:
if 'every' in item['date_string']:
if 'at' in item['date_string']:
date, time = item['date_string'].replace(' ', '').replace('sat', 'sa').split('at')
else:
date = item['date_string'].replace(' ', '')
time = '12:00'
else:
date, time = item['date_string'].replace('-', '/').split(' ')
items[i]['date'] = date
items[i]['time'] = time
if time == '':
index = '_' + str(i)
else:
index = time + '_' + str(i)
param = {index: {
'mark': mark,
'time': time,
'subject': item['content']
}}
texts.update(param)
for k, v in enumerate(sorted(texts)):
output += "%s %s %sn" % (texts[v]['mark'], texts[v]['time'], texts[v]['subject'])
message.send(output)