Skip to main content

rust_tg_bot_raw/bot/
payments.rs

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    // ======================================================================
8    // Payments
9    // ======================================================================
10
11    /// Sends an invoice. Internal raw method used by builder APIs.
12    ///
13    /// Calls the Telegram `sendInvoice` API method.
14    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    /// Use this method to create a link for an invoice.
104    ///
105    /// Calls the Telegram `createInvoiceLink` API method.
106    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    /// Answers a shipping query. Internal raw method.
174    ///
175    /// Calls the Telegram `answerShippingQuery` API method.
176    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    /// Answers a pre-checkout query. Internal raw method.
196    ///
197    /// Calls the Telegram `answerPreCheckoutQuery` API method.
198    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    /// Use this method to refund a successful payment in Telegram Stars.
216    ///
217    /// Calls the Telegram `refundStarPayment` API method.
218    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    /// Use this method to get the bot's Telegram Star transactions.
234    ///
235    /// Calls the Telegram `getStarTransactions` API method.
236    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    /// Use this method to allow or disallow the user to create Telegram Star subscriptions.
248    ///
249    /// Calls the Telegram `editUserStarSubscription` API method.
250    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    /// Use this method to get the bot's current Telegram Star balance.
268    ///
269    /// Calls the Telegram `getMyStarBalance` API method.
270    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}