forked from jmug/stoatchat
Refactor: Send system messages directly from content.
This commit is contained in:
@@ -43,6 +43,19 @@ pub enum Content {
|
||||
SystemMessage(SystemMessage),
|
||||
}
|
||||
|
||||
impl Content {
|
||||
pub async fn send_as_system(self, target: &Channel) -> Result<()> {
|
||||
Message::create(
|
||||
"00000000000000000000000000".to_string(),
|
||||
target.id().to_string(),
|
||||
self,
|
||||
None
|
||||
)
|
||||
.publish(&target)
|
||||
.await
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug, Clone)]
|
||||
pub struct Message {
|
||||
#[serde(rename = "_id")]
|
||||
|
||||
@@ -98,15 +98,9 @@ pub async fn req(user: User, target: Ref) -> Result<()> {
|
||||
}
|
||||
.publish(id.clone());
|
||||
|
||||
Message::create(
|
||||
"00000000000000000000000000".to_string(),
|
||||
id.clone(),
|
||||
Content::SystemMessage(SystemMessage::UserLeft { id: user.id }),
|
||||
None
|
||||
)
|
||||
.publish(&target)
|
||||
.await
|
||||
.ok();
|
||||
Content::SystemMessage(SystemMessage::UserLeft { id: user.id })
|
||||
.send_as_system(&target)
|
||||
.await.ok();
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@@ -112,44 +112,26 @@ pub async fn req(user: User, target: Ref, data: Json<Data>) -> Result<()> {
|
||||
|
||||
if let Channel::Group { .. } = &target {
|
||||
if let Some(name) = data.name {
|
||||
Message::create(
|
||||
"00000000000000000000000000".to_string(),
|
||||
id.clone(),
|
||||
Content::SystemMessage(SystemMessage::ChannelRenamed {
|
||||
name,
|
||||
by: user.id.clone(),
|
||||
}),
|
||||
None
|
||||
)
|
||||
.publish(&target)
|
||||
.await
|
||||
.ok();
|
||||
Content::SystemMessage(SystemMessage::ChannelRenamed {
|
||||
name,
|
||||
by: user.id.clone(),
|
||||
})
|
||||
.send_as_system(&target)
|
||||
.await.ok();
|
||||
}
|
||||
|
||||
if let Some(_) = data.description {
|
||||
Message::create(
|
||||
"00000000000000000000000000".to_string(),
|
||||
id.clone(),
|
||||
Content::SystemMessage(SystemMessage::ChannelDescriptionChanged {
|
||||
by: user.id.clone(),
|
||||
}),
|
||||
None
|
||||
)
|
||||
.publish(&target)
|
||||
.await
|
||||
.ok();
|
||||
Content::SystemMessage(SystemMessage::ChannelDescriptionChanged {
|
||||
by: user.id.clone(),
|
||||
})
|
||||
.send_as_system(&target)
|
||||
.await.ok();
|
||||
}
|
||||
|
||||
if let Some(_) = data.icon {
|
||||
Message::create(
|
||||
"00000000000000000000000000".to_string(),
|
||||
id.clone(),
|
||||
Content::SystemMessage(SystemMessage::ChannelIconChanged { by: user.id }),
|
||||
None
|
||||
)
|
||||
.publish(&target)
|
||||
.await
|
||||
.ok();
|
||||
Content::SystemMessage(SystemMessage::ChannelIconChanged { by: user.id })
|
||||
.send_as_system(&target)
|
||||
.await.ok();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -55,18 +55,12 @@ pub async fn req(user: User, target: Ref, member: Ref) -> Result<()> {
|
||||
}
|
||||
.publish(id.clone());
|
||||
|
||||
Message::create(
|
||||
"00000000000000000000000000".to_string(),
|
||||
id.clone(),
|
||||
Content::SystemMessage(SystemMessage::UserAdded {
|
||||
id: member.id,
|
||||
by: user.id,
|
||||
}),
|
||||
None
|
||||
)
|
||||
.publish(&channel)
|
||||
.await
|
||||
.ok();
|
||||
Content::SystemMessage(SystemMessage::UserAdded {
|
||||
id: member.id,
|
||||
by: user.id,
|
||||
})
|
||||
.send_as_system(&channel)
|
||||
.await.ok();
|
||||
|
||||
Ok(())
|
||||
} else {
|
||||
|
||||
@@ -51,18 +51,12 @@ pub async fn req(user: User, target: Ref, member: Ref) -> Result<()> {
|
||||
}
|
||||
.publish(id.clone());
|
||||
|
||||
Message::create(
|
||||
"00000000000000000000000000".to_string(),
|
||||
id.clone(),
|
||||
Content::SystemMessage(SystemMessage::UserRemove {
|
||||
id: member.id,
|
||||
by: user.id,
|
||||
}),
|
||||
None
|
||||
)
|
||||
.publish(&channel)
|
||||
.await
|
||||
.ok();
|
||||
Content::SystemMessage(SystemMessage::UserRemove {
|
||||
id: member.id,
|
||||
by: user.id,
|
||||
})
|
||||
.send_as_system(&channel)
|
||||
.await.ok();
|
||||
|
||||
Ok(())
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user