From ddb4a2c5b5ee27aecb822c1fd7e786bc4145e5ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=97=E8=BE=9E?= Date: Mon, 15 Sep 2025 11:27:21 +0000 Subject: [PATCH] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E6=96=87=E4=BB=B6=E8=87=B3?= =?UTF-8?q?=20/?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Publisher.py | 149 +++++++++++++++++++++++++++++++++++++++++++ Realm.py | 117 +++++++++++++++++++++++++++++++++ RealtimeCall.py | 28 ++++++++ SolarNetworkDrive.py | 56 ++++++++++++++++ Sticker.py | 118 ++++++++++++++++++++++++++++++++++ 5 files changed, 468 insertions(+) create mode 100644 Publisher.py create mode 100644 Realm.py create mode 100644 RealtimeCall.py create mode 100644 SolarNetworkDrive.py create mode 100644 Sticker.py diff --git a/Publisher.py b/Publisher.py new file mode 100644 index 0000000..e1fdf91 --- /dev/null +++ b/Publisher.py @@ -0,0 +1,149 @@ +from ProjectCfg import DOMAIN +from .CallServer import _make_request +from typing import Optional +###==========================发布者管理============================ +def GetPublisher(Authorization: str, name: str) -> dict: + """获取发布者信息""" + url = f"{DOMAIN}/publishers/{name}" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('GET', url, headers) + +def PatchPublisher(Authorization: str, name: str, nick: Optional[str] = None, bio: Optional[str] = None, picture_id: Optional[str] = None, background_id: Optional[str] = None) -> dict: + """修改发布者信息""" + body = { + "nick": nick, + "bio": bio, + "picture_id": picture_id, + "background_id": background_id, + } + url = f"{DOMAIN}/publishers/{name}" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('PATCH', url, headers, request_body=body, normal_codes=[201]) + +def DeletePublisher(Authorization: str, name: str) -> dict: + """删除发布者""" + url = f"{DOMAIN}/publishers/{name}" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('DELETE', url, headers, normal_codes=[204]) + +def GetPublisherStats(Authorization: str, name: str) -> dict: + """获取发布者统计信息""" + url = f"{DOMAIN}/publishers/{name}/stats" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('GET', url, headers) + +def GetPublishersOfAccountId(Authorization: str, account_id: str) -> dict: + """获取指定账户的发布者""" + url = f"{DOMAIN}/publishers/of/{account_id}" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('GET', url, headers) + +def GetPublishers(Authorization: str) -> dict: + """获取所有发布者""" + url = f"{DOMAIN}/publishers" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('GET', url, headers) + +def PostPublisherInvite(Authorization: str, name: str, related_user_id: str, role: int) -> dict: + """发送发布者邀请""" + body = {"related_user_id": related_user_id, "role": role} + url = f"{DOMAIN}/publishers/invites/{name}" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('POST', url, headers, request_body=body, normal_codes=[201]) + +def GetPublisherInvites(Authorization: str, name: str) -> dict: + """获取发布者邀请""" + url = f"{DOMAIN}/publishers/invites/{name}" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('GET', url, headers) + +def AcceptPublisherInvite(Authorization: str, name: str) -> dict: + """接受发布者邀请""" + url = f"{DOMAIN}/publishers/invites/{name}/accept" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('POST', url, headers, normal_codes=[201]) + +def DeclinePublisherInvite(Authorization: str, name: str) -> dict: + """拒绝发布者邀请""" + url = f"{DOMAIN}/publishers/invites/{name}/decline" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('POST', url, headers, normal_codes=[201]) + +def DeletePublisherMember(Authorization: str, name: str, member_id: str) -> dict: + """删除发布者成员""" + url = f"{DOMAIN}/publishers/{name}/members/{member_id}" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('DELETE', url, headers, normal_codes=[204]) + +def PostIndividualPublisher(Authorization: str, name: str, nick: Optional[str] = None, bio: Optional[str] = None, picture_id: Optional[str] = None, background_id: Optional[str] = None) -> dict: + """创建个人发布者""" + body = { + "name": name, + "nick": nick, + "bio": bio, + "picture_id": picture_id, + "background_id": background_id, + } + url = f"{DOMAIN}/publishers/individual" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('POST', url, headers, request_body=body, normal_codes=[201]) + +def PostOrganizationPublisher(Authorization: str, name: str, realm_slug: str) -> dict: + """创建组织发布者""" + body = {"name": name, "realm_slug": realm_slug} + url = f"{DOMAIN}/publishers/organization/{realm_slug}" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('POST', url, headers, request_body=body, normal_codes=[201]) + +def GetPublisherMembers(Authorization: str, name: str, offset: int = 0, take: int = 20) -> dict: + """获取发布者成员""" + url = f"{DOMAIN}/publishers/{name}/members" + headers = {'accept': 'application/json', 'Authorization': Authorization} + params = {"offset": offset, "take": take} + return _make_request('GET', url, headers, params=params) + +def GetMyPublisherMember(Authorization: str, name: str) -> dict: + """获取我的发布者成员信息""" + url = f"{DOMAIN}/publishers/{name}/members/me" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('GET', url, headers) + +def PostPublisherFeature(Authorization: str, name: str, flag: str, expired_at: Optional[str] = None) -> dict: + """创建发布者特性""" + body = {"flag": flag, "expired_at": expired_at} + url = f"{DOMAIN}/publishers/{name}/features" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('POST', url, headers, request_body=body, normal_codes=[201]) + +def DeletePublisherFeature(Authorization: str, name: str, flag: str) -> dict: + """删除发布者特性""" + url = f"{DOMAIN}/publishers/{name}/features/{flag}" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('DELETE', url, headers, normal_codes=[204]) + +def GetPublisherSubscriptions(Authorization: str) -> dict: + """获取发布者订阅状态""" + url = f"{DOMAIN}/publishers/subscriptions" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('GET', url, headers) + +def GetPublisherSubscription(Authorization: str, name: str) -> dict: + """获取特定发布者的订阅状态""" + url = f"{DOMAIN}/api/publishers/{name}/subscription" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('GET', url, headers) + +def PostPublisherSubscribe(Authorization: str, name: str, subscribeRequest: Optional[dict] = None,tier:int=0) -> dict: + """订阅特定发布者""" + RequestsBody={ + "tier":tier + } + url = f"{DOMAIN}/api/publishers/{name}/subscribe" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('POST', url, headers, request_body=subscribeRequest) + +def PostPublisherUnsubscribe(Authorization: str, name: str) -> dict: + """取消订阅特定发布者""" + url = f"{DOMAIN}/api/publishers/{name}/unsubscribe" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('POST', url, headers, normal_codes=[204]) diff --git a/Realm.py b/Realm.py new file mode 100644 index 0000000..159ba48 --- /dev/null +++ b/Realm.py @@ -0,0 +1,117 @@ +from ProjectCfg import DOMAIN +from .CallServer import _make_request + +###==========================领域部分========================== + +def GetRealm(slug:str,Authorization: str = '') -> dict: + """获取领域详情""" + url = f"{DOMAIN}/realms/{slug}" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('GET', url, headers) + +def ModifyRealm(slug:str,Authorization: str ,name:str='',description:str='',picture_id:str='',background_id:str='',is_community:bool=True,is_public:bool=True) -> dict: + """修改领域""" + request_body={ + "slug": slug, + "name": name, + "description": description, + "picture_id": picture_id, + "background_id": background_id, + "is_community": is_community, + "is_public": is_public +} + url = f"{DOMAIN}/realms/{slug}" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('PATCH', url, headers,request_body=request_body,normal_codes=[201]) + +def DeleteRealm(slug:str,Authorization: str) -> dict: + """删除领域""" + url = f"{DOMAIN}/realms/{slug}" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('DELETE', url, headers,normal_codes=[204]) + +def GetJoinedRealms(Authorization: str) -> dict: + """获取加入的领域""" + url = f"{DOMAIN}/realms" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('GET', url, headers) + +def CreateRealm(slug:str,Authorization: str,name:str='',description:str='',picture_id:str='',background_id:str='',is_community:bool=True,is_public:bool=True) -> dict: + """创建领域""" + request_body={ + "slug": slug, + "name": name, + "description": description, + "picture_id": picture_id, + "background_id": background_id, + "is_community": is_community, + "is_public": is_public +} + url = f"{DOMAIN}/realms" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('POST', url, headers,request_body=request_body,normal_codes=[201]) + +def GetRealmInvites(Authorization: str) -> dict: + """获取领域邀请""" + url = f"{DOMAIN}/realms/invites" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('GET', url, headers) + +def SendRealmInvite(slug:str,Authorization: str,user_id:str,role:int=0) -> dict: + """发送领域邀请""" + request_body={ + "related_user_id": user_id, + "role": role +} + url = f"{DOMAIN}/realms/invites/{slug}" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('POST', url, headers,request_body=request_body,normal_codes=[201]) + +def AcceptRealmInvite(slug:str,Authorization: str) -> dict: + """接受领域邀请""" + url = f"{DOMAIN}/realms/invites/{slug}/accept" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('POST', url, headers,normal_codes=[201]) + +def DeclineRealmInvite(slug:str,Authorization: str) -> dict: + """拒绝领域邀请""" + url = f"{DOMAIN}/realms/invites/{slug}/decline" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('POST', url, headers,normal_codes=[201]) + +def GetRealmMembers(slug:str,Authorization: str,offset:int=0,take:int=20,withStatus:bool=False) -> dict: + """获取领域成员""" + url = f"{DOMAIN}/realms/{slug}/members" + params = {"offset":offset,"take":take,"withStatus":withStatus} + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('GET', url, headers,params=params) + +def GetRealmMemberMe(slug:str,Authorization: str) -> dict: + """获取领域成员""" + url = f"{DOMAIN}/realms/{slug}/members/me" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('GET', url, headers) + +def LeaveRealm(slug:str,Authorization: str) -> dict: + """退出领域""" + url = f"{DOMAIN}/realms/{slug}/members/me" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('DELETE', url, headers,normal_codes=[204]) + +def JoinRealm(slug:str,Authorization: str) -> dict: + """加入领域""" + url = f"{DOMAIN}/realms/{slug}/members/me" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('POST', url, headers,normal_codes=[201]) + +def KickMemberRealm(slug:str,Authorization: str,user_id:str) -> dict: + """踢出领域成员""" + url = f"{DOMAIN}/realms/{slug}/members/{user_id}" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('DELETE', url, headers,normal_codes=[204]) + +def SetMemberRoleRealm(slug:str,Authorization: str,user_id:str,role:int) -> dict: + """设置领域成员角色""" + url = f"{DOMAIN}/realms/{slug}/members/{user_id}/role" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('PATCH', url, headers,normal_codes=[201],request_body=role) diff --git a/RealtimeCall.py b/RealtimeCall.py new file mode 100644 index 0000000..e8dda71 --- /dev/null +++ b/RealtimeCall.py @@ -0,0 +1,28 @@ +from ProjectCfg import DOMAIN +from.CallServer import _make_request + +###==========================实时聊天========================== + +def GetRealtimeChat(Authorization: str,roomid:str ) -> dict: + """获取实时聊天""" + url = f"{DOMAIN}/chat/realtime/{roomid}" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('GET', url, headers) + +def CreateRealtimeChat(Authorization: str,roomid:str ) -> dict: + """创建实时聊天""" + url = f"{DOMAIN}/chat/realtime/{roomid}" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('POST', url, headers,normal_codes=[201]) + +def LeaveRealtimeChat(Authorization: str,roomid:str ) -> dict: + """离开实时聊天""" + url = f"{DOMAIN}/chat/realtime/{roomid}" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('DELETE', url, headers,normal_codes=[204]) + +def JoinRealtimeChat(Authorization: str,roomid:str ) -> dict: + """加入实时聊天""" + url = f"{DOMAIN}/chat/realtime/{roomid}/join" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('GET', url, headers) \ No newline at end of file diff --git a/SolarNetworkDrive.py b/SolarNetworkDrive.py new file mode 100644 index 0000000..a06a82d --- /dev/null +++ b/SolarNetworkDrive.py @@ -0,0 +1,56 @@ +###官方的文件分享池API +###By Liang-work(NRFF&nanci) +###Version 1.0 +###License: BSD + +DOMAIN = 'https://api.solian.app' +import base64 +import os +from tusclient import client +import requests +import traceback + +def DownloadFileFromServer(ID:str,SavePath:str='%temp%/') -> bytes: + """ + 从服务器下载文件 + :param ID: 文件ID + :param SavePath: 本地保存路径 + :return: + """ + response = requests.get(f"{DOMAIN}/drive/files/{ID}") + if response.status_code == 200: + with open(SavePath, "wb") as f: + f.write(response.content) + return response.status_code + else: + return response.status_code + + +def UploadFileToServer(token:str,file_path,file_type,pool=1,chunk_size=1024*1024*10) ->str: + """ + 使用tuspy上传文件 + :param file_path: 文件路径 + :param file_type: 文件类型 accept_types: ["image/*", "video/*", "audio/*"] + :param pool: 存储池(默认:Solar Network Shared) + :param chunk_size: 分块大小 + :return: 文件id + """ + from tusclient import client + pools = [ + "07bc8e33-f3aa-4e35-83c2-c63b2b67d8cd", # 雨云存储 中国 + "c53136a6-9152-4ecb-9f88-43c41438c23e", # Solar Network Shared + "500e5ed8-bd44-4359-bc0a-ec85e2adf447", # Solar Network Driver + ] + headers = { + "Authorization": f"Bearer {token}", + "X-FilePool": pools[pool] + } + tus = client.TusClient('https://api.solian.app/drive/tus') + tus.set_headers(headers) + file = tus.uploader(file_path, chunk_size=chunk_size) + file.metadata = { + "content-type": file_type, + "filename": os.path.basename(file_path) + } + file.upload() + return file.url.split("/")[-1] \ No newline at end of file diff --git a/Sticker.py b/Sticker.py new file mode 100644 index 0000000..47c6a3e --- /dev/null +++ b/Sticker.py @@ -0,0 +1,118 @@ +from ProjectCfg import DOMAIN +from .CallServer import _make_request + +###==========================贴纸========================== + +def GetStickerPackageList(Authorization: str,offset:int=0,take:int=20,pub:str='',order:str='',query:str="") -> dict: + """获取贴纸包列表""" + url = f"{DOMAIN}/stickers" + headers = {'accept': 'application/json', 'Authorization': Authorization} + params = {"offset":offset,"take":take,"pub":pub,"order":order,"query":query} + return _make_request('GET', url, headers,params=params) + +def CreateStickerPackage(Authorization: str,pub:str,name:str,description:str,prefix:str) -> dict: + """创建贴纸包""" + url = f"{DOMAIN}/stickers" + RequestsBody={ + "name":name, + "description": description, + "prefix": prefix +} + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('POST', url, headers,request_body=RequestsBody,params={"pub":pub},normal_codes=[201]) + +def GetMyStickerList(Authorization: str) -> dict: + """获取我的贴纸列表""" + url = f"{DOMAIN}/stickers/me" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('GET', url, headers) + +def GetAStickerPackageInfo(Authorization: str,sticker_id:str) -> dict: + """获取贴纸包信息""" + url = f"{DOMAIN}/stickers/{sticker_id}" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('GET', url, headers) + +def ModifyStickerPackage(Authorization: str,sticker_id:str,name:str,description:str,prefix:str) -> dict: + """修改贴纸包""" + url = f"{DOMAIN}/stickers/{sticker_id}" + RequestsBody={ + "name":name, + "description": description, + "prefix": prefix +} + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('PATCH', url, headers,request_body=RequestsBody,normal_codes=[201]) + +def DeleteStickerPackage(Authorization: str,sticker_id:str) -> dict: + """删除贴纸包""" + url = f"{DOMAIN}/stickers/{sticker_id}" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('DELETE', url, headers,normal_codes=[204]) + +def GetStickerPackageContent(Authorization: str,sticker_id:str) -> dict: + """获取贴纸包内容""" + url = f"{DOMAIN}/stickers/{sticker_id}/content" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('GET', url, headers) + +def ModifyStickerPackageContent(Authorization: str,sticker_id:str,slug:str,image_id:str) -> dict: + """修改贴纸包内容""" + url = f"{DOMAIN}/stickers/{sticker_id}/content" + RequestsBody={ + "slug":slug, + "image_id": image_id +} + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('POST', url, headers,request_body=RequestsBody,normal_codes=[201]) +def GetStickerInfo(Authorization: str,sticker_id:str) -> dict: + """获取贴纸信息""" + url = f"{DOMAIN}/stickers/lookup/{sticker_id}" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('GET', url, headers) + +def GetStickerImg(Authorization: str,sticker_id:str) -> dict: + """获取贴纸图片""" + url = f"{DOMAIN}/stickers/lookup/{sticker_id}/open" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('GET', url, headers) + +def GetPackageStickerInfo(Authorization: str,packid:str,id:str) -> dict: + """获取贴纸包信息""" + url = f"{DOMAIN}/stickers/{packid}/content/{id}" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('GET', url, headers) + +def CreateStickerImageInPackage(Authorization: str,packid:str,slug:str,image_id:str) -> dict: + """创建贴纸包图片""" + url = f"{DOMAIN}/stickers/{packid}/content" + RequestsBody={ + "slug":slug, + "image_id": image_id +} + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('PATCH', url, headers,request_body=RequestsBody,normal_codes=[201]) + +def DeleteStickerImageInPackage(Authorization: str,packid:str,id:str) -> dict: + """删除贴纸包图片""" + url = f"{DOMAIN}/stickers/{packid}/content/{id}" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('DELETE', url, headers,normal_codes=[204]) + +def GetSelfHadStickerPackageInfo(Authorization: str,packid:str) -> dict: + """获取自己已拥有的贴纸包信息""" + url = f"{DOMAIN}/stickers/{packid}/own" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('GET', url, headers) + +def AddStickerPackage(Authorization: str,packid:str) -> dict: + """添加贴纸包""" + url = f"{DOMAIN}/stickers/{packid}/own" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('POST', url, headers,normal_codes=[201]) + +def RemoveStickerPackage(Authorization: str,packid:str) -> dict: + """移除贴纸包""" + url = f"{DOMAIN}/stickers/{packid}/own" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('DELETE', url, headers,normal_codes=[204]) \ No newline at end of file