Invitations, closing before configure, etc
This commit is contained in:
parent
ec67a610e3
commit
b7f0776784
3 changed files with 46 additions and 5 deletions
|
@ -48,6 +48,9 @@ type Connector interface {
|
||||||
// If no error happens, it must fire a Handler.Joined event
|
// If no error happens, it must fire a Handler.Joined event
|
||||||
Join(roomId RoomID) error
|
Join(roomId RoomID) error
|
||||||
|
|
||||||
|
// Try to invite someone to a channel
|
||||||
|
Invite(user UserID, roomId RoomID) error
|
||||||
|
|
||||||
// Leave a channel
|
// Leave a channel
|
||||||
Leave(roomId RoomID)
|
Leave(roomId RoomID)
|
||||||
|
|
||||||
|
|
|
@ -36,6 +36,10 @@ func(irc *IRC) Protocol() string {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (irc *IRC) Configure(c Configuration) error {
|
func (irc *IRC) Configure(c Configuration) error {
|
||||||
|
if irc.conn != nil {
|
||||||
|
irc.Close()
|
||||||
|
}
|
||||||
|
|
||||||
irc.config = c
|
irc.config = c
|
||||||
|
|
||||||
irc.nick = c.GetString("nick")
|
irc.nick = c.GetString("nick")
|
||||||
|
@ -54,7 +58,7 @@ func (irc *IRC) Configure(c Configuration) error {
|
||||||
Port: port,
|
Port: port,
|
||||||
Nick: irc.nick,
|
Nick: irc.nick,
|
||||||
User: irc.nick,
|
User: irc.nick,
|
||||||
Debug: os.Stderr,
|
Out: os.Stderr,
|
||||||
SSL: true,
|
SSL: true,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -132,6 +136,21 @@ func (irc *IRC) Join(roomId RoomID) error {
|
||||||
return nil
|
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) {
|
func (irc *IRC) Leave(roomId RoomID) {
|
||||||
ch, err := irc.checkRoomId(roomId)
|
ch, err := irc.checkRoomId(roomId)
|
||||||
if err != nil {
|
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) {
|
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) {
|
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,
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
4
main.go
4
main.go
|
@ -86,8 +86,8 @@ func main() {
|
||||||
log.Fatalf("Send: %s", err)
|
log.Fatalf("Send: %s", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt.Printf("waiting exit signal")
|
fmt.Printf("waiting exit signal\n")
|
||||||
<-h.exit
|
<-h.exit
|
||||||
fmt.Printf("got exit signal")
|
fmt.Printf("got exit signal\n")
|
||||||
irc.Close()
|
irc.Close()
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue