mirror of
https://github.com/ergochat/ergo.git
synced 2025-12-20 02:00:11 -08:00
Centralise all command handlers in handlers.go
This commit is contained in:
parent
29266ce80f
commit
47d2ce351c
16 changed files with 2629 additions and 2661 deletions
138
irc/monitor.go
138
irc/monitor.go
|
|
@ -5,12 +5,9 @@ package irc
|
|||
|
||||
import (
|
||||
"errors"
|
||||
"strconv"
|
||||
"strings"
|
||||
"sync"
|
||||
|
||||
"github.com/goshuirc/irc-go/ircmsg"
|
||||
"github.com/oragono/oragono/irc/utils"
|
||||
)
|
||||
|
||||
// MonitorManager keeps track of who's monitoring which nicks.
|
||||
|
|
@ -118,138 +115,3 @@ var (
|
|||
"s": monitorStatusHandler,
|
||||
}
|
||||
)
|
||||
|
||||
func monitorHandler(server *Server, client *Client, msg ircmsg.IrcMessage) bool {
|
||||
handler, exists := metadataSubcommands[strings.ToLower(msg.Params[0])]
|
||||
|
||||
if !exists {
|
||||
client.Send(nil, server.name, ERR_UNKNOWNERROR, client.Nick(), "MONITOR", msg.Params[0], client.t("Unknown subcommand"))
|
||||
return false
|
||||
}
|
||||
|
||||
return handler(server, client, msg)
|
||||
}
|
||||
|
||||
func monitorRemoveHandler(server *Server, client *Client, msg ircmsg.IrcMessage) bool {
|
||||
if len(msg.Params) < 2 {
|
||||
client.Send(nil, server.name, ERR_NEEDMOREPARAMS, client.Nick(), msg.Command, client.t("Not enough parameters"))
|
||||
return false
|
||||
}
|
||||
|
||||
targets := strings.Split(msg.Params[1], ",")
|
||||
for _, target := range targets {
|
||||
cfnick, err := CasefoldName(target)
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
server.monitorManager.Remove(client, cfnick)
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
func monitorAddHandler(server *Server, client *Client, msg ircmsg.IrcMessage) bool {
|
||||
if len(msg.Params) < 2 {
|
||||
client.Send(nil, server.name, ERR_NEEDMOREPARAMS, client.Nick(), msg.Command, client.t("Not enough parameters"))
|
||||
return false
|
||||
}
|
||||
|
||||
var online []string
|
||||
var offline []string
|
||||
|
||||
limit := server.Limits().MonitorEntries
|
||||
|
||||
targets := strings.Split(msg.Params[1], ",")
|
||||
for _, target := range targets {
|
||||
// check name length
|
||||
if len(target) < 1 || len(targets) > server.limits.NickLen {
|
||||
continue
|
||||
}
|
||||
|
||||
// add target
|
||||
casefoldedTarget, err := CasefoldName(target)
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
|
||||
err = server.monitorManager.Add(client, casefoldedTarget, limit)
|
||||
if err == ErrMonitorLimitExceeded {
|
||||
client.Send(nil, server.name, ERR_MONLISTFULL, client.Nick(), strconv.Itoa(server.limits.MonitorEntries), strings.Join(targets, ","))
|
||||
break
|
||||
} else if err != nil {
|
||||
continue
|
||||
}
|
||||
|
||||
// add to online / offline lists
|
||||
if targetClient := server.clients.Get(casefoldedTarget); targetClient == nil {
|
||||
offline = append(offline, target)
|
||||
} else {
|
||||
online = append(online, targetClient.Nick())
|
||||
}
|
||||
}
|
||||
|
||||
if len(online) > 0 {
|
||||
client.Send(nil, server.name, RPL_MONONLINE, client.Nick(), strings.Join(online, ","))
|
||||
}
|
||||
if len(offline) > 0 {
|
||||
client.Send(nil, server.name, RPL_MONOFFLINE, client.Nick(), strings.Join(offline, ","))
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
func monitorClearHandler(server *Server, client *Client, msg ircmsg.IrcMessage) bool {
|
||||
server.monitorManager.RemoveAll(client)
|
||||
return false
|
||||
}
|
||||
|
||||
func monitorListHandler(server *Server, client *Client, msg ircmsg.IrcMessage) bool {
|
||||
monitorList := server.monitorManager.List(client)
|
||||
|
||||
var nickList []string
|
||||
for _, cfnick := range monitorList {
|
||||
replynick := cfnick
|
||||
// report the uncasefolded nick if it's available, i.e., the client is online
|
||||
if mclient := server.clients.Get(cfnick); mclient != nil {
|
||||
replynick = mclient.Nick()
|
||||
}
|
||||
nickList = append(nickList, replynick)
|
||||
}
|
||||
|
||||
for _, line := range utils.ArgsToStrings(maxLastArgLength, nickList, ",") {
|
||||
client.Send(nil, server.name, RPL_MONLIST, client.Nick(), line)
|
||||
}
|
||||
|
||||
client.Send(nil, server.name, RPL_ENDOFMONLIST, "End of MONITOR list")
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
func monitorStatusHandler(server *Server, client *Client, msg ircmsg.IrcMessage) bool {
|
||||
var online []string
|
||||
var offline []string
|
||||
|
||||
monitorList := server.monitorManager.List(client)
|
||||
|
||||
for _, name := range monitorList {
|
||||
target := server.clients.Get(name)
|
||||
if target == nil {
|
||||
offline = append(offline, name)
|
||||
} else {
|
||||
online = append(online, target.Nick())
|
||||
}
|
||||
}
|
||||
|
||||
if len(online) > 0 {
|
||||
for _, line := range utils.ArgsToStrings(maxLastArgLength, online, ",") {
|
||||
client.Send(nil, server.name, RPL_MONONLINE, client.Nick(), line)
|
||||
}
|
||||
}
|
||||
if len(offline) > 0 {
|
||||
for _, line := range utils.ArgsToStrings(maxLastArgLength, offline, ",") {
|
||||
client.Send(nil, server.name, RPL_MONOFFLINE, client.Nick(), line)
|
||||
}
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue