first pass on feedback command!
This commit is contained in:
@ -21,7 +21,9 @@ This package requires the keybase binary installed on your system, and works on
|
||||
#### Running:
|
||||
```
|
||||
-debug
|
||||
enables command debugging.
|
||||
enables command debugging to stdout
|
||||
-feedback-convid string
|
||||
sets the keybase chat1.ConvIDStr to send feedback to.
|
||||
-log-convid string
|
||||
sets the keybase chat1.ConvIDStr to log debugging to keybase chat.
|
||||
```
|
||||
@ -45,6 +47,7 @@ Required by keybase: (Must set all of these)
|
||||
Required by this package: (Set the values you feel like, if you don't set them they won't be used)
|
||||
- `BOT_DEBUG=true`
|
||||
- `BOT_LOG_CONVID=<your keybase conversation id>`
|
||||
- `BOT_FEEDBACK_CONVID=<your keybase conversation id>`
|
||||
|
||||
#### Example:
|
||||
`docker run --name myJitsi --rm -d -e KEYBASE_USERNAME=FOO -e KEYBASE_PAPERKEY="bar baz ..." -e KEYBASE_SERVICE=1 -e BOT_DEBUG=true haukeness/keybase-jitsi-bot`
|
||||
|
||||
11
args.go
11
args.go
@ -18,6 +18,8 @@ func (b *bot) parseArgs(args []string) error {
|
||||
cliConfig := botConfig{}
|
||||
flags.BoolVar(&cliConfig.Debug, "debug", false, "enables command debugging to stdout")
|
||||
flags.StringVar(&cliConfig.LogConvIDStr, "log-convid", "", "sets the keybase chat1.ConvIDStr to log debugging to keybase chat.")
|
||||
flags.StringVar(&cliConfig.FeedbackConvIDStr, "feedback-convid", "", "sets the keybase chat1.ConvIDStr to send feedback to.")
|
||||
flags.StringVar(&cliConfig.FeedbackTeamAdvert, "feedback-team-advert", "", "sets the keybase team/channel to advertise feedback. @team#channel")
|
||||
if err := flags.Parse(args[1:]); err != nil {
|
||||
return err
|
||||
}
|
||||
@ -30,6 +32,12 @@ func (b *bot) parseArgs(args []string) error {
|
||||
if cliConfig.LogConvIDStr != "" {
|
||||
b.config.LogConvIDStr = cliConfig.LogConvIDStr
|
||||
}
|
||||
if cliConfig.FeedbackConvIDStr != "" {
|
||||
b.config.FeedbackConvIDStr = cliConfig.FeedbackConvIDStr
|
||||
}
|
||||
if cliConfig.FeedbackTeamAdvert != "" {
|
||||
b.config.FeedbackTeamAdvert = cliConfig.FeedbackTeamAdvert
|
||||
}
|
||||
}
|
||||
|
||||
// then print the running options
|
||||
@ -37,6 +45,9 @@ func (b *bot) parseArgs(args []string) error {
|
||||
if b.config.LogConvIDStr != "" {
|
||||
b.debug("Logging to conversation %s", b.config.LogConvIDStr)
|
||||
}
|
||||
if b.config.FeedbackConvIDStr != "" {
|
||||
b.debug("Feedback enabled to %s and advertising %s", b.config.FeedbackConvIDStr, b.config.FeedbackTeamAdvert)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
16
commands.go
16
commands.go
@ -19,3 +19,19 @@ func (b *bot) setupMeeting(convid chat1.ConvIDStr, sender string, words []string
|
||||
message := fmt.Sprintf("@%s here's your meeting: %s", sender, meeting.getURL())
|
||||
b.k.SendMessageByConvID(convid, message)
|
||||
}
|
||||
|
||||
func (b *bot) sendFeedback(convid chat1.ConvIDStr, mesgID chat1.MessageID, sender string, message string) {
|
||||
b.debug("feedback recieved in %s", convid)
|
||||
if b.config.FeedbackConvIDStr != "" {
|
||||
fcID := chat1.ConvIDStr(b.config.FeedbackConvIDStr)
|
||||
if _, err := b.k.SendMessageByConvID(fcID, "Feedback from @%s:\n```%s```", sender, message); err != nil {
|
||||
b.k.ReplyByConvID(convid, mesgID, "I'm sorry, I was unable to send your feedback because my benevolent overlords have not set a destination for feedback. :sad:")
|
||||
log.Printf("Unable to send feedback: %s", err)
|
||||
} else {
|
||||
b.k.ReplyByConvID(convid, mesgID, "Thanks! Your feedback has been sent to my human overlords!")
|
||||
b.debug("feedback sent")
|
||||
}
|
||||
} else {
|
||||
b.debug("feedback not enabled. set --feedback-convid or BOT_FEEDBACK_CONVID")
|
||||
}
|
||||
}
|
||||
|
||||
@ -54,6 +54,8 @@ func (b *bot) chatHandler(m chat1.MsgSummary) {
|
||||
switch words[1] {
|
||||
case "meet":
|
||||
b.setupMeeting(m.ConvID, m.Sender.Username, words, m.Channel.MembersType)
|
||||
case "feedback":
|
||||
b.sendFeedback(m.ConvID, m.Id, m.Sender.Username, m.Content.Text.Body)
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -63,10 +65,16 @@ func (b *bot) chatHandler(m chat1.MsgSummary) {
|
||||
words := strings.Fields(m.Content.Text.Body)
|
||||
// strip the ! from the first word, and lowercase to derive the command
|
||||
thisCommand := strings.ToLower(strings.Replace(words[0], "!", "", 1))
|
||||
maybeSubCommand := strings.ToLower(words[1])
|
||||
// decide if this is askind for extended commands
|
||||
switch thisCommand {
|
||||
case "jitsi":
|
||||
switch maybeSubCommand {
|
||||
case "feedback":
|
||||
b.sendFeedback(m.ConvID, m.Id, m.Sender.Username, m.Content.Text.Body)
|
||||
default:
|
||||
b.setupMeeting(m.ConvID, m.Sender.Username, words, m.Channel.MembersType)
|
||||
}
|
||||
default:
|
||||
return
|
||||
}
|
||||
|
||||
8
main.go
8
main.go
@ -26,6 +26,8 @@ type bot struct {
|
||||
type botConfig struct {
|
||||
Debug bool `env:"BOT_DEBUG" envDefault:"false"`
|
||||
LogConvIDStr string `env:"BOT_LOG_CONVID" envDefault:""`
|
||||
FeedbackConvIDStr string `env:"BOT_FEEDBACK_CONVID" envDefault:""`
|
||||
FeedbackTeamAdvert string `env:"BOT_FEEDBACK_TEAM_ADVERT" envDefault:""`
|
||||
}
|
||||
|
||||
// hold reply information when needed
|
||||
@ -81,6 +83,12 @@ func (b *bot) registerCommands() {
|
||||
Description: "Starts a meet.jit.si meeting",
|
||||
Usage: "",
|
||||
},
|
||||
{
|
||||
Name: "jitsi feedback",
|
||||
Description: "Tell us how we're doing!",
|
||||
Usage: "",
|
||||
ExtendedDescription: getFeedbackExtendedDescription(b.config),
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
18
utils.go
18
utils.go
@ -2,6 +2,9 @@ package main
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
|
||||
"samhofi.us/x/keybase/types/chat1"
|
||||
)
|
||||
|
||||
// this JSON pretty prints errors and debug
|
||||
@ -9,3 +12,18 @@ func p(b interface{}) string {
|
||||
s, _ := json.MarshalIndent(b, "", " ")
|
||||
return string(s)
|
||||
}
|
||||
|
||||
func getFeedbackExtendedDescription(bc botConfig) *chat1.UserBotExtendedDescription {
|
||||
if bc.FeedbackTeamAdvert != "" {
|
||||
return &chat1.UserBotExtendedDescription{
|
||||
Title: "!jitsi feedback",
|
||||
DesktopBody: fmt.Sprintf("Please note: Your feedback will be public!\nYour feedback will be posted to %s", bc.FeedbackTeamAdvert),
|
||||
MobileBody: fmt.Sprintf("Please note: Your feedback will be public!\nYour feedback will be posted to %s", bc.FeedbackTeamAdvert),
|
||||
}
|
||||
}
|
||||
return &chat1.UserBotExtendedDescription{
|
||||
Title: fmt.Sprintf("!jitsi feedback"),
|
||||
DesktopBody: "Please note: Your feedback will be public!",
|
||||
MobileBody: "Please note: Your feedback will be public!",
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user