Compare commits

..
13 Commits
Author SHA1 Message Date
YoursFunny e700ae65ae add message user dict debug 2024-04-28 01:36:36 +08:00
YoursFunny 9ac6065366 remove dict key if disable edit forward 2024-04-28 01:33:50 +08:00
YoursFunny 40877b52eb fix confirm 2024-04-28 01:26:43 +08:00
YoursFunny 0ca9b55ea8 try edit reply markup 2024-04-28 01:18:35 +08:00
YoursFunny ef17b05c14 fix html escape only message 2024-04-28 01:12:02 +08:00
YoursFunny 85d0257c51 feat: change forward confirm reply markup 2024-04-28 01:08:22 +08:00
YoursFunny 7f90670f1c fix edit message html escape 2024-04-28 01:01:59 +08:00
YoursFunny 755c405196 update ptb version 2024-04-26 15:49:52 +08:00
YoursFunny 0ffa9903c4 add hint 2024-04-26 15:19:04 +08:00
YoursFunny 248e7d48e0 fix caption of multiple inline query results 2024-04-26 15:15:13 +08:00
YoursFunny e915cd13de fix html escape 2024-04-26 15:13:38 +08:00
YoursFunny a7d144f2ee fix multiple media forward 2024-03-25 16:54:08 +08:00
YoursFunny 081ee595b1 remove edit reply 2024-03-24 22:54:23 +08:00
4 changed files with 37 additions and 27 deletions
+1 -1
View File
@@ -17,7 +17,7 @@ if WEBHOOK:
x_url_regex = re.compile(r"^(?:https?://)(?:www\.|mobile\.|)(?:x|twitter)\.com/(.+)/status/(\d+)")
x_media_regex = re.compile(r"^(?:https?://)(pbs|video)\.twimg\.com/(.*)")
x_tco_regex = re.compile(r"(?:https?://)t\.co/.+$", re.M)
message_url_regex = re.compile(r"\{.+\}", re.S)
message_url_regex = re.compile(r"\[.+]", re.S)
logging.basicConfig(
level=os.getenv("LOG_LEVEL", "WARNING"),
+25 -18
View File
@@ -1,7 +1,8 @@
import html
from functools import wraps
from aiohttp import ClientSession
from telegram import Update, Chat, InlineKeyboardMarkup, InlineKeyboardButton, ForceReply, Message
from telegram import Update, Chat, InlineKeyboardMarkup, InlineKeyboardButton, Message
from telegram.constants import ParseMode, ChatAction, ChatType
from telegram.ext import (
Application,
@@ -55,8 +56,10 @@ async def url_media(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
url = tweet.url
if context.user_data.get('edit_before_forward', False):
message_reply = await update.effective_message.reply_text(
"Reply to edit message.",
reply_markup=ForceReply(selective=True, input_field_placeholder="{URL}"),
"Reply to edit message. [URL]",
reply_markup=InlineKeyboardMarkup.from_button(
InlineKeyboardButton("↩️ Confirm", callback_data="forward")
),
reply_to_message_id=update.message.message_id,
)
context.user_data['message_reply'] = message_reply
@@ -70,11 +73,13 @@ async def url_media(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
async def forward_message(
update: Update,
context: ContextTypes.DEFAULT_TYPE,
message_sent: tuple[Message, ...],
message_to_send: tuple[Message, ...],
) -> None:
try:
for i, m in enumerate(message_sent):
await m.copy(context.user_data['forward_channel_id'])
await update.effective_chat.copy_messages(
context.user_data['forward_channel_id'],
[m.id for m in message_to_send]
)
except Exception as e:
await update.effective_message.reply_text(str(e))
@@ -84,7 +89,7 @@ async def edit_message(update: Update, context: ContextTypes.DEFAULT_TYPE) -> No
return
if update.message.reply_to_message != context.user_data['message_reply']:
return
update_text = update.message.text
update_text = html.escape(update.message.text)
match = common.message_url_regex.search(update_text)
if match:
match = match.span()
@@ -92,21 +97,14 @@ async def edit_message(update: Update, context: ContextTypes.DEFAULT_TYPE) -> No
context.user_data['message_url'], update_text[match[0] + 1:match[1] - 1]
) + update_text[match[1]:]
message_to_send = context.user_data['message_to_send']
await message_to_send[0].edit_caption(
update_text,
reply_markup=InlineKeyboardMarkup.from_button(
InlineKeyboardButton("↩️ Confirm", callback_data="forward")
)
)
await message_to_send[0].edit_caption(update_text)
async def query_forward_message(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
message_to_send = context.user_data['message_to_send']
await forward_message(update, context, message_to_send)
await update.callback_query.answer('✅ Forwarded')
await update.callback_query.edit_message_reply_markup()
message_reply: Message = context.user_data['message_reply']
await message_reply.edit_text("Message forwarded.")
await update.callback_query.delete_message()
del context.user_data['message_reply']
del context.user_data['message_to_send']
del context.user_data['message_url']
@@ -155,12 +153,20 @@ async def cmd_edit_before_forward(update: Update, context: ContextTypes.DEFAULT_
ebf_status = context.user_data.get('edit_before_forward', False)
if ebf_status:
context.user_data['edit_before_forward'] = False
context.user_data.pop('message_reply', None)
context.user_data.pop('message_to_send', None)
context.user_data.pop('message_url', None)
await update.effective_message.reply_text("Disable edit before forward.")
return
context.user_data['edit_before_forward'] = True
await update.effective_message.reply_text("Enable edit before forward.")
@send_action(ChatAction.TYPING)
async def cmd_user_dict(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
await update.effective_message.reply_text(str(context.user_data))
async def post_init(application: Application) -> None:
# commands = [
# BotCommand('start', CMD_START),
@@ -193,8 +199,8 @@ def main():
.build()
)
# user_filter = filters.User()
# user_filter.add_user_ids(common.admin)
user_filter = filters.User()
user_filter.add_user_ids(common.ADMIN)
handlers = [
MessageHandler(filters.Regex(common.x_url_regex) & filters.ChatType.PRIVATE, url_media),
@@ -204,6 +210,7 @@ def main():
CommandHandler("edit_before_forward", cmd_edit_before_forward),
MessageHandler(~filters.COMMAND & filters.ChatType.PRIVATE, edit_message),
CallbackQueryHandler(query_forward_message, pattern="forward"),
CommandHandler("bot_dict", cmd_user_dict, filters=user_filter),
]
application.add_handlers(handlers)
+1 -1
View File
@@ -1,2 +1,2 @@
python-telegram-bot[webhooks]~=21.0.1
python-telegram-bot[webhooks]~=21.1.1
aiohttp[speedups]~=3.9.3
+10 -7
View File
@@ -1,3 +1,4 @@
import html
from typing import Generator
from aiohttp import ClientSession
@@ -183,12 +184,14 @@ class TGTweet(Tweet):
return message_raw_text.format(
url=self.url,
author_url=self.author_url,
author=self.author,
text=self.text
author=html.escape(self.author),
text=html.escape(self.text)
)
@property
def inline_query_generator(self) -> Generator[InlineQueryResultPhoto | InlineQueryResultVideo, None, None]:
def inline_query_generator(self) -> Generator[
InlineQueryResultPhoto | InlineQueryResultVideo | InlineQueryResultMpeg4Gif, None, None
]:
for i, tweet_media in enumerate(self.media):
logger.info(str(tweet_media))
if tweet_media.type == "image":
@@ -196,7 +199,7 @@ class TGTweet(Tweet):
id=str(i),
photo_url=tweet_media.url,
thumbnail_url=tweet_media.thumb,
caption=self.message_text if not i else None
caption=self.message_text
)
elif tweet_media.type == "video":
yield InlineQueryResultVideo(
@@ -205,18 +208,18 @@ class TGTweet(Tweet):
mime_type="video/mp4",
thumbnail_url=tweet_media.thumb,
title=self.text,
caption=self.message_text if not i else None
caption=self.message_text
)
elif tweet_media.type == "gif":
yield InlineQueryResultMpeg4Gif(
id=str(i),
mpeg4_url=tweet_media.url,
thumbnail_url=tweet_media.thumb,
caption=self.message_text if not i else None
caption=self.message_text
)
@property
def pm_media_generator(self) -> Generator[InputMediaPhoto | InputMediaVideo, None, None]:
def pm_media_generator(self) -> Generator[InputMediaPhoto | InputMediaVideo | InputMediaAnimation, None, None]:
for tweet_media in self.media:
logger.info(str(tweet_media))
if tweet_media.type == "image":