Changeset 532 in code for trunk/user.go


Ignore:
Timestamp:
May 25, 2021, 2:42:51 PM (4 years ago)
Author:
contact
Message:

Implement the soju.im/bouncer-networks extension

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/user.go

    r501 r532  
    142142func (net *network) forEachDownstream(f func(*downstreamConn)) {
    143143        net.user.forEachDownstream(func(dc *downstreamConn) {
     144                if dc.network == nil && dc.caps["soju.im/bouncer-networks"] {
     145                        return
     146                }
    144147                if dc.network != nil && dc.network != net {
    145148                        return
     
    512515                        uc.updateAway()
    513516
     517                        netIDStr := fmt.Sprintf("%v", uc.network.ID)
    514518                        uc.forEachDownstream(func(dc *downstreamConn) {
    515519                                dc.updateSupportedCaps()
    516                                 sendServiceNOTICE(dc, fmt.Sprintf("connected to %s", uc.network.GetName()))
     520
     521                                if dc.caps["soju.im/bouncer-networks"] {
     522                                        dc.SendMessage(&irc.Message{
     523                                                Prefix:  dc.srv.prefix(),
     524                                                Command: "BOUNCER",
     525                                                Params:  []string{"NETWORK", netIDStr, "status=connected"},
     526                                        })
     527                                } else {
     528                                        sendServiceNOTICE(dc, fmt.Sprintf("connected to %s", uc.network.GetName()))
     529                                }
    517530
    518531                                dc.updateNick()
     
    641654        }
    642655
     656        netIDStr := fmt.Sprintf("%v", uc.network.ID)
    643657        uc.forEachDownstream(func(dc *downstreamConn) {
    644658                dc.updateSupportedCaps()
     659
     660                if dc.caps["soju.im/bouncer-networks"] {
     661                        dc.SendMessage(&irc.Message{
     662                                Prefix:  dc.srv.prefix(),
     663                                Command: "BOUNCER",
     664                                Params:  []string{"NETWORK", netIDStr, "status=disconnected"},
     665                        })
     666                }
    645667        })
    646668
    647669        if uc.network.lastError == nil {
    648670                uc.forEachDownstream(func(dc *downstreamConn) {
    649                         sendServiceNOTICE(dc, fmt.Sprintf("disconnected from %s", uc.network.GetName()))
     671                        if !dc.caps["soju.im/bouncer-networks"] {
     672                                sendServiceNOTICE(dc, fmt.Sprintf("disconnected from %s", uc.network.GetName()))
     673                        }
    650674                })
    651675        }
     
    701725
    702726        u.addNetwork(network)
     727
     728        // TODO: broadcast network status
     729        idStr := fmt.Sprintf("%v", network.ID)
     730        u.forEachDownstream(func(dc *downstreamConn) {
     731                if dc.caps["soju.im/bouncer-networks"] {
     732                        dc.SendMessage(&irc.Message{
     733                                Prefix:  dc.srv.prefix(),
     734                                Command: "BOUNCER",
     735                                Params:  []string{"NETWORK", idStr, "network=" + network.GetName()},
     736                        })
     737                }
     738        })
    703739
    704740        return network, nil
     
    755791        u.addNetwork(updatedNetwork)
    756792
     793        // TODO: broadcast BOUNCER NETWORK notifications
     794
    757795        return updatedNetwork, nil
    758796}
     
    769807
    770808        u.removeNetwork(network)
     809
     810        idStr := fmt.Sprintf("%v", network.ID)
     811        u.forEachDownstream(func(dc *downstreamConn) {
     812                if dc.caps["soju.im/bouncer-networks"] {
     813                        dc.SendMessage(&irc.Message{
     814                                Prefix:  dc.srv.prefix(),
     815                                Command: "BOUNCER",
     816                                Params:  []string{"NETWORK", idStr, "*"},
     817                        })
     818                }
     819        })
     820
    771821        return nil
    772822}
Note: See TracChangeset for help on using the changeset viewer.