示例#1
0
def main(settings: Settings, verbosity: int, shell: bool):
    """
    Hero Wars game bot ­ЪЈє
    """
    install_logging(verbosity)
    logger.info('Bot is starting.')

    with Session() as session, Database(constants.DATABASE_NAME) as db:
        session.mount('https://', HTTPAdapter(max_retries=5))
        session.headers['User-Agent'] = constants.USER_AGENT

        telegram = Telegram(session,
                            settings.telegram) if settings.telegram else None
        api = API(session, db, settings)
        bot = Bot(db, api, VK(session, settings), telegram, settings)

        bot.log('­ЪјЅ лЉлЙЛѓ лил░л┐ЛЃЛЂл║л░лхЛѓЛЂЛЈРђд')
        api.prepare()
        bot.prepare()

        logger.info('Welcome ┬Ф{}┬╗!', bot.user.name)
        logger.info('Game time: {:%H:%M:%S %Z}', datetime.now(bot.user.tz))
        logger.info('Next day: {:%H:%M:%S %Z}.',
                    bot.user.next_day.astimezone(bot.user.tz))
        bot.log(f'­ЪјЅ *{bot.user.name}* лил░л┐ЛЃЛЂЛѓлИл╗ЛЂЛЈ!')

        if not shell:
            bot.run()
        else:
            IPython.embed()
示例#2
0
def main(verbosity: int, n_splits: int, n_last_battles: int):
    """
    Train and generate arena prediction model.
    """
    bestmobabot.logging_.install_logging(verbosity)
    if not sys.warnoptions:
        warnings.simplefilter('ignore')

    with Database(constants.DATABASE_NAME) as db:
        Trainer(db, n_splits=n_splits, n_last_battles=n_last_battles).train()
示例#3
0
def main(verbosity: int):
    """Test the solver on the pre-dumped data."""
    bestmobabot.logging_.install_logging(verbosity)

    logger.info('Loading the dumps…')
    with Database(constants.DATABASE_NAME) as db:
        model: Model = pickle.loads(b85decode(db['bot:model']))
    heroes: List[Hero] = pickle.loads(
        (Path('dumps') / 'heroes.pkl').read_bytes())
    arena_enemies: List[ArenaEnemy] = pickle.loads(
        (Path('dumps') / 'arena_enemies.pkl').read_bytes())
    grand_enemies: List[GrandArenaEnemy] = pickle.loads(
        (Path('dumps') / 'grand_enemies.pkl').read_bytes())

    logger.info('')
    for enemy in arena_enemies:
        solution = ArenaSolver(
            db={},
            model=model,
            user_clan_id=None,
            heroes=heroes,
            n_required_teams=1,
            max_iterations=0,
            n_keep_solutions=50,
            n_generate_solutions=100,
            n_generations_count_down=25,
            early_stop=0.95,
            get_enemies=list,
            friendly_clans=[],
            reduce_probabilities=reduce_normal_arena,
            callback=lambda: None,
        ).initialize().solve_enemy(enemy)
        logger.info('{}', solution)

    logger.info('')
    for enemy in grand_enemies:
        solution = ArenaSolver(
            db={},
            model=model,
            user_clan_id=None,
            heroes=heroes,
            n_required_teams=constants.N_GRAND_TEAMS,
            max_iterations=0,
            n_keep_solutions=50,
            n_generate_solutions=500,
            n_generations_count_down=50,
            early_stop=0.95,
            get_enemies=list,
            friendly_clans=[],
            reduce_probabilities=reduce_grand_arena,
            callback=lambda: None,
        ).initialize().solve_enemy(enemy)
        logger.info('{}', solution)
示例#4
0
def test_get_missing():
    with pytest.raises(KeyError):
        Database(':memory:').__getitem__('missing_key')
示例#5
0
def test_get_by_prefix():
    db = Database(':memory:')
    db['foo:qux'] = 42
    db['foo:quux'] = 43
    assert list(db.get_by_prefix('foo')) == [('foo:qux', 42), ('foo:quux', 43)]
示例#6
0
def test_set_replace():
    db = Database(':memory:')
    db['foo'] = 42
    db['foo'] = 43
    assert db['foo'] == 43
示例#7
0
def test_set():
    db = Database(':memory:')
    db['foo'] = 42
    assert db['foo'] == 42
示例#8
0
def test_not_exists():
    assert 'missing_key' not in Database(':memory:')
示例#9
0
def test_exists():
    db = Database(':memory:')
    db['foo'] = 42
    assert 'foo' in db