|
@@ -138,7 +138,7 @@ func (server *Server) sendLoginSnomask(nickMask, accountName string) {
|
138
|
138
|
}
|
139
|
139
|
|
140
|
140
|
// AUTHENTICATE [<mechanism>|<data>|*]
|
141
|
|
-func authenticateHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool {
|
|
141
|
+func authenticateHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
|
142
|
142
|
session := rb.session
|
143
|
143
|
config := server.Config()
|
144
|
144
|
details := client.Details()
|
|
@@ -340,7 +340,7 @@ func authExternalHandler(server *Server, client *Client, mechanism string, value
|
340
|
340
|
}
|
341
|
341
|
|
342
|
342
|
// AWAY [<message>]
|
343
|
|
-func awayHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool {
|
|
343
|
+func awayHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
|
344
|
344
|
var isAway bool
|
345
|
345
|
var awayMessage string
|
346
|
346
|
if len(msg.Params) > 0 {
|
|
@@ -377,7 +377,7 @@ func dispatchAwayNotify(client *Client, isAway bool, awayMessage string) {
|
377
|
377
|
}
|
378
|
378
|
|
379
|
379
|
// BATCH {+,-}reference-tag type [params...]
|
380
|
|
-func batchHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool {
|
|
380
|
+func batchHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
|
381
|
381
|
tag := msg.Params[0]
|
382
|
382
|
fail := false
|
383
|
383
|
sendErrors := rb.session.batch.command != "NOTICE"
|
|
@@ -421,7 +421,7 @@ func batchHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *Res
|
421
|
421
|
}
|
422
|
422
|
|
423
|
423
|
// BRB [message]
|
424
|
|
-func brbHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool {
|
|
424
|
+func brbHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
|
425
|
425
|
success, duration := client.brbTimer.Enable()
|
426
|
426
|
if !success {
|
427
|
427
|
rb.Add(nil, server.name, "FAIL", "BRB", "CANNOT_BRB", client.t("Your client does not support BRB"))
|
|
@@ -446,7 +446,7 @@ func brbHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *Respo
|
446
|
446
|
}
|
447
|
447
|
|
448
|
448
|
// CAP <subcmd> [<caps>]
|
449
|
|
-func capHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool {
|
|
449
|
+func capHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
|
450
|
450
|
details := client.Details()
|
451
|
451
|
subCommand := strings.ToUpper(msg.Params[0])
|
452
|
452
|
toAdd := caps.NewSet()
|
|
@@ -564,7 +564,7 @@ func capHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *Respo
|
564
|
564
|
// e.g., CHATHISTORY #ircv3 AFTER id=ytNBbt565yt4r3err3 10
|
565
|
565
|
// CHATHISTORY <target> BETWEEN <query> <query> <direction> [<limit>]
|
566
|
566
|
// e.g., CHATHISTORY #ircv3 BETWEEN timestamp=YYYY-MM-DDThh:mm:ss.sssZ timestamp=YYYY-MM-DDThh:mm:ss.sssZ + 100
|
567
|
|
-func chathistoryHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) (exiting bool) {
|
|
567
|
+func chathistoryHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) (exiting bool) {
|
568
|
568
|
var items []history.Item
|
569
|
569
|
unknown_command := false
|
570
|
570
|
var target string
|
|
@@ -702,7 +702,7 @@ func chathistoryHandler(server *Server, client *Client, msg ircmsg.IrcMessage, r
|
702
|
702
|
}
|
703
|
703
|
|
704
|
704
|
// DEBUG <subcmd>
|
705
|
|
-func debugHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool {
|
|
705
|
+func debugHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
|
706
|
706
|
param := strings.ToUpper(msg.Params[0])
|
707
|
707
|
|
708
|
708
|
switch param {
|
|
@@ -775,7 +775,7 @@ func debugHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *Res
|
775
|
775
|
return false
|
776
|
776
|
}
|
777
|
777
|
|
778
|
|
-func defconHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool {
|
|
778
|
+func defconHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
|
779
|
779
|
if len(msg.Params) > 0 {
|
780
|
780
|
level, err := strconv.Atoi(msg.Params[0])
|
781
|
781
|
if err == nil && 1 <= level && level <= 5 {
|
|
@@ -823,7 +823,7 @@ func formatBanForListing(client *Client, key string, info IPBanInfo) string {
|
823
|
823
|
|
824
|
824
|
// DLINE [ANDKILL] [MYSELF] [duration] <ip>/<net> [ON <server>] [reason [| oper reason]]
|
825
|
825
|
// DLINE LIST
|
826
|
|
-func dlineHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool {
|
|
826
|
+func dlineHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
|
827
|
827
|
// check oper permissions
|
828
|
828
|
oper := client.Oper()
|
829
|
829
|
if !oper.HasRoleCapab("ban") {
|
|
@@ -962,7 +962,7 @@ func dlineHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *Res
|
962
|
962
|
}
|
963
|
963
|
|
964
|
964
|
// EXTJWT <target> [service_name]
|
965
|
|
-func extjwtHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool {
|
|
965
|
+func extjwtHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
|
966
|
966
|
accountName := client.AccountName()
|
967
|
967
|
if accountName == "*" {
|
968
|
968
|
accountName = ""
|
|
@@ -1030,7 +1030,7 @@ func extjwtHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *Re
|
1030
|
1030
|
|
1031
|
1031
|
// HELP [<query>]
|
1032
|
1032
|
// HELPOP [<query>]
|
1033
|
|
-func helpHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool {
|
|
1033
|
+func helpHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
|
1034
|
1034
|
if len(msg.Params) == 0 {
|
1035
|
1035
|
client.sendHelp("HELPOP", client.t(`HELPOP <argument>
|
1036
|
1036
|
|
|
@@ -1065,7 +1065,7 @@ Get an explanation of <argument>, or "index" for a list of help topics.`), rb)
|
1065
|
1065
|
// e.g., HISTORY #ubuntu 10
|
1066
|
1066
|
// HISTORY me 15
|
1067
|
1067
|
// HISTORY #darwin 1h
|
1068
|
|
-func historyHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool {
|
|
1068
|
+func historyHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
|
1069
|
1069
|
config := server.Config()
|
1070
|
1070
|
if !config.History.Enabled {
|
1071
|
1071
|
rb.Notice(client.t("This command has been disabled by the server administrators"))
|
|
@@ -1093,7 +1093,7 @@ func historyHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *R
|
1093
|
1093
|
}
|
1094
|
1094
|
|
1095
|
1095
|
// INFO
|
1096
|
|
-func infoHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool {
|
|
1096
|
+func infoHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
|
1097
|
1097
|
nick := client.Nick()
|
1098
|
1098
|
// we do the below so that the human-readable lines in info can be translated.
|
1099
|
1099
|
for _, line := range infoString1 {
|
|
@@ -1133,7 +1133,7 @@ func infoHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *Resp
|
1133
|
1133
|
|
1134
|
1134
|
// INVITE <nickname> <channel>
|
1135
|
1135
|
// UNINVITE <nickname> <channel>
|
1136
|
|
-func inviteHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool {
|
|
1136
|
+func inviteHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
|
1137
|
1137
|
invite := msg.Command == "INVITE"
|
1138
|
1138
|
nickname := msg.Params[0]
|
1139
|
1139
|
channelName := msg.Params[1]
|
|
@@ -1160,7 +1160,7 @@ func inviteHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *Re
|
1160
|
1160
|
}
|
1161
|
1161
|
|
1162
|
1162
|
// ISON <nick>{ <nick>}
|
1163
|
|
-func isonHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool {
|
|
1163
|
+func isonHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
|
1164
|
1164
|
var nicks = msg.Params
|
1165
|
1165
|
|
1166
|
1166
|
ison := make([]string, 0, len(msg.Params))
|
|
@@ -1176,7 +1176,7 @@ func isonHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *Resp
|
1176
|
1176
|
}
|
1177
|
1177
|
|
1178
|
1178
|
// JOIN <channel>{,<channel>} [<key>{,<key>}]
|
1179
|
|
-func joinHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool {
|
|
1179
|
+func joinHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
|
1180
|
1180
|
// #1417: allow `JOIN 0` with a confirmation code
|
1181
|
1181
|
if msg.Params[0] == "0" {
|
1182
|
1182
|
expectedCode := utils.ConfirmationCode("", rb.session.ctime)
|
|
@@ -1253,7 +1253,7 @@ func sendJoinError(client *Client, name string, rb *ResponseBuffer, err error) {
|
1253
|
1253
|
}
|
1254
|
1254
|
|
1255
|
1255
|
// SAJOIN [nick] #channel{,#channel}
|
1256
|
|
-func sajoinHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool {
|
|
1256
|
+func sajoinHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
|
1257
|
1257
|
var target *Client
|
1258
|
1258
|
var channelString string
|
1259
|
1259
|
if strings.HasPrefix(msg.Params[0], "#") {
|
|
@@ -1288,7 +1288,7 @@ func sajoinHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *Re
|
1288
|
1288
|
}
|
1289
|
1289
|
|
1290
|
1290
|
// KICK <channel>{,<channel>} <user>{,<user>} [<comment>]
|
1291
|
|
-func kickHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool {
|
|
1291
|
+func kickHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
|
1292
|
1292
|
hasPrivs := client.HasRoleCapabs("samode")
|
1293
|
1293
|
channels := strings.Split(msg.Params[0], ",")
|
1294
|
1294
|
users := strings.Split(msg.Params[1], ",")
|
|
@@ -1339,7 +1339,7 @@ func kickHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *Resp
|
1339
|
1339
|
}
|
1340
|
1340
|
|
1341
|
1341
|
// KILL <nickname> <comment>
|
1342
|
|
-func killHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool {
|
|
1342
|
+func killHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
|
1343
|
1343
|
nickname := msg.Params[0]
|
1344
|
1344
|
comment := "<no reason supplied>"
|
1345
|
1345
|
if len(msg.Params) > 1 {
|
|
@@ -1365,7 +1365,7 @@ func killHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *Resp
|
1365
|
1365
|
|
1366
|
1366
|
// KLINE [ANDKILL] [MYSELF] [duration] <mask> [ON <server>] [reason [| oper reason]]
|
1367
|
1367
|
// KLINE LIST
|
1368
|
|
-func klineHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool {
|
|
1368
|
+func klineHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
|
1369
|
1369
|
details := client.Details()
|
1370
|
1370
|
// check oper permissions
|
1371
|
1371
|
oper := client.Oper()
|
|
@@ -1507,7 +1507,7 @@ func klineHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *Res
|
1507
|
1507
|
}
|
1508
|
1508
|
|
1509
|
1509
|
// LANGUAGE <code>{ <code>}
|
1510
|
|
-func languageHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool {
|
|
1510
|
+func languageHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
|
1511
|
1511
|
nick := client.Nick()
|
1512
|
1512
|
alreadyDoneLanguages := make(map[string]bool)
|
1513
|
1513
|
var appliedLanguages []string
|
|
@@ -1561,7 +1561,7 @@ func languageHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *
|
1561
|
1561
|
}
|
1562
|
1562
|
|
1563
|
1563
|
// LIST [<channel>{,<channel>}] [<elistcond>{,<elistcond>}]
|
1564
|
|
-func listHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool {
|
|
1564
|
+func listHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
|
1565
|
1565
|
config := server.Config()
|
1566
|
1566
|
if time.Since(client.ctime) < config.Channels.ListDelay && client.Account() == "" && !client.HasMode(modes.Operator) {
|
1567
|
1567
|
remaining := time.Until(client.ctime.Add(config.Channels.ListDelay))
|
|
@@ -1649,13 +1649,13 @@ func listHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *Resp
|
1649
|
1649
|
}
|
1650
|
1650
|
|
1651
|
1651
|
// LUSERS [<mask> [<server>]]
|
1652
|
|
-func lusersHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool {
|
|
1652
|
+func lusersHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
|
1653
|
1653
|
server.Lusers(client, rb)
|
1654
|
1654
|
return false
|
1655
|
1655
|
}
|
1656
|
1656
|
|
1657
|
1657
|
// MODE <target> [<modestring> [<mode arguments>...]]
|
1658
|
|
-func modeHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool {
|
|
1658
|
+func modeHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
|
1659
|
1659
|
if 0 < len(msg.Params[0]) && msg.Params[0][0] == '#' {
|
1660
|
1660
|
return cmodeHandler(server, client, msg, rb)
|
1661
|
1661
|
}
|
|
@@ -1663,7 +1663,7 @@ func modeHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *Resp
|
1663
|
1663
|
}
|
1664
|
1664
|
|
1665
|
1665
|
// MODE <channel> [<modestring> [<mode arguments>...]]
|
1666
|
|
-func cmodeHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool {
|
|
1666
|
+func cmodeHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
|
1667
|
1667
|
channel := server.channels.Get(msg.Params[0])
|
1668
|
1668
|
|
1669
|
1669
|
if channel == nil {
|
|
@@ -1721,7 +1721,7 @@ func announceCmodeChanges(channel *Channel, applied modes.ModeChanges, source, a
|
1721
|
1721
|
}
|
1722
|
1722
|
|
1723
|
1723
|
// MODE <client> [<modestring> [<mode arguments>...]]
|
1724
|
|
-func umodeHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool {
|
|
1724
|
+func umodeHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
|
1725
|
1725
|
cDetails := client.Details()
|
1726
|
1726
|
target := server.clients.Get(msg.Params[0])
|
1727
|
1727
|
if target == nil {
|
|
@@ -1793,7 +1793,7 @@ func (server *Server) getCurrentNick(nick string) (result string) {
|
1793
|
1793
|
}
|
1794
|
1794
|
|
1795
|
1795
|
// MONITOR <subcmd> [params...]
|
1796
|
|
-func monitorHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool {
|
|
1796
|
+func monitorHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
|
1797
|
1797
|
handler, exists := monitorSubcommands[strings.ToLower(msg.Params[0])]
|
1798
|
1798
|
|
1799
|
1799
|
if !exists {
|
|
@@ -1805,7 +1805,7 @@ func monitorHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *R
|
1805
|
1805
|
}
|
1806
|
1806
|
|
1807
|
1807
|
// MONITOR - <target>{,<target>}
|
1808
|
|
-func monitorRemoveHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool {
|
|
1808
|
+func monitorRemoveHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
|
1809
|
1809
|
if len(msg.Params) < 2 {
|
1810
|
1810
|
rb.Add(nil, server.name, ERR_NEEDMOREPARAMS, client.Nick(), msg.Command, client.t("Not enough parameters"))
|
1811
|
1811
|
return false
|
|
@@ -1820,7 +1820,7 @@ func monitorRemoveHandler(server *Server, client *Client, msg ircmsg.IrcMessage,
|
1820
|
1820
|
}
|
1821
|
1821
|
|
1822
|
1822
|
// MONITOR + <target>{,<target>}
|
1823
|
|
-func monitorAddHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool {
|
|
1823
|
+func monitorAddHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
|
1824
|
1824
|
if len(msg.Params) < 2 {
|
1825
|
1825
|
rb.Add(nil, server.name, ERR_NEEDMOREPARAMS, client.Nick(), msg.Command, client.t("Not enough parameters"))
|
1826
|
1826
|
return false
|
|
@@ -1867,13 +1867,13 @@ func monitorAddHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb
|
1867
|
1867
|
}
|
1868
|
1868
|
|
1869
|
1869
|
// MONITOR C
|
1870
|
|
-func monitorClearHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool {
|
|
1870
|
+func monitorClearHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
|
1871
|
1871
|
server.monitorManager.RemoveAll(rb.session)
|
1872
|
1872
|
return false
|
1873
|
1873
|
}
|
1874
|
1874
|
|
1875
|
1875
|
// MONITOR L
|
1876
|
|
-func monitorListHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool {
|
|
1876
|
+func monitorListHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
|
1877
|
1877
|
nick := client.Nick()
|
1878
|
1878
|
monitorList := server.monitorManager.List(rb.session)
|
1879
|
1879
|
|
|
@@ -1898,7 +1898,7 @@ func monitorListHandler(server *Server, client *Client, msg ircmsg.IrcMessage, r
|
1898
|
1898
|
}
|
1899
|
1899
|
|
1900
|
1900
|
// MONITOR S
|
1901
|
|
-func monitorStatusHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool {
|
|
1901
|
+func monitorStatusHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
|
1902
|
1902
|
var online []string
|
1903
|
1903
|
var offline []string
|
1904
|
1904
|
|
|
@@ -1928,13 +1928,13 @@ func monitorStatusHandler(server *Server, client *Client, msg ircmsg.IrcMessage,
|
1928
|
1928
|
}
|
1929
|
1929
|
|
1930
|
1930
|
// MOTD
|
1931
|
|
-func motdHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool {
|
|
1931
|
+func motdHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
|
1932
|
1932
|
server.MOTD(client, rb)
|
1933
|
1933
|
return false
|
1934
|
1934
|
}
|
1935
|
1935
|
|
1936
|
1936
|
// NAMES [<channel>{,<channel>} [target]]
|
1937
|
|
-func namesHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool {
|
|
1937
|
+func namesHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
|
1938
|
1938
|
var channels []string
|
1939
|
1939
|
if len(msg.Params) > 0 {
|
1940
|
1940
|
channels = strings.Split(msg.Params[0], ",")
|
|
@@ -1968,7 +1968,7 @@ func namesHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *Res
|
1968
|
1968
|
}
|
1969
|
1969
|
|
1970
|
1970
|
// NICK <nickname>
|
1971
|
|
-func nickHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool {
|
|
1971
|
+func nickHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
|
1972
|
1972
|
if client.registered {
|
1973
|
1973
|
if client.account == "" && server.Config().Accounts.NickReservation.ForbidAnonNickChanges {
|
1974
|
1974
|
rb.Add(nil, server.name, ERR_UNKNOWNERROR, client.Nick(), client.t("You may not change your nickname"))
|
|
@@ -1982,7 +1982,7 @@ func nickHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *Resp
|
1982
|
1982
|
}
|
1983
|
1983
|
|
1984
|
1984
|
// helper to store a batched PRIVMSG in the session object
|
1985
|
|
-func absorbBatchedMessage(server *Server, client *Client, msg ircmsg.IrcMessage, batchTag string, histType history.ItemType, rb *ResponseBuffer) {
|
|
1985
|
+func absorbBatchedMessage(server *Server, client *Client, msg ircmsg.IRCMessage, batchTag string, histType history.ItemType, rb *ResponseBuffer) {
|
1986
|
1986
|
var errorCode, errorMessage string
|
1987
|
1987
|
defer func() {
|
1988
|
1988
|
if errorCode != "" {
|
|
@@ -2022,7 +2022,7 @@ func absorbBatchedMessage(server *Server, client *Client, msg ircmsg.IrcMessage,
|
2022
|
2022
|
// NOTICE <target>{,<target>} <message>
|
2023
|
2023
|
// PRIVMSG <target>{,<target>} <message>
|
2024
|
2024
|
// TAGMSG <target>{,<target>}
|
2025
|
|
-func messageHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool {
|
|
2025
|
+func messageHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
|
2026
|
2026
|
histType, err := msgCommandToHistType(msg.Command)
|
2027
|
2027
|
if err != nil {
|
2028
|
2028
|
return false
|
|
@@ -2227,7 +2227,7 @@ func itemIsStorable(item *history.Item, config *Config) bool {
|
2227
|
2227
|
}
|
2228
|
2228
|
|
2229
|
2229
|
// NPC <target> <sourcenick> <message>
|
2230
|
|
-func npcHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool {
|
|
2230
|
+func npcHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
|
2231
|
2231
|
target := msg.Params[0]
|
2232
|
2232
|
fakeSource := msg.Params[1]
|
2233
|
2233
|
message := msg.Params[2:]
|
|
@@ -2238,7 +2238,7 @@ func npcHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *Respo
|
2238
|
2238
|
}
|
2239
|
2239
|
|
2240
|
2240
|
// NPCA <target> <sourcenick> <message>
|
2241
|
|
-func npcaHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool {
|
|
2241
|
+func npcaHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
|
2242
|
2242
|
target := msg.Params[0]
|
2243
|
2243
|
fakeSource := msg.Params[1]
|
2244
|
2244
|
message := msg.Params[2:]
|
|
@@ -2249,7 +2249,7 @@ func npcaHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *Resp
|
2249
|
2249
|
}
|
2250
|
2250
|
|
2251
|
2251
|
// OPER <name> [password]
|
2252
|
|
-func operHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool {
|
|
2252
|
+func operHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
|
2253
|
2253
|
if client.HasMode(modes.Operator) {
|
2254
|
2254
|
rb.Add(nil, server.name, ERR_UNKNOWNERROR, client.Nick(), "OPER", client.t("You're already opered-up!"))
|
2255
|
2255
|
return false
|
|
@@ -2334,7 +2334,7 @@ func applyOper(client *Client, oper *Oper, rb *ResponseBuffer) {
|
2334
|
2334
|
}
|
2335
|
2335
|
|
2336
|
2336
|
// DEOPER
|
2337
|
|
-func deoperHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool {
|
|
2337
|
+func deoperHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
|
2338
|
2338
|
if client.Oper() == nil {
|
2339
|
2339
|
rb.Notice(client.t("Insufficient oper privs"))
|
2340
|
2340
|
return false
|
|
@@ -2345,7 +2345,7 @@ func deoperHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *Re
|
2345
|
2345
|
}
|
2346
|
2346
|
|
2347
|
2347
|
// PART <channel>{,<channel>} [<reason>]
|
2348
|
|
-func partHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool {
|
|
2348
|
+func partHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
|
2349
|
2349
|
channels := strings.Split(msg.Params[0], ",")
|
2350
|
2350
|
var reason string
|
2351
|
2351
|
if len(msg.Params) > 1 {
|
|
@@ -2365,7 +2365,7 @@ func partHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *Resp
|
2365
|
2365
|
}
|
2366
|
2366
|
|
2367
|
2367
|
// PASS <password>
|
2368
|
|
-func passHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool {
|
|
2368
|
+func passHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
|
2369
|
2369
|
if client.registered {
|
2370
|
2370
|
rb.Add(nil, server.name, ERR_ALREADYREGISTRED, client.nick, client.t("You may not reregister"))
|
2371
|
2371
|
return false
|
|
@@ -2420,19 +2420,19 @@ func passHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *Resp
|
2420
|
2420
|
}
|
2421
|
2421
|
|
2422
|
2422
|
// PING [params...]
|
2423
|
|
-func pingHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool {
|
|
2423
|
+func pingHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
|
2424
|
2424
|
rb.Add(nil, server.name, "PONG", server.name, msg.Params[0])
|
2425
|
2425
|
return false
|
2426
|
2426
|
}
|
2427
|
2427
|
|
2428
|
2428
|
// PONG [params...]
|
2429
|
|
-func pongHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool {
|
|
2429
|
+func pongHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
|
2430
|
2430
|
// client gets touched when they send this command, so we don't need to do anything
|
2431
|
2431
|
return false
|
2432
|
2432
|
}
|
2433
|
2433
|
|
2434
|
2434
|
// QUIT [<reason>]
|
2435
|
|
-func quitHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool {
|
|
2435
|
+func quitHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
|
2436
|
2436
|
reason := "Quit"
|
2437
|
2437
|
if len(msg.Params) > 0 {
|
2438
|
2438
|
reason += ": " + msg.Params[0]
|
|
@@ -2442,7 +2442,7 @@ func quitHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *Resp
|
2442
|
2442
|
}
|
2443
|
2443
|
|
2444
|
2444
|
// REGISTER < email | * > <password>
|
2445
|
|
-func registerHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) (exiting bool) {
|
|
2445
|
+func registerHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) (exiting bool) {
|
2446
|
2446
|
config := server.Config()
|
2447
|
2447
|
if !config.Accounts.Registration.Enabled {
|
2448
|
2448
|
rb.Add(nil, server.name, "FAIL", "REGISTER", "DISALLOWED", client.t("Account registration is disabled"))
|
|
@@ -2509,7 +2509,7 @@ func registerHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *
|
2509
|
2509
|
}
|
2510
|
2510
|
|
2511
|
2511
|
// VERIFY <account> <code>
|
2512
|
|
-func verifyHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) (exiting bool) {
|
|
2512
|
+func verifyHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) (exiting bool) {
|
2513
|
2513
|
config := server.Config()
|
2514
|
2514
|
if !config.Accounts.Registration.Enabled {
|
2515
|
2515
|
rb.Add(nil, server.name, "FAIL", "VERIFY", "DISALLOWED", client.t("Account registration is disabled"))
|
|
@@ -2551,7 +2551,7 @@ func verifyHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *Re
|
2551
|
2551
|
}
|
2552
|
2552
|
|
2553
|
2553
|
// REHASH
|
2554
|
|
-func rehashHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool {
|
|
2554
|
+func rehashHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
|
2555
|
2555
|
nick := client.Nick()
|
2556
|
2556
|
server.logger.Info("server", "REHASH command used by", nick)
|
2557
|
2557
|
err := server.rehash()
|
|
@@ -2569,7 +2569,7 @@ func rehashHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *Re
|
2569
|
2569
|
}
|
2570
|
2570
|
|
2571
|
2571
|
// RELAYMSG <channel> <spoofed nick> :<message>
|
2572
|
|
-func relaymsgHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) (result bool) {
|
|
2572
|
+func relaymsgHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) (result bool) {
|
2573
|
2573
|
config := server.Config()
|
2574
|
2574
|
if !config.Server.Relaymsg.Enabled {
|
2575
|
2575
|
rb.Add(nil, server.name, "FAIL", "RELAYMSG", "NOT_ENABLED", client.t("RELAYMSG has been disabled"))
|
|
@@ -2638,7 +2638,7 @@ func relaymsgHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *
|
2638
|
2638
|
}
|
2639
|
2639
|
|
2640
|
2640
|
// RENAME <oldchan> <newchan> [<reason>]
|
2641
|
|
-func renameHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool {
|
|
2641
|
+func renameHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
|
2642
|
2642
|
oldName, newName := msg.Params[0], msg.Params[1]
|
2643
|
2643
|
var reason string
|
2644
|
2644
|
if 2 < len(msg.Params) {
|
|
@@ -2724,7 +2724,7 @@ func renameHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *Re
|
2724
|
2724
|
}
|
2725
|
2725
|
|
2726
|
2726
|
// RESUME <token> [timestamp]
|
2727
|
|
-func resumeHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool {
|
|
2727
|
+func resumeHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
|
2728
|
2728
|
details := ResumeDetails{
|
2729
|
2729
|
PresentedToken: msg.Params[0],
|
2730
|
2730
|
}
|
|
@@ -2748,7 +2748,7 @@ func resumeHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *Re
|
2748
|
2748
|
}
|
2749
|
2749
|
|
2750
|
2750
|
// SANICK <oldnick> <nickname>
|
2751
|
|
-func sanickHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool {
|
|
2751
|
+func sanickHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
|
2752
|
2752
|
targetNick := msg.Params[0]
|
2753
|
2753
|
target := server.clients.Get(targetNick)
|
2754
|
2754
|
if target == nil {
|
|
@@ -2760,7 +2760,7 @@ func sanickHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *Re
|
2760
|
2760
|
}
|
2761
|
2761
|
|
2762
|
2762
|
// SCENE <target> <message>
|
2763
|
|
-func sceneHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool {
|
|
2763
|
+func sceneHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
|
2764
|
2764
|
target := msg.Params[0]
|
2765
|
2765
|
message := msg.Params[1:]
|
2766
|
2766
|
|
|
@@ -2770,7 +2770,7 @@ func sceneHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *Res
|
2770
|
2770
|
}
|
2771
|
2771
|
|
2772
|
2772
|
// SETNAME <realname>
|
2773
|
|
-func setnameHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool {
|
|
2773
|
+func setnameHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
|
2774
|
2774
|
realname := msg.Params[0]
|
2775
|
2775
|
if len(msg.Params) != 1 {
|
2776
|
2776
|
// workaround for clients that turn unknown commands into raw IRC lines,
|
|
@@ -2798,19 +2798,19 @@ func setnameHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *R
|
2798
|
2798
|
}
|
2799
|
2799
|
|
2800
|
2800
|
// SUMMON [parameters]
|
2801
|
|
-func summonHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool {
|
|
2801
|
+func summonHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
|
2802
|
2802
|
rb.Add(nil, server.name, ERR_SUMMONDISABLED, client.Nick(), client.t("SUMMON has been disabled"))
|
2803
|
2803
|
return false
|
2804
|
2804
|
}
|
2805
|
2805
|
|
2806
|
2806
|
// TIME
|
2807
|
|
-func timeHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool {
|
|
2807
|
+func timeHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
|
2808
|
2808
|
rb.Add(nil, server.name, RPL_TIME, client.nick, server.name, time.Now().UTC().Format(time.RFC1123))
|
2809
|
2809
|
return false
|
2810
|
2810
|
}
|
2811
|
2811
|
|
2812
|
2812
|
// TOPIC <channel> [<topic>]
|
2813
|
|
-func topicHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool {
|
|
2813
|
+func topicHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
|
2814
|
2814
|
channel := server.channels.Get(msg.Params[0])
|
2815
|
2815
|
if channel == nil {
|
2816
|
2816
|
rb.Add(nil, server.name, ERR_NOSUCHCHANNEL, client.nick, utils.SafeErrorParam(msg.Params[0]), client.t("No such channel"))
|
|
@@ -2826,7 +2826,7 @@ func topicHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *Res
|
2826
|
2826
|
}
|
2827
|
2827
|
|
2828
|
2828
|
// UNDLINE <ip>|<net>
|
2829
|
|
-func unDLineHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool {
|
|
2829
|
+func unDLineHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
|
2830
|
2830
|
// check oper permissions
|
2831
|
2831
|
oper := client.Oper()
|
2832
|
2832
|
if !oper.HasRoleCapab("ban") {
|
|
@@ -2859,7 +2859,7 @@ func unDLineHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *R
|
2859
|
2859
|
}
|
2860
|
2860
|
|
2861
|
2861
|
// UNKLINE <mask>
|
2862
|
|
-func unKLineHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool {
|
|
2862
|
+func unKLineHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
|
2863
|
2863
|
details := client.Details()
|
2864
|
2864
|
// check oper permissions
|
2865
|
2865
|
oper := client.Oper()
|
|
@@ -2889,7 +2889,7 @@ func unKLineHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *R
|
2889
|
2889
|
}
|
2890
|
2890
|
|
2891
|
2891
|
// USER <username> * 0 <realname>
|
2892
|
|
-func userHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool {
|
|
2892
|
+func userHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
|
2893
|
2893
|
if client.registered {
|
2894
|
2894
|
rb.Add(nil, server.name, ERR_ALREADYREGISTRED, client.Nick(), client.t("You may not reregister"))
|
2895
|
2895
|
return false
|
|
@@ -2944,7 +2944,7 @@ func operStatusVisible(client, target *Client, hasPrivs bool) bool {
|
2944
|
2944
|
}
|
2945
|
2945
|
|
2946
|
2946
|
// USERHOST <nickname>{ <nickname>}
|
2947
|
|
-func userhostHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool {
|
|
2947
|
+func userhostHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
|
2948
|
2948
|
hasPrivs := client.HasMode(modes.Operator)
|
2949
|
2949
|
returnedClients := make(ClientSet)
|
2950
|
2950
|
|
|
@@ -2992,20 +2992,20 @@ func userhostHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *
|
2992
|
2992
|
}
|
2993
|
2993
|
|
2994
|
2994
|
// USERS [parameters]
|
2995
|
|
-func usersHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool {
|
|
2995
|
+func usersHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
|
2996
|
2996
|
rb.Add(nil, server.name, ERR_USERSDISABLED, client.Nick(), client.t("USERS has been disabled"))
|
2997
|
2997
|
return false
|
2998
|
2998
|
}
|
2999
|
2999
|
|
3000
|
3000
|
// VERSION
|
3001
|
|
-func versionHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool {
|
|
3001
|
+func versionHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
|
3002
|
3002
|
rb.Add(nil, server.name, RPL_VERSION, client.nick, Ver, server.name)
|
3003
|
3003
|
server.RplISupport(client, rb)
|
3004
|
3004
|
return false
|
3005
|
3005
|
}
|
3006
|
3006
|
|
3007
|
3007
|
// WEBIRC <password> <gateway> <hostname> <ip> [:flag1 flag2=x flag3]
|
3008
|
|
-func webircHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool {
|
|
3008
|
+func webircHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
|
3009
|
3009
|
// only allow unregistered clients to use this command
|
3010
|
3010
|
if client.registered || client.proxiedIP != nil {
|
3011
|
3011
|
return false
|
|
@@ -3179,7 +3179,7 @@ func (client *Client) rplWhoReply(channel *Channel, target *Client, rb *Response
|
3179
|
3179
|
}
|
3180
|
3180
|
|
3181
|
3181
|
// WHO <mask> [<filter>%<fields>,<type>]
|
3182
|
|
-func whoHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool {
|
|
3182
|
+func whoHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
|
3183
|
3183
|
mask := msg.Params[0]
|
3184
|
3184
|
var err error
|
3185
|
3185
|
if mask == "" {
|
|
@@ -3287,7 +3287,7 @@ func whoHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *Respo
|
3287
|
3287
|
}
|
3288
|
3288
|
|
3289
|
3289
|
// WHOIS [<target>] <mask>{,<mask>}
|
3290
|
|
-func whoisHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool {
|
|
3290
|
+func whoisHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
|
3291
|
3291
|
var masksString string
|
3292
|
3292
|
//var target string
|
3293
|
3293
|
|
|
@@ -3348,7 +3348,7 @@ func whoisHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *Res
|
3348
|
3348
|
}
|
3349
|
3349
|
|
3350
|
3350
|
// WHOWAS <nickname> [<count> [<server>]]
|
3351
|
|
-func whowasHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool {
|
|
3351
|
+func whowasHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
|
3352
|
3352
|
nicknames := strings.Split(msg.Params[0], ",")
|
3353
|
3353
|
|
3354
|
3354
|
// 0 means "all the entries", as does a negative number
|
|
@@ -3382,7 +3382,7 @@ func whowasHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *Re
|
3382
|
3382
|
}
|
3383
|
3383
|
|
3384
|
3384
|
// ZNC <module> [params]
|
3385
|
|
-func zncHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool {
|
|
3385
|
+func zncHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
|
3386
|
3386
|
params := msg.Params[1:]
|
3387
|
3387
|
// #1205: compatibility with Palaver, which sends `ZNC *playback :play ...`
|
3388
|
3388
|
if len(params) == 1 && strings.IndexByte(params[0], ' ') != -1 {
|
|
@@ -3393,13 +3393,13 @@ func zncHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *Respo
|
3393
|
3393
|
}
|
3394
|
3394
|
|
3395
|
3395
|
// fake handler for unknown commands
|
3396
|
|
-func unknownCommandHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool {
|
|
3396
|
+func unknownCommandHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
|
3397
|
3397
|
rb.Add(nil, server.name, ERR_UNKNOWNCOMMAND, client.Nick(), utils.SafeErrorParam(msg.Command), client.t("Unknown command"))
|
3398
|
3398
|
return false
|
3399
|
3399
|
}
|
3400
|
3400
|
|
3401
|
3401
|
// fake handler for invalid utf8
|
3402
|
|
-func invalidUtf8Handler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool {
|
|
3402
|
+func invalidUtf8Handler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
|
3403
|
3403
|
rb.Add(nil, server.name, "FAIL", utils.SafeErrorParam(msg.Command), "INVALID_UTF8", client.t("Message rejected for containing invalid UTF-8"))
|
3404
|
3404
|
return false
|
3405
|
3405
|
}
|