/* GoToSocial Copyright (C) 2021 GoToSocial Authors admin@gotosocial.org This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package mastotypes // Filter represents a user-defined filter for determining which statuses should not be shown to the user. See https://docs.joinmastodon.org/entities/filter/ // If whole_word is true , client app should do: // Define ‘word constituent character’ for your app. In the official implementation, it’s [A-Za-z0-9_] in JavaScript, and [[:word:]] in Ruby. // Ruby uses the POSIX character class (Letter | Mark | Decimal_Number | Connector_Punctuation). // If the phrase starts with a word character, and if the previous character before matched range is a word character, its matched range should be treated to not match. // If the phrase ends with a word character, and if the next character after matched range is a word character, its matched range should be treated to not match. // Please check app/javascript/mastodon/selectors/index.js and app/lib/feed_manager.rb in the Mastodon source code for more details. type Filter struct { // The ID of the filter in the database. ID string `json:"id"` // The text to be filtered. Phrase string `json:"text"` // The contexts in which the filter should be applied. // Array of String (Enumerable anyOf) // home = home timeline and lists // notifications = notifications timeline // public = public timelines // thread = expanded thread of a detailed status Context []string `json:"context"` // Should the filter consider word boundaries? WholeWord bool `json:"whole_word"` // When the filter should no longer be applied (ISO 8601 Datetime), or null if the filter does not expire ExpiresAt string `json:"expires_at,omitempty"` // Should matching entities in home and notifications be dropped by the server? Irreversible bool `json:"irreversible"` }