diff options
Diffstat (limited to 'ATRI/plugins/saucenao')
-rw-r--r-- | ATRI/plugins/saucenao/__init__.py | 60 | ||||
-rw-r--r-- | ATRI/plugins/saucenao/data_source.py | 26 |
2 files changed, 46 insertions, 40 deletions
diff --git a/ATRI/plugins/saucenao/__init__.py b/ATRI/plugins/saucenao/__init__.py index b4b1497..b1ab9ab 100644 --- a/ATRI/plugins/saucenao/__init__.py +++ b/ATRI/plugins/saucenao/__init__.py @@ -6,10 +6,10 @@ from nonebot.adapters.cqhttp import Bot, MessageEvent from nonebot.adapters.cqhttp.message import Message, MessageSegment from nonebot.typing import T_State -from ATRI.config import Config +from ATRI.config import SauceNAO from ATRI.service import Service as sv from ATRI.rule import is_in_service -from ATRI.exceptions import RequestTimeOut +from ATRI.exceptions import RequestError from .data_source import SauceNao @@ -21,53 +21,55 @@ __doc__ = """ 以图搜图 (pic) """ -saucenao = sv.on_command(cmd="以图搜图", docs=__doc__, rule=is_in_service("以图搜图")) - +saucenao = sv.on_command( + cmd='以图搜图', + docs=__doc__, + rule=is_in_service('以图搜图') +) @saucenao.args_parser # type: ignore -async def _load_saucenao(bot: Bot, event: MessageEvent, state: T_State) -> None: +async def _load_saucenao(bot: Bot, event: MessageEvent, + state: T_State) -> None: msg = str(event.message) - quit_list = ["算了", "罢了", "不搜了"] + quit_list = ['算了', '罢了', '不搜了'] if msg in quit_list: - await saucenao.finish("好吧...") - + await saucenao.finish('好吧...') + if not msg: - await saucenao.reject("图呢?") + await saucenao.reject('图呢?') else: - state["pic_sau"] = msg - + state['pic_sau'] = msg @saucenao.handle() async def _sauce_nao(bot: Bot, event: MessageEvent, state: T_State) -> None: msg = str(event.message).strip() if msg: - state["pic_sau"] = msg + state['pic_sau'] = msg - [email protected]("pic_sau", prompt="图呢?") [email protected]('pic_sau', prompt='图呢?') async def _deal_saucenao(bot: Bot, event: MessageEvent, state: T_State) -> None: - msg = state["pic_sau"] - img = re.findall(r"url=(.*?)]", msg) + msg = state['pic_sau'] + img = re.findall(r'url=(.*?)]', msg) if not img: - await saucenao.finish("请发送图片而不是其他东西!!") - + await saucenao.finish('请发送图片而不是其他东西!!') + try: - task = SauceNao(api_key=Config.SauceNAO.key) + task = SauceNao(api_key=SauceNAO.key) data = json.loads(await task.search(img[0])) - except RequestTimeOut: - raise RequestTimeOut("Request failed!") - - res = data["results"] + except RequestError: + raise RequestError('Request failed!') + + res = data['results'] result = list() for i in range(0, 3): data = res[i] - + _result = dict() - _result["similarity"] = data["header"]["similarity"] - _result["index_name"] = data["header"]["index_name"] - _result["url"] = choice(data["data"].get("ext_urls", ["None"])) + _result['similarity'] = data['header']['similarity'] + _result['index_name'] = data['header']['index_name'] + _result['url'] = choice(data['data'].get('ext_urls', ['None'])) result.append(_result) - + msg0 = f"> {MessageSegment.at(event.user_id)}" for i in result: msg0 = msg0 + ( @@ -76,5 +78,5 @@ async def _deal_saucenao(bot: Bot, event: MessageEvent, state: T_State) -> None: f"Name: {i['index_name']}\n" f"URL: {i['url'].replace('https://', '')}" ) - + await saucenao.finish(Message(msg0)) diff --git a/ATRI/plugins/saucenao/data_source.py b/ATRI/plugins/saucenao/data_source.py index efe8fe1..cd88554 100644 --- a/ATRI/plugins/saucenao/data_source.py +++ b/ATRI/plugins/saucenao/data_source.py @@ -5,19 +5,23 @@ URL = "https://saucenao.com/search.php" class SauceNao: - def __init__( - self, api_key: str, output_type=2, testmode=1, dbmaski=32768, db=5, numres=5 - ) -> None: + def __init__(self, + api_key: str, + output_type=2, + testmode=1, + dbmaski=32768, + db=5, + numres=5) -> None: params = dict() - params["api_key"] = api_key - params["output_type"] = output_type - params["testmode"] = testmode - params["dbmaski"] = dbmaski - params["db"] = db - params["numres"] = numres + params['api_key'] = api_key + params['output_type'] = output_type + params['testmode'] = testmode + params['dbmaski'] = dbmaski + params['db'] = db + params['numres'] = numres self.params = params - + async def search(self, url: str): - self.params["url"] = url + self.params['url'] = url res = await post_bytes(url=URL, params=self.params) return res |