Commit 7f322a4
Changed files (6)
src/preview/douyin.py
@@ -68,6 +68,7 @@ async def preview_douyin(
succ, data = await parse_via_tikhub(url, platform, proxy, provider="tikhub")
if not succ and "bridge" in douyin_provider: # try bridge
logger.error("❌抖音解析失败, 尝试第三方Bot...")
+ kwargs |= {"target_mid": message.id}
await send_to_social_media_bridge(client, message, url, platform, **kwargs)
return
if not succ:
src/preview/instagram.py
@@ -30,7 +30,7 @@ async def preview_instagram(
db_key: str = "",
*,
instagram_provider: str = PROVIDER.INSTAGRAM,
- instagram_comments_provider: str = PROVIDER.INSTAGRAM_COMMENTS,
+ instagram_comments: bool = True,
**kwargs,
):
"""Preview instagram link in the message.
@@ -41,7 +41,7 @@ async def preview_instagram(
url (str, optional): Tnstagram link.
db_key (str, optional): The cache key.
instagram_provider (str, optional): The instagram extractor: tikhub, ddinstagram, bridge
- instagram_comments_provider (str, optional): The instagram comments extractor: "tikhub" or "false".
+ instagram_comments (bool, optional): Add instagram comments. Defaults to True.
"""
if kwargs.get("show_progress") and "progress" not in kwargs:
res = await send2tg(client, message, texts=f"🔗正在解析Instagram链接\n{url}", **kwargs)
@@ -93,7 +93,7 @@ async def preview_instagram(
texts += f"{description}\n"
# parse comments
comments: list[str] = []
- if true(instagram_comments_provider):
+ if true(instagram_comments):
comment_nodes = glom(data, "edge_media_to_parent_comment.edges", default=[])
comment_nodes = sorted(comment_nodes, key=lambda x: glom(x, "node.created_at", default=0))
comment_list = [{"author": glom(node, "node.owner.username", default="user"), "text": glom(node, "node.text", default="")} for node in comment_nodes]
@@ -121,6 +121,7 @@ async def preview_ddinstagram(client: Client, message: Message, url: str, post_t
post_id (str): post id.
fallback (bool, optional): Fallback to other bots. Defaults to True.
"""
+ kwargs |= {"target_mid": message.id}
if "ddinstagram" not in instagram_provider:
if "bridge" in instagram_provider:
await send_to_social_media_bridge(client, message, url, **kwargs)
src/preview/twitter.py
@@ -29,9 +29,8 @@ async def preview_twitter(
db_key: str = "",
platform: str = "x",
twitter_provider: str = PROVIDER.TWITTER,
- twitter_comments_provider: str = PROVIDER.TWITTER_COMMENTS,
*,
- fallback: bool = True,
+ twitter_comments: bool = True,
**kwargs,
):
"""Preview twitter link in the message.
@@ -43,8 +42,7 @@ async def preview_twitter(
db_key (str, optional): The cache key.
platform (str): The social media platform.
twitter_provider (str): The extractor to use: fxtwitter or tikhub.
- twitter_comments_provider (str, optional): The twitter comments extractor: "tikhub" or "false".
- fallback (bool, optional): Fallback to other bots. Defaults to True.
+ twitter_comments (bool, optional): Add twitter comments. Defaults to True
"""
if kwargs.get("show_progress") and "progress" not in kwargs:
res = await send2tg(client, message, texts=f"🔗正在解析推特链接\n{url}", **kwargs)
@@ -101,10 +99,12 @@ async def preview_twitter(
logger.warning(f"Twitter API [vxtwitter] failed: {e}")
if not succ:
- if fallback:
+ if "bridge" in twitter_provider:
await modify_progress(text="❌推特解析失败, 尝试第三方Bot...", **kwargs)
+ kwargs |= {"target_mid": message.id}
await send_to_social_media_bridge(client, message, url, platform, **kwargs)
return
+
media = []
media_ids = set() # deduplicate media
master_media = []
@@ -156,7 +156,7 @@ async def preview_twitter(
msg += f"\n🏞{part_strs['first']}属于主推"
if texts := master_info.get("texts"):
msg += f"\n{texts}"
- if true(twitter_comments_provider) and (comments := master_info.get("comments")):
+ if true(twitter_comments) and (comments := master_info.get("comments")):
msg += f"\n{BLOCKQUOTE_EXPANDABLE_DELIM}💬**点此展开评论区**:"
for cmt in comments:
if str(cmt["post_id"]) == str(this_info["post_id"]):
@@ -185,7 +185,7 @@ async def preview_twitter(
if texts := this_info.get("texts"):
msg += f"\n{texts}"
- if true(twitter_comments_provider) and (comments := this_info.get("comments")):
+ if true(twitter_comments) and (comments := this_info.get("comments")):
msg += f"\n{BLOCKQUOTE_EXPANDABLE_DELIM}💬**点此展开评论区**:"
for cmt in comments:
cmt_texts = cmt["text"].strip().removeprefix(f"@{master_handle}").strip() # 有时回推的comment前会附带被回推的handle, 这里去掉
src/preview/weibo.py
@@ -34,8 +34,8 @@ async def preview_weibo(
db_key: str = "",
post_id: str = "",
*,
- weibo_comments_provider: str = PROVIDER.WEIBO_COMMENTS,
- fallback: bool = True,
+ weibo_provider: str = PROVIDER.WEIBO,
+ weibo_comments: bool = True,
**kwargs,
):
"""Preview weibo link in the message.
@@ -46,8 +46,8 @@ async def preview_weibo(
url (str, optional): Weibo link.
db_key (str, optional): The cache key.
post_id (str, optional): Weibo post ID
- weibo_comments_provider (str, optional): The weibo comments extractor: "free" or "false".
- fallback (bool, optional): Fallback to other bots. Defaults to True.
+ weibo_provider (str, optional): The weibo provider.
+ weibo_comments (bool, optional): Fetch weibo comments. Defaults to True.
"""
if post_id.startswith("weibovideo"):
post_id = await weibo_vid_to_postid(post_id)
@@ -64,8 +64,9 @@ async def preview_weibo(
await modify_progress(text=f"❌从{DB.ENGINE}缓存中转发失败, 尝试重新解析...", **kwargs)
this_info = await parse_weibo_info(post_id, **kwargs)
if error_msg := this_info.get("error_msg"):
- if this_info.get("fallback", fallback):
+ if "bridge" in weibo_provider and not this_info.get("force_stop"):
await modify_progress(text=f"❌微博解析失败: {error_msg}\n尝试第三方Bot...", **kwargs)
+ kwargs |= {"target_mid": message.id}
await send_to_social_media_bridge(client, message, url, **kwargs)
else:
await modify_progress(text=f"❌微博解析失败: {error_msg}", force_update=True, **kwargs)
@@ -122,7 +123,7 @@ async def preview_weibo(
media.extend(quote_info["media"])
comments = []
- if true(weibo_comments_provider):
+ if true(weibo_comments):
comments = this_info.get("comments", [])
if not comments:
comments = await parse_weibo_comments(post_id)
@@ -147,7 +148,7 @@ async def parse_weibo_info(post_id: str, data: dict | None = None, **kwargs) ->
info["error_msg"] = "Weibo API empty response"
if "微博不存在" in str(resp["text"]) or "暂无查看权限" in str(resp["text"]):
info["error_msg"] = "微博不存在或暂无查看权限!"
- info["fallback"] = False
+ info["force_stop"] = True
logger.error(info["error_msg"])
return info
json_data: dict = json.loads(matched.group(1))
src/preview/xiaohongshu.py
@@ -10,7 +10,7 @@ from pyrogram.client import Client
from pyrogram.types import Message
from bridge.social import send_to_social_media_bridge
-from config import DB, PROXY, TZ
+from config import DB, PROVIDER, PROXY, TZ
from database.database import get_db
from messages.database import copy_messages_from_db, save_messages
from messages.progress import modify_progress
@@ -20,7 +20,16 @@ from networking import download_file, download_first_success_urls, download_medi
from others.emoji import emojify
-async def preview_xhs(client: Client, message: Message, url: str = "", db_key: str = "", xsec: str = "", *, fallback: bool = True, **kwargs):
+async def preview_xhs(
+ client: Client,
+ message: Message,
+ url: str = "",
+ db_key: str = "",
+ xsec: str = "",
+ *,
+ xhs_provider: str = PROVIDER.XHS,
+ **kwargs,
+):
"""Preview xiaohongshu link in the message.
Args:
@@ -29,7 +38,7 @@ async def preview_xhs(client: Client, message: Message, url: str = "", db_key: s
url (str, optional): xiaohongshu link
db_key (str, optional): The cache key.
xsec (str, optional): The xsec token.
- fallback (bool, optional): Fallback to other bots. Defaults to True.
+ xhs_provider (str, optional): The xiaohongshu provider.
"""
if kwargs.get("show_progress") and "progress" not in kwargs:
res = await send2tg(client, message, texts=f"🔗正在解析小红书链接\n{url}", **kwargs)
@@ -51,9 +60,10 @@ async def preview_xhs(client: Client, message: Message, url: str = "", db_key: s
xhs_info = await get_xhs_info(url)
note = xhs_info.get("note", {})
if not note:
- if fallback:
+ if "bridge" in xhs_provider:
await modify_progress(text="❌小红书解析失败, 尝试第三方Bot...", **kwargs)
full_url = f"https://{db_key}?xsec_token={xsec}"
+ kwargs |= {"target_mid": message.id}
await send_to_social_media_bridge(client, message, full_url, **kwargs)
else:
await modify_progress(text="❌小红书解析失败, 请稍候再尝试", force_update=True, **kwargs)
src/config.py
@@ -136,13 +136,12 @@ class DANMU:
class PROVIDER: # default API provider
- DOUYIN = os.getenv("DOUYIN_PROVIDER", "direct-free-tikhub-bridge").lower() # free or tikhub
- DOUYIN_COMMENTS = os.getenv("DOUYIN_COMMENTS_PROVIDER", "free-tikhub").lower() # free or tikhub or a false value (0, false, none, null, etc.)
- TWITTER = os.getenv("TWITTER_PROVIDER", "tikhub-vxtwitter-fxtwitter").lower()
- TWITTER_COMMENTS = os.getenv("TWITTER_COMMENTS_PROVIDER", "tikhub").lower() # tikhub or a false value (0, false, none, null, etc.)
- INSTAGRAM = os.getenv("INSTAGRAM_PROVIDER", "tikhub-ddinstagram-bridge").lower() # tikhub, ddinstagram, bridge
- INSTAGRAM_COMMENTS = os.getenv("INSTAGRAM_COMMENTS_PROVIDER", "tikhub").lower() # tikhub or a false value (0, false, none, null, etc.)
- WEIBO_COMMENTS = os.getenv("WEIBO_COMMENTS_PROVIDER", "free").lower() # free or a false value (0, false, none, null, etc.)
+ DOUYIN = os.getenv("DOUYIN_PROVIDER", "direct-free-tikhub-bridge").lower()
+ DOUYIN_COMMENTS = os.getenv("DOUYIN_COMMENTS_PROVIDER", "free-tikhub").lower() # a false value (0, false, none, null) to disable it
+ TWITTER = os.getenv("TWITTER_PROVIDER", "tikhub-vxtwitter-fxtwitter-bridge").lower()
+ INSTAGRAM = os.getenv("INSTAGRAM_PROVIDER", "tikhub-ddinstagram-bridge").lower()
+ WEIBO = os.getenv("WEIBO_PROVIDER", "direct-bridge").lower()
+ XHS = os.getenv("XHS_PROVIDER", "direct-bridge").lower()
class TOKEN: