summaryrefslogtreecommitdiff
path: root/tgbot.py
diff options
context:
space:
mode:
authorDmitrii Morozov <snoopdesigns@gmail.com>2024-04-10 00:33:05 +0200
committerDmitrii Morozov <snoopdesigns@gmail.com>2024-04-10 00:33:05 +0200
commit70c2e0df67e76f755db292a5a817c31770267a70 (patch)
treefd229743f3a51ba366ab678a6f3c94516f4757ea /tgbot.py
parent750d65f4c7102d824cd842d64e4b9c2ca119f65f (diff)
tmp
Diffstat (limited to 'tgbot.py')
-rwxr-xr-xtgbot.py82
1 files changed, 35 insertions, 47 deletions
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