diff --git a/bridge.go b/bridge.go new file mode 100644 index 0000000..d01a2f9 --- /dev/null +++ b/bridge.go @@ -0,0 +1,53 @@ +package jounce + +import ( + "gopkg.in/irc.v3" +) + +func forwardChannel(dc *downstreamConn, ch *upstreamChannel) { + if !ch.complete { + panic("Tried to forward a partial channel") + } + + dc.messages <- &irc.Message{ + Prefix: dc.prefix(), + Command: "JOIN", + Params: []string{ch.Name}, + } + + if ch.Topic != "" { + dc.messages <- &irc.Message{ + Prefix: dc.srv.prefix(), + Command: irc.RPL_TOPIC, + Params: []string{dc.nick, ch.Name, ch.Topic}, + } + } else { + dc.messages <- &irc.Message{ + Prefix: dc.srv.prefix(), + Command: irc.RPL_NOTOPIC, + Params: []string{dc.nick, ch.Name, "No topic is set"}, + } + } + + // TODO: rpl_topicwhotime + + // TODO: send multiple members in each message + for nick, membership := range ch.Members { + s := nick + if membership != 0 { + s = string(membership) + nick + } + + dc.messages <- &irc.Message{ + Prefix: dc.srv.prefix(), + Command: irc.RPL_NAMREPLY, + Params: []string{dc.nick, string(ch.Status), ch.Name, s}, + } + } + + dc.messages <- &irc.Message{ + Prefix: dc.srv.prefix(), + Command: irc.RPL_ENDOFNAMES, + Params: []string{dc.nick, ch.Name, "End of /NAMES list"}, + } +}