zhenxun_bot/plugins/bt/__init__.py

88 lines
2.9 KiB
Python
Raw Normal View History

2021-05-20 19:21:05 +08:00
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
2021-06-30 19:50:55 +08:00
from utils.utils import get_message_text
2021-05-20 19:21:05 +08:00
from nonebot.adapters.cqhttp.permission import PRIVATE
2021-06-30 19:50:55 +08:00
from utils.utils import UserExistLimiter
2021-06-04 18:01:33 +08:00
from asyncio.exceptions import TimeoutError
2021-06-21 09:53:33 +08:00
from aiohttp.client_exceptions import ServerDisconnectedError
2021-05-20 19:21:05 +08:00
2021-07-30 21:21:51 +08:00
__plugin_name__ = "磁力搜索"
2021-05-20 19:21:05 +08:00
__plugin_usage__ = r"""
* 请各位使用后不要转发 *
2021-06-04 18:01:33 +08:00
* 拒绝反冲斗士 *
bt [关键词] [页数](默认为1)
示例
bt 钢铁侠
bt 钢铁侠 3
2021-05-20 19:21:05 +08:00
""".strip()
_ulmt = UserExistLimiter()
2021-07-30 21:21:51 +08:00
bt = on_command("bt", permission=PRIVATE, priority=5, block=True)
2021-05-20 19:21:05 +08:00
@bt.args_parser
async def _(bot: Bot, event: PrivateMessageEvent, state: T_State):
2021-07-30 21:21:51 +08:00
if str(event.get_message()) in ["取消", "算了"]:
2021-05-20 19:21:05 +08:00
await bt.finish("已取消操作..", at_sender=True)
msg = get_message_text(event.json())
if not msg:
2021-07-30 21:21:51 +08:00
await bt.reject("你想搜索什么呢?", at_sender=True)
state["keyword"] = msg
state["page"] = "1"
2021-05-20 19:21:05 +08:00
@bt.handle()
async def _(bot: Bot, event: PrivateMessageEvent, state: T_State):
if _ulmt.check(event.user_id):
2021-07-30 21:21:51 +08:00
await bt.finish("您有bt任务正在进行请等待结束.", at_sender=True)
2021-06-18 21:45:32 +08:00
mp = get_message_text(event.json())
if not mp:
return
2021-07-30 21:21:51 +08:00
mp = mp.split()
2021-06-04 18:01:33 +08:00
if len(mp) == 2:
2021-07-30 21:21:51 +08:00
state["keyword"] = mp[0]
state["page"] = mp[1]
2021-05-20 19:21:05 +08:00
else:
2021-07-30 21:21:51 +08:00
state["keyword"] = mp[0]
state["page"] = "1"
2021-05-20 19:21:05 +08:00
2021-07-30 21:21:51 +08:00
@bt.got("keyword", prompt="虚空磁力查什么GKD")
2021-05-20 19:21:05 +08:00
async def _(bot: Bot, event: PrivateMessageEvent, state: T_State):
_ulmt.set_True(event.user_id)
2021-07-30 21:21:51 +08:00
keyword = state["keyword"]
page = state["page"]
await bt.send("开始搜索....", at_sender=True)
2021-06-04 18:01:33 +08:00
send_flag = False
2021-05-20 19:21:05 +08:00
try:
2021-07-30 21:21:51 +08:00
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}"
)
2021-06-04 18:01:33 +08:00
send_flag = True
except TimeoutError:
2021-06-21 09:53:33 +08:00
_ulmt.set_False(event.user_id)
2021-07-30 21:21:51 +08:00
await bt.finish(f"搜索 {keyword} 超时...")
2021-06-21 09:53:33 +08:00
except ServerDisconnectedError:
_ulmt.set_False(event.user_id)
2021-07-30 21:21:51 +08:00
await bt.finish(f"搜索 {keyword} 连接失败")
2021-06-21 09:53:33 +08:00
except Exception as e:
_ulmt.set_False(event.user_id)
2021-07-30 21:21:51 +08:00
await bt.finish(f"bt 其他未知错误..")
logger.error(f"bt 错误 e{e}")
2021-06-04 18:01:33 +08:00
if not send_flag:
2021-07-30 21:21:51 +08:00
await bt.send(f"{keyword} 未搜索到...")
logger.info(f"USER {event.user_id} BT搜索 {keyword}{page}")
2021-06-04 18:01:33 +08:00
_ulmt.set_False(event.user_id)