Browse Source

Merge pull request #1590 from slingamn/ircgo_bump

bump irc-go again
tags/v2.6.0-rc1
Shivaram Lingamneni 3 years ago
parent
commit
de31430fdc
No account linked to committer's email address

+ 1
- 1
go.mod View File

10
 	github.com/go-sql-driver/mysql v1.5.0
10
 	github.com/go-sql-driver/mysql v1.5.0
11
 	github.com/go-test/deep v1.0.6 // indirect
11
 	github.com/go-test/deep v1.0.6 // indirect
12
 	github.com/gorilla/websocket v1.4.2
12
 	github.com/gorilla/websocket v1.4.2
13
-	github.com/goshuirc/irc-go v0.0.0-20210304031553-cf78e9176f96
13
+	github.com/goshuirc/irc-go v0.0.0-20210311004346-ea7a188a73fe
14
 	github.com/onsi/ginkgo v1.12.0 // indirect
14
 	github.com/onsi/ginkgo v1.12.0 // indirect
15
 	github.com/onsi/gomega v1.9.0 // indirect
15
 	github.com/onsi/gomega v1.9.0 // indirect
16
 	github.com/oragono/confusables v0.0.0-20201108231250-4ab98ab61fb1
16
 	github.com/oragono/confusables v0.0.0-20201108231250-4ab98ab61fb1

+ 2
- 0
go.sum View File

42
 github.com/goshuirc/irc-go v0.0.0-20210301225436-2c4b83d64847/go.mod h1:q/JhvvKLmif3y9q8MDQM+gRCnjEKnu5ClF298TTXJug=
42
 github.com/goshuirc/irc-go v0.0.0-20210301225436-2c4b83d64847/go.mod h1:q/JhvvKLmif3y9q8MDQM+gRCnjEKnu5ClF298TTXJug=
43
 github.com/goshuirc/irc-go v0.0.0-20210304031553-cf78e9176f96 h1:sihI3HsrJWyS4MtBmxh5W4gDZD34SWodkWyUvJltswY=
43
 github.com/goshuirc/irc-go v0.0.0-20210304031553-cf78e9176f96 h1:sihI3HsrJWyS4MtBmxh5W4gDZD34SWodkWyUvJltswY=
44
 github.com/goshuirc/irc-go v0.0.0-20210304031553-cf78e9176f96/go.mod h1:q/JhvvKLmif3y9q8MDQM+gRCnjEKnu5ClF298TTXJug=
44
 github.com/goshuirc/irc-go v0.0.0-20210304031553-cf78e9176f96/go.mod h1:q/JhvvKLmif3y9q8MDQM+gRCnjEKnu5ClF298TTXJug=
45
+github.com/goshuirc/irc-go v0.0.0-20210311004346-ea7a188a73fe h1:5UsPgeXJBkFgJK3Ml0nj6ljasjd26xiUxALnDJHmipE=
46
+github.com/goshuirc/irc-go v0.0.0-20210311004346-ea7a188a73fe/go.mod h1:q/JhvvKLmif3y9q8MDQM+gRCnjEKnu5ClF298TTXJug=
45
 github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
47
 github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
46
 github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
48
 github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
47
 github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
49
 github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=

+ 3
- 3
irc/client.go View File

1667
 	return session.SendRawMessage(msg, blocking)
1667
 	return session.SendRawMessage(msg, blocking)
1668
 }
1668
 }
1669
 
1669
 
1670
-func composeMultilineBatch(batchID, fromNickMask, fromAccount string, tags map[string]string, command, target string, message utils.SplitMessage) (result []ircmsg.IRCMessage) {
1670
+func composeMultilineBatch(batchID, fromNickMask, fromAccount string, tags map[string]string, command, target string, message utils.SplitMessage) (result []ircmsg.Message) {
1671
 	batchStart := ircmsg.MakeMessage(tags, fromNickMask, "BATCH", "+"+batchID, caps.MultilineBatchType, target)
1671
 	batchStart := ircmsg.MakeMessage(tags, fromNickMask, "BATCH", "+"+batchID, caps.MultilineBatchType, target)
1672
 	batchStart.SetTag("time", message.Time.Format(IRCv3TimestampFormat))
1672
 	batchStart.SetTag("time", message.Time.Format(IRCv3TimestampFormat))
1673
 	batchStart.SetTag("msgid", message.Msgid)
1673
 	batchStart.SetTag("msgid", message.Msgid)
1707
 )
1707
 )
1708
 
1708
 
1709
 // SendRawMessage sends a raw message to the client.
1709
 // SendRawMessage sends a raw message to the client.
1710
-func (session *Session) SendRawMessage(message ircmsg.IRCMessage, blocking bool) error {
1710
+func (session *Session) SendRawMessage(message ircmsg.Message, blocking bool) error {
1711
 	// use dumb hack to force the last param to be a trailing param if required
1711
 	// use dumb hack to force the last param to be a trailing param if required
1712
 	config := session.client.server.Config()
1712
 	config := session.client.server.Config()
1713
 	if config.Server.Compatibility.forceTrailing && commandsThatMustUseTrailing[message.Command] {
1713
 	if config.Server.Compatibility.forceTrailing && commandsThatMustUseTrailing[message.Command] {
1769
 	return session.SendRawMessage(msg, false)
1769
 	return session.SendRawMessage(msg, false)
1770
 }
1770
 }
1771
 
1771
 
1772
-func (session *Session) setTimeTag(msg *ircmsg.IRCMessage, serverTime time.Time) {
1772
+func (session *Session) setTimeTag(msg *ircmsg.Message, serverTime time.Time) {
1773
 	if session.capabilities.Has(caps.ServerTime) && !msg.HasTag("time") {
1773
 	if session.capabilities.Has(caps.ServerTime) && !msg.HasTag("time") {
1774
 		if serverTime.IsZero() {
1774
 		if serverTime.IsZero() {
1775
 			serverTime = time.Now()
1775
 			serverTime = time.Now()

+ 2
- 2
irc/commands.go View File

11
 
11
 
12
 // Command represents a command accepted from a client.
12
 // Command represents a command accepted from a client.
13
 type Command struct {
13
 type Command struct {
14
-	handler        func(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool
14
+	handler        func(server *Server, client *Client, msg ircmsg.Message, rb *ResponseBuffer) bool
15
 	usablePreReg   bool
15
 	usablePreReg   bool
16
 	allowedInBatch bool // allowed in client-to-server batches
16
 	allowedInBatch bool // allowed in client-to-server batches
17
 	minParams      int
17
 	minParams      int
19
 }
19
 }
20
 
20
 
21
 // Run runs this command with the given client/message.
21
 // Run runs this command with the given client/message.
22
-func (cmd *Command) Run(server *Server, client *Client, session *Session, msg ircmsg.IRCMessage) (exiting bool) {
22
+func (cmd *Command) Run(server *Server, client *Client, session *Session, msg ircmsg.Message) (exiting bool) {
23
 	rb := NewResponseBuffer(session)
23
 	rb := NewResponseBuffer(session)
24
 	rb.Label = GetLabel(msg)
24
 	rb.Label = GetLabel(msg)
25
 
25
 

+ 71
- 71
irc/handlers.go View File

138
 }
138
 }
139
 
139
 
140
 // AUTHENTICATE [<mechanism>|<data>|*]
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.Message, rb *ResponseBuffer) bool {
142
 	session := rb.session
142
 	session := rb.session
143
 	config := server.Config()
143
 	config := server.Config()
144
 	details := client.Details()
144
 	details := client.Details()
340
 }
340
 }
341
 
341
 
342
 // AWAY [<message>]
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.Message, rb *ResponseBuffer) bool {
344
 	var isAway bool
344
 	var isAway bool
345
 	var awayMessage string
345
 	var awayMessage string
346
 	if len(msg.Params) > 0 {
346
 	if len(msg.Params) > 0 {
377
 }
377
 }
378
 
378
 
379
 // BATCH {+,-}reference-tag type [params...]
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.Message, rb *ResponseBuffer) bool {
381
 	tag := msg.Params[0]
381
 	tag := msg.Params[0]
382
 	fail := false
382
 	fail := false
383
 	sendErrors := rb.session.batch.command != "NOTICE"
383
 	sendErrors := rb.session.batch.command != "NOTICE"
421
 }
421
 }
422
 
422
 
423
 // BRB [message]
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.Message, rb *ResponseBuffer) bool {
425
 	success, duration := client.brbTimer.Enable()
425
 	success, duration := client.brbTimer.Enable()
426
 	if !success {
426
 	if !success {
427
 		rb.Add(nil, server.name, "FAIL", "BRB", "CANNOT_BRB", client.t("Your client does not support BRB"))
427
 		rb.Add(nil, server.name, "FAIL", "BRB", "CANNOT_BRB", client.t("Your client does not support BRB"))
446
 }
446
 }
447
 
447
 
448
 // CAP <subcmd> [<caps>]
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.Message, rb *ResponseBuffer) bool {
450
 	details := client.Details()
450
 	details := client.Details()
451
 	subCommand := strings.ToUpper(msg.Params[0])
451
 	subCommand := strings.ToUpper(msg.Params[0])
452
 	toAdd := caps.NewSet()
452
 	toAdd := caps.NewSet()
564
 // e.g., CHATHISTORY #ircv3 AFTER id=ytNBbt565yt4r3err3 10
564
 // e.g., CHATHISTORY #ircv3 AFTER id=ytNBbt565yt4r3err3 10
565
 // CHATHISTORY <target> BETWEEN <query> <query> <direction> [<limit>]
565
 // CHATHISTORY <target> BETWEEN <query> <query> <direction> [<limit>]
566
 // e.g., CHATHISTORY #ircv3 BETWEEN timestamp=YYYY-MM-DDThh:mm:ss.sssZ timestamp=YYYY-MM-DDThh:mm:ss.sssZ + 100
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.Message, rb *ResponseBuffer) (exiting bool) {
568
 	var items []history.Item
568
 	var items []history.Item
569
 	unknown_command := false
569
 	unknown_command := false
570
 	var target string
570
 	var target string
702
 }
702
 }
703
 
703
 
704
 // DEBUG <subcmd>
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.Message, rb *ResponseBuffer) bool {
706
 	param := strings.ToUpper(msg.Params[0])
706
 	param := strings.ToUpper(msg.Params[0])
707
 
707
 
708
 	switch param {
708
 	switch param {
775
 	return false
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.Message, rb *ResponseBuffer) bool {
779
 	if len(msg.Params) > 0 {
779
 	if len(msg.Params) > 0 {
780
 		level, err := strconv.Atoi(msg.Params[0])
780
 		level, err := strconv.Atoi(msg.Params[0])
781
 		if err == nil && 1 <= level && level <= 5 {
781
 		if err == nil && 1 <= level && level <= 5 {
823
 
823
 
824
 // DLINE [ANDKILL] [MYSELF] [duration] <ip>/<net> [ON <server>] [reason [| oper reason]]
824
 // DLINE [ANDKILL] [MYSELF] [duration] <ip>/<net> [ON <server>] [reason [| oper reason]]
825
 // DLINE LIST
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.Message, rb *ResponseBuffer) bool {
827
 	// check oper permissions
827
 	// check oper permissions
828
 	oper := client.Oper()
828
 	oper := client.Oper()
829
 	if !oper.HasRoleCapab("ban") {
829
 	if !oper.HasRoleCapab("ban") {
962
 }
962
 }
963
 
963
 
964
 // EXTJWT <target> [service_name]
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.Message, rb *ResponseBuffer) bool {
966
 	accountName := client.AccountName()
966
 	accountName := client.AccountName()
967
 	if accountName == "*" {
967
 	if accountName == "*" {
968
 		accountName = ""
968
 		accountName = ""
1030
 
1030
 
1031
 // HELP [<query>]
1031
 // HELP [<query>]
1032
 // HELPOP [<query>]
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.Message, rb *ResponseBuffer) bool {
1034
 	if len(msg.Params) == 0 {
1034
 	if len(msg.Params) == 0 {
1035
 		client.sendHelp("HELPOP", client.t(`HELPOP <argument>
1035
 		client.sendHelp("HELPOP", client.t(`HELPOP <argument>
1036
 
1036
 
1065
 // e.g., HISTORY #ubuntu 10
1065
 // e.g., HISTORY #ubuntu 10
1066
 // HISTORY me 15
1066
 // HISTORY me 15
1067
 // HISTORY #darwin 1h
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.Message, rb *ResponseBuffer) bool {
1069
 	config := server.Config()
1069
 	config := server.Config()
1070
 	if !config.History.Enabled {
1070
 	if !config.History.Enabled {
1071
 		rb.Notice(client.t("This command has been disabled by the server administrators"))
1071
 		rb.Notice(client.t("This command has been disabled by the server administrators"))
1093
 }
1093
 }
1094
 
1094
 
1095
 // INFO
1095
 // INFO
1096
-func infoHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
1096
+func infoHandler(server *Server, client *Client, msg ircmsg.Message, rb *ResponseBuffer) bool {
1097
 	nick := client.Nick()
1097
 	nick := client.Nick()
1098
 	// we do the below so that the human-readable lines in info can be translated.
1098
 	// we do the below so that the human-readable lines in info can be translated.
1099
 	for _, line := range infoString1 {
1099
 	for _, line := range infoString1 {
1133
 
1133
 
1134
 // INVITE <nickname> <channel>
1134
 // INVITE <nickname> <channel>
1135
 // UNINVITE <nickname> <channel>
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.Message, rb *ResponseBuffer) bool {
1137
 	invite := msg.Command == "INVITE"
1137
 	invite := msg.Command == "INVITE"
1138
 	nickname := msg.Params[0]
1138
 	nickname := msg.Params[0]
1139
 	channelName := msg.Params[1]
1139
 	channelName := msg.Params[1]
1160
 }
1160
 }
1161
 
1161
 
1162
 // ISON <nick>{ <nick>}
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.Message, rb *ResponseBuffer) bool {
1164
 	var nicks = msg.Params
1164
 	var nicks = msg.Params
1165
 
1165
 
1166
 	ison := make([]string, 0, len(msg.Params))
1166
 	ison := make([]string, 0, len(msg.Params))
1176
 }
1176
 }
1177
 
1177
 
1178
 // JOIN <channel>{,<channel>} [<key>{,<key>}]
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.Message, rb *ResponseBuffer) bool {
1180
 	// #1417: allow `JOIN 0` with a confirmation code
1180
 	// #1417: allow `JOIN 0` with a confirmation code
1181
 	if msg.Params[0] == "0" {
1181
 	if msg.Params[0] == "0" {
1182
 		expectedCode := utils.ConfirmationCode("", rb.session.ctime)
1182
 		expectedCode := utils.ConfirmationCode("", rb.session.ctime)
1253
 }
1253
 }
1254
 
1254
 
1255
 // SAJOIN [nick] #channel{,#channel}
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.Message, rb *ResponseBuffer) bool {
1257
 	var target *Client
1257
 	var target *Client
1258
 	var channelString string
1258
 	var channelString string
1259
 	if strings.HasPrefix(msg.Params[0], "#") {
1259
 	if strings.HasPrefix(msg.Params[0], "#") {
1288
 }
1288
 }
1289
 
1289
 
1290
 // KICK <channel>{,<channel>} <user>{,<user>} [<comment>]
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.Message, rb *ResponseBuffer) bool {
1292
 	hasPrivs := client.HasRoleCapabs("samode")
1292
 	hasPrivs := client.HasRoleCapabs("samode")
1293
 	channels := strings.Split(msg.Params[0], ",")
1293
 	channels := strings.Split(msg.Params[0], ",")
1294
 	users := strings.Split(msg.Params[1], ",")
1294
 	users := strings.Split(msg.Params[1], ",")
1339
 }
1339
 }
1340
 
1340
 
1341
 // KILL <nickname> <comment>
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.Message, rb *ResponseBuffer) bool {
1343
 	nickname := msg.Params[0]
1343
 	nickname := msg.Params[0]
1344
 	comment := "<no reason supplied>"
1344
 	comment := "<no reason supplied>"
1345
 	if len(msg.Params) > 1 {
1345
 	if len(msg.Params) > 1 {
1365
 
1365
 
1366
 // KLINE [ANDKILL] [MYSELF] [duration] <mask> [ON <server>] [reason [| oper reason]]
1366
 // KLINE [ANDKILL] [MYSELF] [duration] <mask> [ON <server>] [reason [| oper reason]]
1367
 // KLINE LIST
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.Message, rb *ResponseBuffer) bool {
1369
 	details := client.Details()
1369
 	details := client.Details()
1370
 	// check oper permissions
1370
 	// check oper permissions
1371
 	oper := client.Oper()
1371
 	oper := client.Oper()
1507
 }
1507
 }
1508
 
1508
 
1509
 // LANGUAGE <code>{ <code>}
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.Message, rb *ResponseBuffer) bool {
1511
 	nick := client.Nick()
1511
 	nick := client.Nick()
1512
 	alreadyDoneLanguages := make(map[string]bool)
1512
 	alreadyDoneLanguages := make(map[string]bool)
1513
 	var appliedLanguages []string
1513
 	var appliedLanguages []string
1561
 }
1561
 }
1562
 
1562
 
1563
 // LIST [<channel>{,<channel>}] [<elistcond>{,<elistcond>}]
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.Message, rb *ResponseBuffer) bool {
1565
 	config := server.Config()
1565
 	config := server.Config()
1566
 	if time.Since(client.ctime) < config.Channels.ListDelay && client.Account() == "" && !client.HasMode(modes.Operator) {
1566
 	if time.Since(client.ctime) < config.Channels.ListDelay && client.Account() == "" && !client.HasMode(modes.Operator) {
1567
 		remaining := time.Until(client.ctime.Add(config.Channels.ListDelay))
1567
 		remaining := time.Until(client.ctime.Add(config.Channels.ListDelay))
1649
 }
1649
 }
1650
 
1650
 
1651
 // LUSERS [<mask> [<server>]]
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.Message, rb *ResponseBuffer) bool {
1653
 	server.Lusers(client, rb)
1653
 	server.Lusers(client, rb)
1654
 	return false
1654
 	return false
1655
 }
1655
 }
1656
 
1656
 
1657
 // MODE <target> [<modestring> [<mode arguments>...]]
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.Message, rb *ResponseBuffer) bool {
1659
 	if 0 < len(msg.Params[0]) && msg.Params[0][0] == '#' {
1659
 	if 0 < len(msg.Params[0]) && msg.Params[0][0] == '#' {
1660
 		return cmodeHandler(server, client, msg, rb)
1660
 		return cmodeHandler(server, client, msg, rb)
1661
 	}
1661
 	}
1663
 }
1663
 }
1664
 
1664
 
1665
 // MODE <channel> [<modestring> [<mode arguments>...]]
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.Message, rb *ResponseBuffer) bool {
1667
 	channel := server.channels.Get(msg.Params[0])
1667
 	channel := server.channels.Get(msg.Params[0])
1668
 
1668
 
1669
 	if channel == nil {
1669
 	if channel == nil {
1721
 }
1721
 }
1722
 
1722
 
1723
 // MODE <client> [<modestring> [<mode arguments>...]]
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.Message, rb *ResponseBuffer) bool {
1725
 	cDetails := client.Details()
1725
 	cDetails := client.Details()
1726
 	target := server.clients.Get(msg.Params[0])
1726
 	target := server.clients.Get(msg.Params[0])
1727
 	if target == nil {
1727
 	if target == nil {
1793
 }
1793
 }
1794
 
1794
 
1795
 // MONITOR <subcmd> [params...]
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.Message, rb *ResponseBuffer) bool {
1797
 	handler, exists := monitorSubcommands[strings.ToLower(msg.Params[0])]
1797
 	handler, exists := monitorSubcommands[strings.ToLower(msg.Params[0])]
1798
 
1798
 
1799
 	if !exists {
1799
 	if !exists {
1805
 }
1805
 }
1806
 
1806
 
1807
 // MONITOR - <target>{,<target>}
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.Message, rb *ResponseBuffer) bool {
1809
 	if len(msg.Params) < 2 {
1809
 	if len(msg.Params) < 2 {
1810
 		rb.Add(nil, server.name, ERR_NEEDMOREPARAMS, client.Nick(), msg.Command, client.t("Not enough parameters"))
1810
 		rb.Add(nil, server.name, ERR_NEEDMOREPARAMS, client.Nick(), msg.Command, client.t("Not enough parameters"))
1811
 		return false
1811
 		return false
1820
 }
1820
 }
1821
 
1821
 
1822
 // MONITOR + <target>{,<target>}
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.Message, rb *ResponseBuffer) bool {
1824
 	if len(msg.Params) < 2 {
1824
 	if len(msg.Params) < 2 {
1825
 		rb.Add(nil, server.name, ERR_NEEDMOREPARAMS, client.Nick(), msg.Command, client.t("Not enough parameters"))
1825
 		rb.Add(nil, server.name, ERR_NEEDMOREPARAMS, client.Nick(), msg.Command, client.t("Not enough parameters"))
1826
 		return false
1826
 		return false
1867
 }
1867
 }
1868
 
1868
 
1869
 // MONITOR C
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.Message, rb *ResponseBuffer) bool {
1871
 	server.monitorManager.RemoveAll(rb.session)
1871
 	server.monitorManager.RemoveAll(rb.session)
1872
 	return false
1872
 	return false
1873
 }
1873
 }
1874
 
1874
 
1875
 // MONITOR L
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.Message, rb *ResponseBuffer) bool {
1877
 	nick := client.Nick()
1877
 	nick := client.Nick()
1878
 	monitorList := server.monitorManager.List(rb.session)
1878
 	monitorList := server.monitorManager.List(rb.session)
1879
 
1879
 
1898
 }
1898
 }
1899
 
1899
 
1900
 // MONITOR S
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.Message, rb *ResponseBuffer) bool {
1902
 	var online []string
1902
 	var online []string
1903
 	var offline []string
1903
 	var offline []string
1904
 
1904
 
1928
 }
1928
 }
1929
 
1929
 
1930
 // MOTD
1930
 // MOTD
1931
-func motdHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
1931
+func motdHandler(server *Server, client *Client, msg ircmsg.Message, rb *ResponseBuffer) bool {
1932
 	server.MOTD(client, rb)
1932
 	server.MOTD(client, rb)
1933
 	return false
1933
 	return false
1934
 }
1934
 }
1935
 
1935
 
1936
 // NAMES [<channel>{,<channel>} [target]]
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.Message, rb *ResponseBuffer) bool {
1938
 	var channels []string
1938
 	var channels []string
1939
 	if len(msg.Params) > 0 {
1939
 	if len(msg.Params) > 0 {
1940
 		channels = strings.Split(msg.Params[0], ",")
1940
 		channels = strings.Split(msg.Params[0], ",")
1968
 }
1968
 }
1969
 
1969
 
1970
 // NICK <nickname>
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.Message, rb *ResponseBuffer) bool {
1972
 	if client.registered {
1972
 	if client.registered {
1973
 		if client.account == "" && server.Config().Accounts.NickReservation.ForbidAnonNickChanges {
1973
 		if client.account == "" && server.Config().Accounts.NickReservation.ForbidAnonNickChanges {
1974
 			rb.Add(nil, server.name, ERR_UNKNOWNERROR, client.Nick(), client.t("You may not change your nickname"))
1974
 			rb.Add(nil, server.name, ERR_UNKNOWNERROR, client.Nick(), client.t("You may not change your nickname"))
2019
 }
2019
 }
2020
 
2020
 
2021
 // helper to store a batched PRIVMSG in the session object
2021
 // helper to store a batched PRIVMSG in the session object
2022
-func absorbBatchedMessage(server *Server, client *Client, msg ircmsg.IRCMessage, batchTag string, histType history.ItemType, rb *ResponseBuffer) {
2022
+func absorbBatchedMessage(server *Server, client *Client, msg ircmsg.Message, batchTag string, histType history.ItemType, rb *ResponseBuffer) {
2023
 	var errorCode, errorMessage string
2023
 	var errorCode, errorMessage string
2024
 	defer func() {
2024
 	defer func() {
2025
 		if errorCode != "" {
2025
 		if errorCode != "" {
2059
 // NOTICE <target>{,<target>} <message>
2059
 // NOTICE <target>{,<target>} <message>
2060
 // PRIVMSG <target>{,<target>} <message>
2060
 // PRIVMSG <target>{,<target>} <message>
2061
 // TAGMSG <target>{,<target>}
2061
 // TAGMSG <target>{,<target>}
2062
-func messageHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
2062
+func messageHandler(server *Server, client *Client, msg ircmsg.Message, rb *ResponseBuffer) bool {
2063
 	histType, err := msgCommandToHistType(msg.Command)
2063
 	histType, err := msgCommandToHistType(msg.Command)
2064
 	if err != nil {
2064
 	if err != nil {
2065
 		return false
2065
 		return false
2267
 }
2267
 }
2268
 
2268
 
2269
 // NPC <target> <sourcenick> <message>
2269
 // NPC <target> <sourcenick> <message>
2270
-func npcHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
2270
+func npcHandler(server *Server, client *Client, msg ircmsg.Message, rb *ResponseBuffer) bool {
2271
 	target := msg.Params[0]
2271
 	target := msg.Params[0]
2272
 	fakeSource := msg.Params[1]
2272
 	fakeSource := msg.Params[1]
2273
 	message := msg.Params[2:]
2273
 	message := msg.Params[2:]
2278
 }
2278
 }
2279
 
2279
 
2280
 // NPCA <target> <sourcenick> <message>
2280
 // NPCA <target> <sourcenick> <message>
2281
-func npcaHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
2281
+func npcaHandler(server *Server, client *Client, msg ircmsg.Message, rb *ResponseBuffer) bool {
2282
 	target := msg.Params[0]
2282
 	target := msg.Params[0]
2283
 	fakeSource := msg.Params[1]
2283
 	fakeSource := msg.Params[1]
2284
 	message := msg.Params[2:]
2284
 	message := msg.Params[2:]
2289
 }
2289
 }
2290
 
2290
 
2291
 // OPER <name> [password]
2291
 // OPER <name> [password]
2292
-func operHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
2292
+func operHandler(server *Server, client *Client, msg ircmsg.Message, rb *ResponseBuffer) bool {
2293
 	if client.HasMode(modes.Operator) {
2293
 	if client.HasMode(modes.Operator) {
2294
 		rb.Add(nil, server.name, ERR_UNKNOWNERROR, client.Nick(), "OPER", client.t("You're already opered-up!"))
2294
 		rb.Add(nil, server.name, ERR_UNKNOWNERROR, client.Nick(), "OPER", client.t("You're already opered-up!"))
2295
 		return false
2295
 		return false
2374
 }
2374
 }
2375
 
2375
 
2376
 // DEOPER
2376
 // DEOPER
2377
-func deoperHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
2377
+func deoperHandler(server *Server, client *Client, msg ircmsg.Message, rb *ResponseBuffer) bool {
2378
 	if client.Oper() == nil {
2378
 	if client.Oper() == nil {
2379
 		rb.Notice(client.t("Insufficient oper privs"))
2379
 		rb.Notice(client.t("Insufficient oper privs"))
2380
 		return false
2380
 		return false
2385
 }
2385
 }
2386
 
2386
 
2387
 // PART <channel>{,<channel>} [<reason>]
2387
 // PART <channel>{,<channel>} [<reason>]
2388
-func partHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
2388
+func partHandler(server *Server, client *Client, msg ircmsg.Message, rb *ResponseBuffer) bool {
2389
 	channels := strings.Split(msg.Params[0], ",")
2389
 	channels := strings.Split(msg.Params[0], ",")
2390
 	var reason string
2390
 	var reason string
2391
 	if len(msg.Params) > 1 {
2391
 	if len(msg.Params) > 1 {
2405
 }
2405
 }
2406
 
2406
 
2407
 // PASS <password>
2407
 // PASS <password>
2408
-func passHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
2408
+func passHandler(server *Server, client *Client, msg ircmsg.Message, rb *ResponseBuffer) bool {
2409
 	if client.registered {
2409
 	if client.registered {
2410
 		rb.Add(nil, server.name, ERR_ALREADYREGISTRED, client.nick, client.t("You may not reregister"))
2410
 		rb.Add(nil, server.name, ERR_ALREADYREGISTRED, client.nick, client.t("You may not reregister"))
2411
 		return false
2411
 		return false
2460
 }
2460
 }
2461
 
2461
 
2462
 // PING [params...]
2462
 // PING [params...]
2463
-func pingHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
2463
+func pingHandler(server *Server, client *Client, msg ircmsg.Message, rb *ResponseBuffer) bool {
2464
 	rb.Add(nil, server.name, "PONG", server.name, msg.Params[0])
2464
 	rb.Add(nil, server.name, "PONG", server.name, msg.Params[0])
2465
 	return false
2465
 	return false
2466
 }
2466
 }
2467
 
2467
 
2468
 // PONG [params...]
2468
 // PONG [params...]
2469
-func pongHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
2469
+func pongHandler(server *Server, client *Client, msg ircmsg.Message, rb *ResponseBuffer) bool {
2470
 	// client gets touched when they send this command, so we don't need to do anything
2470
 	// client gets touched when they send this command, so we don't need to do anything
2471
 	return false
2471
 	return false
2472
 }
2472
 }
2473
 
2473
 
2474
 // QUIT [<reason>]
2474
 // QUIT [<reason>]
2475
-func quitHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
2475
+func quitHandler(server *Server, client *Client, msg ircmsg.Message, rb *ResponseBuffer) bool {
2476
 	reason := "Quit"
2476
 	reason := "Quit"
2477
 	if len(msg.Params) > 0 {
2477
 	if len(msg.Params) > 0 {
2478
 		reason += ": " + msg.Params[0]
2478
 		reason += ": " + msg.Params[0]
2482
 }
2482
 }
2483
 
2483
 
2484
 // REGISTER < email | * > <password>
2484
 // REGISTER < email | * > <password>
2485
-func registerHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) (exiting bool) {
2485
+func registerHandler(server *Server, client *Client, msg ircmsg.Message, rb *ResponseBuffer) (exiting bool) {
2486
 	accountName := client.Nick()
2486
 	accountName := client.Nick()
2487
 	if accountName == "*" {
2487
 	if accountName == "*" {
2488
 		accountName = client.preregNick
2488
 		accountName = client.preregNick
2551
 }
2551
 }
2552
 
2552
 
2553
 // VERIFY <account> <code>
2553
 // VERIFY <account> <code>
2554
-func verifyHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) (exiting bool) {
2554
+func verifyHandler(server *Server, client *Client, msg ircmsg.Message, rb *ResponseBuffer) (exiting bool) {
2555
 	config := server.Config()
2555
 	config := server.Config()
2556
 	if !config.Accounts.Registration.Enabled {
2556
 	if !config.Accounts.Registration.Enabled {
2557
 		rb.Add(nil, server.name, "FAIL", "VERIFY", "DISALLOWED", client.t("Account registration is disabled"))
2557
 		rb.Add(nil, server.name, "FAIL", "VERIFY", "DISALLOWED", client.t("Account registration is disabled"))
2593
 }
2593
 }
2594
 
2594
 
2595
 // REHASH
2595
 // REHASH
2596
-func rehashHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
2596
+func rehashHandler(server *Server, client *Client, msg ircmsg.Message, rb *ResponseBuffer) bool {
2597
 	nick := client.Nick()
2597
 	nick := client.Nick()
2598
 	server.logger.Info("server", "REHASH command used by", nick)
2598
 	server.logger.Info("server", "REHASH command used by", nick)
2599
 	err := server.rehash()
2599
 	err := server.rehash()
2611
 }
2611
 }
2612
 
2612
 
2613
 // RELAYMSG <channel> <spoofed nick> :<message>
2613
 // RELAYMSG <channel> <spoofed nick> :<message>
2614
-func relaymsgHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) (result bool) {
2614
+func relaymsgHandler(server *Server, client *Client, msg ircmsg.Message, rb *ResponseBuffer) (result bool) {
2615
 	config := server.Config()
2615
 	config := server.Config()
2616
 	if !config.Server.Relaymsg.Enabled {
2616
 	if !config.Server.Relaymsg.Enabled {
2617
 		rb.Add(nil, server.name, "FAIL", "RELAYMSG", "NOT_ENABLED", client.t("RELAYMSG has been disabled"))
2617
 		rb.Add(nil, server.name, "FAIL", "RELAYMSG", "NOT_ENABLED", client.t("RELAYMSG has been disabled"))
2680
 }
2680
 }
2681
 
2681
 
2682
 // RENAME <oldchan> <newchan> [<reason>]
2682
 // RENAME <oldchan> <newchan> [<reason>]
2683
-func renameHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
2683
+func renameHandler(server *Server, client *Client, msg ircmsg.Message, rb *ResponseBuffer) bool {
2684
 	oldName, newName := msg.Params[0], msg.Params[1]
2684
 	oldName, newName := msg.Params[0], msg.Params[1]
2685
 	var reason string
2685
 	var reason string
2686
 	if 2 < len(msg.Params) {
2686
 	if 2 < len(msg.Params) {
2766
 }
2766
 }
2767
 
2767
 
2768
 // RESUME <token> [timestamp]
2768
 // RESUME <token> [timestamp]
2769
-func resumeHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
2769
+func resumeHandler(server *Server, client *Client, msg ircmsg.Message, rb *ResponseBuffer) bool {
2770
 	details := ResumeDetails{
2770
 	details := ResumeDetails{
2771
 		PresentedToken: msg.Params[0],
2771
 		PresentedToken: msg.Params[0],
2772
 	}
2772
 	}
2790
 }
2790
 }
2791
 
2791
 
2792
 // SANICK <oldnick> <nickname>
2792
 // SANICK <oldnick> <nickname>
2793
-func sanickHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
2793
+func sanickHandler(server *Server, client *Client, msg ircmsg.Message, rb *ResponseBuffer) bool {
2794
 	targetNick := msg.Params[0]
2794
 	targetNick := msg.Params[0]
2795
 	target := server.clients.Get(targetNick)
2795
 	target := server.clients.Get(targetNick)
2796
 	if target == nil {
2796
 	if target == nil {
2802
 }
2802
 }
2803
 
2803
 
2804
 // SCENE <target> <message>
2804
 // SCENE <target> <message>
2805
-func sceneHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
2805
+func sceneHandler(server *Server, client *Client, msg ircmsg.Message, rb *ResponseBuffer) bool {
2806
 	target := msg.Params[0]
2806
 	target := msg.Params[0]
2807
 	message := msg.Params[1:]
2807
 	message := msg.Params[1:]
2808
 
2808
 
2812
 }
2812
 }
2813
 
2813
 
2814
 // SETNAME <realname>
2814
 // SETNAME <realname>
2815
-func setnameHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
2815
+func setnameHandler(server *Server, client *Client, msg ircmsg.Message, rb *ResponseBuffer) bool {
2816
 	realname := msg.Params[0]
2816
 	realname := msg.Params[0]
2817
 	if len(msg.Params) != 1 {
2817
 	if len(msg.Params) != 1 {
2818
 		// workaround for clients that turn unknown commands into raw IRC lines,
2818
 		// workaround for clients that turn unknown commands into raw IRC lines,
2840
 }
2840
 }
2841
 
2841
 
2842
 // SUMMON [parameters]
2842
 // SUMMON [parameters]
2843
-func summonHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
2843
+func summonHandler(server *Server, client *Client, msg ircmsg.Message, rb *ResponseBuffer) bool {
2844
 	rb.Add(nil, server.name, ERR_SUMMONDISABLED, client.Nick(), client.t("SUMMON has been disabled"))
2844
 	rb.Add(nil, server.name, ERR_SUMMONDISABLED, client.Nick(), client.t("SUMMON has been disabled"))
2845
 	return false
2845
 	return false
2846
 }
2846
 }
2847
 
2847
 
2848
 // TIME
2848
 // TIME
2849
-func timeHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
2849
+func timeHandler(server *Server, client *Client, msg ircmsg.Message, rb *ResponseBuffer) bool {
2850
 	rb.Add(nil, server.name, RPL_TIME, client.nick, server.name, time.Now().UTC().Format(time.RFC1123))
2850
 	rb.Add(nil, server.name, RPL_TIME, client.nick, server.name, time.Now().UTC().Format(time.RFC1123))
2851
 	return false
2851
 	return false
2852
 }
2852
 }
2853
 
2853
 
2854
 // TOPIC <channel> [<topic>]
2854
 // TOPIC <channel> [<topic>]
2855
-func topicHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
2855
+func topicHandler(server *Server, client *Client, msg ircmsg.Message, rb *ResponseBuffer) bool {
2856
 	channel := server.channels.Get(msg.Params[0])
2856
 	channel := server.channels.Get(msg.Params[0])
2857
 	if channel == nil {
2857
 	if channel == nil {
2858
 		rb.Add(nil, server.name, ERR_NOSUCHCHANNEL, client.nick, utils.SafeErrorParam(msg.Params[0]), client.t("No such channel"))
2858
 		rb.Add(nil, server.name, ERR_NOSUCHCHANNEL, client.nick, utils.SafeErrorParam(msg.Params[0]), client.t("No such channel"))
2868
 }
2868
 }
2869
 
2869
 
2870
 // UNDLINE <ip>|<net>
2870
 // UNDLINE <ip>|<net>
2871
-func unDLineHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
2871
+func unDLineHandler(server *Server, client *Client, msg ircmsg.Message, rb *ResponseBuffer) bool {
2872
 	// check oper permissions
2872
 	// check oper permissions
2873
 	oper := client.Oper()
2873
 	oper := client.Oper()
2874
 	if !oper.HasRoleCapab("ban") {
2874
 	if !oper.HasRoleCapab("ban") {
2901
 }
2901
 }
2902
 
2902
 
2903
 // UNKLINE <mask>
2903
 // UNKLINE <mask>
2904
-func unKLineHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
2904
+func unKLineHandler(server *Server, client *Client, msg ircmsg.Message, rb *ResponseBuffer) bool {
2905
 	details := client.Details()
2905
 	details := client.Details()
2906
 	// check oper permissions
2906
 	// check oper permissions
2907
 	oper := client.Oper()
2907
 	oper := client.Oper()
2931
 }
2931
 }
2932
 
2932
 
2933
 // USER <username> * 0 <realname>
2933
 // USER <username> * 0 <realname>
2934
-func userHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
2934
+func userHandler(server *Server, client *Client, msg ircmsg.Message, rb *ResponseBuffer) bool {
2935
 	if client.registered {
2935
 	if client.registered {
2936
 		rb.Add(nil, server.name, ERR_ALREADYREGISTRED, client.Nick(), client.t("You may not reregister"))
2936
 		rb.Add(nil, server.name, ERR_ALREADYREGISTRED, client.Nick(), client.t("You may not reregister"))
2937
 		return false
2937
 		return false
2986
 }
2986
 }
2987
 
2987
 
2988
 // USERHOST <nickname>{ <nickname>}
2988
 // USERHOST <nickname>{ <nickname>}
2989
-func userhostHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
2989
+func userhostHandler(server *Server, client *Client, msg ircmsg.Message, rb *ResponseBuffer) bool {
2990
 	hasPrivs := client.HasMode(modes.Operator)
2990
 	hasPrivs := client.HasMode(modes.Operator)
2991
 	returnedClients := make(ClientSet)
2991
 	returnedClients := make(ClientSet)
2992
 
2992
 
3034
 }
3034
 }
3035
 
3035
 
3036
 // USERS [parameters]
3036
 // USERS [parameters]
3037
-func usersHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
3037
+func usersHandler(server *Server, client *Client, msg ircmsg.Message, rb *ResponseBuffer) bool {
3038
 	rb.Add(nil, server.name, ERR_USERSDISABLED, client.Nick(), client.t("USERS has been disabled"))
3038
 	rb.Add(nil, server.name, ERR_USERSDISABLED, client.Nick(), client.t("USERS has been disabled"))
3039
 	return false
3039
 	return false
3040
 }
3040
 }
3041
 
3041
 
3042
 // VERSION
3042
 // VERSION
3043
-func versionHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
3043
+func versionHandler(server *Server, client *Client, msg ircmsg.Message, rb *ResponseBuffer) bool {
3044
 	rb.Add(nil, server.name, RPL_VERSION, client.nick, Ver, server.name)
3044
 	rb.Add(nil, server.name, RPL_VERSION, client.nick, Ver, server.name)
3045
 	server.RplISupport(client, rb)
3045
 	server.RplISupport(client, rb)
3046
 	return false
3046
 	return false
3047
 }
3047
 }
3048
 
3048
 
3049
 // WEBIRC <password> <gateway> <hostname> <ip> [:flag1 flag2=x flag3]
3049
 // WEBIRC <password> <gateway> <hostname> <ip> [:flag1 flag2=x flag3]
3050
-func webircHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
3050
+func webircHandler(server *Server, client *Client, msg ircmsg.Message, rb *ResponseBuffer) bool {
3051
 	// only allow unregistered clients to use this command
3051
 	// only allow unregistered clients to use this command
3052
 	if client.registered || client.proxiedIP != nil {
3052
 	if client.registered || client.proxiedIP != nil {
3053
 		return false
3053
 		return false
3221
 }
3221
 }
3222
 
3222
 
3223
 // WHO <mask> [<filter>%<fields>,<type>]
3223
 // WHO <mask> [<filter>%<fields>,<type>]
3224
-func whoHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
3224
+func whoHandler(server *Server, client *Client, msg ircmsg.Message, rb *ResponseBuffer) bool {
3225
 	mask := msg.Params[0]
3225
 	mask := msg.Params[0]
3226
 	var err error
3226
 	var err error
3227
 	if mask == "" {
3227
 	if mask == "" {
3329
 }
3329
 }
3330
 
3330
 
3331
 // WHOIS [<target>] <mask>{,<mask>}
3331
 // WHOIS [<target>] <mask>{,<mask>}
3332
-func whoisHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
3332
+func whoisHandler(server *Server, client *Client, msg ircmsg.Message, rb *ResponseBuffer) bool {
3333
 	var masksString string
3333
 	var masksString string
3334
 	//var target string
3334
 	//var target string
3335
 
3335
 
3390
 }
3390
 }
3391
 
3391
 
3392
 // WHOWAS <nickname> [<count> [<server>]]
3392
 // WHOWAS <nickname> [<count> [<server>]]
3393
-func whowasHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
3393
+func whowasHandler(server *Server, client *Client, msg ircmsg.Message, rb *ResponseBuffer) bool {
3394
 	nicknames := strings.Split(msg.Params[0], ",")
3394
 	nicknames := strings.Split(msg.Params[0], ",")
3395
 
3395
 
3396
 	// 0 means "all the entries", as does a negative number
3396
 	// 0 means "all the entries", as does a negative number
3424
 }
3424
 }
3425
 
3425
 
3426
 // ZNC <module> [params]
3426
 // ZNC <module> [params]
3427
-func zncHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
3427
+func zncHandler(server *Server, client *Client, msg ircmsg.Message, rb *ResponseBuffer) bool {
3428
 	params := msg.Params[1:]
3428
 	params := msg.Params[1:]
3429
 	// #1205: compatibility with Palaver, which sends `ZNC *playback :play ...`
3429
 	// #1205: compatibility with Palaver, which sends `ZNC *playback :play ...`
3430
 	if len(params) == 1 && strings.IndexByte(params[0], ' ') != -1 {
3430
 	if len(params) == 1 && strings.IndexByte(params[0], ' ') != -1 {
3435
 }
3435
 }
3436
 
3436
 
3437
 // fake handler for unknown commands
3437
 // fake handler for unknown commands
3438
-func unknownCommandHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
3438
+func unknownCommandHandler(server *Server, client *Client, msg ircmsg.Message, rb *ResponseBuffer) bool {
3439
 	rb.Add(nil, server.name, ERR_UNKNOWNCOMMAND, client.Nick(), utils.SafeErrorParam(msg.Command), client.t("Unknown command"))
3439
 	rb.Add(nil, server.name, ERR_UNKNOWNCOMMAND, client.Nick(), utils.SafeErrorParam(msg.Command), client.t("Unknown command"))
3440
 	return false
3440
 	return false
3441
 }
3441
 }
3442
 
3442
 
3443
 // fake handler for invalid utf8
3443
 // fake handler for invalid utf8
3444
-func invalidUtf8Handler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
3444
+func invalidUtf8Handler(server *Server, client *Client, msg ircmsg.Message, rb *ResponseBuffer) bool {
3445
 	rb.Add(nil, server.name, "FAIL", utils.SafeErrorParam(msg.Command), "INVALID_UTF8", client.t("Message rejected for containing invalid UTF-8"))
3445
 	rb.Add(nil, server.name, "FAIL", utils.SafeErrorParam(msg.Command), "INVALID_UTF8", client.t("Message rejected for containing invalid UTF-8"))
3446
 	return false
3446
 	return false
3447
 }
3447
 }

+ 1
- 1
irc/ircconn.go View File

45
 type IRCStreamConn struct {
45
 type IRCStreamConn struct {
46
 	conn *utils.WrappedConn
46
 	conn *utils.WrappedConn
47
 
47
 
48
-	reader ircreader.IRCReader
48
+	reader ircreader.Reader
49
 }
49
 }
50
 
50
 
51
 func NewIRCStreamConn(conn *utils.WrappedConn) *IRCStreamConn {
51
 func NewIRCStreamConn(conn *utils.WrappedConn) *IRCStreamConn {

+ 4
- 4
irc/message_cache.go View File

42
 	splitMessage utils.SplitMessage
42
 	splitMessage utils.SplitMessage
43
 }
43
 }
44
 
44
 
45
-func addAllTags(msg *ircmsg.IRCMessage, tags map[string]string, serverTime time.Time, msgid, accountName string) {
45
+func addAllTags(msg *ircmsg.Message, tags map[string]string, serverTime time.Time, msgid, accountName string) {
46
 	msg.UpdateTags(tags)
46
 	msg.UpdateTags(tags)
47
 	msg.SetTag("time", serverTime.Format(IRCv3TimestampFormat))
47
 	msg.SetTag("time", serverTime.Format(IRCv3TimestampFormat))
48
 	if accountName != "*" {
48
 	if accountName != "*" {
73
 	m.command = command
73
 	m.command = command
74
 	m.params = params
74
 	m.params = params
75
 
75
 
76
-	var msg ircmsg.IRCMessage
76
+	var msg ircmsg.Message
77
 	config := server.Config()
77
 	config := server.Config()
78
 	if config.Server.Compatibility.forceTrailing && commandsThatMustUseTrailing[command] {
78
 	if config.Server.Compatibility.forceTrailing && commandsThatMustUseTrailing[command] {
79
 		msg.ForceTrailing()
79
 		msg.ForceTrailing()
110
 
110
 
111
 	if message.Is512() {
111
 	if message.Is512() {
112
 		isTagmsg := command == "TAGMSG"
112
 		isTagmsg := command == "TAGMSG"
113
-		var msg ircmsg.IRCMessage
113
+		var msg ircmsg.Message
114
 		if forceTrailing {
114
 		if forceTrailing {
115
 			msg.ForceTrailing()
115
 			msg.ForceTrailing()
116
 		}
116
 		}
136
 			return
136
 			return
137
 		}
137
 		}
138
 	} else {
138
 	} else {
139
-		var msg ircmsg.IRCMessage
139
+		var msg ircmsg.Message
140
 		if forceTrailing {
140
 		if forceTrailing {
141
 			msg.ForceTrailing()
141
 			msg.ForceTrailing()
142
 		}
142
 		}

+ 1
- 1
irc/monitor.go View File

105
 }
105
 }
106
 
106
 
107
 var (
107
 var (
108
-	monitorSubcommands = map[string]func(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool{
108
+	monitorSubcommands = map[string]func(server *Server, client *Client, msg ircmsg.Message, rb *ResponseBuffer) bool{
109
 		"-": monitorRemoveHandler,
109
 		"-": monitorRemoveHandler,
110
 		"+": monitorAddHandler,
110
 		"+": monitorAddHandler,
111
 		"c": monitorClearHandler,
111
 		"c": monitorClearHandler,

+ 5
- 5
irc/responsebuffer.go View File

36
 	// nested batch.)
36
 	// nested batch.)
37
 	nestedBatches []string
37
 	nestedBatches []string
38
 
38
 
39
-	messages  []ircmsg.IRCMessage
39
+	messages  []ircmsg.Message
40
 	finalized bool
40
 	finalized bool
41
 	target    *Client
41
 	target    *Client
42
 	session   *Session
42
 	session   *Session
43
 }
43
 }
44
 
44
 
45
 // GetLabel returns the label from the given message.
45
 // GetLabel returns the label from the given message.
46
-func GetLabel(msg ircmsg.IRCMessage) string {
46
+func GetLabel(msg ircmsg.Message) string {
47
 	_, value := msg.GetTag(caps.LabelTagName)
47
 	_, value := msg.GetTag(caps.LabelTagName)
48
 	return value
48
 	return value
49
 }
49
 }
57
 	}
57
 	}
58
 }
58
 }
59
 
59
 
60
-func (rb *ResponseBuffer) AddMessage(msg ircmsg.IRCMessage) {
60
+func (rb *ResponseBuffer) AddMessage(msg ircmsg.Message) {
61
 	if rb.finalized {
61
 	if rb.finalized {
62
 		rb.target.server.logger.Error("internal", "message added to finalized ResponseBuffer, undefined behavior")
62
 		rb.target.server.logger.Error("internal", "message added to finalized ResponseBuffer, undefined behavior")
63
 		debug.PrintStack()
63
 		debug.PrintStack()
72
 	rb.messages = append(rb.messages, msg)
72
 	rb.messages = append(rb.messages, msg)
73
 }
73
 }
74
 
74
 
75
-func (rb *ResponseBuffer) setNestedBatchTag(msg *ircmsg.IRCMessage) {
75
+func (rb *ResponseBuffer) setNestedBatchTag(msg *ircmsg.Message) {
76
 	if 0 < len(rb.nestedBatches) {
76
 	if 0 < len(rb.nestedBatches) {
77
 		msg.SetTag("batch", rb.nestedBatches[len(rb.nestedBatches)-1])
77
 		msg.SetTag("batch", rb.nestedBatches[len(rb.nestedBatches)-1])
78
 	}
78
 	}
86
 // Broadcast adds a standard new message to our queue, then sends an unlabeled copy
86
 // Broadcast adds a standard new message to our queue, then sends an unlabeled copy
87
 // to all other sessions.
87
 // to all other sessions.
88
 func (rb *ResponseBuffer) Broadcast(tags map[string]string, prefix string, command string, params ...string) {
88
 func (rb *ResponseBuffer) Broadcast(tags map[string]string, prefix string, command string, params ...string) {
89
-	// can't reuse the IRCMessage object because of tag pollution :-\
89
+	// can't reuse the Message object because of tag pollution :-\
90
 	rb.Add(tags, prefix, command, params...)
90
 	rb.Add(tags, prefix, command, params...)
91
 	for _, session := range rb.session.client.Sessions() {
91
 	for _, session := range rb.session.client.Sessions() {
92
 		if session != rb.session {
92
 		if session != rb.session {

+ 1
- 1
irc/services.go View File

116
 }
116
 }
117
 
117
 
118
 // generic handler for IRC commands like `/NICKSERV INFO`
118
 // generic handler for IRC commands like `/NICKSERV INFO`
119
-func serviceCmdHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
119
+func serviceCmdHandler(server *Server, client *Client, msg ircmsg.Message, rb *ResponseBuffer) bool {
120
 	service, ok := oragonoServicesByCommandAlias[msg.Command]
120
 	service, ok := oragonoServicesByCommandAlias[msg.Command]
121
 	if !ok {
121
 	if !ok {
122
 		server.logger.Warning("internal", "can't handle unrecognized service", msg.Command)
122
 		server.logger.Warning("internal", "can't handle unrecognized service", msg.Command)

+ 1
- 1
irc/uban.go View File

98
 }
98
 }
99
 
99
 
100
 // UBAN <subcommand> [target] [DURATION <duration>] [reason...]
100
 // UBAN <subcommand> [target] [DURATION <duration>] [reason...]
101
-func ubanHandler(server *Server, client *Client, msg ircmsg.IRCMessage, rb *ResponseBuffer) bool {
101
+func ubanHandler(server *Server, client *Client, msg ircmsg.Message, rb *ResponseBuffer) bool {
102
 	subcommand := strings.ToLower(msg.Params[0])
102
 	subcommand := strings.ToLower(msg.Params[0])
103
 	params := msg.Params[1:]
103
 	params := msg.Params[1:]
104
 	var target ubanTarget
104
 	var target ubanTarget

+ 26
- 26
vendor/github.com/goshuirc/irc-go/ircmsg/message.go View File

61
 	ErrorBadParam = errors.New("Cannot have an empty param, a param with spaces, or a param that starts with ':' before the last parameter")
61
 	ErrorBadParam = errors.New("Cannot have an empty param, a param with spaces, or a param that starts with ':' before the last parameter")
62
 )
62
 )
63
 
63
 
64
-// IRCMessage represents an IRC message, as defined by the RFCs and as
64
+// Message represents an IRC message, as defined by the RFCs and as
65
 // extended by the IRCv3 Message Tags specification with the introduction
65
 // extended by the IRCv3 Message Tags specification with the introduction
66
 // of message tags.
66
 // of message tags.
67
-type IRCMessage struct {
67
+type Message struct {
68
 	Prefix         string
68
 	Prefix         string
69
 	Command        string
69
 	Command        string
70
 	Params         []string
70
 	Params         []string
77
 // will be encoded as a "trailing parameter" (preceded by a colon). This is
77
 // will be encoded as a "trailing parameter" (preceded by a colon). This is
78
 // almost never necessary and should not be used except when having to interact
78
 // almost never necessary and should not be used except when having to interact
79
 // with broken implementations that don't correctly interpret IRC messages.
79
 // with broken implementations that don't correctly interpret IRC messages.
80
-func (msg *IRCMessage) ForceTrailing() {
80
+func (msg *Message) ForceTrailing() {
81
 	msg.forceTrailing = true
81
 	msg.forceTrailing = true
82
 }
82
 }
83
 
83
 
84
 // GetTag returns whether a tag is present, and if so, what its value is.
84
 // GetTag returns whether a tag is present, and if so, what its value is.
85
-func (msg *IRCMessage) GetTag(tagName string) (present bool, value string) {
85
+func (msg *Message) GetTag(tagName string) (present bool, value string) {
86
 	if len(tagName) == 0 {
86
 	if len(tagName) == 0 {
87
 		return
87
 		return
88
 	} else if tagName[0] == '+' {
88
 	} else if tagName[0] == '+' {
95
 }
95
 }
96
 
96
 
97
 // HasTag returns whether a tag is present.
97
 // HasTag returns whether a tag is present.
98
-func (msg *IRCMessage) HasTag(tagName string) (present bool) {
98
+func (msg *Message) HasTag(tagName string) (present bool) {
99
 	present, _ = msg.GetTag(tagName)
99
 	present, _ = msg.GetTag(tagName)
100
 	return
100
 	return
101
 }
101
 }
102
 
102
 
103
 // SetTag sets a tag.
103
 // SetTag sets a tag.
104
-func (msg *IRCMessage) SetTag(tagName, tagValue string) {
104
+func (msg *Message) SetTag(tagName, tagValue string) {
105
 	if len(tagName) == 0 {
105
 	if len(tagName) == 0 {
106
 		return
106
 		return
107
 	} else if tagName[0] == '+' {
107
 	} else if tagName[0] == '+' {
118
 }
118
 }
119
 
119
 
120
 // DeleteTag deletes a tag.
120
 // DeleteTag deletes a tag.
121
-func (msg *IRCMessage) DeleteTag(tagName string) {
121
+func (msg *Message) DeleteTag(tagName string) {
122
 	if len(tagName) == 0 {
122
 	if len(tagName) == 0 {
123
 		return
123
 		return
124
 	} else if tagName[0] == '+' {
124
 	} else if tagName[0] == '+' {
129
 }
129
 }
130
 
130
 
131
 // UpdateTags is a convenience to set multiple tags at once.
131
 // UpdateTags is a convenience to set multiple tags at once.
132
-func (msg *IRCMessage) UpdateTags(tags map[string]string) {
132
+func (msg *Message) UpdateTags(tags map[string]string) {
133
 	for name, value := range tags {
133
 	for name, value := range tags {
134
 		msg.SetTag(name, value)
134
 		msg.SetTag(name, value)
135
 	}
135
 	}
136
 }
136
 }
137
 
137
 
138
 // AllTags returns all tags as a single map.
138
 // AllTags returns all tags as a single map.
139
-func (msg *IRCMessage) AllTags() (result map[string]string) {
139
+func (msg *Message) AllTags() (result map[string]string) {
140
 	result = make(map[string]string, len(msg.tags)+len(msg.clientOnlyTags))
140
 	result = make(map[string]string, len(msg.tags)+len(msg.clientOnlyTags))
141
 	for name, value := range msg.tags {
141
 	for name, value := range msg.tags {
142
 		result[name] = value
142
 		result[name] = value
148
 }
148
 }
149
 
149
 
150
 // ClientOnlyTags returns the client-only tags (the tags with the + prefix).
150
 // ClientOnlyTags returns the client-only tags (the tags with the + prefix).
151
-// The returned map may be internal storage of the IRCMessage object and
151
+// The returned map may be internal storage of the Message object and
152
 // should not be modified.
152
 // should not be modified.
153
-func (msg *IRCMessage) ClientOnlyTags() map[string]string {
153
+func (msg *Message) ClientOnlyTags() map[string]string {
154
 	return msg.clientOnlyTags
154
 	return msg.clientOnlyTags
155
 }
155
 }
156
 
156
 
157
 // ParseLine creates and returns a message from the given IRC line.
157
 // ParseLine creates and returns a message from the given IRC line.
158
-func ParseLine(line string) (ircmsg IRCMessage, err error) {
158
+func ParseLine(line string) (ircmsg Message, err error) {
159
 	return parseLine(line, 0, 0)
159
 	return parseLine(line, 0, 0)
160
 }
160
 }
161
 
161
 
162
-// ParseLineStrict creates and returns an IRCMessage from the given IRC line,
162
+// ParseLineStrict creates and returns an Message from the given IRC line,
163
 // taking the maximum length into account and truncating the message as appropriate.
163
 // taking the maximum length into account and truncating the message as appropriate.
164
 // If fromClient is true, it enforces the client limit on tag data length (4094 bytes),
164
 // If fromClient is true, it enforces the client limit on tag data length (4094 bytes),
165
 // allowing the server to return ERR_INPUTTOOLONG as appropriate. If truncateLen is
165
 // allowing the server to return ERR_INPUTTOOLONG as appropriate. If truncateLen is
166
 // nonzero, it is the length at which the non-tag portion of the message is truncated.
166
 // nonzero, it is the length at which the non-tag portion of the message is truncated.
167
-func ParseLineStrict(line string, fromClient bool, truncateLen int) (ircmsg IRCMessage, err error) {
167
+func ParseLineStrict(line string, fromClient bool, truncateLen int) (ircmsg Message, err error) {
168
 	maxTagDataLength := MaxlenTagData
168
 	maxTagDataLength := MaxlenTagData
169
 	if fromClient {
169
 	if fromClient {
170
 		maxTagDataLength = MaxlenClientTagData
170
 		maxTagDataLength = MaxlenClientTagData
180
 	return str[i:]
180
 	return str[i:]
181
 }
181
 }
182
 
182
 
183
-func parseLine(line string, maxTagDataLength int, truncateLen int) (ircmsg IRCMessage, err error) {
183
+func parseLine(line string, maxTagDataLength int, truncateLen int) (ircmsg Message, err error) {
184
 	// remove either \n or \r\n from the end of the line:
184
 	// remove either \n or \r\n from the end of the line:
185
 	line = strings.TrimSuffix(line, "\n")
185
 	line = strings.TrimSuffix(line, "\n")
186
 	line = strings.TrimSuffix(line, "\r")
186
 	line = strings.TrimSuffix(line, "\r")
279
 }
279
 }
280
 
280
 
281
 // helper to parse tags
281
 // helper to parse tags
282
-func (ircmsg *IRCMessage) parseTags(tags string) (err error) {
282
+func (ircmsg *Message) parseTags(tags string) (err error) {
283
 	for 0 < len(tags) {
283
 	for 0 < len(tags) {
284
 		tagEnd := strings.IndexByte(tags, ';')
284
 		tagEnd := strings.IndexByte(tags, ';')
285
 		endPos := tagEnd
285
 		endPos := tagEnd
311
 	return nil
311
 	return nil
312
 }
312
 }
313
 
313
 
314
-// MakeMessage provides a simple way to create a new IRCMessage.
315
-func MakeMessage(tags map[string]string, prefix string, command string, params ...string) (ircmsg IRCMessage) {
314
+// MakeMessage provides a simple way to create a new Message.
315
+func MakeMessage(tags map[string]string, prefix string, command string, params ...string) (ircmsg Message) {
316
 	ircmsg.Prefix = prefix
316
 	ircmsg.Prefix = prefix
317
 	ircmsg.Command = command
317
 	ircmsg.Command = command
318
 	ircmsg.Params = params
318
 	ircmsg.Params = params
320
 	return ircmsg
320
 	return ircmsg
321
 }
321
 }
322
 
322
 
323
-// Line returns a sendable line created from an IRCMessage.
324
-func (ircmsg *IRCMessage) Line() (result string, err error) {
323
+// Line returns a sendable line created from an Message.
324
+func (ircmsg *Message) Line() (result string, err error) {
325
 	bytes, err := ircmsg.line(0, 0, 0, 0)
325
 	bytes, err := ircmsg.line(0, 0, 0, 0)
326
 	if err == nil {
326
 	if err == nil {
327
 		result = string(bytes)
327
 		result = string(bytes)
329
 	return
329
 	return
330
 }
330
 }
331
 
331
 
332
-// LineBytes returns a sendable line created from an IRCMessage.
333
-func (ircmsg *IRCMessage) LineBytes() (result []byte, err error) {
332
+// LineBytes returns a sendable line created from an Message.
333
+func (ircmsg *Message) LineBytes() (result []byte, err error) {
334
 	result, err = ircmsg.line(0, 0, 0, 0)
334
 	result, err = ircmsg.line(0, 0, 0, 0)
335
 	return
335
 	return
336
 }
336
 }
337
 
337
 
338
-// LineBytesStrict returns a sendable line, as a []byte, created from an IRCMessage.
338
+// LineBytesStrict returns a sendable line, as a []byte, created from an Message.
339
 // fromClient controls whether the server-side or client-side tag length limit
339
 // fromClient controls whether the server-side or client-side tag length limit
340
 // is enforced. If truncateLen is nonzero, it is the length at which the
340
 // is enforced. If truncateLen is nonzero, it is the length at which the
341
 // non-tag portion of the message is truncated.
341
 // non-tag portion of the message is truncated.
342
-func (ircmsg *IRCMessage) LineBytesStrict(fromClient bool, truncateLen int) ([]byte, error) {
342
+func (ircmsg *Message) LineBytesStrict(fromClient bool, truncateLen int) ([]byte, error) {
343
 	var tagLimit, clientOnlyTagDataLimit, serverAddedTagDataLimit int
343
 	var tagLimit, clientOnlyTagDataLimit, serverAddedTagDataLimit int
344
 	if fromClient {
344
 	if fromClient {
345
 		// enforce client max tags:
345
 		// enforce client max tags:
359
 	return len(param) == 0 || strings.IndexByte(param, ' ') != -1 || param[0] == ':'
359
 	return len(param) == 0 || strings.IndexByte(param, ' ') != -1 || param[0] == ':'
360
 }
360
 }
361
 
361
 
362
-// line returns a sendable line created from an IRCMessage.
363
-func (ircmsg *IRCMessage) line(tagLimit, clientOnlyTagDataLimit, serverAddedTagDataLimit, truncateLen int) (result []byte, err error) {
362
+// line returns a sendable line created from an Message.
363
+func (ircmsg *Message) line(tagLimit, clientOnlyTagDataLimit, serverAddedTagDataLimit, truncateLen int) (result []byte, err error) {
364
 	if len(ircmsg.Command) == 0 {
364
 	if len(ircmsg.Command) == 0 {
365
 		return nil, ErrorCommandMissing
365
 		return nil, ErrorCommandMissing
366
 	}
366
 	}

+ 1
- 1
vendor/github.com/goshuirc/irc-go/ircmsg/tags.go View File

30
 // EscapeTagValue takes a value, and returns an escaped message tag value.
30
 // EscapeTagValue takes a value, and returns an escaped message tag value.
31
 //
31
 //
32
 // This function is automatically used when lines are created from an
32
 // This function is automatically used when lines are created from an
33
-// IRCMessage, so you don't need to call it yourself before creating a line.
33
+// Message, so you don't need to call it yourself before creating a line.
34
 func EscapeTagValue(inString string) string {
34
 func EscapeTagValue(inString string) string {
35
 	return valtoescape.Replace(inString)
35
 	return valtoescape.Replace(inString)
36
 }
36
 }

+ 9
- 9
vendor/github.com/goshuirc/irc-go/ircreader/ircreader.go View File

10
 )
10
 )
11
 
11
 
12
 /*
12
 /*
13
-IRCReader is an optimized line reader for IRC lines containing tags;
13
+Reader is an optimized line reader for IRC lines containing tags;
14
 most IRC lines will not approach the maximum line length (8191 bytes
14
 most IRC lines will not approach the maximum line length (8191 bytes
15
 of tag data, plus 512 bytes of message data), so we want a buffered
15
 of tag data, plus 512 bytes of message data), so we want a buffered
16
 reader that can start with a smaller buffer and expand if necessary,
16
 reader that can start with a smaller buffer and expand if necessary,
21
 	ErrReadQ = errors.New("readQ exceeded (read too many bytes without terminating newline)")
21
 	ErrReadQ = errors.New("readQ exceeded (read too many bytes without terminating newline)")
22
 )
22
 )
23
 
23
 
24
-type IRCReader struct {
24
+type Reader struct {
25
 	conn io.Reader
25
 	conn io.Reader
26
 
26
 
27
 	initialSize int
27
 	initialSize int
34
 	eof        bool
34
 	eof        bool
35
 }
35
 }
36
 
36
 
37
-// Returns a new *IRCReader with sane buffer size limits.
38
-func NewIRCReader(conn io.Reader) *IRCReader {
39
-	var reader IRCReader
37
+// Returns a new *Reader with sane buffer size limits.
38
+func NewIRCReader(conn io.Reader) *Reader {
39
+	var reader Reader
40
 	reader.Initialize(conn, 512, 8192+1024)
40
 	reader.Initialize(conn, 512, 8192+1024)
41
 	return &reader
41
 	return &reader
42
 }
42
 }
43
 
43
 
44
-// "Placement new" for an IRCReader; initializes it with custom buffer size
44
+// "Placement new" for a Reader; initializes it with custom buffer size
45
 // limits.
45
 // limits.
46
-func (cc *IRCReader) Initialize(conn io.Reader, initialSize, maxSize int) {
47
-	*cc = IRCReader{}
46
+func (cc *Reader) Initialize(conn io.Reader, initialSize, maxSize int) {
47
+	*cc = Reader{}
48
 	cc.conn = conn
48
 	cc.conn = conn
49
 	cc.initialSize = initialSize
49
 	cc.initialSize = initialSize
50
 	cc.maxSize = maxSize
50
 	cc.maxSize = maxSize
54
 // or \r\n as the line terminator (but not \r in isolation). Passes through
54
 // or \r\n as the line terminator (but not \r in isolation). Passes through
55
 // errors from the underlying connection. Returns ErrReadQ if the buffer limit
55
 // errors from the underlying connection. Returns ErrReadQ if the buffer limit
56
 // was exceeded without a terminating \n.
56
 // was exceeded without a terminating \n.
57
-func (cc *IRCReader) ReadLine() ([]byte, error) {
57
+func (cc *Reader) ReadLine() ([]byte, error) {
58
 	for {
58
 	for {
59
 		// try to find a terminated line in the buffered data already read
59
 		// try to find a terminated line in the buffered data already read
60
 		nlidx := bytes.IndexByte(cc.buf[cc.searchFrom:cc.end], '\n')
60
 		nlidx := bytes.IndexByte(cc.buf[cc.searchFrom:cc.end], '\n')

+ 1
- 1
vendor/modules.txt View File

21
 # github.com/gorilla/websocket v1.4.2 => github.com/oragono/websocket v1.4.2-oragono1
21
 # github.com/gorilla/websocket v1.4.2 => github.com/oragono/websocket v1.4.2-oragono1
22
 ## explicit
22
 ## explicit
23
 github.com/gorilla/websocket
23
 github.com/gorilla/websocket
24
-# github.com/goshuirc/irc-go v0.0.0-20210304031553-cf78e9176f96
24
+# github.com/goshuirc/irc-go v0.0.0-20210311004346-ea7a188a73fe
25
 ## explicit
25
 ## explicit
26
 github.com/goshuirc/irc-go/ircfmt
26
 github.com/goshuirc/irc-go/ircfmt
27
 github.com/goshuirc/irc-go/ircmsg
27
 github.com/goshuirc/irc-go/ircmsg

Loading…
Cancel
Save