from __future__ import annotations from typing import Any from yuxi.utils.logging_config import logger from .helix import HelixClient def _is_numeric_id(value: str) -> bool: return value.isdigit() async def resolve_twitch_target( input_value: str, client_id: str, access_token: str, ) -> dict[str, Any] | None: """将输入(用户名或用户 ID)解析为 Twitch 用户信息""" value = input_value.strip().lstrip("@").lower() if not value: return None if not client_id or not access_token: logger.warning("resolve_twitch_target: missing credentials") return None helix = HelixClient(client_id, access_token) try: await helix.start() if _is_numeric_id(value): user = await helix.get_user_by_id(value) if user: return user return None user = await helix.get_user_by_name(value) if user: return user return None except Exception as e: logger.error(f"resolve_twitch_target error for '{input_value}': {e}") return None finally: await helix.close()