Bot & Automation
Activity Reminder Bot
/root/hermes-projects/Activity Reminder Bot
apps/activity_reminder_bot/services/formatters.py
text
from datetime import datetime
from activity_reminder_bot.models import Reminder, ReminderDraft, ReminderRepeat, ReminderStatus
DATE_FORMAT = "%d %B %Y"
TIME_FORMAT = "%H:%M"
MONTH_NAMES = {
1: "Januari",
2: "Februari",
3: "Maret",
4: "April",
5: "Mei",
6: "Juni",
7: "Juli",
8: "Agustus",
9: "September",
10: "Oktober",
11: "November",
12: "Desember",
}
def format_date_id(value: datetime) -> str:
return f"{value.day:02d} {MONTH_NAMES[value.month]} {value.year}"
def format_datetime(value: datetime) -> str:
return f"{format_date_id(value)} jam {value.strftime(TIME_FORMAT)}"
def format_preview(draft: ReminderDraft) -> str:
return (
"🔔 Reminder Preview\n\n"
f"Kegiatan:\n{draft.activity_name}\n\n"
f"Tanggal:\n{format_date_id(datetime.combine(draft.reminder_date, draft.reminder_time))}\n\n"
f"Jam:\n{draft.reminder_time.strftime(TIME_FORMAT)}\n\n"
f"Repeat:\n{draft.repeat.value}\n\n"
"Apakah data sudah benar?"
)
def format_reminder_card(reminder: Reminder) -> str:
status = reminder.status.value if isinstance(reminder.status, ReminderStatus) else str(reminder.status)
repeat = reminder.repeat.value if isinstance(reminder.repeat, ReminderRepeat) else str(reminder.repeat)
return (
"📌 Reminder Card\n\n"
f"ID: {reminder.public_id}\n"
f"Kegiatan: {reminder.activity_name}\n"
f"Deskripsi: {reminder.description or '-'}\n"
f"Tanggal: {format_date_id(datetime.combine(reminder.reminder_date, reminder.reminder_time))}\n"
f"Jam: {reminder.reminder_time.strftime(TIME_FORMAT)}\n"
f"Repeat: {repeat}\n"
f"Status: {status}"
)
def format_alarm(reminder: Reminder, now: datetime) -> str:
return (
"🔔 Alarm Kegiatan\n\n"
f"{reminder.activity_name}\n\n"
f"⏰ Sekarang Jam {now.strftime(TIME_FORMAT)}\n\n"
"Pilih aksi:"
)
def format_list(title: str, reminders: list[Reminder]) -> str:
if not reminders:
return f"{title}\n\nBelum ada reminder."
lines = [title, ""]
for index, reminder in enumerate(reminders, start=1):
lines.append(
f"{index}. {reminder.activity_name} - "
f"{reminder.reminder_date.strftime('%d/%m/%Y')} {reminder.reminder_time.strftime(TIME_FORMAT)} "
f"({reminder.status.value})"
)
return "\n".join(lines)