summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog.adoc1
-rw-r--r--doc/en/weechat_dev.en.adoc1
-rw-r--r--doc/fr/weechat_dev.fr.adoc1
-rw-r--r--doc/ja/weechat_dev.ja.adoc2
-rw-r--r--doc/sr/weechat_dev.sr.adoc2
-rw-r--r--po/cs.po12
-rw-r--r--po/de.po14
-rw-r--r--po/es.po12
-rw-r--r--po/fr.po14
-rw-r--r--po/hu.po12
-rw-r--r--po/it.po12
-rw-r--r--po/ja.po14
-rw-r--r--po/pl.po14
-rw-r--r--po/pt.po12
-rw-r--r--po/pt_BR.po12
-rw-r--r--po/ru.po12
-rw-r--r--po/sr.po14
-rw-r--r--po/tr.po14
-rw-r--r--po/weechat.pot10
-rw-r--r--src/plugins/irc/irc-command.c109
-rw-r--r--tests/CMakeLists.txt1
-rw-r--r--tests/unit/plugins/irc/test-irc-command.cpp1146
22 files changed, 1399 insertions, 42 deletions
diff --git a/ChangeLog.adoc b/ChangeLog.adoc
index 40b573829..3127f8ade 100644
--- a/ChangeLog.adoc
+++ b/ChangeLog.adoc
@@ -43,6 +43,7 @@ New features::
* api: add support of specifier `%!` for timestamp in function util_strftimeval
* api: add support of base64url in encode/decode functions
* fset: add option `-import` in command `/fset`
+ * irc: allow range in commands `/unban` and `/unquiet` (issue #2113)
* irc: rename option irc.color.item_channel_modes to weechat.color.status_modes
* irc: add option `-all` in command `/allchan`, do not execute command on parted channels by default (issue #2085)
* irc: add server option "autojoin_delay" (delay before autojoin), use option "command_delay" before execution of the command (issue #862)
diff --git a/doc/en/weechat_dev.en.adoc b/doc/en/weechat_dev.en.adoc
index 237a7f37e..ad6dd681b 100644
--- a/doc/en/weechat_dev.en.adoc
+++ b/doc/en/weechat_dev.en.adoc
@@ -475,6 +475,7 @@ WeeChat "core" is located in following directories:
|             test-irc-buffer.cpp | Tests: IRC buffers.
|             test-irc-channel.cpp | Tests: IRC channels.
|             test-irc-color.cpp | Tests: IRC colors.
+|             test-irc-command.cpp | Tests: IRC commands.
|             test-irc-config.cpp | Tests: IRC configuration.
|             test-irc-ctcp.cpp | Tests: IRC CTCP.
|             test-irc-ignore.cpp | Tests: IRC ignores.
diff --git a/doc/fr/weechat_dev.fr.adoc b/doc/fr/weechat_dev.fr.adoc
index e768fc74e..04b212fba 100644
--- a/doc/fr/weechat_dev.fr.adoc
+++ b/doc/fr/weechat_dev.fr.adoc
@@ -477,6 +477,7 @@ Le cœur de WeeChat est situé dans les répertoires suivants :
|             test-irc-buffer.cpp | Tests : tampons IRC.
|             test-irc-channel.cpp | Tests : canaux IRC.
|             test-irc-color.cpp | Tests : couleurs IRC.
+|             test-irc-command.cpp | Tests : commandes IRC.
|             test-irc-config.cpp | Tests : configuration IRC.
|             test-irc-ctcp.cpp | Tests : CTCP IRC.
|             test-irc-ignore.cpp | Tests : ignores IRC.
diff --git a/doc/ja/weechat_dev.ja.adoc b/doc/ja/weechat_dev.ja.adoc
index 607ee1cb9..62b5a6eab 100644
--- a/doc/ja/weechat_dev.ja.adoc
+++ b/doc/ja/weechat_dev.ja.adoc
@@ -559,6 +559,8 @@ WeeChat "core" は以下のディレクトリに配置されています:
// TRANSLATION MISSING
|             test-irc-channel.cpp | Tests: IRC channels.
|             test-irc-color.cpp | Tests: IRC colors.
+// TRANSLATION MISSING
+|             test-irc-command.cpp | Tests: IRC commands.
|             test-irc-config.cpp | テスト: IRC 設定
// TRANSLATION MISSING
|             test-irc-ctcp.cpp | Tests: IRC CTCP.
diff --git a/doc/sr/weechat_dev.sr.adoc b/doc/sr/weechat_dev.sr.adoc
index f7a5aa9ae..ab0fa4754 100644
--- a/doc/sr/weechat_dev.sr.adoc
+++ b/doc/sr/weechat_dev.sr.adoc
@@ -477,6 +477,8 @@ WeeChat „језгро” се налази у следећим директо
|             test-irc-buffer.cpp | Тестови: IRC бафери.
|             test-irc-channel.cpp | Тестови: IRC канали.
|             test-irc-color.cpp | Тестови: IRC боје.
+// TRANSLATION MISSING
+|             test-irc-command.cpp | Tests: IRC commands.
|             test-irc-config.cpp | Тестови: IRC конфигурација.
|             test-irc-ctcp.cpp | Тестови: IRC CTCP.
|             test-irc-ignore.cpp | Тестови: IRC игнорисања.
diff --git a/po/cs.po b/po/cs.po
index 50f15aa1d..72cf8fa7e 100644
--- a/po/cs.po
+++ b/po/cs.po
@@ -21,7 +21,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
-"POT-Creation-Date: 2024-05-13 22:49+0200\n"
+"POT-Creation-Date: 2024-05-13 22:50+0200\n"
"PO-Revision-Date: 2024-04-07 14:50+0200\n"
"Last-Translator: Ondřej Súkup <mimi.vx@gmail.com>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@@ -10050,7 +10050,7 @@ msgstr "zruší zakázání pro přezdívku nebo hosta"
#. TRANSLATORS: only text between angle brackets (eg: "<name>") must be translated
#, fuzzy
-msgid "[<channel>] <nick>|<number> [<nick>|<number>...]"
+msgid "[<channel>] <nick>|<number>|<n1>-<n2> [<nick>|<number>|<n1>-<n2>...]"
msgstr "[<kanál>] <přezdívka> [<přezdívka>...]"
#, fuzzy
@@ -10060,6 +10060,14 @@ msgstr ""
"přezdívka: uživatel nebo host, kterému zrušit zakázání"
#, fuzzy
+#| msgid "IRC servers (internal names)"
+msgid "n1: interval start number"
+msgstr "IRC servery (vnitřní jména)"
+
+msgid "n2: interval end number"
+msgstr ""
+
+#, fuzzy
msgid "unquiet nicks or hosts"
msgstr "ztichnout přezdívky nebo hosty"
diff --git a/po/de.po b/po/de.po
index 47271a2fc..00c22689c 100644
--- a/po/de.po
+++ b/po/de.po
@@ -26,7 +26,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
-"POT-Creation-Date: 2024-05-13 22:49+0200\n"
+"POT-Creation-Date: 2024-05-13 22:50+0200\n"
"PO-Revision-Date: 2024-05-02 07:42+0200\n"
"Last-Translator: Nils Görs <weechatter@arcor.de>\n"
"Language-Team: German <kde-i18n-de@kde.org>\n"
@@ -11138,12 +11138,22 @@ msgid "unban nicks or hosts"
msgstr "Bann von Nicks oder Hosts aufheben"
#. TRANSLATORS: only text between angle brackets (eg: "<name>") must be translated
-msgid "[<channel>] <nick>|<number> [<nick>|<number>...]"
+#, fuzzy
+#| msgid "[<channel>] <nick>|<number> [<nick>|<number>...]"
+msgid "[<channel>] <nick>|<number>|<n1>-<n2> [<nick>|<number>|<n1>-<n2>...]"
msgstr "[<channel>] <nick>|<number> [<nick>|<number>...]"
msgid "number: ban number (as displayed by command /ban)"
msgstr "Nummer: Nummer des Bannes (wird beim Befehl /ban angezeigt)"
+#, fuzzy
+#| msgid "server: internal server name"
+msgid "n1: interval start number"
+msgstr "Server: interner Name des Servers"
+
+msgid "n2: interval end number"
+msgstr ""
+
msgid "unquiet nicks or hosts"
msgstr "Nicks oder Hosts das Wort erteilen"
diff --git a/po/es.po b/po/es.po
index 738790a58..ae116cbe7 100644
--- a/po/es.po
+++ b/po/es.po
@@ -22,7 +22,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
-"POT-Creation-Date: 2024-05-13 22:49+0200\n"
+"POT-Creation-Date: 2024-05-13 22:50+0200\n"
"PO-Revision-Date: 2024-04-07 14:50+0200\n"
"Last-Translator: Santiago Forero <santiago@forero.xyz>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@@ -10258,7 +10258,7 @@ msgstr "remueve vetos a apodos o máquinas"
#. TRANSLATORS: only text between angle brackets (eg: "<name>") must be translated
#, fuzzy
-msgid "[<channel>] <nick>|<number> [<nick>|<number>...]"
+msgid "[<channel>] <nick>|<number>|<n1>-<n2> [<nick>|<number>|<n1>-<n2>...]"
msgstr "[<canal>] <apodo> [<apodo> ...]"
#, fuzzy
@@ -10270,6 +10270,14 @@ msgstr ""
"Sin argumentos, este comando muestra la lista de vetos del canal actual."
#, fuzzy
+#| msgid "IRC servers (internal names)"
+msgid "n1: interval start number"
+msgstr "servidores IRC (nombres internos)"
+
+msgid "n2: interval end number"
+msgstr ""
+
+#, fuzzy
msgid "unquiet nicks or hosts"
msgstr "silencia apodos o máquinas"
diff --git a/po/fr.po b/po/fr.po
index 0d897d44a..8fa1dc3f0 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -21,8 +21,8 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
-"POT-Creation-Date: 2024-05-13 22:49+0200\n"
-"PO-Revision-Date: 2024-05-13 22:50+0200\n"
+"POT-Creation-Date: 2024-05-13 22:50+0200\n"
+"PO-Revision-Date: 2024-05-13 22:53+0200\n"
"Last-Translator: Sébastien Helleu <flashcode@flashtux.org>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
"Language: fr\n"
@@ -10942,12 +10942,18 @@ msgid "unban nicks or hosts"
msgstr "supprimer le bannissement sur des pseudos ou hôtes"
#. TRANSLATORS: only text between angle brackets (eg: "<name>") must be translated
-msgid "[<channel>] <nick>|<number> [<nick>|<number>...]"
-msgstr "[<canal>] <pseudo>|<nombre> [<pseudo>|<nombre>...]"
+msgid "[<channel>] <nick>|<number>|<n1>-<n2> [<nick>|<number>|<n1>-<n2>...]"
+msgstr "[<canal>] <pseudo>|<nombre>|<n1>-<n2> [<pseudo>|<nombre>|<n1>-<n2>...]"
msgid "number: ban number (as displayed by command /ban)"
msgstr "nombre : numéro de bannissement (tel qu'affiché par la commande /ban)"
+msgid "n1: interval start number"
+msgstr "n1 : numéro de départ de l'intervalle"
+
+msgid "n2: interval end number"
+msgstr "n2 : numéro de fin de l'intervalle"
+
msgid "unquiet nicks or hosts"
msgstr "ne plus taire des pseudos ou hôtes"
diff --git a/po/hu.po b/po/hu.po
index ba61f9e9b..426b97e43 100644
--- a/po/hu.po
+++ b/po/hu.po
@@ -20,7 +20,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
-"POT-Creation-Date: 2024-05-13 22:49+0200\n"
+"POT-Creation-Date: 2024-05-13 22:50+0200\n"
"PO-Revision-Date: 2024-04-07 14:50+0200\n"
"Last-Translator: Andras Voroskoi <voroskoi@frugalware.org>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@@ -9645,7 +9645,7 @@ msgstr "gép vagy felhasználó tiltásának visszavonása"
#. TRANSLATORS: only text between angle brackets (eg: "<name>") must be translated
#, fuzzy
-msgid "[<channel>] <nick>|<number> [<nick>|<number>...]"
+msgid "[<channel>] <nick>|<number>|<n1>-<n2> [<nick>|<number>|<n1>-<n2>...]"
msgstr "[szoba] név [név ...]"
#, fuzzy
@@ -9655,6 +9655,14 @@ msgstr ""
" név: felhasználó vagy gép melyen a parancsot végrehajtjuk"
#, fuzzy
+#| msgid "target: server name"
+msgid "n1: interval start number"
+msgstr "cél: szerver neve"
+
+msgid "n2: interval end number"
+msgstr ""
+
+#, fuzzy
msgid "unquiet nicks or hosts"
msgstr "gép vagy felhasználó tiltásának visszavonása"
diff --git a/po/it.po b/po/it.po
index 427865b0c..80723a6fc 100644
--- a/po/it.po
+++ b/po/it.po
@@ -20,7 +20,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
-"POT-Creation-Date: 2024-05-13 22:49+0200\n"
+"POT-Creation-Date: 2024-05-13 22:50+0200\n"
"PO-Revision-Date: 2024-04-07 14:50+0200\n"
"Last-Translator: Esteban I. Ruiz Moreno <exio4.com@gmail.com>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@@ -10252,7 +10252,7 @@ msgstr "rimuove il ban da nick o host"
#. TRANSLATORS: only text between angle brackets (eg: "<name>") must be translated
#, fuzzy
-msgid "[<channel>] <nick>|<number> [<nick>|<number>...]"
+msgid "[<channel>] <nick>|<number>|<n1>-<n2> [<nick>|<number>|<n1>-<n2>...]"
msgstr "[<canale>] <nick> [<nick>...]"
#, fuzzy
@@ -10264,6 +10264,14 @@ msgstr ""
"Senza argomento, il comando mostra la lista dei ban per il canale corrente."
#, fuzzy
+#| msgid "IRC servers (internal names)"
+msgid "n1: interval start number"
+msgstr "server IRC (nomi interni)"
+
+msgid "n2: interval end number"
+msgstr ""
+
+#, fuzzy
msgid "unquiet nicks or hosts"
msgstr "fa tacere nick o host"
diff --git a/po/ja.po b/po/ja.po
index a28cb5c20..3796c8505 100644
--- a/po/ja.po
+++ b/po/ja.po
@@ -20,7 +20,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
-"POT-Creation-Date: 2024-05-13 22:49+0200\n"
+"POT-Creation-Date: 2024-05-13 22:50+0200\n"
"PO-Revision-Date: 2024-04-07 14:50+0200\n"
"Last-Translator: AYANOKOUZI, Ryuunosuke <i38w7i3@yahoo.co.jp>\n"
"Language-Team: Japanese <https://github.com/l/weechat/tree/master/"
@@ -10551,7 +10551,9 @@ msgid "unban nicks or hosts"
msgstr "ニックネームかホストの禁止設定を解除"
#. TRANSLATORS: only text between angle brackets (eg: "<name>") must be translated
-msgid "[<channel>] <nick>|<number> [<nick>|<number>...]"
+#, fuzzy
+#| msgid "[<channel>] <nick>|<number> [<nick>|<number>...]"
+msgid "[<channel>] <nick>|<number>|<n1>-<n2> [<nick>|<number>|<n1>-<n2>...]"
msgstr "[<channel>] <nick>|<number> [<nick>|<number>...]"
#, fuzzy
@@ -10565,6 +10567,14 @@ msgstr ""
" nick: ニックネームまたはホスト名\n"
" number: バンするニックネームの番号 (コマンド /ban で表示される番号)"
+#, fuzzy
+#| msgid "IRC servers (internal names)"
+msgid "n1: interval start number"
+msgstr "IRC サーバ (内部名)"
+
+msgid "n2: interval end number"
+msgstr ""
+
msgid "unquiet nicks or hosts"
msgstr "ニックネームまたはホスト名に対する発言禁止を解除"
diff --git a/po/pl.po b/po/pl.po
index 8d5473660..4b180e472 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -22,7 +22,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
-"POT-Creation-Date: 2024-05-13 22:49+0200\n"
+"POT-Creation-Date: 2024-05-13 22:50+0200\n"
"PO-Revision-Date: 2024-05-02 00:06+0200\n"
"Last-Translator: Krzysztof Korościk <soltys@soltys.info>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@@ -10615,12 +10615,22 @@ msgid "unban nicks or hosts"
msgstr "odbanowuje nicki lub hosty"
#. TRANSLATORS: only text between angle brackets (eg: "<name>") must be translated
-msgid "[<channel>] <nick>|<number> [<nick>|<number>...]"
+#, fuzzy
+#| msgid "[<channel>] <nick>|<number> [<nick>|<number>...]"
+msgid "[<channel>] <nick>|<number>|<n1>-<n2> [<nick>|<number>|<n1>-<n2>...]"
msgstr "[<kanał>] <nick>|<numer> [<nick>|<numer>...]"
msgid "number: ban number (as displayed by command /ban)"
msgstr "numer: numer bana (wyświetlany na liście za pomocą komendy /ban)"
+#, fuzzy
+#| msgid "server: internal server name"
+msgid "n1: interval start number"
+msgstr "serwer: wewnętrzna nazwa serwera"
+
+msgid "n2: interval end number"
+msgstr ""
+
msgid "unquiet nicks or hosts"
msgstr "nicki albo hosty przestają być uciszone"
diff --git a/po/pt.po b/po/pt.po
index 59e93f09a..fd5c45e09 100644
--- a/po/pt.po
+++ b/po/pt.po
@@ -20,7 +20,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
-"POT-Creation-Date: 2024-05-13 22:49+0200\n"
+"POT-Creation-Date: 2024-05-13 22:50+0200\n"
"PO-Revision-Date: 2024-04-07 14:50+0200\n"
"Last-Translator: Vasco Almeida <vascomalmeida@sapo.pt>\n"
"Language-Team: Portuguese <>\n"
@@ -10527,7 +10527,7 @@ msgstr "remover banimento de nicks ou hosts"
#. TRANSLATORS: only text between angle brackets (eg: "<name>") must be translated
#, fuzzy
-msgid "[<channel>] <nick>|<number> [<nick>|<number>...]"
+msgid "[<channel>] <nick>|<number>|<n1>-<n2> [<nick>|<number>|<n1>-<n2>...]"
msgstr "[<canal>] <nick> [<nick>...]"
#, fuzzy
@@ -10538,6 +10538,14 @@ msgstr ""
"\n"
"Sem argumentos, este comando mostra a lista de banimentos do canal atual."
+#, fuzzy
+#| msgid "IRC servers (internal names)"
+msgid "n1: interval start number"
+msgstr "servidores IRC (nomes internos)"
+
+msgid "n2: interval end number"
+msgstr ""
+
msgid "unquiet nicks or hosts"
msgstr "remover silêncio de nicks ou hosts"
diff --git a/po/pt_BR.po b/po/pt_BR.po
index deabbb00c..ef155e2c9 100644
--- a/po/pt_BR.po
+++ b/po/pt_BR.po
@@ -21,7 +21,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
-"POT-Creation-Date: 2024-05-13 22:49+0200\n"
+"POT-Creation-Date: 2024-05-13 22:50+0200\n"
"PO-Revision-Date: 2024-04-07 14:50+0200\n"
"Last-Translator: Érico Nogueira <ericonr@disroot.org>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@@ -9975,7 +9975,7 @@ msgid "unban nicks or hosts"
msgstr ""
#. TRANSLATORS: only text between angle brackets (eg: "<name>") must be translated
-msgid "[<channel>] <nick>|<number> [<nick>|<number>...]"
+msgid "[<channel>] <nick>|<number>|<n1>-<n2> [<nick>|<number>|<n1>-<n2>...]"
msgstr ""
#, fuzzy
@@ -9985,6 +9985,14 @@ msgstr ""
" nick: nick ou host"
#, fuzzy
+#| msgid "IRC servers (internal names)"
+msgid "n1: interval start number"
+msgstr "servidor IRC (nomes internos)"
+
+msgid "n2: interval end number"
+msgstr ""
+
+#, fuzzy
msgid "unquiet nicks or hosts"
msgstr "retira o silencio de nicks ou hosts"
diff --git a/po/ru.po b/po/ru.po
index 253b58a0e..d96a582de 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -21,7 +21,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
-"POT-Creation-Date: 2024-05-13 22:49+0200\n"
+"POT-Creation-Date: 2024-05-13 22:50+0200\n"
"PO-Revision-Date: 2024-04-07 14:50+0200\n"
"Last-Translator: Aleksey V Zapparov AKA ixti <ixti@member.fsf.org>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@@ -9690,7 +9690,7 @@ msgstr "снимает бан с хоста или ника"
#. TRANSLATORS: only text between angle brackets (eg: "<name>") must be translated
#, fuzzy
-msgid "[<channel>] <nick>|<number> [<nick>|<number>...]"
+msgid "[<channel>] <nick>|<number>|<n1>-<n2> [<nick>|<number>|<n1>-<n2>...]"
msgstr "[канал] ник [ник ...]"
#, fuzzy
@@ -9700,6 +9700,14 @@ msgstr ""
" ник: ник или хост для снятия бана"
#, fuzzy
+#| msgid "target: server name"
+msgid "n1: interval start number"
+msgstr "цель: название сервера"
+
+msgid "n2: interval end number"
+msgstr ""
+
+#, fuzzy
msgid "unquiet nicks or hosts"
msgstr "снимает бан с хоста или ника"
diff --git a/po/sr.po b/po/sr.po
index 183283918..e58770394 100644
--- a/po/sr.po
+++ b/po/sr.po
@@ -20,7 +20,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
-"POT-Creation-Date: 2024-05-13 22:49+0200\n"
+"POT-Creation-Date: 2024-05-13 22:50+0200\n"
"PO-Revision-Date: 2024-05-07 14:00+0400\n"
"Last-Translator: Ivan Pešić <ivan.pesic@gmail.com>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@@ -10603,12 +10603,22 @@ msgid "unban nicks or hosts"
msgstr "уклањање забране надимцима или хостовима"
#. TRANSLATORS: only text between angle brackets (eg: "<name>") must be translated
-msgid "[<channel>] <nick>|<number> [<nick>|<number>...]"
+#, fuzzy
+#| msgid "[<channel>] <nick>|<number> [<nick>|<number>...]"
+msgid "[<channel>] <nick>|<number>|<n1>-<n2> [<nick>|<number>|<n1>-<n2>...]"
msgstr "[<канал>] <надимак>|<број> [<надимак>|<број>...]"
msgid "number: ban number (as displayed by command /ban)"
msgstr "број: број забране (као што га исписује команда /ban)"
+#, fuzzy
+#| msgid "server: internal server name"
+msgid "n1: interval start number"
+msgstr "сервер: интерно име сервера"
+
+msgid "n2: interval end number"
+msgstr ""
+
msgid "unquiet nicks or hosts"
msgstr "уклањање ућуткивања надимака или хостова"
diff --git a/po/tr.po b/po/tr.po
index 6adb64123..aa72486b0 100644
--- a/po/tr.po
+++ b/po/tr.po
@@ -20,7 +20,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
-"POT-Creation-Date: 2024-05-13 22:49+0200\n"
+"POT-Creation-Date: 2024-05-13 22:50+0200\n"
"PO-Revision-Date: 2024-04-07 14:50+0200\n"
"Last-Translator: Emir SARI <emir_sari@icloud.com>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@@ -10678,7 +10678,9 @@ msgid "unban nicks or hosts"
msgstr "takma adların veya makinelerin yasağını kaldır"
#. TRANSLATORS: only text between angle brackets (eg: "<name>") must be translated
-msgid "[<channel>] <nick>|<number> [<nick>|<number>...]"
+#, fuzzy
+#| msgid "[<channel>] <nick>|<number> [<nick>|<number>...]"
+msgid "[<channel>] <nick>|<number>|<n1>-<n2> [<nick>|<number>|<n1>-<n2>...]"
msgstr "[<kanal>] <takmaad>|<sayı> [<takmaad>|<sayı>...]"
#, fuzzy
@@ -10692,6 +10694,14 @@ msgstr ""
"takmaad: takma ad veya makine\n"
" sayı: yasak numarası (/ban komutunda görüntülendiği üzere)"
+#, fuzzy
+#| msgid "IRC servers (internal names)"
+msgid "n1: interval start number"
+msgstr "IRC sunucuları (dahili adlar)"
+
+msgid "n2: interval end number"
+msgstr ""
+
msgid "unquiet nicks or hosts"
msgstr "takma adların veya makinelerin sessiz durumunu kaldır"
diff --git a/po/weechat.pot b/po/weechat.pot
index 5cd13814c..e6a342bc8 100644
--- a/po/weechat.pot
+++ b/po/weechat.pot
@@ -21,7 +21,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
-"POT-Creation-Date: 2024-05-13 22:49+0200\n"
+"POT-Creation-Date: 2024-05-13 22:50+0200\n"
"PO-Revision-Date: 2014-08-16 10:27+0200\n"
"Last-Translator: Sébastien Helleu <flashcode@flashtux.org>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@@ -8833,12 +8833,18 @@ msgid "unban nicks or hosts"
msgstr ""
#. TRANSLATORS: only text between angle brackets (eg: "<name>") must be translated
-msgid "[<channel>] <nick>|<number> [<nick>|<number>...]"
+msgid "[<channel>] <nick>|<number>|<n1>-<n2> [<nick>|<number>|<n1>-<n2>...]"
msgstr ""
msgid "number: ban number (as displayed by command /ban)"
msgstr ""
+msgid "n1: interval start number"
+msgstr ""
+
+msgid "n2: interval end number"
+msgstr ""
+
msgid "unquiet nicks or hosts"
msgstr ""
diff --git a/src/plugins/irc/irc-command.c b/src/plugins/irc/irc-command.c
index 7a6fbcf5b..3b994ba98 100644
--- a/src/plugins/irc/irc-command.c
+++ b/src/plugins/irc/irc-command.c
@@ -221,6 +221,77 @@ irc_command_mode_nicks (struct t_irc_server *server,
}
/*
+ * Returns arguments with ranges of numbers converted to individual numbers.
+ * Arguments that are not range (format: "N1-N2") are kept as-is.
+ *
+ * For example: ["2" "5-8" "abc"] -> ["2" "5" "6" "7" "8" "abc"]
+ */
+
+char **
+irc_command_mode_masks_convert_ranges (char **argv, int arg_start)
+{
+ char **str_masks, **masks, *error1, *error2, *pos, str_number[32];
+ int i, length, added;
+ long j, number1, number2;
+
+ if (!argv || (arg_start < 0))
+ return NULL;
+
+ str_masks = weechat_string_dyn_alloc (128);
+ if (!str_masks)
+ return NULL;
+
+ for (i = arg_start; argv[i]; i++)
+ {
+ added = 0;
+
+ length = strlen (argv[i]);
+ pos = strchr (argv[i], '-');
+ if ((length > 2)
+ && pos
+ && (argv[i][0] != '-')
+ && (argv[i][length - 1] != '-'))
+ {
+ pos[0] = '\0';
+ error1 = NULL;
+ number1 = strtol (argv[i], &error1, 10);
+ error2 = NULL;
+ number2 = strtol (pos + 1, &error2, 10);
+ if (error1 && !error1[0]
+ && error2 && !error2[0]
+ && (number1 > 0) && (number1 < 128)
+ && (number2 > 0) && (number2 < 128)
+ && (number1 < number2))
+ {
+ for (j = number1; j <= number2; j++)
+ {
+ if (*str_masks[0])
+ weechat_string_dyn_concat (str_masks, " ", -1);
+ snprintf (str_number, sizeof (str_number),
+ "%ld", j);
+ weechat_string_dyn_concat (str_masks, str_number, -1);
+ }
+ added = 1;
+ }
+ pos[0] = '-';
+ }
+
+ if (!added)
+ {
+ if (*str_masks[0])
+ weechat_string_dyn_concat (str_masks, " ", -1);
+ weechat_string_dyn_concat (str_masks, argv[i], -1);
+ }
+ }
+
+ masks = weechat_string_split (*str_masks, " ", NULL, 0, 0, NULL);
+
+ weechat_string_dyn_free (str_masks, 1);
+
+ return masks;
+}
+
+/*
* Sends mode change for many masks on a channel.
*
* Argument "set" is "+" or "-", mode can be "b", "q", or any other mode
@@ -6369,7 +6440,7 @@ IRC_COMMAND_CALLBACK(trace)
IRC_COMMAND_CALLBACK(unban)
{
- char *pos_channel;
+ char *pos_channel, **masks;
int pos_args;
IRC_BUFFER_GET_SERVER_CHANNEL(buffer);
@@ -6409,9 +6480,14 @@ IRC_COMMAND_CALLBACK(unban)
}
}
- irc_command_mode_masks (ptr_server, pos_channel,
- "unban", "-", "b",
- argv, pos_args);
+ masks = irc_command_mode_masks_convert_ranges (argv, pos_args);
+ if (masks)
+ {
+ irc_command_mode_masks (ptr_server, pos_channel,
+ "unban", "-", "b",
+ masks, 0);
+ weechat_string_free_split (masks);
+ }
return WEECHAT_RC_OK;
}
@@ -6422,7 +6498,7 @@ IRC_COMMAND_CALLBACK(unban)
IRC_COMMAND_CALLBACK(unquiet)
{
- char *pos_channel;
+ char *pos_channel, **masks;
int pos_args;
IRC_BUFFER_GET_SERVER_CHANNEL(buffer);
@@ -6464,9 +6540,14 @@ IRC_COMMAND_CALLBACK(unquiet)
if (argv[pos_args])
{
- irc_command_mode_masks (ptr_server, pos_channel,
- "unquiet", "-", "q",
- argv, pos_args);
+ masks = irc_command_mode_masks_convert_ranges (argv, pos_args);
+ if (masks)
+ {
+ irc_command_mode_masks (ptr_server, pos_channel,
+ "unquiet", "-", "q",
+ masks, 0);
+ weechat_string_free_split (masks);
+ }
}
else
{
@@ -7923,22 +8004,26 @@ irc_command_init ()
"unban",
N_("unban nicks or hosts"),
/* TRANSLATORS: only text between angle brackets (eg: "<name>") must be translated */
- N_("[<channel>] <nick>|<number> [<nick>|<number>...]"),
+ N_("[<channel>] <nick>|<number>|<n1>-<n2> [<nick>|<number>|<n1>-<n2>...]"),
WEECHAT_CMD_ARGS_DESC(
N_("channel: channel name"),
N_("nick: nick or host"),
- N_("number: ban number (as displayed by command /ban)")),
+ N_("number: ban number (as displayed by command /ban)"),
+ N_("n1: interval start number"),
+ N_("n2: interval end number")),
"%(irc_modelist_masks:b)|%(irc_modelist_numbers:b)",
&irc_command_unban, NULL, NULL);
weechat_hook_command (
"unquiet",
N_("unquiet nicks or hosts"),
/* TRANSLATORS: only text between angle brackets (eg: "<name>") must be translated */
- N_("[<channel>] <nick>|<number> [<nick>|<number>...]"),
+ N_("[<channel>] <nick>|<number>|<n1>-<n2> [<nick>|<number>|<n1>-<n2>...]"),
WEECHAT_CMD_ARGS_DESC(
N_("channel: channel name"),
N_("nick: nick or host"),
- N_("number: quiet number (as displayed by command /quiet)")),
+ N_("number: quiet number (as displayed by command /quiet)"),
+ N_("n1: interval start number"),
+ N_("n2: interval end number")),
"%(irc_modelist_masks:q)|%(irc_modelist_numbers:q)",
&irc_command_unquiet, NULL, NULL);
weechat_hook_command (
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index 52702d9c4..58c74e966 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -126,6 +126,7 @@ if(ENABLE_IRC)
unit/plugins/irc/test-irc-buffer.cpp
unit/plugins/irc/test-irc-channel.cpp
unit/plugins/irc/test-irc-color.cpp
+ unit/plugins/irc/test-irc-command.cpp
unit/plugins/irc/test-irc-config.cpp
unit/plugins/irc/test-irc-ctcp.cpp
unit/plugins/irc/test-irc-info.cpp
diff --git a/tests/unit/plugins/irc/test-irc-command.cpp b/tests/unit/plugins/irc/test-irc-command.cpp
new file mode 100644
index 000000000..ec9814e97
--- /dev/null
+++ b/tests/unit/plugins/irc/test-irc-command.cpp
@@ -0,0 +1,1146 @@
+/*
+ * test-irc-command.cpp - test IRC commands
+ *
+ * Copyright (C) 2024 Sébastien Helleu <flashcode@flashtux.org>
+ *
+ * This file is part of WeeChat, the extensible chat client.
+ *
+ * WeeChat is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * WeeChat is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with WeeChat. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "CppUTest/TestHarness.h"
+
+extern "C"
+{
+#include <string.h>
+#include "src/core/core-string.h"
+#include "src/plugins/irc/irc-command.h"
+
+extern char **irc_command_mode_masks_convert_ranges (char **argv, int arg_start);
+}
+
+TEST_GROUP(IrcCommand)
+{
+};
+
+/*
+ * Tests functions:
+ * irc_command_mode_nicks
+ */
+
+TEST(IrcCommand, ModeNicks)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_mode_masks_convert_ranges
+ */
+
+TEST(IrcCommand, ModeMasksConvertRanges)
+{
+ char **args, **masks;
+
+ POINTERS_EQUAL(NULL, irc_command_mode_masks_convert_ranges (NULL, 0));
+
+ args = string_split ("test", " ", NULL, 0, 0, NULL);
+ POINTERS_EQUAL(NULL, irc_command_mode_masks_convert_ranges (args, -1));
+ masks = irc_command_mode_masks_convert_ranges (args, 0);
+ CHECK(masks);
+ STRCMP_EQUAL("test", masks[0]);
+ POINTERS_EQUAL(NULL, masks[1]);
+ string_free_split (masks);
+ string_free_split (args);
+
+ args = string_split ("3 test 6-9 5-1 -2 64-", " ", NULL, 0, 0, NULL);
+ masks = irc_command_mode_masks_convert_ranges (args, 0);
+ CHECK(masks);
+ STRCMP_EQUAL("3", masks[0]);
+ STRCMP_EQUAL("test", masks[1]);
+ STRCMP_EQUAL("6", masks[2]);
+ STRCMP_EQUAL("7", masks[3]);
+ STRCMP_EQUAL("8", masks[4]);
+ STRCMP_EQUAL("9", masks[5]);
+ STRCMP_EQUAL("5-1", masks[6]);
+ STRCMP_EQUAL("-2", masks[7]);
+ STRCMP_EQUAL("64-", masks[8]);
+ POINTERS_EQUAL(NULL, masks[9]);
+ string_free_split (masks);
+ string_free_split (args);
+
+ args = string_split ("4-10", " ", NULL, 0, 0, NULL);
+ masks = irc_command_mode_masks_convert_ranges (args, 0);
+ CHECK(masks);
+ STRCMP_EQUAL("4", masks[0]);
+ STRCMP_EQUAL("5", masks[1]);
+ STRCMP_EQUAL("6", masks[2]);
+ STRCMP_EQUAL("7", masks[3]);
+ STRCMP_EQUAL("8", masks[4]);
+ STRCMP_EQUAL("9", masks[5]);
+ STRCMP_EQUAL("10", masks[6]);
+ POINTERS_EQUAL(NULL, masks[7]);
+ string_free_split (masks);
+ string_free_split (args);
+}
+
+/*
+ * Tests functions:
+ * irc_command_mode_masks
+ */
+
+TEST(IrcCommand, ModeMasks)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_me_channel_message
+ */
+
+TEST(IrcCommand, MeChannelMessage)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_me_channel
+ */
+
+TEST(IrcCommand, MeChannel)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_me_all_channels
+ */
+
+TEST(IrcCommand, MeAllChannels)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_action
+ */
+
+TEST(IrcCommand, Action)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_admin
+ */
+
+TEST(IrcCommand, Admin)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_exec_buffers
+ */
+
+TEST(IrcCommand, ExecBuffers)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_exec_all_channels
+ */
+
+TEST(IrcCommand, ExecAllChannels)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_allchan
+ */
+
+TEST(IrcCommand, Allchan)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_allpv
+ */
+
+TEST(IrcCommand, Allpv)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_exec_all_servers
+ */
+
+TEST(IrcCommand, ExecAllServers)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_allserv
+ */
+
+TEST(IrcCommand, Allserv)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_auth
+ */
+
+TEST(IrcCommand, Auth)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_autojoin
+ */
+
+TEST(IrcCommand, Autojoin)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_display_away
+ */
+
+TEST(IrcCommand, DisplayAway)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_away_server
+ */
+
+TEST(IrcCommand, AwayServer)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_away
+ */
+
+TEST(IrcCommand, Away)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_run_away
+ */
+
+TEST(IrcCommand, RunAway)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_send_ban
+ */
+
+TEST(IrcCommand, SendBan)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_ban
+ */
+
+TEST(IrcCommand, Ban)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_cap
+ */
+
+TEST(IrcCommand, Cap)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_connect_one_server
+ */
+
+TEST(IrcCommand, ConnectOneServer)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_connect
+ */
+
+TEST(IrcCommand, Connect)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_ctcp
+ */
+
+TEST(IrcCommand, Ctcp)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_cycle
+ */
+
+TEST(IrcCommand, Cycle)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_dcc
+ */
+
+TEST(IrcCommand, Dcc)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_dehalfop
+ */
+
+TEST(IrcCommand, Dehalfop)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_deop
+ */
+
+TEST(IrcCommand, Deop)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_devoice
+ */
+
+TEST(IrcCommand, Devoice)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_die
+ */
+
+TEST(IrcCommand, Die)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_quit_server
+ */
+
+TEST(IrcCommand, QuitServer)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_disconnect_one_server
+ */
+
+TEST(IrcCommand, DisconnectOneServer)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_disconnect
+ */
+
+TEST(IrcCommand, Disconnect)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_halfop
+ */
+
+TEST(IrcCommand, Halfop)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_ignore_display
+ */
+
+TEST(IrcCommand, IgnoreDisplay)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_ignore
+ */
+
+TEST(IrcCommand, Ignore)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_info
+ */
+
+TEST(IrcCommand, Info)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_invite
+ */
+
+TEST(IrcCommand, Invite)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_ison
+ */
+
+TEST(IrcCommand, Ison)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_join_server
+ */
+
+TEST(IrcCommand, JoinServer)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_join
+ */
+
+TEST(IrcCommand, Join)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_kick_channel
+ */
+
+TEST(IrcCommand, KickChannel)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_kick
+ */
+
+TEST(IrcCommand, Kick)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_kickban
+ */
+
+TEST(IrcCommand, Kickban)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_kill
+ */
+
+TEST(IrcCommand, Kill)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_knock
+ */
+
+TEST(IrcCommand, Knock)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_links
+ */
+
+TEST(IrcCommand, Links)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_list_get_int_arg
+ */
+
+TEST(IrcCommand, ListGetIntArg)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_list
+ */
+
+TEST(IrcCommand, List)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_lusers
+ */
+
+TEST(IrcCommand, Lusers)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_map
+ */
+
+TEST(IrcCommand, Map)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_me
+ */
+
+TEST(IrcCommand, Me)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_mode_server
+ */
+
+TEST(IrcCommand, ModeServer)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_mode
+ */
+
+TEST(IrcCommand, Mode)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_motd
+ */
+
+TEST(IrcCommand, Motd)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_msg
+ */
+
+TEST(IrcCommand, Msg)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_names
+ */
+
+TEST(IrcCommand, Names)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_nick_server
+ */
+
+TEST(IrcCommand, NickServer)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_nick
+ */
+
+TEST(IrcCommand, Nick)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_notice
+ */
+
+TEST(IrcCommand, Notice)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_notify
+ */
+
+TEST(IrcCommand, Notify)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_op
+ */
+
+TEST(IrcCommand, Op)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_oper
+ */
+
+TEST(IrcCommand, Oper)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_part_channel
+ */
+
+TEST(IrcCommand, PartChannel)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_part
+ */
+
+TEST(IrcCommand, Part)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_ping
+ */
+
+TEST(IrcCommand, Ping)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_pong
+ */
+
+TEST(IrcCommand, Pong)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_query
+ */
+
+TEST(IrcCommand, Query)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_quiet
+ */
+
+TEST(IrcCommand, Quiet)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_quote
+ */
+
+TEST(IrcCommand, Quote)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_reconnect_one_server
+ */
+
+TEST(IrcCommand, ReconnectOneServer)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_reconnect
+ */
+
+TEST(IrcCommand, Reconnect)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_rehash
+ */
+
+TEST(IrcCommand, Rehash)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_remove
+ */
+
+TEST(IrcCommand, Remove)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_restart
+ */
+
+TEST(IrcCommand, Restart)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_rules
+ */
+
+TEST(IrcCommand, Rules)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_sajoin
+ */
+
+TEST(IrcCommand, Sajoin)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_samode
+ */
+
+TEST(IrcCommand, Samode)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_sanick
+ */
+
+TEST(IrcCommand, Sanick)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_sapart
+ */
+
+TEST(IrcCommand, Sapart)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_saquit
+ */
+
+TEST(IrcCommand, Saquit)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_display_server
+ */
+
+TEST(IrcCommand, DisplayServer)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_server
+ */
+
+TEST(IrcCommand, Server)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_service
+ */
+
+TEST(IrcCommand, Service)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_servlist
+ */
+
+TEST(IrcCommand, Servlist)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_squery
+ */
+
+TEST(IrcCommand, Squery)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_setname
+ */
+
+TEST(IrcCommand, Setname)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_squit
+ */
+
+TEST(IrcCommand, Squit)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_stats
+ */
+
+TEST(IrcCommand, Stats)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_summon
+ */
+
+TEST(IrcCommand, Summon)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_time
+ */
+
+TEST(IrcCommand, Time)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_topic
+ */
+
+TEST(IrcCommand, Topic)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_trace
+ */
+
+TEST(IrcCommand, Trace)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_unban
+ */
+
+TEST(IrcCommand, Unban)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_unquiet
+ */
+
+TEST(IrcCommand, Unquiet)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_userhost
+ */
+
+TEST(IrcCommand, Userhost)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_users
+ */
+
+TEST(IrcCommand, Users)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_version
+ */
+
+TEST(IrcCommand, Version)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_voice
+ */
+
+TEST(IrcCommand, Voice)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_wallchops
+ */
+
+TEST(IrcCommand, Wallchops)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_wallops
+ */
+
+TEST(IrcCommand, Wallops)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_who
+ */
+
+TEST(IrcCommand, Who)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_whois
+ */
+
+TEST(IrcCommand, Whois)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_whowas
+ */
+
+TEST(IrcCommand, Whowas)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
+ * irc_command_init
+ */
+
+TEST(IrcCommand, Init)
+{
+ /* TODO: write tests */
+}