diff --git a/chat.go b/chat.go index fba2dfb..c462a3d 100644 --- a/chat.go +++ b/chat.go @@ -305,3 +305,21 @@ func (c Chat) Download(messageID int, filepath string) (ChatAPI, error) { } return r, nil } + +func (c Chat) LoadFlip(messageID int, conversationID string, flipConversationID string, gameID string) (ChatAPI, error) { + m := ChatAPI{ + Params: ¶ms{}, + } + m.Method = "loadflip" + m.Params.Options.Channel = c.Channel + m.Params.Options.MsgID = messageID + m.Params.Options.ConversationID = conversationID + m.Params.Options.FlipConversationID = flipConversationID + m.Params.Options.GameID = gameID + + r, err := chatAPIOut(c.keybase.Path, m) + if err != nil { + return ChatAPI{}, err + } + return r, nil +} diff --git a/types.go b/types.go index 921c506..53ad205 100644 --- a/types.go +++ b/types.go @@ -110,6 +110,13 @@ type text struct { UserMentions []userMentions `json:"userMentions"` TeamMentions []teamMentions `json:"teamMentions"` } +type flip struct { + Text string `json:"text"` + GameID string `json:"game_id"` + FlipConvID string `json:"flip_conv_id"` + UserMentions interface{} `json:"user_mentions"` + TeamMentions interface{} `json:"team_mentions"` +} type content struct { Type string `json:"type"` Delete delete `json:"delete"` @@ -118,6 +125,7 @@ type content struct { System system `json:"system"` Text text `json:"text"` SendPayment SendPayment `json:"send_payment"` + Flip flip `json:"flip"` } type msg struct { ID int `json:"id"` @@ -196,13 +204,17 @@ type message struct { Body string `json:"body"` } type options struct { - Channel Channel `json:"channel"` - MessageID int `json:"message_id"` - Message message `json:"message"` - Pagination pagination `json:"pagination"` - Filename string `json:"filename,omitempty"` - Title string `json:"title,omitempty"` - Output string `json:"output,omitempty"` + Channel Channel `json:"channel"` + MessageID int `json:"message_id"` + Message message `json:"message"` + Pagination pagination `json:"pagination"` + Filename string `json:"filename,omitempty"` + Title string `json:"title,omitempty"` + Output string `json:"output,omitempty"` + ConversationID string `json:"conversation_id"` + FlipConversationID string `json:"flip_conversation_id"` + MsgID int `json:"msg_id"` + GameID string `json:"game_id"` } type params struct { Options options `json:"options"` @@ -214,14 +226,47 @@ type pagination struct { Last bool `json:"last,omitempty"` ForceFirstPage bool `json:"forceFirstPage,omitempty"` } +type participants struct { + UID string `json:"uid"` + DeviceID string `json:"deviceID"` + Username string `json:"username"` + DeviceName string `json:"deviceName"` + Commitment string `json:"commitment"` + Reveal string `json:"reveal"` +} +type dupreg struct { + User string `json:"user"` + Device string `json:"device"` +} +type errorInfo struct { + Typ int `json:"typ"` + Dupreg dupreg `json:"dupreg"` +} +type resultInfo struct { + Typ int `json:"typ"` + Coin bool `json:"coin"` +} +type flipStatus struct { + GameID string `json:"gameID"` + Phase int `json:"phase"` + ProgressText string `json:"progressText"` + ResultText string `json:"resultText"` + CommitmentVisualization string `json:"commitmentVisualization"` + RevealVisualization string `json:"revealVisualization"` + Participants []participants `json:"participants"` + ResultInfo resultInfo `json:"resultInfo"` + ErrorInfo errorInfo `json:"errorInfo"` +} type result struct { - Messages []messages `json:"messages,omitempty"` - Pagination pagination `json:"pagination"` - Message string `json:"message"` - ID int `json:"id"` - Ratelimits []rateLimits `json:"ratelimits"` - Conversations []conversation `json:"conversations,omitempty"` - Offline bool `json:"offline,omitempty"` + Messages []messages `json:"messages,omitempty"` + Pagination pagination `json:"pagination"` + Message string `json:"message"` + ID int `json:"id"` + Ratelimits []rateLimits `json:"ratelimits"` + Conversations []conversation `json:"conversations,omitempty"` + Offline bool `json:"offline,omitempty"` + Status flipStatus `json:"status,omitempty"` + IdentifyFailures interface{} `json:"identifyFailures,omitempty"` } type messages struct { Msg msg `json:"msg,omitempty"` @@ -421,6 +466,7 @@ type chat interface { Send(message ...string) (ChatAPI, error) Upload(title string, filepath string) (ChatAPI, error) Download(messageID int, filepath string) (ChatAPI, error) + LoadFlip(messageID int, conversationID string, flipConversationID string, gameID string) (ChatAPI, error) } type chatAPI interface {