3
0
mirror of https://github.com/ergochat/ergo.git synced 2024-12-21 18:22:47 +01:00

Ignore some dodgy TL strings, fix another dodgy string

This commit is contained in:
Daniel Oaks 2020-06-16 20:33:10 +10:00
parent 250076a132
commit fb55cc3390
5 changed files with 53 additions and 5 deletions

View File

@ -249,7 +249,7 @@ func csAmodeHandler(server *Server, client *Client, command string, params []str
}
case modes.Add, modes.Remove:
if len(affectedModes) > 0 {
csNotice(rb, fmt.Sprintf(client.t("Successfully set persistent mode %s%s on %s"), string(change.Op), string(change.Mode), change.Arg))
csNotice(rb, fmt.Sprintf(client.t("Successfully set persistent mode %[1]s on %[2]s"), strings.Join([]string{string(change.Op), string(change.Mode)}, ""), change.Arg))
// #729: apply change to current membership
for _, member := range channel.Members() {
if member.Account() == change.Arg {

View File

@ -15,6 +15,7 @@
"DEBUG <option>\n\nProvides various debugging commands for the IRCd. <option> can be one of:\n\n* GCSTATS: Garbage control statistics.\n* NUMGOROUTINE: Number of goroutines in use.\n* STARTCPUPROFILE: Starts the CPU profiler.\n* STOPCPUPROFILE: Stops the CPU profiler.\n* PROFILEHEAP: Writes a memory profile.\n* CRASHSERVER: Crashes the server (for use in failover testing)": "DEBUG <option>\n\nProvides various debugging commands for the IRCd. <option> can be one of:\n\n* GCSTATS: Garbage control statistics.\n* NUMGOROUTINE: Number of goroutines in use.\n* STARTCPUPROFILE: Starts the CPU profiler.\n* STOPCPUPROFILE: Stops the CPU profiler.\n* PROFILEHEAP: Writes a memory profile.\n* CRASHSERVER: Crashes the server (for use in failover testing)",
"DEOPER\n\nDEOPER removes the IRCop privileges granted to you by a successful /OPER.": "DEOPER\n\nDEOPER removes the IRCop privileges granted to you by a successful /OPER.",
"DLINE [ANDKILL] [MYSELF] [duration] <ip>/<net> [ON <server>] [reason [| oper reason]]\nDLINE LIST\n\nBans an IP address or network from connecting to the server. If the duration is\ngiven then only for that long. The reason is shown to the user themselves, but\neveryone else will see a standard message. The oper reason is shown to\noperators getting info about the DLINEs that exist.\n\nBans are saved across subsequent launches of the server.\n\n\"ANDKILL\" means that all matching clients are also removed from the server.\n\n\"MYSELF\" is required when the DLINE matches the address the person applying it is connected\nfrom. If \"MYSELF\" is not given, trying to DLINE yourself will result in an error.\n\n[duration] can be of the following forms:\n\t1y 12mo 31d 10h 8m 13s\n\n<net> is specified in typical CIDR notation. For example:\n\t127.0.0.1/8\n\t8.8.8.8/24\n\nON <server> specifies that the ban is to be set on that specific server.\n\n[reason] and [oper reason], if they exist, are separated by a vertical bar (|).\n\nIf \"DLINE LIST\" is sent, the server sends back a list of our current DLINEs.": "DLINE [ANDKILL] [MYSELF] [duration] <ip>/<net> [ON <server>] [reason [| oper reason]]\nDLINE LIST\n\nBans an IP address or network from connecting to the server. If the duration is\ngiven then only for that long. The reason is shown to the user themselves, but\neveryone else will see a standard message. The oper reason is shown to\noperators getting info about the DLINEs that exist.\n\nBans are saved across subsequent launches of the server.\n\n\"ANDKILL\" means that all matching clients are also removed from the server.\n\n\"MYSELF\" is required when the DLINE matches the address the person applying it is connected\nfrom. If \"MYSELF\" is not given, trying to DLINE yourself will result in an error.\n\n[duration] can be of the following forms:\n\t1y 12mo 31d 10h 8m 13s\n\n<net> is specified in typical CIDR notation. For example:\n\t127.0.0.1/8\n\t8.8.8.8/24\n\nON <server> specifies that the ban is to be set on that specific server.\n\n[reason] and [oper reason], if they exist, are separated by a vertical bar (|).\n\nIf \"DLINE LIST\" is sent, the server sends back a list of our current DLINEs.",
"EXTJWT <target> [service_name]\n\nGet a JSON Web Token for target (either * or a channel name).": "EXTJWT <target> [service_name]\n\nGet a JSON Web Token for target (either * or a channel name).",
"HELP <argument>\n\nGet an explanation of <argument>, or \"index\" for a list of help topics.": "HELP <argument>\n\nGet an explanation of <argument>, or \"index\" for a list of help topics.",
"HELPOP <argument>\n\nGet an explanation of <argument>, or \"index\" for a list of help topics.": "HELPOP <argument>\n\nGet an explanation of <argument>, or \"index\" for a list of help topics.",
"HISTORY <target> [limit]\n\nReplay message history. <target> can be a channel name, \"me\" to replay direct\nmessage history, or a nickname to replay another client's direct message\nhistory (they must be logged into the same account as you). [limit] can be\neither an integer (the maximum number of messages to replay), or a time\nduration like 10m or 1h (the time window within which to replay messages).": "HISTORY <target> [limit]\n\nReplay message history. <target> can be a channel name, \"me\" to replay direct\nmessage history, or a nickname to replay another client's direct message\nhistory (they must be logged into the same account as you). [limit] can be\neither an integer (the maximum number of messages to replay), or a time\nduration like 10m or 1h (the time window within which to replay messages).",
@ -53,12 +54,14 @@
"SANICK <currentnick> <newnick>\n\nGives the given user a new nickname.": "SANICK <currentnick> <newnick>\n\nGives the given user a new nickname.",
"SCENE <target> <text to be sent>\n\nThe SCENE command is used to send a scene notification to the given target.": "SCENE <target> <text to be sent>\n\nThe SCENE command is used to send a scene notification to the given target.",
"SETNAME <realname>\n\nThe SETNAME command updates the realname to be the newly-given one.": "SETNAME <realname>\n\nThe SETNAME command updates the realname to be the newly-given one.",
"SUMMON [parameters]\n\nThe SUMMON command is not implemented.": "SUMMON [parameters]\n\nThe SUMMON command is not implemented.",
"TIME [server]\n\nShows the time of the current, or the given, server.": "TIME [server]\n\nShows the time of the current, or the given, server.",
"TOPIC <channel> [topic]\n\nIf [topic] is given, sets the topic in the channel to that. If [topic] is not\ngiven, views the current topic on the channel.": "TOPIC <channel> [topic]\n\nIf [topic] is given, sets the topic in the channel to that. If [topic] is not\ngiven, views the current topic on the channel.",
"UNDLINE <ip>/<net>\n\nRemoves an existing ban on an IP address or a network.\n\n<net> is specified in typical CIDR notation. For example:\n\t127.0.0.1/8\n\t8.8.8.8/24": "UNDLINE <ip>/<net>\n\nRemoves an existing ban on an IP address or a network.\n\n<net> is specified in typical CIDR notation. For example:\n\t127.0.0.1/8\n\t8.8.8.8/24",
"UNKLINE <mask>\n\nRemoves an existing ban on a mask.\n\nFor example:\n\tdan\n\tdan!5*@127.*": "UNKLINE <mask>\n\nRemoves an existing ban on a mask.\n\nFor example:\n\tdan\n\tdan!5*@127.*",
"USER <username> 0 * <realname>\n\nUsed in connection registration, sets your username and realname to the given\nvalues (though your username may also be looked up with Ident).": "USER <username> 0 * <realname>\n\nUsed in connection registration, sets your username and realname to the given\nvalues (though your username may also be looked up with Ident).",
"USERHOST <nickname>{ <nickname>}\n\t\t\nShows information about the given users. Takes up to 10 nicknames.": "USERHOST <nickname>{ <nickname>}\n\t\t\nShows information about the given users. Takes up to 10 nicknames.",
"USERS [parameters]\n\nThe USERS command is not implemented.": "USERS [parameters]\n\nThe USERS command is not implemented.",
"VERSION [server]\n\nViews the version of software and the RPL_ISUPPORT tokens for the given server.": "VERSION [server]\n\nViews the version of software and the RPL_ISUPPORT tokens for the given server.",
"WEBIRC <password> <gateway> <hostname> <ip> [:<flags>]\n\nUsed by web<->IRC gateways and bouncers, the WEBIRC command allows gateways to\npass-through the real IP addresses of clients:\nircv3.net/specs/extensions/webirc.html\n\n<flags> is a list of space-separated strings indicating various details about\nthe connection from the client to the gateway, such as:\n\n- tls: this flag indicates that the client->gateway connection is secure": "WEBIRC <password> <gateway> <hostname> <ip> [:<flags>]\n\nUsed by web<->IRC gateways and bouncers, the WEBIRC command allows gateways to\npass-through the real IP addresses of clients:\nircv3.net/specs/extensions/webirc.html\n\n<flags> is a list of space-separated strings indicating various details about\nthe connection from the client to the gateway, such as:\n\n- tls: this flag indicates that the client->gateway connection is secure",
"WHO <name> [o]\n\nReturns information for the given user.": "WHO <name> [o]\n\nReturns information for the given user.",

View File

@ -95,6 +95,7 @@
"Could not accept ownership of channel %s": "Could not accept ownership of channel %s",
"Could not delete message": "Could not delete message",
"Could not find given client": "Could not find given client",
"Could not generate EXTJWT token": "Could not generate EXTJWT token",
"Could not look up account name, proceeding anyway": "Could not look up account name, proceeding anyway",
"Could not parse IP address or CIDR network": "Could not parse IP address or CIDR network",
"Could not register": "Could not register",
@ -109,6 +110,7 @@
"Current global users %[1]s, max %[2]s": "Current global users %[1]s, max %[2]s",
"Current local users %[1]s, max %[2]s": "Current local users %[1]s, max %[2]s",
"Data export for %[1]s completed and written to %[2]s": "Data export for %[1]s completed and written to %[2]s",
"Device ID: %s": "Device ID: %s",
"End of /HELPOP": "End of /HELPOP",
"End of /INFO": "End of /INFO",
"End of /WHOIS list": "End of /WHOIS list",
@ -165,6 +167,7 @@
"Invalid params": "Invalid params",
"Invalid regex": "Invalid regex",
"Invalid vhost": "Invalid vhost",
"It was built from git hash %s.": "It was built from git hash %s.",
"It was rejected for reason: %s": "It was rejected for reason: %s",
"JOIN 0 is not allowed": "JOIN 0 is not allowed",
"Language %s is not supported by this server": "Language %s is not supported by this server",
@ -189,6 +192,7 @@
"No such channel": "No such channel",
"No such module [%s]": "No such module [%s]",
"No such nick": "No such nick",
"No such service": "No such service",
"No such setting": "No such setting",
"No text to send": "No text to send",
"No topic is set": "No topic is set",
@ -228,6 +232,7 @@
"SASL authentication failed: Passphrase too long": "SASL authentication failed: Passphrase too long",
"SASL authentication failed: authcid and authzid should be the same": "SASL authentication failed: authcid and authzid should be the same",
"SASL message too long": "SASL message too long",
"SUMMON has been disabled": "SUMMON has been disabled",
"Server notice masks": "Server notice masks",
"Session %d (currently attached session):": "Session %d (currently attached session):",
"Session %d:": "Session %d:",
@ -247,7 +252,7 @@
"Successfully registered account %s": "Successfully registered account %s",
"Successfully rejected vhost request for %s": "Successfully rejected vhost request for %s",
"Successfully reset channel access": "Successfully reset channel access",
"Successfully set persistent mode %s%s on %s": "Successfully set persistent mode %s%s on %s",
"Successfully set persistent mode %[1]s on %[2]s": "Successfully set persistent mode %[1]s on %[2]s",
"Successfully set vhost": "Successfully set vhost",
"Successfully transferred channel %[1]s to account %[2]s": "Successfully transferred channel %[1]s to account %[2]s",
"Successfully ungrouped nick %s with your account": "Successfully ungrouped nick %s with your account",
@ -272,6 +277,7 @@
"This ban matches you. To KLINE yourself, you must use the command: /KLINE MYSELF <arguments>": "This ban matches you. To KLINE yourself, you must use the command: /KLINE MYSELF <arguments>",
"This command has been disabled by the server administrators": "This command has been disabled by the server administrators",
"This feature has been disabled by the server administrators": "This feature has been disabled by the server administrators",
"This is Oragono version %s.": "This is Oragono version %s.",
"This server is in debug mode and is logging all user I/O. If you do not wish for everything you send to be readable by the server owner(s), please disconnect.": "This server is in debug mode and is logging all user I/O. If you do not wish for everything you send to be readable by the server owner(s), please disconnect.",
"This server requires that you wait %v after connecting before you can use /LIST. You have %v left.": "This server requires that you wait %v after connecting before you can use /LIST. You have %v left.",
"This server was created %s": "This server was created %s",
@ -285,6 +291,7 @@
"Transfer of channel %[1]s to account %[2]s succeeded, pending acceptance": "Transfer of channel %[1]s to account %[2]s succeeded, pending acceptance",
"Translators:": "Translators:",
"Try again later": "Try again later",
"USERS has been disabled": "USERS has been disabled",
"Unknown command": "Unknown command",
"Unknown command. To see available commands, run: /%s HELP": "Unknown command. To see available commands, run: /%s HELP",
"Unknown subcommand": "Unknown subcommand",

View File

@ -6,7 +6,7 @@
"$bCERT$b controls a user account's certificate fingerprints": "$bCERT$b controls a user account's certificate fingerprints",
"$bDM-HISTORY$b\n'dm-history' is only effective for always-on clients. It lets you control\nhow the history of your direct messages is stored. Your options are:\n1. 'off' [no history]\n2. 'ephemeral' [a limited amount of temporary history, not stored on disk]\n3. 'on' [history stored in a permanent database, if available]\n4. 'default' [use the server default]": "$bDM-HISTORY$b\n'dm-history' is only effective for always-on clients. It lets you control\nhow the history of your direct messages is stored. Your options are:\n1. 'off' [no history]\n2. 'ephemeral' [a limited amount of temporary history, not stored on disk]\n3. 'on' [history stored in a permanent database, if available]\n4. 'default' [use the server default]",
"$bDROP$b de-links your current (or the given) nickname from your user account.": "$bDROP$b de-links your current (or the given) nickname from your user account.",
"$bENFORCE$b\n'enforce' lets you specify a custom enforcement mechanism for your registered\nnicknames. Your options are:\n1. 'none' [no enforcement, overriding the server default]\n2. 'timeout' [anyone using the nick must authenticate before a deadline,\n or else they will be renamed]\n3. 'strict' [you must already be authenticated to use the nick]\n4. 'default' [use the server default]": "$bENFORCE$b\n'enforce' lets you specify a custom enforcement mechanism for your registered\nnicknames. Your options are:\n1. 'none' [no enforcement, overriding the server default]\n2. 'timeout' [anyone using the nick must authenticate before a deadline,\n or else they will be renamed]\n3. 'strict' [you must already be authenticated to use the nick]\n4. 'default' [use the server default]",
"$bENFORCE$b\n'enforce' lets you specify a custom enforcement mechanism for your registered\nnicknames. Your options are:\n1. 'none' [no enforcement, overriding the server default]\n or else they will be renamed]\n2. 'strict' [you must already be authenticated to use the nick]\n3. 'default' [use the server default]": "$bENFORCE$b\n'enforce' lets you specify a custom enforcement mechanism for your registered\nnicknames. Your options are:\n1. 'none' [no enforcement, overriding the server default]\n or else they will be renamed]\n2. 'strict' [you must already be authenticated to use the nick]\n3. 'default' [use the server default]",
"$bERASE$b erases all records of an account, allowing reuse.": "$bERASE$b erases all records of an account, allowing reuse.",
"$bGET$b queries the current values of your account settings": "$bGET$b queries the current values of your account settings",
"$bGHOST$b reclaims your nickname.": "$bGHOST$b reclaims your nickname.",
@ -51,6 +51,5 @@
"Syntax: $bSESSIONS [nickname]$b\n\nSESSIONS lists information about the sessions currently attached, via\nthe server's multiclient functionality, to your nickname. An administrator\ncan use this command to list another user's sessions.": "Syntax: $bSESSIONS [nickname]$b\n\nSESSIONS lists information about the sessions currently attached, via\nthe server's multiclient functionality, to your nickname. An administrator\ncan use this command to list another user's sessions.",
"Syntax: $bUNREGISTER <username> [code]$b\n\nUNREGISTER lets you delete your user account (or someone else's, if you're an\nIRC operator with the correct permissions). To prevent accidental\nunregistrations, a verification code is required; invoking the command without\na code will display the necessary code.": "Syntax: $bUNREGISTER <username> [code]$b\n\nUNREGISTER lets you delete your user account (or someone else's, if you're an\nIRC operator with the correct permissions). To prevent accidental\nunregistrations, a verification code is required; invoking the command without\na code will display the necessary code.",
"Syntax: $bVERIFY <username> <code>$b\n\nVERIFY lets you complete an account registration, if the server requires email\nor other verification.": "Syntax: $bVERIFY <username> <code>$b\n\nVERIFY lets you complete an account registration, if the server requires email\nor other verification.",
"This nickname is reserved. Please login within %v (using $b/msg NickServ IDENTIFY <password>$b or SASL), or switch to a different nickname.": "This nickname is reserved. Please login within %v (using $b/msg NickServ IDENTIFY <password>$b or SASL), or switch to a different nickname.",
"You're not logged into an account": "You're not logged into an account",
"You're not logged into an account": "You're not logged into an account"
}

View File

@ -31,6 +31,10 @@ import json
from docopt import docopt
import yaml
ignored_strings = [
'none', 'saset'
]
if __name__ == '__main__':
arguments = docopt(__doc__, version="0.1.0")
@ -54,6 +58,13 @@ if __name__ == '__main__':
if match not in irc_strings:
irc_strings.append(match)
for s in ignored_strings:
try:
irc_strings.remove(s)
except ValueError:
# ignore any that don't exist
...
print("irc strings:", len(irc_strings))
with open(os.path.join(arguments['<languages-dir>'], 'example', 'irc.lang.json'), 'w') as f:
f.write(json.dumps({k:k for k in irc_strings}, sort_keys=True, indent=2, separators=(',', ': ')))
@ -77,6 +88,13 @@ if __name__ == '__main__':
if '\n' in match and match not in help_strings:
help_strings.append(match)
for s in ignored_strings:
try:
help_strings.remove(s)
except ValueError:
# ignore any that don't exist
...
print("help strings:", len(help_strings))
with open(os.path.join(arguments['<languages-dir>'], 'example', 'help.lang.json'), 'w') as f:
f.write(json.dumps({k:k for k in help_strings}, sort_keys=True, indent=2, separators=(',', ': ')))
@ -100,6 +118,13 @@ if __name__ == '__main__':
if match not in help_strings:
help_strings.append(match)
for s in ignored_strings:
try:
help_strings.remove(s)
except ValueError:
# ignore any that don't exist
...
print("nickserv help strings:", len(help_strings))
with open(os.path.join(arguments['<languages-dir>'], 'example', 'nickserv.lang.json'), 'w') as f:
f.write(json.dumps({k:k for k in help_strings}, sort_keys=True, indent=2, separators=(',', ': ')))
@ -123,6 +148,13 @@ if __name__ == '__main__':
if match not in help_strings:
help_strings.append(match)
for s in ignored_strings:
try:
help_strings.remove(s)
except ValueError:
# ignore any that don't exist
...
print("chanserv help strings:", len(help_strings))
with open(os.path.join(arguments['<languages-dir>'], 'example', 'chanserv.lang.json'), 'w') as f:
f.write(json.dumps({k:k for k in help_strings}, sort_keys=True, indent=2, separators=(',', ': ')))
@ -146,6 +178,13 @@ if __name__ == '__main__':
if match not in help_strings:
help_strings.append(match)
for s in ignored_strings:
try:
help_strings.remove(s)
except ValueError:
# ignore any that don't exist
...
print("hostserv help strings:", len(help_strings))
with open(os.path.join(arguments['<languages-dir>'], 'example', 'hostserv.lang.json'), 'w') as f:
f.write(json.dumps({k:k for k in help_strings}, sort_keys=True, indent=2, separators=(',', ': ')))