Files
ayako/detailed_handlers.py

200 lines
6.2 KiB
Python

"""
Inline handlers for detailed item viewing (NO IMAGES VERSION - STABLE)
"""
from telegram import Update
from telegram.ext import ContextTypes, CommandHandler
from vndb_client import VndbClient
from config import Config
import logging
logger = logging.getLogger(__name__)
vndb_client = VndbClient(use_sandbox=Config.USE_SANDBOX)
class DetailedHandlers:
# =========================
# VN DETAIL
# =========================
@staticmethod
async def view_vn_detail(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
try:
if not context.args:
await update.message.reply_text("❌ Пример: /vn_detail v2002")
return
vn_id = context.args[0].strip()
await update.message.reply_text(f"⏳ Загружаю {vn_id}...")
results = await vndb_client.query_vn(
filters=["id", "=", vn_id],
fields=[
"id",
"title",
"original",
"released",
"rating",
"votecount",
"description",
"length",
"developer"
],
results=1
)
if not results.get("results"):
await update.message.reply_text("😞 VN не найдена")
return
vn = results["results"][0]
text = f"🎮 {vn.get('title','Unknown')} (`{vn_id}`)\n"
if vn.get("original"):
text += f"{vn['original']}\n"
text += f"Релиз: {vn.get('released','?')}\n"
text += f"Рейтинг: {vn.get('rating',0)/10:.1f} ({vn.get('votecount',0)} голосов)\n"
if vn.get("length"):
text += f"Длина: {vn['length']}\n"
if vn.get("developer"):
text += f"Разработчик: {vn['developer']}\n"
if vn.get("description"):
text += f"\nОписание:\n{vn['description'][:300]}...\n"
text += f"\nhttps://vndb.org/{vn_id}"
await update.message.reply_text(text)
except Exception as e:
logger.error(f"VN detail error: {e}")
await update.message.reply_text(f"❌ Ошибка: {e}")
# =========================
# CHARACTER DETAIL
# =========================
@staticmethod
async def view_character_detail(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
try:
if not context.args:
await update.message.reply_text("❌ Пример: /char_detail c6498")
return
char_id = context.args[0].strip()
await update.message.reply_text(f"⏳ Загружаю {char_id}...")
results = await vndb_client.query_character(
filters=["id", "=", char_id],
fields=[
"id",
"name",
"original",
"gender",
"bloodtype",
],
results=1
)
if not results.get("results"):
await update.message.reply_text("😞 Персонаж не найден")
return
c = results["results"][0]
text = f"👤 {c.get('name','Unknown')} (`{char_id}`)\n"
if c.get("original"):
text += f"{c['original']}\n"
if c.get("gender"):
text += f"Пол: {c['gender']}\n"
if c.get("bloodtype"):
text += f"Кровь: {c['bloodtype']}\n"
if c.get("description"):
text += f"\nОписание:\n{c['description'][:300]}...\n"
text += f"\nhttps://vndb.org/{char_id}"
await update.message.reply_text(text)
except Exception as e:
logger.error(f"CHAR detail error: {e}")
await update.message.reply_text(f"❌ Ошибка: {e}")
# =========================
# RELEASE DETAIL
# =========================
@staticmethod
async def view_release_detail(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
try:
if not context.args:
await update.message.reply_text("❌ Пример: /release_detail r3930")
return
release_id = context.args[0].strip()
await update.message.reply_text(f"⏳ Загружаю {release_id}...")
results = await vndb_client.query_release(
filters=["id", "=", release_id],
fields=[
"id",
"title",
"original",
"released",
"platform",
"type",
"language",
"description"
],
results=1
)
if not results.get("results"):
await update.message.reply_text("😞 Релиз не найден")
return
r = results["results"][0]
text = f"🎬 {r.get('title','Unknown')} (`{release_id}`)\n"
if r.get("original"):
text += f"{r['original']}\n"
text += f"Дата: {r.get('released','?')}\n"
text += f"Платформа: {r.get('platform','?')}\n"
text += f"Тип: {r.get('type','?')}\n"
if r.get("language"):
text += f"Языки: {', '.join(r['language'])}\n"
if r.get("description"):
text += f"\nОписание:\n{r['description'][:200]}...\n"
text += f"\nhttps://vndb.org/{release_id}"
await update.message.reply_text(text)
except Exception as e:
logger.error(f"RELEASE detail error: {e}")
await update.message.reply_text(f"❌ Ошибка: {e}")
# =========================
# REGISTER
# =========================
def get_detail_handlers():
return [
CommandHandler("vn_detail", DetailedHandlers.view_vn_detail),
CommandHandler("char_detail", DetailedHandlers.view_character_detail),
CommandHandler("release_detail", DetailedHandlers.view_release_detail),
]