@@ -95,15 +95,15 @@ async def handle_first_receive(
95
95
96
96
async def image_search (
97
97
url : str ,
98
+ md5 : str ,
98
99
mode : str ,
99
100
purge : bool ,
100
101
_cache : Cache ,
101
102
client : ClientSession ,
102
103
hide_img : bool = config .hide_img ,
103
104
) -> List [str ]:
104
105
url = await get_universal_img_url (url )
105
- image_md5 = re .search (r"[A-F\d]{32}" , url )[0 ] # type: ignore
106
- if not purge and (result := exist_in_cache (_cache , image_md5 , mode )):
106
+ if not purge and (result := exist_in_cache (_cache , md5 , mode )):
107
107
return [f"[缓存] { i } " for i in result ]
108
108
result = []
109
109
try :
@@ -122,7 +122,7 @@ async def image_search(
122
122
else :
123
123
result = await saucenao_search (url , mode , client , hide_img )
124
124
# 仅对涉及到 saucenao 的搜图结果做缓存
125
- upsert_cache (_cache , image_md5 , mode , result )
125
+ upsert_cache (_cache , md5 , mode , result )
126
126
except Exception as e :
127
127
logger .exception (f"该图 [{ url } ] 搜图失败" )
128
128
result = [f"该图搜图失败\n E: { repr (e )} " ]
@@ -142,9 +142,13 @@ async def get_universal_img_url(url: str) -> str:
142
142
return url
143
143
144
144
145
- def get_image_urls (event : MessageEvent ) -> List [str ]:
145
+ def get_image_urls_with_md5 (event : MessageEvent ) -> List [Tuple [ str , str ] ]:
146
146
message = event .reply .message if event .reply else event .message
147
- return [i .data ["url" ] for i in message if i .type == "image" and i .data .get ("url" )]
147
+ return [
148
+ (i .data ["url" ], str (i .data ["file" ]).rstrip (".image" ).upper ())
149
+ for i in message
150
+ if i .type == "image" and i .data .get ("url" )
151
+ ]
148
152
149
153
150
154
def get_args (msg : Message ) -> Tuple [str , bool ]:
@@ -233,8 +237,8 @@ async def send_forward_msg(
233
237
@IMAGE_SEARCH .handle ()
234
238
@IMAGE_SEARCH_MODE .got ("IMAGES" , prompt = "请发送图片" )
235
239
async def handle_image_search (bot : Bot , event : MessageEvent , matcher : Matcher ) -> None :
236
- image_urls = get_image_urls (event )
237
- if not image_urls :
240
+ image_urls_with_md5 = get_image_urls_with_md5 (event )
241
+ if not image_urls_with_md5 :
238
242
await IMAGE_SEARCH_MODE .reject ()
239
243
if "ARGS" in matcher .state :
240
244
mode , purge = matcher .state ["ARGS" ]
@@ -247,11 +251,11 @@ async def handle_image_search(bot: Bot, event: MessageEvent, matcher: Matcher) -
247
251
)
248
252
async with network as client :
249
253
with Cache ("picsearch_cache" ) as _cache :
250
- for index , value in enumerate (image_urls ):
254
+ for index , ( url , md5 ) in enumerate (image_urls_with_md5 ):
251
255
await send_result_message (
252
256
bot ,
253
257
event ,
254
- await image_search (value , mode , purge , _cache , client ),
255
- index if len (image_urls ) > 1 else None ,
258
+ await image_search (url , md5 , mode , purge , _cache , client ),
259
+ index if len (image_urls_with_md5 ) > 1 else None ,
256
260
)
257
261
_cache .expire ()
0 commit comments