rudimentary (broken) invite support

This commit is contained in:
Jeremy Latt 2012-12-09 13:47:02 -08:00
parent 55f7c89468
commit d7d6263e35
5 changed files with 244 additions and 46 deletions

View file

@ -15,6 +15,19 @@ type Message interface {
var (
ErrNotEnoughArgs = errors.New("not enough arguments")
ErrUModeUnknownFlag = errors.New("unknown umode flag")
parseCommandFuncs = map[string]ParseFunc{
"INVITE": NewInviteMessage,
"JOIN": NewJoinMessage,
"MODE": NewModeMessage,
"NICK": NewNickMessage,
"PART": NewPartMessage,
"PING": NewPingMessage,
"PONG": NewPongMessage,
"PRIVMSG": NewPrivMsgMessage,
"QUIT": NewQuitMessage,
"TOPIC": NewTopicMessage,
"USER": NewUserMessage,
}
)
// unknown
@ -319,3 +332,36 @@ func (m *TopicMessage) Handle(s *Server, c *Client) {
channel.ChangeTopic(c, m.topic)
}
}
// INVITE <nickname> <channel>
type InviteMessage struct {
nickname string
channel string
}
func NewInviteMessage(args []string) (Message, error) {
if len(args) < 2 {
return nil, ErrNotEnoughArgs
}
return &InviteMessage{
nickname: args[0],
channel: args[1],
}, nil
}
func (m *InviteMessage) Handle(s *Server, c *Client) {
channel := s.channels[m.channel]
if channel == nil {
c.send <- ErrNoSuchNick(s, m.channel)
return
}
invitee := s.nicks[m.nickname]
if invitee == nil {
c.send <- ErrNoSuchNick(s, m.nickname)
return
}
channel.Invite(c, invitee)
}