mirror of
https://github.com/jeremyd/ergo.git
synced 2026-07-20 22:38:11 -07:00
Merge pull request #270 from slingamn/amode.1
frontend for persistent account modes in channels
This commit is contained in:
+13
-20
@@ -147,6 +147,12 @@ var (
|
||||
ChannelFounder, ChannelAdmin, ChannelOperator, Halfop,
|
||||
}
|
||||
|
||||
// ChannelUserModes holds the list of all modes that can be applied to a user in a channel,
|
||||
// including Voice, in descending order of precedence
|
||||
ChannelUserModes = Modes{
|
||||
ChannelFounder, ChannelAdmin, ChannelOperator, Halfop, Voice,
|
||||
}
|
||||
|
||||
ChannelModePrefixes = map[Mode]string{
|
||||
ChannelFounder: "~",
|
||||
ChannelAdmin: "&",
|
||||
@@ -176,20 +182,13 @@ func SplitChannelMembershipPrefixes(target string) (prefixes string, name string
|
||||
}
|
||||
|
||||
// GetLowestChannelModePrefix returns the lowest channel prefix mode out of the given prefixes.
|
||||
func GetLowestChannelModePrefix(prefixes string) *Mode {
|
||||
var lowest *Mode
|
||||
|
||||
if strings.Contains(prefixes, "+") {
|
||||
lowest = &Voice
|
||||
} else {
|
||||
for i, mode := range ChannelPrivModes {
|
||||
if strings.Contains(prefixes, ChannelModePrefixes[mode]) {
|
||||
lowest = &ChannelPrivModes[i]
|
||||
}
|
||||
func GetLowestChannelModePrefix(prefixes string) (lowest *Mode) {
|
||||
for i, mode := range ChannelUserModes {
|
||||
if strings.Contains(prefixes, ChannelModePrefixes[mode]) {
|
||||
lowest = &ChannelPrivModes[i]
|
||||
}
|
||||
}
|
||||
|
||||
return lowest
|
||||
return
|
||||
}
|
||||
|
||||
//
|
||||
@@ -304,15 +303,12 @@ func ParseChannelModeChanges(params ...string) (ModeChanges, map[rune]bool) {
|
||||
break
|
||||
}
|
||||
}
|
||||
for _, supportedMode := range ChannelPrivModes {
|
||||
for _, supportedMode := range ChannelUserModes {
|
||||
if rune(supportedMode) == mode {
|
||||
isKnown = true
|
||||
break
|
||||
}
|
||||
}
|
||||
if mode == rune(Voice) {
|
||||
isKnown = true
|
||||
}
|
||||
if !isKnown {
|
||||
unknown[mode] = true
|
||||
continue
|
||||
@@ -405,14 +401,11 @@ func (set *ModeSet) Prefixes(isMultiPrefix bool) (prefixes string) {
|
||||
defer set.RUnlock()
|
||||
|
||||
// add prefixes in order from highest to lowest privs
|
||||
for _, mode := range ChannelPrivModes {
|
||||
for _, mode := range ChannelUserModes {
|
||||
if set.modes[mode] {
|
||||
prefixes += ChannelModePrefixes[mode]
|
||||
}
|
||||
}
|
||||
if set.modes[Voice] {
|
||||
prefixes += ChannelModePrefixes[Voice]
|
||||
}
|
||||
|
||||
if !isMultiPrefix && len(prefixes) > 1 {
|
||||
prefixes = string(prefixes[0])
|
||||
|
||||
@@ -8,6 +8,47 @@ import (
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestParseChannelModeChanges(t *testing.T) {
|
||||
modes, unknown := ParseChannelModeChanges("+h", "wrmsr")
|
||||
if len(unknown) > 0 {
|
||||
t.Errorf("unexpected unknown mode change: %v", unknown)
|
||||
}
|
||||
expected := ModeChange{
|
||||
Op: Add,
|
||||
Mode: Halfop,
|
||||
Arg: "wrmsr",
|
||||
}
|
||||
if len(modes) != 1 || modes[0] != expected {
|
||||
t.Errorf("unexpected mode change: %v", modes)
|
||||
}
|
||||
|
||||
modes, unknown = ParseChannelModeChanges("-v", "shivaram")
|
||||
if len(unknown) > 0 {
|
||||
t.Errorf("unexpected unknown mode change: %v", unknown)
|
||||
}
|
||||
expected = ModeChange{
|
||||
Op: Remove,
|
||||
Mode: Voice,
|
||||
Arg: "shivaram",
|
||||
}
|
||||
if len(modes) != 1 || modes[0] != expected {
|
||||
t.Errorf("unexpected mode change: %v", modes)
|
||||
}
|
||||
|
||||
modes, unknown = ParseChannelModeChanges("+tx")
|
||||
if len(unknown) != 1 || !unknown['x'] {
|
||||
t.Errorf("expected that x is an unknown mode, instead: %v", unknown)
|
||||
}
|
||||
expected = ModeChange{
|
||||
Op: Add,
|
||||
Mode: OpOnlyTopic,
|
||||
Arg: "",
|
||||
}
|
||||
if len(modes) != 1 || modes[0] != expected {
|
||||
t.Errorf("unexpected mode change: %v", modes)
|
||||
}
|
||||
}
|
||||
|
||||
func TestSetMode(t *testing.T) {
|
||||
set := NewModeSet()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user