Parcourir la source

fix #1198

tags/v2.2.0-rc1
Shivaram Lingamneni il y a 4 ans
Parent
révision
93530ae397
5 fichiers modifiés avec 18 ajouts et 12 suppressions
  1. 6
    2
      irc/channel.go
  2. 2
    2
      irc/getters.go
  3. 6
    4
      irc/handlers.go
  4. 2
    2
      irc/roleplay.go
  5. 2
    2
      irc/server.go

+ 6
- 2
irc/channel.go Voir le fichier

767
 		modestr = fmt.Sprintf("+%v", givenMode)
767
 		modestr = fmt.Sprintf("+%v", givenMode)
768
 	}
768
 	}
769
 
769
 
770
+	isAway, awayMessage := client.Away()
770
 	for _, member := range channel.Members() {
771
 	for _, member := range channel.Members() {
771
 		for _, session := range member.Sessions() {
772
 		for _, session := range member.Sessions() {
772
 			if session == rb.session {
773
 			if session == rb.session {
783
 			if givenMode != 0 {
784
 			if givenMode != 0 {
784
 				session.Send(nil, client.server.name, "MODE", chname, modestr, details.nick)
785
 				session.Send(nil, client.server.name, "MODE", chname, modestr, details.nick)
785
 			}
786
 			}
787
+			if isAway && session.capabilities.Has(caps.AwayNotify) {
788
+				session.sendFromClientInternal(false, time.Time{}, "", details.nickMask, details.account, nil, "AWAY", awayMessage)
789
+			}
786
 		}
790
 		}
787
 	}
791
 	}
788
 
792
 
1458
 	tnick := invitee.Nick()
1462
 	tnick := invitee.Nick()
1459
 	rb.Add(nil, inviter.server.name, RPL_INVITING, cnick, tnick, chname)
1463
 	rb.Add(nil, inviter.server.name, RPL_INVITING, cnick, tnick, chname)
1460
 	invitee.Send(nil, inviter.NickMaskString(), "INVITE", tnick, chname)
1464
 	invitee.Send(nil, inviter.NickMaskString(), "INVITE", tnick, chname)
1461
-	if invitee.Away() {
1462
-		rb.Add(nil, inviter.server.name, RPL_AWAY, cnick, tnick, invitee.AwayMessage())
1465
+	if away, awayMessage := invitee.Away(); away {
1466
+		rb.Add(nil, inviter.server.name, RPL_AWAY, cnick, tnick, awayMessage)
1463
 	}
1467
 	}
1464
 }
1468
 }
1465
 
1469
 

+ 2
- 2
irc/getters.go Voir le fichier

185
 	return client.hostname
185
 	return client.hostname
186
 }
186
 }
187
 
187
 
188
-func (client *Client) Away() (result bool) {
188
+func (client *Client) Away() (result bool, message string) {
189
 	client.stateMutex.Lock()
189
 	client.stateMutex.Lock()
190
-	result = client.away
190
+	result, message = client.away, client.awayMessage
191
 	client.stateMutex.Unlock()
191
 	client.stateMutex.Unlock()
192
 	return
192
 	return
193
 }
193
 }

+ 6
- 4
irc/handlers.go Voir le fichier

2122
 				rb.AddSplitMessageFromClient(nickMaskString, accountName, tagsToSend, command, tnick, message)
2122
 				rb.AddSplitMessageFromClient(nickMaskString, accountName, tagsToSend, command, tnick, message)
2123
 			}
2123
 			}
2124
 		}
2124
 		}
2125
-		if histType != history.Notice && user.Away() {
2125
+		if histType != history.Notice {
2126
 			//TODO(dan): possibly implement cooldown of away notifications to users
2126
 			//TODO(dan): possibly implement cooldown of away notifications to users
2127
-			rb.Add(nil, server.name, RPL_AWAY, client.Nick(), tnick, user.AwayMessage())
2127
+			if away, awayMessage := user.Away(); away {
2128
+				rb.Add(nil, server.name, RPL_AWAY, client.Nick(), tnick, awayMessage)
2129
+			}
2128
 		}
2130
 		}
2129
 
2131
 
2130
 		config := server.Config()
2132
 		config := server.Config()
2742
 		if target.HasMode(modes.Operator) {
2744
 		if target.HasMode(modes.Operator) {
2743
 			isOper = "*"
2745
 			isOper = "*"
2744
 		}
2746
 		}
2745
-		if target.Away() {
2747
+		if away, _ := target.Away(); away {
2746
 			isAway = "-"
2748
 			isAway = "-"
2747
 		} else {
2749
 		} else {
2748
 			isAway = "+"
2750
 			isAway = "+"
2893
 	}
2895
 	}
2894
 	if fields.Has('f') { // "flags" (away + oper state + channel status prefix + bot)
2896
 	if fields.Has('f') { // "flags" (away + oper state + channel status prefix + bot)
2895
 		var flags strings.Builder
2897
 		var flags strings.Builder
2896
-		if target.Away() {
2898
+		if away, _ := target.Away(); away {
2897
 			flags.WriteRune('G') // Gone
2899
 			flags.WriteRune('G') // Gone
2898
 		} else {
2900
 		} else {
2899
 			flags.WriteRune('H') // Here
2901
 			flags.WriteRune('H') // Here

+ 2
- 2
irc/roleplay.go Voir le fichier

110
 		for _, session := range user.Sessions() {
110
 		for _, session := range user.Sessions() {
111
 			session.sendSplitMsgFromClientInternal(false, source, "", nil, "PRIVMSG", tnick, splitMessage)
111
 			session.sendSplitMsgFromClientInternal(false, source, "", nil, "PRIVMSG", tnick, splitMessage)
112
 		}
112
 		}
113
-		if user.Away() {
113
+		if away, awayMessage := user.Away(); away {
114
 			//TODO(dan): possibly implement cooldown of away notifications to users
114
 			//TODO(dan): possibly implement cooldown of away notifications to users
115
-			rb.Add(nil, server.name, RPL_AWAY, cnick, tnick, user.AwayMessage())
115
+			rb.Add(nil, server.name, RPL_AWAY, cnick, tnick, awayMessage)
116
 		}
116
 		}
117
 	}
117
 	}
118
 }
118
 }

+ 2
- 2
irc/server.go Voir le fichier

436
 		}
436
 		}
437
 	}
437
 	}
438
 	rb.Add(nil, client.server.name, RPL_WHOISIDLE, cnick, tnick, strconv.FormatUint(target.IdleSeconds(), 10), strconv.FormatInt(target.SignonTime(), 10), client.t("seconds idle, signon time"))
438
 	rb.Add(nil, client.server.name, RPL_WHOISIDLE, cnick, tnick, strconv.FormatUint(target.IdleSeconds(), 10), strconv.FormatInt(target.SignonTime(), 10), client.t("seconds idle, signon time"))
439
-	if target.Away() {
440
-		rb.Add(nil, client.server.name, RPL_AWAY, cnick, tnick, target.AwayMessage())
439
+	if away, awayMessage := target.Away(); away {
440
+		rb.Add(nil, client.server.name, RPL_AWAY, cnick, tnick, awayMessage)
441
 	}
441
 	}
442
 }
442
 }
443
 
443
 

Chargement…
Annuler
Enregistrer