diff --git a/main.py b/main.py
index 41fa1ae..3c6e5dc 100644
--- a/main.py
+++ b/main.py
@@ -71,9 +71,12 @@ async def url_media(update: Update, context: CustomContext) -> None:
url = tweet.url
if context.chat_data.edit_before_forward:
message_reply = await update.effective_message.reply_text(
- "Reply to edit message. [URL]",
- reply_markup=InlineKeyboardMarkup.from_button(
- InlineKeyboardButton("↩️ Confirm", callback_data="forward")
+ "Reply to edit message.",
+ reply_markup=InlineKeyboardMarkup.from_column(
+ [InlineKeyboardButton("↩️ Confirm", callback_data="forward")] + [
+ InlineKeyboardButton(name, callback_data=f"template|{name}") for name in
+ context.chat_data.template.keys()
+ ]
),
reply_to_message_id=update.message.message_id,
)
@@ -103,23 +106,12 @@ async def forward_message(
async def edit_message(update: Update, context: CustomContext) -> None:
if (reply_id := update.message.reply_to_message.id) not in context.chat_data.edit_message:
return
- template = context.chat_data.template
- message_url = '{1}'
_edit_message = context.chat_data.edit_message[reply_id]
- if template:
- update_text = template.replace("[]", message_url.format(
- _edit_message.url,
- html.escape(update.message.text)
- ))
- else:
- update_text = html.escape(update.message.text)
- match = regex.message_url.search(update_text)
- if match:
- match = match.span()
- update_text = update_text[:match[0]] + message_url.format(
- _edit_message.url,
- update_text[match[0] + 1:match[1] - 1]
- ) + update_text[match[1]:]
+ new_text = '{1}'.format(
+ _edit_message.url,
+ html.escape(update.message.text)
+ )
+ update_text = ori_text.replace("[]", new_text) if "[]" in (ori_text := _edit_message.forward[0].text) else new_text
await _edit_message.forward[0].edit_caption(update_text)
@@ -131,6 +123,15 @@ async def query_forward_message(update: Update, context: CustomContext) -> None:
del _edit_message
+async def query_template(update: Update, context: CustomContext) -> None:
+ query = update.callback_query
+ await query.answer()
+ name = query.data.split("|")[1]
+ await context.chat_data.edit_message[query.message.message_id].forward[0].edit_caption(
+ context.chat_data.template[name]
+ )
+
+
@send_action(ChatAction.TYPING)
async def cmd_set_forward_channel(update: Update, context: CustomContext) -> None:
if not context.args:
@@ -191,10 +192,10 @@ async def cmd_set_template(update: Update, context: CustomContext) -> None:
if not reply:
await update.effective_message.reply_text("Please reply to a message to set as template.")
return
- if '[]' not in reply.text_html:
+ if '[]' not in (template := reply.text_html):
await update.effective_message.reply_text("Please reply to a message with [] to set as template.")
return
- context.chat_data.template = reply.text_html
+ context.chat_data.template[''.join(context.args)] = template
await update.effective_message.reply_text("Template set.")
@@ -253,6 +254,7 @@ def main():
CommandHandler("set_template", cmd_set_template),
MessageHandler(~filters.COMMAND & filters.ChatType.PRIVATE, edit_message),
CallbackQueryHandler(query_forward_message, pattern="forward"),
+ CallbackQueryHandler(query_template, pattern=r"^template\|"),
CommandHandler("bot_dict", cmd_user_dict, filters=user_filter),
]
diff --git a/utils/context.py b/utils/context.py
index 6ce719f..e867749 100644
--- a/utils/context.py
+++ b/utils/context.py
@@ -16,7 +16,7 @@ class ChatData:
self.forward_channel_id: Optional[int] = None
self.edit_before_forward: bool = False
self.edit_message: dict[int, EditMessage] = {}
- self.template: Optional[str] = None
+ self.template: dict[str, str] = {}
class CustomContext(CallbackContext[ExtBot, dict, ChatData, dict]):