mirror of
https://github.com/zhenxun-org/zhenxun_bot.git
synced 2026-10-21 12:10:13 +08:00
bugfix:修复notice事件扩散问题 (#2132)
* bugfix:修复notice事件扩散问题 * 优化并发调度 * bugfix:修复签到样式 * bugfix:功能调用统计修复 * bugfix:修复私聊时功能调用统计显示已退群问题 * 提高插件适配兼容性 * 优化发送队列 * 修改权限检查设计 * 继续修改权限检查设计 * 完善权限检查设计 * 优化sqlite配置 * 优化数据库初始化 * 代码整理,无用代码清理 * bugfix:修复启动时数据库校验问题 * bugfix:修复预算裁剪过于激进问题
This commit is contained in:
@@ -19,8 +19,9 @@ from zhenxun import ui
|
||||
from zhenxun.configs.config import Config
|
||||
from zhenxun.configs.utils import Command, PluginExtraData, RegisterConfig
|
||||
from zhenxun.models.chat_history import ChatHistory
|
||||
from zhenxun.models.group_member_info import GroupInfoUser
|
||||
from zhenxun.models.friend_user import FriendUser
|
||||
from zhenxun.services import avatar_service
|
||||
from zhenxun.services.hot_query_cache import get_group_member_map, get_member_names
|
||||
from zhenxun.services.log import logger
|
||||
from zhenxun.ui.models import ImageCell, TextCell
|
||||
from zhenxun.utils.enum import PluginType
|
||||
@@ -118,7 +119,8 @@ async def _(
|
||||
show_quit_member = Config.get_config("chat_history", "SHOW_QUIT_MEMBER", True)
|
||||
|
||||
fetch_count = count.result
|
||||
if not show_quit_member:
|
||||
has_group_context = bool(group_id)
|
||||
if has_group_context and not show_quit_member:
|
||||
fetch_count = count.result * 2
|
||||
|
||||
raw_rank_data = await ChatHistory.get_group_msg_rank(
|
||||
@@ -128,27 +130,37 @@ async def _(
|
||||
if raw_rank_data:
|
||||
rank_data = cast(list[tuple[str, int]], raw_rank_data)
|
||||
rows_data = []
|
||||
platform = "qq"
|
||||
platform = getattr(session, "platform", None) or "qq"
|
||||
|
||||
user_ids_in_rank = [str(uid) for uid, _ in rank_data]
|
||||
users_in_group_query = GroupInfoUser.filter(
|
||||
user_id__in=user_ids_in_rank, group_id=group_id
|
||||
)
|
||||
users_in_group = {u.user_id: u for u in await users_in_group_query}
|
||||
users_in_group = {}
|
||||
user_names: dict[str, str] = {}
|
||||
if has_group_context:
|
||||
users_in_group = await get_group_member_map(group_id, user_ids_in_rank)
|
||||
else:
|
||||
friend_users = await FriendUser.filter(
|
||||
user_id__in=user_ids_in_rank
|
||||
).values_list("user_id", "user_name")
|
||||
user_names.update(dict(friend_users))
|
||||
group_user_names = await get_member_names(user_ids_in_rank)
|
||||
for user_id, user_name in group_user_names.items():
|
||||
if user_name and user_id not in user_names:
|
||||
user_names[user_id] = user_name
|
||||
|
||||
for idx, (uid, num) in enumerate(rank_data):
|
||||
if len(rows_data) >= count.result:
|
||||
break
|
||||
|
||||
uid_str = str(uid)
|
||||
user_in_group = users_in_group.get(uid_str)
|
||||
|
||||
if not user_in_group and not show_quit_member:
|
||||
continue
|
||||
|
||||
user_name = (
|
||||
user_in_group.user_name if user_in_group else f"{uid_str}(已退群)"
|
||||
)
|
||||
if has_group_context:
|
||||
user_in_group = users_in_group.get(uid_str)
|
||||
if not user_in_group and not show_quit_member:
|
||||
continue
|
||||
user_name = (
|
||||
user_in_group.user_name if user_in_group else f"{uid_str}(已退群)"
|
||||
)
|
||||
else:
|
||||
user_name = user_names.get(uid_str) or uid_str
|
||||
|
||||
avatar_path = await avatar_service.get_avatar_path(platform, uid_str)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user