diff --git a/core/inline.py b/core/inline.py index 35f1677..3373992 100644 --- a/core/inline.py +++ b/core/inline.py @@ -1,5 +1,6 @@ from aiogram.enums import ParseMode from aiogram.types import InlineQuery, InlineQueryResultArticle, InputTextMessageContent +from aiogram.utils.formatting import BlockQuote, Text async def handle_inline_query(query: InlineQuery): @@ -119,6 +120,68 @@ async def handle_inline_query(query: InlineQuery): ) ], cache_time=0) return + if query_text.startswith("b23"): + b23_query = query_text.replace("b23", "",1).strip() + b23_resp = None + import aiohttp + async with aiohttp.ClientSession() as session: + # 先访问 bilibili.com 获取 cookies + async with session.get('https://bilibili.com', headers={ + "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36 Edg/137.0.0.0"}) as response: + pass + + # 使用获取的 cookies 请求搜索 API + params = {'keyword': b23_query} + async with session.get( + 'https://api.bilibili.com/x/web-interface/search/all/v2', + params=params, + headers={ + "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36 Edg/137.0.0.0" + } + ) as response: + b23_resp = await response.json() + search_results = [] + if b23_resp and b23_resp.get('data'): + # 假设我们只取第一个视频的结果 + videos = next((item for item in b23_resp['data']['result'] if item.get('result_type') == 'video'), None) + if videos and videos.get('data'): + # 取前十个结果 + for i, video in enumerate(videos['data'][:10]): + title = video.get('title', '').replace('', '').replace('', '') + bvid = video.get('bvid', '') + link = video.get('arcurl', '').replace('http://','https://',1) + video_type = video.get('typename', '') + author = video.get('author', '') + play = video.get('play', 0) + thumbnail = f"https:{video.get('pic')}" + description = video.get('description', '') + + search_results.append(InlineQueryResultArticle( + id=str(i + 1), + title=title, + thumbnail_url=thumbnail, + input_message_content=InputTextMessageContent( + message_text=f"{title}\n{video_type} | 作者:{author} | " + f"播放量:{play} {Text(BlockQuote(description)).as_html()}", + parse_mode=ParseMode.HTML + ), + description=f"{bvid} | 作者:{author} | 播放量:{play}" + )) + if b23_query and search_results: + await query.answer(results=search_results, cache_time=0) + else: + await query.answer(results=[ + InlineQueryResultArticle( + id="1", + title="输入搜索内容", + input_message_content=InputTextMessageContent( + message_text="ta 好像想在 b 站搜索视频,但 ta 没有输入任何内容。", + parse_mode=ParseMode.MARKDOWN + ), + description="请在 'b23' 后输入你想要搜索的内容。" + ) + ], cache_time=0) + return if query_text.startswith("将军:"): await query.answer(results=[ InlineQueryResultArticle(