async def process_link(message: types.Message, manager: Manager, **kwargs): text = utils.trim_command_name(message, kwargs['command_name']).strip() if text: manager.state.link = text await message.reply("Установлена ссылка {}".format(text)) else: link = manager.state.link if link: await message.reply("Ссылка: {}".format(link)) else: await message.reply("Настройки ссылки не найдено")
async def reset_to_default(message: types.Message, manager: Manager, **kwargs): key = utils.trim_command_name(message, kwargs['command_name']).strip() if len(key): try: manager.state.reset(key) await message.reply( f"Для переменной {key} установлено значение: {getattr(manager.state, key)}" ) except AttributeError: await message.reply(f"Переменной {key} не существует") else: manager.state.reset_all() await message.reply("Выполнен сброс к заводским настройкам")
async def update_level(message: types.Message, manager: Manager, **kwargs): status_ref = utils.trim_command_name(message, kwargs['command_name']) if len(status_ref): game_status = get_forced_game_status_or_none(status_ref) if game_status is None: game_status = StatusSchema(partial=True, unknown=EXCLUDE).load({}) await message.reply( f'Не удалось распарсить игровой статус: {status_ref}') else: game_status = await manager.http_client.status() await message.reply(str(game_status)) await update_level_status(manager.bot, manager, **{'game_status': game_status})
async def process_test_code(message: types.Message, manager: Manager, **kwargs): text = utils.trim_command_name(message, kwargs['command_name']).strip() verdict, game_status_ref = text.split(maxsplit=1) code_verdict = CodeVerdict(int(verdict)) game_status = get_forced_game_status_or_none(game_status_ref) if game_status is None: return await message.reply( f"Не удалось загрузить новый статус: {game_status_ref}") kwargs['forced_code_verdict'] = code_verdict kwargs['game_status'] = game_status message.text = 'dr1' await process_code(message, manager, **kwargs)
async def process_bool_setting(message: types.Message, manager: Manager, state_field: str, desc: str, command_name: str): """ Updates bool settings from message in state. """ text = utils.trim_command_name(message, command_name).strip() try: mode = utils.parse_bool(text) setattr(manager.state, state_field, mode) await message.reply(f"{desc} {utils.get_text_mode_status(mode)}") except ValueError: await message.reply( "Неверный режим использования, используйте 'on' или 'off'")
async def set_state_key_value(message: types.Message, manager: Manager, **kwargs): text = utils.trim_command_name(message, kwargs['command_name']).strip() key, value = text.split() try: setattr(manager.state, key, value) await message.reply( f"Для переменной {key} установлено значение: {value}") except AttributeError: await message.reply(f"Переменной {key} не существует") except ValueError: await message.reply( f"{value} - недопустимое значение для переменной {key}") except TypeError: await message.reply(f"Не удалось присвоить значение переменной {key}")
async def process_tip(message: types.Message, manager: Manager, **kwargs): text = utils.trim_command_name(message, kwargs['command_name']).strip() if text.startswith('clean'): manager.state.reset('tip') await message.reply("Запиненная подсказка сброшена") elif text: try: sector, tip = text.split(maxsplit=1) sector = sector.strip() except Exception as e: await message.reply( "Неверный формат шаблона номера сектора '*' / 'all' / '' / 0-xx" ) raise Exception( "Недостаточно данных для парсинга номера сектора и подсказки") if sector == '*' or sector == 'all' or sector == '': manager.state.set_tip_all_sectors(tip) await message.reply("Подсказка запинена на текущий уровень") else: try: sector_id = int(sector) if sector_id >= len(manager.state.koline.sectors): await message.reply( f"Сектора под номером: {sector_id} не существует") raise Exception( "В качестве номера сектора может быть: '*' / 'all' / '' / int_sector_id" ) if not manager.state.tip: manager.state.tip = [[]] * len( manager.state.koline.sectors) manager.state.set_tip_for_sector(tip, sector_id) await message.reply( f"Подсказка запинена для сектора: {sector_id}") except Exception as e: await message.reply( "Возникла ошибка, не удалось запиить подсказку") raise e else: tip_text = manager.state.tip if tip_text: await message.reply("Запиненная подсказка: {}".format(tip_text)) else: await message.reply("Нет запиненной подсказки")
async def process_pattern(message: types.Message, manager: Manager, **kwargs): text = utils.trim_command_name(message, kwargs['command_name']).strip() # 'standar' is for stability to parse both standart and standard if 'standar' in text: manager.state.reset('code_pattern') await message.reply("Установлен стандартный шаблон кода") elif text: try: re.compile(text) except re.error: await message.reply( "'{}' не является регулярным выражением. Шаблон кода не установлен" .format(text)) manager.state.code_pattern = text await message.reply("Шаблон кода установлен: {}".format(text)) else: if manager.state.code_pattern: await message.reply("Шаблон кода: {}".format( manager.state.code_pattern)) else: await message.reply("Шаблон кода: стандартный")
async def login(message: types.Message, manager: Manager, **kwargs): text = utils.trim_command_name(message, kwargs['command_name']).strip() login, passwd = text.split(maxsplit=1) login = login.strip() passwd = passwd.strip() await manager.http_client.log_in(login, passwd)