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

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +29 -33
app.py CHANGED
@@ -1,11 +1,11 @@
1
  import telebot
2
  from telebot.types import InlineKeyboardMarkup, InlineKeyboardButton, WebAppInfo
3
  import os
4
- from flask import Flask, jsonify, make_response, request
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,17 +22,12 @@ bot = telebot.TeleBot(BOT_TOKEN)
22
  supabase = create_client(SUPABASE_URL, SUPABASE_KEY)
23
  app = Flask(__name__)
24
 
25
- # ইন-মেমরি ক্যাশে
26
  thumbnail_cache = {}
27
 
28
- # ==========================================
29
- # WEBHOOK SETUP
30
- # ==========================================
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)
37
  bot.process_new_updates([update])
38
  return "OK", 200
@@ -43,16 +38,16 @@ def set_webhook():
43
  bot.remove_webhook()
44
  success = bot.set_webhook(url=f"{HF_SPACE_URL}/{BOT_TOKEN}")
45
  if success:
46
- return f"<h1>✅ Webhook Successfully Set to Hugging Face!</h1><p>আপনার বট এখন আর টাইম-আউট হবে না।</p>"
47
  else:
48
  return "<h1>❌ Failed to set webhook!</h1>"
49
 
50
  @app.route('/')
51
  def index():
52
- return "Bot is Running smoothly via Webhook!"
53
 
54
  # ==========================================
55
- # VIDEO & REFERRAL LOGIC
56
  # ==========================================
57
 
58
  def get_telegram_thumbnail(channel, msg_id):
@@ -63,15 +58,20 @@ def get_telegram_thumbnail(channel, msg_id):
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:
@@ -79,27 +79,25 @@ def get_telegram_thumbnail(channel, msg_id):
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)
@@ -142,15 +140,13 @@ def start(message):
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)
 
1
  import telebot
2
  from telebot.types import InlineKeyboardMarkup, InlineKeyboardButton, WebAppInfo
3
  import os
4
+ from flask import Flask, jsonify, make_response, request as flask_request
5
  from supabase import create_client
 
6
  import re
7
+ import traceback
8
+ import requests # নতুন লাইব্রেরি যুক্ত করা হলো
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
  thumbnail_cache = {}
26
 
 
 
 
 
27
  @app.route(f'/{BOT_TOKEN}', methods=['POST'])
28
  def webhook():
29
+ if 'application/json' in flask_request.headers.get('content-type', ''):
30
+ json_string = flask_request.get_data().decode('utf-8')
31
  update = telebot.types.Update.de_json(json_string)
32
  bot.process_new_updates([update])
33
  return "OK", 200
 
38
  bot.remove_webhook()
39
  success = bot.set_webhook(url=f"{HF_SPACE_URL}/{BOT_TOKEN}")
40
  if success:
41
+ return f"<h1>✅ Webhook Successfully Set!</h1>"
42
  else:
43
  return "<h1>❌ Failed to set webhook!</h1>"
44
 
45
  @app.route('/')
46
  def index():
47
+ return "Bot is Running smoothly!"
48
 
49
  # ==========================================
50
+ # VIDEO THUMBNAIL LOGIC
51
  # ==========================================
52
 
53
  def get_telegram_thumbnail(channel, msg_id):
 
58
 
59
  try:
60
  url = f"https://t.me/{channel}/{msg_id}?embed=1"
61
+ print(f"[LOG] Fetching URL: {url}")
62
 
63
+ # Requests ইব্রেরি দিয়ে রিকোয়েস্ট ঠানো হচ্ছ
64
+ headers = {
65
+ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
66
+ }
67
 
68
+ # টাইমআউট ১০ সেকেন্ড দেওয়া হলো
69
+ response = requests.get(url, headers=headers, timeout=10)
70
+ response.raise_for_status() # কোনো HTTP Error থাকলে ধরবে
71
 
72
+ html = response.text
73
  match = re.search(r'<meta property="og:image" content="([^"]+)">', html)
74
+
75
  if match:
76
  img_url = match.group(1)
77
  if "telegram_logo" not in 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 এ কোনো ছবি পাওয়া যায়নি।")
85
 
86
+ except requests.exceptions.Timeout:
87
+ print(f"[TIMEOUT ERROR] msg {msg_id} লোড হতে ১০ সেকেনডেবেশি সময় নিয়েছে!")
88
+ except requests.exceptions.RequestException as e:
89
+ print(f"[NETWORK ERROR] msg {msg_id} লোড রতে সমস্যা: {e}")
90
  except Exception as e:
91
+ print(f"[UNKNOWN ERROR] msg {msg_id} স্ক্র্যাপ করার সময় সমস্যা: {e}")
 
92
 
93
+ # ছবি না পেলে ডামি ছবি
94
  fallback = f"https://placehold.co/300x200/222222/FF9900/png?text=Video+{msg_id}"
95
  thumbnail_cache[cache_key] = fallback
96
+ print(f"[FALLBACK] msg {msg_id} এর জন্য ডামি ছবি ওয়া হলো।")
97
  return fallback
98
 
99
  @app.route('/api/videos')
100
  def api_videos():
 
101
  videos_data = []
102
  for msg_id in range(START_MESSAGE_ID, START_MESSAGE_ID + TOTAL_VIDEOS):
103
  thumb = get_telegram_thumbnail(CHANNEL_USERNAME, msg_id)
 
140
  try:
141
  bot.send_message(referrer_id, "🎉 একজন আপনার লিংকে জয়েন করেছে! আপনার রেফারেল কাউন্ট বাড়লো।")
142
  except Exception as e:
143
+ pass
144
  except Exception as e:
145
+ print("[DATABASE ERROR]", e)
 
146
 
147
  markup = InlineKeyboardMarkup()
148
  markup.add(InlineKeyboardButton("Play video 🔞", web_app=WebAppInfo(url=WEB_APP_URL)))
149
  bot.reply_to(message, "ভাইরাল ভিডিও দেখতে নিচের বাটনে ক্লিক করো 👇", reply_markup=markup)
150
 
151
  if __name__ == "__main__":
 
152
  app.run(host="0.0.0.0", port=7860, threaded=True)