zhenxun_bot/plugins/bt/__init__.py

89 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
from util.utils import get_message_text
from nonebot.adapters.cqhttp.permission import PRIVATE
from util.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
__plugin_name__ = '磁力搜索'
__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()
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)
2021-06-04 18:01:33 +08:00
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):
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
mp = mp.split(' ')
2021-06-04 18:01:33 +08:00
if len(mp) == 2:
state['keyword'] = mp[0]
state['page'] = mp[1]
2021-05-20 19:21:05 +08:00
else:
2021-06-04 18:01:33 +08:00
state['keyword'] = mp[0]
state['page'] = '1'
2021-05-20 19:21:05 +08:00
2021-06-04 18:01:33 +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-06-04 18:01:33 +08:00
keyword = state['keyword']
page = state['page']
2021-05-20 19:21:05 +08:00
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-06-04 18:01:33 +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}')
send_flag = True
except TimeoutError:
2021-06-21 09:53:33 +08:00
_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}')
2021-06-04 18:01:33 +08:00
if not send_flag:
2021-06-21 09:53:33 +08:00
await bt.send(f'{keyword} 未搜索到...')
2021-06-04 18:01:33 +08:00
logger.info(f'USER {event.user_id} BT搜索 {keyword}{page}')
_ulmt.set_False(event.user_id)