Skip to main content

steam_user/types/
group.rs

1//! Steam group types.
2
3use serde::{Deserialize, Serialize};
4use steamid::SteamID;
5
6/// Information about a Steam group.
7#[derive(Debug, Clone, Serialize, Deserialize)]
8pub struct GroupInfo {
9    /// Group SteamID.
10    pub steamid: SteamID,
11    /// Group name.
12    pub name: String,
13    /// Group vanity URL.
14    pub url: Option<String>,
15    /// Group headline/tagline.
16    pub headline: Option<String>,
17    /// Group summary.
18    pub summary: Option<String>,
19    /// Member count.
20    pub member_count: u32,
21    /// Online member count.
22    pub members_online: u32,
23    /// In-game member count.
24    pub members_in_game: u32,
25    /// Avatar icon URL.
26    pub avatar_icon: Option<String>,
27    /// Avatar medium URL.
28    pub avatar_medium: Option<String>,
29    /// Avatar full URL.
30    pub avatar_full: Option<String>,
31}
32
33/// A member in a group overview.
34#[derive(Debug, Clone, Serialize, Deserialize)]
35pub struct GroupOverviewMember {
36    pub steamid: SteamID,
37    pub name: String,
38    pub avatar_hash: String,
39    pub custom_url: Option<String>,
40    pub rank: Option<String>,
41}
42
43/// Detailed overview of a Steam group.
44#[derive(Debug, Clone, Serialize, Deserialize)]
45pub struct GroupOverview {
46    pub id: SteamID,
47    pub name: String,
48    pub url: Option<String>,
49    pub headline: Option<String>,
50    pub summary: Option<String>,
51    pub avatar_hash: String,
52    pub member_count: u32,
53    pub member_detail_count: u32,
54    pub members_online: u32,
55    pub members_in_chat: u32,
56    pub members_in_game: u32,
57    pub total_pages: i32,
58    pub current_page: i32,
59    pub next_page: Option<i32>,
60    pub next_page_link: Option<String>,
61    pub members: Vec<GroupOverviewMember>,
62    pub founded_str: Option<String>,
63    pub language: Option<String>,
64    pub location: Option<String>,
65}
66
67/// Options for fetching group overview.
68#[derive(Debug, Clone, Default, Serialize, Deserialize)]
69pub struct GroupOverviewOptions {
70    pub group_url: Option<String>,
71    pub gid: Option<SteamID>,
72    pub page: i32,
73    pub search_key: Option<String>,
74}
75
76/// A group announcement.
77#[derive(Debug, Clone, Serialize, Deserialize)]
78pub struct GroupAnnouncement {
79    /// Announcement ID.
80    pub aid: String,
81    /// Headline/title.
82    pub headline: String,
83    /// Content (may contain HTML).
84    pub content: String,
85    /// Author username.
86    pub author: Option<String>,
87    /// Post date.
88    pub date: String,
89}
90
91/// A group event.
92#[derive(Debug, Clone, Serialize, Deserialize)]
93pub struct GroupEvent {
94    /// Event ID.
95    pub event_id: String,
96    /// Event name.
97    pub name: String,
98    /// Event type.
99    pub event_type: String,
100    /// Event description.
101    pub description: String,
102    /// App ID (for game events).
103    pub appid: Option<u32>,
104    /// Server IP (for game events).
105    pub server_ip: Option<String>,
106    /// Start time.
107    pub start_time: Option<String>,
108}
109
110/// A group comment.
111#[derive(Debug, Clone, Serialize, Deserialize)]
112pub struct GroupComment {
113    /// Comment ID.
114    pub comment_id: String,
115    /// Author name.
116    pub author_name: String,
117    /// Author profile ID.
118    pub author_id: String,
119    /// Post date.
120    pub date: String,
121    /// Comment text.
122    pub text: String,
123}
124
125/// Group history entry.
126#[derive(Debug, Clone, Serialize, Deserialize)]
127pub struct GroupHistoryEntry {
128    /// Type of action (Join, Leave, etc.).
129    pub action_type: String,
130    /// User who performed/received the action.
131    pub user: Option<SteamID>,
132    /// Actor (for actions like kicks/bans).
133    pub actor: Option<SteamID>,
134    /// When it happened.
135    pub date: String,
136}
137
138/// Group information from XML API (memberslistxml endpoint).
139#[derive(Debug, Clone, Serialize, Deserialize)]
140pub struct GroupInfoXml {
141    /// Group SteamID.
142    pub id: SteamID,
143    /// Group name.
144    pub name: String,
145    /// Group vanity URL.
146    pub url: String,
147    /// Group headline/tagline.
148    pub headline: Option<String>,
149    /// Group summary.
150    pub summary: Option<String>,
151    /// Avatar hash.
152    pub avatar_hash: String,
153    /// Total member count.
154    pub member_count: u32,
155    /// Detailed member count.
156    pub member_detail_count: u32,
157    /// Members in chat.
158    pub members_in_chat: u32,
159    /// Members in game.
160    pub members_in_game: u32,
161    /// Members online.
162    pub members_online: u32,
163    /// Total pages of members.
164    pub total_pages: u32,
165    /// Current page number.
166    pub current_page: u32,
167    /// Starting member index.
168    pub starting_member: u32,
169    /// Link to next page (if any).
170    pub next_page_link: Option<String>,
171    /// List of member SteamIDs on this page.
172    pub members: Vec<SteamID>,
173}
174
175/// A group that a user can be invited to.
176#[derive(Debug, Clone, Serialize, Deserialize)]
177pub struct InvitableGroup {
178    /// Group SteamID.
179    pub id: SteamID,
180    /// Avatar hash.
181    pub avatar_hash: Option<String>,
182    /// Avatar URL.
183    pub avatar_url: Option<String>,
184    /// Group name.
185    pub name: String,
186}