async def add_all_psn_to_friends(message: types.Message): logger.info( f'Хэндлер ADD_ALL_PSN_TO_FRIEND запущен пользователем с id {message.from_user.id} ' f'({message.from_user.full_name}, {message.from_user.username})') await types.ChatActions.typing() db = DB() members = db.get_all_persons() # получаем список всех пользователей из БД members_with_psn = [] logger.info(f'Всего профилей в БД: {len(members)}') for user in members: if user.psn_account is not None: logger.debug(f'{user} - PSN указан ({user.psn_account})') members_with_psn.append(user) logger.info(f'Всего профилей в БД c PSN: {len(members_with_psn)}') # выводим список пользователей из БД с psn_id for item in members_with_psn: logger.info(f'профилей в БД c PSN - {item}') ps_pars = PSN_Bot(PSN_USERNAME, PSN_EMAIL, PSN_PASSWORD) # создаем экземпляр браузера if not ps_pars.is_logged_in_func(): # проверяем, залогинены ли мы ps_pars.login() # если нет, то логинимся psn_friends = ps_pars.friends_list(ps_pars.username) logger.info(f'Друзей в PSN: {len(psn_friends)}') # выводим кол-во друзей i = 0 for item in psn_friends: logger.info(f': {i} друг - {item}') # выводим кол-во друзей в PSN i +=1 members_with_psn_not_friend = members_with_psn for user in members_with_psn: for psn_friend in psn_friends: if user.psn_account == psn_friend['psn']: logger.info(f'найден друг с PSN: {user.psn_account}') members_with_psn_not_friend.remove(user) logger.info( f'Пользователей в БД, указавших PSN, но не подружившихся с ботом: {len(members_with_psn_not_friend)}') # выводим кол-во друзей for member_with_psn_not_friend in members_with_psn_not_friend: logger.info(f'{member_with_psn_not_friend.psn_account}') for user in members_with_psn_not_friend: try: if ps_pars.psn_status(user.psn_account) == 'Добавить Друга': sleeptime = random.randrange(3, 10) await asyncio.sleep(sleeptime) ps_pars.add_to_friend(user.psn_account) await message.answer(str(user.psn_account + ' - направлен в друзья направлен')) elif ps_pars.psn_status(user.psn_account) == 'Вы подписаны': await message.answer('Скорее всего с пользователем ' + user.psn_id + ' вы уже друзья') elif ps_pars.psn_status(user.psn_account) == 'Подписаться': await message.answer('запрос на добавление ' + user.psn_account + ' уже был ранее отправлен') else: logging.exception("Что-то не так") except: logging.exception("Exception occurred")
async def show_stats_all(message: types.Message, is_reply=True): """показывает статистику всех игроков в базе данных""" logger.info( f'Хэндлер STATS_ALL запущен пользователем с id {message.from_user.id} ' f'({message.from_user.full_name}, {message.from_user.username})') await types.ChatActions.typing() db = DB() members = db.get_all_persons() logger.info(f'Из БД загружено {len(members)} записей') await message.answer(text=f'Кол-во записей в БД: {len(members)}', reply=True) for person in members: await types.ChatActions.typing() name_or_nickname = 'empty' if person.name_or_nickname is not None: name_or_nickname = str(person.name_or_nickname) username = '******' if person.tg_account.username is not None: username = str(person.tg_account.username) activision_account = 'empty' if person.activision_account is not None: activision_account = str(person.activision_account) psn_account = 'empty' if person.psn_account is not None: psn_account = str(person.psn_account) kd_warzone = 'empty' if person.kd_warzone is not None: kd_warzone = str(float(person.kd_warzone)) kd_multiplayer = 'empty' if person.kd_multiplayer is not None: kd_multiplayer = str(float(person.kd_multiplayer)) kd_cold_war_multiplayer = 'empty' if person.kd_cold_war_multiplayer is not None: kd_cold_war_multiplayer = str(float( person.kd_cold_war_multiplayer)) modified_kd_at = 'empty' if person.modified_kd_at is not None: modified_kd_at = str(person.modified_kd_at.strftime("%d.%m.%Y")) + \ '\n' + str(person.modified_kd_at.strftime("%H:%M:%S")) text_by_strings = [ 'Имя/ник: ' + name_or_nickname, 'Имя в Телеге: ' + username, 'Аккаунт ACTIVISION: ' + activision_account, 'Аккаунт PSN: ' + psn_account, 'К/Д WarZone: ' + kd_warzone, 'К/Д в мультиплеере(MW19): ' + kd_multiplayer, 'К/Д в Cold War: ' + kd_cold_war_multiplayer, '', 'Last update: ', modified_kd_at ] full_text = '\n'.join( text_by_strings) # красивый способ объеденить строки с пререносами await message.answer(text=full_text, reply=False)
async def stats_update_all(message: types.Message): logger.info( f'Хэндлер stats_update_all запущен пользователем с id {message.from_user.id} ' f'({message.from_user.full_name}, {message.from_user.username})') await types.ChatActions.typing() db = DB() players = db.get_all_persons() for player in players: await types.ChatActions.typing() if player is not None: # проверяем, смогли ли мы загрузить свою учётку в БД if player.modified_kd_at is None: logger.info(f'КД ранее ни разу удачно не обновлялось') need_to_update_kd = True else: logger.info( f'Последнее удачное обновление КД произошло {player.modified_kd_at}' ) # сколько прошло секунд с последнего обновления timestamp_delta = datetime.now().timestamp( ) - player.modified_kd_at.timestamp() # переводим секунды в часы, с округлением вниз hours_delta_int = math.floor(timestamp_delta / (60 * 60)) logger.info( f'Последнее удачное обновление КД было {hours_delta_int} часов назад' ) hours = 10 # как часто обновлять КД if hours_delta_int > hours: need_to_update_kd = True else: need_to_update_kd = False logger.info( f'КД обновляется на чаще раза в {hours} часов. Еще не пришло время обновлять КД' ) if need_to_update_kd: logger.info(f'Обновляем КД') await stat_update(db=db, person=player) await message.answer( f'статистика игрока с аккаунтом ACTIVISION {player.activision_account} обновлена' ) else: await message.answer( f'Обновление статистики для игрока с аккаунтом ACTIVISION {player.activision_account} не требуется' ) await message.answer( message.from_user.first_name + ", обновление статистики по всем пользователям закончена!")