mirror of
https://github.com/langbot-app/LangBot.git
synced 2026-06-04 12:56:02 +00:00
* Initial plan * Add package structure and resource path utilities - Created langbot/ package with __init__.py and __main__.py entry point - Added paths utility to find frontend and resource files from package installation - Updated config loading to use resource paths - Updated frontend serving to use resource paths - Added MANIFEST.in for package data inclusion - Updated pyproject.toml with build system and entry points Co-authored-by: RockChinQ <45992437+RockChinQ@users.noreply.github.com> * Add PyPI publishing workflow and update license - Created GitHub Actions workflow to build frontend and publish to PyPI - Added license field to pyproject.toml to fix deprecation warning - Updated .gitignore to exclude build artifacts - Tested package building successfully Co-authored-by: RockChinQ <45992437+RockChinQ@users.noreply.github.com> * Add PyPI installation documentation - Created PYPI_INSTALLATION.md with detailed installation and usage instructions - Updated README.md to feature uvx/pip installation as recommended method - Updated README_EN.md with same changes for English documentation Co-authored-by: RockChinQ <45992437+RockChinQ@users.noreply.github.com> * Address code review feedback - Made package-data configuration more specific to langbot package only - Improved path detection with caching to avoid repeated file I/O - Removed sys.path searching which was incorrect for package data - Removed interactive input() call for non-interactive environment compatibility - Simplified error messages for version check Co-authored-by: RockChinQ <45992437+RockChinQ@users.noreply.github.com> * Fix code review issues - Use specific exception types instead of bare except - Fix misleading comments about directory levels - Remove redundant existence check before makedirs with exist_ok=True - Use context manager for file opening to ensure proper cleanup Co-authored-by: RockChinQ <45992437+RockChinQ@users.noreply.github.com> * Simplify package configuration and document behavioral differences - Removed redundant package-data configuration, relying on MANIFEST.in - Added documentation about behavioral differences between package and source installation - Clarified that include-package-data=true uses MANIFEST.in for data files Co-authored-by: RockChinQ <45992437+RockChinQ@users.noreply.github.com> * chore: update pyproject.toml * chore: try pack templates in langbot/ * chore: update * chore: update * chore: update * chore: update * chore: update * chore: adjust dir structure * chore: fix imports * fix: read default-pipeline-config.json * fix: read default-pipeline-config.json * fix: tests * ci: publish pypi * chore: bump version 4.6.0-beta.1 for testing * chore: add templates/** * fix: send adapters and requesters icons * chore: bump version 4.6.0b2 for testing * chore: add platform field for docker-compose.yaml --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: RockChinQ <45992437+RockChinQ@users.noreply.github.com> Co-authored-by: Junyan Qin <rockchinq@gmail.com>
93 lines
3.5 KiB
Python
93 lines
3.5 KiB
Python
from langbot.libs.wechatpad_api.api.login import LoginApi
|
|
from langbot.libs.wechatpad_api.api.friend import FriendApi
|
|
from langbot.libs.wechatpad_api.api.message import MessageApi
|
|
from langbot.libs.wechatpad_api.api.user import UserApi
|
|
from langbot.libs.wechatpad_api.api.downloadpai import DownloadApi
|
|
from langbot.libs.wechatpad_api.api.chatroom import ChatRoomApi
|
|
|
|
|
|
class WeChatPadClient:
|
|
def __init__(self, base_url, token, logger=None):
|
|
self._login_api = LoginApi(base_url, token)
|
|
self._friend_api = FriendApi(base_url, token)
|
|
self._message_api = MessageApi(base_url, token)
|
|
self._user_api = UserApi(base_url, token)
|
|
self._download_api = DownloadApi(base_url, token)
|
|
self._chatroom_api = ChatRoomApi(base_url, token)
|
|
self.logger = logger
|
|
|
|
def get_token(self, admin_key, day: int):
|
|
"""获取token"""
|
|
return self._login_api.get_token(admin_key, day)
|
|
|
|
def get_login_qr(self, Proxy: str = ''):
|
|
"""登录二维码"""
|
|
return self._login_api.get_login_qr(Proxy=Proxy)
|
|
|
|
def awaken_login(self, Proxy: str = ''):
|
|
"""唤醒登录"""
|
|
return self._login_api.wake_up_login(Proxy=Proxy)
|
|
|
|
def log_out(self):
|
|
"""退出登录"""
|
|
return self._login_api.logout()
|
|
|
|
def get_login_status(self):
|
|
"""获取登录状态"""
|
|
return self._login_api.get_login_status()
|
|
|
|
def send_text_message(self, to_wxid, message, ats: list = []):
|
|
"""发送文本消息"""
|
|
return self._message_api.post_text(to_wxid, message, ats)
|
|
|
|
def send_image_message(self, to_wxid, img_url, ats: list = []):
|
|
"""发送图片消息"""
|
|
return self._message_api.post_image(to_wxid, img_url, ats)
|
|
|
|
def send_voice_message(self, to_wxid, voice_data, voice_forma, voice_duration):
|
|
"""发送音频消息"""
|
|
return self._message_api.post_voice(to_wxid, voice_data, voice_forma, voice_duration)
|
|
|
|
def send_app_message(self, to_wxid, app_message, type):
|
|
"""发送app消息"""
|
|
return self._message_api.post_app_msg(to_wxid, app_message, type)
|
|
|
|
def send_emoji_message(self, to_wxid, emoji_md5, emoji_size):
|
|
"""发送emoji消息"""
|
|
return self._message_api.post_emoji(to_wxid, emoji_md5, emoji_size)
|
|
|
|
def revoke_msg(self, to_wxid, msg_id, new_msg_id, create_time):
|
|
"""撤回消息"""
|
|
return self._message_api.revoke_msg(to_wxid, msg_id, new_msg_id, create_time)
|
|
|
|
def get_profile(self):
|
|
"""获取用户信息"""
|
|
return self._user_api.get_profile()
|
|
|
|
def get_qr_code(self, recover: bool = True, style: int = 8):
|
|
"""获取用户二维码"""
|
|
return self._user_api.get_qr_code(recover=recover, style=style)
|
|
|
|
def get_safety_info(self):
|
|
"""获取设备信息"""
|
|
return self._user_api.get_safety_info()
|
|
|
|
def update_head_img(self, head_img_base64):
|
|
"""上传用户头像"""
|
|
return self._user_api.update_head_img(head_img_base64)
|
|
|
|
def cdn_download(self, aeskey, file_type, file_url):
|
|
"""cdn下载"""
|
|
return self._download_api.send_download(aeskey, file_type, file_url)
|
|
|
|
def get_msg_voice(self, buf_id, length, msgid):
|
|
"""下载语音"""
|
|
return self._download_api.get_msg_voice(buf_id, length, msgid)
|
|
|
|
async def download_base64(self, url):
|
|
return await self._download_api.download_url_to_base64(download_url=url)
|
|
|
|
def get_chatroom_member_detail(self, chatroom_name):
|
|
"""查看群成员详情"""
|
|
return self._chatroom_api.get_chatroom_member_detail(chatroom_name)
|