Merge pull request #1653 from Zarthus/remove_q

modules: Remove Q
This commit is contained in:
Alexey Sokolov
2019-05-30 01:08:21 +01:00
committed by GitHub
10 changed files with 14 additions and 3080 deletions
-296
View File
@@ -1,296 +0,0 @@
msgid ""
msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.com\n"
"X-Crowdin-Project: znc-bouncer\n"
"X-Crowdin-Language: de\n"
"X-Crowdin-File: /master/modules/po/q.pot\n"
"Project-Id-Version: znc-bouncer\n"
"Last-Translator: DarthGandalf <alexey+crowdin@asokolov.org>\n"
"Language-Team: German\n"
"Language: de_DE\n"
#: modules/po/../data/q/tmpl/index.tmpl:11
msgid "Username:"
msgstr ""
#: modules/po/../data/q/tmpl/index.tmpl:13
msgid "Please enter a username."
msgstr ""
#: modules/po/../data/q/tmpl/index.tmpl:16
msgid "Password:"
msgstr ""
#: modules/po/../data/q/tmpl/index.tmpl:18
msgid "Please enter a password."
msgstr ""
#: modules/po/../data/q/tmpl/index.tmpl:26
msgid "Options"
msgstr ""
#: modules/po/../data/q/tmpl/index.tmpl:42
msgid "Save"
msgstr ""
#: q.cpp:74
msgid ""
"Notice: Your host will be cloaked the next time you reconnect to IRC. If you "
"want to cloak your host now, /msg *q Cloak. You can set your preference "
"with /msg *q Set UseCloakedHost true/false."
msgstr ""
#: q.cpp:111
msgid "The following commands are available:"
msgstr ""
#: q.cpp:113 q.cpp:116 q.cpp:121 q.cpp:126 q.cpp:130 q.cpp:135 q.cpp:140
msgid "Command"
msgstr ""
#: q.cpp:114 q.cpp:117 q.cpp:123 q.cpp:127 q.cpp:132 q.cpp:136 q.cpp:141
#: q.cpp:150 q.cpp:154 q.cpp:158 q.cpp:162 q.cpp:168 q.cpp:174 q.cpp:180
#: q.cpp:186
msgid "Description"
msgstr ""
#: q.cpp:116
msgid "Auth [<username> <password>]"
msgstr ""
#: q.cpp:118
msgid "Tries to authenticate you with Q. Both parameters are optional."
msgstr ""
#: q.cpp:124
msgid "Tries to set usermode +x to hide your real hostname."
msgstr ""
#: q.cpp:128
msgid "Prints the current status of the module."
msgstr ""
#: q.cpp:133
msgid "Re-requests the current user information from Q."
msgstr ""
#: q.cpp:135
msgid "Set <setting> <value>"
msgstr ""
#: q.cpp:137
msgid "Changes the value of the given setting. See the list of settings below."
msgstr ""
#: q.cpp:142
msgid "Prints out the current configuration. See the list of settings below."
msgstr ""
#: q.cpp:146
msgid "The following settings are available:"
msgstr ""
#: q.cpp:148 q.cpp:152 q.cpp:156 q.cpp:160 q.cpp:166 q.cpp:172 q.cpp:178
#: q.cpp:183 q.cpp:227 q.cpp:230 q.cpp:233 q.cpp:236 q.cpp:239 q.cpp:242
#: q.cpp:245 q.cpp:248
msgid "Setting"
msgstr ""
#: q.cpp:149 q.cpp:153 q.cpp:157 q.cpp:161 q.cpp:167 q.cpp:173 q.cpp:179
#: q.cpp:184
msgid "Type"
msgstr ""
#: q.cpp:153 q.cpp:157
msgid "String"
msgstr ""
#: q.cpp:154
msgid "Your Q username."
msgstr ""
#: q.cpp:158
msgid "Your Q password."
msgstr ""
#: q.cpp:161 q.cpp:167 q.cpp:173 q.cpp:179 q.cpp:184
msgid "Boolean"
msgstr ""
#: q.cpp:163 q.cpp:373
msgid "Whether to cloak your hostname (+x) automatically on connect."
msgstr ""
#: q.cpp:169 q.cpp:381
msgid ""
"Whether to use the CHALLENGEAUTH mechanism to avoid sending passwords in "
"cleartext."
msgstr ""
#: q.cpp:175 q.cpp:389
msgid "Whether to request voice/op from Q on join/devoice/deop."
msgstr ""
#: q.cpp:181 q.cpp:395
msgid "Whether to join channels when Q invites you."
msgstr ""
#: q.cpp:187 q.cpp:402
msgid "Whether to delay joining channels until after you are cloaked."
msgstr ""
#: q.cpp:192
msgid "This module takes 2 optional parameters: <username> <password>"
msgstr ""
#: q.cpp:194
msgid "Module settings are stored between restarts."
msgstr ""
#: q.cpp:200
msgid "Syntax: Set <setting> <value>"
msgstr ""
#: q.cpp:203
msgid "Username set"
msgstr ""
#: q.cpp:206
msgid "Password set"
msgstr ""
#: q.cpp:209
msgid "UseCloakedHost set"
msgstr ""
#: q.cpp:212
msgid "UseChallenge set"
msgstr ""
#: q.cpp:215
msgid "RequestPerms set"
msgstr ""
#: q.cpp:218
msgid "JoinOnInvite set"
msgstr ""
#: q.cpp:221
msgid "JoinAfterCloaked set"
msgstr ""
#: q.cpp:223
msgid "Unknown setting: {1}"
msgstr ""
#: q.cpp:228 q.cpp:231 q.cpp:234 q.cpp:237 q.cpp:240 q.cpp:243 q.cpp:246
#: q.cpp:249
msgid "Value"
msgstr ""
#: q.cpp:253
msgid "Connected: yes"
msgstr ""
#: q.cpp:254
msgid "Connected: no"
msgstr ""
#: q.cpp:255
msgid "Cloacked: yes"
msgstr ""
#: q.cpp:255
msgid "Cloacked: no"
msgstr ""
#: q.cpp:256
msgid "Authenticated: yes"
msgstr ""
#: q.cpp:257
msgid "Authenticated: no"
msgstr ""
#: q.cpp:262
msgid "Error: You are not connected to IRC."
msgstr ""
#: q.cpp:270
msgid "Error: You are already cloaked!"
msgstr ""
#: q.cpp:276
msgid "Error: You are already authed!"
msgstr ""
#: q.cpp:280
msgid "Update requested."
msgstr ""
#: q.cpp:283
msgid "Unknown command. Try 'help'."
msgstr ""
#: q.cpp:293
msgid "Cloak successful: Your hostname is now cloaked."
msgstr ""
#: q.cpp:408
msgid "Changes have been saved!"
msgstr ""
#: q.cpp:435
msgid "Cloak: Trying to cloak your hostname, setting +x..."
msgstr ""
#: q.cpp:452
msgid ""
"You have to set a username and password to use this module! See 'help' for "
"details."
msgstr ""
#: q.cpp:458
msgid "Auth: Requesting CHALLENGE..."
msgstr ""
#: q.cpp:462
msgid "Auth: Sending AUTH request..."
msgstr ""
#: q.cpp:479
msgid "Auth: Received challenge, sending CHALLENGEAUTH request..."
msgstr ""
#: q.cpp:521
msgid "Authentication failed: {1}"
msgstr ""
#: q.cpp:525
msgid "Authentication successful: {1}"
msgstr ""
#: q.cpp:539
msgid ""
"Auth failed: Q does not support HMAC-SHA-256 for CHALLENGEAUTH, falling back "
"to standard AUTH."
msgstr ""
#: q.cpp:566
msgid "RequestPerms: Requesting op on {1}"
msgstr ""
#: q.cpp:579
msgid "RequestPerms: Requesting voice on {1}"
msgstr ""
#: q.cpp:686
msgid "Please provide your username and password for Q."
msgstr ""
#: q.cpp:689
msgid "Auths you with QuakeNet's Q bot."
msgstr ""
-305
View File
@@ -1,305 +0,0 @@
msgid ""
msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.com\n"
"X-Crowdin-Project: znc-bouncer\n"
"X-Crowdin-Language: es-ES\n"
"X-Crowdin-File: /master/modules/po/q.pot\n"
"Project-Id-Version: znc-bouncer\n"
"Last-Translator: DarthGandalf <alexey+crowdin@asokolov.org>\n"
"Language-Team: Spanish\n"
"Language: es_ES\n"
#: modules/po/../data/q/tmpl/index.tmpl:11
msgid "Username:"
msgstr "Usuario:"
#: modules/po/../data/q/tmpl/index.tmpl:13
msgid "Please enter a username."
msgstr "Introduce un nombre de usuario."
#: modules/po/../data/q/tmpl/index.tmpl:16
msgid "Password:"
msgstr "Contraseña:"
#: modules/po/../data/q/tmpl/index.tmpl:18
msgid "Please enter a password."
msgstr "Introduce una contraseña."
#: modules/po/../data/q/tmpl/index.tmpl:26
msgid "Options"
msgstr "Opciones"
#: modules/po/../data/q/tmpl/index.tmpl:42
msgid "Save"
msgstr "Guardar"
#: q.cpp:74
msgid ""
"Notice: Your host will be cloaked the next time you reconnect to IRC. If you "
"want to cloak your host now, /msg *q Cloak. You can set your preference "
"with /msg *q Set UseCloakedHost true/false."
msgstr ""
"Aviso: tu host será enmascarado la próxima vez que conectes al IRC. Si "
"quieres enmascarar tu host ahora, /msg *q Cloak. Puedes configurar tu "
"preferencia con /msg *q SET UseCloakedHost true/false."
#: q.cpp:111
msgid "The following commands are available:"
msgstr "Los siguientes comandos están disponibles:"
#: q.cpp:113 q.cpp:116 q.cpp:121 q.cpp:126 q.cpp:130 q.cpp:135 q.cpp:140
msgid "Command"
msgstr "Comando"
#: q.cpp:114 q.cpp:117 q.cpp:123 q.cpp:127 q.cpp:132 q.cpp:136 q.cpp:141
#: q.cpp:150 q.cpp:154 q.cpp:158 q.cpp:162 q.cpp:168 q.cpp:174 q.cpp:180
#: q.cpp:186
msgid "Description"
msgstr "Descripción"
#: q.cpp:116
msgid "Auth [<username> <password>]"
msgstr "Auth [<usuario> <contraseña>]"
#: q.cpp:118
msgid "Tries to authenticate you with Q. Both parameters are optional."
msgstr "Intenta autenticarte con Q. Ambos parámetros son opcionales."
#: q.cpp:124
msgid "Tries to set usermode +x to hide your real hostname."
msgstr "Intenta ponerte el modo de usuario +x para ocultar tu host real."
#: q.cpp:128
msgid "Prints the current status of the module."
msgstr "Muestra el estado actual del módulo."
#: q.cpp:133
msgid "Re-requests the current user information from Q."
msgstr "Re-solicita la información actual del usuario desde Q."
#: q.cpp:135
msgid "Set <setting> <value>"
msgstr "Set <ajuste> <valor>"
#: q.cpp:137
msgid "Changes the value of the given setting. See the list of settings below."
msgstr "Cambia el valor del ajuste. Consulta la lista de ajustes debajo."
#: q.cpp:142
msgid "Prints out the current configuration. See the list of settings below."
msgstr "Muestra la configuración actual. Consulta la lista de ajustes debajo."
#: q.cpp:146
msgid "The following settings are available:"
msgstr "Las siguientes opciones están disponibles:"
#: q.cpp:148 q.cpp:152 q.cpp:156 q.cpp:160 q.cpp:166 q.cpp:172 q.cpp:178
#: q.cpp:183 q.cpp:227 q.cpp:230 q.cpp:233 q.cpp:236 q.cpp:239 q.cpp:242
#: q.cpp:245 q.cpp:248
msgid "Setting"
msgstr "Ajuste"
#: q.cpp:149 q.cpp:153 q.cpp:157 q.cpp:161 q.cpp:167 q.cpp:173 q.cpp:179
#: q.cpp:184
msgid "Type"
msgstr "Tipo"
#: q.cpp:153 q.cpp:157
msgid "String"
msgstr "Cadena"
#: q.cpp:154
msgid "Your Q username."
msgstr "Tu usuario de Q."
#: q.cpp:158
msgid "Your Q password."
msgstr "Tu contraseña de Q."
#: q.cpp:161 q.cpp:167 q.cpp:173 q.cpp:179 q.cpp:184
msgid "Boolean"
msgstr "Booleano"
#: q.cpp:163 q.cpp:373
msgid "Whether to cloak your hostname (+x) automatically on connect."
msgstr "Intentar ocultar tu host (+x) al conectar."
#: q.cpp:169 q.cpp:381
msgid ""
"Whether to use the CHALLENGEAUTH mechanism to avoid sending passwords in "
"cleartext."
msgstr ""
"Intentar usar el mecanismo CHALLENGEAUTH para evitar enviar la contraseña en "
"texto plano."
#: q.cpp:175 q.cpp:389
msgid "Whether to request voice/op from Q on join/devoice/deop."
msgstr "Pedir voz/op a Q al entrar/devoice/deop a/de un canal."
#: q.cpp:181 q.cpp:395
msgid "Whether to join channels when Q invites you."
msgstr "Entrar a los canales cuando Q te invite."
#: q.cpp:187 q.cpp:402
msgid "Whether to delay joining channels until after you are cloaked."
msgstr "Retrasar la entrada a canales hasta que tu host haya sido ocultado."
#: q.cpp:192
msgid "This module takes 2 optional parameters: <username> <password>"
msgstr "Este módulo tiene 2 parámetros opcionales: <usuario> <contraseña>"
#: q.cpp:194
msgid "Module settings are stored between restarts."
msgstr "Los ajustes del módulo se guardan entre reinicios."
#: q.cpp:200
msgid "Syntax: Set <setting> <value>"
msgstr "Sintaxis: Set <ajuste> <valor>"
#: q.cpp:203
msgid "Username set"
msgstr "Usuario guardado"
#: q.cpp:206
msgid "Password set"
msgstr "Contraseña guardada"
#: q.cpp:209
msgid "UseCloakedHost set"
msgstr "UseCloakedHost guardado"
#: q.cpp:212
msgid "UseChallenge set"
msgstr "UseChallenge guardado"
#: q.cpp:215
msgid "RequestPerms set"
msgstr "RequestPerms guardado"
#: q.cpp:218
msgid "JoinOnInvite set"
msgstr "JoinOnInvite guardado"
#: q.cpp:221
msgid "JoinAfterCloaked set"
msgstr "JoinAfterCloaked guardado"
#: q.cpp:223
msgid "Unknown setting: {1}"
msgstr "Opción desconocida: {1}"
#: q.cpp:228 q.cpp:231 q.cpp:234 q.cpp:237 q.cpp:240 q.cpp:243 q.cpp:246
#: q.cpp:249
msgid "Value"
msgstr "Valor"
#: q.cpp:253
msgid "Connected: yes"
msgstr "Conectado: sí"
#: q.cpp:254
msgid "Connected: no"
msgstr "Conectado: no"
#: q.cpp:255
msgid "Cloacked: yes"
msgstr "Enmascarado: sí"
#: q.cpp:255
msgid "Cloacked: no"
msgstr "Enmascarado: no"
#: q.cpp:256
msgid "Authenticated: yes"
msgstr "Autenticado: sí"
#: q.cpp:257
msgid "Authenticated: no"
msgstr "Autenticado: no"
#: q.cpp:262
msgid "Error: You are not connected to IRC."
msgstr "Error: no estás conectado al IRC."
#: q.cpp:270
msgid "Error: You are already cloaked!"
msgstr "Error: ya estás enmascarado!"
#: q.cpp:276
msgid "Error: You are already authed!"
msgstr "Error: ya estás autenticado!"
#: q.cpp:280
msgid "Update requested."
msgstr "Actualización solicitada."
#: q.cpp:283
msgid "Unknown command. Try 'help'."
msgstr "Comando desconocido. Escribe 'Help'."
#: q.cpp:293
msgid "Cloak successful: Your hostname is now cloaked."
msgstr "Ocultación correcta: ahora tu host está enmascarado."
#: q.cpp:408
msgid "Changes have been saved!"
msgstr "Tus cambios han sido guardados"
#: q.cpp:435
msgid "Cloak: Trying to cloak your hostname, setting +x..."
msgstr "Cloak: intentando ocultar tu host, poniendo +x..."
#: q.cpp:452
msgid ""
"You have to set a username and password to use this module! See 'help' for "
"details."
msgstr ""
"Tienes que configurar un nombre de usuario y una contraseña para usar este "
"módulo. Escribe 'help' para ver más detalles."
#: q.cpp:458
msgid "Auth: Requesting CHALLENGE..."
msgstr "Auth: solicitando CHALLENGE..."
#: q.cpp:462
msgid "Auth: Sending AUTH request..."
msgstr "Auth: enviando respuesta AUTH..."
#: q.cpp:479
msgid "Auth: Received challenge, sending CHALLENGEAUTH request..."
msgstr "Auth: reto recibido, enviando petición CHALLENGEAUTH..."
#: q.cpp:521
msgid "Authentication failed: {1}"
msgstr "Fallo de autenticación: {1}"
#: q.cpp:525
msgid "Authentication successful: {1}"
msgstr "Autenticación correcta: {1}"
#: q.cpp:539
msgid ""
"Auth failed: Q does not support HMAC-SHA-256 for CHALLENGEAUTH, falling back "
"to standard AUTH."
msgstr ""
"Fallo en autenticación: Q no soporta HMAC-SHA-256 en CHALLENGEAUTH, "
"intentando autenticación estándar."
#: q.cpp:566
msgid "RequestPerms: Requesting op on {1}"
msgstr "RequestPerms: pidiendo op en {1}"
#: q.cpp:579
msgid "RequestPerms: Requesting voice on {1}"
msgstr "RequestPerms: pidiendo voz en {1}"
#: q.cpp:686
msgid "Please provide your username and password for Q."
msgstr "Introduce tu nombre de usuario y contraseña de Q."
#: q.cpp:689
msgid "Auths you with QuakeNet's Q bot."
msgstr "Te identifica con el bot Q de Quakenet."
-296
View File
@@ -1,296 +0,0 @@
msgid ""
msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
"X-Generator: crowdin.com\n"
"X-Crowdin-Project: znc-bouncer\n"
"X-Crowdin-Language: fr\n"
"X-Crowdin-File: /master/modules/po/q.pot\n"
"Project-Id-Version: znc-bouncer\n"
"Last-Translator: DarthGandalf <alexey+crowdin@asokolov.org>\n"
"Language-Team: French\n"
"Language: fr_FR\n"
#: modules/po/../data/q/tmpl/index.tmpl:11
msgid "Username:"
msgstr ""
#: modules/po/../data/q/tmpl/index.tmpl:13
msgid "Please enter a username."
msgstr ""
#: modules/po/../data/q/tmpl/index.tmpl:16
msgid "Password:"
msgstr ""
#: modules/po/../data/q/tmpl/index.tmpl:18
msgid "Please enter a password."
msgstr ""
#: modules/po/../data/q/tmpl/index.tmpl:26
msgid "Options"
msgstr ""
#: modules/po/../data/q/tmpl/index.tmpl:42
msgid "Save"
msgstr ""
#: q.cpp:74
msgid ""
"Notice: Your host will be cloaked the next time you reconnect to IRC. If you "
"want to cloak your host now, /msg *q Cloak. You can set your preference "
"with /msg *q Set UseCloakedHost true/false."
msgstr ""
#: q.cpp:111
msgid "The following commands are available:"
msgstr ""
#: q.cpp:113 q.cpp:116 q.cpp:121 q.cpp:126 q.cpp:130 q.cpp:135 q.cpp:140
msgid "Command"
msgstr ""
#: q.cpp:114 q.cpp:117 q.cpp:123 q.cpp:127 q.cpp:132 q.cpp:136 q.cpp:141
#: q.cpp:150 q.cpp:154 q.cpp:158 q.cpp:162 q.cpp:168 q.cpp:174 q.cpp:180
#: q.cpp:186
msgid "Description"
msgstr ""
#: q.cpp:116
msgid "Auth [<username> <password>]"
msgstr ""
#: q.cpp:118
msgid "Tries to authenticate you with Q. Both parameters are optional."
msgstr ""
#: q.cpp:124
msgid "Tries to set usermode +x to hide your real hostname."
msgstr ""
#: q.cpp:128
msgid "Prints the current status of the module."
msgstr ""
#: q.cpp:133
msgid "Re-requests the current user information from Q."
msgstr ""
#: q.cpp:135
msgid "Set <setting> <value>"
msgstr ""
#: q.cpp:137
msgid "Changes the value of the given setting. See the list of settings below."
msgstr ""
#: q.cpp:142
msgid "Prints out the current configuration. See the list of settings below."
msgstr ""
#: q.cpp:146
msgid "The following settings are available:"
msgstr ""
#: q.cpp:148 q.cpp:152 q.cpp:156 q.cpp:160 q.cpp:166 q.cpp:172 q.cpp:178
#: q.cpp:183 q.cpp:227 q.cpp:230 q.cpp:233 q.cpp:236 q.cpp:239 q.cpp:242
#: q.cpp:245 q.cpp:248
msgid "Setting"
msgstr ""
#: q.cpp:149 q.cpp:153 q.cpp:157 q.cpp:161 q.cpp:167 q.cpp:173 q.cpp:179
#: q.cpp:184
msgid "Type"
msgstr ""
#: q.cpp:153 q.cpp:157
msgid "String"
msgstr ""
#: q.cpp:154
msgid "Your Q username."
msgstr ""
#: q.cpp:158
msgid "Your Q password."
msgstr ""
#: q.cpp:161 q.cpp:167 q.cpp:173 q.cpp:179 q.cpp:184
msgid "Boolean"
msgstr ""
#: q.cpp:163 q.cpp:373
msgid "Whether to cloak your hostname (+x) automatically on connect."
msgstr ""
#: q.cpp:169 q.cpp:381
msgid ""
"Whether to use the CHALLENGEAUTH mechanism to avoid sending passwords in "
"cleartext."
msgstr ""
#: q.cpp:175 q.cpp:389
msgid "Whether to request voice/op from Q on join/devoice/deop."
msgstr ""
#: q.cpp:181 q.cpp:395
msgid "Whether to join channels when Q invites you."
msgstr ""
#: q.cpp:187 q.cpp:402
msgid "Whether to delay joining channels until after you are cloaked."
msgstr ""
#: q.cpp:192
msgid "This module takes 2 optional parameters: <username> <password>"
msgstr ""
#: q.cpp:194
msgid "Module settings are stored between restarts."
msgstr ""
#: q.cpp:200
msgid "Syntax: Set <setting> <value>"
msgstr ""
#: q.cpp:203
msgid "Username set"
msgstr ""
#: q.cpp:206
msgid "Password set"
msgstr ""
#: q.cpp:209
msgid "UseCloakedHost set"
msgstr ""
#: q.cpp:212
msgid "UseChallenge set"
msgstr ""
#: q.cpp:215
msgid "RequestPerms set"
msgstr ""
#: q.cpp:218
msgid "JoinOnInvite set"
msgstr ""
#: q.cpp:221
msgid "JoinAfterCloaked set"
msgstr ""
#: q.cpp:223
msgid "Unknown setting: {1}"
msgstr ""
#: q.cpp:228 q.cpp:231 q.cpp:234 q.cpp:237 q.cpp:240 q.cpp:243 q.cpp:246
#: q.cpp:249
msgid "Value"
msgstr ""
#: q.cpp:253
msgid "Connected: yes"
msgstr ""
#: q.cpp:254
msgid "Connected: no"
msgstr ""
#: q.cpp:255
msgid "Cloacked: yes"
msgstr ""
#: q.cpp:255
msgid "Cloacked: no"
msgstr ""
#: q.cpp:256
msgid "Authenticated: yes"
msgstr ""
#: q.cpp:257
msgid "Authenticated: no"
msgstr ""
#: q.cpp:262
msgid "Error: You are not connected to IRC."
msgstr ""
#: q.cpp:270
msgid "Error: You are already cloaked!"
msgstr ""
#: q.cpp:276
msgid "Error: You are already authed!"
msgstr ""
#: q.cpp:280
msgid "Update requested."
msgstr ""
#: q.cpp:283
msgid "Unknown command. Try 'help'."
msgstr ""
#: q.cpp:293
msgid "Cloak successful: Your hostname is now cloaked."
msgstr ""
#: q.cpp:408
msgid "Changes have been saved!"
msgstr ""
#: q.cpp:435
msgid "Cloak: Trying to cloak your hostname, setting +x..."
msgstr ""
#: q.cpp:452
msgid ""
"You have to set a username and password to use this module! See 'help' for "
"details."
msgstr ""
#: q.cpp:458
msgid "Auth: Requesting CHALLENGE..."
msgstr ""
#: q.cpp:462
msgid "Auth: Sending AUTH request..."
msgstr ""
#: q.cpp:479
msgid "Auth: Received challenge, sending CHALLENGEAUTH request..."
msgstr ""
#: q.cpp:521
msgid "Authentication failed: {1}"
msgstr ""
#: q.cpp:525
msgid "Authentication successful: {1}"
msgstr ""
#: q.cpp:539
msgid ""
"Auth failed: Q does not support HMAC-SHA-256 for CHALLENGEAUTH, falling back "
"to standard AUTH."
msgstr ""
#: q.cpp:566
msgid "RequestPerms: Requesting op on {1}"
msgstr ""
#: q.cpp:579
msgid "RequestPerms: Requesting voice on {1}"
msgstr ""
#: q.cpp:686
msgid "Please provide your username and password for Q."
msgstr ""
#: q.cpp:689
msgid "Auths you with QuakeNet's Q bot."
msgstr ""
-300
View File
@@ -1,300 +0,0 @@
msgid ""
msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: crowdin.com\n"
"X-Crowdin-Project: znc-bouncer\n"
"X-Crowdin-Language: id\n"
"X-Crowdin-File: /master/modules/po/q.pot\n"
"Project-Id-Version: znc-bouncer\n"
"Last-Translator: DarthGandalf <alexey+crowdin@asokolov.org>\n"
"Language-Team: Indonesian\n"
"Language: id_ID\n"
#: modules/po/../data/q/tmpl/index.tmpl:11
msgid "Username:"
msgstr "Nama pengguna:"
#: modules/po/../data/q/tmpl/index.tmpl:13
msgid "Please enter a username."
msgstr "Silahkan masukan nama pengguna."
#: modules/po/../data/q/tmpl/index.tmpl:16
msgid "Password:"
msgstr "Kata Sandi:"
#: modules/po/../data/q/tmpl/index.tmpl:18
msgid "Please enter a password."
msgstr "Silakan masukkan sandi."
#: modules/po/../data/q/tmpl/index.tmpl:26
msgid "Options"
msgstr "Opsi"
#: modules/po/../data/q/tmpl/index.tmpl:42
msgid "Save"
msgstr "Simpan"
#: q.cpp:74
msgid ""
"Notice: Your host will be cloaked the next time you reconnect to IRC. If you "
"want to cloak your host now, /msg *q Cloak. You can set your preference "
"with /msg *q Set UseCloakedHost true/false."
msgstr ""
#: q.cpp:111
msgid "The following commands are available:"
msgstr "Perintah berikut tersedia:"
#: q.cpp:113 q.cpp:116 q.cpp:121 q.cpp:126 q.cpp:130 q.cpp:135 q.cpp:140
msgid "Command"
msgstr "Perintah"
#: q.cpp:114 q.cpp:117 q.cpp:123 q.cpp:127 q.cpp:132 q.cpp:136 q.cpp:141
#: q.cpp:150 q.cpp:154 q.cpp:158 q.cpp:162 q.cpp:168 q.cpp:174 q.cpp:180
#: q.cpp:186
msgid "Description"
msgstr "Deskripsi"
#: q.cpp:116
msgid "Auth [<username> <password>]"
msgstr "Auth [<username> <password>]"
#: q.cpp:118
msgid "Tries to authenticate you with Q. Both parameters are optional."
msgstr ""
"Mencoba untuk mengautentikasi anda dengan Q. Kedua parameter bersifat "
"opsional."
#: q.cpp:124
msgid "Tries to set usermode +x to hide your real hostname."
msgstr ""
"Mencoba untuk menetapkan usermode +x untuk menyembunyikan nama host anda "
"yang sebenarnya."
#: q.cpp:128
msgid "Prints the current status of the module."
msgstr "Mencetak status modul saat ini."
#: q.cpp:133
msgid "Re-requests the current user information from Q."
msgstr "Minta ulang informasi pengguna saat ini dari Q."
#: q.cpp:135
msgid "Set <setting> <value>"
msgstr "Set <setting> <value>"
#: q.cpp:137
msgid "Changes the value of the given setting. See the list of settings below."
msgstr ""
#: q.cpp:142
msgid "Prints out the current configuration. See the list of settings below."
msgstr ""
#: q.cpp:146
msgid "The following settings are available:"
msgstr ""
#: q.cpp:148 q.cpp:152 q.cpp:156 q.cpp:160 q.cpp:166 q.cpp:172 q.cpp:178
#: q.cpp:183 q.cpp:227 q.cpp:230 q.cpp:233 q.cpp:236 q.cpp:239 q.cpp:242
#: q.cpp:245 q.cpp:248
msgid "Setting"
msgstr "Setelan"
#: q.cpp:149 q.cpp:153 q.cpp:157 q.cpp:161 q.cpp:167 q.cpp:173 q.cpp:179
#: q.cpp:184
msgid "Type"
msgstr "Tipe"
#: q.cpp:153 q.cpp:157
msgid "String"
msgstr "String"
#: q.cpp:154
msgid "Your Q username."
msgstr ""
#: q.cpp:158
msgid "Your Q password."
msgstr ""
#: q.cpp:161 q.cpp:167 q.cpp:173 q.cpp:179 q.cpp:184
msgid "Boolean"
msgstr ""
#: q.cpp:163 q.cpp:373
msgid "Whether to cloak your hostname (+x) automatically on connect."
msgstr ""
#: q.cpp:169 q.cpp:381
msgid ""
"Whether to use the CHALLENGEAUTH mechanism to avoid sending passwords in "
"cleartext."
msgstr ""
#: q.cpp:175 q.cpp:389
msgid "Whether to request voice/op from Q on join/devoice/deop."
msgstr ""
#: q.cpp:181 q.cpp:395
msgid "Whether to join channels when Q invites you."
msgstr ""
#: q.cpp:187 q.cpp:402
msgid "Whether to delay joining channels until after you are cloaked."
msgstr ""
#: q.cpp:192
msgid "This module takes 2 optional parameters: <username> <password>"
msgstr ""
#: q.cpp:194
msgid "Module settings are stored between restarts."
msgstr ""
#: q.cpp:200
msgid "Syntax: Set <setting> <value>"
msgstr ""
#: q.cpp:203
msgid "Username set"
msgstr ""
#: q.cpp:206
msgid "Password set"
msgstr ""
#: q.cpp:209
msgid "UseCloakedHost set"
msgstr ""
#: q.cpp:212
msgid "UseChallenge set"
msgstr ""
#: q.cpp:215
msgid "RequestPerms set"
msgstr ""
#: q.cpp:218
msgid "JoinOnInvite set"
msgstr ""
#: q.cpp:221
msgid "JoinAfterCloaked set"
msgstr ""
#: q.cpp:223
msgid "Unknown setting: {1}"
msgstr ""
#: q.cpp:228 q.cpp:231 q.cpp:234 q.cpp:237 q.cpp:240 q.cpp:243 q.cpp:246
#: q.cpp:249
msgid "Value"
msgstr ""
#: q.cpp:253
msgid "Connected: yes"
msgstr ""
#: q.cpp:254
msgid "Connected: no"
msgstr ""
#: q.cpp:255
msgid "Cloacked: yes"
msgstr ""
#: q.cpp:255
msgid "Cloacked: no"
msgstr ""
#: q.cpp:256
msgid "Authenticated: yes"
msgstr ""
#: q.cpp:257
msgid "Authenticated: no"
msgstr ""
#: q.cpp:262
msgid "Error: You are not connected to IRC."
msgstr ""
#: q.cpp:270
msgid "Error: You are already cloaked!"
msgstr ""
#: q.cpp:276
msgid "Error: You are already authed!"
msgstr ""
#: q.cpp:280
msgid "Update requested."
msgstr ""
#: q.cpp:283
msgid "Unknown command. Try 'help'."
msgstr ""
#: q.cpp:293
msgid "Cloak successful: Your hostname is now cloaked."
msgstr ""
#: q.cpp:408
msgid "Changes have been saved!"
msgstr ""
#: q.cpp:435
msgid "Cloak: Trying to cloak your hostname, setting +x..."
msgstr ""
#: q.cpp:452
msgid ""
"You have to set a username and password to use this module! See 'help' for "
"details."
msgstr ""
#: q.cpp:458
msgid "Auth: Requesting CHALLENGE..."
msgstr ""
#: q.cpp:462
msgid "Auth: Sending AUTH request..."
msgstr ""
#: q.cpp:479
msgid "Auth: Received challenge, sending CHALLENGEAUTH request..."
msgstr ""
#: q.cpp:521
msgid "Authentication failed: {1}"
msgstr ""
#: q.cpp:525
msgid "Authentication successful: {1}"
msgstr ""
#: q.cpp:539
msgid ""
"Auth failed: Q does not support HMAC-SHA-256 for CHALLENGEAUTH, falling back "
"to standard AUTH."
msgstr ""
#: q.cpp:566
msgid "RequestPerms: Requesting op on {1}"
msgstr ""
#: q.cpp:579
msgid "RequestPerms: Requesting voice on {1}"
msgstr ""
#: q.cpp:686
msgid "Please provide your username and password for Q."
msgstr ""
#: q.cpp:689
msgid "Auths you with QuakeNet's Q bot."
msgstr ""
-313
View File
@@ -1,313 +0,0 @@
msgid ""
msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.com\n"
"X-Crowdin-Project: znc-bouncer\n"
"X-Crowdin-Language: nl\n"
"X-Crowdin-File: /master/modules/po/q.pot\n"
"Project-Id-Version: znc-bouncer\n"
"Last-Translator: DarthGandalf <alexey+crowdin@asokolov.org>\n"
"Language-Team: Dutch\n"
"Language: nl_NL\n"
#: modules/po/../data/q/tmpl/index.tmpl:11
msgid "Username:"
msgstr "Gebruikersnaam:"
#: modules/po/../data/q/tmpl/index.tmpl:13
msgid "Please enter a username."
msgstr "Voer alsjeblieft een gebruikersnaam in."
#: modules/po/../data/q/tmpl/index.tmpl:16
msgid "Password:"
msgstr "Wachtwoord:"
#: modules/po/../data/q/tmpl/index.tmpl:18
msgid "Please enter a password."
msgstr "Voer alsjeblieft een wachtwoord in."
#: modules/po/../data/q/tmpl/index.tmpl:26
msgid "Options"
msgstr "Opties"
#: modules/po/../data/q/tmpl/index.tmpl:42
msgid "Save"
msgstr "Opslaan"
#: q.cpp:74
msgid ""
"Notice: Your host will be cloaked the next time you reconnect to IRC. If you "
"want to cloak your host now, /msg *q Cloak. You can set your preference "
"with /msg *q Set UseCloakedHost true/false."
msgstr ""
"Melding: Je host zal omhuld worden de volgende keer dat je met IRC verbind. "
"Als je dit nu wilt doen, doe dan: /msg *q Cloak. Je kan je voorkeur "
"instellen met /msg *q Set UseCloakedHost true/false."
#: q.cpp:111
msgid "The following commands are available:"
msgstr "De volgende commando's zijn beschikbaar:"
#: q.cpp:113 q.cpp:116 q.cpp:121 q.cpp:126 q.cpp:130 q.cpp:135 q.cpp:140
msgid "Command"
msgstr "Commando"
#: q.cpp:114 q.cpp:117 q.cpp:123 q.cpp:127 q.cpp:132 q.cpp:136 q.cpp:141
#: q.cpp:150 q.cpp:154 q.cpp:158 q.cpp:162 q.cpp:168 q.cpp:174 q.cpp:180
#: q.cpp:186
msgid "Description"
msgstr "Beschrijving"
#: q.cpp:116
msgid "Auth [<username> <password>]"
msgstr "Auth [<gebruikersnaam> <wachtwoord>]"
#: q.cpp:118
msgid "Tries to authenticate you with Q. Both parameters are optional."
msgstr "Probeert je te authenticeren met Q, beide parameters zijn optioneel."
#: q.cpp:124
msgid "Tries to set usermode +x to hide your real hostname."
msgstr ""
"Probeert gebruikersmodus +x in te stellen om je echte hostname te verbergen."
#: q.cpp:128
msgid "Prints the current status of the module."
msgstr "Toont de huidige status van de module."
#: q.cpp:133
msgid "Re-requests the current user information from Q."
msgstr "Vraagt de huidige gebruikersinformatie opnieuw aan bij Q."
#: q.cpp:135
msgid "Set <setting> <value>"
msgstr "Set <instelling> <waarde>"
#: q.cpp:137
msgid "Changes the value of the given setting. See the list of settings below."
msgstr ""
"Past de waarde aan van de gegeven instelling. Zie de lijst van instellingen "
"hier onder."
#: q.cpp:142
msgid "Prints out the current configuration. See the list of settings below."
msgstr ""
"Toont de huidige configuratie. Zie de onderstaande lijst van instellingen."
#: q.cpp:146
msgid "The following settings are available:"
msgstr "De volgende instellingen zijn beschikbaar:"
#: q.cpp:148 q.cpp:152 q.cpp:156 q.cpp:160 q.cpp:166 q.cpp:172 q.cpp:178
#: q.cpp:183 q.cpp:227 q.cpp:230 q.cpp:233 q.cpp:236 q.cpp:239 q.cpp:242
#: q.cpp:245 q.cpp:248
msgid "Setting"
msgstr "Instelling"
#: q.cpp:149 q.cpp:153 q.cpp:157 q.cpp:161 q.cpp:167 q.cpp:173 q.cpp:179
#: q.cpp:184
msgid "Type"
msgstr "Type"
#: q.cpp:153 q.cpp:157
msgid "String"
msgstr "Tekenreeks"
#: q.cpp:154
msgid "Your Q username."
msgstr "Jouw Q gebruikersnaam."
#: q.cpp:158
msgid "Your Q password."
msgstr "Jouw Q wachtwoord."
#: q.cpp:161 q.cpp:167 q.cpp:173 q.cpp:179 q.cpp:184
msgid "Boolean"
msgstr "Boolen (waar/onwaar)"
#: q.cpp:163 q.cpp:373
msgid "Whether to cloak your hostname (+x) automatically on connect."
msgstr "Je hostname automatisch omhullen (+x) wanneer er verbonden is."
#: q.cpp:169 q.cpp:381
msgid ""
"Whether to use the CHALLENGEAUTH mechanism to avoid sending passwords in "
"cleartext."
msgstr ""
"Of CHALLENGEAUTH mechanisme gebruikt moet worden om te voorkomen dat je "
"wachtwoord onversleuteld verstuurd word."
#: q.cpp:175 q.cpp:389
msgid "Whether to request voice/op from Q on join/devoice/deop."
msgstr ""
"Of je automatisch stem/beheerdersrechten van Q wilt aanvragen als je "
"toetreed/stem kwijt raakt/beheerdersrechten kwijt raakt."
#: q.cpp:181 q.cpp:395
msgid "Whether to join channels when Q invites you."
msgstr "Automatisch kanalen toetreden waar Q je voor uitnodigd."
#: q.cpp:187 q.cpp:402
msgid "Whether to delay joining channels until after you are cloaked."
msgstr "Wachten met het toetreden van kanalen totdat je host omhuld is."
#: q.cpp:192
msgid "This module takes 2 optional parameters: <username> <password>"
msgstr ""
"Deze module accepteerd twee optionele parameters: <gebruikersnaam> "
"<wachtwoord>"
#: q.cpp:194
msgid "Module settings are stored between restarts."
msgstr "Module instellingen worden opgeslagen tussen herstarts."
#: q.cpp:200
msgid "Syntax: Set <setting> <value>"
msgstr "Syntax: Set <instelling> <waarde>"
#: q.cpp:203
msgid "Username set"
msgstr "Gebruikersnaam ingesteld"
#: q.cpp:206
msgid "Password set"
msgstr "Wachtwoord ingesteld"
#: q.cpp:209
msgid "UseCloakedHost set"
msgstr "UseCloakedHost ingesteld"
#: q.cpp:212
msgid "UseChallenge set"
msgstr "UseChallenge ingesteld"
#: q.cpp:215
msgid "RequestPerms set"
msgstr "RequestPerms ingesteld"
#: q.cpp:218
msgid "JoinOnInvite set"
msgstr "JoinOnInvite ingesteld"
#: q.cpp:221
msgid "JoinAfterCloaked set"
msgstr "JoinAfterCloaked ingesteld"
#: q.cpp:223
msgid "Unknown setting: {1}"
msgstr "Onbekende instelling: {1}"
#: q.cpp:228 q.cpp:231 q.cpp:234 q.cpp:237 q.cpp:240 q.cpp:243 q.cpp:246
#: q.cpp:249
msgid "Value"
msgstr "Waarde"
#: q.cpp:253
msgid "Connected: yes"
msgstr "Verbonden: ja"
#: q.cpp:254
msgid "Connected: no"
msgstr "Verbonden: nee"
#: q.cpp:255
msgid "Cloacked: yes"
msgstr "Host omhuld: ja"
#: q.cpp:255
msgid "Cloacked: no"
msgstr "Host omhuld: nee"
#: q.cpp:256
msgid "Authenticated: yes"
msgstr "Geauthenticeerd: ja"
#: q.cpp:257
msgid "Authenticated: no"
msgstr "Geauthenticeerd: nee"
#: q.cpp:262
msgid "Error: You are not connected to IRC."
msgstr "Fout: Je bent niet verbonden met IRC."
#: q.cpp:270
msgid "Error: You are already cloaked!"
msgstr "Fout: Je bent al omhuld!"
#: q.cpp:276
msgid "Error: You are already authed!"
msgstr "Fout: Je bent al geauthenticeerd!"
#: q.cpp:280
msgid "Update requested."
msgstr "Update aangevraagd."
#: q.cpp:283
msgid "Unknown command. Try 'help'."
msgstr "Onbekend commando. Probeer 'help'."
#: q.cpp:293
msgid "Cloak successful: Your hostname is now cloaked."
msgstr "Omhulling succesvol: Je host is nu omhuld."
#: q.cpp:408
msgid "Changes have been saved!"
msgstr "Wijzigingen zijn opgeslagen!"
#: q.cpp:435
msgid "Cloak: Trying to cloak your hostname, setting +x..."
msgstr "Omhulling: Proberen je host te omhullen, +x aan het instellen..."
#: q.cpp:452
msgid ""
"You have to set a username and password to use this module! See 'help' for "
"details."
msgstr ""
"Je moet een gebruikersnaam en wachtwoord instellen om deze module te "
"gebruiken! Zie 'help' voor details."
#: q.cpp:458
msgid "Auth: Requesting CHALLENGE..."
msgstr "Auth: CHALLENGE aanvragen..."
#: q.cpp:462
msgid "Auth: Sending AUTH request..."
msgstr "Auth: AUTH aanvraag aan het versturen..."
#: q.cpp:479
msgid "Auth: Received challenge, sending CHALLENGEAUTH request..."
msgstr "Auth: Uitdaging ontvangen, nu CHALLENGEAUTH aanvraag sturen..."
#: q.cpp:521
msgid "Authentication failed: {1}"
msgstr "Authenticatie mislukt: {1}"
#: q.cpp:525
msgid "Authentication successful: {1}"
msgstr "Authenticatie gelukt: {1}"
#: q.cpp:539
msgid ""
"Auth failed: Q does not support HMAC-SHA-256 for CHALLENGEAUTH, falling back "
"to standard AUTH."
msgstr ""
"Auth mislukt: Q ondersteund geen HMAC-SHA-256 voor CHALLENGEAUTH, "
"terugvallen naar standaard AUTH."
#: q.cpp:566
msgid "RequestPerms: Requesting op on {1}"
msgstr "RequestPerms: Beheerdersrechten aanvragen in {1}"
#: q.cpp:579
msgid "RequestPerms: Requesting voice on {1}"
msgstr "RequestPerms: Stem aanvragen in {1}"
#: q.cpp:686
msgid "Please provide your username and password for Q."
msgstr "Voer alsjeblieft je gebruikersnaam en wachtwoord in voor Q."
#: q.cpp:689
msgid "Auths you with QuakeNet's Q bot."
msgstr "Authenticeert je met QuakeNet's Q bot."
-287
View File
@@ -1,287 +0,0 @@
msgid ""
msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: modules/po/../data/q/tmpl/index.tmpl:11
msgid "Username:"
msgstr ""
#: modules/po/../data/q/tmpl/index.tmpl:13
msgid "Please enter a username."
msgstr ""
#: modules/po/../data/q/tmpl/index.tmpl:16
msgid "Password:"
msgstr ""
#: modules/po/../data/q/tmpl/index.tmpl:18
msgid "Please enter a password."
msgstr ""
#: modules/po/../data/q/tmpl/index.tmpl:26
msgid "Options"
msgstr ""
#: modules/po/../data/q/tmpl/index.tmpl:42
msgid "Save"
msgstr ""
#: q.cpp:74
msgid ""
"Notice: Your host will be cloaked the next time you reconnect to IRC. If you "
"want to cloak your host now, /msg *q Cloak. You can set your preference "
"with /msg *q Set UseCloakedHost true/false."
msgstr ""
#: q.cpp:111
msgid "The following commands are available:"
msgstr ""
#: q.cpp:113 q.cpp:116 q.cpp:121 q.cpp:126 q.cpp:130 q.cpp:135 q.cpp:140
msgid "Command"
msgstr ""
#: q.cpp:114 q.cpp:117 q.cpp:123 q.cpp:127 q.cpp:132 q.cpp:136 q.cpp:141
#: q.cpp:150 q.cpp:154 q.cpp:158 q.cpp:162 q.cpp:168 q.cpp:174 q.cpp:180
#: q.cpp:186
msgid "Description"
msgstr ""
#: q.cpp:116
msgid "Auth [<username> <password>]"
msgstr ""
#: q.cpp:118
msgid "Tries to authenticate you with Q. Both parameters are optional."
msgstr ""
#: q.cpp:124
msgid "Tries to set usermode +x to hide your real hostname."
msgstr ""
#: q.cpp:128
msgid "Prints the current status of the module."
msgstr ""
#: q.cpp:133
msgid "Re-requests the current user information from Q."
msgstr ""
#: q.cpp:135
msgid "Set <setting> <value>"
msgstr ""
#: q.cpp:137
msgid "Changes the value of the given setting. See the list of settings below."
msgstr ""
#: q.cpp:142
msgid "Prints out the current configuration. See the list of settings below."
msgstr ""
#: q.cpp:146
msgid "The following settings are available:"
msgstr ""
#: q.cpp:148 q.cpp:152 q.cpp:156 q.cpp:160 q.cpp:166 q.cpp:172 q.cpp:178
#: q.cpp:183 q.cpp:227 q.cpp:230 q.cpp:233 q.cpp:236 q.cpp:239 q.cpp:242
#: q.cpp:245 q.cpp:248
msgid "Setting"
msgstr ""
#: q.cpp:149 q.cpp:153 q.cpp:157 q.cpp:161 q.cpp:167 q.cpp:173 q.cpp:179
#: q.cpp:184
msgid "Type"
msgstr ""
#: q.cpp:153 q.cpp:157
msgid "String"
msgstr ""
#: q.cpp:154
msgid "Your Q username."
msgstr ""
#: q.cpp:158
msgid "Your Q password."
msgstr ""
#: q.cpp:161 q.cpp:167 q.cpp:173 q.cpp:179 q.cpp:184
msgid "Boolean"
msgstr ""
#: q.cpp:163 q.cpp:373
msgid "Whether to cloak your hostname (+x) automatically on connect."
msgstr ""
#: q.cpp:169 q.cpp:381
msgid ""
"Whether to use the CHALLENGEAUTH mechanism to avoid sending passwords in "
"cleartext."
msgstr ""
#: q.cpp:175 q.cpp:389
msgid "Whether to request voice/op from Q on join/devoice/deop."
msgstr ""
#: q.cpp:181 q.cpp:395
msgid "Whether to join channels when Q invites you."
msgstr ""
#: q.cpp:187 q.cpp:402
msgid "Whether to delay joining channels until after you are cloaked."
msgstr ""
#: q.cpp:192
msgid "This module takes 2 optional parameters: <username> <password>"
msgstr ""
#: q.cpp:194
msgid "Module settings are stored between restarts."
msgstr ""
#: q.cpp:200
msgid "Syntax: Set <setting> <value>"
msgstr ""
#: q.cpp:203
msgid "Username set"
msgstr ""
#: q.cpp:206
msgid "Password set"
msgstr ""
#: q.cpp:209
msgid "UseCloakedHost set"
msgstr ""
#: q.cpp:212
msgid "UseChallenge set"
msgstr ""
#: q.cpp:215
msgid "RequestPerms set"
msgstr ""
#: q.cpp:218
msgid "JoinOnInvite set"
msgstr ""
#: q.cpp:221
msgid "JoinAfterCloaked set"
msgstr ""
#: q.cpp:223
msgid "Unknown setting: {1}"
msgstr ""
#: q.cpp:228 q.cpp:231 q.cpp:234 q.cpp:237 q.cpp:240 q.cpp:243 q.cpp:246
#: q.cpp:249
msgid "Value"
msgstr ""
#: q.cpp:253
msgid "Connected: yes"
msgstr ""
#: q.cpp:254
msgid "Connected: no"
msgstr ""
#: q.cpp:255
msgid "Cloacked: yes"
msgstr ""
#: q.cpp:255
msgid "Cloacked: no"
msgstr ""
#: q.cpp:256
msgid "Authenticated: yes"
msgstr ""
#: q.cpp:257
msgid "Authenticated: no"
msgstr ""
#: q.cpp:262
msgid "Error: You are not connected to IRC."
msgstr ""
#: q.cpp:270
msgid "Error: You are already cloaked!"
msgstr ""
#: q.cpp:276
msgid "Error: You are already authed!"
msgstr ""
#: q.cpp:280
msgid "Update requested."
msgstr ""
#: q.cpp:283
msgid "Unknown command. Try 'help'."
msgstr ""
#: q.cpp:293
msgid "Cloak successful: Your hostname is now cloaked."
msgstr ""
#: q.cpp:408
msgid "Changes have been saved!"
msgstr ""
#: q.cpp:435
msgid "Cloak: Trying to cloak your hostname, setting +x..."
msgstr ""
#: q.cpp:452
msgid ""
"You have to set a username and password to use this module! See 'help' for "
"details."
msgstr ""
#: q.cpp:458
msgid "Auth: Requesting CHALLENGE..."
msgstr ""
#: q.cpp:462
msgid "Auth: Sending AUTH request..."
msgstr ""
#: q.cpp:479
msgid "Auth: Received challenge, sending CHALLENGEAUTH request..."
msgstr ""
#: q.cpp:521
msgid "Authentication failed: {1}"
msgstr ""
#: q.cpp:525
msgid "Authentication successful: {1}"
msgstr ""
#: q.cpp:539
msgid ""
"Auth failed: Q does not support HMAC-SHA-256 for CHALLENGEAUTH, falling back "
"to standard AUTH."
msgstr ""
#: q.cpp:566
msgid "RequestPerms: Requesting op on {1}"
msgstr ""
#: q.cpp:579
msgid "RequestPerms: Requesting voice on {1}"
msgstr ""
#: q.cpp:686
msgid "Please provide your username and password for Q."
msgstr ""
#: q.cpp:689
msgid "Auths you with QuakeNet's Q bot."
msgstr ""
-296
View File
@@ -1,296 +0,0 @@
msgid ""
msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.com\n"
"X-Crowdin-Project: znc-bouncer\n"
"X-Crowdin-Language: pt-BR\n"
"X-Crowdin-File: /master/modules/po/q.pot\n"
"Project-Id-Version: znc-bouncer\n"
"Last-Translator: DarthGandalf <alexey+crowdin@asokolov.org>\n"
"Language-Team: Portuguese, Brazilian\n"
"Language: pt_BR\n"
#: modules/po/../data/q/tmpl/index.tmpl:11
msgid "Username:"
msgstr ""
#: modules/po/../data/q/tmpl/index.tmpl:13
msgid "Please enter a username."
msgstr ""
#: modules/po/../data/q/tmpl/index.tmpl:16
msgid "Password:"
msgstr ""
#: modules/po/../data/q/tmpl/index.tmpl:18
msgid "Please enter a password."
msgstr ""
#: modules/po/../data/q/tmpl/index.tmpl:26
msgid "Options"
msgstr ""
#: modules/po/../data/q/tmpl/index.tmpl:42
msgid "Save"
msgstr ""
#: q.cpp:74
msgid ""
"Notice: Your host will be cloaked the next time you reconnect to IRC. If you "
"want to cloak your host now, /msg *q Cloak. You can set your preference "
"with /msg *q Set UseCloakedHost true/false."
msgstr ""
#: q.cpp:111
msgid "The following commands are available:"
msgstr ""
#: q.cpp:113 q.cpp:116 q.cpp:121 q.cpp:126 q.cpp:130 q.cpp:135 q.cpp:140
msgid "Command"
msgstr ""
#: q.cpp:114 q.cpp:117 q.cpp:123 q.cpp:127 q.cpp:132 q.cpp:136 q.cpp:141
#: q.cpp:150 q.cpp:154 q.cpp:158 q.cpp:162 q.cpp:168 q.cpp:174 q.cpp:180
#: q.cpp:186
msgid "Description"
msgstr ""
#: q.cpp:116
msgid "Auth [<username> <password>]"
msgstr ""
#: q.cpp:118
msgid "Tries to authenticate you with Q. Both parameters are optional."
msgstr ""
#: q.cpp:124
msgid "Tries to set usermode +x to hide your real hostname."
msgstr ""
#: q.cpp:128
msgid "Prints the current status of the module."
msgstr ""
#: q.cpp:133
msgid "Re-requests the current user information from Q."
msgstr ""
#: q.cpp:135
msgid "Set <setting> <value>"
msgstr ""
#: q.cpp:137
msgid "Changes the value of the given setting. See the list of settings below."
msgstr ""
#: q.cpp:142
msgid "Prints out the current configuration. See the list of settings below."
msgstr ""
#: q.cpp:146
msgid "The following settings are available:"
msgstr ""
#: q.cpp:148 q.cpp:152 q.cpp:156 q.cpp:160 q.cpp:166 q.cpp:172 q.cpp:178
#: q.cpp:183 q.cpp:227 q.cpp:230 q.cpp:233 q.cpp:236 q.cpp:239 q.cpp:242
#: q.cpp:245 q.cpp:248
msgid "Setting"
msgstr ""
#: q.cpp:149 q.cpp:153 q.cpp:157 q.cpp:161 q.cpp:167 q.cpp:173 q.cpp:179
#: q.cpp:184
msgid "Type"
msgstr ""
#: q.cpp:153 q.cpp:157
msgid "String"
msgstr ""
#: q.cpp:154
msgid "Your Q username."
msgstr ""
#: q.cpp:158
msgid "Your Q password."
msgstr ""
#: q.cpp:161 q.cpp:167 q.cpp:173 q.cpp:179 q.cpp:184
msgid "Boolean"
msgstr ""
#: q.cpp:163 q.cpp:373
msgid "Whether to cloak your hostname (+x) automatically on connect."
msgstr ""
#: q.cpp:169 q.cpp:381
msgid ""
"Whether to use the CHALLENGEAUTH mechanism to avoid sending passwords in "
"cleartext."
msgstr ""
#: q.cpp:175 q.cpp:389
msgid "Whether to request voice/op from Q on join/devoice/deop."
msgstr ""
#: q.cpp:181 q.cpp:395
msgid "Whether to join channels when Q invites you."
msgstr ""
#: q.cpp:187 q.cpp:402
msgid "Whether to delay joining channels until after you are cloaked."
msgstr ""
#: q.cpp:192
msgid "This module takes 2 optional parameters: <username> <password>"
msgstr ""
#: q.cpp:194
msgid "Module settings are stored between restarts."
msgstr ""
#: q.cpp:200
msgid "Syntax: Set <setting> <value>"
msgstr ""
#: q.cpp:203
msgid "Username set"
msgstr ""
#: q.cpp:206
msgid "Password set"
msgstr ""
#: q.cpp:209
msgid "UseCloakedHost set"
msgstr ""
#: q.cpp:212
msgid "UseChallenge set"
msgstr ""
#: q.cpp:215
msgid "RequestPerms set"
msgstr ""
#: q.cpp:218
msgid "JoinOnInvite set"
msgstr ""
#: q.cpp:221
msgid "JoinAfterCloaked set"
msgstr ""
#: q.cpp:223
msgid "Unknown setting: {1}"
msgstr ""
#: q.cpp:228 q.cpp:231 q.cpp:234 q.cpp:237 q.cpp:240 q.cpp:243 q.cpp:246
#: q.cpp:249
msgid "Value"
msgstr ""
#: q.cpp:253
msgid "Connected: yes"
msgstr ""
#: q.cpp:254
msgid "Connected: no"
msgstr ""
#: q.cpp:255
msgid "Cloacked: yes"
msgstr ""
#: q.cpp:255
msgid "Cloacked: no"
msgstr ""
#: q.cpp:256
msgid "Authenticated: yes"
msgstr ""
#: q.cpp:257
msgid "Authenticated: no"
msgstr ""
#: q.cpp:262
msgid "Error: You are not connected to IRC."
msgstr ""
#: q.cpp:270
msgid "Error: You are already cloaked!"
msgstr ""
#: q.cpp:276
msgid "Error: You are already authed!"
msgstr ""
#: q.cpp:280
msgid "Update requested."
msgstr ""
#: q.cpp:283
msgid "Unknown command. Try 'help'."
msgstr ""
#: q.cpp:293
msgid "Cloak successful: Your hostname is now cloaked."
msgstr ""
#: q.cpp:408
msgid "Changes have been saved!"
msgstr ""
#: q.cpp:435
msgid "Cloak: Trying to cloak your hostname, setting +x..."
msgstr ""
#: q.cpp:452
msgid ""
"You have to set a username and password to use this module! See 'help' for "
"details."
msgstr ""
#: q.cpp:458
msgid "Auth: Requesting CHALLENGE..."
msgstr ""
#: q.cpp:462
msgid "Auth: Sending AUTH request..."
msgstr ""
#: q.cpp:479
msgid "Auth: Received challenge, sending CHALLENGEAUTH request..."
msgstr ""
#: q.cpp:521
msgid "Authentication failed: {1}"
msgstr ""
#: q.cpp:525
msgid "Authentication successful: {1}"
msgstr ""
#: q.cpp:539
msgid ""
"Auth failed: Q does not support HMAC-SHA-256 for CHALLENGEAUTH, falling back "
"to standard AUTH."
msgstr ""
#: q.cpp:566
msgid "RequestPerms: Requesting op on {1}"
msgstr ""
#: q.cpp:579
msgid "RequestPerms: Requesting voice on {1}"
msgstr ""
#: q.cpp:686
msgid "Please provide your username and password for Q."
msgstr ""
#: q.cpp:689
msgid "Auths you with QuakeNet's Q bot."
msgstr ""
-298
View File
@@ -1,298 +0,0 @@
msgid ""
msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=4; plural=((n%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 "
"&& n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 "
"&& n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\n"
"X-Generator: crowdin.com\n"
"X-Crowdin-Project: znc-bouncer\n"
"X-Crowdin-Language: ru\n"
"X-Crowdin-File: /master/modules/po/q.pot\n"
"Project-Id-Version: znc-bouncer\n"
"Last-Translator: DarthGandalf <alexey+crowdin@asokolov.org>\n"
"Language-Team: Russian\n"
"Language: ru_RU\n"
#: modules/po/../data/q/tmpl/index.tmpl:11
msgid "Username:"
msgstr ""
#: modules/po/../data/q/tmpl/index.tmpl:13
msgid "Please enter a username."
msgstr ""
#: modules/po/../data/q/tmpl/index.tmpl:16
msgid "Password:"
msgstr ""
#: modules/po/../data/q/tmpl/index.tmpl:18
msgid "Please enter a password."
msgstr ""
#: modules/po/../data/q/tmpl/index.tmpl:26
msgid "Options"
msgstr ""
#: modules/po/../data/q/tmpl/index.tmpl:42
msgid "Save"
msgstr ""
#: q.cpp:74
msgid ""
"Notice: Your host will be cloaked the next time you reconnect to IRC. If you "
"want to cloak your host now, /msg *q Cloak. You can set your preference "
"with /msg *q Set UseCloakedHost true/false."
msgstr ""
#: q.cpp:111
msgid "The following commands are available:"
msgstr ""
#: q.cpp:113 q.cpp:116 q.cpp:121 q.cpp:126 q.cpp:130 q.cpp:135 q.cpp:140
msgid "Command"
msgstr ""
#: q.cpp:114 q.cpp:117 q.cpp:123 q.cpp:127 q.cpp:132 q.cpp:136 q.cpp:141
#: q.cpp:150 q.cpp:154 q.cpp:158 q.cpp:162 q.cpp:168 q.cpp:174 q.cpp:180
#: q.cpp:186
msgid "Description"
msgstr ""
#: q.cpp:116
msgid "Auth [<username> <password>]"
msgstr ""
#: q.cpp:118
msgid "Tries to authenticate you with Q. Both parameters are optional."
msgstr ""
#: q.cpp:124
msgid "Tries to set usermode +x to hide your real hostname."
msgstr ""
#: q.cpp:128
msgid "Prints the current status of the module."
msgstr ""
#: q.cpp:133
msgid "Re-requests the current user information from Q."
msgstr ""
#: q.cpp:135
msgid "Set <setting> <value>"
msgstr ""
#: q.cpp:137
msgid "Changes the value of the given setting. See the list of settings below."
msgstr ""
#: q.cpp:142
msgid "Prints out the current configuration. See the list of settings below."
msgstr ""
#: q.cpp:146
msgid "The following settings are available:"
msgstr ""
#: q.cpp:148 q.cpp:152 q.cpp:156 q.cpp:160 q.cpp:166 q.cpp:172 q.cpp:178
#: q.cpp:183 q.cpp:227 q.cpp:230 q.cpp:233 q.cpp:236 q.cpp:239 q.cpp:242
#: q.cpp:245 q.cpp:248
msgid "Setting"
msgstr ""
#: q.cpp:149 q.cpp:153 q.cpp:157 q.cpp:161 q.cpp:167 q.cpp:173 q.cpp:179
#: q.cpp:184
msgid "Type"
msgstr ""
#: q.cpp:153 q.cpp:157
msgid "String"
msgstr ""
#: q.cpp:154
msgid "Your Q username."
msgstr ""
#: q.cpp:158
msgid "Your Q password."
msgstr ""
#: q.cpp:161 q.cpp:167 q.cpp:173 q.cpp:179 q.cpp:184
msgid "Boolean"
msgstr ""
#: q.cpp:163 q.cpp:373
msgid "Whether to cloak your hostname (+x) automatically on connect."
msgstr ""
#: q.cpp:169 q.cpp:381
msgid ""
"Whether to use the CHALLENGEAUTH mechanism to avoid sending passwords in "
"cleartext."
msgstr ""
#: q.cpp:175 q.cpp:389
msgid "Whether to request voice/op from Q on join/devoice/deop."
msgstr ""
#: q.cpp:181 q.cpp:395
msgid "Whether to join channels when Q invites you."
msgstr ""
#: q.cpp:187 q.cpp:402
msgid "Whether to delay joining channels until after you are cloaked."
msgstr ""
#: q.cpp:192
msgid "This module takes 2 optional parameters: <username> <password>"
msgstr ""
#: q.cpp:194
msgid "Module settings are stored between restarts."
msgstr ""
#: q.cpp:200
msgid "Syntax: Set <setting> <value>"
msgstr ""
#: q.cpp:203
msgid "Username set"
msgstr ""
#: q.cpp:206
msgid "Password set"
msgstr ""
#: q.cpp:209
msgid "UseCloakedHost set"
msgstr ""
#: q.cpp:212
msgid "UseChallenge set"
msgstr ""
#: q.cpp:215
msgid "RequestPerms set"
msgstr ""
#: q.cpp:218
msgid "JoinOnInvite set"
msgstr ""
#: q.cpp:221
msgid "JoinAfterCloaked set"
msgstr ""
#: q.cpp:223
msgid "Unknown setting: {1}"
msgstr ""
#: q.cpp:228 q.cpp:231 q.cpp:234 q.cpp:237 q.cpp:240 q.cpp:243 q.cpp:246
#: q.cpp:249
msgid "Value"
msgstr ""
#: q.cpp:253
msgid "Connected: yes"
msgstr ""
#: q.cpp:254
msgid "Connected: no"
msgstr ""
#: q.cpp:255
msgid "Cloacked: yes"
msgstr ""
#: q.cpp:255
msgid "Cloacked: no"
msgstr ""
#: q.cpp:256
msgid "Authenticated: yes"
msgstr ""
#: q.cpp:257
msgid "Authenticated: no"
msgstr ""
#: q.cpp:262
msgid "Error: You are not connected to IRC."
msgstr ""
#: q.cpp:270
msgid "Error: You are already cloaked!"
msgstr ""
#: q.cpp:276
msgid "Error: You are already authed!"
msgstr ""
#: q.cpp:280
msgid "Update requested."
msgstr ""
#: q.cpp:283
msgid "Unknown command. Try 'help'."
msgstr ""
#: q.cpp:293
msgid "Cloak successful: Your hostname is now cloaked."
msgstr ""
#: q.cpp:408
msgid "Changes have been saved!"
msgstr ""
#: q.cpp:435
msgid "Cloak: Trying to cloak your hostname, setting +x..."
msgstr ""
#: q.cpp:452
msgid ""
"You have to set a username and password to use this module! See 'help' for "
"details."
msgstr ""
#: q.cpp:458
msgid "Auth: Requesting CHALLENGE..."
msgstr ""
#: q.cpp:462
msgid "Auth: Sending AUTH request..."
msgstr ""
#: q.cpp:479
msgid "Auth: Received challenge, sending CHALLENGEAUTH request..."
msgstr ""
#: q.cpp:521
msgid "Authentication failed: {1}"
msgstr ""
#: q.cpp:525
msgid "Authentication successful: {1}"
msgstr ""
#: q.cpp:539
msgid ""
"Auth failed: Q does not support HMAC-SHA-256 for CHALLENGEAUTH, falling back "
"to standard AUTH."
msgstr ""
#: q.cpp:566
msgid "RequestPerms: Requesting op on {1}"
msgstr ""
#: q.cpp:579
msgid "RequestPerms: Requesting voice on {1}"
msgstr ""
#: q.cpp:686
msgid "Please provide your username and password for Q."
msgstr ""
#: q.cpp:689
msgid "Auths you with QuakeNet's Q bot."
msgstr ""
-689
View File
@@ -1,689 +0,0 @@
/*
* Copyright (C) 2004-2019 ZNC, see the NOTICE file for details.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <znc/User.h>
#include <znc/IRCNetwork.h>
#include <znc/IRCSock.h>
#include <znc/Chan.h>
using std::set;
#ifndef Q_DEBUG_COMMUNICATION
#define Q_DEBUG_COMMUNICATION 0
#endif
class CQModule : public CModule {
public:
MODCONSTRUCTOR(CQModule) {}
~CQModule() override {}
bool OnLoad(const CString& sArgs, CString& sMessage) override {
if (!sArgs.empty()) {
SetUsername(sArgs.Token(0));
SetPassword(sArgs.Token(1));
} else {
m_sUsername = GetNV("Username");
m_sPassword = GetNV("Password");
}
CString sTmp;
m_bUseCloakedHost =
(sTmp = GetNV("UseCloakedHost")).empty() ? true : sTmp.ToBool();
m_bUseChallenge =
(sTmp = GetNV("UseChallenge")).empty() ? true : sTmp.ToBool();
m_bRequestPerms = GetNV("RequestPerms").ToBool();
m_bJoinOnInvite =
(sTmp = GetNV("JoinOnInvite")).empty() ? true : sTmp.ToBool();
m_bJoinAfterCloaked =
(sTmp = GetNV("JoinAfterCloaked")).empty() ? true : sTmp.ToBool();
// Make sure NVs are stored in config. Note: SetUseCloakedHost() is
// called further down.
SetUseChallenge(m_bUseChallenge);
SetRequestPerms(m_bRequestPerms);
SetJoinOnInvite(m_bJoinOnInvite);
SetJoinAfterCloaked(m_bJoinAfterCloaked);
OnIRCDisconnected(); // reset module's state
if (IsIRCConnected()) {
// check for usermode +x if we are already connected
set<char> scUserModes =
GetNetwork()->GetIRCSock()->GetUserModes();
if (scUserModes.find('x') != scUserModes.end()) m_bCloaked = true;
// This will only happen once, and only if the user loads the module
// after connecting to IRC.
// Also don't notify the user in case he already had mode +x set.
if (GetNV("UseCloakedHost").empty()) {
if (!m_bCloaked)
PutModule(t_s(
"Notice: Your host will be cloaked the next time you "
"reconnect to IRC. "
"If you want to cloak your host now, /msg *q Cloak. "
"You can set your preference "
"with /msg *q Set UseCloakedHost true/false."));
m_bUseCloakedHost = true;
SetUseCloakedHost(m_bUseCloakedHost);
m_bJoinAfterCloaked = true;
SetJoinAfterCloaked(m_bJoinAfterCloaked);
} else if (m_bUseChallenge) {
Cloak();
}
WhoAmI();
} else {
SetUseCloakedHost(m_bUseCloakedHost);
}
return true;
}
void OnIRCDisconnected() override {
m_bCloaked = false;
m_bAuthed = false;
m_bRequestedWhoami = false;
m_bRequestedChallenge = false;
m_bCatchResponse = false;
}
void OnIRCConnected() override {
if (m_bUseCloakedHost) Cloak();
WhoAmI();
}
void OnModCommand(const CString& sLine) override {
CString sCommand = sLine.Token(0).AsLower();
if (sCommand == "help") {
PutModule(t_s("The following commands are available:"));
CTable Table;
Table.AddColumn(t_s("Command"));
Table.AddColumn(t_s("Description"));
Table.AddRow();
Table.SetCell(t_s("Command"), t_s("Auth [<username> <password>]"));
Table.SetCell(t_s("Description"),
t_s("Tries to authenticate you with Q. Both "
"parameters are optional."));
Table.AddRow();
Table.SetCell(t_s("Command"), "Cloak");
Table.SetCell(
t_s("Description"),
t_s("Tries to set usermode +x to hide your real hostname."));
Table.AddRow();
Table.SetCell(t_s("Command"), "Status");
Table.SetCell(t_s("Description"),
t_s("Prints the current status of the module."));
Table.AddRow();
Table.SetCell(t_s("Command"), "Update");
Table.SetCell(
t_s("Description"),
t_s("Re-requests the current user information from Q."));
Table.AddRow();
Table.SetCell(t_s("Command"), t_s("Set <setting> <value>"));
Table.SetCell(t_s("Description"),
t_s("Changes the value of the given setting. See the "
"list of settings below."));
Table.AddRow();
Table.SetCell(t_s("Command"), "Get");
Table.SetCell(t_s("Description"),
t_s("Prints out the current configuration. See the "
"list of settings below."));
PutModule(Table);
PutModule(t_s("The following settings are available:"));
CTable Table2;
Table2.AddColumn(t_s("Setting"));
Table2.AddColumn(t_s("Type"));
Table2.AddColumn(t_s("Description"));
Table2.AddRow();
Table2.SetCell(t_s("Setting"),"Username");
Table2.SetCell(t_s("Type"), t_s("String"));
Table2.SetCell(t_s("Description"), t_s("Your Q username."));
Table2.AddRow();
Table2.SetCell(t_s("Setting"), "Password");
Table2.SetCell(t_s("Type"), t_s("String"));
Table2.SetCell(t_s("Description"), t_s("Your Q password."));
Table2.AddRow();
Table2.SetCell(t_s("Setting"), "UseCloakedHost");
Table2.SetCell(t_s("Type"), t_s("Boolean"));
Table2.SetCell(t_s("Description"),
t_s("Whether to cloak your hostname (+x) "
"automatically on connect."));
Table2.AddRow();
Table2.SetCell(t_s("Setting"), "UseChallenge");
Table2.SetCell(t_s("Type"), t_s("Boolean"));
Table2.SetCell(t_s("Description"),
t_s("Whether to use the CHALLENGEAUTH mechanism to "
"avoid sending passwords in cleartext."));
Table2.AddRow();
Table2.SetCell(t_s("Setting"), "RequestPerms");
Table2.SetCell(t_s("Type"), t_s("Boolean"));
Table2.SetCell(t_s("Description"),
t_s("Whether to request voice/op from Q on "
"join/devoice/deop."));
Table2.AddRow();
Table2.SetCell(t_s("Setting"), "JoinOnInvite");
Table2.SetCell(t_s("Type"), t_s("Boolean"));
Table2.SetCell(t_s("Description"),
t_s("Whether to join channels when Q invites you."));
Table2.AddRow();
Table2.SetCell(t_s("Setting"), "JoinAfterCloaked");
Table2.SetCell(t_s("Type"), t_s("Boolean"));
Table2.SetCell(
t_s("Description"),
t_s("Whether to delay joining channels until after you "
"are cloaked."));
PutModule(Table2);
PutModule(
t_s("This module takes 2 optional parameters: <username> "
"<password>"));
PutModule(t_s("Module settings are stored between restarts."));
} else if (sCommand == "set") {
CString sSetting = sLine.Token(1).AsLower();
CString sValue = sLine.Token(2);
if (sSetting.empty() || sValue.empty()) {
PutModule(t_s("Syntax: Set <setting> <value>"));
} else if (sSetting == "username") {
SetUsername(sValue);
PutModule(t_s("Username set"));
} else if (sSetting == "password") {
SetPassword(sValue);
PutModule(t_s("Password set"));
} else if (sSetting == "usecloakedhost") {
SetUseCloakedHost(sValue.ToBool());
PutModule(t_s("UseCloakedHost set"));
} else if (sSetting == "usechallenge") {
SetUseChallenge(sValue.ToBool());
PutModule(t_s("UseChallenge set"));
} else if (sSetting == "requestperms") {
SetRequestPerms(sValue.ToBool());
PutModule(t_s("RequestPerms set"));
} else if (sSetting == "joinoninvite") {
SetJoinOnInvite(sValue.ToBool());
PutModule(t_s("JoinOnInvite set"));
} else if (sSetting == "joinaftercloaked") {
SetJoinAfterCloaked(sValue.ToBool());
PutModule(t_s("JoinAfterCloaked set"));
} else
PutModule(t_f("Unknown setting: {1}")(sSetting));
} else if (sCommand == "get" || sCommand == "list") {
CTable Table;
Table.AddColumn(t_s("Setting"));
Table.AddColumn(t_s("Value"));
Table.AddRow();
Table.SetCell(t_s("Setting"), "Username");
Table.SetCell(t_s("Value"), m_sUsername);
Table.AddRow();
Table.SetCell(t_s("Setting"), "Password");
Table.SetCell(t_s("Value"), "*****"); // m_sPassword
Table.AddRow();
Table.SetCell(t_s("Setting"), "UseCloakedHost");
Table.SetCell(t_s("Value"), CString(m_bUseCloakedHost));
Table.AddRow();
Table.SetCell(t_s("Setting"), "UseChallenge");
Table.SetCell(t_s("Value"), CString(m_bUseChallenge));
Table.AddRow();
Table.SetCell(t_s("Setting"), "RequestPerms");
Table.SetCell(t_s("Value"), CString(m_bRequestPerms));
Table.AddRow();
Table.SetCell(t_s("Setting"), "JoinOnInvite");
Table.SetCell(t_s("Value"), CString(m_bJoinOnInvite));
Table.AddRow();
Table.SetCell(t_s("Setting"), "JoinAfterCloaked");
Table.SetCell(t_s("Value"), CString(m_bJoinAfterCloaked));
PutModule(Table);
} else if (sCommand == "status") {
PutModule(IsIRCConnected() ? t_s("Connected: yes")
: t_s("Connected: no"));
PutModule(m_bCloaked ? t_s("Cloacked: yes") : t_s("Cloacked: no"));
PutModule(m_bAuthed ? t_s("Authenticated: yes")
: t_s("Authenticated: no"));
} else {
// The following commands require an IRC connection.
if (!IsIRCConnected()) {
PutModule(t_s("Error: You are not connected to IRC."));
return;
}
if (sCommand == "cloak") {
if (!m_bCloaked)
Cloak();
else
PutModule(t_s("Error: You are already cloaked!"));
} else if (sCommand == "auth") {
if (!m_bAuthed)
Auth(sLine.Token(1), sLine.Token(2));
else
PutModule(t_s("Error: You are already authed!"));
} else if (sCommand == "update") {
WhoAmI();
PutModule(t_s("Update requested."));
} else {
PutModule(t_s("Unknown command. Try 'help'."));
}
}
}
EModRet OnRaw(CString& sLine) override {
// use OnRaw because OnUserMode is not defined (yet?)
if (sLine.Token(1) == "396" &&
sLine.Token(3).find("users.quakenet.org") != CString::npos) {
m_bCloaked = true;
PutModule(t_s("Cloak successful: Your hostname is now cloaked."));
// Join channels immediately after our spoof is set, but only if
// both UseCloakedHost and JoinAfterCloaked is enabled. See #602.
if (m_bJoinAfterCloaked) {
GetNetwork()->JoinChans();
}
}
return CONTINUE;
}
EModRet OnPrivMsg(CNick& Nick, CString& sMessage) override {
return HandleMessage(Nick, sMessage);
}
EModRet OnPrivNotice(CNick& Nick, CString& sMessage) override {
return HandleMessage(Nick, sMessage);
}
EModRet OnJoining(CChan& Channel) override {
// Halt if are not already cloaked, but the user requres that we delay
// channel join till after we are cloaked.
if (!m_bCloaked && m_bUseCloakedHost && m_bJoinAfterCloaked)
return HALT;
return CONTINUE;
}
void OnJoin(const CNick& Nick, CChan& Channel) override {
if (m_bRequestPerms && IsSelf(Nick)) HandleNeed(Channel, "ov");
}
void OnDeop2(const CNick* pOpNick, const CNick& Nick, CChan& Channel,
bool bNoChange) override {
if (m_bRequestPerms && IsSelf(Nick) && (!pOpNick || !IsSelf(*pOpNick)))
HandleNeed(Channel, "o");
}
void OnDevoice2(const CNick* pOpNick, const CNick& Nick, CChan& Channel,
bool bNoChange) override {
if (m_bRequestPerms && IsSelf(Nick) && (!pOpNick || !IsSelf(*pOpNick)))
HandleNeed(Channel, "v");
}
EModRet OnInvite(const CNick& Nick, const CString& sChan) override {
if (!Nick.NickEquals("Q") ||
!Nick.GetHost().Equals("CServe.quakenet.org"))
return CONTINUE;
if (m_bJoinOnInvite) GetNetwork()->AddChan(sChan, false);
return CONTINUE;
}
CString GetWebMenuTitle() override { return "Q"; }
bool OnWebRequest(CWebSock& WebSock, const CString& sPageName,
CTemplate& Tmpl) override {
if (sPageName == "index") {
bool bSubmitted = (WebSock.GetParam("submitted").ToInt() != 0);
if (bSubmitted) {
CString FormUsername = WebSock.GetParam("user");
if (!FormUsername.empty()) SetUsername(FormUsername);
CString FormPassword = WebSock.GetParam("password");
if (!FormPassword.empty()) SetPassword(FormPassword);
SetUseCloakedHost(WebSock.GetParam("usecloakedhost").ToBool());
SetUseChallenge(WebSock.GetParam("usechallenge").ToBool());
SetRequestPerms(WebSock.GetParam("requestperms").ToBool());
SetJoinOnInvite(WebSock.GetParam("joinoninvite").ToBool());
SetJoinAfterCloaked(
WebSock.GetParam("joinaftercloaked").ToBool());
}
Tmpl["Username"] = m_sUsername;
CTemplate& o1 = Tmpl.AddRow("OptionLoop");
o1["Name"] = "usecloakedhost";
o1["DisplayName"] = "UseCloakedHost";
o1["Tooltip"] =
t_s("Whether to cloak your hostname (+x) automatically on "
"connect.");
o1["Checked"] = CString(m_bUseCloakedHost);
CTemplate& o2 = Tmpl.AddRow("OptionLoop");
o2["Name"] = "usechallenge";
o2["DisplayName"] = "UseChallenge";
o2["Tooltip"] =
t_s("Whether to use the CHALLENGEAUTH mechanism to avoid "
"sending passwords in cleartext.");
o2["Checked"] = CString(m_bUseChallenge);
CTemplate& o3 = Tmpl.AddRow("OptionLoop");
o3["Name"] = "requestperms";
o3["DisplayName"] = "RequestPerms";
o3["Tooltip"] =
t_s("Whether to request voice/op from Q on join/devoice/deop.");
o3["Checked"] = CString(m_bRequestPerms);
CTemplate& o4 = Tmpl.AddRow("OptionLoop");
o4["Name"] = "joinoninvite";
o4["DisplayName"] = "JoinOnInvite";
o4["Tooltip"] = t_s("Whether to join channels when Q invites you.");
o4["Checked"] = CString(m_bJoinOnInvite);
CTemplate& o5 = Tmpl.AddRow("OptionLoop");
o5["Name"] = "joinaftercloaked";
o5["DisplayName"] = "JoinAfterCloaked";
o5["Tooltip"] =
t_s("Whether to delay joining channels until after you are "
"cloaked.");
o5["Checked"] = CString(m_bJoinAfterCloaked);
if (bSubmitted) {
WebSock.GetSession()->AddSuccess(
t_s("Changes have been saved!"));
}
return true;
}
return false;
}
private:
bool m_bCloaked{};
bool m_bAuthed{};
bool m_bRequestedWhoami{};
bool m_bRequestedChallenge{};
bool m_bCatchResponse{};
MCString m_msChanModes;
void PutQ(const CString& sMessage) {
PutIRC("PRIVMSG Q@CServe.quakenet.org :" + sMessage);
#if Q_DEBUG_COMMUNICATION
PutModule("[ZNC --> Q] " + sMessage);
#endif
}
void Cloak() {
if (m_bCloaked) return;
PutModule(t_s("Cloak: Trying to cloak your hostname, setting +x..."));
PutIRC("MODE " + GetNetwork()->GetIRCSock()->GetNick() + " +x");
}
void WhoAmI() {
m_bRequestedWhoami = true;
PutQ("WHOAMI");
}
void Auth(const CString& sUsername = "", const CString& sPassword = "") {
if (m_bAuthed) return;
if (!sUsername.empty()) SetUsername(sUsername);
if (!sPassword.empty()) SetPassword(sPassword);
if (m_sUsername.empty() || m_sPassword.empty()) {
PutModule(
t_s("You have to set a username and password to use this "
"module! See 'help' for details."));
return;
}
if (m_bUseChallenge) {
PutModule(t_s("Auth: Requesting CHALLENGE..."));
m_bRequestedChallenge = true;
PutQ("CHALLENGE");
} else {
PutModule(t_s("Auth: Sending AUTH request..."));
PutQ("AUTH " + m_sUsername + " " + m_sPassword);
}
}
void ChallengeAuth(CString sChallenge) {
if (m_bAuthed) return;
CString sUsername = m_sUsername.AsLower()
.Replace_n("[", "{")
.Replace_n("]", "}")
.Replace_n("\\", "|");
CString sPasswordHash = m_sPassword.Left(10).SHA256();
CString sKey = CString(sUsername + ":" + sPasswordHash).SHA256();
CString sResponse = HMAC_SHA256(sKey, sChallenge);
PutModule(
t_s("Auth: Received challenge, sending CHALLENGEAUTH request..."));
PutQ("CHALLENGEAUTH " + m_sUsername + " " + sResponse +
" HMAC-SHA-256");
}
EModRet HandleMessage(const CNick& Nick, CString sMessage) {
if (!Nick.NickEquals("Q") ||
!Nick.GetHost().Equals("CServe.quakenet.org"))
return CONTINUE;
sMessage.Trim();
#if Q_DEBUG_COMMUNICATION
PutModule("[ZNC <-- Q] " + sMessage);
#endif
// WHOAMI
if (sMessage.find("WHOAMI is only available to authed users") !=
CString::npos) {
m_bAuthed = false;
Auth();
m_bCatchResponse = m_bRequestedWhoami;
} else if (sMessage.find("Information for user") != CString::npos) {
m_bAuthed = true;
m_msChanModes.clear();
m_bCatchResponse = m_bRequestedWhoami;
m_bRequestedWhoami = true;
} else if (m_bRequestedWhoami && sMessage.WildCmp("#*")) {
CString sChannel = sMessage.Token(0);
CString sFlags = sMessage.Token(1, true).Trim_n().TrimLeft_n("+");
m_msChanModes[sChannel] = sFlags;
} else if (m_bRequestedWhoami && m_bCatchResponse &&
(sMessage.Equals("End of list.") ||
sMessage.Equals(
"account, or HELLO to create an account."))) {
m_bRequestedWhoami = m_bCatchResponse = false;
return HALT;
}
// AUTH
else if (sMessage.Equals("Username or password incorrect.")) {
m_bAuthed = false;
PutModule(t_f("Authentication failed: {1}")(sMessage));
return HALT;
} else if (sMessage.WildCmp("You are now logged in as *.")) {
m_bAuthed = true;
PutModule(t_f("Authentication successful: {1}")(sMessage));
WhoAmI();
return HALT;
} else if (m_bRequestedChallenge &&
sMessage.Token(0).Equals("CHALLENGE")) {
m_bRequestedChallenge = false;
if (sMessage.find("not available once you have authed") !=
CString::npos) {
m_bAuthed = true;
} else {
if (sMessage.find("HMAC-SHA-256") != CString::npos) {
ChallengeAuth(sMessage.Token(1));
} else {
PutModule(
t_s("Auth failed: Q does not support HMAC-SHA-256 for "
"CHALLENGEAUTH, falling back to standard AUTH."));
SetUseChallenge(false);
Auth();
}
}
return HALT;
}
// prevent buffering of Q's responses
return !m_bCatchResponse && GetUser()->IsUserAttached() ? CONTINUE
: HALT;
}
void HandleNeed(const CChan& Channel, const CString& sPerms) {
MCString::iterator it = m_msChanModes.find(Channel.GetName());
if (it == m_msChanModes.end()) return;
CString sModes = it->second;
bool bMaster = (sModes.find("m") != CString::npos) ||
(sModes.find("n") != CString::npos);
if (sPerms.find("o") != CString::npos) {
bool bOp = (sModes.find("o") != CString::npos);
bool bAutoOp = (sModes.find("a") != CString::npos);
if (bMaster || bOp) {
if (!bAutoOp) {
PutModule(t_f("RequestPerms: Requesting op on {1}")(
Channel.GetName()));
PutQ("OP " + Channel.GetName());
}
return;
}
}
if (sPerms.find("v") != CString::npos) {
bool bVoice = (sModes.find("v") != CString::npos);
bool bAutoVoice = (sModes.find("g") != CString::npos);
if (bMaster || bVoice) {
if (!bAutoVoice) {
PutModule(t_f("RequestPerms: Requesting voice on {1}")(
Channel.GetName()));
PutQ("VOICE " + Channel.GetName());
}
return;
}
}
}
/* Utility Functions */
bool IsIRCConnected() {
CIRCSock* pIRCSock = GetNetwork()->GetIRCSock();
return pIRCSock && pIRCSock->IsAuthed();
}
bool IsSelf(const CNick& Nick) {
return Nick.NickEquals(GetNetwork()->GetCurNick());
}
bool PackHex(const CString& sHex, CString& sPackedHex) {
if (sHex.length() % 2) return false;
sPackedHex.clear();
CString::size_type len = sHex.length() / 2;
for (CString::size_type i = 0; i < len; i++) {
unsigned int value;
int n = sscanf(&sHex[i * 2], "%02x", &value);
if (n != 1 || value > 0xff) return false;
sPackedHex += (unsigned char)value;
}
return true;
}
CString HMAC_SHA256(const CString& sKey, const CString& sData) {
CString sRealKey;
if (sKey.length() > 64)
PackHex(sKey.SHA256(), sRealKey);
else
sRealKey = sKey;
CString sOuterKey, sInnerKey;
CString::size_type iKeyLength = sRealKey.length();
for (unsigned int i = 0; i < 64; i++) {
char r = (i < iKeyLength ? sRealKey[i] : '\0');
sOuterKey += r ^ 0x5c;
sInnerKey += r ^ 0x36;
}
CString sInnerHash;
PackHex(CString(sInnerKey + sData).SHA256(), sInnerHash);
return CString(sOuterKey + sInnerHash).SHA256();
}
/* Settings */
CString m_sUsername;
CString m_sPassword;
bool m_bUseCloakedHost{};
bool m_bUseChallenge{};
bool m_bRequestPerms{};
bool m_bJoinOnInvite{};
bool m_bJoinAfterCloaked{};
void SetUsername(const CString& sUsername) {
m_sUsername = sUsername;
SetNV("Username", sUsername);
}
void SetPassword(const CString& sPassword) {
m_sPassword = sPassword;
SetNV("Password", sPassword);
}
void SetUseCloakedHost(const bool bUseCloakedHost) {
m_bUseCloakedHost = bUseCloakedHost;
SetNV("UseCloakedHost", CString(bUseCloakedHost));
if (!m_bCloaked && m_bUseCloakedHost && IsIRCConnected()) Cloak();
}
void SetUseChallenge(const bool bUseChallenge) {
m_bUseChallenge = bUseChallenge;
SetNV("UseChallenge", CString(bUseChallenge));
}
void SetRequestPerms(const bool bRequestPerms) {
m_bRequestPerms = bRequestPerms;
SetNV("RequestPerms", CString(bRequestPerms));
}
void SetJoinOnInvite(const bool bJoinOnInvite) {
m_bJoinOnInvite = bJoinOnInvite;
SetNV("JoinOnInvite", CString(bJoinOnInvite));
}
void SetJoinAfterCloaked(const bool bJoinAfterCloaked) {
m_bJoinAfterCloaked = bJoinAfterCloaked;
SetNV("JoinAfterCloaked", CString(bJoinAfterCloaked));
}
};
template <>
void TModInfo<CQModule>(CModInfo& Info) {
Info.SetWikiPage("Q");
Info.SetHasArgs(true);
Info.SetArgsHelpText(
Info.t_s("Please provide your username and password for Q."));
}
NETWORKMODULEDEFS(CQModule, t_s("Auths you with QuakeNet's Q bot."))
+14
View File
@@ -456,6 +456,20 @@ bool CIRCNetwork::ParseConfig(CConfig* pConfig, CString& sError,
bool bModRet = LoadModule(sModName, sArgs, sNotice, sModRet);
if (!bModRet) {
// Q is removed in znc 1.8
if (sModName == "q") {
CUtils::PrintError(
"NOTICE: [q] is unavailable, cannot load.");
CUtils::PrintError(
"NOTICE: [q] is removed in this release of ZNC. Please "
"either remove it from your config or install it as a "
"third party module with the same name.");
CUtils::PrintError(
"NOTICE: More info can be found on "
"https://wiki.znc.in/Q");
return false;
}
// XXX The awaynick module was retired in 1.6 (still available
// as external module)
if (sModName == "awaynick") {