ForcePilot/backend/package/yuxi/channels/adapters/twitch/resolver.py

48 lines
1.1 KiB
Python
Raw Normal View History

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()