package twitter import ( "net/http" "github.com/dghubble/sling" ) // DirectMessage is a direct message to a single recipient. type DirectMessage struct { CreatedAt string `json:"created_at"` Entities *Entities `json:"entities"` ID int64 `json:"id"` IDStr string `json:"id_str"` Recipient *User `json:"recipient"` RecipientID int64 `json:"recipient_id"` RecipientScreenName string `json:"recipient_screen_name"` Sender *User `json:"sender"` SenderID int64 `json:"sender_id"` SenderScreenName string `json:"sender_screen_name"` Text string `json:"text"` } // DirectMessageService provides methods for accessing Twitter direct message // API endpoints. type DirectMessageService struct { baseSling *sling.Sling sling *sling.Sling } // newDirectMessageService returns a new DirectMessageService. func newDirectMessageService(sling *sling.Sling) *DirectMessageService { return &DirectMessageService{ baseSling: sling.New(), sling: sling.Path("direct_messages/"), } } // directMessageShowParams are the parameters for DirectMessageService.Show type directMessageShowParams struct { ID int64 `url:"id,omitempty"` } // Show returns the requested Direct Message. // Requires a user auth context with DM scope. // https://dev.twitter.com/rest/reference/get/direct_messages/show func (s *DirectMessageService) Show(id int64) (*DirectMessage, *http.Response, error) { params := &directMessageShowParams{ID: id} dm := new(DirectMessage) apiError := new(APIError) resp, err := s.sling.New().Get("show.json").QueryStruct(params).Receive(dm, apiError) return dm, resp, relevantError(err, *apiError) } // DirectMessageGetParams are the parameters for DirectMessageService.Get type DirectMessageGetParams struct { SinceID int64 `url:"since_id,omitempty"` MaxID int64 `url:"max_id,omitempty"` Count int `url:"count,omitempty"` IncludeEntities *bool `url:"include_entities,omitempty"` SkipStatus *bool `url:"skip_status,omitempty"` } // Get returns recent Direct Messages received by the authenticated user. // Requires a user auth context with DM scope. // https://dev.twitter.com/rest/reference/get/direct_messages func (s *DirectMessageService) Get(params *DirectMessageGetParams) ([]DirectMessage, *http.Response, error) { dms := new([]DirectMessage) apiError := new(APIError) resp, err := s.baseSling.New().Get("direct_messages.json").QueryStruct(params).Receive(dms, apiError) return *dms, resp, relevantError(err, *apiError) } // DirectMessageSentParams are the parameters for DirectMessageService.Sent type DirectMessageSentParams struct { SinceID int64 `url:"since_id,omitempty"` MaxID int64 `url:"max_id,omitempty"` Count int `url:"count,omitempty"` Page int `url:"page,omitempty"` IncludeEntities *bool `url:"include_entities,omitempty"` } // Sent returns recent Direct Messages sent by the authenticated user. // Requires a user auth context with DM scope. // https://dev.twitter.com/rest/reference/get/direct_messages/sent func (s *DirectMessageService) Sent(params *DirectMessageSentParams) ([]DirectMessage, *http.Response, error) { dms := new([]DirectMessage) apiError := new(APIError) resp, err := s.sling.New().Get("sent.json").QueryStruct(params).Receive(dms, apiError) return *dms, resp, relevantError(err, *apiError) } // DirectMessageNewParams are the parameters for DirectMessageService.New type DirectMessageNewParams struct { UserID int64 `url:"user_id,omitempty"` ScreenName string `url:"screen_name,omitempty"` Text string `url:"text"` } // New sends a new Direct Message to a specified user as the authenticated // user. // Requires a user auth context with DM scope. // https://dev.twitter.com/rest/reference/post/direct_messages/new func (s *DirectMessageService) New(params *DirectMessageNewParams) (*DirectMessage, *http.Response, error) { dm := new(DirectMessage) apiError := new(APIError) resp, err := s.sling.New().Post("new.json").BodyForm(params).Receive(dm, apiError) return dm, resp, relevantError(err, *apiError) } // DirectMessageDestroyParams are the parameters for DirectMessageService.Destroy type DirectMessageDestroyParams struct { ID int64 `url:"id,omitempty"` IncludeEntities *bool `url:"include_entities,omitempty"` } // Destroy deletes the Direct Message with the given id and returns it if // successful. // Requires a user auth context with DM scope. // https://dev.twitter.com/rest/reference/post/direct_messages/destroy func (s *DirectMessageService) Destroy(id int64, params *DirectMessageDestroyParams) (*DirectMessage, *http.Response, error) { if params == nil { params = &DirectMessageDestroyParams{} } params.ID = id dm := new(DirectMessage) apiError := new(APIError) resp, err := s.sling.New().Post("destroy.json").BodyForm(params).Receive(dm, apiError) return dm, resp, relevantError(err, *apiError) }