Changeset 263 in code for trunk/service.go


Ignore:
Timestamp:
Apr 16, 2020, 3:38:47 PM (5 years ago)
Author:
delthas
Message:

Add support for custom network on-connect commands

Some servers use custom IRC bots with custom commands for registering to
specific services after connection.

This adds support for setting custom raw IRC messages, that will be
sent after registering to a network.

It also adds support for a custom flag.Value type for string
slice flags (flags taking several string values).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/service.go

    r252 r263  
    105105                        children: serviceCommandSet{
    106106                                "create": {
    107                                         usage:  "-addr <addr> [-name name] [-username username] [-pass pass] [-realname realname] [-nick nick]",
     107                                        usage:  "-addr <addr> [-name name] [-username username] [-pass pass] [-realname realname] [-nick nick] [[-connect-command command] ...]",
    108108                                        desc:   "add a new network",
    109109                                        handle: handleServiceCreateNetwork,
     
    175175}
    176176
     177type stringSliceVar []string
     178
     179func (v *stringSliceVar) String() string {
     180        return fmt.Sprint([]string(*v))
     181}
     182
     183func (v *stringSliceVar) Set(s string) error {
     184        *v = append(*v, s)
     185        return nil
     186}
     187
    177188func handleServiceCreateNetwork(dc *downstreamConn, params []string) error {
    178189        fs := newFlagSet()
     
    183194        realname := fs.String("realname", "", "")
    184195        nick := fs.String("nick", "", "")
     196        var connectCommands stringSliceVar
     197        fs.Var(&connectCommands, "connect-command", "")
    185198
    186199        if err := fs.Parse(params); err != nil {
     
    191204        }
    192205
     206        for _, command := range connectCommands {
     207                _, err := irc.ParseMessage(command)
     208                if err != nil {
     209                        return fmt.Errorf("flag -connect-command must be a valid raw irc command string: %q: %v", command, err)
     210                }
     211        }
     212
    193213        if *nick == "" {
    194214                *nick = dc.nick
     
    197217        var err error
    198218        network, err := dc.user.createNetwork(&Network{
    199                 Addr:     *addr,
    200                 Name:     *name,
    201                 Username: *username,
    202                 Pass:     *pass,
    203                 Realname: *realname,
    204                 Nick:     *nick,
     219                Addr:            *addr,
     220                Name:            *name,
     221                Username:        *username,
     222                Pass:            *pass,
     223                Realname:        *realname,
     224                Nick:            *nick,
     225                ConnectCommands: connectCommands,
    205226        })
    206227        if err != nil {
Note: See TracChangeset for help on using the changeset viewer.