mirror of
https://github.com/IllusionMan1212/gorc.git
synced 2026-10-24 02:12:33 +00:00
feat: implement some RFC1459 numerics and errors
This commit is contained in:
+11
-15
@@ -16,12 +16,6 @@
|
||||
|
||||
package commands
|
||||
|
||||
/* --- IRC Ports --- */
|
||||
const (
|
||||
INSECURE_PORT = 6667
|
||||
SECURE_PORT = 6697
|
||||
)
|
||||
|
||||
/* --- Prohibited characters in channel names --- */
|
||||
const ( // do we need this as a client ????
|
||||
SPACE = " " // 0x20
|
||||
@@ -178,14 +172,14 @@ const (
|
||||
RPL_TEXT = "304" // irc2 - Not Implemented (TODO:)
|
||||
RPL_UNAWAY = "305" // RFC1459 - Not Implemented (TODO:)
|
||||
RPL_NOWAWAY = "306" // RFC1459 - Not Implemented (TODO:)
|
||||
RPL_WHOISUSER = "311" // RFC1459 - Not Implemented (TODO:)
|
||||
RPL_WHOISSERVER = "312" // RFC1459 - Not Implemented (TODO:)
|
||||
RPL_WHOISUSER = "311" // RFC1459 - Implemented
|
||||
RPL_WHOISSERVER = "312" // RFC1459 - Implemented
|
||||
RPL_WHOISOPERATOR = "313" // RFC1459 - Not Implemented (TODO:)
|
||||
RPL_WHOWASUSER = "314" // RFC1459 - Not Implemented (TODO:)
|
||||
RPL_ENDOFWHO = "315" // RFC1459 - Not Implemented (TODO:)
|
||||
RPL_WHOISIDLE = "317" // RFC1459 - Not Implemented (TODO:)
|
||||
RPL_ENDOFWHOIS = "318" // RFC1459 - Not Implemented (TODO:)
|
||||
RPL_WHOISCHANNELS = "319" // RFC1459 - Not Implemented (TODO:)
|
||||
RPL_WHOISIDLE = "317" // RFC1459 - Implemented
|
||||
RPL_ENDOFWHOIS = "318" // RFC1459 - Implemented
|
||||
RPL_WHOISCHANNELS = "319" // RFC1459 - Implemented
|
||||
RPL_LISTSTART = "321" // RFC1459 - Not Implemented - Deprecated (TODO:)
|
||||
RPL_LIST = "322" // RFC1459 - Not Implemented (TODO:)
|
||||
RPL_LISTEND = "323" // RFC1459 - Not Implemented (TODO:)
|
||||
@@ -220,6 +214,8 @@ const (
|
||||
RPL_ENDOFINFO = "374" // RFC1459 - Not Implemented (TODO:)
|
||||
RPL_MOTDSTART = "375" // RFC1459 - Implemented
|
||||
RPL_ENDOFMOTD = "376" // RFC1459 - Not Implemented (TODO:)
|
||||
RPL_WHOISHOST = "378" // ??????? - Implemented - Has Conflicts
|
||||
RPL_WHOISMODES = "379" // ??????? - Implemented - Has Conflicts
|
||||
RPL_YOUREOPER = "381" // RFC1459 - Not Implemented (TODO:)
|
||||
RPL_REHASHING = "382" // RFC1459 - Not Implemented (TODO:)
|
||||
RPL_YOURSERVICE = "383" // RFC2812 - Not Implemented (TODO:)
|
||||
@@ -232,7 +228,7 @@ const (
|
||||
|
||||
ERR_UNKNOWNERROR = "400" // ??????? - Not Implemented (TODO:)
|
||||
ERR_NOSUCHNICK = "401" // RFC1459 - Not Implemented (TODO:)
|
||||
ERR_NOSUCHSERVER = "402" // RFC1459 - Not Implemented (TODO:)
|
||||
ERR_NOSUCHSERVER = "402" // RFC1459 - Implemented
|
||||
ERR_NOSUCHCHANNEL = "403" // RFC1459 - Not Implemented (TODO:)
|
||||
ERR_CANNOTSENDTOCHAN = "404" // RFC1459 - Not Implemented (TODO:)
|
||||
ERR_TOOMANYCHANNELS = "405" // RFC1459 - Not Implemented (TODO:)
|
||||
@@ -248,7 +244,7 @@ const (
|
||||
ERR_NOMOTD = "422" // RFC1459 - Not Implemented (TODO:)
|
||||
ERR_NOADMININFO = "423" // RFC1459 - Not Implemented (TODO:)
|
||||
ERR_FILEERROR = "424" // RFC1459 - Not Implemented (TODO:)
|
||||
ERR_NONICKNAMEGIVEN = "431" // RFC1459 - Not Implemented (TODO:)
|
||||
ERR_NONICKNAMEGIVEN = "431" // RFC1459 - Implemented
|
||||
ERR_ERRONEUSNICKNAME = "432" // RFC1459 - Not Implemented (TODO:)
|
||||
ERR_NICKNAMEINUSE = "433" // RFC1459 - Not Implemented (TODO:)
|
||||
ERR_NICKCOLLISION = "436" // RFC1459 - Not Implemented (TODO:)
|
||||
@@ -260,8 +256,8 @@ const (
|
||||
ERR_SUMMONDISABLED = "445" // RFC1459 - Not Implemented (TODO:)
|
||||
ERR_USERSDISABLED = "446" // RFC1459 - Not Implemented (TODO:)
|
||||
ERR_NOTREGISTERED = "451" // RFC1459 - Not Implemented (TODO:)
|
||||
ERR_NEEDMOREPARAMS = "461" // RFC1459 - Not Implemented (TODO:)
|
||||
ERR_ALREADYREGISTERED = "462" // RFC1459 - Not Implemented (TODO:)
|
||||
ERR_NEEDMOREPARAMS = "461" // RFC1459 - Implemented
|
||||
ERR_ALREADYREGISTERED = "462" // RFC1459 - Implemented
|
||||
ERR_NOPERMFORHOST = "463" // RFC1459 - Not Implemented (TODO:)
|
||||
ERR_PASSWDMISMATCH = "464" // RFC1459 - Not Implemented (TODO:)
|
||||
ERR_YOUREBANNEDCREEP = "465" // RFC1459 - Not Implemented (TODO:)
|
||||
|
||||
@@ -21,7 +21,9 @@ import (
|
||||
"fmt"
|
||||
"io"
|
||||
"log"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/illusionman1212/gorc/cmds"
|
||||
"github.com/illusionman1212/gorc/irc"
|
||||
@@ -291,6 +293,95 @@ func handleGLOBALUSERS(msg parser.IRCMessage, client *irc.Client) {
|
||||
client.Channels[0].AppendMsg(msg.Timestamp, message, msgOpts)
|
||||
}
|
||||
|
||||
func handleWHOISUSER(msg parser.IRCMessage, client *irc.Client) {
|
||||
nick := msg.Parameters[1]
|
||||
user := msg.Parameters[2]
|
||||
host := msg.Parameters[3]
|
||||
realName := msg.Parameters[5]
|
||||
|
||||
msgOpts := irc.MsgFmtOpts{
|
||||
WithTimestamp: true,
|
||||
AsServerMsg: true,
|
||||
}
|
||||
|
||||
message := fmt.Sprintf(
|
||||
"Nick: %s | User: %s | Host: %s | Real name: %s",
|
||||
nick,
|
||||
user,
|
||||
host,
|
||||
realName,
|
||||
)
|
||||
|
||||
client.Channels[0].AppendMsg(msg.Timestamp, "WHOIS Information", msgOpts)
|
||||
client.Channels[0].AppendMsg(msg.Timestamp, message, msgOpts)
|
||||
}
|
||||
|
||||
func handleWHOISSERVER(msg parser.IRCMessage, client *irc.Client) {
|
||||
server := msg.Parameters[2]
|
||||
serverInfo := msg.Parameters[3]
|
||||
|
||||
msgOpts := irc.MsgFmtOpts{
|
||||
WithTimestamp: true,
|
||||
AsServerMsg: true,
|
||||
}
|
||||
|
||||
message := fmt.Sprintf(
|
||||
"server: %s [%s]",
|
||||
server,
|
||||
serverInfo,
|
||||
)
|
||||
|
||||
client.Channels[0].AppendMsg(msg.Timestamp, message, msgOpts)
|
||||
}
|
||||
|
||||
func handleWHOISIDLE(msg parser.IRCMessage, client *irc.Client) {
|
||||
idleSeconds := msg.Parameters[2]
|
||||
connectedTimestamp, err := strconv.ParseInt(msg.Parameters[3], 10, 64)
|
||||
|
||||
if err != nil {
|
||||
// TODO: return this err and handle it in the parent
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
msgOpts := irc.MsgFmtOpts{
|
||||
WithTimestamp: true,
|
||||
AsServerMsg: true,
|
||||
}
|
||||
|
||||
since := time.Unix(connectedTimestamp, 0)
|
||||
|
||||
message := fmt.Sprintf(
|
||||
"idle for: %s seconds, connected since: %s",
|
||||
idleSeconds,
|
||||
since.Format(time.ANSIC),
|
||||
)
|
||||
client.Channels[0].AppendMsg(msg.Timestamp, message, msgOpts)
|
||||
}
|
||||
|
||||
func handleENDOFWHOIS(msg parser.IRCMessage, client *irc.Client) {
|
||||
message := msg.Parameters[2]
|
||||
|
||||
msgOpts := irc.MsgFmtOpts{
|
||||
WithTimestamp: true,
|
||||
AsServerMsg: true,
|
||||
}
|
||||
|
||||
client.Channels[0].AppendMsg(msg.Timestamp, message, msgOpts)
|
||||
}
|
||||
|
||||
func handleWHOISCHANNELS(msg parser.IRCMessage, client *irc.Client) {
|
||||
chans := msg.Parameters[2]
|
||||
|
||||
msgOpts := irc.MsgFmtOpts{
|
||||
WithTimestamp: true,
|
||||
AsServerMsg: true,
|
||||
}
|
||||
|
||||
message := fmt.Sprintf("channels: %s", chans)
|
||||
|
||||
client.Channels[0].AppendMsg(msg.Timestamp, message, msgOpts)
|
||||
}
|
||||
|
||||
func handleNAMREPLY(msg parser.IRCMessage, client *irc.Client) {
|
||||
// TODO: do i need these
|
||||
// client := msg.Parameters[0]
|
||||
@@ -343,6 +434,72 @@ func handleMOTD(msg parser.IRCMessage, client *irc.Client) {
|
||||
client.Channels[0].AppendMsg(msg.Timestamp, messageLine, msgOpts)
|
||||
}
|
||||
|
||||
func handleWHOISHOST(msg parser.IRCMessage, client *irc.Client) {
|
||||
message := msg.Parameters[1] + " " + msg.Parameters[2]
|
||||
|
||||
msgOpts := irc.MsgFmtOpts{
|
||||
WithTimestamp: true,
|
||||
AsServerMsg: true,
|
||||
}
|
||||
|
||||
client.Channels[0].AppendMsg(msg.Timestamp, message, msgOpts)
|
||||
}
|
||||
|
||||
func handleWHOISMODES(msg parser.IRCMessage, client *irc.Client) {
|
||||
message := msg.Parameters[1] + " " + msg.Parameters[2]
|
||||
|
||||
msgOpts := irc.MsgFmtOpts{
|
||||
WithTimestamp: true,
|
||||
AsServerMsg: true,
|
||||
}
|
||||
|
||||
client.Channels[0].AppendMsg(msg.Timestamp, message, msgOpts)
|
||||
}
|
||||
|
||||
func handleNOSUCHSERVER(msg parser.IRCMessage, client *irc.Client) {
|
||||
message := msg.Parameters[1] + " " + msg.Parameters[2]
|
||||
|
||||
msgOpts := irc.MsgFmtOpts{
|
||||
WithTimestamp: true,
|
||||
AsServerMsg: true,
|
||||
}
|
||||
|
||||
client.Channels[0].AppendMsg(msg.Timestamp, message, msgOpts)
|
||||
}
|
||||
|
||||
func handleNONICKNAMEGIVEN(msg parser.IRCMessage, client *irc.Client) {
|
||||
message := msg.Parameters[1]
|
||||
|
||||
msgOpts := irc.MsgFmtOpts{
|
||||
WithTimestamp: true,
|
||||
AsServerMsg: true,
|
||||
}
|
||||
|
||||
client.Channels[0].AppendMsg(msg.Timestamp, message, msgOpts)
|
||||
}
|
||||
|
||||
func handleNEEDMOREPARAMS(msg parser.IRCMessage, client *irc.Client) {
|
||||
message := msg.Parameters[1] + " " + msg.Parameters[2]
|
||||
|
||||
msgOpts := irc.MsgFmtOpts{
|
||||
WithTimestamp: true,
|
||||
AsServerMsg: true,
|
||||
}
|
||||
|
||||
client.Channels[0].AppendMsg(msg.Timestamp, message, msgOpts)
|
||||
}
|
||||
|
||||
func handleALREADYREGISTERED(msg parser.IRCMessage, client *irc.Client) {
|
||||
message := msg.Parameters[1]
|
||||
|
||||
msgOpts := irc.MsgFmtOpts{
|
||||
WithTimestamp: true,
|
||||
AsServerMsg: true,
|
||||
}
|
||||
|
||||
client.Channels[0].AppendMsg(msg.Timestamp, message, msgOpts)
|
||||
}
|
||||
|
||||
func HandleCommand(msg parser.IRCMessage, client *irc.Client) {
|
||||
// TODO: handle different commands
|
||||
switch msg.Command {
|
||||
@@ -378,6 +535,16 @@ func HandleCommand(msg parser.IRCMessage, client *irc.Client) {
|
||||
handleLOCALUSERS(msg, client)
|
||||
case commands.RPL_GLOBALUSERS:
|
||||
handleGLOBALUSERS(msg, client)
|
||||
case commands.RPL_WHOISUSER:
|
||||
handleWHOISUSER(msg, client)
|
||||
case commands.RPL_WHOISSERVER:
|
||||
handleWHOISSERVER(msg, client)
|
||||
case commands.RPL_WHOISIDLE:
|
||||
handleWHOISIDLE(msg, client)
|
||||
case commands.RPL_ENDOFWHOIS:
|
||||
handleENDOFWHOIS(msg, client)
|
||||
case commands.RPL_WHOISCHANNELS:
|
||||
handleWHOISCHANNELS(msg, client)
|
||||
case commands.RPL_NAMREPLY:
|
||||
handleNAMREPLY(msg, client)
|
||||
case commands.RPL_ENDOFNAMES:
|
||||
@@ -396,6 +563,18 @@ func HandleCommand(msg parser.IRCMessage, client *irc.Client) {
|
||||
|
||||
// start a timeout and update said timeout on every RPL_MOTD
|
||||
// and log an error if timeout ends without receiving this command.
|
||||
case commands.RPL_WHOISHOST:
|
||||
handleWHOISHOST(msg, client)
|
||||
case commands.RPL_WHOISMODES:
|
||||
handleWHOISMODES(msg, client)
|
||||
case commands.ERR_NOSUCHSERVER:
|
||||
handleNOSUCHSERVER(msg, client)
|
||||
case commands.ERR_NONICKNAMEGIVEN:
|
||||
handleNONICKNAMEGIVEN(msg, client)
|
||||
case commands.ERR_NEEDMOREPARAMS:
|
||||
handleNEEDMOREPARAMS(msg, client)
|
||||
case commands.ERR_ALREADYREGISTERED:
|
||||
handleALREADYREGISTERED(msg, client)
|
||||
default:
|
||||
fullMsg := fmt.Sprintf(
|
||||
"%s %s %s %s",
|
||||
|
||||
Reference in New Issue
Block a user