Skip to content

Commit 67b3a56

Browse files
committed
feat: 新增配置项 search_keyword (触发搜图的关键词) search_keyword_only (只响应含有搜图关键词的消息)
1 parent 4619d23 commit 67b3a56

File tree

4 files changed

+32
-32
lines changed

4 files changed

+32
-32
lines changed

YetAnotherPicSearch/__init__.py

Lines changed: 15 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,7 @@
22
import re
33
from collections import defaultdict
44
from contextlib import suppress
5-
from typing import (
6-
Any,
7-
DefaultDict,
8-
Dict,
9-
List,
10-
Optional,
11-
Tuple,
12-
Union,
13-
)
5+
from typing import Any, DefaultDict, Dict, List, Optional, Tuple, Union
146

157
import arrow
168
from aiohttp import ClientSession
@@ -77,27 +69,31 @@ def contains_image(event: MessageEvent) -> bool:
7769
return bool([i for i in message if i.type == "image"])
7870

7971

80-
def to_me_with_image_or_command(bot: Bot, event: MessageEvent) -> bool:
72+
def message_needs_handling(bot: Bot, event: MessageEvent) -> bool:
8173
plain_text = event.message.extract_plain_text().strip()
82-
if command_exists := bool(re.search(r"^搜图(\s+)?(--\w+)?$", plain_text)):
74+
if keyword_exists := bool(
75+
re.search(rf"^{config.search_keyword}(\s+)?(--\w+)?$", plain_text)
76+
):
8377
return True
84-
85-
if not contains_image(event):
78+
elif config.search_keyword_only or (not contains_image(event)):
8679
return False
8780

8881
if isinstance(event, PrivateMessageEvent):
82+
# 回复机器人发送的消息时,必须带上搜图关键词才会搜图,否则会被无视
83+
if event.reply:
84+
return keyword_exists
8985
return config.search_immediately
9086

91-
# 群里回复机器人发送的消息时,必须带上 "搜图" 才会搜图,否则会被无视
87+
# 回复机器人发送的消息时,必须带上搜图关键词才会搜图,否则会被无视
9288
if event.reply and event.to_me:
93-
return command_exists
89+
return keyword_exists
9490

95-
return event.to_me or any(
96-
i.type == "at" and i.data["qq"] == bot.self_id for i in event.message
97-
)
91+
# @机器人如果在消息开头或结尾会被截去,并且 event.to_me 设为 True ,但是如果在消息中间就不会被处理
92+
to_me = any(i.type == "at" and i.data["qq"] == bot.self_id for i in event.message)
93+
return event.to_me or to_me
9894

9995

100-
IMAGE_SEARCH = on_message(rule=Rule(to_me_with_image_or_command), priority=5)
96+
IMAGE_SEARCH = on_message(rule=Rule(message_needs_handling), priority=5)
10197

10298

10399
@IMAGE_SEARCH.handle()

YetAnotherPicSearch/config.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,19 @@
55

66

77
class Config(BaseConfig):
8-
# 私聊发送图片立即搜图,否则需要先发送搜图命令
9-
search_immediately = True
8+
# 触发搜图的关键词
9+
search_keyword: str = "搜图"
10+
# 只响应含有搜图关键词的消息 (优先级高于 search_immediately)
11+
search_keyword_only: bool = False
12+
# 私聊发送图片立即搜图,否则需要先发送搜图关键词
13+
search_immediately: bool = True
1014
# 隐藏所有搜索结果的缩略图
1115
hide_img: bool = False
1216
# saucenao / iqdb 得到低相似度结果时隐藏结果缩略图
1317
hide_img_when_low_acc: bool = False
1418
# whatanime 得到 R18 结果时隐藏结果缩略图
1519
hide_img_when_whatanime_r18: bool = False
16-
# 对 saucenao 的搜索结果进行 NSFW 判断的严格程度(依次递增), 启用后自动隐藏相应的 NSFW 结果的缩略图
20+
# 对 saucenao 的搜索结果进行 NSFW 判断的严格程度 (依次递增) , 启用后自动隐藏相应的 NSFW 结果的缩略图
1721
# 0 表示不判断, 1 只判断明确的, 2 包括可疑的, 3 非明确为 SFW 的
1822
saucenao_nsfw_hide_level: int = 0
1923
# saucenao 相似度低于这个百分比将被认定为相似度过低
@@ -24,7 +28,7 @@ class Config(BaseConfig):
2428
forward_search_result: bool = True
2529
# 大部分请求所使用的代理: http://
2630
proxy: Optional[str] = None
27-
# saucenao 搜图结果缓存过期时间(天)
31+
# saucenao 搜图结果缓存过期时间 (天)
2832
cache_expire: int = 3
2933
# saucenao APIKEY,必填,否则无法使用 saucenao 搜图
3034
saucenao_api_key: str = ""

docs/使用教程.md

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,16 @@
22

33
## 日常使用
44

5+
- `搜图关键词` (`search_keyword`) 可以自定义,默认为 `搜图` ;之所以叫做关键词而不是指令,是因为它可以不在消息开头
6+
- 如果想让机器人只响应含有 `搜图关键词` 的消息 (优先级高于 `search_immediately`) ,启用 `search_keyword_only`
57
- 私聊:
6-
- 发送 `搜图` 及参数进入搜图模式,详见下方的 `搜图模式`
7-
- 直接发送图片 (如果禁用了 `search_immediately` ,需要先发送 `搜图` 进入搜图模式)
8-
- 回复自己或机器人发送的图片,在消息中附上 `搜图` 及参数 (如果回复的是机器人,必须带上 `搜图` 才会搜图,否则会被无视)
8+
- 发送 `搜图关键词` 及参数进入搜图模式,详见下方的 [搜图模式](#搜图模式)
9+
- 直接发送图片 (如果禁用了 `search_immediately` ,需要先发送 `搜图关键词` 进入搜图模式)
10+
- 回复自己或机器人发送的图片,在消息中附上 `搜图关键词` 及参数 (如果回复的是机器人,必须带上 `搜图关键词` 才会搜图,否则会被无视)
911
- 群聊:
10-
- 发送 `搜图` 及参数进入搜图模式,详见下方的 `搜图模式`
12+
- 发送 `搜图关键词` 及参数进入搜图模式,详见下方的 `搜图模式`
1113
- `@机器人` 并发送图片
12-
- 回复某人 (包括自己) 发送的图片,在消息中附上 `搜图``@机器人` 及参数 (如果回复的是机器人,必须带上 `搜图` 才会搜图,否则会被无视)
14+
- 回复某人 (包括自己) 发送的图片,在消息中附上 `搜图关键词``@机器人` 及参数 (如果回复的是机器人,必须带上 `搜图关键词` 才会搜图,否则会被无视)
1315
- 可以在同一条消息中包含多张图片,会自动批量搜索
1416
- 搜索图片时可以在消息内包含以下参数来指定搜索范围或者使用某项功能,优先级 (除去 `--purge`) 从上到下:
1517
- `--all` 全库搜索 (默认)
@@ -37,5 +39,5 @@
3739

3840
搜图模式存在的意义是方便手机用户在转发图片等不方便在消息中夹带 @ 或搜图参数的情况下指定搜索范围或者使用某项功能:
3941

40-
- 发送 `搜图` 并附上搜索范围或者功能参数,如果没有指定,会使用默认设置 (即 `--all`)
42+
- 发送 `搜图关键词` 并附上搜索范围或者功能参数,如果没有指定,会使用默认设置 (即 `--all`)
4143
- 此时你发出来的下一条消息中的图 (也就是一次性的) 会使用指定搜索范围或者使用某项功能

docs/部署教程.md

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,14 @@
55
2. 参照 [config.py](../YetAnotherPicSearch/config.py) 文件,更改 `.env.prod` 文件或 `.env` 文件 (都不存在就创建 `.env` 文件) 中的配置项,如:
66

77
```
8-
COMMAND_START=["/", ""]
98
PROXY="http://127.0.0.1:1080"
109
SAUCENAO_API_KEY=""
1110
```
1211
1312
其中:
1413
15-
- `COMMAND_START` 必须配置,否则机器人不会响应 `搜图` 指令,具体请看 [配置 | NoneBot](https://v2.nonebot.dev/docs/tutorial/configuration) 。
1614
- `SAUCENAO_API_KEY` 必须配置,否则无法正常使用搜图功能。没有就申请一个:[先注册](https://saucenao.com/user.php),然后到 [api 页面](https://saucenao.com/user.php?page=search-api) 复制。
1715
- 如果遇到各种奇怪的网络问题,请配置 `PROXY` 。
1816
- 如果 sauceNAO 的 API 使用触发当日上限,除非同时换新的 API Key 和代理节点,否则仅换其中一个没有意义。
1917
20-
4. 启动机器人。
18+
3. 启动机器人。

0 commit comments

Comments
 (0)