Skip to content
Permalink
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
282 lines (248 sloc) 10.6 KB
package twitter
import (
"net/http"
"time"
"github.com/dghubble/sling"
)
// DirectMessageEvents lists Direct Message events.
type DirectMessageEvents struct {
Events []DirectMessageEvent `json:"events"`
NextCursor string `json:"next_cursor"`
}
// DirectMessageEvent is a single Direct Message sent or received.
type DirectMessageEvent struct {
CreatedAt string `json:"created_timestamp,omitempty"`
ID string `json:"id,omitempty"`
Type string `json:"type"`
Message *DirectMessageEventMessage `json:"message_create"`
}
// DirectMessageEventMessage contains message contents, along with sender and
// target recipient.
type DirectMessageEventMessage struct {
SenderID string `json:"sender_id,omitempty"`
Target *DirectMessageTarget `json:"target"`
Data *DirectMessageData `json:"message_data"`
}
// DirectMessageTarget specifies the recipient of a Direct Message event.
type DirectMessageTarget struct {
RecipientID string `json:"recipient_id"`
}
// DirectMessageData is the message data contained in a Direct Message event.
type DirectMessageData struct {
Text string `json:"text"`
Entities *Entities `json:"entitites,omitempty"`
Attachment *DirectMessageDataAttachment `json:"attachment,omitempty"`
QuickReply *DirectMessageQuickReply `json:"quick_reply,omitempty"`
CTAs []DirectMessageCTA `json:"ctas,omitempty"`
}
// DirectMessageDataAttachment contains message data attachments for a Direct
// Message event.
type DirectMessageDataAttachment struct {
Type string `json:"type"`
Media MediaEntity `json:"media"`
}
// DirectMessageQuickReply contains quick reply data for a Direct Message
// event.
type DirectMessageQuickReply struct {
Type string `json:"type"`
Options []DirectMessageQuickReplyOption `json:"options"`
}
// DirectMessageQuickReplyOption represents Option object for
// a Direct Message's Quick Reply.
type DirectMessageQuickReplyOption struct {
Label string `json:"label"`
Description string `json:"description,omitempty"`
Metadata string `json:"metadata,omitempty"`
}
// DirectMessageCTA contains CTA data for a Direct Message event.
type DirectMessageCTA struct {
Type string `json:"type"`
Label string `json:"label"`
URL string `json:"url"`
}
// 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/"),
}
}
// DirectMessageEventsNewParams are the parameters for
// DirectMessageService.EventsNew
type DirectMessageEventsNewParams struct {
Event *DirectMessageEvent `json:"event"`
}
// EventsNew publishes a new Direct Message event and returns the event.
// Requires a user auth context with DM scope.
// https://developer.twitter.com/en/docs/direct-messages/sending-and-receiving/api-reference/new-event
func (s *DirectMessageService) EventsNew(params *DirectMessageEventsNewParams) (*DirectMessageEvent, *http.Response, error) {
// Twitter API wraps the event response
wrap := &struct {
Event *DirectMessageEvent `json:"event"`
}{}
apiError := new(APIError)
resp, err := s.sling.New().Post("events/new.json").BodyJSON(params).Receive(wrap, apiError)
return wrap.Event, resp, relevantError(err, *apiError)
}
// DirectMessageEventsShowParams are the parameters for
// DirectMessageService.EventsShow
type DirectMessageEventsShowParams struct {
ID string `url:"id,omitempty"`
}
// EventsShow returns a single Direct Message event by id.
// Requires a user auth context with DM scope.
// https://developer.twitter.com/en/docs/direct-messages/sending-and-receiving/api-reference/get-event
func (s *DirectMessageService) EventsShow(id string, params *DirectMessageEventsShowParams) (*DirectMessageEvent, *http.Response, error) {
if params == nil {
params = &DirectMessageEventsShowParams{}
}
params.ID = id
// Twitter API wraps the event response
wrap := &struct {
Event *DirectMessageEvent `json:"event"`
}{}
apiError := new(APIError)
resp, err := s.sling.New().Get("events/show.json").QueryStruct(params).Receive(wrap, apiError)
return wrap.Event, resp, relevantError(err, *apiError)
}
// DirectMessageEventsListParams are the parameters for
// DirectMessageService.EventsList
type DirectMessageEventsListParams struct {
Cursor string `url:"cursor,omitempty"`
Count int `url:"count,omitempty"`
}
// EventsList returns Direct Message events (both sent and received) within
// the last 30 days in reverse chronological order.
// Requires a user auth context with DM scope.
// https://developer.twitter.com/en/docs/direct-messages/sending-and-receiving/api-reference/list-events
func (s *DirectMessageService) EventsList(params *DirectMessageEventsListParams) (*DirectMessageEvents, *http.Response, error) {
events := new(DirectMessageEvents)
apiError := new(APIError)
resp, err := s.sling.New().Get("events/list.json").QueryStruct(params).Receive(events, apiError)
return events, resp, relevantError(err, *apiError)
}
// EventsDestroy deletes the Direct Message event by id.
// Requires a user auth context with DM scope.
// https://developer.twitter.com/en/docs/direct-messages/sending-and-receiving/api-reference/delete-message-event
func (s *DirectMessageService) EventsDestroy(id string) (*http.Response, error) {
params := struct {
ID string `url:"id,omitempty"`
}{id}
apiError := new(APIError)
resp, err := s.sling.New().Delete("events/destroy.json").QueryStruct(params).Receive(nil, apiError)
return resp, relevantError(err, *apiError)
}
// DEPRECATED
// DirectMessage is a direct message to a single recipient (DEPRECATED).
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"`
}
// CreatedAtTime returns the time a Direct Message was created (DEPRECATED).
func (d DirectMessage) CreatedAtTime() (time.Time, error) {
return time.Parse(time.RubyDate, d.CreatedAt)
}
// directMessageShowParams are the parameters for DirectMessageService.Show
type directMessageShowParams struct {
ID int64 `url:"id,omitempty"`
}
// Show returns the requested Direct Message (DEPRECATED).
// 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
// (DEPRECATED).
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
// (DEPRECATED).
// 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
// (DEPRECATED).
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
// (DEPRECATED).
// 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
// (DEPRECATED).
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 (DEPRECATED).
// 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
// (DEPRECATED).
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 (DEPRECATED).
// 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)
}
You can’t perform that action at this time.