Spaces:
Paused
Paused
Update app.py
Browse files
app.py
CHANGED
|
@@ -208,8 +208,18 @@ class LitecoinFarmBot:
|
|
| 208 |
return None
|
| 209 |
|
| 210 |
def extract_reset_timer(self, html):
|
| 211 |
-
"""Ekstrak waktu reset dari elemen dengan id 'hourResetTimer' (format MM:SS)"""
|
| 212 |
soup = BeautifulSoup(html, 'html.parser')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 213 |
timer_span = soup.find(id='hourResetTimer')
|
| 214 |
if timer_span:
|
| 215 |
text = timer_span.get_text(strip=True)
|
|
@@ -671,6 +681,9 @@ class LitecoinFarmBot:
|
|
| 671 |
log_error(f"Exception saat load bonus page: {e}", self.email)
|
| 672 |
return
|
| 673 |
|
|
|
|
|
|
|
|
|
|
| 674 |
# Ekstrak CSRF token
|
| 675 |
csrf = self.extract_csrf_token(html)
|
| 676 |
if not csrf:
|
|
@@ -732,7 +745,7 @@ class LitecoinFarmBot:
|
|
| 732 |
log_warning(f"Klaim bonus gagal: {msg}", self.email)
|
| 733 |
# Cek apakah karena limit
|
| 734 |
if any(kw in msg.lower() for kw in ['hourly limit', 'daily limit', 'cooldown', 'terlalu sering', 'limit']):
|
| 735 |
-
self.
|
| 736 |
return
|
| 737 |
except ValueError:
|
| 738 |
# Respons bukan JSON, cek teks HTML
|
|
@@ -740,7 +753,7 @@ class LitecoinFarmBot:
|
|
| 740 |
if error_msg:
|
| 741 |
log_error(f"Bonus error: {error_msg}", self.email)
|
| 742 |
if any(kw in error_msg.lower() for kw in ['hourly limit', 'daily limit', 'cooldown']):
|
| 743 |
-
self.
|
| 744 |
else:
|
| 745 |
# Mungkin sukses tapi tidak JSON
|
| 746 |
if 'success' in post_resp.text.lower() or 'bonus added' in post_resp.text.lower():
|
|
@@ -758,7 +771,22 @@ class LitecoinFarmBot:
|
|
| 758 |
return
|
| 759 |
|
| 760 |
if claims_done >= max_claims:
|
| 761 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 762 |
|
| 763 |
def _set_bonus_cooldown_from_dashboard(self, success=False):
|
| 764 |
"""Ambil reset timer dari dashboard dan set bonus_cooldown."""
|
|
@@ -770,9 +798,9 @@ class LitecoinFarmBot:
|
|
| 770 |
if reset_seconds:
|
| 771 |
self.bonus_cooldown = time.time() + reset_seconds
|
| 772 |
if success:
|
| 773 |
-
log_success(f"Berhasil melakukan 50 klaim bonus. Menunggu reset dalam {reset_seconds//60} menit {reset_seconds%60} detik.", self.email)
|
| 774 |
else:
|
| 775 |
-
log_info(f"Bonus limit tercapai, cooldown hingga reset ({reset_seconds//60} menit {reset_seconds%60} detik).", self.email)
|
| 776 |
return
|
| 777 |
except Exception as e:
|
| 778 |
log_warning(f"Gagal mengambil reset timer dari dashboard: {e}", self.email)
|
|
|
|
| 208 |
return None
|
| 209 |
|
| 210 |
def extract_reset_timer(self, html):
|
| 211 |
+
"""Ekstrak waktu reset dari elemen dengan id 'hourResetTimer' atau 'resetTimer' (format MM:SS)"""
|
| 212 |
soup = BeautifulSoup(html, 'html.parser')
|
| 213 |
+
# Coba cari id 'resetTimer' (di halaman bonus)
|
| 214 |
+
timer_span = soup.find(id='resetTimer')
|
| 215 |
+
if timer_span:
|
| 216 |
+
text = timer_span.get_text(strip=True)
|
| 217 |
+
match = re.search(r'(\d+):(\d+)', text)
|
| 218 |
+
if match:
|
| 219 |
+
minutes = int(match.group(1))
|
| 220 |
+
seconds = int(match.group(2))
|
| 221 |
+
return minutes * 60 + seconds
|
| 222 |
+
# Fallback ke hourResetTimer (di dashboard)
|
| 223 |
timer_span = soup.find(id='hourResetTimer')
|
| 224 |
if timer_span:
|
| 225 |
text = timer_span.get_text(strip=True)
|
|
|
|
| 681 |
log_error(f"Exception saat load bonus page: {e}", self.email)
|
| 682 |
return
|
| 683 |
|
| 684 |
+
# Ekstrak reset timer dari halaman ini (untuk digunakan jika limit)
|
| 685 |
+
reset_seconds = self.extract_reset_timer(html)
|
| 686 |
+
|
| 687 |
# Ekstrak CSRF token
|
| 688 |
csrf = self.extract_csrf_token(html)
|
| 689 |
if not csrf:
|
|
|
|
| 745 |
log_warning(f"Klaim bonus gagal: {msg}", self.email)
|
| 746 |
# Cek apakah karena limit
|
| 747 |
if any(kw in msg.lower() for kw in ['hourly limit', 'daily limit', 'cooldown', 'terlalu sering', 'limit']):
|
| 748 |
+
self._set_bonus_cooldown(reset_seconds)
|
| 749 |
return
|
| 750 |
except ValueError:
|
| 751 |
# Respons bukan JSON, cek teks HTML
|
|
|
|
| 753 |
if error_msg:
|
| 754 |
log_error(f"Bonus error: {error_msg}", self.email)
|
| 755 |
if any(kw in error_msg.lower() for kw in ['hourly limit', 'daily limit', 'cooldown']):
|
| 756 |
+
self._set_bonus_cooldown(reset_seconds)
|
| 757 |
else:
|
| 758 |
# Mungkin sukses tapi tidak JSON
|
| 759 |
if 'success' in post_resp.text.lower() or 'bonus added' in post_resp.text.lower():
|
|
|
|
| 771 |
return
|
| 772 |
|
| 773 |
if claims_done >= max_claims:
|
| 774 |
+
# Setelah mencapai 50, ambil reset timer dari halaman terakhir (seharusnya masih ada)
|
| 775 |
+
# Jika tidak ada, fallback ke dashboard
|
| 776 |
+
if reset_seconds:
|
| 777 |
+
self.bonus_cooldown = time.time() + reset_seconds
|
| 778 |
+
log_success(f"Berhasil melakukan 50 klaim bonus. Menunggu reset dalam {reset_seconds//60} menit {reset_seconds%60} detik.", self.email)
|
| 779 |
+
else:
|
| 780 |
+
self._set_bonus_cooldown_from_dashboard(success=True)
|
| 781 |
+
|
| 782 |
+
def _set_bonus_cooldown(self, reset_seconds=None):
|
| 783 |
+
"""Set bonus cooldown berdasarkan reset_seconds yang diberikan, atau fallback."""
|
| 784 |
+
if reset_seconds:
|
| 785 |
+
self.bonus_cooldown = time.time() + reset_seconds
|
| 786 |
+
log_info(f"Bonus limit tercapai, cooldown hingga reset ({reset_seconds//60} menit {reset_seconds%60} detik).", self.email)
|
| 787 |
+
else:
|
| 788 |
+
# Fallback ke dashboard
|
| 789 |
+
self._set_bonus_cooldown_from_dashboard()
|
| 790 |
|
| 791 |
def _set_bonus_cooldown_from_dashboard(self, success=False):
|
| 792 |
"""Ambil reset timer dari dashboard dan set bonus_cooldown."""
|
|
|
|
| 798 |
if reset_seconds:
|
| 799 |
self.bonus_cooldown = time.time() + reset_seconds
|
| 800 |
if success:
|
| 801 |
+
log_success(f"Berhasil melakukan 50 klaim bonus. Menunggu reset dalam {reset_seconds//60} menit {reset_seconds%60} detik (dari dashboard).", self.email)
|
| 802 |
else:
|
| 803 |
+
log_info(f"Bonus limit tercapai, cooldown hingga reset ({reset_seconds//60} menit {reset_seconds%60} detik) dari dashboard.", self.email)
|
| 804 |
return
|
| 805 |
except Exception as e:
|
| 806 |
log_warning(f"Gagal mengambil reset timer dari dashboard: {e}", self.email)
|