refactor(project): make pyright & ruff happy

This commit is contained in:
MingxuanGame
2025-08-22 08:21:52 +00:00
parent 3b1d7a2234
commit 598fcc8b38
157 changed files with 2382 additions and 4590 deletions

View File

@@ -33,36 +33,22 @@ class MessageQueueProcessor:
"""将消息缓存到 Redis"""
try:
# 存储消息数据
await self._redis_exec(
self.redis_message.hset, f"msg:{temp_uuid}", mapping=message_data
)
await self._redis_exec(
self.redis_message.expire, f"msg:{temp_uuid}", 3600
) # 1小时过期
await self._redis_exec(self.redis_message.hset, f"msg:{temp_uuid}", mapping=message_data)
await self._redis_exec(self.redis_message.expire, f"msg:{temp_uuid}", 3600) # 1小时过期
# 加入频道消息列表
await self._redis_exec(
self.redis_message.lpush, f"channel:{channel_id}:messages", temp_uuid
)
await self._redis_exec(
self.redis_message.ltrim, f"channel:{channel_id}:messages", 0, 99
) # 保持最新100条
await self._redis_exec(
self.redis_message.expire, f"channel:{channel_id}:messages", 86400
) # 24小时过期
await self._redis_exec(self.redis_message.lpush, f"channel:{channel_id}:messages", temp_uuid)
await self._redis_exec(self.redis_message.ltrim, f"channel:{channel_id}:messages", 0, 99) # 保持最新100条
await self._redis_exec(self.redis_message.expire, f"channel:{channel_id}:messages", 86400) # 24小时过期
# 加入异步处理队列
await self._redis_exec(
self.redis_message.lpush, "message_write_queue", temp_uuid
)
await self._redis_exec(self.redis_message.lpush, "message_write_queue", temp_uuid)
logger.info(f"Message cached to Redis: {temp_uuid}")
except Exception as e:
logger.error(f"Failed to cache message to Redis: {e}")
async def get_cached_messages(
self, channel_id: int, limit: int = 50, since: int = 0
) -> list[dict]:
async def get_cached_messages(self, channel_id: int, limit: int = 50, since: int = 0) -> list[dict]:
"""从 Redis 获取缓存的消息"""
try:
message_uuids = await self._redis_exec(
@@ -78,15 +64,11 @@ class MessageQueueProcessor:
if isinstance(temp_uuid, bytes):
temp_uuid = temp_uuid.decode("utf-8")
raw_data = await self._redis_exec(
self.redis_message.hgetall, f"msg:{temp_uuid}"
)
raw_data = await self._redis_exec(self.redis_message.hgetall, f"msg:{temp_uuid}")
if raw_data:
# 解码 Redis 返回的字节数据
message_data = {
k.decode("utf-8") if isinstance(k, bytes) else k: v.decode(
"utf-8"
)
k.decode("utf-8") if isinstance(k, bytes) else k: v.decode("utf-8")
if isinstance(v, bytes)
else v
for k, v in raw_data.items()
@@ -103,9 +85,7 @@ class MessageQueueProcessor:
logger.error(f"Failed to get cached messages: {e}")
return []
async def update_message_status(
self, temp_uuid: str, status: str, message_id: int | None = None
):
async def update_message_status(self, temp_uuid: str, status: str, message_id: int | None = None):
"""更新消息状态"""
try:
update_data = {"status": status}
@@ -113,26 +93,20 @@ class MessageQueueProcessor:
update_data["message_id"] = str(message_id)
update_data["db_timestamp"] = datetime.now().isoformat()
await self._redis_exec(
self.redis_message.hset, f"msg:{temp_uuid}", mapping=update_data
)
await self._redis_exec(self.redis_message.hset, f"msg:{temp_uuid}", mapping=update_data)
except Exception as e:
logger.error(f"Failed to update message status: {e}")
async def get_message_status(self, temp_uuid: str) -> dict | None:
"""获取消息状态"""
try:
raw_data = await self._redis_exec(
self.redis_message.hgetall, f"msg:{temp_uuid}"
)
raw_data = await self._redis_exec(self.redis_message.hgetall, f"msg:{temp_uuid}")
if not raw_data:
return None
# 解码 Redis 返回的字节数据
return {
k.decode("utf-8") if isinstance(k, bytes) else k: v.decode("utf-8")
if isinstance(v, bytes)
else v
k.decode("utf-8") if isinstance(k, bytes) else k: v.decode("utf-8") if isinstance(v, bytes) else v
for k, v in raw_data.items()
}
except Exception as e:
@@ -148,9 +122,7 @@ class MessageQueueProcessor:
# 批量获取消息
message_uuids = []
for _ in range(20): # 批量处理20条消息
result = await self._redis_exec(
self.redis_message.brpop, ["message_write_queue"], timeout=1
)
result = await self._redis_exec(self.redis_message.brpop, ["message_write_queue"], timeout=1)
if result:
# result是 (queue_name, value) 的元组,需要解码
uuid_value = result[1]
@@ -179,17 +151,13 @@ class MessageQueueProcessor:
for temp_uuid in message_uuids:
try:
# 获取消息数据并解码
raw_data = await self._redis_exec(
self.redis_message.hgetall, f"msg:{temp_uuid}"
)
raw_data = await self._redis_exec(self.redis_message.hgetall, f"msg:{temp_uuid}")
if not raw_data:
continue
# 解码 Redis 返回的字节数据
message_data = {
k.decode("utf-8") if isinstance(k, bytes) else k: v.decode(
"utf-8"
)
k.decode("utf-8") if isinstance(k, bytes) else k: v.decode("utf-8")
if isinstance(v, bytes)
else v
for k, v in raw_data.items()
@@ -215,10 +183,7 @@ class MessageQueueProcessor:
await session.refresh(msg)
# 更新成功状态包含临时消息ID映射
assert msg.message_id is not None
await self.update_message_status(
temp_uuid, "completed", msg.message_id
)
await self.update_message_status(temp_uuid, "completed", msg.message_id)
# 如果有临时消息ID存储映射关系并通知客户端更新
if message_data.get("temp_message_id"):
@@ -232,12 +197,11 @@ class MessageQueueProcessor:
# 发送消息ID更新通知到频道
channel_id = int(message_data["channel_id"])
await self._notify_message_update(
channel_id, temp_msg_id, msg.message_id, message_data
)
await self._notify_message_update(channel_id, temp_msg_id, msg.message_id, message_data)
logger.info(
f"Message {temp_uuid} persisted to DB with ID {msg.message_id}, temp_id: {message_data.get('temp_message_id')}"
f"Message {temp_uuid} persisted to DB with ID {msg.message_id}, "
f"temp_id: {message_data.get('temp_message_id')}"
)
except Exception as e:
@@ -272,9 +236,7 @@ class MessageQueueProcessor:
json.dumps(update_event),
)
logger.info(
f"Published message update: temp_id={temp_message_id}, real_id={real_message_id}"
)
logger.info(f"Published message update: temp_id={temp_message_id}, real_id={real_message_id}")
except Exception as e:
logger.error(f"Failed to notify message update: {e}")
@@ -320,9 +282,7 @@ async def cache_message_to_redis(channel_id: int, message_data: dict, temp_uuid:
await message_queue_processor.cache_message(channel_id, message_data, temp_uuid)
async def get_cached_messages(
channel_id: int, limit: int = 50, since: int = 0
) -> list[dict]:
async def get_cached_messages(channel_id: int, limit: int = 50, since: int = 0) -> list[dict]:
"""从 Redis 获取缓存的消息 - 便捷接口"""
return await message_queue_processor.get_cached_messages(channel_id, limit, since)