Преглед изворни кода

modes: Add experimental, untested +R user mode to block messages from unregistered users

tags/v0.9.0
Daniel Oaks пре 6 година
родитељ
комит
f9ef97b204
3 измењених фајлова са 17 додато и 7 уклоњено
  1. 1
    0
      irc/help.go
  2. 6
    5
      irc/modes.go
  3. 10
    2
      irc/server.go

+ 1
- 0
irc/help.go Прегледај датотеку

@@ -64,6 +64,7 @@ Oragono supports the following user modes:
64 64
   +a  |  User is marked as being away. This mode is set with the /AWAY command.
65 65
   +i  |  User is marked as invisible (their channels are hidden from whois replies).
66 66
   +o  |  User is an IRC operator.
67
+  +R  |  User only accepts messages from other registered users. 
67 68
   +s  |  Server Notice Masks (see help with /HELPOP snomasks).
68 69
   +Z  |  User is connected via TLS.`
69 70
 	snomaskHelpText = `== Server Notice Masks ==

+ 6
- 5
irc/modes.go Прегледај датотеку

@@ -101,6 +101,7 @@ const (
101 101
 	LocalOperator   Mode = 'O'
102 102
 	Operator        Mode = 'o'
103 103
 	Restricted      Mode = 'r'
104
+	RegisteredOnly  Mode = 'R'
104 105
 	ServerNotice    Mode = 's'
105 106
 	TLS             Mode = 'Z'
106 107
 	UserRoleplaying Mode = 'E'
@@ -110,7 +111,7 @@ const (
110 111
 var (
111 112
 	// SupportedUserModes are the user modes that we actually support (modifying).
112 113
 	SupportedUserModes = Modes{
113
-		Away, Invisible, Operator, ServerNotice, UserRoleplaying,
114
+		Away, Invisible, Operator, RegisteredOnly, ServerNotice, UserRoleplaying,
114 115
 	}
115 116
 	// supportedUserModesString acts as a cache for when we introduce users
116 117
 	supportedUserModesString = SupportedUserModes.String()
@@ -127,9 +128,9 @@ const (
127 128
 	Moderated       Mode = 'm' // flag
128 129
 	NoOutside       Mode = 'n' // flag
129 130
 	OpOnlyTopic     Mode = 't' // flag
130
-	RegisteredOnly  Mode = 'r' // flag
131
-	Secret          Mode = 's' // flag
132
-	UserLimit       Mode = 'l' // flag arg
131
+	// RegisteredOnly mode is reused here from umode definition
132
+	Secret    Mode = 's' // flag
133
+	UserLimit Mode = 'l' // flag arg
133 134
 )
134 135
 
135 136
 var (
@@ -281,7 +282,7 @@ func (client *Client) applyUserModeChanges(force bool, changes ModeChanges) Mode
281 282
 
282 283
 	for _, change := range changes {
283 284
 		switch change.mode {
284
-		case Invisible, WallOps, UserRoleplaying, Operator, LocalOperator:
285
+		case Invisible, WallOps, UserRoleplaying, Operator, LocalOperator, RegisteredOnly:
285 286
 			switch change.op {
286 287
 			case Add:
287 288
 				if !force && (change.mode == Operator || change.mode == LocalOperator) {

+ 10
- 2
irc/server.go Прегледај датотеку

@@ -1133,7 +1133,11 @@ func privmsgHandler(server *Server, client *Client, msg ircmsg.IrcMessage) bool
1133 1133
 				clientOnlyTags = nil
1134 1134
 			}
1135 1135
 			msgid := server.generateMessageID()
1136
-			user.SendSplitMsgFromClient(msgid, client, clientOnlyTags, "PRIVMSG", user.nick, splitMsg)
1136
+			// restrict messages appropriately when +R is set
1137
+			// intentionally make the sending user think the message went through fine
1138
+			if !user.flags[RegisteredOnly] || client.registered {
1139
+				user.SendSplitMsgFromClient(msgid, client, clientOnlyTags, "PRIVMSG", user.nick, splitMsg)
1140
+			}
1137 1141
 			if client.capabilities[EchoMessage] {
1138 1142
 				client.SendSplitMsgFromClient(msgid, client, clientOnlyTags, "PRIVMSG", user.nick, splitMsg)
1139 1143
 			}
@@ -1829,7 +1833,11 @@ func noticeHandler(server *Server, client *Client, msg ircmsg.IrcMessage) bool {
1829 1833
 				clientOnlyTags = nil
1830 1834
 			}
1831 1835
 			msgid := server.generateMessageID()
1832
-			user.SendSplitMsgFromClient(msgid, client, clientOnlyTags, "NOTICE", user.nick, splitMsg)
1836
+			// restrict messages appropriately when +R is set
1837
+			// intentionally make the sending user think the message went through fine
1838
+			if !user.flags[RegisteredOnly] || client.registered {
1839
+				user.SendSplitMsgFromClient(msgid, client, clientOnlyTags, "NOTICE", user.nick, splitMsg)
1840
+			}
1833 1841
 			if client.capabilities[EchoMessage] {
1834 1842
 				client.SendSplitMsgFromClient(msgid, client, clientOnlyTags, "NOTICE", user.nick, splitMsg)
1835 1843
 			}

Loading…
Откажи
Сачувај