import telebot from telegram_bot import * from formatter import * from persistence import * from fortnite_client import * from fortnite_status import * class StartCommand(CommandHandler): __telegram_bot: TelegramBot __user_repository: UserRepository def __init__(self, telegram_bot: TelegramBot, user_repository: UserRepository): self.__telegram_bot = telegram_bot self.__user_repository = user_repository async def handle(self, message: telebot.types.Message): if message.chat.type == 'private': alias = message.chat.username else: alias = message.chat.title self.__user_repository.put_user(message.chat.id, alias) await self.__telegram_bot.reply(message, 'This chat successfully registered to receive Fortnite updates') class GetStatusCommand(CommandHandler): __telegram_bot: TelegramBot __fortnite_status: FortniteStatus def __init__(self, telegram_bot: TelegramBot): self.__telegram_bot = telegram_bot self.__fortnite_status = FortniteStatus() async def handle(self, message: telebot.types.Message): await self.__telegram_bot.reply(message, format_fortnite_status(self.__fortnite_status.getStatus())) class GetFriendsCommand(CommandHandler): __telegram_bot: TelegramBot __fortnite_client: FortniteClient def __init__(self, telegram_bot: TelegramBot, fortnite_client: FortniteClient): self.__telegram_bot = telegram_bot self.__fortnite_client = fortnite_client async def handle(self, message: telebot.types.Message): friends = await self.__fortnite_client.get_friends() await self.__telegram_bot.reply(message, format_users(friends)) class GetStatsCommand(CommandHandler): __telegram_bot: TelegramBot __fortnite_client: FortniteClient def __init__(self, telegram_bot: TelegramBot, fortnite_client: FortniteClient): self.__telegram_bot = telegram_bot self.__fortnite_client = fortnite_client async def handle(self, message: telebot.types.Message): friends = await self.__fortnite_client.get_friends() stats = [await friend.fetch_stats() for friend in friends] await self.__telegram_bot.reply(message, format_user_stats_list(stats)) class GetTodayStatsCommand(CommandHandler): __telegram_bot: TelegramBot __fortnite_client: FortniteClient __stats_repository: StatsRepository def __init__(self, telegram_bot: TelegramBot, fortnite_client: FortniteClient, stats_repository: StatsRepository): self.__telegram_bot = telegram_bot self.__fortnite_client = fortnite_client self.__stats_repository = stats_repository async def handle(self, message: telebot.types.Message): persisted_stats = self.__stats_repository.get_stats() friends = await self.__fortnite_client.get_friends() current_stats = [await friend.fetch_stats() for friend in friends] await self.__telegram_bot.reply(message, format_user_stats_difference(persisted_stats, current_stats)) class RecordStatsCommand(CommandHandler): __fortnite_client: FortniteClient __stats_repository: StatsRepository def __init__(self, fortnite_client: FortniteClient, stats_repository: StatsRepository): self.__fortnite_client = fortnite_client self.__stats_repository = stats_repository async def handle(self, message: telebot.types.Message): friends = await self.__fortnite_client.get_friends() for friend in friends: await self.__stats_repository.put_stats(friend)