From fca2900918a60cc96689a98d417a0b9f5e822d5e Mon Sep 17 00:00:00 2001 From: Conrad Lukawski Date: Mon, 8 Jun 2020 14:43:58 -0400 Subject: [PATCH] Add +T no-CTCP usermode --- irc/handlers.go | 6 ++++++ irc/help.go | 4 +++- irc/modes.go | 2 +- irc/modes/modes.go | 1 + 4 files changed, 11 insertions(+), 2 deletions(-) diff --git a/irc/handlers.go b/irc/handlers.go index c68b2170..8ea5340c 100644 --- a/irc/handlers.go +++ b/irc/handlers.go @@ -1938,6 +1938,12 @@ func dispatchMessageToTarget(client *Client, tags map[string]string, histType hi } return } + + // Restrict CTCP message for target user with +T + if user.modes.HasMode(modes.UserNoCTCP) && message.IsRestrictedCTCPMessage() { + return + } + tDetails := user.Details() tnick := tDetails.nick diff --git a/irc/help.go b/irc/help.go index 4dbd2c82..fd41878a 100644 --- a/irc/help.go +++ b/irc/help.go @@ -51,6 +51,7 @@ Oragono supports the following channel modes: +R | Only registered users can join the channel. +s | Secret mode, channel won't show up in /LIST or whois replies. +t | Only channel opers can modify the topic. + +C | Clients are blocked from sending CTCP messages in the channel. = Prefixes = @@ -68,7 +69,8 @@ Oragono supports the following user modes: +o | User is an IRC operator. +R | User only accepts messages from other registered users. +s | Server Notice Masks (see help with /HELPOP snomasks). - +Z | User is connected via TLS.` + +Z | User is connected via TLS. + +T | User is blocked from sending CTCP messages.` snomaskHelpText = `== Server Notice Masks == Oragono supports the following server notice masks for operators: diff --git a/irc/modes.go b/irc/modes.go index acea6b9d..86ab0cd6 100644 --- a/irc/modes.go +++ b/irc/modes.go @@ -34,7 +34,7 @@ func ApplyUserModeChanges(client *Client, changes modes.ModeChanges, force bool, for _, change := range changes { switch change.Mode { - case modes.Bot, modes.Invisible, modes.WallOps, modes.UserRoleplaying, modes.Operator, modes.LocalOperator, modes.RegisteredOnly: + case modes.Bot, modes.Invisible, modes.WallOps, modes.UserRoleplaying, modes.Operator, modes.LocalOperator, modes.RegisteredOnly, modes.UserNoCTCP: switch change.Op { case modes.Add: if (change.Mode == modes.Operator || change.Mode == modes.LocalOperator) && !(force && oper != nil) { diff --git a/irc/modes/modes.go b/irc/modes/modes.go index ae2d9224..42e2ef42 100644 --- a/irc/modes/modes.go +++ b/irc/modes/modes.go @@ -105,6 +105,7 @@ const ( RegisteredOnly Mode = 'R' ServerNotice Mode = 's' TLS Mode = 'Z' + UserNoCTCP Mode = 'T' UserRoleplaying Mode = 'E' WallOps Mode = 'w' )