commit cdab4b7
Alexey Yerin
·
2021-05-18 18:25:17 +0000 UTC
parent a0e0d6c
Add /mode command
3 files changed,
+41,
-0
+17,
-0
1@@ -72,6 +72,14 @@ func init() {
2 Desc: "change your nickname",
3 Handle: commandDoNick,
4 },
5+ "MODE": {
6+ AllowHome: true,
7+ MinArgs: 2,
8+ MaxArgs: 5, // <channel> <flags> <limit> <user> <ban mask>
9+ Usage: "<nick/channel> <flags> [args]",
10+ Desc: "change channel or user modes",
11+ Handle: commandDoMode,
12+ },
13 "PART": {
14 AllowHome: true,
15 MaxArgs: 2,
16@@ -267,6 +275,15 @@ func commandDoNick(app *App, buffer string, args []string) (err error) {
17 return
18 }
19
20+func commandDoMode(app *App, buffer string, args []string) (err error) {
21+ channel := args[0]
22+ flags := args[1]
23+ mode_args := args[2:]
24+
25+ app.s.ChangeMode(channel, flags, mode_args)
26+ return
27+}
28+
29 func commandDoPart(app *App, buffer string, args []string) (err error) {
30 channel := buffer
31 reason := ""
+3,
-0
1@@ -146,6 +146,9 @@ _name_ is matched case-insensitively. It can be one of the following:
2 *NICK* <nickname>
3 Change your nickname.
4
5+*MODE* <nick/channel> <flags> [args]
6+ Change channel or user modes.
7+
8 # SEE ALSO
9
10 *senpai*(5)
+21,
-0
1@@ -91,6 +91,11 @@ type (
2 actionChangeNick struct {
3 Nick string
4 }
5+ actionChangeMode struct {
6+ Channel string
7+ Flags string
8+ Args []string
9+ }
10
11 actionJoin struct {
12 Channel string
13@@ -437,6 +442,20 @@ func (s *Session) changeNick(act actionChangeNick) (err error) {
14 return
15 }
16
17+func (s *Session) ChangeMode(channel string, flags string, args []string) {
18+ s.acts <- actionChangeMode{channel, flags, args}
19+}
20+
21+func (s *Session) changeMode(act actionChangeMode) (err error) {
22+ if strings.IndexAny(act.Channel, s.chantypes) == 0 {
23+ err = s.send("MODE %s %s %s\r\n",
24+ act.Channel, act.Flags, strings.Join(act.Args, " "))
25+ } else {
26+ err = s.send("MODE %s %s\r\n", act.Channel, act.Flags)
27+ }
28+ return
29+}
30+
31 func (s *Session) PrivMsg(target, content string) {
32 s.acts <- actionPrivMsg{target, content}
33 }
34@@ -534,6 +553,8 @@ func (s *Session) run() {
35 err = s.sendRaw(act)
36 case actionChangeNick:
37 err = s.changeNick(act)
38+ case actionChangeMode:
39+ err = s.changeMode(act)
40 case actionJoin:
41 err = s.join(act)
42 case actionPart: