Quellcode durchsuchen

fix #532

tags/v2.1.0-rc1
Shivaram Lingamneni vor 4 Jahren
Ursprung
Commit
eebe681538
4 geänderte Dateien mit 53 neuen und 14 gelöschten Zeilen
  1. 32
    5
      irc/channel.go
  2. 3
    3
      irc/chanserv.go
  3. 17
    6
      irc/handlers.go
  4. 1
    0
      irc/history/history.go

+ 32
- 5
irc/channel.go Datei anzeigen

@@ -1070,6 +1070,25 @@ func (channel *Channel) replayHistoryItems(rb *ResponseBuffer, items []history.I
1070 1070
 				message := fmt.Sprintf(client.t("%[1]s changed nick to %[2]s"), nick, item.Params[0])
1071 1071
 				rb.AddFromClient(item.Message.Time, utils.MungeSecretToken(item.Message.Msgid), histServMask, "*", nil, "PRIVMSG", chname, message)
1072 1072
 			}
1073
+		case history.Topic:
1074
+			if eventPlayback {
1075
+				rb.AddFromClient(item.Message.Time, item.Message.Msgid, item.Nick, item.AccountName, nil, "TOPIC", chname, item.Message.Message)
1076
+			} else {
1077
+				message := fmt.Sprintf(client.t("%[1]s set the channel topic to: %[2]s"), nick, item.Message.Message)
1078
+				rb.AddFromClient(item.Message.Time, utils.MungeSecretToken(item.Message.Msgid), histServMask, "*", nil, "PRIVMSG", chname, message)
1079
+			}
1080
+		case history.Mode:
1081
+			params := make([]string, len(item.Message.Split)+1)
1082
+			params[0] = chname
1083
+			for i, pair := range item.Message.Split {
1084
+				params[i+1] = pair.Message
1085
+			}
1086
+			if eventPlayback {
1087
+				rb.AddFromClient(item.Message.Time, item.Message.Msgid, item.Nick, item.AccountName, nil, "MODE", params...)
1088
+			} else {
1089
+				message := fmt.Sprintf(client.t("%[1]s set channel modes: %[2]s"), nick, strings.Join(params[1:], " "))
1090
+				rb.AddFromClient(item.Message.Time, utils.MungeSecretToken(item.Message.Msgid), histServMask, "*", nil, "PRIVMSG", chname, message)
1091
+			}
1073 1092
 		}
1074 1093
 	}
1075 1094
 }
@@ -1119,22 +1138,30 @@ func (channel *Channel) SetTopic(client *Client, topic string, rb *ResponseBuffe
1119 1138
 	}
1120 1139
 
1121 1140
 	channel.stateMutex.Lock()
1141
+	chname := channel.name
1122 1142
 	channel.topic = topic
1123 1143
 	channel.topicSetBy = client.nickMaskString
1124 1144
 	channel.topicSetTime = time.Now().UTC()
1125 1145
 	channel.stateMutex.Unlock()
1126 1146
 
1127
-	prefix := client.NickMaskString()
1147
+	details := client.Details()
1148
+	message := utils.MakeMessage(topic)
1149
+	rb.AddFromClient(message.Time, message.Msgid, details.nickMask, details.accountName, nil, "TOPIC", chname, topic)
1128 1150
 	for _, member := range channel.Members() {
1129 1151
 		for _, session := range member.Sessions() {
1130
-			if session == rb.session {
1131
-				rb.Add(nil, prefix, "TOPIC", channel.name, topic)
1132
-			} else {
1133
-				session.Send(nil, prefix, "TOPIC", channel.name, topic)
1152
+			if session != rb.session {
1153
+				session.sendFromClientInternal(false, message.Time, message.Msgid, details.nickMask, details.accountName, nil, "TOPIC", chname, topic)
1134 1154
 			}
1135 1155
 		}
1136 1156
 	}
1137 1157
 
1158
+	channel.AddHistoryItem(history.Item{
1159
+		Type:        history.Topic,
1160
+		Nick:        details.nickMask,
1161
+		AccountName: details.accountName,
1162
+		Message:     message,
1163
+	})
1164
+
1138 1165
 	channel.MarkDirty(IncludeTopic)
1139 1166
 }
1140 1167
 

+ 3
- 3
irc/chanserv.go Datei anzeigen

@@ -244,7 +244,7 @@ func csAmodeHandler(server *Server, client *Client, command string, params []str
244 244
 				if member.Account() == change.Arg {
245 245
 					applied, change := channel.applyModeToMember(client, change, rb)
246 246
 					if applied {
247
-						announceCmodeChanges(channel, modes.ModeChanges{change}, chanservMask, rb)
247
+						announceCmodeChanges(channel, modes.ModeChanges{change}, chanservMask, "*", rb)
248 248
 					}
249 249
 				}
250 250
 			}
@@ -291,7 +291,7 @@ func csOpHandler(server *Server, client *Client, command string, params []string
291 291
 		},
292 292
 		rb)
293 293
 	if applied {
294
-		announceCmodeChanges(channelInfo, modes.ModeChanges{change}, chanservMask, rb)
294
+		announceCmodeChanges(channelInfo, modes.ModeChanges{change}, chanservMask, "*", rb)
295 295
 	}
296 296
 
297 297
 	csNotice(rb, fmt.Sprintf(client.t("Successfully op'd in channel %s"), channelName))
@@ -343,7 +343,7 @@ func csRegisterHandler(server *Server, client *Client, command string, params []
343 343
 		},
344 344
 		rb)
345 345
 	if applied {
346
-		announceCmodeChanges(channelInfo, modes.ModeChanges{change}, chanservMask, rb)
346
+		announceCmodeChanges(channelInfo, modes.ModeChanges{change}, chanservMask, "*", rb)
347 347
 	}
348 348
 }
349 349
 

+ 17
- 6
irc/handlers.go Datei anzeigen

@@ -1520,24 +1520,35 @@ func cmodeHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *Res
1520 1520
 	}
1521 1521
 	// process mode changes, include list operations (an empty set of changes does a list)
1522 1522
 	applied := channel.ApplyChannelModeChanges(client, msg.Command == "SAMODE", changes, rb)
1523
-	announceCmodeChanges(channel, applied, client.NickMaskString(), rb)
1523
+	details := client.Details()
1524
+	announceCmodeChanges(channel, applied, details.nickMask, details.accountName, rb)
1524 1525
 
1525 1526
 	return false
1526 1527
 }
1527 1528
 
1528
-func announceCmodeChanges(channel *Channel, applied modes.ModeChanges, source string, rb *ResponseBuffer) {
1529
+func announceCmodeChanges(channel *Channel, applied modes.ModeChanges, source, accountName string, rb *ResponseBuffer) {
1529 1530
 	// send out changes
1530 1531
 	if len(applied) > 0 {
1531
-		//TODO(dan): we should change the name of String and make it return a slice here
1532
-		args := append([]string{channel.name}, applied.Strings()...)
1533
-		rb.Add(nil, source, "MODE", args...)
1532
+		message := utils.MakeMessage("")
1533
+		changeStrings := applied.Strings()
1534
+		for _, changeString := range changeStrings {
1535
+			message.Split = append(message.Split, utils.MessagePair{Message: changeString})
1536
+		}
1537
+		args := append([]string{channel.name}, changeStrings...)
1538
+		rb.AddFromClient(message.Time, message.Msgid, source, accountName, nil, "MODE", args...)
1534 1539
 		for _, member := range channel.Members() {
1535 1540
 			for _, session := range member.Sessions() {
1536 1541
 				if session != rb.session {
1537
-					session.Send(nil, source, "MODE", args...)
1542
+					session.sendFromClientInternal(false, message.Time, message.Msgid, source, accountName, nil, "MODE", args...)
1538 1543
 				}
1539 1544
 			}
1540 1545
 		}
1546
+		channel.AddHistoryItem(history.Item{
1547
+			Type:        history.Mode,
1548
+			Nick:        source,
1549
+			AccountName: accountName,
1550
+			Message:     message,
1551
+		})
1541 1552
 	}
1542 1553
 }
1543 1554
 

+ 1
- 0
irc/history/history.go Datei anzeigen

@@ -22,6 +22,7 @@ const (
22 22
 	Mode
23 23
 	Tagmsg
24 24
 	Nick
25
+	Topic
25 26
 )
26 27
 
27 28
 const (

Laden…
Abbrechen
Speichern