|
@@ -167,7 +167,7 @@ async def delete_channel_by_id(id: str, user=Depends(get_admin_user)):
|
|
|
|
|
|
|
|
|
class MessageUserResponse(MessageResponse):
|
|
|
- user: UserNameResponse
|
|
|
+ pass
|
|
|
|
|
|
|
|
|
@router.get("/{id}/messages", response_model=list[MessageUserResponse])
|
|
@@ -196,15 +196,17 @@ async def get_channel_messages(
|
|
|
user = Users.get_user_by_id(message.user_id)
|
|
|
users[message.user_id] = user
|
|
|
|
|
|
- replies = Messages.get_replies_by_message_id(message.id)
|
|
|
- latest_reply_at = replies[0].created_at if replies else None
|
|
|
+ thread_replies = Messages.get_thread_replies_by_message_id(message.id)
|
|
|
+ latest_thread_reply_at = (
|
|
|
+ thread_replies[0].created_at if thread_replies else None
|
|
|
+ )
|
|
|
|
|
|
messages.append(
|
|
|
MessageUserResponse(
|
|
|
**{
|
|
|
**message.model_dump(),
|
|
|
- "reply_count": len(replies),
|
|
|
- "latest_reply_at": latest_reply_at,
|
|
|
+ "reply_count": len(thread_replies),
|
|
|
+ "latest_reply_at": latest_thread_reply_at,
|
|
|
"reactions": Messages.get_reactions_by_message_id(message.id),
|
|
|
"user": UserNameResponse(**users[message.user_id].model_dump()),
|
|
|
}
|
|
@@ -253,12 +255,26 @@ async def model_response_handler(request, channel, message, user):
|
|
|
mentions = extract_mentions(message.content)
|
|
|
message_content = replace_mentions(message.content)
|
|
|
|
|
|
+ model_mentions = {}
|
|
|
+
|
|
|
+ # check if the message is a reply to a message sent by a model
|
|
|
+ if (
|
|
|
+ message.reply_to_message
|
|
|
+ and message.reply_to_message.meta
|
|
|
+ and message.reply_to_message.meta.get("model_id", None)
|
|
|
+ ):
|
|
|
+ model_id = message.reply_to_message.meta.get("model_id", None)
|
|
|
+ model_mentions[model_id] = {"id": model_id, "id_type": "M"}
|
|
|
+
|
|
|
# check if any of the mentions are models
|
|
|
- model_mentions = [mention for mention in mentions if mention["id_type"] == "M"]
|
|
|
+ for mention in mentions:
|
|
|
+ if mention["id_type"] == "M" and mention["id"] not in model_mentions:
|
|
|
+ model_mentions[mention["id"]] = mention
|
|
|
+
|
|
|
if not model_mentions:
|
|
|
return False
|
|
|
|
|
|
- for mention in model_mentions:
|
|
|
+ for mention in model_mentions.values():
|
|
|
model_id = mention["id"]
|
|
|
model = MODELS.get(model_id, None)
|
|
|
|
|
@@ -406,24 +422,14 @@ async def new_message_handler(
|
|
|
|
|
|
try:
|
|
|
message = Messages.insert_new_message(form_data, channel.id, user.id)
|
|
|
-
|
|
|
if message:
|
|
|
+ message = Messages.get_message_by_id(message.id)
|
|
|
event_data = {
|
|
|
"channel_id": channel.id,
|
|
|
"message_id": message.id,
|
|
|
"data": {
|
|
|
"type": "message",
|
|
|
- "data": MessageUserResponse(
|
|
|
- **{
|
|
|
- **message.model_dump(),
|
|
|
- "reply_count": 0,
|
|
|
- "latest_reply_at": None,
|
|
|
- "reactions": Messages.get_reactions_by_message_id(
|
|
|
- message.id
|
|
|
- ),
|
|
|
- "user": UserNameResponse(**user.model_dump()),
|
|
|
- }
|
|
|
- ).model_dump(),
|
|
|
+ "data": message.model_dump(),
|
|
|
},
|
|
|
"user": UserNameResponse(**user.model_dump()).model_dump(),
|
|
|
"channel": channel.model_dump(),
|
|
@@ -447,23 +453,16 @@ async def new_message_handler(
|
|
|
"message_id": parent_message.id,
|
|
|
"data": {
|
|
|
"type": "message:reply",
|
|
|
- "data": MessageUserResponse(
|
|
|
- **{
|
|
|
- **parent_message.model_dump(),
|
|
|
- "user": UserNameResponse(
|
|
|
- **Users.get_user_by_id(
|
|
|
- parent_message.user_id
|
|
|
- ).model_dump()
|
|
|
- ),
|
|
|
- }
|
|
|
- ).model_dump(),
|
|
|
+ "data": parent_message.model_dump(),
|
|
|
},
|
|
|
"user": UserNameResponse(**user.model_dump()).model_dump(),
|
|
|
"channel": channel.model_dump(),
|
|
|
},
|
|
|
to=f"channel:{channel.id}",
|
|
|
)
|
|
|
- return MessageModel(**message.model_dump()), channel
|
|
|
+ return message, channel
|
|
|
+ else:
|
|
|
+ raise Exception("Error creating message")
|
|
|
except Exception as e:
|
|
|
log.exception(e)
|
|
|
raise HTTPException(
|
|
@@ -651,14 +650,7 @@ async def update_message_by_id(
|
|
|
"message_id": message.id,
|
|
|
"data": {
|
|
|
"type": "message:update",
|
|
|
- "data": MessageUserResponse(
|
|
|
- **{
|
|
|
- **message.model_dump(),
|
|
|
- "user": UserNameResponse(
|
|
|
- **user.model_dump()
|
|
|
- ).model_dump(),
|
|
|
- }
|
|
|
- ).model_dump(),
|
|
|
+ "data": message.model_dump(),
|
|
|
},
|
|
|
"user": UserNameResponse(**user.model_dump()).model_dump(),
|
|
|
"channel": channel.model_dump(),
|
|
@@ -724,9 +716,6 @@ async def add_reaction_to_message(
|
|
|
"type": "message:reaction:add",
|
|
|
"data": {
|
|
|
**message.model_dump(),
|
|
|
- "user": UserNameResponse(
|
|
|
- **Users.get_user_by_id(message.user_id).model_dump()
|
|
|
- ).model_dump(),
|
|
|
"name": form_data.name,
|
|
|
},
|
|
|
},
|
|
@@ -793,9 +782,6 @@ async def remove_reaction_by_id_and_user_id_and_name(
|
|
|
"type": "message:reaction:remove",
|
|
|
"data": {
|
|
|
**message.model_dump(),
|
|
|
- "user": UserNameResponse(
|
|
|
- **Users.get_user_by_id(message.user_id).model_dump()
|
|
|
- ).model_dump(),
|
|
|
"name": form_data.name,
|
|
|
},
|
|
|
},
|
|
@@ -882,16 +868,7 @@ async def delete_message_by_id(
|
|
|
"message_id": parent_message.id,
|
|
|
"data": {
|
|
|
"type": "message:reply",
|
|
|
- "data": MessageUserResponse(
|
|
|
- **{
|
|
|
- **parent_message.model_dump(),
|
|
|
- "user": UserNameResponse(
|
|
|
- **Users.get_user_by_id(
|
|
|
- parent_message.user_id
|
|
|
- ).model_dump()
|
|
|
- ),
|
|
|
- }
|
|
|
- ).model_dump(),
|
|
|
+ "data": parent_message.model_dump(),
|
|
|
},
|
|
|
"user": UserNameResponse(**user.model_dump()).model_dump(),
|
|
|
"channel": channel.model_dump(),
|