This commit is contained in:
jxxghp
2024-03-15 18:17:04 +08:00
parent ae6440bd0a
commit 3f88907ba9
3 changed files with 52 additions and 21 deletions

View File

@ -1,14 +1,18 @@
import json
from typing import Union, Any, List from typing import Union, Any, List
from fastapi import APIRouter, BackgroundTasks, Depends from fastapi import APIRouter, BackgroundTasks, Depends
from fastapi import Request from fastapi import Request
from sqlalchemy.orm import Session
from starlette.responses import PlainTextResponse from starlette.responses import PlainTextResponse
from app import schemas from app import schemas
from app.chain.message import MessageChain from app.chain.message import MessageChain
from app.core.config import settings from app.core.config import settings
from app.core.security import verify_token from app.core.security import verify_token
from app.db import get_db
from app.db.models import User from app.db.models import User
from app.db.models.message import Message
from app.db.systemconfig_oper import SystemConfigOper from app.db.systemconfig_oper import SystemConfigOper
from app.db.userauth import get_current_active_superuser from app.db.userauth import get_current_active_superuser
from app.log import logger from app.log import logger
@ -52,6 +56,25 @@ async def web_message(text: str, current_user: User = Depends(get_current_active
return schemas.Response(success=True) return schemas.Response(success=True)
@router.get("/web", summary="获取WEB消息", response_model=List[dict])
def get_web_message(_: schemas.TokenPayload = Depends(verify_token),
db: Session = Depends(get_db),
page: int = 1,
count: int = 20):
"""
获取WEB消息列表
"""
ret_messages = []
messages = Message.list_by_page(db, page=page, count=count)
for message in messages:
try:
ret_messages.append(message.to_dict())
except Exception as e:
logger.error(f"获取WEB消息列表失败: {str(e)}")
continue
return ret_messages
def wechat_verify(echostr: str, msg_signature: str, def wechat_verify(echostr: str, msg_signature: str,
timestamp: Union[str, int], nonce: str) -> Any: timestamp: Union[str, int], nonce: str) -> Any:
""" """

View File

@ -1,5 +1,6 @@
import json import json
import queue import queue
import time
from typing import Optional, Any from typing import Optional, Any
from app.utils.singleton import Singleton from app.utils.singleton import Singleton
@ -24,8 +25,10 @@ class MessageHelper(metaclass=Singleton):
else: else:
if isinstance(message, str): if isinstance(message, str):
self.user_queue.put(message) self.user_queue.put(message)
elif hasattr(message, "dict"): elif hasattr(message, "to_dict"):
self.user_queue.put(json.dumps(message.dict())) content = message.to_dict()
content['date'] = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
self.user_queue.put(json.dumps(content))
def get(self, role: str = "sys") -> Optional[str]: def get(self, role: str = "sys") -> Optional[str]:
""" """

View File

@ -17,18 +17,20 @@ class CommingMessage(BaseModel):
channel: Optional[MessageChannel] = None channel: Optional[MessageChannel] = None
# 消息体 # 消息体
text: Optional[str] = None text: Optional[str] = None
# 时间
date: Optional[str] = None
# 消息方向
action: Optional[int] = 0
def dict(self): def to_dict(self):
""" """
转换为字典 转换为字典
""" """
return { items = self.dict()
"userid": self.userid, for k, v in items.items():
"username": self.username, if isinstance(v, MessageChannel):
"channel": self.channel.value if self.channel else None, items[k] = v.value
"text": self.text, return items
"action": 0
}
class Notification(BaseModel): class Notification(BaseModel):
@ -49,18 +51,21 @@ class Notification(BaseModel):
link: Optional[str] = None link: Optional[str] = None
# 用户ID # 用户ID
userid: Optional[Union[str, int]] = None userid: Optional[Union[str, int]] = None
# 时间
date: Optional[str] = None
# 消息方向
action: Optional[int] = 1
def dict(self): def to_dict(self):
return { """
"channel": self.channel.value if self.channel else None, 转换为字典
"mtype": self.mtype.value if self.mtype else None, """
"title": self.title, items = self.dict()
"text": self.text, for k, v in items.items():
"image": self.image, if isinstance(v, MessageChannel) \
"link": self.link, or isinstance(v, NotificationType):
"userid": self.userid, items[k] = v.value
"action": 1 return items
}
class NotificationSwitch(BaseModel): class NotificationSwitch(BaseModel):