summaryrefslogtreecommitdiff
path: root/ATRI/plugins/saucenao/__init__.py
diff options
context:
space:
mode:
authorKyomotoi <[email protected]>2021-07-08 22:09:00 +0800
committerKyomotoi <[email protected]>2021-07-08 22:09:00 +0800
commitbe2747e4d4b820ca0f1f988d3b77a628da26fe7b (patch)
treee1a59dd79ecd973a7d704568dcdc018f1f1b651a /ATRI/plugins/saucenao/__init__.py
parenta4e1b9d1581d756ef79ad063d1c0bd6b2fd13c1d (diff)
downloadATRI-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__.py83
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))