|
@@ -2015,21 +2015,12 @@ func messageHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *R
|
2015
|
2015
|
}
|
2016
|
2016
|
|
2017
|
2017
|
config := server.Config()
|
2018
|
|
- if config.Server.Relaying.Enabled {
|
2019
|
|
- var isForRelayClient bool
|
2020
|
|
- for _, char := range config.Server.Relaying.Separators {
|
2021
|
|
- if strings.ContainsRune(targetString, char) {
|
2022
|
|
- isForRelayClient = true
|
2023
|
|
- break
|
2024
|
|
- }
|
2025
|
|
- }
|
2026
|
|
- if isForRelayClient {
|
2027
|
|
- if histType == history.Privmsg {
|
2028
|
|
- rb.Add(nil, server.name, ERR_NOSUCHNICK, client.Nick(), targetString, client.t("Relayed users cannot receive private messages"))
|
2029
|
|
- }
|
2030
|
|
- // TAGMSG/NOTICEs are intentionally silently dropped
|
2031
|
|
- continue
|
|
2018
|
+ if config.isRelaymsgIdentifier(targetString) {
|
|
2019
|
+ if histType == history.Privmsg {
|
|
2020
|
+ rb.Add(nil, server.name, ERR_NOSUCHNICK, client.Nick(), targetString, client.t("Relayed users cannot receive private messages"))
|
2032
|
2021
|
}
|
|
2022
|
+ // TAGMSG/NOTICEs are intentionally silently dropped
|
|
2023
|
+ continue
|
2033
|
2024
|
}
|
2034
|
2025
|
|
2035
|
2026
|
// each target gets distinct msgids
|
|
@@ -2443,8 +2434,8 @@ func rehashHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *Re
|
2443
|
2434
|
// RELAYMSG <channel> <spoofed nick> :<message>
|
2444
|
2435
|
func relaymsgHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) (result bool) {
|
2445
|
2436
|
config := server.Config()
|
2446
|
|
- if !config.Server.Relaying.Enabled {
|
2447
|
|
- rb.Add(nil, server.name, "FAIL", "RELAYMSG", "NOT_ENABLED", client.t("Relaying has been disabled"))
|
|
2437
|
+ if !config.Server.Relaymsg.Enabled {
|
|
2438
|
+ rb.Add(nil, server.name, "FAIL", "RELAYMSG", "NOT_ENABLED", client.t("RELAYMSG has been disabled"))
|
2448
|
2439
|
return false
|
2449
|
2440
|
}
|
2450
|
2441
|
|
|
@@ -2454,7 +2445,7 @@ func relaymsgHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *
|
2454
|
2445
|
return false
|
2455
|
2446
|
}
|
2456
|
2447
|
|
2457
|
|
- allowedToRelay := client.HasRoleCapabs("relaymsg-anywhere") || (config.Server.Relaying.AvailableToChanops && channel.ClientIsAtLeast(client, modes.ChannelOperator))
|
|
2448
|
+ allowedToRelay := client.HasRoleCapabs("relaymsg-anywhere") || (config.Server.Relaymsg.AvailableToChanops && channel.ClientIsAtLeast(client, modes.ChannelOperator))
|
2458
|
2449
|
if !allowedToRelay {
|
2459
|
2450
|
rb.Add(nil, server.name, "FAIL", "RELAYMSG", "NOT_PRIVED", client.t("You cannot relay messages to this channel"))
|
2460
|
2451
|
return false
|
|
@@ -2473,8 +2464,8 @@ func relaymsgHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *
|
2473
|
2464
|
rb.Add(nil, server.name, "FAIL", "RELAYMSG", "INVALID_NICK", client.t("Invalid nickname"))
|
2474
|
2465
|
return false
|
2475
|
2466
|
}
|
2476
|
|
- if !strings.Contains(nick, "/") {
|
2477
|
|
- rb.Add(nil, server.name, "FAIL", "RELAYMSG", "INVALID_NICK", fmt.Sprintf(client.t("Relayed nicknames MUST contain the relaymsg separator %s"), "/"))
|
|
2467
|
+ if !config.isRelaymsgIdentifier(nick) {
|
|
2468
|
+ rb.Add(nil, server.name, "FAIL", "RELAYMSG", "INVALID_NICK", fmt.Sprintf(client.t("Relayed nicknames MUST contain a relaymsg separator from this set: %s"), config.Server.Relaymsg.Separators))
|
2478
|
2469
|
return false
|
2479
|
2470
|
}
|
2480
|
2471
|
|
|
@@ -2486,16 +2477,21 @@ func relaymsgHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *
|
2486
|
2477
|
|
2487
|
2478
|
// send msg
|
2488
|
2479
|
channelName := channel.Name()
|
|
2480
|
+ relayTags := map[string]string{
|
|
2481
|
+ "relaymsg": client.Nick(),
|
|
2482
|
+ }
|
2489
|
2483
|
for _, member := range channel.Members() {
|
2490
|
2484
|
for _, session := range member.Sessions() {
|
2491
|
2485
|
var tagsToUse map[string]string
|
2492
|
2486
|
if session.capabilities.Has(caps.Relaymsg) {
|
2493
|
|
- tagsToUse = map[string]string{
|
2494
|
|
- "relaymsg": client.Nick(),
|
2495
|
|
- }
|
|
2487
|
+ tagsToUse = relayTags
|
2496
|
2488
|
}
|
2497
|
2489
|
|
2498
|
|
- session.sendSplitMsgFromClientInternal(false, nick, "", tagsToUse, "PRIVMSG", channelName, message)
|
|
2490
|
+ if session == rb.session {
|
|
2491
|
+ rb.AddSplitMessageFromClient(nick, "*", tagsToUse, "PRIVMSG", channelName, message)
|
|
2492
|
+ } else {
|
|
2493
|
+ session.sendSplitMsgFromClientInternal(false, nick, "*", tagsToUse, "PRIVMSG", channelName, message)
|
|
2494
|
+ }
|
2499
|
2495
|
}
|
2500
|
2496
|
}
|
2501
|
2497
|
return false
|