예제 #1
0
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")
예제 #2
0
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)
예제 #3
0
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 +
        ", обновление статистики по всем пользователям закончена!")