Compare commits
97 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| d81d1e6cd1 | |||
| 342cb911a1 | |||
| 23965c4b28 | |||
| 7bce8b2218 | |||
| cd41b8661d | |||
| 19cd1e778b | |||
| e5ec85956b | |||
| 9337f420cf | |||
| 91f04aa76a | |||
| ed99a8dddd | |||
| 55e4e85ecf | |||
| 46837a7493 | |||
| d18d2db7e4 | |||
| 5504d01903 | |||
| 298106ece1 | |||
| 5fcb539889 | |||
| cf837f82aa | |||
| c2f1cee62e | |||
| e9695888f4 | |||
| ae789d15a2 | |||
| a63eaf3a85 | |||
| c575f015b3 | |||
| 07e1d5b94d | |||
| 27332b8fc6 | |||
| 1313b1b318 | |||
| 1ba60e4275 | |||
| 61c91ef4c8 | |||
| 094c9943ad | |||
| 9d14b12829 | |||
| bd74a3a6d9 | |||
| 67b73e8807 | |||
| 799a5f8462 | |||
| 6fca3ad4fe | |||
| e5a0efb4c9 | |||
| a5de5c323d | |||
| 1245a68286 | |||
| e3a356c430 | |||
| 02044f2ca0 | |||
| 7b1504bc67 | |||
| c9d3370afa | |||
| 1ae6d2505d | |||
| 818134780c | |||
| 4d52fa4644 | |||
| 2ddb00328b | |||
| ffcce02ffb | |||
| 266c428f6f | |||
| 58da9dad15 | |||
| 812cb525f3 | |||
| f30ebb0ad5 | |||
| 87546624e2 | |||
| 72fee10f32 | |||
| 60604ddb6b | |||
| 54a2b84a0e | |||
| 52e578dc13 | |||
| d7b2fcf9d3 | |||
| cd8f91388a | |||
| 6c44fdeaf1 | |||
| 6b138edf84 | |||
| 367d50494b | |||
| 83e505d39b | |||
| 5bdc31f6e8 | |||
| 42f292f17f | |||
| 2a9a65a59a | |||
| 2a560d9acc | |||
| 0b91e8edc8 | |||
| 96070a6538 | |||
| 80f28e5920 | |||
| 27d39a9d4a | |||
| e5b1669d53 | |||
| d3c49f1123 | |||
| 5ea635fd9a | |||
| 4304818bdb | |||
| 3fb4b609d4 | |||
| 83deddd7ee | |||
| 160a512d67 | |||
| f4dc6960bb | |||
| c24fee7a66 | |||
| 1e962c55fb | |||
| 0a6992b13b | |||
| 95567934b0 | |||
| 5e04b3afda | |||
| 91610c72fd | |||
| f1cae6b097 | |||
| 1a9cbbf48f | |||
| df0b14017b | |||
| ffc78324ff | |||
| 5a303252e3 | |||
| 4ec63619f5 | |||
| 572d9e3d87 | |||
| 3eb34310ef | |||
| 7c20f06902 | |||
| 144499a248 | |||
| 079e688ee9 | |||
| fb6e0f7755 | |||
| 4e17d17de6 | |||
| f3b2531380 | |||
| 536a4afe13 |
@@ -1,6 +1,6 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2018 Jayden Bailey
|
||||
Copyright (c) 2021 Jayden Bailey
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
|
||||
@@ -10,15 +10,16 @@ Multiple webhook URLs are supported and messages will be sent to all of them.
|
||||
</p>
|
||||
|
||||
## Requirements
|
||||
- **Discord webhook URL**: This can be obtained by editing a channel on a server with the correct permissions.
|
||||
- **MediaWiki 1.31+**
|
||||
|
||||
### Recommended
|
||||
- **cURL**: By default, this extension sends requests using cURL. If you don't have cURL, you could try setting `$wgDiscordUseFileGetContents` to `true` instead, but this is not recommended.
|
||||
- **Discord webhook URL**: Found by editing a channel -> Integrations -> Webhooks
|
||||
- **MediaWiki**: This extension aims to always support the [latest LTS release](https://www.mediawiki.org/wiki/Version_lifecycle).
|
||||
- Use the branch that is equal to, or below your current version.
|
||||
- We do not support versions of MediaWiki that are considered end-of-life.
|
||||
- The `master` branch may contain changes that are only applicable to the current alpha version of MediaWiki.
|
||||
- **[cURL](https://www.php.net/curl)** (likely installed already). Without this, the extension may still work, but requests will be sent inefficiently.
|
||||
|
||||
## Installation
|
||||
|
||||
1. Clone this repository to your MediaWiki installation's `extensions` folder using `git clone https://github.com/jaydenkieran/mw-discord.git Discord`
|
||||
1. Clone this repository to your MediaWiki installation's `extensions` folder using `git clone https://github.com/jaydenkieran/mw-discord.git -b REL1_35 Discord`
|
||||
2. Modify your `LocalSettings.php` file and add:
|
||||
|
||||
```php
|
||||
@@ -41,26 +42,30 @@ This extension can be configured using the `LocalSettings.php` file in your Medi
|
||||
| `$wgDiscordWebhookURL` | string/array | Discord webhook URLs
|
||||
|
||||
### Optional
|
||||
These parameters aren't required for the extension to work.
|
||||
|
||||
| Variable | Type | Description | Default |
|
||||
| --- | --- | --- | --- |
|
||||
| `$wgDiscordNoBots` | bool | Do not send notifications that are triggered by a [bot account](https://www.mediawiki.org/wiki/Manual:Bots) | `true`
|
||||
| `$wgDiscordNoMinor` | bool | Do not send notifications that are for [minor edits](https://meta.wikimedia.org/wiki/Help:Minor_edit) | `false`
|
||||
| `$wgDiscordNoMinor` | bool | Do not send notifications that are for [minor edits](https://www.mediawiki.org/wiki/Help:Minor_edit) | `false`
|
||||
| `$wgDiscordNoNull` | bool | Do not send notifications for [null edits](https://www.mediawiki.org/wiki/Manual:Purge#Null_edits) | `true`
|
||||
| `$wgDiscordSuppressPreviews` | bool | Force previews for links in Discord messages to be suppressed | `true`
|
||||
| `$wgDiscordMaxChars` | int | Maximum amount of characters for user-generated text (e.g summaries, reasons). Set to `null` to disable truncation | `null`
|
||||
| `$wgDiscordDisabledHooks` | array | List of hooks to disable sending webhooks for (see [below](#hooks-used)) | `[]`
|
||||
| `$wgDiscordDisabledNS` | array | List of namespaces to disable sending webhooks for | `[]`
|
||||
| `$wgDiscordDisabledUsers` | array | List of users whose performed actions shouldn't send webhooks | `[]`
|
||||
| `$wgDiscordMaxCharsUsernames` | int | Maximum amount of characters for usernames. Set to `null` to disable truncation | `25`
|
||||
| `$wgDiscordDisabledHooks` | string array | List of hooks to disable sending webhooks for (see [below](#hooks-used)) | `[]`
|
||||
| `$wgDiscordDisabledNS` | int array | List of namespace **IDs** to disable sending webhooks for. (see [below](#namespaces)) | `[]`
|
||||
| `$wgDiscordDisabledUsers` | string array | List of users whose performed actions shouldn't send webhooks | `[]`
|
||||
| `$wgDiscordPrependTimestamp` | bool | Prepend a timestamp (in UTC) to all sent messages. The format can be changed by editing the MediaWiki message `discord-timestampformat` | `false`
|
||||
| `$wgDiscordUseFileGetContents` | bool | Use `file_get_contents` instead of cURL. Requires `allow_url_fopen` to be set to true in `php.ini`. Not recommended as cURL makes simultaneous calls instead. | `false`
|
||||
| `$wgDiscordUseEmojis` | bool | Prepend emojis to different types of messages to help distinguish them | `false`
|
||||
| `$wgDiscordEmojis` | string associative array | Map of hook names and their associated emojis to prepend to messages if `$wgDiscordUseEmojis` is enabled | See [extension.json](/extension.json#L30)
|
||||
|
||||
## Hooks used
|
||||
- `PageContentSaveComplete` - New edits to pages and page creations
|
||||
- `ArticleDeleteComplete` - Page deletions
|
||||
- `ArticleUndelete` - Page restorations
|
||||
- `PageSaveComplete` - New edits to pages and page creations
|
||||
- `PageDeleteComplete` - Page deletions
|
||||
- `PageUndeleteComplete` - Page restorations
|
||||
- `ArticleRevisionVisibilitySet` - Revision visibility changes
|
||||
- `ArticleProtectComplete` - Page protections
|
||||
- `TitleMoveComplete` - Page moves
|
||||
- `PageMoveComplete` - Page moves
|
||||
- `LocalUserCreated` - User registrations
|
||||
- `BlockIpComplete` - User blocked
|
||||
- `UnblockUserComplete` - User unblocked
|
||||
@@ -69,11 +74,24 @@ This extension can be configured using the `LocalSettings.php` file in your Medi
|
||||
- `FileDeleteComplete` - File revision was deleted
|
||||
- `FileUndeleteComplete` - File revision was restored
|
||||
- `AfterImportPage` - Page was imported
|
||||
- `ArticleMergeComplete` - Article histories were merged
|
||||
- `RenameUserComplete` - Rename was completed
|
||||
|
||||
### [Approved Revs](https://www.mediawiki.org/wiki/Extension:Approved_Revs)
|
||||
- `ApprovedRevsRevisionApproved` - Revision was approved
|
||||
- `ApprovedRevsRevisionUnapproved` - Revision was unapproved
|
||||
- `ApprovedRevsFileRevisionApproved` - File revision was approved
|
||||
- `ApprovedRevsFileRevisionUnapproved` - File revision was unapproved
|
||||
|
||||
## Namespaces
|
||||
As we use namespace IDs the following resources might be helpful:
|
||||
- [Built in namespaces' IDs](https://www.mediawiki.org/wiki/Manual:Namespace#Built-in_namespaces)
|
||||
- [Extension default namespaces](https://www.mediawiki.org/wiki/Extension_default_namespaces)
|
||||
|
||||
## Translation
|
||||
This extension can be translated through the messages in the `ì18n` folder if you're a developer. As a wiki administrator, you may find it a better option to edit the messages on-site in the MediaWiki namespace.
|
||||
|
||||
Any excess whitespace in text that is translated will be stripped (e.g double spaces, etc).
|
||||
You can submit translations for this extension on [Translatewiki.net](https://translatewiki.net/wiki/Special:Translate/mwgithub-mw-discord).
|
||||
|
||||
## License
|
||||
This extension is licensed under the MIT License, [see here](LICENSE) for more information. This project is originally inspired by Szmyk's [mediawiki-discord](https://github.com/Szmyk/mediawiki-discord) project, but has been rewritten completely to be more suitable for my needs.
|
||||
This extension is available under the MIT license. You can [see here](LICENSE) for more information.
|
||||
|
||||
This extension was inspired by Szmyk's [mediawiki-discord](https://github.com/Szmyk/mediawiki-discord) project.
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
{
|
||||
"require": {
|
||||
"phpunit/phpunit": "4.8.*"
|
||||
}
|
||||
}
|
||||
+67
-23
@@ -1,12 +1,15 @@
|
||||
{
|
||||
"name": "Discord",
|
||||
"author": [
|
||||
"[https://github.com/jaydenkieran Jayden Bailey]"
|
||||
"[https://github.com/jayktaylor Jayden Bailey]"
|
||||
],
|
||||
"url": "https://github.com/jaydenkieran/mw-discord",
|
||||
"version": "1.0.11",
|
||||
"url": "https://github.com/jayktaylor/mw-discord",
|
||||
"version": "1.2",
|
||||
"descriptionmsg": "discord-desc",
|
||||
"license-name": "MIT",
|
||||
"requires": {
|
||||
"MediaWiki": ">= 1.40.0"
|
||||
},
|
||||
"manifest_version": 1,
|
||||
"config": {
|
||||
"DiscordWebhookURL": [],
|
||||
@@ -15,33 +18,74 @@
|
||||
"DiscordNoNull": true,
|
||||
"DiscordSuppressPreviews": true,
|
||||
"DiscordMaxChars": null,
|
||||
"DiscordMaxCharsUsernames": 25,
|
||||
"DiscordDisabledHooks": [],
|
||||
"DiscordDisabledNS": [],
|
||||
"DiscordDisabledUsers": [],
|
||||
"DiscordDisabledUsers": [
|
||||
"Redirect fixer"
|
||||
],
|
||||
"DiscordPrependTimestamp": false,
|
||||
"DiscordUseFileGetContents": false
|
||||
"DiscordUseEmojis": false,
|
||||
"DiscordEmojis": {
|
||||
"PageSaveComplete": ":pencil2:",
|
||||
"PageDeleteComplete": ":wastebasket:",
|
||||
"PageUndeleteComplete": ":wastebasket:",
|
||||
"ArticleRevisionVisibilitySet": ":spy:",
|
||||
"ArticleProtectComplete": ":lock:",
|
||||
"PageMoveComplete": ":truck:",
|
||||
"LocalUserCreated": ":wave:",
|
||||
"BlockIpComplete": ":no_entry_sign:",
|
||||
"UnblockUserComplete": ":no_entry_sign:",
|
||||
"UserGroupsChanged": ":people_holding_hands:",
|
||||
"UploadComplete": ":inbox_tray:",
|
||||
"FileDeleteComplete": ":wastebasket:",
|
||||
"FileUndeleteComplete": ":wastebasket:",
|
||||
"AfterImportPage": ":books:",
|
||||
"ArticleMergeComplete": ":card_box:",
|
||||
"ApprovedRevsRevisionApproved": ":white_check_mark:",
|
||||
"ApprovedRevsRevisionUnapproved": ":white_check_mark:",
|
||||
"ApprovedRevsFileRevisionApproved": ":white_check_mark:",
|
||||
"ApprovedRevsFileRevisionUnapproved": ":white_check_mark:",
|
||||
"RenameUserComplete": ":people_holding_hands:"
|
||||
}
|
||||
},
|
||||
"AutoloadClasses": {
|
||||
"DiscordHooks": "src/DiscordHooks.php",
|
||||
"DiscordUtils": "src/Utils.php"
|
||||
"AutoloadNamespaces": {
|
||||
"MediaWiki\\Extension\\Discord\\": "src/"
|
||||
},
|
||||
"MessagesDirs": {
|
||||
"mw-discord": "i18n"
|
||||
},
|
||||
"HookHandlers": {
|
||||
"main": {
|
||||
"class": "MediaWiki\\Extension\\Discord\\DiscordHooks",
|
||||
"services": [
|
||||
"Discord.DiscordMessageSender"
|
||||
]
|
||||
}
|
||||
},
|
||||
"Hooks": {
|
||||
"PageContentSaveComplete": "DiscordHooks::onPageContentSaveComplete",
|
||||
"ArticleDeleteComplete": "DiscordHooks::onArticleDeleteComplete",
|
||||
"ArticleUndelete": "DiscordHooks::onArticleUndelete",
|
||||
"ArticleRevisionVisibilitySet": "DiscordHooks::onArticleRevisionVisibilitySet",
|
||||
"ArticleProtectComplete": "DiscordHooks::onArticleProtectComplete",
|
||||
"TitleMoveComplete": "DiscordHooks::onTitleMoveComplete",
|
||||
"LocalUserCreated": "DiscordHooks::onLocalUserCreated",
|
||||
"BlockIpComplete": "DiscordHooks::onBlockIpComplete",
|
||||
"UnblockUserComplete": "DiscordHooks::onUnblockUserComplete",
|
||||
"UserGroupsChanged": "DiscordHooks::onUserGroupsChanged",
|
||||
"UploadComplete": "DiscordHooks::onUploadComplete",
|
||||
"FileDeleteComplete": "DiscordHooks::onFileDeleteComplete",
|
||||
"FileUndeleteComplete": "DiscordHooks::onFileUndeleteComplete",
|
||||
"AfterImportPage": "DiscordHooks::onAfterImportPage"
|
||||
}
|
||||
"PageSaveComplete": "main",
|
||||
"PageDeleteComplete": "main",
|
||||
"PageUndeleteComplete": "main",
|
||||
"ArticleRevisionVisibilitySet": "main",
|
||||
"ArticleProtectComplete": "main",
|
||||
"PageMoveComplete": "main",
|
||||
"LocalUserCreated": "main",
|
||||
"BlockIpComplete": "main",
|
||||
"UnblockUserComplete": "main",
|
||||
"UserGroupsChanged": "main",
|
||||
"UploadComplete": "main",
|
||||
"FileDeleteComplete": "main",
|
||||
"FileUndeleteComplete": "main",
|
||||
"AfterImportPage": "main",
|
||||
"ArticleMergeComplete": "main",
|
||||
"ApprovedRevsRevisionApproved": "main",
|
||||
"ApprovedRevsRevisionUnapproved": "main",
|
||||
"ApprovedRevsFileRevisionApproved": "main",
|
||||
"ApprovedRevsFileRevisionUnapproved": "main",
|
||||
"RenameUserComplete": "main"
|
||||
},
|
||||
"ServiceWiringFiles": [
|
||||
"src/ServiceWiring.php"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
{
|
||||
"@metadata": {
|
||||
"authors": [
|
||||
"Asma",
|
||||
"Mohammed Qays"
|
||||
]
|
||||
},
|
||||
"discord-desc": "يرسل رسائل إلى قناة Discord عند وقوع أحداث معينة",
|
||||
"discord-talk": "ت",
|
||||
"discord-contribs": "ج",
|
||||
"discord-diff": "فرق",
|
||||
"discord-minor": "(م)",
|
||||
"discord-msg-page-edited": "قام $1 بإنشاء $2 $3 $4",
|
||||
"discord-msg-page-created": "قام $1 بإنشاء $2 $3 $4",
|
||||
"discord-msg-page-deleted": "تم حذف $1 $2 $3 (تم حذف $4 من المراجعات)",
|
||||
"discord-msg-page-undeleted-revs": "المراجعات لـ",
|
||||
"discord-msg-page-undeleted": "$1 قام بإلغاء حذف $2 $3 $4",
|
||||
"discord-msg-rev-visibility-changed": "$1 غيرت رؤية $2 من المراجعات على $3",
|
||||
"discord-msg-page-protect": "$1 تم تغييره لحماية $2 $3 ( $4 )",
|
||||
"discord-msg-page-moved": "قام $1 بنقل من $2 إلى $3 $4 $5",
|
||||
"discord-msg-user-registered": "تم تسجيل $1",
|
||||
"discord-msg-user-block": "$1 منع $2 $3 ($4)",
|
||||
"discord-msg-user-unblock": "$1 قام بإلغاء منع $2",
|
||||
"discord-msg-user-groups-changed": "$1 غير حقوق $2 $3 ($4) ($5)",
|
||||
"discord-msg-file-upload-new": "إصدار جديد من",
|
||||
"discord-msg-file-upload": "قام $1 بتحميل $2 $3 $4 ($5، $6×$7 ،$8)",
|
||||
"discord-msg-file-delete": "قام $1 بحذف نسخة من الملف $2 $3",
|
||||
"discord-msg-file-undelete": "استعاد $1 بعض إصدارات الملف $2 $3",
|
||||
"discord-msg-import": "قام $1 باستيراد $2 (تم استيراد مراجعات $4 / $3)",
|
||||
"discord-msg-page-merge": "دمج $1 المراجعات من $2 إلى $3",
|
||||
"discord-msg-ext-approvedrevs-approved": "وافق $1 على مراجعة جديدة بقيمة $2 (المراجعة $3) من المستخدم $4",
|
||||
"discord-msg-ext-approvedrevs-unapproved": "لم يوافق $1 على مراجعة الملف المعتمدة لـ $2",
|
||||
"discord-msg-ext-approvedrevs-approved-file": "وافق $1 على مراجعة ملف جديد بقيمة $2 ($3) من المستخدم $4",
|
||||
"discord-msg-ext-approvedrevs-unapproved-file": "لم يوافق $1 على مراجعة الملف المعتمدة لـ $2",
|
||||
"discord-msg-user-rename": "أعاد $1 تسمية المستخدم $2 إلى $3"
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"@metadata": {
|
||||
"authors": [
|
||||
"আফতাবুজ্জামান"
|
||||
]
|
||||
},
|
||||
"discord-talk": "আ",
|
||||
"discord-contribs": "অ",
|
||||
"discord-diff": "পার্থক্য",
|
||||
"discord-minor": "(অ)",
|
||||
"discord-msg-page-edited": "$1 $2 সম্পাদনা করেছেন $3 $4",
|
||||
"discord-msg-page-created": "$1 $2 তৈরি করেছেন $3 $4",
|
||||
"discord-msg-user-registered": "$1 নিবন্ধিত হয়েছে",
|
||||
"discord-msg-user-block": "$1 $2-কে বাধা দিয়েছেন $3 ($4)"
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
{
|
||||
"@metadata": {
|
||||
"authors": [
|
||||
"Умар"
|
||||
]
|
||||
},
|
||||
"discord-desc": "Цхьацца хиламаш хилча, Discord канале хаамаш дӀакхачабо.",
|
||||
"discord-talk": "д",
|
||||
"discord-contribs": "c",
|
||||
"discord-diff": "башха",
|
||||
"discord-minor": "(m)",
|
||||
"discord-msg-page-edited": "$1 хийцам бина $2 $3 $4",
|
||||
"discord-msg-page-created": "$1 кхоьллина $2 $3 $4",
|
||||
"discord-msg-page-deleted": "$1 дӀайаьккхина $2 $3 ($4 версеш дӀайаьхна)",
|
||||
"discord-msg-page-undeleted-revs": "версеш",
|
||||
"discord-msg-page-undeleted": "$1 меттахӀоттийна $2 $3 $4",
|
||||
"discord-msg-rev-visibility-changed": "$1 хийцина $2 версин гуш хилар $3 тӀе",
|
||||
"discord-msg-page-protect": "$1 хийцина ларйар $2 $3 ($4)",
|
||||
"discord-msg-page-moved": "$1 дехьайаьккхина $2 тӀе $3 $4 $5.",
|
||||
"discord-msg-user-registered": "$1 регистраци йина",
|
||||
"discord-msg-user-block": "$1 блоктоьхна $2 $3 ($4)",
|
||||
"discord-msg-user-unblock": "$1 блокдӀайаьккхина $2",
|
||||
"discord-msg-user-groups-changed": "$1 бакъонаш хийцина $2 $3 ($4) ($5)",
|
||||
"discord-msg-file-upload-new": "керла верси",
|
||||
"discord-msg-file-upload": "$1 чуйаьккхина $2 $3 $4 ($5, $6x$7, $8)",
|
||||
"discord-msg-file-delete": "$1 дӀайаьккхина файлан верси $2 $3",
|
||||
"discord-msg-file-undelete": "$1 меттахӀоттийна цхьайолу версеш файлан $2 $3",
|
||||
"discord-msg-import": "$1 импорт йина $2 (импорт йина $4/$3 версеш)",
|
||||
"discord-msg-page-merge": "$1 цхьаьнатоьхна версеш $2 - $3",
|
||||
"discord-msg-ext-approvedrevs-approved": "$1 тӀечӀагӀйина керла верси $2 (верси $3) декъашхочун $4",
|
||||
"discord-msg-ext-approvedrevs-unapproved": "$1 тӀечӀагӀйина верси $2 тӀе ца эцна",
|
||||
"discord-msg-ext-approvedrevs-approved-file": "$1 тӀечӀагӀйина $2 ($3) файлан керла верси декъашхочуьнгара $4",
|
||||
"discord-msg-ext-approvedrevs-unapproved-file": "$1 тӀе ца эцна $2 файлан тӀечӀагӀйина верси",
|
||||
"discord-msg-user-rename": "$1 декъашхочун хийцина $2 → $3"
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"@metadata": {
|
||||
"authors": [
|
||||
"Ceirios"
|
||||
]
|
||||
},
|
||||
"discord-desc": "Anfon negeseuon i sianel Discord pan fydd digwyddiadau penodol yn digwydd",
|
||||
"discord-talk": "s",
|
||||
"discord-contribs": "c",
|
||||
"discord-diff": "gwahan",
|
||||
"discord-minor": "(b)",
|
||||
"discord-msg-page-edited": "Golygodd $1 $2 $3 $4",
|
||||
"discord-msg-page-created": "Crëodd $1 $2 $3 $4",
|
||||
"discord-msg-page-deleted": "Dilëodd $1 $2 $3 (dilëwyd $4 o olygiadau)",
|
||||
"discord-msg-page-undeleted-revs": "golygiadau ar gyfer",
|
||||
"discord-msg-page-undeleted": "Adferodd $1 $2 $3 $4"
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
{
|
||||
"@metadata": {
|
||||
"authors": [
|
||||
"Brettchenweber",
|
||||
"Fyoouki",
|
||||
"PretzelRocky",
|
||||
"TomatoCake"
|
||||
]
|
||||
},
|
||||
"discord-desc": "Sendet Nachrichten an einen Discord-Kanal, wenn bestimmte Ereignisse eintreten",
|
||||
"discord-talk": "Diskussion",
|
||||
"discord-contribs": "Beiträge",
|
||||
"discord-diff": "Unterschied",
|
||||
"discord-minor": "(K)",
|
||||
"discord-msg-page-edited": "$1 bearbeitete $2 $3 $4",
|
||||
"discord-msg-page-created": "$1 erstellte $2 $3 $4",
|
||||
"discord-msg-page-deleted": "$1 löschte $2 $3 ($4 revisionen gelöscht)",
|
||||
"discord-msg-page-undeleted-revs": "revisionen für",
|
||||
"discord-msg-page-undeleted": "$1 hat $2 wiederhergestellt $3 $4",
|
||||
"discord-msg-rev-visibility-changed": "$1 veränderte die Sichtbarkeit von $2 revisionen auf $3",
|
||||
"discord-msg-page-protect": "$1 änderte den Schutz von $2 $3 ($4)",
|
||||
"discord-msg-page-moved": "$1 verschob $2 zu $3 $4 $5",
|
||||
"discord-msg-user-registered": "$1 hat sich registriert",
|
||||
"discord-msg-user-block": "$1 blockierte $2 $3 ($4)",
|
||||
"discord-msg-user-block-partial": "$1 hat $2 teilweise gesperrt $3 ($4)",
|
||||
"discord-msg-user-unblock": "$1 entsperrte $2",
|
||||
"discord-msg-user-groups-changed": "$1 hat die Benutzerrechte geändert von $2 $3 ($4) ($5)",
|
||||
"discord-msg-file-upload-new": "neue Version von",
|
||||
"discord-msg-file-upload": "$1 lud $2 $3 $4 ($5, $6x$7, $8)",
|
||||
"discord-msg-file-delete": "$1 hat eine Version der Datei gelöscht $2 $3",
|
||||
"discord-msg-file-undelete": "$1 hat eine Version einer Datei wiederhergestellt von $2 $3",
|
||||
"discord-msg-import": "$1 importierte $2 (Import $4/$3 revisionen)",
|
||||
"discord-msg-page-merge": "$1 hat die Revisionen von $2 mit $3 zusammengeführt",
|
||||
"discord-msg-ext-approvedrevs-approved": "$1 genehmigte eine neue Revision von $2 (Revision $3) von $4",
|
||||
"discord-msg-ext-approvedrevs-unapproved": "$1 hat die genehmigte Revsision von $2 zurückgezogen.",
|
||||
"discord-msg-ext-approvedrevs-approved-file": "$1 genehmigte eine neue Dateirevision von $2 ($3) durch Benutzer $4",
|
||||
"discord-msg-ext-approvedrevs-unapproved-file": "$1 hat die genehmigte Dateirevision von $2 zurückgezogen",
|
||||
"discord-msg-user-rename": "$1 hat Benutzer von $2 in $3 umbenannt"
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
{
|
||||
"@metadata": {
|
||||
"authors": [
|
||||
"Dogogos123",
|
||||
"Norhorn",
|
||||
"Spyridon Eftychios Kokotos"
|
||||
]
|
||||
},
|
||||
"discord-desc": "Στέλνει μηνύματα σε ένα κανάλι Discord όταν συμβαίνουν ορισμένα συμβάντα",
|
||||
"discord-diff": "διαφορά",
|
||||
"discord-minor": "(μ)",
|
||||
"discord-msg-page-edited": "$1 επεξεργάστηκε $2 $3 $4.",
|
||||
"discord-msg-page-created": "$1 δημιούργησε $2 $3 $4",
|
||||
"discord-msg-page-deleted": "$1 διαγράφηκε $2 $3 ($4 αναθεωρήσεις διαγράφηκαν)",
|
||||
"discord-msg-page-undeleted-revs": "αναθεωρήσεις για",
|
||||
"discord-msg-page-undeleted": "$1 επανέφερε $2 $3 $4",
|
||||
"discord-msg-rev-visibility-changed": "$1 άλλαξε την ορατότητα των $2 αναθεωρήσεων στο $3",
|
||||
"discord-msg-page-protect": "$1 άλλαξε προστασία του $2 $3 ($4)",
|
||||
"discord-msg-page-moved": "$1 μετακίνησε $2 στα $3 $4 $5",
|
||||
"discord-msg-user-registered": "$1 εγγεγραμμένος",
|
||||
"discord-msg-user-block": "$1 αποκλεισμένο $2 $3 ($4)",
|
||||
"discord-msg-user-unblock": "$1 ξεμπλόκαρε $2",
|
||||
"discord-msg-user-groups-changed": "$1 άλλαξε τα δικαιώματα των $2 $3 ($4) ($5)",
|
||||
"discord-msg-file-upload-new": "νέα έκδοση του",
|
||||
"discord-msg-file-upload": "$1 μεταφορτώθηκε $2 $3 $4 ( $5 , $6 x $7 , $8 )",
|
||||
"discord-msg-file-delete": "$1 διέγραψε μια έκδοση του αρχείου $2 $3",
|
||||
"discord-msg-file-undelete": "$1 επανέφερε ορισμένες εκδόσεις του αρχείου $2 $3",
|
||||
"discord-msg-import": "$1 εισήχθη $2 (εισαγμένες $4 / $3 αναθεωρήσεις)",
|
||||
"discord-msg-page-merge": "$1 συγχώνευσε αναθεωρήσεις από $2 σε $3",
|
||||
"discord-msg-ext-approvedrevs-approved": "$1 ενέκρινε μια νέα αναθεώρηση των $2 (αναθεώρηση $3 ) από τον χρήστη $4",
|
||||
"discord-msg-ext-approvedrevs-unapproved": "$1 κατάργησε την έγκριση της εγκεκριμένης αναθεώρησης του αρχείου για $2",
|
||||
"discord-msg-ext-approvedrevs-approved-file": "$1 ενέκρινε μια νέα αναθεώρηση αρχείου $2 ( $3 ) από τον χρήστη $4",
|
||||
"discord-msg-ext-approvedrevs-unapproved-file": "$1 κατάργησε την έγκριση της εγκεκριμένης αναθεώρησης του αρχείου για $2",
|
||||
"discord-msg-user-rename": "$1 μετονόμασε τον χρήστη $2 σε $3"
|
||||
}
|
||||
+26
-19
@@ -12,23 +12,30 @@
|
||||
"discord-diff": "diff",
|
||||
"discord-minor": "(m)",
|
||||
"discord-size": "($1)",
|
||||
"discord-edit": "$1 edited $2 $3 $4",
|
||||
"discord-create": "$1 created $2 $3 $4",
|
||||
"discord-articledelete": "$1 deleted $2 $3 ($4 revisions deleted)",
|
||||
"discord-undeleterev": "revisions for",
|
||||
"discord-articleundelete": "$1 undeleted $2 $3 $4",
|
||||
"discord-revvisibility": "$1 changed visibility of $2 revisions on $3",
|
||||
"discord-articleprotect": "$1 changed protection of $2 $3 ($4)",
|
||||
"discord-titlemove": "$1 moved $2 to $3 $4 $5",
|
||||
"discord-localusercreated": "$1 registered",
|
||||
"discord-blocktimeformat": "d F Y H:i",
|
||||
"discord-blockipcomplete": "$1 blocked $2 $3 ($4)",
|
||||
"discord-unblockusercomplete": "$1 unblocked $2",
|
||||
"discord-usergroupschanged": "$1 changed rights of $2 $3 ($4) ($5)",
|
||||
"discord-uploadnewver": "new version of",
|
||||
"discord-uploadcomplete": "$1 uploaded $2 $3 $4 ($5, $6x$7, $8)",
|
||||
"discord-filedeletecomplete": "$1 deleted a version of file $2 $3",
|
||||
"discord-fileundeletecomplete": "$1 restored some versions of file $2 $3",
|
||||
"discord-afterimportpage": "$1 imported $2 (imported $4/$3 revisions)",
|
||||
"discord-timestampformat": "**H:i e:**"
|
||||
"discord-msg-page-edited": "$1 edited $2 $3 $4",
|
||||
"discord-msg-page-created": "$1 created $2 $3 $4",
|
||||
"discord-msg-page-deleted": "$1 deleted $2 $3 ($4 revisions deleted)",
|
||||
"discord-msg-page-undeleted-revs": "revisions for",
|
||||
"discord-msg-page-undeleted": "$1 undeleted $2 $3 $4",
|
||||
"discord-msg-rev-visibility-changed": "$1 changed visibility of $2 revisions on $3",
|
||||
"discord-msg-page-protect": "$1 changed protection of $2 $3 ($4)",
|
||||
"discord-msg-page-moved": "$1 moved $2 to $3 $4 $5",
|
||||
"discord-msg-user-registered": "$1 registered",
|
||||
"discord-msg-user-block-timeformat": "d F Y H:i",
|
||||
"discord-msg-user-block": "$1 blocked $2 $3 ($4)",
|
||||
"discord-msg-user-block-partial": "$1 partially blocked $2 $3 ($4)",
|
||||
"discord-msg-user-unblock": "$1 unblocked $2",
|
||||
"discord-msg-user-groups-changed": "$1 changed rights of $2 $3 ($4) ($5)",
|
||||
"discord-msg-file-upload-new": "new version of",
|
||||
"discord-msg-file-upload": "$1 uploaded $2 $3 $4 ($5, $6x$7, $8)",
|
||||
"discord-msg-file-delete": "$1 deleted a version of file $2 $3",
|
||||
"discord-msg-file-undelete": "$1 restored some versions of file $2 $3",
|
||||
"discord-msg-import": "$1 imported $2 (imported $4/$3 revisions)",
|
||||
"discord-timestampformat": "**H:i e:**",
|
||||
"discord-msg-page-merge": "$1 merged revisions from $2 into $3",
|
||||
"discord-msg-ext-approvedrevs-approved": "$1 approved a new revision of $2 (revision $3) from user $4",
|
||||
"discord-msg-ext-approvedrevs-unapproved": "$1 unapproved the approved revision for $2",
|
||||
"discord-msg-ext-approvedrevs-approved-file": "$1 approved a new file revision of $2 ($3) from user $4",
|
||||
"discord-msg-ext-approvedrevs-unapproved-file": "$1 unapproved the approved file revision for $2",
|
||||
"discord-msg-user-rename": "$1 renamed the user $2 to $3"
|
||||
}
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
{
|
||||
"@metadata": {
|
||||
"authors": [
|
||||
"MatyGamingHD"
|
||||
]
|
||||
},
|
||||
"discord-desc": "Envía mensajes a un canal de Discord cuando ocurren ciertos eventos",
|
||||
"discord-talk": "d",
|
||||
"discord-contribs": "c",
|
||||
"discord-diff": "difs",
|
||||
"discord-minor": "(m)",
|
||||
"discord-msg-page-edited": "$1 editó $2 $3 $4",
|
||||
"discord-msg-page-created": "$1 creó $2 $3 $4",
|
||||
"discord-msg-page-deleted": "$1 eliminó $2 $3 ($4 revisiones eliminadas)",
|
||||
"discord-msg-page-undeleted-revs": "revisiones de",
|
||||
"discord-msg-page-undeleted": "$1 restauró $2 $3 $4",
|
||||
"discord-msg-rev-visibility-changed": "$1 cambió la visibilidad de $2 revisiones en $3",
|
||||
"discord-msg-page-protect": "$1 cambió la protección de $2 $3 ($4)",
|
||||
"discord-msg-page-moved": "$1 movió $2 a $3 $4 $5",
|
||||
"discord-msg-user-registered": "$1 se ha registrado",
|
||||
"discord-msg-user-block": "$1 bloqueó a $2 $3 ($4)",
|
||||
"discord-msg-user-unblock": "$1 desbloqueó a $2",
|
||||
"discord-msg-user-groups-changed": "$1 cambió los derechos de $2 $3 ($4) ($5)",
|
||||
"discord-msg-file-upload-new": "nueva versión de",
|
||||
"discord-msg-file-upload": "$1 subió $2 $3 $4 ($5, $6x$7, $8)",
|
||||
"discord-msg-file-delete": "$1 eliminó una versión del archivo $2 $3",
|
||||
"discord-msg-file-undelete": "$1 restauró algunas versiones del archivo $2 $3",
|
||||
"discord-msg-import": "$1 importó $2 (importado $4/$3 revisiones)",
|
||||
"discord-msg-page-merge": "$1 fusionó las revisiones de $2 en $3",
|
||||
"discord-msg-ext-approvedrevs-approved": "$1 aprobó una nueva revisión de $2 (revisión $3) del usuario $4",
|
||||
"discord-msg-ext-approvedrevs-unapproved": "$1 desaprobó la revisión aprobada de $2",
|
||||
"discord-msg-ext-approvedrevs-approved-file": "$1 aprobó una nueva revisión del archivo $2 ($3) del usuario $4",
|
||||
"discord-msg-ext-approvedrevs-unapproved-file": "$1 desaprobó la revisión aprobada del archivo $2",
|
||||
"discord-msg-user-rename": "$1 renombró al usuario $2 a $3"
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
{
|
||||
"@metadata": {
|
||||
"authors": [
|
||||
"Gomoko",
|
||||
"Verdy p"
|
||||
]
|
||||
},
|
||||
"discord-desc": "Envoie des messages à un canal Discord quand certains événements surviennent",
|
||||
"discord-talk": "t",
|
||||
"discord-contribs": "c",
|
||||
"discord-diff": "diff",
|
||||
"discord-minor": "(m)",
|
||||
"discord-msg-page-edited": "$1 a modifié $2 $3 : $4",
|
||||
"discord-msg-page-created": "$1 a créé $2 $3 : $4",
|
||||
"discord-msg-page-deleted": "$1 a supprimé $2 ($4 version(s) supprimée(s)) : $3",
|
||||
"discord-msg-page-undeleted-revs": "versions pour",
|
||||
"discord-msg-page-undeleted": "$1 a restauré $2 $3 : $4",
|
||||
"discord-msg-rev-visibility-changed": "$1 a modifié la visibilité de $2 version(s) sur $3",
|
||||
"discord-msg-page-protect": "$1 a modifié la protection de $2 ($4) : $3",
|
||||
"discord-msg-page-moved": "$1 a renommé $2 en $3 $5 : $4",
|
||||
"discord-msg-user-registered": "$1 s’est inscrit(e)",
|
||||
"discord-msg-user-block": "$1 a bloqué $2 ($4) : $3",
|
||||
"discord-msg-user-unblock": "$1 a débloqué $2",
|
||||
"discord-msg-user-groups-changed": "$1 a modifié les droits de $2 ($4) ($5) : $3",
|
||||
"discord-msg-file-upload-new": "nouvelle version de",
|
||||
"discord-msg-file-upload": "$1 a téléversé $2 $3 ($5, $6x$7, $8) : $4",
|
||||
"discord-msg-file-delete": "$1 a supprimé une version du fichier $2 : $3",
|
||||
"discord-msg-file-undelete": "$1 a restauré certaines versions du fichier $2 : $3",
|
||||
"discord-msg-import": "$1 a importé $2 ($4 / $3 révisions importées)",
|
||||
"discord-msg-page-merge": "$1 a fusionné des versions de $2 vers $3",
|
||||
"discord-msg-ext-approvedrevs-approved": "$1 a approuvé une nouvelle version de $2 (version $3) créée par $4",
|
||||
"discord-msg-ext-approvedrevs-unapproved": "$1 a désapprouvé la version approuvée de $2",
|
||||
"discord-msg-ext-approvedrevs-approved-file": "$1 a approuvé une nouvelle version de fichier dans $2 ($3) créée par $4",
|
||||
"discord-msg-ext-approvedrevs-unapproved-file": "$1 a désapprouvé la version de fichier approuvée dans $2",
|
||||
"discord-msg-user-rename": "$1 a renommé l’utilisateur ou l’utilisatrice $2 en $3"
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
{
|
||||
"@metadata": {
|
||||
"authors": [
|
||||
"Toliño"
|
||||
]
|
||||
},
|
||||
"discord-desc": "Envía mensaxes a unha canle de Discord cando ocorren certos eventos",
|
||||
"discord-talk": "conv",
|
||||
"discord-contribs": "contr",
|
||||
"discord-diff": "dif",
|
||||
"discord-minor": "(m)",
|
||||
"discord-msg-page-edited": "$1 editou «$2» $3 $4",
|
||||
"discord-msg-page-created": "$1 creou «$2» $3 $4",
|
||||
"discord-msg-page-deleted": "$1 eliminou «$2» $3 ($4 revisións eliminadas)",
|
||||
"discord-msg-page-undeleted-revs": "revisións de",
|
||||
"discord-msg-page-undeleted": "$1 restaurou $2 «$3» $4",
|
||||
"discord-msg-rev-visibility-changed": "$1 cambiou a visibilidade de $2 revisións en «$3»",
|
||||
"discord-msg-page-protect": "$1 cambiou a protección de «$2» $3 ($4)",
|
||||
"discord-msg-page-moved": "$1 trasladou «$2» a «$3» $4 $5",
|
||||
"discord-msg-user-registered": "$1 rexistrouse",
|
||||
"discord-msg-user-block-timeformat": "d \\d\\e F \\d\\e Y H:i",
|
||||
"discord-msg-user-block": "$1 bloqueou a $2 $3 ($4)",
|
||||
"discord-msg-user-block-partial": "$1 bloqueou parcialmente a $2 $3 ($4)",
|
||||
"discord-msg-user-unblock": "$1 desbloqueou a $2",
|
||||
"discord-msg-user-groups-changed": "$1 cambiou os dereitos de $2 $3 ($4) ($5)",
|
||||
"discord-msg-file-upload-new": "unha nova versión de",
|
||||
"discord-msg-file-upload": "$1 subiu $2 «$3» $4 ($5, $6×$7, $8)",
|
||||
"discord-msg-file-delete": "$1 eliminou unha versión do ficheiro «$2» $3",
|
||||
"discord-msg-file-undelete": "$1 restaurou algunhas versións do ficheiro «$2» $3",
|
||||
"discord-msg-import": "$1 importou «$2» (importáronse $4/$3 revisións)",
|
||||
"discord-msg-page-merge": "$1 fusionou revisións de «$2» en «$3»",
|
||||
"discord-msg-ext-approvedrevs-approved": "$1 aprobou unha nova revisión de «$2» (revisión $3) do usuario $4",
|
||||
"discord-msg-ext-approvedrevs-unapproved": "$1 non aprobou a revisión aprobada de «$2»",
|
||||
"discord-msg-ext-approvedrevs-approved-file": "$1 aprobou unha nova revisión do ficheiro «$2» ($3) do usuario $4",
|
||||
"discord-msg-ext-approvedrevs-unapproved-file": "$1 non aprobou a revisión aprobada do ficheiro de «$2»",
|
||||
"discord-msg-user-rename": "$1 renomeou o usuario $2 a $3"
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
{
|
||||
"@metadata": {
|
||||
"authors": [
|
||||
"Amire80"
|
||||
]
|
||||
},
|
||||
"discord-desc": "שליחת הודעות לערוץ דיסקורד כאשר אירועים מסוימים מתרחשים",
|
||||
"discord-talk": "ש",
|
||||
"discord-contribs": "ת",
|
||||
"discord-diff": "השוואה",
|
||||
"discord-minor": "(מ)",
|
||||
"discord-msg-page-edited": "חשבון $1 ערך את הדף $2 $3 $4",
|
||||
"discord-msg-page-created": "חשבון $1 יצר את הדף $2 $3 $4",
|
||||
"discord-msg-page-deleted": "חשבון $1 מחק את הדף $2 $3 (מספר הגרסאות שנמחקו הוא $4)",
|
||||
"discord-msg-page-undeleted-revs": "גרסאות של",
|
||||
"discord-msg-page-undeleted": "חשבון $1 שחזר ממחיקה את הדף $2 $3 $4",
|
||||
"discord-msg-rev-visibility-changed": "חשבון $1 שינה הנראות של $2 גרסאות של הדף $3",
|
||||
"discord-msg-page-protect": "חשבון $1 שינה את ההגנה של הדף $2 סיבה: $3 הגדרות הגנה: ($4)",
|
||||
"discord-msg-page-moved": "חשבון $1 העביר את הדף $2 לשם $3 $4 $5",
|
||||
"discord-msg-user-registered": "חשבון $1 נרשם",
|
||||
"discord-msg-user-block": "חשבון $1 חסם אם $2 $3 ($4)",
|
||||
"discord-msg-user-unblock": "חשבון $1 שחרר מחסימה את $2",
|
||||
"discord-msg-user-groups-changed": "חשבון $1 שינה את ההרשאות של $2 $3 ($4) ($5)",
|
||||
"discord-msg-file-upload-new": "גרסה חדשה של",
|
||||
"discord-msg-file-upload": "חשבון $1 העלה את $2 $3 $4 (גודל: $5, מידות: $6x$7, סוג: $8)",
|
||||
"discord-msg-file-delete": "חשבון $1 מחק גרסה של הקובץ $2 $3",
|
||||
"discord-msg-file-undelete": "חשבון $1 שחזר כמה גרסאות של קובץ $2 $3",
|
||||
"discord-msg-import": "חשבון $1 ייבא את $2 (יובאו $4 מתוך $3 גרסאות)",
|
||||
"discord-msg-page-merge": "חשבון $1 מיזג גרסאות מתוך $2 לתוך $3",
|
||||
"discord-msg-ext-approvedrevs-approved": "חשבון $1 אישר גרסה חדשה של $2 (גרסה $3) של חשבון $4",
|
||||
"discord-msg-ext-approvedrevs-unapproved": "חשבון $1 ביטל את אישור של הגרסה המאושרת של $2",
|
||||
"discord-msg-ext-approvedrevs-approved-file": "חשבון $1 אישר גרסה חדשה של הקובץ $2 (גיבוב $3) של חשבון $4",
|
||||
"discord-msg-ext-approvedrevs-unapproved-file": "חשבון $1 ביטל את אישור של גרסת הקובץ של $2",
|
||||
"discord-msg-user-rename": "חשבון $1 שינה את השם של משתמש $2 לשם $3"
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
{
|
||||
"@metadata": {
|
||||
"authors": [
|
||||
"McDutchie"
|
||||
]
|
||||
},
|
||||
"discord-desc": "Invia messages a un canal Discord quando certe eventos occurre",
|
||||
"discord-talk": "d",
|
||||
"discord-contribs": "c",
|
||||
"discord-diff": "diff",
|
||||
"discord-minor": "(m)",
|
||||
"discord-msg-page-edited": "$1 ha modificate $2 $3 $4",
|
||||
"discord-msg-page-created": "$1 ha create $2 $3 $4",
|
||||
"discord-msg-page-deleted": "$1 ha delite $2 $3 ($4 versiones delite)",
|
||||
"discord-msg-page-undeleted-revs": "versiones pro",
|
||||
"discord-msg-page-undeleted": "$1 ha restaurate $2 $3 $4",
|
||||
"discord-msg-rev-visibility-changed": "$1 ha cambiate le visibilitate de of $2 versiones sur $3",
|
||||
"discord-msg-page-protect": "$1 ha cambiate le protection de $2 $3 ($4)",
|
||||
"discord-msg-page-moved": "$1 ha renominate $2 a $3 $4 $5",
|
||||
"discord-msg-user-registered": "$1 se ha inscribite",
|
||||
"discord-msg-user-block-timeformat": "j F Y H:i",
|
||||
"discord-msg-user-block": "$1 ha blocate $2 $3 ($4)",
|
||||
"discord-msg-user-block-partial": "$1 ha partialmente blocate $2 $3 ($4)",
|
||||
"discord-msg-user-unblock": "$1 ha disblocate $2",
|
||||
"discord-msg-user-groups-changed": "$1 ha cambiate le derectos de $2 $3 ($4) ($5)",
|
||||
"discord-msg-file-upload-new": "nove version de",
|
||||
"discord-msg-file-upload": "$1 ha incargate un $2 $3 $4 ($5, $6x$7, $8)",
|
||||
"discord-msg-file-delete": "$1 ha delite un version del file $2 $3",
|
||||
"discord-msg-file-undelete": "$1 ha restaurate alcun versiones del file $2 $3",
|
||||
"discord-msg-import": "$1 ha importate $2 ($4/$3 versiones importate)",
|
||||
"discord-msg-page-merge": "$1 ha fusionate le versiones de $2 in $3",
|
||||
"discord-msg-ext-approvedrevs-approved": "$1 ha approbate un nove version de $2 (version $3) del usator $4",
|
||||
"discord-msg-ext-approvedrevs-unapproved": "$1 ha disapprobate le version approbate de $2",
|
||||
"discord-msg-ext-approvedrevs-approved-file": "$1 ha approbate un nove version del file $2 ($3) del usator $4",
|
||||
"discord-msg-ext-approvedrevs-unapproved-file": "$1 ha disapprobate le version approbate del file $2",
|
||||
"discord-msg-user-rename": "$1 ha renominate le usator $2 a $3"
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
{
|
||||
"@metadata": {
|
||||
"authors": [
|
||||
"Elefentiste"
|
||||
]
|
||||
},
|
||||
"discord-talk": "d",
|
||||
"discord-contribs": "c",
|
||||
"discord-diff": "dif",
|
||||
"discord-minor": "(m)",
|
||||
"discord-msg-page-edited": "$1 ia edita $2 $3 $4",
|
||||
"discord-msg-page-created": "$1 ia crea $2 $3 $4",
|
||||
"discord-msg-page-deleted": "$1 ia sutrae $2 $3 ($4 revisas ia es sutraeda)",
|
||||
"discord-msg-page-undeleted": "$1 ia desutrae $2 $3 $4",
|
||||
"discord-msg-rev-visibility-changed": "$1 ia cambia vidablia de $2 revisas en $3",
|
||||
"discord-msg-page-protect": "$1 ia cambia proteje de $2 $3 ($4)",
|
||||
"discord-msg-page-moved": "$1 ia move $2 a $3 $4 $5",
|
||||
"discord-msg-user-block": "$1 ia impedi $2 $3 ($4)",
|
||||
"discord-msg-user-unblock": "$1 ia desimpedi $2",
|
||||
"discord-msg-file-upload": "$1 ia carga $2 $3 $4 ($5, $6x$7, $8)",
|
||||
"discord-msg-import": "$1 ia emporta $2 (emportada $4/$3 revisas)",
|
||||
"discord-msg-page-merge": "$1 ia fusa revisas de $2 a en $3",
|
||||
"discord-msg-ext-approvedrevs-approved": "$1 ia aproba un revisa nova de $2 (revisa $3) de usor $4",
|
||||
"discord-msg-ext-approvedrevs-unapproved": "$1 ia desaproba la revisa aprobada per $2",
|
||||
"discord-msg-ext-approvedrevs-approved-file": "$1 ia aproba un revisa de fix nova de $2 ($3) de usor $4",
|
||||
"discord-msg-ext-approvedrevs-unapproved-file": "$1 ia desaproba la revisa de fix aprobada per $2",
|
||||
"discord-msg-user-rename": "$1 ia renomi la usor $2 a $3"
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
{
|
||||
"@metadata": {
|
||||
"authors": [
|
||||
"Bjankuloski06"
|
||||
]
|
||||
},
|
||||
"discord-desc": "Испраќа пораки на канал на Дискорд кога ќе се случат извесни настани",
|
||||
"discord-talk": "р",
|
||||
"discord-contribs": "п",
|
||||
"discord-diff": "разл",
|
||||
"discord-minor": "(м)",
|
||||
"discord-msg-page-edited": "$1 уреди $2 $3 $4",
|
||||
"discord-msg-page-created": "$1 создаде $2 $3 $4",
|
||||
"discord-msg-page-deleted": "$1 избриша $2 $3 (избришани $4 преработки)",
|
||||
"discord-msg-page-undeleted-revs": "преработки за",
|
||||
"discord-msg-page-undeleted": "$1 поврати $2 $3 $4",
|
||||
"discord-msg-rev-visibility-changed": "$1 смени видливост на $2 преработки на $3",
|
||||
"discord-msg-page-protect": "$1 смени заштита на $2 $3 ($4)",
|
||||
"discord-msg-page-moved": "$1 премести $2 на $3 $4 $5",
|
||||
"discord-msg-user-registered": "$1 зачленети",
|
||||
"discord-msg-user-block-timeformat": "j F Y G:i ч.",
|
||||
"discord-msg-user-block": "$1 блокираше $2 $3 ($4)",
|
||||
"discord-msg-user-block-partial": "$1 делумно го блокираше $2 $3 ($4)",
|
||||
"discord-msg-user-unblock": "$1 одблокираше $2",
|
||||
"discord-msg-user-groups-changed": "$1 ги смени правата на $2 $3 ($4) ($5)",
|
||||
"discord-msg-file-upload-new": "нова преработка на",
|
||||
"discord-msg-file-upload": "$1 подигна $2 $3 $4 ($5, $6×$7, $8)",
|
||||
"discord-msg-file-delete": "$1 избриша верзија на податотека $2 $3",
|
||||
"discord-msg-file-undelete": "$1 поврати некои верзии на податотека $2 $3",
|
||||
"discord-msg-import": "$1 увезе $2 (увезени $4/$3 преработки)",
|
||||
"discord-timestampformat": "**G:i ч. e:**",
|
||||
"discord-msg-page-merge": "$1 спои преработки од $2 во $3",
|
||||
"discord-msg-ext-approvedrevs-approved": "$1 одобри нова преработка на $2 (преработка $3) од корисникот $4",
|
||||
"discord-msg-ext-approvedrevs-unapproved": "$1 тргна одобрение од одобрената преработка за $2",
|
||||
"discord-msg-ext-approvedrevs-approved-file": "$1 одобри нова преработка на податотека на $2 ($3) од корисникот $4",
|
||||
"discord-msg-ext-approvedrevs-unapproved-file": "$1 тргна одобрение од одобрената преработка на податотека за $2",
|
||||
"discord-msg-user-rename": "$1 го преименуваше корисникот $2 во $3"
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
{
|
||||
"@metadata": {
|
||||
"authors": [
|
||||
"EdoAug",
|
||||
"Jon Harald Søby"
|
||||
]
|
||||
},
|
||||
"discord-desc": "Sender meldinger til en Discord-kanal når visse hendelser forekommer",
|
||||
"discord-talk": "d",
|
||||
"discord-contribs": "b",
|
||||
"discord-diff": "diff",
|
||||
"discord-minor": "(m)",
|
||||
"discord-msg-page-edited": "$1 redigerte $2 $3 $4",
|
||||
"discord-msg-page-created": "$1 opprettet $2 $3 $4",
|
||||
"discord-msg-page-deleted": "$1 slettet $2 $3 ($4 sideversjoner slettet)",
|
||||
"discord-msg-page-undeleted-revs": "sideversjoner for",
|
||||
"discord-msg-page-undeleted": "$1 gjenopprettet $2 $3 $4",
|
||||
"discord-msg-rev-visibility-changed": "$1 endret synligheten til $2 sideversjoner for $3",
|
||||
"discord-msg-page-protect": "$1 endra beskyttelsen av $2 $3 ($4)",
|
||||
"discord-msg-page-moved": "$1 flyttet $2 til $3 $4 $5",
|
||||
"discord-msg-user-registered": "$1 registrerte",
|
||||
"discord-msg-user-block-timeformat": "j. F Y \"kl.\" H:i",
|
||||
"discord-msg-user-block": "$1 blokkerte $2 $3 ($4)",
|
||||
"discord-msg-user-block-partial": "$1 blokkerte $2 delvis $3 ($4)",
|
||||
"discord-msg-user-unblock": "$1 opphevde blokkeringen til $2",
|
||||
"discord-msg-user-groups-changed": "$1 endret rettighetene til $2 $3 ($4) ($5)",
|
||||
"discord-msg-file-upload-new": "ny versjon av",
|
||||
"discord-msg-file-upload": "$1 lastet opp $2 $3 $4 ($5, $6x$7, $8)",
|
||||
"discord-msg-file-delete": "$1 slettet en versjon av fila $2 $3",
|
||||
"discord-msg-file-undelete": "$1 gjenopprettet noen versjoner av fila $2 $3",
|
||||
"discord-msg-import": "$1 importerte $2 (importerte $4/$3 sideversjoner)",
|
||||
"discord-msg-page-merge": "$1 flettet sideversjoner fra $2 inn i $3",
|
||||
"discord-msg-ext-approvedrevs-approved": "$1 godkjente en ny sideversjon av $2 (sideversjon $3) fra brukeren $4",
|
||||
"discord-msg-ext-approvedrevs-unapproved": "$1 trakk tilbake godkjenningen av sideversjonen for $2",
|
||||
"discord-msg-ext-approvedrevs-approved-file": "$1 godkjente en ny versjon av fila $2 ($3) fra brukeren $4",
|
||||
"discord-msg-ext-approvedrevs-unapproved-file": "$1 trakk tilbake godkjenningen av filversjon for $2",
|
||||
"discord-msg-user-rename": "$1 omdøpte brukeren $2 til $3"
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
{
|
||||
"@metadata": {
|
||||
"authors": [
|
||||
"McDutchie",
|
||||
"SPQRobin",
|
||||
"Vistaus"
|
||||
]
|
||||
},
|
||||
"discord-desc": "Stuurt berichten naar een Discord-kanaal wanneer bepaalde gebeurtenissen plaatsvinden",
|
||||
"discord-talk": "o",
|
||||
"discord-contribs": "b",
|
||||
"discord-diff": "wijz",
|
||||
"discord-minor": "(k)",
|
||||
"discord-msg-page-edited": "$1 heeft $2 bewerkt $3 $4",
|
||||
"discord-msg-page-created": "$1 heeft $2 aangemaakt $3 $4",
|
||||
"discord-msg-page-deleted": "$1 heeft $2 verwijderd $3 ($4 versies verwijderd)",
|
||||
"discord-msg-page-undeleted-revs": "versies voor",
|
||||
"discord-msg-page-undeleted": "$1 heeft $2 teruggezet $3 $4",
|
||||
"discord-msg-rev-visibility-changed": "$1 heeft de zichtbaarheid van $2 versies op $3 veranderd",
|
||||
"discord-msg-page-protect": "$1 heeft de beveiliging van $2 veranderd $3 ($4)",
|
||||
"discord-msg-page-moved": "$1 heeft $2 hernoemd tot $3 $4 $5",
|
||||
"discord-msg-user-registered": "$1 heeft zich ingeschreven",
|
||||
"discord-msg-user-block-timeformat": "j F Y H:i",
|
||||
"discord-msg-user-block": "$1 heeft $2 geblokkeerd $3 ($4)",
|
||||
"discord-msg-user-block-partial": "$1 heeft $2 gedeeltelijk geblokkeerd $3 ($4)",
|
||||
"discord-msg-user-unblock": "$1 heeft $2 gedeblokkeerd",
|
||||
"discord-msg-user-groups-changed": "$1 heeft de rechten van $2 veranderd $3 ($4) ($5)",
|
||||
"discord-msg-file-upload-new": "nieuwe versie van",
|
||||
"discord-msg-file-upload": "$1 heeft een $2 $3 geüpload $4 ($5, $6x$7, $8)",
|
||||
"discord-msg-file-delete": "$1 heeft een versie van het bestand $2 verwijderd $3",
|
||||
"discord-msg-file-undelete": "$1 heeft bepaalde versies van het bestand $2 teruggezet $3",
|
||||
"discord-msg-import": "$1 heeft $2 geïmporteerd (er zijn $4 van de $3 versies geïmporteerd)",
|
||||
"discord-msg-page-merge": "$1 heeft de versies van $2 samengevoegd met $3",
|
||||
"discord-msg-ext-approvedrevs-approved": "$1 heeft een nieuwe versie van $2 goedgekeurd (versie $3, auteur $4)",
|
||||
"discord-msg-ext-approvedrevs-unapproved": "$1 heeft de goedkeuring van de goedgekeurde versie van $2 ingetrokken",
|
||||
"discord-msg-ext-approvedrevs-approved-file": "$1 heeft een nieuwe bestandsversie van $2 ($3) goedgekeurd, auteur: $4",
|
||||
"discord-msg-ext-approvedrevs-unapproved-file": "$1 heeft de goedkeuring van de goedgekeurde bestandsversie van $2 ingetrokken",
|
||||
"discord-msg-user-rename": "$1 heeft de gebruiker $2 hernoemd tot $3"
|
||||
}
|
||||
+15
-20
@@ -5,27 +5,22 @@
|
||||
]
|
||||
},
|
||||
"discord-desc": "Wysyła wiadomości o dokonywanych akcjach na serwer Discord",
|
||||
"discord-userlinks": "$1 ($2|$3)",
|
||||
"discord-revisionlinks": "($1) $2 $3",
|
||||
"discord-talk": "d",
|
||||
"discord-contribs": "w",
|
||||
"discord-diff": "różn.",
|
||||
"discord-minor": "(m)",
|
||||
"discord-size": "($1)",
|
||||
"discord-edit": "$1 edytował $2 $3 $4",
|
||||
"discord-articledelete": "$1 usunął $2 $3 ($4 wersje usunięte)",
|
||||
"discord-undeleterev": "wersje",
|
||||
"discord-articleundelete": "$1 odtworzył $2 $3 $4",
|
||||
"discord-revvisibility": "$1 zmienił widoczność $2 wersji $3",
|
||||
"discord-articleprotect": "$1 zmienił poziom zabezpoeczenia strony $2 $2 $3 ($4)",
|
||||
"discord-titlemove": "$1 przeniósł $2 na $3 $4 $5",
|
||||
"discord-localusercreated": "$1 założył konto",
|
||||
"discord-blocktimeformat": "d F Y H:i",
|
||||
"discord-blockipcomplete": "$1 zablokował $2 $3 ($4)",
|
||||
"discord-unblockusercomplete": "$1 zdjął blokadę z $2",
|
||||
"discord-usergroupschanged": "$1 zmienił uprawnienia użytkownika $2 $3 ($4) ($5)",
|
||||
"discord-uploadnewver": "nową wersję",
|
||||
"discord-uploadcomplete": "$1 przesłał $2 $3 $4 ($5, $6x$7, $8)",
|
||||
"discord-filedeletecomplete": "$1 usunął wersję pliku $2 $3",
|
||||
"discord-fileundeletecomplete": "$1 odtworzył wersje pliku $2 $3"
|
||||
"discord-msg-page-edited": "$1 edytował $2 $3 $4",
|
||||
"discord-msg-page-deleted": "$1 usunął $2 $3 ($4 wersje usunięte)",
|
||||
"discord-msg-page-undeleted-revs": "wersje",
|
||||
"discord-msg-page-undeleted": "$1 odtworzył $2 $3 $4",
|
||||
"discord-msg-rev-visibility-changed": "$1 zmienił widoczność $2 wersji $3",
|
||||
"discord-msg-page-protect": "$1 zmienił poziom zabezpoeczenia strony $2 $2 $3 ($4)",
|
||||
"discord-msg-page-moved": "$1 przeniósł $2 na $3 $4 $5",
|
||||
"discord-msg-user-registered": "$1 założył konto",
|
||||
"discord-msg-user-block": "$1 zablokował $2 $3 ($4)",
|
||||
"discord-msg-user-unblock": "$1 zdjął blokadę z $2",
|
||||
"discord-msg-user-groups-changed": "$1 zmienił uprawnienia użytkownika $2 $3 ($4) ($5)",
|
||||
"discord-msg-file-upload-new": "nową wersję",
|
||||
"discord-msg-file-upload": "$1 przesłał $2 $3 $4 ($5, $6x$7, $8)",
|
||||
"discord-msg-file-delete": "$1 usunął wersję pliku $2 $3",
|
||||
"discord-msg-file-undelete": "$1 odtworzył wersje pliku $2 $3"
|
||||
}
|
||||
|
||||
+39
-28
@@ -1,34 +1,45 @@
|
||||
{
|
||||
"@metadata": {
|
||||
"authors": [
|
||||
"Jayden Bailey"
|
||||
"Abijeet Patro",
|
||||
"Amire80",
|
||||
"Jayden",
|
||||
"Jayden Bailey",
|
||||
"McDutchie"
|
||||
]
|
||||
},
|
||||
"discord-desc": "The description used for the Discord extension",
|
||||
"discord-userlinks": "Used for display of the user links. Parameters\n* $1 - User page link\n* $2 - discord-talk\n* $3 - discord-contribs",
|
||||
"discord-revisionlinks": "Used for display of revision links. Parameters\n* $1 - discord-diff\n* $2 - discord-minor\n* $3 - discord-size",
|
||||
"discord-talk": "Used as the text for $2 in discord-userlinks",
|
||||
"discord-contribs": "Used as the text for $3 in discord-userlinks",
|
||||
"discord-diff": "Used as the text for $1 in discord-revisionlinks",
|
||||
"discord-minor": "Used as the text for $2 in discord-revisionlinks",
|
||||
"discord-size": "Used as the text for $3 in discord-revisionlinks. Parameters\n* $1 - Calculated revision size diff",
|
||||
"discord-edit": "Message sent to Discord for when a page edit is made. Parameters:\n* $1 - discord-userlinks\n* $2 - Page link\n* $3 - discord-revisionlinks\n* $4 - Summary (always surrounded in tildes)",
|
||||
"discord-create": "Message sent to Discord for when a page creation is made. Parameters:\n* $1 - discord-userlinks\n* $2 - Page link\n* $3 - discord-revisionlinks\n* $4 - Summary (always surrounded in tildes)",
|
||||
"discord-articledelete": "Message sent to Discord when a page is deleted. Parameters:\n* $1 - discord-userlinks\n* $2 - Page link\n* $3 - Reason (always surrounded in tildes)\n* $4 - Number of revisions deleted",
|
||||
"discord-undeleterev": "Used as the text for $2 in discord-articleundelete if revisions are being undeleted rather than a page",
|
||||
"discord-articleundelete": "Message sent to Discord when pages/revisions are undeleted. Parameters:\n* $1 - discord-userlinks\n* $2 - discord-undeleterev\n* $3 - Page link\n* $4 - Comment (always surrounded in tildes)",
|
||||
"discord-revvisibility": "Message sent to Discord when the visibility of revisions is changed. Parameters:\n$1 - discord-userlinks\n* $2 - Number of revisions\n* $3 - Page link",
|
||||
"discord-articleprotect": "Message sent to Discord when an article's protection is changed. Parameters:\n$1 - discord-userlinks\n* $2 - Page link\n* $3 - Reason (always surrounded in tildes)\n* $4 - Protection settings",
|
||||
"discord-titlemove": "Message sent to Discord when an article is moved. Parameters:\n$1 - discord-userlinks\n$2 - Old page link\n$3 - New page link\n$4 - Reason (always surrounded in tildes)\n$5 - discord-revisionlinks",
|
||||
"discord-localusercreated": "Message sent to Discord when a user registers. Parameters:\n$1 - discord-userlinks",
|
||||
"discord-blocktimeformat": "The formatting used in the date() function for displaying the time a user is blocked for.",
|
||||
"discord-blockipcomplete": "Message sent to Discord when a user is blocked. Parameters:\n$1 - discord-userlinks (performer)\n$2 - discord-userlinks (target)\n$3 - Reason (always surrounded in tildes)\n$4 - Expiry text (using discord-blocktimeformat)",
|
||||
"discord-unblockusercomplete": "Message sent to Discord when a user is unblocked. Parameters:\n$1 - discord-userlinks (performer)\n$2 - discord-userlinks (target)",
|
||||
"discord-usergroupschanged": "Message sent to Discord when a user's group is changed. Parameters:\n$1 - discord-userlinks (performer)\n$2 -discord-userlinks (target)\n$3 - Reason (always surrounded in tildes)\n$4 - Added rights (prepended by +)\n$5 - Removed rights (prepended by -)",
|
||||
"discord-uploadnewver": "Used as the text for $2 in discord-uploadcomplete",
|
||||
"discord-uploadcomplete": "Message sent to Discord when an upload is made. Parameters:\n$1 - discord-userlinks\n$2 - discord-uploadnewver\n$3 - File link\n$4 - Comment (always surrounded in tildes)\n$5 - Size (formatted as KB/MB/GB)\n$6 - File width\n$7 - File height\n$8 - File MIME type",
|
||||
"discord-filedeletecomplete": "Message sent to Discord when a file version is deleted (not an entire file). Parameters:\n$1 - discord-userlinks\n$2 - File link\n$3 - Comment (always surrounded in tildes)",
|
||||
"discord-fileundeletecomplete": "Message sent to Discord when a file version is restored (not an entire file). Parameters:\n$1 - discord-userlinks\n$2 - File link\n$3 - Comment (always surrounded in tildes)",
|
||||
"discord-afterimportpage": "Message sent to Discord when a page is imported. Parameters:\n$1 - discord-userlinks\n$2 - Page link\n$3 - Number of revisions in XML file\n$4 - Number of revisions successfully imported",
|
||||
"discord-timestampformat": "The formatting used in the gmtime() function for displaying the time an event happened in UTC."
|
||||
"discord-desc": "The description used for the Discord extension",
|
||||
"discord-userlinks": "{{optional}}\nUsed for display of the user links. Parameters\n* $1 - User page link\n* $2 - {{msg-mw|discord-talk}}\n* $3 - {{msg-mw|discord-contribs}}",
|
||||
"discord-revisionlinks": "{{Optional}}\nUsed for display of revision links. Parameters\n* $1 - {{msg-mw|discord-diff}}\n* $2 - {{msg-mw|discord-minor}}\n* $3 - {{msg-mw|discord-size}}",
|
||||
"discord-talk": "Short for \"talk\".\n\nUsed as the text for $2 in {{msg-mw|discord-userlinks}}",
|
||||
"discord-contribs": "Short for \"contributions\".\n\nUsed as the text for $3 in {{msg-mw|discord-userlinks}}",
|
||||
"discord-diff": "Used as the text for $1 in discord-revisionlinks",
|
||||
"discord-minor": "Short for \"minor edit\". The letter should be the same as in {{msg-mw|Minoreditletter}}.\n\nUsed as the text for $2 in {{msg-mw|discord-revisionlinks}}.",
|
||||
"discord-size": "{{Optional}}\nUsed as the text for $3 in discord-revisionlinks. Parameters\n* $1 - Calculated revision size diff",
|
||||
"discord-msg-page-edited": "Message sent to Discord for when a page edit is made. Parameters:\n* $1 - {{msg-mw|discord-userlinks}}\n* $2 - Page link\n* $3 - {{msg-mw|discord-revisionlinks}}\n* $4 - Summary (always surrounded in tildes)",
|
||||
"discord-msg-page-created": "Message sent to Discord for when a page creation is made. Parameters:\n* $1 - {{msg-mw|discord-userlinks}}\n* $2 - Page link\n* $3 - {{msg-mw|discord-revisionlinks}}\n* $4 - Summary (always surrounded in tildes)",
|
||||
"discord-msg-page-deleted": "Message sent to Discord when a page is deleted. Parameters:\n* $1 - {{msg-mw|discord-userlinks}}\n* $2 - Page link\n* $3 - Reason (always surrounded in tildes)\n* $4 - Number of revisions deleted",
|
||||
"discord-msg-page-undeleted-revs": "Used as the text for $2 in discord-articleundelete if revisions are being undeleted rather than a page",
|
||||
"discord-msg-page-undeleted": "Message sent to Discord when pages/revisions are undeleted.\nParameters:\n* $1 - {{msg-mw|discord-userlinks}}\n* $2 - {{msg-mw|discord-msg-undeleted-revs}}\n* $3 - Page link\n* $4 - Comment (always surrounded in tildes)",
|
||||
"discord-msg-rev-visibility-changed": "Message sent to Discord when the visibility of revisions is changed.\nParameters:\n* $1 - {{msg-mw|discord-userlinks}}\n* $2 - Number of revisions\n* $3 - Page link",
|
||||
"discord-msg-page-protect": "Message sent to Discord when an article's protection is changed.\nParameters:\n* $1 - {{msg-mw|discord-userlinks}}\n* $2 - Page link\n* $3 - Reason (always surrounded in tildes)\n* $4 - Protection settings",
|
||||
"discord-msg-page-moved": "Message sent to Discord when an article is moved. Parameters:\n* $1 - {{msg-mw|discord-userlinks}}\n* $2 - Old page link\n* $3 - New page link\n* $4 - Reason (always surrounded in tildes)\n* $5 - {{msg-mw|discord-revisionlinks}}",
|
||||
"discord-msg-user-registered": "Message sent to Discord when a user registers.\nParameters:\n* $1 - {{msg-mw|discord-userlinks}}",
|
||||
"discord-msg-user-block-timeformat": "{{optional}}\n\nThe formatting used in the date() function for displaying the time a user is blocked for.\n\nSee also: https://www.php.net/manual/en/datetime.format.php",
|
||||
"discord-msg-user-block": "Message sent to Discord when a user is blocked. Parameters:\n* $1 - {{msg-mw|discord-userlinks}} (performer)\n* $2 - {{msg-mw|discord-userlinks}} (target)\n* $3 - Reason (always surrounded in tildes)\n* $4 - Expiry text (using {{msg-mw|discord-msg-user-block-timeformat}})",
|
||||
"discord-msg-user-block-partial": "Message sent to Discord when a user is blocked partially. Parameters:\n* $1 - {{msg-mw|discord-userlinks}} (performer)\n* $2 - {{msg-mw|discord-userlinks}} (target)\n* $3 - Reason (always surrounded in tildes)\n* $4 - Expiry text (using {{msg-mw|discord-msg-user-block-timeformat}})",
|
||||
"discord-msg-user-unblock": "Message sent to Discord when a user is unblocked. Parameters:\n* $1 - {{msg-mw|discord-userlinks}} (performer)\n* $2 - {{msg-mw|discord-userlinks}} (target)",
|
||||
"discord-msg-user-groups-changed": "Message sent to Discord when a user's group is changed. Parameters:\n* $1 - {{msg-mw|discord-userlinks}} (performer)\n* $2 - {{msg-mw|discord-userlinks}} (target)\n* $3 - Reason (always surrounded in tildes)\n* $4 - Added rights (prepended by +)\n* $5 - Removed rights (prepended by -)",
|
||||
"discord-msg-file-upload-new": "Used as the text for $2 in {{msg-mw|discord-msg-file-upload}}",
|
||||
"discord-msg-file-upload": "Message sent to Discord when an upload is made. Parameters:\n\n* $1 - {{msg-mw|discord-userlinks}}\n* $2 - {{msg-mw|discord-msg-file-upload-new}}\n* $3 - File link\n* $4 - Comment (always surrounded in tildes)\n* $5 - Size (formatted as KB/MB/GB)\n* $6 - File width\n* $7 - File height\n* $8 - File MIME type",
|
||||
"discord-msg-file-delete": "Message sent to Discord when a file version is deleted (not an entire file).\nParameters:\n* $1 - {{msg-mw|discord-userlinks}}\n* $2 - File link\n* $3 - Comment (always surrounded in tildes)",
|
||||
"discord-msg-file-undelete": "Message sent to Discord when a file version is restored (not an entire file).\nParameters:\n* $1 - {{msg-mw|discord-userlinks}}\n* $2 - File link\n* $3 - Comment (always surrounded in tildes)",
|
||||
"discord-msg-import": "Message sent to Discord when a page is imported. Parameters:\n* $1 - {{msg-mw|discord-userlinks}}\n* $2 - Page link\n* $3 - Number of revisions in XML file\n* $4 - Number of revisions successfully imported",
|
||||
"discord-timestampformat": "{{optional}}\n\nThe formatting used in the gmdate() function for displaying the time an event happened in UTC.\n\nSee also: https://www.php.net/manual/en/datetime.format.php",
|
||||
"discord-msg-page-merge": "Message sent to Discord when page histories are merged. Parameters:\n* $1 - {{msg-mw|discord-userlinks}}\n* $2 - Target link\n* $3 - Destination link",
|
||||
"discord-msg-ext-approvedrevs-approved": "Message sent to Discord when a revision is approved (Approved Revs extension).\nParameters:\n* $1 - {{msg-mw|discord-userlinks}} (admin user)\n* $2 - Target link\n* $3 - Revision link or ID\n* $4 - {{msg-mw|discord-userlinks}} (revision author) or ID",
|
||||
"discord-msg-ext-approvedrevs-unapproved": "Message sent to Discord when a revision is unapproved (Approved Revs extension).\nParameters:\n* $1 - {{msg-mw|discord-userlinks}} (admin user)\n* $2 - Target link",
|
||||
"discord-msg-ext-approvedrevs-approved-file": "Message sent to Discord when a file revision is approved (Approved Revs extension).\nParameters:\n* $1 - {{msg-mw|discord-userlinks}} (admin user)\n* $2 - Target link\n* $3 - SHA of uploaded file\n* $4 - {{msg-mw|discord-userlinks}} (revision author)",
|
||||
"discord-msg-ext-approvedrevs-unapproved-file": "Message sent to Discord when a file revision is unapproved (Approved Revs extension).\nParameters:\n* $1 - {{msg-mw|discord-userlinks}} (admin user)\n* $2 - Target link",
|
||||
"discord-msg-user-rename": "Message sent to Discord when a user is renamed.\nParameters:\n* $1 - {{msg-mw|discord-userlinks}} (admin user)\n* $2 - Old username\n* $3 - New username link"
|
||||
}
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
{
|
||||
"@metadata": {
|
||||
"authors": [
|
||||
"Engineer56",
|
||||
"Kareyac",
|
||||
"Yurina Tatiana"
|
||||
]
|
||||
},
|
||||
"discord-desc": "Отправляет сообщения на канал в Discord при возникновении некоторых событий.",
|
||||
"discord-userlinks": "$1 ($2|$3)",
|
||||
"discord-revisionlinks": "($1) $2 $3",
|
||||
"discord-talk": "о",
|
||||
"discord-contribs": "c",
|
||||
"discord-diff": "разн.",
|
||||
"discord-minor": "(m)",
|
||||
"discord-size": "($1)",
|
||||
"discord-msg-page-edited": "$1 отредактировал $2 $3 $4",
|
||||
"discord-msg-page-created": "$1 создал $2 $3 $4",
|
||||
"discord-msg-page-deleted": "$1 удалил $2 $3 ($4 версии удалены)",
|
||||
"discord-msg-page-undeleted-revs": "версии",
|
||||
"discord-msg-page-undeleted": "$1 восстановил $2 $3 $4",
|
||||
"discord-msg-rev-visibility-changed": "$1 изменил видимость $2 версий на $3",
|
||||
"discord-msg-page-protect": "$1 изменил защиту $2 $3 ($4)",
|
||||
"discord-msg-page-moved": "$1 переместил $2 на $3 $4 $5",
|
||||
"discord-msg-user-registered": "$1 зарегистрировался",
|
||||
"discord-msg-user-block-timeformat": "d F Y H:i",
|
||||
"discord-msg-user-block": "$1 заблокировал $2 $3 ($4)",
|
||||
"discord-msg-user-unblock": "$1 разблокировал $2",
|
||||
"discord-msg-user-groups-changed": "$1 изменил права $2 $3 ($4) ($5)",
|
||||
"discord-msg-file-upload-new": "новая версия",
|
||||
"discord-msg-file-upload": "$1 загрузил $2 $3 $4 ($5, $6x$7, $8)",
|
||||
"discord-msg-file-delete": "$1 удалил версию файла $2 $3",
|
||||
"discord-msg-file-undelete": "$1 восстановил некоторые версии файла $2 $3",
|
||||
"discord-msg-import": "$1 импортировал $2 (импортировано $4/$3 версий)",
|
||||
"discord-timestampformat": "**H:i e:**",
|
||||
"discord-msg-page-merge": "$1 объединил версии из $2 в $3",
|
||||
"discord-msg-ext-approvedrevs-approved": "$1 одобрил новую версию $2 (версия $3) от пользователя $4",
|
||||
"discord-msg-ext-approvedrevs-unapproved": "$1 не одобрил утверждённую версию $2",
|
||||
"discord-msg-ext-approvedrevs-approved-file": "$1 одобрил новую версию файла $2 ($3) от пользователя $4",
|
||||
"discord-msg-ext-approvedrevs-unapproved-file": "$1 не одобрил утверждённую версию файла $2",
|
||||
"discord-msg-user-rename": "$1 переименовал пользователя $2 в $3"
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
{
|
||||
"@metadata": {
|
||||
"authors": [
|
||||
"Eleassar",
|
||||
"Upwinxp"
|
||||
]
|
||||
},
|
||||
"discord-desc": "Pošlje sporočila na kanal Discord ob nekaterih dogodkih",
|
||||
"discord-talk": "t",
|
||||
"discord-contribs": "c",
|
||||
"discord-diff": "razl",
|
||||
"discord-minor": "(m)",
|
||||
"discord-msg-page-edited": "$1 je uredil_a $2 $3 $4",
|
||||
"discord-msg-page-created": "$1 je ustvaril_a $2 $3 $4",
|
||||
"discord-msg-page-deleted": "$1 je izbrisal_a $2 $3 (izbrisanih $4 redakcij)",
|
||||
"discord-msg-page-undeleted-revs": "redakcije za",
|
||||
"discord-msg-page-undeleted": "$1 je odizbrisal_a $2 $3 $4",
|
||||
"discord-msg-rev-visibility-changed": "$1 je spremenil_a vidnost $2 redakcij strani $3",
|
||||
"discord-msg-page-protect": "$1 je spremenil_a zaščito $2 $3 ($4)",
|
||||
"discord-msg-page-moved": "$1 je prestavil_a $2 na $3 $4 $5",
|
||||
"discord-msg-user-registered": "Registracija $1",
|
||||
"discord-msg-user-block-timeformat": "d. F Y, H:i",
|
||||
"discord-msg-user-block": "$1 je blokiral_a $2 $3 ($4)",
|
||||
"discord-msg-user-unblock": "$1 je odblokiral_a $2",
|
||||
"discord-msg-user-groups-changed": "$1 je spremenil_a pravice $2 $3 ($4) ($5)",
|
||||
"discord-msg-file-upload-new": "nova različica datoteke",
|
||||
"discord-msg-file-upload": "$1 je naložil_a $2 $3 $4 ($5, $6 × $7, $8)",
|
||||
"discord-msg-file-delete": "$1 je izbrisal_a različico datoteke $2 $3",
|
||||
"discord-msg-file-undelete": "$1 je obnovil_a nekaj različic datoteke $2 $3",
|
||||
"discord-msg-import": "$1 je uvozil_a $2 (uvoženih $4/$3 redakcij)",
|
||||
"discord-msg-page-merge": "$1 je združil_a redakcije iz $2 v $3",
|
||||
"discord-msg-ext-approvedrevs-approved": "$1 je odobril_a novo redakcijo $2 (redakcija $3) uporabnika_ce $4",
|
||||
"discord-msg-ext-approvedrevs-unapproved": "$1 je od-odobrila odobreno redakcijo za $2",
|
||||
"discord-msg-ext-approvedrevs-approved-file": "$1 je odobril_a novo različico datoteke $2 ($3) uporabnika_ce $4",
|
||||
"discord-msg-ext-approvedrevs-unapproved-file": "$1 je od-odobrila odobreno redakcijo datoteke za $2",
|
||||
"discord-msg-user-rename": "$1 je preimenoval_a uporabnika $2 v $3"
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
{
|
||||
"@metadata": {
|
||||
"authors": [
|
||||
"KockaAdmiralac",
|
||||
"Milicevic01"
|
||||
]
|
||||
},
|
||||
"discord-desc": "Шаље поруке на Discord канал када се десе одређени догађаји",
|
||||
"discord-talk": "р",
|
||||
"discord-contribs": "д",
|
||||
"discord-diff": "разл",
|
||||
"discord-minor": "(м)",
|
||||
"discord-msg-page-edited": "$1 је уредио/ла $2 $3 $4",
|
||||
"discord-msg-page-created": "$1 је направио/ла $2 $3 $4",
|
||||
"discord-msg-page-deleted": "$1 је обрисао/ла $2 $3 ($4 измена обрисано)",
|
||||
"discord-msg-page-undeleted-revs": "измене за",
|
||||
"discord-msg-page-undeleted": "$1 је вратио/ла $2 $3 $4",
|
||||
"discord-msg-rev-visibility-changed": "$1 је променио/ла видљивост измене $2 на $3",
|
||||
"discord-msg-page-protect": "$1 је променио/ла подешавања заштите $2 $3 ($4)",
|
||||
"discord-msg-page-moved": "$1 је преместио/ла $2 на $3 $4 $5",
|
||||
"discord-msg-user-registered": "$1 се регистровао/ла",
|
||||
"discord-msg-user-block": "$1 је блокирао/ла $2 $3 ($4)",
|
||||
"discord-msg-user-unblock": "$1 је деблокирао/ла $2",
|
||||
"discord-msg-user-groups-changed": "$1 је променио/ла права $2 $3 ($4) ($5)",
|
||||
"discord-msg-file-upload-new": "нову верзију",
|
||||
"discord-msg-file-upload": "$1 је отпремио/ла $2 $3 $4 ($5, $6x$7, $8)",
|
||||
"discord-msg-file-delete": "$1 је обрисао/ла верзију датотеке $2 $3",
|
||||
"discord-msg-file-undelete": "$1 је вратио/ла поједине верзије датотеке $2 $3",
|
||||
"discord-msg-import": "$1 је увезао/ла $2 (увезено $4/$3 измена)",
|
||||
"discord-msg-page-merge": "$1 је спојио/ла измене из $2 у $3",
|
||||
"discord-msg-ext-approvedrevs-approved": "$1 је одобрио/ла нову измену $2 (измена $3) корисника $4",
|
||||
"discord-msg-ext-approvedrevs-unapproved": "$1 је поништио/ла одобрену измену за $2",
|
||||
"discord-msg-ext-approvedrevs-approved-file": "$1 је одобрио/ла нову верзију датотеке $2 ($3) корисника $4",
|
||||
"discord-msg-ext-approvedrevs-unapproved-file": "$1 је поништио/ла одобрену верзију датотеке $2",
|
||||
"discord-msg-user-rename": "$1 је преименовао/ла корисника $2 у $3"
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
{
|
||||
"@metadata": {
|
||||
"authors": [
|
||||
"KockaAdmiralac"
|
||||
]
|
||||
},
|
||||
"discord-desc": "Šalje poruke na Discord kanal kada se dese određeni događaji",
|
||||
"discord-talk": "r",
|
||||
"discord-contribs": "d",
|
||||
"discord-diff": "razl",
|
||||
"discord-minor": "(m)",
|
||||
"discord-msg-page-edited": "$1 je uredio/-la $2 $3 $4",
|
||||
"discord-msg-page-created": "$1 je napravio/-la $2 $3 $4",
|
||||
"discord-msg-page-deleted": "$1 je obrisao/-la $2 $3 ($4 izmena obrisano)",
|
||||
"discord-msg-page-undeleted-revs": "izmene za",
|
||||
"discord-msg-page-undeleted": "$1 je vratio/-la $2 $3 $4",
|
||||
"discord-msg-rev-visibility-changed": "$1 je promenio/-la vidljivost $2 izmena na $3",
|
||||
"discord-msg-page-protect": "$1 je promenio/-la podešavanja zaštite na $2 $3 ($4)",
|
||||
"discord-msg-page-moved": "$1 je pomerio/-la $2 na $3 $4 $5",
|
||||
"discord-msg-user-registered": "$1 se registrovao/-la",
|
||||
"discord-msg-user-block": "$1 je blokirao/-la $2 $3 ($4)",
|
||||
"discord-msg-user-unblock": "$1 je deblokirao/-la $2",
|
||||
"discord-msg-user-groups-changed": "$1 je promenio/-la prava od $2 $3 ($4) ($5)",
|
||||
"discord-msg-file-upload-new": "novu verziju",
|
||||
"discord-msg-file-upload": "$1 je otpremio/-la $2 $3 $4 ($5, $6x$7, $8)",
|
||||
"discord-msg-file-delete": "$1 je obrisao/-la verziju datoteke $2 $3",
|
||||
"discord-msg-file-undelete": "$1 je vratio/-la pojedine verzije datoteke $2 $3",
|
||||
"discord-msg-import": "$1 je uvezao/-la $2 (uvezeno $4/$3 izmena)",
|
||||
"discord-msg-page-merge": "$1 je spojio/-la izmene iz $2 u $3",
|
||||
"discord-msg-ext-approvedrevs-approved": "$1 je odobrio/-la novu izmenu $2 (izmena $3) od korisnika $4",
|
||||
"discord-msg-ext-approvedrevs-unapproved": "$1 je poništio/-la odobrenje izmene $2",
|
||||
"discord-msg-ext-approvedrevs-approved-file": "$1 je odobrio/-la novu izmenu datoteke $2 ($3) od korisnika $4",
|
||||
"discord-msg-ext-approvedrevs-unapproved-file": "$1 je poništio/-la odobrenje izmene datoteke $2",
|
||||
"discord-msg-user-rename": "$1 je preimenovao/-la korisnika $2 u $3"
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
{
|
||||
"@metadata": {
|
||||
"authors": [
|
||||
"Sabelöga",
|
||||
"Stefan2255"
|
||||
]
|
||||
},
|
||||
"discord-desc": "Skickar meddelanden till en Discord-kanal när vissa händelser sker",
|
||||
"discord-talk": "t",
|
||||
"discord-contribs": "c",
|
||||
"discord-diff": "skillnad",
|
||||
"discord-minor": "(m)",
|
||||
"discord-msg-page-edited": "$1 redigerade $2 $3 $4",
|
||||
"discord-msg-page-created": "$1 skapade $2 $3 $4",
|
||||
"discord-msg-page-deleted": "$1 raderade $2 $3 ( $4 sidvisioner raderade)",
|
||||
"discord-msg-page-undeleted-revs": "sidversioner för",
|
||||
"discord-msg-page-undeleted": "$1 återställde $2 $3 $4",
|
||||
"discord-msg-rev-visibility-changed": "$1 ändrade synligheten för $2 sidversioner på $3",
|
||||
"discord-msg-page-protect": "$1 ändrade skrivskydd av $2 $3 ($4)",
|
||||
"discord-msg-page-moved": "$1 flyttade $2 till $3 $4 $5",
|
||||
"discord-msg-user-registered": "$1 registrerade",
|
||||
"discord-msg-user-block": "$1 blockerade $2 $3 ($4)",
|
||||
"discord-msg-user-unblock": "$1 avblockerade $2",
|
||||
"discord-msg-user-groups-changed": "$1 ändrade rättigheter för $2 $3 ($4) ($5)",
|
||||
"discord-msg-file-upload-new": "ny version av",
|
||||
"discord-msg-file-upload": "$1 laddade upp $2 $3 $4 ($5, $6x$7, $8)",
|
||||
"discord-msg-file-delete": "$1 raderad en version av filen $2 $3",
|
||||
"discord-msg-file-undelete": "$1 återställde några versioner av filen $2 $3",
|
||||
"discord-msg-import": "$1 importerade $2 (importerade $4/$3 sidversioner)",
|
||||
"discord-msg-page-merge": "$1 sammanfogade sidversioner från $2 till $3",
|
||||
"discord-msg-ext-approvedrevs-approved": "$1 godkände en ny sidversion av $2 (sidversion $3) från användare $4",
|
||||
"discord-msg-ext-approvedrevs-unapproved": "$1 drog in godkännandet av sidversionen för $2",
|
||||
"discord-msg-ext-approvedrevs-approved-file": "$1 godkände en ny filrevision av $2 ($3) från användare $4",
|
||||
"discord-msg-ext-approvedrevs-unapproved-file": "$1 drog in godkännandet för filrevisionen för $2",
|
||||
"discord-msg-user-rename": "$1 bytte namn på användare $2 till $3"
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"@metadata": {
|
||||
"authors": [
|
||||
"Tbodt"
|
||||
]
|
||||
},
|
||||
"discord-talk": "tk",
|
||||
"discord-contribs": "pl",
|
||||
"discord-diff": "ante",
|
||||
"discord-minor": "(lili)",
|
||||
"discord-msg-page-edited": "$1 li ante e lipu $2 $3 $4",
|
||||
"discord-msg-page-created": "$1 li pali e lipu $2 $3 $4",
|
||||
"discord-msg-page-deleted": "$1 li weka e lipu $2 $3 (lipu li ante lon tenpo $4)",
|
||||
"discord-msg-page-undeleted": "$1 li lon sin e lipu $2 $3 $4",
|
||||
"discord-msg-page-moved": "$1 li ante e nimi lipu $2 tawa nimi $3 $4 $5",
|
||||
"discord-msg-user-registered": "$1 li kama lon",
|
||||
"discord-msg-user-block": "$1 li ken ala e $2 $3 ($4)",
|
||||
"discord-msg-user-unblock": "$1 li ken sin e $2",
|
||||
"discord-msg-user-groups-changed": "$1 li ante e ken jan lon $2 $3 ($4) ($5)",
|
||||
"discord-msg-user-rename": "$1 li ante e nimi jan $2 tawa nimi $3"
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
{
|
||||
"@metadata": {
|
||||
"authors": [
|
||||
"Asma",
|
||||
"Hedda",
|
||||
"Joseph"
|
||||
]
|
||||
},
|
||||
"discord-desc": "Belirli olaylar gerçekleştiğinde bir Discord kanalına mesaj gönderir",
|
||||
"discord-talk": "m",
|
||||
"discord-contribs": "k",
|
||||
"discord-diff": "fark",
|
||||
"discord-minor": "(k)",
|
||||
"discord-msg-page-edited": "$1, $2 $3 $4 sayfasını düzenledi",
|
||||
"discord-msg-page-created": "$1, $2 $3 $4 sayfasını oluşturdu",
|
||||
"discord-msg-page-deleted": "$1, $3 sebebiyle $2 sayfasını sildi ($4 değişiklik silindi)",
|
||||
"discord-msg-page-undeleted-revs": "şunun için değişiklikler:",
|
||||
"discord-msg-page-undeleted": "$1, $2 $3 $4 sayfasını silemedi",
|
||||
"discord-msg-rev-visibility-changed": "$1, $3 sayfasındaki $2 değişikliğin görünürlüğünü değiştirdi",
|
||||
"discord-msg-page-protect": "$1, $2 sayfasının korunmasını $3 ($4) sebebiyle değiştirdi",
|
||||
"discord-msg-page-moved": "$1, $2 sayfasını $4 $5 sebebiyle $3 olacak şekildi taşıdı",
|
||||
"discord-msg-user-registered": "$1 kayıt oldu",
|
||||
"discord-msg-user-block": "$1, $3 ($4) sebebiyle $2 kullanıcısını engelledi",
|
||||
"discord-msg-user-unblock": "$1, $2 kullanıcısının engelini kaldırdı",
|
||||
"discord-msg-user-groups-changed": "$1, $3 ($4) ($5) sebebiyle $2 kullanıcısının haklarını değiştirdi",
|
||||
"discord-msg-file-upload-new": "şunun yeni sürümü:",
|
||||
"discord-msg-file-upload": "$1, $2 $3 $4 ($5, $6x$7, $8) yükledi",
|
||||
"discord-msg-file-delete": "$1, $2 $3 dosyasının bir sürümünü sildi",
|
||||
"discord-msg-file-undelete": "$1, $2 $3 dosyasının bazı sürümlerini geri yükledi",
|
||||
"discord-msg-import": "$1, $2 ice aktardı ($4 içe aktarılan/$3 revizyon)",
|
||||
"discord-msg-page-merge": "$1, $2 ile $3 için revizyonları birleştirdi",
|
||||
"discord-msg-ext-approvedrevs-approved": "$1, $4 kullanıcısından $2 (değişiklik $3) için yapılan yeni bir değişikliği onayladı",
|
||||
"discord-msg-ext-approvedrevs-unapproved": "$1, $2 için yapılan onaylı değişikliği reddetti",
|
||||
"discord-msg-ext-approvedrevs-approved-file": "$1, $4 kullanıcısı tarafından $2 ($3) için yapılan yeni bir dosya değişikliğini onayladı",
|
||||
"discord-msg-ext-approvedrevs-unapproved-file": "$1, $2 için onaylanan değişikliği reddetti",
|
||||
"discord-msg-user-rename": "$1, $2 kullanıcısını $3 olarak yeniden adlandırdı"
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
{
|
||||
"@metadata": {
|
||||
"authors": [
|
||||
"Anterdc99",
|
||||
"Peterxy12"
|
||||
]
|
||||
},
|
||||
"discord-desc": "当某些事件发生时向Discord频道发送消息",
|
||||
"discord-userlinks": "$1($2|$3)",
|
||||
"discord-talk": "讨论",
|
||||
"discord-contribs": "贡献",
|
||||
"discord-diff": "差异",
|
||||
"discord-minor": "(小)",
|
||||
"discord-msg-page-edited": "$1编辑了$2、$3:$4",
|
||||
"discord-msg-page-created": "$1创建了$2、$3:$4",
|
||||
"discord-msg-page-deleted": "$1删除了$2:$3(已删除版本$4)",
|
||||
"discord-msg-page-undeleted-revs": "版本为",
|
||||
"discord-msg-page-undeleted": "$1还原了$2 $3,原因:$4",
|
||||
"discord-msg-rev-visibility-changed": "$1更改了在$3上版本$2的可见性",
|
||||
"discord-msg-page-protect": "$1更改了$2的保护($4),原因:$3",
|
||||
"discord-msg-page-moved": "$1将$2移动到$3,原因:$4,版本链接:$5",
|
||||
"discord-msg-user-registered": "$1已注册",
|
||||
"discord-msg-user-block-timeformat": "d F Y H:i",
|
||||
"discord-msg-user-block": "$1封禁了$2,原因:$3($4)",
|
||||
"discord-msg-user-block-partial": "$1已部分封禁$2,原因:$3(到期:$4)",
|
||||
"discord-msg-user-unblock": "$1解封了$2",
|
||||
"discord-msg-user-groups-changed": "$1更改了$2的权限(新增:$4)(移除:$5),原因:$3",
|
||||
"discord-msg-file-upload-new": "新版本的",
|
||||
"discord-msg-file-upload": "$1上传了$2 $3($5,$6x$7,$8),原因:$4",
|
||||
"discord-msg-file-delete": "$1删除了文件$2的一个版本,原因:$3",
|
||||
"discord-msg-file-undelete": "$1恢复了文件$2的一些版本,原因:$3",
|
||||
"discord-msg-import": "$1导入了$2(导入了$4/$3个版本)",
|
||||
"discord-msg-page-merge": "$1将$2的版本合并到$3",
|
||||
"discord-msg-ext-approvedrevs-approved": "$1批准了来自用户$4的$2新版本$3",
|
||||
"discord-msg-ext-approvedrevs-unapproved": "$1取消批准$2的已批准版本",
|
||||
"discord-msg-ext-approvedrevs-approved-file": "$1批准了来自用户$4的$2的新文件版本($3)",
|
||||
"discord-msg-ext-approvedrevs-unapproved-file": "$1取消批准$2已批准的文件版本",
|
||||
"discord-msg-user-rename": "$1将用户$2重命名为$3"
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
{
|
||||
"@metadata": {
|
||||
"authors": [
|
||||
"Kly"
|
||||
]
|
||||
},
|
||||
"discord-desc": "當某些事件發生時向 Discord 頻道發送訊息",
|
||||
"discord-talk": "討論",
|
||||
"discord-contribs": "貢獻",
|
||||
"discord-diff": "差異",
|
||||
"discord-minor": "(m)",
|
||||
"discord-msg-page-edited": "$1編輯了$2、$3:$4",
|
||||
"discord-msg-page-created": "$1建立了$2、$3:$4",
|
||||
"discord-msg-page-deleted": "$1刪除了$2:$3(已刪除修訂 $4)",
|
||||
"discord-msg-page-undeleted-revs": "修訂為",
|
||||
"discord-msg-page-undeleted": "$1取消刪除$2 $3,意見:$4",
|
||||
"discord-msg-rev-visibility-changed": "$1更改了在$3上修訂$2的可見度",
|
||||
"discord-msg-page-protect": "$1更改了$2的保護($4),原因:$3",
|
||||
"discord-msg-page-moved": "$1將$2移動到$3,原因:$4,修訂連結:$5",
|
||||
"discord-msg-user-registered": "$1已註冊",
|
||||
"discord-msg-user-block-timeformat": "d F Y H:i",
|
||||
"discord-msg-user-block": "$1封鎖了$2,原因:$3($4)",
|
||||
"discord-msg-user-block-partial": "$1已部分封鎖$2,原因:$3(到期:$4)",
|
||||
"discord-msg-user-unblock": "$1取消封鎖$2",
|
||||
"discord-msg-user-groups-changed": "$1更改了$2的權限(新增:$4)(移除:$5),原因:$3",
|
||||
"discord-msg-file-upload-new": "新版本的",
|
||||
"discord-msg-file-upload": "$1上傳了$2 $3($5,$6x$7,$8),意見:$4",
|
||||
"discord-msg-file-delete": "$1刪除了檔案$2的一個版本,意見:$3",
|
||||
"discord-msg-file-undelete": "$1恢復了檔案$2的一些版本,意見:$3",
|
||||
"discord-msg-import": "$1匯入了$2(匯入 $4/$3 個修訂)",
|
||||
"discord-msg-page-merge": "$1將$2的修訂合併到$3",
|
||||
"discord-msg-ext-approvedrevs-approved": "$1批准了來自使用者$4的$2新修訂($3)",
|
||||
"discord-msg-ext-approvedrevs-unapproved": "$1取消批准$2的已批准修訂",
|
||||
"discord-msg-ext-approvedrevs-approved-file": "$1批准了來自使用者$4的$2新檔案修訂($3)",
|
||||
"discord-msg-ext-approvedrevs-unapproved-file": "$1取消批准$2已批准的檔案修訂",
|
||||
"discord-msg-user-rename": "$1將使用者$2重新命名為$3"
|
||||
}
|
||||
+648
-294
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,94 @@
|
||||
<?php
|
||||
|
||||
namespace MediaWiki\Extension\Discord;
|
||||
|
||||
use Exception;
|
||||
use MediaWiki\Deferred\DeferredUpdates;
|
||||
use MediaWiki\Http\HttpRequestFactory;
|
||||
use Wikimedia\Http\MultiHttpClient;
|
||||
|
||||
class DiscordMessageSender {
|
||||
public MultiHttpClient $multiHttpClient;
|
||||
|
||||
public function __construct( HttpRequestFactory $httpRequestFactory ) {
|
||||
$this->multiHttpClient = $httpRequestFactory->createMultiClient( [
|
||||
'connTimeout' => 10,
|
||||
'reqTimeout' => 10
|
||||
] );
|
||||
}
|
||||
|
||||
/**
|
||||
* Sends a message to Discord, based on the extension's configuration.
|
||||
* @param string $hookName
|
||||
* @param string $msg
|
||||
* @return void
|
||||
*/
|
||||
public function sendToDiscord( string $hookName, string $msg ) {
|
||||
global $wgDiscordWebhookURL, $wgDiscordEmojis, $wgDiscordUseEmojis, $wgDiscordPrependTimestamp;
|
||||
|
||||
if ( !$wgDiscordWebhookURL ) {
|
||||
return;
|
||||
}
|
||||
|
||||
$urls = [];
|
||||
|
||||
if ( is_array( $wgDiscordWebhookURL ) ) {
|
||||
$urls = array_merge( $urls, $wgDiscordWebhookURL );
|
||||
} elseif ( is_string( $wgDiscordWebhookURL ) ) {
|
||||
$urls[] = $wgDiscordWebhookURL;
|
||||
} else {
|
||||
wfDebugLog( 'discord',
|
||||
'The value of $wgDiscordWebhookURL is not valid and therefore no webhooks could be sent.' );
|
||||
return;
|
||||
}
|
||||
|
||||
// Strip whitespace to just one space
|
||||
$stripped = preg_replace( '/\s+/', ' ', $msg );
|
||||
|
||||
if ( $wgDiscordPrependTimestamp ) {
|
||||
$dateString = gmdate( wfMessage( 'discord-timestampformat' )->inContentLanguage()->text() );
|
||||
$stripped = $dateString . ' ' . $stripped;
|
||||
}
|
||||
|
||||
if ( $wgDiscordUseEmojis ) {
|
||||
$emoji = $wgDiscordEmojis[$hookName];
|
||||
$stripped = $emoji . ' ' . $stripped;
|
||||
}
|
||||
|
||||
$reqs = [];
|
||||
foreach ( $urls as $url ) {
|
||||
$reqs[] = $this->buildRequest( $url, $stripped );
|
||||
}
|
||||
|
||||
DeferredUpdates::addCallableUpdate( function () use ( $reqs ) {
|
||||
try {
|
||||
$this->multiHttpClient->runMulti( $reqs );
|
||||
} catch ( Exception ) {
|
||||
// TODO: better logging
|
||||
}
|
||||
} );
|
||||
}
|
||||
|
||||
/**
|
||||
* Builds a request for use with MultiHttpClient
|
||||
* @param string $url
|
||||
* @param string $msg
|
||||
* @return array
|
||||
*/
|
||||
private function buildRequest( string $url, string $msg ): array {
|
||||
return [
|
||||
'method' => 'POST',
|
||||
'url' => $url,
|
||||
'headers' => [
|
||||
'Content-Type' => 'application/json',
|
||||
'User-Agent' => 'mw-discord/1.2 (github.com/jayktaylor)'
|
||||
],
|
||||
'body' => json_encode( [
|
||||
'content' => $msg,
|
||||
'allowed_mentions' => [
|
||||
'parse' => []
|
||||
]
|
||||
] )
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,199 @@
|
||||
<?php
|
||||
|
||||
namespace MediaWiki\Extension\Discord;
|
||||
|
||||
use MediaWiki\MediaWikiServices;
|
||||
use MediaWiki\Revision\RevisionRecord;
|
||||
use MediaWiki\Title\Title;
|
||||
use MediaWiki\User\User;
|
||||
use MediaWiki\User\UserIdentity;
|
||||
|
||||
class DiscordUtils {
|
||||
/**
|
||||
* Checks if criteria is met for this action to be cancelled
|
||||
* @param string $hook
|
||||
* @param int|null $ns
|
||||
* @param User|UserIdentity|null $user
|
||||
* @return bool
|
||||
*/
|
||||
public static function isDisabled(
|
||||
string $hook, int|null $ns, User|UserIdentity|null $user
|
||||
): bool {
|
||||
global $wgDiscordDisabledHooks, $wgDiscordDisabledNS, $wgDiscordDisabledUsers;
|
||||
|
||||
if ( is_array( $wgDiscordDisabledHooks ) ) {
|
||||
if ( in_array( strtolower( $hook ), array_map( 'strtolower', $wgDiscordDisabledHooks ) ) ) {
|
||||
// Hook is disabled, return true
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
wfDebugLog( 'discord',
|
||||
'The value of $wgDiscordDisabledHooks is not valid and therefore all hooks are enabled.' );
|
||||
}
|
||||
if ( is_array( $wgDiscordDisabledNS ) ) {
|
||||
if ( $ns !== null ) {
|
||||
$ns = (int)$ns;
|
||||
if ( in_array( $ns, $wgDiscordDisabledNS ) ) {
|
||||
// Namespace is disabled, return true
|
||||
return true;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
wfDebugLog( 'discord',
|
||||
'The value of $wgDiscordDisabledNS is not valid and therefore all namespaces are enabled.' );
|
||||
}
|
||||
if ( is_array( $wgDiscordDisabledUsers ) ) {
|
||||
if ( $user !== null ) {
|
||||
if ( $user instanceof UserIdentity ) {
|
||||
$user = MediaWikiServices::getInstance()->getUserFactory()->newFromUserIdentity( $user );
|
||||
}
|
||||
|
||||
if ( $user instanceof User ) {
|
||||
if ( in_array( $user->getName(), $wgDiscordDisabledUsers ) ) {
|
||||
// User shouldn't trigger a message, return true
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
wfDebugLog( 'discord',
|
||||
'The value of $wgDiscordDisabledUsers is not valid and therefore all users can trigger messages.' );
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a formatted markdown link based on text and given URL
|
||||
* @param string $text
|
||||
* @param string $url
|
||||
* @return string
|
||||
*/
|
||||
public static function createMarkdownLink( string $text, string $url ): string {
|
||||
global $wgDiscordSuppressPreviews;
|
||||
|
||||
return "[" . $text . "]" . '(' . ( $wgDiscordSuppressPreviews ? '<' : '' ) .
|
||||
self::encodeURL( $url ) . ( $wgDiscordSuppressPreviews ? '>' : '' ) . ')';
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates links for a specific MediaWiki User object
|
||||
* @param User|UserIdentity|string $user
|
||||
* @return string
|
||||
*/
|
||||
public static function createUserLinks( User|UserIdentity|string $user ): string {
|
||||
global $wgDiscordMaxCharsUsernames;
|
||||
|
||||
if ( $user instanceof UserIdentity ) {
|
||||
// If we were passed a UserIdentity object, get the relevant user.
|
||||
$user = MediaWikiServices::getInstance()->getUserFactory()->newFromUserIdentity( $user );
|
||||
}
|
||||
|
||||
if ( $user instanceof User ) {
|
||||
$isAnon = $user->isAnon();
|
||||
$contribs = Title::newFromText( "Special:Contributions/" . $user );
|
||||
$user_abbr = strval( $user );
|
||||
|
||||
if ( $wgDiscordMaxCharsUsernames ) {
|
||||
if ( strlen( $user_abbr ) > $wgDiscordMaxCharsUsernames ) {
|
||||
$user_abbr = substr( $user_abbr, 0, $wgDiscordMaxCharsUsernames );
|
||||
$user_abbr = $user_abbr . '...';
|
||||
}
|
||||
}
|
||||
|
||||
$userPage = self::createMarkdownLink( $user_abbr, ( $isAnon ? $contribs : $user->getUserPage() )
|
||||
->getFullURL( '', false, PROTO_CANONICAL ) );
|
||||
$userTalk = self::createMarkdownLink( wfMessage( 'discord-talk' )->inContentLanguage()->text(),
|
||||
$user->getTalkPage()->getFullURL( '', false, PROTO_CANONICAL ) );
|
||||
$userContribs = self::createMarkdownLink( wfMessage( 'discord-contribs' )->inContentLanguage()->text(),
|
||||
$contribs->getFullURL( '', false, PROTO_CANONICAL ) );
|
||||
$text = wfMessage( 'discord-userlinks', $userPage, $userTalk, $userContribs )->inContentLanguage()->text();
|
||||
} else {
|
||||
// If we were given a string, handle this differently.
|
||||
$text = wfMessage( 'discord-userlinks', $user, 'n/a', 'n/a' )->inContentLanguage()->text();
|
||||
}
|
||||
return $text;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates formatted text for a specific Revision object
|
||||
* @param RevisionRecord $revision
|
||||
* @return string
|
||||
*/
|
||||
public static function createRevisionText( RevisionRecord $revision ): string {
|
||||
$diff = self::createMarkdownLink( wfMessage( 'discord-diff' )->inContentLanguage()->text(),
|
||||
Title::newFromLinkTarget( $revision->getPageAsLinkTarget() )->getFullURL(
|
||||
[ 'diff' => 'prev', 'oldid' => $revision->getId() ], false, PROTO_CANONICAL ) );
|
||||
$minor = '';
|
||||
$size = '';
|
||||
if ( $revision->isMinor() ) {
|
||||
$minor .= wfMessage( 'discord-minor' )->inContentLanguage()->text();
|
||||
}
|
||||
$parentId = $revision->getParentId();
|
||||
if ( $parentId ) {
|
||||
$parent = MediaWikiServices::getInstance()->getRevisionLookup()->getRevisionById( $parentId );
|
||||
if ( $parent ) {
|
||||
$size .= wfMessage( 'discord-size', sprintf( "%+d", $revision->getSize() - $parent->getSize() ) )
|
||||
->inContentLanguage()->text();
|
||||
}
|
||||
}
|
||||
if ( $size == '' ) {
|
||||
$size .= wfMessage( 'discord-size', sprintf( "%d", $revision->getSize() ) )->inContentLanguage()->text();
|
||||
}
|
||||
return wfMessage( 'discord-revisionlinks', $diff, $minor, $size )->inContentLanguage()->text();
|
||||
}
|
||||
|
||||
/**
|
||||
* Strip bad characters from a URL
|
||||
* @param string $url
|
||||
* @return string
|
||||
*/
|
||||
public static function encodeURL( string $url ): string {
|
||||
$url = str_replace( " ", "%20", $url );
|
||||
$url = str_replace( "(", "%28", $url );
|
||||
return str_replace( ")", "%29", $url );
|
||||
}
|
||||
|
||||
/**
|
||||
* Formats bytes to a string representing B, KB, MB, GB, TB
|
||||
* @param int $bytes
|
||||
* @param ?int $precision
|
||||
* @return string
|
||||
*/
|
||||
public static function formatBytes( int $bytes, ?int $precision = 2 ): string {
|
||||
$units = [ 'B', 'KB', 'MB', 'GB', 'TB' ];
|
||||
|
||||
$bytes = max( $bytes, 0 );
|
||||
$pow = floor( ( $bytes ? log( $bytes ) : 0 ) / log( 1024 ) );
|
||||
$pow = min( $pow, count( $units ) - 1 );
|
||||
|
||||
$bytes /= ( 1 << ( 10 * $pow ) );
|
||||
|
||||
return round( $bytes, $precision ) . ' ' . $units[$pow];
|
||||
}
|
||||
|
||||
/**
|
||||
* Truncate text to maximum allowed characters
|
||||
* @param string $text
|
||||
* @return string
|
||||
*/
|
||||
public static function truncateText( string $text ): string {
|
||||
global $wgDiscordMaxChars;
|
||||
if ( $wgDiscordMaxChars ) {
|
||||
if ( strlen( $text ) > $wgDiscordMaxChars ) {
|
||||
$text = substr( $text, 0, $wgDiscordMaxChars );
|
||||
$text = $text . '...';
|
||||
}
|
||||
}
|
||||
return $text;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sanitise text input to remove the potential for abuse of Discord's role pings.
|
||||
* @param string $text
|
||||
* @return string
|
||||
*/
|
||||
public static function sanitiseText( string $text ): string {
|
||||
return preg_replace( '/([`@])/', '', $text );
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
<?php
|
||||
|
||||
namespace MediaWiki\Extension\Discord;
|
||||
|
||||
use MediaWiki\MediaWikiServices;
|
||||
|
||||
return [
|
||||
'Discord.DiscordMessageSender' => static function ( MediaWikiServices $services ): DiscordMessageSender {
|
||||
return new DiscordMessageSender(
|
||||
$services->getHttpRequestFactory()
|
||||
);
|
||||
}
|
||||
];
|
||||
-235
@@ -1,235 +0,0 @@
|
||||
<?php
|
||||
|
||||
class DiscordUtils {
|
||||
/**
|
||||
* Checks if criteria is met for this action to be cancelled
|
||||
*/
|
||||
public static function isDisabled ( $hook, $ns, $user ) {
|
||||
global $wgDiscordDisabledHooks, $wgDiscordDisabledNS, $wgDiscordDisabledUsers;
|
||||
|
||||
if ( is_array( $wgDiscordDisabledHooks ) ) {
|
||||
if ( in_array( strtolower( $hook ), array_map( 'strtolower', $wgDiscordDisabledHooks ) ) ) {
|
||||
// Hook is disabled, return true
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
wfDebugLog( 'discord', 'The value of $wgDiscordDisabledHooks is not valid and therefore all hooks are enabled.' );
|
||||
}
|
||||
if ( is_array( $wgDiscordDisabledNS ) ) {
|
||||
if ( !is_null( $ns ) ) {
|
||||
$ns = (int)$ns;
|
||||
if ( in_array( $ns, $wgDiscordDisabledNS ) ) {
|
||||
// Namespace is disabled, return true
|
||||
return true;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
wfDebugLog( 'discord', 'The value of $wgDiscordDisabledNS is not valid and therefore all namespaces are enabled.' );
|
||||
}
|
||||
if ( is_array( $wgDiscordDisabledUsers ) ) {
|
||||
if ( !is_null( $user ) ) {
|
||||
if ( $user instanceof User ) {
|
||||
if ( in_array( $user->getName(), $wgDiscordDisabledUsers ) ) {
|
||||
// User shouldn't trigger a message, return true
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
wfDebugLog( 'discord', 'The value of $wgDiscordDisabledUsers is not valid and therefore all users can trigger messages.' );
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles sending a webhook to Discord using cURL
|
||||
*/
|
||||
public static function handleDiscord ($msg) {
|
||||
global $wgDiscordWebhookURL, $wgDiscordPrependTimestamp, $wgDiscordUseFileGetContents;
|
||||
|
||||
if ( !$wgDiscordWebhookURL ) {
|
||||
// There's nothing in here, so we won't do anything
|
||||
return false;
|
||||
}
|
||||
|
||||
$urls = [];
|
||||
|
||||
if ( is_array( $wgDiscordWebhookURL ) ) {
|
||||
$urls = array_merge($urls, $wgDiscordWebhookURL);
|
||||
} else if ( is_string($wgDiscordWebhookURL) ) {
|
||||
$urls[] = $wgDiscordWebhookURL;
|
||||
} else {
|
||||
wfDebugLog( 'discord', 'The value of $wgDiscordWebhookURL is not valid and therefore no webhooks could be sent.' );
|
||||
return false;
|
||||
}
|
||||
|
||||
// Strip whitespace to just one space
|
||||
$stripped = preg_replace('/\s+/', ' ', $msg);
|
||||
|
||||
if ( $wgDiscordPrependTimestamp ) {
|
||||
// Add timestamp
|
||||
$dateString = gmdate( wfMessage( 'discord-timestampformat' )->text() );
|
||||
$stripped = $dateString . ' ' . $stripped;
|
||||
}
|
||||
|
||||
DeferredUpdates::addCallableUpdate( function() use ( $stripped, $urls, $wgDiscordUseFileGetContents ) {
|
||||
$user_agent = 'mw-discord/1.0 (github.com/jaydenkieran)';
|
||||
$json_data = [ 'content' => "$stripped" ];
|
||||
$json = json_encode($json_data);
|
||||
|
||||
if ( $wgDiscordUseFileGetContents ) {
|
||||
// They want to use file_get_contents
|
||||
foreach ($urls as &$value) {
|
||||
$contextOpts = [
|
||||
'http' => [
|
||||
'header' => 'Content-Type: application/x-www-form-urlencoded',
|
||||
'method' => 'POST', // Send as a POST request
|
||||
'user_agent' => $user_agent, // Add a unique user agent
|
||||
'content' => $json, // Send the JSON in the POST request
|
||||
'ignore_errors' => true // If the call fails, let's not do anything with it
|
||||
]
|
||||
];
|
||||
|
||||
$context = stream_context_create( $contextOpts );
|
||||
$result = file_get_contents( $value, false, $context );
|
||||
}
|
||||
} else {
|
||||
// By default, we use cURL
|
||||
// Set up cURL multi handlers
|
||||
$c_handlers = [];
|
||||
$result = [];
|
||||
$mh = curl_multi_init();
|
||||
|
||||
foreach ($urls as &$value) {
|
||||
$c_handlers[$value] = curl_init( $value );
|
||||
curl_setopt( $c_handlers[$value], CURLOPT_POST, 1 ); // Send as a POST request
|
||||
curl_setopt( $c_handlers[$value], CURLOPT_POSTFIELDS, $json ); // Send the JSON in the POST request
|
||||
curl_setopt( $c_handlers[$value], CURLOPT_FOLLOWLOCATION, 1 );
|
||||
curl_setopt( $c_handlers[$value], CURLOPT_HEADER, 0 );
|
||||
curl_setopt( $c_handlers[$value], CURLOPT_RETURNTRANSFER, 1 );
|
||||
curl_setopt( $c_handlers[$value], CURLOPT_CONNECTTIMEOUT, 10 ); // Add a timeout for connecting to the site
|
||||
curl_setopt( $c_handlers[$value], CURLOPT_TIMEOUT, 10 ); // Do not allow cURL to run for a long time
|
||||
curl_setopt( $c_handlers[$value], CURLOPT_USERAGENT, $user_agent ); // Add a unique user agent
|
||||
curl_setopt( $c_handlers[$value], CURLOPT_HTTPHEADER, array(
|
||||
'Content-Type: application/json'
|
||||
));
|
||||
curl_multi_add_handle( $mh, $c_handlers[$value] );
|
||||
}
|
||||
|
||||
$running = null;
|
||||
do {
|
||||
curl_multi_exec($mh, $running);
|
||||
} while ($running);
|
||||
|
||||
// Remove all handlers and then close the multi handler
|
||||
foreach($c_handlers as $k => $ch) {
|
||||
$result[$k] = curl_multi_getcontent($ch);
|
||||
wfDebugLog( 'discord', 'Result of cURL was: ' . $result[$k] );
|
||||
curl_multi_remove_handle($mh, $ch);
|
||||
}
|
||||
|
||||
curl_multi_close($mh);
|
||||
}
|
||||
} );
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a formatted markdown link based on text and given URL
|
||||
*/
|
||||
public static function createMarkdownLink ($text, $url) {
|
||||
global $wgDiscordSuppressPreviews;
|
||||
|
||||
return "[" . $text . "]" . '(' . ($wgDiscordSuppressPreviews ? '<' : '') . self::encodeURL($url) . ($wgDiscordSuppressPreviews ? '>' : '') . ')';
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates links for a specific MediaWiki User object
|
||||
*/
|
||||
public static function createUserLinks ($user) {
|
||||
if ( $user instanceof User ) {
|
||||
$isAnon = $user->isAnon();
|
||||
$contribs = Title::newFromText("Special:Contributions/" . $user);
|
||||
|
||||
$userPage = DiscordUtils::createMarkdownLink( $user, ( $isAnon ? $contribs : $user->getUserPage() )->getFullUrl( '', '', $proto = PROTO_HTTP ) );
|
||||
$userTalk = DiscordUtils::createMarkdownLink( wfMessage( 'discord-talk' )->text(), $user->getTalkPage()->getFullUrl( '', '', $proto = PROTO_HTTP ) );
|
||||
$userContribs = DiscordUtils::createMarkdownLink( wfMessage( 'discord-contribs' )->text(), $contribs->getFullURL( '', '', $proto = PROTO_HTTP ) );
|
||||
$text = wfMessage( 'discord-userlinks', $userPage, $userTalk, $userContribs )->text();
|
||||
} else {
|
||||
// If it's a string, which can be likely (for example when range blocking a user)
|
||||
// We need to handle this differently.
|
||||
$text = wfMessage( 'discord-userlinks', $user, 'n/a', 'n/a' )->text();
|
||||
}
|
||||
return $text;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates formatted text for a specific Revision object
|
||||
*/
|
||||
public static function createRevisionText ($revision) {
|
||||
$diff = DiscordUtils::createMarkdownLink( wfMessage( 'discord-diff' )->text(), $revision->getTitle()->getFullUrl("diff=prev", ["oldid" => $revision->getID()], $proto = PROTO_HTTP) );
|
||||
$minor = '';
|
||||
$size = '';
|
||||
if ( $revision->isMinor() ) {
|
||||
$minor .= wfMessage( 'discord-minor' )->text();
|
||||
}
|
||||
$previous = $revision->getPrevious();
|
||||
if ( $previous ) {
|
||||
$size .= wfMessage( 'discord-size', sprintf( "%+d", $revision->getSize() - $previous->getSize() ) )->text();
|
||||
} else if ( $revision->getParentId() ) {
|
||||
// Try and get the parent revision based on the ID, if we can
|
||||
$previous = Revision::newFromId( $revision->getParentId() );
|
||||
if ($previous) {
|
||||
$size .= wfMessage( 'discord-size', sprintf( "%+d", $revision->getSize() - $previous->getSize() ) )->text();
|
||||
}
|
||||
}
|
||||
if ( $size == '' ) {
|
||||
$size .= wfMessage( 'discord-size', sprintf( "%d", $revision->getSize() ) )->text();
|
||||
}
|
||||
$text = wfMessage( 'discord-revisionlinks', $diff, $minor, $size )->text();
|
||||
return $text;
|
||||
}
|
||||
|
||||
/**
|
||||
* Strip bad characters from a URL
|
||||
*/
|
||||
public static function encodeURL($url) {
|
||||
$url = str_replace(" ", "%20", $url);
|
||||
$url = str_replace("(", "%28", $url);
|
||||
$url = str_replace(")", "%29", $url);
|
||||
return $url;
|
||||
}
|
||||
|
||||
/**
|
||||
* Formats bytes to a string representing B, KB, MB, GB, TB
|
||||
*/
|
||||
public static function formatBytes($bytes, $precision = 2) {
|
||||
$units = array('B', 'KB', 'MB', 'GB', 'TB');
|
||||
|
||||
$bytes = max($bytes, 0);
|
||||
$pow = floor(($bytes ? log($bytes) : 0) / log(1024));
|
||||
$pow = min($pow, count($units) - 1);
|
||||
|
||||
$bytes /= (1 << (10 * $pow));
|
||||
|
||||
return round($bytes, $precision) . ' ' . $units[$pow];
|
||||
}
|
||||
|
||||
/**
|
||||
* Truncate text to maximum allowed characters
|
||||
*/
|
||||
public static function truncateText($text) {
|
||||
global $wgDiscordMaxChars;
|
||||
if ($wgDiscordMaxChars) {
|
||||
if (strlen($text) > $wgDiscordMaxChars) {
|
||||
$text = substr($text, 0, $wgDiscordMaxChars);
|
||||
$text = $text.'...';
|
||||
}
|
||||
}
|
||||
return $text;
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
Reference in New Issue
Block a user