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  }