pmrony commited on
Commit
35a1808
·
verified ·
1 Parent(s): fb6c815

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +31 -14
app.py CHANGED
@@ -5,6 +5,7 @@ from flask import Flask, jsonify, make_response, request
5
  from supabase import create_client
6
  import urllib.request
7
  import re
 
8
 
9
  BOT_TOKEN = os.environ.get('BOT_TOKEN')
10
  SUPABASE_URL = "https://yctirvnryrzygoxbpvoy.supabase.co"
@@ -21,7 +22,7 @@ bot = telebot.TeleBot(BOT_TOKEN)
21
  supabase = create_client(SUPABASE_URL, SUPABASE_KEY)
22
  app = Flask(__name__)
23
 
24
- # ইন-মেমরি ক্যাশে (যাতে বারবার টেলিগ্রাম পেজ স্ক্র্যাপ করে স্পেস স্লো না হয়)
25
  thumbnail_cache = {}
26
 
27
  # ==========================================
@@ -30,7 +31,6 @@ thumbnail_cache = {}
30
 
31
  @app.route(f'/{BOT_TOKEN}', methods=['POST'])
32
  def webhook():
33
- # Content-type একটু ফ্লেক্সিবল করা হলো টেলিগ্রামের জন্য
34
  if 'application/json' in request.headers.get('content-type', ''):
35
  json_string = request.get_data().decode('utf-8')
36
  update = telebot.types.Update.de_json(json_string)
@@ -63,24 +63,43 @@ def get_telegram_thumbnail(channel, msg_id):
63
 
64
  try:
65
  url = f"https://t.me/{channel}/{msg_id}?embed=1"
66
- req = urllib.request.Request(url, headers={'User-Agent': 'Mozilla/5.0'})
67
- html = urllib.request.urlopen(req, timeout=3).read().decode('utf-8')
 
 
 
 
 
 
68
  match = re.search(r'<meta property="og:image" content="([^"]+)">', html)
69
  if match:
70
  img_url = match.group(1)
71
  if "telegram_logo" not in img_url:
 
72
  thumbnail_cache[cache_key] = img_url
73
  return img_url
74
- except Exception:
75
- pass
 
 
 
 
 
 
 
 
 
 
76
 
77
- # এখা via.placeholder.com এর বলে placehold.co ব্যবহরা হয়েছে, য100% কাজ করব
78
  fallback = f"https://placehold.co/300x200/222222/FF9900/png?text=Video+{msg_id}"
79
  thumbnail_cache[cache_key] = fallback
 
80
  return fallback
81
 
82
  @app.route('/api/videos')
83
  def api_videos():
 
84
  videos_data = []
85
  for msg_id in range(START_MESSAGE_ID, START_MESSAGE_ID + TOTAL_VIDEOS):
86
  thumb = get_telegram_thumbnail(CHANNEL_USERNAME, msg_id)
@@ -100,7 +119,6 @@ def start(message):
100
  referrer_id = None
101
  if len(text) > 1:
102
  try:
103
- # Type error এড়াতে int এ কনভার্ট
104
  referrer_id = int(text[1])
105
  except ValueError:
106
  referrer_id = None
@@ -108,7 +126,6 @@ def start(message):
108
  try:
109
  user_check = supabase.table('referrals').select('*').eq('user_id', user_id).execute()
110
 
111
- # যদি ডাটাবেজে ইউজার না থাকে
112
  if not user_check.data:
113
  supabase.table('referrals').insert({
114
  'user_id': user_id,
@@ -116,7 +133,6 @@ def start(message):
116
  'referrer_id': referrer_id if referrer_id != user_id else None
117
  }).execute()
118
 
119
- # যদি নতুন ইউজার কোনো রেফারের মাধ্যমে জয়েন করে
120
  if referrer_id and referrer_id != user_id:
121
  referrer_data = supabase.table('referrals').select('referral_count').eq('user_id', referrer_id).execute()
122
  if referrer_data.data:
@@ -125,15 +141,16 @@ def start(message):
125
 
126
  try:
127
  bot.send_message(referrer_id, "🎉 একজন আপনার লিংকে জয়েন করেছে! আপনার রেফারেল কাউন্ট বাড়লো।")
128
- except Exception:
129
- pass
130
  except Exception as e:
131
- print("Database Error:", e)
 
132
 
133
  markup = InlineKeyboardMarkup()
134
  markup.add(InlineKeyboardButton("Play video 🔞", web_app=WebAppInfo(url=WEB_APP_URL)))
135
  bot.reply_to(message, "ভাইরাল ভিডিও দেখতে নিচের বাটনে ক্লিক করো 👇", reply_markup=markup)
136
 
137
  if __name__ == "__main__":
138
- # Threaded=True দিলে একই সাথে একাধিক ইউজার ওয়েবঅ্যাপ এবং বট ব্যবহার করতে পারবে
139
  app.run(host="0.0.0.0", port=7860, threaded=True)
 
5
  from supabase import create_client
6
  import urllib.request
7
  import re
8
+ import traceback # বিস্তারিত এরর (error) দেখার জন্য
9
 
10
  BOT_TOKEN = os.environ.get('BOT_TOKEN')
11
  SUPABASE_URL = "https://yctirvnryrzygoxbpvoy.supabase.co"
 
22
  supabase = create_client(SUPABASE_URL, SUPABASE_KEY)
23
  app = Flask(__name__)
24
 
25
+ # ইন-মেমরি ক্যাশে
26
  thumbnail_cache = {}
27
 
28
  # ==========================================
 
31
 
32
  @app.route(f'/{BOT_TOKEN}', methods=['POST'])
33
  def webhook():
 
34
  if 'application/json' in request.headers.get('content-type', ''):
35
  json_string = request.get_data().decode('utf-8')
36
  update = telebot.types.Update.de_json(json_string)
 
63
 
64
  try:
65
  url = f"https://t.me/{channel}/{msg_id}?embed=1"
66
+ print(f"[LOG] Fetching URL: {url}") # সার্ভারে কোন লিংকের কাজ চলছে তা দেখাবে
67
+
68
+ # User-Agent যোগ করা হয়েছে যাতে টেলিগ্রাম রিকোয়েস্ট ব্লক না করে
69
+ req = urllib.request.Request(url, headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'})
70
+
71
+ # টাইমআউট ৫ সেকেন্ড করা হলো
72
+ html = urllib.request.urlopen(req, timeout=5).read().decode('utf-8')
73
+
74
  match = re.search(r'<meta property="og:image" content="([^"]+)">', html)
75
  if match:
76
  img_url = match.group(1)
77
  if "telegram_logo" not in img_url:
78
+ print(f"[SUCCESS] Image found for msg {msg_id}: {img_url}")
79
  thumbnail_cache[cache_key] = img_url
80
  return img_url
81
+ else:
82
+ print(f"[WARNING] msg {msg_id} তে শুধু টেলিগ্রামের ডিফল্ট লোগো পাওয়া গেছে (আসল ছবি নেই)।")
83
+ else:
84
+ print(f"[WARNING] msg {msg_id} এর HTML এ কোনো ছবি (og:image) পাওয়া যায়নি।")
85
+
86
+ except urllib.error.HTTPError as e:
87
+ print(f"[HTTP ERROR] msg {msg_id} লোড হতে ব্যর্থ: {e.code} {e.reason}")
88
+ except urllib.error.URLError as e:
89
+ print(f"[URL/NETWORK ERROR] msg {msg_id} নেটওয়ার্ক বা টাইমআউট সমস্যা: {e.reason}")
90
+ except Exception as e:
91
+ print(f"[UNKNOWN ERROR] msg {msg_id} স্ক্র্যাপ করার সময় অজানা সমস্যা:")
92
+ traceback.print_exc() # এটি এররের একদম বিস্তারিত লাইন নাম্বারসহ প্রিন্ট করবে
93
 
94
+ # কো কাণে ি না পেলে ফলিং ব্যাক (ডমি ইমজ)
95
  fallback = f"https://placehold.co/300x200/222222/FF9900/png?text=Video+{msg_id}"
96
  thumbnail_cache[cache_key] = fallback
97
+ print(f"[FALLBACK] msg {msg_id} এর জন্য ডামি ছবি সেট করা হলো।")
98
  return fallback
99
 
100
  @app.route('/api/videos')
101
  def api_videos():
102
+ print("[LOG] /api/videos API হিট হয়েছে!")
103
  videos_data = []
104
  for msg_id in range(START_MESSAGE_ID, START_MESSAGE_ID + TOTAL_VIDEOS):
105
  thumb = get_telegram_thumbnail(CHANNEL_USERNAME, msg_id)
 
119
  referrer_id = None
120
  if len(text) > 1:
121
  try:
 
122
  referrer_id = int(text[1])
123
  except ValueError:
124
  referrer_id = None
 
126
  try:
127
  user_check = supabase.table('referrals').select('*').eq('user_id', user_id).execute()
128
 
 
129
  if not user_check.data:
130
  supabase.table('referrals').insert({
131
  'user_id': user_id,
 
133
  'referrer_id': referrer_id if referrer_id != user_id else None
134
  }).execute()
135
 
 
136
  if referrer_id and referrer_id != user_id:
137
  referrer_data = supabase.table('referrals').select('referral_count').eq('user_id', referrer_id).execute()
138
  if referrer_data.data:
 
141
 
142
  try:
143
  bot.send_message(referrer_id, "🎉 একজন আপনার লিংকে জয়েন করেছে! আপনার রেফারেল কাউন্ট বাড়লো।")
144
+ except Exception as e:
145
+ print(f"[BOT ERROR] রেফারারকে মেসেজ পাঠাতে সমস্যা: {e}")
146
  except Exception as e:
147
+ print("[DATABASE ERROR] Supabase ডেটাবেজ এরর:")
148
+ traceback.print_exc()
149
 
150
  markup = InlineKeyboardMarkup()
151
  markup.add(InlineKeyboardButton("Play video 🔞", web_app=WebAppInfo(url=WEB_APP_URL)))
152
  bot.reply_to(message, "ভাইরাল ভিডিও দেখতে নিচের বাটনে ক্লিক করো 👇", reply_markup=markup)
153
 
154
  if __name__ == "__main__":
155
+ print("[LOG] Bot and Flask Server Started Successfully!")
156
  app.run(host="0.0.0.0", port=7860, threaded=True)