1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
use anyhow::Result;
use pyo3::prelude::*;
use ricq::msg::PushElem;
use ricq_core::msg::MessageChain;
use super::elements::ElementOrText;
use crate::utils::py_future;
#[pyclass]
#[derive(Clone)]
pub struct MessageContent {
chain: MessageChain,
}
impl MessageContent {
fn new(chain: MessageChain) -> Self {
Self { chain }
}
}
impl MessageContent {
pub(crate) async fn build_friend_message_impl(
segments: Vec<ElementOrText>,
) -> Result<MessageContent> {
let mut elems = vec![];
for elem in segments.into_iter() {
PushElem::push_to(elem, &mut elems);
}
let chain = MessageChain::new(elems);
let content = MessageContent::new(chain);
Ok(content)
}
}
#[pymethods]
impl MessageContent {
#[staticmethod]
#[args(segments = "*")]
pub fn build_friend_message(py: Python, segments: Vec<ElementOrText>) -> PyResult<&PyAny> {
py_future(py, MessageContent::build_friend_message_impl(segments))
}
}
impl From<MessageContent> for MessageChain {
fn from(content: MessageContent) -> Self {
content.chain
}
}