Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ dependencies = [
"pyside6-fluent-widgets==1.11.1",
"pyyaml==6.0.2",
"requests==2.33.0",
"websocket-client==1.9.2",
"pyuac==0.0.3",
"ruff>=0.15.5",
]
Expand Down
9 changes: 7 additions & 2 deletions src/one_dragon/base/operation/notify_pool.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,13 @@ class NotifyPool:
last_image 属性从 items 尾部遍历获取,用于 APP 级别结束通知附带截图。
"""

DEFAULT_MAX_ITEMS: int = 200
DEFAULT_MAX_IMAGES: int = 10

def __init__(self) -> None:
self.items: list[NotifyPoolItem] = []
self.max_items: int = 200
self.max_images: int = 10
self.max_items: int = self.DEFAULT_MAX_ITEMS
self.max_images: int = self.DEFAULT_MAX_IMAGES
self._image_count: int = 0

def add(self, content: str, image: MatLike | None = None) -> None:
Expand Down Expand Up @@ -62,4 +65,6 @@ def last_image(self) -> MatLike | None:

def clear(self) -> None:
self.items.clear()
self.max_items = self.DEFAULT_MAX_ITEMS
self.max_images = self.DEFAULT_MAX_IMAGES
self._image_count = 0
27 changes: 21 additions & 6 deletions src/one_dragon/base/push/channel/discord.py
Original file line number Diff line number Diff line change
Expand Up @@ -114,22 +114,22 @@ def push(

# 发送消息
message_url = f"{api_host}/channels/{channel_id}/messages"
message_payload = {"content": f"{title}\n{content}"}
message_payload = self._build_message_payload(title, content, image is not None)

files = None
if image is not None:
image_data = self.image_to_bytes(image)
if image_data is not None:
image_data.seek(0)
files = {'file': ('image.png', image_data, 'image/png')}
data = {'payload_json': json.dumps(message_payload)}
files = {'files[0]': ('screenshot.jpg', image_data, 'image/jpeg')}
data = {'payload_json': json.dumps(message_payload, ensure_ascii=False)}
if "Content-Type" in headers:
del headers["Content-Type"]
else:
data = json.dumps(message_payload)
data = json.dumps(self._build_message_payload(title, content), ensure_ascii=False)
headers["Content-Type"] = "application/json"
else:
data = json.dumps(message_payload)
data = json.dumps(message_payload, ensure_ascii=False)
headers["Content-Type"] = "application/json"

response = requests.post(message_url, headers=headers, data=data, files=files, timeout=30)
Expand All @@ -141,6 +141,21 @@ def push(
log.error("Discord 推送异常", exc_info=True)
return False, f"Discord 推送异常: {str(e)}"

@staticmethod
def _build_message_payload(title: str, content: str, with_thumbnail: bool = False) -> dict:
if not with_thumbnail:
return {"content": f"{title}\n{content}"}

return {
"embeds": [
{
"title": title,
Comment thread
Usagi-wusaqi marked this conversation as resolved.
Resolved
"description": content,
"thumbnail": {"url": "attachment://screenshot.jpg"},
}
],
}

def validate_config(self, config: dict[str, str]) -> tuple[bool, str]:
"""
验证 Discord 配置
Expand All @@ -160,4 +175,4 @@ def validate_config(self, config: dict[str, str]) -> tuple[bool, str]:
if len(user_id) == 0:
return False, "用户 ID 不能为空"

return True, "配置验证通过"
return True, "配置验证通过"
29 changes: 26 additions & 3 deletions src/one_dragon/base/push/channel/one_bot.py
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,7 @@ def push(
url += "" if url.endswith("/send_msg") else "/send_msg"

headers = {'Content-Type': "application/json"}
proxies = self.get_proxy(proxy_url)
message = [{"type": "text", "data": {"text": f"{title}\n{content}"}}]

if image is not None:
Expand All @@ -112,7 +113,13 @@ def push(
data_private["message_type"] = "private"
data_private["user_id"] = user_id
try:
response_private = requests.post(url, data=json.dumps(data_private), headers=headers, timeout=15)
response_private = requests.post(
url,
data=json.dumps(data_private),
headers=headers,
proxies=proxies,
timeout=15,
)
response_private.raise_for_status()
result_private = response_private.json()

Expand All @@ -133,7 +140,13 @@ def push(
data_group["message_type"] = "group"
data_group["group_id"] = group_id
try:
response_group = requests.post(url, data=json.dumps(data_group), headers=headers, timeout=15)
response_group = requests.post(
url,
data=json.dumps(data_group),
headers=headers,
proxies=proxies,
timeout=15,
)
response_group.raise_for_status()
result_group = response_group.json()

Expand Down Expand Up @@ -212,11 +225,18 @@ def _send_forward(
url: str,
data: dict,
headers: dict[str, str],
proxies: dict[str, str | None],
label: str,
) -> tuple[bool, str]:
"""发送单批合并转发请求"""
try:
resp = requests.post(url, data=json.dumps(data), headers=headers, timeout=30)
resp = requests.post(
url,
data=json.dumps(data),
headers=headers,
proxies=proxies,
timeout=30,
)
resp.raise_for_status()
result = resp.json()
if result.get('status') == 'ok':
Expand Down Expand Up @@ -255,6 +275,7 @@ def push_merged(
token = config.get('TOKEN', '')

headers = {'Content-Type': 'application/json'}
proxies = self.get_proxy(proxy_url)
if token and len(token) > 0:
headers['Authorization'] = f'Bearer {token}'

Expand Down Expand Up @@ -293,6 +314,7 @@ def push_merged(
base_url + '/send_private_forward_msg',
{'user_id': user_id, 'messages': batch},
headers,
proxies,
f'私聊合并转发{suffix}',
)
if ok:
Expand All @@ -305,6 +327,7 @@ def push_merged(
base_url + '/send_group_forward_msg',
{'group_id': group_id, 'messages': batch},
headers,
proxies,
f'群聊合并转发{suffix}',
)
if ok:
Expand Down
Loading