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]):