Message Models API Reference
This module provides data structures for different types of messages in the QQ Guild Bot API, including guild messages, direct messages, group messages, and C2C (client-to-client) messages.
Core Message Types
Message
Represents a message in a guild channel.
pub struct Message {
pub id: String,
pub content: Option<String>,
pub channel_id: String,
pub guild_id: String,
pub author: Option<MessageUser>,
pub member: Option<MessageMember>,
pub message_reference: Option<MessageReference>,
pub mentions: Vec<MessageUser>,
pub attachments: Vec<MessageAttachment>,
pub seq: Option<u64>,
pub seq_in_channel: Option<String>,
pub timestamp: Option<String>,
pub event_id: Option<String>,
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Methods
reply
Replies to the message with text content.
pub async fn reply(
&self,
api: &BotApi,
token: &Token,
content: &str,
) -> Result<Message>
2
3
4
5
6
Parameters:
api
: Bot API client instancetoken
: Authentication tokencontent
: Reply text content
Example:
async fn handle_message(ctx: Context, message: Message) {
if let Some(content) = &message.content {
if content == "!ping" {
message.reply(&ctx.api, &ctx.token, "Pong!").await?;
}
}
}
2
3
4
5
6
7
is_from_bot
Checks if the message was sent by a bot.
pub fn is_from_bot(&self) -> bool
Returns: true
if the message author is a bot, false
otherwise.
Example:
if message.is_from_bot() {
// Ignore bot messages
return;
}
2
3
4
has_content
Checks if the message has text content.
pub fn has_content(&self) -> bool
has_attachments
Checks if the message has file attachments.
pub fn has_attachments(&self) -> bool
has_mentions
Checks if the message mentions other users.
pub fn has_mentions(&self) -> bool
DirectMessage
Represents a direct message between the bot and a user.
pub struct DirectMessage {
pub id: String,
pub content: Option<String>,
pub channel_id: String,
pub guild_id: String,
pub direct_message: bool,
pub author: Option<DirectMessageUser>,
pub member: Option<DirectMessageMember>,
pub message_reference: Option<MessageReference>,
pub attachments: Vec<MessageAttachment>,
pub seq: Option<u64>,
pub seq_in_channel: Option<String>,
pub src_guild_id: Option<String>,
pub timestamp: Option<String>,
pub event_id: Option<String>,
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Methods
reply
Replies to the direct message.
pub async fn reply(
&self,
api: &BotApi,
token: &Token,
content: &str,
) -> Result<DirectMessage>
2
3
4
5
6
GroupMessage
Represents a message in a QQ group.
pub struct GroupMessage {
pub id: String,
pub content: Option<String>,
pub message_reference: Option<MessageReference>,
pub mentions: Vec<GroupMessageUser>,
pub attachments: Vec<MessageAttachment>,
pub msg_seq: Option<u64>,
pub timestamp: Option<String>,
pub author: Option<GroupMessageUser>,
pub group_openid: Option<String>,
pub event_id: Option<String>,
}
2
3
4
5
6
7
8
9
10
11
12
Methods
reply
Replies to the group message.
pub async fn reply(
&self,
api: &BotApi,
token: &Token,
content: &str,
) -> Result<GroupMessage>
2
3
4
5
6
C2CMessage
Represents a client-to-client message.
pub struct C2CMessage {
pub id: String,
pub content: Option<String>,
pub message_reference: Option<MessageReference>,
pub mentions: Vec<C2CMessageUser>,
pub attachments: Vec<MessageAttachment>,
pub msg_seq: Option<u64>,
pub timestamp: Option<String>,
pub author: Option<C2CMessageUser>,
pub event_id: Option<String>,
}
2
3
4
5
6
7
8
9
10
11
Methods
reply
Replies to the C2C message.
pub async fn reply(
&self,
api: &BotApi,
token: &Token,
content: &str,
) -> Result<C2CMessage>
2
3
4
5
6
User Types
MessageUser
User information in guild messages.
pub struct MessageUser {
pub id: String,
pub username: Option<String>,
pub bot: Option<bool>,
pub avatar: Option<String>,
}
2
3
4
5
6
DirectMessageUser
User information in direct messages.
pub struct DirectMessageUser {
pub id: String,
pub username: Option<String>,
pub avatar: Option<String>,
}
2
3
4
5
GroupMessageUser
User information in group messages.
pub struct GroupMessageUser {
pub id: Option<String>,
pub member_openid: Option<String>,
pub union_openid: Option<String>,
}
2
3
4
5
C2CMessageUser
User information in C2C messages.
pub struct C2CMessageUser {
pub user_openid: Option<String>,
}
2
3
Rich Content Types
Embed
Rich embed content for messages.
pub struct Embed {
pub title: Option<String>,
pub description: Option<String>,
pub url: Option<String>,
pub timestamp: Option<String>,
pub color: Option<u32>,
pub footer: Option<EmbedFooter>,
pub image: Option<EmbedImage>,
pub thumbnail: Option<EmbedThumbnail>,
pub video: Option<EmbedVideo>,
pub provider: Option<EmbedProvider>,
pub author: Option<EmbedAuthor>,
pub fields: Vec<EmbedField>,
}
2
3
4
5
6
7
8
9
10
11
12
13
14
EmbedField
A field in an embed.
pub struct EmbedField {
pub name: String,
pub value: String,
pub inline: Option<bool>,
}
2
3
4
5
Ark
ARK template message for rich interactive content.
pub struct Ark {
pub template_id: Option<u32>,
pub kv: Vec<ArkKv>,
}
2
3
4
Keyboard
Interactive keyboard with buttons.
pub struct Keyboard {
pub content: Option<KeyboardContent>,
}
2
3
KeyboardButton
A button in an interactive keyboard.
pub struct KeyboardButton {
pub id: Option<String>,
pub render_data: Option<KeyboardButtonRenderData>,
pub action: Option<KeyboardButtonAction>,
}
2
3
4
5
Message Parameters
MessageParams
Parameters for sending guild messages.
pub struct MessageParams {
pub content: Option<String>,
pub embed: Option<Embed>,
pub ark: Option<Ark>,
pub message_reference: Option<Reference>,
pub image: Option<String>,
pub file_image: Option<String>,
pub msg_id: Option<String>,
pub event_id: Option<String>,
pub markdown: Option<MarkdownPayload>,
pub keyboard: Option<Keyboard>,
}
2
3
4
5
6
7
8
9
10
11
12
Methods
new_text
Creates message parameters with text content.
pub fn new_text(content: &str) -> Self
with_file_image
Adds a file image to the message.
pub fn with_file_image(mut self, file_info: &str) -> Self
with_reply
Sets the message as a reply to another message.
pub fn with_reply(mut self, message_id: &str) -> Self
Example:
let params = MessageParams::new_text("Hello!")
.with_file_image("file_info_string")
.with_reply("original_message_id");
2
3
GroupMessageParams
Parameters for sending group messages.
pub struct GroupMessageParams {
pub msg_type: Option<u32>,
pub content: Option<String>,
pub embed: Option<Embed>,
pub ark: Option<Ark>,
pub message_reference: Option<Reference>,
pub media: Option<Media>,
pub msg_id: Option<String>,
pub msg_seq: Option<u64>,
pub event_id: Option<String>,
pub markdown: Option<MarkdownPayload>,
pub keyboard: Option<Keyboard>,
}
2
3
4
5
6
7
8
9
10
11
12
13
C2CMessageParams
Parameters for sending C2C messages.
pub struct C2CMessageParams {
pub msg_type: Option<u32>,
pub content: Option<String>,
pub embed: Option<Embed>,
pub ark: Option<Ark>,
pub message_reference: Option<Reference>,
pub media: Option<Media>,
pub msg_id: Option<String>,
pub msg_seq: Option<u64>,
pub event_id: Option<String>,
pub markdown: Option<MarkdownPayload>,
pub keyboard: Option<Keyboard>,
}
2
3
4
5
6
7
8
9
10
11
12
13
DirectMessageParams
Parameters for sending direct messages.
pub struct DirectMessageParams {
pub content: Option<String>,
pub embed: Option<Embed>,
pub ark: Option<Ark>,
pub message_reference: Option<Reference>,
pub image: Option<String>,
pub file_image: Option<String>,
pub msg_id: Option<String>,
pub event_id: Option<String>,
pub markdown: Option<MarkdownPayload>,
pub keyboard: Option<Keyboard>,
}
2
3
4
5
6
7
8
9
10
11
12
Attachments and Media
MessageAttachment
File attachment in a message.
pub struct MessageAttachment {
pub id: Option<String>,
pub filename: Option<String>,
pub content_type: Option<String>,
pub size: Option<u64>,
pub url: Option<String>,
pub width: Option<u32>,
pub height: Option<u32>,
}
2
3
4
5
6
7
8
9
Methods
is_image
Checks if the attachment is an image.
pub fn is_image(&self) -> bool
is_video
Checks if the attachment is a video.
pub fn is_video(&self) -> bool
is_audio
Checks if the attachment is an audio file.
pub fn is_audio(&self) -> bool
Media
Media content for messages.
pub struct Media {
pub file_info: Option<String>,
pub ttl: Option<u32>,
}
2
3
4
Common Usage Patterns
Basic Text Reply
async fn handle_message(ctx: Context, message: Message) {
if let Some(content) = &message.content {
if content.starts_with("!echo ") {
let echo_text = &content[6..];
message.reply(&ctx.api, &ctx.token, echo_text).await?;
}
}
}
2
3
4
5
6
7
8
Rich Embed Response
use botrs::models::message::{Embed, EmbedField};
let embed = Embed {
title: Some("Bot Information".to_string()),
description: Some("A QQ Guild bot built with BotRS".to_string()),
color: Some(0x00ff00),
fields: vec![
EmbedField {
name: "Version".to_string(),
value: "0.2.5".to_string(),
inline: Some(true),
},
EmbedField {
name: "Language".to_string(),
value: "Rust".to_string(),
inline: Some(true),
},
],
..Default::default()
};
let params = MessageParams {
embed: Some(embed),
..Default::default()
};
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
File Upload
let params = MessageParams::new_text("Here's an image!")
.with_file_image("base64_encoded_file_info");
2
Message Reference
let params = MessageParams::new_text("This is a reply")
.with_reply(&original_message.id);
2
See Also
- Client API - Main client for bot operations
- Context API - Context object passed to event handlers
- Event Handler - Handling different message events