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
|
package commands
|
||||||
|
|
||||||
/* --- IRC Ports --- */
|
|
||||||
const (
|
|
||||||
INSECURE_PORT = 6667
|
|
||||||
SECURE_PORT = 6697
|
|
||||||
)
|
|
||||||
|
|
||||||
/* --- Prohibited characters in channel names --- */
|
/* --- Prohibited characters in channel names --- */
|
||||||
const ( // do we need this as a client ????
|
const ( // do we need this as a client ????
|
||||||
SPACE = " " // 0x20
|
SPACE = " " // 0x20
|
||||||
@@ -178,14 +172,14 @@ const (
|
|||||||
RPL_TEXT = "304" // irc2 - Not Implemented (TODO:)
|
RPL_TEXT = "304" // irc2 - Not Implemented (TODO:)
|
||||||
RPL_UNAWAY = "305" // RFC1459 - Not Implemented (TODO:)
|
RPL_UNAWAY = "305" // RFC1459 - Not Implemented (TODO:)
|
||||||
RPL_NOWAWAY = "306" // RFC1459 - Not Implemented (TODO:)
|
RPL_NOWAWAY = "306" // RFC1459 - Not Implemented (TODO:)
|
||||||
RPL_WHOISUSER = "311" // RFC1459 - Not Implemented (TODO:)
|
RPL_WHOISUSER = "311" // RFC1459 - Implemented
|
||||||
RPL_WHOISSERVER = "312" // RFC1459 - Not Implemented (TODO:)
|
RPL_WHOISSERVER = "312" // RFC1459 - Implemented
|
||||||
RPL_WHOISOPERATOR = "313" // RFC1459 - Not Implemented (TODO:)
|
RPL_WHOISOPERATOR = "313" // RFC1459 - Not Implemented (TODO:)
|
||||||
RPL_WHOWASUSER = "314" // RFC1459 - Not Implemented (TODO:)
|
RPL_WHOWASUSER = "314" // RFC1459 - Not Implemented (TODO:)
|
||||||
RPL_ENDOFWHO = "315" // RFC1459 - Not Implemented (TODO:)
|
RPL_ENDOFWHO = "315" // RFC1459 - Not Implemented (TODO:)
|
||||||
RPL_WHOISIDLE = "317" // RFC1459 - Not Implemented (TODO:)
|
RPL_WHOISIDLE = "317" // RFC1459 - Implemented
|
||||||
RPL_ENDOFWHOIS = "318" // RFC1459 - Not Implemented (TODO:)
|
RPL_ENDOFWHOIS = "318" // RFC1459 - Implemented
|
||||||
RPL_WHOISCHANNELS = "319" // RFC1459 - Not Implemented (TODO:)
|
RPL_WHOISCHANNELS = "319" // RFC1459 - Implemented
|
||||||
RPL_LISTSTART = "321" // RFC1459 - Not Implemented - Deprecated (TODO:)
|
RPL_LISTSTART = "321" // RFC1459 - Not Implemented - Deprecated (TODO:)
|
||||||
RPL_LIST = "322" // RFC1459 - Not Implemented (TODO:)
|
RPL_LIST = "322" // RFC1459 - Not Implemented (TODO:)
|
||||||
RPL_LISTEND = "323" // RFC1459 - Not Implemented (TODO:)
|
RPL_LISTEND = "323" // RFC1459 - Not Implemented (TODO:)
|
||||||
@@ -220,6 +214,8 @@ const (
|
|||||||
RPL_ENDOFINFO = "374" // RFC1459 - Not Implemented (TODO:)
|
RPL_ENDOFINFO = "374" // RFC1459 - Not Implemented (TODO:)
|
||||||
RPL_MOTDSTART = "375" // RFC1459 - Implemented
|
RPL_MOTDSTART = "375" // RFC1459 - Implemented
|
||||||
RPL_ENDOFMOTD = "376" // RFC1459 - Not Implemented (TODO:)
|
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_YOUREOPER = "381" // RFC1459 - Not Implemented (TODO:)
|
||||||
RPL_REHASHING = "382" // RFC1459 - Not Implemented (TODO:)
|
RPL_REHASHING = "382" // RFC1459 - Not Implemented (TODO:)
|
||||||
RPL_YOURSERVICE = "383" // RFC2812 - Not Implemented (TODO:)
|
RPL_YOURSERVICE = "383" // RFC2812 - Not Implemented (TODO:)
|
||||||
@@ -232,7 +228,7 @@ const (
|
|||||||
|
|
||||||
ERR_UNKNOWNERROR = "400" // ??????? - Not Implemented (TODO:)
|
ERR_UNKNOWNERROR = "400" // ??????? - Not Implemented (TODO:)
|
||||||
ERR_NOSUCHNICK = "401" // RFC1459 - 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_NOSUCHCHANNEL = "403" // RFC1459 - Not Implemented (TODO:)
|
||||||
ERR_CANNOTSENDTOCHAN = "404" // RFC1459 - Not Implemented (TODO:)
|
ERR_CANNOTSENDTOCHAN = "404" // RFC1459 - Not Implemented (TODO:)
|
||||||
ERR_TOOMANYCHANNELS = "405" // RFC1459 - Not Implemented (TODO:)
|
ERR_TOOMANYCHANNELS = "405" // RFC1459 - Not Implemented (TODO:)
|
||||||
@@ -248,7 +244,7 @@ const (
|
|||||||
ERR_NOMOTD = "422" // RFC1459 - Not Implemented (TODO:)
|
ERR_NOMOTD = "422" // RFC1459 - Not Implemented (TODO:)
|
||||||
ERR_NOADMININFO = "423" // RFC1459 - Not Implemented (TODO:)
|
ERR_NOADMININFO = "423" // RFC1459 - Not Implemented (TODO:)
|
||||||
ERR_FILEERROR = "424" // 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_ERRONEUSNICKNAME = "432" // RFC1459 - Not Implemented (TODO:)
|
||||||
ERR_NICKNAMEINUSE = "433" // RFC1459 - Not Implemented (TODO:)
|
ERR_NICKNAMEINUSE = "433" // RFC1459 - Not Implemented (TODO:)
|
||||||
ERR_NICKCOLLISION = "436" // RFC1459 - Not Implemented (TODO:)
|
ERR_NICKCOLLISION = "436" // RFC1459 - Not Implemented (TODO:)
|
||||||
@@ -260,8 +256,8 @@ const (
|
|||||||
ERR_SUMMONDISABLED = "445" // RFC1459 - Not Implemented (TODO:)
|
ERR_SUMMONDISABLED = "445" // RFC1459 - Not Implemented (TODO:)
|
||||||
ERR_USERSDISABLED = "446" // RFC1459 - Not Implemented (TODO:)
|
ERR_USERSDISABLED = "446" // RFC1459 - Not Implemented (TODO:)
|
||||||
ERR_NOTREGISTERED = "451" // RFC1459 - Not Implemented (TODO:)
|
ERR_NOTREGISTERED = "451" // RFC1459 - Not Implemented (TODO:)
|
||||||
ERR_NEEDMOREPARAMS = "461" // RFC1459 - Not Implemented (TODO:)
|
ERR_NEEDMOREPARAMS = "461" // RFC1459 - Implemented
|
||||||
ERR_ALREADYREGISTERED = "462" // RFC1459 - Not Implemented (TODO:)
|
ERR_ALREADYREGISTERED = "462" // RFC1459 - Implemented
|
||||||
ERR_NOPERMFORHOST = "463" // RFC1459 - Not Implemented (TODO:)
|
ERR_NOPERMFORHOST = "463" // RFC1459 - Not Implemented (TODO:)
|
||||||
ERR_PASSWDMISMATCH = "464" // RFC1459 - Not Implemented (TODO:)
|
ERR_PASSWDMISMATCH = "464" // RFC1459 - Not Implemented (TODO:)
|
||||||
ERR_YOUREBANNEDCREEP = "465" // RFC1459 - Not Implemented (TODO:)
|
ERR_YOUREBANNEDCREEP = "465" // RFC1459 - Not Implemented (TODO:)
|
||||||
|
|||||||
@@ -21,7 +21,9 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"log"
|
"log"
|
||||||
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/illusionman1212/gorc/cmds"
|
"github.com/illusionman1212/gorc/cmds"
|
||||||
"github.com/illusionman1212/gorc/irc"
|
"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)
|
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) {
|
func handleNAMREPLY(msg parser.IRCMessage, client *irc.Client) {
|
||||||
// TODO: do i need these
|
// TODO: do i need these
|
||||||
// client := msg.Parameters[0]
|
// client := msg.Parameters[0]
|
||||||
@@ -343,6 +434,72 @@ func handleMOTD(msg parser.IRCMessage, client *irc.Client) {
|
|||||||
client.Channels[0].AppendMsg(msg.Timestamp, messageLine, msgOpts)
|
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) {
|
func HandleCommand(msg parser.IRCMessage, client *irc.Client) {
|
||||||
// TODO: handle different commands
|
// TODO: handle different commands
|
||||||
switch msg.Command {
|
switch msg.Command {
|
||||||
@@ -378,6 +535,16 @@ func HandleCommand(msg parser.IRCMessage, client *irc.Client) {
|
|||||||
handleLOCALUSERS(msg, client)
|
handleLOCALUSERS(msg, client)
|
||||||
case commands.RPL_GLOBALUSERS:
|
case commands.RPL_GLOBALUSERS:
|
||||||
handleGLOBALUSERS(msg, client)
|
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:
|
case commands.RPL_NAMREPLY:
|
||||||
handleNAMREPLY(msg, client)
|
handleNAMREPLY(msg, client)
|
||||||
case commands.RPL_ENDOFNAMES:
|
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
|
// start a timeout and update said timeout on every RPL_MOTD
|
||||||
// and log an error if timeout ends without receiving this command.
|
// 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:
|
default:
|
||||||
fullMsg := fmt.Sprintf(
|
fullMsg := fmt.Sprintf(
|
||||||
"%s %s %s %s",
|
"%s %s %s %s",
|
||||||
|
|||||||
Reference in New Issue
Block a user