akdNIKY commited on
Commit
4765b72
·
verified ·
1 Parent(s): 2212ad8

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +87 -75
app.py CHANGED
@@ -141,7 +141,7 @@ MESSAGES = {
141
  'error_video_conversion': "❌ Error converting video: ",
142
  'invalid_file_type_video': "Please send a video file or a video message.",
143
  'membership_required': "To continue using the bot and access unlimited features, please join the following channels first:",
144
- 'btn_join_channel': "Join Channel ",
145
  'btn_check_membership': "Check Membership ✅",
146
  'membership_success': "✅ Your membership has been verified! You can now use the bot unlimitedly.",
147
  'membership_failed': "❌ Sorry, you are not yet a member of all required channels. Please join first and then press 'Check Membership' again.",
@@ -743,79 +743,89 @@ async def admin_handle_remove_channel(update: Update, context):
743
  return await admin_link_command(update, context)
744
 
745
  app = Flask(__name__)
746
- # application = None # این خط را حذف یا کامنت کنید
747
-
748
- # مقداردهی اولیه Application در سطح سراسری (Global Scope)
749
- # این اطمینان می دهد که Application یک بار در زمان شروع برنامه مقداردهی می شود.
750
- application = Application.builder().token(TOKEN).build()
751
-
752
- # اضافه کردن هندلرها به Application در زمان مقداردهی اولیه
753
- conv_handler = ConversationHandler(
754
- entry_points=[
755
- CommandHandler("start", start),
756
- CommandHandler("link", admin_link_command)
757
- ],
758
- states={
759
- LANGUAGE_SELECTION: [
760
- CallbackQueryHandler(set_language, pattern='^set_lang_')
761
- ],
762
- MAIN_MENU: [
763
- CallbackQueryHandler(change_format_selected, pattern='^select_convert_format$'),
764
- CallbackQueryHandler(cut_audio_selected, pattern='^select_cut_audio$'),
765
- CallbackQueryHandler(video_conversion_selected, pattern='^select_video_conversion$')
766
- ],
767
- CONVERT_AUDIO: [
768
- MessageHandler(filters.AUDIO & ~filters.COMMAND, handle_audio),
769
- MessageHandler(filters.VOICE & ~filters.COMMAND, handle_voice),
770
- CommandHandler("start", start),
771
- CommandHandler("cancel", cancel)
772
- ],
773
- CUT_AUDIO_FILE: [
774
- MessageHandler(filters.AUDIO & ~filters.COMMAND, handle_cut_audio_file),
775
- MessageHandler(filters.VOICE & ~filters.COMMAND, handle_cut_audio_file),
776
- CommandHandler("start", start),
777
- CommandHandler("cancel", cancel)
778
- ],
779
- CUT_AUDIO_RANGE: [
780
- MessageHandler(filters.TEXT & ~filters.COMMAND, handle_cut_audio_range),
781
- CommandHandler("start", start),
782
- CommandHandler("cancel", cancel)
783
- ],
784
- VIDEO_CONVERSION_MODE: [
785
- MessageHandler(filters.VIDEO & ~filters.COMMAND, handle_video_conversion),
786
- MessageHandler(filters.VIDEO_NOTE & ~filters.COMMAND, handle_video_conversion),
787
- CommandHandler("start", start),
788
- CommandHandler("cancel", cancel)
789
- ],
790
- WAITING_FOR_MEMBERSHIP: [
791
- CallbackQueryHandler(check_membership_callback, pattern='^check_membership$'),
792
- CommandHandler("start", start),
793
- CommandHandler("cancel", cancel)
794
- ],
795
- ADMIN_MENU: [
796
- CallbackQueryHandler(admin_add_channel_prompt, pattern='^admin_add_channel$'),
797
- CallbackQueryHandler(admin_list_channels, pattern='^admin_list_channels$'),
798
- CommandHandler("start", start),
799
- CommandHandler("cancel", cancel)
800
- ],
801
- ADD_CHANNEL: [
802
- MessageHandler(filters.TEXT & ~filters.COMMAND, admin_handle_add_channel),
803
- CommandHandler("start", start),
804
- CommandHandler("cancel", cancel)
805
- ],
806
- LIST_REMOVE_CHANNELS: [
807
- CallbackQueryHandler(admin_handle_remove_channel, pattern='^remove_channel_'),
808
- CommandHandler("start", start),
809
- CommandHandler("cancel", cancel)
810
- ]
811
- },
812
- fallbacks=[CommandHandler("cancel", cancel), CommandHandler("start", start)],
813
- allow_reentry=True
814
- )
815
 
816
- application.add_handler(conv_handler)
817
- application.add_error_handler(error_handler)
818
- print("Telegram bot Application initialized.")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
819
 
820
 
821
  @app.route("/")
@@ -824,14 +834,14 @@ async def index():
824
 
825
  @app.route("/webhook", methods=["POST"])
826
  async def webhook():
827
- # await setup_bot() # این خط را حذف کنید
828
  update = Update.de_json(request.get_json(force=True), application.bot)
829
  await application.process_update(update)
830
  return "ok"
831
 
832
  @app.route("/set_webhook", methods=["GET"])
833
  async def set_webhook_route():
834
- # await setup_bot() # این خط را حذف کنید
835
  webhook_url = os.getenv("WEBHOOK_URL")
836
  if not webhook_url:
837
  return jsonify({"status": "error", "message": "WEBHOOK_URL environment variable not set."}), 500
@@ -847,4 +857,6 @@ async def set_webhook_route():
847
 
848
  if __name__ == "__main__":
849
  print("Starting Flask app...")
 
 
850
  app.run(host='0.0.0.0', port=int(os.environ.get("PORT", 7860)))
 
141
  'error_video_conversion': "❌ Error converting video: ",
142
  'invalid_file_type_video': "Please send a video file or a video message.",
143
  'membership_required': "To continue using the bot and access unlimited features, please join the following channels first:",
144
+ 'btn_join_channel': "Join Channel 🤝",
145
  'btn_check_membership': "Check Membership ✅",
146
  'membership_success': "✅ Your membership has been verified! You can now use the bot unlimitedly.",
147
  'membership_failed': "❌ Sorry, you are not yet a member of all required channels. Please join first and then press 'Check Membership' again.",
 
743
  return await admin_link_command(update, context)
744
 
745
  app = Flask(__name__)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
746
 
747
+ # Application باید قبل از اینکه Flask شروع به گوش دادن کند، آماده باشد.
748
+ # این کار را با یک تابع که در زمان شروع gunicorn فراخوانی می شود، انجام می دهیم.
749
+ def initialize_bot_application():
750
+ global application
751
+ if application is None: # فقط اگر هنوز مقداردهی اولیه نشده باشد
752
+ application = Application.builder().token(TOKEN).build()
753
+
754
+ conv_handler = ConversationHandler(
755
+ entry_points=[
756
+ CommandHandler("start", start),
757
+ CommandHandler("link", admin_link_command)
758
+ ],
759
+ states={
760
+ LANGUAGE_SELECTION: [
761
+ CallbackQueryHandler(set_language, pattern='^set_lang_')
762
+ ],
763
+ MAIN_MENU: [
764
+ CallbackQueryHandler(change_format_selected, pattern='^select_convert_format$'),
765
+ CallbackQueryHandler(cut_audio_selected, pattern='^select_cut_audio$'),
766
+ CallbackQueryHandler(video_conversion_selected, pattern='^select_video_conversion$')
767
+ ],
768
+ CONVERT_AUDIO: [
769
+ MessageHandler(filters.AUDIO & ~filters.COMMAND, handle_audio),
770
+ MessageHandler(filters.VOICE & ~filters.COMMAND, handle_voice),
771
+ CommandHandler("start", start),
772
+ CommandHandler("cancel", cancel)
773
+ ],
774
+ CUT_AUDIO_FILE: [
775
+ MessageHandler(filters.AUDIO & ~filters.COMMAND, handle_cut_audio_file),
776
+ MessageHandler(filters.VOICE & ~filters.COMMAND, handle_cut_audio_file),
777
+ CommandHandler("start", start),
778
+ CommandHandler("cancel", cancel)
779
+ ],
780
+ CUT_AUDIO_RANGE: [
781
+ MessageHandler(filters.TEXT & ~filters.COMMAND, handle_cut_audio_range),
782
+ CommandHandler("start", start),
783
+ CommandHandler("cancel", cancel)
784
+ ],
785
+ VIDEO_CONVERSION_MODE: [
786
+ MessageHandler(filters.VIDEO & ~filters.COMMAND, handle_video_conversion),
787
+ MessageHandler(filters.VIDEO_NOTE & ~filters.COMMAND, handle_video_conversion),
788
+ CommandHandler("start", start),
789
+ CommandHandler("cancel", cancel)
790
+ ],
791
+ WAITING_FOR_MEMBERSHIP: [
792
+ CallbackQueryHandler(check_membership_callback, pattern='^check_membership$'),
793
+ CommandHandler("start", start),
794
+ CommandHandler("cancel", cancel)
795
+ ],
796
+ ADMIN_MENU: [
797
+ CallbackQueryHandler(admin_add_channel_prompt, pattern='^admin_add_channel$'),
798
+ CallbackQueryHandler(admin_list_channels, pattern='^admin_list_channels$'),
799
+ CommandHandler("start", start),
800
+ CommandHandler("cancel", cancel)
801
+ ],
802
+ ADD_CHANNEL: [
803
+ MessageHandler(filters.TEXT & ~filters.COMMAND, admin_handle_add_channel),
804
+ CommandHandler("start", start),
805
+ CommandHandler("cancel", cancel)
806
+ ],
807
+ LIST_REMOVE_CHANNELS: [
808
+ CallbackQueryHandler(admin_handle_remove_channel, pattern='^remove_channel_'),
809
+ CommandHandler("start", start),
810
+ CommandHandler("cancel", cancel)
811
+ ]
812
+ },
813
+ fallbacks=[CommandHandler("cancel", cancel), CommandHandler("start", start)],
814
+ allow_reentry=True
815
+ )
816
+
817
+ application.add_handler(conv_handler)
818
+ application.add_error_handler(error_handler)
819
+ # این خط برای اطمینان از مقداردهی اولیه Application است
820
+ application.post_init()
821
+ print("Telegram bot Application initialized and post_init called.")
822
+
823
+
824
+ @app.before_request
825
+ def before_request_func():
826
+ # این تابع قبل از هر درخواست Flask اجرا می شود
827
+ # و اطمینان می دهد که application مقداردهی اولیه شده است.
828
+ initialize_bot_application()
829
 
830
 
831
  @app.route("/")
 
834
 
835
  @app.route("/webhook", methods=["POST"])
836
  async def webhook():
837
+ # Application قبلاً توسط before_request مقداردهی اولیه شده است
838
  update = Update.de_json(request.get_json(force=True), application.bot)
839
  await application.process_update(update)
840
  return "ok"
841
 
842
  @app.route("/set_webhook", methods=["GET"])
843
  async def set_webhook_route():
844
+ # Application قبلاً توسط before_request مقداردهی اولیه شده است
845
  webhook_url = os.getenv("WEBHOOK_URL")
846
  if not webhook_url:
847
  return jsonify({"status": "error", "message": "WEBHOOK_URL environment variable not set."}), 500
 
857
 
858
  if __name__ == "__main__":
859
  print("Starting Flask app...")
860
+ # در محیط توسعه محلی، می توانیم application را مستقیماً مقداردهی اولیه کنیم
861
+ initialize_bot_application()
862
  app.run(host='0.0.0.0', port=int(os.environ.get("PORT", 7860)))