-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrun.py
More file actions
121 lines (98 loc) Β· 5.83 KB
/
Copy pathrun.py
File metadata and controls
121 lines (98 loc) Β· 5.83 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#!/usr/bin/env python3
"""
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
PropFirmTracker Bot v1.0
Real-time prop firm monitoring for traders
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Monitors 10+ prop firms for:
β’ Rule changes (drawdown, profit targets, scaling)
β’ Pricing updates
β’ Promo codes & discounts
β’ Scam warnings & Trustpilot score drops
β’ Reddit community sentiment
Revenue model:
β’ Free channel (24h delay) β Premium ($14.99/mo)
β’ Referral program (3 friends = 7 days free)
β’ Affiliate commissions from prop firm links
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
"""
import asyncio
import sys
import os
import signal
# Ensure project root is in path
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
from config import TELEGRAM_BOT_TOKEN, LOG_LEVEL, LOG_FILE
from utils.logger import setup_logger, log_info, log_error
from database import init_database
from bot import create_bot
from scheduler import Scheduler
# ASCII Art Banner
BANNER = """
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β βββββββ βββββββ βββββββ βββββββ ββββββββββββββββββ β
β βββββββββββββββββββββββββββββββββ ββββββββββββββββββββ
β βββββββββββββββββββ βββββββββββ ββββββ ββββββββββββ
β βββββββ βββββββββββ ββββββββββ ββββββ ββββββββββββ
β βββ βββ βββββββββββββββ βββ ββββββ ββββ
β βββ βββ βββ βββββββ βββ βββ ββββββ ββββ
β ββββββββββββββββ ββββββ ββββββββββ βββ β
β ββββββββββββββββββββββββββββββββββββ ββββ β
β βββ βββββββββββββββββββ βββββββ β
β βββ βββββββββββββββββββ βββββββ β
β βββ βββ ββββββ ββββββββββββββ βββ β
β βββ βββ ββββββ βββ ββββββββββ βββ β
β β
β PropFirmTracker Bot v1.0 β
β Monitoring prop firms 24/7 β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
"""
def main():
"""Main entry point."""
print(BANNER)
# Setup logger
logger = setup_logger("PropFirmTracker", LOG_LEVEL, LOG_FILE)
log_info("Starting PropFirmTracker Bot...", tag="STARTUP")
# Validate config
if TELEGRAM_BOT_TOKEN == "YOUR_BOT_TOKEN_HERE":
log_error("β TELEGRAM_BOT_TOKEN not configured!", tag="STARTUP")
log_error(" 1. Create a bot via @BotFather on Telegram", tag="STARTUP")
log_error(" 2. Set TELEGRAM_BOT_TOKEN in .env file", tag="STARTUP")
sys.exit(1)
# Initialize database
log_info("Setting up database...", tag="STARTUP")
init_database()
# Create bot
log_info("Setting up Telegram bot...", tag="STARTUP")
app = create_bot()
# Create scheduler
scheduler = Scheduler(app)
# Store original post_init from bot.py (registers commands)
original_post_init = app.post_init
# Setup scheduler to run alongside bot
async def on_startup(application):
"""Called when bot starts β register commands + launch scheduler."""
# Call original post_init first (registers bot commands)
if original_post_init:
await original_post_init(application)
scheduler.set_bot(application.bot)
scheduler.start()
log_info("βββββββββββββββββββββββββββββββββββββββ", tag="STARTUP")
log_info("π PropFirmTracker Bot is LIVE!", tag="STARTUP")
log_info("βββββββββββββββββββββββββββββββββββββββ", tag="STARTUP")
async def on_shutdown(application):
"""Called when bot stops β cleanup."""
scheduler.stop()
log_info("Bot shutting down...", tag="STARTUP")
app.post_init = on_startup
app.post_shutdown = on_shutdown
# Run the bot
log_info("Starting polling...", tag="STARTUP")
app.run_polling(
allowed_updates=["message", "callback_query"],
drop_pending_updates=True
)
if __name__ == "__main__":
main()