Notice, Privmsg and handle server error
This commit is contained in:
parent
3000823a09
commit
d5a4d7ea4a
37
irc.go
37
irc.go
@ -40,7 +40,7 @@ func writer(irc *IRCConnection) {
|
|||||||
var rx_server_msg = regexp.MustCompile("^:([^ ]+) ([^ ]+) ([^ ]+) :(.*)\r\n")
|
var rx_server_msg = regexp.MustCompile("^:([^ ]+) ([^ ]+) ([^ ]+) :(.*)\r\n")
|
||||||
var rx_server_msg_c = regexp.MustCompile("^:([^ ]+) ([^ ]+) ([^ ]+) [@]* ([^ ]+) :(.*)\r\n")
|
var rx_server_msg_c = regexp.MustCompile("^:([^ ]+) ([^ ]+) ([^ ]+) [@]* ([^ ]+) :(.*)\r\n")
|
||||||
var rx_server_msg_p = regexp.MustCompile("^:([^ ]+) ([^ ]+) ([^ ]+) (.*)\r\n")
|
var rx_server_msg_p = regexp.MustCompile("^:([^ ]+) ([^ ]+) ([^ ]+) (.*)\r\n")
|
||||||
var rx_server_cmd = regexp.MustCompile("^([^:]+) :(.*)\r\n") //AUTH NOTICE, PING
|
var rx_server_cmd = regexp.MustCompile("^([^:]+) :(.*)\r\n") //AUTH NOTICE, PING, ERROR
|
||||||
var rx_user_action = regexp.MustCompile("^:([^!]+)!([^@]+)@([^ ]+) ([^ ]+) [:]*(.*)\r\n")
|
var rx_user_action = regexp.MustCompile("^:([^!]+)!([^@]+)@([^ ]+) ([^ ]+) [:]*(.*)\r\n")
|
||||||
var rx_user_msg = regexp.MustCompile("^:([^!]+)!([^@]+)@([^ ]+) ([^ ]+) ([^ ]+) :(.*)\r\n")
|
var rx_user_msg = regexp.MustCompile("^:([^!]+)!([^@]+)@([^ ]+) ([^ ]+) ([^ ]+) :(.*)\r\n")
|
||||||
|
|
||||||
@ -69,9 +69,9 @@ func (irc *IRCConnection) handle_command(msg string) *IRCEvent {
|
|||||||
e.Channel = matches[5];
|
e.Channel = matches[5];
|
||||||
switch matches[4] {
|
switch matches[4] {
|
||||||
case "JOIN":
|
case "JOIN":
|
||||||
e.Code = IRC_JOIN;
|
e.Code = IRC_JOIN
|
||||||
case "MODE":
|
case "MODE":
|
||||||
e.Code = IRC_CHAN_MODE;
|
e.Code = IRC_CHAN_MODE
|
||||||
}
|
}
|
||||||
return e;
|
return e;
|
||||||
} else if matches := rx_server_msg_c.MatchStrings(msg); len(matches) == 6 {
|
} else if matches := rx_server_msg_c.MatchStrings(msg); len(matches) == 6 {
|
||||||
@ -81,9 +81,9 @@ func (irc *IRCConnection) handle_command(msg string) *IRCEvent {
|
|||||||
e.Message = matches[5];
|
e.Message = matches[5];
|
||||||
switch matches[2] {
|
switch matches[2] {
|
||||||
case "366":
|
case "366":
|
||||||
e.Code = IRC_CHAN_NICKLIST;
|
e.Code = IRC_CHAN_NICKLIST
|
||||||
case "332":
|
case "332":
|
||||||
e.Code = IRC_CHAN_TOPIC;
|
e.Code = IRC_CHAN_TOPIC
|
||||||
}
|
}
|
||||||
return e;
|
return e;
|
||||||
} else if matches := rx_server_msg.MatchStrings(msg); len(matches) == 5 {
|
} else if matches := rx_server_msg.MatchStrings(msg); len(matches) == 5 {
|
||||||
@ -139,15 +139,20 @@ func (irc *IRCConnection) handle_command(msg string) *IRCEvent {
|
|||||||
}
|
}
|
||||||
return e;
|
return e;
|
||||||
} else if matches := rx_server_cmd.MatchStrings(msg); len(matches) == 3 {
|
} else if matches := rx_server_cmd.MatchStrings(msg); len(matches) == 3 {
|
||||||
if matches[1] == "NOTICE AUTH" {
|
switch matches[1] {
|
||||||
|
case "NOTICE AUTH":
|
||||||
e.Code = IRC_NOTICE_AUTH;
|
e.Code = IRC_NOTICE_AUTH;
|
||||||
e.Message = matches[2];
|
e.Message = matches[2];
|
||||||
return e;
|
case "PING":
|
||||||
} else if matches[1] == "PING" {
|
|
||||||
e.Code = IRC_PING;
|
e.Code = IRC_PING;
|
||||||
e.Message = matches[2];
|
e.Message = matches[2];
|
||||||
return e;
|
case "ERROR":
|
||||||
|
e.Code = IRC_PING;
|
||||||
|
e.Message = matches[2];
|
||||||
|
e.Error = os.ErrorString(matches[2]);;
|
||||||
|
irc.perror <- e.Error;
|
||||||
}
|
}
|
||||||
|
return e;
|
||||||
}
|
}
|
||||||
e.Message = msg;
|
e.Message = msg;
|
||||||
e.Code = UNKNOWN;
|
e.Code = UNKNOWN;
|
||||||
@ -172,10 +177,10 @@ func handler(irc *IRCConnection) {
|
|||||||
irc.pwrite <- fmt.Sprintf("PONG %s\r\n", e.Message)
|
irc.pwrite <- fmt.Sprintf("PONG %s\r\n", e.Message)
|
||||||
case IRC_PRIVMSG:
|
case IRC_PRIVMSG:
|
||||||
if e.Message == "\x01VERSION\x01" {
|
if e.Message == "\x01VERSION\x01" {
|
||||||
irc.pwrite <- fmt.Sprintf("NOTICE %s :\x01VERSION GolangBOT (tj)\x01\r\n", e.Sender);
|
irc.pwrite <- fmt.Sprintf("NOTICE %s :\x01VERSION GolangBOT (tj)\x01\r\n", e.Sender)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
irc.EventChan <- e;
|
irc.EventChan <- e;
|
||||||
case error := <-irc.perror:
|
case error := <-irc.perror:
|
||||||
ee := new(IRCEvent);
|
ee := new(IRCEvent);
|
||||||
@ -190,6 +195,14 @@ func (irc *IRCConnection) Join(channel string) {
|
|||||||
irc.pwrite <- fmt.Sprintf("JOIN %s\r\n", channel)
|
irc.pwrite <- fmt.Sprintf("JOIN %s\r\n", channel)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (irc *IRCConnection) Notice(target, message string) {
|
||||||
|
irc.pwrite <- fmt.Sprintf("NOTICE %s :%s\r\n", target, message)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (irc *IRCConnection) Privmsg(target, message string) {
|
||||||
|
irc.pwrite <- fmt.Sprintf("PRIVMSG %s :%s\r\n", target, message)
|
||||||
|
}
|
||||||
|
|
||||||
func IRC(server string, nick string, user string, events chan *IRCEvent) (*IRCConnection, os.Error) {
|
func IRC(server string, nick string, user string, events chan *IRCEvent) (*IRCConnection, os.Error) {
|
||||||
irc := new(IRCConnection);
|
irc := new(IRCConnection);
|
||||||
|
|
||||||
@ -207,5 +220,3 @@ func IRC(server string, nick string, user string, events chan *IRCEvent) (*IRCCo
|
|||||||
go handler(irc);
|
go handler(irc);
|
||||||
return irc, nil;
|
return irc, nil;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user