summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorue86388 <dmitrii.morozov@sbb.ch>2024-04-09 17:54:45 +0200
committerue86388 <dmitrii.morozov@sbb.ch>2024-04-09 17:54:45 +0200
commit750d65f4c7102d824cd842d64e4b9c2ca119f65f (patch)
tree8aeb2529269190863008c3fbc88b25212de29098
parent199b7c0f26a39fb644ebb69a6d2536a43819e915 (diff)
Find users and add friends
-rw-r--r--FortniteStatusFormatter.py27
-rwxr-xr-xtgbot.py67
2 files changed, 82 insertions, 12 deletions
diff --git a/FortniteStatusFormatter.py b/FortniteStatusFormatter.py
index be87f0c..4aacd63 100644
--- a/FortniteStatusFormatter.py
+++ b/FortniteStatusFormatter.py
@@ -1,4 +1,7 @@
from telebot import formatting
+import fortnitepy
+import json
+# TODO rename
def __formatStatus(status):
if (status == True):
@@ -29,4 +32,26 @@ def formatFriends(friends):
formatting.mbold("Registered friends:"),
"",
'\n'.join(friends_formatted),
- separator='\n') \ No newline at end of file
+ separator='\n')
+
+def formatUser(user: fortnitepy.User, stats: fortnitepy.StatsV2):
+ combined_stats = stats.get_combined_stats()
+ if 'keyboardmouse' in combined_stats:
+ return __formatUserDevice(user, combined_stats['keyboardmouse'])
+ else:
+ return __formatUserDevice(user, combined_stats['gamepad'])
+
+def __formatUserDevice(user: fortnitepy.User, device_stats: dict):
+ return formatting.format_text(
+ formatting.mbold("User: ") + user.display_name,
+ formatting.mbold("ID: ") + user.id,
+ formatting.mbold("Matches played: ") + __numToStrSafe(device_stats['matchesplayed']),
+ formatting.mbold("Total kills: ") + __numToStrSafe(device_stats['kills']),
+ formatting.mbold("Wins: ") + __numToStrSafe(device_stats['wins']),
+ separator='\n')
+
+def __numToStrSafe(num):
+ if num is not None:
+ return str(num)
+ else:
+ return 'Not available' \ No newline at end of file
diff --git a/tgbot.py b/tgbot.py
index ad72f00..c8561cd 100755
--- a/tgbot.py
+++ b/tgbot.py
@@ -3,6 +3,8 @@
import os
import time, threading, schedule
import telebot
+import asyncio
+import telebot.async_telebot
from FortniteStatusWrapper import *
from FortniteStatusFormatter import *
from FortniteClient import *
@@ -13,30 +15,67 @@ from datetime import datetime
if "TELEBOT_BOT_TOKEN" not in os.environ:
raise AssertionError("Please configure TELEBOT_BOT_TOKEN as environment variables")
-bot = telebot.TeleBot(os.environ["TELEBOT_BOT_TOKEN"])
+#bot = telebot.TeleBot(os.environ["TELEBOT_BOT_TOKEN"])
+bot = telebot.async_telebot.AsyncTeleBot(os.environ["TELEBOT_BOT_TOKEN"])
userRepository = UserRepository('db.sqlite')
fortniteStatusWrapper = FortniteStatusWrapper()
fortniteClient = FortniteClient()
@bot.message_handler(commands = ['start'])
-def startCommand(message):
+async def startCommand(message):
userRepository.putUser(message.chat.id)
- bot.reply_to(message, "This chat successfully registered to receive Fortnite updates!")
+ await bot.reply_to(message, "This chat successfully registered to receive Fortnite updates!")
@bot.message_handler(commands = ['status'])
-def getStatus(message):
- bot.reply_to(
+async def getStatus(message):
+ await bot.reply_to(
message,
formatFortniteStatus(fortniteStatus.getStatus()),
parse_mode='MarkdownV2')
@bot.message_handler(commands = ['friends'])
-def getFriends(message):
- bot.reply_to(
+async def getFriends(message):
+ await bot.reply_to(
message,
formatFriends(fortniteClient.get_friends()),
parse_mode='MarkdownV2')
+@bot.message_handler(commands = ['find'])
+async def findUser(message):
+ arg = message.text.split()
+ if len(arg) > 1:
+ search_user_display_name = arg[1]
+ print('Searching users by name {}'.format(search_user_display_name))
+ 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')
+ else:
+ await bot.reply_to(
+ message,
+ 'Usage: /find username',
+ parse_mode='MarkdownV2')
+
+@bot.message_handler(commands = ['add'])
+async def addUser(message):
+ arg = message.text.split()
+ if len(arg) > 1:
+ 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')
+ else:
+ await bot.reply_to(
+ message,
+ 'Usage: /add username',
+ parse_mode='MarkdownV2')
+
class FortniteStatusObserver(Observer):
def update(self, fortniteStatus) -> None:
for user in userRepository.getAllUsers():
@@ -72,11 +111,17 @@ class FortnitePresenceObserver(PresenceObserver):
parse_mode='MarkdownV2'
)
+async def run_bot():
+ await bot.polling()
+
+async def run_client():
+ await fortniteClient.run()
+
if __name__ == '__main__':
fortniteStatusWrapper.attach(FortniteStatusObserver())
fortniteClient.attach(FortnitePresenceObserver())
- main_thread = threading.Thread(target=bot.infinity_polling, name='bot_infinity_polling', daemon=True)
- main_thread.start()
- #main_thread.join()
- fortniteClient.run() \ No newline at end of file
+ loop = asyncio.get_event_loop()
+ loop.create_task(bot.polling())
+ loop.create_task(fortniteClient.run())
+ loop.run_forever() \ No newline at end of file