1
0
Fork 0
forked from External/ergo

make default channel modes configurable

This commit is contained in:
Shivaram Lingamneni 2017-09-06 17:34:38 -04:00
parent a50e68af4d
commit 333afe1062
5 changed files with 32 additions and 1 deletions

View file

@ -149,6 +149,7 @@ var (
supportedChannelModesString = SupportedChannelModes.String()
// DefaultChannelModes are enabled on brand new channels when they're created.
// this can be overridden in the `channels` config, with the `default-modes` key
DefaultChannelModes = Modes{
NoOutside, OpOnlyTopic,
}
@ -385,6 +386,23 @@ func umodeHandler(server *Server, client *Client, msg ircmsg.IrcMessage) bool {
return false
}
// ParseDefaultChannelModes parses the `default-modes` line of the config
func ParseDefaultChannelModes(config *Config) Modes {
if config.Channels.DefaultModes == nil {
// not present in config, fall back to compile-time default
return DefaultChannelModes
}
modeChangeStrings := strings.Split(strings.TrimSpace(*config.Channels.DefaultModes), " ")
modeChanges, _ := ParseChannelModeChanges(modeChangeStrings...)
defaultChannelModes := make(Modes, 0)
for _, modeChange := range modeChanges {
if modeChange.op == Add {
defaultChannelModes = append(defaultChannelModes, modeChange.mode)
}
}
return defaultChannelModes
}
// ParseChannelModeChanges returns the valid changes, and the list of unknown chars.
func ParseChannelModeChanges(params ...string) (ModeChanges, map[rune]bool) {
changes := make(ModeChanges, 0)
@ -392,6 +410,9 @@ func ParseChannelModeChanges(params ...string) (ModeChanges, map[rune]bool) {
if 0 < len(params) {
modeArg := params[0]
if len(modeArg) == 0 {
return changes, unknown
}
op := ModeOp(modeArg[0])
if (op == Add) || (op == Remove) {
modeArg = modeArg[1:]