github.com/keybase/client/go@v0.0.0-20240520164431-4f512a4c85a3/client/cmd_chat_bot_member_settings.go (about) 1 package client 2 3 import ( 4 "os" 5 6 "github.com/keybase/cli" 7 "github.com/keybase/client/go/libcmdline" 8 "github.com/keybase/client/go/libkb" 9 "github.com/keybase/client/go/protocol/chat1" 10 "github.com/keybase/client/go/protocol/keybase1" 11 isatty "github.com/mattn/go-isatty" 12 context "golang.org/x/net/context" 13 ) 14 15 type CmdChatBotMemberSettings struct { 16 libkb.Contextified 17 resolvingRequest chatConversationResolvingRequest 18 username string 19 botSettings *keybase1.TeamBotSettings 20 hasTTY bool 21 } 22 23 func NewCmdChatBotMemberSettingsRunner(g *libkb.GlobalContext) *CmdChatBotMemberSettings { 24 return &CmdChatBotMemberSettings{ 25 Contextified: libkb.NewContextified(g), 26 } 27 } 28 29 func newCmdChatBotMemberSettings(cl *libcmdline.CommandLine, g *libkb.GlobalContext) cli.Command { 30 flags := append(getConversationResolverFlags(), botSettingsFlags...) 31 flags = append(flags, cli.StringFlag{ 32 Name: "u, user", 33 Usage: "username", 34 }) 35 return cli.Command{ 36 Name: "bot-member-settings", 37 Usage: "View or modify a restricted bot's isolation settings.", 38 ArgumentHelp: "[conversation]", 39 Action: func(c *cli.Context) { 40 cl.ChooseCommand(NewCmdChatBotMemberSettingsRunner(g), "bot-member-settings", c) 41 cl.SetNoStandalone() 42 cl.SetLogForward(libcmdline.LogForwardNone) 43 }, 44 Flags: flags, 45 } 46 } 47 48 func (c *CmdChatBotMemberSettings) Run() (err error) { 49 resolver, conversationInfo, err := resolveConversationForBotMember(c.G(), c.resolvingRequest, c.hasTTY) 50 if err != nil { 51 return err 52 } 53 54 if err := ValidateBotSettingsConvs(c.G(), conversationInfo.TlfName, 55 conversationInfo.MembersType, c.botSettings); err != nil { 56 return err 57 } 58 59 var botSettings keybase1.TeamBotSettings 60 if c.botSettings == nil { 61 botSettings, err = resolver.ChatClient.GetBotMemberSettings(context.TODO(), chat1.GetBotMemberSettingsArg{ 62 ConvID: conversationInfo.Id, 63 Username: c.username, 64 }) 65 if err != nil { 66 return err 67 } 68 } else { 69 botSettings = *c.botSettings 70 if err = resolver.ChatClient.SetBotMemberSettings(context.TODO(), chat1.SetBotMemberSettingsArg{ 71 ConvID: conversationInfo.Id, 72 Username: c.username, 73 BotSettings: botSettings, 74 }); err != nil { 75 return err 76 } 77 } 78 if err := renderBotSettings(c.G(), c.username, &conversationInfo.Id, botSettings); err != nil { 79 return err 80 } 81 82 return nil 83 } 84 85 func (c *CmdChatBotMemberSettings) ParseArgv(ctx *cli.Context) (err error) { 86 c.username, err = ParseUser(ctx) 87 if err != nil { 88 return err 89 } 90 91 c.botSettings = ParseBotSettings(ctx) 92 c.hasTTY = isatty.IsTerminal(os.Stdin.Fd()) 93 94 var tlfName string 95 // Get the TLF name from the first position arg 96 if len(ctx.Args()) >= 1 { 97 tlfName = ctx.Args().Get(0) 98 } 99 if c.resolvingRequest, err = parseConversationResolvingRequest(ctx, tlfName); err != nil { 100 return err 101 } 102 return nil 103 } 104 105 func (c *CmdChatBotMemberSettings) GetUsage() libkb.Usage { 106 return libkb.Usage{ 107 Config: true, 108 API: true, 109 } 110 }