1- from typing import Any , Optional
1+ from typing import Any , Optional , Union
22from typing_extensions import override
33
4- from meme_generator import Image , Meme , get_meme
5- from nonebot import get_available_plugin_names , get_driver
4+ from meme_generator import (
5+ DeserializeError ,
6+ Image ,
7+ ImageAssetMissing ,
8+ ImageDecodeError ,
9+ ImageEncodeError ,
10+ ImageNumberMismatch ,
11+ Meme ,
12+ MemeFeedback ,
13+ TextNumberMismatch ,
14+ TextOverLength ,
15+ get_meme ,
16+ )
617
718from ..base import BaseMemeGenerator , MemeMetadata
819
@@ -21,9 +32,49 @@ def transform_meme(meme: Meme):
2132 ),
2233 )
2334
35+ @staticmethod
36+ def format_error (
37+ e : Union [
38+ ImageDecodeError ,
39+ ImageEncodeError ,
40+ ImageAssetMissing ,
41+ DeserializeError ,
42+ ImageNumberMismatch ,
43+ TextNumberMismatch ,
44+ TextOverLength ,
45+ MemeFeedback ,
46+ ],
47+ ) -> str :
48+ if isinstance (e , ImageDecodeError ):
49+ return f"Image decode error: { e .error } "
50+ if isinstance (e , ImageEncodeError ):
51+ return f"Image encode error: { e .error } "
52+ if isinstance (e , ImageAssetMissing ):
53+ return f"Image asset missing: { e .path } "
54+ if isinstance (e , DeserializeError ):
55+ return f"Deserialize error: { e .error } "
56+ if isinstance (e , ImageNumberMismatch ):
57+ return (
58+ f"Image number mismatch: expected between { e .min } and { e .max } , "
59+ f"got { e .actual } "
60+ )
61+ if isinstance (e , TextNumberMismatch ):
62+ return (
63+ f"Text number mismatch: expected between { e .min } and { e .max } , "
64+ f"got { e .actual } "
65+ )
66+ if isinstance (e , TextOverLength ):
67+ return f"Text over length: '{ e .text } '"
68+ if isinstance (e , MemeFeedback ):
69+ return f"Meme feedback: { e .feedback } "
70+ return str (e )
71+
2472 @override
2573 async def get_meme (self , name : str ) -> MemeMetadata :
26- return self .transform_meme (get_meme (name ))
74+ meme = get_meme (name )
75+ if not meme :
76+ raise ValueError (f"Meme '{ name } ' not found" )
77+ return self .transform_meme (meme )
2778
2879 @override
2980 async def generate (
@@ -40,17 +91,7 @@ async def generate(
4091 )
4192 if isinstance (r , bytes ):
4293 return r
43- raise RuntimeError (f"{ type (r ).__name__ } : { r } " )
44-
45-
46- if "nonebot_plugin_memes" not in get_available_plugin_names ():
47- from meme_generator .resources import check_resources_in_background
48-
49- driver = get_driver ()
50-
51- @driver .on_startup
52- async def _ ():
53- check_resources_in_background ()
94+ raise RuntimeError (self .format_error (r ))
5495
5596
5697meme_generator = MemeGenerator ()
0 commit comments