mirror of
https://github.com/zhenxun-org/zhenxun_bot.git
synced 2025-12-15 14:22:55 +08:00
88 lines
2.9 KiB
Python
88 lines
2.9 KiB
Python
from nonebot import on_command
|
||
from .data_source import get_bt_info
|
||
from services.log import logger
|
||
from nonebot.typing import T_State
|
||
from nonebot.adapters import Bot
|
||
from nonebot.adapters.cqhttp import PrivateMessageEvent
|
||
from utils.utils import get_message_text
|
||
from nonebot.adapters.cqhttp.permission import PRIVATE
|
||
from utils.utils import UserExistLimiter
|
||
from asyncio.exceptions import TimeoutError
|
||
from aiohttp.client_exceptions import ServerDisconnectedError
|
||
|
||
__plugin_name__ = "磁力搜索"
|
||
__plugin_usage__ = r"""
|
||
* 请各位使用后不要转发 *
|
||
* 拒绝反冲斗士! *
|
||
bt [关键词] [页数](默认为1)
|
||
示例:
|
||
bt 钢铁侠
|
||
bt 钢铁侠 3
|
||
""".strip()
|
||
|
||
_ulmt = UserExistLimiter()
|
||
|
||
bt = on_command("bt", permission=PRIVATE, priority=5, block=True)
|
||
|
||
|
||
@bt.args_parser
|
||
async def _(bot: Bot, event: PrivateMessageEvent, state: T_State):
|
||
if str(event.get_message()) in ["取消", "算了"]:
|
||
await bt.finish("已取消操作..", at_sender=True)
|
||
msg = get_message_text(event.json())
|
||
if not msg:
|
||
await bt.reject("你想搜索什么呢?", at_sender=True)
|
||
state["keyword"] = msg
|
||
state["page"] = "1"
|
||
|
||
|
||
@bt.handle()
|
||
async def _(bot: Bot, event: PrivateMessageEvent, state: T_State):
|
||
if _ulmt.check(event.user_id):
|
||
await bt.finish("您有bt任务正在进行,请等待结束.", at_sender=True)
|
||
mp = get_message_text(event.json())
|
||
if not mp:
|
||
return
|
||
mp = mp.split()
|
||
if len(mp) == 2:
|
||
state["keyword"] = mp[0]
|
||
state["page"] = mp[1]
|
||
else:
|
||
state["keyword"] = mp[0]
|
||
state["page"] = "1"
|
||
|
||
|
||
@bt.got("keyword", prompt="虚空磁力?查什么GKD")
|
||
async def _(bot: Bot, event: PrivateMessageEvent, state: T_State):
|
||
_ulmt.set_true(event.user_id)
|
||
keyword = state["keyword"]
|
||
page = state["page"]
|
||
await bt.send("开始搜索....", at_sender=True)
|
||
send_flag = False
|
||
try:
|
||
async for title, itype, create_time, file_size, link in get_bt_info(
|
||
keyword, page
|
||
):
|
||
await bt.send(
|
||
f"标题:{title}\n"
|
||
f"类型:{itype}\n"
|
||
f"创建时间:{create_time}\n"
|
||
f"文件大小:{file_size}\n"
|
||
f"种子:{link}"
|
||
)
|
||
send_flag = True
|
||
except TimeoutError:
|
||
_ulmt.set_false(event.user_id)
|
||
await bt.finish(f"搜索 {keyword} 超时...")
|
||
except ServerDisconnectedError:
|
||
_ulmt.set_false(event.user_id)
|
||
await bt.finish(f"搜索 {keyword} 连接失败")
|
||
except Exception as e:
|
||
_ulmt.set_false(event.user_id)
|
||
await bt.finish(f"bt 其他未知错误..")
|
||
logger.error(f"bt 错误 e:{e}")
|
||
if not send_flag:
|
||
await bt.send(f"{keyword} 未搜索到...")
|
||
logger.info(f"USER {event.user_id} BT搜索 {keyword} 第 {page} 页")
|
||
_ulmt.set_false(event.user_id)
|