|
|
@ -476,6 +476,28 @@ func (client *Client) RemoveTarget(target Target) (id string, err error) { |
|
|
|
return |
|
|
|
} |
|
|
|
|
|
|
|
// FindUser checks each channel to find user info about a user.
|
|
|
|
func (client *Client) FindUser(nick string) (u list.User, ok bool) { |
|
|
|
client.mutex.RLock() |
|
|
|
defer client.mutex.RUnlock() |
|
|
|
|
|
|
|
for _, target := range client.targets { |
|
|
|
channel, ok := target.(*Channel) |
|
|
|
if !ok { |
|
|
|
continue |
|
|
|
} |
|
|
|
|
|
|
|
user, ok := channel.UserList().User(nick) |
|
|
|
if !ok { |
|
|
|
continue |
|
|
|
} |
|
|
|
|
|
|
|
return user, true |
|
|
|
} |
|
|
|
|
|
|
|
return list.User{}, false |
|
|
|
} |
|
|
|
|
|
|
|
func (client *Client) handleEventLoop() { |
|
|
|
ticker := time.NewTicker(time.Second * 30) |
|
|
|
|
|
|
@ -814,7 +836,7 @@ func (client *Client) handleEvent(event *Event) { |
|
|
|
channel = client.Channel(event.Arg(0)) |
|
|
|
} |
|
|
|
|
|
|
|
event.targets = append(event.targets, channel) |
|
|
|
client.handleInTarget(channel, event) |
|
|
|
|
|
|
|
if channel != nil { |
|
|
|
channel.Handle(event, client) |
|
|
@ -833,7 +855,7 @@ func (client *Client) handleEvent(event *Event) { |
|
|
|
if event.Nick == client.nick { |
|
|
|
client.RemoveTarget(channel) |
|
|
|
} else { |
|
|
|
event.targets = append(event.targets, channel) |
|
|
|
client.handleInTarget(channel, event) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
@ -846,7 +868,7 @@ func (client *Client) handleEvent(event *Event) { |
|
|
|
{ |
|
|
|
channel := client.Channel(event.Arg(2)) |
|
|
|
if channel != nil { |
|
|
|
channel.Handle(event, client) |
|
|
|
client.handleInTarget(channel, event) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
@ -854,7 +876,7 @@ func (client *Client) handleEvent(event *Event) { |
|
|
|
{ |
|
|
|
channel := client.Channel(event.Arg(1)) |
|
|
|
if channel != nil { |
|
|
|
channel.Handle(event, client) |
|
|
|
client.handleInTarget(channel, event) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
@ -865,7 +887,7 @@ func (client *Client) handleEvent(event *Event) { |
|
|
|
if client.isupport.IsChannel(targetName) { |
|
|
|
channel := client.Channel(targetName) |
|
|
|
if channel != nil { |
|
|
|
channel.Handle(event, client) |
|
|
|
client.handleInTarget(channel, event) |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
@ -893,14 +915,19 @@ func (client *Client) handleEvent(event *Event) { |
|
|
|
target = query |
|
|
|
} |
|
|
|
} else { |
|
|
|
target = client.Channel(targetName) |
|
|
|
if target == nil { |
|
|
|
channel := client.Channel(targetName) |
|
|
|
if channel != nil { |
|
|
|
if user, ok := channel.UserList().User(event.Nick); ok { |
|
|
|
event.RenderTags["prefixedNick"] = user.PrefixedNick |
|
|
|
} |
|
|
|
|
|
|
|
target = channel |
|
|
|
} else { |
|
|
|
target = client.status |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
target.Handle(event, client) |
|
|
|
event.targets = append(event.targets, target) |
|
|
|
client.handleInTarget(target, event) |
|
|
|
|
|
|
|
if spawned { |
|
|
|
// TODO: Message has higher importance // 0:Normal, 1:Important, 2:Highlight
|
|
|
@ -917,8 +944,11 @@ func (client *Client) handleEvent(event *Event) { |
|
|
|
continue |
|
|
|
} |
|
|
|
|
|
|
|
channel.Handle(event, client) |
|
|
|
event.targets = append(event.targets, channel) |
|
|
|
if user, ok := channel.UserList().User(event.Nick); ok { |
|
|
|
event.RenderTags["prefixedNick"] = user.PrefixedNick |
|
|
|
} |
|
|
|
|
|
|
|
client.handleInTarget(channel, event) |
|
|
|
break |
|
|
|
} |
|
|
|
} |
|
|
@ -926,7 +956,7 @@ func (client *Client) handleEvent(event *Event) { |
|
|
|
// Otherwise, it belongs in the status target
|
|
|
|
if len(event.targets) == 0 { |
|
|
|
client.status.Handle(event, client) |
|
|
|
event.targets = append(event.targets, client.status) |
|
|
|
client.handleInTarget(client.status, event) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
@ -944,7 +974,7 @@ func (client *Client) handleEvent(event *Event) { |
|
|
|
} |
|
|
|
|
|
|
|
if len(event.targets) == 0 { |
|
|
|
event.targets = append(event.targets, client.status) |
|
|
|
client.handleInTarget(client.status, event) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
@ -960,22 +990,27 @@ func (client *Client) handleInTargets(nick string, event *Event) { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
event.targets = append(event.targets, target) |
|
|
|
|
|
|
|
target.Handle(event, client) |
|
|
|
|
|
|
|
event.targets = append(event.targets, target) |
|
|
|
event.targetIds[target] = client.targteIds[target] |
|
|
|
} |
|
|
|
case *Query: |
|
|
|
{ |
|
|
|
if target.user.Nick == nick { |
|
|
|
target.Handle(event, client) |
|
|
|
|
|
|
|
event.targets = append(event.targets, target) |
|
|
|
event.targetIds[target] = client.targteIds[target] |
|
|
|
} |
|
|
|
} |
|
|
|
case *Status: |
|
|
|
{ |
|
|
|
if client.nick == event.Nick { |
|
|
|
target.Handle(event, client) |
|
|
|
|
|
|
|
event.targets = append(event.targets, target) |
|
|
|
event.targetIds[target] = client.targteIds[target] |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
@ -984,6 +1019,17 @@ func (client *Client) handleInTargets(nick string, event *Event) { |
|
|
|
client.mutex.RUnlock() |
|
|
|
} |
|
|
|
|
|
|
|
func (client *Client) handleInTarget(target Target, event *Event) { |
|
|
|
client.mutex.RLock() |
|
|
|
|
|
|
|
target.Handle(event, client) |
|
|
|
|
|
|
|
event.targets = append(event.targets, target) |
|
|
|
event.targetIds[target] = client.targteIds[target] |
|
|
|
|
|
|
|
client.mutex.RUnlock() |
|
|
|
} |
|
|
|
|
|
|
|
func generateClientID() string { |
|
|
|
bytes := make([]byte, 12) |
|
|
|
_, err := rand.Read(bytes) |
|
|
|