User:BZPN/PagePreparation
DiscordRCFeed extension provides the Discord versions of FormattedRCFeed and RCFeedFormatter subclasses which can be used in $wgRCFeeds .
Requirements
- Setting a feed requires the sockets PHP extension. If the extension is not enabled, actions like edits, moves, etc may work, but the action may not get logged in recent changes at all. See Manual:$wgRCFeeds for details.
- Apache should have NE (NoEscape) flag on to prevent issues in URLs. By default you should have this enabled.
Installation
Additional options
You can set the element that has the following key for the $wgRCFeeds['discord']
:
Name | Possible value | Description | Default |
---|---|---|---|
Display options | |||
'style'
|
'structure' , 'embed' or 'inline'
|
Determine how the feed is shown. | 'structure'
|
'user_tools'
|
See below | Controlling which tools to be included displaying the feed. See #Controlling Page Tools and User Tools below for details. | defined in code |
'page_tools'
| |||
Ignoring changes | |||
'omit_bots'
|
true or false
|
Whether to skip bot edits. Same as described on Manual:$wgRCFeeds. | false
|
'omit_anon'
|
Whether to skip anon edits. Same as described on Manual:$wgRCFeeds. | ||
'omit_user'
|
Whether to skip registered users. Same as described on Manual:$wgRCFeeds. | ||
'omit_minor'
|
Whether to skip minor edits. Same as described on Manual:$wgRCFeeds. | ||
'omit_patrolled'
|
Whether to skip patrolled edits. Same as described on Manual:$wgRCFeeds. | ||
'omit_talk'
|
Whether to skip changes on talk pages. | ||
'omit_namespaces'
|
See below | Lists for changes to be ignored by the feed. See #Filtering Notifications below for details. | []
|
'omit_types'
| |||
'omit_log_types'
|
['patrol']
| ||
'omit_log_actions'
|
[]
| ||
'omit_content_models'
| |||
Scoping changes | |||
'only_talk'
|
true or false
|
If this is true , only changes on talk pages would be displayed as all other changes are ignored.
|
false
|
'only_namespaces'
|
See below | If not empty, only changes that match the given condition(s) are sent. See #Filtering Notifications below for details. | []
|
'only_types'
| |||
'only_log_types'
| |||
'only_log_actions'
| |||
'only_content_models'
| |||
Other | |||
'request_replace'
|
See below | An array which used to override the post data of the webhook request. See #Webhook Request Overriding below for details. | []
|
Filtering Notifications
$wgRCFeeds['discord']['omit_namespaces']
is a list that contains namespaces should be omitted.
// Disabling notifications from user talk page
$wgRCFeeds['discord']['omit_namespaces'] = [ NS_USER_TALK ];
// Disabling notifications from talk pages.
$wgRCFeeds['discord']['omit_namespaces'] = [
NS_TALK,
NS_USER_TALK,
NS_PROJECT_TALK,
NS_FILE_TALK,
NS_MEDIAWIKI_TALK,
NS_TEMPLATE_TALK,
NS_HELP_TALK,
NS_CATEGORY_TALK,
NS_MODULE_TALK,
];
The others are similar.
'omit_types'
can containRC_EDIT
,RC_NEW
,RC_LOG
andRC_EXTERNAL
. (see more) Note thatRC_CATEGORIZE
is always omitted by the same cause of phab:T127360.'omit_log_types'
can contain'move'
,'protect'
,'delete'
,'block'
,'upload'
...'omit_log_actions'
can contain'move/move-noredirect'
,'block/block'
,'block/unblock'
... (see more)'omit_content_models'
can containCONTENT_MODEL_WIKITEXT
,CONTENT_MODEL_JAVASCRIPT
,CONTENT_MODEL_CSS
... (see more)
The next example shows how to disable the new user notification.
$wgRCFeeds['discord']['omit_log_types'] = [
'newusers',
];
Controlling Page Tools and User Tools
Page tools and user tools are tools shown after page or user link.
Option | Description | Default |
---|---|---|
'user_tools'
|
If this is false , user links of the feed would not get additional tool links.
|
(talk | contribs) |
'page_tools'
|
If this is false , page links of the feed would not get additional tool links.
|
(hist | diff) |
// Remove page tools
$wgRCFeeds['discord']['page_tools'] = false;
// Redefine user tools
$wgRCFeeds['discord']['user_tools'] = [
[
'target' => 'special',
'special' => 'Block',
'text' => 'IP Block'
],
[
'target' => 'talk',
'text' => 'Discussion'
],
[
'target' => 'special',
'special' => 'Contributions',
// message would be shown if 'msg' is given.
'msg' => 'contribslink'
],
];
The full default values can be found in includes/Constants.php.
Webhook Request Overriding
$wgRCFeeds['discord']['request_replace']
is an associative array which used to override the post data of the webhook request.
You can set username or avatar using this instead of setting in Discord.
Visit https://discord.com/developers/docs/resources/webhook#execute-webhook-jsonform-params for all available parameters.
$wgRCFeeds['discord']['request_replace'] = [
'username' => 'Captain Hook',
'avatar_url' => 'https://upload.wikimedia.org/wikipedia/commons/7/79/MediaWiki-48px.png'
];
Next example shows how to reuse your icon set in $wgLogos.
$wgRCFeeds['discord']['request_replace'] = [
'avatar_url' => "$wgCanonicalServer/${wgLogos['icon']}",
];
Registering Multiple Webhooks
You can register multiple webhooks with separate settings. Only the important part is that all keys of the feeds you want to must start with 'discord'
, for example, 'discord'
, 'discord-second'
, 'discord2'
and 'discord_copy'
are valid keys.
wfLoadExtension( 'DiscordRCFeed' );
// Divide anonymous and registered users.
$wgRCFeeds = [
'discord' => [
'url' => 'https://discord.com/api/webhooks/aaa/xxxx',
'omit_user' = true,
],
'discord_registered' => [
'url' => 'https://discord.com/api/webhooks/bbb/xxxx',
'omit_anon' = true,
],
];
Configuration Examples
Splitting changes on talk pages from others
$wgRCFeeds = [
'discord_content' => [
'url' => 'https://discord.com/api/webhooks/aaa/xxxx',
'omit_talk' => true,
],
'discord_talk' => [
'url' => 'https://discord.com/api/webhooks/bbb/xxxx',
'only_talk' => true,
],
];
Note that this is not suitable for wiki where Structured Discussions is enabled because a page on NS_TOPIC
is not considered as a talk page by Title::isTalkPage()
. In that case, filtering by namespace is only the solution:
$wgRCFeeds['discord'] = [
'url' => 'https://discord.com/api/webhooks/aaa/xxxx',
'omit_namespaces' => [
NS_TALK,
NS_USER_TALK,
NS_PROJECT_TALK,
NS_FILE_TALK,
NS_MEDIAWIKI_TALK,
NS_TEMPLATE_TALK,
NS_HELP_TALK,
NS_CATEGORY_TALK,
829, // NS_MODULE_TALK, if Scribunto is installed
2600, // NS_TOPIC
// could be longer
],
];
$wgRCFeeds['discord_talk'] = [
'url' => 'https://discord.com/api/webhooks/bbb/xxxx',
'only_namespaces' => $wgRCFeeds['discord']['omit_namespaces'],
];
Reusing a feed setting for multiple servers
// Define the source.
$wgRCFeeds['discord1'] = [
'url' => 'https://discord.com/api/webhooks/aaa/xxxx',
'omit_bots' => true,
'omit_minor' => true,
'omit_nemespaces' => [
NS_PROJECT,
NS_TEMPLATE,
NS_MODULE,
NS_USER,
],
'only_types' => [ RC_EDIT, RC_NEW ],
];
// Reuse the same configuration.
$wgRCFeeds['discord2'] = $wgRCFeeds['discord1'];
$wgRCFeeds['discord2']['url'] = 'https://discord.com/api/webhooks/bbb/xxxx',
// Reuse but with some tweak.
$wgRCFeeds['discord3'] = $wgRCFeeds['discord1'];
$wgRCFeeds['discord3']['url'] = 'https://discord.com/api/webhooks/ccc/xxxx',
$wgRCFeeds['discord3']['omit_minor'] = false;
unset( $wgRCFeeds['discord3']['only_types'] );
JavaScript Changes Only
$wgRCFeeds = [
'discord' => [
'url' => 'https://discord.com/api/webhooks/xxx/xxxx',
'only_content_models' => CONTENT_MODEL_JAVASCRIPT,
],
];
Notes
- Basically, DiscordRCFeed is a fork of DiscordNotifications, but heavily modified.
- The basic usage of $wgRCFeeds is like below:But because the
$wgRCFeeds['discord'] = [ 'formatter' => 'MediaWiki\Extension\DiscordRCFeed\DiscordRCFeedFormatter', 'url' => 'https://discord.com/api/webhooks/xxx/xxxx', ];
'formatter'
value is too long for the end-users, DiscordRCFeed automatically uses'MediaWiki\Extension\DiscordRCFeed\DiscordRCFeedFormatter'
as its default formatter, if the value is omitted and the key of RCFeed is starts with'discord'
.