diff options
author | Georg Pfuetzenreuter | 2024-09-21 18:40:29 +0200 |
---|---|---|
committer | Georg Pfuetzenreuter | 2024-09-28 19:33:18 +0200 |
commit | 0a90b6e483bcf6d57030cc7f26f2a3b1a819b37e (patch) | |
tree | 3ba1171b3795f90ecabea7d217b56643dff2b3b9 | |
parent | cc322e87e62fa19dabfbddd937da477feb9f2516 (diff) | |
download | watbot-0a90b6e483bcf6d57030cc7f26f2a3b1a819b37e.tar.gz watbot-0a90b6e483bcf6d57030cc7f26f2a3b1a819b37e.tar.bz2 watbot-0a90b6e483bcf6d57030cc7f26f2a3b1a819b37e.zip |
Implement automatic channel joining
Avoid the need for an administrator to join the bot to channels by
implementing a configuration option allowing the passing of channels
the bot should always join to by itself upon startup.
Signed-off-by: Georg Pfuetzenreuter <mail@georg-pfuetzenreuter.net>
-rw-r--r-- | config.example.yaml | 2 | ||||
-rw-r--r-- | main.go | 2 | ||||
-rw-r--r-- | wat/bot.go | 15 |
3 files changed, 18 insertions, 1 deletions
diff --git a/config.example.yaml b/config.example.yaml index ce0a6e3..5d3fbac 100644 --- a/config.example.yaml +++ b/config.example.yaml @@ -13,6 +13,8 @@ watbot: hosts: - annoying.example.com channels: # optional, no default + join: + - crantest # channels without a prefix character will be prefixed with "#" permitted: - '#lucy' @@ -28,6 +28,7 @@ type watConfig struct { Hosts []string `yaml:"hosts"` } `yaml:"admins"` Channels struct { + Join []string `yaml:"join"` Permitted []string `yaml:"permitted"` } `yaml:"channels"` Ignores struct { @@ -94,6 +95,7 @@ func main() { Name: config.Name, } watConfig := wat.WatConfig{ + AutoJoinChannels: config.Channels.Join, PermittedChannels: config.Channels.Permitted, IgnoredHosts: config.Ignores.Hosts, AdminHosts: config.Admins.Hosts, @@ -20,6 +20,7 @@ type WatBot struct { type WatConfig struct { AdminHosts []string IgnoredHosts []string + AutoJoinChannels []string PermittedChannels []string } @@ -36,12 +37,24 @@ func CleanNick(nick string) string { return string(nick[0]) + "\u200c" + nick[1:] } +func PrefixChannel(channel string) string { + // there could theoretically be other channel prefixes .. + if channel[0] != '#' && channel[0] != '!' { + channel = "#" + channel + } + return channel +} + func (w *WatBot) HandleIrcMsg(c *irc.Client, m *irc.Message) { switch cmd := m.Command; cmd { case "PING": w.write("PONG", m.Params[0]) case "PRIVMSG": w.Msg(m) + case "001": + for _, channel := range w.c.AutoJoinChannels { + w.write("JOIN", PrefixChannel(channel)) + } } } @@ -68,7 +81,7 @@ func (w *WatBot) CanRespond(m *irc.Message) bool { // if !strings.Contains(m.Prefix.Host, "") { // return false // } - if !w.Allowed(m.Params[0], w.c.PermittedChannels) { + if !w.Allowed(PrefixChannel(m.Params[0]), w.c.PermittedChannels) { return false } return true |