aboutsummaryrefslogtreecommitdiff
path: root/connector
diff options
context:
space:
mode:
Diffstat (limited to 'connector')
-rw-r--r--connector/connector.go3
-rw-r--r--connector/irc/irc.go44
2 files changed, 44 insertions, 3 deletions
diff --git a/connector/connector.go b/connector/connector.go
index 2116bb5..9894bfc 100644
--- a/connector/connector.go
+++ b/connector/connector.go
@@ -48,6 +48,9 @@ type Connector interface {
// If no error happens, it must fire a Handler.Joined event
Join(roomId RoomID) error
+ // Try to invite someone to a channel
+ Invite(user UserID, roomId RoomID) error
+
// Leave a channel
Leave(roomId RoomID)
diff --git a/connector/irc/irc.go b/connector/irc/irc.go
index 02f82eb..b9c58ad 100644
--- a/connector/irc/irc.go
+++ b/connector/irc/irc.go
@@ -36,6 +36,10 @@ func(irc *IRC) Protocol() string {
}
func (irc *IRC) Configure(c Configuration) error {
+ if irc.conn != nil {
+ irc.Close()
+ }
+
irc.config = c
irc.nick = c.GetString("nick")
@@ -54,7 +58,7 @@ func (irc *IRC) Configure(c Configuration) error {
Port: port,
Nick: irc.nick,
User: irc.nick,
- Debug: os.Stderr,
+ Out: os.Stderr,
SSL: true,
})
@@ -132,6 +136,21 @@ func (irc *IRC) Join(roomId RoomID) error {
return nil
}
+func (irc *IRC) Invite(userId UserID, roomId RoomID) error {
+ ch, err := irc.checkRoomId(roomId)
+ if err != nil {
+ return err
+ }
+
+ who, err := irc.checkUserId(userId)
+ if err != nil {
+ return err
+ }
+
+ irc.conn.Cmd.Invite(ch, who)
+ return nil
+}
+
func (irc *IRC) Leave(roomId RoomID) {
ch, err := irc.checkRoomId(roomId)
if err != nil {
@@ -247,9 +266,28 @@ func (irc *IRC) ircPart(c *girc.Client, e girc.Event) {
}
func (irc *IRC) ircNamreply(c *girc.Client, e girc.Event) {
- fmt.Printf("TODO namreply params: %#v", e.Params)
+ room := RoomID(e.Params[2] + "@" + irc.server)
+ names := strings.Split(e.Last(), " ")
+ for _, name := range names {
+ if name[0] == '@' {
+ name = name[1:]
+ }
+ src := girc.ParseSource(name)
+ if src.Name != irc.nick {
+ irc.handler.Event(&Event{
+ Type: EVENT_JOIN,
+ Author: UserID(src.Name + "@" + irc.server),
+ Room: room,
+ })
+ }
+ }
}
func (irc *IRC) ircTopic(c *girc.Client, e girc.Event) {
- fmt.Printf("TODO topic params: %#v", e.Params)
+ room := RoomID(e.Params[1] + "@" + irc.server)
+ topic := e.Last()
+ irc.handler.RoomInfoUpdated(room, &RoomInfo{
+ Name: string(room),
+ Description: topic,
+ })
}