✨ 提供qq协议端判断方法,广播添加to_me规则以及延迟 (#1858)

* ✨ 提供qq协议端判断方法

* 🩹 API重试添加额外错误捕获

* 🩹 广播添加延迟,添加to_me规则
This commit is contained in:
HibiKier
2025-02-24 09:33:06 +08:00
committed by GitHub
parent a6ddb726d3
commit f1d32bff89
5 changed files with 82 additions and 56 deletions
+56 -36
View File
@@ -1,3 +1,4 @@
import asyncio
from collections.abc import Awaitable, Callable
import random
from typing import Literal
@@ -156,43 +157,44 @@ class PlatformUtils:
返回:
UserData | None: 用户数据
"""
if interface := get_interface(bot):
member = None
user = None
if channel_id:
member = await interface.get_member(
SceneType.CHANNEL_TEXT, channel_id, user_id
)
if member:
user = member.user
elif group_id:
member = await interface.get_member(SceneType.GROUP, group_id, user_id)
if member:
user = member.user
else:
user = await interface.get_user(user_id)
if not user:
return None
if not (interface := get_interface(bot)):
return None
member = None
user = None
if channel_id:
member = await interface.get_member(
SceneType.CHANNEL_TEXT, channel_id, user_id
)
if member:
return UserData(
name=user.name or "",
card=member.nick,
user_id=user.id,
group_id=group_id,
channel_id=channel_id,
role=member.role.id if member.role else None,
join_time=int(member.joined_at.timestamp())
if member.joined_at
else None,
)
else:
return UserData(
name=user.name or "",
user_id=user.id,
group_id=group_id,
channel_id=channel_id,
)
return None
user = member.user
elif group_id:
member = await interface.get_member(SceneType.GROUP, group_id, user_id)
if member:
user = member.user
else:
user = await interface.get_user(user_id)
if not user:
return None
return (
UserData(
name=user.name or "",
card=member.nick,
user_id=user.id,
group_id=group_id,
channel_id=channel_id,
role=member.role.id if member.role else None,
join_time=(
int(member.joined_at.timestamp()) if member.joined_at else None
),
)
if member
else UserData(
name=user.name or "",
user_id=user.id,
group_id=group_id,
channel_id=channel_id,
)
)
@classmethod
async def get_user_avatar(
@@ -343,6 +345,23 @@ class PlatformUtils:
return "qq" if platform.startswith("qq") else platform
return "unknown"
@classmethod
def is_forward_merge_supported(cls, t: Bot | Uninfo) -> bool:
"""是否支持转发消息
参数:
t: bot | Uninfo
返回:
bool: 是否支持转发消息
"""
if not isinstance(t, Bot):
return t.basic["scope"] == SupportScope.qq_client
if interface := get_interface(t):
info = interface.basic_info()
return info["scope"] == SupportScope.qq_client
return False
@classmethod
async def get_group_list(
cls, bot: Bot, only_group: bool = False
@@ -539,6 +558,7 @@ async def broadcast_group(
target, _bot
)
logger.debug("发送成功", log_cmd, target=key)
await asyncio.sleep(random.randint(1, 3))
else:
logger.warning("target为空", log_cmd, target=key)
except Exception as e: