From ee3e87a6ec19878d56e8f386b20c58e4d9b211b3 Mon Sep 17 00:00:00 2001 From: Dmitrii Morozov Date: Tue, 7 May 2024 17:15:25 +0200 Subject: Modules --- main.py | 68 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100755 main.py (limited to 'main.py') 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 -- cgit v1.2.3