mirror of https://github.com/fluffle/goirc
Give nicks an awareness of me.
This commit is contained in:
parent
7a17ee9eb5
commit
d072abbb76
|
@ -28,11 +28,8 @@ type stateTracker struct {
|
||||||
chans map[string]*Channel
|
chans map[string]*Channel
|
||||||
// Map of nicks we know about
|
// Map of nicks we know about
|
||||||
nicks map[string]*Nick
|
nicks map[string]*Nick
|
||||||
// When tracking state, it helps to know who we are.
|
|
||||||
Me *Nick
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// A struct representing an IRC channel
|
// A struct representing an IRC channel
|
||||||
type Channel struct {
|
type Channel struct {
|
||||||
Name, Topic string
|
Name, Topic string
|
||||||
|
@ -46,6 +43,7 @@ type Nick struct {
|
||||||
Nick, Ident, Host, Name string
|
Nick, Ident, Host, Name string
|
||||||
Modes *NickMode
|
Modes *NickMode
|
||||||
chans map[*Channel]*ChanPrivs
|
chans map[*Channel]*ChanPrivs
|
||||||
|
me bool
|
||||||
st StateTracker
|
st StateTracker
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -70,7 +68,7 @@ type ChanMode struct {
|
||||||
// A struct representing the modes of an IRC Nick (User Modes)
|
// A struct representing the modes of an IRC Nick (User Modes)
|
||||||
// (again, only the ones we care about)
|
// (again, only the ones we care about)
|
||||||
//
|
//
|
||||||
// This is only really useful for conn.Me, as we can't see other people's modes
|
// This is only really useful for me, as we can't see other people's modes
|
||||||
// without IRC operator privileges (and even then only on some IRCd's).
|
// without IRC operator privileges (and even then only on some IRCd's).
|
||||||
type NickMode struct {
|
type NickMode struct {
|
||||||
// MODE +i, +o, +w, +x, +z
|
// MODE +i, +o, +w, +x, +z
|
||||||
|
@ -174,9 +172,9 @@ func (ch *Channel) AddNick(n *Nick) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Returns true if the *irc.Nick n is associated with the *irc.Channel
|
// Returns true if the *irc.Nick is associated with the *irc.Channel
|
||||||
func (ch *Channel) IsOn(n *Nick) bool {
|
func (ch *Channel) IsOn(n *Nick) bool {
|
||||||
_, ok := ch.nicks[nk]
|
_, ok := ch.nicks[n]
|
||||||
return ok
|
return ok
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -185,7 +183,7 @@ func (ch *Channel) IsOn(n *Nick) bool {
|
||||||
// n.DelChannel(ch) to remove the association from the perspective of *irc.Nick.
|
// n.DelChannel(ch) to remove the association from the perspective of *irc.Nick.
|
||||||
func (ch *Channel) DelNick(n *Nick) {
|
func (ch *Channel) DelNick(n *Nick) {
|
||||||
if _, ok := ch.nicks[n]; ok {
|
if _, ok := ch.nicks[n]; ok {
|
||||||
if n == n.st.Me {
|
if n.me {
|
||||||
// we're leaving the channel, so remove all state we have about it
|
// we're leaving the channel, so remove all state we have about it
|
||||||
ch.Delete()
|
ch.Delete()
|
||||||
} else {
|
} else {
|
||||||
|
@ -306,6 +304,17 @@ func (n *Nick) AddChannel(ch *Channel) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Returns true if the *irc.Nick is associated with the *irc.Channel
|
||||||
|
func (n *Nick) IsOn(ch *Channel) bool {
|
||||||
|
_, ok := n.chans[ch]
|
||||||
|
return ok
|
||||||
|
}
|
||||||
|
|
||||||
|
// Returns true if the *irc.Nick is Me!
|
||||||
|
func (n *Nick) IsMe() bool {
|
||||||
|
return n.me
|
||||||
|
}
|
||||||
|
|
||||||
// Disassociates an *irc.Channel from an *irc.Nick. Will call n.Delete() if
|
// Disassociates an *irc.Channel from an *irc.Nick. Will call n.Delete() if
|
||||||
// the *irc.Nick is no longer on any channels we are tracking. Will also call
|
// the *irc.Nick is no longer on any channels we are tracking. Will also call
|
||||||
// ch.DelNick(n) to remove the association from the perspective of *irc.Channel.
|
// ch.DelNick(n) to remove the association from the perspective of *irc.Channel.
|
||||||
|
@ -324,7 +333,7 @@ func (n *Nick) DelChannel(ch *Channel) {
|
||||||
// ch.DelNick(n) for all nicks that are associated with the channel.
|
// ch.DelNick(n) for all nicks that are associated with the channel.
|
||||||
func (n *Nick) Delete() {
|
func (n *Nick) Delete() {
|
||||||
// we don't ever want to remove *our* nick from st.nicks...
|
// we don't ever want to remove *our* nick from st.nicks...
|
||||||
if n != n.st.Me {
|
if !n.me {
|
||||||
for ch, _ := range n.chans {
|
for ch, _ := range n.chans {
|
||||||
ch.DelNick(n)
|
ch.DelNick(n)
|
||||||
}
|
}
|
||||||
|
@ -456,6 +465,9 @@ func (n *Nick) String() string {
|
||||||
str += "Hostmask: " + n.Ident + "@" + n.Host + "\n\t"
|
str += "Hostmask: " + n.Ident + "@" + n.Host + "\n\t"
|
||||||
str += "Real Name: " + n.Name + "\n\t"
|
str += "Real Name: " + n.Name + "\n\t"
|
||||||
str += "Modes: " + n.Modes.String() + "\n\t"
|
str += "Modes: " + n.Modes.String() + "\n\t"
|
||||||
|
if n.me {
|
||||||
|
str += "I think this is ME!\n\t"
|
||||||
|
}
|
||||||
str += "Channels: \n"
|
str += "Channels: \n"
|
||||||
for ch, p := range n.chans {
|
for ch, p := range n.chans {
|
||||||
str += "\t\t" + ch.Name + ": " + p.String() + "\n"
|
str += "\t\t" + ch.Name + ": " + p.String() + "\n"
|
||||||
|
|
Loading…
Reference in New Issue