Files
mai-bot/src/plugins/chat/group_info_manager.py
SengokuCola 972e6066e6 v0.1
能跑但是没写部署教程,主题和记忆识别也没写完
2025-02-26 18:12:28 +08:00

107 lines
4.3 KiB
Python

from typing import Dict, Optional
from ...common.database import Database
import time
class GroupInfoManager:
def __init__(self):
self.db = Database.get_instance()
# 确保必要的集合存在
self._ensure_collections()
def _ensure_collections(self):
"""确保数据库中有必要的集合"""
collections = self.db.db.list_collection_names()
if 'group_info' not in collections:
self.db.db.create_collection('group_info')
if 'user_info' not in collections:
self.db.db.create_collection('user_info')
async def update_group_info(self, group_id: int, group_name: str, group_notice: str = "",
member_count: int = 0, admins: list = None):
"""更新群组信息"""
try:
group_data = {
"group_id": group_id,
"group_name": group_name,
"group_notice": group_notice,
"member_count": member_count,
"admins": admins or [],
"last_updated": time.time()
}
# 使用 upsert 来更新或插入数据
self.db.db.group_info.update_one(
{"group_id": group_id},
{"$set": group_data},
upsert=True
)
except Exception as e:
print(f"\033[1;31m[错误]\033[0m 更新群信息失败: {str(e)}")
async def update_user_info(self, user_id: int, nickname: str, group_id: int = None,
group_card: str = None, age: int = None, gender: str = None,
location: str = None):
"""更新用户信息"""
try:
# 基础用户数据
user_data = {
"user_id": user_id,
"nickname": nickname,
"last_updated": time.time()
}
# 添加可选字段
if age is not None:
user_data["age"] = age
if gender is not None:
user_data["gender"] = gender
if location is not None:
user_data["location"] = location
# 如果提供了群相关信息,更新用户在该群的信息
if group_id is not None:
group_info_key = f"group_info.{group_id}"
group_data = {
group_info_key: {
"group_card": group_card,
"last_active": time.time()
}
}
user_data.update(group_data)
# 使用 upsert 来更新或插入数据
result = self.db.db.user_info.update_one(
{"user_id": user_id},
{
"$set": user_data,
"$addToSet": {"groups": group_id} if group_id else {}
},
upsert=True
)
# print(f"\033[1;32m[用户信息]\033[0m 更新用户 {nickname}({user_id}) 的信息 {'成功' if result.modified_count > 0 or result.upserted_id else '未变化'}")
except Exception as e:
print(f"\033[1;31m[错误]\033[0m 更新用户信息失败: {str(e)}")
print(f"用户ID: {user_id}, 昵称: {nickname}, 群ID: {group_id}, 群名片: {group_card}")
async def get_group_info(self, group_id: int) -> Optional[Dict]:
"""获取群组信息"""
try:
return self.db.db.group_info.find_one({"group_id": group_id})
except Exception as e:
print(f"\033[1;31m[错误]\033[0m 获取群信息失败: {str(e)}")
return None
async def get_user_info(self, user_id: int, group_id: int = None) -> Optional[Dict]:
"""获取用户信息"""
try:
user_info = self.db.db.user_info.find_one({"user_id": user_id})
if user_info and group_id:
# 添加该用户在特定群的信息
group_info_key = f"group_info.{group_id}"
user_info["current_group_info"] = user_info.get(group_info_key, {})
return user_info
except Exception as e:
print(f"\033[1;31m[错误]\033[0m 获取用户信息失败: {str(e)}")
return None