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>
This commit is contained in:
parent
1f41d9ac17
commit
9e9347ade7
@ -13,6 +13,8 @@ watbot:
|
|||||||
hosts:
|
hosts:
|
||||||
- annoying.example.com
|
- annoying.example.com
|
||||||
channels: # optional, no default
|
channels: # optional, no default
|
||||||
|
join:
|
||||||
|
- crantest # channels without a prefix character will be prefixed with "#"
|
||||||
permitted:
|
permitted:
|
||||||
- '#lucy'
|
- '#lucy'
|
||||||
|
|
||||||
|
2
main.go
2
main.go
@ -28,6 +28,7 @@ type watConfig struct {
|
|||||||
Hosts []string `yaml:"hosts"`
|
Hosts []string `yaml:"hosts"`
|
||||||
} `yaml:"admins"`
|
} `yaml:"admins"`
|
||||||
Channels struct {
|
Channels struct {
|
||||||
|
Join []string `yaml:"join"`
|
||||||
Permitted []string `yaml:"permitted"`
|
Permitted []string `yaml:"permitted"`
|
||||||
} `yaml:"channels"`
|
} `yaml:"channels"`
|
||||||
Ignores struct {
|
Ignores struct {
|
||||||
@ -94,6 +95,7 @@ func main() {
|
|||||||
Name: config.Name,
|
Name: config.Name,
|
||||||
}
|
}
|
||||||
watConfig := wat.WatConfig{
|
watConfig := wat.WatConfig{
|
||||||
|
AutoJoinChannels: config.Channels.Join,
|
||||||
PermittedChannels: config.Channels.Permitted,
|
PermittedChannels: config.Channels.Permitted,
|
||||||
IgnoredHosts: config.Ignores.Hosts,
|
IgnoredHosts: config.Ignores.Hosts,
|
||||||
AdminHosts: config.Admins.Hosts,
|
AdminHosts: config.Admins.Hosts,
|
||||||
|
15
wat/bot.go
15
wat/bot.go
@ -20,6 +20,7 @@ type WatBot struct {
|
|||||||
type WatConfig struct {
|
type WatConfig struct {
|
||||||
AdminHosts []string
|
AdminHosts []string
|
||||||
IgnoredHosts []string
|
IgnoredHosts []string
|
||||||
|
AutoJoinChannels []string
|
||||||
PermittedChannels []string
|
PermittedChannels []string
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -36,12 +37,24 @@ func CleanNick(nick string) string {
|
|||||||
return string(nick[0]) + "\u200c" + nick[1:]
|
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) {
|
func (w *WatBot) HandleIrcMsg(c *irc.Client, m *irc.Message) {
|
||||||
switch cmd := m.Command; cmd {
|
switch cmd := m.Command; cmd {
|
||||||
case "PING":
|
case "PING":
|
||||||
w.write("PONG", m.Params[0])
|
w.write("PONG", m.Params[0])
|
||||||
case "PRIVMSG":
|
case "PRIVMSG":
|
||||||
w.Msg(m)
|
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, "") {
|
// if !strings.Contains(m.Prefix.Host, "") {
|
||||||
// return false
|
// return false
|
||||||
// }
|
// }
|
||||||
if !w.Allowed(m.Params[0], w.c.PermittedChannels) {
|
if !w.Allowed(PrefixChannel(m.Params[0]), w.c.PermittedChannels) {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
return true
|
return true
|
||||||
|
Loading…
Reference in New Issue
Block a user