diff --git a/chat.go b/chat.go index 7a57059..7cb1326 100644 --- a/chat.go +++ b/chat.go @@ -226,6 +226,48 @@ func (k *Keybase) SendMessageToConvID(convID chat1.ConvIDStr, message string, a return r, nil } +// SendEphemeralToChannel sends a chat message to a channel +func (k *Keybase) SendEphemeralToChannel(channel chat1.ChatChannel, duration time.Duration, message string, a ...interface{}) (SendResponse, error) { + var r SendResponse + + opts := SendMessageOptions{ + Channel: channel, + Message: SendMessageBody{ + Body: fmt.Sprintf(message, a...), + }, + } + + opts.ExplodingLifetime.Duration = duration + + r, err := k.SendMessage(opts) + if err != nil { + return r, err + } + + return r, nil +} + +// SendEphemeralToConvID sends a chat message to a conversation id +func (k *Keybase) SendEphemeralToConvID(convID chat1.ConvIDStr, duration time.Duration, message string, a ...interface{}) (SendResponse, error) { + var r SendResponse + + opts := SendMessageOptions{ + ConversationID: convID, + Message: SendMessageBody{ + Body: fmt.Sprintf(message, a...), + }, + } + + opts.ExplodingLifetime.Duration = duration + + r, err := k.SendMessage(opts) + if err != nil { + return r, err + } + + return r, nil +} + // Send sends a chat message func (c Chat) Send(message ...string) (ChatAPI, error) { m := ChatAPI{ diff --git a/types.go b/types.go index 3a8f792..79c9ddd 100644 --- a/types.go +++ b/types.go @@ -27,20 +27,34 @@ type Error struct { Message string `json:"message"` } +type duration struct { + time.Duration +} + +func (d *duration) UnmarshalJSON(b []byte) (err error) { + d.Duration, err = time.ParseDuration(strings.Trim(string(b), `"`)) + return +} + +func (d *duration) MarshalJSON() (b []byte, err error) { + return []byte(fmt.Sprintf(`"%s"`, d.String())), nil +} + type SendMessageBody struct { Body string } // SendMessageOptions holds a set of options to be passed to SendMessage type SendMessageOptions struct { - Channel chat1.ChatChannel `json:"channel,omitempty"` - ConversationID chat1.ConvIDStr `json:"conversation_id,omitempty"` - Message SendMessageBody `json:",omitempty"` - Filename string `json:"filename,omitempty"` - Title string `json:"title,omitempty"` - MessageID chat1.MessageID `json:"message_id,omitempty"` - ConfirmLumenSend bool `json:"confirm_lumen_send"` - ReplyTo *chat1.MessageID `json:"reply_to,omitempty"` + Channel chat1.ChatChannel `json:"channel,omitempty"` + ConversationID chat1.ConvIDStr `json:"conversation_id,omitempty"` + Message SendMessageBody `json:",omitempty"` + Filename string `json:"filename,omitempty"` + Title string `json:"title,omitempty"` + MessageID chat1.MessageID `json:"message_id,omitempty"` + ConfirmLumenSend bool `json:"confirm_lumen_send"` + ReplyTo *chat1.MessageID `json:"reply_to,omitempty"` + ExplodingLifetime duration `json:"exploding_lifetime,omitempty"` } type sendMessageParams struct { @@ -367,19 +381,6 @@ type mesg struct { Body string `json:"body"` } -type duration struct { - time.Duration -} - -func (d *duration) UnmarshalJSON(b []byte) (err error) { - d.Duration, err = time.ParseDuration(strings.Trim(string(b), `"`)) - return -} - -func (d *duration) MarshalJSON() (b []byte, err error) { - return []byte(fmt.Sprintf(`"%s"`, d.String())), nil -} - type options struct { Channel *chat1.ChatChannel `json:"channel,omitempty"` MessageID int `json:"message_id,omitempty"`