packages feed

telegram-bot-simple-0.14.4: src/Telegram/Bot/Simple/RunTG.hs

{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE FunctionalDependencies #-}
{-# LANGUAGE FlexibleInstances #-}

module Telegram.Bot.Simple.RunTG where

import Telegram.Bot.API
import Data.Text
import Servant.Client hiding (Response)
import Telegram.Bot.Simple.Eff (liftClientM, BotM)

-- * 'RunTG'

-- | The most preferrable way to run telegram requests.
--
-- E.g. instead of invoking @liftClientM $ methodName MethodNameRequest {..}@, you just need to specify @runTG $ defMethodName params@. See @examples@ for more details.
class RunTG a b | a -> b where
  runTG :: a -> BotM b

-- ** Instances

-- | A servant client associated with a response type. Alias for 'liftClientM'.
instance RunTG (ClientM (Response a)) (Response a) where
  runTG = liftClientM

-- | Wrapper around 'AnswerInlineQueryRequest' request type for 'answerInlineQuery' method.
instance RunTG AnswerInlineQueryRequest (Response Bool) where
  runTG = runTG . answerInlineQuery

-- | Wrapper around 'AnswerWebAppQueryRequest' request type for 'answerWebAppQuery' method.
instance RunTG AnswerWebAppQueryRequest (Response SentWebAppMessage) where
  runTG = runTG . answerWebAppQuery

-- | Wrapper around 'SendInvoiceRequest' request type for 'sendInvoice' method.
instance RunTG SendInvoiceRequest (Response Message) where
  runTG = runTG . sendInvoice

-- | Wrapper around 'CreateInvoiceLinkRequest' request type for 'createInvoiceLink' method.
instance RunTG CreateInvoiceLinkRequest (Response Text) where
  runTG = runTG . createInvoiceLink

-- | Wrapper around 'AnswerShippingQueryRequest' request type for 'answerShippingQuery' method.
instance RunTG AnswerShippingQueryRequest (Response Bool) where
  runTG = runTG . answerShippingQuery

-- | Wrapper around 'AnswerPreCheckoutQueryRequest' request type for 'answerPreCheckoutQuery' method.
instance RunTG AnswerPreCheckoutQueryRequest (Response Bool) where
  runTG = runTG . answerPreCheckoutQuery

-- | Wrapper around 'GetUpdatesRequest' request type for 'getUpdates' method.
instance RunTG GetUpdatesRequest (Response [Update]) where
  runTG = runTG . getUpdates

-- | Wrapper around 'SendGameRequest' request type for 'sendGame' method.
instance RunTG SendGameRequest (Response Message) where
  runTG = runTG . sendGame

-- | Wrapper around 'SetGameScoreRequest' request type for 'setGameScore' method.
instance RunTG SetGameScoreRequest (Response SetGameScoreResult) where
  runTG = runTG . setGameScore

-- | Wrapper around 'SendStickerRequest' request type for 'sendSticker' method.
instance RunTG SendStickerRequest (Response Message) where
  runTG = runTG . sendSticker

-- | Wrapper around 'UploadStickerFileRequest' request type for 'uploadStickerFile' method.
instance RunTG UploadStickerFileRequest (Response File) where
  runTG = runTG . uploadStickerFile

-- | Wrapper around 'CreateNewStickerSetRequest' request type for 'createNewStickerSet' method.
instance RunTG CreateNewStickerSetRequest (Response Bool) where
  runTG = runTG . createNewStickerSet

-- | Wrapper around 'AddStickerToSetRequest' request type for 'addStickerToSet' method.
instance RunTG AddStickerToSetRequest (Response Bool) where
  runTG = runTG . addStickerToSet

-- | Wrapper around 'SetStickerSetThumbRequest' request type for 'setStickerSetThumb' method.
instance RunTG SetStickerSetThumbnailRequest (Response Bool) where
  runTG = runTG . setStickerSetThumbnail

-- | Wrapper around 'EditMessageTextRequest' request type for 'editMessageText' method.
instance RunTG EditMessageTextRequest (Response EditMessageResponse) where
  runTG = runTG . editMessageText

-- | Wrapper around 'EditMessageCaptionRequest' request type for 'editMessageCaption' method.
instance RunTG EditMessageCaptionRequest (Response EditMessageResponse) where
  runTG = runTG . editMessageCaption

-- | Wrapper around 'EditMessageMediaRequest' request type for 'editMessageMedia' method.
instance RunTG EditMessageMediaRequest (Response EditMessageResponse) where
  runTG = runTG . editMessageMedia

-- | Wrapper around 'EditMessageReplyMarkupRequest' request type for 'editMessageReplyMarkup' method.
instance RunTG EditMessageReplyMarkupRequest (Response EditMessageResponse) where
  runTG = runTG . editMessageReplyMarkup

-- | Wrapper around 'StopPollRequest' request type for 'stopPoll' method.
instance RunTG StopPollRequest (Response Poll) where
  runTG = runTG . stopPoll

-- | Wrapper around 'CreateForumTopicRequest' request type for 'createForumTopic' method.
instance RunTG CreateForumTopicRequest (Response ForumTopic) where
  runTG = runTG . createForumTopic

-- | Wrapper around 'EditForumTopicRequest' request type for 'editForumTopic' method.
instance RunTG EditForumTopicRequest (Response Bool) where
  runTG = runTG . editForumTopic

-- | Wrapper around 'CloseForumTopicRequest' request type for 'closeForumTopic' method.
instance RunTG CloseForumTopicRequest (Response Bool) where
  runTG = runTG . closeForumTopic

-- | Wrapper around 'ReopenForumTopicRequest' request type for 'reopenForumTopic' method.
instance RunTG ReopenForumTopicRequest (Response Bool) where
  runTG = runTG . reopenForumTopic

-- | Wrapper around 'DeleteForumTopicRequest' request type for 'deleteForumTopic' method.
instance RunTG DeleteForumTopicRequest (Response Bool) where
  runTG = runTG . deleteForumTopic

-- | Wrapper around 'UnpinAllForumTopicMessagesRequest' request type for 'unpinAllForumTopicMessages' method.
instance RunTG UnpinAllForumTopicMessagesRequest (Response Bool) where
  runTG = runTG . unpinAllForumTopicMessages

-- | Wrapper around 'EditGeneralForumTopicRequest' request type for 'editGeneralForumTopic' method.
instance RunTG EditGeneralForumTopicRequest (Response Bool) where
  runTG = runTG . editGeneralForumTopic

-- | Wrapper around 'CloseGeneralForumTopicRequest' request type for 'closeGeneralForumTopic' method.
instance RunTG CloseGeneralForumTopicRequest (Response Bool) where
  runTG = runTG . closeGeneralForumTopic

-- | Wrapper around 'ReopenGeneralForumTopicRequest' request type for 'reopenGeneralForumTopic' method.
instance RunTG ReopenGeneralForumTopicRequest (Response Bool) where
  runTG = runTG . reopenGeneralForumTopic

-- | Wrapper around 'HideGeneralForumTopicRequest' request type for 'hideGeneralForumTopic' method.
instance RunTG HideGeneralForumTopicRequest (Response Bool) where
  runTG = runTG . hideGeneralForumTopic

-- | Wrapper around 'UnhideGeneralForumTopicRequest' request type for 'unhideGeneralForumTopic' method.
instance RunTG UnhideGeneralForumTopicRequest (Response Bool) where
  runTG = runTG . unhideGeneralForumTopic

-- | Wrapper around 'ForwardMessageRequest' request type for 'forwardMessage' method.
instance RunTG ForwardMessageRequest (Response Message) where
  runTG = runTG . forwardMessage

-- | Wrapper around 'SendDiceRequest' request type for 'sendDice' method.
instance RunTG SendDiceRequest (Response Message) where
  runTG = runTG . sendDice

-- | Wrapper around 'UnbanChatMemberRequest' request type for 'unbanChatMember' method.
instance RunTG UnbanChatMemberRequest (Response Bool) where
  runTG = runTG . unbanChatMember

-- | Wrapper around 'SendLocationRequest' request type for 'sendLocation' method.
instance RunTG SendLocationRequest (Response Message) where
  runTG = runTG . sendLocation

-- | Wrapper around 'SendVoiceRequest' request type for 'sendVoice' method.
instance RunTG SendVoiceRequest (Response Message) where
  runTG = runTG . sendVoice

-- | Wrapper around 'SendAudioRequest' request type for 'sendAudio' method.
instance RunTG SendAudioRequest (Response Message) where
  runTG = runTG . sendAudio

-- | Wrapper around 'SendVideoRequest' request type for 'sendVideo' method.
instance RunTG SendVideoRequest (Response Message) where
  runTG = runTG . sendVideo

-- | Wrapper around 'SetChatPhotoRequest' request type for 'setChatPhoto' method.
instance RunTG SetChatPhotoRequest (Response Bool) where
  runTG = runTG . setChatPhoto

-- | Wrapper around 'DeleteMyCommandsRequest' request type for 'deleteMyCommands' method.
instance RunTG DeleteMyCommandsRequest (Response Bool) where
  runTG = runTG . deleteMyCommands

-- | Wrapper around 'EditMessageLiveLocationRequest' request type for 'editMessageLiveLocation' method.
instance RunTG EditMessageLiveLocationRequest (Response (Either Bool Message)) where
  runTG = runTG . editMessageLiveLocation

-- | Wrapper around 'SetChatMenuButtonRequest' request type for 'setChatMenuButton' method.
instance RunTG SetChatMenuButtonRequest (Response Bool) where
  runTG = runTG . setChatMenuButton

-- | Wrapper around 'SetMyCommandsRequest' request type for 'setMyCommands' method.
instance RunTG SetMyCommandsRequest (Response Bool) where
  runTG = runTG . setMyCommands

instance RunTG SetCustomEmojiStickerSetThumbnailRequest (Response Bool) where
  runTG = runTG . setCustomEmojiStickerSetThumbnail

-- | Wrapper around 'CopyMessageRequest' request type for 'copyMessage' method.
instance RunTG CopyMessageRequest (Response CopyMessageId) where
  runTG = runTG . copyMessage

-- | Wrapper around 'SendMessageRequest' request type for 'sendMessage' method.
instance RunTG SendMessageRequest (Response Message) where
  runTG = runTG . sendMessage

-- | Wrapper around 'EditChatInviteLinkRequest' request type for 'editChatInviteLink' method.
instance RunTG EditChatInviteLinkRequest (Response ChatInviteLink) where
  runTG = runTG . editChatInviteLink

-- | Wrapper around 'SendPhotoRequest' request type for 'sendPhoto' method.
instance RunTG SendPhotoRequest (Response Message) where
  runTG = runTG . sendPhoto

-- | Wrapper around 'StopMessageLiveLocationRequest' request type for 'stopMessageLiveLocation' method.
instance RunTG StopMessageLiveLocationRequest (Response (Either Bool Message)) where
  runTG = runTG . stopMessageLiveLocation

-- | Wrapper around 'SendDocumentRequest' request type for 'sendDocument' method.
instance RunTG SendDocumentRequest (Response Message) where
  runTG = runTG . sendDocument

-- | Wrapper around 'SendAnimationRequest' request type for 'sendAnimation' method.
instance RunTG SendAnimationRequest (Response Message) where
  runTG = runTG . sendAnimation

-- | Wrapper around 'RestrictChatMemberRequest' request type for 'restrictChatMember' method.
instance RunTG RestrictChatMemberRequest (Response Bool) where
  runTG = runTG . restrictChatMember

-- | Wrapper around 'AnswerCallbackQueryRequest' request type for 'answerCallbackQuery' method.
instance RunTG AnswerCallbackQueryRequest (Response Bool) where
  runTG = runTG . answerCallbackQuery

-- | Wrapper around 'SetMyDefaultAdministratorRightsRequest' request type for 'setMyDefaultAdministratorRights' method.
instance RunTG SetMyDefaultAdministratorRightsRequest (Response Bool) where
  runTG = runTG . setMyDefaultAdministratorRights

-- | Wrapper around 'SetMyDescriptionRequest' request type for 'setMyDescription' method.
instance RunTG SetMyDescriptionRequest (Response Bool) where
  runTG = runTG . setMyDescription

-- | Wrapper around 'SetMyShortDescriptionRequest' request type for 'setMyShortDescription' method.
instance RunTG SetMyShortDescriptionRequest (Response Bool) where
  runTG = runTG . setMyShortDescription

-- | Wrapper around 'CreateChatInviteLinkRequest' request type for 'createChatInviteLink' method.
instance RunTG CreateChatInviteLinkRequest (Response ChatInviteLink) where
  runTG = runTG . createChatInviteLink

-- | Wrapper around 'PinChatMessageRequest' request type for 'pinChatMessage' method.
instance RunTG PinChatMessageRequest (Response Bool) where
  runTG = runTG . pinChatMessage

-- | Wrapper around 'SetChatPermissionsRequest' request type for 'setChatPermissions' method.
instance RunTG SetChatPermissionsRequest (Response Bool) where
  runTG = runTG . setChatPermissions

-- | Wrapper around 'PromoteChatMemberRequest' request type for 'promoteChatMember' method.
instance RunTG PromoteChatMemberRequest (Response Bool) where
  runTG = runTG . promoteChatMember

-- | Wrapper around 'GetMyDefaultAdministratorRightsRequest' request type for 'getMyDefaultAdministratorRights' method.
instance RunTG GetMyDefaultAdministratorRightsRequest (Response ChatAdministratorRights) where
  runTG = runTG . getMyDefaultAdministratorRights

-- | Wrapper around 'GetMyDescriptionRequest' request type for 'getMyDescription' method.
instance RunTG GetMyDescriptionRequest (Response BotDescription) where
  runTG = runTG . getMyDescription

-- | Wrapper around 'GetMyShortDescriptionRequest' request type for 'getMyShortDescription' method.
instance RunTG GetMyShortDescriptionRequest (Response BotShortDescription) where
  runTG = runTG . getMyShortDescription

-- | Wrapper around 'BanChatMemberRequest' request type for 'banChatMember' method.
instance RunTG BanChatMemberRequest (Response Bool) where
  runTG = runTG . banChatMember

-- | Wrapper around 'GetChatMenuButtonRequest' request type for 'getChatMenuButton' method.
instance RunTG GetChatMenuButtonRequest (Response MenuButton) where
  runTG = runTG . getChatMenuButton

-- | Wrapper around 'SendPollRequest' request type for 'sendPoll' method.
instance RunTG SendPollRequest (Response Message) where
  runTG = runTG . sendPoll

-- | Wrapper around 'GetMyCommandsRequest' request type for 'getMyCommands' method.
instance RunTG GetMyCommandsRequest (Response [BotCommand]) where
  runTG = runTG . getMyCommands

-- | Wrapper around 'SendVenueRequest' request type for 'sendVenue' method.
instance RunTG SendVenueRequest (Response Message) where
  runTG = runTG . sendVenue

-- | Wrapper around 'SendMediaGroupRequest' request type for 'sendMediaGroup' method.
instance RunTG SendMediaGroupRequest (Response [Message]) where
  runTG = runTG . sendMediaGroup

-- | Wrapper around 'SetChatAdministratorCustomTitleRequest' request type for 'setChatAdministratorCustomTitle' method.
instance RunTG SetChatAdministratorCustomTitleRequest (Response Bool) where
  runTG = runTG . setChatAdministratorCustomTitle

-- | Wrapper around 'SendVideoNoteRequest' request type for 'sendVideoNote' method.
instance RunTG SendVideoNoteRequest (Response Message) where
  runTG = runTG . sendVideoNote

-- | Wrapper around 'SendContactRequest' request type for 'sendContact' method.
instance RunTG SendContactRequest (Response Message) where
  runTG = runTG . sendContact

-- | Wrapper around 'GetUserProfilePhotosRequest' request type for 'getUserProfilePhotos' method.
instance RunTG GetUserProfilePhotosRequest (Response UserProfilePhotos) where
  runTG = runTG . getUserProfilePhotos