use crate::Result;
use crate::types::message::{
CopyMessageRequest, CopyMessagesRequest, DeleteMessageRequest, DeleteMessagesRequest,
EditMessageCaptionRequest, EditMessageLiveLocationRequest, EditMessageReplyMarkupRequest,
EditMessageResult, EditMessageTextRequest, ForwardMessageRequest, Message, MessageIdObject,
Poll, SendAnimationRequest, SendAudioRequest, SendChatActionRequest, SendContactRequest,
SendDiceRequest, SendDocumentRequest, SendLocationRequest, SendMediaGroupRequest,
SendMessageRequest, SendPhotoRequest, SendPollRequest, SendVenueRequest, SendVideoNoteRequest,
SendVideoRequest, SendVoiceRequest, StopMessageLiveLocationRequest, StopPollRequest,
};
use crate::types::upload::UploadFile;
#[cfg(feature = "_blocking")]
use crate::BlockingClient;
#[cfg(feature = "_async")]
use crate::Client;
#[cfg(feature = "_async")]
#[derive(Clone)]
pub struct MessagesService {
client: Client,
}
#[cfg(feature = "_async")]
impl MessagesService {
pub(crate) fn new(client: Client) -> Self {
Self { client }
}
pub async fn send_message(&self, request: &SendMessageRequest) -> Result<Message> {
self.client.call_method("sendMessage", request).await
}
pub async fn forward_message(&self, request: &ForwardMessageRequest) -> Result<Message> {
self.client.call_method("forwardMessage", request).await
}
pub async fn copy_message(&self, request: &CopyMessageRequest) -> Result<MessageIdObject> {
self.client.call_method("copyMessage", request).await
}
pub async fn copy_messages(
&self,
request: &CopyMessagesRequest,
) -> Result<Vec<MessageIdObject>> {
self.client.call_method("copyMessages", request).await
}
pub async fn send_photo(&self, request: &SendPhotoRequest) -> Result<Message> {
self.client.call_method("sendPhoto", request).await
}
pub async fn send_photo_upload(
&self,
request: &SendPhotoRequest,
file: &UploadFile,
) -> Result<Message> {
self.client
.call_method_multipart("sendPhoto", request, "photo", file)
.await
}
pub async fn send_audio(&self, request: &SendAudioRequest) -> Result<Message> {
self.client.call_method("sendAudio", request).await
}
pub async fn send_audio_upload(
&self,
request: &SendAudioRequest,
file: &UploadFile,
) -> Result<Message> {
self.client
.call_method_multipart("sendAudio", request, "audio", file)
.await
}
pub async fn send_document(&self, request: &SendDocumentRequest) -> Result<Message> {
self.client.call_method("sendDocument", request).await
}
pub async fn send_document_upload(
&self,
request: &SendDocumentRequest,
file: &UploadFile,
) -> Result<Message> {
self.client
.call_method_multipart("sendDocument", request, "document", file)
.await
}
pub async fn send_video(&self, request: &SendVideoRequest) -> Result<Message> {
self.client.call_method("sendVideo", request).await
}
pub async fn send_video_upload(
&self,
request: &SendVideoRequest,
file: &UploadFile,
) -> Result<Message> {
self.client
.call_method_multipart("sendVideo", request, "video", file)
.await
}
pub async fn send_animation(&self, request: &SendAnimationRequest) -> Result<Message> {
self.client.call_method("sendAnimation", request).await
}
pub async fn send_animation_upload(
&self,
request: &SendAnimationRequest,
file: &UploadFile,
) -> Result<Message> {
self.client
.call_method_multipart("sendAnimation", request, "animation", file)
.await
}
pub async fn send_voice(&self, request: &SendVoiceRequest) -> Result<Message> {
self.client.call_method("sendVoice", request).await
}
pub async fn send_voice_upload(
&self,
request: &SendVoiceRequest,
file: &UploadFile,
) -> Result<Message> {
self.client
.call_method_multipart("sendVoice", request, "voice", file)
.await
}
pub async fn send_video_note(&self, request: &SendVideoNoteRequest) -> Result<Message> {
self.client.call_method("sendVideoNote", request).await
}
pub async fn send_video_note_upload(
&self,
request: &SendVideoNoteRequest,
file: &UploadFile,
) -> Result<Message> {
self.client
.call_method_multipart("sendVideoNote", request, "video_note", file)
.await
}
pub async fn send_media_group(&self, request: &SendMediaGroupRequest) -> Result<Vec<Message>> {
self.client.call_method("sendMediaGroup", request).await
}
pub async fn send_location(&self, request: &SendLocationRequest) -> Result<Message> {
self.client.call_method("sendLocation", request).await
}
pub async fn send_venue(&self, request: &SendVenueRequest) -> Result<Message> {
self.client.call_method("sendVenue", request).await
}
pub async fn send_contact(&self, request: &SendContactRequest) -> Result<Message> {
self.client.call_method("sendContact", request).await
}
pub async fn send_poll(&self, request: &SendPollRequest) -> Result<Message> {
self.client.call_method("sendPoll", request).await
}
pub async fn stop_poll(&self, request: &StopPollRequest) -> Result<Poll> {
self.client.call_method("stopPoll", request).await
}
pub async fn send_dice(&self, request: &SendDiceRequest) -> Result<Message> {
self.client.call_method("sendDice", request).await
}
pub async fn send_chat_action(&self, request: &SendChatActionRequest) -> Result<bool> {
self.client.call_method("sendChatAction", request).await
}
pub async fn edit_message_text(
&self,
request: &EditMessageTextRequest,
) -> Result<EditMessageResult> {
request.validate()?;
self.client.call_method("editMessageText", request).await
}
pub async fn edit_message_caption(
&self,
request: &EditMessageCaptionRequest,
) -> Result<EditMessageResult> {
request.validate()?;
self.client.call_method("editMessageCaption", request).await
}
pub async fn edit_message_reply_markup(
&self,
request: &EditMessageReplyMarkupRequest,
) -> Result<EditMessageResult> {
request.validate()?;
self.client
.call_method("editMessageReplyMarkup", request)
.await
}
pub async fn edit_message_live_location(
&self,
request: &EditMessageLiveLocationRequest,
) -> Result<EditMessageResult> {
request.validate()?;
self.client
.call_method("editMessageLiveLocation", request)
.await
}
pub async fn stop_message_live_location(
&self,
request: &StopMessageLiveLocationRequest,
) -> Result<EditMessageResult> {
request.validate()?;
self.client
.call_method("stopMessageLiveLocation", request)
.await
}
pub async fn delete_message(&self, request: &DeleteMessageRequest) -> Result<bool> {
self.client.call_method("deleteMessage", request).await
}
pub async fn delete_messages(&self, request: &DeleteMessagesRequest) -> Result<bool> {
self.client.call_method("deleteMessages", request).await
}
}
#[cfg(feature = "_blocking")]
#[derive(Clone)]
pub struct BlockingMessagesService {
client: BlockingClient,
}
#[cfg(feature = "_blocking")]
impl BlockingMessagesService {
pub(crate) fn new(client: BlockingClient) -> Self {
Self { client }
}
pub fn send_message(&self, request: &SendMessageRequest) -> Result<Message> {
self.client.call_method("sendMessage", request)
}
pub fn forward_message(&self, request: &ForwardMessageRequest) -> Result<Message> {
self.client.call_method("forwardMessage", request)
}
pub fn copy_message(&self, request: &CopyMessageRequest) -> Result<MessageIdObject> {
self.client.call_method("copyMessage", request)
}
pub fn copy_messages(&self, request: &CopyMessagesRequest) -> Result<Vec<MessageIdObject>> {
self.client.call_method("copyMessages", request)
}
pub fn send_photo(&self, request: &SendPhotoRequest) -> Result<Message> {
self.client.call_method("sendPhoto", request)
}
pub fn send_photo_upload(
&self,
request: &SendPhotoRequest,
file: &UploadFile,
) -> Result<Message> {
self.client
.call_method_multipart("sendPhoto", request, "photo", file)
}
pub fn send_audio(&self, request: &SendAudioRequest) -> Result<Message> {
self.client.call_method("sendAudio", request)
}
pub fn send_audio_upload(
&self,
request: &SendAudioRequest,
file: &UploadFile,
) -> Result<Message> {
self.client
.call_method_multipart("sendAudio", request, "audio", file)
}
pub fn send_document(&self, request: &SendDocumentRequest) -> Result<Message> {
self.client.call_method("sendDocument", request)
}
pub fn send_document_upload(
&self,
request: &SendDocumentRequest,
file: &UploadFile,
) -> Result<Message> {
self.client
.call_method_multipart("sendDocument", request, "document", file)
}
pub fn send_video(&self, request: &SendVideoRequest) -> Result<Message> {
self.client.call_method("sendVideo", request)
}
pub fn send_video_upload(
&self,
request: &SendVideoRequest,
file: &UploadFile,
) -> Result<Message> {
self.client
.call_method_multipart("sendVideo", request, "video", file)
}
pub fn send_animation(&self, request: &SendAnimationRequest) -> Result<Message> {
self.client.call_method("sendAnimation", request)
}
pub fn send_animation_upload(
&self,
request: &SendAnimationRequest,
file: &UploadFile,
) -> Result<Message> {
self.client
.call_method_multipart("sendAnimation", request, "animation", file)
}
pub fn send_voice(&self, request: &SendVoiceRequest) -> Result<Message> {
self.client.call_method("sendVoice", request)
}
pub fn send_voice_upload(
&self,
request: &SendVoiceRequest,
file: &UploadFile,
) -> Result<Message> {
self.client
.call_method_multipart("sendVoice", request, "voice", file)
}
pub fn send_video_note(&self, request: &SendVideoNoteRequest) -> Result<Message> {
self.client.call_method("sendVideoNote", request)
}
pub fn send_video_note_upload(
&self,
request: &SendVideoNoteRequest,
file: &UploadFile,
) -> Result<Message> {
self.client
.call_method_multipart("sendVideoNote", request, "video_note", file)
}
pub fn send_media_group(&self, request: &SendMediaGroupRequest) -> Result<Vec<Message>> {
self.client.call_method("sendMediaGroup", request)
}
pub fn send_location(&self, request: &SendLocationRequest) -> Result<Message> {
self.client.call_method("sendLocation", request)
}
pub fn send_venue(&self, request: &SendVenueRequest) -> Result<Message> {
self.client.call_method("sendVenue", request)
}
pub fn send_contact(&self, request: &SendContactRequest) -> Result<Message> {
self.client.call_method("sendContact", request)
}
pub fn send_poll(&self, request: &SendPollRequest) -> Result<Message> {
self.client.call_method("sendPoll", request)
}
pub fn stop_poll(&self, request: &StopPollRequest) -> Result<Poll> {
self.client.call_method("stopPoll", request)
}
pub fn send_dice(&self, request: &SendDiceRequest) -> Result<Message> {
self.client.call_method("sendDice", request)
}
pub fn send_chat_action(&self, request: &SendChatActionRequest) -> Result<bool> {
self.client.call_method("sendChatAction", request)
}
pub fn edit_message_text(&self, request: &EditMessageTextRequest) -> Result<EditMessageResult> {
request.validate()?;
self.client.call_method("editMessageText", request)
}
pub fn edit_message_caption(
&self,
request: &EditMessageCaptionRequest,
) -> Result<EditMessageResult> {
request.validate()?;
self.client.call_method("editMessageCaption", request)
}
pub fn edit_message_reply_markup(
&self,
request: &EditMessageReplyMarkupRequest,
) -> Result<EditMessageResult> {
request.validate()?;
self.client.call_method("editMessageReplyMarkup", request)
}
pub fn edit_message_live_location(
&self,
request: &EditMessageLiveLocationRequest,
) -> Result<EditMessageResult> {
request.validate()?;
self.client.call_method("editMessageLiveLocation", request)
}
pub fn stop_message_live_location(
&self,
request: &StopMessageLiveLocationRequest,
) -> Result<EditMessageResult> {
request.validate()?;
self.client.call_method("stopMessageLiveLocation", request)
}
pub fn delete_message(&self, request: &DeleteMessageRequest) -> Result<bool> {
self.client.call_method("deleteMessage", request)
}
pub fn delete_messages(&self, request: &DeleteMessagesRequest) -> Result<bool> {
self.client.call_method("deleteMessages", request)
}
}