Skip to content

Commit 7e0f2dd

Browse files
committed
[fix] fix c2c message type
1 parent c10e308 commit 7e0f2dd

2 files changed

Lines changed: 24 additions & 7 deletions

File tree

src/client.rs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1220,9 +1220,12 @@ impl<H: EventHandler + 'static> Client<H> {
12201220
}
12211221
Some("C2C_MESSAGE_CREATE") => {
12221222
if let Some(data) = event.data {
1223-
if let Ok(message) = serde_json::from_value::<C2CMessage>(data) {
1224-
self.handler.c2c_message_create(ctx, message).await;
1225-
}
1223+
let message = C2CMessage::from_data(
1224+
(*ctx.api).clone(),
1225+
format!("C2C_MESSAGE_CREATE_{}", event.sequence.unwrap_or(0)),
1226+
data,
1227+
);
1228+
self.handler.c2c_message_create(ctx, message).await;
12261229
}
12271230
}
12281231
Some("PUBLIC_MESSAGE_DELETE") => {

src/models/message.rs

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,7 @@
128128
use crate::models::{HasId, Snowflake, Timestamp};
129129
use base64::Engine;
130130
use serde::{Deserialize, Serialize};
131+
use serde_json::Value;
131132

132133
/// Represents a message in a guild channel.
133134
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
@@ -569,7 +570,7 @@ impl Default for GroupMessage {
569570
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
570571
pub struct C2CMessage {
571572
/// The message's unique ID
572-
pub id: Option<Snowflake>,
573+
pub id: Option<String>,
573574
/// The message content
574575
pub content: Option<String>,
575576
/// Referenced message information
@@ -584,6 +585,8 @@ pub struct C2CMessage {
584585
pub timestamp: Option<Timestamp>,
585586
/// The author of this message
586587
pub author: Option<C2CMessageUser>,
588+
/// Message scene information
589+
pub message_scene: Option<Value>,
587590
/// Event ID from the gateway
588591
pub event_id: Option<String>,
589592
}
@@ -600,6 +603,7 @@ impl C2CMessage {
600603
msg_seq: None,
601604
timestamp: None,
602605
author: None,
606+
message_scene: None,
603607
event_id: None,
604608
}
605609
}
@@ -642,6 +646,7 @@ impl C2CMessage {
642646
author: data
643647
.get("author")
644648
.map(|v| C2CMessageUser::from_data(v.clone())),
649+
message_scene: data.get("message_scene").cloned(),
645650
event_id: Some(event_id),
646651
}
647652
}
@@ -845,17 +850,26 @@ impl GroupMessageUser {
845850
}
846851

847852
/// User information in a C2C message.
848-
/// Represents a user in a C2C message.
849-
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
853+
/// Represents a user in a C2C message
854+
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
850855
pub struct C2CMessageUser {
851-
/// The user's OpenID
856+
/// The user's ID
857+
pub id: Option<String>,
858+
/// The user's union openid
859+
pub union_openid: Option<String>,
860+
/// The user's openid
852861
pub user_openid: Option<String>,
853862
}
854863

855864
impl C2CMessageUser {
856865
/// Creates a new C2C message user from API data.
857866
pub fn from_data(data: serde_json::Value) -> Self {
858867
Self {
868+
id: data.get("id").and_then(|v| v.as_str()).map(String::from),
869+
union_openid: data
870+
.get("union_openid")
871+
.and_then(|v| v.as_str())
872+
.map(String::from),
859873
user_openid: data
860874
.get("user_openid")
861875
.and_then(|v| v.as_str())

0 commit comments

Comments
 (0)