@@ -71,21 +71,27 @@ class Model:
7171 _session .headers ["User-Agent" ] = USER_AGENT
7272
7373 @classmethod
74- def _get (cls , url : str ) -> "dict[str]" :
74+ def _get (
75+ cls , url : str , params : dict = None , check : bool = True
76+ ) -> "dict[str]" :
7577 r = cls ._session .get (
7678 url ,
79+ params = params ,
7780 headers = {"X-Luogu-Type" : "content-only" },
7881 )
7982 r .raise_for_status ()
8083 data = r .json ()
81- if data ["code" ] == 404 :
82- raise NotFoundHttpException (data ["currentData" ]["errorMessage" ])
83- elif data ["code" ] == 403 :
84- raise AccessDeniedHttpException (
85- data ["currentData" ]["errorMessage" ]
86- )
87- elif data ["code" ] >= 400 :
88- raise HttpException (data ["currentData" ]["errorMessage" ])
84+ if check :
85+ if data ["code" ] == 404 :
86+ raise NotFoundHttpException (
87+ data ["currentData" ]["errorMessage" ]
88+ )
89+ elif data ["code" ] == 403 :
90+ raise AccessDeniedHttpException (
91+ data ["currentData" ]["errorMessage" ]
92+ )
93+ elif data ["code" ] >= 400 :
94+ raise HttpException (data ["currentData" ]["errorMessage" ])
8995 return data
9096
9197 @classmethod
@@ -230,6 +236,19 @@ def get_problem(p: dict) -> Problem:
230236 get_problem ,
231237 )
232238
239+ @classmethod
240+ def search (cls , keyword : str ) -> "list[User]" :
241+ """根据 UID 或用户名搜索用户
242+
243+ :param str keyword: 搜索关键字
244+ """
245+ users = cls ._get (
246+ "https://www.luogu.com.cn/api/user/search" ,
247+ {"keyword" : keyword },
248+ False ,
249+ )["users" ]
250+ return LazyList (users , lambda u : User (u ["uid" ]))
251+
233252
234253class Paste (Model ):
235254 """剪贴板
0 commit comments