66from json import dumps , loads
77from types import FunctionType
88from collections .abc import Iterable , Sequence , Awaitable
9- from typing_extensions import Self , TypeAlias , SupportsIndex
9+ from typing_extensions import Self , TypeAlias , SupportsIndex , deprecated
1010from typing import TYPE_CHECKING , Any , Union , Literal , TypeVar , Callable , NoReturn , Protocol , overload
1111
1212from tarina import lang
@@ -1212,6 +1212,7 @@ def rstrip(self, *segments: str | Segment | type[Segment]) -> Self:
12121212 break
12131213 return self .__class__ (copy )
12141214
1215+ @deprecated ("`UniMessage.generate` is deprecated, use `UniMessage.of()` and `await msg.attach_reply()` instead" )
12151216 @staticmethod
12161217 async def generate (
12171218 * ,
@@ -1230,23 +1231,9 @@ async def generate(
12301231 message = event .get_message ()
12311232 except Exception :
12321233 return UniMessage ()
1233- if not adapter :
1234- if not bot :
1235- try :
1236- bot = current_bot .get ()
1237- except LookupError as e :
1238- raise SerializeFailed (lang .require ("nbp-uniseg" , "bot_missing" )) from e
1239- _adapter = bot .adapter
1240- adapter = _adapter .get_name ()
1241- if not (fn := alter_get_builder (adapter )):
1242- raise SerializeFailed (lang .require ("nbp-uniseg" , "unsupported" ).format (adapter = adapter ))
1243- result = UniMessage (fn .generate (message ))
1244- if (event and bot ) and (_reply := await fn .extract_reply (event , bot )):
1245- if result .has (Reply ) and result .index (Reply ) == 0 :
1246- result .pop (0 )
1247- result .insert (0 , _reply )
1248- return result
1234+ return await UniMessage .of (message , bot = bot , adapter = adapter ).attach_reply (event , bot )
12491235
1236+ @deprecated ("`UniMessage.generate_sync` is deprecated, use `UniMessage.of` instead" )
12501237 @staticmethod
12511238 def generate_sync (
12521239 * ,
@@ -1265,6 +1252,17 @@ def generate_sync(
12651252 message = event .get_message ()
12661253 except Exception :
12671254 return UniMessage ()
1255+ return UniMessage .of (message , bot = bot , adapter = adapter )
1256+
1257+ generate_without_reply = generate_sync
1258+
1259+ @classmethod
1260+ def of (
1261+ cls ,
1262+ message : Message ,
1263+ bot : Bot | None = None ,
1264+ adapter : str | None = None ,
1265+ ):
12681266 if not adapter :
12691267 if not bot :
12701268 try :
@@ -1277,7 +1275,24 @@ def generate_sync(
12771275 raise SerializeFailed (lang .require ("nbp-uniseg" , "unsupported" ).format (adapter = adapter ))
12781276 return UniMessage (fn .generate (message ))
12791277
1280- generate_without_reply = generate_sync
1278+ async def attach_reply (self , event : Event | None = None , bot : Bot | None = None ) -> Self :
1279+ if not event :
1280+ try :
1281+ event = current_event .get ()
1282+ except LookupError as e :
1283+ raise SerializeFailed (lang .require ("nbp-uniseg" , "event_missing" )) from e
1284+ if not bot :
1285+ try :
1286+ bot = current_bot .get ()
1287+ except LookupError as e :
1288+ raise SerializeFailed (lang .require ("nbp-uniseg" , "bot_missing" )) from e
1289+ if not (fn := alter_get_builder (bot .adapter .get_name ())):
1290+ raise SerializeFailed (lang .require ("nbp-uniseg" , "unsupported" ).format (adapter = bot .adapter .get_name ()))
1291+ if _reply := await fn .extract_reply (event , bot ):
1292+ if self .has (Reply ) and self .index (Reply ) == 0 :
1293+ self .pop (0 )
1294+ self .insert (0 , _reply ) # type: ignore
1295+ return self
12811296
12821297 def _handle_i18n (self , extra : dict , * args , ** kwargs ):
12831298 segments = [* self ]
0 commit comments