120 lines
2.6 KiB
Go
120 lines
2.6 KiB
Go
|
package irc
|
||
|
|
||
|
import "sync"
|
||
|
|
||
|
// UserMode - RFC 1459 4.2.3.2 and RFC 2812 3.1.5
|
||
|
type UserMode rune
|
||
|
|
||
|
const (
|
||
|
UserModeAway UserMode = 'a'
|
||
|
UserModeInvisible UserMode = 'i'
|
||
|
UserModeWallOps UserMode = 'w'
|
||
|
UserModeRestricted UserMode = 'r'
|
||
|
UserModeOperator UserMode = 'o'
|
||
|
UserModeLocalOperator UserMode = 'O'
|
||
|
UserModeServerNotice UserMode = 's' //obsolete
|
||
|
)
|
||
|
|
||
|
var UserModes = map[UserMode]interface{}{
|
||
|
UserModeAway: nil,
|
||
|
UserModeInvisible: nil,
|
||
|
UserModeWallOps: nil,
|
||
|
UserModeRestricted: nil,
|
||
|
UserModeOperator: nil,
|
||
|
UserModeLocalOperator: nil,
|
||
|
UserModeServerNotice: nil,
|
||
|
}
|
||
|
|
||
|
type UserModeSet struct {
|
||
|
userModes map[UserMode]interface{}
|
||
|
mutex sync.Mutex
|
||
|
}
|
||
|
|
||
|
func NewUserModeSet() UserModeSet {
|
||
|
u := UserModeSet{}
|
||
|
u.userModes = map[UserMode]interface{}{}
|
||
|
return u
|
||
|
}
|
||
|
|
||
|
func (u *UserModeSet) AddMode(mode UserMode) {
|
||
|
u.mutex.Lock()
|
||
|
defer u.mutex.Unlock()
|
||
|
u.userModes[mode] = nil
|
||
|
|
||
|
}
|
||
|
|
||
|
func (u *UserModeSet) RemoveMode(mode UserMode) {
|
||
|
u.mutex.Lock()
|
||
|
defer u.mutex.Unlock()
|
||
|
delete(u.userModes, mode)
|
||
|
|
||
|
}
|
||
|
|
||
|
func (u *UserModeSet) String() string {
|
||
|
s := ""
|
||
|
for m, _ := range u.userModes {
|
||
|
s += string(m)
|
||
|
}
|
||
|
|
||
|
return s
|
||
|
}
|
||
|
|
||
|
// ModeModifier - RFC 1459 4.2.3 and RFC 2812 3.1.5
|
||
|
type ModeModifier rune
|
||
|
|
||
|
const (
|
||
|
ModeModifierAdd ModeModifier = '+'
|
||
|
ModeModifierRemove ModeModifier = '-'
|
||
|
)
|
||
|
|
||
|
// ChannelMode - RFC 1459 4.2.3.1 and RFC 2812 3.2.3 and RFC 2811 4
|
||
|
type ChannelMode rune
|
||
|
|
||
|
const (
|
||
|
ChannelModeCreator ChannelMode = 'O'
|
||
|
ChannelModeOperator ChannelMode = 'o'
|
||
|
ChannelModeVoice ChannelMode = 'v'
|
||
|
|
||
|
ChannelModeAnonymous ChannelMode = 'a'
|
||
|
ChannelModeInviteOnly ChannelMode = 'i'
|
||
|
ChannelModeModerated ChannelMode = 'm'
|
||
|
ChannelModeNoOutsideMessages ChannelMode = 'n'
|
||
|
ChannelModeQuiet ChannelMode = 'q'
|
||
|
ChannelModePrivate ChannelMode = 'p'
|
||
|
ChannelModeSecret ChannelMode = 's'
|
||
|
ChannelModeReOp ChannelMode = 'r'
|
||
|
ChannelModeTopic ChannelMode = 't'
|
||
|
|
||
|
ChannelModeKey ChannelMode = 'k'
|
||
|
ChannelModeLimit ChannelMode = 'l'
|
||
|
|
||
|
ChannelModeBan ChannelMode = 'b'
|
||
|
ChannelModeExceptionMask ChannelMode = 'e'
|
||
|
ChannelModeInvitationMask ChannelMode = 'I'
|
||
|
)
|
||
|
|
||
|
type ChannelModeSet struct {
|
||
|
Modes map[ChannelMode]interface{}
|
||
|
mutex sync.Mutex
|
||
|
}
|
||
|
|
||
|
func NewChannelModeSet() ChannelModeSet {
|
||
|
c := ChannelModeSet{}
|
||
|
c.Modes = map[ChannelMode]interface{}{}
|
||
|
return c
|
||
|
}
|
||
|
|
||
|
func (c *ChannelModeSet) AddMode(mode ChannelMode) {
|
||
|
c.mutex.Lock()
|
||
|
defer c.mutex.Unlock()
|
||
|
c.Modes[mode] = nil
|
||
|
|
||
|
}
|
||
|
|
||
|
func (c *ChannelModeSet) RemoveMode(mode ChannelMode) {
|
||
|
c.mutex.Lock()
|
||
|
defer c.mutex.Unlock()
|
||
|
delete(c.Modes, mode)
|
||
|
|
||
|
}
|