Улучшение обработки фильтров и полей в запросах к VNDB API
This commit is contained in:
20
bot.py
20
bot.py
@@ -182,8 +182,8 @@ Staff: {stats.get('staff', 0)}
|
|||||||
)
|
)
|
||||||
|
|
||||||
results = await vndb_client.query_vn(
|
results = await vndb_client.query_vn(
|
||||||
filters=["search", "=", query.strip().lower()], # ✔️ без вложенности
|
filters=["search", "=", query.strip().lower()],
|
||||||
fields=["id", "title", "image{url}"],
|
fields=["id", "title", "image.url"],
|
||||||
results=10
|
results=10
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -200,14 +200,12 @@ Staff: {stats.get('staff', 0)}
|
|||||||
|
|
||||||
# images
|
# images
|
||||||
for vn in results["results"][:3]:
|
for vn in results["results"][:3]:
|
||||||
img = vn.get("image")
|
img_url = vn.get("image.url") or vn.get("image", {}).get("url")
|
||||||
if img and img.get("url"):
|
|
||||||
try:
|
if img_url:
|
||||||
await update.message.reply_photo(
|
await update.message.reply_photo(
|
||||||
photo=f"https://t.vndb.org{img['url']}"
|
photo=f"https://t.vndb.org{img_url}"
|
||||||
)
|
)
|
||||||
except Exception as e:
|
|
||||||
logger.warning(e)
|
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(e)
|
logger.error(e)
|
||||||
@@ -228,15 +226,15 @@ Staff: {stats.get('staff', 0)}
|
|||||||
return ConversationHandler.END
|
return ConversationHandler.END
|
||||||
|
|
||||||
results = await vndb_client.query_character(
|
results = await vndb_client.query_character(
|
||||||
filters=["search", "=", query.strip().lower()], # ✔️ важно
|
filters=["search", "=", query.strip().lower()],
|
||||||
fields=["id", "name", "image{url}"],
|
fields=["id", "name", "original", "image.url"],
|
||||||
results=10
|
results=10
|
||||||
)
|
)
|
||||||
|
|
||||||
text = "<b>Персонажи:</b>\n\n"
|
text = "<b>Персонажи:</b>\n\n"
|
||||||
|
|
||||||
for c in results.get("results", []):
|
for c in results.get("results", []):
|
||||||
text += f"{c.get('id')} - {c.get('name')}\n"
|
text += f"{c.get('id')} - {c.get('name')} ({c.get('original', '')})\n"
|
||||||
|
|
||||||
await update.message.reply_text(text, parse_mode="HTML")
|
await update.message.reply_text(text, parse_mode="HTML")
|
||||||
|
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ class VndbClient:
|
|||||||
|
|
||||||
def _safe_filters(self, filters: Optional[List[Any]]) -> List[Any]:
|
def _safe_filters(self, filters: Optional[List[Any]]) -> List[Any]:
|
||||||
if not filters:
|
if not filters:
|
||||||
return ["id", ">", 0]
|
return []
|
||||||
return filters
|
return filters
|
||||||
|
|
||||||
async def _request(
|
async def _request(
|
||||||
@@ -135,27 +135,10 @@ class VndbClient:
|
|||||||
compact_filters: bool = False,
|
compact_filters: bool = False,
|
||||||
normalized_filters: bool = False,
|
normalized_filters: bool = False,
|
||||||
) -> Dict[str, Any]:
|
) -> Dict[str, Any]:
|
||||||
"""
|
|
||||||
Query visual novels
|
|
||||||
|
|
||||||
Args:
|
|
||||||
filters: Filter conditions
|
|
||||||
fields: Fields to retrieve
|
|
||||||
sort: Sort field (id, title, released, rating, votecount, searchrank)
|
|
||||||
reverse: Sort in descending order
|
|
||||||
results: Number of results per page (max 100)
|
|
||||||
page: Page number starting from 1
|
|
||||||
count: Include total count
|
|
||||||
user: User ID for user-specific filters
|
|
||||||
compact_filters: Include compact filter representation
|
|
||||||
normalized_filters: Include normalized filter representation
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
Query results
|
|
||||||
"""
|
|
||||||
data = {
|
data = {
|
||||||
"filters": filters or [],
|
"filters": filters or [],
|
||||||
"fields": ",".join(fields) if fields else "id",
|
"fields": ",".join(fields) if fields else "id,title,image.url",
|
||||||
"sort": sort,
|
"sort": sort,
|
||||||
"reverse": reverse,
|
"reverse": reverse,
|
||||||
"results": results,
|
"results": results,
|
||||||
@@ -164,6 +147,7 @@ class VndbClient:
|
|||||||
"compact_filters": compact_filters,
|
"compact_filters": compact_filters,
|
||||||
"normalized_filters": normalized_filters,
|
"normalized_filters": normalized_filters,
|
||||||
}
|
}
|
||||||
|
|
||||||
if user:
|
if user:
|
||||||
data["user"] = user
|
data["user"] = user
|
||||||
|
|
||||||
@@ -185,7 +169,7 @@ class VndbClient:
|
|||||||
"""Query releases"""
|
"""Query releases"""
|
||||||
data = {
|
data = {
|
||||||
"filters": filters or [],
|
"filters": filters or [],
|
||||||
"fields": ",".join(fields) if fields else "id",
|
"fields": ",".join(fields) if fields else "id,title",
|
||||||
"sort": sort,
|
"sort": sort,
|
||||||
"reverse": reverse,
|
"reverse": reverse,
|
||||||
"results": results,
|
"results": results,
|
||||||
@@ -213,8 +197,8 @@ class VndbClient:
|
|||||||
) -> Dict[str, Any]:
|
) -> Dict[str, Any]:
|
||||||
|
|
||||||
data = {
|
data = {
|
||||||
"filters": self._safe_filters(filters),
|
"filters": filters or [],
|
||||||
"fields": ",".join(fields) if fields else "id,name",
|
"fields": ",".join(fields) if fields else "id,name,original,image.url",
|
||||||
"sort": sort,
|
"sort": sort,
|
||||||
"reverse": reverse,
|
"reverse": reverse,
|
||||||
"results": results,
|
"results": results,
|
||||||
|
|||||||
Reference in New Issue
Block a user