Compare commits

..

No commits in common. "0e2b71484807bb83a3f4ea4b03e0dbddf76c1a99" and "c1e7c0eb385c16cad93987ca6fd3833f3d31ad55" have entirely different histories.

View File

@ -2,12 +2,7 @@ import datetime
import os import os
from telegram.ext import ConversationHandler, CommandHandler, MessageHandler, filters, CallbackQueryHandler from telegram.ext import ConversationHandler, CommandHandler, MessageHandler, filters, CallbackQueryHandler
from telegram import InlineKeyboardButton, InlineKeyboardMarkup from telegram import InlineKeyboardButton, InlineKeyboardMarkup
from telegram.constants import ParseMode ACTION_CHOICE, DATE_ENTRY, ADD_CONTENT = range(3)
ENTRY_OPTIONS, CONTENT_ENTRY = range(2)
BUTTON_COUNT = 5
from .basehandler import BaseHandler from .basehandler import BaseHandler
@ -18,15 +13,17 @@ class JournalHandler(BaseHandler):
self.handler = ConversationHandler( self.handler = ConversationHandler(
entry_points=[CommandHandler(entry_string, self.entry_point)], entry_points=[CommandHandler(entry_string, self.entry_point)],
states={ states={
ENTRY_OPTIONS: [ ACTION_CHOICE: [
CallbackQueryHandler(self.date_button, pattern=r"^\d{8}$"), # a serialized date CallbackQueryHandler(self.date_choice, pattern="today|yesterday"),
CallbackQueryHandler(self.date_custom, pattern=r"^\d{1,3}$"), # a ~ small delta CallbackQueryHandler(self.date_custom, pattern="custom"),
CallbackQueryHandler(self.option_delete, pattern="delete"), CallbackQueryHandler(self.option_delete, pattern="delete")
],
DATE_ENTRY: [
MessageHandler(filters.ALL, self.date_entry), MessageHandler(filters.ALL, self.date_entry),
], ],
CONTENT_ENTRY: [ ADD_CONTENT: [
MessageHandler(filters.ALL, self.content_save), MessageHandler(filters.ALL, self.content_save),
], ]
}, },
fallbacks=[], fallbacks=[],
) )
@ -40,31 +37,30 @@ class JournalHandler(BaseHandler):
await update.message.reply_text("You are not authorized to use this bot") await update.message.reply_text("You are not authorized to use this bot")
return ConversationHandler.END return ConversationHandler.END
dates = [(datetime.datetime.now() - datetime.timedelta(days = i)).date() for i in range(BUTTON_COUNT)][::-1]
names = [d.strftime("%d.%m.") for d in dates]
callbacks = [d.strftime("%d%m%Y") for d in dates]
names[-1] = "Today"
names[-2] = "Yesterday"
options = [ options = [[
[ InlineKeyboardButton("Today", callback_data="today"),
InlineKeyboardButton("<<", callback_data=BUTTON_COUNT) InlineKeyboardButton("Yesterday", callback_data="yesterday"),
] + [ InlineKeyboardButton("Custom date", callback_data="custom"),
InlineKeyboardButton(n, callback_data=c) for n,c in zip(names, callbacks)
], ],
[ [
InlineKeyboardButton("Delete", callback_data="delete") InlineKeyboardButton("Delete", callback_data="delete")
] ]
] ]
keyboard = InlineKeyboardMarkup(options) keyboard = InlineKeyboardMarkup(options)
await update.message.reply_text("Please choose a date \(or type it in the format _DDMMYYYY_\)", reply_markup=keyboard, parse_mode=ParseMode.MARKDOWN_V2) await update.message.reply_text("Please choose an option for the entry:", reply_markup=keyboard)
return ENTRY_OPTIONS return ACTION_CHOICE
async def date_button(self, update, context): async def date_choice(self, update, context):
query = update.callback_query query = update.callback_query
await query.answer() await query.answer()
date = datetime.datetime.strptime(query.data, "%d%m%Y").date() if query.data == "today":
date = datetime.datetime.now().date()
elif query.data == "yesterday":
date = datetime.datetime.now().date() - datetime.timedelta(days=1)
else:
raise ValueError("Invalid date choice")
with self.models.db: with self.models.db:
self.current_model, new = self.models.JournalEntry.get_or_create( self.current_model, new = self.models.JournalEntry.get_or_create(
@ -79,34 +75,15 @@ class JournalHandler(BaseHandler):
await query.edit_message_text(text="An entry already exists for this date") await query.edit_message_text(text="An entry already exists for this date")
return ConversationHandler.END return ConversationHandler.END
return CONTENT_ENTRY return ADD_CONTENT
async def date_custom(self, update, context): async def date_custom(self, update, context):
query = update.callback_query query = update.callback_query
await query.answer() await query.answer()
delta = int(query.data) await query.edit_message_text(text="Please enter the date in the format DDMMYYYY")
return DATE_ENTRY
dates = [(datetime.datetime.now() - datetime.timedelta(days = i + delta)).date() for i in range(BUTTON_COUNT - 1)][::-1]
names = [d.strftime("%d.%m.") for d in dates]
callbacks = [d.strftime("%d%m%Y") for d in dates]
options = [
[
InlineKeyboardButton("<<", callback_data=delta + (BUTTON_COUNT - 1))
] + [
InlineKeyboardButton(n, callback_data=c) for n,c in zip(names, callbacks)
] + [
InlineKeyboardButton(">>", callback_data=delta - (BUTTON_COUNT - 1))
],
[
InlineKeyboardButton("Delete", callback_data="delete")
]
]
keyboard = InlineKeyboardMarkup(options)
await query.edit_message_text("Please choose a date \(or type it in the format _DDMMYYYY_\)", parse_mode=ParseMode.MARKDOWN_V2)
return ENTRY_OPTIONS
async def date_entry(self, update, context): async def date_entry(self, update, context):
date = update.message.text date = update.message.text
@ -114,8 +91,8 @@ class JournalHandler(BaseHandler):
try: try:
date = datetime.datetime.strptime(date, "%d%m%Y").date() date = datetime.datetime.strptime(date, "%d%m%Y").date()
except ValueError: except ValueError:
await update.message.reply_text("Please enter the date in the format _DDMMYYYY_", parse_mode=ParseMode.MARKDOWN_V2) await update.message.reply_text("Please enter the date in the format DDMMYYYY")
return ENTRY_OPTIONS return DATE_ENTRY
if context.chat_data.get("delete", False): # if not set, delete was not chosen if context.chat_data.get("delete", False): # if not set, delete was not chosen
with self.models.db: with self.models.db:
@ -141,7 +118,7 @@ class JournalHandler(BaseHandler):
await update.message.reply_text( await update.message.reply_text(
text=f"Journal entry no. {count}. What happened on {self.current_model.date_pretty}?" text=f"Journal entry no. {count}. What happened on {self.current_model.date_pretty}?"
) )
return CONTENT_ENTRY return ADD_CONTENT
async def content_save(self, update, context): async def content_save(self, update, context):
@ -171,9 +148,9 @@ class JournalHandler(BaseHandler):
async def option_delete(self, update, context): async def option_delete(self, update, context):
query = update.callback_query query = update.callback_query
await query.answer() await query.answer()
await query.edit_message_text(text="Please enter the date in the format _DDMMYYYY_", parse_mode=ParseMode.MARKDOWN_V2) await query.edit_message_text(text="Please enter the date in the format DDMMYYYY")
context.chat_data["delete"] = True context.chat_data["delete"] = True
return ENTRY_OPTIONS return DATE_ENTRY
async def delete_entry(self, update, context): async def delete_entry(self, update, context):