Commit graph

551 commits

Author SHA1 Message Date
Maybe Waffle
b1aab1a6e1 [TBA-6.1] Add weird user field
(seriously, does anyone know what is this about?)
2022-06-29 18:05:25 +04:00
Maybe Waffle
f14bc79dda Fix File fields optionability 2022-06-29 18:05:22 +04:00
Maybe Waffle
46ffd51ec9 [TBA-6.1] Support premium stuff 2022-06-29 18:04:28 +04:00
Maybe Waffle
44e4ead385 [TBA-6.1] Support new Chat fields 2022-06-29 18:04:28 +04:00
Maybe Waffle
108caf8051 Fix link 2022-06-29 00:51:58 +04:00
Maybe Waffle
9e2f5dc6cc Document InlineKeyboardButton constructors 2022-06-29 00:51:58 +04:00
Maybe Waffle
0a8434ed06 Deprecate useless InlineKeyboardButton::{text, kind} 2022-06-29 00:51:58 +04:00
Maybe Waffle
adacbe90c2 Make code in inline_keyboard_button.rs nicer 2022-06-29 00:51:58 +04:00
Maybe Waffle
71555ba43e Add more constructors to InlineKeyboardButton 2022-06-29 00:51:58 +04:00
Maybe Waffle
3a2c8a8ffe Make InlineKeyboardButtonKind::Pay.0 have type True 2022-06-29 00:51:58 +04:00
Maybe Waffle
3b94e9c05b check docs on CI 2022-06-28 20:27:47 +04:00
Maybe Waffle
c1c20005f6 Remove ChatPrivate::type_ 2022-06-26 20:45:33 +04:00
Waffle Maybe
f7cb57d928
Merge pull request #228 from teloxide/fix_unused_import
Fix unused import when throttle feature is not enabled
2022-06-21 16:32:09 +04:00
Crax
c3e2f81704 Apply clippy suggestions 2022-06-20 00:12:28 +02:00
Crax97
70f0438c7b Bugfix: use correct functions to parse caption entities in 'parse_caption_entities' 2022-06-19 23:11:27 +02:00
Crax97
1f495cff36 Add test for Message::parse_caption_entities in message.rs
message.rs: remove unused import in mod test
2022-06-19 23:11:26 +02:00
Maybe Waffle
d2068db38c Fix unused import when throttle feature is not enabled 2022-06-17 12:54:38 +04:00
Waffle Maybe
6f6e7a6678
Merge pull request #223 from teloxide/msg_url_impr
Improve url-to-message creation
2022-06-16 23:00:53 +04:00
Maybe Waffle
5053d419c3 Add functions to Message for creating urls 2022-06-16 22:55:11 +04:00
Maybe Waffle
3e6b39c48f Remove trailing / from Message::url 2022-06-16 22:53:03 +04:00
Maybe Waffle
ddaf78d891 Fix ChatPrivate serialization 2022-06-16 13:05:02 +04:00
Waffle Maybe
5e5b8e46a3
Merge pull request #217 from teloxide/message_entity_ref
Implement message entity parsing
2022-06-14 20:43:53 +04:00
Maybe Waffle
b85a5b3179 Fix clippy 2022-06-14 15:46:13 +04:00
Maybe Waffle
6df51a5e83 Document message entity related functions 2022-06-14 15:46:13 +04:00
Maybe Waffle
c7ea3f795a Fix Throttle docs 2022-06-14 15:46:13 +04:00
Maybe Waffle
312af99aa0 Add tests for MessageEntity parsing 2022-06-14 15:46:13 +04:00
Maybe Waffle
06c265cd11 Implement message entity parsing 2022-06-14 15:46:13 +04:00
Maybe Waffle
e788dc109f Improve documentation of file_size fields 2022-06-13 22:23:51 +04:00
Kezi
bcd24d2d53 Fix is_channel assert 2022-06-03 21:12:07 +02:00
Waffle Maybe
5de6529b60
Merge pull request #220 from teloxide/fix_file_deserialization
Fix deserialization of `File`
2022-06-02 21:03:00 +04:00
Maybe Waffle
b03d9d864b Correct deserialization of NotFound and UserDeactivated errors 2022-06-02 20:49:58 +04:00
Maybe Waffle
851722e46c Fix deserialization of File when file_path or file_size are missing 2022-06-02 20:47:25 +04:00
Waffle Maybe
21c5819a12
Merge pull request #218 from teloxide/doc_fix_a
Fix docs
2022-05-26 22:44:57 +04:00
Maybe Waffle
f732421b8c Add a fixme 2022-05-26 22:36:23 +04:00
Maybe Waffle
5c42e28bd1 Fix link in documentation 2022-05-26 22:36:23 +04:00
Maybe Waffle
8b281ae50b Add is_* methods to ChatMemberStatus 2022-05-24 12:20:03 +04:00
Maybe Waffle
ca37bfda9c Fix deserialization of ChatMemberStatus
We *don't* deserialize it ever, so it's not a big deal, but it's better
to stay consistent with the telegram representation.
2022-05-24 12:06:07 +04:00
Maybe Waffle
799fa6330d Remove log::warn! from throttle implementation
"Blocking on queue" literally means "nothing is happening, waiting until
something happens". There is no reason to warn users about that.
2022-05-16 21:38:38 +04:00
Maybe Waffle
bc638efc98 Add ChatId and UserId to the prelude 2022-05-05 16:03:28 +04:00
Maybe Waffle
9dd296659b Dump version 2022-04-25 14:30:23 +04:00
Maybe Waffle
ecc3bfc8f9 Rename (voice* => video*) things that were missed while TBA 6.0 update 2022-04-25 14:24:34 +04:00
Sprite
e901012b97 Add shortcuts for other kinds of entities 2022-04-25 17:13:29 +08:00
Waffle Maybe
95f519073b
Merge pull request #208 from SpriteOvO/user-mention-shortcut
Add method `MessageEntity::user_mention`
2022-04-24 20:51:49 +04:00
Sprite
2bedd358b2 Add method MessageEntity::user_mention 2022-04-24 08:20:23 +08:00
Hirrolot
1a12dd2388
Merge branch 'master' into tune-markups 2022-04-24 01:10:08 +06:00
Hirrolot
739d9738d8 Revert "Remove an unused import in requester_ext.rs"
This reverts commit 2387e11dd1.
2022-04-24 00:08:59 +06:00
Hirrolot
2387e11dd1 Remove an unused import in requester_ext.rs 2022-04-24 00:02:53 +06:00
Hirrolot
9440609a3c Accept Into<String> in InlineKeyboardButton's methods 2022-04-24 00:02:28 +06:00
Hirrolot
012fb94044 Accept IntoIterator in KeyboardMarkup::append_row 2022-04-23 23:57:42 +06:00
Maybe Waffle
b44bbde329 Fix tests 2022-04-21 21:07:03 +04:00
Maybe Waffle
852feaeda4 Update changelog and stuff 2022-04-21 20:15:31 +04:00
Maybe Waffle
dcc4f57013 Reformat requester_forward!{} macro calls
...so they are at least somewhat manageable
2022-04-21 20:15:31 +04:00
Maybe Waffle
d61fe4f85d Add TBA 6.0 methods 2022-04-21 20:15:20 +04:00
Maybe Waffle
cb8f373054 TBA 6.0 field renaming 2022-04-21 16:19:23 +04:00
Maybe Waffle
c1a763eeb0 Add TBA 6.0 types and fields 2022-04-21 16:19:13 +04:00
Maybe Waffle
cf2004dcc2 Correct MSRV 2022-04-18 22:13:36 +04:00
Maybe Waffle
f98472d798 Release v0.5.1 2022-04-18 14:03:50 +04:00
Hirrolot
5e8263704d Document the errors module 2022-04-18 15:51:17 +06:00
Waffle Maybe
b294631121
Merge pull request #198 from teloxide/bare_id
Expose bare chat id
2022-04-13 14:00:57 +04:00
Waffle Maybe
4e35f6de31
Merge pull request #130 from teloxide/chrottle_retries_and_freeze
`Throttle` retries and freeze
2022-04-13 13:58:59 +04:00
Maybe Waffle
6318a7e730 Apply changes from the review
Make `BareChatId` internal.
2022-04-13 13:57:26 +04:00
Maybe Waffle
fa189af463 ix clippyF 2022-04-13 13:56:48 +04:00
Maybe Waffle
57a3731e6b Fix Message::url 2022-04-13 13:56:48 +04:00
Maybe Waffle
7bf3894a31 Correct documentation
From the standpoint of telegram supergroup is a channel...
2022-04-13 13:56:48 +04:00
Maybe Waffle
6ebdeb7f01 Expose bare chat id 2022-04-13 13:56:46 +04:00
Maybe Waffle
bf8e11f3a5 satisfy clippy 2022-04-10 19:24:18 +04:00
Maybe Waffle
c24f7f4fc0 Fix typos & stuff 2022-04-10 19:16:41 +04:00
Maybe Waffle
2477a0f945 Fix infinite loop in read_from_rx 2022-04-10 19:04:30 +04:00
Maybe Waffle
af0dd99ef4 Use Duration instead of u32 as the RetryAfter field 2022-04-10 18:48:00 +04:00
Maybe Waffle
d259f8aa23 Add diargam explaining how ThrottlingRequest works
https://asciiflow.com/#/share/eJzFV71u2zAQfhWCkx0EDdqhRbUEGbpmCLoE0BBCpiPBEplSFBwhCFoEHTt0MNw%2BRKeMRZ9GT9KjrB8ykhj9pRUIWTR1d9%2Fdfcej7jAjEcUOS8LwGIckpQI7%2BM7Fty523r9%2Be%2BziFJ7evFNPkt5KmLj45AT1vrLdH9dlXRIffcGlDAN2fUE%2FJTSWBwm4b7nYULFYWoSHm4PVoaMENELUMgqM41Xsf8NdFDELYhRTJk20MaVFENGKe0kELxAZcHZ4a%2BL1uXZg9jATtkIejxTgGK25QBEX1Eit3QVztdQaMFAV5RFAMHy%2BRYEconXfppV4MiFhmOaRjo3157T2CQl6YfKNVIwKgkGiQu5tdKymbp%2FEFQcDujpV4j%2B%2BVnokL1ZbCe78Q196Z0Lng5Hhp3nuyvvkfBpWL1sodW53w0CRT44ich14R%2B3M7fKjq87m8cusNsNqsw712XA%2B1IEbRx0Tm2k%2FL5GAMeB%2FbWlLYONR%2B1pRGZqmOYKX1X2hBpjlxQY7FWx7ChQ0XCVY1qJTPaErVdGvEqZ%2BFsurSTGVPnSmBpjZPG0SYFIi7Zp7Ua5JUAtxTblubKNDZfUvp4lMBCttaFytUmaTjZNQlrJ5y%2Fapt4GeqjJerf1%2FPyHuj9qPkb4medo5oE8%2FCLG4oFKkZ2sJ51O2XD4vScOYTrHZTiGr7EwBtlnRcRA4oQGdREBjOF2dDpB8EURd3bhVss84r4zX12W7RuulJzfbfct2X0aN74Ns7nWbD%2Fl%2FT1r%2BQ7e%2B6fWobrtuX35ZPf15QDbCLOMyWKdlk5U%2B0b%2BPtOA8VhYUgdNy81OqtKNqXfKICgHNW4M06Kg6whN1ivbJzQ1ldKXTKOv%2B1p2etRHf3fge3%2F8FrCjqXw%3D%3D)
2022-04-10 17:34:15 +04:00
Maybe Waffle
ed48de2f75 Simplify freezing 2022-04-10 17:34:15 +04:00
Maybe Waffle
dcbef82e43 Cleanup throttling::request 2022-04-10 17:34:15 +04:00
Maybe Waffle
081b74edb0 Split Throttle implementation into modules 2022-04-10 17:34:02 +04:00
Maybe Waffle
439a345dee Use tokio's try_recv instead of hacks 2022-04-10 17:25:06 +04:00
Maybe Waffle
435181fa0b Improve sanity
Refactor `Throttle` send-future. Previously it was a hand-written future, but
this quickly escalated to an unreadable mess. This commit uses `box`ing and
`async fn` to mitigate this problem.

Hopefully I'm not going insane now
2022-04-10 17:25:06 +04:00
Maybe Waffle
0a03431653 Make {Json,Multipart}Request clonable
This is required for the new `Throttle` design
2022-04-10 17:25:06 +04:00
Maybe Waffle
43802a5c41 Improve Throttling adoptor
- Freeze when getting `RetryAfter(_)` error
- Retry requests that previously returned `RetryAfter(_)` error
2022-04-10 17:24:57 +04:00
Maybe Waffle
6a91c44836 make errors module pub and add errors::AsResponseParameters trait 2022-04-10 17:23:33 +04:00
Maybe Waffle
51d6800a32 Make RequestError::RetryAfter::0 u32, instead of i32
(you can't really wait a negative amount of time, can you?)
2022-04-10 17:22:20 +04:00
Maybe Waffle
213db7b64c Add AllowedUpdate::ChatJoinRequest 2022-04-08 15:57:16 +04:00
Waffle Maybe
ac08117216
Merge pull request #197 from teloxide/convenience_user_and_me_methods
Add some convenience methods to `User` and `Me`
2022-04-04 03:35:07 +04:00
Maybe Waffle
d91863e1c3 Add some tests 2022-04-04 03:00:53 +04:00
Waffle Maybe
d1cf0e4f52
Merge branch 'master' into hide_token_in_errors 2022-04-03 16:14:34 +04:00
Maybe Waffle
05603560e6 Give a name to a magic number and document it 2022-04-03 14:47:10 +04:00
Maybe Waffle
daec5ee13e Hide bot token in errors
This fixes a potential[^1] security vulnerability -- if bot shows errors
from teloxide to the user & for some reason network error happened[^2]
the url of the request would be included in the error. Since TBA
includes bot token in the error this may lead to token leakage.

This commit fixes that issue by removing the token from the urls of
`reqwest::Error`, we try to only replace the token, but if we fail we
remove the whole url.

This can be tested by using a very low timeout value for the http
reqwest client:
```rust
let client = reqwest::Client::builder()
    .timeout(std::time::Duration::from_millis(1))
    .build()
    .unwrap();

let bot = Bot::from_env_with_client(client).auto_send();

// see if the token is redacted when network error (timeout) happens
// while sending common requests
let _ = dbg!(bot.get_me().await);

// see if the token is redacted when network error (timeout) happens
// while downloading files ("path" is unimportant as the timeout is so
// low the request probably won't even be sent)
let _ = dbg!(bot.download_file_stream("path").next().await);
```

For me this gives the following result:
```text
[t.rs:26] bot.get_me().await = Err(
    Network(
        reqwest::Error {
            kind: Request,
            url: Url {
                scheme: "https",
                cannot_be_a_base: false,
                username: "",
                password: None,
                host: Some(
                    Domain(
                        "api.telegram.org",
                    ),
                ),
                port: None,
                path: "/token:redacted/GetMe",
                query: None,
                fragment: None,
            },
            source: TimedOut,
        },
    ),
)
[t.rs:31] bot.download_file_stream("path").next().await = Some(
    Err(
        reqwest::Error {
            kind: Request,
            url: Url {
                scheme: "https",
                cannot_be_a_base: false,
                username: "",
                password: None,
                host: Some(
                    Domain(
                        "api.telegram.org",
                    ),
                ),
                port: None,
                path: "/file/token:redacted/path",
                query: None,
                fragment: None,
            },
            source: TimedOut,
        },
    ),
)
```

Note that this commits parent is `d0be260` and not the current master
the master branch currently contains breaking changes (we'll need to
make a release from this brach directly).

[^1]: Note that there are recorded cases where the token got exposed.
[^2]: Note that this can be theoretically be controlled by the user when
      sending/downloading bigger files.
2022-04-03 13:34:17 +04:00
Maybe Waffle
b3c0d00b7d "override" mention and tme_url on Me
That's not **really** an override, but by adding an inherent methods
we "hide" methods from `Deref<Target = User>`, that allows us to return
non-option types from `me.mention()` and `me.tme_url()` -- bots must
always have usernames.
2022-04-02 22:56:32 +04:00
Maybe Waffle
df9ffe8918 Add Me::username and Deref<Target = User> impl for Me 2022-04-02 22:43:55 +04:00
Maybe Waffle
55f753a201 Add User::{tme_url, preferably_tme_url} functions 2022-04-02 21:09:34 +04:00
Maybe Waffle
705083c2d9 Add UserId::{url, is_anonymous, is_channel, is_telegram} functions 2022-04-02 20:59:41 +04:00
Waffle Maybe
1746be2b7f
Merge pull request #194 from teloxide/chat_id_refactor
Chat and user id refactor
2022-04-02 19:11:42 +04:00
Waffle Maybe
c250a9b327
Merge pull request #193 from teloxide/telergam
Fix a typo in documentation
2022-04-02 18:40:06 +04:00
Maybe Waffle
c2d2a15ef1 Split derives because rustfmt hates me 2022-04-02 18:13:32 +04:00
Maybe Waffle
71dee3b563 Use Into<ChatId> in methods 2022-04-02 18:10:47 +04:00
Maybe Waffle
4fbec56674 Impl From<UserId> for ChatId and Recipient 2022-04-02 18:10:47 +04:00
Maybe Waffle
036c46caaa reformat code a bit 2022-04-02 18:10:46 +04:00
Maybe Waffle
f2378935b7 Make chat id typed (add ChatId)
Note that this is different from the previous `ChatId` (that was renamed
to `Recipient`), since it can't hold @channelusername.

Reason: same as w/ `UserId`
2022-04-02 18:10:46 +04:00
Maybe Waffle
41e09159a6 Make user id typed (add UserId)
Reason: when user id is just an integer, it's easy to accidentally
use a "random" integer instead of actual user id, typed APIs make code
less prone to some mistakes.

This commit also fixes an issue when a wrong integer type was used for
`user_id` in `Contact`.

Another option that this addition unlocks is adding methods/implementing
foreign trait for `UserId`.
2022-04-02 18:10:46 +04:00
Maybe Waffle
0a1d73c223 Rename ChatId => Recipient
Reason: it isn't _really_ a chat id, it can also be a channel username.
2022-04-02 18:10:46 +04:00
Maybe Waffle
22cfffc704 Fix some more typos 2022-03-24 21:32:01 +04:00
Waffle Maybe
ecf90c8c05
Fix a typo in documentation 2022-03-24 17:51:34 +04:00