vibego 0.2.36__py3-none-any.whl → 0.2.38__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of vibego might be problematic. Click here for more details.
- bot.py +108 -17
- {vibego-0.2.36.dist-info → vibego-0.2.38.dist-info}/METADATA +1 -1
- {vibego-0.2.36.dist-info → vibego-0.2.38.dist-info}/RECORD +7 -7
- vibego_cli/__init__.py +1 -1
- {vibego-0.2.36.dist-info → vibego-0.2.38.dist-info}/WHEEL +0 -0
- {vibego-0.2.36.dist-info → vibego-0.2.38.dist-info}/entry_points.txt +0 -0
- {vibego-0.2.36.dist-info → vibego-0.2.38.dist-info}/top_level.txt +0 -0
bot.py
CHANGED
|
@@ -482,7 +482,6 @@ _ESCAPED_CODE_BLOCK_PATTERN = re.compile(
|
|
|
482
482
|
re.DOTALL
|
|
483
483
|
)
|
|
484
484
|
|
|
485
|
-
|
|
486
485
|
def _is_already_escaped(text: str) -> bool:
|
|
487
486
|
"""检测文本是否已经包含 MarkdownV2 转义字符。
|
|
488
487
|
|
|
@@ -583,6 +582,25 @@ def _prepare_model_payload(text: str) -> str:
|
|
|
583
582
|
return text
|
|
584
583
|
|
|
585
584
|
|
|
585
|
+
def _optimize_markdown_v2_payload(payload: str) -> str:
|
|
586
|
+
"""占位函数:保留严格转义版本,确保 MarkdownV2 合规。"""
|
|
587
|
+
|
|
588
|
+
return payload
|
|
589
|
+
|
|
590
|
+
|
|
591
|
+
def _prepare_model_payload_variants(text: str) -> tuple[str, Optional[str]]:
|
|
592
|
+
"""返回首选与备用的 MarkdownV2 内容,首选尽量减少转义。"""
|
|
593
|
+
|
|
594
|
+
strict_payload = _prepare_model_payload(text)
|
|
595
|
+
if not _IS_MARKDOWN_V2:
|
|
596
|
+
return strict_payload, None
|
|
597
|
+
|
|
598
|
+
optimized_payload = _optimize_markdown_v2_payload(strict_payload)
|
|
599
|
+
if optimized_payload != strict_payload:
|
|
600
|
+
return optimized_payload, strict_payload
|
|
601
|
+
return strict_payload, None
|
|
602
|
+
|
|
603
|
+
|
|
586
604
|
def _extract_bad_request_message(exc: TelegramBadRequest) -> str:
|
|
587
605
|
message = getattr(exc, "message", None)
|
|
588
606
|
if not message:
|
|
@@ -636,6 +654,7 @@ async def _send_with_markdown_guard(
|
|
|
636
654
|
sender: Callable[[str], Awaitable[None]],
|
|
637
655
|
*,
|
|
638
656
|
raw_sender: Optional[Callable[[str], Awaitable[None]]] = None,
|
|
657
|
+
fallback_payload: Optional[str] = None,
|
|
639
658
|
) -> str:
|
|
640
659
|
try:
|
|
641
660
|
await sender(text)
|
|
@@ -644,6 +663,19 @@ async def _send_with_markdown_guard(
|
|
|
644
663
|
if not _is_markdown_parse_error(exc):
|
|
645
664
|
raise
|
|
646
665
|
|
|
666
|
+
if fallback_payload and fallback_payload != text:
|
|
667
|
+
try:
|
|
668
|
+
await sender(fallback_payload)
|
|
669
|
+
worker_log.debug(
|
|
670
|
+
"Markdown 优化回退为严格转义版本",
|
|
671
|
+
extra={"length": len(fallback_payload)},
|
|
672
|
+
)
|
|
673
|
+
return fallback_payload
|
|
674
|
+
except TelegramBadRequest as fallback_exc:
|
|
675
|
+
if not _is_markdown_parse_error(fallback_exc):
|
|
676
|
+
raise
|
|
677
|
+
exc = fallback_exc
|
|
678
|
+
|
|
647
679
|
sanitized: Optional[str]
|
|
648
680
|
if _IS_MARKDOWN_V2:
|
|
649
681
|
sanitized = _escape_markdown_v2(text)
|
|
@@ -740,7 +772,11 @@ async def reply_large_text(
|
|
|
740
772
|
"""
|
|
741
773
|
bot = current_bot()
|
|
742
774
|
parse_mode_value = parse_mode if parse_mode is not None else _parse_mode_value()
|
|
743
|
-
|
|
775
|
+
if preformatted:
|
|
776
|
+
prepared = text
|
|
777
|
+
fallback_payload = None
|
|
778
|
+
else:
|
|
779
|
+
prepared, fallback_payload = _prepare_model_payload_variants(text)
|
|
744
780
|
|
|
745
781
|
async def _send_formatted_message(payload: str) -> None:
|
|
746
782
|
await bot.send_message(
|
|
@@ -757,6 +793,7 @@ async def reply_large_text(
|
|
|
757
793
|
prepared,
|
|
758
794
|
_send_formatted_message,
|
|
759
795
|
raw_sender=_send_raw_message,
|
|
796
|
+
fallback_payload=fallback_payload,
|
|
760
797
|
)
|
|
761
798
|
|
|
762
799
|
worker_log.info(
|
|
@@ -775,10 +812,12 @@ async def reply_large_text(
|
|
|
775
812
|
f"内容较长,已生成附件 `{attachment_name}`,请下载查看全文。"
|
|
776
813
|
)
|
|
777
814
|
|
|
815
|
+
summary_prepared, summary_fallback = _prepare_model_payload_variants(summary_text)
|
|
778
816
|
delivered_summary = await _send_with_markdown_guard(
|
|
779
|
-
|
|
817
|
+
summary_prepared,
|
|
780
818
|
_send_formatted_message,
|
|
781
819
|
raw_sender=_send_raw_message,
|
|
820
|
+
fallback_payload=summary_fallback,
|
|
782
821
|
)
|
|
783
822
|
|
|
784
823
|
document = BufferedInputFile(text.encode("utf-8"), filename=attachment_name)
|
|
@@ -1492,7 +1531,7 @@ async def _broadcast_worker_keyboard(bot: Bot) -> None:
|
|
|
1492
1531
|
continue
|
|
1493
1532
|
|
|
1494
1533
|
parse_mode = _parse_mode_value()
|
|
1495
|
-
prepared =
|
|
1534
|
+
prepared, fallback_payload = _prepare_model_payload_variants(text)
|
|
1496
1535
|
|
|
1497
1536
|
async def _send_formatted(payload: str) -> None:
|
|
1498
1537
|
await bot.send_message(
|
|
@@ -1515,6 +1554,7 @@ async def _broadcast_worker_keyboard(bot: Bot) -> None:
|
|
|
1515
1554
|
prepared,
|
|
1516
1555
|
_send_formatted,
|
|
1517
1556
|
raw_sender=_send_raw,
|
|
1557
|
+
fallback_payload=fallback_payload,
|
|
1518
1558
|
)
|
|
1519
1559
|
except TelegramForbiddenError as exc:
|
|
1520
1560
|
worker_log.warning("推送任务列表被拒绝:%s", exc, extra={**_session_extra(), "chat": chat_id})
|
|
@@ -2598,7 +2638,7 @@ def _build_status_buttons(task_id: str, current_status: str) -> list[list[Inline
|
|
|
2598
2638
|
for status in STATUS_DISPLAY_ORDER:
|
|
2599
2639
|
text = _format_status(status)
|
|
2600
2640
|
if status == current_status:
|
|
2601
|
-
text = f"
|
|
2641
|
+
text = f"{text} (当前)"
|
|
2602
2642
|
row.append(
|
|
2603
2643
|
InlineKeyboardButton(
|
|
2604
2644
|
text=text,
|
|
@@ -2772,13 +2812,32 @@ async def _answer_with_markdown(
|
|
|
2772
2812
|
*,
|
|
2773
2813
|
reply_markup: InlineKeyboardMarkup | ReplyKeyboardMarkup | None = None,
|
|
2774
2814
|
) -> Optional[Message]:
|
|
2775
|
-
prepared =
|
|
2776
|
-
|
|
2777
|
-
|
|
2778
|
-
|
|
2815
|
+
prepared, fallback_payload = _prepare_model_payload_variants(text)
|
|
2816
|
+
sent_message: Optional[Message] = None
|
|
2817
|
+
|
|
2818
|
+
async def _send(payload: str) -> None:
|
|
2819
|
+
nonlocal sent_message
|
|
2820
|
+
sent_message = await message.answer(
|
|
2821
|
+
payload,
|
|
2779
2822
|
parse_mode=_parse_mode_value(),
|
|
2780
2823
|
reply_markup=reply_markup,
|
|
2781
2824
|
)
|
|
2825
|
+
|
|
2826
|
+
async def _send_raw(payload: str) -> None:
|
|
2827
|
+
nonlocal sent_message
|
|
2828
|
+
sent_message = await message.answer(
|
|
2829
|
+
payload,
|
|
2830
|
+
parse_mode=None,
|
|
2831
|
+
reply_markup=reply_markup,
|
|
2832
|
+
)
|
|
2833
|
+
|
|
2834
|
+
try:
|
|
2835
|
+
await _send_with_markdown_guard(
|
|
2836
|
+
prepared,
|
|
2837
|
+
_send,
|
|
2838
|
+
raw_sender=_send_raw,
|
|
2839
|
+
fallback_payload=fallback_payload,
|
|
2840
|
+
)
|
|
2782
2841
|
except TelegramBadRequest as exc:
|
|
2783
2842
|
worker_log.warning(
|
|
2784
2843
|
"发送消息失败:%s",
|
|
@@ -2786,7 +2845,7 @@ async def _answer_with_markdown(
|
|
|
2786
2845
|
extra={"chat": getattr(message.chat, "id", None)},
|
|
2787
2846
|
)
|
|
2788
2847
|
return None
|
|
2789
|
-
return
|
|
2848
|
+
return sent_message
|
|
2790
2849
|
|
|
2791
2850
|
|
|
2792
2851
|
async def _edit_message_with_markdown(
|
|
@@ -2795,11 +2854,27 @@ async def _edit_message_with_markdown(
|
|
|
2795
2854
|
*,
|
|
2796
2855
|
reply_markup: InlineKeyboardMarkup | None = None,
|
|
2797
2856
|
) -> None:
|
|
2798
|
-
prepared =
|
|
2799
|
-
|
|
2857
|
+
prepared, fallback_payload = _prepare_model_payload_variants(text)
|
|
2858
|
+
|
|
2859
|
+
async def _send(payload: str) -> None:
|
|
2860
|
+
await callback.message.edit_text(
|
|
2861
|
+
payload,
|
|
2862
|
+
parse_mode=_parse_mode_value(),
|
|
2863
|
+
reply_markup=reply_markup,
|
|
2864
|
+
)
|
|
2865
|
+
|
|
2866
|
+
async def _send_raw(payload: str) -> None:
|
|
2867
|
+
await callback.message.edit_text(
|
|
2868
|
+
payload,
|
|
2869
|
+
parse_mode=None,
|
|
2870
|
+
reply_markup=reply_markup,
|
|
2871
|
+
)
|
|
2872
|
+
|
|
2873
|
+
await _send_with_markdown_guard(
|
|
2800
2874
|
prepared,
|
|
2801
|
-
|
|
2802
|
-
|
|
2875
|
+
_send,
|
|
2876
|
+
raw_sender=_send_raw,
|
|
2877
|
+
fallback_payload=fallback_payload,
|
|
2803
2878
|
)
|
|
2804
2879
|
|
|
2805
2880
|
|
|
@@ -2811,13 +2886,29 @@ async def _try_edit_message(
|
|
|
2811
2886
|
) -> bool:
|
|
2812
2887
|
if message is None:
|
|
2813
2888
|
return False
|
|
2814
|
-
prepared =
|
|
2815
|
-
|
|
2889
|
+
prepared, fallback_payload = _prepare_model_payload_variants(text)
|
|
2890
|
+
|
|
2891
|
+
async def _send(payload: str) -> None:
|
|
2816
2892
|
await message.edit_text(
|
|
2817
|
-
|
|
2893
|
+
payload,
|
|
2818
2894
|
parse_mode=_parse_mode_value(),
|
|
2819
2895
|
reply_markup=reply_markup,
|
|
2820
2896
|
)
|
|
2897
|
+
|
|
2898
|
+
async def _send_raw(payload: str) -> None:
|
|
2899
|
+
await message.edit_text(
|
|
2900
|
+
payload,
|
|
2901
|
+
parse_mode=None,
|
|
2902
|
+
reply_markup=reply_markup,
|
|
2903
|
+
)
|
|
2904
|
+
|
|
2905
|
+
try:
|
|
2906
|
+
await _send_with_markdown_guard(
|
|
2907
|
+
prepared,
|
|
2908
|
+
_send,
|
|
2909
|
+
raw_sender=_send_raw,
|
|
2910
|
+
fallback_payload=fallback_payload,
|
|
2911
|
+
)
|
|
2821
2912
|
return True
|
|
2822
2913
|
except TelegramBadRequest as exc:
|
|
2823
2914
|
worker_log.info(
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
bot.py,sha256=
|
|
1
|
+
bot.py,sha256=YDLAFxvh0YfCDScoADirJlzlGlc_-8BdnOIzLNVPrRc,273403
|
|
2
2
|
logging_setup.py,sha256=gvxHi8mUwK3IhXJrsGNTDo-DR6ngkyav1X-tvlBF_IE,4613
|
|
3
3
|
master.py,sha256=ZW4A3Gh0MUKFnfZX-VJ7OCNnBzlEcOWkPKYH92OfyKA,112967
|
|
4
4
|
project_repository.py,sha256=UcthtSGOJK0cTE5bQCneo3xkomRG-kyc1N1QVqxeHIs,17577
|
|
@@ -427,14 +427,14 @@ tasks/fsm.py,sha256=rKXXLEieQQU4r2z_CZUvn1_70FXiZXBBugF40gpe_tQ,1476
|
|
|
427
427
|
tasks/models.py,sha256=N_qqRBo9xMSV0vbn4k6bLBXT8C_dp_oTFUxvdx16ZQM,2459
|
|
428
428
|
tasks/service.py,sha256=w_S_aWiVqRXzXEpimLDsuCCCX2lB5uDkff9aKThBw9c,41916
|
|
429
429
|
telegram_markdown/__init__.py,sha256=bG3H9fWn5GfTqC6xvd49xbVdYWfSFeaX2nefweOYcWY,9757
|
|
430
|
-
vibego_cli/__init__.py,sha256=
|
|
430
|
+
vibego_cli/__init__.py,sha256=TIfBvbASwv0PjEHa0uOiVJkU2YO8pvPm9O9aRMy5kDE,311
|
|
431
431
|
vibego_cli/__main__.py,sha256=qqTrYmRRLe4361fMzbI3-CqpZ7AhTofIHmfp4ykrrBY,158
|
|
432
432
|
vibego_cli/config.py,sha256=VxkPJMq01tA3h3cOkH-z_tiP7pMgfSGGicRvUnCWkhI,3054
|
|
433
433
|
vibego_cli/deps.py,sha256=1nRXI7Dd-S1hYE8DligzK5fIluQWETRUj4_OKL0DikQ,1419
|
|
434
434
|
vibego_cli/main.py,sha256=X__NXwZnIDIFbdKSTbNyZgZHKcPlN0DQz9sqTI1aQ9E,12158
|
|
435
435
|
vibego_cli/data/worker_requirements.txt,sha256=QSt30DSSSHtfucTFPpc7twk9kLS5rVLNTcvDiagxrZg,62
|
|
436
|
-
vibego-0.2.
|
|
437
|
-
vibego-0.2.
|
|
438
|
-
vibego-0.2.
|
|
439
|
-
vibego-0.2.
|
|
440
|
-
vibego-0.2.
|
|
436
|
+
vibego-0.2.38.dist-info/METADATA,sha256=IPvXXUHPNJdwkvrsJi4Tuau4VmgFCxMWShPYspWpWVE,10519
|
|
437
|
+
vibego-0.2.38.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
438
|
+
vibego-0.2.38.dist-info/entry_points.txt,sha256=Lsy_zm-dlyxt8-9DL9blBReIwU2k22c8-kifr46ND1M,48
|
|
439
|
+
vibego-0.2.38.dist-info/top_level.txt,sha256=rWDj9KERtbJL6Lar9Xa0O6dthaFSY_jc1WNpQgUrXCM,87
|
|
440
|
+
vibego-0.2.38.dist-info/RECORD,,
|
vibego_cli/__init__.py
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|