1use super::{push_opt, push_opt_str, Bot, ChatId, Result};
2use crate::request::request_parameter::RequestParameter;
3use crate::types::{message, payment, reply, suggested_post};
4
5#[allow(dead_code)]
6impl Bot {
7 pub async fn send_invoice_raw(
15 &self,
16 chat_id: ChatId,
17 title: &str,
18 description: &str,
19 payload: &str,
20 currency: &str,
21 prices: Vec<serde_json::Value>,
22 provider_token: Option<&str>,
23 max_tip_amount: Option<i64>,
24 suggested_tip_amounts: Option<Vec<i64>>,
25 start_parameter: Option<&str>,
26 provider_data: Option<&str>,
27 photo_url: Option<&str>,
28 photo_size: Option<i64>,
29 photo_width: Option<i64>,
30 photo_height: Option<i64>,
31 need_name: Option<bool>,
32 need_phone_number: Option<bool>,
33 need_email: Option<bool>,
34 need_shipping_address: Option<bool>,
35 send_phone_number_to_provider: Option<bool>,
36 send_email_to_provider: Option<bool>,
37 is_flexible: Option<bool>,
38 disable_notification: Option<bool>,
39 protect_content: Option<bool>,
40 reply_parameters: Option<reply::ReplyParameters>,
41 reply_markup: Option<serde_json::Value>,
42 message_thread_id: Option<i64>,
43 message_effect_id: Option<&str>,
44 allow_paid_broadcast: Option<bool>,
45 direct_messages_topic_id: Option<i64>,
46 suggested_post_parameters: Option<suggested_post::SuggestedPostParameters>,
47 ) -> Result<message::Message> {
48 let mut params = vec![
49 RequestParameter::new("chat_id", serde_json::to_value(&chat_id)?),
50 RequestParameter::new("title", serde_json::Value::String(title.to_owned())),
51 RequestParameter::new(
52 "description",
53 serde_json::Value::String(description.to_owned()),
54 ),
55 RequestParameter::new("payload", serde_json::Value::String(payload.to_owned())),
56 RequestParameter::new("currency", serde_json::Value::String(currency.to_owned())),
57 RequestParameter::new("prices", serde_json::to_value(&prices)?),
58 ];
59 push_opt_str(&mut params, "provider_token", provider_token);
60 push_opt(&mut params, "max_tip_amount", &max_tip_amount)?;
61 push_opt(&mut params, "suggested_tip_amounts", &suggested_tip_amounts)?;
62 push_opt_str(&mut params, "start_parameter", start_parameter);
63 push_opt_str(&mut params, "provider_data", provider_data);
64 push_opt_str(&mut params, "photo_url", photo_url);
65 push_opt(&mut params, "photo_size", &photo_size)?;
66 push_opt(&mut params, "photo_width", &photo_width)?;
67 push_opt(&mut params, "photo_height", &photo_height)?;
68 push_opt(&mut params, "need_name", &need_name)?;
69 push_opt(&mut params, "need_phone_number", &need_phone_number)?;
70 push_opt(&mut params, "need_email", &need_email)?;
71 push_opt(&mut params, "need_shipping_address", &need_shipping_address)?;
72 push_opt(
73 &mut params,
74 "send_phone_number_to_provider",
75 &send_phone_number_to_provider,
76 )?;
77 push_opt(
78 &mut params,
79 "send_email_to_provider",
80 &send_email_to_provider,
81 )?;
82 push_opt(&mut params, "is_flexible", &is_flexible)?;
83 push_opt(&mut params, "disable_notification", &disable_notification)?;
84 push_opt(&mut params, "protect_content", &protect_content)?;
85 push_opt(&mut params, "reply_parameters", &reply_parameters)?;
86 push_opt(&mut params, "reply_markup", &reply_markup)?;
87 push_opt(&mut params, "message_thread_id", &message_thread_id)?;
88 push_opt_str(&mut params, "message_effect_id", message_effect_id);
89 push_opt(&mut params, "allow_paid_broadcast", &allow_paid_broadcast)?;
90 push_opt(
91 &mut params,
92 "direct_messages_topic_id",
93 &direct_messages_topic_id,
94 )?;
95 push_opt(
96 &mut params,
97 "suggested_post_parameters",
98 &suggested_post_parameters,
99 )?;
100 self.do_post("sendInvoice", params).await
101 }
102
103 pub async fn create_invoice_link_raw(
107 &self,
108 title: &str,
109 description: &str,
110 payload: &str,
111 currency: &str,
112 prices: Vec<serde_json::Value>,
113 provider_token: Option<&str>,
114 max_tip_amount: Option<i64>,
115 suggested_tip_amounts: Option<Vec<i64>>,
116 provider_data: Option<&str>,
117 photo_url: Option<&str>,
118 photo_size: Option<i64>,
119 photo_width: Option<i64>,
120 photo_height: Option<i64>,
121 need_name: Option<bool>,
122 need_phone_number: Option<bool>,
123 need_email: Option<bool>,
124 need_shipping_address: Option<bool>,
125 send_phone_number_to_provider: Option<bool>,
126 send_email_to_provider: Option<bool>,
127 is_flexible: Option<bool>,
128 subscription_period: Option<i64>,
129 business_connection_id: Option<&str>,
130 ) -> Result<String> {
131 let mut params = vec![
132 RequestParameter::new("title", serde_json::Value::String(title.to_owned())),
133 RequestParameter::new(
134 "description",
135 serde_json::Value::String(description.to_owned()),
136 ),
137 RequestParameter::new("payload", serde_json::Value::String(payload.to_owned())),
138 RequestParameter::new("currency", serde_json::Value::String(currency.to_owned())),
139 RequestParameter::new("prices", serde_json::to_value(&prices)?),
140 ];
141 push_opt_str(&mut params, "provider_token", provider_token);
142 push_opt(&mut params, "max_tip_amount", &max_tip_amount)?;
143 push_opt(&mut params, "suggested_tip_amounts", &suggested_tip_amounts)?;
144 push_opt_str(&mut params, "provider_data", provider_data);
145 push_opt_str(&mut params, "photo_url", photo_url);
146 push_opt(&mut params, "photo_size", &photo_size)?;
147 push_opt(&mut params, "photo_width", &photo_width)?;
148 push_opt(&mut params, "photo_height", &photo_height)?;
149 push_opt(&mut params, "need_name", &need_name)?;
150 push_opt(&mut params, "need_phone_number", &need_phone_number)?;
151 push_opt(&mut params, "need_email", &need_email)?;
152 push_opt(&mut params, "need_shipping_address", &need_shipping_address)?;
153 push_opt(
154 &mut params,
155 "send_phone_number_to_provider",
156 &send_phone_number_to_provider,
157 )?;
158 push_opt(
159 &mut params,
160 "send_email_to_provider",
161 &send_email_to_provider,
162 )?;
163 push_opt(&mut params, "is_flexible", &is_flexible)?;
164 push_opt(&mut params, "subscription_period", &subscription_period)?;
165 push_opt_str(
166 &mut params,
167 "business_connection_id",
168 business_connection_id,
169 );
170 self.do_post("createInvoiceLink", params).await
171 }
172
173 pub async fn answer_shipping_query_raw(
177 &self,
178 shipping_query_id: &str,
179 ok: bool,
180 shipping_options: Option<Vec<serde_json::Value>>,
181 error_message: Option<&str>,
182 ) -> Result<bool> {
183 let mut params = vec![
184 RequestParameter::new(
185 "shipping_query_id",
186 serde_json::Value::String(shipping_query_id.to_owned()),
187 ),
188 RequestParameter::new("ok", serde_json::to_value(ok)?),
189 ];
190 push_opt(&mut params, "shipping_options", &shipping_options)?;
191 push_opt_str(&mut params, "error_message", error_message);
192 self.do_post("answerShippingQuery", params).await
193 }
194
195 pub async fn answer_pre_checkout_query_raw(
199 &self,
200 pre_checkout_query_id: &str,
201 ok: bool,
202 error_message: Option<&str>,
203 ) -> Result<bool> {
204 let mut params = vec![
205 RequestParameter::new(
206 "pre_checkout_query_id",
207 serde_json::Value::String(pre_checkout_query_id.to_owned()),
208 ),
209 RequestParameter::new("ok", serde_json::to_value(ok)?),
210 ];
211 push_opt_str(&mut params, "error_message", error_message);
212 self.do_post("answerPreCheckoutQuery", params).await
213 }
214
215 pub async fn refund_star_payment_raw(
219 &self,
220 user_id: i64,
221 telegram_payment_charge_id: &str,
222 ) -> Result<bool> {
223 let params = vec![
224 RequestParameter::new("user_id", serde_json::to_value(user_id)?),
225 RequestParameter::new(
226 "telegram_payment_charge_id",
227 serde_json::Value::String(telegram_payment_charge_id.to_owned()),
228 ),
229 ];
230 self.do_post("refundStarPayment", params).await
231 }
232
233 pub async fn get_star_transactions_raw(
237 &self,
238 offset: Option<i64>,
239 limit: Option<i64>,
240 ) -> Result<payment::stars::star_transactions::StarTransactions> {
241 let mut params = Vec::new();
242 push_opt(&mut params, "offset", &offset)?;
243 push_opt(&mut params, "limit", &limit)?;
244 self.do_post("getStarTransactions", params).await
245 }
246
247 pub async fn edit_user_star_subscription_raw(
251 &self,
252 user_id: i64,
253 telegram_payment_charge_id: &str,
254 is_canceled: bool,
255 ) -> Result<bool> {
256 let params = vec![
257 RequestParameter::new("user_id", serde_json::to_value(user_id)?),
258 RequestParameter::new(
259 "telegram_payment_charge_id",
260 serde_json::Value::String(telegram_payment_charge_id.to_owned()),
261 ),
262 RequestParameter::new("is_canceled", serde_json::to_value(is_canceled)?),
263 ];
264 self.do_post("editUserStarSubscription", params).await
265 }
266
267 pub async fn get_my_star_balance_raw(&self) -> Result<payment::stars::star_amount::StarAmount> {
271 self.do_post("getMyStarBalance", Vec::new()).await
272 }
273}