mirror of
https://github.com/zhenxun-org/zhenxun_bot.git
synced 2026-10-12 23:40:03 +08:00
✨ 提供qq协议端判断方法,广播添加to_me规则以及延迟 (#1858)
* ✨ 提供qq协议端判断方法 * 🩹 API重试添加额外错误捕获 * 🩹 广播添加延迟,添加to_me规则
This commit is contained in:
@@ -29,6 +29,7 @@ _flmt = FreqLimiter(300)
|
||||
async def _(
|
||||
matcher: Matcher, bot: Bot, event: Event, state: T_State, session: EventSession
|
||||
):
|
||||
extra = {}
|
||||
if plugin := matcher.plugin:
|
||||
if metadata := plugin.metadata:
|
||||
extra = metadata.extra
|
||||
@@ -66,7 +67,12 @@ async def _(
|
||||
time_str = f"{hours} 小时 {minute}分钟"
|
||||
else:
|
||||
time_str = f"{minute} 分钟"
|
||||
if time != -1 and ban_result and _flmt.check(user_id):
|
||||
if (
|
||||
not extra.get("ignore_prompt")
|
||||
and time != -1
|
||||
and ban_result
|
||||
and _flmt.check(user_id)
|
||||
):
|
||||
_flmt.start_cd(user_id)
|
||||
await MessageUtils.build_message(
|
||||
[
|
||||
|
||||
@@ -5,6 +5,7 @@ from nonebot.adapters import Bot
|
||||
from nonebot.params import Command
|
||||
from nonebot.permission import SUPERUSER
|
||||
from nonebot.plugin import PluginMetadata
|
||||
from nonebot.rule import to_me
|
||||
from nonebot_plugin_alconna import Text as alcText
|
||||
from nonebot_plugin_alconna import UniMsg
|
||||
from nonebot_plugin_session import EventSession
|
||||
@@ -41,7 +42,9 @@ __plugin_meta__ = PluginMetadata(
|
||||
).to_dict(),
|
||||
)
|
||||
|
||||
_matcher = on_command("广播", priority=1, permission=SUPERUSER, block=True)
|
||||
_matcher = on_command(
|
||||
"广播", priority=1, permission=SUPERUSER, block=True, rule=to_me()
|
||||
)
|
||||
|
||||
|
||||
@_matcher.handle()
|
||||
|
||||
@@ -1,11 +1,8 @@
|
||||
import asyncio
|
||||
import random
|
||||
|
||||
from nonebot.adapters import Bot
|
||||
import nonebot_plugin_alconna as alc
|
||||
|
||||
# from nonebot.adapters.discord import Bot as DiscordBot
|
||||
# from nonebot.adapters.dodo import Bot as DodoBot
|
||||
# from nonebot.adapters.kaiheila import Bot as KaiheilaBot
|
||||
# from nonebot.adapters.onebot.v11 import Bot as v11Bot
|
||||
# from nonebot.adapters.onebot.v12 import Bot as v12Bot
|
||||
from nonebot_plugin_alconna import Image, UniMsg
|
||||
from nonebot_plugin_session import EventSession
|
||||
|
||||
@@ -59,6 +56,7 @@ class BroadcastManage:
|
||||
session=session,
|
||||
target=f"{group.group_id}:{group.channel_id}",
|
||||
)
|
||||
await asyncio.sleep(random.randint(1, 3))
|
||||
else:
|
||||
logger.warning("target为空", "广播", session=session)
|
||||
except Exception as e:
|
||||
|
||||
+56
-36
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user