telepost-bot 2.83.1__tar.gz → 2.83.2__tar.gz

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.
Files changed (296) hide show
  1. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/CHANGELOG.md +7 -0
  2. {telepost_bot-2.83.1/telepost_bot.egg-info → telepost_bot-2.83.2}/PKG-INFO +53 -47
  3. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/README.en.md +71 -63
  4. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/README.md +52 -46
  5. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost/build_info.py +1 -1
  6. {telepost_bot-2.83.1 → telepost_bot-2.83.2/telepost_bot.egg-info}/PKG-INFO +53 -47
  7. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_integration.py +15 -11
  8. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/LICENSE +0 -0
  9. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/MANIFEST.in +0 -0
  10. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/config/__init__.py +0 -0
  11. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/config/fly-telepost-policy.example.json +0 -0
  12. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/config/review_policy.md +0 -0
  13. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/config/settings.py +0 -0
  14. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/config.ini.example +0 -0
  15. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/database/__init__.py +0 -0
  16. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/database/db_manager.py +0 -0
  17. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/handlers/__init__.py +0 -0
  18. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/handlers/api_commands.py +0 -0
  19. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/handlers/automation.py +0 -0
  20. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/handlers/botconfig.py +0 -0
  21. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/handlers/callback_handlers.py +0 -0
  22. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/handlers/channel_listener.py +0 -0
  23. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/handlers/command_handlers.py +0 -0
  24. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/handlers/conversation.py +0 -0
  25. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/handlers/error_handler.py +0 -0
  26. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/handlers/index_handlers.py +0 -0
  27. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/handlers/mode_selection.py +0 -0
  28. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/handlers/moderation.py +0 -0
  29. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/handlers/preview_handlers.py +0 -0
  30. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/handlers/publish.py +0 -0
  31. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/handlers/reaction_stats.py +0 -0
  32. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/handlers/recovery.py +0 -0
  33. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/handlers/review.py +0 -0
  34. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/handlers/schedule_status.py +0 -0
  35. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/handlers/search_handlers.py +0 -0
  36. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/handlers/stats_handlers.py +0 -0
  37. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/handlers/upload.py +0 -0
  38. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/main.py +0 -0
  39. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/mcp_server/__init__.py +0 -0
  40. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/mcp_server/review_client.py +0 -0
  41. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/mcp_server/server.py +0 -0
  42. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/models/__init__.py +0 -0
  43. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/models/state.py +0 -0
  44. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/protocol/__init__.py +0 -0
  45. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/protocol/v1/SOURCES.sha256 +0 -0
  46. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/protocol/v1/__init__.py +0 -0
  47. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/protocol/v1/error-mapping.json +0 -0
  48. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/protocol/v1/fixtures/ackresult.candidate_search.json +0 -0
  49. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/protocol/v1/fixtures/capabilities.pixivflow.json +0 -0
  50. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/protocol/v1/fixtures/event.job.expired.json +0 -0
  51. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/protocol/v1/fixtures/event.job.succeeded.json +0 -0
  52. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/protocol/v1/fixtures/eventpage.candidate_search.json +0 -0
  53. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/protocol/v1/fixtures/job.cancelled.candidate_search.json +0 -0
  54. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/protocol/v1/fixtures/job.failed.no_candidate.json +0 -0
  55. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/protocol/v1/fixtures/job.queued.json +0 -0
  56. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/protocol/v1/fixtures/job.running.json +0 -0
  57. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/protocol/v1/fixtures/job.succeeded.candidate_search.json +0 -0
  58. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/protocol/v1/fixtures/jobpage.candidate_search.json +0 -0
  59. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/protocol/v1/fixtures/task.candidate_search.json +0 -0
  60. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/protocol/v1/fixtures/task.candidate_search.target_only.json +0 -0
  61. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/protocol/v1/protocol.schema.json +0 -0
  62. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/pyproject.toml +0 -0
  63. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/run.py +0 -0
  64. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/services/__init__.py +0 -0
  65. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/services/review_service.py +0 -0
  66. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/setup.cfg +0 -0
  67. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost/__init__.py +0 -0
  68. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost/api/__init__.py +0 -0
  69. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost/application/__init__.py +0 -0
  70. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost/application/admin_ops.py +0 -0
  71. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost/application/automation.py +0 -0
  72. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost/application/delivery_planner.py +0 -0
  73. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost/application/editorial.py +0 -0
  74. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost/application/hot.py +0 -0
  75. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost/application/novel_fallback_card.py +0 -0
  76. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost/application/novel_preview.py +0 -0
  77. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost/application/pixivflow_jobs.py +0 -0
  78. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost/application/post_media.py +0 -0
  79. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost/application/posts.py +0 -0
  80. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost/application/publication.py +0 -0
  81. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost/application/reaction_backfill.py +0 -0
  82. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost/application/recovery.py +0 -0
  83. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost/application/refetch.py +0 -0
  84. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost/application/rerender.py +0 -0
  85. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost/application/resubmit.py +0 -0
  86. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost/application/review_queue.py +0 -0
  87. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost/application/submitter_notify.py +0 -0
  88. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost/application/telepress_provider.py +0 -0
  89. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost/domain/__init__.py +0 -0
  90. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost/domain/automation.py +0 -0
  91. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost/domain/delivery.py +0 -0
  92. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost/domain/editorial.py +0 -0
  93. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost/domain/errors.py +0 -0
  94. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost/domain/hot.py +0 -0
  95. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost/domain/media.py +0 -0
  96. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost/domain/navigation.py +0 -0
  97. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost/domain/novel_preview.py +0 -0
  98. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost/domain/packing.py +0 -0
  99. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost/domain/presentation.py +0 -0
  100. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost/domain/presentation_policy.py +0 -0
  101. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost/domain/refetch_state.py +0 -0
  102. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost/domain/review.py +0 -0
  103. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost/domain/review_chat.py +0 -0
  104. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost/domain/submission.py +0 -0
  105. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost/miniapp/__init__.py +0 -0
  106. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost/miniapp/auth.py +0 -0
  107. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost/miniapp/rbac.py +0 -0
  108. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost/miniapp/role_bindings.py +0 -0
  109. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost/miniapp/session.py +0 -0
  110. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost/observability/__init__.py +0 -0
  111. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost/observability/audit.py +0 -0
  112. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost/observability/cli.py +0 -0
  113. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost/observability/doctor.py +0 -0
  114. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost/observability/errors.py +0 -0
  115. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost/observability/redact.py +0 -0
  116. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost/storage/__init__.py +0 -0
  117. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost/storage/sqlite/__init__.py +0 -0
  118. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost/storage/sqlite/automation.py +0 -0
  119. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost/storage/sqlite/columns.py +0 -0
  120. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost/storage/sqlite/editorial.py +0 -0
  121. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost/storage/sqlite/ledger.py +0 -0
  122. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost/storage/sqlite/media_assets.py +0 -0
  123. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost/storage/sqlite/moderation.py +0 -0
  124. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost/storage/sqlite/novel_preview.py +0 -0
  125. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost/storage/sqlite/posts.py +0 -0
  126. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost/storage/sqlite/protocol_events.py +0 -0
  127. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost/storage/sqlite/recovery.py +0 -0
  128. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost/storage/sqlite/refetch.py +0 -0
  129. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost/storage/sqlite/reviews.py +0 -0
  130. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost/storage/sqlite/submitter_notifications.py +0 -0
  131. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost/telegram/__init__.py +0 -0
  132. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost/telegram/capture.py +0 -0
  133. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost/telegram/delivery/__init__.py +0 -0
  134. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost/telegram/delivery/discussion.py +0 -0
  135. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost/telegram/delivery/executor.py +0 -0
  136. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost/telegram/delivery/gateway.py +0 -0
  137. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost/telegram/delivery/legacy_runner.py +0 -0
  138. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost/telegram/delivery/planner.py +0 -0
  139. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost/telegram/delivery/preparation.py +0 -0
  140. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost/telegram/delivery/registry.py +0 -0
  141. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost/telegram/delivery/sender.py +0 -0
  142. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost/telegram/review_keyboard.py +0 -0
  143. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost/telegram/review_stager.py +0 -0
  144. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost_bot.egg-info/SOURCES.txt +0 -0
  145. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost_bot.egg-info/dependency_links.txt +0 -0
  146. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost_bot.egg-info/entry_points.txt +0 -0
  147. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost_bot.egg-info/requires.txt +0 -0
  148. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/telepost_bot.egg-info/top_level.txt +0 -0
  149. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_admin_api.py +0 -0
  150. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_anonymous.py +0 -0
  151. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_api_commands.py +0 -0
  152. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_api_server.py +0 -0
  153. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_api_version.py +0 -0
  154. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_architecture_application.py +0 -0
  155. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_architecture_core.py +0 -0
  156. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_automation.py +0 -0
  157. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_backfill_attribution.py +0 -0
  158. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_blacklist.py +0 -0
  159. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_bot_language.py +0 -0
  160. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_bot_token_logging.py +0 -0
  161. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_botconfig.py +0 -0
  162. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_boundary.py +0 -0
  163. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_callback_contract.py +0 -0
  164. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_caption_mentions.py +0 -0
  165. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_compatibility.py +0 -0
  166. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_config_encoding.py +0 -0
  167. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_console_encoding.py +0 -0
  168. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_conversation_flow.py +0 -0
  169. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_data_class_cleanup.py +0 -0
  170. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_database.py +0 -0
  171. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_database_first_start.py +0 -0
  172. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_database_operations.py +0 -0
  173. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_delivery_planner.py +0 -0
  174. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_disposition.py +0 -0
  175. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_doctor.py +0 -0
  176. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_editorial.py +0 -0
  177. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_file_validator.py +0 -0
  178. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_fly_deploy_contract.py +0 -0
  179. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_frozen_support.py +0 -0
  180. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_handlers.py +0 -0
  181. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_heat_calculator.py +0 -0
  182. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_helper_functions.py +0 -0
  183. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_hot_domain.py +0 -0
  184. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_identity_provenance.py +0 -0
  185. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_install_scripts.py +0 -0
  186. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_legacy_delivery_port_navigation.py +0 -0
  187. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_logic_flow.py +0 -0
  188. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_logical_submissions.py +0 -0
  189. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_maintenance_jobs.py +0 -0
  190. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_manager_notifications.py +0 -0
  191. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_media_decision_audit.py +0 -0
  192. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_media_delivery_pipeline.py +0 -0
  193. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_media_domain.py +0 -0
  194. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_media_preparation.py +0 -0
  195. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_media_proxy_delivery.py +0 -0
  196. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_menu_shortcut_single_reply.py +0 -0
  197. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_messages.py +0 -0
  198. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_miniapp_api.py +0 -0
  199. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_miniapp_auth.py +0 -0
  200. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_miniapp_content.py +0 -0
  201. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_miniapp_entries.py +0 -0
  202. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_miniapp_history.py +0 -0
  203. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_miniapp_rbac.py +0 -0
  204. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_mixed_media_integrity.py +0 -0
  205. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_moderation_and_admin_ux.py +0 -0
  206. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_navigation.py +0 -0
  207. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_no_owner_probe.py +0 -0
  208. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_novel_cover_preview.py +0 -0
  209. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_novel_delivery_semantics.py +0 -0
  210. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_novel_preview.py +0 -0
  211. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_observability.py +0 -0
  212. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_observability_lifecycle.py +0 -0
  213. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_online_reading_root_button.py +0 -0
  214. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_packing_ssot.py +0 -0
  215. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_polling_server.py +0 -0
  216. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_preview_pagination.py +0 -0
  217. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_production_handler_graph.py +0 -0
  218. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_protocol_contract.py +0 -0
  219. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_publication_presentation.py +0 -0
  220. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_publish_idempotency.py +0 -0
  221. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_publish_regressions.py +0 -0
  222. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_publish_reply.py +0 -0
  223. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_reaction_backfill.py +0 -0
  224. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_reaction_stats.py +0 -0
  225. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_recovery.py +0 -0
  226. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_refetch.py +0 -0
  227. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_refetch_card_state.py +0 -0
  228. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_refetch_events.py +0 -0
  229. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_refetch_job_lifecycle.py +0 -0
  230. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_refetch_reason_normalization.py +0 -0
  231. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_refetch_replacement.py +0 -0
  232. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_remote_fetch_fallback.py +0 -0
  233. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_rerender.py +0 -0
  234. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_resubmit.py +0 -0
  235. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_review.py +0 -0
  236. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_review_album_payload.py +0 -0
  237. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_review_chat_contract.py +0 -0
  238. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_review_consistency.py +0 -0
  239. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_review_http_mcp.py +0 -0
  240. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_review_service.py +0 -0
  241. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_robustness.py +0 -0
  242. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_run_dispatcher.py +0 -0
  243. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_run_mode.py +0 -0
  244. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_run_supervisor.py +0 -0
  245. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_schedule_outcomes.py +0 -0
  246. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_search_disabled_hint.py +0 -0
  247. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_search_recovery.py +0 -0
  248. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_security.py +0 -0
  249. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_security_headers.py +0 -0
  250. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_session_database_handles.py +0 -0
  251. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_shutdown.py +0 -0
  252. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_streaming_uploads.py +0 -0
  253. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_submission_timeout_idempotency.py +0 -0
  254. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_telegram_golden_messages.py +0 -0
  255. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_telegram_media_cache.py +0 -0
  256. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_upload.py +0 -0
  257. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_user_friendly_messages.py +0 -0
  258. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_webhook_ready.py +0 -0
  259. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_webhook_router.py +0 -0
  260. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_webhook_secret.py +0 -0
  261. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_webhook_secret_logging.py +0 -0
  262. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_webhook_static.py +0 -0
  263. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/tests/test_work_id_wire.py +0 -0
  264. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/ui/__init__.py +0 -0
  265. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/ui/i18n.py +0 -0
  266. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/ui/keyboards.py +0 -0
  267. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/ui/locales/en/LC_MESSAGES/telepost.mo +0 -0
  268. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/ui/locales/en/LC_MESSAGES/telepost.po +0 -0
  269. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/ui/messages.py +0 -0
  270. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/utils/__init__.py +0 -0
  271. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/utils/api_server.py +0 -0
  272. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/utils/api_tokens.py +0 -0
  273. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/utils/blacklist.py +0 -0
  274. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/utils/cache.py +0 -0
  275. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/utils/config_wizard.py +0 -0
  276. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/utils/console.py +0 -0
  277. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/utils/database.py +0 -0
  278. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/utils/file_validator.py +0 -0
  279. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/utils/heat_calculator.py +0 -0
  280. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/utils/helper_functions.py +0 -0
  281. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/utils/index_manager.py +0 -0
  282. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/utils/logging_config.py +0 -0
  283. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/utils/maintenance_jobs.py +0 -0
  284. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/utils/polling_server.py +0 -0
  285. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/utils/run_mode.py +0 -0
  286. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/utils/runtime_policy.py +0 -0
  287. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/utils/schedule_watchdog.py +0 -0
  288. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/utils/search_engine.py +0 -0
  289. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/utils/security_headers.py +0 -0
  290. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/utils/submission.py +0 -0
  291. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/utils/webhook_server.py +0 -0
  292. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/webapp/__init__.py +0 -0
  293. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/webapp/dist/assets/2d82b92e720462f8dd3b-Bh4Fahcw.svg +0 -0
  294. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/webapp/dist/assets/index-CLfkW8eZ.css +0 -0
  295. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/webapp/dist/assets/index-CfjBQN_e.js +0 -0
  296. {telepost_bot-2.83.1 → telepost_bot-2.83.2}/webapp/dist/index.html +0 -0
@@ -8,6 +8,13 @@
8
8
  > 发布说明面向普通用户:写「对用户有什么改变」,不写内部实现细节(模块名、函数名、配置键);
9
9
  > 技术细节放进代码注释或 `docs/`。每个 Release 的正文由本文件对应版本段自动生成。
10
10
 
11
+ ## [2.83.2](https://github.com/redtidev1918/TelePost/compare/v2.83.1...v2.83.2) (2026-10-15)
12
+
13
+
14
+ ### Bug Fixes
15
+
16
+ * align concurrent SQLite test with production WAL mode ([#331](https://github.com/redtidev1918/TelePost/issues/331)) ([f0889c4](https://github.com/redtidev1918/TelePost/commit/f0889c43b1ee40d7ac3b99d7a5bd1d4cdb3cc76f))
17
+
11
18
  ## [2.83.1](https://github.com/redtidev1918/TelePost/compare/v2.83.0...v2.83.1) (2026-10-11)
12
19
 
13
20
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: telepost-bot
3
- Version: 2.83.1
3
+ Version: 2.83.2
4
4
  Summary: Telegram submission, review, and publication bot with a Mini App, HTTP API, and multi-bot supervisor.
5
5
  Author: redtidev1918
6
6
  License-Expression: MIT
@@ -50,8 +50,8 @@ Dynamic: license-file
50
50
 
51
51
  **语言 / Language:** 中文 · [English](https://github.com/redtidev1918/TelePost/blob/main/README.en.md)
52
52
 
53
- TelePost 是一个开源、自托管的 Telegram 频道投稿与审核 Bot。用户可以向频道投稿,
54
- 管理员在审核群里查看、修改并决定是否发布。
53
+ TelePost 是一个开源、自托管的 Telegram 频道投稿与审核 Bot。用户通过 Bot 私聊、Mini App
54
+ 或 HTTP API 投稿;需要审核的稿件由管理员在审核群里查看、修改并决定是否发布。
55
55
 
56
56
  [![Release](https://img.shields.io/github/v/release/redtidev1918/TelePost)](https://github.com/redtidev1918/TelePost/releases/latest) [![PyPI](https://img.shields.io/pypi/v/telepost-bot.svg)](https://pypi.org/project/telepost-bot/) [![Python](https://img.shields.io/badge/python-3.10%2B-blue.svg)](https://www.python.org/) [![License](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/redtidev1918/TelePost/blob/main/LICENSE) [![Documentation](https://img.shields.io/badge/docs-redtidev1918.github.io-6366f1)](https://redtidev1918.github.io/TelePost/)
57
57
 
@@ -69,13 +69,13 @@ Bot 私聊主菜单。用户在这里投稿、查看自己的投稿、搜索频
69
69
 
70
70
  | 功能 | 说明 |
71
71
  | --- | --- |
72
- | 便捷投稿 | 从 Bot 私聊或 Mini App 提交图片、视频、GIF、音频、文档或纯文字,提交前在预览里改标签、标题、简介和链接,可开启匿名或剧透。 |
73
- | 审核与发布 | 稿件连同预览发到私有审核群,用「✅ 发布到频道 / ❌ 拒绝 / 🔇 遮罩」决定;自动化稿件可「🔄 重抓」换候选,替换后仍需人工审核。 |
74
- | Mini App | 可选网页界面:手机浏览公开内容、投稿并跟踪自己的投稿;审核员与管理员处理审核队列、编辑文案与附件顺序、管理角色和黑名单。 |
72
+ | 投稿 | 支持图片、视频、GIF、音频、文档和纯文字,提交前可预览、编辑,支持匿名与剧透。 |
73
+ | 审核与发布 | 在私有审核群查看预览、发布、拒绝或遮罩稿件;支持重抓的自动化稿件可更换候选,替换后仍需人工审核。 |
74
+ | Mini App | 可选网页界面,供用户浏览、投稿和查看进度,供审核员与管理员审核、编辑和管理。 |
75
75
  | 搜索与热榜 | `/search` 关键词检索(支持 `#标签` 和时间范围),`/tags` 标签云,`/hot`、`/hotweek` 热榜,`/myposts`、`/mystats` 个人投稿与统计。 |
76
76
  | 定时发布 | `/schedule add weekly-hot` 等命令按计划发布热榜内容。 |
77
- | 自动化投稿 | Owner 用 `/gen_token` 生成 Token 后即可用 HTTP API 投稿,`idempotency_key` 保证重试不重复审核或发布。 |
78
- | AI 辅助审核 | 可选接入 MCP,让 Codex、Claude 等 Agent 查看待审稿件并给出建议;不内置大语言模型,是否发布由人决定。 |
77
+ | 自动化投稿 | 脚本或上游服务通过 HTTP API 投稿,使用 `idempotency_key` 避免重试产生重复审核或发布。 |
78
+ | AI 辅助审核 | 可选通过 MCP 接入 Codex、Claude 等 AI Agent,查看待审稿件并提供审核建议。 |
79
79
  | 多 Bot 与自托管 | 同一台机器可并行运行多个 Bot,各自使用独立的频道、审核群、语言和数据目录。 |
80
80
 
81
81
  各入口的默认审核规则见[如何工作](#如何工作),集成与部署细节见[更多能力](#更多能力)。
@@ -86,22 +86,23 @@ Bot 私聊主菜单。用户在这里投稿、查看自己的投稿、搜索频
86
86
  用户投稿 ──▶ 预览与编辑 ──▶ 按配置审核 ──▶ 发布到频道
87
87
  ```
88
88
 
89
- 用户在 Bot 私聊或 Mini App 上传内容,先在预览里确认标签、标题、简介、链接、匿名和剧透,
89
+ 用户在 Bot 私聊或 Mini App 上传内容,先在预览里确认标签、标题、简介、链接及匿名、剧透设置,
90
90
  再提交。是否进入审核由投稿入口决定:
91
91
 
92
92
  | 投稿入口 | 默认行为 |
93
93
  | --- | --- |
94
94
  | Bot 私聊 | 确认后直接发布;`CHAT_REVIEW_REQUIRED=true` 时先审核 |
95
- | Mini App | 先提交审核,由 `MINIAPP_REVIEW_REQUIRED` 单独控制 |
95
+ | Mini App | 默认先审核;由 `MINIAPP_REVIEW_REQUIRED` 单独控制 |
96
96
  | HTTP API | 固定先提交审核,必须人工批准 |
97
97
 
98
- 自动化投稿(含 PixivFlow 等上游服务)同样要人工批准,`API_REVIEW_REQUIRED` 只保留兼容、
99
- 不能关闭 API 审核。默认配置会用到审核群,因此 `REVIEW_CHAT_ID` 必填,且不能与发布频道相同;
98
+ 通过 HTTP API 提交的自动化稿件(含 PixivFlow 等上游服务)必须人工批准。
99
+ `API_REVIEW_REQUIRED` 只保留兼容,不能关闭 API 审核。默认配置会用到审核群,
100
+ 因此 `REVIEW_CHAT_ID` 必填,且不能与发布频道相同;
100
101
  完整默认值、审核行为与保留策略见[配置参考](https://github.com/redtidev1918/TelePost/blob/main/docs/CONFIGURATION.md#审核)。
101
102
 
102
103
  ## 下载与安装
103
104
 
104
- 三条路径,按你的环境选一条。
105
+ 按运行环境选择一种安装方式,完成后继续[首次使用](#首次使用)。
105
106
 
106
107
  **独立程序(不需要 Python)** —— 从[下载页](https://github.com/redtidev1918/TelePost/blob/main/docs/download.md)
107
108
  或 [Releases](https://github.com/redtidev1918/TelePost/releases/latest) 取得对应平台的文件:
@@ -119,6 +120,8 @@ chmod +x telepost-linux-x64
119
120
  ./telepost-linux-x64 --setup
120
121
  ```
121
122
 
123
+ macOS 将上述文件名换成 `telepost-macos-arm64`。
124
+
122
125
  **pip(已有 Python 3.10+ 环境)**:
123
126
 
124
127
  ```bash
@@ -130,8 +133,8 @@ PyPI 分发包名是 `telepost-bot`,安装后的命令是 `telepost`;配置
130
133
  之后请始终从同一目录启动。建议安装系统 [libvips](https://github.com/redtidev1918/TelePost/blob/main/docs/INSTALL.md#libvips-系统依赖):
131
134
  缺少它也能正常投稿,只是超大图片的流式缩放不可用。
132
135
 
133
- **Docker(服务器或长期部署)** —— 在仓库根目录准备 `.env`(`TOKEN`、`CHANNEL_ID`、
134
- `OWNER_ID`、`REVIEW_CHAT_ID` 与固定的 `TELEPOST_VERSION`),然后启动:
136
+ **Docker(服务器或长期部署)** —— 下载或克隆仓库,在根目录准备 `.env`(`TOKEN`、
137
+ `CHANNEL_ID`、`OWNER_ID`、`REVIEW_CHAT_ID` 与固定的 `TELEPOST_VERSION`),然后启动:
135
138
 
136
139
  ```bash
137
140
  docker compose pull
@@ -139,7 +142,7 @@ docker compose up -d
139
142
  ```
140
143
 
141
144
  升级、卸载、系统依赖和全部配置项见[安装与部署](https://github.com/redtidev1918/TelePost/blob/main/docs/INSTALL.md)。
142
- 普通 Polling Bot 不需要域名或公网 HTTPS,只有 Webhook 接收模式和 Mini App 需要。
145
+ 接收模式与公网 HTTPS 的要求见[更多能力](#更多能力)。
143
146
 
144
147
  ## 首次使用
145
148
 
@@ -147,7 +150,7 @@ docker compose up -d
147
150
  2. **准备频道和审核群** —— 把 Bot 加为发布频道的管理员并授予发帖权限;再把它加入一个
148
151
  **独立**的私有审核群,确认它能在群里发送消息。频道 ID 可以用 `@频道用户名` 或
149
152
  `-100` 开头的数字 ID;Owner ID 是你自己的数字 Telegram User ID,不是群或频道 ID。
150
- 3. **补上审核群再启动** —— 配置向导只询问 Token、频道和 Owner ID。打开它生成的
153
+ 3. **补齐配置并启动** —— 独立程序与 pip 的配置向导只询问 Token、频道和 Owner ID。打开它生成的
151
154
  `config.ini`,保留已有内容,在 `[BOT]` 节补上审核群(文件保存为 UTF-8),然后启动:
152
155
 
153
156
  ```ini
@@ -156,12 +159,13 @@ docker compose up -d
156
159
  REVIEW_CHAT_ID = -1001234567890
157
160
  ```
158
161
 
159
- 把示例 ID 换成你的审核群 ID。启动命令:独立程序直接双击或 `./telepost-*`,pip 用
160
- `telepost`,Docker 用 `docker compose up -d`。
162
+ 把示例 ID 换成你的审核群 ID。Windows 独立程序可双击启动;Linux / macOS 运行对应的
163
+ `./telepost-linux-x64` 或 `./telepost-macos-arm64`;pip 用 `telepost`。
164
+ Docker 用户在前述 `.env` 中填写配置,无需运行向导或编辑 `config.ini`。
161
165
  4. **发起第一次投稿** —— 私聊 Bot 发送 `/start`,点击「📝 开始投稿」或发送 `/submit`;
162
- 上传图片、视频、GIF、音频或文件,只发文字时用 `/skip_media` 直接进入预览,完成后发送
163
- `/done_media`。在预览里填写标签、按需修改,最后点击「✅ 确认发布」(开启聊天审核后是
164
- 「✅ 提交审核」)。随时可以发送 `/cancel` 取消。
166
+ 上传图片、视频、GIF、音频或文件,完成后发送 `/done_media` 进入预览;纯文字投稿用
167
+ `/skip_media` 跳过上传。在预览里填写标签和文字内容、按需修改,最后点击「✅ 确认发布」
168
+ (开启聊天审核后是「✅ 提交审核」)。随时可以发送 `/cancel` 取消。
165
169
 
166
170
  全部命令见[命令参考](https://github.com/redtidev1918/TelePost/blob/main/docs/COMMANDS.md)。
167
171
 
@@ -170,9 +174,10 @@ docker compose up -d
170
174
  Mini App 是同一程序自带的网页界面:用户在手机上浏览公开内容、投稿并跟踪自己的投稿;
171
175
  审核员和管理员可以处理审核队列、编辑文案与附件顺序、管理角色与黑名单。
172
176
 
173
- 它不会在装好 Bot 之后自动出现。启用需要公网 HTTPS 地址、`MINIAPP_SESSION_SECRET`,
174
- 以及 Telegram 侧的入口配置;网页前端由程序自己的 HTTP 服务提供,因此运行在 Webhook 模式下
175
- 才会挂载。缺少任一项时,私聊里的入口按钮不会显示。
177
+ 启用需要公网 HTTPS 地址,并在环境变量中设置 `MINIAPP_SESSION_SECRET`。网页前端由程序
178
+ 自己的 HTTP 服务提供,目前只在 Webhook 模式下挂载。私聊入口需启用 `MINIAPP_ENABLED`
179
+ 并配置 `MINIAPP_PUBLIC_URL`(可从 `WEBHOOK_URL` 推导);缺少密钥时,入口即使显示也无法登录。
180
+ 如需通过 `?startapp=` 链接直接打开,还要在 BotFather 配置 Main Mini App。
176
181
 
177
182
  身份来自 Telegram,并在服务端用 `initData` 校验。在普通浏览器里直接打开网址不等于登录,
178
183
  也不会获得审核或管理权限。配置与部署步骤见
@@ -180,22 +185,22 @@ Mini App 是同一程序自带的网页界面:用户在手机上浏览公开
180
185
 
181
186
  ## AI 辅助审核(MCP,可选)
182
187
 
183
- TelePost 可以通过 [MCP](https://github.com/redtidev1918/TelePost/blob/main/docs/MCP_REVIEW.md)
184
- 连接 Codex、Claude 等支持 MCP 的 AI Agent:查看待审核稿件、依据频道审核规则提出建议,
188
+ MCP 是 AI Agent 调用外部工具的协议。TelePost 可通过 MCP 连接 Codex、Claude 等 AI Agent,
189
+ 让它们查看待审核稿件、依据频道审核规则提出建议,
185
190
  并在你明确授权、权限允许时执行审核操作。
186
191
 
187
- TelePost 不内置大语言模型,也不会自动审核任何内容,是否发布始终由人决定。推荐把 MCP 与
188
- 审核 API 都设为只读,只让 AI 提供建议。工具列表、Token 与接入配置见
192
+ TelePost 不内置大语言模型,也不会自行调用 AI 审核。推荐把 MCP 与审核 API 都设为只读,
193
+ 只让 AI 提供建议;启用写入权限后,应在执行具体操作前取得人工确认,但程序不强制这一步。
194
+ 工具列表、Token 与接入配置见
189
195
  [MCP 投稿审核](https://github.com/redtidev1918/TelePost/blob/main/docs/MCP_REVIEW.md)。
190
196
 
191
197
  ## 更多能力
192
198
 
193
- - **HTTP API** —— 与 Bot 共用同一套审核与发布流程;多 Bot 部署使用
194
- `/api/botN/v1/submissions`。字段与限制见 [HTTP API](https://github.com/redtidev1918/TelePost/blob/main/docs/API.md)。
195
- - **多 Bot** —— 同一台机器并行运行多个 Bot,各自使用独立的频道、审核群、语言和数据目录。
199
+ - **HTTP API** —— 供脚本或其他服务发送投稿请求,与 Bot 共用审核与发布流程,示例见下方。
196
200
  - **TXT 小说与在线阅读** —— TXT 照常作为文件发布;可选启用 TelePress 生成 Telegraph 阅读页,
197
201
  失败不影响发布。
198
- - **Webhook 与 Polling** —— 有公网 HTTPS 地址时使用 Webhook,否则使用 Polling。
202
+ - **Webhook 与 Polling** —— Polling 由 Bot 主动获取 Telegram 消息,无需域名或公网 HTTPS;
203
+ Webhook 由 Telegram 将消息推送给 Bot,需要公网 HTTPS 地址。Mini App 同样需要公网 HTTPS。
199
204
  - **文件类型过滤** —— 默认拦截可执行文件、常见脚本和压缩包,三个投稿入口都会检查。
200
205
  - **服务器部署** —— 提供 Docker 镜像与 Fly.io 配置,备份与运行状态见
201
206
  [运维手册](https://github.com/redtidev1918/TelePost/blob/main/docs/OPERATIONS.md)。
@@ -214,7 +219,7 @@ curl -X POST 'https://example.com/api/v1/submissions' \
214
219
  -F 'idempotency_key=source:123'
215
220
  ```
216
221
 
217
- 多 Bot 部署把地址换成 `/api/botN/v1/submissions`。API 投稿固定进入审核,完整字段与限制见
222
+ 多 Bot 部署把地址换成 `/api/botN/v1/submissions`。审核规则见[如何工作](#如何工作),完整字段与限制见
218
223
  [HTTP API](https://github.com/redtidev1918/TelePost/blob/main/docs/API.md)。
219
224
 
220
225
  </details>
@@ -224,8 +229,8 @@ curl -X POST 'https://example.com/api/v1/submissions' \
224
229
  <details>
225
230
  <summary>需要服务器和域名吗?</summary>
226
231
 
227
- 不需要域名或公网 HTTPS 也能用:在一台可以长期运行的电脑或服务器上以 Polling 模式运行,
228
- 配合 Bot 私聊与审核群即可。只有 Webhook 接收模式和 Mini App 需要公网 HTTPS 地址。
232
+ 需要一台可以长期运行的电脑或服务器。使用 Bot 私聊与审核群时,可选择 Polling,无需域名;
233
+ Webhook 和 Mini App 的公网要求见[更多能力](#更多能力)。
229
234
  详见[安装与部署](https://github.com/redtidev1918/TelePost/blob/main/docs/INSTALL.md)。
230
235
 
231
236
  </details>
@@ -233,17 +238,17 @@ curl -X POST 'https://example.com/api/v1/submissions' \
233
238
  <details>
234
239
  <summary>私聊投稿为什么直接发布了?</summary>
235
240
 
236
- Bot 私聊投稿默认在用户确认后直接发布(`CHAT_REVIEW_REQUIRED=false`)。把它设为 `true`,
237
- 私聊投稿就会先进入审核群。Mini App 与 HTTP API 不受这个开关影响,默认都要先审核。
238
- 详见[配置参考](https://github.com/redtidev1918/TelePost/blob/main/docs/CONFIGURATION.md#审核)。
241
+ Bot 私聊投稿默认在用户确认后直接发布。设置 `CHAT_REVIEW_REQUIRED=true` 可改为先审核,
242
+ 不影响其他入口。各入口的默认行为见[如何工作](#如何工作)。
239
243
 
240
244
  </details>
241
245
 
242
246
  <details>
243
247
  <summary>Mini App 为什么没有出现?</summary>
244
248
 
245
- Mini App 是可选组件:需要公网 HTTPS 地址、`MINIAPP_SESSION_SECRET`、Webhook 模式和
246
- Telegram 侧的入口配置,缺少任一项时入口不会显示。详见
249
+ 先检查 `MINIAPP_ENABLED` 和入口网址是否配置,再确认 Webhook 模式下网页可访问。
250
+ 入口显示却无法登录时,检查环境变量中的 `MINIAPP_SESSION_SECRET`,并从 Telegram 内打开。
251
+ 启用条件见 [Mini App](#mini-app可选),排查步骤见
247
252
  [Telegram Mini App](https://github.com/redtidev1918/TelePost/blob/main/docs/MINIAPP.md)。
248
253
 
249
254
  </details>
@@ -260,19 +265,20 @@ Telegram 侧的入口配置,缺少任一项时入口不会显示。详见
260
265
  <details>
261
266
  <summary>投稿文件保存在哪里?</summary>
262
267
 
263
- 数据都在程序目录下的 `data/`:稿件库 `submissions.db`、会话状态 `persistence.pickle`、
264
- 运行策略 `runtime-policy.json`、搜索索引 `search_index` 和 API 临时上传 `api_uploads/`;
268
+ 默认数据保存在 `data/`(pip 安装时位于启动命令的工作目录):稿件库 `submissions.db`、
269
+ 会话状态 `persistence.pickle`、运行策略 `runtime-policy.json`、搜索索引 `search_index`
270
+ 和 API 临时上传 `api_uploads/`;
265
271
  多 Bot 各自使用 `data/botN/`。媒体本身保存在 Telegram 侧,数据库只记录引用。升级或迁移时
266
- 保留整个 `data/` 即可,详见[运维手册](https://github.com/redtidev1918/TelePost/blob/main/docs/OPERATIONS.md#持久数据)。
272
+ 备份并保留整个 `data/`,备份方法见[运维手册](https://github.com/redtidev1918/TelePost/blob/main/docs/OPERATIONS.md#持久数据)。
267
273
 
268
274
  </details>
269
275
 
270
276
  <details>
271
277
  <summary>MCP 会自动替我批准内容吗?</summary>
272
278
 
273
- 不会。TelePost 不内置大语言模型,MCP 是可选组件:审核写入工具只在非只读模式下注册,并同时
274
- 受 MCP 与审核 API 权限开关的限制。人工确认是推荐流程,不是强制机制;把两层都设为只读,
275
- AI 就只能给出建议。详见
279
+ 是否能执行批准取决于权限:`TELEPOST_MCP_REVIEW_MODE=readonly` 不注册审核写入工具,
280
+ `TELEPOST_REVIEW_API_MODE=readonly` 则在服务端拒绝写入。建议两层都设为只读;
281
+ 启用写入后的人工确认要求见[AI 辅助审核](#ai-辅助审核mcp可选)。完整配置见
276
282
  [MCP 投稿审核](https://github.com/redtidev1918/TelePost/blob/main/docs/MCP_REVIEW.md)。
277
283
 
278
284
  </details>
@@ -3,8 +3,8 @@
3
3
  **Language / 语言:** [中文](https://github.com/redtidev1918/TelePost/blob/main/README.md) · English
4
4
 
5
5
  TelePost is an open-source, self-hosted submission and moderation bot for Telegram channels.
6
- Readers submit work through the bot's private chat or the Mini App; you check, edit and decide
7
- what gets published.
6
+ Readers submit work through the bot's private chat, the Mini App or the HTTP API; submissions that
7
+ need review are viewed, edited and decided by the admins in the review group.
8
8
 
9
9
  [![Release](https://img.shields.io/github/v/release/redtidev1918/TelePost)](https://github.com/redtidev1918/TelePost/releases/latest) [![PyPI](https://img.shields.io/pypi/v/telepost-bot.svg)](https://pypi.org/project/telepost-bot/) [![Python](https://img.shields.io/badge/python-3.10%2B-blue.svg)](https://www.python.org/) [![License](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/redtidev1918/TelePost/blob/main/LICENSE) [![Documentation](https://img.shields.io/badge/docs-redtidev1918.github.io-6366f1)](https://redtidev1918.github.io/TelePost/#/en/)
10
10
 
@@ -23,13 +23,13 @@ rankings and tags.
23
23
 
24
24
  | Feature | Description |
25
25
  | --- | --- |
26
- | Easy submissions | Send photos, videos, GIFs, audio, documents or plain text from the bot's private chat or the Mini App; the preview fixes tags, title, note and link, and switches on anonymous or spoiler mode. |
27
- | Review and publishing | The submission and its preview go to your private review group with **✅ Publish to channel / ❌ Reject / 🔇 Spoiler** buttons; automated submissions can **🔄 Refetch** a different candidate, which still needs a human decision. |
28
- | Mini App | Optional web interface: browse published content, submit and follow your own work on a phone; reviewers and admins handle the review queue, edit text and attachment order, and manage roles and the blacklist. |
26
+ | Submissions | Photos, videos, GIFs, audio, documents and plain text; preview and edit before submitting, with anonymous and spoiler modes. |
27
+ | Review and publishing | View previews and publish, reject or spoiler submissions in a private review group; refetch-capable automated submissions can swap candidates, and the replacement still needs human review. |
28
+ | Mini App | Optional web interface: users browse, submit and track their own work; reviewers and admins review, edit and manage. |
29
29
  | Search and rankings | `/search` by keyword (with `#tag` and time-range filters), `/tags` for the tag cloud, `/hot` and `/hotweek` for rankings, `/myposts` and `/mystats` for your own submissions and statistics. |
30
30
  | Scheduled posts | Commands such as `/schedule add weekly-hot` publish rankings on a schedule. |
31
- | Automated submissions | An owner generates a token with `/gen_token` and programs submit through the HTTP API; an `idempotency_key` makes retries safe. |
32
- | AI-assisted review | An optional MCP sidecar lets agents such as Codex or Claude read pending submissions and suggest decisions; no language model is bundled and a human always decides. |
31
+ | Automated submissions | Scripts or upstream services submit through the HTTP API; an `idempotency_key` keeps retries from duplicating reviews or publications. |
32
+ | AI-assisted review | Optionally connect AI agents such as Codex or Claude through MCP to read pending submissions and offer review suggestions. |
33
33
  | Multiple bots, self-hosted | Run several bots on one machine, each with its own channel, review group, language and data directory. |
34
34
 
35
35
  Default review rules per entry point: [How it works](#how-it-works). Integrations and deployment:
@@ -42,24 +42,25 @@ Reader submits ──▶ Preview and edit ──▶ Review (per entry point) ─
42
42
  ```
43
43
 
44
44
  A reader uploads content in the bot's private chat or the Mini App, then confirms tags, title, note,
45
- link, anonymous and spoiler in the preview. Whether it goes through review depends on the entry
46
- point:
45
+ link and the anonymous and spoiler settings in the preview before submitting. Whether it goes
46
+ through review depends on the entry point:
47
47
 
48
48
  | Entry point | Default |
49
49
  | --- | --- |
50
50
  | Bot private chat | Published after the reader confirms; `CHAT_REVIEW_REQUIRED=true` requires review |
51
- | Mini App | Submitted for review, controlled by `MINIAPP_REVIEW_REQUIRED` |
51
+ | Mini App | Review by default; controlled separately by `MINIAPP_REVIEW_REQUIRED` |
52
52
  | HTTP API | Always submitted for review; a human must approve |
53
53
 
54
- Automated submissions (including PixivFlow and other upstream services) also need human approval:
55
- `API_REVIEW_REQUIRED` is kept for compatibility and cannot turn review off for the API. The default
56
- setup uses a review group, so `REVIEW_CHAT_ID` is required and must not be the same as the channel.
54
+ Automated submissions sent through the HTTP API (including PixivFlow and other upstream services)
55
+ must be approved by a human. `API_REVIEW_REQUIRED` is kept for compatibility and cannot turn review
56
+ off for the API. The default setup uses a review group, so `REVIEW_CHAT_ID` is required and must
57
+ not be the same as the channel.
57
58
  Full defaults, moderation behaviour and retention are in
58
59
  [Configuration](https://github.com/redtidev1918/TelePost/blob/main/docs/en/CONFIGURATION.md#review).
59
60
 
60
61
  ## Download and install
61
62
 
62
- Pick the path that matches your setup.
63
+ Pick the option that matches your environment, then continue with [First run](#first-run).
63
64
 
64
65
  **Standalone program (no Python)** — Take the file for your platform from the
65
66
  [download page](https://github.com/redtidev1918/TelePost/blob/main/docs/en/download.md) or
@@ -91,8 +92,9 @@ stay in the current working directory, so always start from the same one. Instal
91
92
  is recommended: without it everything still works, but streaming downscale of very large images is
92
93
  unavailable.
93
94
 
94
- **Docker (servers or long-running deployments)** — Create a `.env` in the repository root
95
- (`TOKEN`, `CHANNEL_ID`, `OWNER_ID`, `REVIEW_CHAT_ID` and a pinned `TELEPOST_VERSION`), then start:
95
+ **Docker (servers or long-running deployments)** — Download or clone the repository, create a
96
+ `.env` in its root (`TOKEN`, `CHANNEL_ID`, `OWNER_ID`, `REVIEW_CHAT_ID` and a pinned
97
+ `TELEPOST_VERSION`), then start:
96
98
 
97
99
  ```bash
98
100
  docker compose pull
@@ -100,7 +102,7 @@ docker compose up -d
100
102
  ```
101
103
 
102
104
  Upgrades, removal, system dependencies and every setting: [Install and deploy](https://github.com/redtidev1918/TelePost/blob/main/docs/en/INSTALL.md).
103
- A plain Polling bot needs no domain or public HTTPS; only Webhook mode and the Mini App do.
105
+ Receiving modes and their public HTTPS requirements: [More capabilities](#more-capabilities).
104
106
 
105
107
  ## First run
106
108
 
@@ -110,9 +112,10 @@ A plain Polling bot needs no domain or public HTTPS; only Webhook mode and the M
110
112
  check that it can send messages there. The channel ID is either `@username` or a numeric ID
111
113
  starting with `-100`; the owner ID is your own numeric Telegram user ID, not a group or channel
112
114
  ID.
113
- 3. **Add the review group and start** — The setup wizard asks only for the token, the channel and
114
- the owner ID. Open the generated `config.ini`, keep what is there, add the review group under
115
- `[BOT]` (save the file as UTF-8), then start:
115
+ 3. **Complete the configuration and start** — The setup wizards of the standalone program and the
116
+ pip package ask only for the token, the channel and the owner ID. Open the generated
117
+ `config.ini`, keep what is there, add the review group under `[BOT]` (save the file as UTF-8),
118
+ then start:
116
119
 
117
120
  ```ini
118
121
  [BOT]
@@ -120,13 +123,14 @@ A plain Polling bot needs no domain or public HTTPS; only Webhook mode and the M
120
123
  REVIEW_CHAT_ID = -1001234567890
121
124
  ```
122
125
 
123
- Replace the example ID with your review group ID. Start commands: run the standalone binary,
124
- `telepost` for pip, or `docker compose up -d` for Docker.
126
+ Replace the example ID with your review group ID. Start commands: double-click the Windows
127
+ standalone program, or run `./telepost-linux-x64` / `./telepost-macos-arm64` on Linux / macOS;
128
+ `telepost` for pip. Docker users configure the `.env` above — no wizard, no `config.ini`.
125
129
  4. **Make a first submission** — Send `/start` to the bot, tap **📝 New submission** or send
126
- `/submit`, then upload photos, videos, GIFs, audio or files. For text only, send `/skip_media`
127
- to go straight to the preview and `/done_media` when you are done. Add tags, adjust what you
128
- need, and tap **✅ Publish** (the button reads **✅ Submit for review** when chat review is on).
129
- Send `/cancel` at any point to cancel.
130
+ `/submit`, then upload photos, videos, GIFs, audio or files and send `/done_media` when done to
131
+ reach the preview; for a text-only submission, `/skip_media` skips the upload. Fill in tags and
132
+ text, adjust what you need, and tap **✅ Publish** (the button reads **✅ Submit for review**
133
+ when chat review is on). Send `/cancel` at any point to cancel.
130
134
 
131
135
  All commands: [Command reference](https://github.com/redtidev1918/TelePost/blob/main/docs/en/COMMANDS.md).
132
136
 
@@ -136,10 +140,11 @@ The Mini App is a web interface that ships with the same program: readers browse
136
140
  submit and follow their own work on a phone; reviewers and admins handle the review queue, edit text
137
141
  and attachment order, and manage roles and the blacklist.
138
142
 
139
- It does not appear just because the bot is running. It needs a public HTTPS address, a
140
- `MINIAPP_SESSION_SECRET` and a Telegram-side entry; the frontend is served by the program's own HTTP
141
- service, so it is only mounted in Webhook mode. If any of that is missing, the entry button simply
142
- does not show up.
143
+ Enabling it requires a public HTTPS address and `MINIAPP_SESSION_SECRET` set in the environment.
144
+ The web frontend is served by the program's own HTTP service and is currently mounted only in
145
+ Webhook mode. The private-chat entry needs `MINIAPP_ENABLED` on and `MINIAPP_PUBLIC_URL` configured
146
+ (it can be derived from `WEBHOOK_URL`); without the secret, the entry shows but login fails. To
147
+ open it through `?startapp=` links, also configure a Main Mini App in BotFather.
143
148
 
144
149
  Identity comes from Telegram and is verified server-side from `initData`. Opening the URL in a
145
150
  normal browser is not a login, and it grants no review or admin rights. Setup steps:
@@ -147,25 +152,26 @@ normal browser is not a login, and it grants no review or admin rights. Setup st
147
152
 
148
153
  ## AI-assisted review (MCP, optional)
149
154
 
150
- TelePost can connect to MCP-capable agents such as Codex or Claude through
151
- [MCP](https://github.com/redtidev1918/TelePost/blob/main/docs/MCP_REVIEW.md) (Chinese): the agent
152
- reads pending submissions, suggests decisions based on your channel's review policy, and performs
153
- moderation actions only when you explicitly ask and its permissions allow it.
155
+ MCP is the protocol AI agents use to call external tools. TelePost can connect to agents such as
156
+ Codex or Claude through [MCP](https://github.com/redtidev1918/TelePost/blob/main/docs/MCP_REVIEW.md)
157
+ (Chinese): they read pending submissions, suggest decisions based on your channel's review policy,
158
+ and perform moderation actions only when you explicitly ask and their permissions allow it.
154
159
 
155
- TelePost bundles no language model and never moderates anything on its own — a human always decides.
156
- Keeping both the MCP layer and the review API read-only is the recommended setup. Tool list, tokens
157
- and connection setup: [MCP review](https://github.com/redtidev1918/TelePost/blob/main/docs/MCP_REVIEW.md) (Chinese).
160
+ TelePost bundles no language model and never calls an AI to moderate on its own. Keeping both MCP
161
+ and the review API read-only is recommended, leaving the agent advisory only; once write access is
162
+ enabled, get human confirmation before concrete actions — the program does not enforce this step.
163
+ Tool list, tokens and connection setup:
164
+ [MCP review](https://github.com/redtidev1918/TelePost/blob/main/docs/MCP_REVIEW.md) (Chinese).
158
165
 
159
166
  ## More capabilities
160
167
 
161
- - **HTTP API** — the same review and publishing pipeline as the bot; multi-bot deployments use
162
- `/api/botN/v1/submissions`. Fields and limits:
163
- [HTTP API](https://github.com/redtidev1918/TelePost/blob/main/docs/en/API.md).
164
- - **Multiple bots** — run several bots on one machine, each with its own channel, review group,
165
- language and data directory.
168
+ - **HTTP API** — for scripts and other services to send submissions, sharing the bot's review and
169
+ publishing pipeline; see the example below.
166
170
  - **TXT novels and online reading** — TXT is published as a document; TelePress can optionally build
167
171
  a Telegraph reading page, and a failure never affects the publication.
168
- - **Webhook and Polling** — Webhook when a public HTTPS address is available, Polling otherwise.
172
+ - **Webhook and Polling** — with Polling the bot pulls messages from Telegram and needs no domain
173
+ or public HTTPS; with Webhook, Telegram pushes updates to the bot and a public HTTPS address is
174
+ required. The Mini App also requires public HTTPS.
169
175
  - **File type filtering** — executables, common scripts and archives are blocked by default in all
170
176
  three submission entry points.
171
177
  - **Server deployment** — Docker images and a Fly.io setup; backups and runtime state are covered in
@@ -185,9 +191,8 @@ curl -X POST 'https://example.com/api/v1/submissions' \
185
191
  -F 'idempotency_key=source:123'
186
192
  ```
187
193
 
188
- Multi-bot deployments use `/api/botN/v1/submissions` instead. API submissions always go through
189
- review; full fields and limits are in
190
- [HTTP API](https://github.com/redtidev1918/TelePost/blob/main/docs/en/API.md).
194
+ Multi-bot deployments use `/api/botN/v1/submissions` instead. Review rules: [How it works](#how-it-works);
195
+ full fields and limits are in [HTTP API](https://github.com/redtidev1918/TelePost/blob/main/docs/en/API.md).
191
196
 
192
197
  </details>
193
198
 
@@ -196,8 +201,9 @@ review; full fields and limits are in
196
201
  <details>
197
202
  <summary>Do I need a server and a domain?</summary>
198
203
 
199
- No domain or public HTTPS is required: a machine that stays on, Polling mode, the bot's private chat
200
- and a review group are enough. Only Webhook mode and the Mini App need a public HTTPS address. See
204
+ You need a machine that stays on. Polling mode with the bot's private chat and a review group
205
+ needs no domain; the public HTTPS requirements of Webhook and the Mini App are in
206
+ [More capabilities](#more-capabilities). See
201
207
  [Install and deploy](https://github.com/redtidev1918/TelePost/blob/main/docs/en/INSTALL.md).
202
208
 
203
209
  </details>
@@ -205,18 +211,19 @@ and a review group are enough. Only Webhook mode and the Mini App need a public
205
211
  <details>
206
212
  <summary>Why was my private-chat submission published directly?</summary>
207
213
 
208
- Private-chat submissions are published after the reader confirms by default
209
- (`CHAT_REVIEW_REQUIRED=false`). Set it to `true` to send them to the review group first. The Mini App
210
- and the HTTP API are not affected by this switch and always go through review by default. See
211
- [Configuration](https://github.com/redtidev1918/TelePost/blob/main/docs/en/CONFIGURATION.md#review).
214
+ Private-chat submissions are published after the reader confirms by default. Set
215
+ `CHAT_REVIEW_REQUIRED=true` to send them to the review group first; other entry points are not
216
+ affected. Default behaviour per entry point: [How it works](#how-it-works).
212
217
 
213
218
  </details>
214
219
 
215
220
  <details>
216
221
  <summary>Why doesn't the Mini App show up?</summary>
217
222
 
218
- It is optional and needs a public HTTPS address, `MINIAPP_SESSION_SECRET`, Webhook mode and a
219
- Telegram-side entry; without all of them the entry is not shown. See
223
+ First check that `MINIAPP_ENABLED` is on and the entry URL is configured, then that the page is
224
+ reachable in Webhook mode. If the entry shows but login fails, check `MINIAPP_SESSION_SECRET` in
225
+ the environment and open the app from inside Telegram. Enabling conditions:
226
+ [Mini App](#mini-app-optional); troubleshooting steps:
220
227
  [Telegram Mini App](https://github.com/redtidev1918/TelePost/blob/main/docs/MINIAPP.md) (Chinese).
221
228
 
222
229
  </details>
@@ -234,21 +241,22 @@ machine at the same time causes a Polling conflict. See
234
241
  <details>
235
242
  <summary>Where are submission files stored?</summary>
236
243
 
237
- Under the program's `data/` directory: the submission database `submissions.db`, session state
238
- `persistence.pickle`, runtime policy `runtime-policy.json`, the search index `search_index` and API
239
- temporary uploads `api_uploads/`; multiple bots use `data/botN/`. Media itself stays on Telegram's
240
- side and the database only stores references. Keep the whole `data/` directory when upgrading or
241
- moving. See [Operations](https://github.com/redtidev1918/TelePost/blob/main/docs/OPERATIONS.md) (Chinese).
244
+ By default under `data/` (for a pip install, in the working directory where the command starts):
245
+ the submission database `submissions.db`, session state `persistence.pickle`, runtime policy
246
+ `runtime-policy.json`, the search index `search_index` and API temporary uploads `api_uploads/`;
247
+ multiple bots use `data/botN/`. Media itself stays on Telegram's side and the database only stores
248
+ references. Back up and keep the whole `data/` directory when upgrading or moving; backup method:
249
+ [Operations](https://github.com/redtidev1918/TelePost/blob/main/docs/OPERATIONS.md#持久数据) (Chinese).
242
250
 
243
251
  </details>
244
252
 
245
253
  <details>
246
254
  <summary>Will MCP approve content for me?</summary>
247
255
 
248
- No. TelePost bundles no language model, and MCP is optional: the moderation write tools are only
249
- registered when the mode is not read-only, and they are limited by both the MCP and review API
250
- switches. Human confirmation is the recommended workflow, not an enforced one; keeping both layers
251
- read-only leaves the agent advisory only. See
256
+ Whether it can depends on permissions: `TELEPOST_MCP_REVIEW_MODE=readonly` does not register the
257
+ moderation write tools, and `TELEPOST_REVIEW_API_MODE=readonly` rejects writes server-side. Keeping
258
+ both layers read-only is recommended; for the human-confirmation expectation after enabling writes,
259
+ see [AI-assisted review](#ai-assisted-review-mcp-optional). Full configuration:
252
260
  [MCP review](https://github.com/redtidev1918/TelePost/blob/main/docs/MCP_REVIEW.md) (Chinese).
253
261
 
254
262
  </details>