mirror of
https://github.com/teloxide/teloxide.git
synced 2024-12-22 14:35:36 +01:00
commit
8d55a4a258
39 changed files with 305 additions and 180 deletions
|
@ -21,9 +21,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||
- `Request` now requires `Self: IntoFuture`
|
||||
- There is no need for `AutoSend` anymore
|
||||
- MSRV (Minimal Supported Rust Version) was bumped from `1.58.0` to `1.64.0`
|
||||
- Message id parameters and fields now use `MessageId` type instead of `i32` ([#254][pr254])
|
||||
- Refactored `Sticker` and related types ([#251][pr251])
|
||||
|
||||
[pr253]: https://github.com/teloxide/teloxide-core/pull/253
|
||||
[pr254]: https://github.com/teloxide/teloxide-core/pull/254
|
||||
|
||||
### Removed
|
||||
|
||||
|
|
56
schema.ron
56
schema.ron
|
@ -268,7 +268,7 @@ Schema(
|
|||
),
|
||||
Param(
|
||||
name: "reply_to_message_id",
|
||||
ty: Option(i32),
|
||||
ty: Option(RawTy("MessageId")),
|
||||
descr: Doc(md: "If the message is a reply, ID of the original message")
|
||||
),
|
||||
Param(
|
||||
|
@ -324,7 +324,7 @@ Schema(
|
|||
),
|
||||
Param(
|
||||
name: "message_id",
|
||||
ty: i32,
|
||||
ty: RawTy("MessageId"),
|
||||
descr: Doc(md: "Message identifier in the chat specified in _from\\_chat\\_id_")
|
||||
),
|
||||
],
|
||||
|
@ -351,7 +351,7 @@ Schema(
|
|||
),
|
||||
Param(
|
||||
name: "message_id",
|
||||
ty: i32,
|
||||
ty: RawTy("MessageId"),
|
||||
descr: Doc(md: "Message identifier in the chat specified in _from\\_chat\\_id_")
|
||||
),
|
||||
Param(
|
||||
|
@ -387,7 +387,7 @@ Schema(
|
|||
),
|
||||
Param(
|
||||
name: "reply_to_message_id",
|
||||
ty: Option(i32),
|
||||
ty: Option(RawTy("MessageId")),
|
||||
descr: Doc(md: "If the message is a reply, ID of the original message")
|
||||
),
|
||||
Param(
|
||||
|
@ -464,7 +464,7 @@ Schema(
|
|||
),
|
||||
Param(
|
||||
name: "reply_to_message_id",
|
||||
ty: Option(i32),
|
||||
ty: Option(RawTy("MessageId")),
|
||||
descr: Doc(md: "If the message is a reply, ID of the original message")
|
||||
),
|
||||
Param(
|
||||
|
@ -567,7 +567,7 @@ Schema(
|
|||
),
|
||||
Param(
|
||||
name: "reply_to_message_id",
|
||||
ty: Option(i32),
|
||||
ty: Option(RawTy("MessageId")),
|
||||
descr: Doc(md: "If the message is a reply, ID of the original message")
|
||||
),
|
||||
Param(
|
||||
|
@ -657,7 +657,7 @@ Schema(
|
|||
),
|
||||
Param(
|
||||
name: "reply_to_message_id",
|
||||
ty: Option(i32),
|
||||
ty: Option(RawTy("MessageId")),
|
||||
descr: Doc(md: "If the message is a reply, ID of the original message")
|
||||
),
|
||||
Param(
|
||||
|
@ -765,7 +765,7 @@ Schema(
|
|||
),
|
||||
Param(
|
||||
name: "reply_to_message_id",
|
||||
ty: Option(i32),
|
||||
ty: Option(RawTy("MessageId")),
|
||||
descr: Doc(md: "If the message is a reply, ID of the original message")
|
||||
),
|
||||
Param(
|
||||
|
@ -866,7 +866,7 @@ Schema(
|
|||
),
|
||||
Param(
|
||||
name: "reply_to_message_id",
|
||||
ty: Option(i32),
|
||||
ty: Option(RawTy("MessageId")),
|
||||
descr: Doc(md: "If the message is a reply, ID of the original message")
|
||||
),
|
||||
Param(
|
||||
|
@ -947,7 +947,7 @@ Schema(
|
|||
),
|
||||
Param(
|
||||
name: "reply_to_message_id",
|
||||
ty: Option(i32),
|
||||
ty: Option(RawTy("MessageId")),
|
||||
descr: Doc(md: "If the message is a reply, ID of the original message")
|
||||
),
|
||||
Param(
|
||||
|
@ -1027,7 +1027,7 @@ Schema(
|
|||
),
|
||||
Param(
|
||||
name: "reply_to_message_id",
|
||||
ty: Option(i32),
|
||||
ty: Option(RawTy("MessageId")),
|
||||
descr: Doc(md: "If the message is a reply, ID of the original message")
|
||||
),
|
||||
Param(
|
||||
|
@ -1084,7 +1084,7 @@ Schema(
|
|||
),
|
||||
Param(
|
||||
name: "reply_to_message_id",
|
||||
ty: Option(i32),
|
||||
ty: Option(RawTy("MessageId")),
|
||||
descr: Doc(md: "If the message is a reply, ID of the original message")
|
||||
),
|
||||
Param(
|
||||
|
@ -1157,7 +1157,7 @@ Schema(
|
|||
),
|
||||
Param(
|
||||
name: "reply_to_message_id",
|
||||
ty: Option(i32),
|
||||
ty: Option(RawTy("MessageId")),
|
||||
descr: Doc(md: "If the message is a reply, ID of the original message")
|
||||
),
|
||||
Param(
|
||||
|
@ -1195,7 +1195,7 @@ Schema(
|
|||
),
|
||||
Param(
|
||||
name: "message_id",
|
||||
ty: i32,
|
||||
ty: RawTy("MessageId"),
|
||||
descr: Doc(md: "Identifier of the message to edit")
|
||||
),
|
||||
Param(
|
||||
|
@ -1311,7 +1311,7 @@ Schema(
|
|||
),
|
||||
Param(
|
||||
name: "message_id",
|
||||
ty: i32,
|
||||
ty: RawTy("MessageId"),
|
||||
descr: Doc(md: "Identifier of the message to edit")
|
||||
),
|
||||
Param(
|
||||
|
@ -1450,7 +1450,7 @@ Schema(
|
|||
),
|
||||
Param(
|
||||
name: "reply_to_message_id",
|
||||
ty: Option(i32),
|
||||
ty: Option(RawTy("MessageId")),
|
||||
descr: Doc(md: "If the message is a reply, ID of the original message")
|
||||
),
|
||||
Param(
|
||||
|
@ -1524,7 +1524,7 @@ Schema(
|
|||
),
|
||||
Param(
|
||||
name: "reply_to_message_id",
|
||||
ty: Option(i32),
|
||||
ty: Option(RawTy("MessageId")),
|
||||
descr: Doc(md: "If the message is a reply, ID of the original message")
|
||||
),
|
||||
Param(
|
||||
|
@ -1638,7 +1638,7 @@ Schema(
|
|||
),
|
||||
Param(
|
||||
name: "reply_to_message_id",
|
||||
ty: Option(i32),
|
||||
ty: Option(RawTy("MessageId")),
|
||||
descr: Doc(md: "If the message is a reply, ID of the original message")
|
||||
),
|
||||
Param(
|
||||
|
@ -1694,7 +1694,7 @@ Schema(
|
|||
),
|
||||
Param(
|
||||
name: "reply_to_message_id",
|
||||
ty: Option(i32),
|
||||
ty: Option(RawTy("MessageId")),
|
||||
descr: Doc(md: "If the message is a reply, ID of the original message")
|
||||
),
|
||||
Param(
|
||||
|
@ -2311,7 +2311,7 @@ Schema(
|
|||
),
|
||||
Param(
|
||||
name: "message_id",
|
||||
ty: i32,
|
||||
ty: RawTy("MessageId"),
|
||||
descr: Doc(md: "Identifier of a message to pin"),
|
||||
),
|
||||
Param(
|
||||
|
@ -2335,7 +2335,7 @@ Schema(
|
|||
),
|
||||
Param(
|
||||
name: "message_id",
|
||||
ty: Option(i32),
|
||||
ty: Option(RawTy("MessageId")),
|
||||
descr: Doc(md: "Identifier of a message to unpin. If not specified, the most recent pinned message (by sending date) will be unpinned.")
|
||||
),
|
||||
],
|
||||
|
@ -2760,7 +2760,7 @@ Schema(
|
|||
),
|
||||
Param(
|
||||
name: "message_id",
|
||||
ty: i32,
|
||||
ty: RawTy("MessageId"),
|
||||
descr: Doc(md: "Identifier of the message to edit")
|
||||
),
|
||||
Param(
|
||||
|
@ -2860,7 +2860,7 @@ Schema(
|
|||
),
|
||||
Param(
|
||||
name: "message_id",
|
||||
ty: i32,
|
||||
ty: RawTy("MessageId"),
|
||||
descr: Doc(md: "Identifier of the message to edit")
|
||||
),
|
||||
Param(
|
||||
|
@ -2948,7 +2948,7 @@ Schema(
|
|||
),
|
||||
Param(
|
||||
name: "message_id",
|
||||
ty: i32,
|
||||
ty: RawTy("MessageId"),
|
||||
descr: Doc(md: "Identifier of the message to edit")
|
||||
),
|
||||
Param(
|
||||
|
@ -3009,7 +3009,7 @@ Schema(
|
|||
),
|
||||
Param(
|
||||
name: "message_id",
|
||||
ty: i32,
|
||||
ty: RawTy("MessageId"),
|
||||
descr: Doc(md: "Identifier of the message to edit")
|
||||
),
|
||||
Param(
|
||||
|
@ -3059,7 +3059,7 @@ Schema(
|
|||
),
|
||||
Param(
|
||||
name: "message_id",
|
||||
ty: i32,
|
||||
ty: RawTy("MessageId"),
|
||||
descr: Doc(md: "Identifier of the message to edit")
|
||||
),
|
||||
Param(
|
||||
|
@ -3086,7 +3086,7 @@ Schema(
|
|||
),
|
||||
Param(
|
||||
name: "message_id",
|
||||
ty: i32,
|
||||
ty: RawTy("MessageId"),
|
||||
descr: Doc(md: "Identifier of the message to delete")
|
||||
),
|
||||
],
|
||||
|
@ -3786,7 +3786,7 @@ Schema(
|
|||
),
|
||||
Param(
|
||||
name: "message_id",
|
||||
ty: i64,
|
||||
ty: RawTy("MessageId"),
|
||||
descr: Doc(md: "Identifier of the message to edit")
|
||||
),
|
||||
],
|
||||
|
|
|
@ -312,14 +312,14 @@ trait ErasableRequester<'a> {
|
|||
&self,
|
||||
chat_id: Recipient,
|
||||
from_chat_id: Recipient,
|
||||
message_id: i32,
|
||||
message_id: MessageId,
|
||||
) -> ErasedRequest<'a, ForwardMessage, Self::Err>;
|
||||
|
||||
fn copy_message(
|
||||
&self,
|
||||
chat_id: Recipient,
|
||||
from_chat_id: Recipient,
|
||||
message_id: i32,
|
||||
message_id: MessageId,
|
||||
) -> ErasedRequest<'a, CopyMessage, Self::Err>;
|
||||
|
||||
fn send_photo(
|
||||
|
@ -380,7 +380,7 @@ trait ErasableRequester<'a> {
|
|||
fn edit_message_live_location(
|
||||
&self,
|
||||
chat_id: Recipient,
|
||||
message_id: i32,
|
||||
message_id: MessageId,
|
||||
latitude: f64,
|
||||
longitude: f64,
|
||||
) -> ErasedRequest<'a, EditMessageLiveLocation, Self::Err>;
|
||||
|
@ -395,7 +395,7 @@ trait ErasableRequester<'a> {
|
|||
fn stop_message_live_location(
|
||||
&self,
|
||||
chat_id: Recipient,
|
||||
message_id: i32,
|
||||
message_id: MessageId,
|
||||
latitude: f64,
|
||||
longitude: f64,
|
||||
) -> ErasedRequest<'a, StopMessageLiveLocation, Self::Err>;
|
||||
|
@ -562,7 +562,7 @@ trait ErasableRequester<'a> {
|
|||
fn pin_chat_message(
|
||||
&self,
|
||||
chat_id: Recipient,
|
||||
message_id: i32,
|
||||
message_id: MessageId,
|
||||
) -> ErasedRequest<'a, PinChatMessage, Self::Err>;
|
||||
|
||||
fn unpin_chat_message(
|
||||
|
@ -652,7 +652,7 @@ trait ErasableRequester<'a> {
|
|||
fn edit_message_text(
|
||||
&self,
|
||||
chat_id: Recipient,
|
||||
message_id: i32,
|
||||
message_id: MessageId,
|
||||
text: String,
|
||||
) -> ErasedRequest<'a, EditMessageText, Self::Err>;
|
||||
|
||||
|
@ -665,7 +665,7 @@ trait ErasableRequester<'a> {
|
|||
fn edit_message_caption(
|
||||
&self,
|
||||
chat_id: Recipient,
|
||||
message_id: i32,
|
||||
message_id: MessageId,
|
||||
) -> ErasedRequest<'a, EditMessageCaption, Self::Err>;
|
||||
|
||||
fn edit_message_caption_inline(
|
||||
|
@ -676,7 +676,7 @@ trait ErasableRequester<'a> {
|
|||
fn edit_message_media(
|
||||
&self,
|
||||
chat_id: Recipient,
|
||||
message_id: i32,
|
||||
message_id: MessageId,
|
||||
media: InputMedia,
|
||||
) -> ErasedRequest<'a, EditMessageMedia, Self::Err>;
|
||||
|
||||
|
@ -689,7 +689,7 @@ trait ErasableRequester<'a> {
|
|||
fn edit_message_reply_markup(
|
||||
&self,
|
||||
chat_id: Recipient,
|
||||
message_id: i32,
|
||||
message_id: MessageId,
|
||||
) -> ErasedRequest<'a, EditMessageReplyMarkup, Self::Err>;
|
||||
|
||||
fn edit_message_reply_markup_inline(
|
||||
|
@ -700,13 +700,13 @@ trait ErasableRequester<'a> {
|
|||
fn stop_poll(
|
||||
&self,
|
||||
chat_id: Recipient,
|
||||
message_id: i32,
|
||||
message_id: MessageId,
|
||||
) -> ErasedRequest<'a, StopPoll, Self::Err>;
|
||||
|
||||
fn delete_message(
|
||||
&self,
|
||||
chat_id: Recipient,
|
||||
message_id: i32,
|
||||
message_id: MessageId,
|
||||
) -> ErasedRequest<'a, DeleteMessage, Self::Err>;
|
||||
|
||||
fn send_sticker(
|
||||
|
@ -815,7 +815,7 @@ trait ErasableRequester<'a> {
|
|||
user_id: UserId,
|
||||
score: u64,
|
||||
chat_id: u32,
|
||||
message_id: i64,
|
||||
message_id: MessageId,
|
||||
) -> ErasedRequest<'a, SetGameScore, Self::Err>;
|
||||
|
||||
fn set_game_score_inline(
|
||||
|
@ -878,7 +878,7 @@ where
|
|||
&self,
|
||||
chat_id: Recipient,
|
||||
from_chat_id: Recipient,
|
||||
message_id: i32,
|
||||
message_id: MessageId,
|
||||
) -> ErasedRequest<'a, ForwardMessage, Self::Err> {
|
||||
Requester::forward_message(self, chat_id, from_chat_id, message_id).erase()
|
||||
}
|
||||
|
@ -887,7 +887,7 @@ where
|
|||
&self,
|
||||
chat_id: Recipient,
|
||||
from_chat_id: Recipient,
|
||||
message_id: i32,
|
||||
message_id: MessageId,
|
||||
) -> ErasedRequest<'a, CopyMessage, Self::Err> {
|
||||
Requester::copy_message(self, chat_id, from_chat_id, message_id).erase()
|
||||
}
|
||||
|
@ -968,7 +968,7 @@ where
|
|||
fn edit_message_live_location(
|
||||
&self,
|
||||
chat_id: Recipient,
|
||||
message_id: i32,
|
||||
message_id: MessageId,
|
||||
latitude: f64,
|
||||
longitude: f64,
|
||||
) -> ErasedRequest<'a, EditMessageLiveLocation, Self::Err> {
|
||||
|
@ -989,7 +989,7 @@ where
|
|||
fn stop_message_live_location(
|
||||
&self,
|
||||
chat_id: Recipient,
|
||||
message_id: i32,
|
||||
message_id: MessageId,
|
||||
latitude: f64,
|
||||
longitude: f64,
|
||||
) -> ErasedRequest<'a, StopMessageLiveLocation, Self::Err> {
|
||||
|
@ -1214,7 +1214,7 @@ where
|
|||
fn pin_chat_message(
|
||||
&self,
|
||||
chat_id: Recipient,
|
||||
message_id: i32,
|
||||
message_id: MessageId,
|
||||
) -> ErasedRequest<'a, PinChatMessage, Self::Err> {
|
||||
Requester::pin_chat_message(self, chat_id, message_id).erase()
|
||||
}
|
||||
|
@ -1346,7 +1346,7 @@ where
|
|||
fn edit_message_text(
|
||||
&self,
|
||||
chat_id: Recipient,
|
||||
message_id: i32,
|
||||
message_id: MessageId,
|
||||
text: String,
|
||||
) -> ErasedRequest<'a, EditMessageText, Self::Err> {
|
||||
Requester::edit_message_text(self, chat_id, message_id, text).erase()
|
||||
|
@ -1363,7 +1363,7 @@ where
|
|||
fn edit_message_caption(
|
||||
&self,
|
||||
chat_id: Recipient,
|
||||
message_id: i32,
|
||||
message_id: MessageId,
|
||||
) -> ErasedRequest<'a, EditMessageCaption, Self::Err> {
|
||||
Requester::edit_message_caption(self, chat_id, message_id).erase()
|
||||
}
|
||||
|
@ -1378,7 +1378,7 @@ where
|
|||
fn edit_message_media(
|
||||
&self,
|
||||
chat_id: Recipient,
|
||||
message_id: i32,
|
||||
message_id: MessageId,
|
||||
media: InputMedia,
|
||||
) -> ErasedRequest<'a, EditMessageMedia, Self::Err> {
|
||||
Requester::edit_message_media(self, chat_id, message_id, media).erase()
|
||||
|
@ -1395,7 +1395,7 @@ where
|
|||
fn edit_message_reply_markup(
|
||||
&self,
|
||||
chat_id: Recipient,
|
||||
message_id: i32,
|
||||
message_id: MessageId,
|
||||
) -> ErasedRequest<'a, EditMessageReplyMarkup, Self::Err> {
|
||||
Requester::edit_message_reply_markup(self, chat_id, message_id).erase()
|
||||
}
|
||||
|
@ -1410,7 +1410,7 @@ where
|
|||
fn stop_poll(
|
||||
&self,
|
||||
chat_id: Recipient,
|
||||
message_id: i32,
|
||||
message_id: MessageId,
|
||||
) -> ErasedRequest<'a, StopPoll, Self::Err> {
|
||||
Requester::stop_poll(self, chat_id, message_id).erase()
|
||||
}
|
||||
|
@ -1418,7 +1418,7 @@ where
|
|||
fn delete_message(
|
||||
&self,
|
||||
chat_id: Recipient,
|
||||
message_id: i32,
|
||||
message_id: MessageId,
|
||||
) -> ErasedRequest<'a, DeleteMessage, Self::Err> {
|
||||
Requester::delete_message(self, chat_id, message_id).erase()
|
||||
}
|
||||
|
@ -1576,7 +1576,7 @@ where
|
|||
user_id: UserId,
|
||||
score: u64,
|
||||
chat_id: u32,
|
||||
message_id: i64,
|
||||
message_id: MessageId,
|
||||
) -> ErasedRequest<'a, SetGameScore, Self::Err> {
|
||||
Requester::set_game_score(self, user_id, score, chat_id, message_id).erase()
|
||||
}
|
||||
|
|
|
@ -6,7 +6,7 @@ use crate::{
|
|||
requests::{JsonRequest, MultipartRequest},
|
||||
types::{
|
||||
BotCommand, ChatId, ChatPermissions, InlineQueryResult, InputFile, InputMedia,
|
||||
InputSticker, LabeledPrice, Recipient, UserId,
|
||||
InputSticker, LabeledPrice, MessageId, Recipient, UserId,
|
||||
},
|
||||
Bot,
|
||||
};
|
||||
|
@ -60,7 +60,7 @@ impl Requester for Bot {
|
|||
&self,
|
||||
chat_id: C,
|
||||
from_chat_id: F,
|
||||
message_id: i32,
|
||||
message_id: MessageId,
|
||||
) -> Self::ForwardMessage
|
||||
where
|
||||
C: Into<Recipient>,
|
||||
|
@ -168,7 +168,7 @@ impl Requester for Bot {
|
|||
fn edit_message_live_location<C>(
|
||||
&self,
|
||||
chat_id: C,
|
||||
message_id: i32,
|
||||
message_id: MessageId,
|
||||
latitude: f64,
|
||||
longitude: f64,
|
||||
) -> Self::EditMessageLiveLocation
|
||||
|
@ -203,7 +203,7 @@ impl Requester for Bot {
|
|||
fn stop_message_live_location<C>(
|
||||
&self,
|
||||
chat_id: C,
|
||||
message_id: i32,
|
||||
message_id: MessageId,
|
||||
latitude: f64,
|
||||
longitude: f64,
|
||||
) -> Self::StopMessageLiveLocation
|
||||
|
@ -564,7 +564,7 @@ impl Requester for Bot {
|
|||
|
||||
type PinChatMessage = JsonRequest<payloads::PinChatMessage>;
|
||||
|
||||
fn pin_chat_message<C>(&self, chat_id: C, message_id: i32) -> Self::PinChatMessage
|
||||
fn pin_chat_message<C>(&self, chat_id: C, message_id: MessageId) -> Self::PinChatMessage
|
||||
where
|
||||
C: Into<Recipient>,
|
||||
{
|
||||
|
@ -756,7 +756,12 @@ impl Requester for Bot {
|
|||
|
||||
type EditMessageText = JsonRequest<payloads::EditMessageText>;
|
||||
|
||||
fn edit_message_text<C, T>(&self, chat_id: C, message_id: i32, text: T) -> Self::EditMessageText
|
||||
fn edit_message_text<C, T>(
|
||||
&self,
|
||||
chat_id: C,
|
||||
message_id: MessageId,
|
||||
text: T,
|
||||
) -> Self::EditMessageText
|
||||
where
|
||||
C: Into<Recipient>,
|
||||
T: Into<String>,
|
||||
|
@ -786,7 +791,7 @@ impl Requester for Bot {
|
|||
|
||||
type EditMessageCaption = JsonRequest<payloads::EditMessageCaption>;
|
||||
|
||||
fn edit_message_caption<C>(&self, chat_id: C, message_id: i32) -> Self::EditMessageCaption
|
||||
fn edit_message_caption<C>(&self, chat_id: C, message_id: MessageId) -> Self::EditMessageCaption
|
||||
where
|
||||
C: Into<Recipient>,
|
||||
{
|
||||
|
@ -813,7 +818,7 @@ impl Requester for Bot {
|
|||
fn edit_message_media<C>(
|
||||
&self,
|
||||
chat_id: C,
|
||||
message_id: i32,
|
||||
message_id: MessageId,
|
||||
media: InputMedia,
|
||||
) -> Self::EditMessageMedia
|
||||
where
|
||||
|
@ -846,7 +851,7 @@ impl Requester for Bot {
|
|||
fn edit_message_reply_markup<C>(
|
||||
&self,
|
||||
chat_id: C,
|
||||
message_id: i32,
|
||||
message_id: MessageId,
|
||||
) -> Self::EditMessageReplyMarkup
|
||||
where
|
||||
C: Into<Recipient>,
|
||||
|
@ -874,7 +879,7 @@ impl Requester for Bot {
|
|||
|
||||
type StopPoll = JsonRequest<payloads::StopPoll>;
|
||||
|
||||
fn stop_poll<C>(&self, chat_id: C, message_id: i32) -> Self::StopPoll
|
||||
fn stop_poll<C>(&self, chat_id: C, message_id: MessageId) -> Self::StopPoll
|
||||
where
|
||||
C: Into<Recipient>,
|
||||
{
|
||||
|
@ -883,7 +888,7 @@ impl Requester for Bot {
|
|||
|
||||
type DeleteMessage = JsonRequest<payloads::DeleteMessage>;
|
||||
|
||||
fn delete_message<C>(&self, chat_id: C, message_id: i32) -> Self::DeleteMessage
|
||||
fn delete_message<C>(&self, chat_id: C, message_id: MessageId) -> Self::DeleteMessage
|
||||
where
|
||||
C: Into<Recipient>,
|
||||
{
|
||||
|
@ -1139,7 +1144,7 @@ impl Requester for Bot {
|
|||
user_id: UserId,
|
||||
score: u64,
|
||||
chat_id: u32,
|
||||
message_id: i64,
|
||||
message_id: MessageId,
|
||||
) -> Self::SetGameScore {
|
||||
Self::SetGameScore::new(
|
||||
self.clone(),
|
||||
|
@ -1190,7 +1195,12 @@ impl Requester for Bot {
|
|||
|
||||
type CopyMessage = JsonRequest<payloads::CopyMessage>;
|
||||
|
||||
fn copy_message<C, F>(&self, chat_id: C, from_chat_id: F, message_id: i32) -> Self::CopyMessage
|
||||
fn copy_message<C, F>(
|
||||
&self,
|
||||
chat_id: C,
|
||||
from_chat_id: F,
|
||||
message_id: MessageId,
|
||||
) -> Self::CopyMessage
|
||||
where
|
||||
C: Into<Recipient>,
|
||||
F: Into<Recipient>,
|
||||
|
|
|
@ -479,19 +479,19 @@ macro_rules! requester_forward {
|
|||
(@method forward_message $body:ident $ty:ident) => {
|
||||
type ForwardMessage = $ty![ForwardMessage];
|
||||
|
||||
fn forward_message<C, F>(&self, chat_id: C, from_chat_id: F, message_id: i32) -> Self::ForwardMessage where C: Into<Recipient>,
|
||||
fn forward_message<C, F>(&self, chat_id: C, from_chat_id: F, message_id: MessageId) -> Self::ForwardMessage where C: Into<Recipient>,
|
||||
F: Into<Recipient> {
|
||||
let this = self;
|
||||
$body!(forward_message this (chat_id: C, from_chat_id: F, message_id: i32))
|
||||
$body!(forward_message this (chat_id: C, from_chat_id: F, message_id: MessageId))
|
||||
}
|
||||
};
|
||||
(@method copy_message $body:ident $ty:ident) => {
|
||||
type CopyMessage = $ty![CopyMessage];
|
||||
|
||||
fn copy_message<C, F>(&self, chat_id: C, from_chat_id: F, message_id: i32) -> Self::CopyMessage where C: Into<Recipient>,
|
||||
fn copy_message<C, F>(&self, chat_id: C, from_chat_id: F, message_id: MessageId) -> Self::CopyMessage where C: Into<Recipient>,
|
||||
F: Into<Recipient> {
|
||||
let this = self;
|
||||
$body!(copy_message this (chat_id: C, from_chat_id: F, message_id: i32))
|
||||
$body!(copy_message this (chat_id: C, from_chat_id: F, message_id: MessageId))
|
||||
}
|
||||
};
|
||||
(@method send_photo $body:ident $ty:ident) => {
|
||||
|
@ -570,9 +570,9 @@ macro_rules! requester_forward {
|
|||
(@method edit_message_live_location $body:ident $ty:ident) => {
|
||||
type EditMessageLiveLocation = $ty![EditMessageLiveLocation];
|
||||
|
||||
fn edit_message_live_location<C>(&self, chat_id: C, message_id: i32, latitude: f64, longitude: f64) -> Self::EditMessageLiveLocation where C: Into<Recipient> {
|
||||
fn edit_message_live_location<C>(&self, chat_id: C, message_id: MessageId, latitude: f64, longitude: f64) -> Self::EditMessageLiveLocation where C: Into<Recipient> {
|
||||
let this = self;
|
||||
$body!(edit_message_live_location this (chat_id: C, message_id: i32, latitude: f64, longitude: f64))
|
||||
$body!(edit_message_live_location this (chat_id: C, message_id: MessageId, latitude: f64, longitude: f64))
|
||||
}
|
||||
};
|
||||
(@method edit_message_live_location_inline $body:ident $ty:ident) => {
|
||||
|
@ -586,9 +586,9 @@ macro_rules! requester_forward {
|
|||
(@method stop_message_live_location $body:ident $ty:ident) => {
|
||||
type StopMessageLiveLocation = $ty![StopMessageLiveLocation];
|
||||
|
||||
fn stop_message_live_location<C>(&self, chat_id: C, message_id: i32, latitude: f64, longitude: f64) -> Self::StopMessageLiveLocation where C: Into<Recipient> {
|
||||
fn stop_message_live_location<C>(&self, chat_id: C, message_id: MessageId, latitude: f64, longitude: f64) -> Self::StopMessageLiveLocation where C: Into<Recipient> {
|
||||
let this = self;
|
||||
$body!(stop_message_live_location this (chat_id: C, message_id: i32, latitude: f64, longitude: f64))
|
||||
$body!(stop_message_live_location this (chat_id: C, message_id: MessageId, latitude: f64, longitude: f64))
|
||||
}
|
||||
};
|
||||
(@method stop_message_live_location_inline $body:ident $ty:ident) => {
|
||||
|
@ -822,9 +822,9 @@ macro_rules! requester_forward {
|
|||
(@method pin_chat_message $body:ident $ty:ident) => {
|
||||
type PinChatMessage = $ty![PinChatMessage];
|
||||
|
||||
fn pin_chat_message<C>(&self, chat_id: C, message_id: i32) -> Self::PinChatMessage where C: Into<Recipient> {
|
||||
fn pin_chat_message<C>(&self, chat_id: C, message_id: MessageId) -> Self::PinChatMessage where C: Into<Recipient> {
|
||||
let this = self;
|
||||
$body!(pin_chat_message this (chat_id: C, message_id: i32))
|
||||
$body!(pin_chat_message this (chat_id: C, message_id: MessageId))
|
||||
}
|
||||
};
|
||||
(@method unpin_chat_message $body:ident $ty:ident) => {
|
||||
|
@ -992,10 +992,10 @@ macro_rules! requester_forward {
|
|||
(@method edit_message_text $body:ident $ty:ident) => {
|
||||
type EditMessageText = $ty![EditMessageText];
|
||||
|
||||
fn edit_message_text<C, T>(&self, chat_id: C, message_id: i32, text: T) -> Self::EditMessageText where C: Into<Recipient>,
|
||||
fn edit_message_text<C, T>(&self, chat_id: C, message_id: MessageId, text: T) -> Self::EditMessageText where C: Into<Recipient>,
|
||||
T: Into<String> {
|
||||
let this = self;
|
||||
$body!(edit_message_text this (chat_id: C, message_id: i32, text: T))
|
||||
$body!(edit_message_text this (chat_id: C, message_id: MessageId, text: T))
|
||||
}
|
||||
};
|
||||
(@method edit_message_text_inline $body:ident $ty:ident) => {
|
||||
|
@ -1010,9 +1010,9 @@ macro_rules! requester_forward {
|
|||
(@method edit_message_caption $body:ident $ty:ident) => {
|
||||
type EditMessageCaption = $ty![EditMessageCaption];
|
||||
|
||||
fn edit_message_caption<C>(&self, chat_id: C, message_id: i32) -> Self::EditMessageCaption where C: Into<Recipient> {
|
||||
fn edit_message_caption<C>(&self, chat_id: C, message_id: MessageId) -> Self::EditMessageCaption where C: Into<Recipient> {
|
||||
let this = self;
|
||||
$body!(edit_message_caption this (chat_id: C, message_id: i32))
|
||||
$body!(edit_message_caption this (chat_id: C, message_id: MessageId))
|
||||
}
|
||||
};
|
||||
(@method edit_message_caption_inline $body:ident $ty:ident) => {
|
||||
|
@ -1026,9 +1026,9 @@ macro_rules! requester_forward {
|
|||
(@method edit_message_media $body:ident $ty:ident) => {
|
||||
type EditMessageMedia = $ty![EditMessageMedia];
|
||||
|
||||
fn edit_message_media<C>(&self, chat_id: C, message_id: i32, media: InputMedia) -> Self::EditMessageMedia where C: Into<Recipient> {
|
||||
fn edit_message_media<C>(&self, chat_id: C, message_id: MessageId, media: InputMedia) -> Self::EditMessageMedia where C: Into<Recipient> {
|
||||
let this = self;
|
||||
$body!(edit_message_media this (chat_id: C, message_id: i32, media: InputMedia))
|
||||
$body!(edit_message_media this (chat_id: C, message_id: MessageId, media: InputMedia))
|
||||
}
|
||||
};
|
||||
(@method edit_message_media_inline $body:ident $ty:ident) => {
|
||||
|
@ -1042,9 +1042,9 @@ macro_rules! requester_forward {
|
|||
(@method edit_message_reply_markup $body:ident $ty:ident) => {
|
||||
type EditMessageReplyMarkup = $ty![EditMessageReplyMarkup];
|
||||
|
||||
fn edit_message_reply_markup<C>(&self, chat_id: C, message_id: i32) -> Self::EditMessageReplyMarkup where C: Into<Recipient> {
|
||||
fn edit_message_reply_markup<C>(&self, chat_id: C, message_id: MessageId) -> Self::EditMessageReplyMarkup where C: Into<Recipient> {
|
||||
let this = self;
|
||||
$body!(edit_message_reply_markup this (chat_id: C, message_id: i32))
|
||||
$body!(edit_message_reply_markup this (chat_id: C, message_id: MessageId))
|
||||
}
|
||||
};
|
||||
(@method edit_message_reply_markup_inline $body:ident $ty:ident) => {
|
||||
|
@ -1058,17 +1058,17 @@ macro_rules! requester_forward {
|
|||
(@method stop_poll $body:ident $ty:ident) => {
|
||||
type StopPoll = $ty![StopPoll];
|
||||
|
||||
fn stop_poll<C>(&self, chat_id: C, message_id: i32) -> Self::StopPoll where C: Into<Recipient> {
|
||||
fn stop_poll<C>(&self, chat_id: C, message_id: MessageId) -> Self::StopPoll where C: Into<Recipient> {
|
||||
let this = self;
|
||||
$body!(stop_poll this (chat_id: C, message_id: i32))
|
||||
$body!(stop_poll this (chat_id: C, message_id: MessageId))
|
||||
}
|
||||
};
|
||||
(@method delete_message $body:ident $ty:ident) => {
|
||||
type DeleteMessage = $ty![DeleteMessage];
|
||||
|
||||
fn delete_message<C>(&self, chat_id: C, message_id: i32) -> Self::DeleteMessage where C: Into<Recipient> {
|
||||
fn delete_message<C>(&self, chat_id: C, message_id: MessageId) -> Self::DeleteMessage where C: Into<Recipient> {
|
||||
let this = self;
|
||||
$body!(delete_message this (chat_id: C, message_id: i32))
|
||||
$body!(delete_message this (chat_id: C, message_id: MessageId))
|
||||
}
|
||||
};
|
||||
(@method send_sticker $body:ident $ty:ident) => {
|
||||
|
@ -1208,9 +1208,9 @@ macro_rules! requester_forward {
|
|||
(@method set_game_score $body:ident $ty:ident) => {
|
||||
type SetGameScore = $ty![SetGameScore];
|
||||
|
||||
fn set_game_score(&self, user_id: UserId, score: u64, chat_id: u32, message_id: i64) -> Self::SetGameScore {
|
||||
fn set_game_score(&self, user_id: UserId, score: u64, chat_id: u32, message_id: MessageId) -> Self::SetGameScore {
|
||||
let this = self;
|
||||
$body!(set_game_score this (user_id: UserId, score: u64, chat_id: u32, message_id: i64))
|
||||
$body!(set_game_score this (user_id: UserId, score: u64, chat_id: u32, message_id: MessageId))
|
||||
}
|
||||
};
|
||||
(@method set_game_score_inline $body:ident $ty:ident) => {
|
||||
|
|
|
@ -222,8 +222,15 @@ fn params(params: impl Iterator<Item = impl Borrow<Param>>) -> String {
|
|||
let field = ¶m.name;
|
||||
let ty = ¶m.ty;
|
||||
let flatten = match ty {
|
||||
Type::RawTy(s) if s == "MessageId" && field == "reply_to_message_id" => {
|
||||
"\n #[serde(serialize_with = \
|
||||
\"crate::types::serialize_reply_to_message_id\")]"
|
||||
}
|
||||
Type::RawTy(s)
|
||||
if s == "InputSticker" || s == "TargetMessage" || s == "StickerType" =>
|
||||
if s == "MessageId"
|
||||
|| s == "InputSticker"
|
||||
|| s == "TargetMessage"
|
||||
|| s == "StickerType" =>
|
||||
{
|
||||
"\n #[serde(flatten)]"
|
||||
}
|
||||
|
|
|
@ -16,7 +16,8 @@ impl_payload! {
|
|||
/// Unique identifier for the chat where the original message was sent (or channel username in the format `@channelusername`)
|
||||
pub from_chat_id: Recipient [into],
|
||||
/// Message identifier in the chat specified in _from\_chat\_id_
|
||||
pub message_id: i32,
|
||||
#[serde(flatten)]
|
||||
pub message_id: MessageId,
|
||||
}
|
||||
optional {
|
||||
/// New caption for media, 0-1024 characters after entities parsing. If not specified, the original caption is kept
|
||||
|
@ -34,7 +35,8 @@ impl_payload! {
|
|||
/// Protects the contents of sent messages from forwarding and saving
|
||||
pub protect_content: bool,
|
||||
/// If the message is a reply, ID of the original message
|
||||
pub reply_to_message_id: i32,
|
||||
#[serde(serialize_with = "crate::types::serialize_reply_to_message_id")]
|
||||
pub reply_to_message_id: MessageId,
|
||||
/// Pass _True_, if the message should be sent even if the specified replied-to message is not found
|
||||
pub allow_sending_without_reply: bool,
|
||||
/// Additional interface options. A JSON-serialized object for an [inline keyboard], [custom reply keyboard], instructions to remove reply keyboard or to force a reply from the user.
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
use serde::Serialize;
|
||||
|
||||
use crate::types::{Recipient, True};
|
||||
use crate::types::{MessageId, Recipient, True};
|
||||
|
||||
impl_payload! {
|
||||
/// Use this method to delete a message, including service messages, with the following limitations:
|
||||
|
@ -21,7 +21,8 @@ impl_payload! {
|
|||
/// Unique identifier for the target chat or username of the target channel (in the format `@channelusername`).
|
||||
pub chat_id: Recipient [into],
|
||||
/// Identifier of the message to delete
|
||||
pub message_id: i32,
|
||||
#[serde(flatten)]
|
||||
pub message_id: MessageId,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
use serde::Serialize;
|
||||
|
||||
use crate::types::{InlineKeyboardMarkup, Message, MessageEntity, ParseMode, Recipient};
|
||||
use crate::types::{InlineKeyboardMarkup, Message, MessageEntity, MessageId, ParseMode, Recipient};
|
||||
|
||||
impl_payload! {
|
||||
/// Use this method to edit captions of messages. On success, the edited Message is returned.
|
||||
|
@ -14,7 +14,8 @@ impl_payload! {
|
|||
/// Unique identifier for the target chat or username of the target channel (in the format `@channelusername`).
|
||||
pub chat_id: Recipient [into],
|
||||
/// Identifier of the message to edit
|
||||
pub message_id: i32,
|
||||
#[serde(flatten)]
|
||||
pub message_id: MessageId,
|
||||
}
|
||||
optional {
|
||||
/// New caption of the message, 0-1024 characters after entities parsing
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
use serde::Serialize;
|
||||
|
||||
use crate::types::{Message, Recipient, ReplyMarkup};
|
||||
use crate::types::{Message, MessageId, Recipient, ReplyMarkup};
|
||||
|
||||
impl_payload! {
|
||||
/// Use this method to edit live location messages. A location can be edited until its live_period expires or editing is explicitly disabled by a call to [`StopMessageLiveLocation`]. On success, the edited Message is returned.
|
||||
|
@ -16,7 +16,8 @@ impl_payload! {
|
|||
/// Unique identifier for the target chat or username of the target channel (in the format `@channelusername`)
|
||||
pub chat_id: Recipient [into],
|
||||
/// Identifier of the message to edit
|
||||
pub message_id: i32,
|
||||
#[serde(flatten)]
|
||||
pub message_id: MessageId,
|
||||
/// Latitude of new location
|
||||
pub latitude: f64,
|
||||
/// Longitude of new location
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
use serde::Serialize;
|
||||
|
||||
use crate::types::{InlineKeyboardMarkup, InputMedia, Message, Recipient};
|
||||
use crate::types::{InlineKeyboardMarkup, InputMedia, Message, MessageId, Recipient};
|
||||
|
||||
impl_payload! {
|
||||
/// Use this method to edit animation, audio, document, photo, or video messages. If a message is a part of a message album, then it can be edited only to a photo or a video. Otherwise, message type can be changed arbitrarily. When inline message is edited, new file can't be uploaded. Use previously uploaded file via its file_id or specify a URL. On success, the edited Message is returned.
|
||||
|
@ -14,7 +14,8 @@ impl_payload! {
|
|||
/// Unique identifier for the target chat or username of the target channel (in the format `@channelusername`).
|
||||
pub chat_id: Recipient [into],
|
||||
/// Identifier of the message to edit
|
||||
pub message_id: i32,
|
||||
#[serde(flatten)]
|
||||
pub message_id: MessageId,
|
||||
/// A JSON-serialized object for a new media content of the message
|
||||
pub media: InputMedia,
|
||||
}
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
use serde::Serialize;
|
||||
|
||||
use crate::types::{InlineKeyboardMarkup, Message, Recipient};
|
||||
use crate::types::{InlineKeyboardMarkup, Message, MessageId, Recipient};
|
||||
|
||||
impl_payload! {
|
||||
/// Use this method to edit only the reply markup of messages. On success, the edited Message is returned.
|
||||
|
@ -14,7 +14,8 @@ impl_payload! {
|
|||
/// Unique identifier for the target chat or username of the target channel (in the format `@channelusername`).
|
||||
pub chat_id: Recipient [into],
|
||||
/// Identifier of the message to edit
|
||||
pub message_id: i32,
|
||||
#[serde(flatten)]
|
||||
pub message_id: MessageId,
|
||||
}
|
||||
optional {
|
||||
/// A JSON-serialized object for an [inline keyboard].
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
use serde::Serialize;
|
||||
|
||||
use crate::types::{InlineKeyboardMarkup, Message, MessageEntity, ParseMode, Recipient};
|
||||
use crate::types::{InlineKeyboardMarkup, Message, MessageEntity, MessageId, ParseMode, Recipient};
|
||||
|
||||
impl_payload! {
|
||||
/// Use this method to edit text and [games] messages. On success, the edited Message is returned.
|
||||
|
@ -16,7 +16,8 @@ impl_payload! {
|
|||
/// Unique identifier for the target chat or username of the target channel (in the format `@channelusername`).
|
||||
pub chat_id: Recipient [into],
|
||||
/// Identifier of the message to edit
|
||||
pub message_id: i32,
|
||||
#[serde(flatten)]
|
||||
pub message_id: MessageId,
|
||||
/// New text of the message, 1-4096 characters after entities parsing
|
||||
pub text: String [into],
|
||||
}
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
use serde::Serialize;
|
||||
|
||||
use crate::types::{Message, Recipient};
|
||||
use crate::types::{Message, MessageId, Recipient};
|
||||
|
||||
impl_payload! {
|
||||
/// Use this method to forward messages of any kind. On success, the sent [`Message`] is returned.
|
||||
|
@ -16,7 +16,8 @@ impl_payload! {
|
|||
/// Unique identifier for the chat where the original message was sent (or channel username in the format `@channelusername`)
|
||||
pub from_chat_id: Recipient [into],
|
||||
/// Message identifier in the chat specified in _from\_chat\_id_
|
||||
pub message_id: i32,
|
||||
#[serde(flatten)]
|
||||
pub message_id: MessageId,
|
||||
}
|
||||
optional {
|
||||
/// Sends the message [silently]. Users will receive a notification with no sound.
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
use serde::Serialize;
|
||||
|
||||
use crate::types::{Recipient, True};
|
||||
use crate::types::{MessageId, Recipient, True};
|
||||
|
||||
impl_payload! {
|
||||
/// Use this method to pin a message in a group, a supergroup, or a channel. The bot must be an administrator in the chat for this to work and must have the 'can_pin_messages' admin right in the supergroup or 'can_edit_messages' admin right in the channel. Returns _True_ on success.
|
||||
|
@ -12,7 +12,8 @@ impl_payload! {
|
|||
/// Unique identifier for the target chat or username of the target channel (in the format `@channelusername`)
|
||||
pub chat_id: Recipient [into],
|
||||
/// Identifier of a message to pin
|
||||
pub message_id: i32,
|
||||
#[serde(flatten)]
|
||||
pub message_id: MessageId,
|
||||
}
|
||||
optional {
|
||||
/// Pass True, if it is not necessary to send a notification to all chat members about the new pinned message. Notifications are always disabled in channels.
|
||||
|
|
|
@ -2,7 +2,9 @@
|
|||
|
||||
use serde::Serialize;
|
||||
|
||||
use crate::types::{InputFile, Message, MessageEntity, ParseMode, Recipient, ReplyMarkup};
|
||||
use crate::types::{
|
||||
InputFile, Message, MessageEntity, MessageId, ParseMode, Recipient, ReplyMarkup,
|
||||
};
|
||||
|
||||
impl_payload! {
|
||||
@[multipart = animation, thumb]
|
||||
|
@ -45,7 +47,8 @@ impl_payload! {
|
|||
/// Protects the contents of sent messages from forwarding and saving
|
||||
pub protect_content: bool,
|
||||
/// If the message is a reply, ID of the original message
|
||||
pub reply_to_message_id: i32,
|
||||
#[serde(serialize_with = "crate::types::serialize_reply_to_message_id")]
|
||||
pub reply_to_message_id: MessageId,
|
||||
/// Pass _True_, if the message should be sent even if the specified replied-to message is not found
|
||||
pub allow_sending_without_reply: bool,
|
||||
/// Additional interface options. A JSON-serialized object for an [inline keyboard], [custom reply keyboard], instructions to remove reply keyboard or to force a reply from the user.
|
||||
|
|
|
@ -2,7 +2,9 @@
|
|||
|
||||
use serde::Serialize;
|
||||
|
||||
use crate::types::{InputFile, Message, MessageEntity, ParseMode, Recipient, ReplyMarkup};
|
||||
use crate::types::{
|
||||
InputFile, Message, MessageEntity, MessageId, ParseMode, Recipient, ReplyMarkup,
|
||||
};
|
||||
|
||||
impl_payload! {
|
||||
@[multipart = audio, thumb]
|
||||
|
@ -48,7 +50,8 @@ impl_payload! {
|
|||
/// Protects the contents of sent messages from forwarding and saving
|
||||
pub protect_content: bool,
|
||||
/// If the message is a reply, ID of the original message
|
||||
pub reply_to_message_id: i32,
|
||||
#[serde(serialize_with = "crate::types::serialize_reply_to_message_id")]
|
||||
pub reply_to_message_id: MessageId,
|
||||
/// Pass _True_, if the message should be sent even if the specified replied-to message is not found
|
||||
pub allow_sending_without_reply: bool,
|
||||
/// Additional interface options. A JSON-serialized object for an [inline keyboard], [custom reply keyboard], instructions to remove reply keyboard or to force a reply from the user.
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
use serde::Serialize;
|
||||
|
||||
use crate::types::{Message, Recipient, ReplyMarkup};
|
||||
use crate::types::{Message, MessageId, Recipient, ReplyMarkup};
|
||||
|
||||
impl_payload! {
|
||||
/// Use this method to send phone contacts. On success, the sent [`Message`] is returned.
|
||||
|
@ -32,7 +32,8 @@ impl_payload! {
|
|||
/// Protects the contents of sent messages from forwarding and saving
|
||||
pub protect_content: bool,
|
||||
/// If the message is a reply, ID of the original message
|
||||
pub reply_to_message_id: i32,
|
||||
#[serde(serialize_with = "crate::types::serialize_reply_to_message_id")]
|
||||
pub reply_to_message_id: MessageId,
|
||||
/// Pass _True_, if the message should be sent even if the specified replied-to message is not found
|
||||
pub allow_sending_without_reply: bool,
|
||||
/// Additional interface options. A JSON-serialized object for an [inline keyboard], [custom reply keyboard], instructions to remove reply keyboard or to force a reply from the user.
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
use serde::Serialize;
|
||||
|
||||
use crate::types::{DiceEmoji, Message, Recipient, ReplyMarkup};
|
||||
use crate::types::{DiceEmoji, Message, MessageId, Recipient, ReplyMarkup};
|
||||
|
||||
impl_payload! {
|
||||
/// Use this method to send an animated emoji that will display a random value. On success, the sent [`Message`] is returned.
|
||||
|
@ -24,7 +24,8 @@ impl_payload! {
|
|||
/// Protects the contents of sent messages from forwarding and saving
|
||||
pub protect_content: bool,
|
||||
/// If the message is a reply, ID of the original message
|
||||
pub reply_to_message_id: i32,
|
||||
#[serde(serialize_with = "crate::types::serialize_reply_to_message_id")]
|
||||
pub reply_to_message_id: MessageId,
|
||||
/// Pass _True_, if the message should be sent even if the specified replied-to message is not found
|
||||
pub allow_sending_without_reply: bool,
|
||||
/// Additional interface options. A JSON-serialized object for an [inline keyboard], [custom reply keyboard], instructions to remove reply keyboard or to force a reply from the user.
|
||||
|
|
|
@ -2,7 +2,9 @@
|
|||
|
||||
use serde::Serialize;
|
||||
|
||||
use crate::types::{InputFile, Message, MessageEntity, ParseMode, Recipient, ReplyMarkup};
|
||||
use crate::types::{
|
||||
InputFile, Message, MessageEntity, MessageId, ParseMode, Recipient, ReplyMarkup,
|
||||
};
|
||||
|
||||
impl_payload! {
|
||||
@[multipart = document, thumb]
|
||||
|
@ -41,7 +43,8 @@ impl_payload! {
|
|||
/// Protects the contents of sent messages from forwarding and saving
|
||||
pub protect_content: bool,
|
||||
/// If the message is a reply, ID of the original message
|
||||
pub reply_to_message_id: i32,
|
||||
#[serde(serialize_with = "crate::types::serialize_reply_to_message_id")]
|
||||
pub reply_to_message_id: MessageId,
|
||||
/// Pass _True_, if the message should be sent even if the specified replied-to message is not found
|
||||
pub allow_sending_without_reply: bool,
|
||||
/// Additional interface options. A JSON-serialized object for an [inline keyboard], [custom reply keyboard], instructions to remove reply keyboard or to force a reply from the user.
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
use serde::Serialize;
|
||||
|
||||
use crate::types::{Message, Recipient, ReplyMarkup};
|
||||
use crate::types::{Message, MessageId, Recipient, ReplyMarkup};
|
||||
|
||||
impl_payload! {
|
||||
/// Use this method to send point on the map. On success, the sent [`Message`] is returned.
|
||||
|
@ -36,7 +36,8 @@ impl_payload! {
|
|||
/// Protects the contents of sent messages from forwarding and saving
|
||||
pub protect_content: bool,
|
||||
/// If the message is a reply, ID of the original message
|
||||
pub reply_to_message_id: i32,
|
||||
#[serde(serialize_with = "crate::types::serialize_reply_to_message_id")]
|
||||
pub reply_to_message_id: MessageId,
|
||||
/// Pass _True_, if the message should be sent even if the specified replied-to message is not found
|
||||
pub allow_sending_without_reply: bool,
|
||||
/// Additional interface options. A JSON-serialized object for an [inline keyboard], [custom reply keyboard], instructions to remove reply keyboard or to force a reply from the user.
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
use serde::Serialize;
|
||||
|
||||
use crate::types::{InputMedia, Message, Recipient};
|
||||
use crate::types::{InputMedia, Message, MessageId, Recipient};
|
||||
|
||||
impl_payload! {
|
||||
/// Use this method to send a group of photos, videos, documents or audios as an album. Documents and audio files can be only grouped in an album with messages of the same type. On success, an array of [`Message`]s that were sent is returned.
|
||||
|
@ -24,7 +24,8 @@ impl_payload! {
|
|||
/// Protects the contents of sent messages from forwarding and saving
|
||||
pub protect_content: bool,
|
||||
/// If the message is a reply, ID of the original message
|
||||
pub reply_to_message_id: i32,
|
||||
#[serde(serialize_with = "crate::types::serialize_reply_to_message_id")]
|
||||
pub reply_to_message_id: MessageId,
|
||||
/// Pass _True_, if the message should be sent even if the specified replied-to message is not found
|
||||
pub allow_sending_without_reply: bool,
|
||||
}
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
use serde::Serialize;
|
||||
|
||||
use crate::types::{Message, MessageEntity, ParseMode, Recipient, ReplyMarkup};
|
||||
use crate::types::{Message, MessageEntity, MessageId, ParseMode, Recipient, ReplyMarkup};
|
||||
|
||||
impl_payload! {
|
||||
/// Use this method to send text messages. On success, the sent [`Message`] is returned.
|
||||
|
@ -32,7 +32,8 @@ impl_payload! {
|
|||
/// Protects the contents of sent messages from forwarding and saving
|
||||
pub protect_content: bool,
|
||||
/// If the message is a reply, ID of the original message
|
||||
pub reply_to_message_id: i32,
|
||||
#[serde(serialize_with = "crate::types::serialize_reply_to_message_id")]
|
||||
pub reply_to_message_id: MessageId,
|
||||
/// Pass _True_, if the message should be sent even if the specified replied-to message is not found
|
||||
pub allow_sending_without_reply: bool,
|
||||
/// Additional interface options. A JSON-serialized object for an [inline keyboard], [custom reply keyboard], instructions to remove reply keyboard or to force a reply from the user.
|
||||
|
|
|
@ -2,7 +2,9 @@
|
|||
|
||||
use serde::Serialize;
|
||||
|
||||
use crate::types::{InputFile, Message, MessageEntity, ParseMode, Recipient, ReplyMarkup};
|
||||
use crate::types::{
|
||||
InputFile, Message, MessageEntity, MessageId, ParseMode, Recipient, ReplyMarkup,
|
||||
};
|
||||
|
||||
impl_payload! {
|
||||
@[multipart = photo]
|
||||
|
@ -35,7 +37,8 @@ impl_payload! {
|
|||
/// Protects the contents of sent messages from forwarding and saving
|
||||
pub protect_content: bool,
|
||||
/// If the message is a reply, ID of the original message
|
||||
pub reply_to_message_id: i32,
|
||||
#[serde(serialize_with = "crate::types::serialize_reply_to_message_id")]
|
||||
pub reply_to_message_id: MessageId,
|
||||
/// Pass _True_, if the message should be sent even if the specified replied-to message is not found
|
||||
pub allow_sending_without_reply: bool,
|
||||
/// Additional interface options. A JSON-serialized object for an [inline keyboard], [custom reply keyboard], instructions to remove reply keyboard or to force a reply from the user.
|
||||
|
|
|
@ -3,7 +3,9 @@
|
|||
use chrono::{DateTime, Utc};
|
||||
use serde::Serialize;
|
||||
|
||||
use crate::types::{Message, MessageEntity, ParseMode, PollType, Recipient, ReplyMarkup};
|
||||
use crate::types::{
|
||||
Message, MessageEntity, MessageId, ParseMode, PollType, Recipient, ReplyMarkup,
|
||||
};
|
||||
|
||||
impl_payload! {
|
||||
/// Use this method to send phone contacts. On success, the sent [`Message`] is returned.
|
||||
|
@ -51,7 +53,8 @@ impl_payload! {
|
|||
/// Protects the contents of sent messages from forwarding and saving
|
||||
pub protect_content: bool,
|
||||
/// If the message is a reply, ID of the original message
|
||||
pub reply_to_message_id: i32,
|
||||
#[serde(serialize_with = "crate::types::serialize_reply_to_message_id")]
|
||||
pub reply_to_message_id: MessageId,
|
||||
/// Pass _True_, if the message should be sent even if the specified replied-to message is not found
|
||||
pub allow_sending_without_reply: bool,
|
||||
/// Additional interface options. A JSON-serialized object for an [inline keyboard], [custom reply keyboard], instructions to remove reply keyboard or to force a reply from the user.
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
use serde::Serialize;
|
||||
|
||||
use crate::types::{Message, Recipient, ReplyMarkup};
|
||||
use crate::types::{Message, MessageId, Recipient, ReplyMarkup};
|
||||
|
||||
impl_payload! {
|
||||
/// Use this method to send information about a venue. On success, the sent [`Message`] is returned.
|
||||
|
@ -40,7 +40,8 @@ impl_payload! {
|
|||
/// Protects the contents of sent messages from forwarding and saving
|
||||
pub protect_content: bool,
|
||||
/// If the message is a reply, ID of the original message
|
||||
pub reply_to_message_id: i32,
|
||||
#[serde(serialize_with = "crate::types::serialize_reply_to_message_id")]
|
||||
pub reply_to_message_id: MessageId,
|
||||
/// Pass _True_, if the message should be sent even if the specified replied-to message is not found
|
||||
pub allow_sending_without_reply: bool,
|
||||
/// Additional interface options. A JSON-serialized object for an [inline keyboard], [custom reply keyboard], instructions to remove reply keyboard or to force a reply from the user.
|
||||
|
|
|
@ -2,7 +2,9 @@
|
|||
|
||||
use serde::Serialize;
|
||||
|
||||
use crate::types::{InputFile, Message, MessageEntity, ParseMode, Recipient, ReplyMarkup};
|
||||
use crate::types::{
|
||||
InputFile, Message, MessageEntity, MessageId, ParseMode, Recipient, ReplyMarkup,
|
||||
};
|
||||
|
||||
impl_payload! {
|
||||
@[multipart = video, thumb]
|
||||
|
@ -48,7 +50,8 @@ impl_payload! {
|
|||
/// Protects the contents of sent messages from forwarding and saving
|
||||
pub protect_content: bool,
|
||||
/// If the message is a reply, ID of the original message
|
||||
pub reply_to_message_id: i32,
|
||||
#[serde(serialize_with = "crate::types::serialize_reply_to_message_id")]
|
||||
pub reply_to_message_id: MessageId,
|
||||
/// Pass _True_, if the message should be sent even if the specified replied-to message is not found
|
||||
pub allow_sending_without_reply: bool,
|
||||
/// Additional interface options. A JSON-serialized object for an [inline keyboard], [custom reply keyboard], instructions to remove reply keyboard or to force a reply from the user.
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
use serde::Serialize;
|
||||
|
||||
use crate::types::{InputFile, Message, Recipient, ReplyMarkup};
|
||||
use crate::types::{InputFile, Message, MessageId, Recipient, ReplyMarkup};
|
||||
|
||||
impl_payload! {
|
||||
@[multipart = video_note, thumb]
|
||||
|
@ -36,7 +36,8 @@ impl_payload! {
|
|||
/// Protects the contents of sent messages from forwarding and saving
|
||||
pub protect_content: bool,
|
||||
/// If the message is a reply, ID of the original message
|
||||
pub reply_to_message_id: i32,
|
||||
#[serde(serialize_with = "crate::types::serialize_reply_to_message_id")]
|
||||
pub reply_to_message_id: MessageId,
|
||||
/// Pass _True_, if the message should be sent even if the specified replied-to message is not found
|
||||
pub allow_sending_without_reply: bool,
|
||||
/// Additional interface options. A JSON-serialized object for an [inline keyboard], [custom reply keyboard], instructions to remove reply keyboard or to force a reply from the user.
|
||||
|
|
|
@ -2,7 +2,9 @@
|
|||
|
||||
use serde::Serialize;
|
||||
|
||||
use crate::types::{InputFile, Message, MessageEntity, ParseMode, Recipient, ReplyMarkup};
|
||||
use crate::types::{
|
||||
InputFile, Message, MessageEntity, MessageId, ParseMode, Recipient, ReplyMarkup,
|
||||
};
|
||||
|
||||
impl_payload! {
|
||||
@[multipart = voice]
|
||||
|
@ -37,7 +39,8 @@ impl_payload! {
|
|||
/// [silently]: https://telegram.org/blog/channels-2-0#silent-messages
|
||||
pub disable_notification: bool,
|
||||
/// If the message is a reply, ID of the original message
|
||||
pub reply_to_message_id: i32,
|
||||
#[serde(serialize_with = "crate::types::serialize_reply_to_message_id")]
|
||||
pub reply_to_message_id: MessageId,
|
||||
/// Pass _True_, if the message should be sent even if the specified replied-to message is not found
|
||||
pub allow_sending_without_reply: bool,
|
||||
/// Additional interface options. A JSON-serialized object for an [inline keyboard], [custom reply keyboard], instructions to remove reply keyboard or to force a reply from the user.
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
use serde::Serialize;
|
||||
|
||||
use crate::types::{Message, UserId};
|
||||
use crate::types::{Message, MessageId, UserId};
|
||||
|
||||
impl_payload! {
|
||||
/// Use this method to set the score of the specified user in a game. On success, returns the edited [`Message`]. Returns an error, if the new score is not greater than the user's current score in the chat and force is False.
|
||||
|
@ -20,7 +20,8 @@ impl_payload! {
|
|||
/// Unique identifier for the target chat
|
||||
pub chat_id: u32,
|
||||
/// Identifier of the message to edit
|
||||
pub message_id: i64,
|
||||
#[serde(flatten)]
|
||||
pub message_id: MessageId,
|
||||
}
|
||||
optional {
|
||||
/// Pass True, if the high score is allowed to decrease. This can be useful when fixing mistakes or banning cheaters
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
use serde::Serialize;
|
||||
|
||||
use crate::types::{Message, Recipient, ReplyMarkup};
|
||||
use crate::types::{Message, MessageId, Recipient, ReplyMarkup};
|
||||
|
||||
impl_payload! {
|
||||
/// Use this method to edit live location messages. A location can be edited until its live_period expires or editing is explicitly disabled by a call to [`StopMessageLiveLocation`]. On success, the edited Message is returned.
|
||||
|
@ -17,7 +17,8 @@ impl_payload! {
|
|||
/// Unique identifier for the target chat or username of the target channel (in the format `@channelusername`)
|
||||
pub chat_id: Recipient [into],
|
||||
/// Identifier of the message to edit
|
||||
pub message_id: i32,
|
||||
#[serde(flatten)]
|
||||
pub message_id: MessageId,
|
||||
/// Latitude of new location
|
||||
pub latitude: f64,
|
||||
/// Longitude of new location
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
use serde::Serialize;
|
||||
|
||||
use crate::types::{InlineKeyboardMarkup, Poll, Recipient};
|
||||
use crate::types::{InlineKeyboardMarkup, MessageId, Poll, Recipient};
|
||||
|
||||
impl_payload! {
|
||||
/// Use this method to stop a poll which was sent by the bot. On success, the stopped Poll with the final results is returned.
|
||||
|
@ -12,7 +12,8 @@ impl_payload! {
|
|||
/// Unique identifier for the target chat or username of the target channel (in the format `@channelusername`).
|
||||
pub chat_id: Recipient [into],
|
||||
/// Identifier of the message to edit
|
||||
pub message_id: i32,
|
||||
#[serde(flatten)]
|
||||
pub message_id: MessageId,
|
||||
}
|
||||
optional {
|
||||
/// A JSON-serialized object for an [inline keyboard].
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
use serde::Serialize;
|
||||
|
||||
use crate::types::{Recipient, True};
|
||||
use crate::types::{MessageId, Recipient, True};
|
||||
|
||||
impl_payload! {
|
||||
/// Use this method to remove a message from the list of pinned messages in a chat. If the chat is not a private chat, the bot must be an administrator in the chat for this to work and must have the 'can_pin_messages' admin right in a supergroup or 'can_edit_messages' admin right in a channel. Returns _True_ on success.
|
||||
|
@ -14,7 +14,8 @@ impl_payload! {
|
|||
}
|
||||
optional {
|
||||
/// Identifier of a message to unpin. If not specified, the most recent pinned message (by sending date) will be unpinned.
|
||||
pub message_id: i32,
|
||||
#[serde(flatten)]
|
||||
pub message_id: MessageId,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -111,7 +111,7 @@ pub trait Requester {
|
|||
&self,
|
||||
chat_id: C,
|
||||
from_chat_id: F,
|
||||
message_id: i32,
|
||||
message_id: MessageId,
|
||||
) -> Self::ForwardMessage
|
||||
where
|
||||
C: Into<Recipient>,
|
||||
|
@ -120,7 +120,12 @@ pub trait Requester {
|
|||
type CopyMessage: Request<Payload = CopyMessage, Err = Self::Err>;
|
||||
|
||||
/// For Telegram documentation see [`CopyMessage`].
|
||||
fn copy_message<C, F>(&self, chat_id: C, from_chat_id: F, message_id: i32) -> Self::CopyMessage
|
||||
fn copy_message<C, F>(
|
||||
&self,
|
||||
chat_id: C,
|
||||
from_chat_id: F,
|
||||
message_id: MessageId,
|
||||
) -> Self::CopyMessage
|
||||
where
|
||||
C: Into<Recipient>,
|
||||
F: Into<Recipient>;
|
||||
|
@ -195,7 +200,7 @@ pub trait Requester {
|
|||
fn edit_message_live_location<C>(
|
||||
&self,
|
||||
chat_id: C,
|
||||
message_id: i32,
|
||||
message_id: MessageId,
|
||||
latitude: f64,
|
||||
longitude: f64,
|
||||
) -> Self::EditMessageLiveLocation
|
||||
|
@ -223,7 +228,7 @@ pub trait Requester {
|
|||
fn stop_message_live_location<C>(
|
||||
&self,
|
||||
chat_id: C,
|
||||
message_id: i32,
|
||||
message_id: MessageId,
|
||||
latitude: f64,
|
||||
longitude: f64,
|
||||
) -> Self::StopMessageLiveLocation
|
||||
|
@ -485,7 +490,7 @@ pub trait Requester {
|
|||
type PinChatMessage: Request<Payload = PinChatMessage, Err = Self::Err>;
|
||||
|
||||
/// For Telegram documentation see [`PinChatMessage`].
|
||||
fn pin_chat_message<C>(&self, chat_id: C, message_id: i32) -> Self::PinChatMessage
|
||||
fn pin_chat_message<C>(&self, chat_id: C, message_id: MessageId) -> Self::PinChatMessage
|
||||
where
|
||||
C: Into<Recipient>;
|
||||
|
||||
|
@ -639,7 +644,7 @@ pub trait Requester {
|
|||
fn edit_message_text<C, T>(
|
||||
&self,
|
||||
chat_id: C,
|
||||
message_id: i32,
|
||||
message_id: MessageId,
|
||||
text: T,
|
||||
) -> Self::EditMessageText
|
||||
where
|
||||
|
@ -661,7 +666,11 @@ pub trait Requester {
|
|||
type EditMessageCaption: Request<Payload = EditMessageCaption, Err = Self::Err>;
|
||||
|
||||
/// For Telegram documentation see [`EditMessageCaption`].
|
||||
fn edit_message_caption<C>(&self, chat_id: C, message_id: i32) -> Self::EditMessageCaption
|
||||
fn edit_message_caption<C>(
|
||||
&self,
|
||||
chat_id: C,
|
||||
message_id: MessageId,
|
||||
) -> Self::EditMessageCaption
|
||||
where
|
||||
C: Into<Recipient>;
|
||||
|
||||
|
@ -681,7 +690,7 @@ pub trait Requester {
|
|||
fn edit_message_media<C>(
|
||||
&self,
|
||||
chat_id: C,
|
||||
message_id: i32,
|
||||
message_id: MessageId,
|
||||
media: InputMedia,
|
||||
) -> Self::EditMessageMedia
|
||||
where
|
||||
|
@ -704,7 +713,7 @@ pub trait Requester {
|
|||
fn edit_message_reply_markup<C>(
|
||||
&self,
|
||||
chat_id: C,
|
||||
message_id: i32,
|
||||
message_id: MessageId,
|
||||
) -> Self::EditMessageReplyMarkup
|
||||
where
|
||||
C: Into<Recipient>;
|
||||
|
@ -725,14 +734,14 @@ pub trait Requester {
|
|||
type StopPoll: Request<Payload = StopPoll, Err = Self::Err>;
|
||||
|
||||
/// For Telegram documentation see [`StopPoll`].
|
||||
fn stop_poll<C>(&self, chat_id: C, message_id: i32) -> Self::StopPoll
|
||||
fn stop_poll<C>(&self, chat_id: C, message_id: MessageId) -> Self::StopPoll
|
||||
where
|
||||
C: Into<Recipient>;
|
||||
|
||||
type DeleteMessage: Request<Payload = DeleteMessage, Err = Self::Err>;
|
||||
|
||||
/// For Telegram documentation see [`DeleteMessage`].
|
||||
fn delete_message<C>(&self, chat_id: C, message_id: i32) -> Self::DeleteMessage
|
||||
fn delete_message<C>(&self, chat_id: C, message_id: MessageId) -> Self::DeleteMessage
|
||||
where
|
||||
C: Into<Recipient>;
|
||||
|
||||
|
@ -907,7 +916,7 @@ pub trait Requester {
|
|||
user_id: UserId,
|
||||
score: u64,
|
||||
chat_id: u32,
|
||||
message_id: i64,
|
||||
message_id: MessageId,
|
||||
) -> Self::SetGameScore;
|
||||
|
||||
type SetGameScoreInline: Request<Payload = SetGameScoreInline, Err = Self::Err>;
|
||||
|
|
11
src/types.rs
11
src/types.rs
|
@ -86,6 +86,7 @@ pub use reply_keyboard_remove::*;
|
|||
pub use reply_markup::*;
|
||||
pub use response_parameters::*;
|
||||
pub use sent_web_app_message::*;
|
||||
use serde::Serialize;
|
||||
pub use shipping_address::*;
|
||||
pub use shipping_option::*;
|
||||
pub use shipping_query::*;
|
||||
|
@ -405,3 +406,13 @@ pub(crate) mod duration_secs {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub(crate) fn serialize_reply_to_message_id<S>(
|
||||
this: &Option<MessageId>,
|
||||
serializer: S,
|
||||
) -> Result<S::Ok, S::Error>
|
||||
where
|
||||
S: serde::Serializer,
|
||||
{
|
||||
this.map(|MessageId(id)| id).serialize(serializer)
|
||||
}
|
||||
|
|
|
@ -7,7 +7,7 @@ use url::Url;
|
|||
use crate::types::{
|
||||
Animation, Audio, BareChatId, Chat, ChatId, Contact, Dice, Document, Game,
|
||||
InlineKeyboardMarkup, Invoice, Location, MessageAutoDeleteTimerChanged, MessageEntity,
|
||||
MessageEntityRef, PassportData, PhotoSize, Poll, ProximityAlertTriggered, Sticker,
|
||||
MessageEntityRef, MessageId, PassportData, PhotoSize, Poll, ProximityAlertTriggered, Sticker,
|
||||
SuccessfulPayment, True, User, Venue, Video, VideoChatEnded, VideoChatParticipantsInvited,
|
||||
VideoChatScheduled, VideoChatStarted, VideoNote, Voice, WebAppData,
|
||||
};
|
||||
|
@ -18,8 +18,8 @@ use crate::types::{
|
|||
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
|
||||
pub struct Message {
|
||||
/// Unique message identifier inside this chat.
|
||||
#[serde(rename = "message_id")]
|
||||
pub id: i32,
|
||||
#[serde(flatten)]
|
||||
pub id: MessageId,
|
||||
|
||||
/// Date the message was sent in Unix time.
|
||||
#[serde(with = "crate::types::serde_date_from_unix_timestamp")]
|
||||
|
@ -1158,7 +1158,11 @@ impl Message {
|
|||
/// [`url`]: Message::url
|
||||
#[track_caller]
|
||||
#[must_use]
|
||||
pub fn url_of(chat_id: ChatId, chat_username: Option<&str>, message_id: i32) -> Option<Url> {
|
||||
pub fn url_of(
|
||||
chat_id: ChatId,
|
||||
chat_username: Option<&str>,
|
||||
message_id: MessageId,
|
||||
) -> Option<Url> {
|
||||
use BareChatId::*;
|
||||
|
||||
// Note: `t.me` links use bare chat ids
|
||||
|
@ -1181,10 +1185,10 @@ impl Message {
|
|||
let url = match chat_username {
|
||||
// If it's public group (i.e. not DM, not private group), we can produce
|
||||
// "normal" t.me link (accessible to everyone).
|
||||
Some(username) => format!("https://t.me/{0}/{1}", username, message_id),
|
||||
Some(username) => format!("https://t.me/{0}/{1}", username, message_id.0),
|
||||
// For private supergroups and channels we produce "private" t.me/c links. These are
|
||||
// only accessible to the group members.
|
||||
None => format!("https://t.me/c/{0}/{1}", chat_id, message_id),
|
||||
None => format!("https://t.me/c/{0}/{1}", chat_id, message_id.0),
|
||||
};
|
||||
|
||||
// UNWRAP:
|
||||
|
@ -1202,7 +1206,7 @@ impl Message {
|
|||
/// Returns `None` for private chats (i.e.: DMs) and private groups (not
|
||||
/// supergroups).
|
||||
#[must_use]
|
||||
pub fn comment_url(&self, comment_id: i32) -> Option<Url> {
|
||||
pub fn comment_url(&self, comment_id: MessageId) -> Option<Url> {
|
||||
Self::comment_url_of(self.chat.id, self.chat.username(), self.id, comment_id)
|
||||
}
|
||||
|
||||
|
@ -1224,11 +1228,11 @@ impl Message {
|
|||
pub fn comment_url_of(
|
||||
channel_id: ChatId,
|
||||
channel_username: Option<&str>,
|
||||
post_id: i32,
|
||||
comment_id: i32,
|
||||
post_id: MessageId,
|
||||
comment_id: MessageId,
|
||||
) -> Option<Url> {
|
||||
Self::url_of(channel_id, channel_username, post_id).map(|mut url| {
|
||||
url.set_query(Some(&format!("comment={comment_id}")));
|
||||
url.set_query(Some(&format!("comment={}", comment_id.0)));
|
||||
url
|
||||
})
|
||||
}
|
||||
|
@ -1245,7 +1249,7 @@ impl Message {
|
|||
/// Returns `None` for private chats (i.e.: DMs) and private groups (not
|
||||
/// supergroups).
|
||||
#[must_use]
|
||||
pub fn url_in_thread(&self, thread_starter_msg_id: i32) -> Option<Url> {
|
||||
pub fn url_in_thread(&self, thread_starter_msg_id: MessageId) -> Option<Url> {
|
||||
Self::url_in_thread_of(
|
||||
self.chat.id,
|
||||
self.chat.username(),
|
||||
|
@ -1276,11 +1280,11 @@ impl Message {
|
|||
pub fn url_in_thread_of(
|
||||
chat_id: ChatId,
|
||||
chat_username: Option<&str>,
|
||||
thread_starter_msg_id: i32,
|
||||
message_id: i32,
|
||||
thread_starter_msg_id: MessageId,
|
||||
message_id: MessageId,
|
||||
) -> Option<Url> {
|
||||
Self::url_of(chat_id, chat_username, message_id).map(|mut url| {
|
||||
url.set_query(Some(&format!("thread={thread_starter_msg_id}")));
|
||||
url.set_query(Some(&format!("thread={}", thread_starter_msg_id.0)));
|
||||
url
|
||||
})
|
||||
}
|
||||
|
|
|
@ -1,8 +1,42 @@
|
|||
use serde::{Deserialize, Serialize};
|
||||
|
||||
/// This object represents a unique message identifier.
|
||||
#[derive(Clone, Copy, Debug, PartialEq, Serialize, Deserialize)]
|
||||
pub struct MessageId {
|
||||
/// Unique message identifier
|
||||
pub message_id: i32,
|
||||
/// A unique message identifier.
|
||||
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
|
||||
#[serde(from = "MessageIdRaw", into = "MessageIdRaw")]
|
||||
pub struct MessageId(pub i32);
|
||||
|
||||
#[derive(Serialize, Deserialize)]
|
||||
struct MessageIdRaw {
|
||||
message_id: i32,
|
||||
}
|
||||
|
||||
impl From<MessageIdRaw> for MessageId {
|
||||
fn from(MessageIdRaw { message_id }: MessageIdRaw) -> Self {
|
||||
MessageId(message_id)
|
||||
}
|
||||
}
|
||||
|
||||
impl From<MessageId> for MessageIdRaw {
|
||||
fn from(MessageId(message_id): MessageId) -> Self {
|
||||
MessageIdRaw { message_id }
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use crate::types::MessageId;
|
||||
|
||||
#[test]
|
||||
fn smoke_deser() {
|
||||
let json = r#"{"message_id":123}"#;
|
||||
let mid: MessageId = serde_json::from_str(json).unwrap();
|
||||
assert_eq!(mid, MessageId(123));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn smoke_ser() {
|
||||
let mid: MessageId = MessageId(123);
|
||||
let json = serde_json::to_string(&mid).unwrap();
|
||||
assert_eq!(json, r#"{"message_id":123}"#);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
use crate::types::Recipient;
|
||||
use crate::types::{MessageId, Recipient};
|
||||
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
|
@ -6,8 +6,14 @@ use serde::{Deserialize, Serialize};
|
|||
#[derive(Clone, Debug, Eq, Hash, PartialEq, Serialize, Deserialize)]
|
||||
#[serde(untagged)]
|
||||
pub enum TargetMessage {
|
||||
Common { chat_id: Recipient, message_id: i32 },
|
||||
Inline { inline_message_id: String },
|
||||
Common {
|
||||
chat_id: Recipient,
|
||||
#[serde(flatten)]
|
||||
message_id: MessageId,
|
||||
},
|
||||
Inline {
|
||||
inline_message_id: String,
|
||||
},
|
||||
}
|
||||
|
||||
impl From<String> for TargetMessage {
|
||||
|
|
|
@ -297,7 +297,7 @@ impl Serialize for UpdateKind {
|
|||
mod test {
|
||||
use crate::types::{
|
||||
Chat, ChatId, ChatKind, ChatPrivate, MediaKind, MediaText, Message, MessageCommon,
|
||||
MessageKind, Update, UpdateKind, User, UserId,
|
||||
MessageId, MessageKind, Update, UpdateKind, User, UserId,
|
||||
};
|
||||
|
||||
use chrono::{DateTime, NaiveDateTime, Utc};
|
||||
|
@ -334,7 +334,7 @@ mod test {
|
|||
id: 892_252_934,
|
||||
kind: UpdateKind::Message(Message {
|
||||
via_bot: None,
|
||||
id: 6557,
|
||||
id: MessageId(6557),
|
||||
date,
|
||||
chat: Chat {
|
||||
id: ChatId(218_485_655),
|
||||
|
|
Loading…
Reference in a new issue