mirror of
https://github.com/fnproject/fn.git
synced 2022-10-28 21:29:17 +03:00
131 lines
5.0 KiB
Go
131 lines
5.0 KiB
Go
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)
|
|
}
|