diff options
author | Alexey Yerin <yyp@disroot.org> | 2021-05-18 21:25:17 +0300 |
---|---|---|
committer | Hubert Hirtz <hubert@hirtz.pm> | 2021-05-18 21:26:23 +0200 |
commit | cdab4b7448e8425853beaee5087c51da5040c8cb (patch) | |
tree | a79e6a1614efc443f9df0c9980624d1b474986dc | |
parent | Add /nick (diff) |
Add /mode command
Diffstat (limited to '')
-rw-r--r-- | commands.go | 17 | ||||
-rw-r--r-- | doc/senpai.1.scd | 3 | ||||
-rw-r--r-- | irc/states.go | 21 |
3 files changed, 41 insertions, 0 deletions
diff --git a/commands.go b/commands.go index 9bf2f13..ee4274c 100644 --- a/commands.go +++ b/commands.go @@ -72,6 +72,14 @@ func init() { Desc: "change your nickname", Handle: commandDoNick, }, + "MODE": { + AllowHome: true, + MinArgs: 2, + MaxArgs: 5, // <channel> <flags> <limit> <user> <ban mask> + Usage: "<nick/channel> <flags> [args]", + Desc: "change channel or user modes", + Handle: commandDoMode, + }, "PART": { AllowHome: true, MaxArgs: 2, @@ -267,6 +275,15 @@ func commandDoNick(app *App, buffer string, args []string) (err error) { return } +func commandDoMode(app *App, buffer string, args []string) (err error) { + channel := args[0] + flags := args[1] + mode_args := args[2:] + + app.s.ChangeMode(channel, flags, mode_args) + return +} + func commandDoPart(app *App, buffer string, args []string) (err error) { channel := buffer reason := "" diff --git a/doc/senpai.1.scd b/doc/senpai.1.scd index c1d69c0..d3781e9 100644 --- a/doc/senpai.1.scd +++ b/doc/senpai.1.scd @@ -146,6 +146,9 @@ _name_ is matched case-insensitively. It can be one of the following: *NICK* <nickname> Change your nickname. +*MODE* <nick/channel> <flags> [args] + Change channel or user modes. + # SEE ALSO *senpai*(5) diff --git a/irc/states.go b/irc/states.go index d1ead27..b2a129a 100644 --- a/irc/states.go +++ b/irc/states.go @@ -91,6 +91,11 @@ type ( actionChangeNick struct { Nick string } + actionChangeMode struct { + Channel string + Flags string + Args []string + } actionJoin struct { Channel string @@ -437,6 +442,20 @@ func (s *Session) changeNick(act actionChangeNick) (err error) { return } +func (s *Session) ChangeMode(channel string, flags string, args []string) { + s.acts <- actionChangeMode{channel, flags, args} +} + +func (s *Session) changeMode(act actionChangeMode) (err error) { + if strings.IndexAny(act.Channel, s.chantypes) == 0 { + err = s.send("MODE %s %s %s\r\n", + act.Channel, act.Flags, strings.Join(act.Args, " ")) + } else { + err = s.send("MODE %s %s\r\n", act.Channel, act.Flags) + } + return +} + func (s *Session) PrivMsg(target, content string) { s.acts <- actionPrivMsg{target, content} } @@ -534,6 +553,8 @@ func (s *Session) run() { err = s.sendRaw(act) case actionChangeNick: err = s.changeNick(act) + case actionChangeMode: + err = s.changeMode(act) case actionJoin: err = s.join(act) case actionPart: |