Changeset 303 in code
- Timestamp:
- May 27, 2020, 9:48:08 PM (5 years ago)
- Location:
- trunk
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/downstream.go
r301 r303 251 251 func (dc *downstreamConn) SendMessage(msg *irc.Message) { 252 252 if !dc.caps["message-tags"] { 253 if msg.Command == "TAGMSG" { 254 return 255 } 253 256 msg = msg.Copy() 254 257 for name := range msg.Tags { … … 275 278 276 279 switch msg.Command { 277 case "PRIVMSG", "NOTICE" :280 case "PRIVMSG", "NOTICE", "TAGMSG": 278 281 msg.Params[0] = dc.marshalEntity(net, msg.Params[0]) 279 282 case "NICK": … … 1398 1401 return err 1399 1402 } 1403 tags := copyClientTags(msg.Tags) 1400 1404 1401 1405 for _, name := range strings.Split(targetsStr, ",") { … … 1419 1423 } 1420 1424 uc.SendMessageLabeled(dc.id, &irc.Message{ 1425 Tags: tags, 1421 1426 Command: "PRIVMSG", 1422 1427 Params: []string{upstreamName, unmarshaledText}, 1423 1428 }) 1424 1429 1430 echoTags := tags.Copy() 1431 echoTags["time"] = irc.TagValue(time.Now().UTC().Format(serverTimeLayout)) 1425 1432 echoMsg := &irc.Message{ 1426 Tags: irc.Tags{ 1427 "time": irc.TagValue(time.Now().UTC().Format(serverTimeLayout)), 1428 }, 1433 Tags: echoTags, 1429 1434 Prefix: &irc.Prefix{ 1430 1435 Name: uc.nick, … … 1441 1446 return err 1442 1447 } 1448 tags := copyClientTags(msg.Tags) 1443 1449 1444 1450 for _, name := range strings.Split(targetsStr, ",") { … … 1453 1459 } 1454 1460 uc.SendMessageLabeled(dc.id, &irc.Message{ 1461 Tags: tags, 1455 1462 Command: "NOTICE", 1456 1463 Params: []string{upstreamName, unmarshaledText}, 1464 }) 1465 } 1466 case "TAGMSG": 1467 var targetsStr string 1468 if err := parseMessageParams(msg, &targetsStr); err != nil { 1469 return err 1470 } 1471 tags := copyClientTags(msg.Tags) 1472 1473 for _, name := range strings.Split(targetsStr, ",") { 1474 uc, upstreamName, err := dc.unmarshalEntity(name) 1475 if err != nil { 1476 return err 1477 } 1478 1479 uc.SendMessageLabeled(dc.id, &irc.Message{ 1480 Tags: tags, 1481 Command: "TAGMSG", 1482 Params: []string{upstreamName}, 1457 1483 }) 1458 1484 } -
trunk/irc.go
r293 r303 275 275 } 276 276 277 func copyClientTags(tags irc.Tags) irc.Tags { 278 t := make(irc.Tags, len(tags)) 279 for k, v := range tags { 280 if strings.HasPrefix(k, "+") { 281 t[k] = v 282 } 283 } 284 return t 285 } 286 277 287 type batch struct { 278 288 Type string -
trunk/upstream.go
r302 r303 321 321 }) 322 322 return nil 323 case "NOTICE", "PRIVMSG" :323 case "NOTICE", "PRIVMSG", "TAGMSG": 324 324 if msg.Prefix == nil { 325 325 return fmt.Errorf("expected a prefix") … … 327 327 328 328 var entity, text string 329 if err := parseMessageParams(msg, &entity, &text); err != nil { 330 return err 329 if msg.Command != "TAGMSG" { 330 if err := parseMessageParams(msg, &entity, &text); err != nil { 331 return err 332 } 333 } else { 334 if err := parseMessageParams(msg, &entity); err != nil { 335 return err 336 } 331 337 } 332 338 … … 342 348 if msg.Prefix.User == "" && msg.Prefix.Host == "" { // server message 343 349 uc.produce("", msg, nil) 344 } else { // regular user NOTICE or PRIVMSG350 } else { // regular user message 345 351 target := entity 346 352 if target == uc.nick { … … 1275 1281 }) 1276 1282 } 1277 case "TAGMSG":1278 // TODO: relay to downstream connections that accept message-tags1279 1283 case "ACK": 1280 1284 // Ignore … … 1488 1492 } 1489 1493 1494 func (uc *upstreamConn) SendMessage(msg *irc.Message) { 1495 if !uc.caps["message-tags"] { 1496 msg = msg.Copy() 1497 msg.Tags = nil 1498 } 1499 1500 uc.conn.SendMessage(msg) 1501 } 1502 1490 1503 func (uc *upstreamConn) SendMessageLabeled(downstreamID uint64, msg *irc.Message) { 1491 1504 if uc.caps["labeled-response"] {
Note:
See TracChangeset
for help on using the changeset viewer.