summaryrefslogtreecommitdiff
path: root/main.py
diff options
context:
space:
mode:
Diffstat (limited to 'main.py')
-rwxr-xr-xmain.py68
1 files changed, 68 insertions, 0 deletions
diff --git a/main.py b/main.py
new file mode 100755
index 0000000..f016f57
--- /dev/null
+++ b/main.py
@@ -0,0 +1,68 @@
+#!/usr/bin/python3
+
+import os, time, telebot, asyncio, telebot.async_telebot, nest_asyncio, sys
+from fortnite_status import *
+from formatter import *
+from fortnite_client import *
+from fortnite_client.fortnite_events import *
+from persistence import *
+from telegram_bot import *
+from telegram_bot.commands import *
+
+class FortniteStatusObserverImpl(FortniteStatusObserver):
+
+ telegram_bot: TelegramBot
+
+ def __init__(self, telegram_bot: TelegramBot):
+ self.__telegram_bot = telegram_bot
+
+ async def update(self, fortnite_status) -> None:
+ await self.__telegram_bot.send_message_to_all(format_fortnite_status(fortnite_status))
+
+user_repository = UserRepository()
+stats_repository = StatsRepository()
+presence_repository = PresenceRepository()
+telegram_bot = TelegramBot(user_repository)
+fortnite_status_notifier = FortniteStatusNotifier(FortniteStatusObserverImpl(telegram_bot))
+
+fortnite_client = FortniteClient(
+ ClientInitObserverImpl(),
+ FriendPresenceObserverImpl(telegram_bot, presence_repository))
+
+record_stats_command = RecordStatsCommand(fortnite_client, stats_repository)
+
+telegram_bot.register_command_handler('start', StartCommand(telegram_bot, user_repository))
+telegram_bot.register_command_handler('status', GetStatusCommand(telegram_bot))
+telegram_bot.register_command_handler('friends', GetFriendsCommand(telegram_bot, fortnite_client))
+telegram_bot.register_command_handler('stats', GetStatsCommand(telegram_bot, fortnite_client))
+telegram_bot.register_command_handler('todaystats', GetTodayStatsCommand(telegram_bot, fortnite_client, stats_repository))
+telegram_bot.register_command_handler('recordstats', record_stats_command)
+
+async def run_tgbot():
+ await telegram_bot.run()
+
+async def run_fortnite_status_notifier():
+ await fortnite_status_notifier.run()
+
+async def run_fortnite_client():
+ fortnite_client.run()
+
+async def run_record_stats():
+ while True:
+ t = time.localtime()
+ if t.tm_hour == 5: # only at 05:00
+ await recordStatsCommand.handle(None)
+ await asyncio.sleep(60 * 60) # 1 hour
+
+async def run_all():
+ await asyncio.gather(
+ run_tgbot(),
+ run_fortnite_status_notifier(),
+ run_fortnite_client(),
+ run_record_stats())
+
+if __name__ == '__main__':
+ nest_asyncio.apply()
+ loop = asyncio.get_event_loop()
+ loop.run_until_complete(run_all())
+ loop.close() \ No newline at end of file