diff options
author | Kyomotoi <[email protected]> | 2021-07-08 22:09:00 +0800 |
---|---|---|
committer | Kyomotoi <[email protected]> | 2021-07-08 22:09:00 +0800 |
commit | be2747e4d4b820ca0f1f988d3b77a628da26fe7b (patch) | |
tree | e1a59dd79ecd973a7d704568dcdc018f1f1b651a /ATRI/plugins/saucenao/__init__.py | |
parent | a4e1b9d1581d756ef79ad063d1c0bd6b2fd13c1d (diff) | |
download | ATRI-be2747e4d4b820ca0f1f988d3b77a628da26fe7b.tar.gz ATRI-be2747e4d4b820ca0f1f988d3b77a628da26fe7b.tar.bz2 ATRI-be2747e4d4b820ca0f1f988d3b77a628da26fe7b.zip |
🔖♻️🐛🔧🔥📝 更新版本:YHN-001-A03
🔖 更新版本至:YHN-001-A03
✨ 新增插件:
- 涩图
- 闲聊(文爱
♻️ 重构:
- Service
- 所有插件
🐛 修复部分小bug
🔧 暂时移除部分设置
🔥 删除:
- 插件:nsfw、wife。日后加回
- 插件 essential 中部分内容
📝 更新README
Diffstat (limited to 'ATRI/plugins/saucenao/__init__.py')
-rw-r--r-- | ATRI/plugins/saucenao/__init__.py | 83 |
1 files changed, 27 insertions, 56 deletions
diff --git a/ATRI/plugins/saucenao/__init__.py b/ATRI/plugins/saucenao/__init__.py index 6361ade..9e52d66 100644 --- a/ATRI/plugins/saucenao/__init__.py +++ b/ATRI/plugins/saucenao/__init__.py @@ -1,80 +1,51 @@ -import re -import json +from re import findall from random import choice +from nonebot.typing import T_State 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 SauceNAO -from ATRI.service import Service as sv -from ATRI.rule import is_in_service -from ATRI.exceptions import RequestError - -from .data_source import SauceNao +from ATRI.utils.limit import FreqLimiter +from .data_source import SaouceNao -__doc__ = """ -以图搜图 -权限组:所有人 -用法: - 以图搜图 (pic) -""" +_search_flmt = FreqLimiter(5) +_search_flmt_notice = choice(["慢...慢一..点❤", "冷静1下", "歇会歇会~~"]) -saucenao = sv.on_command(cmd="以图搜图", docs=__doc__, rule=is_in_service("以图搜图")) +saucenao = SaouceNao().on_command("以图搜图", "透过一张图搜索可能的来源") @saucenao.args_parser # type: ignore -async def _load_saucenao(bot: Bot, event: MessageEvent, state: T_State) -> None: - msg = str(event.message) +async def _get_img(bot: Bot, event: MessageEvent, state: T_State): + msg = str(event.message).strip() quit_list = ["算了", "罢了", "不搜了"] if msg in quit_list: await saucenao.finish("好吧...") - if not msg: await saucenao.reject("图呢?") else: - state["pic_sau"] = msg - + state["img"] = msg @saucenao.handle() -async def _sauce_nao(bot: Bot, event: MessageEvent, state: T_State) -> None: +async def _ready_search(bot: Bot, event: MessageEvent, state: T_State): + user_id = event.get_user_id() + if not _search_flmt.check(user_id): + await saucenao.finish(_search_flmt_notice) + msg = str(event.message).strip() if msg: - state["pic_sau"] = msg + state["img"] = msg - [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) [email protected]("img", "图呢?") +async def _deal_search(bot: Bot, event: MessageEvent, state: T_State): + user_id = event.get_user_id() + msg = state["img"] + img = findall(r"url=(.*?)]", msg) if not img: - await saucenao.finish("请发送图片而不是其他东西!!") - - try: - task = SauceNao(api_key=SauceNAO.key) - data = json.loads(await task.search(img[0])) - 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.append(_result) - - msg0 = f"> {MessageSegment.at(event.user_id)}" - for i in result: - msg0 = msg0 + ( - "\n——————————\n" - f"Similarity: {i['similarity']}\n" - f"Name: {i['index_name']}\n" - f"URL: {i['url'].replace('https://', '')}" - ) - - await saucenao.finish(Message(msg0)) + await saucenao.reject("请发送图片而不是其他东西!!") + + a = SaouceNao(SauceNAO.key) + result = f"> {MessageSegment.at(user_id)}" + await a.search(img[0]) + _search_flmt.start_cd(user_id) + await saucenao.finish(Message(result)) |