pmrony commited on
Commit
5fcc166
·
verified ·
1 Parent(s): 72f5676

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +113 -60
app.py CHANGED
@@ -1,8 +1,10 @@
 
 
 
1
  import os
2
- import requests
3
  from flask import Flask, jsonify, make_response, request
4
  from supabase import create_client
5
- import threading
6
 
7
  # ডিটেইলস
8
  BOT_TOKEN = "8628213901:AAFvfHBpZ6tok40ZQuhIDLAVIMrHeiheMNY"
@@ -11,81 +13,132 @@ SUPABASE_KEY = "sb_publishable_aBcD-atruskWwoCiLr0lWw_inT8GLoN"
11
  WEB_APP_URL = "https://rony90790.github.io/Forward-bot/index.html"
12
  HF_SPACE_URL = "https://pmrony-forwardbot.hf.space"
13
 
14
- # কানেকশন কমনোর জন্য ি সেটিংস
15
- requests.packages.urllib3.util.ssl_.DEFAULT_CIPHERS += 'HIGH:!DH:!aNULL'
16
 
 
 
 
 
 
17
  supabase = create_client(SUPABASE_URL, SUPABASE_KEY)
18
  app = Flask(__name__)
19
 
20
- # --- মিরর লিঙ্ক ব্যবহার করা হচ্ছে (SSL সমস্যা সমাধানের জন্য) ---
21
- def send_telegram_message(chat_id, text, reply_markup=None):
22
- # যদি t.me কাজ না করে তবে মিরর URL ট্রাই করে
23
- url = f"https://api.telegram.org/bot{BOT_TOKEN}/sendMessage"
24
- payload = {
25
- "chat_id": chat_id,
26
- "text": text,
27
- "parse_mode": "HTML"
28
- }
29
- if reply_markup:
30
- payload["reply_markup"] = reply_markup
31
-
32
- try:
33
- # ৫ বার ট্রাই করবে যদি কানেকশন এরর হয়
34
- r = requests.post(url, json=payload, timeout=20)
35
- return r.json()
36
- except Exception as e:
37
- print(f"Error: {e}")
38
- return None
39
 
40
  @app.route(f'/{BOT_TOKEN}', methods=['POST'])
41
  def webhook():
42
- data = request.get_json()
43
- if not data or "message" not in data:
 
 
44
  return "OK", 200
45
-
46
- msg = data["message"]
47
- chat_id = msg["chat"]["id"]
48
- text = msg.get("text", "")
49
-
50
- if text.startswith("/start"):
51
- # রেফারেল লজিক
52
- args = text.split()
53
- ref_id = int(args[1]) if len(args) > 1 and args[1].isdigit() else None
54
-
55
- # কিবোর্ড
56
- markup = {
57
- "inline_keyboard": [[
58
- {"text": "Play video 🔞", "web_app": {"url": WEB_APP_URL}}
59
- ]]
60
- }
61
- send_telegram_message(chat_id, "ভাইরাল ভিডিও দেখতে নিচের বাটনে ক্লিক করো 👇", markup)
62
-
63
- return "OK", 200
64
 
65
  @app.route('/set_webhook')
66
  def set_webhook():
67
- webhook_url = f"{HF_SPACE_URL}/{BOT_TOKEN}"
68
- # সরাসরি ব্রাউজার দিয়ে করার জন্য লিঙ্কটি রিটার্ন করছে
69
- api_url = f"https://api.telegram.org/bot{BOT_TOKEN}/setWebhook?url={webhook_url}"
 
 
 
 
 
 
 
 
 
 
 
 
70
  try:
71
- r = requests.get(api_url, timeout=20)
72
- return jsonify(r.json())
73
- except:
74
- return f"বট থেকে হচ্ছে না, আপনি নিজে এই লিঙ্কে ঢুকুন: {api_url}"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
75
 
76
  @app.route('/api/videos')
77
  def api_videos():
78
  try:
79
  res = supabase.table('videos').select('*').order('id', desc=True).execute()
80
- resp = make_response(jsonify(res.data))
81
- resp.headers['Access-Control-Allow-Origin'] = '*'
82
- return resp
83
- except:
84
- return jsonify([])
85
-
86
- @app.route('/')
87
- def index():
88
- return "Running..."
89
 
90
  if __name__ == "__main__":
91
  app.run(host="0.0.0.0", port=7860)
 
1
+ import telebot
2
+ from telebot import apihelper
3
+ from telebot.types import InlineKeyboardMarkup, InlineKeyboardButton, WebAppInfo
4
  import os
 
5
  from flask import Flask, jsonify, make_response, request
6
  from supabase import create_client
7
+ import traceback
8
 
9
  # ডিটেইলস
10
  BOT_TOKEN = "8628213901:AAFvfHBpZ6tok40ZQuhIDLAVIMrHeiheMNY"
 
13
  WEB_APP_URL = "https://rony90790.github.io/Forward-bot/index.html"
14
  HF_SPACE_URL = "https://pmrony-forwardbot.hf.space"
15
 
16
+ # 🔴 আপনাদেওয়্যাডমিন আইডি এখানে সেট করা হয়েছে
17
+ ADMIN_IDS = [7307789267]
18
 
19
+ # --- কানেকশন টাইমআউট বাড়ানো হলো (সমাধান) ---
20
+ apihelper.CONNECT_TIMEOUT = 60
21
+ apihelper.READ_TIMEOUT = 60
22
+
23
+ bot = telebot.TeleBot(BOT_TOKEN, threaded=False)
24
  supabase = create_client(SUPABASE_URL, SUPABASE_KEY)
25
  app = Flask(__name__)
26
 
27
+ admin_states = {}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
28
 
29
  @app.route(f'/{BOT_TOKEN}', methods=['POST'])
30
  def webhook():
31
+ if request.is_json:
32
+ json_string = request.get_data(as_text=True)
33
+ update = telebot.types.Update.de_json(json_string)
34
+ bot.process_new_updates([update])
35
  return "OK", 200
36
+ return "Forbidden", 403
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
37
 
38
  @app.route('/set_webhook')
39
  def set_webhook():
40
+ bot.remove_webhook()
41
+ success = bot.set_webhook(url=f"{HF_SPACE_URL}/{BOT_TOKEN}")
42
+ if success:
43
+ return "<h1>✅ Webhook Set Successfully!</h1>"
44
+ else:
45
+ return "<h1>❌ Webhook Set Failed!</h1>"
46
+
47
+ @app.route('/')
48
+ def index():
49
+ return "Bot is Running smoothly!"
50
+
51
+ # ================= COMMAND HANDLERS =================
52
+
53
+ @bot.message_handler(commands=['start'])
54
+ def start(message):
55
  try:
56
+ user_id = message.from_user.id
57
+ args = message.text.split()
58
+ referrer_id = int(args[1]) if len(args) > 1 and args[1].isdigit() else None
59
+
60
+ # ডাটাবেজে ডাটা সেভ করার চেষ্টা (এটা ফেইল করলেও মেসেজ যাবে)
61
+ try:
62
+ user_check = supabase.table('referrals').select('*').eq('user_id', user_id).execute()
63
+ if not user_check.data:
64
+ supabase.table('referrals').insert({
65
+ 'user_id': user_id, 'referral_count': 0,
66
+ 'referrer_id': referrer_id if referrer_id != user_id else None
67
+ }).execute()
68
+
69
+ if referrer_id and referrer_id != user_id:
70
+ ref_data = supabase.table('referrals').select('referral_count').eq('user_id', referrer_id).execute()
71
+ if ref_data.data:
72
+ new_count = ref_data.data[0]['referral_count'] + 1
73
+ supabase.table('referrals').update({'referral_count': new_count}).eq('user_id', referrer_id).execute()
74
+ bot.send_message(referrer_id, "🎉 কেউ আপনার রেফারে জয়েন করেছে!")
75
+ except Exception as db_e:
76
+ print(f"Database issue: {db_e}")
77
+
78
+ # কী-বোর্ড এবং মেসেজ পাঠানো
79
+ markup = InlineKeyboardMarkup()
80
+ markup.add(InlineKeyboardButton("Play video 🔞", web_app=WebAppInfo(url=WEB_APP_URL)))
81
+
82
+ bot.send_message(message.chat.id, "ভাইরাল ভিডিও দেখতে নিচের বাটনে ক্লিক করো 👇", reply_markup=markup)
83
+
84
+ except Exception as e:
85
+ print(f"Error in /start: {e}")
86
+
87
+ @bot.message_handler(commands=['png'])
88
+ def add_png(message):
89
+ try:
90
+ # সিকিউরিটি চেক: শুধু অ্যাডমিনরা এই কমান্ড ব্যবহার করতে পারবে
91
+ if message.from_user.id not in ADMIN_IDS:
92
+ bot.send_message(message.chat.id, "❌ আপনার এই কমান্ড ব্যবহার করার অনুমতি নেই।")
93
+ return
94
+
95
+ parts = message.text.split(maxsplit=1)
96
+ if len(parts) > 1:
97
+ img_url = parts[1].strip()
98
+ admin_states[message.chat.id] = {"step": 1, "thumbnail_url": img_url}
99
+ bot.send_message(message.chat.id, "✅ ছবি সেট হয়েছে। এখন এই ছবির জন্য **Google Drive ভিডিও লিংক** দিন।")
100
+ else:
101
+ bot.send_message(message.chat.id, "সঠিক নিয়ম: `/png https://link-to-image.jpg`")
102
+ except Exception as e:
103
+ print(f"Error in /png: {e}")
104
+
105
+ @bot.message_handler(func=lambda m: admin_states.get(m.chat.id, {}).get("step") == 1)
106
+ def add_video_step(message):
107
+ try:
108
+ # যদি অ্যাডমিন ভিডিও লিংকের বদলে ভুল করে অন্য কোনো কমান্ড দেয়, তবে প্রসেস বাতিল হবে
109
+ if message.text.startswith('/'):
110
+ bot.send_message(message.chat.id, "❌ ভিডিও অ্যাড প্রসেস বাতিল করা হয়েছে।")
111
+ admin_states.pop(message.chat.id, None)
112
+ return
113
+
114
+ video_url = message.text.strip()
115
+ thumbnail_url = admin_states[message.chat.id]["thumbnail_url"]
116
+
117
+ supabase.table('videos').insert({
118
+ "video_url": video_url,
119
+ "thumbnail_url": thumbnail_url
120
+ }).execute()
121
+
122
+ bot.send_message(message.chat.id, "🎉 অভিনন্দন! ভিডিওটি সফলভাবে অ্যাপে অ্যাড হয়েছে।")
123
+ except Exception as e:
124
+ bot.send_message(message.chat.id, "❌ ডাটাবেজে সেভ করতে সমস্যা হয়েছে।")
125
+ finally:
126
+ # সফল হোক বা ব্যর্থ, স্টেট ক্লিয়ার করা হলো যাতে মেমরি লিক না হয়
127
+ admin_states.pop(message.chat.id, None)
128
 
129
  @app.route('/api/videos')
130
  def api_videos():
131
  try:
132
  res = supabase.table('videos').select('*').order('id', desc=True).execute()
133
+ response = make_response(jsonify(res.data))
134
+ except Exception as e:
135
+ print(f"API Error: {e}")
136
+ # error হলেও empty array পাঠাতে হবে
137
+ response = make_response(jsonify([]))
138
+
139
+ # যেকোনো অবস্থাতেই CORS হেডার দিতে হবে, না হলে ওয়েব অ্যাপ ক্র্যাশ করবে
140
+ response.headers['Access-Control-Allow-Origin'] = '*'
141
+ return response
142
 
143
  if __name__ == "__main__":
144
  app.run(host="0.0.0.0", port=7860)