commit 7a9fe74
delthas
·
2022-05-10 09:21:33 +0000 UTC
parent d525e50
/mode: enable getting the channel modes without parameters
2 files changed,
+23,
-21
+18,
-20
1@@ -17,6 +17,8 @@ var (
2 errOffline = fmt.Errorf("you are disconnected from the server, retry later")
3 )
4
5+const maxArgsInfinite = -1
6+
7 type command struct {
8 AllowHome bool
9 MinArgs int
10@@ -77,9 +79,8 @@ func init() {
11 },
12 "MODE": {
13 AllowHome: true,
14- MinArgs: 1,
15- MaxArgs: 5, // <channel> <flags> <limit> <user> <ban mask>
16- Usage: "[<nick/channel>] <flags> [args]",
17+ MaxArgs: maxArgsInfinite,
18+ Usage: "[<nick/channel>] [<flags>] [args]",
19 Desc: "change channel or user modes",
20 Handle: commandDoMode,
21 },
22@@ -382,28 +383,23 @@ func commandDoNick(app *App, args []string) (err error) {
23 }
24
25 func commandDoMode(app *App, args []string) (err error) {
26- hasModePrefix := strings.HasPrefix(args[0], "+") || strings.HasPrefix(args[0], "-")
27- hasChanPrefix := strings.HasPrefix(args[0], "#")
28-
29- if !hasModePrefix && !hasChanPrefix {
30- return errors.New("invalid argument")
31+ _, target := app.win.CurrentBuffer()
32+ if len(args) > 0 && !strings.HasPrefix(args[0], "+") && !strings.HasPrefix(args[0], "-") {
33+ target = args[0]
34+ args = args[1:]
35 }
36-
37- if hasModePrefix {
38- // if we do eg /MODE +P, automatically insert the current channel: /MODE #<current-chan> +P
39- _, channel := app.win.CurrentBuffer()
40- args = append([]string{channel}, args...)
41+ flags := ""
42+ if len(args) > 0 {
43+ flags = args[0]
44+ args = args[1:]
45 }
46-
47- channel := args[0]
48- flags := args[1]
49- modeArgs := args[2:]
50+ modeArgs := args
51
52 s := app.CurrentSession()
53 if s == nil {
54 return errOffline
55 }
56- s.ChangeMode(channel, flags, modeArgs)
57+ s.ChangeMode(target, flags, modeArgs)
58 return nil
59 }
60
61@@ -613,7 +609,9 @@ func fieldsN(s string, n int) []string {
62 if n == 1 {
63 return []string{s}
64 }
65- n--
66+ if n == maxArgsInfinite {
67+ n--
68+ }
69 // Start of the ASCII fast path.
70 var a []string
71 na := 0
72@@ -637,7 +635,7 @@ func fieldsN(s string, n int) []string {
73 i++
74 }
75 fieldStart = i
76- if n <= na {
77+ if n != maxArgsInfinite && n <= na {
78 a = append(a, s[fieldStart:])
79 return a
80 }
+5,
-1
1@@ -359,7 +359,11 @@ func (s *Session) ChangeNick(nick string) {
2 }
3
4 func (s *Session) ChangeMode(channel, flags string, args []string) {
5- args = append([]string{channel, flags}, args...)
6+ if flags != "" {
7+ args = append([]string{channel, flags}, args...)
8+ } else {
9+ args = append([]string{channel}, args...)
10+ }
11 s.out <- NewMessage("MODE", args...)
12 }
13