Documentation
¶
Index ¶
- Constants
- func SetupDefaultHandlers(ctx context.Context, connection *Connection, eventBus *EventBus, ...)
- type ActionData
- type CapAddedData
- type CapData
- type CapPreEndData
- type CapRemovedData
- type CapabilitiesHandler
- func (ch *CapabilitiesHandler) EndCapabilityNegotiation() error
- func (ch *CapabilitiesHandler) GetActiveCaps() []string
- func (ch *CapabilitiesHandler) HandleCapACK(event *Event)
- func (ch *CapabilitiesHandler) HandleCapDEL(event *Event)
- func (ch *CapabilitiesHandler) HandleCapEnd(*Event)
- func (ch *CapabilitiesHandler) HandleCapEndReady(*Event)
- func (ch *CapabilitiesHandler) HandleCapLS(event *Event)
- func (ch *CapabilitiesHandler) HandleCapNAK(event *Event)
- func (ch *CapabilitiesHandler) HandleCapNEW(event *Event)
- func (ch *CapabilitiesHandler) HandleConnected(*Event)
- func (ch *CapabilitiesHandler) IsCapabilityActive(capability string) bool
- func (ch *CapabilitiesHandler) RequestCapabilities(capabilities []string) error
- func (ch *CapabilitiesHandler) Reset()
- type Channel
- func (c *Channel) AddMode(mode rune, parameter string)
- func (c *Channel) AddUser(user *User)
- func (c *Channel) GetModes() []ChannelMode
- func (c *Channel) GetUser(nick string) *User
- func (c *Channel) GetUserCount() int
- func (c *Channel) GetUsers() map[string]*User
- func (c *Channel) HasMode(mode rune) bool
- func (c *Channel) RemoveMode(mode rune)
- func (c *Channel) RemoveUser(nick string)
- func (c *Channel) RenameUser(oldNick, newNick string)
- func (c *Channel) SetTopic(topic, by string, at time.Time)
- type ChannelMode
- type ConnectedData
- type Connection
- func (c *Connection) Connect() error
- func (c *Connection) Disconnect()
- func (c *Connection) GetConfig() *ConnectionConfig
- func (c *Connection) GetCurrentNick() string
- func (c *Connection) GetISupport() map[string]string
- func (c *Connection) GetISupportValue(key string) string
- func (c *Connection) GetServerName() string
- func (c *Connection) GetState() ConnectionState
- func (c *Connection) IsConnected() bool
- func (c *Connection) IsRegistered() bool
- func (c *Connection) Send(command string, params ...string) error
- func (c *Connection) SendRaw(line string) error
- func (c *Connection) Wait()
- type ConnectionConfig
- func (c *ConnectionConfig) ConnTimeout() time.Duration
- func (c *ConnectionConfig) Host() string
- func (c *ConnectionConfig) Nick() string
- func (c *ConnectionConfig) Password() string
- func (c *ConnectionConfig) PingTimeout() time.Duration
- func (c *ConnectionConfig) Port() int
- func (c *ConnectionConfig) ReadTimeout() time.Duration
- func (c *ConnectionConfig) Realname() string
- func (c *ConnectionConfig) ReconnectDelay() time.Duration
- func (c *ConnectionConfig) SASLPass() string
- func (c *ConnectionConfig) SASLUser() string
- func (c *ConnectionConfig) TLS() bool
- func (c *ConnectionConfig) Username() string
- func (c *ConnectionConfig) WriteTimeout() time.Duration
- type ConnectionState
- type DisconnectedData
- type ErrorData
- type Event
- type EventBus
- type EventHandler
- type EventType
- type IRCError
- type InviteData
- type JoinData
- type KickData
- type Message
- type ModeData
- type NamesCompleteData
- type NickData
- type NoticeData
- type NumericData
- type Option
- func WithConnTimeout(timeout time.Duration) Option
- func WithNick(nick string) Option
- func WithPassword(password string) Option
- func WithPingTimeout(timeout time.Duration) Option
- func WithPort(port int) Option
- func WithReadTimeout(timeout time.Duration) Option
- func WithRealname(realname string) Option
- func WithReconnectDelay(delay time.Duration) Option
- func WithSASL(username, password string) Option
- func WithTLS(tls bool) Option
- func WithUsername(username string) Option
- func WithWriteTimeout(timeout time.Duration) Option
- type Parser
- func (p *Parser) EmitEvent(event *Event)
- func (p *Parser) GetConnection() *Connection
- func (p *Parser) GetCurrentNick() string
- func (p *Parser) GetEventBus() *EventBus
- func (p *Parser) GetISupport() map[string]string
- func (p *Parser) GetISupportValue(key string) string
- func (p *Parser) GetServerName() string
- func (p *Parser) GetState() ConnectionState
- func (p *Parser) Invite(nick, channel string) error
- func (p *Parser) IsConnected() bool
- func (p *Parser) IsRegistered() bool
- func (p *Parser) Join(channel string) error
- func (p *Parser) Kick(channel, nick, reason string) error
- func (p *Parser) List(channels ...string) error
- func (p *Parser) Mode(target, modes string, args ...string) error
- func (p *Parser) Names(channels ...string) error
- func (p *Parser) Nick(nick string) error
- func (p *Parser) Notice(target, message string) error
- func (p *Parser) Part(channel string, reason string) error
- func (p *Parser) Privmsg(target, message string) error
- func (p *Parser) Quit(reason string) error
- func (p *Parser) Send(command string, params ...string) error
- func (p *Parser) SendRaw(line string) error
- func (p *Parser) Start() error
- func (p *Parser) Stop()
- func (p *Parser) Subscribe(eventType EventType, handler EventHandler) int
- func (p *Parser) Topic(channel, topic string) error
- func (p *Parser) UnsubscribeByID(eventType EventType, id int)
- func (p *Parser) Wait()
- func (p *Parser) Who(target string) error
- func (p *Parser) Whois(nick string) error
- type PartData
- type PingData
- type PingHandler
- type PlainMechanism
- type PongData
- type PrivmsgData
- type QuitData
- type RawIncomingData
- type RawOutgoingData
- type RegistrationHandler
- func (rh *RegistrationHandler) GetState() RegistrationState
- func (rh *RegistrationHandler) GetTimeout() time.Duration
- func (rh *RegistrationHandler) HandleConnected(*Event)
- func (rh *RegistrationHandler) HandleNumeric(event *Event)
- func (rh *RegistrationHandler) HandleWelcome(event *Event)
- func (rh *RegistrationHandler) IsActive() bool
- func (rh *RegistrationHandler) IsComplete() bool
- func (rh *RegistrationHandler) IsFailed() bool
- func (rh *RegistrationHandler) SetTimeout(timeout time.Duration)
- func (rh *RegistrationHandler) Start() error
- type RegistrationState
- type SASLData
- type SASLHandler
- func (sh *SASLHandler) Abort() error
- func (sh *SASLHandler) GetAvailableMechanisms() []string
- func (sh *SASLHandler) GetMaxChunkSize() int
- func (sh *SASLHandler) GetMechanism() SASLMechanism
- func (sh *SASLHandler) GetState() SASLState
- func (sh *SASLHandler) GetTimeout() time.Duration
- func (sh *SASLHandler) HandleAuthenticate(event *Event)
- func (sh *SASLHandler) HandleSASLFail(event *Event)
- func (sh *SASLHandler) HandleSASLSuccess(*Event)
- func (sh *SASLHandler) IsActive() bool
- func (sh *SASLHandler) IsAvailable() bool
- func (sh *SASLHandler) IsComplete() bool
- func (sh *SASLHandler) Reset()
- func (sh *SASLHandler) SetMaxChunkSize(size int)
- func (sh *SASLHandler) SetMechanism(mechanism SASLMechanism)
- func (sh *SASLHandler) SetTimeout(timeout time.Duration)
- func (sh *SASLHandler) StartAuthentication() error
- func (sh *SASLHandler) SupportsPlain() bool
- type SASLMechanism
- type SASLState
- type Tags
- type TopicData
- type User
- type UserMode
Constants ¶
View Source
const ( DefaultConnTimeout = 30 * time.Second DefaultReadTimeout = 300 * time.Second // 5 minutes DefaultWriteTimeout = 30 * time.Second DefaultPingTimeout = 60 * time.Second DefaultReconnectDelay = 5 * time.Second WriteFlushInterval = 100 * time.Millisecond ConnectionWorkerCount = 2 )
View Source
const ( DefaultEventChannelBuffer = 100 PanicStackBufferSize = 1024 CTCPDelimiter = '\x01' MinCTCPLength = 2 ServerTimeFormat = "2006-01-02T15:04:05.000Z" ServerTimeTag = "time" )
View Source
const ( NumericWelcome = "001" NumericISupport = "005" NumericSASLSuccess1 = "900" NumericSASLSuccess2 = "903" NumericSASLFail1 = "901" NumericSASLFail2 = "902" NumericSASLFail3 = "904" NumericSASLFail4 = "905" NumericSASLFail5 = "906" NumericSASLFail6 = "907" NumericSASLFail7 = "908" NumericWhoisUser = "311" NumericWhoisServer = "312" NumericWhoisOperator = "313" NumericWhoisIdle = "317" NumericWhoisEnd = "318" NumericWhoisChannels = "319" NumericWhoReply = "352" NumericWhoEnd = "315" NumericListStart = "321" NumericList = "322" NumericListEnd = "323" NumericNamesReply = "353" NumericNamesEnd = "366" NumericTopic = "332" NumericTopicInfo = "333" NumericNickInUse = "433" )
View Source
const ( MaxMessageLength = 512 MaxTagLength = 8192 )
Message parsing constants
View Source
const ( DefaultRegistrationTimeout = 60 * time.Second UserModeVisible = "0" UserServerWildcard = "*" )
Registration constants
View Source
const ( DefaultSASLTimeout = 30 * time.Second DefaultSASLChunkSize = 400 )
SASL constants
View Source
const (
DefaultCapabilityProtocolVersion = "302"
)
View Source
const (
LogTrace = -8
)
Variables ¶
This section is empty.
Functions ¶
func SetupDefaultHandlers ¶
func SetupDefaultHandlers(ctx context.Context, connection *Connection, eventBus *EventBus, config *ConnectionConfig, capabilities map[string]string)
SetupDefaultHandlers sets up the default IRC handlers for a parser
Types ¶
type ActionData ¶
type CapAddedData ¶
type CapAddedData struct {
Capability string
}
type CapPreEndData ¶
type CapRemovedData ¶
type CapRemovedData struct {
Capability string
}
type CapabilitiesHandler ¶
type CapabilitiesHandler struct {
// contains filtered or unexported fields
}
func NewCapabilitiesHandler ¶
func (*CapabilitiesHandler) EndCapabilityNegotiation ¶
func (ch *CapabilitiesHandler) EndCapabilityNegotiation() error
func (*CapabilitiesHandler) GetActiveCaps ¶
func (ch *CapabilitiesHandler) GetActiveCaps() []string
func (*CapabilitiesHandler) HandleCapACK ¶
func (ch *CapabilitiesHandler) HandleCapACK(event *Event)
func (*CapabilitiesHandler) HandleCapDEL ¶
func (ch *CapabilitiesHandler) HandleCapDEL(event *Event)
func (*CapabilitiesHandler) HandleCapEnd ¶
func (ch *CapabilitiesHandler) HandleCapEnd(*Event)
func (*CapabilitiesHandler) HandleCapEndReady ¶
func (ch *CapabilitiesHandler) HandleCapEndReady(*Event)
func (*CapabilitiesHandler) HandleCapLS ¶
func (ch *CapabilitiesHandler) HandleCapLS(event *Event)
func (*CapabilitiesHandler) HandleCapNAK ¶
func (ch *CapabilitiesHandler) HandleCapNAK(event *Event)
func (*CapabilitiesHandler) HandleCapNEW ¶
func (ch *CapabilitiesHandler) HandleCapNEW(event *Event)
func (*CapabilitiesHandler) HandleConnected ¶
func (ch *CapabilitiesHandler) HandleConnected(*Event)
func (*CapabilitiesHandler) IsCapabilityActive ¶
func (ch *CapabilitiesHandler) IsCapabilityActive(capability string) bool
func (*CapabilitiesHandler) RequestCapabilities ¶
func (ch *CapabilitiesHandler) RequestCapabilities(capabilities []string) error
func (*CapabilitiesHandler) Reset ¶
func (ch *CapabilitiesHandler) Reset()
type Channel ¶
type Channel struct {
Name string
Topic string
TopicBy string
TopicAt time.Time
Users map[string]*User
Modes []ChannelMode
// contains filtered or unexported fields
}
Channel represents an IRC channel
func NewChannel ¶
func (*Channel) GetModes ¶
func (c *Channel) GetModes() []ChannelMode
func (*Channel) GetUserCount ¶
func (*Channel) RemoveMode ¶
func (*Channel) RemoveUser ¶
func (*Channel) RenameUser ¶
type ChannelMode ¶
ChannelMode represents a channel mode with its character and parameter
type ConnectedData ¶
type Connection ¶
type Connection struct {
// contains filtered or unexported fields
}
func NewConnection ¶
func NewConnection(ctx context.Context, config *ConnectionConfig, eventBus *EventBus) *Connection
func (*Connection) Connect ¶
func (c *Connection) Connect() error
func (*Connection) Disconnect ¶
func (c *Connection) Disconnect()
func (*Connection) GetConfig ¶
func (c *Connection) GetConfig() *ConnectionConfig
func (*Connection) GetCurrentNick ¶
func (c *Connection) GetCurrentNick() string
func (*Connection) GetISupport ¶
func (c *Connection) GetISupport() map[string]string
func (*Connection) GetISupportValue ¶
func (c *Connection) GetISupportValue(key string) string
func (*Connection) GetServerName ¶
func (c *Connection) GetServerName() string
func (*Connection) GetState ¶
func (c *Connection) GetState() ConnectionState
func (*Connection) IsConnected ¶
func (c *Connection) IsConnected() bool
func (*Connection) IsRegistered ¶
func (c *Connection) IsRegistered() bool
func (*Connection) SendRaw ¶
func (c *Connection) SendRaw(line string) error
func (*Connection) Wait ¶
func (c *Connection) Wait()
type ConnectionConfig ¶
type ConnectionConfig struct {
// contains filtered or unexported fields
}
func NewConnectionConfig ¶
func NewConnectionConfig(host string, options ...Option) *ConnectionConfig
func (*ConnectionConfig) ConnTimeout ¶
func (c *ConnectionConfig) ConnTimeout() time.Duration
func (*ConnectionConfig) Host ¶
func (c *ConnectionConfig) Host() string
func (*ConnectionConfig) Nick ¶
func (c *ConnectionConfig) Nick() string
func (*ConnectionConfig) Password ¶
func (c *ConnectionConfig) Password() string
func (*ConnectionConfig) PingTimeout ¶
func (c *ConnectionConfig) PingTimeout() time.Duration
func (*ConnectionConfig) Port ¶
func (c *ConnectionConfig) Port() int
func (*ConnectionConfig) ReadTimeout ¶
func (c *ConnectionConfig) ReadTimeout() time.Duration
func (*ConnectionConfig) Realname ¶
func (c *ConnectionConfig) Realname() string
func (*ConnectionConfig) ReconnectDelay ¶
func (c *ConnectionConfig) ReconnectDelay() time.Duration
func (*ConnectionConfig) SASLPass ¶
func (c *ConnectionConfig) SASLPass() string
func (*ConnectionConfig) SASLUser ¶
func (c *ConnectionConfig) SASLUser() string
func (*ConnectionConfig) TLS ¶
func (c *ConnectionConfig) TLS() bool
func (*ConnectionConfig) Username ¶
func (c *ConnectionConfig) Username() string
func (*ConnectionConfig) WriteTimeout ¶
func (c *ConnectionConfig) WriteTimeout() time.Duration
type ConnectionState ¶
type ConnectionState int
const ( StateDisconnected ConnectionState = iota StateConnecting StateConnected StateRegistering StateRegistered StateDisconnecting )
func (ConnectionState) String ¶
func (s ConnectionState) String() string
type DisconnectedData ¶
type Event ¶
func CreateEventFromMessage ¶
type EventBus ¶
type EventBus struct {
// contains filtered or unexported fields
}
func NewEventBus ¶
func (*EventBus) CountListeners ¶
func (*EventBus) Subscribe ¶
func (eb *EventBus) Subscribe(eventType EventType, handler EventHandler) int
func (*EventBus) UnsubscribeByID ¶
type EventHandler ¶
type EventHandler func(event *Event)
type EventType ¶
type EventType string
const ( EventConnected EventType = "connected" EventDisconnected EventType = "disconnected" EventMessage EventType = "message" EventPing EventType = "ping" EventPong EventType = "pong" EventError EventType = "error" EventCapLS EventType = "cap_ls" EventCapACK EventType = "cap_ack" EventCapNAK EventType = "cap_nak" EventCapDEL EventType = "cap_del" EventCapNEW EventType = "cap_new" EventCapAdded EventType = "cap_added" EventCapRemoved EventType = "cap_removed" EventCapPreEnd EventType = "cap_pre_end" EventCapEndReady EventType = "cap_end_ready" EventCapEnd EventType = "cap_end" EventSASLAuth EventType = "sasl_auth" EventSASLSuccess EventType = "sasl_success" EventSASLFail EventType = "sasl_fail" EventRegistered EventType = "registered" EventNick EventType = "nick" EventJoin EventType = "join" EventPart EventType = "part" EventQuit EventType = "quit" EventKick EventType = "kick" EventMode EventType = "mode" EventTopic EventType = "topic" EventPrivmsg EventType = "privmsg" EventNotice EventType = "notice" EventInvite EventType = "invite" EventWhois EventType = "whois" EventWho EventType = "who" EventList EventType = "list" EventNames EventType = "names" EventNamesComplete EventType = "names_complete" EventCTCP EventType = "ctcp" EventCTCPReply EventType = "ctcp_reply" EventAction EventType = "action" EventNumeric EventType = "numeric" EventRawIncoming EventType = "raw_incoming" EventRawOutgoing EventType = "raw_outgoing" EventUnknown EventType = "unknown" )
func DetermineEventType ¶
type IRCError ¶
func NewConnectionError ¶
func NewMessageError ¶
func NewRegistrationError ¶
func NewSASLError ¶
type InviteData ¶
type NamesCompleteData ¶
type NamesCompleteData struct {
Channel *Channel // Channel object
}
type NoticeData ¶
type NumericData ¶
type Option ¶
type Option func(*ConnectionConfig)
func WithConnTimeout ¶
func WithPassword ¶
func WithPingTimeout ¶
func WithReadTimeout ¶
func WithRealname ¶
func WithReconnectDelay ¶
func WithUsername ¶
func WithWriteTimeout ¶
type Parser ¶
type Parser struct {
// contains filtered or unexported fields
}
func (*Parser) GetConnection ¶
func (p *Parser) GetConnection() *Connection
func (*Parser) GetCurrentNick ¶
func (*Parser) GetEventBus ¶
func (*Parser) GetISupport ¶
func (*Parser) GetISupportValue ¶
func (*Parser) GetServerName ¶
func (*Parser) GetState ¶
func (p *Parser) GetState() ConnectionState
func (*Parser) IsConnected ¶
func (*Parser) IsRegistered ¶
func (*Parser) Subscribe ¶
func (p *Parser) Subscribe(eventType EventType, handler EventHandler) int
func (*Parser) UnsubscribeByID ¶
type PingHandler ¶
type PingHandler struct {
// contains filtered or unexported fields
}
func NewPingHandler ¶
func NewPingHandler(ctx context.Context, send func(command string, params ...string) error, subscribe func(EventType, EventHandler) int, emit func(event *Event)) *PingHandler
func (*PingHandler) HandlePing ¶
func (h *PingHandler) HandlePing(event *Event)
func (*PingHandler) HandleRaw ¶
func (h *PingHandler) HandleRaw(*Event)
func (*PingHandler) HandleWelcome ¶
func (h *PingHandler) HandleWelcome(*Event)
func (*PingHandler) SendPing ¶
func (h *PingHandler) SendPing()
type PlainMechanism ¶
type PlainMechanism struct {
// contains filtered or unexported fields
}
func NewPlainMechanism ¶
func NewPlainMechanism(username, password string) *PlainMechanism
func (*PlainMechanism) IsComplete ¶
func (pm *PlainMechanism) IsComplete() bool
func (*PlainMechanism) Name ¶
func (pm *PlainMechanism) Name() string
func (*PlainMechanism) Reset ¶
func (pm *PlainMechanism) Reset()
func (*PlainMechanism) Start ¶
func (pm *PlainMechanism) Start() (string, error)
type PrivmsgData ¶
type RawIncomingData ¶
type RawOutgoingData ¶
type RegistrationHandler ¶
type RegistrationHandler struct {
// contains filtered or unexported fields
}
func NewRegistrationHandler ¶
func NewRegistrationHandler(ctx context.Context, config *ConnectionConfig, send func(command string, params ...string) error, subscribe func(EventType, EventHandler) int, unsubscribe func(EventType, int), emit func(event *Event)) *RegistrationHandler
func (*RegistrationHandler) GetState ¶
func (rh *RegistrationHandler) GetState() RegistrationState
func (*RegistrationHandler) GetTimeout ¶
func (rh *RegistrationHandler) GetTimeout() time.Duration
func (*RegistrationHandler) HandleConnected ¶
func (rh *RegistrationHandler) HandleConnected(*Event)
func (*RegistrationHandler) HandleNumeric ¶
func (rh *RegistrationHandler) HandleNumeric(event *Event)
func (*RegistrationHandler) HandleWelcome ¶
func (rh *RegistrationHandler) HandleWelcome(event *Event)
func (*RegistrationHandler) IsActive ¶
func (rh *RegistrationHandler) IsActive() bool
func (*RegistrationHandler) IsComplete ¶
func (rh *RegistrationHandler) IsComplete() bool
func (*RegistrationHandler) IsFailed ¶
func (rh *RegistrationHandler) IsFailed() bool
func (*RegistrationHandler) SetTimeout ¶
func (rh *RegistrationHandler) SetTimeout(timeout time.Duration)
func (*RegistrationHandler) Start ¶
func (rh *RegistrationHandler) Start() error
type RegistrationState ¶
type RegistrationState int
const ( RegStateInactive RegistrationState = iota RegStateStarted RegStateComplete RegStateFailed )
func (RegistrationState) String ¶
func (rs RegistrationState) String() string
type SASLHandler ¶
type SASLHandler struct {
// contains filtered or unexported fields
}
func NewSASLHandler ¶
func (*SASLHandler) Abort ¶
func (sh *SASLHandler) Abort() error
func (*SASLHandler) GetAvailableMechanisms ¶
func (sh *SASLHandler) GetAvailableMechanisms() []string
func (*SASLHandler) GetMaxChunkSize ¶
func (sh *SASLHandler) GetMaxChunkSize() int
func (*SASLHandler) GetMechanism ¶
func (sh *SASLHandler) GetMechanism() SASLMechanism
func (*SASLHandler) GetState ¶
func (sh *SASLHandler) GetState() SASLState
func (*SASLHandler) GetTimeout ¶
func (sh *SASLHandler) GetTimeout() time.Duration
func (*SASLHandler) HandleAuthenticate ¶
func (sh *SASLHandler) HandleAuthenticate(event *Event)
func (*SASLHandler) HandleSASLFail ¶
func (sh *SASLHandler) HandleSASLFail(event *Event)
func (*SASLHandler) HandleSASLSuccess ¶
func (sh *SASLHandler) HandleSASLSuccess(*Event)
func (*SASLHandler) IsActive ¶
func (sh *SASLHandler) IsActive() bool
func (*SASLHandler) IsAvailable ¶
func (sh *SASLHandler) IsAvailable() bool
func (*SASLHandler) IsComplete ¶
func (sh *SASLHandler) IsComplete() bool
func (*SASLHandler) Reset ¶
func (sh *SASLHandler) Reset()
func (*SASLHandler) SetMaxChunkSize ¶
func (sh *SASLHandler) SetMaxChunkSize(size int)
func (*SASLHandler) SetMechanism ¶
func (sh *SASLHandler) SetMechanism(mechanism SASLMechanism)
func (*SASLHandler) SetTimeout ¶
func (sh *SASLHandler) SetTimeout(timeout time.Duration)
func (*SASLHandler) StartAuthentication ¶
func (sh *SASLHandler) StartAuthentication() error
func (*SASLHandler) SupportsPlain ¶
func (sh *SASLHandler) SupportsPlain() bool
type SASLMechanism ¶
type User ¶
type User struct {
Nick string
Username string
Host string
Modes []UserMode
// contains filtered or unexported fields
}
User represents a user in an IRC channel
func (*User) GetPrefixString ¶
GetPrefixString converts the user's modes to prefix characters using the provided channel prefix mapping prefixToModeMap should map prefix characters to their mode symbols (e.g., '@' -> 'o', '+' -> 'v') This function reverses the mapping internally to convert modes back to prefixes
func (*User) RemoveMode ¶
Click to show internal directories.
Click to hide internal directories.