From d4acc115a0fd94c55be41b57390e6ccdbdd645ea Mon Sep 17 00:00:00 2001 From: Neur0toxine Date: Wed, 17 Feb 2021 15:15:29 +0300 Subject: [PATCH] Pointer instead of slice in StructuredMessageElement (#3) --- actions.go | 6 +++--- message.go | 4 ++-- messenger.go | 22 ++++++++++---------- profile.go | 2 +- receiving.go | 8 ++++---- response.go | 57 ++++++++++++++++++++++++++-------------------------- settings.go | 8 ++++---- 7 files changed, 54 insertions(+), 53 deletions(-) diff --git a/actions.go b/actions.go index bccac68..f478203 100644 --- a/actions.go +++ b/actions.go @@ -14,11 +14,11 @@ const ( // ReadAction means that the event was a previous recipient reading their respective // messages. ReadAction - // PostBackAction represents post call back + // PostBackAction represents post call back. PostBackAction - // OptInAction represents opting in through the Send to Messenger button + // OptInAction represents opting in through the Send to Messenger button. OptInAction - // ReferralAction represents ?ref parameter in m.me URLs + // ReferralAction represents ?ref parameter in m.me URLs. ReferralAction // AccountLinkingAction means that the event concerns changes in account linking // status. diff --git a/message.go b/message.go index 5f1bf96..2a5ad2f 100644 --- a/message.go +++ b/message.go @@ -56,7 +56,7 @@ type Read struct { Seq int `json:"seq"` } -// PostBack represents postback callback +// PostBack represents postback callback. type PostBack struct { // Sender is who the message was sent from. Sender Sender `json:"-"` @@ -94,7 +94,7 @@ func (r Read) Watermark() time.Time { } // GetNLP simply unmarshals the NLP entities to the given struct and returns -// an error if it's not possible +// an error if it's not possible. func (m *Message) GetNLP(i interface{}) error { return json.Unmarshal(m.NLP, &i) } diff --git a/messenger.go b/messenger.go index 53a6fda..e97abaa 100644 --- a/messenger.go +++ b/messenger.go @@ -135,17 +135,17 @@ func (m *Messenger) HandleRead(f ReadHandler) { m.readHandlers = append(m.readHandlers, f) } -// HandlePostBack adds a new PostBackHandler to the Messenger +// HandlePostBack adds a new PostBackHandler to the Messenger. func (m *Messenger) HandlePostBack(f PostBackHandler) { m.postBackHandlers = append(m.postBackHandlers, f) } -// HandleReferral adds a new ReferralHandler to the Messenger +// HandleReferral adds a new ReferralHandler to the Messenger. func (m *Messenger) HandleReferral(f ReferralHandler) { m.referralHandlers = append(m.referralHandlers, f) } -// HandleAccountLinking adds a new AccountLinkingHandler to the Messenger +// HandleAccountLinking adds a new AccountLinkingHandler to the Messenger. func (m *Messenger) HandleAccountLinking(f AccountLinkingHandler) { m.accountLinkingHandlers = append(m.accountLinkingHandlers, f) } @@ -163,7 +163,7 @@ func (m *Messenger) Handler() http.Handler { // - Name // - First Name // - Last Name -// - Profile Picture +// - Profile Picture. func (m *Messenger) ProfileByID(id int64, profileFields []string) (Profile, error) { p := Profile{} url := fmt.Sprintf("%v%v", ProfileURL, id) @@ -204,7 +204,7 @@ func (m *Messenger) ProfileByID(id int64, profileFields []string) (Profile, erro return p, err } -// GreetingSetting sends settings for greeting +// GreetingSetting sends settings for greeting. func (m *Messenger) GreetingSetting(text string) (QueryResponse, error) { var qr QueryResponse @@ -239,7 +239,7 @@ func (m *Messenger) GreetingSetting(text string) (QueryResponse, error) { return getFacebookQueryResponse(resp.Body) } -// CallToActionsSetting sends settings for Get Started or Persistent Menu +// CallToActionsSetting sends settings for Get Started or Persistent Menu. func (m *Messenger) CallToActionsSetting(state string, actions []CallToActionsItem) (QueryResponse, error) { var qr QueryResponse @@ -296,7 +296,7 @@ func (m *Messenger) handle(w http.ResponseWriter, r *http.Request) { } if rec.Object != "page" { - fmt.Println("Object is not page, undefined behaviour. Got", rec.Object) + fmt.Println("Object is not page, undefined behavior. Got", rec.Object) respond(w, http.StatusUnprocessableEntity) return } @@ -319,7 +319,7 @@ func respond(w http.ResponseWriter, code int) { fmt.Fprintf(w, `{"code": %d, "status": "%s"}`, code, http.StatusText(code)) } -// checkIntegrity checks the integrity of the requests received +// checkIntegrity checks the integrity of the requests received. func (m *Messenger) checkIntegrity(r *http.Request) error { if m.appSecret == "" { return xerrors.New("missing app secret") @@ -424,7 +424,7 @@ func (m *Messenger) dispatch(r Receive) { } } -// Response returns new Response object +// Response returns new Response object. func (m *Messenger) Response(to int64) *Response { return &Response{ to: Recipient{to}, @@ -437,7 +437,7 @@ func (m *Messenger) Send(to Recipient, message string, messagingType MessagingTy return m.SendWithReplies(to, message, nil, messagingType, metadata, tags...) } -// SendGeneralMessage will send the GenericTemplate message +// SendGeneralMessage will send the GenericTemplate message. func (m *Messenger) SendGeneralMessage(to Recipient, elements *[]StructuredMessageElement, messagingType MessagingType, metadata string, tags ...string) (QueryResponse, error) { r := &Response{ token: m.token, @@ -515,7 +515,7 @@ func (m *Messenger) classify(info MessageInfo) Action { return UnknownAction } -// newVerifyHandler returns a function which can be used to handle webhook verification +// newVerifyHandler returns a function which can be used to handle webhook verification. func newVerifyHandler(token string) func(w http.ResponseWriter, r *http.Request) { return func(w http.ResponseWriter, r *http.Request) { if r.FormValue("hub.verify_token") == token { diff --git a/profile.go b/profile.go index de3bbbc..52e909c 100644 --- a/profile.go +++ b/profile.go @@ -1,6 +1,6 @@ package messenger -// Profile is the public information of a Facebook user +// Profile is the public information of a Facebook user. type Profile struct { Name string `json:"name"` FirstName string `json:"first_name"` diff --git a/receiving.go b/receiving.go index d7bd3d7..f83d099 100644 --- a/receiving.go +++ b/receiving.go @@ -58,7 +58,7 @@ type OptIn struct { Ref string `json:"ref"` } -// ReferralMessage represents referral endpoint +// ReferralMessage represents referral endpoint. type ReferralMessage struct { *Referral @@ -70,7 +70,7 @@ type ReferralMessage struct { Time time.Time `json:"-"` } -// Referral represents referral info +// Referral represents referral info. type Referral struct { // Data originally passed in the ref param Ref string `json:"ref"` @@ -112,13 +112,13 @@ type QuickReply struct { // Payload is the information on where an attachment is. type Payload struct { - URL string `json:"url,omitempty"` + URL string `json:"url,omitempty"` Title string `json:"title,omitempty"` // Coordinates is Lat/Long pair of location pin Coordinates *Coordinates `json:"coordinates,omitempty"` } -// Coordinates is a pair of latitude and longitude +// Coordinates is a pair of latitude and longitude. type Coordinates struct { // Lat is latitude Lat float64 `json:"lat"` diff --git a/response.go b/response.go index 2a874d5..2ae1a40 100644 --- a/response.go +++ b/response.go @@ -39,13 +39,13 @@ const ( // FileAttachment is file attachment type. FileAttachment AttachmentType = "file" - // ResponseType is response messaging type + // ResponseType is response messaging type. ResponseType MessagingType = "RESPONSE" - // UpdateType is update messaging type + // UpdateType is update messaging type. UpdateType MessagingType = "UPDATE" - // MessageTagType is message_tag messaging type + // MessageTagType is message_tag messaging type. MessageTagType MessagingType = "MESSAGE_TAG" - // NonPromotionalSubscriptionType is NON_PROMOTIONAL_SUBSCRIPTION messaging type + // NonPromotionalSubscriptionType is NON_PROMOTIONAL_SUBSCRIPTION messaging type. NonPromotionalSubscriptionType MessagingType = "NON_PROMOTIONAL_SUBSCRIPTION" // TopElementStyle is compact. @@ -60,14 +60,14 @@ const ( ) // QueryResponse is the response sent back by Facebook when setting up things -// like greetings or call-to-actions +// like greetings or call-to-actions. type QueryResponse struct { Error *QueryError `json:"error,omitempty"` RecipientID string `json:"recipient_id"` MessageID string `json:"message_id"` } -// QueryError is representing an error sent back by Facebook +// QueryError is representing an error sent back by Facebook. type QueryError struct { Message string `json:"message"` Type string `json:"type"` @@ -76,7 +76,7 @@ type QueryError struct { FBTraceID string `json:"fbtrace_id"` } -// QueryError implements error +// QueryError implements error. func (e QueryError) Error() string { return e.Message } @@ -126,7 +126,8 @@ func (r *Response) Text(message string, messagingType MessagingType, metadata st // TextWithReplies sends a textual message with some replies // messagingType should be one of the following: "RESPONSE","UPDATE","MESSAGE_TAG","NON_PROMOTIONAL_SUBSCRIPTION" -// only supply tags when messagingType == "MESSAGE_TAG" (see https://developers.facebook.com/docs/messenger-platform/send-messages#messaging_types for more) +// only supply tags when messagingType == "MESSAGE_TAG" +// (see https://developers.facebook.com/docs/messenger-platform/send-messages#messaging_types for more). func (r *Response) TextWithReplies(message string, replies []QuickReply, messagingType MessagingType, metadata string, tags ...string) (QueryResponse, error) { var tag string if len(tags) > 0 { @@ -147,7 +148,7 @@ func (r *Response) TextWithReplies(message string, replies []QuickReply, messagi return r.DispatchMessage(&m) } -// AttachmentWithReplies sends a attachment message with some replies +// AttachmentWithReplies sends a attachment message with some replies. func (r *Response) AttachmentWithReplies(attachment *StructuredMessageAttachment, replies []QuickReply, messagingType MessagingType, metadata string, tags ...string) (QueryResponse, error) { var tag string if len(tags) > 0 { @@ -204,15 +205,15 @@ func (r *Response) Attachment(dataType AttachmentType, url string, messagingType return r.DispatchMessage(&m) } -// copied from multipart package +// copied from multipart package. var quoteEscaper = strings.NewReplacer("\\", "\\\\", `"`, "\\\"") -// copied from multipart package +// copied from multipart package. func escapeQuotes(s string) string { return quoteEscaper.Replace(s) } -// copied from multipart package with slight changes due to fixed content-type there +// copied from multipart package with slight changes due to fixed content-type there. func createFormFile(filename string, w *multipart.Writer, contentType string) (io.Writer, error) { h := make(textproto.MIMEHeader) h.Set("Content-Disposition", @@ -267,7 +268,7 @@ func (r *Response) AttachmentData(dataType AttachmentType, filename string, file return getFacebookQueryResponse(resp.Body) } -// ButtonTemplate sends a message with the main contents being button elements +// ButtonTemplate sends a message with the main contents being button elements. func (r *Response) ButtonTemplate(text string, buttons *[]StructuredMessageButton, messagingType MessagingType, metadata string, tags ...string) (QueryResponse, error) { var tag string if len(tags) > 0 { @@ -295,7 +296,7 @@ func (r *Response) ButtonTemplate(text string, buttons *[]StructuredMessageButto return r.DispatchMessage(&m) } -// GenericTemplate is a message which allows for structural elements to be sent +// GenericTemplate is a message which allows for structural elements to be sent. func (r *Response) GenericTemplate(elements *[]StructuredMessageElement, messagingType MessagingType, metadata string, tags ...string) (QueryResponse, error) { var tag string if len(tags) > 0 { @@ -321,7 +322,7 @@ func (r *Response) GenericTemplate(elements *[]StructuredMessageElement, messagi return r.DispatchMessage(&m) } -// ListTemplate sends a list of elements +// ListTemplate sends a list of elements. func (r *Response) ListTemplate(elements *[]StructuredMessageElement, messagingType MessagingType, tags ...string) (QueryResponse, error) { var tag string if len(tags) > 0 { @@ -347,7 +348,7 @@ func (r *Response) ListTemplate(elements *[]StructuredMessageElement, messagingT return r.DispatchMessage(&m) } -// SenderAction sends a info about sender action +// SenderAction sends a info about sender action. func (r *Response) SenderAction(action string) (QueryResponse, error) { m := SendSenderAction{ Recipient: r.to, @@ -356,7 +357,7 @@ func (r *Response) SenderAction(action string) (QueryResponse, error) { return r.DispatchMessage(&m) } -// DispatchMessage posts the message to messenger, return the error if there's any +// DispatchMessage posts the message to messenger, return the error if there's any. func (r *Response) DispatchMessage(m interface{}) (QueryResponse, error) { var res QueryResponse data, err := json.Marshal(m) @@ -453,7 +454,7 @@ type StructuredMessageAttachment struct { Payload StructuredMessagePayload `json:"payload"` } -// StructuredMessagePayload is the actual payload of an attachment +// StructuredMessagePayload is the actual payload of an attachment. type StructuredMessagePayload struct { // TemplateType must be button, generic or receipt TemplateType string `json:"template_type,omitempty"` @@ -500,14 +501,14 @@ type Adjustment struct { Amount float32 `json:"amount,omitempty"` } -// StructuredMessageElement is a response containing structural elements +// StructuredMessageElement is a response containing structural elements. type StructuredMessageElement struct { - Title string `json:"title"` - ImageURL string `json:"image_url"` - ItemURL string `json:"item_url,omitempty"` - Subtitle string `json:"subtitle"` - DefaultAction *DefaultAction `json:"default_action,omitempty"` - Buttons []StructuredMessageButton `json:"buttons"` + Title string `json:"title"` + ImageURL string `json:"image_url"` + ItemURL string `json:"item_url,omitempty"` + Subtitle string `json:"subtitle"` + DefaultAction *DefaultAction `json:"default_action,omitempty"` + Buttons *[]StructuredMessageButton `json:"buttons"` ReceiptMessageElement } @@ -517,7 +518,7 @@ type ReceiptMessageElement struct { Currency string `json:"currency,omitempty"` } -// DefaultAction is a response containing default action properties +// DefaultAction is a response containing default action properties. type DefaultAction struct { Type string `json:"type"` URL string `json:"url,omitempty"` @@ -527,7 +528,7 @@ type DefaultAction struct { WebviewShareButton string `json:"webview_share_button,omitempty"` } -// StructuredMessageButton is a response containing buttons +// StructuredMessageButton is a response containing buttons. type StructuredMessageButton struct { Type string `json:"type"` URL string `json:"url,omitempty"` @@ -540,7 +541,7 @@ type StructuredMessageButton struct { ShareContents *StructuredMessageData `json:"share_contents,omitempty"` } -// SendSenderAction is the information about sender action +// SendSenderAction is the information about sender action. type SendSenderAction struct { Recipient Recipient `json:"recipient"` SenderAction string `json:"sender_action"` diff --git a/settings.go b/settings.go index 43ac9c5..5e1a809 100644 --- a/settings.go +++ b/settings.go @@ -17,25 +17,25 @@ const ( WebviewFull = "full" ) -// GreetingSetting is the setting for greeting message +// GreetingSetting is the setting for greeting message. type GreetingSetting struct { SettingType string `json:"setting_type"` Greeting GreetingInfo `json:"greeting"` } -// GreetingInfo contains greeting message +// GreetingInfo contains greeting message. type GreetingInfo struct { Text string `json:"text"` } -// CallToActionsSetting is the settings for Get Started and Persist Menu +// CallToActionsSetting is the settings for Get Started and Persist Menu. type CallToActionsSetting struct { SettingType string `json:"setting_type"` ThreadState string `json:"thread_state"` CallToActions []CallToActionsItem `json:"call_to_actions"` } -// CallToActionsItem contains Get Started button or item of Persist Menu +// CallToActionsItem contains Get Started button or item of Persist Menu. type CallToActionsItem struct { Type string `json:"type,omitempty"` Title string `json:"title,omitempty"`