From 70c2e0df67e76f755db292a5a817c31770267a70 Mon Sep 17 00:00:00 2001 From: Dmitrii Morozov Date: Wed, 10 Apr 2024 00:33:05 +0200 Subject: tmp --- tgbot.py | 82 +++++++++++++++++++++++++++------------------------------------- 1 file changed, 35 insertions(+), 47 deletions(-) (limited to 'tgbot.py') diff --git a/tgbot.py b/tgbot.py index c8561cd..38b1789 100755 --- a/tgbot.py +++ b/tgbot.py @@ -24,21 +24,15 @@ fortniteClient = FortniteClient() @bot.message_handler(commands = ['start']) async def startCommand(message): userRepository.putUser(message.chat.id) - await bot.reply_to(message, "This chat successfully registered to receive Fortnite updates!") + await reply(message, 'This chat successfully registered to receive Fortnite updates') @bot.message_handler(commands = ['status']) async def getStatus(message): - await bot.reply_to( - message, - formatFortniteStatus(fortniteStatus.getStatus()), - parse_mode='MarkdownV2') + await reply(message, formatFortniteStatus(fortniteStatus.getStatus())) @bot.message_handler(commands = ['friends']) async def getFriends(message): - await bot.reply_to( - message, - formatFriends(fortniteClient.get_friends()), - parse_mode='MarkdownV2') + await reply(message, formatFriends(fortniteClient.get_friends())) @bot.message_handler(commands = ['find']) async def findUser(message): @@ -49,15 +43,9 @@ async def findUser(message): users: typing.List[fortnitepy.User] = await fortniteClient.fetch_users_by_display_name(search_user_display_name) for user in users: stats = await user.fetch_br_stats() - await bot.reply_to( - message, - formatUser(user, stats), - parse_mode='MarkdownV2') + await reply(message, formatUser(user, stats)) else: - await bot.reply_to( - message, - 'Usage: /find username', - parse_mode='MarkdownV2') + await reply(message, 'Usage: /find username') @bot.message_handler(commands = ['add']) async def addUser(message): @@ -66,35 +54,24 @@ async def addUser(message): user_id = arg[1] print('Adding user with ID as friend {}'.format(user_id)) await fortniteClient.add_friend(user_id) - await bot.reply_to( - message, - 'Send friend request successfully', - parse_mode='MarkdownV2') + await reply(message, 'Send friend request successfully') else: - await bot.reply_to( - message, - 'Usage: /add username', - parse_mode='MarkdownV2') + await reply(message, 'Usage: /add username') class FortniteStatusObserver(Observer): - def update(self, fortniteStatus) -> None: - for user in userRepository.getAllUsers(): - bot.send_message( - user[0], - formatFortniteStatus(fortniteStatus), - parse_mode='MarkdownV2' - ) + async def update(self, fortniteStatus) -> None: + await send_message_to_all(formatFortniteStatus(fortniteStatus)) class FortnitePresenceObserver(PresenceObserver): # Map name -> last seen not playing timestamp seconds statuses = {} - def update(self, display_name: str, playing: bool) -> None: + async def update(self, display_name: str, playing: bool) -> None: print('FortnitePresenceObserver: {} playing = {}'.format(display_name, playing)) if playing: if not display_name in self.statuses: - self.__notifyFriendPlaying(display_name) + await self.__notifyFriendPlaying(display_name) self.statuses[display_name] = time.time() else: diff = time.time() - self.statuses[display_name] @@ -103,18 +80,24 @@ class FortnitePresenceObserver(PresenceObserver): else: self.statuses[display_name] = time.time() - def __notifyFriendPlaying(self, display_name: str): - for user in userRepository.getAllUsers(): - bot.send_message( - user[0], - '{} is online'.format(display_name), - parse_mode='MarkdownV2' - ) + async def __notifyFriendPlaying(self, display_name: str): + await send_message_to_all('{} is online'.format(display_name)) -async def run_bot(): - await bot.polling() +async def send_message_to_all(message_text: str): + for user in userRepository.getAllUsers(): + await bot.send_message( + user[0], + message_text, + parse_mode='MarkdownV2' + ) -async def run_client(): +async def reply(message, message_text): + await bot.reply_to( + message, + message_text, + parse_mode='MarkdownV2') + +async def run_fortnite_client(): await fortniteClient.run() if __name__ == '__main__': @@ -122,6 +105,11 @@ if __name__ == '__main__': fortniteClient.attach(FortnitePresenceObserver()) loop = asyncio.get_event_loop() - loop.create_task(bot.polling()) - loop.create_task(fortniteClient.run()) - loop.run_forever() \ No newline at end of file + + tasks = [ + loop.create_task(bot.polling()), + loop.create_task(fortniteStatusWrapper.run()), + loop.create_task(run_fortnite_client()) + ] + loop.run_until_complete(asyncio.wait(tasks)) + loop.close() \ No newline at end of file -- cgit v1.2.3