working app
This commit is contained in:
parent
8e69e30387
commit
3057cda8d3
12 changed files with 708 additions and 232 deletions
|
|
@ -14,9 +14,31 @@ TELEGRAM_MAX_RETRIES = int(os.environ.get("TELEGRAM_MAX_RETRIES", 3))
|
|||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class TelegramBot:
|
||||
"""Handle Telegram commands for controlling the monitor"""
|
||||
|
||||
def _handle_reset_listings_command(self):
|
||||
"""Move listings.json to data/old/ with a timestamp, preserving statistics and application history."""
|
||||
import shutil
|
||||
from datetime import datetime
|
||||
try:
|
||||
listings_path = os.path.join("data", "listings.json")
|
||||
old_dir = os.path.join("data", "old")
|
||||
if os.path.exists(listings_path):
|
||||
# Ensure old_dir exists
|
||||
os.makedirs(old_dir, exist_ok=True)
|
||||
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
|
||||
dest_path = os.path.join(old_dir, f"listings_{timestamp}.json")
|
||||
shutil.move(listings_path, dest_path)
|
||||
msg = f"🗑️ <b>Listings reset:</b>\n<code>listings.json</code> moved to <code>old/listings_{timestamp}.json</code>."
|
||||
else:
|
||||
msg = "ℹ️ No listings file found to move."
|
||||
self._send_message(msg)
|
||||
except Exception as e:
|
||||
logger.error(f"Error resetting listings: {e}")
|
||||
self._send_message(f"❌ Error resetting listings: {str(e)}")
|
||||
|
||||
def __init__(self, monitor, bot_token=None, chat_id=None, event_loop=None):
|
||||
self.monitor = monitor
|
||||
self.bot_token = bot_token or TELEGRAM_BOT_TOKEN
|
||||
|
|
@ -88,8 +110,23 @@ class TelegramBot:
|
|||
fut.result()
|
||||
except Exception as e:
|
||||
logger.error(f"/retryfailed command failed: {e}")
|
||||
elif text == "/resetlistings":
|
||||
self._handle_reset_listings_command()
|
||||
elif text.startswith("/"):
|
||||
self._handle_unknown_command(text)
|
||||
def _handle_reset_listings_command(self):
|
||||
"""Delete listings.json (not wgcompany_listings.json), but preserve statistics and application history."""
|
||||
try:
|
||||
listings_path = os.path.join("data", "listings.json")
|
||||
if os.path.exists(listings_path):
|
||||
os.remove(listings_path)
|
||||
msg = "🗑️ <b>Listings reset:</b>\n<code>listings.json</code> deleted."
|
||||
else:
|
||||
msg = "ℹ️ No listings file found to delete."
|
||||
self._send_message(msg)
|
||||
except Exception as e:
|
||||
logger.error(f"Error resetting listings: {e}")
|
||||
self._send_message(f"❌ Error resetting listings: {str(e)}")
|
||||
async def _handle_retry_failed_command(self, max_retries: int = 3):
|
||||
"""Retry all failed applications up to max_retries."""
|
||||
# Ensure browser context is initialized
|
||||
|
|
@ -168,19 +205,16 @@ class TelegramBot:
|
|||
status += f"\n • {company}: {count}"
|
||||
self._send_message(status)
|
||||
|
||||
def _handle_help_command(self):
|
||||
help_text = """🏠 <b>InBerlin Monitor Commands</b>
|
||||
|
||||
/autopilot on - Enable automatic applications
|
||||
/autopilot off - Disable automatic applications
|
||||
/status - Show current status and stats
|
||||
/plot - Show weekly listing patterns
|
||||
/help - Show this help message
|
||||
|
||||
When autopilot is ON, I will automatically apply to new listings."""
|
||||
self._send_message(help_text)
|
||||
|
||||
def _handle_unknown_command(self, text):
|
||||
def _handle_plot_command(self):
|
||||
logger.info("Generating listing times plot...")
|
||||
try:
|
||||
plot_path = self.app_handler._generate_weekly_plot()
|
||||
self._send_photo(plot_path, "\U0001f4ca <b>Weekly Listing Patterns</b>\n\nThis shows when new listings typically appear throughout the week.")
|
||||
except Exception as e:
|
||||
logger.error(f"Error generating plot: {e}")
|
||||
import traceback
|
||||
logger.error(traceback.format_exc())
|
||||
self._send_message(f"\u274c Error generating plot: {str(e)}")
|
||||
cmd = text.split()[0] if text else text
|
||||
self._send_message(f"❓ Unknown command: <code>{cmd}</code>\n\nUse /help to see available commands.")
|
||||
|
||||
|
|
@ -188,11 +222,8 @@ When autopilot is ON, I will automatically apply to new listings."""
|
|||
logger.info("Generating autopilot errorrate plot...")
|
||||
try:
|
||||
plot_path, summary = self.app_handler._generate_error_rate_plot()
|
||||
if plot_path:
|
||||
caption = "📉 <b>Autopilot Success vs Failure</b>\n\n" + summary
|
||||
self._send_photo(plot_path, caption)
|
||||
else:
|
||||
self._send_message("📉 Not enough application data to generate errorrate plot.")
|
||||
caption = "📉 <b>Autopilot Success vs Failure</b>\n\n" + summary
|
||||
self._send_photo(plot_path, caption)
|
||||
except Exception as e:
|
||||
logger.error(f"Error generating errorrate plot: {e}")
|
||||
import traceback
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue