From eaf0ce0f597408620f03b07292bee635924aa2d4 Mon Sep 17 00:00:00 2001 From: Valentin Lorentz Date: Sun, 20 Nov 2022 20:27:36 +0100 Subject: [PATCH 01/69] Add IrcState.nicksToAccount To keep track of network accounts using various IRCv3 specs --- src/irclib.py | 57 +++++++++++++++++++++++++- test/test_irclib.py | 99 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 154 insertions(+), 2 deletions(-) diff --git a/src/irclib.py b/src/irclib.py index 6929ebb70..dc043cc5a 100644 --- a/src/irclib.py +++ b/src/irclib.py @@ -680,6 +680,12 @@ class IrcState(IrcCommandDispatcher, log.Firewalled): Stores the last hostmask of a seen nick. + :type: ircutils.IrcDict[str, str] + + .. attribute:: nicksToAccounts + + Stores the current network account name of a seen nick. + :type: ircutils.IrcDict[str, str] """ __firewalled__ = {'addMsg': None} @@ -689,7 +695,8 @@ class IrcState(IrcCommandDispatcher, log.Firewalled): nicksToHostmasks=None, channels=None, capabilities_req=None, capabilities_ack=None, capabilities_nak=None, - capabilities_ls=None): + capabilities_ls=None, + nicksToAccounts=None): self.fsm = IrcStateFsm() if history is None: history = RingBuffer(conf.supybot.protocols.irc.maxHistoryLength()) @@ -697,6 +704,8 @@ class IrcState(IrcCommandDispatcher, log.Firewalled): supported = utils.InsensitivePreservingDict() if nicksToHostmasks is None: nicksToHostmasks = ircutils.IrcDict() + if nicksToAccounts is None: + nicksToAccounts = ircutils.IrcDict() if channels is None: channels = ircutils.IrcDict() self.capabilities_req = capabilities_req or set() @@ -708,6 +717,7 @@ class IrcState(IrcCommandDispatcher, log.Firewalled): self.history = history self.channels = channels self.nicksToHostmasks = nicksToHostmasks + self.nicksToAccounts = nicksToAccounts # Batches usually finish and are way shorter than 3600s, but # we need to: @@ -725,6 +735,7 @@ class IrcState(IrcCommandDispatcher, log.Firewalled): self.channels.clear() self.supported.clear() self.nicksToHostmasks.clear() + self.nicksToAccounts.clear() self.capabilities_req = set() self.capabilities_ack = set() self.capabilities_nak = set() @@ -745,13 +756,16 @@ class IrcState(IrcCommandDispatcher, log.Firewalled): def __reduce__(self): return (self.__class__, (self.history, self.supported, - self.nicksToHostmasks, self.channels)) + self.nicksToHostmasks, + self.nicksToAccounts, + self.channels)) def __eq__(self, other): return self.history == other.history and \ self.channels == other.channels and \ self.supported == other.supported and \ self.nicksToHostmasks == other.nicksToHostmasks and \ + self.nicksToAccounts == other.nicksToAccounts and \ self.batches == other.batches def __ne__(self, other): @@ -761,6 +775,7 @@ class IrcState(IrcCommandDispatcher, log.Firewalled): ret = self.__class__() ret.history = copy.deepcopy(self.history) ret.nicksToHostmasks = copy.deepcopy(self.nicksToHostmasks) + ret.nicksToAccounts = copy.deepcopy(self.nicksToAccounts) ret.channels = copy.deepcopy(self.channels) ret.batches = copy.deepcopy(self.batches) return ret @@ -770,6 +785,8 @@ class IrcState(IrcCommandDispatcher, log.Firewalled): self.history.append(msg) if ircutils.isUserHostmask(msg.prefix) and not msg.command == 'NICK': self.nicksToHostmasks[msg.nick] = msg.prefix + if 'account' in msg.server_tags: + self.nicksToAccounts[msg.nick] = msg.server_tags['account'] if 'batch' in msg.server_tags: batch_name = msg.server_tags['batch'] assert batch_name in self.batches, \ @@ -788,6 +805,11 @@ class IrcState(IrcCommandDispatcher, log.Firewalled): """Returns the hostmask for a given nick.""" return self.nicksToHostmasks[nick] + def nickToAccount(self, nick): + """Returns the account for a given nick, or None if the nick is logged + out.""" + return self.nicksToAccounts[nick] + def getParentBatches(self, msg): """Given an IrcMsg, returns a list of all batches that contain it, innermost first. @@ -957,6 +979,11 @@ class IrcState(IrcCommandDispatcher, log.Firewalled): (n, t, user, ip, host, nick, status, account, gecos) = msg.args hostmask = '%s!%s@%s' % (nick, user, host) self.nicksToHostmasks[nick] = hostmask + if account == '0': + # logged out + self.nicksToAccounts[nick] = None + else: + self.nicksToAccounts[nick] = account def do353(self, irc, msg): # NAMES reply. @@ -978,6 +1005,7 @@ class IrcState(IrcCommandDispatcher, log.Firewalled): stripped_item = item.lstrip(prefix_chars) item_prefix = item[0:-len(stripped_item)] if ircutils.isUserHostmask(stripped_item): + # https://ircv3.net/specs/extensions/userhost-in-names nick = ircutils.nickFromHostmask(stripped_item) self.nicksToHostmasks[nick] = stripped_item name = item_prefix + nick @@ -989,11 +1017,20 @@ class IrcState(IrcCommandDispatcher, log.Firewalled): c.modes['s'] = None def doChghost(self, irc, msg): + # https://ircv3.net/specs/extensions/chghost (user, host) = msg.args nick = msg.nick hostmask = '%s!%s@%s' % (nick, user, host) self.nicksToHostmasks[nick] = hostmask + def doAccount(self, irc, msg): + # https://ircv3.net/specs/extensions/account-notify + account = msg.args[0] + if account == '*': + self.nicksToAccounts[msg.nick] = None + else: + self.nicksToAccounts[msg.nick] = account + def doJoin(self, irc, msg): for channel in msg.args[0].split(','): if channel in self.channels: @@ -1004,6 +1041,12 @@ class IrcState(IrcCommandDispatcher, log.Firewalled): self.channels[channel] = chan # I don't know why this assert was here. #assert msg.nick == irc.nick, msg + if 'extended-join' in self.capabilities_ack: + account = msg.args[1] + if account == '*': + self.nicksToAccounts[msg.nick] = None + else: + self.nicksToAccounts[msg.nick] = account def do367(self, irc, msg): # Example: @@ -1083,6 +1126,8 @@ class IrcState(IrcCommandDispatcher, log.Firewalled): if msg.nick in self.nicksToHostmasks: # If we're quitting, it may not be. del self.nicksToHostmasks[msg.nick] + if msg.nick in self.nicksToAccounts: + del self.nicksToAccounts[msg.nick] def doTopic(self, irc, msg): if len(msg.args) == 1: @@ -1100,6 +1145,7 @@ class IrcState(IrcCommandDispatcher, log.Firewalled): def doNick(self, irc, msg): newNick = msg.args[0] oldNick = msg.nick + try: if msg.user and msg.host: # Nick messages being handed out from the bot itself won't @@ -1109,6 +1155,13 @@ class IrcState(IrcCommandDispatcher, log.Firewalled): del self.nicksToHostmasks[oldNick] except KeyError: pass + + try: + self.nicksToAccounts[newNick] = self.nicksToAccounts[oldNick] + del self.nicksToAccounts[oldNick] + except KeyError: + pass + channel_names = ircutils.IrcSet() for (name, channel) in self.channels.items(): if msg.nick in channel.users: diff --git a/test/test_irclib.py b/test/test_irclib.py index fdad88159..703d6f5fd 100644 --- a/test/test_irclib.py +++ b/test/test_irclib.py @@ -579,6 +579,105 @@ class IrcStateTestCase(SupyTestCase): command='CHGHOST', args=['bar2', 'baz2'])) self.assertEqual(st.nickToHostmask('foo'), 'foo!bar2@baz2') + def testNickToAccountBaseJoin(self): + st = irclib.IrcState() + + st.addMsg(self.irc, ircmsgs.join('#foo', prefix='foo!bar@baz')) + st.addMsg(self.irc, ircmsgs.join('#foo', prefix='bar!baz@qux')) + with self.assertRaises(KeyError): + st.nickToAccount('foo') + st.nickToAccount('bar') + + + def testNickToAccountExtendedJoin(self): + st = irclib.IrcState() + st.capabilities_ack.add('extended-join') + + st.addMsg(self.irc, ircmsgs.IrcMsg( + command='JOIN', prefix='foo!bar@baz', + args=['#foo', 'account1', 'real name1'])) + st.addMsg(self.irc, ircmsgs.IrcMsg( + command='JOIN', prefix='bar!baz@qux', + args=['#foo', 'account2', 'real name2'])) + st.addMsg(self.irc, ircmsgs.IrcMsg( + command='JOIN', prefix='baz!qux@quux', + args=['#foo', '*', 'real name3'])) + self.assertEqual(st.nickToAccount('foo'), 'account1') + self.assertEqual(st.nickToAccount('bar'), 'account2') + self.assertIsNone(st.nickToAccount('baz')) + with self.assertRaises(KeyError): + st.nickToAccount('qux') + + # QUIT erases the entry + with self.subTest("QUIT"): + st2 = st.copy() + st2.addMsg(self.irc, ircmsgs.quit(prefix='foo!bar@baz')) + with self.assertRaises(KeyError): + st2.nickToAccount('foo') + self.assertEqual(st2.nickToAccount('bar'), 'account2') + self.assertEqual(st.nickToAccount('foo'), 'account1') + self.assertEqual(st.nickToAccount('bar'), 'account2') + + # NICK moves the entry + with self.subTest("NICK"): + st2 = st.copy() + st2.addMsg(self.irc, ircmsgs.IrcMsg(prefix='foo!bar@baz', + command='NICK', args=['foo2'])) + with self.assertRaises(KeyError): + st2.nickToAccount('foo') + self.assertEqual(st2.nickToAccount('foo2'), 'account1') + self.assertEqual(st2.nickToAccount('bar'), 'account2') + self.assertEqual(st.nickToAccount('foo'), 'account1') + self.assertEqual(st.nickToAccount('bar'), 'account2') + + # NICK moves the entry (and overwrites if needed) + with self.subTest("NICK with overwrite"): + st2 = st.copy() + st2.addMsg(self.irc, ircmsgs.IrcMsg(prefix='foo!bar@baz', + command='NICK', args=['bar'])) + with self.assertRaises(KeyError): + st2.nickToAccount('foo') + self.assertEqual(st2.nickToAccount('bar'), 'account1') + self.assertEqual(st.nickToAccount('foo'), 'account1') + self.assertEqual(st.nickToAccount('bar'), 'account2') + + def testNickToAccountWho(self): + st = irclib.IrcState() + + st.addMsg(self.irc, ircmsgs.IrcMsg(command='352', # RPL_WHOREPLY + args=[self.irc.nick, '#chan', 'bar', 'baz', 'server.example', + 'foo', 'H', '0 real name'])) + with self.assertRaises(KeyError): + st.nickToAccount('foo') + + def testNickToAccountWhox(self): + st = irclib.IrcState() + + st.addMsg(self.irc, ircmsgs.IrcMsg(command='354', # RPL_WHOSPCRPL + args=[self.irc.nick, '1', 'bar', '127.0.0.1', 'baz', + 'foo', 'H', 'account1', 'real name'])) + self.assertEqual(st.nickToAccount('foo'), 'account1') + + st.addMsg(self.irc, ircmsgs.IrcMsg(command='354', # RPL_WHOSPCRPL + args=[self.irc.nick, '1', 'bar', '127.0.0.1', 'baz', + 'foo', 'H', '0', 'real name'])) + self.assertIsNone(st.nickToAccount('foo')) + + def testAccountNotify(self): + st = irclib.IrcState() + + st.addMsg(self.irc, ircmsgs.IrcMsg(prefix='foo!bar@baz', + command='ACCOUNT', args=['account1'])) + self.assertEqual(st.nickToAccount('foo'), 'account1') + + st.addMsg(self.irc, ircmsgs.IrcMsg(prefix='foo!bar@baz', + command='ACCOUNT', args=['account2'])) + self.assertEqual(st.nickToAccount('foo'), 'account2') + + st.addMsg(self.irc, ircmsgs.IrcMsg(prefix='foo!bar@baz', + command='ACCOUNT', args=['*'])) + self.assertIsNone(st.nickToAccount('foo')) + def testEq(self): state1 = irclib.IrcState() state2 = irclib.IrcState() From 5056f2e6ef18d98bc1a95b55625e423edf35ffea Mon Sep 17 00:00:00 2001 From: Valentin Lorentz Date: Wed, 23 Nov 2022 18:50:19 +0100 Subject: [PATCH 02/69] core & Channel: Add option --account to @kban and @iban A future commit will add support for 'account' in supybot.protocols.irc.banmask, but it is not supported for now, as that config value is also used for ignore masks --- plugins/Channel/plugin.py | 10 +++++-- plugins/Channel/test.py | 63 +++++++++++++++++++++++++++++++++++++++ src/conf.py | 14 ++++++++- src/ircutils.py | 19 ++++++++++++ test/test_ircutils.py | 54 +++++++++++++++++++++++++++++++++ 5 files changed, 157 insertions(+), 3 deletions(-) diff --git a/plugins/Channel/plugin.py b/plugins/Channel/plugin.py index 26ad62501..e6d24fcae 100644 --- a/plugins/Channel/plugin.py +++ b/plugins/Channel/plugin.py @@ -321,13 +321,16 @@ class Channel(callbacks.Plugin): --exact bans only the exact hostmask; --nick bans just the nick; --user bans just the user, and --host bans just the host You can combine the --nick, --user, and --host options as you choose. + If --account is provided and the user is logged in and the network + supports account bans, this will ban the user's account instead. is only necessary if the message isn't sent in the channel itself. """ self._ban(irc, msg, args, channel, optlist, bannedNick, expiry, reason, True) kban = wrap(kban, ['op', - getopts({'exact':'', 'nick':'', 'user':'', 'host':''}), + getopts({'exact':'', 'nick':'', 'user':'', 'host':'', + 'account': ''}), ('haveHalfop+', _('kick or ban someone')), 'nickInChannel', optional('expiry', 0), @@ -343,13 +346,16 @@ class Channel(callbacks.Plugin): don't specify a number of seconds) it will ban the person indefinitely. --exact can be used to specify an exact hostmask. You can combine the --nick, --user, and --host options as you choose. + If --account is provided and the user is logged in and the network + supports account bans, this will ban the user's account instead. is only necessary if the message isn't sent in the channel itself. """ self._ban(irc, msg, args, channel, optlist, bannedNick, expiry, None, False) iban = wrap(iban, ['op', - getopts({'exact':'', 'nick':'', 'user':'', 'host':''}), + getopts({'exact':'', 'nick':'', 'user':'', 'host':'', + 'account': ''}), ('haveHalfop+', _('ban someone')), first('nick', 'hostmask'), optional('expiry', 0)]) diff --git a/plugins/Channel/test.py b/plugins/Channel/test.py index 4295ef081..f091cae88 100644 --- a/plugins/Channel/test.py +++ b/plugins/Channel/test.py @@ -219,6 +219,69 @@ class ChannelTestCase(ChannelPluginTestCase): self.assertRegexp('kban adlkfajsdlfkjsd', 'adlkfajsdlfkjsd is not in') + def testAccountKbanNoAccount(self): + self.irc.prefix = 'something!else@somehwere.else' + self.irc.nick = 'something' + self.irc.state.supported['ACCOUNTEXTBAN'] = 'a,account' + self.irc.state.supported['EXTBAN'] = '~,abc' + def join(): + self.irc.feedMsg(ircmsgs.join( + self.channel, prefix='foobar!user@host.domain.tld')) + join() + self.irc.feedMsg(ircmsgs.op(self.channel, self.irc.nick)) + self.assertKban('kban --account --exact foobar', + 'foobar!user@host.domain.tld') + join() + self.assertKban('kban --account foobar', + 'foobar!user@host.domain.tld') + join() + self.assertKban('kban --account --host foobar', + '*!*@host.domain.tld') + + def testAccountKbanLoggedOut(self): + self.irc.prefix = 'something!else@somehwere.else' + self.irc.nick = 'something' + self.irc.state.supported['ACCOUNTEXTBAN'] = 'a,account' + self.irc.state.supported['EXTBAN'] = '~,abc' + self.irc.feedMsg(ircmsgs.IrcMsg( + prefix='foobar!user@host.domain.tld', + command='ACCOUNT', args=['*'])) + def join(): + self.irc.feedMsg(ircmsgs.join( + self.channel, prefix='foobar!user@host.domain.tld')) + join() + self.irc.feedMsg(ircmsgs.op(self.channel, self.irc.nick)) + self.assertKban('kban --account --exact foobar', + 'foobar!user@host.domain.tld') + join() + self.assertKban('kban --account foobar', + 'foobar!user@host.domain.tld') + join() + self.assertKban('kban --account --host foobar', + '*!*@host.domain.tld') + + def testAccountKbanLoggedIn(self): + self.irc.prefix = 'something!else@somehwere.else' + self.irc.nick = 'something' + self.irc.state.supported['ACCOUNTEXTBAN'] = 'a,account' + self.irc.state.supported['EXTBAN'] = '~,abc' + self.irc.feedMsg(ircmsgs.IrcMsg( + prefix='foobar!user@host.domain.tld', + command='ACCOUNT', args=['account1'])) + def join(): + self.irc.feedMsg(ircmsgs.join( + self.channel, prefix='foobar!user@host.domain.tld')) + join() + self.irc.feedMsg(ircmsgs.op(self.channel, self.irc.nick)) + self.assertKban('kban --account --exact foobar', + '~a:account1') + join() + self.assertKban('kban --account foobar', + '~a:account1') + join() + self.assertKban('kban --account --host foobar', + '~a:account1') + def testBan(self): with conf.supybot.protocols.irc.banmask.context(['exact']): self.assertNotError('ban add foo!bar@baz') diff --git a/src/conf.py b/src/conf.py index 16c554451..2848d817d 100644 --- a/src/conf.py +++ b/src/conf.py @@ -1217,7 +1217,11 @@ class Banmask(registry.SpaceSeparatedSetOfStrings): options - A list specifying which parts of the hostmask should explicitly be matched: nick, user, host. If 'exact' is given, then - only the exact hostmask will be used.""" + only the exact hostmask will be used. + If 'account' is given (and not after 'exact') and the user is + logged in and the server supports account extbans, then an account + extban is returned instead. + """ if not channel: channel = dynamic.channel if not network: @@ -1238,6 +1242,14 @@ class Banmask(registry.SpaceSeparatedSetOfStrings): bhost = host elif option == 'exact': return hostmask + elif option == 'account': + import supybot.world as world + irc = world.getIrc(network) + if irc is None: + continue + extban = ircutils.accountExtban(nick, irc) + if extban is not None: + return extban if (bnick, buser, bhost) == ('*', '*', '*') and \ ircutils.isUserHostmask(hostmask): return hostmask diff --git a/src/ircutils.py b/src/ircutils.py index da7397810..ca7c26f56 100644 --- a/src/ircutils.py +++ b/src/ircutils.py @@ -345,6 +345,25 @@ def banmask(hostmask): else: return '*!*@' + host + +def accountExtban(nick, irc): + """If 'nick' is logged in and the network supports account extbans, + returns a ban mask for it. If not, returns None.""" + if 'ACCOUNTEXTBAN' not in irc.state.supported: + return None + if 'EXTBAN' not in irc.state.supported: + return None + try: + account = irc.state.nickToAccount(nick) + except KeyError: + account = None + if account is None: + return None + account_extban = irc.state.supported['ACCOUNTEXTBAN'].split(',')[0] + extban_prefix = irc.state.supported['EXTBAN'].split(',', 1)[0] + return '%s%s:%s'% (extban_prefix, account_extban, account) + + _plusRequireArguments = 'ovhblkqeI' _minusRequireArguments = 'ovhbkqeI' def separateModes(args): diff --git a/test/test_ircutils.py b/test/test_ircutils.py index cb62358c8..a9c40a6f6 100644 --- a/test/test_ircutils.py +++ b/test/test_ircutils.py @@ -367,6 +367,60 @@ class FunctionsTestCase(SupyTestCase): '*!*@*.host.tld') self.assertEqual(ircutils.banmask('foo!bar@2001::'), '*!*@2001::*') + def testAccountExtban(self): + irc = getTestIrc() + irc.state.addMsg(irc, ircmsgs.IrcMsg( + prefix='foo!bar@baz', command='ACCOUNT', args=['account1'])) + irc.state.addMsg(irc, ircmsgs.IrcMsg( + prefix='bar!baz@qux', command='ACCOUNT', args=['*'])) + + with self.subTest('spec example'): + irc.state.supported['ACCOUNTEXTBAN'] = 'a,account' + irc.state.supported['EXTBAN'] = '~,abc' + self.assertEqual(ircutils.accountExtban('foo', irc), + '~a:account1') + self.assertIsNone(ircutils.accountExtban('bar', irc)) + self.assertIsNone(ircutils.accountExtban('baz', irc)) + + with self.subTest('InspIRCd'): + irc.state.supported['ACCOUNTEXTBAN'] = 'account,R' + irc.state.supported['EXTBAN'] = ',abcR' + self.assertEqual(ircutils.accountExtban('foo', irc), + 'account:account1') + self.assertIsNone(ircutils.accountExtban('bar', irc)) + self.assertIsNone(ircutils.accountExtban('baz', irc)) + + with self.subTest('Solanum'): + irc.state.supported['ACCOUNTEXTBAN'] = 'a' + irc.state.supported['EXTBAN'] = '$,abc' + self.assertEqual(ircutils.accountExtban('foo', irc), + '$a:account1') + self.assertIsNone(ircutils.accountExtban('bar', irc)) + self.assertIsNone(ircutils.accountExtban('baz', irc)) + + with self.subTest('UnrealIRCd'): + irc.state.supported['ACCOUNTEXTBAN'] = 'account,a' + irc.state.supported['EXTBAN'] = '~,abc' + self.assertEqual(ircutils.accountExtban('foo', irc), + '~account:account1') + self.assertIsNone(ircutils.accountExtban('bar', irc)) + self.assertIsNone(ircutils.accountExtban('baz', irc)) + + with self.subTest('no ACCOUNTEXTBAN'): + irc.state.supported.pop('ACCOUNTEXTBAN') + irc.state.supported['EXTBAN'] = '~,abc' + self.assertIsNone(ircutils.accountExtban('foo', irc)) + self.assertIsNone(ircutils.accountExtban('bar', irc)) + self.assertIsNone(ircutils.accountExtban('baz', irc)) + + with self.subTest('no EXTBAN'): + irc.state.supported['ACCOUNTEXTBAN'] = 'account,a' + irc.state.supported.pop('EXTBAN') + self.assertIsNone(ircutils.accountExtban('foo', irc)) + self.assertIsNone(ircutils.accountExtban('bar', irc)) + self.assertIsNone(ircutils.accountExtban('baz', irc)) + + def testSeparateModes(self): self.assertEqual(ircutils.separateModes(['+ooo', 'x', 'y', 'z']), [('+o', 'x'), ('+o', 'y'), ('+o', 'z')]) From fc49d17faa57a5437c20b5587fb8130c4b96945d Mon Sep 17 00:00:00 2001 From: Valentin Lorentz Date: Wed, 23 Nov 2022 19:22:45 +0100 Subject: [PATCH 03/69] Add support for 'account' in supybot.protocols.irc.banmask And a new method .makeExtBanmask() as an alternative to .makeBanmask(), so plugins can opt-in to extended banmasks when they support it. 'ignore' commands in Channel and anti-flood in Owner and Misc will keep using .makeBanmask() because they use them as ignore masks in ircdb. --- plugins/AutoMode/plugin.py | 3 ++- plugins/Channel/plugin.py | 8 ++++++-- plugins/Channel/test.py | 26 ++++++++++++++++++-------- src/commands.py | 10 +++++++++- src/conf.py | 29 ++++++++++++++++++++++++++--- 5 files changed, 61 insertions(+), 15 deletions(-) diff --git a/plugins/AutoMode/plugin.py b/plugins/AutoMode/plugin.py index 738aae428..a3e8db67c 100644 --- a/plugins/AutoMode/plugin.py +++ b/plugins/AutoMode/plugin.py @@ -163,7 +163,8 @@ class AutoMode(callbacks.Plugin): # We're not in the channel anymore. pass schedule.addEvent(unban, time.time()+period) - banmask =conf.supybot.protocols.irc.banmask.makeBanmask(msg.prefix) + banmask = conf.supybot.protocols.irc.banmask.makeExtBanmask( + msg.prefix, channel=channel, network=irc.network) irc.queueMsg(ircmsgs.ban(channel, banmask)) irc.queueMsg(ircmsgs.kick(channel, msg.nick)) diff --git a/plugins/Channel/plugin.py b/plugins/Channel/plugin.py index e6d24fcae..815a1ef18 100644 --- a/plugins/Channel/plugin.py +++ b/plugins/Channel/plugin.py @@ -368,7 +368,9 @@ class Channel(callbacks.Plugin): try: bannedHostmask = irc.state.nickToHostmask(target) banmaskstyle = conf.supybot.protocols.irc.banmask - banmask = banmaskstyle.makeBanmask(bannedHostmask, [o[0] for o in optlist]) + banmask = banmaskstyle.makeExtBanmask( + bannedHostmask, [o[0] for o in optlist], + channel=channel, network=irc.network) except KeyError: if not conf.supybot.protocols.irc.strictRfc() and \ target.startswith('$'): @@ -606,7 +608,9 @@ class Channel(callbacks.Plugin): c.addBan(banmask, expires) ircdb.channels.setChannel(channel, c) irc.replySuccess() - add = wrap(add, ['op', first('hostmask', 'banmask'), additional('expiry', 0)]) + add = wrap(add, ['op', + first('hostmask', 'extbanmask'), + additional('expiry', 0)]) @internationalizeDocstring def remove(self, irc, msg, args, channel, banmask): diff --git a/plugins/Channel/test.py b/plugins/Channel/test.py index f091cae88..35b71c3c8 100644 --- a/plugins/Channel/test.py +++ b/plugins/Channel/test.py @@ -273,14 +273,24 @@ class ChannelTestCase(ChannelPluginTestCase): self.channel, prefix='foobar!user@host.domain.tld')) join() self.irc.feedMsg(ircmsgs.op(self.channel, self.irc.nick)) - self.assertKban('kban --account --exact foobar', - '~a:account1') - join() - self.assertKban('kban --account foobar', - '~a:account1') - join() - self.assertKban('kban --account --host foobar', - '~a:account1') + + + for style in (['exact'], ['account', 'exact']): + with conf.supybot.protocols.irc.banmask.context(style): + self.assertKban('kban --account --exact foobar', + '~a:account1') + join() + self.assertKban('kban --account foobar', + '~a:account1') + join() + self.assertKban('kban --account --host foobar', + '~a:account1') + join() + + with conf.supybot.protocols.irc.banmask.context(['account', 'exact']): + self.assertKban('kban foobar', + '~a:account1') + join() def testBan(self): with conf.supybot.protocols.irc.banmask.context(['exact']): diff --git a/src/commands.py b/src/commands.py index f93e7ce47..2874c4692 100644 --- a/src/commands.py +++ b/src/commands.py @@ -435,7 +435,14 @@ def getBanmask(irc, msg, args, state): getChannel(irc, msg, args, state) banmaskstyle = conf.supybot.protocols.irc.banmask state.args[-1] = banmaskstyle.makeBanmask(state.args[-1], - channel=state.channel) + channel=state.channel, network=irc.network) + +def getExtBanmask(irc, msg, args, state): + getHostmask(irc, msg, args, state) + getChannel(irc, msg, args, state) + banmaskstyle = conf.supybot.protocols.irc.extbanmask + state.args[-1] = banmaskstyle.makeExtBanmask(state.args[-1], + channel=state.channel, network=irc.network) def getUser(irc, msg, args, state): try: @@ -806,6 +813,7 @@ wrappers = ircutils.IrcDict({ 'commandName': getCommandName, 'email': getEmail, 'expiry': getExpiry, + 'extbanmask': getExtBanmask, 'filename': getSomething, # XXX Check for validity. 'float': getFloat, 'glob': getGlob, diff --git a/src/conf.py b/src/conf.py index 2848d817d..975852c34 100644 --- a/src/conf.py +++ b/src/conf.py @@ -1181,7 +1181,7 @@ registerGroup(supybot.protocols, 'irc') class Banmask(registry.SpaceSeparatedSetOfStrings): __slots__ = ('__parent', '__dict__') # __dict__ is needed to set __doc__ - validStrings = ('exact', 'nick', 'user', 'host') + validStrings = ('exact', 'nick', 'user', 'host', 'account') def __init__(self, *args, **kwargs): assert self.validStrings, 'There must be some valid strings. ' \ 'This is a bug.' @@ -1215,6 +1215,31 @@ class Banmask(registry.SpaceSeparatedSetOfStrings): isn't specified via options, the value of conf.supybot.protocols.irc.banmask is used. + Unlike :meth:`makeExtBanmask`, this is guaranteed to return an + RFC1459-like mask, suitable for ircdb's ignore lists. + + options - A list specifying which parts of the hostmask should + explicitly be matched: nick, user, host. If 'exact' is given, then + only the exact hostmask will be used. + """ + if not network: + network = dynamic.irc.network + if not options: + options = supybot.protocols.irc.banmask.getSpecific( + network, channel)() + options = [option for option in options if option != 'account'] + return self.makeExtBanmask(hostmask, options, channel, network=network) + + def makeExtBanmask(self, hostmask, options=None, channel=None, *, network): + """Create a banmask from the given hostmask. If a style of banmask + isn't specified via options, the value of + conf.supybot.protocols.irc.banmask is used. + + Depending on the options and configuration, this may return a mask + in the format of an extban (eg. "~account:foobar" on UnrealIRCd). + If this is unwanted (eg. to pass to ircdb's ignore lists, use + :meth:`makeBanmask` instead) + options - A list specifying which parts of the hostmask should explicitly be matched: nick, user, host. If 'exact' is given, then only the exact hostmask will be used. @@ -1224,8 +1249,6 @@ class Banmask(registry.SpaceSeparatedSetOfStrings): """ if not channel: channel = dynamic.channel - if not network: - network = dynamic.irc.network (nick, user, host) = ircutils.splitHostmask(hostmask) bnick = '*' buser = '*' From f73fe5095e4cba1d025ec33065fcec1dfca04527 Mon Sep 17 00:00:00 2001 From: Valentin Lorentz Date: Wed, 23 Nov 2022 20:33:48 +0100 Subject: [PATCH 04/69] Replace makeExtBanmask with makeExtBanmasks Now that we can return both account extbans and regular masks, it makes sense to ban both. Otherwise, adding 'account' to supybot.protocols.irc.banmask means we banned only the account instead of the hostmask, which arguably makes the ban weaker (/NS LOGOUT to evade) --- plugins/AutoMode/plugin.py | 4 +-- plugins/Channel/plugin.py | 52 ++++++++++++++++++++++++-------------- plugins/Channel/test.py | 28 +++++++++++++------- src/commands.py | 6 ++--- src/conf.py | 37 ++++++++++++++++++++------- 5 files changed, 85 insertions(+), 42 deletions(-) diff --git a/plugins/AutoMode/plugin.py b/plugins/AutoMode/plugin.py index a3e8db67c..f11ed3238 100644 --- a/plugins/AutoMode/plugin.py +++ b/plugins/AutoMode/plugin.py @@ -163,9 +163,9 @@ class AutoMode(callbacks.Plugin): # We're not in the channel anymore. pass schedule.addEvent(unban, time.time()+period) - banmask = conf.supybot.protocols.irc.banmask.makeExtBanmask( + banmasks = conf.supybot.protocols.irc.banmask.makeExtBanmasks( msg.prefix, channel=channel, network=irc.network) - irc.queueMsg(ircmsgs.ban(channel, banmask)) + irc.queueMsg(ircmsgs.bans(channel, banmasks)) irc.queueMsg(ircmsgs.kick(channel, msg.nick)) try: diff --git a/plugins/Channel/plugin.py b/plugins/Channel/plugin.py index 815a1ef18..5d8afa167 100644 --- a/plugins/Channel/plugin.py +++ b/plugins/Channel/plugin.py @@ -368,7 +368,7 @@ class Channel(callbacks.Plugin): try: bannedHostmask = irc.state.nickToHostmask(target) banmaskstyle = conf.supybot.protocols.irc.banmask - banmask = banmaskstyle.makeExtBanmask( + banmasks = banmaskstyle.makeExtBanmasks( bannedHostmask, [o[0] for o in optlist], channel=channel, network=irc.network) except KeyError: @@ -376,12 +376,14 @@ class Channel(callbacks.Plugin): target.startswith('$'): # Select the last part, or the whole target: bannedNick = target.split(':')[-1] - banmask = bannedHostmask = target + bannedHostmask = target + banmasks = [bannedHostmask] else: irc.error(format(_('I haven\'t seen %s.'), bannedNick), Raise=True) else: bannedNick = ircutils.nickFromHostmask(target) - banmask = bannedHostmask = target + bannedHostmask = target + banmasks = [bannedHostmask] if not irc.isNick(bannedNick): self.log.warning('%q tried to kban a non nick: %q', msg.prefix, bannedNick) @@ -398,29 +400,38 @@ class Channel(callbacks.Plugin): reason = msg.nick capability = ircdb.makeChannelCapability(channel, 'op') # Check (again) that they're not trying to make us kickban ourself. - if ircutils.hostmaskPatternEqual(banmask, irc.prefix): - if ircutils.hostmaskPatternEqual(bannedHostmask, irc.prefix): - self.log.warning('%q tried to make me kban myself.',msg.prefix) - irc.error(_('I cowardly refuse to ban myself.')) - return - else: - self.log.warning('Using exact hostmask since banmask would ' - 'ban myself.') - banmask = bannedHostmask + for banmask in banmasks: + # TODO: check account ban too + if ircutils.hostmaskPatternEqual(banmask, irc.prefix): + if ircutils.hostmaskPatternEqual(bannedHostmask, irc.prefix): + self.log.warning('%q tried to make me kban myself.',msg.prefix) + irc.error(_('I cowardly refuse to ban myself.')) + return + else: + self.log.warning('Using exact hostmask since banmask would ' + 'ban myself.') + banmasks = [bannedHostmask] # Now, let's actually get to it. Check to make sure they have # #channel,op and the bannee doesn't have #channel,op; or that the # bannee and the banner are both the same person. def doBan(): if irc.state.channels[channel].isOp(bannedNick): irc.queueMsg(ircmsgs.deop(channel, bannedNick)) - irc.queueMsg(ircmsgs.ban(channel, banmask)) + irc.queueMsg(ircmsgs.bans(channel, banmasks)) if kick: irc.queueMsg(ircmsgs.kick(channel, bannedNick, reason)) if expiry > 0: def f(): - if channel in irc.state.channels and \ - banmask in irc.state.channels[channel].bans: - irc.queueMsg(ircmsgs.unban(channel, banmask)) + if channel not in irc.state.channels: + return + remaining_banmasks = [ + banmask + for banmask in banmasks + if banmask in irc.state.channels[channel].bans + ] + if remaining_banmasks: + irc.queueMsg(ircmsgs.unbans( + channel, remaining_banmasks)) schedule.addEvent(f, expiry) if bannedNick == msg.nick: doBan() @@ -591,7 +602,7 @@ class Channel(callbacks.Plugin): hostmask = wrap(hostmask, ['op', ('haveHalfop+', _('ban someone')), 'text']) @internationalizeDocstring - def add(self, irc, msg, args, channel, banmask, expires): + def add(self, irc, msg, args, channel, banmasks, expires): """[] [] If you have the #channel,op capability, this will effect a @@ -605,11 +616,14 @@ class Channel(callbacks.Plugin): channel itself. """ c = ircdb.channels.getChannel(channel) - c.addBan(banmask, expires) + if isinstance(banmasks, str): + banmasks = [banmasks] + for banmask in banmasks: + c.addBan(banmask, expires) ircdb.channels.setChannel(channel, c) irc.replySuccess() add = wrap(add, ['op', - first('hostmask', 'extbanmask'), + first('hostmask', 'extbanmasks'), additional('expiry', 0)]) @internationalizeDocstring diff --git a/plugins/Channel/test.py b/plugins/Channel/test.py index 35b71c3c8..bd716767c 100644 --- a/plugins/Channel/test.py +++ b/plugins/Channel/test.py @@ -29,6 +29,8 @@ # POSSIBILITY OF SUCH DAMAGE. ### +import itertools + from supybot.test import * import supybot.conf as conf @@ -161,9 +163,13 @@ class ChannelTestCase(ChannelPluginTestCase): self.assertTrue(m.command == 'MODE' and m.args == (self.channel, '+v', 'bar')) - def assertKban(self, query, hostmask, **kwargs): + def assertKban(self, query, *hostmasks, **kwargs): m = self.getMsg(query, **kwargs) - self.assertEqual(m, ircmsgs.ban(self.channel, hostmask)) + self.assertIn(m, [ + ircmsgs.bans(self.channel, permutation) + for permutation in itertools.permutations(hostmasks) + ]) + m = self.getMsg(' ') self.assertEqual(m.command, 'KICK') def assertBan(self, query, hostmask, **kwargs): @@ -278,25 +284,29 @@ class ChannelTestCase(ChannelPluginTestCase): for style in (['exact'], ['account', 'exact']): with conf.supybot.protocols.irc.banmask.context(style): self.assertKban('kban --account --exact foobar', - '~a:account1') + '~a:account1', 'foobar!user@host.domain.tld') join() self.assertKban('kban --account foobar', '~a:account1') join() self.assertKban('kban --account --host foobar', - '~a:account1') + '~a:account1', '*!*@host.domain.tld') join() with conf.supybot.protocols.irc.banmask.context(['account', 'exact']): self.assertKban('kban foobar', - '~a:account1') + '~a:account1', 'foobar!user@host.domain.tld') + join() + + with conf.supybot.protocols.irc.banmask.context(['account', 'host']): + self.assertKban('kban foobar', + '~a:account1', '*!*@host.domain.tld') join() def testBan(self): with conf.supybot.protocols.irc.banmask.context(['exact']): self.assertNotError('ban add foo!bar@baz') self.assertNotError('ban remove foo!bar@baz') - orig = conf.supybot.protocols.irc.strictRfc() with conf.supybot.protocols.irc.strictRfc.context(True): # something wonky is going on here. irc.error (src/Channel.py|449) # is being called but the assert is failing @@ -322,7 +332,6 @@ class ChannelTestCase(ChannelPluginTestCase): '"foobar!*@baz" (never expires)') def testIgnore(self): - orig = conf.supybot.protocols.irc.banmask() def ignore(given, expect=None): if expect is None: expect = given @@ -330,8 +339,9 @@ class ChannelTestCase(ChannelPluginTestCase): self.assertResponse('channel ignore list', "'%s'" % expect) self.assertNotError('channel ignore remove %s' % expect) self.assertRegexp('channel ignore list', 'not currently') - ignore('foo!bar@baz', '*!*@baz') - ignore('foo!*@*') + with conf.supybot.protocols.irc.banmask.context(['host']): + ignore('foo!bar@baz', '*!*@baz') + ignore('foo!*@*') with conf.supybot.protocols.irc.banmask.context(['exact']): ignore('foo!bar@baz') ignore('foo!*@*') diff --git a/src/commands.py b/src/commands.py index 2874c4692..7da905fa4 100644 --- a/src/commands.py +++ b/src/commands.py @@ -437,11 +437,11 @@ def getBanmask(irc, msg, args, state): state.args[-1] = banmaskstyle.makeBanmask(state.args[-1], channel=state.channel, network=irc.network) -def getExtBanmask(irc, msg, args, state): +def getExtBanmasks(irc, msg, args, state): getHostmask(irc, msg, args, state) getChannel(irc, msg, args, state) banmaskstyle = conf.supybot.protocols.irc.extbanmask - state.args[-1] = banmaskstyle.makeExtBanmask(state.args[-1], + state.args[-1] = banmaskstyle.makeExtBanmasks(state.args[-1], channel=state.channel, network=irc.network) def getUser(irc, msg, args, state): @@ -813,7 +813,7 @@ wrappers = ircutils.IrcDict({ 'commandName': getCommandName, 'email': getEmail, 'expiry': getExpiry, - 'extbanmask': getExtBanmask, + 'extbanmasks': getExtBanmasks, 'filename': getSomething, # XXX Check for validity. 'float': getFloat, 'glob': getGlob, diff --git a/src/conf.py b/src/conf.py index 975852c34..7c55b188d 100644 --- a/src/conf.py +++ b/src/conf.py @@ -1215,7 +1215,7 @@ class Banmask(registry.SpaceSeparatedSetOfStrings): isn't specified via options, the value of conf.supybot.protocols.irc.banmask is used. - Unlike :meth:`makeExtBanmask`, this is guaranteed to return an + Unlike :meth:`makeExtBanmasks`, this is guaranteed to return an RFC1459-like mask, suitable for ircdb's ignore lists. options - A list specifying which parts of the hostmask should @@ -1228,10 +1228,15 @@ class Banmask(registry.SpaceSeparatedSetOfStrings): options = supybot.protocols.irc.banmask.getSpecific( network, channel)() options = [option for option in options if option != 'account'] - return self.makeExtBanmask(hostmask, options, channel, network=network) + print(hostmask, options) + masks = self.makeExtBanmasks( + hostmask, options, channel, network=network) + assert len(masks) == 1, 'Unexpected number of banmasks: %r' % masks + print(masks) + return masks[0] - def makeExtBanmask(self, hostmask, options=None, channel=None, *, network): - """Create a banmask from the given hostmask. If a style of banmask + def makeExtBanmasks(self, hostmask, options=None, channel=None, *, network): + """Create banmasks from the given hostmask. If a style of banmask isn't specified via options, the value of conf.supybot.protocols.irc.banmask is used. @@ -1256,15 +1261,22 @@ class Banmask(registry.SpaceSeparatedSetOfStrings): if not options: options = supybot.protocols.irc.banmask.getSpecific( network, channel)() + + add_star_mask = False + masks = [] + for option in options: if option == 'nick': bnick = nick + add_star_mask = True elif option == 'user': buser = user + add_star_mask = True elif option == 'host': bhost = host + add_star_mask = True elif option == 'exact': - return hostmask + masks.append(hostmask) elif option == 'account': import supybot.world as world irc = world.getIrc(network) @@ -1272,11 +1284,18 @@ class Banmask(registry.SpaceSeparatedSetOfStrings): continue extban = ircutils.accountExtban(nick, irc) if extban is not None: - return extban + masks.append(extban) + + if add_star_mask and (bnick, buser, bhost) != ('*', '*', '*'): + masks.append(ircutils.joinHostmask(bnick, buser, bhost)) + if (bnick, buser, bhost) == ('*', '*', '*') and \ - ircutils.isUserHostmask(hostmask): - return hostmask - return ircutils.joinHostmask(bnick, buser, bhost) + ircutils.isUserHostmask(hostmask) and \ + masks == []: + masks.append(hostmask) + + return masks + registerChannelValue(supybot.protocols.irc, 'banmask', Banmask(['host'], _("""Determines what will be used as the From 21cac28396941a0499e3127b4631067f45800607 Mon Sep 17 00:00:00 2001 From: Val Lorentz Date: Sun, 2 Jul 2023 07:49:24 +0200 Subject: [PATCH 05/69] s/network/services/ Co-authored-by: James Lu --- src/irclib.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/irclib.py b/src/irclib.py index dc043cc5a..a6932590b 100644 --- a/src/irclib.py +++ b/src/irclib.py @@ -684,7 +684,7 @@ class IrcState(IrcCommandDispatcher, log.Firewalled): .. attribute:: nicksToAccounts - Stores the current network account name of a seen nick. + Stores the current services account name of a seen nick. :type: ircutils.IrcDict[str, str] """ From b54dd33dbd28ef4193b3ba48d732adfda1fc3d32 Mon Sep 17 00:00:00 2001 From: Valentin Lorentz Date: Sun, 2 Jul 2023 10:11:59 +0200 Subject: [PATCH 06/69] Explain why 'st' is checked too --- test/test_irclib.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/test/test_irclib.py b/test/test_irclib.py index 703d6f5fd..06a921176 100644 --- a/test/test_irclib.py +++ b/test/test_irclib.py @@ -615,6 +615,8 @@ class IrcStateTestCase(SupyTestCase): with self.assertRaises(KeyError): st2.nickToAccount('foo') self.assertEqual(st2.nickToAccount('bar'), 'account2') + + # check st isn't affected by changes to st2 self.assertEqual(st.nickToAccount('foo'), 'account1') self.assertEqual(st.nickToAccount('bar'), 'account2') @@ -627,6 +629,8 @@ class IrcStateTestCase(SupyTestCase): st2.nickToAccount('foo') self.assertEqual(st2.nickToAccount('foo2'), 'account1') self.assertEqual(st2.nickToAccount('bar'), 'account2') + + # check st isn't affected by changes to st2 self.assertEqual(st.nickToAccount('foo'), 'account1') self.assertEqual(st.nickToAccount('bar'), 'account2') @@ -638,6 +642,8 @@ class IrcStateTestCase(SupyTestCase): with self.assertRaises(KeyError): st2.nickToAccount('foo') self.assertEqual(st2.nickToAccount('bar'), 'account1') + + # check st isn't affected by changes to st2 self.assertEqual(st.nickToAccount('foo'), 'account1') self.assertEqual(st.nickToAccount('bar'), 'account2') From 53b45c1d47fd69fa2d49053797cf57241f8864b6 Mon Sep 17 00:00:00 2001 From: Valentin Lorentz Date: Sun, 2 Jul 2023 10:13:38 +0200 Subject: [PATCH 07/69] Remove prints --- src/conf.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/conf.py b/src/conf.py index 7c55b188d..a7a922a05 100644 --- a/src/conf.py +++ b/src/conf.py @@ -1228,11 +1228,9 @@ class Banmask(registry.SpaceSeparatedSetOfStrings): options = supybot.protocols.irc.banmask.getSpecific( network, channel)() options = [option for option in options if option != 'account'] - print(hostmask, options) masks = self.makeExtBanmasks( hostmask, options, channel, network=network) assert len(masks) == 1, 'Unexpected number of banmasks: %r' % masks - print(masks) return masks[0] def makeExtBanmasks(self, hostmask, options=None, channel=None, *, network): From 448d9771f8a5d1d629ec02c13b4b35cdaf2d1313 Mon Sep 17 00:00:00 2001 From: Valentin Lorentz Date: Sun, 2 Jul 2023 10:17:35 +0200 Subject: [PATCH 08/69] Correctly document meaning of None vs absent values in nicksToAccounts --- src/irclib.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/irclib.py b/src/irclib.py index a6932590b..a0d7f4076 100644 --- a/src/irclib.py +++ b/src/irclib.py @@ -684,9 +684,10 @@ class IrcState(IrcCommandDispatcher, log.Firewalled): .. attribute:: nicksToAccounts - Stores the current services account name of a seen nick. + Stores the current services account name of a seen nick (or + :const:`None` for un-identified nicks) - :type: ircutils.IrcDict[str, str] + :type: ircutils.IrcDict[str, Optional[str]] """ __firewalled__ = {'addMsg': None} @@ -807,7 +808,8 @@ class IrcState(IrcCommandDispatcher, log.Firewalled): def nickToAccount(self, nick): """Returns the account for a given nick, or None if the nick is logged - out.""" + out. Raises :exc:`KeyError` if the nick was not seen or its account is + not known yet.""" return self.nicksToAccounts[nick] def getParentBatches(self, msg): From 3018982d5ac649c5d8b0a02e34e45e1836ab7cac Mon Sep 17 00:00:00 2001 From: Valentin Lorentz Date: Sun, 2 Jul 2023 10:18:32 +0200 Subject: [PATCH 09/69] tests: Fix self.assertRaises(KeyError) for nickToAccount --- test/test_irclib.py | 1 + 1 file changed, 1 insertion(+) diff --git a/test/test_irclib.py b/test/test_irclib.py index 06a921176..85c60793d 100644 --- a/test/test_irclib.py +++ b/test/test_irclib.py @@ -586,6 +586,7 @@ class IrcStateTestCase(SupyTestCase): st.addMsg(self.irc, ircmsgs.join('#foo', prefix='bar!baz@qux')) with self.assertRaises(KeyError): st.nickToAccount('foo') + with self.assertRaises(KeyError): st.nickToAccount('bar') From d63720f2ed286e374205b57002fde0441a91185b Mon Sep 17 00:00:00 2001 From: Valentin Lorentz Date: Sun, 2 Jul 2023 10:19:06 +0200 Subject: [PATCH 10/69] s/masks == []/not masks/ --- src/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/conf.py b/src/conf.py index a7a922a05..7e13c1106 100644 --- a/src/conf.py +++ b/src/conf.py @@ -1289,7 +1289,7 @@ class Banmask(registry.SpaceSeparatedSetOfStrings): if (bnick, buser, bhost) == ('*', '*', '*') and \ ircutils.isUserHostmask(hostmask) and \ - masks == []: + not masks: masks.append(hostmask) return masks From 1cbf9920167bfaf43192501c2c06813afb1eaa96 Mon Sep 17 00:00:00 2001 From: Valentin Lorentz Date: Sun, 2 Jul 2023 10:22:42 +0200 Subject: [PATCH 11/69] Swap arguments of accountExtban --- src/conf.py | 2 +- src/ircutils.py | 2 +- test/test_ircutils.py | 36 ++++++++++++++++++------------------ 3 files changed, 20 insertions(+), 20 deletions(-) diff --git a/src/conf.py b/src/conf.py index 7e13c1106..e47c3a4c4 100644 --- a/src/conf.py +++ b/src/conf.py @@ -1280,7 +1280,7 @@ class Banmask(registry.SpaceSeparatedSetOfStrings): irc = world.getIrc(network) if irc is None: continue - extban = ircutils.accountExtban(nick, irc) + extban = ircutils.accountExtban(irc, nick) if extban is not None: masks.append(extban) diff --git a/src/ircutils.py b/src/ircutils.py index ca7c26f56..2dbe69ce6 100644 --- a/src/ircutils.py +++ b/src/ircutils.py @@ -346,7 +346,7 @@ def banmask(hostmask): return '*!*@' + host -def accountExtban(nick, irc): +def accountExtban(irc, nick): """If 'nick' is logged in and the network supports account extbans, returns a ban mask for it. If not, returns None.""" if 'ACCOUNTEXTBAN' not in irc.state.supported: diff --git a/test/test_ircutils.py b/test/test_ircutils.py index a9c40a6f6..59363e73f 100644 --- a/test/test_ircutils.py +++ b/test/test_ircutils.py @@ -377,48 +377,48 @@ class FunctionsTestCase(SupyTestCase): with self.subTest('spec example'): irc.state.supported['ACCOUNTEXTBAN'] = 'a,account' irc.state.supported['EXTBAN'] = '~,abc' - self.assertEqual(ircutils.accountExtban('foo', irc), + self.assertEqual(ircutils.accountExtban(irc, 'foo'), '~a:account1') - self.assertIsNone(ircutils.accountExtban('bar', irc)) - self.assertIsNone(ircutils.accountExtban('baz', irc)) + self.assertIsNone(ircutils.accountExtban(irc, 'bar')) + self.assertIsNone(ircutils.accountExtban(irc, 'baz')) with self.subTest('InspIRCd'): irc.state.supported['ACCOUNTEXTBAN'] = 'account,R' irc.state.supported['EXTBAN'] = ',abcR' - self.assertEqual(ircutils.accountExtban('foo', irc), + self.assertEqual(ircutils.accountExtban(irc, 'foo'), 'account:account1') - self.assertIsNone(ircutils.accountExtban('bar', irc)) - self.assertIsNone(ircutils.accountExtban('baz', irc)) + self.assertIsNone(ircutils.accountExtban(irc, 'bar')) + self.assertIsNone(ircutils.accountExtban(irc, 'baz')) with self.subTest('Solanum'): irc.state.supported['ACCOUNTEXTBAN'] = 'a' irc.state.supported['EXTBAN'] = '$,abc' - self.assertEqual(ircutils.accountExtban('foo', irc), + self.assertEqual(ircutils.accountExtban(irc, 'foo'), '$a:account1') - self.assertIsNone(ircutils.accountExtban('bar', irc)) - self.assertIsNone(ircutils.accountExtban('baz', irc)) + self.assertIsNone(ircutils.accountExtban(irc, 'bar')) + self.assertIsNone(ircutils.accountExtban(irc, 'baz')) with self.subTest('UnrealIRCd'): irc.state.supported['ACCOUNTEXTBAN'] = 'account,a' irc.state.supported['EXTBAN'] = '~,abc' - self.assertEqual(ircutils.accountExtban('foo', irc), + self.assertEqual(ircutils.accountExtban(irc, 'foo'), '~account:account1') - self.assertIsNone(ircutils.accountExtban('bar', irc)) - self.assertIsNone(ircutils.accountExtban('baz', irc)) + self.assertIsNone(ircutils.accountExtban(irc, 'bar')) + self.assertIsNone(ircutils.accountExtban(irc, 'baz')) with self.subTest('no ACCOUNTEXTBAN'): irc.state.supported.pop('ACCOUNTEXTBAN') irc.state.supported['EXTBAN'] = '~,abc' - self.assertIsNone(ircutils.accountExtban('foo', irc)) - self.assertIsNone(ircutils.accountExtban('bar', irc)) - self.assertIsNone(ircutils.accountExtban('baz', irc)) + self.assertIsNone(ircutils.accountExtban(irc, 'foo')) + self.assertIsNone(ircutils.accountExtban(irc, 'bar')) + self.assertIsNone(ircutils.accountExtban(irc, 'baz')) with self.subTest('no EXTBAN'): irc.state.supported['ACCOUNTEXTBAN'] = 'account,a' irc.state.supported.pop('EXTBAN') - self.assertIsNone(ircutils.accountExtban('foo', irc)) - self.assertIsNone(ircutils.accountExtban('bar', irc)) - self.assertIsNone(ircutils.accountExtban('baz', irc)) + self.assertIsNone(ircutils.accountExtban(irc, 'foo')) + self.assertIsNone(ircutils.accountExtban(irc, 'bar')) + self.assertIsNone(ircutils.accountExtban(irc, 'baz')) def testSeparateModes(self): From d5af301db1b0fc3f953c453a139f9588eaeaba97 Mon Sep 17 00:00:00 2001 From: Valentin Lorentz Date: Sat, 8 Jul 2023 16:41:21 +0200 Subject: [PATCH 12/69] Avoid listing all permutations --- plugins/Channel/test.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/plugins/Channel/test.py b/plugins/Channel/test.py index bd716767c..7fd0c0b85 100644 --- a/plugins/Channel/test.py +++ b/plugins/Channel/test.py @@ -29,8 +29,6 @@ # POSSIBILITY OF SUCH DAMAGE. ### -import itertools - from supybot.test import * import supybot.conf as conf @@ -165,10 +163,10 @@ class ChannelTestCase(ChannelPluginTestCase): def assertKban(self, query, *hostmasks, **kwargs): m = self.getMsg(query, **kwargs) - self.assertIn(m, [ - ircmsgs.bans(self.channel, permutation) - for permutation in itertools.permutations(hostmasks) - ]) + self.assertEqual(m.command, "MODE", m) + self.assertEqual(m.args[0], self.channel, m) + self.assertEqual(m.args[1], "+" + "b" * len(hostmasks), m) + self.assertCountEqual(m.args[2:], hostmasks, m) m = self.getMsg(' ') self.assertEqual(m.command, 'KICK') From 21a3fa0b86b2066fb690a882c8ca2fdb6b1888ae Mon Sep 17 00:00:00 2001 From: Valentin Lorentz Date: Wed, 12 Jul 2023 17:24:05 +0200 Subject: [PATCH 13/69] makeExtBanmasks: Log invalid options --- src/conf.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/conf.py b/src/conf.py index e47c3a4c4..555550473 100644 --- a/src/conf.py +++ b/src/conf.py @@ -1283,6 +1283,11 @@ class Banmask(registry.SpaceSeparatedSetOfStrings): extban = ircutils.accountExtban(irc, nick) if extban is not None: masks.append(extban) + else: + from . import log + log.warning( + "Unknown mask option passed to makeExtBanmasks: %r", + option) if add_star_mask and (bnick, buser, bhost) != ('*', '*', '*'): masks.append(ircutils.joinHostmask(bnick, buser, bhost)) From 5b2b38ab37fcc891651f43f63c0c13755cd8694f Mon Sep 17 00:00:00 2001 From: Valentin Lorentz Date: Tue, 21 May 2024 21:19:14 +0200 Subject: [PATCH 14/69] Add per-network 'vhost' and 'vhostv6' config variables --- src/conf.py | 9 +++++++++ src/drivers/Socket.py | 6 ++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/conf.py b/src/conf.py index c29f04c87..0544613ab 100644 --- a/src/conf.py +++ b/src/conf.py @@ -419,6 +419,15 @@ def registerNetwork(name, password='', ssl=True, sasl_username='', registry.String('', _("""Determines what user modes the bot will request from the server when it first connects. If empty, defaults to supybot.protocols.irc.umodes"""))) + registerGlobalValue(network, 'vhost', + registry.String('', _("""Determines what vhost the bot will bind to before + connecting a server (IRC, HTTP, ...) via IPv4. If empty, defaults to + supybot.protocols.irc.vhost"""))) + registerGlobalValue(network, 'vhostv6', + registry.String('', _("""Determines what vhost the bot will bind to before + connecting a server (IRC, HTTP, ...) via IPv6. If empty, defaults to + supybot.protocols.irc.vhostv6"""))) + sasl = registerGroup(network, 'sasl') registerGlobalValue(sasl, 'username', registry.String(sasl_username, _("""Determines what SASL username will be used on %s. This should diff --git a/src/drivers/Socket.py b/src/drivers/Socket.py index 23d242153..7b7f1df98 100644 --- a/src/drivers/Socket.py +++ b/src/drivers/Socket.py @@ -312,8 +312,10 @@ class SocketDriver(drivers.IrcDriver, drivers.ServersMixin): address, port=self.currentServer.port, socks_proxy=socks_proxy, - vhost=conf.supybot.protocols.irc.vhost(), - vhostv6=conf.supybot.protocols.irc.vhostv6(), + vhost=self.networkGroup.get('vhost')() + or conf.supybot.protocols.irc.vhost(), + vhostv6=self.networkGroup.get('vhostv6')() + or conf.supybot.protocols.irc.vhostv6(), ) except socket.error as e: drivers.log.connectError(self.currentServer, e) From dcd95d3a77d52d053f8b0ba56bda3b34cb82aa38 Mon Sep 17 00:00:00 2001 From: Valentin Lorentz Date: Wed, 29 May 2024 07:26:34 +0200 Subject: [PATCH 15/69] DDG: Fix regexp escape in test 9bcb21389adc62dd099afd0665990aa0128a7ad3 added it to the wrong string --- plugins/DDG/test.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/DDG/test.py b/plugins/DDG/test.py index a3b96a407..b5f7961ae 100644 --- a/plugins/DDG/test.py +++ b/plugins/DDG/test.py @@ -39,7 +39,7 @@ class DDGTestCase(PluginTestCase): def testSearch(self): self.assertRegexp( - r'ddg search wikipedia', 'Wikipedia.*? - .*?https?\:\/\/') + 'ddg search wikipedia', r'Wikipedia.*? - .*?https?\:\/\/') self.assertRegexp( 'ddg search en.wikipedia.org', 'Wikipedia, the free encyclopedia\x02 - ' From 9a4dca80544cd8a64f963e775e0207b4fd9eb61d Mon Sep 17 00:00:00 2001 From: Valentin Lorentz Date: Wed, 29 May 2024 21:49:23 +0200 Subject: [PATCH 16/69] Misc: update version fetching to the new branches master is now used for main development, so PyPI has to be used instead to get the latest release --- plugins/Misc/plugin.py | 40 +++++++++++++++++++++++++--------------- 1 file changed, 25 insertions(+), 15 deletions(-) diff --git a/plugins/Misc/plugin.py b/plugins/Misc/plugin.py index 73f32e00d..8fb1d80be 100644 --- a/plugins/Misc/plugin.py +++ b/plugins/Misc/plugin.py @@ -342,21 +342,31 @@ class Misc(callbacks.Plugin): Returns the version of the current bot. """ try: - newestUrl = 'https://api.github.com/repos/progval/Limnoria/' + \ - 'commits/%s' - versions = {} - for branch in ('master', 'testing'): - data = json.loads(utils.web.getUrl(newestUrl % branch) - .decode('utf8')) - version = data['commit']['committer']['date'] - # Strip the last 'Z': - version = version.rsplit('T', 1)[0].replace('-', '.') - if minisix.PY2 and isinstance(version, unicode): - version = version.encode('utf8') - versions[branch] = version - newest = _('The newest versions available online are %s.') % \ - ', '.join([_('%s (in %s)') % (y,x) - for x,y in versions.items()]) + versions = [] + + # fetch from PyPI + data = json.loads(utils.web.getUrl( + 'https://pypi.org/pypi/limnoria/json' + ).decode('utf8')) + release_version = data['info']['version'] + # zero-left-pad months and days + release_version = re.sub( + r'\.([0-9])\b', lambda m: '.0' + m.group(1), release_version + ) + + # fetch from Git + data = json.loads(utils.web.getUrl( + 'https://api.github.com/repos/progval/Limnoria/' + 'commits/master' + ).decode('utf8')) + git_version = data['commit']['committer']['date'] + # Strip the last 'Z': + git_version = git_version.rsplit('T', 1)[0].replace('-', '.') + + newest = _( + 'The newest version available online is %(release_version)s, ' + 'or %(git_version)s in Git' + ) % {'release_version': release_version, 'git_version': git_version} except utils.web.Error as e: self.log.info('Couldn\'t get website version: %s', e) newest = _('I couldn\'t fetch the newest version ' From f5302f0bfc6a1fcc0a2162505c4f865e68975401 Mon Sep 17 00:00:00 2001 From: Valentin Lorentz Date: Wed, 29 May 2024 07:37:39 +0200 Subject: [PATCH 17/69] safeEval: Fix support for Python 3.14 --- src/utils/gen.py | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/utils/gen.py b/src/utils/gen.py index 4e1e1b253..d8c58d83b 100644 --- a/src/utils/gen.py +++ b/src/utils/gen.py @@ -167,7 +167,9 @@ def saltHash(password, salt=None, hash='sha'): hasher = crypt.md5 return '|'.join([salt, hasher((salt + password).encode('utf8')).hexdigest()]) -_astStr2 = ast.Str if minisix.PY2 else ast.Bytes +_OLD_AST = sys.version_info[0:2] < (3, 8) +"""Whether the AST classes predate the python 3.8 API changes""" + def safeEval(s, namespace=None): """Evaluates s, safely. Useful for turning strings into tuples/lists/etc. without unsafely using eval().""" @@ -175,12 +177,11 @@ def safeEval(s, namespace=None): node = ast.parse(s, mode='eval').body except SyntaxError as e: raise ValueError('Invalid string: %s.' % e) + def checkNode(node): if node.__class__ is ast.Expr: node = node.value - if node.__class__ in (ast.Num, - ast.Str, - _astStr2): + if not _OLD_AST and node.__class__ is ast.Constant: return True elif node.__class__ in (ast.List, ast.Tuple): @@ -196,10 +197,12 @@ def safeEval(s, namespace=None): return True else: return False - elif node.__class__ is ast.NameConstant: + elif _OLD_AST and node.__class__ in (ast.Num, ast.Str, ast.Bytes): + # ast.Num, ast.Str, ast.Bytes are deprecated since Python 3.8 + # and removed since Python 3.14; replaced by ast.Constant. return True - elif sys.version_info[0:2] >= (3, 8) and \ - node.__class__ is ast.Constant: + elif _OLD_AST and node.__class__ is ast.NameConstant: + # ditto return True else: return False From bd4a85ba08e9841c125f28ae393761a589b58682 Mon Sep 17 00:00:00 2001 From: ssdaniel24 <107036969+ssdaniel24@users.noreply.github.com> Date: Wed, 12 Jun 2024 23:44:48 +0300 Subject: [PATCH 18/69] Aka, Anonymous, PluginDownloader, Seen, Todo: Add russian locale --- plugins/Aka/locales/ru.po | 415 +++++++++++++++++++++++++ plugins/Anonymous/locales/ru.po | 249 +++++++++++++++ plugins/PluginDownloader/locales/ru.po | 205 ++++++++++++ plugins/Seen/locales/ru.po | 201 ++++++++++++ plugins/Todo/locales/ru.po | 176 +++++++++++ src/i18n.py | 2 +- 6 files changed, 1247 insertions(+), 1 deletion(-) create mode 100644 plugins/Aka/locales/ru.po create mode 100644 plugins/Anonymous/locales/ru.po create mode 100644 plugins/PluginDownloader/locales/ru.po create mode 100644 plugins/Seen/locales/ru.po create mode 100644 plugins/Todo/locales/ru.po diff --git a/plugins/Aka/locales/ru.po b/plugins/Aka/locales/ru.po new file mode 100644 index 000000000..ee86bc44c --- /dev/null +++ b/plugins/Aka/locales/ru.po @@ -0,0 +1,415 @@ +# Aka plugin for Limnoria +# Copyright (C) 2024 Limnoria +# ssdaniel24 , 2024. +msgid "" +msgstr "" +"Project-Id-Version: \n" +"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"PO-Revision-Date: 2024-06-12 21:50+0300\n" +"Last-Translator: ssdaniel24 \n" +"Language-Team: \n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: pygettext.py 1.5\n" +"X-Generator: Poedit 3.4.2\n" + +#: config.py:55 +msgid "" +"The maximum number of words allowed in a\n" +" command name. Setting this to an high value may slow down your bot\n" +" on long commands." +msgstr "" +"Максимальное количество слов, которые могут быть в имени команды.\n" +"Выставление большого значения может замедлить работу вашего бота на длинных " +"командах." + +#: config.py:61 +msgid "" +"Determines whether the Akas will be\n" +" browsable through the HTTP server." +msgstr "Определяет, где псевдонимы могут быть просмотрены через HTTP-сервер." + +#: plugin.py:141 plugin.py:274 plugin.py:732 +msgid "This Aka already exists." +msgstr "Этот псевдоним уже существует." + +#: plugin.py:170 plugin.py:182 plugin.py:196 plugin.py:301 plugin.py:318 +#: plugin.py:335 plugin.py:912 +msgid "This Aka does not exist." +msgstr "Этот псевдоним не существует." + +#: plugin.py:303 +msgid "This Aka is already locked." +msgstr "Этот псевдоним уже заблокирован." + +#: plugin.py:320 +msgid "This Aka is already unlocked." +msgstr "Этот псевдоним уже разблокирован." + +#: plugin.py:465 +msgid "By %s at %s" +msgstr "%s %s" + +#: plugin.py:501 +msgid "" +"\n" +" This plugin allows users to define aliases to commands and " +"combinations\n" +" of commands (via nesting).\n" +"\n" +" Importing from Alias\n" +" ^^^^^^^^^^^^^^^^^^^^\n" +"\n" +" Add an aka, Alias, which eases the transitioning to Aka from Alias.\n" +"\n" +" First we will load Alias and Aka::\n" +"\n" +" @load Alias\n" +" jamessan: The operation succeeded.\n" +" @load Aka\n" +" jamessan: The operation succeeded.\n" +"\n" +" Then we import the Alias database to Aka in case it exists and unload\n" +" Alias::\n" +"\n" +" @importaliasdatabase\n" +" jamessan: The operation succeeded.\n" +" @unload Alias\n" +" jamessan: The operation succeeded.\n" +"\n" +" And now we will finally add the Aka ``alias`` itself::\n" +"\n" +" @aka add \"alias\" \"aka $1 $*\"\n" +" jamessan: The operation succeeded.\n" +"\n" +" Now you can use Aka as you used Alias before.\n" +"\n" +" Trout\n" +" ^^^^^\n" +"\n" +" Add an aka, trout, which expects a word as an argument::\n" +"\n" +" @aka add trout \"reply action slaps $1 with a large " +"trout\"\n" +" jamessan: The operation succeeded.\n" +" @trout me\n" +" * bot slaps me with a large trout\n" +"\n" +" This ``trout`` aka requires the plugin ``Reply`` to be loaded since it\n" +" provides the ``action`` command.\n" +"\n" +" LastFM\n" +" ^^^^^^\n" +"\n" +" Add an aka, ``lastfm``, which expects a last.fm username and replies " +"with\n" +" their most recently played item::\n" +"\n" +" @aka add lastfm \"rss [format concat http://ws.audioscrobbler." +"com/1.0/user/ [format concat [web urlquote $1] /recenttracks.rss]]\"\n" +"\n" +" This ``lastfm`` aka requires the following plugins to be loaded: " +"``RSS``,\n" +" ``Format`` and ``Web``.\n" +"\n" +" ``RSS`` provides ``rss``, ``Format`` provides ``concat`` and ``Web`` " +"provides\n" +" ``urlquote``.\n" +"\n" +" Note that if the nested commands being aliased hadn't been quoted, " +"then\n" +" those commands would have been run immediately, and ``@lastfm`` would " +"always\n" +" reply with the same information, the result of those commands.\n" +" " +msgstr "" +"\n" +"Этот плагин позволяет пользователям создавать собственные псевдонимы к " +"командам и комбинациями команд (вложенные команды).\n" +"\n" +"Импорт из Alias\n" +"^^^^^^^^^^^^^^^\n" +"\n" +"Переходим к использованию плагина Aka от плагина Alias.\n" +"\n" +"Во-первых, загрузим Alias и Aka:\n" +"\n" +" @load Alias\n" +" jamessan: The operation succeeded.\n" +" @load Aka\n" +" jamessan: The operation succeeded.\n" +"\n" +"После этого импортируем базу данных плагина Alias в Aka, если та " +"существует, и отключим плагин Alias::\n" +"\n" +" @importaliasdatabase\n" +" jamessan: The operation succeeded.\n" +" @unload Alias\n" +" jamessan: The operation succeeded.\n" +"\n" +"И наконец добавим псевдоним команды из плагина Alias, чтобы оставить " +"обратную совместимость:\n" +"\n" +" @aka add \"alias\" \"aka $1 $*\"\n" +" jamessan: The operation succeeded.\n" +"\n" +"Теперь вы можете использовать плагин Aka как вы использовали до этого " +"плагин Alias.\n" +"\n" +"Дать леща\n" +"^^^^^^^^^\n" +"\n" +"Добавляем псевдоним (чтобы дать кому-то леща), который принимает одно слово " +"как аргумент::\n" +"\n" +" @aka add trout \"reply action с размаху даёт леща $1\"\n" +" jamessan: The operation succeeded.\n" +" @trout мне\n" +"* bot с размаху даёт леща мне\n" +"\n" +"LastFM\n" +"^^^^^^\n" +"\n" +"Добавляем псевдоним - ``lastfm``, принимает аргументом имя пользователя и " +"отвечает с последней песней, которая у него играла.\n" +"\n" +"@aka add lastfm \"rss [format concat http://ws.audioscrobbler.com/1.0/user/ " +"[format concat [web urlquote $1] /recenttracks.rss]]\"\n" +"\n" +"Этот псевдоним ``lastfm`` требует для работы следующие плагины: ``RSS``, " +"``Format`` и ``Web``.\n" +"\n" +"``RSS`` предоставляет ``rss``, ``Format`` предоставляет ``concat`` и " +"``Web`` предоставляет ``urlquote``.\n" +"\n" +"Обратите внимание, что если бы вложенные команды не были бы обозначены " +"кавычками, то они были бы запущены немедленно, и псевдоним ``@lastfm`` " +"показывал бы всегда одну и ту же информацию - результат выполнения этих " +"команд." + +#: plugin.py:699 +msgid "You've attempted more nesting than is currently allowed on this bot." +msgstr "Вы попробовали больше вложений, чем сейчас это разрешено в боте." + +#: plugin.py:703 +msgid " at least" +msgstr " хотя бы" + +#: plugin.py:712 +msgid "Locked by %s at %s" +msgstr "Заблокировано %s %s" + +#: plugin.py:717 +msgid "" +"\n" +"\n" +"Alias for %q.%s" +msgstr "" +"<глобальный псевдоним, %s %n>\n" +"\n" +"Псевдоним для %q.%s" + +#: plugin.py:718 plugin.py:722 +msgid "argument" +msgstr "аргумент" + +#: plugin.py:721 +msgid "" +"\n" +"\n" +"Alias for %q.%s" +msgstr "" +"<псевдоним %s,%s %n>\n" +"\n" +"Псевдоним для %q.%s" + +#: plugin.py:729 +msgid "You can't overwrite commands in this plugin." +msgstr "Вы не можете перезаписывать команды в этом плагине." + +#: plugin.py:734 +msgid "This Aka has too many spaces in its name." +msgstr "Этот псевдоним содержит слишком много пробелов в имени." + +#: plugin.py:739 +msgid "Can't mix $* and optional args (@1, etc.)" +msgstr "Нельзя перемешивать $* и необязательные аргументы (@1 и др.)" + +#: plugin.py:746 +msgid "This Aka is locked." +msgstr "Этот псевдоним заблокирован." + +#: plugin.py:750 +msgid "" +"[--channel <#channel>] \n" +"\n" +" Defines an alias that executes . The \n" +" should be in the standard \"command argument [nestedcommand " +"argument]\"\n" +" arguments to the alias; they'll be filled with the first, second, " +"etc.\n" +" arguments. $1, $2, etc. can be used for required arguments. @1, " +"@2,\n" +" etc. can be used for optional arguments. $* simply means \"all\n" +" arguments that have not replaced $1, $2, etc.\", ie. it will also\n" +" include optional arguments.\n" +" " +msgstr "" +"[--channel <#канал>] <название> <команда>\n" +"\n" +"Определяет псевдоним c <названием>, который запускает <команду>. <команда> " +"должна быть вида: \"<команда> <аргумент> [<вложенная команда> <аргумент>] " +"<аргументы к псевдониму>\". Аргументы к псевдониму по порядку: $1, $2 и тд. " +"используются для обязательных аргументов; @1, @2 и т.д. используются для " +"необязательных аргументов; $* означает \"все аргументы, которые не были " +"заменены с помощью $1, $2 и т.д.\", это включает в себя и необязательные " +"аргументы тоже." + +#: plugin.py:764 plugin.py:796 plugin.py:827 plugin.py:859 plugin.py:882 +#: plugin.py:905 plugin.py:951 plugin.py:994 +msgid "%r is not a valid channel." +msgstr "%r не является допустимым каналом." + +#: plugin.py:782 +msgid "" +"[--channel <#channel>] \n" +"\n" +" Overwrites an existing alias to execute instead. " +"The\n" +" should be in the standard \"command argument " +"[nestedcommand\n" +" argument]\" arguments to the alias; they'll be filled with the " +"first,\n" +" second, etc. arguments. $1, $2, etc. can be used for required\n" +" arguments. @1, @2, etc. can be used for optional arguments. $* " +"simply\n" +" means \"all arguments that have not replaced $1, $2, etc.\", ie. it " +"will\n" +" also include optional arguments.\n" +" " +msgstr "" +"[--channel <#канал>] <название> <команда>\n" +"\n" +"Перезаписывает существующий псевдоним с <названием>, чтобы он запускал " +"вместо предыдущей данную <команду>. <команда> должна быть вида: \"<команда> " +"<аргумент> [<вложенная команда> <аргумент>] <аргументы к псевдониму>\". " +"Аргументы к псевдониму по порядку: $1, $2 и тд. используются для " +"обязательных аргументов; @1, @2 и т.д. используются для необязательных " +"аргументов; $* означает \"все аргументы, которые не были заменены с помощью " +"$1, $2 и т.д.\", это включает в себя и необязательные аргументы тоже." + +#: plugin.py:819 +msgid "" +"[--channel <#channel>] \n" +"\n" +" Removes the given alias, if unlocked.\n" +" " +msgstr "" +"[--channel <#канал>] <название>\n" +"\n" +"Удаляет данный псевдоним, если тот не заблокирован." + +#: plugin.py:841 +msgid "" +"Check if the user has any of the required capabilities to manage\n" +" the regexp database." +msgstr "" +"Проверяет, есть ли у пользователя необходимые привилегии для управления " +"базой данных регулярных выражений." + +#: plugin.py:851 +msgid "" +"[--channel <#channel>] \n" +"\n" +" Locks an alias so that no one else can change it.\n" +" " +msgstr "" +"[--channel <#канал>] <псевдоним>\n" +"\n" +"Блокирует данный псевдоним, чтобы никто не мог его изменить." + +#: plugin.py:874 +msgid "" +"[--channel <#channel>] \n" +"\n" +" Unlocks an alias so that people can define new aliases over it.\n" +" " +msgstr "" +"[--channel <#канал>] <псевдоним>\n" +"\n" +"Разблокирует данный псевдоним, чтобы люди могли определять новые псевдонимы " +"поверх этого." + +#: plugin.py:897 +msgid "" +"[--channel <#channel>] \n" +"\n" +" This command shows the content of an Aka.\n" +" " +msgstr "" +"[--channel <#канал>] <псевдоним>\n" +"\n" +"Эта команда показывает содержание данного псевдонима." + +#: plugin.py:917 +msgid "" +"takes no arguments\n" +"\n" +" Imports the Alias database into Aka's, and clean the former." +msgstr "" +"не принимает аргументов\n" +"\n" +"Импортирует базу данных Alias в Aka, и очищает первую." + +#: plugin.py:922 +msgid "Alias plugin is not loaded." +msgstr "Плагин Alias не загружен." + +#: plugin.py:933 +msgid "Error occured when importing the %n: %L" +msgstr "Произошла ошибка при импорте %n: %L" + +#: plugin.py:941 +msgid "" +"[--channel <#channel>] [--keys] [--unlocked|--locked]\n" +"\n" +" Lists all Akas defined for . If is not " +"specified,\n" +" lists all global Akas. If --keys is given, lists only the Aka " +"names\n" +" and not their commands." +msgstr "" +"[--channel <#канал>] [--keys] [--unlocked|--locked]\n" +"\n" +"Показывает все псевдонимы, определённые для данного <канала>. Если <канал> " +"не дан в аргументах, то показывает все глобальные псевдонимы. Если дан --" +"keys, то показывает только названия псевдонимов без соответствующих им " +"команд." + +#: plugin.py:960 +msgid "--locked and --unlocked are incompatible options." +msgstr "--locked и --unlocked – несовместимые параметры." + +#: plugin.py:980 +msgid "No Akas found." +msgstr "Не найдено ни одного псевдонима." + +#: plugin.py:985 +msgid "" +"[--channel <#channel>] \n" +"\n" +" Searches Akas defined for . If is not " +"specified,\n" +" searches all global Akas." +msgstr "" +"[--channel <#канал>] <запрос>\n" +"\n" +"Производит поиск среди псевдонимов, определённых в данном <канале>, по " +"данному <запросу>. Если <канал> не дан в аргументах, то поиск производится " +"по всем глобальным псевдонимам." + +#: plugin.py:1004 +msgid "No matching Akas were found." +msgstr "Не найдено ни одного совпадающего псевдонима." diff --git a/plugins/Anonymous/locales/ru.po b/plugins/Anonymous/locales/ru.po new file mode 100644 index 000000000..b55ca654e --- /dev/null +++ b/plugins/Anonymous/locales/ru.po @@ -0,0 +1,249 @@ +# Anonymous plugin for Limnoria +# Copyright (C) 2024 Limnoria +# ssdaniel24 , 2024. +# +msgid "" +msgstr "" +"Project-Id-Version: \n" +"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"PO-Revision-Date: 2024-06-12 22:04+0300\n" +"Last-Translator: ssdaniel24 \n" +"Language-Team: \n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: pygettext.py 1.5\n" +"X-Generator: Poedit 3.4.2\n" + +#: config.py:50 +msgid "" +"Determines whether\n" +" the bot should require people trying to use this plugin to be in the\n" +" channel they wish to anonymously send to." +msgstr "" +"Определяет, должен ли бот требовать, чтобы люди, использующие этот плагин, " +"находились в канале, куда они хотят написать анонимно." + +#: config.py:54 +msgid "" +"Determines whether the bot should require\n" +" people trying to use this plugin to be registered." +msgstr "" +"Определяет, должен ли бот требовать регистрации у людей, которые " +"используют этот плагин." + +#: config.py:57 +msgid "" +"Determines what capability (if any) the bot should\n" +" require people trying to use this plugin to have." +msgstr "" +"Определяет какие привилегии (если таковые имеются) должен проверять бот у " +"людей, которые используют этот плагин." + +#: config.py:60 +msgid "" +"Determines whether the bot will allow the\n" +" \"tell\" command to be used. If true, the bot will allow the \"tell\"\n" +" command to send private messages to other users." +msgstr "" +"Определяет разрешение на использование команды \"tell\". Если значение " +"установлено в true, то бот позволит использовать команду \"tell\" для " +"отправки личных сообщений другим пользователям." + +#: plugin.py:45 +msgid "" +"\n" +" This plugin allows users to act through the bot anonymously. The " +"'do'\n" +" command has the bot perform an anonymous action in a given channel, " +"and\n" +" the 'say' command allows other people to speak through the bot. " +"Since\n" +" this can be fairly well abused, you might want to set\n" +" supybot.plugins.Anonymous.requireCapability so only users with that\n" +" capability can use this plugin. For extra security, you can require " +"that\n" +" the user be *in* the channel they are trying to address anonymously " +"with\n" +" supybot.plugins.Anonymous.requirePresenceInChannel, or you can " +"require\n" +" that the user be registered by setting\n" +" supybot.plugins.Anonymous.requireRegistration.\n" +"\n" +" Example: Proving that you are the owner\n" +" ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" +"\n" +" When you ask for cloak/vhost for your bot, the network operators will\n" +" often ask you to prove that you own the bot. You can do this for " +"example\n" +" with the following method::\n" +"\n" +" @load Anonymous\n" +" @config plugins.anonymous.requirecapability owner\n" +" @config plugins.anonymous.allowprivatetarget True\n" +" @anonymous say Hi, my owner is :)\n" +"\n" +" This\n" +" * Loads the plugin.\n" +" * Makes the plugin require that you are the owner\n" +"\n" +" * If anyone could send private messages as the bot, they could also\n" +" access network services.\n" +"\n" +" * Allows sending private messages\n" +" * Sends message ``Hi, my owner is :)`` to ``operator " +"nick``.\n" +"\n" +" * Note that you won't see the messages that are sent to the bot.\n" +"\n" +" " +msgstr "" +"Этот плагин позволяет пользователям анонимно взаимодействовать через бота. " +"Команда 'do' позволяет выполнить некоторое анонимное действие через бота в " +"данном канале, и команда 'say' позволяет другим пользователям общаться " +"через бота. Этим плагином можно легко злоупотреблять, поэтому возможно вы " +"захотите настройку supybot.plugins.Anonymous.requireCapability, чтобы " +"только пользователи с данной привилегией могли могли использовать этот " +"плагин. Для повышенной безопасности, вы можете требовать, чтобы " +"пользователь был в канале, где они хотят взаимодействовать через бота " +"анонимно, с помощью настроки supybot.plugins.Anonymous." +"requirePresenceInChannel. Или вы можете требовать, чтобы пользователь был " +"зарегистрирован с помощью настройки supybot.plugins.Anonymous." +"requireRegistration.\n" +"\n" +"Пример: доказательство того, что вы являетесь владельцем\n" +"^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" +"\n" +"Когда вы просите cloak или vhost для своего бота, операторы сети часто " +"могут просить вас доказать, что являетесь владельцем бота. Для примера вы " +"можете сделать это так:\n" +"\n" +"@load Anonymous\n" +"@config plugins.anonymous.requirecapability owner\n" +"@config plugins.anonymous.allowprivatetarget True\n" +"@anonymous say <ник оператора>: Привет, мой хозяин это <ваш ник> :)\n" +"\n" +"Комбинация команд выше\n" +"* Загружает плагин.\n" +"* Выставляет в настройках плагина, чтобы бот требовал привилегии " +"владельца.\n" +"\n" +" * Если кто-нибудь может посылать сообщения от имени бота, то они в том " +"числе могут запрашивать сервисы сети.\n" +"\n" +"* Разрешает отправку личных сообщений.\n" +"* Отправляет сообщение ``Привет, мой хозяин это <ваш ник> :)`` в адрес " +"``<ника оператора>``.\n" +"\n" +" Примечание: вы не сможете получать сообщения, которые отправлены боту." + +#: plugin.py:98 +msgid "You must be in %s to %q in there." +msgstr "Вы должны быть в %s, чтобы %q там." + +#: plugin.py:102 +msgid "I'm lobotomized in %s." +msgstr "Мне сделали лоботомию в %s." + +#: plugin.py:105 +msgid "" +"That channel has set its capabilities so as to disallow the use of this " +"plugin." +msgstr "Этот канал настроен на запрет использования этого плагина." + +#: plugin.py:108 +msgid "" +"This command is disabled (supybot.plugins.Anonymous.allowPrivateTarget is " +"False)." +msgstr "" +"Эта команда отключена (настройка supybot.plugins.Anonymous." +"allowPrivateTarget установлена в False)." + +#: plugin.py:112 +msgid "" +" \n" +"\n" +" Sends to .\n" +" " +msgstr "" +"<канал> <текст>\n" +"\n" +"Отправляет <текст> в <канал>." + +#: plugin.py:124 +msgid "" +" \n" +"\n" +" Sends to . Can only be used if\n" +" supybot.plugins.Anonymous.allowPrivateTarget is True.\n" +" " +msgstr "" +"<ник> <текст>\n" +"\n" +"Отправляет <текст> в адрес <ника>. Команда может быть использована, только " +"если настройка supybot.plugins.Anonymous.allowPrivateTarget установлена в " +"True." + +#: plugin.py:137 +msgid "" +" \n" +"\n" +" Performs in .\n" +" " +msgstr "" +"<канал> <действие>\n" +"\n" +"Выполняет <действие> в <канале>." + +#: plugin.py:148 +msgid "" +" \n" +"\n" +" Sends the to 's last message.\n" +" is typically a smiley or an emoji.\n" +"\n" +" This may not be supported on the current network, as this\n" +" command depends on IRCv3 features.\n" +" This is also not supported if\n" +" supybot.protocols.irc.experimentalExtensions disabled\n" +" (don't enable it unless you know what you are doing).\n" +" " +msgstr "" +"<канал> <реакция> <ник>\n" +"\n" +"Отправляет <реакцию> в ответ на последнее сообщение <ника>. <реакция> это " +"обычно смайлик или эмодзи.\n" +"\n" +"Текущая сеть может не поддерживать эту команду, так как команда зависит от " +"возможностей IRCv3. Она также не поддерживается, если в плагине отключена " +"настройка supybot.protocols.irc.experimentalExtensions (не переключайте, " +"если вы не знаете, что вы делаете)." + +#: plugin.py:162 +msgid "" +"Unable to react, supybot.protocols.irc.experimentalExtensions is disabled." +msgstr "" +"Не удаётся отправить реакцию, настройка supybot.protocols.irc." +"experimentalExtensions отключена." + +#: plugin.py:167 +msgid "Unable to react, the network does not support message-tags." +msgstr "" +"Не удаётся отправить реакцию, данная сеть не поддерживает message-tags." + +#: plugin.py:172 +msgid "" +"Unable to react, the network does not allow draft/reply and/or draft/react." +msgstr "" +"Не удаётся отправить реакцию, данная сеть не позволяет использовать" +"draft/reply или draft/react." + +#: plugin.py:181 +msgid "I couldn't find a message from %s in my history of %s messages." +msgstr "Не могу найти сообщение от %s в моей истории сообщений (%s)." + +#: plugin.py:189 +msgid "Unable to react, %s's last message does not have a message id." +msgstr "" +"Не удаётся отправить реакцию, последнее сообщение %s не имеет id сообщения." diff --git a/plugins/PluginDownloader/locales/ru.po b/plugins/PluginDownloader/locales/ru.po new file mode 100644 index 000000000..53ebbc6f7 --- /dev/null +++ b/plugins/PluginDownloader/locales/ru.po @@ -0,0 +1,205 @@ +# PluginDownloader plugin for Limnoria +# Copyright (C) 2024 Limnoria +# ssdaniel24 , 2024. +# +msgid "" +msgstr "" +"Project-Id-Version: \n" +"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"PO-Revision-Date: 2024-06-12 22:10+0300\n" +"Last-Translator: ssdaniel24 \n" +"Language-Team: \n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: pygettext.py 1.5\n" +"X-Generator: Poedit 3.4.2\n" + +#: plugin.py:167 +msgid "" +"Plugin is probably not compatible with your Python version (3.x) and could " +"not be converted because 2to3 is not installed." +msgstr "" +"Плагин возможно несовместим с вашей версией Python (3.x) и не может быть " +"конвертирован, так как 2to3 не установлен." + +#: plugin.py:174 +msgid "" +"Plugin was designed for Python 2, but an attempt to convert it to Python 3 " +"has been made. There is no guarantee it will work, though." +msgstr "" +"Плагин был разработан на Python 2, но была сделана попытка конвертировать " +"его на Python 3, однако не гарантируется, что плагин будет работать." + +#: plugin.py:178 +msgid "Plugin successfully installed." +msgstr "Плагин успешно установлен." + +#: plugin.py:323 +msgid "" +"\n" +" This plugin allows you to install unofficial plugins from\n" +" multiple repositories easily. Use the \"repolist\" command to see list " +"of\n" +" available repositories and \"repolist \" to list plugins,\n" +" which are available in that repository. When you want to install a " +"plugin,\n" +" just run command \"install \".\n" +"\n" +" First start by using the `plugindownloader repolist` command to see the\n" +" available repositories.\n" +"\n" +" To see the plugins inside repository, use command\n" +" `plugindownloader repolist `\n" +"\n" +" When you see anything interesting, you can use\n" +" `plugindownloader info ` to see what the plugin is\n" +" for.\n" +"\n" +" And finally to install the plugin,\n" +" `plugindownloader install `.\n" +"\n" +" Examples\n" +" ^^^^^^^^\n" +"\n" +" ::\n" +"\n" +" < Mikaela> @load PluginDownloader\n" +" < Limnoria> Ok.\n" +" < Mikaela> @plugindownloader repolist\n" +" < Limnoria> Antibody, jlu5, Hoaas, Iota, progval, SpiderDave, " +"boombot, code4lib, code4lib-edsu, code4lib-snapshot, doorbot, frumious, " +"jonimoose, mailed-notifier, mtughan-weather, nanotube-bitcoin, nyuszika7h, " +"nyuszika7h-old, pingdom, quantumlemur, resistivecorpse, scrum, skgsergio, " +"stepnem\n" +" < Mikaela> @plugindownloader repolist progval\n" +" < Limnoria> AttackProtector, AutoTrans, Biography, Brainfuck, " +"ChannelStatus, Cleverbot, Coffee, Coinpan, Debian, ERepublik, Eureka, " +"Fortune, GUI, GitHub, Glob2Chan, GoodFrench, I18nPlaceholder, IMDb, " +"IgnoreNonVoice, Iwant, Kickme, LimnoriaChan, LinkRelay, ListEmpty, Listener, " +"Markovgen, MegaHAL, MilleBornes, NoLatin1, NoisyKarma, OEIS, PPP, PingTime, " +"Pinglist, RateLimit, Rbls, Redmine, Scheme, Seeks, (1 more message)\n" +" < Mikaela> more\n" +" < Limnoria> SilencePlugin, StdoutCapture, Sudo, SupyML, SupySandbox, " +"TWSS, Trigger, Trivia, Twitter, TwitterStream, Untiny, Variables, WebDoc, " +"WebLogs, WebStats, Website, WikiTrans, Wikipedia, WunderWeather\n" +" < Mikaela> @plugindownloader info progval Wikipedia\n" +" < Limnoria> Grabs data from Wikipedia.\n" +" < Mikaela> @plugindownloader install progval Wikipedia\n" +" < Limnoria> Ok.\n" +" < Mikaela> @load Wikipedia\n" +" < Limnoria> Ok.\n" +" " +msgstr "" +"Этот плагин позволяет вам с легкостью устанавливать неофициальные плагины из " +"различных репозиториев. Используйте команду \"repolist\", чтобы увидеть " +"список доступных репозиториев, и команду \"repolist <репозиторий>\", чтобы " +"увидеть список плагинов, доступные в данном репозитории. Когда вы захотите " +"установить плагин, просто запустите команду \"install <репозиторий> " +"<плагин>\".\n" +"\n" +"Для начала используйте команду `plugindownloader repolist`, чтобы увидеть " +"доступные репозитории.\n" +"\n" +"Чтобы увидеть плагины в репозитории, используйте команду `plugindownloader " +"repolist <репозиторий>`\n" +"\n" +"Когда вы найдёте что-нибудь интересное, вы можете использовать команду " +"`plugindownloader info <репозиторий> <плагин>`, чтобы увидеть для чего этот " +"плагин нужен.\n" +"\n" +"И наконец, для установки плагина используйте `plugindownloader install " +"<репозиторий> <плагин>`.\n" +"\n" +"Примеры\n" +"^^^^^^^\n" +"\n" +"< Mikaela> @load PluginDownloader\n" +"< Limnoria> Ok.\n" +"< Mikaela> @plugindownloader repolist\n" +"< Limnoria> Antibody, jlu5, Hoaas, Iota, progval, SpiderDave, boombot, " +"code4lib, code4lib-edsu, code4lib-snapshot, doorbot, frumious, jonimoose, " +"mailed-notifier, mtughan-weather, nanotube-bitcoin, nyuszika7h, nyuszika7h-" +"old, pingdom, quantumlemur, resistivecorpse, scrum, skgsergio, stepnem\n" +"< Mikaela> @plugindownloader repolist progval\n" +"< Limnoria> AttackProtector, AutoTrans, Biography, Brainfuck, ChannelStatus, " +"Cleverbot, Coffee, Coinpan, Debian, ERepublik, Eureka, Fortune, GUI, GitHub, " +"Glob2Chan, GoodFrench, I18nPlaceholder, IMDb, IgnoreNonVoice, Iwant, Kickme, " +"LimnoriaChan, LinkRelay, ListEmpty, Listener, Markovgen, MegaHAL, " +"MilleBornes, NoLatin1, NoisyKarma, OEIS, PPP, PingTime, Pinglist, RateLimit, " +"Rbls, Redmine, Scheme, Seeks, (1 more message)\n" +"< Mikaela> more\n" +"< Limnoria> SilencePlugin, StdoutCapture, Sudo, SupyML, SupySandbox, TWSS, " +"Trigger, Trivia, Twitter, TwitterStream, Untiny, Variables, WebDoc, WebLogs, " +"WebStats, Website, WikiTrans, Wikipedia, WunderWeather\n" +"< Mikaela> @plugindownloader info progval Wikipedia\n" +"< Limnoria> Grabs data from Wikipedia.\n" +"< Mikaela> @plugindownloader install progval Wikipedia\n" +"< Limnoria> Ok.\n" +"< Mikaela> @load Wikipedia\n" +"< Limnoria> Ok." + +#: plugin.py:368 +msgid "" +"[]\n" +"\n" +" Displays the list of plugins in the .\n" +" If is not given, returns a list of available\n" +" repositories." +msgstr "" +"[<репозиторий>]\n" +"\n" +"Показывает список плагинов в данном <репозитории>. Если <репозиторий> не дан " +"аргументом, то показывает список доступных репозиториев." + +#: plugin.py:376 plugin.py:387 +msgid ", " +msgstr "" + +#: plugin.py:378 plugin.py:400 plugin.py:425 +msgid "This repository does not exist or is not known by this bot." +msgstr "Этот репозиторий не существует или неизвестен боту." + +#: plugin.py:385 +msgid "No plugin found in this repository." +msgstr "В этом репозитории не найдено ни одного плагина." + +#: plugin.py:392 +msgid "" +" \n" +"\n" +" Downloads and installs the from the ." +msgstr "" +"<репозиторий> <плагин>\n" +"\n" +"Скачивает и устанавливает данный <плагин> из данного <репозитория>." + +#: plugin.py:396 +msgid "" +"This command is not available, because supybot.commands.allowShell is False." +msgstr "" +"Эта команда недоступна, так как настройка supybot.command.allowShell " +"установлена в False." + +#: plugin.py:405 plugin.py:430 +msgid "This plugin does not exist in this repository." +msgstr "Этого плагина нет в данном репозитории." + +#: plugin.py:420 +msgid "" +" \n" +"\n" +" Displays informations on the in the ." +msgstr "" +"<репозиторий> <плагин>\n" +"\n" +"Показывает информацию о данном <плагине> в этом <репозитории>." + +#: plugin.py:434 +msgid "No README found for this plugin." +msgstr "В этом плагине не найдено файла README." + +#: plugin.py:437 +msgid "This plugin has no description." +msgstr "Этот плагин не предоставляет описание." diff --git a/plugins/Seen/locales/ru.po b/plugins/Seen/locales/ru.po new file mode 100644 index 000000000..82c6b3343 --- /dev/null +++ b/plugins/Seen/locales/ru.po @@ -0,0 +1,201 @@ +# Seen plugin for Limnoria +# Copyright (C) 2024 Limnoria +# ssdaniel24 , 2024. +msgid "" +msgstr "" +"Project-Id-Version: \n" +"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"PO-Revision-Date: 2024-06-12 15:01+0300\n" +"Last-Translator: ssdaniel24 \n" +"Language-Team: \n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: pygettext.py 1.5\n" +"X-Generator: Poedit 3.4.2\n" + +#: config.py:50 +msgid "" +"The minimum non-wildcard characters\n" +" required to perform a 'seen' request. Of course, it only applies if " +"there\n" +" is a wildcard in the request." +msgstr "" +"Минимальное количество обыкновенных символов (не символов подстановки!), " +"необходимые для запроса 'seen'. Конечно же эта настройка действует только, " +"когда запрос содержит символы подстановки." + +#: config.py:54 +msgid "" +"Determines whether the last message will\n" +" be displayed with @seen. Useful for keeping messages from a channel\n" +" private." +msgstr "" +"Определяет будет ли последнее сообщение показываться в результатах команды " +"seen. Полезно для сохранения приватности сообщений в канале." + +#: plugin.py:98 +msgid "" +"This plugin allows you to see when and what someone last said and\n" +" what you missed since you left a channel." +msgstr "" +"Этот плагин позволяет вам видеть, когда и что кто-нибудь в последний раз " +"написал, и что вы упустили с тех пор как покинули канал." + +#: plugin.py:190 +msgid "Not enough non-wildcard characters." +msgstr "Недостаточно обыкновенных символов (НЕ символов подстановки)." + +#: plugin.py:198 plugin.py:306 +msgid "%s was last seen in %s %s ago" +msgstr "%s в последний раз видели в %s %s назад." + +#: plugin.py:204 plugin.py:283 plugin.py:310 +msgid "%s: %s" +msgstr "%s: %s" + +#: plugin.py:210 +msgid "%s (%s ago)" +msgstr "%s (%s назад)" + +#: plugin.py:212 +msgid "%s could be %L" +msgstr "%s мог(ла) быть %L" + +#: plugin.py:212 +msgid "or" +msgstr "или" + +#: plugin.py:214 +msgid "I haven't seen anyone matching %s." +msgstr "Я не видел никого, кто бы соответствовал %s." + +#: plugin.py:216 plugin.py:313 +msgid "I have not seen %s." +msgstr "Я не видел %s." + +#: plugin.py:223 +msgid "You must be in %s to use this command." +msgstr "Вы должны быть в %s для использования этой команды." + +#: plugin.py:225 +msgid "%s must be in %s to use this command." +msgstr "%s должен/должна быть в %s для использования этой команды." + +#: plugin.py:231 +msgid "" +"[] \n" +"\n" +" Returns the last time was seen and what was last " +"seen\n" +" saying. is only necessary if the message isn't sent on " +"the\n" +" channel itself. may contain * as a wildcard.\n" +" " +msgstr "" +"[<канал>] <ник>\n" +"\n" +"Возвращает последнее время, когда видели <ник> и его/её последнее " +"сообщение. Передавать <канал> требуется в случае, если команда запущена не " +"на этом канале. Данный <ник> может содержать * как символ подстановки." + +#: plugin.py:238 plugin.py:256 +msgid "You've found me!" +msgstr "О нет! Вы нашли меня." + +#: plugin.py:246 +msgid "" +"[] [--user ] []\n" +"\n" +" Returns the last time was seen and what was last " +"seen\n" +" doing. This includes any form of activity, instead of just " +"PRIVMSGs.\n" +" If isn't specified, returns the last activity seen in\n" +" . If --user is specified, looks up name in the user " +"database\n" +" and returns the last time user was active in . " +"is\n" +" only necessary if the message isn't sent on the channel itself.\n" +" " +msgstr "" +"[<канал>] [--user <имя>] [<ник>]\n" +"\n" +"Возвращает последнее время, когда видели <ник> и его/её последние " +"действия. Это включает в себя любые формы активности, не ограничиваясь " +"только PRIVMSG. Если <ник> не задан, то возвращает последнюю активность в " +"данном <канале>. Если задан --user, то ищет данное <имя> в базе данных и " +"возвращает последнее время, когда этот пользователь был активен в данном " +"<канале>. Передавать <канал> требуется в случае, если команда запущена не " +"на этом канале." + +#: plugin.py:280 +msgid "Someone was last seen in %s %s ago" +msgstr "В последний раз кого-то видели в %s %s назад" + +#: plugin.py:286 +msgid "I have never seen anyone." +msgstr "Я не видел никого." + +#: plugin.py:290 +msgid "" +"[]\n" +"\n" +" Returns the last thing said in . is only " +"necessary\n" +" if the message isn't sent in the channel itself.\n" +" " +msgstr "" +"[<канал>]\n" +"\n" +"Возвращает последнее, что писали в <канале>. Передавать в аргумент <канал> " +"требуется в случае, если команда запущена не на этом канале." + +#: plugin.py:317 +msgid "" +"[] \n" +"\n" +" Returns the last time was seen and what was last " +"seen\n" +" saying. This looks up in the user seen database, which " +"means\n" +" that it could be any nick recognized as user that was " +"seen.\n" +" is only necessary if the message isn't sent in the " +"channel\n" +" itself.\n" +" " +msgstr "" +"[<канал>] <имя>\n" +"\n" +"Возвращает время, когда в последний раз видели <имя> и его/её последнее " +"сообщение. Эта команда ищет <имя> в базе данных пользователей Seen, что " +"значит поиск будет производится среди всех ников, закреплённых за " +"пользователем с данным <именем>. Передавать в аргументы <канал> требуется " +"в случае, если команда запущена не на этом канале." + +#: plugin.py:331 +msgid "" +"[] []\n" +"\n" +" Returns the messages since last left the channel.\n" +" If is not given, it defaults to the nickname of the person\n" +" calling the command.\n" +" " +msgstr "" +"[<канал>] [<ник>]\n" +"\n" +"Возвращает сообщения с тех пор как данный <ник> покинул канал. Если <ник> " +"не передан в аргументы, то используется ник пользователя, запустившего " +"команду." + +#: plugin.py:363 +msgid "I couldn't find in my history of %s messages where %r last left %s" +msgstr "Не могу найти в моей истории сообщений (%s), где %r покинул %s." + +#: plugin.py:372 +msgid "Either %s didn't leave, or no messages were sent while %s was gone." +msgstr "" +"Либо %s не покидал(а) канал, либо ни одного сообщения не было отправлено с " +"тех пор, как %s вышел/вышла." diff --git a/plugins/Todo/locales/ru.po b/plugins/Todo/locales/ru.po new file mode 100644 index 000000000..992757566 --- /dev/null +++ b/plugins/Todo/locales/ru.po @@ -0,0 +1,176 @@ +# Todo plugin for Limnoria +# Copyright (C) 2024 Limnoria +# ssdaniel24 , 2024. +# +msgid "" +msgstr "" +"Project-Id-Version: \n" +"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"PO-Revision-Date: 2024-06-12 15:01+0300\n" +"Last-Translator: ssdaniel24 \n" +"Language-Team: \n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: pygettext.py 1.5\n" +"X-Generator: Poedit 3.4.2\n" + +#: config.py:51 +msgid "" +"Determines whether users can read the\n" +" todo-list of another user." +msgstr "Определяет, могут ли пользователи читать чужие списки дел." + +#: plugin.py:123 +msgid "" +"This plugin allows you to create your own personal to-do list on\n" +" the bot." +msgstr "" +"Этот плагин позволяет вам создавать ваши собственные списки дел в боте." + +#: plugin.py:139 +msgid "" +"[] []\n" +"\n" +" Retrieves a task for the given task id. If no task id is given, " +"it\n" +" will return a list of task ids that that user has added to their " +"todo\n" +" list.\n" +" " +msgstr "" +"[<имя пользователя>] []\n" +"\n" +"Получает задачу по заданному id. Если id не передан в аргументы, то " +"возвращает список id задач, которые данный пользователь добавил в свой " +"список дел." + +#: plugin.py:150 +msgid "You are not allowed to see other users todo-list." +msgstr "Вам не разрешено видеть чужие списки дел." + +#: plugin.py:157 +msgid "#%i: %s" +msgstr "#%i: %s" + +#: plugin.py:162 +msgid "%s for %s: %L" +msgstr "%s для %s: %L" + +#: plugin.py:166 +msgid "That user has no tasks in their todo list." +msgstr "Этот пользователь не имеет задач в его/её списке дел." + +#: plugin.py:168 +msgid "You have no tasks in your todo list." +msgstr "У вас нет задач в вашем списке дел." + +#: plugin.py:175 +msgid "Active" +msgstr "Активная" + +#: plugin.py:177 +msgid "Inactive" +msgstr "Неактивная" + +#: plugin.py:179 +msgid ", priority: %i" +msgstr ", приоритет: %i" + +#: plugin.py:182 +msgid "%s todo for %s: %s (Added at %s)" +msgstr "%s задача для %s: %s (добавлено %s)" + +#: plugin.py:186 plugin.py:270 plugin.py:284 +msgid "task id" +msgstr "id задачи" + +#: plugin.py:191 +msgid "" +"[--priority=] \n" +"\n" +" Adds as a task in your own personal todo list. The " +"optional\n" +" priority argument allows you to set a task as a high or low " +"priority.\n" +" Any integer is valid.\n" +" " +msgstr "" +"[--priority=<число>] <текст>\n" +"\n" +"Добавляет данный <текст> в ваш список дел. Необязательный аргумент с " +"приоритетом позволяет вам задавать высокий или низкий приоритет задачи. " +"Допустимо любое целое число." + +#: plugin.py:202 +msgid "(Todo #%i added)" +msgstr "(Задача #%i добавлена)" + +#: plugin.py:208 +msgid "" +" [ ...]\n" +"\n" +" Removes from your personal todo list.\n" +" " +msgstr "" +" [ ...]\n" +"\n" +"Удаляет задачу с данным из вашего списка дела." + +#: plugin.py:219 +msgid "" +"Task %i could not be removed either because that id doesn't exist or it has " +"been removed already." +msgstr "" +"Задача %i не может быть удалена, так как либо задачи с таким id не " +"существует, либо она уже удалена." + +#: plugin.py:223 +msgid "" +"No tasks were removed because the following tasks could not be removed: %L." +msgstr "" +"Ни одна задача не была удалена, так как они не могут быть удалены: %L." + +#: plugin.py:233 +msgid "" +"[--{regexp} ] [ ...]\n" +"\n" +" Searches your todos for tasks matching . If --regexp is " +"given,\n" +" its associated value is taken as a regexp and matched against the\n" +" tasks.\n" +" " +msgstr "" +"[-{regexp} <значение>] [<шаблон> <шаблон> ...]\n" +"\n" +"Производит поиск задач по вашим спискам дел, совпадающих с <шаблоном> " +"поиска. Если дан --regexp, то его <значение> принимается как регулярное " +"выражение и сопоставляется с задачами." + +#: plugin.py:256 +msgid "No tasks matched that query." +msgstr "Ни одна задача не совпадает с запросом." + +#: plugin.py:262 +msgid "" +" \n" +"\n" +" Sets the priority of the todo with the given id to the specified " +"value.\n" +" " +msgstr "" +" <приоритет>\n" +"\n" +"Выставляет приоритет задачи с данным в данное значение." + +#: plugin.py:276 +msgid "" +" \n" +"\n" +" Modify the task with the given id using the supplied regexp.\n" +" " +msgstr "" +" \n" +"\n" +"Изменяет задачу с данным id, используя данное регулярное выражение." diff --git a/src/i18n.py b/src/i18n.py index da1bc6167..4557fb758 100644 --- a/src/i18n.py +++ b/src/i18n.py @@ -50,7 +50,7 @@ MSGSTR = 'msgstr "' FUZZY = '#, fuzzy' currentLocale = 'en' -SUPPORTED_LANGUAGES = ['de', 'en', 'es', 'fi', 'fr', 'it'] +SUPPORTED_LANGUAGES = ['de', 'en', 'es', 'fi', 'fr', 'it', 'ru'] class PluginNotFound(Exception): pass From 7ccaeb088abec2b3681aaa14a42c2e116a35f38f Mon Sep 17 00:00:00 2001 From: Valentin Lorentz Date: Sat, 15 Jun 2024 08:19:55 +0200 Subject: [PATCH 19/69] GPG: Import documentation removed from the Getting Started guide --- plugins/GPG/README.rst | 30 ++++++++++++++++++++++++++++++ plugins/GPG/plugin.py | 33 ++++++++++++++++++++++++++++++++- 2 files changed, 62 insertions(+), 1 deletion(-) diff --git a/plugins/GPG/README.rst b/plugins/GPG/README.rst index 170685c4a..1880f2175 100644 --- a/plugins/GPG/README.rst +++ b/plugins/GPG/README.rst @@ -13,6 +13,36 @@ Usage Provides authentication based on GPG keys. +First you must associate your GPG key with your Limnoria account. The gpg +add command takes two arguments, key id and key server. + +My key is 0x0C207F07B2F32B67 and it's on keyserver pool.sks-keyservers.net +so and now I add it to my bot:: + + +gpg add 0x0C207F07B2F32B67 pool.sks-keyservers.net + 1 key imported, 0 unchanged, 0 not imported. + +Now I can get token to sign so I can identify:: + + +gpg gettoken + Your token is: {03640620-97ea-4fdf-b0c3-ce8fb62f2dc5}. Please sign it with your GPG key, paste it somewhere, and call the 'auth' command with the URL to the (raw) file containing the signature. + +Then I follow the instructions and sign my token in terminal:: + + echo "{03640620-97ea-4fdf-b0c3-ce8fb62f2dc5}"|gpg --clearsign|curl -F 'sprunge=<-' http://sprunge.us + +Note that I sent the output to curl with flags to directly send the +clearsigned content to sprunge.us pastebin. Curl should be installed on +most of distributions and comes with msysgit. If you remove the curl part, +you get the output to terminal and can pastebin it to any pastebin of +your choice. Sprunge.us has only plain text and is easy so I used it in +this example. + +And last I give the bot link to the plain text signature:: + + +gpg auth http://sprunge.us/DUdd + You are now authenticated as Mikaela. + .. _commands-GPG: Commands diff --git a/plugins/GPG/plugin.py b/plugins/GPG/plugin.py index a4c65d537..de0b6f2b6 100644 --- a/plugins/GPG/plugin.py +++ b/plugins/GPG/plugin.py @@ -89,7 +89,38 @@ else: 'too much time to answer the request.')) class GPG(callbacks.Plugin): - """Provides authentication based on GPG keys.""" + """Provides authentication based on GPG keys. + + First you must associate your GPG key with your Limnoria account. The gpg + add command takes two arguments, key id and key server. + + My key is 0x0C207F07B2F32B67 and it's on keyserver pool.sks-keyservers.net + so and now I add it to my bot:: + + +gpg add 0x0C207F07B2F32B67 pool.sks-keyservers.net + 1 key imported, 0 unchanged, 0 not imported. + + Now I can get token to sign so I can identify:: + + +gpg gettoken + Your token is: {03640620-97ea-4fdf-b0c3-ce8fb62f2dc5}. Please sign it with your GPG key, paste it somewhere, and call the 'auth' command with the URL to the (raw) file containing the signature. + + Then I follow the instructions and sign my token in terminal:: + + echo "{03640620-97ea-4fdf-b0c3-ce8fb62f2dc5}"|gpg --clearsign|curl -F 'sprunge=<-' http://sprunge.us + + Note that I sent the output to curl with flags to directly send the + clearsigned content to sprunge.us pastebin. Curl should be installed on + most of distributions and comes with msysgit. If you remove the curl part, + you get the output to terminal and can pastebin it to any pastebin of + your choice. Sprunge.us has only plain text and is easy so I used it in + this example. + + And last I give the bot link to the plain text signature:: + + +gpg auth http://sprunge.us/DUdd + You are now authenticated as Mikaela. + """ class key(callbacks.Commands): @check_gpg_available def add(self, irc, msg, args, user, keyid, keyserver): From 01cdfee53e9ab4858c1ffff149e5a43510c4fa1a Mon Sep 17 00:00:00 2001 From: Pratyush Desai Date: Fri, 28 Jun 2024 07:35:11 +0530 Subject: [PATCH 20/69] Karma: ignore trailing chars, spaces, tabs (#1579) Signed-off-by: Pratyush Desai --- plugins/Karma/plugin.py | 4 ++-- plugins/Karma/test.py | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/plugins/Karma/plugin.py b/plugins/Karma/plugin.py index bd896bf30..4f7c91160 100644 --- a/plugins/Karma/plugin.py +++ b/plugins/Karma/plugin.py @@ -272,7 +272,7 @@ class Karma(callbacks.Plugin): karma = '' for s in inc: if thing.endswith(s): - thing = thing[:-len(s)] + thing = thing[:-len(s)].rstrip(",:\t ") # Don't reply if the target isn't a nick if onlynicks and thing.lower() not in map(ircutils.toLower, irc.state.channels[channel].users): @@ -286,7 +286,7 @@ class Karma(callbacks.Plugin): karma = self.db.get(channel, self._normalizeThing(thing)) for s in dec: if thing.endswith(s): - thing = thing[:-len(s)] + thing = thing[:-len(s)].rstrip(",:\t ") if onlynicks and thing.lower() not in map(ircutils.toLower, irc.state.channels[channel].users): return diff --git a/plugins/Karma/test.py b/plugins/Karma/test.py index 97c178919..94285e89f 100644 --- a/plugins/Karma/test.py +++ b/plugins/Karma/test.py @@ -60,6 +60,10 @@ class KarmaTestCase(ChannelPluginTestCase): 'Karma for [\'"]moo[\'"].*increased 1.*total.*1') self.assertRegexp('karma MoO', 'Karma for [\'"]MoO[\'"].*increased 1.*total.*1') + # Test trailing characters and spaces + self.assertNoResponse('baz, ++', 2) + self.assertRegexp('karma baz', + 'Karma for [\'"]baz[\'"].*increased 1.*total.*1') def testKarmaRankingDisplayConfigurable(self): try: From b3f256681fef53fa8035c1e9d130791a163391ca Mon Sep 17 00:00:00 2001 From: Valentin Lorentz Date: Thu, 11 Jul 2024 16:57:01 +0200 Subject: [PATCH 21/69] Services: Fix crash in __call__ When a password is added for a nick that is not a valid config entry name, this causes _getNickServPassword to raise an error; and __call__ needs to catch it or the bot becomes unusable. --- plugins/Services/plugin.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/plugins/Services/plugin.py b/plugins/Services/plugin.py index b07ba088e..40c677159 100644 --- a/plugins/Services/plugin.py +++ b/plugins/Services/plugin.py @@ -179,7 +179,11 @@ class Services(callbacks.Plugin): if nick not in self.registryValue('nicks', network=irc.network): return nickserv = self.registryValue('NickServ', network=irc.network) - password = self._getNickServPassword(nick, irc.network) + try: + password = self._getNickServPassword(nick, irc.network) + except Exception: + self.log.exception('Could not get NickServ password for %s', nick) + return ghostDelay = self.registryValue('ghostDelay', network=irc.network) if not ghostDelay: return From 9fceb85c414bb7d06b1346eada16853a33ac4e99 Mon Sep 17 00:00:00 2001 From: Val Lorentz Date: Wed, 17 Jul 2024 22:00:42 +0200 Subject: [PATCH 22/69] ci: Bump Pypy version (#1575) * ci: Bump Pypy version * Math: update test * cryptography doesn't work on pypy3.10 --- .github/workflows/test.yml | 3 +++ plugins/Math/test.py | 7 ++++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 97d73356f..2345ef63a 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -33,6 +33,9 @@ jobs: - python-version: "3.10" with-opt-deps: false runs-on: ubuntu-22.04 + - python-version: "pypy-3.10" + with-opt-deps: false + runs-on: ubuntu-22.04 - python-version: "3.9" with-opt-deps: true diff --git a/plugins/Math/test.py b/plugins/Math/test.py index 22578c9ed..160d8f768 100644 --- a/plugins/Math/test.py +++ b/plugins/Math/test.py @@ -141,9 +141,10 @@ class MathTestCase(PluginTestCase): def testCalcMemoryError(self): self.assertRegexp('calc ' + '('*10000, - '(too much recursion' # cpython < 3.10 - '|too many nested parentheses' # cpython >= 3.10 - '|parenthesis is never closed)' # pypy + r"(too much recursion" # cpython < 3.10 + r"|too many nested parentheses" # cpython >= 3.10 + r"|parenthesis is never closed" # pypy for python < 3.10 + r"|'\(' was never closed)" # pypy for python >= 3.10 ) def testICalc(self): From bc852379f5f40b48ca8b0aca41e94446c7a60002 Mon Sep 17 00:00:00 2001 From: James Lu Date: Sun, 4 Jun 2023 19:07:14 -0700 Subject: [PATCH 23/69] Remove adding force to builtins (#1535) --- src/utils/__init__.py | 7 ------- src/utils/file.py | 2 +- 2 files changed, 1 insertion(+), 8 deletions(-) diff --git a/src/utils/__init__.py b/src/utils/__init__.py index eb82cb563..5f0cf2c8f 100644 --- a/src/utils/__init__.py +++ b/src/utils/__init__.py @@ -48,19 +48,12 @@ def split(s): csv.join = join csv.split = split -builtins = (__builtins__ if isinstance(__builtins__, dict) else __builtins__.__dict__) - - -# We use this often enough that we're going to stick it in builtins. def force(x): if callable(x): return x() else: return x -builtins['force'] = force -# These imports need to happen below the block above, so things get put into -# __builtins__ appropriately. from .gen import * from . import crypt, error, file, iter, net, python, seq, str, time, transaction, web diff --git a/src/utils/file.py b/src/utils/file.py index 2fbe6140b..447430add 100644 --- a/src/utils/file.py +++ b/src/utils/file.py @@ -36,7 +36,7 @@ import random import shutil import os.path -from . import crypt +from . import crypt, force def sanitizeName(filename): """Removes / from filenames and escapes them if they are '.' or '..'.""" From cadc8f93ab68a6fad11e85c027f6abc84e6fb888 Mon Sep 17 00:00:00 2001 From: Valentin Lorentz Date: Fri, 19 Jul 2024 13:11:56 +0200 Subject: [PATCH 24/69] Cowardly refuse to ban oneself with an account extban --- plugins/Channel/plugin.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/plugins/Channel/plugin.py b/plugins/Channel/plugin.py index 5d8afa167..65cbecc8c 100644 --- a/plugins/Channel/plugin.py +++ b/plugins/Channel/plugin.py @@ -399,9 +399,10 @@ class Channel(callbacks.Plugin): if not reason: reason = msg.nick capability = ircdb.makeChannelCapability(channel, 'op') + # Check (again) that they're not trying to make us kickban ourself. + self_account_extban = ircutils.accountExtban(irc, irc.nick) for banmask in banmasks: - # TODO: check account ban too if ircutils.hostmaskPatternEqual(banmask, irc.prefix): if ircutils.hostmaskPatternEqual(bannedHostmask, irc.prefix): self.log.warning('%q tried to make me kban myself.',msg.prefix) @@ -411,6 +412,13 @@ class Channel(callbacks.Plugin): self.log.warning('Using exact hostmask since banmask would ' 'ban myself.') banmasks = [bannedHostmask] + elif self_account_extban is not None \ + and banmask.lower() == self_account_extban.lower(): + self.log.warning('%q tried to make me kban myself.',msg.prefix) + irc.error(_('I cowardly refuse to ban myself.')) + return + + # Now, let's actually get to it. Check to make sure they have # #channel,op and the bannee doesn't have #channel,op; or that the # bannee and the banner are both the same person. From cf63674f7cf8e9c822736045875e913706732a44 Mon Sep 17 00:00:00 2001 From: Valentin Lorentz Date: Fri, 19 Jul 2024 13:20:28 +0200 Subject: [PATCH 25/69] Fix parenthesis in docstring --- src/conf.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/conf.py b/src/conf.py index a517d3a4c..9ba866119 100644 --- a/src/conf.py +++ b/src/conf.py @@ -1250,8 +1250,8 @@ class Banmask(registry.SpaceSeparatedSetOfStrings): Depending on the options and configuration, this may return a mask in the format of an extban (eg. "~account:foobar" on UnrealIRCd). - If this is unwanted (eg. to pass to ircdb's ignore lists, use - :meth:`makeBanmask` instead) + If this is unwanted (eg. to pass to ircdb's ignore lists), use + :meth:`makeBanmask` instead. options - A list specifying which parts of the hostmask should explicitly be matched: nick, user, host. If 'exact' is given, then From 54f7b5a5b64e0551a27dc73dc0c561052a2576e8 Mon Sep 17 00:00:00 2001 From: Valentin Lorentz Date: Fri, 19 Jul 2024 13:34:18 +0200 Subject: [PATCH 26/69] When only --account is provided, fallback to supybot.protocols.irc.banmask before exact mask --- plugins/Channel/test.py | 24 ++++++++++++++++++++++-- src/conf.py | 11 +++++++++++ 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/plugins/Channel/test.py b/plugins/Channel/test.py index 7fd0c0b85..aa11982eb 100644 --- a/plugins/Channel/test.py +++ b/plugins/Channel/test.py @@ -237,7 +237,17 @@ class ChannelTestCase(ChannelPluginTestCase): 'foobar!user@host.domain.tld') join() self.assertKban('kban --account foobar', - 'foobar!user@host.domain.tld') + '*!*@host.domain.tld') + join() + with conf.supybot.protocols.irc.banmask.context(['user', 'host']): + # falls back from --account to config + self.assertKban('kban --account foobar', + '*!user@host.domain.tld') + join() + with conf.supybot.protocols.irc.banmask.context(['account']): + # falls back from --account to config, then to exact hostmask + self.assertKban('kban --account foobar', + 'foobar!user@host.domain.tld') join() self.assertKban('kban --account --host foobar', '*!*@host.domain.tld') @@ -259,7 +269,17 @@ class ChannelTestCase(ChannelPluginTestCase): 'foobar!user@host.domain.tld') join() self.assertKban('kban --account foobar', - 'foobar!user@host.domain.tld') + '*!*@host.domain.tld') + join() + with conf.supybot.protocols.irc.banmask.context(['user', 'host']): + # falls back from --account to config + self.assertKban('kban --account foobar', + '*!user@host.domain.tld') + join() + with conf.supybot.protocols.irc.banmask.context(['account']): + # falls back from --account to config, then to exact hostmask + self.assertKban('kban --account foobar', + 'foobar!user@host.domain.tld') join() self.assertKban('kban --account --host foobar', '*!*@host.domain.tld') diff --git a/src/conf.py b/src/conf.py index 9ba866119..ed5c7d4d8 100644 --- a/src/conf.py +++ b/src/conf.py @@ -1302,6 +1302,17 @@ class Banmask(registry.SpaceSeparatedSetOfStrings): if add_star_mask and (bnick, buser, bhost) != ('*', '*', '*'): masks.append(ircutils.joinHostmask(bnick, buser, bhost)) + if (bnick, buser, bhost) == ('*', '*', '*') and \ + options == ['account'] and \ + not masks: + # found no ban mask to set (because options == ['account'] and user + # is logged out?), try again with the default ban mask + options = supybot.protocols.irc.banmask.getSpecific( + network, channel)() + options = [option for option in options if option != 'account'] + return self.makeExtBanmasks( + hostmask, options=options, channel=channel, network=network) + if (bnick, buser, bhost) == ('*', '*', '*') and \ ircutils.isUserHostmask(hostmask) and \ not masks: From 917e3019bcefee6afad18dd08f8e19b914bb9749 Mon Sep 17 00:00:00 2001 From: Valentin Lorentz Date: Fri, 19 Jul 2024 16:41:12 +0200 Subject: [PATCH 27/69] Fall back to banning host instead of exact mask This only happens on the newly introduced account extban (in case the user does not have an account, or the server does not provide accounts) so this does not change existing behavior. Falling back to the host instead of the exact mask makes it less easy to evade these bans --- plugins/Channel/test.py | 8 ++++---- src/conf.py | 7 ++++++- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/plugins/Channel/test.py b/plugins/Channel/test.py index aa11982eb..48f3efe51 100644 --- a/plugins/Channel/test.py +++ b/plugins/Channel/test.py @@ -245,9 +245,9 @@ class ChannelTestCase(ChannelPluginTestCase): '*!user@host.domain.tld') join() with conf.supybot.protocols.irc.banmask.context(['account']): - # falls back from --account to config, then to exact hostmask + # falls back from --account to config, then to only the host self.assertKban('kban --account foobar', - 'foobar!user@host.domain.tld') + '*!*@host.domain.tld') join() self.assertKban('kban --account --host foobar', '*!*@host.domain.tld') @@ -277,9 +277,9 @@ class ChannelTestCase(ChannelPluginTestCase): '*!user@host.domain.tld') join() with conf.supybot.protocols.irc.banmask.context(['account']): - # falls back from --account to config, then to exact hostmask + # falls back from --account to config, then to only the host self.assertKban('kban --account foobar', - 'foobar!user@host.domain.tld') + '*!*@host.domain.tld') join() self.assertKban('kban --account --host foobar', '*!*@host.domain.tld') diff --git a/src/conf.py b/src/conf.py index ed5c7d4d8..f090816b3 100644 --- a/src/conf.py +++ b/src/conf.py @@ -1316,7 +1316,12 @@ class Banmask(registry.SpaceSeparatedSetOfStrings): if (bnick, buser, bhost) == ('*', '*', '*') and \ ircutils.isUserHostmask(hostmask) and \ not masks: - masks.append(hostmask) + # still no ban mask found, fallback to the host, if any + if host != '*': + masks.append(ircutils.joinHostmask('*', '*', host)) + else: + # if no host, fall back to the exact mask provided + masks.append(hostmask) return masks From be3dae35584de16e8f4c8c8faa39681048bd922b Mon Sep 17 00:00:00 2001 From: Valentin Lorentz Date: Fri, 19 Jul 2024 16:41:46 +0200 Subject: [PATCH 28/69] Add test the bot won't account-extban itself --- plugins/Channel/test.py | 24 ++++++++++++++++++++++++ src/test.py | 3 ++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/plugins/Channel/test.py b/plugins/Channel/test.py index 48f3efe51..bcfc52786 100644 --- a/plugins/Channel/test.py +++ b/plugins/Channel/test.py @@ -189,6 +189,30 @@ class ChannelTestCase(ChannelPluginTestCase): self.assertBan('iban $a:nyuszika7h', '$a:nyuszika7h') self.assertNotError('unban $a:nyuszika7h') + def testWontIbanItself(self): + self.irc.state.supported['ACCOUNTEXTBAN'] = 'a,account' + self.irc.state.supported['EXTBAN'] = '~,abc' + + self.irc.feedMsg(ircmsgs.join(self.channel, + prefix='foobar!user@host.domain.tld')) + self.irc.feedMsg(ircmsgs.op(self.channel, self.irc.nick)) + + # not authenticated, falls back to hostname and notices the match + self.assertError('iban --account ' + self.nick) + + self.irc.feedMsg(ircmsgs.IrcMsg(prefix=self.prefix, command='ACCOUNT', + args=['botaccount'])) + + # notices the matching account + self.assertError('iban --account ' + self.nick) + + self.irc.feedMsg(ircmsgs.IrcMsg(prefix='othernick!otheruser@otherhost', + command='ACCOUNT', + args=['botaccount'])) + + # ditto + self.assertError('iban --account othernick') + def testKban(self): self.irc.prefix = 'something!else@somehwere.else' self.irc.nick = 'something' diff --git a/src/test.py b/src/test.py index 08e43ba07..5fa48028b 100644 --- a/src/test.py +++ b/src/test.py @@ -318,7 +318,8 @@ class PluginTestCase(SupyTestCase): raise TimeoutError(query) if lastGetHelp not in m.args[1]: self.assertTrue(m.args[1].startswith('Error:'), - '%r did not error: %s' % (query, m.args[1])) + '%r did not error: %s' % + (query, ' '.join(m.args[1:]))) return m def assertSnarfError(self, query, **kwargs): From d8115e6f3dcb70aeb78c6d05a4f4da4d918f8a26 Mon Sep 17 00:00:00 2001 From: Valentin Lorentz Date: Sat, 20 Jul 2024 19:33:09 +0200 Subject: [PATCH 29/69] dbi.FlatfileMapping: Fix listing records on Windows All other methods open the file as UTF-8, but this one still used the system's default. --- src/dbi.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/dbi.py b/src/dbi.py index 33fa90fbd..335c19a67 100644 --- a/src/dbi.py +++ b/src/dbi.py @@ -253,7 +253,7 @@ class FlatfileMapping(MappingInterface): fd.close() def __iter__(self): - fd = open(self.filename) + fd = open(self.filename, encoding='utf8') fd.readline() # First line, nextId. for line in fd: (id, s) = self._splitLine(line) From 2f8e1e5dff56360179ac31c7074da12a3bdcc361 Mon Sep 17 00:00:00 2001 From: ssdaniel24 Date: Sat, 20 Jul 2024 22:27:13 +0300 Subject: [PATCH 30/69] Added russian locale to NickAuth plugin --- plugins/NickAuth/locales/ru.po | 152 +++++++++++++++++++++++++++++++++ 1 file changed, 152 insertions(+) create mode 100644 plugins/NickAuth/locales/ru.po diff --git a/plugins/NickAuth/locales/ru.po b/plugins/NickAuth/locales/ru.po new file mode 100644 index 000000000..f324e9ac1 --- /dev/null +++ b/plugins/NickAuth/locales/ru.po @@ -0,0 +1,152 @@ +# NickAuth plugin in Limnoria. +# Copyright (C) 2013 Limnoria +# ssdaniel24 , 2024. +# +msgid "" +msgstr "" +"Project-Id-Version: \n" +"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"PO-Revision-Date: 2024-07-20 22:11+0300\n" +"Last-Translator: \n" +"Language-Team: \n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: pygettext.py 1.5\n" +"X-Generator: Poedit 3.4.2\n" + +#: plugin.py:47 +msgid "" +"\n" +" This plugin allows users to use their network services account to\n" +" authenticate to the bot.\n" +"\n" +" They first have to use ``@nickauth nick add `` while being\n" +" identified to the bot and then use ``@auth`` when they want to\n" +" identify to the bot.\n" +" " +msgstr "" +"Этот плагин позволяет пользователям использовать их аккаунт в сервисах IRC-" +"сети для авторизации в боте.\n" +"\n" +"Но сначала им потребуется использовать команду ``@nickauth nick add <свой " +"ник>``, будучи авторизованным в боте, а в дальнейшем использовать " +"``@auth``, когда они хотят авторизоваться в боте." + +#: plugin.py:62 plugin.py:67 +msgid "You are not authenticated." +msgstr "Вы не авторизованы." + +#: plugin.py:70 +msgid "You must be owner to do that." +msgstr "Вы должны быть владельцем, чтобы сделать это." + +#: plugin.py:75 +msgid "" +"[] \n" +"\n" +" Add to the list of nicks owned by the on the\n" +" . You have to register this nick to the network\n" +" services to be authenticated.\n" +" defaults to the current network.\n" +" " +msgstr "" +"[<сеть>] <пользователь> <ник>\n" +"\n" +"Добавляет <ник> в список ников, которыми владеет <пользователь> в данной " +"<сети>. Вы должны зарегистрировать этот ник в сервисах сети, чтобы иметь " +"возможность авторизоваться через него.\n" +"<сетью> по умолчанию задана текущая." + +#: plugin.py:88 +msgid "This nick is already used by someone on this network." +msgstr "Этот ник уже используется кем-то в этой сети." + +#: plugin.py:97 +msgid "" +"[] \n" +"\n" +" Remove from the list of nicks owned by the on " +"the\n" +" .\n" +" defaults to the current network.\n" +" " +msgstr "" +"[<сеть>] <пользователь> <ник>\n" +"\n" +"Удаляет <ник> из списка ников, которыми владеет <пользователь> в данной " +"<сети>.\n" +"<сетью> по умолчанию задана текущая." + +#: plugin.py:109 +msgid "This nick is not registered to you on this network." +msgstr "Этот ник не зарегистрирован за вами в этой сети." + +#: plugin.py:118 +msgid "" +"[] []\n" +"\n" +" Lists nicks of the on the network.\n" +" defaults to the current network.\n" +" " +msgstr "" +"[<сеть>] [<пользователь>]\n" +"\n" +"Показывает список ников <пользователя> в этой сети.\n" +"<сетью> по умолчанию задана текущая." + +#: plugin.py:127 +msgid "You are not identified and is not given." +msgstr "Вы не авторизованы, и <пользователь> не дан." + +#: plugin.py:138 +#, fuzzy +msgid "You have no recognized nick on this network." +msgstr "У вас нет распознанных ников в этой сети." + +#: plugin.py:141 +#, fuzzy +msgid "%s has no recognized nick on this network." +msgstr "%s не имеет распознанных ников в этой сети." + +#: plugin.py:148 +msgid "" +"takes no argument\n" +"\n" +" Tries to authenticate you using network services.\n" +" If you get no reply, it means you are not authenticated to the\n" +" network services." +msgstr "" +"не принимает аргументов\n" +"\n" +"Пытается авторизовать вас, используя сервисы сети. Если вы не получили " +"ответа, то значит вы не авторизованы в сервисах сети." + +#: plugin.py:159 +msgid "" +"If the messages has a server tag with account name, tries to\n" +" authenticate it." +msgstr "" + +#: plugin.py:180 +msgid "" +"Your secure flag is true and your hostmask doesn't match any of your known " +"hostmasks." +msgstr "" +"Ваша настройка защита установлена в true, и ваша хост-маска не совпадает " +"ни с одной известной." + +#: plugin.py:184 +msgid "You are now authenticated as %s." +msgstr "Вы авторизованы как %s." + +#: plugin.py:186 +msgid "" +"No user claimed the nick %s on this network. If this is you, you should " +"connect with an other method and use the \"nickauth nick add\" command, or " +"ask the owner of the bot to do it." +msgstr "" +"Ни один пользователь не владеет ником %s в этой сети. Если это вы, то вы " +"должны подключиться другим способом и использовать команду \"nickauth nick " +"add\" или попросить владельца бота сделать это." From f7b847091af985fbc312cfb2c71d14e922f9b23b Mon Sep 17 00:00:00 2001 From: ssdaniel24 <107036969+ssdaniel24@users.noreply.github.com> Date: Wed, 24 Jul 2024 19:06:09 +0000 Subject: [PATCH 31/69] Added russian locale to limnoria (#1585) Translated with lokalise.com --- locales/ru.po | 774 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 774 insertions(+) create mode 100644 locales/ru.po diff --git a/locales/ru.po b/locales/ru.po new file mode 100644 index 000000000..ea7d0b6a2 --- /dev/null +++ b/locales/ru.po @@ -0,0 +1,774 @@ +msgid "" +msgstr "" +"Project-Id-Version: \n" +"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"PO-Revision-Date: 2024-06-17 13:29+0300\n" +"Last-Translator: ssdaniel24 \n" +"Language-Team: \n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: pygettext.py 1.5\n" +"X-Generator: Poedit 3.4.2\n" + +msgid "Error: " +msgstr "Ошибка: " + +msgid "Error: I tried to send you an empty message." +msgstr "Ошибка: я пытался отправить вам пустое сообщение." + +msgid "Missing \"%s\". You may want to quote your arguments with double quotes in order to prevent extra brackets from being evaluated as nested commands." +msgstr "Отсутствует \"%s\". Возможно вы захотите заключить аргументы в двойные кавычки, чтобы предотвратить считывание дополнительных скобок как вложенных команд." + +msgid "\"|\" with nothing preceding. I obviously can't do a pipe with nothing before the |." +msgstr "\"I\", перед которым ничего не стоит. Я не могу создать конвейер, если перед этим символом ничего не написано." + +msgid "Spurious \"%s\". You may want to quote your arguments with double quotes in order to prevent extra brackets from being evaluated as nested commands." +msgstr "Ложный \"%s\". Возможно вы захотите заключить аргументы в двойные кавычки, чтобы предотвратить считывание дополнительных скобок как вложенных команд." + +msgid "\"|\" with nothing following. I obviously can't do a pipe with nothing after the |." +msgstr "\"I\", за которым ничего не стоит. Я не могу создать конвейер, если после этого символом ничего не написано." + +msgid "%s is not a valid %s." +msgstr "%s не является допустимым %s." + +msgid "That's not a valid %s." +msgstr "Это не является допустимым %s." + +msgid "(XX more messages)" +msgstr "(XX сообщений осталось)" + +msgid "more message" +msgstr "сообщение осталось" + +msgid "more messages" +msgstr "сообщений осталось" + +msgid "You've attempted more nesting than is currently allowed on this bot." +msgstr "Вы попробовали вложить больше команд, чем это дозволено в боте сейчас." + +msgid "The command %q is available in the %L plugins. Please specify the plugin whose command you wish to call by using its name as a command before %q." +msgstr "Команда %q доступна в плагинах %L. Уточните из какого плагина вы пытаетесь вызвать команду, указав его название как команду перед %q." + +msgid "Determines what commands are currently disabled. Such\n commands will not appear in command lists, etc. They will appear not even\n to exist." +msgstr "Определяет, какие команды сейчас отключены. Эти команды не будут появляться в списках команд. Будет казаться, что их даже не существует." + +msgid "Invalid arguments for %s." +msgstr "Недопустимые аргументы для %s." + +msgid "The %q command has no help." +msgstr "Команда %q не имеет справки." + +msgid "integer" +msgstr "целое число" + +msgid "non-integer value" +msgstr "нецелое значение" + +msgid "floating point number" +msgstr "дробное число" + +msgid "positive integer" +msgstr "положительное целое число" + +msgid "non-negative integer" +msgstr "неотрицательное целое число" + +msgid "index" +msgstr "индекс" + +msgid "number of seconds" +msgstr "число секунд" + +msgid "boolean" +msgstr "логический тип" + +msgid "do that" +msgstr "сделайте это" + +msgid "I'm not even in %s." +msgstr "Я даже не присутствую в %s." + +msgid "I need to be voiced to %s." +msgstr "Мне требуется голос (voice) в %s." + +msgid "I need to be at least voiced to %s." +msgstr "Мне требуется хотя бы голос (voice) в %s." + +msgid "I need to be halfopped to %s." +msgstr "Мне требуется быть полуоператором в %s." + +msgid "I need to be at least halfopped to %s." +msgstr "Мне требуется хотя бы быть полуоператором в %s." + +msgid "I need to be opped to %s." +msgstr "Мне требуется быть оператором в %s." + +msgid "channel" +msgstr "канал" + +msgid "nick or hostmask" +msgstr "ник или маска хоста" + +msgid "regular expression" +msgstr "регулярное выражение" + +msgid "nick" +msgstr "ник" + +msgid "That nick is too long for this server." +msgstr "Данный ник слишком длинный для этого сервера." + +msgid "I haven't seen %s." +msgstr "Я ещё не видел %s." + +msgid "I'm not in %s." +msgstr "Меня нет в %s." + +msgid "This command may only be given in a channel that I am in." +msgstr "Данная команда может быть отправлена только в канал, в котором присутствую я." + +msgid "You must be in %s." +msgstr "Вы должны быть в %s." + +msgid "%s is not in %s." +msgstr "%s отсутствует в %s." + +msgid "You must not give the empty string as an argument." +msgstr "Вы не можете передавать пустую строку как аргумент." + +msgid "You must not give a string containing spaces as an argument." +msgstr "Вы не можете передавать строку с пробелами как аргумент." + +msgid "This message must be sent in a channel." +msgstr "Это сообщение должно быть отправлено в канале." + +msgid "url" +msgstr "url" + +msgid "IRI" +msgstr "IRI" + +msgid "email" +msgstr "э. почта" + +msgid "http url" +msgstr "http url" + +msgid "command name" +msgstr "название команды" + +msgid "ip" +msgstr "ip" + +msgid "letter" +msgstr "буква" + +msgid "plugin" +msgstr "плагин" + +msgid "irc color" +msgstr "irc-цвет" + +msgid "Determines whether this plugin is loaded\n by default." +msgstr "Определяет, будет ли этот плагин загружаться по умолчанию." + +msgid "Determines whether this plugin is\n publicly visible." +msgstr "Определяет, будет ли этот плагин виден всем." + +msgid "Determines the bot's default nick." +msgstr "Определяет ник бота по умолчанию." + +msgid "Determines what alternative\n nicks will be used if the primary nick (supybot.nick) isn't available. A\n %s in this nick is replaced by the value of supybot.nick when used. If no\n alternates are given, or if all are used, the supybot.nick will be perturbed\n appropriately until an unused nick is found." +msgstr "Определяет альтернативные ники, которые будут использованы, если основной ник (supybot.nick) недоступен. %s в этих никах заменяется на значение supybot.nick. Если альтернатив не дано, или все они заняты, то будет использоваться изменённый supybot.nick, пока не освободится хотя бы один альтернативный или основной ник." + +msgid "Determines the bot's ident string, if the server\n doesn't provide one by default." +msgstr "Определяет ident-строку, если сервер не предоставляет её по умолчанию." + +msgid "Determines the real name which the bot sends to\n the server. A standard real name using the current version of the bot\n will be generated if this is left empty." +msgstr "Определяет настоящее имя (real name), которое бот отсылает серверу. Если не указано, то бот использует номер своей версии." + +msgid "Determines what networks the bot will connect to." +msgstr "Определяет, к каким сетям подключится бот." + +msgid "Determines what password will be used on %s. Yes, we know that\n technically passwords are server-specific and not network-specific,\n but this is the best we can do right now." +msgstr "Определяет, какой пароль будет использован в %s. Да, мы понимаем, что технически пароли задаются для серверов, а не сетей, но это лучшее, что мы можем сейчас сделать." + +msgid "Space-separated list of servers the bot will connect to for %s.\n Each will be tried in order, wrapping back to the first when the cycle\n is completed." +msgstr "Список серверов %s, разделённых пробелами, к которым бот будет подключаться. Каждый из них будет опробован по порядку, возвращаясь к первому, когда цикл будет завершен." + +msgid "Space-separated list of channels the bot will join only on %s." +msgstr "Список каналов, разделённых пробелами, к которым бот присоединится в %s." + +msgid "Determines whether the bot will attempt to connect with SSL\n sockets to %s." +msgstr "Определяет, будет ли бот подключаться с помощью SSL к %s." + +msgid "Space-separated list\n of fingerprints of trusted certificates for this network.\n Supported hash algorithms are: %L.\n If non-empty, Certification Authority signatures will not be used to\n verify certificates." +msgstr "Список отпечатков доверенных сертификатов через пробел. Поддерживаемые алгоритмы хэширования: %L. Если эта настройка указана, то подписи центра сертификации не будут учитываться для проверки сертификатов." + +msgid "A certificate that is trusted to verify\n certificates of this network (aka. Certificate Authority)." +msgstr "Доверенный сертификат, который используют для проверки сертификатов данной сети (как центр сертификации)." + +msgid "Deprecated config value, keep it to False." +msgstr "Устаревшая настройка, оставьте её False." + +msgid "Determines what certificate file (if any) the bot will use to\n connect with SSL sockets to %s." +msgstr "Определяет файл сертификата (если такой есть), который бот будет использовать для подключения к %s по SSL." + +msgid "Determines what key (if any) will be used to join the\n channel." +msgstr "Определяет какой ключ (если есть) будет использован для присоединения к каналу." + +msgid "Determines\n what nick the bot will use on this network. If empty, defaults to\n supybot.nick." +msgstr "Определяет, какой ник будет использовать бот в этой сети. Если не указано, то используется supybot.nick." + +msgid "Determines\n the bot's ident string, if the server doesn't provide one by default.\n If empty, defaults to supybot.ident." +msgstr "Определяет ident-строку для бота, если сервер не предоставляет её по умолчанию. Если не указано, то используется supybot.ident." + +msgid "Determines\n the real name which the bot sends to the server. If empty, defaults to\n supybot.user" +msgstr "Определяет настоящее имя (real name), которое бот отсылает серверу. Если не указано, то используется supybot.user." + +msgid "Determines what user modes the bot will request\n from the server when it first connects. If empty, defaults to\n supybot.protocols.irc.umodes" +msgstr "Определяет, какие режимы пользователя бот будет запрашивать у сервера, когда впервые присоединится. Если не указано, то используется supybot.protocols.irc.umodes." + +msgid "Determines what SASL username will be used on %s. This should\n be the bot's account name." +msgstr "Определяет имя пользователя для SASL, которое будет использоваться в %s. Это должно быть именем аккаунта бота." + +msgid "Determines what SASL password will be used on %s." +msgstr "Определяет пароль SASL, который будет использован в %s." + +msgid "Determines what SASL ECDSA key (if any) will be used on %s.\n The public key must be registered with NickServ for SASL\n ECDSA-NIST256P-CHALLENGE to work." +msgstr "Определяет, какой SASL ECDSA ключ (если существует) будет использован в %s. Публичный ключ должен быть зарегистрирован с помощью NickServ для SASL ECDSA-NIST256P-CHALLENGE, чтобы это работало." + +msgid "Determines what SASL mechanisms will be tried and in which order.\n " +msgstr "Определяет, в каком порядке и какие механизмы SASL должны быть опробованы." + +msgid "Determines whether the bot will abort the connection if the\n none of the enabled SASL mechanism succeeded." +msgstr "Определяет, будет ли бот разрывать соединение, если ни один из включённых механизмов SASL не сработал успешно." + +msgid "If not empty, determines the hostname:port of the socks proxy that\n will be used to connect to this network." +msgstr "Если указано, то определяет хост:порт socks-прокси, которое будет использовать для подключения к этой сети." + +msgid "Determines how urls should be formatted." +msgstr "Определяет форматирование url-адресов." + +msgid "Determines how timestamps\n printed for human reading should be formatted. Refer to the Python\n documentation for the time module to see valid formatting characters for\n time formats." +msgstr "Определяет формат временных меток, чтобы быть понятными людям. Обратитесь к модулю time в документации Python, чтобы увидеть допустимые символы для форматирования." + +msgid "Determines whether elapsed times will be given\n as \"1 day, 2 hours, 3 minutes, and 15 seconds\" or as \"1d 2h 3m 15s\"." +msgstr "Определяет, как будет указано прошедшее время: \"1 день, 2 часа, 3 минуты, и 15 секунд\" или \"1д 2ч 3м 15с\"." + +msgid "Maximum number of items in a list\n before the end is replaced with 'and others'. Set to 0 to always\n show the entire list." +msgstr "Максимальное число позиций в списке, которые показываются до надписи 'и другие'. При установке значения в 0 всегда будет показываться весь список." + +#, fuzzy +msgid "other" +msgstr "другие" + +msgid "Determines the absolute maximum length of\n the bot's reply -- no reply will be passed through the bot with a length\n greater than this." +msgstr "Определяет абсолютный максимум длины ответа бота -- ботом не будут отправлены ответы длиннее указанного значения." + +msgid "Determines whether the bot will break up long\n messages into chunks and allow users to use the 'more' command to get the\n remaining chunks." +msgstr "Определяет, будет ли бот разбивать длинные сообщения на части и позволять пользователям использовать команду 'more', чтобы получить оставшиеся части сообщения." + +msgid "Determines what the maximum number of\n chunks (for use with the 'more' command) will be." +msgstr "Определяет максимальное число частей сообщения (для использования команды 'more')." + +msgid "Determines how long individual chunks\n will be. If set to 0, uses our super-tweaked,\n get-the-most-out-of-an-individual-message default." +msgstr "Определяет длину отдельных частей сообщения. Если установлено в 0, то используется наше значение по умолчанию." + +msgid "Determines how many mores will be sent\n instantly (i.e., without the use of the more command, immediately when\n they are formed). Defaults to 1, which means that a more command will be\n required for all but the first chunk." +msgstr "Определяет сколько ещё частей сообщения будет отправлено сразу, т.е. без использования команды 'more', сразу после того, как команда выполнилась. По умолчанию задано 1, что означает, что для получения каждой части сообщения нужен будет вызов команды 'more'." + +msgid "Determines whether the bot will send\n multi-message replies in a single message. This defaults to True \n in order to prevent the bot from flooding. If this is set to False\n the bot will send multi-message replies on multiple lines." +msgstr "Определяет, будет ли бот отправлять ответы сразу на несколько сообщений в одном сообщении. По умолчанию установлено в True для предотвращения переполнения бота. Если установлено в False, то бот будет отправлять ответы в отдельных сообщениях." + +msgid "Determines whether the bot will reply with an\n error message when it is addressed but not given a valid command. If this\n value is False, the bot will remain silent, as long as no other plugins\n override the normal behavior." +msgstr "Определяет, будет ли бот отвечать сообщением об ошибке, если ему дали неправильную команду. Если указано False, то в этих случаях бот будет молчать, если другие плагины не изменят это поведение." + +msgid "Determines whether error messages that result\n from bugs in the bot will show a detailed error message (the uncaught\n exception) or a generic error message." +msgstr "Определяет, будут ли сообщения об ошибках в результате багов содержать подробное сообщение об ошибке (не перехваченное исключение)." + +msgid "Determines whether the bot will send error\n messages to users in private. You might want to do this in order to keep\n channel traffic to minimum. This can be used in combination with\n supybot.reply.error.withNotice." +msgstr "Определяет, будет ли бот отправлять сообщения об ошибках в личные сообщения пользователям. Возможно вы захотите использовать эту настройку, чтобы свести сообщения в канале к минимуму. Это может быть использовано в сочетании с supybot.reply.error.withNotice." + +msgid "Determines whether the bot will send error\n messages to users via NOTICE instead of PRIVMSG. You might want to do this\n so users can ignore NOTICEs from the bot and not have to see error\n messages; or you might want to use it in combination with\n supybot.reply.error.inPrivate so private errors don't open a query window\n in most IRC clients." +msgstr "Определяет, будет ли бот отправлять сообщение об ошибке пользователям через NOTICE вместо PRIVMSG. Эта настройка полезна, чтобы пользователи просто могли игнорировать NOTICE от бота и не видеть сообщение об ошибке; а также полезно при использовании в комбинации supybot.reply.error.inPrivate, тогда ошибки в личных сообщениях не будут создавать новое окно переписки в большинстве IRC-клиентов." + +msgid "Determines whether the bot will *not* provide\n details in the error\n message to users who attempt to call a command for which they do not have\n the necessary capability. You may wish to make this True if you don't want\n users to understand the underlying security system preventing them from\n running certain commands." +msgstr "Определяет, будет ли бот *НЕ* предоставлять подробную информацию об ошибке пользователям, попытавшимся вызвать команду, для которой у них отсутствуют нужные привилегии. Возможно вы захотите указать True, чтобы пользователи не смогли понять устройство системы безопасности, не позволяющую им выполнять привилегированные команды." + +msgid "Determines whether the bot will reply\n privately when replying in a channel, rather than replying to the whole\n channel." +msgstr "Определяет, будет ли бот отвечать в личный диалог на сообщение, а не в самом канале." + +msgid "Determines whether the bot will reply with a\n notice when replying in a channel, rather than replying with a privmsg as\n normal." +msgstr "Определяет, будет ли бот отвечать на сообщение в канале через NOTICE, нежели через PRIVMSG как обычно." + +msgid "Determines whether the bot will reply with a\n notice when it is sending a private message, in order not to open a /query\n window in clients." +msgstr "Определяет, будет ли бот отвечать на личное сообщение через NOTICE, чтобы не открывать /query окно на клиентах." + +msgid "Determines whether the bot will always prefix\n the user's nick to its reply to that user's command." +msgstr "Определяет, будет ли бот использовать ник пользователя в качестве префикса к своему ответу на команду пользователя." + +msgid "Determines whether the bot should attempt to\n reply to all messages even if they don't address it (either via its nick\n or a prefix character). If you set this to True, you almost certainly want\n to set supybot.reply.whenNotCommand to False." +msgstr "Определяет, должен ли бот отвечать на любое сообщение независимо от того, адресовано ли оно ему (либо с помощью ника, либо с помощью символ-префикса). Если вы укажите True, то вы точно захотите установить и supybot.reply.whenNotCommand в False." + +msgid "Determines whether the bot will allow you to\n send channel-related commands outside of that channel. Sometimes people\n find it confusing if a channel-related command (like Filter.outfilter)\n changes the behavior of the channel but was sent outside the channel\n itself." +msgstr "Определяет, будет ли бот позволять вам отправлять команды, относящиеся к каналу, за его пределами. Людей может вводить в заблуждение, если какая-то команда, которая меняет поведение канала (например, Filter.outfilter), была отправлена вне этого самого канала." + +msgid "Determines whether the bot will unidentify\n someone when that person changes their nick. Setting this to True\n will cause the bot to track such changes. It defaults to False for a\n little greater security." +msgstr "Определяет, будет ли бот идентифицировать пользователя при смене его ника. Если установить значение в True, то бот будет отслеживать такие изменения. По умолчанию для большей безопасности значение - False." + +msgid "Determines whether the bot will always join a\n channel when it's invited. If this value is False, the bot will only join\n a channel if the user inviting it has the 'admin' capability (or if it's\n explicitly told to join the channel using the Admin.join command)." +msgstr "Определяет, будет ли бот всегда присоединятся к каналу, куда он был приглашён. Если указано False, то бот будет присоединяться к каналам по приглашению только, если приглашающий пользователь имеет привилегию 'admin' (или если боту явно дана команда присоединиться к каналу с помощью Admin.join)." + +msgid "Supybot normally replies with the full help\n whenever a user misuses a command. If this value is set to True, the bot\n will only reply with the syntax of the command (the first line of the\n help) rather than the full help." +msgstr "Обычно Supybot отвечает полной справкой в случае неправильного использования команды пользователем. Если указано True, то бот ответит только справкой о синтаксисе команды (первая строка справки) вместо полной справки." + +msgid "Determines what prefix characters the bot will\n reply to. A prefix character is a single character that the bot will use\n to determine what messages are addressed to it; when there are no prefix\n characters set, it just uses its nick. Each character in this string is\n interpreted individually; you can have multiple prefix chars\n simultaneously, and if any one of them is used as a prefix the bot will\n assume it is being addressed." +msgstr "Определяет символ-префиксы, на которые бот будет отзываться. Символ-префикс - это символ, который бот будет использовать для определения сообщений, адресованных ему, а если символов-префиксов не указано, то бот использует свой ник. Каждый символ в строке считывается как символ-префикс, поэтому у бота их может быть несколько, и на все он будет отзываться." + +msgid "Determines what strings the\n bot will reply to when they are at the beginning of the message. Whereas\n prefix.chars can only be one character (although there can be many of\n them), this variable is a space-separated list of strings, so you can\n set something like '@@ ??' and the bot will reply when a message is\n prefixed by either @@ or ??." +msgstr "Определяет строки, на которые бот будет отзываться, если те находятся в начале сообщения. Если prefix.chars может быть только одним символом (хотя их может быть несколько), то эта настройка является списком строк через пробел, поэтому вы можете указать что-то вроде '@@ ??', и бот будет отвечать на все сообщения, если у них будет в начале @@ или ??." + +msgid "Determines whether the bot will reply when\n people address it by its nick, rather than with a prefix character." +msgstr "Определяет, будет ли бот отвечать людям, если те вызывают его через его ник, а не через символ-префикс." + +msgid "Determines whether the bot will reply when\n people address it by its nick at the end of the message, rather than at\n the beginning." +msgstr "Определяет, будет ли бот отвечать, когда люди вызывают его по нику в конце сообщения, а не в начале." + +msgid "Determines what extra nicks\n the bot will always respond to when addressed by, even if its current nick\n is something else." +msgstr "Определяет дополнительные ники, на которые бот всегда будет отзываться, даже если его текущий ник отличается." + +msgid "The operation succeeded." +msgstr "Операция прошла успешно." + +msgid "Determines what message the bot replies with when a command succeeded.\n If this configuration variable is empty, no success message will be\n sent." +msgstr "Определяет содержание сообщения, которым бот отвечает в случае успешного выполнения команды. Если эта настройка пуста, то сообщение не будет отправлено." + +msgid "An error has occurred and has been logged.\n Please contact this bot's administrator for more information." +msgstr "Произошла ошибка, записана в журнал. Пожалуйста, свяжитесь с админом этого бота для получения доп. информации." + +msgid "\n Determines what error message the bot gives when it wants to be\n ambiguous." +msgstr "Определяет содержание общего сообщения об ошибке, которым бот отвечает на не выполнившиеся команды." + +msgid "An error has occurred and has been logged.\n Check the logs for more information." +msgstr "Произошла ошибка, записана в журнал. Проверьте его для дополнительной информации." + +msgid "Determines what error\n message the bot gives to the owner when it wants to be ambiguous." +msgstr "Определяет, какое сообщение об ошибке бот выдает владельцу, если оно неоднозначное." + +msgid "Your hostmask doesn't match or your password\n is wrong." +msgstr "Ваша маска хоста не совпадает, или ваш пароль неверный." + +#, fuzzy +msgid "Determines what message the bot replies with when\n someone tries to use a command that requires being identified or having a\n password and neither credential is correct." +msgstr "Определяет содержание сообщения, которым бот отвечает, когда кто-то пытается использовать команду, требующую идентификации или наличия пароля." + +msgid "I can't find %s in my user\n database. If you didn't give a user name, then I might not know what your\n user is, and you'll need to identify before this command might work." +msgstr "Я не могу найти %s в мой базе данных пользователей. Если вы не указали имя пользователя, то возможно я вас не знаю, и вам необходимо идентифицироваться, прежде чем эта команда сможет быть выполнена." + +msgid "Determines what error message the bot replies with when someone tries\n to accessing some information on a user the bot doesn't know about." +msgstr "Определяет содержание сообщения об ошибке, которым бот отвечает, если кто-то пытается получить какую-либо информацию о пользователе, неизвестном боту." + +msgid "You must be registered to use this command.\n If you are already registered, you must either identify (using the identify\n command) or add a hostmask matching your current hostmask (using the\n \"hostmask add\" command)." +msgstr "Вы должны быть зарегистрированы для использования этой команды. Если вы уже зарегистрированы, то вы должны идентифицироваться, используя команду identify, или добавить хост-маску, совпадающую с вашей текущей, используя команду \"hostmask add\"." + +msgid "Determines what error message the bot\n replies with when someone tries to do something that requires them to be\n registered but they're not currently recognized." +msgstr "Определяет содержание сообщение об ошибке, которым бот отвечает, когда кто-то пытается выполнить команду, требующую регистрации, но бот его не помнит." + +msgid "You don't have the %s capability. If you\n think that you should have this capability, be sure that you are identified\n before trying again. The 'whoami' command can tell you if you're\n identified." +msgstr "У вас нет привилегии %s. Если вы считаете, что у вас должна быть такая привилегия, убедитесь, что в своей идентификации, прежде чем повторить попытку. Команда 'whoami' может сказать вам, идентифицированы ли вы." + +#, fuzzy +msgid "Determines what error message is given when the bot\n is telling someone they aren't cool enough to use the command they tried to\n use." +msgstr "Определяет содержание сообщения об ошибке, которым бот отвечает, если кто-то недостаточно крут для использования команды, которую тот пытался запустить." + +msgid "You're missing some capability you need.\n This could be because you actually possess the anti-capability for the\n capability that's required of you, or because the channel provides that\n anti-capability by default, or because the global capabilities include\n that anti-capability. Or, it could be because the channel or\n supybot.capabilities.default is set to False, meaning that no commands are\n allowed unless explicitly in your capabilities. Either way, you can't do\n what you want to do." +msgstr "Вам не хватает некоторых необходимых вам привилегий. Это может быть вызвано тем, что у вас есть антипривилегия к требуемой, или потому, что канал предоставляет эту антипривилегию по умолчанию, или потому, что глобальные привилегии предоставляют эту антипривилегию. Или это может быть связано с тем, что для канала или supybot.capabilities.default установлено значение False, что означает, что никакие команды не разрешены, если это явно не соответствует вашим возможностям. В любом случае вы не можете делать то, что хотите." + +msgid "Determines what generic error message is given when the bot is telling\n someone that they aren't cool enough to use the command they tried to use,\n and the author of the code calling errorNoCapability didn't provide an\n explicit capability for whatever reason." +msgstr "Определяет содержание общего сообщения об ошибке, когда бот сообщает кому-либо, что он недостаточно крут, чтобы использовать эту команду, а автор кода, вызвавшего ошибку errorNoCapability, не предоставил явную информацию по какой-либо причине." + +msgid "That operation cannot be done in a\n channel." +msgstr "Эта операция не может быть выполнена в канале." + +msgid "Determines what error messages the bot sends to people\n who try to do things in a channel that really should be done in\n private." +msgstr "Определяет содержание сообщения об ошибке, которое бот отправляет людям, пытающимся сделать то, что должны делать в личной переписке." + +msgid "This may be a bug. If you think it is,\n please file a bug report at\n ." +msgstr "Возможно, что вы столкнулись ошибкой. Если это так, то, пожалуйста, сообщите о ней в ." + +msgid "Determines what message the bot sends when it thinks you've\n encountered a bug that the developers don't know about." +msgstr "Определяет содержание сообщения, которое отправит бот, если он посчитает, что вы столкнулись с ошибкой, неизвестной разработчикам." + +msgid "$Type #$id: $text (added by $username at $at)" +msgstr "$Type #$id: $text (добавлено пользователем $username в $at)" + +msgid "Format used by generic database plugins (Lart, Dunno, Prase, Success,\n Quote, ...) to show an entry. You can use the following variables:\n $type/$types/$Type/$Types (plugin name and variants), $id, $text,\n $at (creation time), $userid/$username/$nick (author)." +msgstr "Формат, используемый плагинами с генерируемыми базами данных, (Lart, Dunno, Prase, Success, Quote) для показа записей. Вы можете использовать следующие поля: $type/$types/$Type/$Types (название плагина и его варианты), $id, $text, $at (время создания), $userid/$username/$nick (автор)." + +#, fuzzy +msgid "A floating point number of seconds to throttle\n snarfed URLs, in order to prevent loops between two bots snarfing the same\n URLs and having the snarfed URL in the output of the snarf message." +msgstr "Дробное число секунд, которое используется для контроля скорости обработки перехваченных URL-адресов, чтобы избежать зацикливания между двумя ботами, перехватывающих одни и те же URL-адреса, и включения перехваченного URL-адреса в результат сообщения о перехвате." + +msgid "Determines the number of seconds\n between running the upkeep function that flushes (commits) open databases,\n collects garbage, and records some useful statistics at the debugging\n level." +msgstr "Определяет количество секунд между запусками функции поддержки, которая записывает открытые базы данных, собирает мусор и журналирует некоторую полезную статистику на отладочном уровне." + +msgid "Determines whether the bot will periodically\n flush data and configuration files to disk. Generally, the only time\n you'll want to set this to False is when you want to modify those\n configuration files by hand and don't want the bot to flush its current\n version over your modifications. Do note that if you change this to False\n inside the bot, your changes won't be flushed. To make this change\n permanent, you must edit the registry yourself." +msgstr "Определяет, будет ли бот периодически записывать данные и файлы настроек на диск. Как правило, вы захотите установить это значение в False, если вам нужно изменять настройки вручную без помех со стороны бота, записывающего свои настройки поверх ваших изменений. Однако, если вы вы измените это значение в False в самом боте, то вам придётся изменить конфиг самостоятельно, чтобы сделать это изменения постоянным." + +msgid "Determines what characters are valid for quoting\n arguments to commands in order to prevent them from being tokenized.\n " +msgstr "Определяет, какие символы допустимы для изолирования аргументов команд, чтобы предотвратить их токенизацию." + +msgid "Determines whether the bot will allow nested\n commands, which rule. You definitely should keep this on." +msgstr "Определяет, будет ли бот разрешать использование вложенных команд. Это определённо стоит оставить включённым." + +msgid "Determines what the maximum number of\n nested commands will be; users will receive an error if they attempt\n commands more nested than this." +msgstr "Определяет максимальное количество вложенных команд. Пользователи получат сообщение об ошибке, если попытаются выполнить больше вложенных команд, чем в этой настройке." + +msgid "Supybot allows you to specify what brackets\n are used for your nested commands. Valid sets of brackets include\n [], <>, {}, and (). [] has strong historical motivation, but <> or\n () might be slightly superior because they cannot occur in a nick.\n If this string is empty, nested commands will not be allowed in this\n channel." +msgstr "Supybot позволяет вам указать, какие именно скобки будут использоваться для указания вложенных команд. Допустимые наборы скобок включают [], <>, {} и (). [] имеет историческое значение, но <> или () могут быть лучше, так как они не могут использоваться в никах. Если эта строка пуста, то в этом канале вложенные команды будут запрещены." + +msgid "Supybot allows nested commands. Enabling this\n option will allow nested commands with a syntax similar to UNIX pipes, for\n example: 'bot: foo | bar'." +msgstr "Supybot поддерживает вложенные команды. Включение этой настройки позволит вам использовать команды с синтаксисом, похожим на конвейеры UNIX, например: 'bot: foo | bar'." + +msgid "Determines what commands have default\n plugins set, and which plugins are set to be the default for each of those\n commands." +msgstr "Определяет, для каких команд установлены плагины по умолчанию, и какие плагины будут установлены по умолчанию для каждой из этих команд." + +msgid "Determines what plugins automatically get precedence over all\n other plugins when selecting a default plugin for a command. By\n default, this includes the standard loaded plugins. You probably\n shouldn't change this if you don't know what you're doing; if you do\n know what you're doing, then also know that this set is\n case-sensitive." +msgstr "Определяет приоритет плагинов над другими при выборе плагина по умолчанию для команды. По умолчанию включает в себя стандартные загружаемые плагины. Не стоит менять это, если вы не знаете, что пытаетесь сделать. Иначе учитывайте, что эта настройка чувствительна к регистру." + +msgid "Allows this bot's owner user to use commands\n that grants them shell access. This config variable exists in case you want\n to prevent MITM from the IRC network itself (vulnerable IRCd or IRCops)\n from gaining shell access to the bot's server by impersonating the owner.\n Setting this to False also disables plugins and commands that can be\n used to indirectly gain shell access." +msgstr "Позволяет владельцу бота использовать команды, предоставляющие доступ к командной строке. Эта настройка существует на случай, если вы хотите предотвратить MITM-атаку из самой IRC-сети (уязвимость IRCd или IRCops) для получения доступа к командной строке сервера бота, выдавая себя за владельца. Установка значения в False также отключит плагины и команды, которые могут быть использованы для получения доступа к командной строке." + +msgid "Determines the interval used for\n the history storage." +msgstr "Определяет интервал для хранения истории." + +msgid "Determines whether the bot will defend itself\n against command-flooding." +msgstr "Определяет, будет ли бот защищать себя от массовой отправки команд." + +msgid "Determines how many commands users are\n allowed per minute. If a user sends more than this many commands in any\n 60 second period, they will be ignored for\n supybot.abuse.flood.command.punishment seconds." +msgstr "Определяет, сколько команд в минуту разрешено отправлять пользователям. Если пользователь отправит больше указанного количества команд за 60 секунд, то их будут игнорировать в течение некоторого количества секунд, указанного в supybot.abuse.flood.command.punishment." + +msgid "Determines how many seconds the bot\n will ignore users who flood it with commands." +msgstr "Определяет количество секунд, в течение которых бот будет игнорировать пользователей, засыпающих его командами." + +msgid "Determines whether the bot will notify people\n that they're being ignored for command flooding." +msgstr "Определяет, будет ли бот уведомлять пользователей о том, что их игнорируют из-за слишком большого количества отправленных ими команд." + +msgid "Determines whether the bot will defend itself\n against invalid command-flooding." +msgstr "Определяет, будет ли бот защищать себя от массовой отправки ему недопустимых команд." + +msgid "Determines how many invalid commands users\n are allowed per minute. If a user sends more than this many invalid\n commands in any 60 second period, they will be ignored for\n supybot.abuse.flood.command.invalid.punishment seconds. Typically, this\n value is lower than supybot.abuse.flood.command.maximum, since it's far\n less likely (and far more annoying) for users to flood with invalid\n commands than for them to flood with valid commands." +msgstr "Определяет, сколько пользователи могут отправить недопустимых команд в минуту. Если пользователь отправляет больше этого количества недопустимых команд в любой 60-секундный период, они будут игнорироваться на протяжении supybot.abuse.flood.command.invalid.punishment секунд. Обычно это значение ниже, чем supybot.abuse.flood.command.maximum, поскольку гораздо менее вероятно (но гораздо более раздражающе), что пользователи будут засорять каналы недопустимыми командами, чем правильными командами." + +msgid "Determines how many seconds the bot\n will ignore users who flood it with invalid commands. Typically, this\n value is higher than supybot.abuse.flood.command.punishment, since it's far\n less likely (and far more annoying) for users to flood with invalid\n commands than for them to flood with valid commands." +msgstr "Определяет, сколько пользователи могут отправить недопустимых команд в минуту. Обычно это значение ниже, чем supybot.abuse.flood.command.maximum, поскольку гораздо менее вероятно (но гораздо более раздражающе), что пользователи будут засорять каналы недопустимыми командами, чем правильными командами." + +msgid "Determines whether the bot will notify people\n that they're being ignored for invalid command flooding." +msgstr "Определяет, будет ли бот уведомлять пользователей о том, что их игнорируют из-за слишком большого количества отправленных ими команд." + +msgid "Determines the default length of time a\n driver should block waiting for input." +msgstr "Определяет продолжительность времени по умолчанию, в течение которой драйвер должен блокироваться в ожидании ввода." + +msgid "Determines what driver module the \n bot will use. Current, the only (and default) driver is Socket." +msgstr "Определяет, какой модуль драйвера будет использовать бот. Текущим и единственным (и по умолчанию) драйвером является Socket." + +msgid "Determines the maximum time the bot will\n wait before attempting to reconnect to an IRC server. The bot may, of\n course, reconnect earlier if possible." +msgstr "Определяет максимальное время, которое бот будет ждать перед попыткой переподключения к IRC-серверу. Конечно, бот может переподключиться раньше, если это возможно." + +msgid "Determines what directory configuration data is\n put into." +msgstr "Определяет, в какой каталог помещаются данные настроек." + +msgid "Determines what directory data is put into." +msgstr "Определяет, в какой каталог помещаются данные." + +msgid "Determines what directory backup data is put\n into. Set it to /dev/null to disable backup (it is a special value,\n so it also works on Windows and systems without /dev/null)." +msgstr "Определяет, в какой каталог помещаются данные резервной копии. Установите его в /dev/null, чтобы отключить резервное копирование (это специальное значение, поэтому оно также работает на Windows и системах без /dev/null)." + +msgid "Determines what directory temporary files\n are put into." +msgstr "Определяет, в какой каталог будут помещены временные файлы." + +msgid "Determines what directory files of the\n web server (templates, custom images, ...) are put into." +msgstr "Определяет, в какую директорию будут помещены файлы веб-сервера (шаблоны, пользовательские изображения, ...)." + +msgid "Determines what directories\n the bot will look for plugins in. Accepts a comma-separated list of\n strings.\n This means that to add another directory, you can nest the former value and\n add a new one. E.g. you can say: bot: 'config supybot.directories.plugins\n [config supybot.directories.plugins], newPluginDirectory'." +msgstr "Определяет, в каких каталогах бот будет искать плагины. Принимает список строк, разделенных запятыми. Это означает, что для добавления другой директории вы можете вложить предыдущее значение и добавить новое. Например, вы можете сделать так: bot: 'config supybot.directories.plugins [config supybot.directories.plugins], newPluginDirectory'." + +msgid "List of all plugins that were\n ever loaded. Currently has no effect whatsoever. You probably want to use\n the 'load' or 'unload' commands, or edit supybot.plugins.\n instead of this." +msgstr "Список всех плагинов, которые были когда-либо загружены. В настоящее время не имеет никакого эффекта. Вы, вероятно, захотите использовать команды 'load' или 'unload', или изменить supybot.plugins. вместо этого." + +msgid "Determines whether the bot will always load\n important plugins (Admin, Channel, Config, Misc, Owner, and User)\n regardless of what their configured state is. Generally, if these plugins\n are configured not to load, you didn't do it on purpose, and you still\n want them to load. Users who don't want to load these plugins are smart\n enough to change the value of this variable appropriately :)" +msgstr "Определяет, будет ли бот всегда загружать важные плагины (Admin, Channel, Config, Misc, Owner и User) независимо от их настроенного состояния. Как правило, если эти плагины настроены не загружаться, вы сделали это не специально, и вы все равно хотите, чтобы они загружались. Пользователи, которые не хотят загружать эти плагины, достаточно умны, чтобы изменить значение этой переменной соответствующим образом :)" + +msgid "Determines what databases are available for use. If this\n value is not configured (that is, if its value is empty) then sane defaults\n will be provided." +msgstr "Определяет, какие базы данных доступны для использования. Если это значение не задано (т.е. если его значение пустое), то будут предоставлены значения по умолчанию." + +msgid "Determines what filename will be used\n for the users database. This file will go into the directory specified by\n the supybot.directories.conf variable." +msgstr "Определяет, какое имя файла будет использоваться для базы данных пользователей. Этот файл будет находиться в каталоге, указанном в supybot.directories.conf." + +msgid "Determines how long it takes identification to\n time out. If the value is less than or equal to zero, identification never\n times out." +msgstr "Определяет, через какое время идентификация истекает. Если значение меньше или равно нулю, идентификация никогда не истечёт." + +msgid "Determines whether the bot will allow users to\n unregister their users. This can wreak havoc with already-existing\n databases, so by default we don't allow it. Enable this at your own risk.\n (Do also note that this does not prevent the owner of the bot from using\n the unregister command.)\n " +msgstr "Определяет, будет ли бот позволять пользователям отменять свою регистрацию. Это может сломать уже существующие базы данных, поэтому по умолчанию мы не разрешаем это делать. Включите эту опцию на свой страх и риск. (Также обратите внимание, что это не мешает владельцу бота использовать команду unregister)." + +msgid "Determines what filename will be used\n for the ignores database. This file will go into the directory specified\n by the supybot.directories.conf variable." +msgstr "Определяет, какое имя файла будет использоваться для базы данных игноров. Этот файл будет находиться в каталоге, указанном в supybot.directories.conf." + +msgid "Determines what filename will be used\n for the channels database. This file will go into the directory specified\n by the supybot.directories.conf variable." +msgstr "Определяет, какое имя файла будет использоваться для базы данных каналов. Этот файл будет находиться в каталоге, указанном в supybot.directories.conf." + +msgid "Determines what filename will be used\n for the networks database. This file will go into the directory specified\n by the supybot.directories.conf variable." +msgstr "Определяет, какое имя файла будет использоваться для базы данных сетей. Этот файл будет находиться в каталоге, указанном в supybot.directories.conf." + +msgid "Determines whether the bot will require user\n registration to use 'add' commands in database-based Supybot\n plugins." +msgstr "Определяет, будет ли бот требовать регистрации пользователя для использования команд 'add' в плагинах Supybot, основанных на базах данных." + +msgid "Determines whether database-based plugins that\n can be channel-specific will be so. This can be overridden by individual\n channels. Do note that the bot needs to be restarted immediately after\n changing this variable or your db plugins may not work for your channel;\n also note that you may wish to set\n supybot.databases.plugins.channelSpecific.link appropriately if you wish\n to share a certain channel's databases globally." +msgstr "Определяет, будут ли плагины на основе баз данных могут быть привязаны к конкретному каналу. Это может быть переопределено отдельными каналами. Обратите внимание, что бота необходимо перезапустить сразу после изменения этой переменной, иначе плагины с базами данных могут не работать на вашем канале; также обратите внимание, что вы можете установить supybot.databases.plugins.channelSpecific.link соответствующим образом, если вы хотите использовать базы данных определенного канала глобально." + +#, fuzzy +msgid "Determines what channel global\n (non-channel-specific) databases will be considered a part of. This is\n helpful if you've been running channel-specific for awhile and want to turn\n the databases for your primary channel into global databases. If\n supybot.databases.plugins.channelSpecific.link.allow prevents linking, the\n current channel will be used. Do note that the bot needs to be restarted\n immediately after changing this variable or your db plugins may not work\n for your channel." +msgstr "Определяет, к какому каналу будут относиться глобальные (не специфические для канала) базы данных. Это полезно, если вы долгое время использовали специфические для канала базы данных и хотите превратить базы данных вашего основного канала в глобальные. Если supybot.databases.plugins.channelSpecific.link.allow запрещает связывание, будет использоваться текущий канал. Обратите внимание, что бот должен быть перезапущен немедленно после изменения этой переменной, иначе ваши плагины баз данных могут не работать для вашего канала." + +msgid "Determines whether another channel's global\n (non-channel-specific) databases will be allowed to link to this channel's\n databases. Do note that the bot needs to be restarted immediately after\n changing this variable or your db plugins may not work for your channel.\n " +msgstr "Определяет, будут ли глобальные (не специфичные для канала) базы данных другого канала разрешены для связи с базами данных этого канала. Обратите внимание, что бот должен быть перезапущен сразу после изменения этой переменной, иначе ваши БД-плагины могут не работать на вашем канале." + +msgid "Determines\n whether CDB databases will be allowed as a database implementation." +msgstr "Определяет, будут ли разрешены базы данных CDB в качестве реализации баз данных." + +msgid "Determines how often CDB databases will have\n their modifications flushed to disk. When the number of modified records\n is greater than this fraction of the total number of records, the database\n will be entirely flushed to disk." +msgstr "Определяет, как часто изменения баз данных CDB будут сбрасываться на диск. Когда число измененных записей превышает эту долю от общего числа записей, база данных будет полностью сброшена на диск." + +#, fuzzy +msgid "Determines what will be used as the\n default banmask style." +msgstr "Определяет, что будет использоваться в качестве стиля маски бана по умолчанию." + +msgid "Determines whether the bot will strictly\n follow the RFC; currently this only affects what strings are\n considered to be nicks. If you're using a server or a network that\n requires you to message a nick such as services@this.network.server\n then you you should set this to False." +msgstr "Определяет, будет ли бот строго следовать RFC; в настоящее время это влияет только на то, какие строки считаются никами. Если вы используете сервер или сеть, которая требует от вас сообщения с таким ником, как services@this.network.server, то вам следует установить значение False." + +msgid "Determines whether the bot will enable\n draft/experimental extensions of the IRC protocol. Setting this to True\n may break your bot at any time without warning and/or break your\n configuration irreversibly. So keep it False unless you know what you are\n doing." +msgstr "Определяет, будет ли бот включать черновые/экспериментальные расширения протокола IRC. Установка этого значения в True может привести к поломке вашего бота в любое время без предупреждения и/или необратимо нарушить ваши настройки. Поэтому держите значение в False, если вы не знаете, что делаете." + +msgid "Determines what certificate file (if any) the bot\n will use connect with SSL sockets by default." +msgstr "Определяет, какой файл сертификата (если таковой есть) бот будет использовать для соединения с SSL-сокетами по умолчанию." + +msgid "Determines what user modes the bot will request\n from the server when it first connects. Many people might choose +i; some\n networks allow +x, which indicates to the auth services on those networks\n that you should be given a fake host." +msgstr "Определяет, какие режимы пользователя бот будет запрашивать у сервера при первом подключении. Многие люди могут выбрать +i; некоторые сети разрешают +x, указывающий службам аутентификации в этих сетях, что вам должен быть предоставлен фальшивый хост." + +msgid "Determines what vhost the bot will bind to before\n connecting a server (IRC, HTTP, ...) via IPv4." +msgstr "Определяет, к какому виртуальному хосту будет привязан бот перед подключением к серверу (IRC, HTTP, ...) через IPv4." + +msgid "Determines what vhost the bot will bind to before\n connecting a server (IRC, HTTP, ...) via IPv6." +msgstr "Определяет, к какому виртуальному хосту будет привязан бот перед подключением к серверу (IRC, HTTP, ...) через IPv6." + +msgid "Determines how many old messages the bot will\n keep around in its history. Changing this variable will not take effect\n on a network until it is reconnected." +msgstr "Определяет, сколько старых сообщений бот будет сохранять в своей истории. Изменение этой переменной не будет действовать в сети до тех пор, пока к ней не будет выполнено переподключение." + +msgid "A floating point number of seconds to throttle\n queued messages -- that is, messages will not be sent faster than once per\n throttleTime seconds." +msgstr "Дробное число секунд для регулирования сообщений в очереди, то есть сообщения не будут отправляться быстрее, чем один раз за throttleTime секунд." + +msgid "Determines whether the bot will send PINGs to\n the server it's connected to in order to keep the connection alive and\n discover earlier when it breaks. Really, this option only exists for\n debugging purposes: you always should make it True unless you're testing\n some strange server issues." +msgstr "Определяет, будет ли бот посылать PING'и на сервер, к которому он подключен, чтобы сохранить соединение и обнаружить его разрыв раньше, чем оно потеряется. На самом деле, эта опция существует только в целях отладки: вы всегда должны ставить его в True, если только вы не исследуете (тестируете) загадочные проблемы с сервером." + +msgid "Determines the number of seconds between sending\n pings to the server, if pings are being sent to the server." +msgstr "Определяет количество секунд между отправкой пингов на сервер, если таковые отправляются на сервер." + +msgid "Determines whether the bot will refuse\n duplicated messages to be queued for delivery to the server. This is a\n safety mechanism put in place to prevent plugins from sending the same\n message multiple times; most of the time it doesn't matter, unless you're\n doing certain kinds of plugin hacking." +msgstr "Определяет, будет ли бот отклонять дублирующиеся сообщения в очереди на отправку на сервер. Это механизм безопасности, созданный для того, чтобы плагины не отправляли одно и то же сообщение несколько раз; в большинстве случаев это не имеет значения, если только вы не занимаетесь экспериментальной разработкой плагинов." + +msgid "Determines how many seconds must elapse between\n JOINs sent to the server." +msgstr "Определяет, сколько секунд должно пройти между JOIN, отправленными на сервер." + +msgid "Determines how many bytes the bot will\n 'peek' at when looking through a URL for a doctype or title or something\n similar. It'll give up after it reads this many bytes, even if it hasn't\n found what it was looking for." +msgstr "Определяет, сколько байт будет просматривать бот при открытии URL-адреса в поисках типа документа, заголовка или чего-то подобного. Он сдастся после того, как прочитает указанное количество байт, даже если не нашел того, что искал." + +msgid "Determines what HTTP proxy all HTTP requests should go\n through. The value should be of the form 'host:port'." +msgstr "Определяет, через какой HTTP-прокси должны проходить все HTTP-запросы. Значение должно иметь вид 'host:port'." + +msgid "If set, the Accept-Language HTTP header will be set to this\n value for requests. Useful for overriding the auto-detected language based on\n the server's location." +msgstr "Если задано, то в HTTP-заголовке Accept-Language для запросов будет использоваться это значение. Полезно для переопределения автоматически определяемого языка на основе местоположения сервера." + +msgid "If set, the User-Agent HTTP header will be set to a randomly\n selected value from this comma-separated list of strings for requests." +msgstr "Если определено, то в HTTP-заголовке User-Agent для запросов будет установлено случайно выбранное значение из этого списка строк, разделенных запятыми." + +msgid "Determines whether server certificates\n will be verified, which checks whether the server certificate is signed\n by a known certificate authority, and aborts the connection if it is not.\n This is assumed to be True of serverFingerprints or authorityCertificate\n is set." +msgstr "Определяет, будут ли проверяться сертификаты сервера. При этом выявляется, подписан ли сертификат сервера известным удостоверяющим центром, и соединение будет прервано, если это не так. Предполагается, что если эта настройка установлена в true, то также определены serverFingerprints или authorityCertificate." + +msgid "If true, uses IPV6_V6ONLY to disable\n forwaring of IPv4 traffic to IPv6 sockets. On *nix, has the same\n effect as setting kernel variable net.ipv6.bindv6only to 1." +msgstr "Если true, то будет использоваться IPV6_V6ONLY для отключения пересылки IPv4-трафика на IPv6-сокеты. На *nix имеет тот же эффект, что и установка переменной ядра net.ipv6.bindv6only в 1." + +msgid "Space-separated list of IPv4 hosts the HTTP server\n will bind." +msgstr "Список IPv4-хостов, разделенных пробелами, к которым будет привязан HTTP-сервер." + +msgid "Space-separated list of IPv6 hosts the HTTP server will\n bind." +msgstr "Список IPv6-хостов, разделенных пробелами, к которым будет привязан HTTP-сервер." + +msgid "Determines what port the HTTP server will\n bind." +msgstr "Определяет, к какому порту будет привязан HTTP-сервер." + +msgid "Determines whether the server will stay\n alive if no plugin is using it. This also means that the server will\n start even if it is not used." +msgstr "Определяет, будет ли сервер оставаться запущенным, если ни один плагин его не использует. Это также означает, что сервер будет запущен, даже если он не используется." + +msgid "Determines the path of the file served as\n favicon to browsers." +msgstr "Определяет путь к файлу, передаваемому браузерам в качестве favicon." + +msgid "Determines the public URL of the server.\n By default it is http://:/, but you will want to change\n this if there is a reverse proxy (nginx, apache, ...) in front of\n the bot." +msgstr "Определяет публичный URL-адрес сервера. По умолчанию это http://:/, но вы захотите изменить, если перед ботом стоит обратный прокси (nginx, apache, ...)." + +msgid "Determines whether the bot will ignore\n unidentified users by default. Of course, that'll make it\n particularly hard for those users to register or identify with the bot\n without adding their hostmasks, but that's your problem to solve." +msgstr "Определяет, будет ли бот по умолчанию игнорировать неидентифицированных пользователей. Конечно, это сделает особенно сложным регистрацию или идентификацию этих пользователей в боте без добавления их масок хоста, но это уже ваша проблема." + +msgid "A string that is the external IP of the bot. If this is the\n empty string, the bot will attempt to find out its IP dynamically (though\n sometimes that doesn't work, hence this variable). This variable is not used\n by Limnoria and its built-in plugins: see supybot.protocols.irc.vhost /\n supybot.protocols.irc.vhost6 to set the IRC bind host, and\n supybot.servers.http.hosts4 / supybot.servers.http.hosts6 to set the HTTP\n server bind host." +msgstr "Строка, которая является внешним IP-адресом бота. Если это пустая строка, бот попытается узнать свой IP динамически (хотя иногда это не работает, отсюда и эта переменная). Эта переменная не используется Limnoria и ее встроенными плагинами: см. supybot.protocols.irc.vhost / supybot.protocols.irc.vhost6 для установки хоста IRC, и supybot.servers.http.hosts4 / supybot.servers.http.hosts6 для установки хоста HTTP-сервера." + +msgid "Determines what the default timeout for socket\n objects will be. This means that *all* sockets will timeout when this many\n seconds has gone by (unless otherwise modified by the author of the code\n that uses the sockets)." +msgstr "Определяет время ожидания по умолчанию для сокетов. Это означает, что *все* сокеты будут отключаться по истечении указанного количества секунд (если это поведение не изменено автором кода, использующего сокеты)." + +msgid "Determines what file the bot should write its PID\n (Process ID) to, so you can kill it more easily. If it's left unset (as is\n the default) then no PID file will be written. A restart is required for\n changes to this variable to take effect." +msgstr "Определяет, в какой файл бот должен записывать свой PID (Process ID), чтобы завершить его было проще. Если переменная не установлена (как и происходит по умолчанию), то PID-файл записываться не будет. Чтобы изменения в этой переменной вступили в силу, потребуется перезагрузка." + +msgid "Determines whether the bot will automatically\n thread all commands." +msgstr "Определяет, будет ли бот автоматически выполнять все команды в отдельных потоках." + +msgid "Determines whether the bot will automatically\n flush all flushers *very* often. Useful for debugging when you don't know\n what's breaking or when, but think that it might be logged." +msgstr "Определяет, будет ли бот автоматически очищать память *очень* часто. Полезно для отладки, когда вы не знаете, что и когда ломается, но думаете, что это может быть занесено в журнал." + +#, fuzzy +msgid "Supybot Web server index" +msgstr "Индекс веб-сервера Supybot" + +msgid "Here is a list of the plugins that have a Web interface:" +msgstr "Вот список плагинов, имеющих веб-интерфейс:" + +msgid "\n This is a default response of the Supybot HTTP server. If you see this\n message, it probably means you are developing a plugin, and you have\n neither overriden this message or defined an handler for this query." +msgstr "Это стандартный ответ HTTP-сервера Supybot. Если вы видите это сообщение, возможно вы занимаетесь разработкой плагина и не задали это сообщение или не задали обработчик для этого запроса." + +msgid "\n I am a pretty clever IRC bot, but I suck at serving Web pages, particulary\n if I don't know what to serve.\n What I'm saying is you just triggered a 404 Not Found, and I am not\n trained to help you in such a case." +msgstr "Я довольно умный IRC-бот, но у меня плохо получается работать с веб-страницами, особенно, если я не знаю, что именно нужно пользователю. То есть вы только что спровоцировали ошибку 404 (Not Found), а я не способен помочь вам в этом случае." + +msgid "Request not handled." +msgstr "Запрос не обработан." + +msgid "No plugins available." +msgstr "Нет доступных плагинов." + +msgid "Request not handled" +msgstr "Запрос не обработан" + +msgid "No favicon set." +msgstr "Нет установленного favicon." + +msgid "is an op on %L" +msgstr "является оператором в %L" + +msgid "is a halfop on %L" +msgstr "является полуоператором в %L" + +msgid "is voiced on %L" +msgstr "имеет voice в %L" + +msgid "is also on %L" +msgstr "также есть в %L" + +msgid "is on %L" +msgstr "находится в %L" + +msgid "isn't on any publicly visible channels" +msgstr "нет ни в одном общедоступном канале" + +msgid "" +msgstr "<неизвестный>" + +msgid " %s is away: %s." +msgstr " %s отсутствует: %s." + +msgid " identified" +msgstr " идентифицированный" + +#, fuzzy +msgid "%s (%s) has been%s on server %s since %s (idle for %s). %s %s.%s" +msgstr "%s (%s) находится%s на сервере %s с %s (простаивает в течение %s). %s %s.%s" + +#, fuzzy +msgid "%s (%s) has been%s on server %s and disconnected on %s." +msgstr "%s (%s) был %s на сервере %s и отключен на %s." + +#, fuzzy +msgid "Sorry, that response was not an option." +msgstr "Извините, но такой ответ не подходит." + +msgid "Sorry, you must enter a value." +msgstr "Извините, но вы должны ввести значение." + +msgid "Enter password: " +msgstr "Введите пароль: " + +msgid "Re-enter password: " +msgstr "Повторите пароль: " + +msgid "Passwords don't match." +msgstr "Пароли не совпадают." + +#, fuzzy +msgid "%r is not a valid entry in %r" +msgstr "%r не является действительной записью в %r" + +msgid "Value must be either True or False (or On or Off), not %r." +msgstr "Значение должно быть либо True, либо False (или On, или Off), а не %r." + +msgid "Value must be an integer, not %r." +msgstr "Значение должно быть целым числом, а не %r." + +msgid "Value must be a non-negative integer, not %r." +msgstr "Значение должно быть целым неотрицательным числом, а не %r." + +msgid "Value must be positive (non-zero) integer, not %r." +msgstr "Значение должно быть положительным (ненулевым) целым числом, а не %r." + +msgid "Value must be a floating-point number, not %r." +msgstr "Значение должно быть числом с плавающей точкой, а не %r." + +msgid "Value must be a floating-point number greater than zero, not %r." +msgstr "Значение должно быть числом с плавающей точкой больше нуля, а не %r." + +msgid "Value must be a floating point number in the range [0, 1], not %r." +msgstr "Значение должно быть числом с плавающей точкой в диапазоне [0, 1], а не %r." + +msgid "Value should be a valid Python string, not %r." +msgstr "Значение должно быть допустимой Python-строкой, а не %r." + +msgid "Valid values include %L." +msgstr "Допустимые значения включают %L." + +msgid "Valid values include %L, not %%r." +msgstr "Допустимые значения включают в себя %L, а не %%r." + +msgid "Value must be a valid regular expression, not %r." +msgstr "Значение должно быть допустимым регулярным выражением, а не %r." + +msgid "year" +msgstr "год" + +msgid "week" +msgstr "неделя" + +msgid "day" +msgstr "день" + +msgid "hour" +msgstr "час" + +msgid "minute" +msgstr "минута" + +msgid "second" +msgstr "секунда" + +msgid "%s ago" +msgstr "%s назад" + +msgid "and" +msgstr "и" From bb120edbb1f4d5e60f490e5f4e60b1598f0eac0f Mon Sep 17 00:00:00 2001 From: Valentin Lorentz Date: Thu, 1 Aug 2024 22:39:56 +0200 Subject: [PATCH 32/69] Fix --profile Broken by 0572d499883ba1f320a01f0125b00c5962fdc2cd --- src/scripts/limnoria.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/scripts/limnoria.py b/src/scripts/limnoria.py index 7178ee46e..eed67fb95 100644 --- a/src/scripts/limnoria.py +++ b/src/scripts/limnoria.py @@ -363,7 +363,9 @@ def main(): if options.profile: import profile world.profiling = True - profile.run('run()', '%s-%i.prof' % (nick, time.time())) + profile.runctx('run()', + globals=globals(), locals={**locals(), "run": run}, + filename='%s-%i.prof' % (nick, time.time())) else: run() From 72e90b69728d089de13974bd41aac29c4c08f513 Mon Sep 17 00:00:00 2001 From: Valentin Lorentz Date: Fri, 2 Aug 2024 07:49:45 +0200 Subject: [PATCH 33/69] Use cProfile instead of profile I can't open .prof files created with 'profile' using pyprof2calltree: ``` Traceback (most recent call last): File "/home/val/.local/bin/pyprof2calltree", line 8, in sys.exit(main()) ^^^^^^ File "/home/val/.local/lib/python3.11/site-packages/pyprof2calltree.py", line 339, in main kg = CalltreeConverter(pstats.Stats(args.infile)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/val/.local/lib/python3.11/site-packages/pyprof2calltree.py", line 178, in __init__ self.entries = pstats2entries(profiling_data) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/val/.local/lib/python3.11/site-packages/pyprof2calltree.py", line 135, in pstats2entries cc, nc, tt, ct = call_info ^^^^^^^^^^^^^^ TypeError: cannot unpack non-iterable int object ``` --- src/scripts/limnoria.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/scripts/limnoria.py b/src/scripts/limnoria.py index eed67fb95..6eb1cbd6c 100644 --- a/src/scripts/limnoria.py +++ b/src/scripts/limnoria.py @@ -361,11 +361,11 @@ def main(): owner = Owner.Class() if options.profile: - import profile + import cProfile world.profiling = True - profile.runctx('run()', - globals=globals(), locals={**locals(), "run": run}, - filename='%s-%i.prof' % (nick, time.time())) + cProfile.runctx('run()', + globals=globals(), locals={**locals(), "run": run}, + filename='%s-%i.prof' % (nick, time.time())) else: run() From c56fc5aa81b4d2d57080f417e9a5ae961370e317 Mon Sep 17 00:00:00 2001 From: Valentin Lorentz Date: Thu, 15 Aug 2024 23:03:31 +0200 Subject: [PATCH 34/69] Web: Add youtu.be to Youtube's domain list --- plugins/Web/plugin.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/Web/plugin.py b/plugins/Web/plugin.py index 76a8b04e1..c56da8535 100644 --- a/plugins/Web/plugin.py +++ b/plugins/Web/plugin.py @@ -151,7 +151,7 @@ class Web(callbacks.PluginRegexp): size = conf.supybot.protocols.http.peekSize() parsed_url = utils.web.urlparse(url) - if parsed_url.netloc == 'youtube.com' \ + if parsed_url.netloc in ('youtube.com', 'youtu.be') \ or parsed_url.netloc.endswith(('.youtube.com')): # there is a lot of Javascript before the size = max(819200, size) From 04e0bd42718ca22eec515f57d2ee5fe5b3adc1aa Mon Sep 17 00:00:00 2001 From: Valentin Lorentz <progval+git@progval.net> Date: Sat, 24 Aug 2024 09:48:38 +0200 Subject: [PATCH 35/69] plugin-doc: Prevent hyphenation of -- in command syntax --- plugins/Admin/README.rst | 20 +++---- plugins/Aka/README.rst | 18 +++---- plugins/Alias/README.rst | 10 ++-- plugins/Anonymous/README.rst | 8 +-- plugins/BadWords/README.rst | 6 +-- plugins/Channel/README.rst | 82 ++++++++++++++--------------- plugins/ChannelStats/README.rst | 6 +-- plugins/Conditional/README.rst | 36 ++++++------- plugins/Config/README.rst | 28 +++++----- plugins/Ctcp/README.rst | 2 +- plugins/DDG/README.rst | 2 +- plugins/Debug/README.rst | 20 +++---- plugins/Dict/README.rst | 8 +-- plugins/Dunno/README.rst | 12 ++--- plugins/Factoids/README.rst | 22 ++++---- plugins/Fediverse/README.rst | 8 +-- plugins/Filter/README.rst | 58 ++++++++++---------- plugins/Format/README.rst | 32 +++++------ plugins/GPG/README.rst | 10 ++-- plugins/Games/README.rst | 10 ++-- plugins/Google/README.rst | 6 +-- plugins/Hashes/README.rst | 12 ++--- plugins/Herald/README.rst | 10 ++-- plugins/Internet/README.rst | 6 +-- plugins/Karma/README.rst | 10 ++-- plugins/Lart/README.rst | 14 ++--- plugins/Later/README.rst | 8 +-- plugins/Math/README.rst | 12 ++--- plugins/MessageParser/README.rst | 18 +++---- plugins/Misc/README.rst | 24 ++++----- plugins/MoobotFactoids/README.rst | 20 +++---- plugins/Network/README.rst | 26 ++++----- plugins/News/README.rst | 10 ++-- plugins/NickAuth/README.rst | 8 +-- plugins/Nickometer/README.rst | 2 +- plugins/Note/README.rst | 14 ++--- plugins/Owner/README.rst | 32 +++++------ plugins/Plugin/README.rst | 10 ++-- plugins/PluginDownloader/README.rst | 6 +-- plugins/Poll/README.rst | 10 ++-- plugins/Praise/README.rst | 14 ++--- plugins/Quote/README.rst | 16 +++--- plugins/QuoteGrabs/README.rst | 16 +++--- plugins/RSS/README.rst | 16 +++--- plugins/Relay/README.rst | 6 +-- plugins/Reply/README.rst | 10 ++-- plugins/Scheduler/README.rst | 10 ++-- plugins/Seen/README.rst | 10 ++-- plugins/Services/README.rst | 24 ++++----- plugins/ShrinkUrl/README.rst | 6 +-- plugins/Status/README.rst | 20 +++---- plugins/String/README.rst | 26 ++++----- plugins/Success/README.rst | 12 ++--- plugins/Time/README.rst | 16 +++--- plugins/Todo/README.rst | 12 ++--- plugins/Topic/README.rst | 44 ++++++++-------- plugins/URL/README.rst | 4 +- plugins/Unix/README.rst | 26 ++++----- plugins/User/README.rst | 32 +++++------ plugins/Utilities/README.rst | 20 +++---- plugins/Web/README.rst | 16 +++--- src/scripts/limnoria_plugin_doc.py | 4 +- 62 files changed, 508 insertions(+), 508 deletions(-) diff --git a/plugins/Admin/README.rst b/plugins/Admin/README.rst index d1f9cffec..193f54993 100644 --- a/plugins/Admin/README.rst +++ b/plugins/Admin/README.rst @@ -23,52 +23,52 @@ Commands .. _command-admin-acmd: -acmd <command> [<arg> ...] +``acmd <command> [<arg> ...]`` Perform <command> (with associated <arg>s on all channels on current network. .. _command-admin-capability.add: -capability add <name|hostmask> <capability> +``capability add <name|hostmask> <capability>`` Gives the user specified by <name> (or the user to whom <hostmask> currently maps) the specified capability <capability> .. _command-admin-capability.remove: -capability remove <name|hostmask> <capability> +``capability remove <name|hostmask> <capability>`` Takes from the user specified by <name> (or the user to whom <hostmask> currently maps) the specified capability <capability> .. _command-admin-channels: -channels takes no arguments +``channels takes no arguments`` Returns the channels the bot is on. .. _command-admin-clearq: -clearq takes no arguments +``clearq takes no arguments`` Clears the current send queue for this network. .. _command-admin-ignore.add: -ignore add <hostmask|nick> [<expires>] +``ignore add <hostmask|nick> [<expires>]`` This will set a persistent ignore on <hostmask> or the hostmask currently associated with <nick>. <expires> is an optional argument specifying when (in "seconds from now") the ignore will expire; if it isn't given, the ignore will never automatically expire. .. _command-admin-ignore.list: -ignore list takes no arguments +``ignore list takes no arguments`` Lists the hostmasks that the bot is ignoring. .. _command-admin-ignore.remove: -ignore remove <hostmask|nick> +``ignore remove <hostmask|nick>`` This will remove the persistent ignore on <hostmask> or the hostmask currently associated with <nick>. .. _command-admin-join: -join <channel> [<key>] +``join <channel> [<key>]`` Tell the bot to join the given channel. If <key> is given, it is used when attempting to join the channel. .. _command-admin-nick: -nick [<nick>] [<network>] +``nick [<nick>] [<network>]`` Changes the bot's nick to <nick>. If no nick is given, returns the bot's current nick. .. _conf-Admin: diff --git a/plugins/Aka/README.rst b/plugins/Aka/README.rst index 6a7d29083..68e301ba7 100644 --- a/plugins/Aka/README.rst +++ b/plugins/Aka/README.rst @@ -77,47 +77,47 @@ Commands .. _command-aka-add: -add [--channel <#channel>] <name> <command> +``add [--channel <#channel>] <name> <command>`` Defines an alias <name> that executes <command>. The <command> should be in the standard "command argument [nestedcommand argument]" arguments to the alias; they'll be filled with the first, second, etc. arguments. $1, $2, etc. can be used for required arguments. @1, @2, etc. can be used for optional arguments. $* simply means "all arguments that have not replaced $1, $2, etc.", ie. it will also include optional arguments. .. _command-aka-remove: -remove [--channel <#channel>] <name> +``remove [--channel <#channel>] <name>`` Removes the given alias, if unlocked. .. _command-aka-lock: -lock [--channel <#channel>] <alias> +``lock [--channel <#channel>] <alias>`` Locks an alias so that no one else can change it. .. _command-aka-unlock: -unlock [--channel <#channel>] <alias> +``unlock [--channel <#channel>] <alias>`` Unlocks an alias so that people can define new aliases over it. .. _command-aka-importaliasdatabase: -importaliasdatabase takes no arguments +``importaliasdatabase takes no arguments`` Imports the Alias database into Aka's, and clean the former. .. _command-aka-show: -show [--channel <#channel>] <alias> +``show [--channel <#channel>] <alias>`` This command shows the content of an Aka. .. _command-aka-list: -list [--channel <#channel>] [--keys] [--unlocked|--locked] +``list [--channel <#channel>] [--keys] [--unlocked|--locked]`` Lists all Akas defined for <channel>. If <channel> is not specified, lists all global Akas. If --keys is given, lists only the Aka names and not their commands. .. _command-aka-set: -set [--channel <#channel>] <name> <command> +``set [--channel <#channel>] <name> <command>`` Overwrites an existing alias <name> to execute <command> instead. The <command> should be in the standard "command argument [nestedcommand argument]" arguments to the alias; they'll be filled with the first, second, etc. arguments. $1, $2, etc. can be used for required arguments. @1, @2, etc. can be used for optional arguments. $* simply means "all arguments that have not replaced $1, $2, etc.", ie. it will also include optional arguments. .. _command-aka-search: -search [--channel <#channel>] <query> +``search [--channel <#channel>] <query>`` Searches Akas defined for <channel>. If <channel> is not specified, searches all global Akas. .. _conf-Aka: diff --git a/plugins/Alias/README.rst b/plugins/Alias/README.rst index bb4fc4576..65a494cf6 100644 --- a/plugins/Alias/README.rst +++ b/plugins/Alias/README.rst @@ -43,27 +43,27 @@ Commands .. _command-alias-add: -add <name> <command> +``add <name> <command>`` Defines an alias <name> that executes <command>. The <command> should be in the standard "command argument [nestedcommand argument]" arguments to the alias; they'll be filled with the first, second, etc. arguments. $1, $2, etc. can be used for required arguments. @1, @2, etc. can be used for optional arguments. $* simply means "all remaining arguments," and cannot be combined with optional arguments. .. _command-alias-list: -list [--locked|--unlocked] +``list [--locked|--unlocked]`` Lists alias names of a particular type, defaults to all aliases if no --locked or --unlocked option is given. .. _command-alias-lock: -lock <alias> +``lock <alias>`` Locks an alias so that no one else can change it. .. _command-alias-remove: -remove <name> +``remove <name>`` Removes the given alias, if unlocked. .. _command-alias-unlock: -unlock <alias> +``unlock <alias>`` Unlocks an alias so that people can define new aliases over it. .. _conf-Alias: diff --git a/plugins/Anonymous/README.rst b/plugins/Anonymous/README.rst index c291ea2d3..6ce4dcbd3 100644 --- a/plugins/Anonymous/README.rst +++ b/plugins/Anonymous/README.rst @@ -53,22 +53,22 @@ Commands .. _command-anonymous-do: -do <channel> <action> +``do <channel> <action>`` Performs <action> in <channel>. .. _command-anonymous-react: -react <channel> <reaction> <nick> +``react <channel> <reaction> <nick>`` Sends the <reaction> to <nick>'s last message. <reaction> is typically a smiley or an emoji. This may not be supported on the current network, as this command depends on IRCv3 features. This is also not supported if supybot.protocols.irc.experimentalExtensions disabled (don't enable it unless you know what you are doing). .. _command-anonymous-say: -say <channel> <text> +``say <channel> <text>`` Sends <text> to <channel>. .. _command-anonymous-tell: -tell <nick> <text> +``tell <nick> <text>`` Sends <text> to <nick>. Can only be used if supybot.plugins.Anonymous.allowPrivateTarget is True. .. _conf-Anonymous: diff --git a/plugins/BadWords/README.rst b/plugins/BadWords/README.rst index e6636d078..c1b701fb8 100644 --- a/plugins/BadWords/README.rst +++ b/plugins/BadWords/README.rst @@ -25,17 +25,17 @@ Commands .. _command-badwords-add: -add <word> [<word> ...] +``add <word> [<word> ...]`` Adds all <word>s to the list of words being censored. .. _command-badwords-list: -list takes no arguments +``list takes no arguments`` Returns the list of words being censored. .. _command-badwords-remove: -remove <word> [<word> ...] +``remove <word> [<word> ...]`` Removes <word>s from the list of words being censored. .. _conf-BadWords: diff --git a/plugins/Channel/README.rst b/plugins/Channel/README.rst index ba49124b6..fe34fe0e1 100644 --- a/plugins/Channel/README.rst +++ b/plugins/Channel/README.rst @@ -23,197 +23,197 @@ Commands .. _command-channel-alert: -alert [<channel>] <text> +``alert [<channel>] <text>`` Sends <text> to all the users in <channel> who have the <channel>,op capability. .. _command-channel-ban.add: -ban add [<channel>] <nick|hostmask> [<expires>] +``ban add [<channel>] <nick|hostmask> [<expires>]`` If you have the #channel,op capability, this will effect a persistent ban from interacting with the bot on the given <hostmask> (or the current hostmask associated with <nick>). Other plugins may enforce this ban by actually banning users with matching hostmasks when they join. <expires> is an optional argument specifying when (in "seconds from now") the ban should expire; if none is given, the ban will never automatically expire. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-channel-ban.hostmask: -ban hostmask [<channel>] <banmask> +``ban hostmask [<channel>] <banmask>`` Bans the <banmask> from the <channel>. .. _command-channel-ban.list: -ban list [<channel>] [<mask>] +``ban list [<channel>] [<mask>]`` If you have the #channel,op capability, this will show you the current persistent bans on the <channel> that match the given mask, if any (returns all of them otherwise). Note that you can use * as a wildcard on masks and \* to match actual * in masks .. _command-channel-ban.remove: -ban remove [<channel>] <hostmask> +``ban remove [<channel>] <hostmask>`` If you have the #channel,op capability, this will remove the persistent ban on <hostmask>. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-channel-capability.add: -capability add [<channel>] <nick|username> <capability> [<capability> ...] +``capability add [<channel>] <nick|username> <capability> [<capability> ...]`` If you have the #channel,op capability, this will give the <username> (or the user to whom <nick> maps) the capability <capability> in the channel. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-channel-capability.list: -capability list [<channel>] +``capability list [<channel>]`` Returns the capabilities present on the <channel>. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-channel-capability.remove: -capability remove [<channel>] <name|hostmask> <capability> [<capability> ...] +``capability remove [<channel>] <name|hostmask> <capability> [<capability> ...]`` If you have the #channel,op capability, this will take from the user currently identified as <name> (or the user to whom <hostmask> maps) the capability <capability> in the channel. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-channel-capability.set: -capability set [<channel>] <capability> [<capability> ...] +``capability set [<channel>] <capability> [<capability> ...]`` If you have the #channel,op capability, this will add the channel capability <capability> for all users in the channel. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-channel-capability.setdefault: -capability setdefault [<channel>] {True|False} +``capability setdefault [<channel>] {True|False}`` If you have the #channel,op capability, this will set the default response to non-power-related (that is, not {op, halfop, voice}) capabilities to be the value you give. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-channel-capability.unset: -capability unset [<channel>] <capability> [<capability> ...] +``capability unset [<channel>] <capability> [<capability> ...]`` If you have the #channel,op capability, this will unset the channel capability <capability> so each user's specific capability or the channel default capability will take precedence. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-channel-cycle: -cycle [<channel>] [<reason>] +``cycle [<channel>] [<reason>]`` If you have the #channel,op capability, this will cause the bot to "cycle", or PART and then JOIN the channel. <channel> is only necessary if the message isn't sent in the channel itself. If <reason> is not specified, the default part message specified in supybot.plugins.Channel.partMsg will be used. No part message will be used if neither a cycle reason nor a default part message is given. .. _command-channel-dehalfop: -dehalfop [<channel>] [<nick> ...] +``dehalfop [<channel>] [<nick> ...]`` If you have the #channel,op capability, this will remove half-operator privileges from all the nicks given. If no nicks are given, removes half-operator privileges from the person sending the message. .. _command-channel-deop: -deop [<channel>] [<nick> ...] +``deop [<channel>] [<nick> ...]`` If you have the #channel,op capability, this will remove operator privileges from all the nicks given. If no nicks are given, removes operator privileges from the person sending the message. .. _command-channel-devoice: -devoice [<channel>] [<nick> ...] +``devoice [<channel>] [<nick> ...]`` If you have the #channel,op capability, this will remove voice from all the nicks given. If no nicks are given, removes voice from the person sending the message. .. _command-channel-disable: -disable [<channel>] [<plugin>] [<command>] +``disable [<channel>] [<plugin>] [<command>]`` If you have the #channel,op capability, this will disable the <command> in <channel>. If <plugin> is provided, <command> will be disabled only for that plugin. If only <plugin> is provided, all commands in the given plugin will be disabled. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-channel-enable: -enable [<channel>] [<plugin>] [<command>] +``enable [<channel>] [<plugin>] [<command>]`` If you have the #channel,op capability, this will enable the <command> in <channel> if it has been disabled. If <plugin> is provided, <command> will be enabled only for that plugin. If only <plugin> is provided, all commands in the given plugin will be enabled. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-channel-halfop: -halfop [<channel>] [<nick> ...] +``halfop [<channel>] [<nick> ...]`` If you have the #channel,halfop capability, this will give all the <nick>s you provide halfops. If you don't provide any <nick>s, this will give you halfops. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-channel-iban: -iban [<channel>] [--{exact,nick,user,host}] <nick> [<seconds>] - If you have the #channel,op capability, this will ban <nick> for as many seconds as you specify, otherwise (if you specify 0 seconds or don't specify a number of seconds) it will ban the person indefinitely. --exact can be used to specify an exact hostmask. You can combine the --nick, --user, and --host options as you choose. <channel> is only necessary if the message isn't sent in the channel itself. +``iban [<channel>] [--{exact,nick,user,host}] <nick> [<seconds>]`` + If you have the #channel,op capability, this will ban <nick> for as many seconds as you specify, otherwise (if you specify 0 seconds or don't specify a number of seconds) it will ban the person indefinitely. --exact can be used to specify an exact hostmask. You can combine the --nick, --user, and --host options as you choose. If --account is provided and the user is logged in and the network supports account bans, this will ban the user's account instead. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-channel-ignore.add: -ignore add [<channel>] <nick|hostmask> [<expires>] +``ignore add [<channel>] <nick|hostmask> [<expires>]`` If you have the #channel,op capability, this will set a persistent ignore on <hostmask> or the hostmask currently associated with <nick>. <expires> is an optional argument specifying when (in "seconds from now") the ignore will expire; if it isn't given, the ignore will never automatically expire. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-channel-ignore.list: -ignore list [<channel>] +``ignore list [<channel>]`` Lists the hostmasks that the bot is ignoring on the given channel. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-channel-ignore.remove: -ignore remove [<channel>] <nick|hostmask> +``ignore remove [<channel>] <nick|hostmask>`` If you have the #channel,op capability, this will remove the persistent ignore on <hostmask> in the channel. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-channel-invite: -invite [<channel>] <nick> +``invite [<channel>] <nick>`` If you have the #channel,op capability, this will invite <nick> to join <channel>. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-channel-kban: -kban [<channel>] [--{exact,nick,user,host,account}] <nick> [<seconds>] [<reason>] - If you have the #channel,op capability, this will kickban <nick> for as many seconds as you specify, or else (if you specify 0 seconds or don't specify a number of seconds) it will ban the person indefinitely. --exact bans only the exact hostmask; --nick bans just the nick; --user bans just the user, and --host bans just the host You can combine the --nick, --user, and --host options as you choose. <channel> is only necessary if the message isn't sent in the channel itself. +``kban [<channel>] [--{exact,nick,user,host,account}] <nick> [<seconds>] [<reason>]`` + If you have the #channel,op capability, this will kickban <nick> for as many seconds as you specify, or else (if you specify 0 seconds or don't specify a number of seconds) it will ban the person indefinitely. --exact bans only the exact hostmask; --nick bans just the nick; --user bans just the user, and --host bans just the host You can combine the --nick, --user, and --host options as you choose. If --account is provided and the user is logged in and the network supports account bans, this will ban the user's account instead. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-channel-key: -key [<channel>] [<key>] +``key [<channel>] [<key>]`` Sets the keyword in <channel> to <key>. If <key> is not given, removes the keyword requirement to join <channel>. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-channel-kick: -kick [<channel>] <nick>[, <nick>, ...] [<reason>] +``kick [<channel>] <nick>[, <nick>, ...] [<reason>]`` Kicks <nick>(s) from <channel> for <reason>. If <reason> isn't given, uses the nick of the person making the command as the reason. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-channel-limit: -limit [<channel>] [<limit>] +``limit [<channel>] [<limit>]`` Sets the channel limit to <limit>. If <limit> is 0, or isn't given, removes the channel limit. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-channel-listbans: -listbans [<channel>] +``listbans [<channel>]`` List all bans on the channel. If <channel> is not given, it defaults to the current channel. .. _command-channel-lobotomy.add: -lobotomy add [<channel>] +``lobotomy add [<channel>]`` If you have the #channel,op capability, this will "lobotomize" the bot, making it silent and unanswering to all requests made in the channel. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-channel-lobotomy.list: -lobotomy list takes no arguments +``lobotomy list takes no arguments`` Returns the channels in which this bot is lobotomized. .. _command-channel-lobotomy.remove: -lobotomy remove [<channel>] +``lobotomy remove [<channel>]`` If you have the #channel,op capability, this will unlobotomize the bot, making it respond to requests made in the channel again. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-channel-mode: -mode [<channel>] <mode> [<arg> ...] +``mode [<channel>] <mode> [<arg> ...]`` Sets the mode in <channel> to <mode>, sending the arguments given. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-channel-moderate: -moderate [<channel>] +``moderate [<channel>]`` Sets +m on <channel>, making it so only ops and voiced users can send messages to the channel. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-channel-nicks: -nicks [<channel>] [--count] +``nicks [<channel>] [--count]`` Returns the nicks in <channel>. <channel> is only necessary if the message isn't sent in the channel itself. Returns only the number of nicks if --count option is provided. .. _command-channel-op: -op [<channel>] [<nick> ...] +``op [<channel>] [<nick> ...]`` If you have the #channel,op capability, this will give all the <nick>s you provide ops. If you don't provide any <nick>s, this will op you. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-channel-part: -part [<channel>] [<reason>] +``part [<channel>] [<reason>]`` Tells the bot to part the list of channels you give it. <channel> is only necessary if you want the bot to part a channel other than the current channel. If <reason> is specified, use it as the part message. Otherwise, the default part message specified in supybot.plugins.Channel.partMsg will be used. No part message will be used if no default is configured. .. _command-channel-unban: -unban [<channel>] [<hostmask|--all>] +``unban [<channel>] [<hostmask|--all>]`` Unbans <hostmask> on <channel>. If <hostmask> is not given, unbans any hostmask currently banned on <channel> that matches your current hostmask. Especially useful for unbanning yourself when you get unexpectedly (or accidentally) banned from the channel. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-channel-unmoderate: -unmoderate [<channel>] +``unmoderate [<channel>]`` Sets -m on <channel>, making it so everyone can send messages to the channel. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-channel-voice: -voice [<channel>] [<nick> ...] +``voice [<channel>] [<nick> ...]`` If you have the #channel,voice capability, this will voice all the <nick>s you provide. If you don't provide any <nick>s, this will voice you. <channel> is only necessary if the message isn't sent in the channel itself. .. _conf-Channel: diff --git a/plugins/ChannelStats/README.rst b/plugins/ChannelStats/README.rst index dff660af2..c5ff87927 100644 --- a/plugins/ChannelStats/README.rst +++ b/plugins/ChannelStats/README.rst @@ -23,17 +23,17 @@ Commands .. _command-channelstats-channelstats: -channelstats [<channel>] +``channelstats [<channel>]`` Returns the statistics for <channel>. <channel> is only necessary if the message isn't sent on the channel itself. .. _command-channelstats-rank: -rank [<channel>] <stat expression> +``rank [<channel>] <stat expression>`` Returns the ranking of users according to the given stat expression. Valid variables in the stat expression include 'msgs', 'chars', 'words', 'smileys', 'frowns', 'actions', 'joins', 'parts', 'quits', 'kicks', 'kicked', 'topics', and 'modes'. Any simple mathematical expression involving those variables is permitted. .. _command-channelstats-stats: -stats [<channel>] [<name>] +``stats [<channel>] [<name>]`` Returns the statistics for <name> on <channel>. <channel> is only necessary if the message isn't sent on the channel itself. If <name> isn't given, it defaults to the user sending the command. .. _conf-ChannelStats: diff --git a/plugins/Conditional/README.rst b/plugins/Conditional/README.rst index 469e03ab1..9a234af42 100644 --- a/plugins/Conditional/README.rst +++ b/plugins/Conditional/README.rst @@ -26,92 +26,92 @@ Commands .. _command-conditional-cand: -cand <cond1> [<cond2> ... <condN>] +``cand <cond1> [<cond2> ... <condN>]`` Returns true if all conditions supplied evaluate to true. .. _command-conditional-ceq: -ceq <item1> <item2> +``ceq <item1> <item2>`` Does a string comparison on <item1> and <item2>. Returns true if they are equal. .. _command-conditional-cerror: -cerror <testcommand> +``cerror <testcommand>`` Runs <testcommand> and returns true if it raises an error; false otherwise. .. _command-conditional-cif: -cif <condition> <ifcommand> <elsecommand> +``cif <condition> <ifcommand> <elsecommand>`` Runs <ifcommand> if <condition> evaluates to true, runs <elsecommand> if it evaluates to false. Use other logical operators defined in this plugin and command nesting to your advantage here. .. _command-conditional-cor: -cor <cond1> [<cond2> ... <condN>] +``cor <cond1> [<cond2> ... <condN>]`` Returns true if any one of conditions supplied evaluates to true. .. _command-conditional-cxor: -cxor <cond1> [<cond2> ... <condN>] +``cxor <cond1> [<cond2> ... <condN>]`` Returns true if only one of conditions supplied evaluates to true. .. _command-conditional-ge: -ge <item1> <item2> +``ge <item1> <item2>`` Does a string comparison on <item1> and <item2>. Returns true if <item1> is greater than or equal to <item2>. .. _command-conditional-gt: -gt <item1> <item2> +``gt <item1> <item2>`` Does a string comparison on <item1> and <item2>. Returns true if <item1> is greater than <item2>. .. _command-conditional-le: -le <item1> <item2> +``le <item1> <item2>`` Does a string comparison on <item1> and <item2>. Returns true if <item1> is less than or equal to <item2>. .. _command-conditional-lt: -lt <item1> <item2> +``lt <item1> <item2>`` Does a string comparison on <item1> and <item2>. Returns true if <item1> is less than <item2>. .. _command-conditional-match: -match [--case-insensitive] <item1> <item2> +``match [--case-insensitive] <item1> <item2>`` Determines if <item1> is a substring of <item2>. Returns true if <item1> is contained in <item2>. Will only match case if --case-insensitive is not given. .. _command-conditional-nceq: -nceq <item1> <item2> +``nceq <item1> <item2>`` Does a numeric comparison on <item1> and <item2>. Returns true if they are equal. .. _command-conditional-ne: -ne <item1> <item2> +``ne <item1> <item2>`` Does a string comparison on <item1> and <item2>. Returns true if they are not equal. .. _command-conditional-nge: -nge <item1> <item2> +``nge <item1> <item2>`` Does a numeric comparison on <item1> and <item2>. Returns true if <item1> is greater than or equal to <item2>. .. _command-conditional-ngt: -ngt <item1> <item2> +``ngt <item1> <item2>`` Does a numeric comparison on <item1> and <item2>. Returns true if <item1> is greater than <item2>. .. _command-conditional-nle: -nle <item1> <item2> +``nle <item1> <item2>`` Does a numeric comparison on <item1> and <item2>. Returns true if <item1> is less than or equal to <item2>. .. _command-conditional-nlt: -nlt <item1> <item2> +``nlt <item1> <item2>`` Does a numeric comparison on <item1> and <item2>. Returns true if <item1> is less than <item2>. .. _command-conditional-nne: -nne <item1> <item2> +``nne <item1> <item2>`` Does a numeric comparison on <item1> and <item2>. Returns true if they are not equal. .. _conf-Conditional: diff --git a/plugins/Config/README.rst b/plugins/Config/README.rst index 3cf295fc9..4b0d6987b 100644 --- a/plugins/Config/README.rst +++ b/plugins/Config/README.rst @@ -21,72 +21,72 @@ Commands .. _command-config-channel: -channel [<network>] [<channel>] <name> [<value>] +``channel [<network>] [<channel>] <name> [<value>]`` If <value> is given, sets the channel configuration variable for <name> to <value> for <channel> on the <network>. Otherwise, returns the current channel configuration value of <name>. <channel> is only necessary if the message isn't sent in the channel itself. More than one channel may be given at once by separating them with commas. <network> defaults to the current network. .. _command-config-config: -config <name> [<value>] +``config <name> [<value>]`` If <value> is given, sets the value of <name> to <value>. Otherwise, returns the current value of <name>. You may omit the leading "supybot." in the name if you so choose. .. _command-config-default: -default <name> +``default <name>`` Returns the default value of the configuration variable <name>. .. _command-config-export: -export <filename> +``export <filename>`` Exports the public variables of your configuration to <filename>. If you want to show someone your configuration file, but you don't want that person to be able to see things like passwords, etc., this command will export a "sanitized" configuration file suitable for showing publicly. .. _command-config-help: -help <name> +``help <name>`` Returns the description of the configuration variable <name>. .. _command-config-list: -list <group> +``list <group>`` Returns the configuration variables available under the given configuration <group>. If a variable has values under it, it is preceded by an '@' sign. If a variable is channel-specific, that is, it can be separately configured for each channel using the 'channel' command in this plugin, it is preceded by an '#' sign. And if a variable is a network-specific, it is preceded by a ':' sign. .. _command-config-network: -network [<network>] <name> [<value>] +``network [<network>] <name> [<value>]`` If <value> is given, sets the network configuration variable for <name> to <value> for <network>. Otherwise, returns the current network configuration value of <name>. <network> defaults to the current network. .. _command-config-reload: -reload takes no arguments +``reload takes no arguments`` Reloads the various configuration files (user database, channel database, registry, etc.). .. _command-config-reset.channel: -reset channel [<network>] [<channel>] <name> +``reset channel [<network>] [<channel>] <name>`` Resets the channel-specific value of variable <name>, so that it will match the network-specific value (or the global one if the latter isn't set). <network> and <channel> default to the current network and channel. .. _command-config-reset.network: -reset network [<network>] [<channel>] <name> +``reset network [<network>] [<channel>] <name>`` Resets the network-specific value of variable <name>, so that it will match the global. <network> defaults to the current network and channel. .. _command-config-search: -search <word> +``search <word>`` Searches for <word> in the current configuration variables. .. _command-config-searchhelp: -searchhelp <phrase> +``searchhelp <phrase>`` Searches for <phrase> in the help of current configuration variables. .. _command-config-searchvalues: -searchvalues <word> +``searchvalues <word>`` Searches for <word> in the values of current configuration variables. .. _command-config-setdefault: -setdefault <name> +``setdefault <name>`` Resets the configuration variable <name> to its default value. Use commands 'reset channel' and 'reset network' instead to make a channel- or network- specific value inherit from the global one. .. _conf-Config: diff --git a/plugins/Ctcp/README.rst b/plugins/Ctcp/README.rst index eaa87075f..a19540e6b 100644 --- a/plugins/Ctcp/README.rst +++ b/plugins/Ctcp/README.rst @@ -25,7 +25,7 @@ Commands .. _command-ctcp-version: -version [<channel>] [--nicks] +``version [<channel>] [--nicks]`` Sends a CTCP VERSION to <channel>, returning the various version strings returned. It waits for 10 seconds before returning the versions received at that point. If --nicks is given, nicks are associated with the version strings; otherwise, only the version strings are given. .. _conf-Ctcp: diff --git a/plugins/DDG/README.rst b/plugins/DDG/README.rst index fc57c7e7f..f62c10848 100644 --- a/plugins/DDG/README.rst +++ b/plugins/DDG/README.rst @@ -25,7 +25,7 @@ Commands .. _command-ddg-search: -search <text> +``search <text>`` Searches for <text> on DuckDuckGo's web search. .. _conf-DDG: diff --git a/plugins/Debug/README.rst b/plugins/Debug/README.rst index 1df5f3931..12c3cc1de 100644 --- a/plugins/Debug/README.rst +++ b/plugins/Debug/README.rst @@ -23,52 +23,52 @@ Commands .. _command-debug-channeldb: -channeldb [<channel>] +``channeldb [<channel>]`` Returns the result of the channeldb converter. .. _command-debug-collect: -collect [<times>] +``collect [<times>]`` Does <times> gc collections, returning the number of objects collected each time. <times> defaults to 1. .. _command-debug-environ: -environ takes no arguments +``environ takes no arguments`` Returns the environment of the supybot process. .. _command-debug-eval: -eval <expression> +``eval <expression>`` Evaluates <expression> (which should be a Python expression) and returns its value. If an exception is raised, reports the exception (and logs the traceback to the bot's logfile). .. _command-debug-exec: -exec <statement> +``exec <statement>`` Execs <code>. Returns success if it didn't raise any exceptions. .. _command-debug-exn: -exn <exception name> +``exn <exception name>`` Raises the exception matching <exception name>. .. _command-debug-sendquote: -sendquote <raw IRC message> +``sendquote <raw IRC message>`` Sends (not queues) the raw IRC message given. .. _command-debug-settrace: -settrace [<filename>] +``settrace [<filename>]`` Starts tracing function calls to <filename>. If <filename> is not given, sys.stdout is used. This causes much output. .. _command-debug-simpleeval: -simpleeval <expression> +``simpleeval <expression>`` Evaluates the given expression. .. _command-debug-unsettrace: -unsettrace takes no arguments +``unsettrace takes no arguments`` Stops tracing function calls on stdout. .. _conf-Debug: diff --git a/plugins/Dict/README.rst b/plugins/Dict/README.rst index b0c72e6a2..2d01e6c3b 100644 --- a/plugins/Dict/README.rst +++ b/plugins/Dict/README.rst @@ -26,22 +26,22 @@ Commands .. _command-dict-dict: -dict [<dictionary>] <word> +``dict [<dictionary>] <word>`` Looks up the definition of <word> on the dictd server specified by the supybot.plugins.Dict.server config variable. .. _command-dict-dictionaries: -dictionaries takes no arguments +``dictionaries takes no arguments`` Returns the dictionaries valid for the dict command. .. _command-dict-random: -random takes no arguments +``random takes no arguments`` Returns a random valid dictionary. .. _command-dict-synonym: -synonym <word> [<word> ...] +``synonym <word> [<word> ...]`` Gets a random synonym from the Moby Thesaurus (moby-thesaurus) database. If given many words, gets a random synonym for each of them. Quote phrases to have them treated as one lookup word. .. _conf-Dict: diff --git a/plugins/Dunno/README.rst b/plugins/Dunno/README.rst index 3030b1718..364209938 100644 --- a/plugins/Dunno/README.rst +++ b/plugins/Dunno/README.rst @@ -29,32 +29,32 @@ Commands .. _command-dunno-add: -add [<channel>] <text> +``add [<channel>] <text>`` Adds <text> to the dunno database for <channel>. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-dunno-change: -change [<channel>] <id> <regexp> +``change [<channel>] <id> <regexp>`` Changes the dunno with id <id> according to the regular expression <regexp>. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-dunno-get: -get [<channel>] <id> +``get [<channel>] <id>`` Gets the dunno with id <id> from the dunno database for <channel>. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-dunno-remove: -remove [<channel>] <id> +``remove [<channel>] <id>`` Removes the dunno with id <id> from the dunno database for <channel>. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-dunno-search: -search [<channel>] [--{regexp,by} <value>] [<glob>] +``search [<channel>] [--{regexp,by} <value>] [<glob>]`` Searches for dunnos matching the criteria given. .. _command-dunno-stats: -stats [<channel>] +``stats [<channel>]`` Returns the number of dunnos in the database for <channel>. <channel> is only necessary if the message isn't sent in the channel itself. .. _conf-Dunno: diff --git a/plugins/Factoids/README.rst b/plugins/Factoids/README.rst index dfff8f6b4..24ef81f04 100644 --- a/plugins/Factoids/README.rst +++ b/plugins/Factoids/README.rst @@ -21,57 +21,57 @@ Commands .. _command-factoids-alias: -alias [<channel>] <oldkey> <newkey> [<number>] +``alias [<channel>] <oldkey> <newkey> [<number>]`` Adds a new key <newkey> for factoid associated with <oldkey>. <number> is only necessary if there's more than one factoid associated with <oldkey>. The same action can be accomplished by using the 'learn' function with a new key but an existing (verbatim) factoid content. .. _command-factoids-change: -change [<channel>] <key> <number> <regexp> +``change [<channel>] <key> <number> <regexp>`` Changes the factoid #<number> associated with <key> according to <regexp>. .. _command-factoids-forget: -forget [<channel>] <key> [<number>|*] +``forget [<channel>] <key> [<number>|*]`` Removes a key-fact relationship for key <key> from the factoids database. If there is more than one such relationship for this key, a number is necessary to determine which one should be removed. A * can be used to remove all relationships for <key>. If as a result, the key (factoid) remains without any relationships to a factoid (key), it shall be removed from the database. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-factoids-info: -info [<channel>] <key> +``info [<channel>] <key>`` Gives information about the factoid(s) associated with <key>. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-factoids-learn: -learn [<channel>] <key> is <value> +``learn [<channel>] <key> is <value>`` Associates <key> with <value>. <channel> is only necessary if the message isn't sent on the channel itself. The word 'is' is necessary to separate the key from the value. It can be changed to another word via the learnSeparator registry value. .. _command-factoids-lock: -lock [<channel>] <key> +``lock [<channel>] <key>`` Locks the factoid(s) associated with <key> so that they cannot be removed or added to. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-factoids-random: -random [<channel>] +``random [<channel>]`` Returns random factoids from the database for <channel>. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-factoids-rank: -rank [<channel>] [--plain] [--alpha] [<number>] +``rank [<channel>] [--plain] [--alpha] [<number>]`` Returns a list of top-ranked factoid keys, sorted by usage count (rank). If <number> is not provided, the default number of factoid keys returned is set by the rankListLength registry value. If --plain option is given, rank numbers and usage counts are not included in output. If --alpha option is given in addition to --plain, keys are sorted alphabetically, instead of by rank. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-factoids-search: -search [<channel>] [--values] [--regexp <value>] [--author <username>] [<glob> ...] +``search [<channel>] [--values] [--regexp <value>] [--author <username>] [<glob> ...]`` Searches the keyspace for keys matching <glob>. If --regexp is given, its associated value is taken as a regexp and matched against the keys. If --values is given, search the value space instead of the keyspace. .. _command-factoids-unlock: -unlock [<channel>] <key> +``unlock [<channel>] <key>`` Unlocks the factoid(s) associated with <key> so that they can be removed or added to. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-factoids-whatis: -whatis [<channel>] [--raw] <key> [<number>] +``whatis [<channel>] [--raw] <key> [<number>]`` Looks up the value of <key> in the factoid database. If given a number, will return only that exact factoid. If '--raw' option is given, no variable substitution will take place on the factoid. <channel> is only necessary if the message isn't sent in the channel itself. .. _conf-Factoids: diff --git a/plugins/Fediverse/README.rst b/plugins/Fediverse/README.rst index 5b9937856..08fe78f45 100644 --- a/plugins/Fediverse/README.rst +++ b/plugins/Fediverse/README.rst @@ -42,22 +42,22 @@ Commands .. _command-fediverse-featured: -featured <@user@instance> +``featured <@user@instance>`` Returnes the featured statuses of @user@instance (aka. pinned toots). .. _command-fediverse-profile: -profile <@user@instance> +``profile <@user@instance>`` Returns generic information on the account @user@instance. .. _command-fediverse-status: -status <url> +``status <url>`` Shows the content of the status at <url>. .. _command-fediverse-statuses: -statuses <@user@instance> +``statuses <@user@instance>`` Returned the last statuses of @user@instance. .. _conf-Fediverse: diff --git a/plugins/Filter/README.rst b/plugins/Filter/README.rst index 975863e0e..2e0b6ba88 100644 --- a/plugins/Filter/README.rst +++ b/plugins/Filter/README.rst @@ -31,147 +31,147 @@ Commands .. _command-filter-aol: -aol <text> +``aol <text>`` Returns <text> as if an AOL user had said it. .. _command-filter-binary: -binary <text> +``binary <text>`` Returns the binary representation of <text>. .. _command-filter-caps: -caps <text> +``caps <text>`` EVERYONE LOVES CAPS LOCK. .. _command-filter-capwords: -capwords <text> +``capwords <text>`` Capitalises the first letter of each word. .. _command-filter-colorize: -colorize <text> +``colorize <text>`` Returns <text> with each character randomly colorized. .. _command-filter-gnu: -gnu <text> +``gnu <text>`` Returns <text> as GNU/RMS would say it. .. _command-filter-hebrew: -hebrew <text> +``hebrew <text>`` Removes all the vowels from <text>. (If you're curious why this is named 'hebrew' it's because I (jemfinch) thought of it in Hebrew class, and printed Hebrew often elides the vowels.) .. _command-filter-hexlify: -hexlify <text> +``hexlify <text>`` Returns a hexstring from the given string; a hexstring is a string composed of the hexadecimal value of each character in the string .. _command-filter-jeffk: -jeffk <text> +``jeffk <text>`` Returns <text> as if JeffK had said it himself. .. _command-filter-leet: -leet <text> +``leet <text>`` Returns the l33tspeak version of <text> .. _command-filter-morse: -morse <text> +``morse <text>`` Gives the Morse code equivalent of a given string. .. _command-filter-outfilter: -outfilter [<channel>] [<command>] +``outfilter [<channel>] [<command>]`` Sets the outFilter of this plugin to be <command>. If no command is given, unsets the outFilter. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-filter-rainbow: -rainbow <text> +``rainbow <text>`` Returns <text> colorized like a rainbow. .. _command-filter-reverse: -reverse <text> +``reverse <text>`` Reverses <text>. .. _command-filter-rot13: -rot13 <text> +``rot13 <text>`` Rotates <text> 13 characters to the right in the alphabet. Rot13 is commonly used for text that simply needs to be hidden from inadvertent reading by roaming eyes, since it's easily reversible. .. _command-filter-scramble: -scramble <text> +``scramble <text>`` Replies with a string where each word is scrambled; i.e., each internal letter (that is, all letters but the first and last) are shuffled. .. _command-filter-shrink: -shrink <text> +``shrink <text>`` Returns <text> with each word longer than supybot.plugins.Filter.shrink.minimum being shrunken (i.e., like "internationalization" becomes "i18n"). .. _command-filter-spellit: -spellit <text> +``spellit <text>`` Returns <text>, phonetically spelled out. .. _command-filter-squish: -squish <text> +``squish <text>`` Removes all the spaces from <text>. .. _command-filter-stripcolor: -stripcolor <text> +``stripcolor <text>`` Returns <text> stripped of all color codes. .. _command-filter-stripformatting: -stripformatting <text> +``stripformatting <text>`` Strips bold, underline, and colors from <text>. .. _command-filter-supa1337: -supa1337 <text> +``supa1337 <text>`` Replies with an especially k-rad translation of <text>. .. _command-filter-unbinary: -unbinary <text> +``unbinary <text>`` Returns the character representation of binary <text>. Assumes ASCII, 8 digits per character. .. _command-filter-undup: -undup <text> +``undup <text>`` Returns <text>, with all consecutive duplicated letters removed. .. _command-filter-unhexlify: -unhexlify <hexstring> +``unhexlify <hexstring>`` Returns the string corresponding to <hexstring>. Obviously, <hexstring> must be a string of hexadecimal digits. .. _command-filter-uniud: -uniud <text> +``uniud <text>`` Returns <text> rotated 180 degrees. Only really works for ASCII printable characters. .. _command-filter-unmorse: -unmorse <Morse code text> +``unmorse <Morse code text>`` Does the reverse of the morse command. .. _command-filter-uwu: -uwu <text> +``uwu <text>`` Returns <text> in uwu-speak. .. _command-filter-vowelrot: -vowelrot <text> +``vowelrot <text>`` Returns <text> with vowels rotated .. _conf-Filter: diff --git a/plugins/Format/README.rst b/plugins/Format/README.rst index 103524c1d..6c7b97663 100644 --- a/plugins/Format/README.rst +++ b/plugins/Format/README.rst @@ -24,82 +24,82 @@ Commands .. _command-format-bold: -bold <text> +``bold <text>`` Returns <text> bolded. .. _command-format-capitalize: -capitalize <text> +``capitalize <text>`` Returns <text> capitalized. .. _command-format-color: -color <foreground> [<background>] <text> +``color <foreground> [<background>] <text>`` Returns <text> with foreground color <foreground> and background color <background> (if given) .. _command-format-concat: -concat <string 1> <string 2> +``concat <string 1> <string 2>`` Concatenates two strings. Do keep in mind that this is *not* the same thing as join "", since if <string 2> contains spaces, they won't be removed by concat. .. _command-format-cut: -cut <size> <text> +``cut <size> <text>`` Cuts <text> down to <size> by chopping off the rightmost characters in excess of <size>. If <size> is a negative number, it chops that many characters off the end of <text>. .. _command-format-field: -field <number> <text> +``field <number> <text>`` Returns the <number>th space-separated field of <text>. I.e., if text is "foo bar baz" and <number> is 2, "bar" is returned. .. _command-format-format: -format <format string> [<arg> ...] +``format <format string> [<arg> ...]`` Expands a Python-style format string using the remaining args. Just be sure always to use %s, not %d or %f or whatever, because all the args are strings. .. _command-format-join: -join <separator> <string 1> [<string> ...] +``join <separator> <string 1> [<string> ...]`` Joins all the arguments together with <separator>. .. _command-format-lower: -lower <text> +``lower <text>`` Returns <text> lowercased. .. _command-format-replace: -replace <substring to translate> <substring to replace it with> <text> +``replace <substring to translate> <substring to replace it with> <text>`` Replaces all non-overlapping occurrences of <substring to translate> with <substring to replace it with> in <text>. .. _command-format-repr: -repr <text> +``repr <text>`` Returns <text> surrounded by double quotes. .. _command-format-reverse: -reverse <text> +``reverse <text>`` Returns <text> in reverse-video. .. _command-format-title: -title <text> +``title <text>`` Returns <text> titlecased. .. _command-format-translate: -translate <chars to translate> <chars to replace those with> <text> +``translate <chars to translate> <chars to replace those with> <text>`` Replaces <chars to translate> with <chars to replace those with> in <text>. The first and second arguments must necessarily be the same length. .. _command-format-underline: -underline <text> +``underline <text>`` Returns <text> underlined. .. _command-format-upper: -upper <text> +``upper <text>`` Returns <text> uppercased. .. _conf-Format: diff --git a/plugins/GPG/README.rst b/plugins/GPG/README.rst index 1880f2175..aa6177749 100644 --- a/plugins/GPG/README.rst +++ b/plugins/GPG/README.rst @@ -50,27 +50,27 @@ Commands .. _command-gpg-key.add: -key add <key id> <key server> +``key add <key id> <key server>`` Add a GPG key to your account. .. _command-gpg-key.list: -key list takes no arguments +``key list takes no arguments`` List your GPG keys. .. _command-gpg-key.remove: -key remove <fingerprint> +``key remove <fingerprint>`` Remove a GPG key from your account. .. _command-gpg-signing.auth: -signing auth <url> +``signing auth <url>`` Check the GPG signature at the <url> and authenticates you if the key used is associated to a user. .. _command-gpg-signing.gettoken: -signing gettoken takes no arguments +``signing gettoken takes no arguments`` Send you a token that you'll have to sign with your key. .. _conf-GPG: diff --git a/plugins/Games/README.rst b/plugins/Games/README.rst index d8b10c25a..6db4bffff 100644 --- a/plugins/Games/README.rst +++ b/plugins/Games/README.rst @@ -23,27 +23,27 @@ Commands .. _command-games-coin: -coin takes no arguments +``coin takes no arguments`` Flips a coin and returns the result. .. _command-games-dice: -dice <dice>d<sides> +``dice <dice>d<sides>`` Rolls a die with <sides> number of sides <dice> times. For example, 2d6 will roll 2 six-sided dice; 10d10 will roll 10 ten-sided dice. .. _command-games-eightball: -eightball [<question>] +``eightball [<question>]`` Ask a question and the answer shall be provided. .. _command-games-monologue: -monologue [<channel>] +``monologue [<channel>]`` Returns the number of consecutive lines you've sent in <channel> without being interrupted by someone else (i.e. how long your current 'monologue' is). <channel> is only necessary if the message isn't sent in the channel itself. .. _command-games-roulette: -roulette [spin] +``roulette [spin]`` Fires the revolver. If the bullet was in the chamber, you're dead. Tell me to spin the chambers and I will. .. _conf-Games: diff --git a/plugins/Google/README.rst b/plugins/Google/README.rst index b416c9fef..798c779b7 100644 --- a/plugins/Google/README.rst +++ b/plugins/Google/README.rst @@ -45,17 +45,17 @@ Commands .. _command-google-google: -google <search> [--{filter,language} <value>] +``google <search> [--{filter,language} <value>]`` Searches google.com for the given string. As many results as can fit are included. --language accepts a language abbreviation; --filter accepts a filtering level ('active', 'moderate', 'off'). .. _command-google-lucky: -lucky [--snippet] <search> +``lucky [--snippet] <search>`` Does a google search, but only returns the first result. If option --snippet is given, returns also the page text snippet. .. _command-google-translate: -translate <source language> [to] <target language> <text> +``translate <source language> [to] <target language> <text>`` Returns <text> translated from <source language> into <target language>. <source language> and <target language> take language codes (not language names), which are listed here: https://cloud.google.com/translate/docs/languages .. _conf-Google: diff --git a/plugins/Hashes/README.rst b/plugins/Hashes/README.rst index f18f9a6df..38ea9b47d 100644 --- a/plugins/Hashes/README.rst +++ b/plugins/Hashes/README.rst @@ -20,32 +20,32 @@ Commands .. _command-hashes-algorithms: -algorithms <takes no arguments> +``algorithms <takes no arguments>`` Returns the list of available algorithms. .. _command-hashes-md5: -md5 <text> +``md5 <text>`` Returns the md5 hash of a given string. .. _command-hashes-mkhash: -mkhash <algorithm> <text> +``mkhash <algorithm> <text>`` Returns TEXT after it has been hashed with ALGORITHM. See the 'algorithms' command in this plugin to return the algorithms available on this system. .. _command-hashes-sha: -sha <text> +``sha <text>`` Returns the SHA1 hash of a given string. .. _command-hashes-sha256: -sha256 <text> +``sha256 <text>`` Returns a SHA256 hash of the given string. .. _command-hashes-sha512: -sha512 <text> +``sha512 <text>`` Returns a SHA512 hash of the given string. .. _conf-Hashes: diff --git a/plugins/Herald/README.rst b/plugins/Herald/README.rst index b73eec01d..bd44f1d9f 100644 --- a/plugins/Herald/README.rst +++ b/plugins/Herald/README.rst @@ -22,27 +22,27 @@ Commands .. _command-herald-add: -add [<channel>] <user|nick> <msg> +``add [<channel>] <user|nick> <msg>`` Sets the herald message for <user> (or the user <nick|hostmask> is currently identified or recognized as) to <msg>. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-herald-change: -change [<channel>] [<user|nick>] <regexp> +``change [<channel>] [<user|nick>] <regexp>`` Changes the herald message for <user>, or the user <nick|hostmask> is currently identified or recognized as, according to <regexp>. If <user> is not given, defaults to the calling user. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-herald-default: -default [<channel>] [--remove|<msg>] +``default [<channel>] [--remove|<msg>]`` If <msg> is given, sets the default herald to <msg>. A <msg> of "" will remove the default herald. If <msg> is not given, returns the current default herald. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-herald-get: -get [<channel>] [<user|nick>] +``get [<channel>] [<user|nick>]`` Returns the current herald message for <user> (or the user <nick|hostmask> is currently identified or recognized as). If <user> is not given, defaults to the user giving the command. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-herald-remove: -remove [<channel>] [<user|nick>] +``remove [<channel>] [<user|nick>]`` Removes the herald message set for <user>, or the user <nick|hostmask> is currently identified or recognized as. If <user> is not given, defaults to the user giving the command. <channel> is only necessary if the message isn't sent in the channel itself. .. _conf-Herald: diff --git a/plugins/Internet/README.rst b/plugins/Internet/README.rst index d03e09ec4..b35d6b12d 100644 --- a/plugins/Internet/README.rst +++ b/plugins/Internet/README.rst @@ -22,17 +22,17 @@ Commands .. _command-internet-dns: -dns <host|ip> +``dns <host|ip>`` Returns the ip of <host> or the reverse DNS hostname of <ip>. .. _command-internet-hexip: -hexip <ip> +``hexip <ip>`` Returns the hexadecimal IP for that IP. .. _command-internet-whois: -whois <domain> +``whois <domain>`` Returns WHOIS information on the registration of <domain>. .. _conf-Internet: diff --git a/plugins/Karma/README.rst b/plugins/Karma/README.rst index 832f9eff2..98742c6ec 100644 --- a/plugins/Karma/README.rst +++ b/plugins/Karma/README.rst @@ -33,27 +33,27 @@ Commands .. _command-karma-clear: -clear [<channel>] [<name>] +``clear [<channel>] [<name>]`` Resets the karma of <name> to 0. If <name> is not given, resets everything. .. _command-karma-dump: -dump [<channel>] <filename> +``dump [<channel>] <filename>`` Dumps the Karma database for <channel> to <filename> in the bot's data directory. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-karma-karma: -karma [<channel>] [<thing> ...] +``karma [<channel>] [<thing> ...]`` Returns the karma of <thing>. If <thing> is not given, returns the top N karmas, where N is determined by the config variable supybot.plugins.Karma.rankingDisplay. If one <thing> is given, returns the details of its karma; if more than one <thing> is given, returns the total karma of each of the things. <channel> is only necessary if the message isn't sent on the channel itself. .. _command-karma-load: -load [<channel>] <filename> +``load [<channel>] <filename>`` Loads the Karma database for <channel> from <filename> in the bot's data directory. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-karma-most: -most [<channel>] {increased,decreased,active} +``most [<channel>] {increased,decreased,active}`` Returns the most increased, the most decreased, or the most active (the sum of increased and decreased) karma things. <channel> is only necessary if the message isn't sent in the channel itself. .. _conf-Karma: diff --git a/plugins/Lart/README.rst b/plugins/Lart/README.rst index a8c3cded6..5da41b9ca 100644 --- a/plugins/Lart/README.rst +++ b/plugins/Lart/README.rst @@ -28,37 +28,37 @@ Commands .. _command-lart-add: -add [<channel>] <text> +``add [<channel>] <text>`` Adds <text> to the lart database for <channel>. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-lart-change: -change [<channel>] <id> <regexp> +``change [<channel>] <id> <regexp>`` Changes the lart with id <id> according to the regular expression <regexp>. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-lart-get: -get [<channel>] <id> +``get [<channel>] <id>`` Gets the lart with id <id> from the lart database for <channel>. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-lart-lart: -lart [<channel>] [<id>] <who|what> [for <reason>] +``lart [<channel>] [<id>] <who|what> [for <reason>]`` Uses the Luser Attitude Readjustment Tool on <who|what> (for <reason>, if given). If <id> is given, uses that specific lart. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-lart-remove: -remove [<channel>] <id> +``remove [<channel>] <id>`` Removes the lart with id <id> from the lart database for <channel>. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-lart-search: -search [<channel>] [--{regexp,by} <value>] [<glob>] +``search [<channel>] [--{regexp,by} <value>] [<glob>]`` Searches for larts matching the criteria given. .. _command-lart-stats: -stats [<channel>] +``stats [<channel>]`` Returns the number of larts in the database for <channel>. <channel> is only necessary if the message isn't sent in the channel itself. .. _conf-Lart: diff --git a/plugins/Later/README.rst b/plugins/Later/README.rst index 0f5331284..e3eebd1d3 100644 --- a/plugins/Later/README.rst +++ b/plugins/Later/README.rst @@ -48,22 +48,22 @@ Commands .. _command-later-notes: -notes [<nick>] +``notes [<nick>]`` If <nick> is given, replies with what notes are waiting on <nick>, otherwise, replies with the nicks that have notes waiting for them. .. _command-later-remove: -remove <nick> +``remove <nick>`` Removes the notes waiting on <nick>. .. _command-later-tell: -tell <nick1[,nick2[,...]]> <text> +``tell <nick1[,nick2[,...]]> <text>`` Tells each <nickX> <text> the next time <nickX> is seen. <nickX> can contain wildcard characters, and the first matching nick will be given the note. .. _command-later-undo: -undo <nick> +``undo <nick>`` Removes the latest note you sent to <nick>. .. _conf-Later: diff --git a/plugins/Math/README.rst b/plugins/Math/README.rst index 646d313f6..b321e663a 100644 --- a/plugins/Math/README.rst +++ b/plugins/Math/README.rst @@ -22,32 +22,32 @@ Commands .. _command-math-base: -base <fromBase> [<toBase>] <number> +``base <fromBase> [<toBase>] <number>`` Converts <number> from base <fromBase> to base <toBase>. If <toBase> is left out, it converts to decimal. .. _command-math-calc: -calc <math expression> +``calc <math expression>`` Returns the value of the evaluated <math expression>. The syntax is Python syntax; the type of arithmetic is floating point. Floating point arithmetic is used in order to prevent a user from being able to crash to the bot with something like '10**10**10**10'. One consequence is that large values such as '10**24' might not be exact. .. _command-math-convert: -convert [<number>] <unit> to <other unit> +``convert [<number>] <unit> to <other unit>`` Converts from <unit> to <other unit>. If number isn't given, it defaults to 1. For unit information, see 'units' command. .. _command-math-icalc: -icalc <math expression> +``icalc <math expression>`` This is the same as the calc command except that it allows integer math, and can thus cause the bot to suck up CPU. Hence it requires the 'trusted' capability to use. .. _command-math-rpn: -rpn <rpn math expression> +``rpn <rpn math expression>`` Returns the value of an RPN expression. .. _command-math-units: -units [<type>] +``units [<type>]`` With no arguments, returns a list of measurement types, which can be passed as arguments. When called with a type as an argument, returns the units of that type. .. _conf-Math: diff --git a/plugins/MessageParser/README.rst b/plugins/MessageParser/README.rst index ec5a1666f..f3b0a32ce 100644 --- a/plugins/MessageParser/README.rst +++ b/plugins/MessageParser/README.rst @@ -27,47 +27,47 @@ Commands .. _command-messageparser-add: -add [<channel>|global] <regexp> <action> +``add [<channel>|global] <regexp> <action>`` Associates <regexp> with <action>. <channel> is only necessary if the message isn't sent on the channel itself. Action is echoed upon regexp match, with variables $1, $2, etc. being interpolated from the regexp match groups. .. _command-messageparser-info: -info [<channel>|global] [--id] <regexp> +``info [<channel>|global] [--id] <regexp>`` Display information about <regexp> in the triggers database. <channel> is only necessary if the message isn't sent in the channel itself. If option --id specified, will retrieve by regexp id, not content. .. _command-messageparser-list: -list [<channel>|global] +``list [<channel>|global]`` Lists regexps present in the triggers database. <channel> is only necessary if the message isn't sent in the channel itself. Regexp ID listed in parentheses. .. _command-messageparser-lock: -lock [<channel>|global] <regexp> +``lock [<channel>|global] <regexp>`` Locks the <regexp> so that it cannot be removed or overwritten to. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-messageparser-rank: -rank [<channel>|global] +``rank [<channel>|global]`` Returns a list of top-ranked regexps, sorted by usage count (rank). The number of regexps returned is set by the rankListLength registry value. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-messageparser-remove: -remove [<channel>|global] [--id] <regexp>] +``remove [<channel>|global] [--id] <regexp>]`` Removes the trigger for <regexp> from the triggers database. <channel> is only necessary if the message isn't sent in the channel itself. If option --id specified, will retrieve by regexp id, not content. .. _command-messageparser-show: -show [<channel>|global] [--id] <regexp> +``show [<channel>|global] [--id] <regexp>`` Looks up the value of <regexp> in the triggers database. <channel> is only necessary if the message isn't sent in the channel itself. If option --id specified, will retrieve by regexp id, not content. .. _command-messageparser-unlock: -unlock [<channel>|global] <regexp> +``unlock [<channel>|global] <regexp>`` Unlocks the entry associated with <regexp> so that it can be removed or overwritten. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-messageparser-vacuum: -vacuum [<channel>|global] +``vacuum [<channel>|global]`` Vacuums the database for <channel>. See SQLite vacuum doc here: http://www.sqlite.org/lang_vacuum.html <channel> is only necessary if the message isn't sent in the channel itself. First check if user has the required capability specified in plugin config requireVacuumCapability. .. _conf-MessageParser: diff --git a/plugins/Misc/README.rst b/plugins/Misc/README.rst index 4654101af..9264aead2 100644 --- a/plugins/Misc/README.rst +++ b/plugins/Misc/README.rst @@ -21,62 +21,62 @@ Commands .. _command-misc-apropos: -apropos <string> +``apropos <string>`` Searches for <string> in the commands currently offered by the bot, returning a list of the commands containing that string. .. _command-misc-clearmores: -clearmores takes no arguments +``clearmores takes no arguments`` Clears all mores for the current network. .. _command-misc-completenick: -completenick [<channel>] <beginning> [--match-case] +``completenick [<channel>] <beginning> [--match-case]`` Returns the nick of someone on the channel whose nick begins with the given <beginning>. <channel> defaults to the current channel. .. _command-misc-help: -help [<plugin>] [<command>] +``help [<plugin>] [<command>]`` This command gives a useful description of what <command> does. <plugin> is only necessary if the command is in more than one plugin. You may also want to use the 'list' command to list all available plugins and commands. .. _command-misc-last: -last [--{from,in,on,with,without,regexp} <value>] [--nolimit] +``last [--{from,in,on,with,without,regexp} <value>] [--nolimit]`` Returns the last message matching the given criteria. --from requires a nick from whom the message came; --in requires a channel the message was sent to; --on requires a network the message was sent on; --with requires some string that had to be in the message; --regexp requires a regular expression the message must match; --nolimit returns all the messages that can be found. By default, the channel this command is given in is searched. .. _command-misc-list: -list [--private] [--unloaded] [<plugin>] +``list [--private] [--unloaded] [<plugin>]`` Lists the commands available in the given plugin. If no plugin is given, lists the public plugins available. If --private is given, lists the private plugins. If --unloaded is given, it will list available plugins that are not loaded. .. _command-misc-more: -more [<nick>] +``more [<nick>]`` If the last command was truncated due to IRC message length limitations, returns the next chunk of the result of the last command. If <nick> is given, it takes the continuation of the last command from <nick> instead of the person sending this message. .. _command-misc-noticetell: -noticetell <nick> <text> +``noticetell <nick> <text>`` Tells the <nick> whatever <text> is, in a notice. Use nested commands to your benefit here. .. _command-misc-ping: -ping takes no arguments +``ping takes no arguments`` Checks to see if the bot is alive. .. _command-misc-source: -source takes no arguments +``source takes no arguments`` Returns a URL saying where to get Limnoria. .. _command-misc-tell: -tell <nick> <text> +``tell <nick> <text>`` Tells the <nick> whatever <text> is. Use nested commands to your benefit here. .. _command-misc-version: -version takes no arguments +``version takes no arguments`` Returns the version of the current bot. .. _conf-Misc: diff --git a/plugins/MoobotFactoids/README.rst b/plugins/MoobotFactoids/README.rst index 4ee29606e..10cbba73e 100644 --- a/plugins/MoobotFactoids/README.rst +++ b/plugins/MoobotFactoids/README.rst @@ -45,52 +45,52 @@ Commands .. _command-moobotfactoids-factinfo: -factinfo [<channel>] <factoid key> +``factinfo [<channel>] <factoid key>`` Returns the various bits of info on the factoid for the given key. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-moobotfactoids-listauth: -listauth [<channel>] <author name> +``listauth [<channel>] <author name>`` Lists the keys of the factoids with the given author. Note that if an author has an integer name, you'll have to use that author's id to use this function (so don't use integer usernames!). <channel> is only necessary if the message isn't sent in the channel itself. .. _command-moobotfactoids-listkeys: -listkeys [<channel>] <text> +``listkeys [<channel>] <text>`` Lists the keys of the factoids whose key contains the provided text. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-moobotfactoids-listvalues: -listvalues [<channel>] <text> +``listvalues [<channel>] <text>`` Lists the keys of the factoids whose value contains the provided text. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-moobotfactoids-literal: -literal [<channel>] <factoid key> +``literal [<channel>] <factoid key>`` Returns the literal factoid for the given factoid key. No parsing of the factoid value is done as it is with normal retrieval. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-moobotfactoids-lock: -lock [<channel>] <factoid key> +``lock [<channel>] <factoid key>`` Locks the factoid with the given factoid key. Requires that the user be registered and have created the factoid originally. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-moobotfactoids-most: -most [<channel>] {popular|authored|recent} +``most [<channel>] {popular|authored|recent}`` Lists the most {popular|authored|recent} factoids. "popular" lists the most frequently requested factoids. "authored" lists the author with the most factoids. "recent" lists the most recently created factoids. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-moobotfactoids-random: -random [<channel>] +``random [<channel>]`` Displays a random factoid (along with its key) from the database. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-moobotfactoids-remove: -remove [<channel>] <factoid key> +``remove [<channel>] <factoid key>`` Deletes the factoid with the given key. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-moobotfactoids-unlock: -unlock [<channel>] <factoid key> +``unlock [<channel>] <factoid key>`` Unlocks the factoid with the given factoid key. Requires that the user be registered and have locked the factoid. <channel> is only necessary if the message isn't sent in the channel itself. .. _conf-MoobotFactoids: diff --git a/plugins/Network/README.rst b/plugins/Network/README.rst index 5b41d2b71..887a8f6ac 100644 --- a/plugins/Network/README.rst +++ b/plugins/Network/README.rst @@ -23,67 +23,67 @@ Commands .. _command-network-authenticate: -authenticate takes no arguments +``authenticate takes no arguments`` Manually initiate SASL authentication. .. _command-network-capabilities: -capabilities [<network>] +``capabilities [<network>]`` Returns the list of IRCv3 capabilities available on the network. .. _command-network-cmdall: -cmdall <command> [<arg> ...] +``cmdall <command> [<arg> ...]`` Perform <command> (with its associated <arg>s) on all networks. .. _command-network-command: -command <network> <command> [<arg> ...] +``command <network> <command> [<arg> ...]`` Gives the bot <command> (with its associated <arg>s) on <network>. .. _command-network-connect: -connect [--nossl] <network> [<host[:port]>] [<password>] +``connect [--nossl] <network> [<host[:port]>] [<password>]`` Connects to another network (which will be represented by the name provided in <network>) at <host:port>. If port is not provided, it defaults to 6697, the default port for IRC with SSL. If password is provided, it will be sent to the server in a PASS command. If --nossl is provided, an SSL connection will not be attempted, and the port will default to 6667. .. _command-network-disconnect: -disconnect <network> [<quit message>] +``disconnect <network> [<quit message>]`` Disconnects from the network represented by the network <network>. If <quit message> is given, quits the network with the given quit message. .. _command-network-driver: -driver [<network>] +``driver [<network>]`` Returns the current network driver for <network>. <network> is only necessary if the message isn't sent on the network to which this command is to apply. .. _command-network-latency: -latency [<network>] +``latency [<network>]`` Returns the current latency to <network>. <network> is only necessary if the message isn't sent on the network to which this command is to apply. .. _command-network-networks: -networks [--all] +``networks [--all]`` Returns the networks to which the bot is currently connected. If --all is given, also includes networks known by the bot, but not connected to. .. _command-network-reconnect: -reconnect [<network>] [<quit message>] +``reconnect [<network>] [<quit message>]`` Disconnects and then reconnects to <network>. If no network is given, disconnects and then reconnects to the network the command was given on. If no quit message is given, uses the configured one (supybot.plugins.Owner.quitMsg) or the nick of the person giving the command. .. _command-network-uptime: -uptime [<network>] +``uptime [<network>]`` Returns the time duration since the connection was established. .. _command-network-whois: -whois [<network>] <nick> +``whois [<network>] <nick>`` Returns the WHOIS response <network> gives for <nick>. <network> is only necessary if the network is different than the network the command is sent on. .. _command-network-whowas: -whowas [<network>] <nick> +``whowas [<network>] <nick>`` Returns the WHOIS response <network> gives for <nick>. <network> is only necessary if the network is different than the network the command is sent on. .. _conf-Network: diff --git a/plugins/News/README.rst b/plugins/News/README.rst index 16bd13ed7..93dcd8a6a 100644 --- a/plugins/News/README.rst +++ b/plugins/News/README.rst @@ -22,27 +22,27 @@ Commands .. _command-news-add: -add [<channel>] <expires> <subject>: <text> +``add [<channel>] <expires> <subject>: <text>`` Adds a given news item of <text> to a channel with the given <subject>. If <expires> isn't 0, that news item will expire <expires> seconds from now. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-news-change: -change [<channel>] <id> <regexp> +``change [<channel>] <id> <regexp>`` Changes the news item with <id> from <channel> according to the regular expression <regexp>. <regexp> should be of the form s/text/replacement/flags. <channel> is only necessary if the message isn't sent on the channel itself. .. _command-news-news: -news [<channel>] [<id>] +``news [<channel>] [<id>]`` Display the news items for <channel> in the format of '(#id) subject'. If <id> is given, retrieve only that news item; otherwise retrieve all news items. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-news-old: -old [<channel>] [<id>] +``old [<channel>] [<id>]`` Returns the old news item for <channel> with <id>. If no number is given, returns all the old news items in reverse order. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-news-remove: -remove [<channel>] <id> +``remove [<channel>] <id>`` Removes the news item with <id> from <channel>. <channel> is only necessary if the message isn't sent in the channel itself. .. _conf-News: diff --git a/plugins/NickAuth/README.rst b/plugins/NickAuth/README.rst index da292f913..debfdfb62 100644 --- a/plugins/NickAuth/README.rst +++ b/plugins/NickAuth/README.rst @@ -25,22 +25,22 @@ Commands .. _command-nickauth-auth: -auth takes no argument +``auth takes no argument`` Tries to authenticate you using network services. If you get no reply, it means you are not authenticated to the network services. .. _command-nickauth-nick.add: -nick add [<network>] <user> <nick> +``nick add [<network>] <user> <nick>`` Add <nick> to the list of nicks owned by the <user> on the <network>. You have to register this nick to the network services to be authenticated. <network> defaults to the current network. .. _command-nickauth-nick.list: -nick list [<network>] [<user>] +``nick list [<network>] [<user>]`` Lists nicks of the <user> on the network. <network> defaults to the current network. .. _command-nickauth-nick.remove: -nick remove [<network>] <user> <nick> +``nick remove [<network>] <user> <nick>`` Remove <nick> from the list of nicks owned by the <user> on the <network>. <network> defaults to the current network. .. _conf-NickAuth: diff --git a/plugins/Nickometer/README.rst b/plugins/Nickometer/README.rst index e23a98175..a43d322d7 100644 --- a/plugins/Nickometer/README.rst +++ b/plugins/Nickometer/README.rst @@ -22,7 +22,7 @@ Commands .. _command-nickometer-nickometer: -nickometer [<nick>] +``nickometer [<nick>]`` Tells you how lame said nick is. If <nick> is not given, uses the nick of the person giving the command. .. _conf-Nickometer: diff --git a/plugins/Note/README.rst b/plugins/Note/README.rst index 7608bc8b7..c24954f88 100644 --- a/plugins/Note/README.rst +++ b/plugins/Note/README.rst @@ -21,37 +21,37 @@ Commands .. _command-note-list: -list [--{old,sent}] [--{from,to} <user>] +``list [--{old,sent}] [--{from,to} <user>]`` Retrieves the ids of all your unread notes. If --old is given, list read notes. If --sent is given, list notes that you have sent. If --from is specified, only lists notes sent to you from <user>. If --to is specified, only lists notes sent by you to <user>. .. _command-note-next: -next takes no arguments +``next takes no arguments`` Retrieves your next unread note, if any. .. _command-note-note: -note <id> +``note <id>`` Retrieves a single note by its unique note id. Use the 'note list' command to see what unread notes you have. .. _command-note-reply: -reply <id> <text> +``reply <id> <text>`` Sends a note in reply to <id>. .. _command-note-search: -search [--{regexp} <value>] [--sent] [<glob>] +``search [--{regexp} <value>] [--sent] [<glob>]`` Searches your received notes for ones matching <glob>. If --regexp is given, its associated value is taken as a regexp and matched against the notes. If --sent is specified, only search sent notes. .. _command-note-send: -send <recipient>,[<recipient>,[...]] <text> +``send <recipient>,[<recipient>,[...]] <text>`` Sends a new note to the user specified. Multiple recipients may be specified by separating their names by commas. .. _command-note-unsend: -unsend <id> +``unsend <id>`` Unsends the note with the id given. You must be the author of the note, and it must be unread. .. _conf-Note: diff --git a/plugins/Owner/README.rst b/plugins/Owner/README.rst index 80ff97e81..fcacd8146 100644 --- a/plugins/Owner/README.rst +++ b/plugins/Owner/README.rst @@ -22,82 +22,82 @@ Commands .. _command-owner-announce: -announce <text> +``announce <text>`` Sends <text> to all channels the bot is currently on and not lobotomized in. .. _command-owner-defaultcapability: -defaultcapability {add|remove} <capability> +``defaultcapability {add|remove} <capability>`` Adds or removes (according to the first argument) <capability> from the default capabilities given to users (the configuration variable supybot.capabilities stores these). .. _command-owner-defaultplugin: -defaultplugin [--remove] <command> [<plugin>] +``defaultplugin [--remove] <command> [<plugin>]`` Sets the default plugin for <command> to <plugin>. If --remove is given, removes the current default plugin for <command>. If no plugin is given, returns the current default plugin set for <command>. See also, supybot.commands.defaultPlugins.importantPlugins. .. _command-owner-disable: -disable [<plugin>] <command> +``disable [<plugin>] <command>`` Disables the command <command> for all users (including the owners). If <plugin> is given, only disables the <command> from <plugin>. If you want to disable a command for most users but not for yourself, set a default capability of -plugin.command or -command (if you want to disable the command in all plugins). .. _command-owner-enable: -enable [<plugin>] <command> +``enable [<plugin>] <command>`` Enables the command <command> for all users. If <plugin> if given, only enables the <command> from <plugin>. This command is the inverse of disable. .. _command-owner-flush: -flush takes no arguments +``flush takes no arguments`` Runs all the periodic flushers in world.flushers. This includes flushing all logs and all configuration changes to disk. .. _command-owner-ircquote: -ircquote <string to be sent to the server> +``ircquote <string to be sent to the server>`` Sends the raw string given to the server. .. _command-owner-load: -load [--deprecated] <plugin> +``load [--deprecated] <plugin>`` Loads the plugin <plugin> from any of the directories in conf.supybot.directories.plugins; usually this includes the main installed directory and 'plugins' in the current directory. --deprecated is necessary if you wish to load deprecated plugins. .. _command-owner-logmark: -logmark <text> +``logmark <text>`` Logs <text> to the global Supybot log at critical priority. Useful for marking logfiles for later searching. .. _command-owner-quit: -quit [<text>] +``quit [<text>]`` Exits the bot with the QUIT message <text>. If <text> is not given, the default quit message (supybot.plugins.Owner.quitMsg) will be used. If there is no default quitMsg set, your nick will be used. The standard substitutions ($version, $nick, etc.) are all handled appropriately. .. _command-owner-reload: -reload <plugin> +``reload <plugin>`` Unloads and subsequently reloads the plugin by name; use the 'list' command to see a list of the currently loaded plugins. .. _command-owner-reloadlocale: -reloadlocale takes no argument +``reloadlocale takes no argument`` Reloads the locale of the bot. .. _command-owner-rename: -rename <plugin> <command> <new name> +``rename <plugin> <command> <new name>`` Renames <command> in <plugin> to the <new name>. .. _command-owner-unload: -unload <plugin> +``unload <plugin>`` Unloads the callback by name; use the 'list' command to see a list of the currently loaded plugins. Obviously, the Owner plugin can't be unloaded. .. _command-owner-unrename: -unrename <plugin> +``unrename <plugin>`` Removes all renames in <plugin>. The plugin will be reloaded after this command is run. .. _command-owner-upkeep: -upkeep [<level>] +``upkeep [<level>]`` Runs the standard upkeep stuff (flushes and gc.collects()). If given a level, runs that level of upkeep (currently, the only supported level is "high", which causes the bot to flush a lot of caches as well as do normal upkeep stuff). .. _conf-Owner: diff --git a/plugins/Plugin/README.rst b/plugins/Plugin/README.rst index 0bfc0a42c..31674ca52 100644 --- a/plugins/Plugin/README.rst +++ b/plugins/Plugin/README.rst @@ -24,27 +24,27 @@ Commands .. _command-plugin-author: -author <plugin> +``author <plugin>`` Returns the author of <plugin>. This is the person you should talk to if you have ideas, suggestions, or other comments about a given plugin. .. _command-plugin-contributors: -contributors <plugin> [<name>] +``contributors <plugin> [<name>]`` Replies with a list of people who made contributions to a given plugin. If <name> is specified, that person's specific contributions will be listed. You can specify a person's name by their full name or their nick, which is shown inside brackets if available. .. _command-plugin-help: -help <plugin> +``help <plugin>`` Returns a useful description of how to use <plugin>, if the plugin has one. .. _command-plugin-plugin: -plugin <command> +``plugin <command>`` Returns the name of the plugin that would be used to call <command>. If it is not uniquely determined, returns list of all plugins that contain <command>. .. _command-plugin-plugins: -plugins <command> +``plugins <command>`` Returns the names of all plugins that contain <command>. .. _conf-Plugin: diff --git a/plugins/PluginDownloader/README.rst b/plugins/PluginDownloader/README.rst index ca1a0907b..b14f082f7 100644 --- a/plugins/PluginDownloader/README.rst +++ b/plugins/PluginDownloader/README.rst @@ -58,17 +58,17 @@ Commands .. _command-plugindownloader-info: -info <repository> <plugin> +``info <repository> <plugin>`` Displays informations on the <plugin> in the <repository>. .. _command-plugindownloader-install: -install <repository> <plugin> +``install <repository> <plugin>`` Downloads and installs the <plugin> from the <repository>. .. _command-plugindownloader-repolist: -repolist [<repository>] +``repolist [<repository>]`` Displays the list of plugins in the <repository>. If <repository> is not given, returns a list of available repositories. .. _conf-PluginDownloader: diff --git a/plugins/Poll/README.rst b/plugins/Poll/README.rst index 2e1434a49..e6fc07fcb 100644 --- a/plugins/Poll/README.rst +++ b/plugins/Poll/README.rst @@ -53,27 +53,27 @@ Commands .. _command-poll-add: -add [<channel>] <question> <answer1> [<answer2> [<answer3> [...]]] +``add [<channel>] <question> <answer1> [<answer2> [<answer3> [...]]]`` Creates a new poll with the specified <question> and answers on the <channel>. The first word of each answer is used as its id to vote, so each answer should start with a different word. <channel> is only necessary if this command is run in private, and defaults to the current channel otherwise. .. _command-poll-close: -close [<channel>] <poll_id> +``close [<channel>] <poll_id>`` Closes the specified poll. .. _command-poll-list: -list [<channel>] +``list [<channel>]`` Lists open polls in the <channel>. .. _command-poll-results: -results [<channel>] <poll_id> +``results [<channel>] <poll_id>`` Returns the results of the specified poll. .. _command-poll-vote: -vote [<channel>] <poll_id> <answer_id> +``vote [<channel>] <poll_id> <answer_id>`` Registers your vote on the poll <poll_id> as being the answer identified by <answer_id> (which is the first word of each possible answer). .. _conf-Poll: diff --git a/plugins/Praise/README.rst b/plugins/Praise/README.rst index c67c58ad7..bf82ad942 100644 --- a/plugins/Praise/README.rst +++ b/plugins/Praise/README.rst @@ -29,37 +29,37 @@ Commands .. _command-praise-add: -add [<channel>] <text> +``add [<channel>] <text>`` Adds <text> to the praise database for <channel>. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-praise-change: -change [<channel>] <id> <regexp> +``change [<channel>] <id> <regexp>`` Changes the praise with id <id> according to the regular expression <regexp>. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-praise-get: -get [<channel>] <id> +``get [<channel>] <id>`` Gets the praise with id <id> from the praise database for <channel>. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-praise-praise: -praise [<channel>] [<id>] <who|what> [for <reason>] +``praise [<channel>] [<id>] <who|what> [for <reason>]`` Praises <who|what> (for <reason>, if given). If <id> is given, uses that specific praise. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-praise-remove: -remove [<channel>] <id> +``remove [<channel>] <id>`` Removes the praise with id <id> from the praise database for <channel>. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-praise-search: -search [<channel>] [--{regexp,by} <value>] [<glob>] +``search [<channel>] [--{regexp,by} <value>] [<glob>]`` Searches for praises matching the criteria given. .. _command-praise-stats: -stats [<channel>] +``stats [<channel>]`` Returns the number of praises in the database for <channel>. <channel> is only necessary if the message isn't sent in the channel itself. .. _conf-Praise: diff --git a/plugins/Quote/README.rst b/plugins/Quote/README.rst index 4b84fa5c6..73e28ec79 100644 --- a/plugins/Quote/README.rst +++ b/plugins/Quote/README.rst @@ -20,42 +20,42 @@ Commands .. _command-quote-add: -add [<channel>] <text> +``add [<channel>] <text>`` Adds <text> to the quote database for <channel>. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-quote-change: -change [<channel>] <id> <regexp> +``change [<channel>] <id> <regexp>`` Changes the quote with id <id> according to the regular expression <regexp>. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-quote-get: -get [<channel>] <id> +``get [<channel>] <id>`` Gets the quote with id <id> from the quote database for <channel>. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-quote-random: -random [<channel>] +``random [<channel>]`` Returns a random quote from <channel>. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-quote-remove: -remove [<channel>] <id> +``remove [<channel>] <id>`` Removes the quote with id <id> from the quote database for <channel>. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-quote-replace: -replace [<channel>] <id> <text> +``replace [<channel>] <id> <text>`` Replace quote <id> with <text>. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-quote-search: -search [<channel>] [--{regexp,by} <value>] [<glob>] +``search [<channel>] [--{regexp,by} <value>] [<glob>]`` Searches for quotes matching the criteria given. .. _command-quote-stats: -stats [<channel>] +``stats [<channel>]`` Returns the number of quotes in the database for <channel>. <channel> is only necessary if the message isn't sent in the channel itself. .. _conf-Quote: diff --git a/plugins/QuoteGrabs/README.rst b/plugins/QuoteGrabs/README.rst index 55e3bb3c8..5d948b872 100644 --- a/plugins/QuoteGrabs/README.rst +++ b/plugins/QuoteGrabs/README.rst @@ -25,42 +25,42 @@ Commands .. _command-quotegrabs-get: -get [<channel>] <id> +``get [<channel>] <id>`` Return the quotegrab with the given <id>. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-quotegrabs-grab: -grab [<channel>] <nick> +``grab [<channel>] <nick>`` Grabs a quote from <channel> by <nick> for the quotegrabs table. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-quotegrabs-list: -list [<channel>] <nick> +``list [<channel>] <nick>`` Returns a list of shortened quotes that have been grabbed for <nick> as well as the id of each quote. These ids can be used to get the full quote. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-quotegrabs-quote: -quote [<channel>] <nick> +``quote [<channel>] <nick>`` Returns <nick>'s latest quote grab in <channel>. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-quotegrabs-random: -random [<channel>] [<nick>] +``random [<channel>] [<nick>]`` Returns a randomly grabbed quote, optionally choosing only from those quotes grabbed for <nick>. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-quotegrabs-say: -say [<channel>] <id> +``say [<channel>] <id>`` Return the quotegrab with the given <id>. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-quotegrabs-search: -search [<channel>] <text> +``search [<channel>] <text>`` Searches for <text> in a quote. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-quotegrabs-ungrab: -ungrab [<channel>] <number> +``ungrab [<channel>] <number>`` Removes the grab <number> (the last by default) on <channel>. <channel> is only necessary if the message isn't sent in the channel itself. .. _conf-QuoteGrabs: diff --git a/plugins/RSS/README.rst b/plugins/RSS/README.rst index 1aca99b19..6bf145fec 100644 --- a/plugins/RSS/README.rst +++ b/plugins/RSS/README.rst @@ -58,42 +58,42 @@ Commands .. _command-rss-add: -add <name> <url> +``add <name> <url>`` Adds a command to this plugin that will look up the RSS feed at the given URL. .. _command-rss-announce.add: -announce add [<channel>] <name|url> [<name|url> ...] +``announce add [<channel>] <name|url> [<name|url> ...]`` Adds the list of feeds to the current list of announced feeds in <channel>. Valid feeds include the names of registered feeds as well as URLs for RSS feeds. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-rss-announce.channels: -announce channels <name|url> +``announce channels <name|url>`` Returns a list of channels that the given feed name or URL is being announced to. .. _command-rss-announce.list: -announce list [<channel>] +``announce list [<channel>]`` Returns the list of feeds announced in <channel>. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-rss-announce.remove: -announce remove [<channel>] <name|url> [<name|url> ...] +``announce remove [<channel>] <name|url> [<name|url> ...]`` Removes the list of feeds from the current list of announced feeds in <channel>. Valid feeds include the names of registered feeds as well as URLs for RSS feeds. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-rss-info: -info <url|feed> +``info <url|feed>`` Returns information from the given RSS feed, namely the title, URL, description, and last update date, if available. .. _command-rss-remove: -remove <name> +``remove <name>`` Removes the command for looking up RSS feeds at <name> from this plugin. .. _command-rss-rss: -rss <name|url> [<number of headlines>] +``rss <name|url> [<number of headlines>]`` Gets the title components of the given RSS feed. If <number of headlines> is given, return only that many headlines. .. _conf-RSS: diff --git a/plugins/Relay/README.rst b/plugins/Relay/README.rst index 70a6a5218..6e803c23a 100644 --- a/plugins/Relay/README.rst +++ b/plugins/Relay/README.rst @@ -29,17 +29,17 @@ Commands .. _command-relay-join: -join [<channel>] +``join [<channel>]`` Starts relaying between the channel <channel> on all networks. If on a network the bot isn't in <channel>, it'll join. This commands is required even if the bot is in the channel on both networks; it won't relay between those channels unless it's told to join both channels. If <channel> is not given, starts relaying on the channel the message was sent in. .. _command-relay-nicks: -nicks [<channel>] +``nicks [<channel>]`` Returns the nicks of the people in the channel on the various networks the bot is connected to. <channel> is only necessary if the message isn't sent on the channel itself. .. _command-relay-part: -part <channel> +``part <channel>`` Ceases relaying between the channel <channel> on all networks. The bot will part from the channel on all networks in which it is on the channel. .. _conf-Relay: diff --git a/plugins/Reply/README.rst b/plugins/Reply/README.rst index a894d39a6..ba7663e55 100644 --- a/plugins/Reply/README.rst +++ b/plugins/Reply/README.rst @@ -23,27 +23,27 @@ Commands .. _command-reply-action: -action <text> +``action <text>`` Replies with <text> as an action. Use nested commands to your benefit here. .. _command-reply-notice: -notice <text> +``notice <text>`` Replies with <text> in a notice. Use nested commands to your benefit here. If you want a private notice, nest the private command. .. _command-reply-private: -private <text> +``private <text>`` Replies with <text> in private. Use nested commands to your benefit here. .. _command-reply-replies: -replies <str> [<str> ...] +``replies <str> [<str> ...]`` Replies with each of its arguments <str> in separate replies, depending the configuration of supybot.reply.oneToOne. .. _command-reply-reply: -reply <text> +``reply <text>`` Replies with <text>. Equivalent to the alias, 'echo $nick: $1'. .. _conf-Reply: diff --git a/plugins/Scheduler/README.rst b/plugins/Scheduler/README.rst index 0a187e07e..05d6e5386 100644 --- a/plugins/Scheduler/README.rst +++ b/plugins/Scheduler/README.rst @@ -23,27 +23,27 @@ Commands .. _command-scheduler-add: -add <seconds> <command> +``add <seconds> <command>`` Schedules the command string <command> to run <seconds> seconds in the future. For example, 'scheduler add [seconds 30m] "echo [cpu]"' will schedule the command "cpu" to be sent to the channel the schedule add command was given in (with no prefixed nick, a consequence of using echo). Do pay attention to the quotes in that example. .. _command-scheduler-list: -list takes no arguments +``list takes no arguments`` Lists the currently scheduled events. .. _command-scheduler-remind: -remind <seconds> <text> +``remind <seconds> <text>`` Sets a reminder with string <text> to run <seconds> seconds in the future. For example, 'scheduler remind [seconds 30m] "Hello World"' will return '<nick> Reminder: Hello World' 30 minutes after being set. .. _command-scheduler-remove: -remove <id> +``remove <id>`` Removes the event scheduled with id <id> from the schedule. .. _command-scheduler-repeat: -repeat [--delay <delay>] <name> <seconds> <command> +``repeat [--delay <delay>] <name> <seconds> <command>`` Schedules the command <command> to run every <seconds> seconds, starting now (i.e., the command runs now, and every <seconds> seconds thereafter). <name> is a name by which the command can be unscheduled. If --delay is given, starts in <delay> seconds instead of now. .. _conf-Scheduler: diff --git a/plugins/Seen/README.rst b/plugins/Seen/README.rst index 8feeb4425..f2e1a2843 100644 --- a/plugins/Seen/README.rst +++ b/plugins/Seen/README.rst @@ -23,27 +23,27 @@ Commands .. _command-seen-any: -any [<channel>] [--user <name>] [<nick>] +``any [<channel>] [--user <name>] [<nick>]`` Returns the last time <nick> was seen and what <nick> was last seen doing. This includes any form of activity, instead of just PRIVMSGs. If <nick> isn't specified, returns the last activity seen in <channel>. If --user is specified, looks up name in the user database and returns the last time user was active in <channel>. <channel> is only necessary if the message isn't sent on the channel itself. .. _command-seen-last: -last [<channel>] +``last [<channel>]`` Returns the last thing said in <channel>. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-seen-seen: -seen [<channel>] <nick> +``seen [<channel>] <nick>`` Returns the last time <nick> was seen and what <nick> was last seen saying. <channel> is only necessary if the message isn't sent on the channel itself. <nick> may contain * as a wildcard. .. _command-seen-since: -since [<channel>] [<nick>] +``since [<channel>] [<nick>]`` Returns the messages since <nick> last left the channel. If <nick> is not given, it defaults to the nickname of the person calling the command. .. _command-seen-user: -user [<channel>] <name> +``user [<channel>] <name>`` Returns the last time <name> was seen and what <name> was last seen saying. This looks up <name> in the user seen database, which means that it could be any nick recognized as user <name> that was seen. <channel> is only necessary if the message isn't sent in the channel itself. .. _conf-Seen: diff --git a/plugins/Services/README.rst b/plugins/Services/README.rst index 6a2970777..7d86c809a 100644 --- a/plugins/Services/README.rst +++ b/plugins/Services/README.rst @@ -28,62 +28,62 @@ Commands .. _command-services-chanserv: -chanserv <text> +``chanserv <text>`` Sends the <text> to ChanServ. For example, to register a channel on Atheme, use: @chanserv REGISTER <#channel>. .. _command-services-ghost: -ghost [<nick>] +``ghost [<nick>]`` Ghosts the bot's given nick and takes it. If no nick is given, ghosts the bot's configured nick and takes it. .. _command-services-identify: -identify takes no arguments +``identify takes no arguments`` Identifies with NickServ using the current nick. .. _command-services-invite: -invite [<channel>] +``invite [<channel>]`` Attempts to get invited by ChanServ to <channel>. <channel> is only necessary if the message isn't sent in the channel itself, but chances are, if you need this command, you're not sending it in the channel itself. .. _command-services-nicks: -nicks takes no arguments +``nicks takes no arguments`` Returns the nicks that this plugin is configured to identify and ghost with. .. _command-services-nickserv: -nickserv <text> +``nickserv <text>`` Sends the <text> to NickServ. For example, to register to NickServ on Atheme, use: @nickserv REGISTER <password> <email-address>. .. _command-services-op: -op [<channel>] +``op [<channel>]`` Attempts to get opped by ChanServ in <channel>. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-services-password: -password <nick> [<password>] +``password <nick> [<password>]`` Sets the NickServ password for <nick> to <password>. If <password> is not given, removes <nick> from the configured nicks. .. _command-services-register: -register [<network>] <password> [<email>] +``register [<network>] <password> [<email>]`` Uses the experimental REGISTER command to create an account for the bot on the <network>, using the <password> and the <email> if provided. Some networks may require the email. You may need to use the 'services verify' command afterward to confirm your email address. .. _command-services-unban: -unban [<channel>] +``unban [<channel>]`` Attempts to get unbanned by ChanServ in <channel>. <channel> is only necessary if the message isn't sent in the channel itself, but chances are, if you need this command, you're not sending it in the channel itself. .. _command-services-verify: -verify [<network>] <account> <code> +``verify [<network>] <account> <code>`` If the <network> requires a verification code, you need to call this command with the code the server gave you to finish the registration. .. _command-services-voice: -voice [<channel>] +``voice [<channel>]`` Attempts to get voiced by ChanServ in <channel>. <channel> is only necessary if the message isn't sent in the channel itself. .. _conf-Services: diff --git a/plugins/ShrinkUrl/README.rst b/plugins/ShrinkUrl/README.rst index ce91aefc3..6ee2d60d8 100644 --- a/plugins/ShrinkUrl/README.rst +++ b/plugins/ShrinkUrl/README.rst @@ -21,17 +21,17 @@ Commands .. _command-shrinkurl-tiny: -tiny <url> +``tiny <url>`` Returns a TinyURL.com version of <url> .. _command-shrinkurl-ur1: -ur1 <url> +``ur1 <url>`` Returns an ur1 version of <url>. .. _command-shrinkurl-x0: -x0 <url> +``x0 <url>`` Returns an x0.no version of <url>. .. _conf-ShrinkUrl: diff --git a/plugins/Status/README.rst b/plugins/Status/README.rst index e42f88859..7d2d3ad0f 100644 --- a/plugins/Status/README.rst +++ b/plugins/Status/README.rst @@ -22,52 +22,52 @@ Commands .. _command-status-cmd: -cmd takes no arguments +``cmd takes no arguments`` Returns some interesting command-related statistics. .. _command-status-commands: -commands takes no arguments +``commands takes no arguments`` Returns a list of the commands offered by the bot. .. _command-status-cpu: -cpu takes no arguments +``cpu takes no arguments`` Returns some interesting CPU-related statistics on the bot. .. _command-status-net: -net takes no arguments +``net takes no arguments`` Returns some interesting network-related statistics. .. _command-status-network: -network takes no arguments +``network takes no arguments`` Returns the network the bot is on. .. _command-status-processes: -processes takes no arguments +``processes takes no arguments`` Returns the number of processes that have been spawned, and list of ones that are still active. .. _command-status-server: -server takes no arguments +``server takes no arguments`` Returns the server the bot is on. .. _command-status-status: -status takes no arguments +``status takes no arguments`` Returns the status of the bot. .. _command-status-threads: -threads takes no arguments +``threads takes no arguments`` Returns the current threads that are active. .. _command-status-uptime: -uptime takes no arguments +``uptime takes no arguments`` Returns the amount of time the bot has been running. .. _conf-Status: diff --git a/plugins/String/README.rst b/plugins/String/README.rst index a0c79664e..09f746d7f 100644 --- a/plugins/String/README.rst +++ b/plugins/String/README.rst @@ -20,67 +20,67 @@ Commands .. _command-string-chr: -chr <number> +``chr <number>`` Returns the unicode character associated with codepoint <number> .. _command-string-decode: -decode <encoding> <text> +``decode <encoding> <text>`` Returns an un-encoded form of the given text; the valid encodings are available in the documentation of the Python codecs module: <http://docs.python.org/library/codecs.html#standard-encodings>. .. _command-string-encode: -encode <encoding> <text> +``encode <encoding> <text>`` Returns an encoded form of the given text; the valid encodings are available in the documentation of the Python codecs module: <http://docs.python.org/library/codecs.html#standard-encodings>. .. _command-string-len: -len <text> +``len <text>`` Returns the length of <text>. .. _command-string-levenshtein: -levenshtein <string1> <string2> +``levenshtein <string1> <string2>`` Returns the levenshtein distance (also known as the "edit distance" between <string1> and <string2>) .. _command-string-md5: -md5 <text> +``md5 <text>`` Returns the md5 hash of a given string. .. _command-string-ord: -ord <string> +``ord <string>`` Returns the unicode codepoint of characters in <string>. .. _command-string-re: -re <regexp> <text> +``re <regexp> <text>`` If <regexp> is of the form m/regexp/flags, returns the portion of <text> that matches the regexp. If <regexp> is of the form s/regexp/replacement/flags, returns the result of applying such a regexp to <text>. .. _command-string-sha: -sha <text> +``sha <text>`` Returns the SHA1 hash of a given string. .. _command-string-soundex: -soundex <string> [<length>] +``soundex <string> [<length>]`` Returns the Soundex hash to a given length. The length defaults to 4, since that's the standard length for a soundex hash. For unlimited length, use 0. Maximum length 1024. .. _command-string-unicodename: -unicodename <string> +``unicodename <string>`` Returns the name of characters in <string>. This will error if any character is not a valid Unicode character. .. _command-string-unicodesearch: -unicodesearch <name> +``unicodesearch <name>`` Searches for a unicode character from its <name>. .. _command-string-xor: -xor <password> <text> +``xor <password> <text>`` Returns <text> XOR-encrypted with <password>. .. _conf-String: diff --git a/plugins/Success/README.rst b/plugins/Success/README.rst index 755a74328..70373b8ff 100644 --- a/plugins/Success/README.rst +++ b/plugins/Success/README.rst @@ -26,32 +26,32 @@ Commands .. _command-success-add: -add [<channel>] <text> +``add [<channel>] <text>`` Adds <text> to the success database for <channel>. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-success-change: -change [<channel>] <id> <regexp> +``change [<channel>] <id> <regexp>`` Changes the success with id <id> according to the regular expression <regexp>. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-success-get: -get [<channel>] <id> +``get [<channel>] <id>`` Gets the success with id <id> from the success database for <channel>. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-success-remove: -remove [<channel>] <id> +``remove [<channel>] <id>`` Removes the success with id <id> from the success database for <channel>. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-success-search: -search [<channel>] [--{regexp,by} <value>] [<glob>] +``search [<channel>] [--{regexp,by} <value>] [<glob>]`` Searches for successes matching the criteria given. .. _command-success-stats: -stats [<channel>] +``stats [<channel>]`` Returns the number of successes in the database for <channel>. <channel> is only necessary if the message isn't sent in the channel itself. .. _conf-Success: diff --git a/plugins/Time/README.rst b/plugins/Time/README.rst index 3ceb79bb8..f4c88f900 100644 --- a/plugins/Time/README.rst +++ b/plugins/Time/README.rst @@ -20,42 +20,42 @@ Commands .. _command-time-at: -at [<time string>] +``at [<time string>]`` Returns the number of seconds since epoch <time string> is. <time string> can be any number of natural formats; just try something and see if it will work. If the <time string> is not given, defaults to now. .. _command-time-ctime: -ctime [<seconds since epoch>] +``ctime [<seconds since epoch>]`` Returns the ctime for <seconds since epoch>, or the current ctime if no <seconds since epoch> is given. .. _command-time-ddate: -ddate [<year> <month> <day>] +``ddate [<year> <month> <day>]`` Returns a the Discordian date today, or an optional different date. .. _command-time-elapsed: -elapsed <seconds> +``elapsed <seconds>`` Returns a pretty string that is the amount of time represented by <seconds>. .. _command-time-seconds: -seconds [<years>y] [<weeks>w] [<days>d] [<hours>h] [<minutes>m] [<seconds>s] +``seconds [<years>y] [<weeks>w] [<days>d] [<hours>h] [<minutes>m] [<seconds>s]`` Returns the number of seconds in the number of <years>, <weeks>, <days>, <hours>, <minutes>, and <seconds> given. An example usage is "seconds 2h 30m", which would return 9000, which is '3600*2 + 30*60'. Useful for scheduling events at a given number of seconds in the future. .. _command-time-time: -time [<channel>] [<format>] [<seconds since epoch>] +``time [<channel>] [<format>] [<seconds since epoch>]`` Returns the current time in <format> format, or, if <format> is not given, uses the configurable format for the current channel. If no <seconds since epoch> time is given, the current time is used. If <channel> is given without <format>, uses the format for <channel>. .. _command-time-tztime: -tztime <region>/<city> (or <region>/<state>/<city> +``tztime <region>/<city> (or <region>/<state>/<city>`` Takes a city and its region, and returns its local time. This command uses the IANA Time Zone Database. .. _command-time-until: -until <time string> +``until <time string>`` Returns the number of seconds until <time string>. .. _conf-Time: diff --git a/plugins/Todo/README.rst b/plugins/Todo/README.rst index 284c238d8..60f6badf5 100644 --- a/plugins/Todo/README.rst +++ b/plugins/Todo/README.rst @@ -22,32 +22,32 @@ Commands .. _command-todo-add: -add [--priority=<num>] <text> +``add [--priority=<num>] <text>`` Adds <text> as a task in your own personal todo list. The optional priority argument allows you to set a task as a high or low priority. Any integer is valid. .. _command-todo-change: -change <task id> <regexp> +``change <task id> <regexp>`` Modify the task with the given id using the supplied regexp. .. _command-todo-remove: -remove <task id> [<task id> ...] +``remove <task id> [<task id> ...]`` Removes <task id> from your personal todo list. .. _command-todo-search: -search [--{regexp} <value>] [<glob> <glob> ...] +``search [--{regexp} <value>] [<glob> <glob> ...]`` Searches your todos for tasks matching <glob>. If --regexp is given, its associated value is taken as a regexp and matched against the tasks. .. _command-todo-setpriority: -setpriority <id> <priority> +``setpriority <id> <priority>`` Sets the priority of the todo with the given id to the specified value. .. _command-todo-todo: -todo [<username>] [<task id>] +``todo [<username>] [<task id>]`` Retrieves a task for the given task id. If no task id is given, it will return a list of task ids that that user has added to their todo list. .. _conf-Todo: diff --git a/plugins/Topic/README.rst b/plugins/Topic/README.rst index 2a7b98a7f..d6f098f89 100644 --- a/plugins/Topic/README.rst +++ b/plugins/Topic/README.rst @@ -21,112 +21,112 @@ Commands .. _command-topic-add: -add [<channel>] <topic> +``add [<channel>] <topic>`` Adds <topic> to the topics for <channel>. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-topic-change: -change [<channel>] <number> <regexp> +``change [<channel>] <number> <regexp>`` Changes the topic number <number> on <channel> according to the regular expression <regexp>. <number> is the one-based index into the topics; <regexp> is a regular expression of the form s/regexp/replacement/flags. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-topic-default: -default [<channel>] +``default [<channel>]`` Sets the topic in <channel> to the default topic for <channel>. The default topic for a channel may be configured via the configuration variable supybot.plugins.Topic.default. .. _command-topic-fit: -fit [<channel>] <topic> +``fit [<channel>] <topic>`` Adds <topic> to the topics for <channel>. If the topic is too long for the server, topics will be popped until there is enough room. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-topic-get: -get [<channel>] <number> +``get [<channel>] <number>`` Returns topic number <number> from <channel>. <number> is a one-based index into the topics. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-topic-insert: -insert [<channel>] <topic> +``insert [<channel>] <topic>`` Adds <topic> to the topics for <channel> at the beginning of the topics currently on <channel>. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-topic-list: -list [<channel>] +``list [<channel>]`` Returns a list of the topics in <channel>, prefixed by their indexes. Mostly useful for topic reordering. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-topic-lock: -lock [<channel>] +``lock [<channel>]`` Locks the topic (sets the mode +t) in <channel>. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-topic-redo: -redo [<channel>] +``redo [<channel>]`` Undoes the last undo. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-topic-refresh: -refresh [<channel>] +``refresh [<channel>]`` Refreshes current topic set by anyone. Restores topic if empty. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-topic-remove: -remove [<channel>] <number1> [<number2> <number3>...] +``remove [<channel>] <number1> [<number2> <number3>...]`` Removes topics <numbers> from the topic for <channel> Topics are numbered starting from 1; you can also use negative indexes to refer to topics starting the from the end of the topic. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-topic-reorder: -reorder [<channel>] <number> [<number> ...] +``reorder [<channel>] <number> [<number> ...]`` Reorders the topics from <channel> in the order of the specified <number> arguments. <number> is a one-based index into the topics. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-topic-replace: -replace [<channel>] <number> <topic> +``replace [<channel>] <number> <topic>`` Replaces topic <number> with <topic>. .. _command-topic-restore: -restore [<channel>] +``restore [<channel>]`` Restores the topic to the last topic set by the bot. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-topic-save: -save [<channel>] +``save [<channel>]`` Saves the topic in <channel> to be restored with 'topic default' later. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-topic-separator: -separator [<channel>] <separator> +``separator [<channel>] <separator>`` Sets the topic separator for <channel> to <separator> Converts the current topic appropriately. .. _command-topic-set: -set [<channel>] [<number>] <topic> +``set [<channel>] [<number>] <topic>`` Sets the topic <number> to be <text>. If no <number> is given, this sets the entire topic. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-topic-shuffle: -shuffle [<channel>] +``shuffle [<channel>]`` Shuffles the topics in <channel>. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-topic-swap: -swap [<channel>] <first topic number> <second topic number> +``swap [<channel>] <first topic number> <second topic number>`` Swaps the order of the first topic number and the second topic number. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-topic-topic: -topic [<channel>] +``topic [<channel>]`` Returns the topic for <channel>. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-topic-undo: -undo [<channel>] +``undo [<channel>]`` Restores the topic to the one previous to the last topic command that set it. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-topic-unlock: -unlock [<channel>] +``unlock [<channel>]`` Unlocks the topic (sets the mode -t) in <channel>. <channel> is only necessary if the message isn't sent in the channel itself. .. _conf-Topic: diff --git a/plugins/URL/README.rst b/plugins/URL/README.rst index 486f05e14..3ecd0b0d0 100644 --- a/plugins/URL/README.rst +++ b/plugins/URL/README.rst @@ -23,12 +23,12 @@ Commands .. _command-url-last: -last [<channel>] [--{from,with,without,near,proto} <value>] [--nolimit] +``last [<channel>] [--{from,with,without,near,proto} <value>] [--nolimit]`` Gives the last URL matching the given criteria. --from is from whom the URL came; --proto is the protocol the URL used; --with is something inside the URL; --without is something that should not be in the URL; --near is something in the same message as the URL. If --nolimit is given, returns all the URLs that are found to just the URL. <channel> is only necessary if the message isn't sent in the channel itself. .. _command-url-stats: -stats [<channel>] +``stats [<channel>]`` Returns the number of URLs in the URL database. <channel> is only required if the message isn't sent in the channel itself. .. _conf-URL: diff --git a/plugins/Unix/README.rst b/plugins/Unix/README.rst index 9fdb10437..2ec457da5 100644 --- a/plugins/Unix/README.rst +++ b/plugins/Unix/README.rst @@ -20,67 +20,67 @@ Commands .. _command-unix-call: -call <command to call with any arguments> +``call <command to call with any arguments>`` Calls any command available on the system, and returns its output. Requires owner capability. Note that being restricted to owner, this command does not do any sanity checking on input/output. So it is up to you to make sure you don't run anything that will spamify your channel or that will bring your machine to its knees. .. _command-unix-crypt: -crypt <password> [<salt>] +``crypt <password> [<salt>]`` Returns the resulting of doing a crypt() on <password>. If <salt> is not given, uses a random salt. If running on a glibc2 system, prepending '$1$' to your salt will cause crypt to return an MD5sum based crypt rather than the standard DES based crypt. .. _command-unix-errno: -errno <error number or code> +``errno <error number or code>`` Returns the number of an errno code, or the errno code of a number. .. _command-unix-fortune: -fortune takes no arguments +``fortune takes no arguments`` Returns a fortune from the Unix fortune program. .. _command-unix-pid: -pid takes no arguments +``pid takes no arguments`` Returns the current pid of the process for this Supybot. .. _command-unix-ping: -ping [--c <count>] [--i <interval>] [--t <ttl>] [--W <timeout>] [--4|--6] <host or ip> +``ping [--c <count>] [--i <interval>] [--t <ttl>] [--W <timeout>] [--4|--6] <host or ip>`` Sends an ICMP echo request to the specified host. The arguments correspond with those listed in ping(8). --c is limited to 10 packets or less (default is 5). --i is limited to 5 or less. --W is limited to 10 or less. --4 and --6 can be used if and only if the system has a unified ping command. .. _command-unix-ping6: -ping6 [--c <count>] [--i <interval>] [--t <ttl>] [--W <timeout>] [--4|--6] <host or ip> +``ping6 [--c <count>] [--i <interval>] [--t <ttl>] [--W <timeout>] [--4|--6] <host or ip>`` Sends an ICMP echo request to the specified host. The arguments correspond with those listed in ping(8). --c is limited to 10 packets or less (default is 5). --i is limited to 5 or less. --W is limited to 10 or less. --4 and --6 can be used if and only if the system has a unified ping command. .. _command-unix-progstats: -progstats takes no arguments +``progstats takes no arguments`` Returns various unix-y information on the running supybot process. .. _command-unix-shell: -shell <command to call with any arguments> +``shell <command to call with any arguments>`` Calls any command available on the system using the shell specified by the SHELL environment variable, and returns its output. Requires owner capability. Note that being restricted to owner, this command does not do any sanity checking on input/output. So it is up to you to make sure you don't run anything that will spamify your channel or that will bring your machine to its knees. .. _command-unix-spell: -spell <word> +``spell <word>`` Returns the result of passing <word> to aspell/ispell. The results shown are sorted from best to worst in terms of being a likely match for the spelling of <word>. .. _command-unix-sysuname: -sysuname takes no arguments +``sysuname takes no arguments`` Returns the uname -a from the system the bot is running on. .. _command-unix-sysuptime: -sysuptime takes no arguments +``sysuptime takes no arguments`` Returns the uptime from the system the bot is running on. .. _command-unix-wtf: -wtf [is] <something> +``wtf [is] <something>`` Returns wtf <something> is. 'wtf' is a Unix command that first appeared in NetBSD 1.5. In most Unices, it's available in some sort of 'bsdgames' package. .. _conf-Unix: diff --git a/plugins/User/README.rst b/plugins/User/README.rst index 7125b9e65..14502d99e 100644 --- a/plugins/User/README.rst +++ b/plugins/User/README.rst @@ -22,82 +22,82 @@ Commands .. _command-user-capabilities: -capabilities [<name>] +``capabilities [<name>]`` Returns the capabilities of the user specified by <name>; if <name> isn't specified, returns the capabilities of the user calling the command. .. _command-user-changename: -changename <name> <new name> [<password>] +``changename <name> <new name> [<password>]`` Changes your current user database name to the new name given. <password> is only necessary if the user isn't recognized by hostmask. This message must be sent to the bot privately (not on a channel) since it may contain a password. .. _command-user-hostmask: -hostmask [<nick>] +``hostmask [<nick>]`` Returns the hostmask of <nick>. If <nick> isn't given, return the hostmask of the person giving the command. .. _command-user-hostmask.add: -hostmask add [<name>] [<hostmask>] [<password>] +``hostmask add [<name>] [<hostmask>] [<password>]`` Adds the hostmask <hostmask> to the user specified by <name>. The <password> may only be required if the user is not recognized by hostmask. <password> is also not required if an owner user is giving the command on behalf of some other user. If <hostmask> is not given, it defaults to your current hostmask. If <name> is not given, it defaults to your currently identified name. This message must be sent to the bot privately (not on a channel) since it may contain a password. .. _command-user-hostmask.list: -hostmask list [<name>] +``hostmask list [<name>]`` Returns the hostmasks of the user specified by <name>; if <name> isn't specified, returns the hostmasks of the user calling the command. .. _command-user-hostmask.remove: -hostmask remove [<name>] [<hostmask>] [<password>] +``hostmask remove [<name>] [<hostmask>] [<password>]`` Removes the hostmask <hostmask> from the record of the user specified by <name>. If the hostmask given is 'all' then all hostmasks will be removed. The <password> may only be required if the user is not recognized by their hostmask. This message must be sent to the bot privately (not on a channel) since it may contain a password. If <hostmask> is not given, it defaults to your current hostmask. If <name> is not given, it defaults to your currently identified name. .. _command-user-identify: -identify <name> <password> +``identify <name> <password>`` Identifies the user as <name>. This command (and all other commands that include a password) must be sent to the bot privately, not in a channel. .. _command-user-list: -list [--capability=<capability>] [<glob>] +``list [--capability=<capability>] [<glob>]`` Returns the valid registered usernames matching <glob>. If <glob> is not given, returns all registered usernames. .. _command-user-register: -register <name> <password> +``register <name> <password>`` Registers <name> with the given password <password> and the current hostmask of the person registering. You shouldn't register twice; if you're not recognized as a user but you've already registered, use the hostmask add command to add another hostmask to your already-registered user, or use the identify command to identify just for a session. This command (and all other commands that include a password) must be sent to the bot privately, not in a channel. Use "!" instead of <password> to disable password authentication. .. _command-user-set.password: -set password [<name>] <old password> <new password> +``set password [<name>] <old password> <new password>`` Sets the new password for the user specified by <name> to <new password>. Obviously this message must be sent to the bot privately (not in a channel). If the requesting user is an owner user, then <old password> needn't be correct. If the <new password> is "!", password login will be disabled. .. _command-user-set.secure: -set secure <password> [<True|False>] +``set secure <password> [<True|False>]`` Sets the secure flag on the user of the person sending the message. Requires that the person's hostmask be in the list of hostmasks for that user in addition to the password being correct. When the secure flag is set, the user *must* identify before they can be recognized. If a specific True/False value is not given, it inverts the current value. .. _command-user-stats: -stats takes no arguments +``stats takes no arguments`` Returns some statistics on the user database. .. _command-user-unidentify: -unidentify takes no arguments +``unidentify takes no arguments`` Un-identifies you. Note that this may not result in the desired effect of causing the bot not to recognize you anymore, since you may have added hostmasks to your user that can cause the bot to continue to recognize you. .. _command-user-unregister: -unregister <name> [<password>] +``unregister <name> [<password>]`` Unregisters <name> from the user database. If the user giving this command is an owner user, the password is not necessary. .. _command-user-username: -username <hostmask|nick> +``username <hostmask|nick>`` Returns the username of the user specified by <hostmask> or <nick> if the user is registered. .. _command-user-whoami: -whoami takes no arguments +``whoami takes no arguments`` Returns the name of the user calling the command. .. _conf-User: diff --git a/plugins/Utilities/README.rst b/plugins/Utilities/README.rst index 0f03b6aac..2cb4f3d0f 100644 --- a/plugins/Utilities/README.rst +++ b/plugins/Utilities/README.rst @@ -20,52 +20,52 @@ Commands .. _command-utilities-apply: -apply <command> <text> +``apply <command> <text>`` Tokenizes <text> and calls <command> with the resulting arguments. .. _command-utilities-countargs: -countargs <arg> [<arg> ...] +``countargs <arg> [<arg> ...]`` Counts the arguments given. .. _command-utilities-echo: -echo <text> +``echo <text>`` Returns the arguments given it. Uses our standard substitute on the string(s) given to it; $nick (or $who), $randomNick, $randomInt, $botnick, $channel, $user, $host, $today, $now, and $randomDate are all handled appropriately. .. _command-utilities-ignore: -ignore requires no arguments +``ignore requires no arguments`` Does nothing. Useful sometimes for sequencing commands when you don't care about their non-error return values. .. _command-utilities-last: -last <text> [<text> ...] +``last <text> [<text> ...]`` Returns the last argument given. Useful when you'd like multiple nested commands to run, but only the output of the last one to be returned. .. _command-utilities-let: -let <variable> = <value> in <command> +``let <variable> = <value> in <command>`` Defines <variable> to be equal to <value> in the <command> and runs the <command>. '=' and 'in' can be omitted. .. _command-utilities-sample: -sample <num> <arg> [<arg> ...] +``sample <num> <arg> [<arg> ...]`` Randomly chooses <num> items out of the arguments given. .. _command-utilities-shuffle: -shuffle <arg> [<arg> ...] +``shuffle <arg> [<arg> ...]`` Shuffles the arguments given. .. _command-utilities-sort: -sort <arg> [<arg> ...] +``sort <arg> [<arg> ...]`` Sorts the arguments given. .. _command-utilities-success: -success [<text>] +``success [<text>]`` Does nothing except to reply with a success message. This is useful when you want to run multiple commands as nested commands, and don't care about their output as long as they're successful. An error, of course, will break out of this command. <text>, if given, will be appended to the end of the success message. .. _conf-Utilities: diff --git a/plugins/Web/README.rst b/plugins/Web/README.rst index 61c822424..1d43794f4 100644 --- a/plugins/Web/README.rst +++ b/plugins/Web/README.rst @@ -20,42 +20,42 @@ Commands .. _command-web-doctype: -doctype <url> +``doctype <url>`` Returns the DOCTYPE string of <url>. Only HTTP urls are valid, of course. .. _command-web-fetch: -fetch <url> +``fetch <url>`` Returns the contents of <url>, or as much as is configured in supybot.plugins.Web.fetch.maximum. If that configuration variable is set to 0, this command will be effectively disabled. .. _command-web-headers: -headers <url> +``headers <url>`` Returns the HTTP headers of <url>. Only HTTP urls are valid, of course. .. _command-web-location: -location <url> +``location <url>`` If the <url> is redirected to another page, returns the URL of that page. This works even if there are multiple redirects. Only HTTP urls are valid. Useful to "un-tinify" URLs. .. _command-web-size: -size <url> +``size <url>`` Returns the Content-Length header of <url>. Only HTTP urls are valid, of course. .. _command-web-title: -title [--no-filter] <url> +``title [--no-filter] <url>`` Returns the HTML <title>... of a URL. If --no-filter is given, the bot won't strip special chars (action, DCC, ...). .. _command-web-urlquote: -urlquote +``urlquote `` Returns the URL quoted form of the text. .. _command-web-urlunquote: -urlunquote +``urlunquote `` Returns the text un-URL quoted. .. _conf-Web: diff --git a/src/scripts/limnoria_plugin_doc.py b/src/scripts/limnoria_plugin_doc.py index 11fccd6aa..1892ba941 100644 --- a/src/scripts/limnoria_plugin_doc.py +++ b/src/scripts/limnoria_plugin_doc.py @@ -147,7 +147,7 @@ class PluginDoc(object): args = args.split('(', 1)[1] args = args[len(' '.join(command)):].strip() help = help.split('--', 1)[1].strip() - self.appendLine(line + args) + self.appendLine('``' + line + args + '``') self.appendLine(help, 1) else: self.appendLine('No help associated with this command') @@ -259,10 +259,10 @@ class PluginDoc(object): def genDoc(m, options): Plugin = PluginDoc(m, options.titleTemplate) - print('Generating documentation for %s...' % Plugin.name) outputFilename = string.Template(options.outputFilename).substitute( name=Plugin.name, format=options.format) path = os.path.join(options.outputDir, outputFilename) + print('Generating documentation for %s to %s...' % (Plugin.name, path)) try: fd = open(path, 'w') except EnvironmentError as e: From b075a94396ae32cd8161c67c6e3568eb8e97b220 Mon Sep 17 00:00:00 2001 From: Valentin Lorentz Date: Sat, 24 Aug 2024 10:18:54 +0200 Subject: [PATCH 36/69] Add config value supybot.reply.mores.instant.whenPrivate This allows overriding supybot.reply.mores.instant for private messages, where it is usually more tolerable to send multiple lines. However, this still defaults to 1, in order to not be abusable by default. --- src/callbacks.py | 15 ++++++++--- src/conf.py | 7 ++++++ test/test_callbacks.py | 56 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 74 insertions(+), 4 deletions(-) diff --git a/src/callbacks.py b/src/callbacks.py index e9428c872..e3772c81b 100644 --- a/src/callbacks.py +++ b/src/callbacks.py @@ -769,6 +769,9 @@ class ReplyIrcProxy(RichReplyMethods): else: sendMsg = self.replyIrc.queueMsg + public = bool(self.msg.channel) + private = kwargs.get('private', False) or not public + if isinstance(self.replyIrc, self.__class__): s = s[:conf.supybot.reply.maximumLength()] return self.replyIrc.reply(s, @@ -813,8 +816,14 @@ class ReplyIrcProxy(RichReplyMethods): # (which is used like a stack) chunks.reverse() - instant = conf.get(conf.supybot.reply.mores.instant, - channel=target, network=self.replyIrc.network) + instant = 0 + if private: + # if zero, falls back to supybot.reply.mores.instant + instant = conf.get(conf.supybot.reply.mores.instant.whenPrivate, + network=self.replyIrc.network) + if instant <= 0: + instant = conf.get(conf.supybot.reply.mores.instant, + channel=target, network=self.replyIrc.network) # Big complex loop ahead, with lots of cases and opportunities for # off-by-one errors. Here is the meaning of each of the variables @@ -912,8 +921,6 @@ class ReplyIrcProxy(RichReplyMethods): if '!' in prefix and '@' in prefix: mask = prefix.split('!', 1)[1] self._mores[mask] = msgs - public = bool(self.msg.channel) - private = kwargs.get('private', False) or not public self._mores[msg.nick] = (private, msgs) return response diff --git a/src/conf.py b/src/conf.py index f090816b3..d0d202d14 100644 --- a/src/conf.py +++ b/src/conf.py @@ -547,6 +547,13 @@ registerChannelValue(supybot.reply.mores, 'instant', they are formed). Defaults to 1, which means that a more command will be required for all but the first chunk."""))) +# XXX: User value. +registerNetworkValue(supybot.reply.mores.instant, 'whenPrivate', + registry.NonNegativeInteger(0, _("""Determines how many mores will be sent + instantly (i.e., without the use of the more command, immediately when + they are formed) when sending messages in private. Defaults to 0, which means + that it defaults to the generic supybot.reply.mores.instant value."""))) + registerChannelValue(supybot.reply, 'oneToOne', registry.Boolean(True, _("""Determines whether the bot will send multi-message replies in a single message. This defaults to True diff --git a/test/test_callbacks.py b/test/test_callbacks.py index 6ce9c1569..7ac6c78bf 100644 --- a/test/test_callbacks.py +++ b/test/test_callbacks.py @@ -547,6 +547,13 @@ class PrivmsgTestCase(ChannelPluginTestCase): "'" + "foo " * 110 + " \x02(2 more messages)\x02") self.assertNoResponse(" ", timeout=0.1) + # not in private -> no effect + with conf.supybot.reply.mores.instant.inPrivate.context(2): + self.assertResponse( + "eval 'foo '*300", + "'" + "foo " * 110 + " \x02(2 more messages)\x02") + self.assertNoResponse(" ", timeout=0.1) + with conf.supybot.reply.mores.instant.context(2): self.assertResponse( "eval 'foo '*300", @@ -568,6 +575,55 @@ class PrivmsgTestCase(ChannelPluginTestCase): " " + "foo " * 79 + "'") self.assertNoResponse(" ", timeout=0.1) + def testReplyInstantInPrivate(self): + self.assertNoResponse(' ') + self.assertResponse( + "eval irc.reply('foo '*300, private=True)", + "foo " * 113 + "\x02(2 more messages)\x02") + self.assertResponse(" ", "None") + + with conf.supybot.reply.mores.instant.whenPrivate.context(2): + self.assertResponse( + "eval irc.reply('foo '*300, private=True)", + "foo " * 112 + "foo") + self.assertResponse( + " ", + " foo" * 112 + " \x02(1 more message)\x02") + self.assertResponse(" ", "None") + + with conf.supybot.reply.mores.instant.whenPrivate.context(2): + with conf.supybot.reply.mores.instant.context(3): # ignored + self.assertResponse( + "eval irc.reply('foo '*300, private=True)", + "foo " * 112 + "foo") + self.assertResponse( + " ", + " foo" * 112 + " \x02(1 more message)\x02") + self.assertResponse(" ", "None") + + # fall back because supybot.reply.mores.instant.inPrivate is 0 + with conf.supybot.reply.mores.instant.context(2): + self.assertResponse( + "eval irc.reply('foo '*300, private=True)", + "foo " * 112 + "foo") + self.assertResponse( + " ", + " foo" * 112 + " \x02(1 more message)\x02") + self.assertResponse(" ", "None") + + # fall back because supybot.reply.mores.instant.inPrivate is 0 + with conf.supybot.reply.mores.instant.context(3): + self.assertResponse( + "eval irc.reply('foo '*300, private=True)", + "foo " * 112 + "foo") + self.assertResponse( + " ", + " foo" * 112 + " ") + self.assertResponse( + " ", + "foo " * 75) + self.assertResponse(" ", "None") + def testReplyPrivate(self): # Send from a very long nick, which should be taken into account when # computing the reply overhead. From 603cb600aa5ce940fb74620d33109d1913ae1767 Mon Sep 17 00:00:00 2001 From: Val Lorentz Date: Sun, 25 Aug 2024 10:20:16 +0200 Subject: [PATCH 37/69] Fix NormalizedString serialization splitting within escape sequences. Resolves #1589 --- src/registry.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/registry.py b/src/registry.py index 2bc3323da..25ee99881 100644 --- a/src/registry.py +++ b/src/registry.py @@ -737,7 +737,10 @@ class NormalizedString(String): def serialize(self): s = self.__parent.serialize() prefixLen = len(self._name) + 2 - lines = textwrap.wrap(s, width=76-prefixLen) + # break_long_words=False so we don't split in the middle of a + # unicode_escape sequence when there are multiple escape sequences in a + # row. + lines = textwrap.wrap(s, width=76-prefixLen, break_long_words=False) last = len(lines)-1 for (i, line) in enumerate(lines): if i != 0: From 6abf54103a57427be237e04d4e099cf4cb74e703 Mon Sep 17 00:00:00 2001 From: ssdaniel24 <107036969+ssdaniel24@users.noreply.github.com> Date: Sun, 25 Aug 2024 11:32:08 +0300 Subject: [PATCH 38/69] Updated russian translation based on updated messages.pot --- locales/ru.po | 1871 +++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 1576 insertions(+), 295 deletions(-) diff --git a/locales/ru.po b/locales/ru.po index ea7d0b6a2..2deb2a54a 100644 --- a/locales/ru.po +++ b/locales/ru.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "POT-Creation-Date: 2022-02-06 00:12+0100\n" -"PO-Revision-Date: 2024-06-17 13:29+0300\n" +"PO-Revision-Date: 2024-08-25 11:06+0300\n" "Last-Translator: ssdaniel24 \n" "Language-Team: \n" "Language: ru\n" @@ -12,763 +12,2044 @@ msgstr "" "Generated-By: pygettext.py 1.5\n" "X-Generator: Poedit 3.4.2\n" +#: src/callbacks.py:217 msgid "Error: " msgstr "Ошибка: " +#: src/callbacks.py:233 msgid "Error: I tried to send you an empty message." msgstr "Ошибка: я пытался отправить вам пустое сообщение." -msgid "Missing \"%s\". You may want to quote your arguments with double quotes in order to prevent extra brackets from being evaluated as nested commands." -msgstr "Отсутствует \"%s\". Возможно вы захотите заключить аргументы в двойные кавычки, чтобы предотвратить считывание дополнительных скобок как вложенных команд." +#: src/callbacks.py:361 +msgid "" +"Missing \"%s\". You may want to quote your arguments with double quotes in " +"order to prevent extra brackets from being evaluated as nested commands." +msgstr "" +"Отсутствует \"%s\". Возможно вы захотите заключить аргументы в двойные " +"кавычки, чтобы предотвратить считывание дополнительных скобок как вложенных " +"команд." -msgid "\"|\" with nothing preceding. I obviously can't do a pipe with nothing before the |." -msgstr "\"I\", перед которым ничего не стоит. Я не могу создать конвейер, если перед этим символом ничего не написано." +#: src/callbacks.py:390 +msgid "" +"\"|\" with nothing preceding. I obviously can't do a pipe with nothing " +"before the |." +msgstr "" +"\"I\", перед которым ничего не стоит. Я не могу создать конвейер, если перед " +"этим символом ничего не написано." -msgid "Spurious \"%s\". You may want to quote your arguments with double quotes in order to prevent extra brackets from being evaluated as nested commands." -msgstr "Ложный \"%s\". Возможно вы захотите заключить аргументы в двойные кавычки, чтобы предотвратить считывание дополнительных скобок как вложенных команд." +#: src/callbacks.py:398 +msgid "" +"Spurious \"%s\". You may want to quote your arguments with double quotes in " +"order to prevent extra brackets from being evaluated as nested commands." +msgstr "" +"Ложный \"%s\". Возможно вы захотите заключить аргументы в двойные кавычки, " +"чтобы предотвратить считывание дополнительных скобок как вложенных команд." -msgid "\"|\" with nothing following. I obviously can't do a pipe with nothing after the |." -msgstr "\"I\", за которым ничего не стоит. Я не могу создать конвейер, если после этого символом ничего не написано." +#: src/callbacks.py:407 +msgid "" +"\"|\" with nothing following. I obviously can't do a pipe with nothing " +"after the |." +msgstr "" +"\"I\", за которым ничего не стоит. Я не могу создать конвейер, если после " +"этого символом ничего не написано." +#: src/callbacks.py:623 msgid "%s is not a valid %s." msgstr "%s не является допустимым %s." +#: src/callbacks.py:625 msgid "That's not a valid %s." msgstr "Это не является допустимым %s." +#: src/callbacks.py:794 msgid "(XX more messages)" msgstr "(XX сообщений осталось)" +#: src/callbacks.py:849 msgid "more message" msgstr "сообщение осталось" +#: src/callbacks.py:851 msgid "more messages" msgstr "сообщений осталось" +#: src/callbacks.py:986 msgid "You've attempted more nesting than is currently allowed on this bot." msgstr "Вы попробовали вложить больше команд, чем это дозволено в боте сейчас." -msgid "The command %q is available in the %L plugins. Please specify the plugin whose command you wish to call by using its name as a command before %q." -msgstr "Команда %q доступна в плагинах %L. Уточните из какого плагина вы пытаетесь вызвать команду, указав его название как команду перед %q." +#: src/callbacks.py:1171 +msgid "" +"The command %q is available in the %L plugins. Please specify the plugin " +"whose command you wish to call by using its name as a command before %q." +msgstr "" +"Команда %q доступна в плагинах %L. Уточните из какого плагина вы пытаетесь " +"вызвать команду, указав его название как команду перед %q." -msgid "Determines what commands are currently disabled. Such\n commands will not appear in command lists, etc. They will appear not even\n to exist." -msgstr "Определяет, какие команды сейчас отключены. Эти команды не будут появляться в списках команд. Будет казаться, что их даже не существует." +#: src/callbacks.py:1356 +msgid "" +"Determines what commands are currently disabled. Such\n" +" commands will not appear in command lists, etc. They will appear not " +"even\n" +" to exist." +msgstr "" +"Определяет, какие команды сейчас отключены. Эти команды не будут появляться " +"в списках команд. Будет казаться, что их даже не существует." +#: src/callbacks.py:1595 msgid "Invalid arguments for %s." msgstr "Недопустимые аргументы для %s." +#: src/callbacks.py:1627 msgid "The %q command has no help." msgstr "Команда %q не имеет справки." +#: src/commands.py:284 msgid "integer" msgstr "целое число" +#: src/commands.py:295 msgid "non-integer value" msgstr "нецелое значение" +#: src/commands.py:306 msgid "floating point number" msgstr "дробное число" +#: src/commands.py:315 msgid "positive integer" msgstr "положительное целое число" +#: src/commands.py:319 msgid "non-negative integer" msgstr "неотрицательное целое число" +#: src/commands.py:322 msgid "index" msgstr "индекс" +#: src/commands.py:347 msgid "number of seconds" msgstr "число секунд" +#: src/commands.py:354 msgid "boolean" msgstr "логический тип" +#: src/commands.py:368 src/commands.py:375 src/commands.py:384 +#: src/commands.py:391 src/commands.py:400 msgid "do that" msgstr "сделайте это" +#: src/commands.py:371 src/commands.py:378 src/commands.py:387 +#: src/commands.py:394 src/commands.py:403 msgid "I'm not even in %s." msgstr "Я даже не присутствую в %s." +#: src/commands.py:373 msgid "I need to be voiced to %s." msgstr "Мне требуется голос (voice) в %s." +#: src/commands.py:381 msgid "I need to be at least voiced to %s." msgstr "Мне требуется хотя бы голос (voice) в %s." +#: src/commands.py:389 msgid "I need to be halfopped to %s." msgstr "Мне требуется быть полуоператором в %s." +#: src/commands.py:397 msgid "I need to be at least halfopped to %s." msgstr "Мне требуется хотя бы быть полуоператором в %s." +#: src/commands.py:405 msgid "I need to be opped to %s." msgstr "Мне требуется быть оператором в %s." +#: src/commands.py:411 src/commands.py:569 msgid "channel" msgstr "канал" +#: src/commands.py:424 msgid "nick or hostmask" msgstr "ник или маска хоста" +#: src/commands.py:478 msgid "regular expression" msgstr "регулярное выражение" +#: src/commands.py:489 src/commands.py:493 msgid "nick" msgstr "ник" +#: src/commands.py:490 msgid "That nick is too long for this server." msgstr "Данный ник слишком длинный для этого сервера." +#: src/commands.py:501 msgid "I haven't seen %s." msgstr "Я ещё не видел %s." +#: src/commands.py:548 src/commands.py:567 msgid "I'm not in %s." msgstr "Меня нет в %s." +#: src/commands.py:552 msgid "This command may only be given in a channel that I am in." -msgstr "Данная команда может быть отправлена только в канал, в котором присутствую я." +msgstr "" +"Данная команда может быть отправлена только в канал, в котором присутствую я." +#: src/commands.py:565 msgid "You must be in %s." msgstr "Вы должны быть в %s." +#: src/commands.py:576 msgid "%s is not in %s." msgstr "%s отсутствует в %s." +#: src/commands.py:624 msgid "You must not give the empty string as an argument." msgstr "Вы не можете передавать пустую строку как аргумент." +#: src/commands.py:632 msgid "You must not give a string containing spaces as an argument." msgstr "Вы не можете передавать строку с пробелами как аргумент." +#: src/commands.py:642 msgid "This message must be sent in a channel." msgstr "Это сообщение должно быть отправлено в канале." +#: src/commands.py:674 src/commands.py:681 msgid "url" msgstr "url" +#: src/commands.py:687 msgid "IRI" msgstr "IRI" +#: src/commands.py:693 msgid "email" msgstr "э. почта" +#: src/commands.py:703 src/commands.py:711 msgid "http url" msgstr "http url" +#: src/commands.py:718 msgid "command name" msgstr "название команды" +#: src/commands.py:726 msgid "ip" msgstr "ip" +#: src/commands.py:732 msgid "letter" msgstr "буква" +#: src/commands.py:764 msgid "plugin" msgstr "плагин" +#: src/commands.py:772 msgid "irc color" msgstr "irc-цвет" -msgid "Determines whether this plugin is loaded\n by default." +#: src/conf.py:130 +msgid "" +"Determines whether this plugin is loaded\n" +" by default." msgstr "Определяет, будет ли этот плагин загружаться по умолчанию." -msgid "Determines whether this plugin is\n publicly visible." +#: src/conf.py:134 +msgid "" +"Determines whether this plugin is\n" +" publicly visible." msgstr "Определяет, будет ли этот плагин виден всем." +#: src/conf.py:231 msgid "Determines the bot's default nick." msgstr "Определяет ник бота по умолчанию." -msgid "Determines what alternative\n nicks will be used if the primary nick (supybot.nick) isn't available. A\n %s in this nick is replaced by the value of supybot.nick when used. If no\n alternates are given, or if all are used, the supybot.nick will be perturbed\n appropriately until an unused nick is found." -msgstr "Определяет альтернативные ники, которые будут использованы, если основной ник (supybot.nick) недоступен. %s в этих никах заменяется на значение supybot.nick. Если альтернатив не дано, или все они заняты, то будет использоваться изменённый supybot.nick, пока не освободится хотя бы один альтернативный или основной ник." +#: src/conf.py:234 +msgid "" +"Determines what alternative\n" +" nicks will be used if the primary nick (supybot.nick) isn't available. " +"A\n" +" %s in this nick is replaced by the value of supybot.nick when used. If " +"no\n" +" alternates are given, or if all are used, the supybot.nick will be " +"perturbed\n" +" appropriately until an unused nick is found." +msgstr "" +"Определяет альтернативные ники, которые будут использованы, если основной " +"ник (supybot.nick) недоступен. %s в этих никах заменяется на значение " +"supybot.nick. Если альтернатив не дано, или все они заняты, то будет " +"использоваться изменённый supybot.nick, пока не освободится хотя бы один " +"альтернативный или основной ник." -msgid "Determines the bot's ident string, if the server\n doesn't provide one by default." +#: src/conf.py:241 +msgid "" +"Determines the bot's ident string, if the server\n" +" doesn't provide one by default." msgstr "Определяет ident-строку, если сервер не предоставляет её по умолчанию." -msgid "Determines the real name which the bot sends to\n the server. A standard real name using the current version of the bot\n will be generated if this is left empty." -msgstr "Определяет настоящее имя (real name), которое бот отсылает серверу. Если не указано, то бот использует номер своей версии." +#: src/conf.py:258 +msgid "" +"Determines the real name which the bot sends to\n" +" the server. A standard real name using the current version of the bot\n" +" will be generated if this is left empty." +msgstr "" +"Определяет настоящее имя (real name), которое бот отсылает серверу. Если не " +"указано, то бот использует номер своей версии." +#: src/conf.py:267 msgid "Determines what networks the bot will connect to." msgstr "Определяет, к каким сетям подключится бот." -msgid "Determines what password will be used on %s. Yes, we know that\n technically passwords are server-specific and not network-specific,\n but this is the best we can do right now." -msgstr "Определяет, какой пароль будет использован в %s. Да, мы понимаем, что технически пароли задаются для серверов, а не сетей, но это лучшее, что мы можем сейчас сделать." +#: src/conf.py:377 +msgid "" +"Determines what password will be used on %s. Yes, we know that\n" +" technically passwords are server-specific and not network-specific,\n" +" but this is the best we can do right now." +msgstr "" +"Определяет, какой пароль будет использован в %s. Да, мы понимаем, что " +"технически пароли задаются для серверов, а не сетей, но это лучшее, что мы " +"можем сейчас сделать." -msgid "Space-separated list of servers the bot will connect to for %s.\n Each will be tried in order, wrapping back to the first when the cycle\n is completed." -msgstr "Список серверов %s, разделённых пробелами, к которым бот будет подключаться. Каждый из них будет опробован по порядку, возвращаясь к первому, когда цикл будет завершен." +#: src/conf.py:381 +msgid "" +"Space-separated list of servers the bot will connect to for %s.\n" +" Each will be tried in order, wrapping back to the first when the " +"cycle\n" +" is completed." +msgstr "" +"Список серверов %s, разделённых пробелами, к которым бот будет подключаться. " +"Каждый из них будет опробован по порядку, возвращаясь к первому, когда цикл " +"будет завершен." +#: src/conf.py:385 msgid "Space-separated list of channels the bot will join only on %s." -msgstr "Список каналов, разделённых пробелами, к которым бот присоединится в %s." +msgstr "" +"Список каналов, разделённых пробелами, к которым бот присоединится в %s." -msgid "Determines whether the bot will attempt to connect with SSL\n sockets to %s." +#: src/conf.py:389 +msgid "" +"Determines whether the bot will attempt to connect with SSL\n" +" sockets to %s." msgstr "Определяет, будет ли бот подключаться с помощью SSL к %s." -msgid "Space-separated list\n of fingerprints of trusted certificates for this network.\n Supported hash algorithms are: %L.\n If non-empty, Certification Authority signatures will not be used to\n verify certificates." -msgstr "Список отпечатков доверенных сертификатов через пробел. Поддерживаемые алгоритмы хэширования: %L. Если эта настройка указана, то подписи центра сертификации не будут учитываться для проверки сертификатов." +#: src/conf.py:392 +msgid "" +"Space-separated list\n" +" of fingerprints of trusted certificates for this network.\n" +" Supported hash algorithms are: %L.\n" +" If non-empty, Certification Authority signatures will not be used " +"to\n" +" verify certificates." +msgstr "" +"Список отпечатков доверенных сертификатов через пробел. Поддерживаемые " +"алгоритмы хэширования: %L. Если эта настройка указана, то подписи центра " +"сертификации не будут учитываться для проверки сертификатов." -msgid "A certificate that is trusted to verify\n certificates of this network (aka. Certificate Authority)." -msgstr "Доверенный сертификат, который используют для проверки сертификатов данной сети (как центр сертификации)." +#: src/conf.py:398 +msgid "" +"A certificate that is trusted to verify\n" +" certificates of this network (aka. Certificate Authority)." +msgstr "" +"Доверенный сертификат, который используют для проверки сертификатов данной " +"сети (как центр сертификации)." +#: src/conf.py:401 msgid "Deprecated config value, keep it to False." msgstr "Устаревшая настройка, оставьте её False." -msgid "Determines what certificate file (if any) the bot will use to\n connect with SSL sockets to %s." -msgstr "Определяет файл сертификата (если такой есть), который бот будет использовать для подключения к %s по SSL." +#: src/conf.py:404 +msgid "" +"Determines what certificate file (if any) the bot will use to\n" +" connect with SSL sockets to %s." +msgstr "" +"Определяет файл сертификата (если такой есть), который бот будет " +"использовать для подключения к %s по SSL." -msgid "Determines what key (if any) will be used to join the\n channel." -msgstr "Определяет какой ключ (если есть) будет использован для присоединения к каналу." +#: src/conf.py:407 +msgid "" +"Determines what key (if any) will be used to join the\n" +" channel." +msgstr "" +"Определяет какой ключ (если есть) будет использован для присоединения к " +"каналу." -msgid "Determines\n what nick the bot will use on this network. If empty, defaults to\n supybot.nick." -msgstr "Определяет, какой ник будет использовать бот в этой сети. Если не указано, то используется supybot.nick." +#: src/conf.py:409 +msgid "" +"Determines\n" +" what nick the bot will use on this network. If empty, defaults to\n" +" supybot.nick." +msgstr "" +"Определяет, какой ник будет использовать бот в этой сети. Если не указано, " +"то используется supybot.nick." -msgid "Determines\n the bot's ident string, if the server doesn't provide one by default.\n If empty, defaults to supybot.ident." -msgstr "Определяет ident-строку для бота, если сервер не предоставляет её по умолчанию. Если не указано, то используется supybot.ident." +#: src/conf.py:412 +msgid "" +"Determines\n" +" the bot's ident string, if the server doesn't provide one by " +"default.\n" +" If empty, defaults to supybot.ident." +msgstr "" +"Определяет ident-строку для бота, если сервер не предоставляет её по " +"умолчанию. Если не указано, то используется supybot.ident." -msgid "Determines\n the real name which the bot sends to the server. If empty, defaults to\n supybot.user" -msgstr "Определяет настоящее имя (real name), которое бот отсылает серверу. Если не указано, то используется supybot.user." +#: src/conf.py:415 +msgid "" +"Determines\n" +" the real name which the bot sends to the server. If empty, defaults " +"to\n" +" supybot.user" +msgstr "" +"Определяет настоящее имя (real name), которое бот отсылает серверу. Если не " +"указано, то используется supybot.user." -msgid "Determines what user modes the bot will request\n from the server when it first connects. If empty, defaults to\n supybot.protocols.irc.umodes" -msgstr "Определяет, какие режимы пользователя бот будет запрашивать у сервера, когда впервые присоединится. Если не указано, то используется supybot.protocols.irc.umodes." +#: src/conf.py:419 +msgid "" +"Determines what user modes the bot will request\n" +" from the server when it first connects. If empty, defaults to\n" +" supybot.protocols.irc.umodes" +msgstr "" +"Определяет, какие режимы пользователя бот будет запрашивать у сервера, когда " +"впервые присоединится. Если не указано, то используется supybot.protocols." +"irc.umodes." -msgid "Determines what SASL username will be used on %s. This should\n be the bot's account name." -msgstr "Определяет имя пользователя для SASL, которое будет использоваться в %s. Это должно быть именем аккаунта бота." +#: src/conf.py:424 +msgid "" +"Determines what SASL username will be used on %s. This should\n" +" be the bot's account name." +msgstr "" +"Определяет имя пользователя для SASL, которое будет использоваться в %s. Это " +"должно быть именем аккаунта бота." +#: src/conf.py:427 msgid "Determines what SASL password will be used on %s." msgstr "Определяет пароль SASL, который будет использован в %s." -msgid "Determines what SASL ECDSA key (if any) will be used on %s.\n The public key must be registered with NickServ for SASL\n ECDSA-NIST256P-CHALLENGE to work." -msgstr "Определяет, какой SASL ECDSA ключ (если существует) будет использован в %s. Публичный ключ должен быть зарегистрирован с помощью NickServ для SASL ECDSA-NIST256P-CHALLENGE, чтобы это работало." +#: src/conf.py:430 +msgid "" +"Determines what SASL ECDSA key (if any) will be used on %s.\n" +" The public key must be registered with NickServ for SASL\n" +" ECDSA-NIST256P-CHALLENGE to work." +msgstr "" +"Определяет, какой SASL ECDSA ключ (если существует) будет использован в %s. " +"Публичный ключ должен быть зарегистрирован с помощью NickServ для SASL ECDSA-" +"NIST256P-CHALLENGE, чтобы это работало." -msgid "Determines what SASL mechanisms will be tried and in which order.\n " -msgstr "Определяет, в каком порядке и какие механизмы SASL должны быть опробованы." +#: src/conf.py:435 +msgid "" +"Determines what SASL mechanisms will be tried and in which order.\n" +" " +msgstr "" +"Определяет, в каком порядке и какие механизмы SASL должны быть опробованы." -msgid "Determines whether the bot will abort the connection if the\n none of the enabled SASL mechanism succeeded." -msgstr "Определяет, будет ли бот разрывать соединение, если ни один из включённых механизмов SASL не сработал успешно." +#: src/conf.py:438 +msgid "" +"Determines whether the bot will abort the connection if the\n" +" none of the enabled SASL mechanism succeeded." +msgstr "" +"Определяет, будет ли бот разрывать соединение, если ни один из включённых " +"механизмов SASL не сработал успешно." -msgid "If not empty, determines the hostname:port of the socks proxy that\n will be used to connect to this network." -msgstr "Если указано, то определяет хост:порт socks-прокси, которое будет использовать для подключения к этой сети." +#: src/conf.py:441 +msgid "" +"If not empty, determines the hostname:port of the socks proxy that\n" +" will be used to connect to this network." +msgstr "" +"Если указано, то определяет хост:порт socks-прокси, которое будет " +"использовать для подключения к этой сети." +#: src/conf.py:461 msgid "Determines how urls should be formatted." msgstr "Определяет форматирование url-адресов." -msgid "Determines how timestamps\n printed for human reading should be formatted. Refer to the Python\n documentation for the time module to see valid formatting characters for\n time formats." -msgstr "Определяет формат временных меток, чтобы быть понятными людям. Обратитесь к модулю time в документации Python, чтобы увидеть допустимые символы для форматирования." +#: src/conf.py:469 +msgid "" +"Determines how timestamps\n" +" printed for human reading should be formatted. Refer to the Python\n" +" documentation for the time module to see valid formatting characters " +"for\n" +" time formats." +msgstr "" +"Определяет формат временных меток, чтобы быть понятными людям. Обратитесь к " +"модулю time в документации Python, чтобы увидеть допустимые символы для " +"форматирования." -msgid "Determines whether elapsed times will be given\n as \"1 day, 2 hours, 3 minutes, and 15 seconds\" or as \"1d 2h 3m 15s\"." -msgstr "Определяет, как будет указано прошедшее время: \"1 день, 2 часа, 3 минуты, и 15 секунд\" или \"1д 2ч 3м 15с\"." +#: src/conf.py:484 +msgid "" +"Determines whether elapsed times will be given\n" +" as \"1 day, 2 hours, 3 minutes, and 15 seconds\" or as \"1d 2h 3m 15s\"." +msgstr "" +"Определяет, как будет указано прошедшее время: \"1 день, 2 часа, 3 минуты, и " +"15 секунд\" или \"1д 2ч 3м 15с\"." -msgid "Maximum number of items in a list\n before the end is replaced with 'and others'. Set to 0 to always\n show the entire list." -msgstr "Максимальное число позиций в списке, которые показываются до надписи 'и другие'. При установке значения в 0 всегда будет показываться весь список." +#: src/conf.py:495 +msgid "" +"Maximum number of items in a list\n" +" before the end is replaced with 'and others'. Set to 0 to always\n" +" show the entire list." +msgstr "" +"Максимальное число позиций в списке, которые показываются до надписи 'и " +"другие'. При установке значения в 0 всегда будет показываться весь список." +#: src/conf.py:512 #, fuzzy msgid "other" msgstr "другие" -msgid "Determines the absolute maximum length of\n the bot's reply -- no reply will be passed through the bot with a length\n greater than this." -msgstr "Определяет абсолютный максимум длины ответа бота -- ботом не будут отправлены ответы длиннее указанного значения." +#: src/conf.py:517 +msgid "" +"Determines the absolute maximum length of\n" +" the bot's reply -- no reply will be passed through the bot with a " +"length\n" +" greater than this." +msgstr "" +"Определяет абсолютный максимум длины ответа бота -- ботом не будут " +"отправлены ответы длиннее указанного значения." -msgid "Determines whether the bot will break up long\n messages into chunks and allow users to use the 'more' command to get the\n remaining chunks." -msgstr "Определяет, будет ли бот разбивать длинные сообщения на части и позволять пользователям использовать команду 'more', чтобы получить оставшиеся части сообщения." +#: src/conf.py:522 +msgid "" +"Determines whether the bot will break up long\n" +" messages into chunks and allow users to use the 'more' command to get " +"the\n" +" remaining chunks." +msgstr "" +"Определяет, будет ли бот разбивать длинные сообщения на части и позволять " +"пользователям использовать команду 'more', чтобы получить оставшиеся части " +"сообщения." -msgid "Determines what the maximum number of\n chunks (for use with the 'more' command) will be." -msgstr "Определяет максимальное число частей сообщения (для использования команды 'more')." +#: src/conf.py:527 +msgid "" +"Determines what the maximum number of\n" +" chunks (for use with the 'more' command) will be." +msgstr "" +"Определяет максимальное число частей сообщения (для использования команды " +"'more')." -msgid "Determines how long individual chunks\n will be. If set to 0, uses our super-tweaked,\n get-the-most-out-of-an-individual-message default." -msgstr "Определяет длину отдельных частей сообщения. Если установлено в 0, то используется наше значение по умолчанию." +#: src/conf.py:531 +msgid "" +"Determines how long individual chunks\n" +" will be. If set to 0, uses our super-tweaked,\n" +" get-the-most-out-of-an-individual-message default." +msgstr "" +"Определяет длину отдельных частей сообщения. Если установлено в 0, то " +"используется наше значение по умолчанию." -msgid "Determines how many mores will be sent\n instantly (i.e., without the use of the more command, immediately when\n they are formed). Defaults to 1, which means that a more command will be\n required for all but the first chunk." -msgstr "Определяет сколько ещё частей сообщения будет отправлено сразу, т.е. без использования команды 'more', сразу после того, как команда выполнилась. По умолчанию задано 1, что означает, что для получения каждой части сообщения нужен будет вызов команды 'more'." +#: src/conf.py:536 +msgid "" +"Determines how many mores will be sent\n" +" instantly (i.e., without the use of the more command, immediately when\n" +" they are formed). Defaults to 1, which means that a more command will " +"be\n" +" required for all but the first chunk." +msgstr "" +"Определяет сколько ещё частей сообщения будет отправлено сразу, т.е. без " +"использования команды 'more', сразу после того, как команда выполнилась. По " +"умолчанию задано 1, что означает, что для получения каждой части сообщения " +"нужен будет вызов команды 'more'." -msgid "Determines whether the bot will send\n multi-message replies in a single message. This defaults to True \n in order to prevent the bot from flooding. If this is set to False\n the bot will send multi-message replies on multiple lines." -msgstr "Определяет, будет ли бот отправлять ответы сразу на несколько сообщений в одном сообщении. По умолчанию установлено в True для предотвращения переполнения бота. Если установлено в False, то бот будет отправлять ответы в отдельных сообщениях." +#: src/conf.py:542 +msgid "" +"Determines whether the bot will send\n" +" multi-message replies in a single message. This defaults to True \n" +" in order to prevent the bot from flooding. If this is set to False\n" +" the bot will send multi-message replies on multiple lines." +msgstr "" +"Определяет, будет ли бот отправлять ответы сразу на несколько сообщений в " +"одном сообщении. По умолчанию установлено в True для предотвращения " +"переполнения бота. Если установлено в False, то бот будет отправлять ответы " +"в отдельных сообщениях." -msgid "Determines whether the bot will reply with an\n error message when it is addressed but not given a valid command. If this\n value is False, the bot will remain silent, as long as no other plugins\n override the normal behavior." -msgstr "Определяет, будет ли бот отвечать сообщением об ошибке, если ему дали неправильную команду. Если указано False, то в этих случаях бот будет молчать, если другие плагины не изменят это поведение." +#: src/conf.py:548 +msgid "" +"Determines whether the bot will reply with an\n" +" error message when it is addressed but not given a valid command. If " +"this\n" +" value is False, the bot will remain silent, as long as no other plugins\n" +" override the normal behavior." +msgstr "" +"Определяет, будет ли бот отвечать сообщением об ошибке, если ему дали " +"неправильную команду. Если указано False, то в этих случаях бот будет " +"молчать, если другие плагины не изменят это поведение." -msgid "Determines whether error messages that result\n from bugs in the bot will show a detailed error message (the uncaught\n exception) or a generic error message." -msgstr "Определяет, будут ли сообщения об ошибках в результате багов содержать подробное сообщение об ошибке (не перехваченное исключение)." +#: src/conf.py:555 +msgid "" +"Determines whether error messages that result\n" +" from bugs in the bot will show a detailed error message (the uncaught\n" +" exception) or a generic error message." +msgstr "" +"Определяет, будут ли сообщения об ошибках в результате багов содержать " +"подробное сообщение об ошибке (не перехваченное исключение)." -msgid "Determines whether the bot will send error\n messages to users in private. You might want to do this in order to keep\n channel traffic to minimum. This can be used in combination with\n supybot.reply.error.withNotice." -msgstr "Определяет, будет ли бот отправлять сообщения об ошибках в личные сообщения пользователям. Возможно вы захотите использовать эту настройку, чтобы свести сообщения в канале к минимуму. Это может быть использовано в сочетании с supybot.reply.error.withNotice." +#: src/conf.py:559 +msgid "" +"Determines whether the bot will send error\n" +" messages to users in private. You might want to do this in order to " +"keep\n" +" channel traffic to minimum. This can be used in combination with\n" +" supybot.reply.error.withNotice." +msgstr "" +"Определяет, будет ли бот отправлять сообщения об ошибках в личные сообщения " +"пользователям. Возможно вы захотите использовать эту настройку, чтобы свести " +"сообщения в канале к минимуму. Это может быть использовано в сочетании с " +"supybot.reply.error.withNotice." -msgid "Determines whether the bot will send error\n messages to users via NOTICE instead of PRIVMSG. You might want to do this\n so users can ignore NOTICEs from the bot and not have to see error\n messages; or you might want to use it in combination with\n supybot.reply.error.inPrivate so private errors don't open a query window\n in most IRC clients." -msgstr "Определяет, будет ли бот отправлять сообщение об ошибке пользователям через NOTICE вместо PRIVMSG. Эта настройка полезна, чтобы пользователи просто могли игнорировать NOTICE от бота и не видеть сообщение об ошибке; а также полезно при использовании в комбинации supybot.reply.error.inPrivate, тогда ошибки в личных сообщениях не будут создавать новое окно переписки в большинстве IRC-клиентов." +#: src/conf.py:564 +msgid "" +"Determines whether the bot will send error\n" +" messages to users via NOTICE instead of PRIVMSG. You might want to do " +"this\n" +" so users can ignore NOTICEs from the bot and not have to see error\n" +" messages; or you might want to use it in combination with\n" +" supybot.reply.error.inPrivate so private errors don't open a query " +"window\n" +" in most IRC clients." +msgstr "" +"Определяет, будет ли бот отправлять сообщение об ошибке пользователям через " +"NOTICE вместо PRIVMSG. Эта настройка полезна, чтобы пользователи просто " +"могли игнорировать NOTICE от бота и не видеть сообщение об ошибке; а также " +"полезно при использовании в комбинации supybot.reply.error.inPrivate, тогда " +"ошибки в личных сообщениях не будут создавать новое окно переписки в " +"большинстве IRC-клиентов." -msgid "Determines whether the bot will *not* provide\n details in the error\n message to users who attempt to call a command for which they do not have\n the necessary capability. You may wish to make this True if you don't want\n users to understand the underlying security system preventing them from\n running certain commands." -msgstr "Определяет, будет ли бот *НЕ* предоставлять подробную информацию об ошибке пользователям, попытавшимся вызвать команду, для которой у них отсутствуют нужные привилегии. Возможно вы захотите указать True, чтобы пользователи не смогли понять устройство системы безопасности, не позволяющую им выполнять привилегированные команды." +#: src/conf.py:571 +msgid "" +"Determines whether the bot will *not* provide\n" +" details in the error\n" +" message to users who attempt to call a command for which they do not " +"have\n" +" the necessary capability. You may wish to make this True if you don't " +"want\n" +" users to understand the underlying security system preventing them from\n" +" running certain commands." +msgstr "" +"Определяет, будет ли бот *НЕ* предоставлять подробную информацию об ошибке " +"пользователям, попытавшимся вызвать команду, для которой у них отсутствуют " +"нужные привилегии. Возможно вы захотите указать True, чтобы пользователи не " +"смогли понять устройство системы безопасности, не позволяющую им выполнять " +"привилегированные команды." -msgid "Determines whether the bot will reply\n privately when replying in a channel, rather than replying to the whole\n channel." -msgstr "Определяет, будет ли бот отвечать в личный диалог на сообщение, а не в самом канале." +#: src/conf.py:579 +msgid "" +"Determines whether the bot will reply\n" +" privately when replying in a channel, rather than replying to the " +"whole\n" +" channel." +msgstr "" +"Определяет, будет ли бот отвечать в личный диалог на сообщение, а не в самом " +"канале." -msgid "Determines whether the bot will reply with a\n notice when replying in a channel, rather than replying with a privmsg as\n normal." -msgstr "Определяет, будет ли бот отвечать на сообщение в канале через NOTICE, нежели через PRIVMSG как обычно." +#: src/conf.py:584 +msgid "" +"Determines whether the bot will reply with a\n" +" notice when replying in a channel, rather than replying with a privmsg " +"as\n" +" normal." +msgstr "" +"Определяет, будет ли бот отвечать на сообщение в канале через NOTICE, нежели " +"через PRIVMSG как обычно." -msgid "Determines whether the bot will reply with a\n notice when it is sending a private message, in order not to open a /query\n window in clients." -msgstr "Определяет, будет ли бот отвечать на личное сообщение через NOTICE, чтобы не открывать /query окно на клиентах." +#: src/conf.py:590 +msgid "" +"Determines whether the bot will reply with a\n" +" notice when it is sending a private message, in order not to open a /" +"query\n" +" window in clients." +msgstr "" +"Определяет, будет ли бот отвечать на личное сообщение через NOTICE, чтобы не " +"открывать /query окно на клиентах." -msgid "Determines whether the bot will always prefix\n the user's nick to its reply to that user's command." -msgstr "Определяет, будет ли бот использовать ник пользователя в качестве префикса к своему ответу на команду пользователя." +#: src/conf.py:595 +msgid "" +"Determines whether the bot will always prefix\n" +" the user's nick to its reply to that user's command." +msgstr "" +"Определяет, будет ли бот использовать ник пользователя в качестве префикса к " +"своему ответу на команду пользователя." -msgid "Determines whether the bot should attempt to\n reply to all messages even if they don't address it (either via its nick\n or a prefix character). If you set this to True, you almost certainly want\n to set supybot.reply.whenNotCommand to False." -msgstr "Определяет, должен ли бот отвечать на любое сообщение независимо от того, адресовано ли оно ему (либо с помощью ника, либо с помощью символ-префикса). Если вы укажите True, то вы точно захотите установить и supybot.reply.whenNotCommand в False." +#: src/conf.py:599 +msgid "" +"Determines whether the bot should attempt to\n" +" reply to all messages even if they don't address it (either via its " +"nick\n" +" or a prefix character). If you set this to True, you almost certainly " +"want\n" +" to set supybot.reply.whenNotCommand to False." +msgstr "" +"Определяет, должен ли бот отвечать на любое сообщение независимо от того, " +"адресовано ли оно ему (либо с помощью ника, либо с помощью символ-префикса). " +"Если вы укажите True, то вы точно захотите установить и supybot.reply." +"whenNotCommand в False." -msgid "Determines whether the bot will allow you to\n send channel-related commands outside of that channel. Sometimes people\n find it confusing if a channel-related command (like Filter.outfilter)\n changes the behavior of the channel but was sent outside the channel\n itself." -msgstr "Определяет, будет ли бот позволять вам отправлять команды, относящиеся к каналу, за его пределами. Людей может вводить в заблуждение, если какая-то команда, которая меняет поведение канала (например, Filter.outfilter), была отправлена вне этого самого канала." +#: src/conf.py:605 +msgid "" +"Determines whether the bot will allow you to\n" +" send channel-related commands outside of that channel. Sometimes " +"people\n" +" find it confusing if a channel-related command (like Filter.outfilter)\n" +" changes the behavior of the channel but was sent outside the channel\n" +" itself." +msgstr "" +"Определяет, будет ли бот позволять вам отправлять команды, относящиеся к " +"каналу, за его пределами. Людей может вводить в заблуждение, если какая-то " +"команда, которая меняет поведение канала (например, Filter.outfilter), была " +"отправлена вне этого самого канала." -msgid "Determines whether the bot will unidentify\n someone when that person changes their nick. Setting this to True\n will cause the bot to track such changes. It defaults to False for a\n little greater security." -msgstr "Определяет, будет ли бот идентифицировать пользователя при смене его ника. Если установить значение в True, то бот будет отслеживать такие изменения. По умолчанию для большей безопасности значение - False." +#: src/conf.py:612 +msgid "" +"Determines whether the bot will unidentify\n" +" someone when that person changes their nick. Setting this to True\n" +" will cause the bot to track such changes. It defaults to False for a\n" +" little greater security." +msgstr "" +"Определяет, будет ли бот идентифицировать пользователя при смене его ника. " +"Если установить значение в True, то бот будет отслеживать такие изменения. " +"По умолчанию для большей безопасности значение - False." -msgid "Determines whether the bot will always join a\n channel when it's invited. If this value is False, the bot will only join\n a channel if the user inviting it has the 'admin' capability (or if it's\n explicitly told to join the channel using the Admin.join command)." -msgstr "Определяет, будет ли бот всегда присоединятся к каналу, куда он был приглашён. Если указано False, то бот будет присоединяться к каналам по приглашению только, если приглашающий пользователь имеет привилегию 'admin' (или если боту явно дана команда присоединиться к каналу с помощью Admin.join)." +#: src/conf.py:618 +msgid "" +"Determines whether the bot will always join a\n" +" channel when it's invited. If this value is False, the bot will only " +"join\n" +" a channel if the user inviting it has the 'admin' capability (or if " +"it's\n" +" explicitly told to join the channel using the Admin.join command)." +msgstr "" +"Определяет, будет ли бот всегда присоединятся к каналу, куда он был " +"приглашён. Если указано False, то бот будет присоединяться к каналам по " +"приглашению только, если приглашающий пользователь имеет привилегию 'admin' " +"(или если боту явно дана команда присоединиться к каналу с помощью Admin." +"join)." -msgid "Supybot normally replies with the full help\n whenever a user misuses a command. If this value is set to True, the bot\n will only reply with the syntax of the command (the first line of the\n help) rather than the full help." -msgstr "Обычно Supybot отвечает полной справкой в случае неправильного использования команды пользователем. Если указано True, то бот ответит только справкой о синтаксисе команды (первая строка справки) вместо полной справки." +#: src/conf.py:624 +msgid "" +"Supybot normally replies with the full help\n" +" whenever a user misuses a command. If this value is set to True, the " +"bot\n" +" will only reply with the syntax of the command (the first line of the\n" +" help) rather than the full help." +msgstr "" +"Обычно Supybot отвечает полной справкой в случае неправильного использования " +"команды пользователем. Если указано True, то бот ответит только справкой о " +"синтаксисе команды (первая строка справки) вместо полной справки." -msgid "Determines what prefix characters the bot will\n reply to. A prefix character is a single character that the bot will use\n to determine what messages are addressed to it; when there are no prefix\n characters set, it just uses its nick. Each character in this string is\n interpreted individually; you can have multiple prefix chars\n simultaneously, and if any one of them is used as a prefix the bot will\n assume it is being addressed." -msgstr "Определяет символ-префиксы, на которые бот будет отзываться. Символ-префикс - это символ, который бот будет использовать для определения сообщений, адресованных ему, а если символов-префиксов не указано, то бот использует свой ник. Каждый символ в строке считывается как символ-префикс, поэтому у бота их может быть несколько, и на все он будет отзываться." +#: src/conf.py:639 +msgid "" +"Determines what prefix characters the bot will\n" +" reply to. A prefix character is a single character that the bot will " +"use\n" +" to determine what messages are addressed to it; when there are no " +"prefix\n" +" characters set, it just uses its nick. Each character in this string " +"is\n" +" interpreted individually; you can have multiple prefix chars\n" +" simultaneously, and if any one of them is used as a prefix the bot will\n" +" assume it is being addressed." +msgstr "" +"Определяет символ-префиксы, на которые бот будет отзываться. Символ-префикс " +"- это символ, который бот будет использовать для определения сообщений, " +"адресованных ему, а если символов-префиксов не указано, то бот использует " +"свой ник. Каждый символ в строке считывается как символ-префикс, поэтому у " +"бота их может быть несколько, и на все он будет отзываться." -msgid "Determines what strings the\n bot will reply to when they are at the beginning of the message. Whereas\n prefix.chars can only be one character (although there can be many of\n them), this variable is a space-separated list of strings, so you can\n set something like '@@ ??' and the bot will reply when a message is\n prefixed by either @@ or ??." -msgstr "Определяет строки, на которые бот будет отзываться, если те находятся в начале сообщения. Если prefix.chars может быть только одним символом (хотя их может быть несколько), то эта настройка является списком строк через пробел, поэтому вы можете указать что-то вроде '@@ ??', и бот будет отвечать на все сообщения, если у них будет в начале @@ или ??." +#: src/conf.py:648 +msgid "" +"Determines what strings the\n" +" bot will reply to when they are at the beginning of the message. " +"Whereas\n" +" prefix.chars can only be one character (although there can be many of\n" +" them), this variable is a space-separated list of strings, so you can\n" +" set something like '@@ ??' and the bot will reply when a message is\n" +" prefixed by either @@ or ??." +msgstr "" +"Определяет строки, на которые бот будет отзываться, если те находятся в " +"начале сообщения. Если prefix.chars может быть только одним символом (хотя " +"их может быть несколько), то эта настройка является списком строк через " +"пробел, поэтому вы можете указать что-то вроде '@@ ??', и бот будет отвечать " +"на все сообщения, если у них будет в начале @@ или ??." -msgid "Determines whether the bot will reply when\n people address it by its nick, rather than with a prefix character." -msgstr "Определяет, будет ли бот отвечать людям, если те вызывают его через его ник, а не через символ-префикс." +#: src/conf.py:655 +msgid "" +"Determines whether the bot will reply when\n" +" people address it by its nick, rather than with a prefix character." +msgstr "" +"Определяет, будет ли бот отвечать людям, если те вызывают его через его ник, " +"а не через символ-префикс." -msgid "Determines whether the bot will reply when\n people address it by its nick at the end of the message, rather than at\n the beginning." -msgstr "Определяет, будет ли бот отвечать, когда люди вызывают его по нику в конце сообщения, а не в начале." +#: src/conf.py:658 +msgid "" +"Determines whether the bot will reply when\n" +" people address it by its nick at the end of the message, rather than at\n" +" the beginning." +msgstr "" +"Определяет, будет ли бот отвечать, когда люди вызывают его по нику в конце " +"сообщения, а не в начале." -msgid "Determines what extra nicks\n the bot will always respond to when addressed by, even if its current nick\n is something else." -msgstr "Определяет дополнительные ники, на которые бот всегда будет отзываться, даже если его текущий ник отличается." +#: src/conf.py:662 +msgid "" +"Determines what extra nicks\n" +" the bot will always respond to when addressed by, even if its current " +"nick\n" +" is something else." +msgstr "" +"Определяет дополнительные ники, на которые бот всегда будет отзываться, даже " +"если его текущий ник отличается." +#: src/conf.py:672 msgid "The operation succeeded." msgstr "Операция прошла успешно." -msgid "Determines what message the bot replies with when a command succeeded.\n If this configuration variable is empty, no success message will be\n sent." -msgstr "Определяет содержание сообщения, которым бот отвечает в случае успешного выполнения команды. Если эта настройка пуста, то сообщение не будет отправлено." +#: src/conf.py:673 +msgid "" +"Determines what message the bot replies with when a command succeeded.\n" +" If this configuration variable is empty, no success message will be\n" +" sent." +msgstr "" +"Определяет содержание сообщения, которым бот отвечает в случае успешного " +"выполнения команды. Если эта настройка пуста, то сообщение не будет " +"отправлено." -msgid "An error has occurred and has been logged.\n Please contact this bot's administrator for more information." -msgstr "Произошла ошибка, записана в журнал. Пожалуйста, свяжитесь с админом этого бота для получения доп. информации." +#: src/conf.py:678 +msgid "" +"An error has occurred and has been logged.\n" +" Please contact this bot's administrator for more information." +msgstr "" +"Произошла ошибка, записана в журнал. Пожалуйста, свяжитесь с админом этого " +"бота для получения доп. информации." -msgid "\n Determines what error message the bot gives when it wants to be\n ambiguous." -msgstr "Определяет содержание общего сообщения об ошибке, которым бот отвечает на не выполнившиеся команды." +#: src/conf.py:679 +msgid "" +"\n" +" Determines what error message the bot gives when it wants to be\n" +" ambiguous." +msgstr "" +"Определяет содержание общего сообщения об ошибке, которым бот отвечает на не " +"выполнившиеся команды." -msgid "An error has occurred and has been logged.\n Check the logs for more information." -msgstr "Произошла ошибка, записана в журнал. Проверьте его для дополнительной информации." +#: src/conf.py:684 +msgid "" +"An error has occurred and has been logged.\n" +" Check the logs for more information." +msgstr "" +"Произошла ошибка, записана в журнал. Проверьте его для дополнительной " +"информации." -msgid "Determines what error\n message the bot gives to the owner when it wants to be ambiguous." -msgstr "Определяет, какое сообщение об ошибке бот выдает владельцу, если оно неоднозначное." +#: src/conf.py:685 +msgid "" +"Determines what error\n" +" message the bot gives to the owner when it wants to be ambiguous." +msgstr "" +"Определяет, какое сообщение об ошибке бот выдает владельцу, если оно " +"неоднозначное." -msgid "Your hostmask doesn't match or your password\n is wrong." +#: src/conf.py:689 +msgid "" +"Your hostmask doesn't match or your password\n" +" is wrong." msgstr "Ваша маска хоста не совпадает, или ваш пароль неверный." +#: src/conf.py:690 #, fuzzy -msgid "Determines what message the bot replies with when\n someone tries to use a command that requires being identified or having a\n password and neither credential is correct." -msgstr "Определяет содержание сообщения, которым бот отвечает, когда кто-то пытается использовать команду, требующую идентификации или наличия пароля." +msgid "" +"Determines what message the bot replies with when\n" +" someone tries to use a command that requires being identified or having " +"a\n" +" password and neither credential is correct." +msgstr "" +"Определяет содержание сообщения, которым бот отвечает, когда кто-то пытается " +"использовать команду, требующую идентификации или наличия пароля." -msgid "I can't find %s in my user\n database. If you didn't give a user name, then I might not know what your\n user is, and you'll need to identify before this command might work." -msgstr "Я не могу найти %s в мой базе данных пользователей. Если вы не указали имя пользователя, то возможно я вас не знаю, и вам необходимо идентифицироваться, прежде чем эта команда сможет быть выполнена." +#: src/conf.py:696 +msgid "" +"I can't find %s in my user\n" +" database. If you didn't give a user name, then I might not know what " +"your\n" +" user is, and you'll need to identify before this command might work." +msgstr "" +"Я не могу найти %s в мой базе данных пользователей. Если вы не указали имя " +"пользователя, то возможно я вас не знаю, и вам необходимо " +"идентифицироваться, прежде чем эта команда сможет быть выполнена." -msgid "Determines what error message the bot replies with when someone tries\n to accessing some information on a user the bot doesn't know about." -msgstr "Определяет содержание сообщения об ошибке, которым бот отвечает, если кто-то пытается получить какую-либо информацию о пользователе, неизвестном боту." +#: src/conf.py:699 +msgid "" +"Determines what error message the bot replies with when someone tries\n" +" to accessing some information on a user the bot doesn't know about." +msgstr "" +"Определяет содержание сообщения об ошибке, которым бот отвечает, если кто-то " +"пытается получить какую-либо информацию о пользователе, неизвестном боту." -msgid "You must be registered to use this command.\n If you are already registered, you must either identify (using the identify\n command) or add a hostmask matching your current hostmask (using the\n \"hostmask add\" command)." -msgstr "Вы должны быть зарегистрированы для использования этой команды. Если вы уже зарегистрированы, то вы должны идентифицироваться, используя команду identify, или добавить хост-маску, совпадающую с вашей текущей, используя команду \"hostmask add\"." +#: src/conf.py:703 +msgid "" +"You must be registered to use this command.\n" +" If you are already registered, you must either identify (using the " +"identify\n" +" command) or add a hostmask matching your current hostmask (using the\n" +" \"hostmask add\" command)." +msgstr "" +"Вы должны быть зарегистрированы для использования этой команды. Если вы уже " +"зарегистрированы, то вы должны идентифицироваться, используя команду " +"identify, или добавить хост-маску, совпадающую с вашей текущей, используя " +"команду \"hostmask add\"." -msgid "Determines what error message the bot\n replies with when someone tries to do something that requires them to be\n registered but they're not currently recognized." -msgstr "Определяет содержание сообщение об ошибке, которым бот отвечает, когда кто-то пытается выполнить команду, требующую регистрации, но бот его не помнит." +#: src/conf.py:706 +msgid "" +"Determines what error message the bot\n" +" replies with when someone tries to do something that requires them to " +"be\n" +" registered but they're not currently recognized." +msgstr "" +"Определяет содержание сообщение об ошибке, которым бот отвечает, когда кто-" +"то пытается выполнить команду, требующую регистрации, но бот его не помнит." -msgid "You don't have the %s capability. If you\n think that you should have this capability, be sure that you are identified\n before trying again. The 'whoami' command can tell you if you're\n identified." -msgstr "У вас нет привилегии %s. Если вы считаете, что у вас должна быть такая привилегия, убедитесь, что в своей идентификации, прежде чем повторить попытку. Команда 'whoami' может сказать вам, идентифицированы ли вы." +#: src/conf.py:711 +msgid "" +"You don't have the %s capability. If you\n" +" think that you should have this capability, be sure that you are " +"identified\n" +" before trying again. The 'whoami' command can tell you if you're\n" +" identified." +msgstr "" +"У вас нет привилегии %s. Если вы считаете, что у вас должна быть такая " +"привилегия, убедитесь, что в своей идентификации, прежде чем повторить " +"попытку. Команда 'whoami' может сказать вам, идентифицированы ли вы." +#: src/conf.py:714 #, fuzzy -msgid "Determines what error message is given when the bot\n is telling someone they aren't cool enough to use the command they tried to\n use." -msgstr "Определяет содержание сообщения об ошибке, которым бот отвечает, если кто-то недостаточно крут для использования команды, которую тот пытался запустить." +msgid "" +"Determines what error message is given when the bot\n" +" is telling someone they aren't cool enough to use the command they tried " +"to\n" +" use." +msgstr "" +"Определяет содержание сообщения об ошибке, которым бот отвечает, если кто-то " +"недостаточно крут для использования команды, которую тот пытался запустить." -msgid "You're missing some capability you need.\n This could be because you actually possess the anti-capability for the\n capability that's required of you, or because the channel provides that\n anti-capability by default, or because the global capabilities include\n that anti-capability. Or, it could be because the channel or\n supybot.capabilities.default is set to False, meaning that no commands are\n allowed unless explicitly in your capabilities. Either way, you can't do\n what you want to do." -msgstr "Вам не хватает некоторых необходимых вам привилегий. Это может быть вызвано тем, что у вас есть антипривилегия к требуемой, или потому, что канал предоставляет эту антипривилегию по умолчанию, или потому, что глобальные привилегии предоставляют эту антипривилегию. Или это может быть связано с тем, что для канала или supybot.capabilities.default установлено значение False, что означает, что никакие команды не разрешены, если это явно не соответствует вашим возможностям. В любом случае вы не можете делать то, что хотите." +#: src/conf.py:719 +msgid "" +"You're missing some capability you need.\n" +" This could be because you actually possess the anti-capability for the\n" +" capability that's required of you, or because the channel provides that\n" +" anti-capability by default, or because the global capabilities include\n" +" that anti-capability. Or, it could be because the channel or\n" +" supybot.capabilities.default is set to False, meaning that no commands " +"are\n" +" allowed unless explicitly in your capabilities. Either way, you can't " +"do\n" +" what you want to do." +msgstr "" +"Вам не хватает некоторых необходимых вам привилегий. Это может быть вызвано " +"тем, что у вас есть антипривилегия к требуемой, или потому, что канал " +"предоставляет эту антипривилегию по умолчанию, или потому, что глобальные " +"привилегии предоставляют эту антипривилегию. Или это может быть связано с " +"тем, что для канала или supybot.capabilities.default установлено значение " +"False, что означает, что никакие команды не разрешены, если это явно не " +"соответствует вашим возможностям. В любом случае вы не можете делать то, что " +"хотите." -msgid "Determines what generic error message is given when the bot is telling\n someone that they aren't cool enough to use the command they tried to use,\n and the author of the code calling errorNoCapability didn't provide an\n explicit capability for whatever reason." -msgstr "Определяет содержание общего сообщения об ошибке, когда бот сообщает кому-либо, что он недостаточно крут, чтобы использовать эту команду, а автор кода, вызвавшего ошибку errorNoCapability, не предоставил явную информацию по какой-либо причине." +#: src/conf.py:727 +msgid "" +"Determines what generic error message is given when the bot is telling\n" +" someone that they aren't cool enough to use the command they tried to " +"use,\n" +" and the author of the code calling errorNoCapability didn't provide an\n" +" explicit capability for whatever reason." +msgstr "" +"Определяет содержание общего сообщения об ошибке, когда бот сообщает кому-" +"либо, что он недостаточно крут, чтобы использовать эту команду, а автор " +"кода, вызвавшего ошибку errorNoCapability, не предоставил явную информацию " +"по какой-либо причине." -msgid "That operation cannot be done in a\n channel." +#: src/conf.py:733 +msgid "" +"That operation cannot be done in a\n" +" channel." msgstr "Эта операция не может быть выполнена в канале." -msgid "Determines what error messages the bot sends to people\n who try to do things in a channel that really should be done in\n private." -msgstr "Определяет содержание сообщения об ошибке, которое бот отправляет людям, пытающимся сделать то, что должны делать в личной переписке." +#: src/conf.py:734 +msgid "" +"Determines what error messages the bot sends to people\n" +" who try to do things in a channel that really should be done in\n" +" private." +msgstr "" +"Определяет содержание сообщения об ошибке, которое бот отправляет людям, " +"пытающимся сделать то, что должны делать в личной переписке." -msgid "This may be a bug. If you think it is,\n please file a bug report at\n ." -msgstr "Возможно, что вы столкнулись ошибкой. Если это так, то, пожалуйста, сообщите о ней в ." +#: src/conf.py:739 +msgid "" +"This may be a bug. If you think it is,\n" +" please file a bug report at\n" +" ." +msgstr "" +"Возможно, что вы столкнулись ошибкой. Если это так, то, пожалуйста, сообщите " +"о ней в ." -msgid "Determines what message the bot sends when it thinks you've\n encountered a bug that the developers don't know about." -msgstr "Определяет содержание сообщения, которое отправит бот, если он посчитает, что вы столкнулись с ошибкой, неизвестной разработчикам." +#: src/conf.py:742 +msgid "" +"Determines what message the bot sends when it thinks you've\n" +" encountered a bug that the developers don't know about." +msgstr "" +"Определяет содержание сообщения, которое отправит бот, если он посчитает, " +"что вы столкнулись с ошибкой, неизвестной разработчикам." +#: src/conf.py:749 msgid "$Type #$id: $text (added by $username at $at)" msgstr "$Type #$id: $text (добавлено пользователем $username в $at)" -msgid "Format used by generic database plugins (Lart, Dunno, Prase, Success,\n Quote, ...) to show an entry. You can use the following variables:\n $type/$types/$Type/$Types (plugin name and variants), $id, $text,\n $at (creation time), $userid/$username/$nick (author)." -msgstr "Формат, используемый плагинами с генерируемыми базами данных, (Lart, Dunno, Prase, Success, Quote) для показа записей. Вы можете использовать следующие поля: $type/$types/$Type/$Types (название плагина и его варианты), $id, $text, $at (время создания), $userid/$username/$nick (автор)." +#: src/conf.py:750 +msgid "" +"Format used by generic database plugins (Lart, Dunno, Prase, Success,\n" +" Quote, ...) to show an entry. You can use the following variables:\n" +" $type/$types/$Type/$Types (plugin name and variants), $id, $text,\n" +" $at (creation time), $userid/$username/$nick (author)." +msgstr "" +"Формат, используемый плагинами с генерируемыми базами данных, (Lart, Dunno, " +"Prase, Success, Quote) для показа записей. Вы можете использовать следующие " +"поля: $type/$types/$Type/$Types (название плагина и его варианты), $id, " +"$text, $at (время создания), $userid/$username/$nick (автор)." +#: src/conf.py:760 #, fuzzy -msgid "A floating point number of seconds to throttle\n snarfed URLs, in order to prevent loops between two bots snarfing the same\n URLs and having the snarfed URL in the output of the snarf message." -msgstr "Дробное число секунд, которое используется для контроля скорости обработки перехваченных URL-адресов, чтобы избежать зацикливания между двумя ботами, перехватывающих одни и те же URL-адреса, и включения перехваченного URL-адреса в результат сообщения о перехвате." +msgid "" +"A floating point number of seconds to throttle\n" +" snarfed URLs, in order to prevent loops between two bots snarfing the " +"same\n" +" URLs and having the snarfed URL in the output of the snarf message." +msgstr "" +"Дробное число секунд, которое используется для контроля скорости обработки " +"перехваченных URL-адресов, чтобы избежать зацикливания между двумя ботами, " +"перехватывающих одни и те же URL-адреса, и включения перехваченного URL-" +"адреса в результат сообщения о перехвате." -msgid "Determines the number of seconds\n between running the upkeep function that flushes (commits) open databases,\n collects garbage, and records some useful statistics at the debugging\n level." -msgstr "Определяет количество секунд между запусками функции поддержки, которая записывает открытые базы данных, собирает мусор и журналирует некоторую полезную статистику на отладочном уровне." +#: src/conf.py:765 +msgid "" +"Determines the number of seconds\n" +" between running the upkeep function that flushes (commits) open " +"databases,\n" +" collects garbage, and records some useful statistics at the debugging\n" +" level." +msgstr "" +"Определяет количество секунд между запусками функции поддержки, которая " +"записывает открытые базы данных, собирает мусор и журналирует некоторую " +"полезную статистику на отладочном уровне." -msgid "Determines whether the bot will periodically\n flush data and configuration files to disk. Generally, the only time\n you'll want to set this to False is when you want to modify those\n configuration files by hand and don't want the bot to flush its current\n version over your modifications. Do note that if you change this to False\n inside the bot, your changes won't be flushed. To make this change\n permanent, you must edit the registry yourself." -msgstr "Определяет, будет ли бот периодически записывать данные и файлы настроек на диск. Как правило, вы захотите установить это значение в False, если вам нужно изменять настройки вручную без помех со стороны бота, записывающего свои настройки поверх ваших изменений. Однако, если вы вы измените это значение в False в самом боте, то вам придётся изменить конфиг самостоятельно, чтобы сделать это изменения постоянным." +#: src/conf.py:771 +msgid "" +"Determines whether the bot will periodically\n" +" flush data and configuration files to disk. Generally, the only time\n" +" you'll want to set this to False is when you want to modify those\n" +" configuration files by hand and don't want the bot to flush its current\n" +" version over your modifications. Do note that if you change this to " +"False\n" +" inside the bot, your changes won't be flushed. To make this change\n" +" permanent, you must edit the registry yourself." +msgstr "" +"Определяет, будет ли бот периодически записывать данные и файлы настроек на " +"диск. Как правило, вы захотите установить это значение в False, если вам " +"нужно изменять настройки вручную без помех со стороны бота, записывающего " +"свои настройки поверх ваших изменений. Однако, если вы вы измените это " +"значение в False в самом боте, то вам придётся изменить конфиг " +"самостоятельно, чтобы сделать это изменения постоянным." -msgid "Determines what characters are valid for quoting\n arguments to commands in order to prevent them from being tokenized.\n " -msgstr "Определяет, какие символы допустимы для изолирования аргументов команд, чтобы предотвратить их токенизацию." +#: src/conf.py:797 +msgid "" +"Determines what characters are valid for quoting\n" +" arguments to commands in order to prevent them from being tokenized.\n" +" " +msgstr "" +"Определяет, какие символы допустимы для изолирования аргументов команд, " +"чтобы предотвратить их токенизацию." -msgid "Determines whether the bot will allow nested\n commands, which rule. You definitely should keep this on." -msgstr "Определяет, будет ли бот разрешать использование вложенных команд. Это определённо стоит оставить включённым." +#: src/conf.py:804 +msgid "" +"Determines whether the bot will allow nested\n" +" commands, which rule. You definitely should keep this on." +msgstr "" +"Определяет, будет ли бот разрешать использование вложенных команд. Это " +"определённо стоит оставить включённым." -msgid "Determines what the maximum number of\n nested commands will be; users will receive an error if they attempt\n commands more nested than this." -msgstr "Определяет максимальное количество вложенных команд. Пользователи получат сообщение об ошибке, если попытаются выполнить больше вложенных команд, чем в этой настройке." +#: src/conf.py:807 +msgid "" +"Determines what the maximum number of\n" +" nested commands will be; users will receive an error if they attempt\n" +" commands more nested than this." +msgstr "" +"Определяет максимальное количество вложенных команд. Пользователи получат " +"сообщение об ошибке, если попытаются выполнить больше вложенных команд, чем " +"в этой настройке." -msgid "Supybot allows you to specify what brackets\n are used for your nested commands. Valid sets of brackets include\n [], <>, {}, and (). [] has strong historical motivation, but <> or\n () might be slightly superior because they cannot occur in a nick.\n If this string is empty, nested commands will not be allowed in this\n channel." -msgstr "Supybot позволяет вам указать, какие именно скобки будут использоваться для указания вложенных команд. Допустимые наборы скобок включают [], <>, {} и (). [] имеет историческое значение, но <> или () могут быть лучше, так как они не могут использоваться в никах. Если эта строка пуста, то в этом канале вложенные команды будут запрещены." +#: src/conf.py:816 +msgid "" +"Supybot allows you to specify what brackets\n" +" are used for your nested commands. Valid sets of brackets include\n" +" [], <>, {}, and (). [] has strong historical motivation, but <> or\n" +" () might be slightly superior because they cannot occur in a nick.\n" +" If this string is empty, nested commands will not be allowed in this\n" +" channel." +msgstr "" +"Supybot позволяет вам указать, какие именно скобки будут использоваться для " +"указания вложенных команд. Допустимые наборы скобок включают [], <>, {} и " +"(). [] имеет историческое значение, но <> или () могут быть лучше, так как " +"они не могут использоваться в никах. Если эта строка пуста, то в этом канале " +"вложенные команды будут запрещены." -msgid "Supybot allows nested commands. Enabling this\n option will allow nested commands with a syntax similar to UNIX pipes, for\n example: 'bot: foo | bar'." -msgstr "Supybot поддерживает вложенные команды. Включение этой настройки позволит вам использовать команды с синтаксисом, похожим на конвейеры UNIX, например: 'bot: foo | bar'." +#: src/conf.py:823 +msgid "" +"Supybot allows nested commands. Enabling this\n" +" option will allow nested commands with a syntax similar to UNIX pipes, " +"for\n" +" example: 'bot: foo | bar'." +msgstr "" +"Supybot поддерживает вложенные команды. Включение этой настройки позволит " +"вам использовать команды с синтаксисом, похожим на конвейеры UNIX, например: " +"'bot: foo | bar'." -msgid "Determines what commands have default\n plugins set, and which plugins are set to be the default for each of those\n commands." -msgstr "Определяет, для каких команд установлены плагины по умолчанию, и какие плагины будут установлены по умолчанию для каждой из этих команд." +#: src/conf.py:828 +msgid "" +"Determines what commands have default\n" +" plugins set, and which plugins are set to be the default for each of " +"those\n" +" commands." +msgstr "" +"Определяет, для каких команд установлены плагины по умолчанию, и какие " +"плагины будут установлены по умолчанию для каждой из этих команд." -msgid "Determines what plugins automatically get precedence over all\n other plugins when selecting a default plugin for a command. By\n default, this includes the standard loaded plugins. You probably\n shouldn't change this if you don't know what you're doing; if you do\n know what you're doing, then also know that this set is\n case-sensitive." -msgstr "Определяет приоритет плагинов над другими при выборе плагина по умолчанию для команды. По умолчанию включает в себя стандартные загружаемые плагины. Не стоит менять это, если вы не знаете, что пытаетесь сделать. Иначе учитывайте, что эта настройка чувствительна к регистру." +#: src/conf.py:834 +msgid "" +"Determines what plugins automatically get precedence over all\n" +" other plugins when selecting a default plugin for a command. By\n" +" default, this includes the standard loaded plugins. You probably\n" +" shouldn't change this if you don't know what you're doing; if you " +"do\n" +" know what you're doing, then also know that this set is\n" +" case-sensitive." +msgstr "" +"Определяет приоритет плагинов над другими при выборе плагина по умолчанию " +"для команды. По умолчанию включает в себя стандартные загружаемые плагины. " +"Не стоит менять это, если вы не знаете, что пытаетесь сделать. Иначе " +"учитывайте, что эта настройка чувствительна к регистру." -msgid "Allows this bot's owner user to use commands\n that grants them shell access. This config variable exists in case you want\n to prevent MITM from the IRC network itself (vulnerable IRCd or IRCops)\n from gaining shell access to the bot's server by impersonating the owner.\n Setting this to False also disables plugins and commands that can be\n used to indirectly gain shell access." -msgstr "Позволяет владельцу бота использовать команды, предоставляющие доступ к командной строке. Эта настройка существует на случай, если вы хотите предотвратить MITM-атаку из самой IRC-сети (уязвимость IRCd или IRCops) для получения доступа к командной строке сервера бота, выдавая себя за владельца. Установка значения в False также отключит плагины и команды, которые могут быть использованы для получения доступа к командной строке." +#: src/conf.py:844 +msgid "" +"Allows this bot's owner user to use commands\n" +" that grants them shell access. This config variable exists in case you " +"want\n" +" to prevent MITM from the IRC network itself (vulnerable IRCd or IRCops)\n" +" from gaining shell access to the bot's server by impersonating the " +"owner.\n" +" Setting this to False also disables plugins and commands that can be\n" +" used to indirectly gain shell access." +msgstr "" +"Позволяет владельцу бота использовать команды, предоставляющие доступ к " +"командной строке. Эта настройка существует на случай, если вы хотите " +"предотвратить MITM-атаку из самой IRC-сети (уязвимость IRCd или IRCops) для " +"получения доступа к командной строке сервера бота, выдавая себя за " +"владельца. Установка значения в False также отключит плагины и команды, " +"которые могут быть использованы для получения доступа к командной строке." -msgid "Determines the interval used for\n the history storage." +#: src/conf.py:859 +msgid "" +"Determines the interval used for\n" +" the history storage." msgstr "Определяет интервал для хранения истории." -msgid "Determines whether the bot will defend itself\n against command-flooding." +#: src/conf.py:862 +msgid "" +"Determines whether the bot will defend itself\n" +" against command-flooding." msgstr "Определяет, будет ли бот защищать себя от массовой отправки команд." -msgid "Determines how many commands users are\n allowed per minute. If a user sends more than this many commands in any\n 60 second period, they will be ignored for\n supybot.abuse.flood.command.punishment seconds." -msgstr "Определяет, сколько команд в минуту разрешено отправлять пользователям. Если пользователь отправит больше указанного количества команд за 60 секунд, то их будут игнорировать в течение некоторого количества секунд, указанного в supybot.abuse.flood.command.punishment." +#: src/conf.py:865 +msgid "" +"Determines how many commands users are\n" +" allowed per minute. If a user sends more than this many commands in " +"any\n" +" 60 second period, they will be ignored for\n" +" supybot.abuse.flood.command.punishment seconds." +msgstr "" +"Определяет, сколько команд в минуту разрешено отправлять пользователям. Если " +"пользователь отправит больше указанного количества команд за 60 секунд, то " +"их будут игнорировать в течение некоторого количества секунд, указанного в " +"supybot.abuse.flood.command.punishment." -msgid "Determines how many seconds the bot\n will ignore users who flood it with commands." -msgstr "Определяет количество секунд, в течение которых бот будет игнорировать пользователей, засыпающих его командами." +#: src/conf.py:870 +msgid "" +"Determines how many seconds the bot\n" +" will ignore users who flood it with commands." +msgstr "" +"Определяет количество секунд, в течение которых бот будет игнорировать " +"пользователей, засыпающих его командами." -msgid "Determines whether the bot will notify people\n that they're being ignored for command flooding." -msgstr "Определяет, будет ли бот уведомлять пользователей о том, что их игнорируют из-за слишком большого количества отправленных ими команд." +#: src/conf.py:873 +msgid "" +"Determines whether the bot will notify people\n" +" that they're being ignored for command flooding." +msgstr "" +"Определяет, будет ли бот уведомлять пользователей о том, что их игнорируют " +"из-за слишком большого количества отправленных ими команд." -msgid "Determines whether the bot will defend itself\n against invalid command-flooding." -msgstr "Определяет, будет ли бот защищать себя от массовой отправки ему недопустимых команд." +#: src/conf.py:877 +msgid "" +"Determines whether the bot will defend itself\n" +" against invalid command-flooding." +msgstr "" +"Определяет, будет ли бот защищать себя от массовой отправки ему недопустимых " +"команд." -msgid "Determines how many invalid commands users\n are allowed per minute. If a user sends more than this many invalid\n commands in any 60 second period, they will be ignored for\n supybot.abuse.flood.command.invalid.punishment seconds. Typically, this\n value is lower than supybot.abuse.flood.command.maximum, since it's far\n less likely (and far more annoying) for users to flood with invalid\n commands than for them to flood with valid commands." -msgstr "Определяет, сколько пользователи могут отправить недопустимых команд в минуту. Если пользователь отправляет больше этого количества недопустимых команд в любой 60-секундный период, они будут игнорироваться на протяжении supybot.abuse.flood.command.invalid.punishment секунд. Обычно это значение ниже, чем supybot.abuse.flood.command.maximum, поскольку гораздо менее вероятно (но гораздо более раздражающе), что пользователи будут засорять каналы недопустимыми командами, чем правильными командами." +#: src/conf.py:880 +msgid "" +"Determines how many invalid commands users\n" +" are allowed per minute. If a user sends more than this many invalid\n" +" commands in any 60 second period, they will be ignored for\n" +" supybot.abuse.flood.command.invalid.punishment seconds. Typically, " +"this\n" +" value is lower than supybot.abuse.flood.command.maximum, since it's far\n" +" less likely (and far more annoying) for users to flood with invalid\n" +" commands than for them to flood with valid commands." +msgstr "" +"Определяет, сколько пользователи могут отправить недопустимых команд в " +"минуту. Если пользователь отправляет больше этого количества недопустимых " +"команд в любой 60-секундный период, они будут игнорироваться на протяжении " +"supybot.abuse.flood.command.invalid.punishment секунд. Обычно это значение " +"ниже, чем supybot.abuse.flood.command.maximum, поскольку гораздо менее " +"вероятно (но гораздо более раздражающе), что пользователи будут засорять " +"каналы недопустимыми командами, чем правильными командами." -msgid "Determines how many seconds the bot\n will ignore users who flood it with invalid commands. Typically, this\n value is higher than supybot.abuse.flood.command.punishment, since it's far\n less likely (and far more annoying) for users to flood with invalid\n commands than for them to flood with valid commands." -msgstr "Определяет, сколько пользователи могут отправить недопустимых команд в минуту. Обычно это значение ниже, чем supybot.abuse.flood.command.maximum, поскольку гораздо менее вероятно (но гораздо более раздражающе), что пользователи будут засорять каналы недопустимыми командами, чем правильными командами." +#: src/conf.py:888 +msgid "" +"Determines how many seconds the bot\n" +" will ignore users who flood it with invalid commands. Typically, this\n" +" value is higher than supybot.abuse.flood.command.punishment, since it's " +"far\n" +" less likely (and far more annoying) for users to flood with invalid\n" +" commands than for them to flood with valid commands." +msgstr "" +"Определяет, сколько пользователи могут отправить недопустимых команд в " +"минуту. Обычно это значение ниже, чем supybot.abuse.flood.command.maximum, " +"поскольку гораздо менее вероятно (но гораздо более раздражающе), что " +"пользователи будут засорять каналы недопустимыми командами, чем правильными " +"командами." -msgid "Determines whether the bot will notify people\n that they're being ignored for invalid command flooding." -msgstr "Определяет, будет ли бот уведомлять пользователей о том, что их игнорируют из-за слишком большого количества отправленных ими команд." +#: src/conf.py:894 +msgid "" +"Determines whether the bot will notify people\n" +" that they're being ignored for invalid command flooding." +msgstr "" +"Определяет, будет ли бот уведомлять пользователей о том, что их игнорируют " +"из-за слишком большого количества отправленных ими команд." -msgid "Determines the default length of time a\n driver should block waiting for input." -msgstr "Определяет продолжительность времени по умолчанию, в течение которой драйвер должен блокироваться в ожидании ввода." +#: src/conf.py:903 +msgid "" +"Determines the default length of time a\n" +" driver should block waiting for input." +msgstr "" +"Определяет продолжительность времени по умолчанию, в течение которой драйвер " +"должен блокироваться в ожидании ввода." -msgid "Determines what driver module the \n bot will use. Current, the only (and default) driver is Socket." -msgstr "Определяет, какой модуль драйвера будет использовать бот. Текущим и единственным (и по умолчанию) драйвером является Socket." +#: src/conf.py:911 +msgid "" +"Determines what driver module the \n" +" bot will use. Current, the only (and default) driver is Socket." +msgstr "" +"Определяет, какой модуль драйвера будет использовать бот. Текущим и " +"единственным (и по умолчанию) драйвером является Socket." -msgid "Determines the maximum time the bot will\n wait before attempting to reconnect to an IRC server. The bot may, of\n course, reconnect earlier if possible." -msgstr "Определяет максимальное время, которое бот будет ждать перед попыткой переподключения к IRC-серверу. Конечно, бот может переподключиться раньше, если это возможно." +#: src/conf.py:915 +msgid "" +"Determines the maximum time the bot will\n" +" wait before attempting to reconnect to an IRC server. The bot may, of\n" +" course, reconnect earlier if possible." +msgstr "" +"Определяет максимальное время, которое бот будет ждать перед попыткой " +"переподключения к IRC-серверу. Конечно, бот может переподключиться раньше, " +"если это возможно." -msgid "Determines what directory configuration data is\n put into." +#: src/conf.py:967 +msgid "" +"Determines what directory configuration data is\n" +" put into." msgstr "Определяет, в какой каталог помещаются данные настроек." +#: src/conf.py:970 msgid "Determines what directory data is put into." msgstr "Определяет, в какой каталог помещаются данные." -msgid "Determines what directory backup data is put\n into. Set it to /dev/null to disable backup (it is a special value,\n so it also works on Windows and systems without /dev/null)." -msgstr "Определяет, в какой каталог помещаются данные резервной копии. Установите его в /dev/null, чтобы отключить резервное копирование (это специальное значение, поэтому оно также работает на Windows и системах без /dev/null)." +#: src/conf.py:972 +msgid "" +"Determines what directory backup data is put\n" +" into. Set it to /dev/null to disable backup (it is a special value,\n" +" so it also works on Windows and systems without /dev/null)." +msgstr "" +"Определяет, в какой каталог помещаются данные резервной копии. Установите " +"его в /dev/null, чтобы отключить резервное копирование (это специальное " +"значение, поэтому оно также работает на Windows и системах без /dev/null)." -msgid "Determines what directory temporary files\n are put into." +#: src/conf.py:979 +msgid "" +"Determines what directory temporary files\n" +" are put into." msgstr "Определяет, в какой каталог будут помещены временные файлы." -msgid "Determines what directory files of the\n web server (templates, custom images, ...) are put into." -msgstr "Определяет, в какую директорию будут помещены файлы веб-сервера (шаблоны, пользовательские изображения, ...)." +#: src/conf.py:982 +msgid "" +"Determines what directory files of the\n" +" web server (templates, custom images, ...) are put into." +msgstr "" +"Определяет, в какую директорию будут помещены файлы веб-сервера (шаблоны, " +"пользовательские изображения, ...)." -msgid "Determines what directories\n the bot will look for plugins in. Accepts a comma-separated list of\n strings.\n This means that to add another directory, you can nest the former value and\n add a new one. E.g. you can say: bot: 'config supybot.directories.plugins\n [config supybot.directories.plugins], newPluginDirectory'." -msgstr "Определяет, в каких каталогах бот будет искать плагины. Принимает список строк, разделенных запятыми. Это означает, что для добавления другой директории вы можете вложить предыдущее значение и добавить новое. Например, вы можете сделать так: bot: 'config supybot.directories.plugins [config supybot.directories.plugins], newPluginDirectory'." +#: src/conf.py:995 +msgid "" +"Determines what directories\n" +" the bot will look for plugins in. Accepts a comma-separated list of\n" +" strings.\n" +" This means that to add another directory, you can nest the former value " +"and\n" +" add a new one. E.g. you can say: bot: 'config supybot.directories." +"plugins\n" +" [config supybot.directories.plugins], newPluginDirectory'." +msgstr "" +"Определяет, в каких каталогах бот будет искать плагины. Принимает список " +"строк, разделенных запятыми. Это означает, что для добавления другой " +"директории вы можете вложить предыдущее значение и добавить новое. Например, " +"вы можете сделать так: bot: 'config supybot.directories.plugins [config " +"supybot.directories.plugins], newPluginDirectory'." -msgid "List of all plugins that were\n ever loaded. Currently has no effect whatsoever. You probably want to use\n the 'load' or 'unload' commands, or edit supybot.plugins.\n instead of this." -msgstr "Список всех плагинов, которые были когда-либо загружены. В настоящее время не имеет никакого эффекта. Вы, вероятно, захотите использовать команды 'load' или 'unload', или изменить supybot.plugins. вместо этого." +#: src/conf.py:1003 +msgid "" +"List of all plugins that were\n" +" ever loaded. Currently has no effect whatsoever. You probably want to " +"use\n" +" the 'load' or 'unload' commands, or edit supybot.plugins.\n" +" instead of this." +msgstr "" +"Список всех плагинов, которые были когда-либо загружены. В настоящее время " +"не имеет никакого эффекта. Вы, вероятно, захотите использовать команды " +"'load' или 'unload', или изменить supybot.plugins. вместо этого." -msgid "Determines whether the bot will always load\n important plugins (Admin, Channel, Config, Misc, Owner, and User)\n regardless of what their configured state is. Generally, if these plugins\n are configured not to load, you didn't do it on purpose, and you still\n want them to load. Users who don't want to load these plugins are smart\n enough to change the value of this variable appropriately :)" -msgstr "Определяет, будет ли бот всегда загружать важные плагины (Admin, Channel, Config, Misc, Owner и User) независимо от их настроенного состояния. Как правило, если эти плагины настроены не загружаться, вы сделали это не специально, и вы все равно хотите, чтобы они загружались. Пользователи, которые не хотят загружать эти плагины, достаточно умны, чтобы изменить значение этой переменной соответствующим образом :)" +#: src/conf.py:1008 +msgid "" +"Determines whether the bot will always load\n" +" important plugins (Admin, Channel, Config, Misc, Owner, and User)\n" +" regardless of what their configured state is. Generally, if these " +"plugins\n" +" are configured not to load, you didn't do it on purpose, and you still\n" +" want them to load. Users who don't want to load these plugins are " +"smart\n" +" enough to change the value of this variable appropriately :)" +msgstr "" +"Определяет, будет ли бот всегда загружать важные плагины (Admin, Channel, " +"Config, Misc, Owner и User) независимо от их настроенного состояния. Как " +"правило, если эти плагины настроены не загружаться, вы сделали это не " +"специально, и вы все равно хотите, чтобы они загружались. Пользователи, " +"которые не хотят загружать эти плагины, достаточно умны, чтобы изменить " +"значение этой переменной соответствующим образом :)" -msgid "Determines what databases are available for use. If this\n value is not configured (that is, if its value is empty) then sane defaults\n will be provided." -msgstr "Определяет, какие базы данных доступны для использования. Если это значение не задано (т.е. если его значение пустое), то будут предоставлены значения по умолчанию." +#: src/conf.py:1036 +msgid "" +"Determines what databases are available for use. If this\n" +" value is not configured (that is, if its value is empty) then sane " +"defaults\n" +" will be provided." +msgstr "" +"Определяет, какие базы данных доступны для использования. Если это значение " +"не задано (т.е. если его значение пустое), то будут предоставлены значения " +"по умолчанию." -msgid "Determines what filename will be used\n for the users database. This file will go into the directory specified by\n the supybot.directories.conf variable." -msgstr "Определяет, какое имя файла будет использоваться для базы данных пользователей. Этот файл будет находиться в каталоге, указанном в supybot.directories.conf." +#: src/conf.py:1042 +msgid "" +"Determines what filename will be used\n" +" for the users database. This file will go into the directory specified " +"by\n" +" the supybot.directories.conf variable." +msgstr "" +"Определяет, какое имя файла будет использоваться для базы данных " +"пользователей. Этот файл будет находиться в каталоге, указанном в supybot." +"directories.conf." -msgid "Determines how long it takes identification to\n time out. If the value is less than or equal to zero, identification never\n times out." -msgstr "Определяет, через какое время идентификация истекает. Если значение меньше или равно нулю, идентификация никогда не истечёт." +#: src/conf.py:1046 +msgid "" +"Determines how long it takes identification to\n" +" time out. If the value is less than or equal to zero, identification " +"never\n" +" times out." +msgstr "" +"Определяет, через какое время идентификация истекает. Если значение меньше " +"или равно нулю, идентификация никогда не истечёт." -msgid "Determines whether the bot will allow users to\n unregister their users. This can wreak havoc with already-existing\n databases, so by default we don't allow it. Enable this at your own risk.\n (Do also note that this does not prevent the owner of the bot from using\n the unregister command.)\n " -msgstr "Определяет, будет ли бот позволять пользователям отменять свою регистрацию. Это может сломать уже существующие базы данных, поэтому по умолчанию мы не разрешаем это делать. Включите эту опцию на свой страх и риск. (Также обратите внимание, что это не мешает владельцу бота использовать команду unregister)." +#: src/conf.py:1050 +msgid "" +"Determines whether the bot will allow users to\n" +" unregister their users. This can wreak havoc with already-existing\n" +" databases, so by default we don't allow it. Enable this at your own " +"risk.\n" +" (Do also note that this does not prevent the owner of the bot from " +"using\n" +" the unregister command.)\n" +" " +msgstr "" +"Определяет, будет ли бот позволять пользователям отменять свою регистрацию. " +"Это может сломать уже существующие базы данных, поэтому по умолчанию мы не " +"разрешаем это делать. Включите эту опцию на свой страх и риск. (Также " +"обратите внимание, что это не мешает владельцу бота использовать команду " +"unregister)." -msgid "Determines what filename will be used\n for the ignores database. This file will go into the directory specified\n by the supybot.directories.conf variable." -msgstr "Определяет, какое имя файла будет использоваться для базы данных игноров. Этот файл будет находиться в каталоге, указанном в supybot.directories.conf." +#: src/conf.py:1059 +msgid "" +"Determines what filename will be used\n" +" for the ignores database. This file will go into the directory " +"specified\n" +" by the supybot.directories.conf variable." +msgstr "" +"Определяет, какое имя файла будет использоваться для базы данных игноров. " +"Этот файл будет находиться в каталоге, указанном в supybot.directories.conf." -msgid "Determines what filename will be used\n for the channels database. This file will go into the directory specified\n by the supybot.directories.conf variable." -msgstr "Определяет, какое имя файла будет использоваться для базы данных каналов. Этот файл будет находиться в каталоге, указанном в supybot.directories.conf." +#: src/conf.py:1065 +msgid "" +"Determines what filename will be used\n" +" for the channels database. This file will go into the directory " +"specified\n" +" by the supybot.directories.conf variable." +msgstr "" +"Определяет, какое имя файла будет использоваться для базы данных каналов. " +"Этот файл будет находиться в каталоге, указанном в supybot.directories.conf." -msgid "Determines what filename will be used\n for the networks database. This file will go into the directory specified\n by the supybot.directories.conf variable." -msgstr "Определяет, какое имя файла будет использоваться для базы данных сетей. Этот файл будет находиться в каталоге, указанном в supybot.directories.conf." +#: src/conf.py:1071 +msgid "" +"Determines what filename will be used\n" +" for the networks database. This file will go into the directory " +"specified\n" +" by the supybot.directories.conf variable." +msgstr "" +"Определяет, какое имя файла будет использоваться для базы данных сетей. " +"Этот файл будет находиться в каталоге, указанном в supybot.directories.conf." -msgid "Determines whether the bot will require user\n registration to use 'add' commands in database-based Supybot\n plugins." -msgstr "Определяет, будет ли бот требовать регистрации пользователя для использования команд 'add' в плагинах Supybot, основанных на базах данных." +#: src/conf.py:1103 +msgid "" +"Determines whether the bot will require user\n" +" registration to use 'add' commands in database-based Supybot\n" +" plugins." +msgstr "" +"Определяет, будет ли бот требовать регистрации пользователя для " +"использования команд 'add' в плагинах Supybot, основанных на базах данных." -msgid "Determines whether database-based plugins that\n can be channel-specific will be so. This can be overridden by individual\n channels. Do note that the bot needs to be restarted immediately after\n changing this variable or your db plugins may not work for your channel;\n also note that you may wish to set\n supybot.databases.plugins.channelSpecific.link appropriately if you wish\n to share a certain channel's databases globally." -msgstr "Определяет, будут ли плагины на основе баз данных могут быть привязаны к конкретному каналу. Это может быть переопределено отдельными каналами. Обратите внимание, что бота необходимо перезапустить сразу после изменения этой переменной, иначе плагины с базами данных могут не работать на вашем канале; также обратите внимание, что вы можете установить supybot.databases.plugins.channelSpecific.link соответствующим образом, если вы хотите использовать базы данных определенного канала глобально." +#: src/conf.py:1107 +msgid "" +"Determines whether database-based plugins that\n" +" can be channel-specific will be so. This can be overridden by " +"individual\n" +" channels. Do note that the bot needs to be restarted immediately after\n" +" changing this variable or your db plugins may not work for your " +"channel;\n" +" also note that you may wish to set\n" +" supybot.databases.plugins.channelSpecific.link appropriately if you " +"wish\n" +" to share a certain channel's databases globally." +msgstr "" +"Определяет, будут ли плагины на основе баз данных могут быть привязаны к " +"конкретному каналу. Это может быть переопределено отдельными каналами. " +"Обратите внимание, что бота необходимо перезапустить сразу после изменения " +"этой переменной, иначе плагины с базами данных могут не работать на вашем " +"канале; также обратите внимание, что вы можете установить supybot.databases." +"plugins.channelSpecific.link соответствующим образом, если вы хотите " +"использовать базы данных определенного канала глобально." +#: src/conf.py:1115 #, fuzzy -msgid "Determines what channel global\n (non-channel-specific) databases will be considered a part of. This is\n helpful if you've been running channel-specific for awhile and want to turn\n the databases for your primary channel into global databases. If\n supybot.databases.plugins.channelSpecific.link.allow prevents linking, the\n current channel will be used. Do note that the bot needs to be restarted\n immediately after changing this variable or your db plugins may not work\n for your channel." -msgstr "Определяет, к какому каналу будут относиться глобальные (не специфические для канала) базы данных. Это полезно, если вы долгое время использовали специфические для канала базы данных и хотите превратить базы данных вашего основного канала в глобальные. Если supybot.databases.plugins.channelSpecific.link.allow запрещает связывание, будет использоваться текущий канал. Обратите внимание, что бот должен быть перезапущен немедленно после изменения этой переменной, иначе ваши плагины баз данных могут не работать для вашего канала." +msgid "" +"Determines what channel global\n" +" (non-channel-specific) databases will be considered a part of. This is\n" +" helpful if you've been running channel-specific for awhile and want to " +"turn\n" +" the databases for your primary channel into global databases. If\n" +" supybot.databases.plugins.channelSpecific.link.allow prevents linking, " +"the\n" +" current channel will be used. Do note that the bot needs to be " +"restarted\n" +" immediately after changing this variable or your db plugins may not " +"work\n" +" for your channel." +msgstr "" +"Определяет, к какому каналу будут относиться глобальные (не специфические " +"для канала) базы данных. Это полезно, если вы долгое время использовали " +"специфические для канала базы данных и хотите превратить базы данных вашего " +"основного канала в глобальные. Если supybot.databases.plugins." +"channelSpecific.link.allow запрещает связывание, будет использоваться " +"текущий канал. Обратите внимание, что бот должен быть перезапущен немедленно " +"после изменения этой переменной, иначе ваши плагины баз данных могут не " +"работать для вашего канала." -msgid "Determines whether another channel's global\n (non-channel-specific) databases will be allowed to link to this channel's\n databases. Do note that the bot needs to be restarted immediately after\n changing this variable or your db plugins may not work for your channel.\n " -msgstr "Определяет, будут ли глобальные (не специфичные для канала) базы данных другого канала разрешены для связи с базами данных этого канала. Обратите внимание, что бот должен быть перезапущен сразу после изменения этой переменной, иначе ваши БД-плагины могут не работать на вашем канале." +#: src/conf.py:1124 +msgid "" +"Determines whether another channel's global\n" +" (non-channel-specific) databases will be allowed to link to this " +"channel's\n" +" databases. Do note that the bot needs to be restarted immediately " +"after\n" +" changing this variable or your db plugins may not work for your " +"channel.\n" +" " +msgstr "" +"Определяет, будут ли глобальные (не специфичные для канала) базы данных " +"другого канала разрешены для связи с базами данных этого канала. Обратите " +"внимание, что бот должен быть перезапущен сразу после изменения этой " +"переменной, иначе ваши БД-плагины могут не работать на вашем канале." -msgid "Determines\n whether CDB databases will be allowed as a database implementation." -msgstr "Определяет, будут ли разрешены базы данных CDB в качестве реализации баз данных." +#: src/conf.py:1142 +msgid "" +"Determines\n" +" whether CDB databases will be allowed as a database implementation." +msgstr "" +"Определяет, будут ли разрешены базы данных CDB в качестве реализации баз " +"данных." -msgid "Determines how often CDB databases will have\n their modifications flushed to disk. When the number of modified records\n is greater than this fraction of the total number of records, the database\n will be entirely flushed to disk." -msgstr "Определяет, как часто изменения баз данных CDB будут сбрасываться на диск. Когда число измененных записей превышает эту долю от общего числа записей, база данных будет полностью сброшена на диск." +#: src/conf.py:1145 +msgid "" +"Determines how often CDB databases will have\n" +" their modifications flushed to disk. When the number of modified " +"records\n" +" is greater than this fraction of the total number of records, the " +"database\n" +" will be entirely flushed to disk." +msgstr "" +"Определяет, как часто изменения баз данных CDB будут сбрасываться на диск. " +"Когда число измененных записей превышает эту долю от общего числа записей, " +"база данных будет полностью сброшена на диск." +#: src/conf.py:1237 #, fuzzy -msgid "Determines what will be used as the\n default banmask style." -msgstr "Определяет, что будет использоваться в качестве стиля маски бана по умолчанию." +msgid "" +"Determines what will be used as the\n" +" default banmask style." +msgstr "" +"Определяет, что будет использоваться в качестве стиля маски бана по " +"умолчанию." -msgid "Determines whether the bot will strictly\n follow the RFC; currently this only affects what strings are\n considered to be nicks. If you're using a server or a network that\n requires you to message a nick such as services@this.network.server\n then you you should set this to False." -msgstr "Определяет, будет ли бот строго следовать RFC; в настоящее время это влияет только на то, какие строки считаются никами. Если вы используете сервер или сеть, которая требует от вас сообщения с таким ником, как services@this.network.server, то вам следует установить значение False." +#: src/conf.py:1241 +msgid "" +"Determines whether the bot will strictly\n" +" follow the RFC; currently this only affects what strings are\n" +" considered to be nicks. If you're using a server or a network that\n" +" requires you to message a nick such as services@this.network.server\n" +" then you you should set this to False." +msgstr "" +"Определяет, будет ли бот строго следовать RFC; в настоящее время это влияет " +"только на то, какие строки считаются никами. Если вы используете сервер или " +"сеть, которая требует от вас сообщения с таким ником, как services@this." +"network.server, то вам следует установить значение False." -msgid "Determines whether the bot will enable\n draft/experimental extensions of the IRC protocol. Setting this to True\n may break your bot at any time without warning and/or break your\n configuration irreversibly. So keep it False unless you know what you are\n doing." -msgstr "Определяет, будет ли бот включать черновые/экспериментальные расширения протокола IRC. Установка этого значения в True может привести к поломке вашего бота в любое время без предупреждения и/или необратимо нарушить ваши настройки. Поэтому держите значение в False, если вы не знаете, что делаете." +#: src/conf.py:1248 +msgid "" +"Determines whether the bot will enable\n" +" draft/experimental extensions of the IRC protocol. Setting this to True\n" +" may break your bot at any time without warning and/or break your\n" +" configuration irreversibly. So keep it False unless you know what you " +"are\n" +" doing." +msgstr "" +"Определяет, будет ли бот включать черновые/экспериментальные расширения " +"протокола IRC. Установка этого значения в True может привести к поломке " +"вашего бота в любое время без предупреждения и/или необратимо нарушить ваши " +"настройки. Поэтому держите значение в False, если вы не знаете, что делаете." -msgid "Determines what certificate file (if any) the bot\n will use connect with SSL sockets by default." -msgstr "Определяет, какой файл сертификата (если таковой есть) бот будет использовать для соединения с SSL-сокетами по умолчанию." +#: src/conf.py:1255 +msgid "" +"Determines what certificate file (if any) the bot\n" +" will use connect with SSL sockets by default." +msgstr "" +"Определяет, какой файл сертификата (если таковой есть) бот будет " +"использовать для соединения с SSL-сокетами по умолчанию." -msgid "Determines what user modes the bot will request\n from the server when it first connects. Many people might choose +i; some\n networks allow +x, which indicates to the auth services on those networks\n that you should be given a fake host." -msgstr "Определяет, какие режимы пользователя бот будет запрашивать у сервера при первом подключении. Многие люди могут выбрать +i; некоторые сети разрешают +x, указывающий службам аутентификации в этих сетях, что вам должен быть предоставлен фальшивый хост." +#: src/conf.py:1259 +msgid "" +"Determines what user modes the bot will request\n" +" from the server when it first connects. Many people might choose +i; " +"some\n" +" networks allow +x, which indicates to the auth services on those " +"networks\n" +" that you should be given a fake host." +msgstr "" +"Определяет, какие режимы пользователя бот будет запрашивать у сервера при " +"первом подключении. Многие люди могут выбрать +i; некоторые сети разрешают " +"+x, указывающий службам аутентификации в этих сетях, что вам должен быть " +"предоставлен фальшивый хост." -msgid "Determines what vhost the bot will bind to before\n connecting a server (IRC, HTTP, ...) via IPv4." -msgstr "Определяет, к какому виртуальному хосту будет привязан бот перед подключением к серверу (IRC, HTTP, ...) через IPv4." +#: src/conf.py:1265 +msgid "" +"Determines what vhost the bot will bind to before\n" +" connecting a server (IRC, HTTP, ...) via IPv4." +msgstr "" +"Определяет, к какому виртуальному хосту будет привязан бот перед " +"подключением к серверу (IRC, HTTP, ...) через IPv4." -msgid "Determines what vhost the bot will bind to before\n connecting a server (IRC, HTTP, ...) via IPv6." -msgstr "Определяет, к какому виртуальному хосту будет привязан бот перед подключением к серверу (IRC, HTTP, ...) через IPv6." +#: src/conf.py:1269 +msgid "" +"Determines what vhost the bot will bind to before\n" +" connecting a server (IRC, HTTP, ...) via IPv6." +msgstr "" +"Определяет, к какому виртуальному хосту будет привязан бот перед " +"подключением к серверу (IRC, HTTP, ...) через IPv6." -msgid "Determines how many old messages the bot will\n keep around in its history. Changing this variable will not take effect\n on a network until it is reconnected." -msgstr "Определяет, сколько старых сообщений бот будет сохранять в своей истории. Изменение этой переменной не будет действовать в сети до тех пор, пока к ней не будет выполнено переподключение." +#: src/conf.py:1273 +msgid "" +"Determines how many old messages the bot will\n" +" keep around in its history. Changing this variable will not take " +"effect\n" +" on a network until it is reconnected." +msgstr "" +"Определяет, сколько старых сообщений бот будет сохранять в своей истории. " +"Изменение этой переменной не будет действовать в сети до тех пор, пока к ней " +"не будет выполнено переподключение." -msgid "A floating point number of seconds to throttle\n queued messages -- that is, messages will not be sent faster than once per\n throttleTime seconds." -msgstr "Дробное число секунд для регулирования сообщений в очереди, то есть сообщения не будут отправляться быстрее, чем один раз за throttleTime секунд." +#: src/conf.py:1278 +msgid "" +"A floating point number of seconds to throttle\n" +" queued messages -- that is, messages will not be sent faster than once " +"per\n" +" throttleTime seconds." +msgstr "" +"Дробное число секунд для регулирования сообщений в очереди, то есть " +"сообщения не будут отправляться быстрее, чем один раз за throttleTime секунд." -msgid "Determines whether the bot will send PINGs to\n the server it's connected to in order to keep the connection alive and\n discover earlier when it breaks. Really, this option only exists for\n debugging purposes: you always should make it True unless you're testing\n some strange server issues." -msgstr "Определяет, будет ли бот посылать PING'и на сервер, к которому он подключен, чтобы сохранить соединение и обнаружить его разрыв раньше, чем оно потеряется. На самом деле, эта опция существует только в целях отладки: вы всегда должны ставить его в True, если только вы не исследуете (тестируете) загадочные проблемы с сервером." +#: src/conf.py:1283 +msgid "" +"Determines whether the bot will send PINGs to\n" +" the server it's connected to in order to keep the connection alive and\n" +" discover earlier when it breaks. Really, this option only exists for\n" +" debugging purposes: you always should make it True unless you're " +"testing\n" +" some strange server issues." +msgstr "" +"Определяет, будет ли бот посылать PING'и на сервер, к которому он подключен, " +"чтобы сохранить соединение и обнаружить его разрыв раньше, чем оно " +"потеряется. На самом деле, эта опция существует только в целях отладки: вы " +"всегда должны ставить его в True, если только вы не исследуете (тестируете) " +"загадочные проблемы с сервером." -msgid "Determines the number of seconds between sending\n pings to the server, if pings are being sent to the server." -msgstr "Определяет количество секунд между отправкой пингов на сервер, если таковые отправляются на сервер." +#: src/conf.py:1290 +msgid "" +"Determines the number of seconds between sending\n" +" pings to the server, if pings are being sent to the server." +msgstr "" +"Определяет количество секунд между отправкой пингов на сервер, если таковые " +"отправляются на сервер." -msgid "Determines whether the bot will refuse\n duplicated messages to be queued for delivery to the server. This is a\n safety mechanism put in place to prevent plugins from sending the same\n message multiple times; most of the time it doesn't matter, unless you're\n doing certain kinds of plugin hacking." -msgstr "Определяет, будет ли бот отклонять дублирующиеся сообщения в очереди на отправку на сервер. Это механизм безопасности, созданный для того, чтобы плагины не отправляли одно и то же сообщение несколько раз; в большинстве случаев это не имеет значения, если только вы не занимаетесь экспериментальной разработкой плагинов." +#: src/conf.py:1295 +msgid "" +"Determines whether the bot will refuse\n" +" duplicated messages to be queued for delivery to the server. This is a\n" +" safety mechanism put in place to prevent plugins from sending the same\n" +" message multiple times; most of the time it doesn't matter, unless " +"you're\n" +" doing certain kinds of plugin hacking." +msgstr "" +"Определяет, будет ли бот отклонять дублирующиеся сообщения в очереди на " +"отправку на сервер. Это механизм безопасности, созданный для того, чтобы " +"плагины не отправляли одно и то же сообщение несколько раз; в большинстве " +"случаев это не имеет значения, если только вы не занимаетесь " +"экспериментальной разработкой плагинов." -msgid "Determines how many seconds must elapse between\n JOINs sent to the server." -msgstr "Определяет, сколько секунд должно пройти между JOIN, отправленными на сервер." +#: src/conf.py:1303 +msgid "" +"Determines how many seconds must elapse between\n" +" JOINs sent to the server." +msgstr "" +"Определяет, сколько секунд должно пройти между JOIN, отправленными на сервер." -msgid "Determines how many bytes the bot will\n 'peek' at when looking through a URL for a doctype or title or something\n similar. It'll give up after it reads this many bytes, even if it hasn't\n found what it was looking for." -msgstr "Определяет, сколько байт будет просматривать бот при открытии URL-адреса в поисках типа документа, заголовка или чего-то подобного. Он сдастся после того, как прочитает указанное количество байт, даже если не нашел того, что искал." +#: src/conf.py:1311 +msgid "" +"Determines how many bytes the bot will\n" +" 'peek' at when looking through a URL for a doctype or title or " +"something\n" +" similar. It'll give up after it reads this many bytes, even if it " +"hasn't\n" +" found what it was looking for." +msgstr "" +"Определяет, сколько байт будет просматривать бот при открытии URL-адреса в " +"поисках типа документа, заголовка или чего-то подобного. Он сдастся после " +"того, как прочитает указанное количество байт, даже если не нашел того, что " +"искал." -msgid "Determines what HTTP proxy all HTTP requests should go\n through. The value should be of the form 'host:port'." -msgstr "Определяет, через какой HTTP-прокси должны проходить все HTTP-запросы. Значение должно иметь вид 'host:port'." +#: src/conf.py:1335 +msgid "" +"Determines what HTTP proxy all HTTP requests should go\n" +" through. The value should be of the form 'host:port'." +msgstr "" +"Определяет, через какой HTTP-прокси должны проходить все HTTP-запросы. " +"Значение должно иметь вид 'host:port'." -msgid "If set, the Accept-Language HTTP header will be set to this\n value for requests. Useful for overriding the auto-detected language based on\n the server's location." -msgstr "Если задано, то в HTTP-заголовке Accept-Language для запросов будет использоваться это значение. Полезно для переопределения автоматически определяемого языка на основе местоположения сервера." +#: src/conf.py:1375 +msgid "" +"If set, the Accept-Language HTTP header will be set to this\n" +" value for requests. Useful for overriding the auto-detected language " +"based on\n" +" the server's location." +msgstr "" +"Если задано, то в HTTP-заголовке Accept-Language для запросов будет " +"использоваться это значение. Полезно для переопределения автоматически " +"определяемого языка на основе местоположения сервера." -msgid "If set, the User-Agent HTTP header will be set to a randomly\n selected value from this comma-separated list of strings for requests." -msgstr "Если определено, то в HTTP-заголовке User-Agent для запросов будет установлено случайно выбранное значение из этого списка строк, разделенных запятыми." +#: src/conf.py:1381 +msgid "" +"If set, the User-Agent HTTP header will be set to a randomly\n" +" selected value from this comma-separated list of strings for requests." +msgstr "" +"Если определено, то в HTTP-заголовке User-Agent для запросов будет " +"установлено случайно выбранное значение из этого списка строк, разделенных " +"запятыми." -msgid "Determines whether server certificates\n will be verified, which checks whether the server certificate is signed\n by a known certificate authority, and aborts the connection if it is not.\n This is assumed to be True of serverFingerprints or authorityCertificate\n is set." -msgstr "Определяет, будут ли проверяться сертификаты сервера. При этом выявляется, подписан ли сертификат сервера известным удостоверяющим центром, и соединение будет прервано, если это не так. Предполагается, что если эта настройка установлена в true, то также определены serverFingerprints или authorityCertificate." +#: src/conf.py:1389 +msgid "" +"Determines whether server certificates\n" +" will be verified, which checks whether the server certificate is signed\n" +" by a known certificate authority, and aborts the connection if it is " +"not.\n" +" This is assumed to be True of serverFingerprints or " +"authorityCertificate\n" +" is set." +msgstr "" +"Определяет, будут ли проверяться сертификаты сервера. При этом выявляется, " +"подписан ли сертификат сервера известным удостоверяющим центром, и " +"соединение будет прервано, если это не так. Предполагается, что если эта " +"настройка установлена в true, то также определены serverFingerprints или " +"authorityCertificate." -msgid "If true, uses IPV6_V6ONLY to disable\n forwaring of IPv4 traffic to IPv6 sockets. On *nix, has the same\n effect as setting kernel variable net.ipv6.bindv6only to 1." -msgstr "Если true, то будет использоваться IPV6_V6ONLY для отключения пересылки IPv4-трафика на IPv6-сокеты. На *nix имеет тот же эффект, что и установка переменной ядра net.ipv6.bindv6only в 1." +#: src/conf.py:1416 +msgid "" +"If true, uses IPV6_V6ONLY to disable\n" +" forwaring of IPv4 traffic to IPv6 sockets. On *nix, has the same\n" +" effect as setting kernel variable net.ipv6.bindv6only to 1." +msgstr "" +"Если true, то будет использоваться IPV6_V6ONLY для отключения пересылки IPv4-" +"трафика на IPv6-сокеты. На *nix имеет тот же эффект, что и установка " +"переменной ядра net.ipv6.bindv6only в 1." -msgid "Space-separated list of IPv4 hosts the HTTP server\n will bind." -msgstr "Список IPv4-хостов, разделенных пробелами, к которым будет привязан HTTP-сервер." +#: src/conf.py:1420 +msgid "" +"Space-separated list of IPv4 hosts the HTTP server\n" +" will bind." +msgstr "" +"Список IPv4-хостов, разделенных пробелами, к которым будет привязан HTTP-" +"сервер." -msgid "Space-separated list of IPv6 hosts the HTTP server will\n bind." -msgstr "Список IPv6-хостов, разделенных пробелами, к которым будет привязан HTTP-сервер." +#: src/conf.py:1423 +msgid "" +"Space-separated list of IPv6 hosts the HTTP server will\n" +" bind." +msgstr "" +"Список IPv6-хостов, разделенных пробелами, к которым будет привязан HTTP-" +"сервер." -msgid "Determines what port the HTTP server will\n bind." +#: src/conf.py:1426 +msgid "" +"Determines what port the HTTP server will\n" +" bind." msgstr "Определяет, к какому порту будет привязан HTTP-сервер." -msgid "Determines whether the server will stay\n alive if no plugin is using it. This also means that the server will\n start even if it is not used." -msgstr "Определяет, будет ли сервер оставаться запущенным, если ни один плагин его не использует. Это также означает, что сервер будет запущен, даже если он не используется." +#: src/conf.py:1429 +msgid "" +"Determines whether the server will stay\n" +" alive if no plugin is using it. This also means that the server will\n" +" start even if it is not used." +msgstr "" +"Определяет, будет ли сервер оставаться запущенным, если ни один плагин его " +"не использует. Это также означает, что сервер будет запущен, даже если он не " +"используется." -msgid "Determines the path of the file served as\n favicon to browsers." +#: src/conf.py:1433 +msgid "" +"Determines the path of the file served as\n" +" favicon to browsers." msgstr "Определяет путь к файлу, передаваемому браузерам в качестве favicon." -msgid "Determines the public URL of the server.\n By default it is http://:/, but you will want to change\n this if there is a reverse proxy (nginx, apache, ...) in front of\n the bot." -msgstr "Определяет публичный URL-адрес сервера. По умолчанию это http://:/, но вы захотите изменить, если перед ботом стоит обратный прокси (nginx, apache, ...)." +#: src/conf.py:1436 +msgid "" +"Determines the public URL of the server.\n" +" By default it is http://:/, but you will want to change\n" +" this if there is a reverse proxy (nginx, apache, ...) in front of\n" +" the bot." +msgstr "" +"Определяет публичный URL-адрес сервера. По умолчанию это http://:" +"/, но вы захотите изменить, если перед ботом стоит обратный прокси " +"(nginx, apache, ...)." -msgid "Determines whether the bot will ignore\n unidentified users by default. Of course, that'll make it\n particularly hard for those users to register or identify with the bot\n without adding their hostmasks, but that's your problem to solve." -msgstr "Определяет, будет ли бот по умолчанию игнорировать неидентифицированных пользователей. Конечно, это сделает особенно сложным регистрацию или идентификацию этих пользователей в боте без добавления их масок хоста, но это уже ваша проблема." +#: src/conf.py:1446 +msgid "" +"Determines whether the bot will ignore\n" +" unidentified users by default. Of course, that'll make it\n" +" particularly hard for those users to register or identify with the bot\n" +" without adding their hostmasks, but that's your problem to solve." +msgstr "" +"Определяет, будет ли бот по умолчанию игнорировать неидентифицированных " +"пользователей. Конечно, это сделает особенно сложным регистрацию или " +"идентификацию этих пользователей в боте без добавления их масок хоста, но " +"это уже ваша проблема." -msgid "A string that is the external IP of the bot. If this is the\n empty string, the bot will attempt to find out its IP dynamically (though\n sometimes that doesn't work, hence this variable). This variable is not used\n by Limnoria and its built-in plugins: see supybot.protocols.irc.vhost /\n supybot.protocols.irc.vhost6 to set the IRC bind host, and\n supybot.servers.http.hosts4 / supybot.servers.http.hosts6 to set the HTTP\n server bind host." -msgstr "Строка, которая является внешним IP-адресом бота. Если это пустая строка, бот попытается узнать свой IP динамически (хотя иногда это не работает, отсюда и эта переменная). Эта переменная не используется Limnoria и ее встроенными плагинами: см. supybot.protocols.irc.vhost / supybot.protocols.irc.vhost6 для установки хоста IRC, и supybot.servers.http.hosts4 / supybot.servers.http.hosts6 для установки хоста HTTP-сервера." +#: src/conf.py:1453 +msgid "" +"A string that is the external IP of the bot. If this is the\n" +" empty string, the bot will attempt to find out its IP dynamically " +"(though\n" +" sometimes that doesn't work, hence this variable). This variable is not " +"used\n" +" by Limnoria and its built-in plugins: see supybot.protocols.irc.vhost /\n" +" supybot.protocols.irc.vhost6 to set the IRC bind host, and\n" +" supybot.servers.http.hosts4 / supybot.servers.http.hosts6 to set the " +"HTTP\n" +" server bind host." +msgstr "" +"Строка, которая является внешним IP-адресом бота. Если это пустая строка, " +"бот попытается узнать свой IP динамически (хотя иногда это не работает, " +"отсюда и эта переменная). Эта переменная не используется Limnoria и ее " +"встроенными плагинами: см. supybot.protocols.irc.vhost / supybot.protocols." +"irc.vhost6 для установки хоста IRC, и supybot.servers.http.hosts4 / supybot." +"servers.http.hosts6 для установки хоста HTTP-сервера." -msgid "Determines what the default timeout for socket\n objects will be. This means that *all* sockets will timeout when this many\n seconds has gone by (unless otherwise modified by the author of the code\n that uses the sockets)." -msgstr "Определяет время ожидания по умолчанию для сокетов. Это означает, что *все* сокеты будут отключаться по истечении указанного количества секунд (если это поведение не изменено автором кода, использующего сокеты)." +#: src/conf.py:1472 +msgid "" +"Determines what the default timeout for socket\n" +" objects will be. This means that *all* sockets will timeout when this " +"many\n" +" seconds has gone by (unless otherwise modified by the author of the " +"code\n" +" that uses the sockets)." +msgstr "" +"Определяет время ожидания по умолчанию для сокетов. Это означает, что *все* " +"сокеты будут отключаться по истечении указанного количества секунд (если это " +"поведение не изменено автором кода, использующего сокеты)." -msgid "Determines what file the bot should write its PID\n (Process ID) to, so you can kill it more easily. If it's left unset (as is\n the default) then no PID file will be written. A restart is required for\n changes to this variable to take effect." -msgstr "Определяет, в какой файл бот должен записывать свой PID (Process ID), чтобы завершить его было проще. Если переменная не установлена (как и происходит по умолчанию), то PID-файл записываться не будет. Чтобы изменения в этой переменной вступили в силу, потребуется перезагрузка." +#: src/conf.py:1478 +msgid "" +"Determines what file the bot should write its PID\n" +" (Process ID) to, so you can kill it more easily. If it's left unset (as " +"is\n" +" the default) then no PID file will be written. A restart is required " +"for\n" +" changes to this variable to take effect." +msgstr "" +"Определяет, в какой файл бот должен записывать свой PID (Process ID), чтобы " +"завершить его было проще. Если переменная не установлена (как и происходит " +"по умолчанию), то PID-файл записываться не будет. Чтобы изменения в этой " +"переменной вступили в силу, потребуется перезагрузка." -msgid "Determines whether the bot will automatically\n thread all commands." -msgstr "Определяет, будет ли бот автоматически выполнять все команды в отдельных потоках." +#: src/conf.py:1488 +msgid "" +"Determines whether the bot will automatically\n" +" thread all commands." +msgstr "" +"Определяет, будет ли бот автоматически выполнять все команды в отдельных " +"потоках." -msgid "Determines whether the bot will automatically\n flush all flushers *very* often. Useful for debugging when you don't know\n what's breaking or when, but think that it might be logged." -msgstr "Определяет, будет ли бот автоматически очищать память *очень* часто. Полезно для отладки, когда вы не знаете, что и когда ломается, но думаете, что это может быть занесено в журнал." +#: src/conf.py:1491 +msgid "" +"Determines whether the bot will automatically\n" +" flush all flushers *very* often. Useful for debugging when you don't " +"know\n" +" what's breaking or when, but think that it might be logged." +msgstr "" +"Определяет, будет ли бот автоматически очищать память *очень* часто. " +"Полезно для отладки, когда вы не знаете, что и когда ломается, но думаете, " +"что это может быть занесено в журнал." +#: src/httpserver.py:62 #, fuzzy msgid "Supybot Web server index" msgstr "Индекс веб-сервера Supybot" +#: src/httpserver.py:67 msgid "Here is a list of the plugins that have a Web interface:" msgstr "Вот список плагинов, имеющих веб-интерфейс:" -msgid "\n This is a default response of the Supybot HTTP server. If you see this\n message, it probably means you are developing a plugin, and you have\n neither overriden this message or defined an handler for this query." -msgstr "Это стандартный ответ HTTP-сервера Supybot. Если вы видите это сообщение, возможно вы занимаетесь разработкой плагина и не задали это сообщение или не задали обработчик для этого запроса." +#: src/httpserver.py:245 +msgid "" +"\n" +" This is a default response of the Supybot HTTP server. If you see this\n" +" message, it probably means you are developing a plugin, and you have\n" +" neither overriden this message or defined an handler for this query." +msgstr "" +"Это стандартный ответ HTTP-сервера Supybot. Если вы видите это сообщение, " +"возможно вы занимаетесь разработкой плагина и не задали это сообщение или не " +"задали обработчик для этого запроса." -msgid "\n I am a pretty clever IRC bot, but I suck at serving Web pages, particulary\n if I don't know what to serve.\n What I'm saying is you just triggered a 404 Not Found, and I am not\n trained to help you in such a case." -msgstr "Я довольно умный IRC-бот, но у меня плохо получается работать с веб-страницами, особенно, если я не знаю, что именно нужно пользователю. То есть вы только что спровоцировали ошибку 404 (Not Found), а я не способен помочь вам в этом случае." +#: src/httpserver.py:291 +msgid "" +"\n" +" I am a pretty clever IRC bot, but I suck at serving Web pages, " +"particulary\n" +" if I don't know what to serve.\n" +" What I'm saying is you just triggered a 404 Not Found, and I am not\n" +" trained to help you in such a case." +msgstr "" +"Я довольно умный IRC-бот, но у меня плохо получается работать с веб-" +"страницами, особенно, если я не знаю, что именно нужно пользователю. То есть " +"вы только что спровоцировали ошибку 404 (Not Found), а я не способен помочь " +"вам в этом случае." +#: src/httpserver.py:310 msgid "Request not handled." msgstr "Запрос не обработан." +#: src/httpserver.py:317 msgid "No plugins available." msgstr "Нет доступных плагинов." +#: src/httpserver.py:335 src/httpserver.py:353 src/httpserver.py:391 msgid "Request not handled" msgstr "Запрос не обработан" +#: src/httpserver.py:378 msgid "No favicon set." msgstr "Нет установленного favicon." +#: src/ircutils.py:573 msgid "is an op on %L" msgstr "является оператором в %L" +#: src/ircutils.py:575 msgid "is a halfop on %L" msgstr "является полуоператором в %L" +#: src/ircutils.py:577 msgid "is voiced on %L" msgstr "имеет voice в %L" +#: src/ircutils.py:580 msgid "is also on %L" msgstr "также есть в %L" +#: src/ircutils.py:582 msgid "is on %L" msgstr "находится в %L" +#: src/ircutils.py:585 msgid "isn't on any publicly visible channels" msgstr "нет ни в одном общедоступном канале" +#: src/ircutils.py:593 src/ircutils.py:594 src/ircutils.py:600 msgid "" msgstr "<неизвестный>" +#: src/ircutils.py:602 msgid " %s is away: %s." msgstr " %s отсутствует: %s." +#: src/ircutils.py:607 msgid " identified" msgstr " идентифицированный" +#: src/ircutils.py:613 #, fuzzy msgid "%s (%s) has been%s on server %s since %s (idle for %s). %s %s.%s" -msgstr "%s (%s) находится%s на сервере %s с %s (простаивает в течение %s). %s %s.%s" +msgstr "" +"%s (%s) находится%s на сервере %s с %s (простаивает в течение %s). %s %s.%s" +#: src/ircutils.py:617 #, fuzzy msgid "%s (%s) has been%s on server %s and disconnected on %s." msgstr "%s (%s) был %s на сервере %s и отключен на %s." +#: src/questions.py:61 #, fuzzy msgid "Sorry, that response was not an option." msgstr "Извините, но такой ответ не подходит." +#: src/questions.py:110 msgid "Sorry, you must enter a value." msgstr "Извините, но вы должны ввести значение." +#: src/questions.py:130 msgid "Enter password: " msgstr "Введите пароль: " +#: src/questions.py:132 msgid "Re-enter password: " msgstr "Повторите пароль: " +#: src/questions.py:145 msgid "Passwords don't match." msgstr "Пароли не совпадают." +#: src/registry.py:219 #, fuzzy msgid "%r is not a valid entry in %r" msgstr "%r не является действительной записью в %r" +#: src/registry.py:568 msgid "Value must be either True or False (or On or Off), not %r." msgstr "Значение должно быть либо True, либо False (или On, или Off), а не %r." +#: src/registry.py:585 msgid "Value must be an integer, not %r." msgstr "Значение должно быть целым числом, а не %r." +#: src/registry.py:595 msgid "Value must be a non-negative integer, not %r." msgstr "Значение должно быть целым неотрицательным числом, а не %r." +#: src/registry.py:604 msgid "Value must be positive (non-zero) integer, not %r." msgstr "Значение должно быть положительным (ненулевым) целым числом, а не %r." +#: src/registry.py:613 msgid "Value must be a floating-point number, not %r." msgstr "Значение должно быть числом с плавающей точкой, а не %r." +#: src/registry.py:629 msgid "Value must be a floating-point number greater than zero, not %r." msgstr "Значение должно быть числом с плавающей точкой больше нуля, а не %r." +#: src/registry.py:640 msgid "Value must be a floating point number in the range [0, 1], not %r." -msgstr "Значение должно быть числом с плавающей точкой в диапазоне [0, 1], а не %r." +msgstr "" +"Значение должно быть числом с плавающей точкой в диапазоне [0, 1], а не %r." +#: src/registry.py:655 msgid "Value should be a valid Python string, not %r." msgstr "Значение должно быть допустимой Python-строкой, а не %r." +#: src/registry.py:693 msgid "Valid values include %L." msgstr "Допустимые значения включают %L." +#: src/registry.py:695 msgid "Valid values include %L, not %%r." msgstr "Допустимые значения включают в себя %L, а не %%r." +#: src/registry.py:769 msgid "Value must be a valid regular expression, not %r." msgstr "Значение должно быть допустимым регулярным выражением, а не %r." +#: src/utils/gen.py:113 msgid "year" msgstr "год" +#: src/utils/gen.py:116 msgid "week" msgstr "неделя" +#: src/utils/gen.py:119 msgid "day" msgstr "день" +#: src/utils/gen.py:122 msgid "hour" msgstr "час" +#: src/utils/gen.py:126 msgid "minute" msgstr "минута" +#: src/utils/gen.py:129 msgid "second" msgstr "секунда" +#: src/utils/gen.py:138 msgid "%s ago" msgstr "%s назад" +#: src/utils/str.py:349 msgid "and" msgstr "и" From 6f6f952338efca60ca5db624d270dda5bb1175ff Mon Sep 17 00:00:00 2001 From: Valentin Lorentz Date: Mon, 26 Aug 2024 18:38:36 +0200 Subject: [PATCH 39/69] Factoids: Fix search results when single key matched 1. Display the key itself (in addition to the values), because searching factoids makes little sense without returning the key 2. Display only matching values, instead of all other values, because some filters act on values --- plugins/Factoids/plugin.py | 51 ++++++++++++++++++++++++++++++++++---- plugins/Factoids/test.py | 12 +++++++++ 2 files changed, 58 insertions(+), 5 deletions(-) diff --git a/plugins/Factoids/plugin.py b/plugins/Factoids/plugin.py index cfa20d49b..0f9ea018e 100644 --- a/plugins/Factoids/plugin.py +++ b/plugins/Factoids/plugin.py @@ -815,6 +815,7 @@ class Factoids(callbacks.Plugin, plugins.ChannelDBHandler): join_factoids = False formats = [] criteria = [] + join_criteria = [] target = 'keys.key' predicateName = 'p' db = self.getDb(channel) @@ -836,20 +837,23 @@ class Factoids(callbacks.Plugin, plugins.ChannelDBHandler): criteria.append('TARGET LIKE ?') formats.append(self._sqlTrans(glob)) - if join_factoids: + def _join_factoids(): if 'factoids' not in tables: tables.append('factoids') tables.append('relations') - criteria.append( + join_criteria.append( 'factoids.id=relations.fact_id AND keys.id=relations.key_id' ) + if join_factoids: + _join_factoids() cursor = db.cursor() - sql = """SELECT keys.key FROM %s WHERE %s""" % \ - (', '.join(tables), ' AND '.join(criteria)) + sql = """SELECT DISTINCT keys.key FROM %s WHERE %s""" % \ + (', '.join(tables), ' AND '.join(criteria + join_criteria)) sql = sql + " ORDER BY keys.key" sql = sql.replace('TARGET', target) cursor.execute(sql, formats) + if cursor.rowcount == 0: irc.reply(_('No keys matched that query.')) elif cursor.rowcount == 1 and \ @@ -865,7 +869,44 @@ class Factoids(callbacks.Plugin, plugins.ChannelDBHandler): elif len(results) == 1 and \ self.registryValue('showFactoidIfOnlyOneMatch', channel, irc.network): - self.whatis(irc, msg, [channel, results[0][0]]) + ((key,),) = results + + # add the knowledge we gained, so avoid a full search again + join_criteria.append('keys.key=?') + formats.append(key) + + if not join_factoids: + # if they were not joined before, we need to join + # them now to get the values + _join_factoids() + + sql = """ + SELECT factoids.fact, (1 AND %s) FROM %s + WHERE %s + ORDER BY factoids.id + """ % \ + (' AND '.join(criteria), ', '.join(tables), + ' AND '.join(['keys.key=?', *join_criteria])) + sql = sql.replace('TARGET', target) + formats.append(key) + cursor.execute(sql, formats) + factoids = cursor.fetchall() + assert factoids # we had a result before, and still should now + if len(factoids) == 1: + ((fact, included),) = factoids + assert included # matched before, should still match now + irc.reply('%s is %s' % + (key, ircutils.standardSubstitute(irc, msg, fact))) + else: + factoidsS = [] + counter = 1 + for (fact, included) in factoids: + if included: + factoidsS.append(format('(#%i) %s', counter, + ircutils.standardSubstitute(irc, msg, fact))) + counter += 1 + irc.replies(factoidsS, prefixer=lambda s: '%s is %s' % (key, s), + joiner=', or ', onlyPrefixFirst=True) elif len(results) > 100: irc.reply(_('More than 100 keys matched that query; ' 'please narrow your query.')) diff --git a/plugins/Factoids/test.py b/plugins/Factoids/test.py index a600fd4c1..7e253c009 100644 --- a/plugins/Factoids/test.py +++ b/plugins/Factoids/test.py @@ -118,6 +118,18 @@ class FactoidsTestCase(ChannelPluginTestCase): self.assertRegexp('factoids search --author blahblah j*', 'No keys matched that query.') + def testSearchMultiFactoids(self): + self.assertNotError('learn water is wet') + self.assertResponse('factoids search --values we', 'water is wet') + self.assertNotError('learn water is H2O') + self.assertNotError('learn fire is hot') + self.assertResponse('factoids search --values we', 'water is (#1) wet') + self.assertResponse('factoids search --values H2', 'water is (#2) H2O') + + self.assertNotError('learn water is very wet') + self.assertResponse('factoids search --values we', + 'water is (#1) wet, or (#3) very wet') + def testWhatisOnNumbers(self): self.assertNotError('learn 911 is emergency number') self.assertRegexp('whatis 911', 'emergency number') From 2aa1f916b053cb8a3622d5d20b2de6092f2e265b Mon Sep 17 00:00:00 2001 From: Codimp Date: Fri, 4 Oct 2024 20:00:07 +0200 Subject: [PATCH 40/69] Unix: Fix IPv6 formating of `@ping` command (#1595) --- plugins/Unix/plugin.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/Unix/plugin.py b/plugins/Unix/plugin.py index b559ec060..25e42276d 100644 --- a/plugins/Unix/plugin.py +++ b/plugins/Unix/plugin.py @@ -332,8 +332,8 @@ class Unix(callbacks.Plugin): else: response = result[0].decode('utf8').split("\n"); if response[1]: - irc.reply(' '.join(response[1].split()[3:5]).split(':')[0] - + ': ' + ' '.join(response[-3:])) + irc.reply(' '.join(response[1].split()[3:5]).split(': ')[0] + + ' ' + ' '.join(response[-3:])) else: irc.reply(' '.join(response[0].split()[1:3]) + ': ' + ' '.join(response[-3:])) From b13ebebc8330f0de540c5f0fd8d64f1ba6c1d88e Mon Sep 17 00:00:00 2001 From: Valentin Lorentz Date: Mon, 14 Oct 2024 08:34:51 +0200 Subject: [PATCH 41/69] Web: Add workaround for minified Reddit URLs --- plugins/Web/plugin.py | 45 +++++++++++++++++++++++++++++++++---------- plugins/Web/test.py | 3 +++ 2 files changed, 38 insertions(+), 10 deletions(-) diff --git a/plugins/Web/plugin.py b/plugins/Web/plugin.py index c56da8535..c4d1dfbe5 100644 --- a/plugins/Web/plugin.py +++ b/plugins/Web/plugin.py @@ -150,22 +150,47 @@ class Web(callbacks.PluginRegexp): def getTitle(self, irc, url, raiseErrors, msg): size = conf.supybot.protocols.http.peekSize() - parsed_url = utils.web.urlparse(url) - if parsed_url.netloc in ('youtube.com', 'youtu.be') \ - or parsed_url.netloc.endswith(('.youtube.com')): - # there is a lot of Javascript before the - size = max(819200, size) - if parsed_url.netloc in ('reddit.com', 'www.reddit.com', 'new.reddit.com'): - # Since 2022-03, New Reddit has 'Reddit - Dive into anything' as - # <title> on every page. - parsed_url = parsed_url._replace(netloc='old.reddit.com') - url = utils.web.urlunparse(parsed_url) + def url_workaround(url): + """Returns a new URL that should be the target of a new request, + or None if the request is fine as it is. + The returned URL may be the same as the parameter, in case + something else was changed by this function through side-effects. + """ + nonlocal size + parsed_url = utils.web.urlparse(url) + print(repr(parsed_url.netloc)) + if parsed_url.netloc in ('youtube.com', 'youtu.be') \ + or parsed_url.netloc.endswith(('.youtube.com')): + # there is a lot of Javascript before the <title> + if size < 819200: + size = max(819200, size) + return url + else: + return None + if parsed_url.netloc in ('reddit.com', 'www.reddit.com', 'new.reddit.com'): + # Since 2022-03, New Reddit has 'Reddit - Dive into anything' as + # <title> on every page. + parsed_url = parsed_url._replace(netloc='old.reddit.com') + url = utils.web.urlunparse(parsed_url) + self.log.debug("Rewrite URL to %s", url) + return url + + return None + + url = url_workaround(url) or url timeout = self.registryValue('timeout') headers = conf.defaultHttpHeaders(irc.network, msg.channel) try: fd = utils.web.getUrlFd(url, timeout=timeout, headers=headers) target = fd.geturl() + fixed_target = url_workaround(target) + if fixed_target is not None: + # happens when using minification services linking to one of + # the websites handled by url_workaround; eg. v.redd.it + fd.close() + fd = utils.web.getUrlFd(fixed_target, timeout=timeout, headers=headers) + target = fd.geturl() text = fd.read(size) response_headers = fd.headers fd.close() diff --git a/plugins/Web/test.py b/plugins/Web/test.py index e8ecdff33..b35ceb5e7 100644 --- a/plugins/Web/test.py +++ b/plugins/Web/test.py @@ -84,6 +84,9 @@ class WebTestCase(ChannelPluginTestCase): self.assertRegexp( 'title https://www.reddit.com/r/irc/', 'Internet Relay Chat') + self.assertRegexp( + 'title https://v.redd.it/odhemxo6giud1', + 'Small Kitty Big Goals : MadeMeSmile') def testTitleMarcinfo(self): # Checks that we don't crash on 'Content-Type: text/html;' From 54c09809786db7a6468c48dedc788287fbcded72 Mon Sep 17 00:00:00 2001 From: Val Lorentz <progval+git@progval.net> Date: Sat, 19 Oct 2024 08:51:27 +0200 Subject: [PATCH 42/69] CI: Replace Python 3.13.0-alpha.6 with 3.13.0 (#1598) --- .github/workflows/test.yml | 4 ++-- setup.py | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 2345ef63a..a1a724f59 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -15,8 +15,8 @@ jobs: strategy: matrix: include: - - python-version: "3.13.0-alpha.6" - with-opt-deps: false # https://github.com/pyca/cryptography/issues/10806 + - python-version: "3.13.0" + with-opt-deps: true runs-on: ubuntu-22.04 - python-version: "3.12.0" diff --git a/setup.py b/setup.py index 8f3b8f3c7..888cde1ef 100644 --- a/setup.py +++ b/setup.py @@ -208,6 +208,7 @@ setup( 'Programming Language :: Python :: 3.10', 'Programming Language :: Python :: 3.11', 'Programming Language :: Python :: 3.12', + 'Programming Language :: Python :: 3.13', 'Topic :: Communications :: Chat :: Internet Relay Chat', 'Topic :: Software Development :: Libraries :: Python Modules', ], From 246f4d3e626cdbb1d744ba9c4e06c704d8c30a95 Mon Sep 17 00:00:00 2001 From: Valentin Lorentz <progval+git@progval.net> Date: Sun, 20 Oct 2024 20:40:35 +0200 Subject: [PATCH 43/69] ircdb: Fix hostmask conflict resolution in getUserId When the first of the two conflicts comes from a transient hostmask set by NickAuth, the first value in the 'ids' dict would be True, which causes a silly log message, then Limnoria silently crashes to self.users[id].removeHostmask(hostmask) and then does not remove the next hostmask which is responsible for the conflict. --- src/ircdb.py | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/ircdb.py b/src/ircdb.py index 71d5900f5..c46c46ab4 100644 --- a/src/ircdb.py +++ b/src/ircdb.py @@ -786,9 +786,21 @@ class UsersDictionary(utils.IterableMap): elif len(ids) == 0: raise KeyError(s) else: - log.error('Multiple matches found in user database. ' - 'Removing the offending hostmasks.') + # values in 'ids' are strings if user was identified by + # actual hostmask, or True if they were identified by + # a transient authentication (@identify, NickAuth, GPG, + # etc.) + log.error( + 'Multiple matches found in user database: [%s]. ' + 'Removing the offending hostmasks.', + ', '.join( + '<transient>' + if hostmask is True + else repr(hostmask) + for hostmask in ids.values())) for (id, hostmask) in ids.items(): + if hostmask is True: + continue log.error('Removing %q from user %s.', hostmask, id) self.users[id].removeHostmask(hostmask) raise DuplicateHostmask('Ids %r matched.' % ids) From cb51940b422bc1db5c8f09be169c8e15a9249eaf Mon Sep 17 00:00:00 2001 From: Valentin Lorentz <progval+git@progval.net> Date: Tue, 22 Oct 2024 18:59:24 +0200 Subject: [PATCH 44/69] Web: Remove debug print --- plugins/Web/plugin.py | 1 - 1 file changed, 1 deletion(-) diff --git a/plugins/Web/plugin.py b/plugins/Web/plugin.py index c4d1dfbe5..49d146703 100644 --- a/plugins/Web/plugin.py +++ b/plugins/Web/plugin.py @@ -159,7 +159,6 @@ class Web(callbacks.PluginRegexp): """ nonlocal size parsed_url = utils.web.urlparse(url) - print(repr(parsed_url.netloc)) if parsed_url.netloc in ('youtube.com', 'youtu.be') \ or parsed_url.netloc.endswith(('.youtube.com')): # there is a lot of Javascript before the <title> From 8ec873015aac3ba4193a2d498eb294975615b296 Mon Sep 17 00:00:00 2001 From: Claire <blankeclair@disroot.org> Date: Wed, 23 Oct 2024 18:19:37 +0000 Subject: [PATCH 45/69] registry: Fix some config values being reset when running upkeep For example, with `supybot.protocols.http.proxy`: When upkeep is being executed, it runs the flushers: https://github.com/progval/Limnoria/blob/246f4d3e626cdbb1d744ba9c4e06c704d8c30a95/src/world.py#L148-L150 In the main limnoria script, it registers a flusher that saves the registry to disk: https://github.com/progval/Limnoria/blob/246f4d3e626cdbb1d744ba9c4e06c704d8c30a95/src/scripts/limnoria.py#L243-L252 When saving the registry to disk, the code instantiates the class with its default value to print it out in the file: https://github.com/progval/Limnoria/blob/246f4d3e626cdbb1d744ba9c4e06c704d8c30a95/src/registry.py#L149-L159 Instantiating the class calls `setValue()` by default: https://github.com/progval/Limnoria/blob/246f4d3e626cdbb1d744ba9c4e06c704d8c30a95/src/registry.py#L347-L348 supybot.protocols.http.proxy uses a custom type that changes global state when `setValue()` is called: https://github.com/progval/Limnoria/blob/246f4d3e626cdbb1d744ba9c4e06c704d8c30a95/src/conf.py#L1416-L1432 Fixed GH-1349. --- src/registry.py | 7 ++++++- test/test_registry.py | 18 ++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/registry.py b/src/registry.py index 25ee99881..8a18d9627 100644 --- a/src/registry.py +++ b/src/registry.py @@ -148,7 +148,12 @@ def close(registry, filename, private=True): if value._showDefault: lines.append('#\n') try: - x = value.__class__(value._default, value._help) + # We set setDefault to False and manually call + # Value._setValue, just in case the class inherits + # Value.setValue to set some global state (#1349) + x = value.__class__(value._default, value._help, + setDefault=False) + x.value = value._default except Exception as e: exception('Exception instantiating default for %s:' % value._name) diff --git a/test/test_registry.py b/test/test_registry.py index 14616fa15..d015f2180 100644 --- a/test/test_registry.py +++ b/test/test_registry.py @@ -224,6 +224,24 @@ class ValuesTestCase(SupyTestCase): registry.open_registry(filename) self.assertEqual(conf.supybot.networks.test.password(), ' foo ') + def testSetValueUncalledOnClose(self): + values_set = 0 + class StringWithSetLogging(registry.String): + def setValue(self, v): + nonlocal values_set + values_set += 1 + + super(StringWithSetLogging, self).setValue(v) + + group = registry.Group() + group.setName('group') + conf.registerGlobalValue(group, 'string', StringWithSetLogging('test', 'help')) + group.string.set('mrrp') + + filename = conf.supybot.directories.conf.dirize('setvaluecalls.conf') + registry.close(group, filename) + self.assertEqual(values_set, 2) + def testReload(self): import supybot.world as world with conf.supybot.reply.whenAddressedBy.chars.context('@'): From fd421327719d406d6308bc4ba709852d03faeafa Mon Sep 17 00:00:00 2001 From: Valentin Lorentz <progval+git@progval.net> Date: Sat, 16 Nov 2024 10:50:15 +0100 Subject: [PATCH 46/69] Web: Fix <title> extraction in presence of nested <svg> --- plugins/Web/plugin.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/plugins/Web/plugin.py b/plugins/Web/plugin.py index 49d146703..c9d9c069e 100644 --- a/plugins/Web/plugin.py +++ b/plugins/Web/plugin.py @@ -1,7 +1,7 @@ ### # Copyright (c) 2005, Jeremiah Fincher # Copyright (c) 2009, James McCoy -# Copyright (c) 2010-2021, Valentin Lorentz +# Copyright (c) 2010-2024, Valentin Lorentz # All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -59,24 +59,24 @@ class Title(utils.web.HtmlToText): entitydefs['nbsp'] = ' ' def __init__(self): self.inTitle = False - self.inSvg = False + self.inSvg = 0 # counter instead of boolean because svg can be nested utils.web.HtmlToText.__init__(self) @property def inHtmlTitle(self): - return self.inTitle and not self.inSvg + return self.inTitle and self.inSvg == 0 def handle_starttag(self, tag, attrs): if tag == 'title': self.inTitle = True elif tag == 'svg': - self.inSvg = True + self.inSvg += 1 def handle_endtag(self, tag): if tag == 'title': self.inTitle = False elif tag == 'svg': - self.inSvg = False + self.inSvg = max(0, self.inSvg - 1) def append(self, data): if self.inHtmlTitle: From 92a7b05e4c19ba8fc9b5323dd11340d9a69534d3 Mon Sep 17 00:00:00 2001 From: Stathis Xantinidis <spithash@tuta.io> Date: Thu, 21 Nov 2024 15:58:04 +0200 Subject: [PATCH 47/69] added spithash repo My plugins repo. All of them are mine with an exception of DuckHunt in which I made an emoji enhancement. --- plugins/PluginDownloader/plugin.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/plugins/PluginDownloader/plugin.py b/plugins/PluginDownloader/plugin.py index cd2434021..c6832a86e 100644 --- a/plugins/PluginDownloader/plugin.py +++ b/plugins/PluginDownloader/plugin.py @@ -231,6 +231,10 @@ repositories = utils.InsensitivePreservingDict({ 'matiasw', 'my-limnoria-plugins', ), + 'spithash': GithubRepository( + 'spithash', + 'Limnoria-Plugins', + ), }) class PluginDownloader(callbacks.Plugin): From 4b79a64db619924e38eae4ae097f4876726fc552 Mon Sep 17 00:00:00 2001 From: Valentin Lorentz <progval+git@progval.net> Date: Sat, 30 Nov 2024 10:45:08 +0100 Subject: [PATCH 48/69] Add support for negative integers options following getopt --- src/commands.py | 18 ++++++++++++++++-- test/test_commands.py | 20 ++++++++++++++++++++ 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/src/commands.py b/src/commands.py index 7da905fa4..7c11ff5d2 100644 --- a/src/commands.py +++ b/src/commands.py @@ -1070,7 +1070,17 @@ class getopts(context): def __call__(self, irc, msg, args, state): if LOG_CONVERTERS: log.debug('args before %r: %r', self, args) - (optlist, rest) = getopt.getopt(args, self.getoptLs, self.getoptL) + + # look for the first '--' token, it forcefully ends the getopt list, + # which allows the next arguments to start with a - + try: + sep = args.index('--') + except ValueError: + sep = None + else: + log.debug('getopt stopping at "--" token at position %d', sep) + + (optlist, rest) = getopt.getopt(args[:sep], self.getoptLs, self.getoptL) getopts = [] for (opt, arg) in optlist: if opt.startswith('--'): @@ -1088,7 +1098,11 @@ class getopts(context): else: getopts.append((opt, True)) state.args.append(getopts) - args[:] = rest + + if sep is None: + args[:] = rest + else: + args[:sep+1] = rest if LOG_CONVERTERS: log.debug('args after %r: %r', self, args) diff --git a/test/test_commands.py b/test/test_commands.py index cb66483b1..aa496e88f 100644 --- a/test/test_commands.py +++ b/test/test_commands.py @@ -135,6 +135,26 @@ class GeneralContextTestCase(CommandsTestCase): self.assertRaises(getopt.GetoptError, self.assertStateErrored, spec, ['12', '--f', 'baz', '--ba', '13', '15']) + def testGetoptsMinusInValue(self): + spec = ['int', getopts({'foo': None, 'bar': 'int'}), 'int'] + self.assertState(spec, + ['12', '--foo', 'baz', '--bar', '-13', '15'], + [12, [('foo', 'baz'), ('bar', -13)], 15]) + + def testGetoptsMinusInNextArg(self): + spec = ['int', getopts({'foo': None, 'bar': 'int'}), 'int'] + + with self.assertRaises( + getopt.GetoptError, msg='option -1 not recognized'): + self.assertState(spec, + ['12', '--foo', 'baz', '--bar', '13', '-15'], + []) + + self.assertState(spec, + ['12', '--foo', 'baz', '--bar', '13', '--', '-15'], + [12, [('foo', 'baz'), ('bar', 13)], -15]) + + def testAny(self): self.assertState([any('int')], ['1', '2', '3'], [[1, 2, 3]]) self.assertState([None, any('int')], ['1', '2', '3'], ['1', [2, 3]]) From b76a6db1a95a6b7e9cef87dd73990f638dd819ff Mon Sep 17 00:00:00 2001 From: Valentin Lorentz <progval+git@progval.net> Date: Fri, 6 Dec 2024 11:01:09 +0100 Subject: [PATCH 49/69] Regenerate .pot files --- locales/de.po | 492 ++++++++++++----------- locales/fi.po | 515 ++++++++++++++----------- locales/fr.po | 510 +++++++++++++----------- locales/it.po | 503 +++++++++++++----------- locales/messages.pot | 484 ++++++++++++----------- locales/ru.po | 512 +++++++++++++----------- plugins/Admin/messages.pot | 2 +- plugins/Aka/locales/fi.po | 94 +++-- plugins/Aka/locales/ru.po | 113 +++--- plugins/Aka/messages.pot | 84 ++-- plugins/Alias/locales/de.po | 43 ++- plugins/Alias/locales/fi.po | 43 ++- plugins/Alias/locales/fr.po | 43 ++- plugins/Alias/locales/hu.po | 43 ++- plugins/Alias/locales/it.po | 43 ++- plugins/Alias/messages.pot | 38 +- plugins/Anonymous/messages.pot | 2 +- plugins/AutoMode/messages.pot | 2 +- plugins/Autocomplete/messages.pot | 2 +- plugins/BadWords/locales/fi.po | 23 +- plugins/BadWords/locales/fr.po | 23 +- plugins/BadWords/locales/it.po | 27 +- plugins/BadWords/messages.pot | 10 +- plugins/Channel/locales/de.po | 148 +++---- plugins/Channel/locales/fi.po | 149 +++---- plugins/Channel/locales/fr.po | 148 +++---- plugins/Channel/locales/hu.po | 148 +++---- plugins/Channel/locales/it.po | 148 +++---- plugins/Channel/messages.pot | 138 +++---- plugins/ChannelLogger/messages.pot | 2 +- plugins/ChannelStats/messages.pot | 2 +- plugins/Conditional/messages.pot | 2 +- plugins/Config/messages.pot | 2 +- plugins/Ctcp/messages.pot | 2 +- plugins/DDG/messages.pot | 2 +- plugins/Debug/messages.pot | 34 +- plugins/Dict/messages.pot | 2 +- plugins/Dunno/messages.pot | 2 +- plugins/Factoids/locales/fi.po | 6 +- plugins/Factoids/locales/fr.po | 6 +- plugins/Factoids/locales/it.po | 10 +- plugins/Factoids/messages.pot | 6 +- plugins/Fediverse/messages.pot | 32 +- plugins/Filter/messages.pot | 2 +- plugins/Format/messages.pot | 2 +- plugins/GPG/messages.pot | 76 ++-- plugins/Games/messages.pot | 2 +- plugins/Geography/messages.pot | 8 +- plugins/Google/locales/fi.po | 118 +++--- plugins/Google/locales/fr.po | 107 +++-- plugins/Google/locales/it.po | 122 +++--- plugins/Google/messages.pot | 53 +-- plugins/Hashes/messages.pot | 2 +- plugins/Herald/messages.pot | 2 +- plugins/Internet/locales/fi.po | 26 +- plugins/Internet/locales/fr.po | 26 +- plugins/Internet/locales/it.po | 26 +- plugins/Internet/messages.pot | 26 +- plugins/Karma/messages.pot | 2 +- plugins/Lart/messages.pot | 2 +- plugins/Later/messages.pot | 2 +- plugins/Limiter/messages.pot | 2 +- plugins/LogToIrc/messages.pot | 9 +- plugins/Math/locales/fi.po | 14 +- plugins/Math/locales/fr.po | 14 +- plugins/Math/locales/hu.po | 14 +- plugins/Math/locales/it.po | 14 +- plugins/Math/messages.pot | 14 +- plugins/MessageParser/locales/fi.po | 38 +- plugins/MessageParser/locales/fr.po | 38 +- plugins/MessageParser/locales/it.po | 38 +- plugins/MessageParser/messages.pot | 38 +- plugins/Misc/locales/de.po | 104 +++-- plugins/Misc/locales/fi.po | 107 ++--- plugins/Misc/locales/fr.po | 107 ++--- plugins/Misc/locales/hu.po | 104 +++-- plugins/Misc/locales/it.po | 111 +++--- plugins/Misc/messages.pot | 98 +++-- plugins/MoobotFactoids/locales/fi.po | 100 ++--- plugins/MoobotFactoids/locales/fr.po | 100 ++--- plugins/MoobotFactoids/locales/it.po | 100 ++--- plugins/MoobotFactoids/messages.pot | 99 ++--- plugins/Network/locales/de.po | 28 +- plugins/Network/locales/fi.po | 32 +- plugins/Network/locales/fr.po | 28 +- plugins/Network/locales/it.po | 30 +- plugins/Network/messages.pot | 15 +- plugins/News/messages.pot | 2 +- plugins/NickAuth/messages.pot | 2 +- plugins/NickCapture/messages.pot | 2 +- plugins/Nickometer/messages.pot | 2 +- plugins/Note/messages.pot | 2 +- plugins/Owner/locales/de.po | 36 +- plugins/Owner/locales/fi.po | 36 +- plugins/Owner/locales/fr.po | 36 +- plugins/Owner/locales/hu.po | 36 +- plugins/Owner/locales/it.po | 36 +- plugins/Owner/messages.pot | 36 +- plugins/Plugin/messages.pot | 2 +- plugins/PluginDownloader/locales/de.po | 38 +- plugins/PluginDownloader/locales/fi.po | 56 +-- plugins/PluginDownloader/locales/fr.po | 60 +-- plugins/PluginDownloader/locales/it.po | 38 +- plugins/PluginDownloader/locales/ru.po | 56 +-- plugins/PluginDownloader/messages.pot | 34 +- plugins/Poll/messages.pot | 40 +- plugins/Praise/messages.pot | 2 +- plugins/Protector/locales/fi.po | 4 +- plugins/Protector/locales/fr.po | 4 +- plugins/Protector/locales/it.po | 4 +- plugins/Protector/messages.pot | 4 +- plugins/Quote/messages.pot | 2 +- plugins/QuoteGrabs/messages.pot | 2 +- plugins/RSS/locales/de.po | 72 ++-- plugins/RSS/locales/fi.po | 76 ++-- plugins/RSS/locales/fr.po | 77 ++-- plugins/RSS/locales/hu.po | 72 ++-- plugins/RSS/locales/it.po | 72 ++-- plugins/RSS/messages.pot | 68 ++-- plugins/Relay/locales/fi.po | 20 +- plugins/Relay/locales/fr.po | 20 +- plugins/Relay/locales/it.po | 20 +- plugins/Relay/messages.pot | 20 +- plugins/Reply/messages.pot | 2 +- plugins/Scheduler/locales/fi.po | 30 +- plugins/Scheduler/locales/fr.po | 30 +- plugins/Scheduler/locales/it.po | 30 +- plugins/Scheduler/messages.pot | 26 +- plugins/SedRegex/messages.pot | 35 +- plugins/Seen/locales/de.po | 72 ++-- plugins/Seen/locales/fi.po | 72 ++-- plugins/Seen/locales/fr.po | 70 ++-- plugins/Seen/locales/it.po | 72 ++-- plugins/Seen/locales/ru.po | 110 +++--- plugins/Seen/messages.pot | 62 ++- plugins/Services/locales/de.po | 93 +++-- plugins/Services/locales/fi.po | 93 +++-- plugins/Services/locales/fr.po | 93 +++-- plugins/Services/locales/it.po | 93 +++-- plugins/Services/messages.pot | 91 +++-- plugins/ShrinkUrl/messages.pot | 2 +- plugins/Status/locales/de.po | 64 +-- plugins/Status/locales/fi.po | 64 +-- plugins/Status/locales/fr.po | 64 +-- plugins/Status/locales/it.po | 64 +-- plugins/Status/messages.pot | 54 +-- plugins/String/locales/fi.po | 51 +-- plugins/String/locales/fr.po | 51 +-- plugins/String/locales/it.po | 51 +-- plugins/String/messages.pot | 47 +-- plugins/Success/messages.pot | 2 +- plugins/Time/locales/de.po | 32 +- plugins/Time/locales/fi.po | 32 +- plugins/Time/locales/fr.po | 32 +- plugins/Time/locales/hu.po | 36 +- plugins/Time/locales/it.po | 32 +- plugins/Time/messages.pot | 32 +- plugins/Todo/messages.pot | 2 +- plugins/Topic/messages.pot | 2 +- plugins/URL/locales/fi.po | 4 +- plugins/URL/locales/fr.po | 4 +- plugins/URL/locales/it.po | 4 +- plugins/URL/messages.pot | 4 +- plugins/Unix/locales/fi.po | 70 ++-- plugins/Unix/locales/fr.po | 70 ++-- plugins/Unix/locales/it.po | 70 ++-- plugins/Unix/messages.pot | 66 ++-- plugins/User/locales/de.po | 18 +- plugins/User/locales/fi.po | 18 +- plugins/User/locales/fr.po | 18 +- plugins/User/locales/hu.po | 18 +- plugins/User/locales/it.po | 18 +- plugins/User/messages.pot | 18 +- plugins/Utilities/messages.pot | 2 +- plugins/Web/locales/de.po | 51 ++- plugins/Web/locales/fi.po | 51 ++- plugins/Web/locales/fr.po | 51 ++- plugins/Web/locales/it.po | 51 ++- plugins/Web/messages.pot | 51 ++- 179 files changed, 5461 insertions(+), 4713 deletions(-) diff --git a/locales/de.po b/locales/de.po index bfa7baa4f..06674a2d2 100644 --- a/locales/de.po +++ b/locales/de.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: Supybot\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2011-10-28 18:53+0100\n" "Last-Translator: Florian Besser <fbesser@gmail.com>\n" "Language-Team: German <fbesser@gmail.com>\n" @@ -21,7 +21,7 @@ msgstr "Fehler: " msgid "Error: I tried to send you an empty message." msgstr "Fehler: Ich habe versucht eine leere Nachricht zu senden." -#: src/callbacks.py:361 +#: src/callbacks.py:365 msgid "" "Missing \"%s\". You may want to quote your arguments with double quotes in " "order to prevent extra brackets from being evaluated as nested commands." @@ -30,7 +30,7 @@ msgstr "" "Anführungszeichen setzen um zu verhindern das eine Klammern als " "Verschachtelung gewertet werden." -#: src/callbacks.py:390 +#: src/callbacks.py:394 msgid "" "\"|\" with nothing preceding. I obviously can't do a pipe with nothing " "before the |." @@ -38,7 +38,7 @@ msgstr "" "\"|\" mit nichts vorhergehendem. Eine pipe ohne Eingangsmaterial vor dem | " "funktioniert nicht." -#: src/callbacks.py:398 +#: src/callbacks.py:402 msgid "" "Spurious \"%s\". You may want to quote your arguments with double quotes in " "order to prevent extra brackets from being evaluated as nested commands." @@ -47,7 +47,7 @@ msgstr "" "zu verhindern, dass zusätzliche Anführungszeichen als verschachtelte Befehle " "ausgewertet werden." -#: src/callbacks.py:407 +#: src/callbacks.py:411 msgid "" "\"|\" with nothing following. I obviously can't do a pipe with nothing " "after the |." @@ -55,33 +55,33 @@ msgstr "" "\"|\" mit nichts nachfolgendem. Eine pipe ohne Ziel nach dem | funktioniert " "nicht." -#: src/callbacks.py:623 +#: src/callbacks.py:630 msgid "%s is not a valid %s." msgstr "%s nicht zulässig als %s" -#: src/callbacks.py:625 +#: src/callbacks.py:632 msgid "That's not a valid %s." msgstr "%s nicht zulässig" -#: src/callbacks.py:794 +#: src/callbacks.py:812 msgid "(XX more messages)" msgstr "(XX mehr Nachrichten)" -#: src/callbacks.py:849 +#: src/callbacks.py:873 msgid "more message" msgstr "mehr Nachrichten" -#: src/callbacks.py:851 +#: src/callbacks.py:875 msgid "more messages" msgstr "mehr Nachrichten" -#: src/callbacks.py:986 +#: src/callbacks.py:1011 msgid "You've attempted more nesting than is currently allowed on this bot." msgstr "" "Du hast versucht mehr zu Verschachteln als bei diesem Bot momentan erlaubt " "ist." -#: src/callbacks.py:1171 +#: src/callbacks.py:1198 msgid "" "The command %q is available in the %L plugins. Please specify the plugin " "whose command you wish to call by using its name as a command before %q." @@ -89,7 +89,7 @@ msgstr "" "Der Befehl %q ist verfügbar in den %L Plugins. Bitte gebe an welches Plugin " "diesen Befehl ausführen soll, indem du es vor dem Befehl %q angibst." -#: src/callbacks.py:1356 +#: src/callbacks.py:1383 #, fuzzy msgid "" "Determines what commands are currently disabled. Such\n" @@ -101,170 +101,170 @@ msgstr "" " Diese Befehle werden nicht in Befehlslisten, etc... erscheinen.\n" " Es wird den anschein haben, das diese nicht einmal existieren." -#: src/callbacks.py:1595 +#: src/callbacks.py:1622 msgid "Invalid arguments for %s." msgstr "Unzulässige Argumente für %s." -#: src/callbacks.py:1627 +#: src/callbacks.py:1654 msgid "The %q command has no help." msgstr "%q hat keine Hilfe." -#: src/commands.py:284 +#: src/commands.py:291 msgid "integer" msgstr "Ganzzahl" -#: src/commands.py:295 +#: src/commands.py:302 msgid "non-integer value" msgstr "Kein Ganzzahlwert" -#: src/commands.py:306 +#: src/commands.py:313 msgid "floating point number" msgstr "Fließkommazahl" -#: src/commands.py:315 +#: src/commands.py:322 msgid "positive integer" msgstr "positive Ganzzahl" -#: src/commands.py:319 +#: src/commands.py:326 msgid "non-negative integer" msgstr "nicht negative Ganzzahl" -#: src/commands.py:322 +#: src/commands.py:329 msgid "index" msgstr "Index" -#: src/commands.py:347 +#: src/commands.py:354 msgid "number of seconds" msgstr "eingen Sekunden" -#: src/commands.py:354 +#: src/commands.py:361 msgid "boolean" msgstr "Boolean" -#: src/commands.py:368 src/commands.py:375 src/commands.py:384 -#: src/commands.py:391 src/commands.py:400 +#: src/commands.py:375 src/commands.py:382 src/commands.py:391 +#: src/commands.py:398 src/commands.py:407 msgid "do that" msgstr "tu dass" -#: src/commands.py:371 src/commands.py:378 src/commands.py:387 -#: src/commands.py:394 src/commands.py:403 +#: src/commands.py:378 src/commands.py:385 src/commands.py:394 +#: src/commands.py:401 src/commands.py:410 msgid "I'm not even in %s." msgstr "Ich bin nicht mal in %s." -#: src/commands.py:373 +#: src/commands.py:380 #, fuzzy msgid "I need to be voiced to %s." msgstr "Ich benötige Op zu %s." -#: src/commands.py:381 +#: src/commands.py:388 #, fuzzy msgid "I need to be at least voiced to %s." msgstr "Ich benötige Op zu %s." -#: src/commands.py:389 +#: src/commands.py:396 #, fuzzy msgid "I need to be halfopped to %s." msgstr "Ich benötige Op zu %s." -#: src/commands.py:397 +#: src/commands.py:404 #, fuzzy msgid "I need to be at least halfopped to %s." msgstr "Ich benötige Op zu %s." -#: src/commands.py:405 +#: src/commands.py:412 msgid "I need to be opped to %s." msgstr "Ich benötige Op zu %s." -#: src/commands.py:411 src/commands.py:569 +#: src/commands.py:418 src/commands.py:585 msgid "channel" msgstr "Kanal" -#: src/commands.py:424 +#: src/commands.py:431 msgid "nick or hostmask" msgstr "Nick oder Hostmaske" -#: src/commands.py:478 +#: src/commands.py:492 msgid "regular expression" msgstr "Regulärer Ausdruck" -#: src/commands.py:489 src/commands.py:493 +#: src/commands.py:503 src/commands.py:507 msgid "nick" msgstr "" -#: src/commands.py:490 +#: src/commands.py:504 msgid "That nick is too long for this server." msgstr "Dieser Nick ist zu lang für den Server." -#: src/commands.py:501 +#: src/commands.py:515 #, fuzzy msgid "I haven't seen %s." msgstr "Ich bin nicht mal in %s." -#: src/commands.py:548 src/commands.py:567 +#: src/commands.py:564 src/commands.py:583 msgid "I'm not in %s." msgstr "Ich bin nicht in %s." -#: src/commands.py:552 +#: src/commands.py:568 #, fuzzy msgid "This command may only be given in a channel that I am in." msgstr "" "Dieser Befehl kann mir nur in einem Kanal gegeben werden in dem ich bin." -#: src/commands.py:565 +#: src/commands.py:581 msgid "You must be in %s." msgstr "Du musst in %s sein." -#: src/commands.py:576 +#: src/commands.py:592 msgid "%s is not in %s." msgstr "%s ist nicht in %s." -#: src/commands.py:624 +#: src/commands.py:640 #, fuzzy msgid "You must not give the empty string as an argument." msgstr "Du darfst keinen leeren String als Argument angeben." -#: src/commands.py:632 +#: src/commands.py:648 #, fuzzy msgid "You must not give a string containing spaces as an argument." msgstr "Du darfst keinen leeren String als Argument angeben." -#: src/commands.py:642 +#: src/commands.py:658 msgid "This message must be sent in a channel." msgstr "Diese Nachricht muss in einem Kanal gesendet werden." -#: src/commands.py:674 src/commands.py:681 +#: src/commands.py:690 src/commands.py:697 msgid "url" msgstr "" -#: src/commands.py:687 +#: src/commands.py:703 msgid "IRI" msgstr "" -#: src/commands.py:693 +#: src/commands.py:709 msgid "email" msgstr "" -#: src/commands.py:703 src/commands.py:711 +#: src/commands.py:719 src/commands.py:727 msgid "http url" msgstr "HTTP URL" -#: src/commands.py:718 +#: src/commands.py:734 msgid "command name" msgstr "Befehlsname" -#: src/commands.py:726 +#: src/commands.py:742 msgid "ip" msgstr "IP" -#: src/commands.py:732 +#: src/commands.py:748 msgid "letter" msgstr "Buchstabe" -#: src/commands.py:764 +#: src/commands.py:780 msgid "plugin" msgstr "Plugin" -#: src/commands.py:772 +#: src/commands.py:788 msgid "irc color" msgstr "IRC Farbe" @@ -431,7 +431,23 @@ msgid "" " supybot.protocols.irc.umodes" msgstr "" -#: src/conf.py:424 +#: src/conf.py:423 +msgid "" +"Determines what vhost the bot will bind to before\n" +" connecting a server (IRC, HTTP, ...) via IPv4. If empty, defaults " +"to\n" +" supybot.protocols.irc.vhost" +msgstr "" + +#: src/conf.py:427 +msgid "" +"Determines what vhost the bot will bind to before\n" +" connecting a server (IRC, HTTP, ...) via IPv6. If empty, defaults " +"to\n" +" supybot.protocols.irc.vhostv6" +msgstr "" + +#: src/conf.py:433 #, fuzzy msgid "" "Determines what SASL username will be used on %s. This should\n" @@ -440,19 +456,19 @@ msgstr "" "Legt den Schlüssel fest, den der Bot benutzt um einen Kanal zu betreten " "(falls vorhanden)." -#: src/conf.py:427 +#: src/conf.py:436 #, fuzzy msgid "Determines what SASL password will be used on %s." msgstr "Legt fest welche Plugins geladen werden." -#: src/conf.py:430 +#: src/conf.py:439 msgid "" "Determines what SASL ECDSA key (if any) will be used on %s.\n" " The public key must be registered with NickServ for SASL\n" " ECDSA-NIST256P-CHALLENGE to work." msgstr "" -#: src/conf.py:435 +#: src/conf.py:444 #, fuzzy msgid "" "Determines what SASL mechanisms will be tried and in which order.\n" @@ -461,7 +477,7 @@ msgstr "" "Legt den Schlüssel fest, den der Bot benutzt um einen Kanal zu betreten " "(falls vorhanden)." -#: src/conf.py:438 +#: src/conf.py:447 #, fuzzy msgid "" "Determines whether the bot will abort the connection if the\n" @@ -469,18 +485,18 @@ msgid "" msgstr "" "Legt fest ob der Bot versuchen soll per SSL Sockets zu %s zu verbinden." -#: src/conf.py:441 +#: src/conf.py:450 msgid "" "If not empty, determines the hostname:port of the socks proxy that\n" " will be used to connect to this network." msgstr "" -#: src/conf.py:461 +#: src/conf.py:470 #, fuzzy msgid "Determines how urls should be formatted." msgstr "Legt fest welche Plugins geladen werden." -#: src/conf.py:469 +#: src/conf.py:478 msgid "" "Determines how timestamps\n" " printed for human reading should be formatted. Refer to the Python\n" @@ -492,7 +508,7 @@ msgstr "" "sollen. Schlag in der Python Dokumentation das time Modul nach um gültige " "Zeichen zu erfahren." -#: src/conf.py:484 +#: src/conf.py:493 msgid "" "Determines whether elapsed times will be given\n" " as \"1 day, 2 hours, 3 minutes, and 15 seconds\" or as \"1d 2h 3m 15s\"." @@ -500,18 +516,18 @@ msgstr "" "Legt fest wie die vergangene Zeit angeben wird, als \"1 Tag, 2 Stunden, 3 " "Minuten und 15 Sekunden\" oder als \"1d 2h 3m 15s\"" -#: src/conf.py:495 +#: src/conf.py:504 msgid "" "Maximum number of items in a list\n" " before the end is replaced with 'and others'. Set to 0 to always\n" " show the entire list." msgstr "" -#: src/conf.py:512 +#: src/conf.py:521 msgid "other" msgstr "" -#: src/conf.py:517 +#: src/conf.py:526 msgid "" "Determines the absolute maximum length of\n" " the bot's reply -- no reply will be passed through the bot with a " @@ -521,7 +537,7 @@ msgstr "" "Legt die absolut maximale Länge für Bot-Antworten fest. Keine Antwort länger " "als dieser Wert wird vom Bot zugelassen." -#: src/conf.py:522 +#: src/conf.py:531 msgid "" "Determines whether the bot will break up long\n" " messages into chunks and allow users to use the 'more' command to get " @@ -531,7 +547,7 @@ msgstr "" "Legt fest ob der Bot lange Nachrichten in mehrere Stücke unterteilt und der " "Nutzer mit dem more-Befehl die restlichen Stücke erhalten kann." -#: src/conf.py:527 +#: src/conf.py:536 msgid "" "Determines what the maximum number of\n" " chunks (for use with the 'more' command) will be." @@ -539,7 +555,7 @@ msgstr "" "Legt die maximal Anzahl an Teilen fest (für die Nutzung mit dem 'more' " "Befehl)" -#: src/conf.py:531 +#: src/conf.py:540 msgid "" "Determines how long individual chunks\n" " will be. If set to 0, uses our super-tweaked,\n" @@ -549,7 +565,7 @@ msgstr "" "getunter Nutze-alles-was-aus-einzelnen-Nachrichten-machbar-ist-Standard " "verwendet." -#: src/conf.py:536 +#: src/conf.py:545 msgid "" "Determines how many mores will be sent\n" " instantly (i.e., without the use of the more command, immediately when\n" @@ -558,7 +574,16 @@ msgid "" " required for all but the first chunk." msgstr "" -#: src/conf.py:542 +#: src/conf.py:552 +msgid "" +"Determines how many mores will be sent\n" +" instantly (i.e., without the use of the more command, immediately when\n" +" they are formed) when sending messages in private. Defaults to 0, which " +"means\n" +" that it defaults to the generic supybot.reply.mores.instant value." +msgstr "" + +#: src/conf.py:558 msgid "" "Determines whether the bot will send\n" " multi-message replies in a single message. This defaults to True \n" @@ -566,7 +591,7 @@ msgid "" " the bot will send multi-message replies on multiple lines." msgstr "" -#: src/conf.py:548 +#: src/conf.py:564 msgid "" "Determines whether the bot will reply with an\n" " error message when it is addressed but not given a valid command. If " @@ -575,14 +600,14 @@ msgid "" " override the normal behavior." msgstr "" -#: src/conf.py:555 +#: src/conf.py:571 msgid "" "Determines whether error messages that result\n" " from bugs in the bot will show a detailed error message (the uncaught\n" " exception) or a generic error message." msgstr "" -#: src/conf.py:559 +#: src/conf.py:575 msgid "" "Determines whether the bot will send error\n" " messages to users in private. You might want to do this in order to " @@ -591,7 +616,7 @@ msgid "" " supybot.reply.error.withNotice." msgstr "" -#: src/conf.py:564 +#: src/conf.py:580 msgid "" "Determines whether the bot will send error\n" " messages to users via NOTICE instead of PRIVMSG. You might want to do " @@ -603,7 +628,7 @@ msgid "" " in most IRC clients." msgstr "" -#: src/conf.py:571 +#: src/conf.py:587 msgid "" "Determines whether the bot will *not* provide\n" " details in the error\n" @@ -615,7 +640,7 @@ msgid "" " running certain commands." msgstr "" -#: src/conf.py:579 +#: src/conf.py:595 msgid "" "Determines whether the bot will reply\n" " privately when replying in a channel, rather than replying to the " @@ -623,7 +648,7 @@ msgid "" " channel." msgstr "" -#: src/conf.py:584 +#: src/conf.py:600 msgid "" "Determines whether the bot will reply with a\n" " notice when replying in a channel, rather than replying with a privmsg " @@ -631,7 +656,7 @@ msgid "" " normal." msgstr "" -#: src/conf.py:590 +#: src/conf.py:606 msgid "" "Determines whether the bot will reply with a\n" " notice when it is sending a private message, in order not to open a /" @@ -639,14 +664,14 @@ msgid "" " window in clients." msgstr "" -#: src/conf.py:595 +#: src/conf.py:611 #, fuzzy msgid "" "Determines whether the bot will always prefix\n" " the user's nick to its reply to that user's command." msgstr "Legt fest ob der Bot automatisch alles als Befehl behandeln soll." -#: src/conf.py:599 +#: src/conf.py:615 msgid "" "Determines whether the bot should attempt to\n" " reply to all messages even if they don't address it (either via its " @@ -656,7 +681,7 @@ msgid "" " to set supybot.reply.whenNotCommand to False." msgstr "" -#: src/conf.py:605 +#: src/conf.py:621 msgid "" "Determines whether the bot will allow you to\n" " send channel-related commands outside of that channel. Sometimes " @@ -666,7 +691,7 @@ msgid "" " itself." msgstr "" -#: src/conf.py:612 +#: src/conf.py:628 msgid "" "Determines whether the bot will unidentify\n" " someone when that person changes their nick. Setting this to True\n" @@ -674,7 +699,7 @@ msgid "" " little greater security." msgstr "" -#: src/conf.py:618 +#: src/conf.py:634 msgid "" "Determines whether the bot will always join a\n" " channel when it's invited. If this value is False, the bot will only " @@ -684,7 +709,7 @@ msgid "" " explicitly told to join the channel using the Admin.join command)." msgstr "" -#: src/conf.py:624 +#: src/conf.py:640 msgid "" "Supybot normally replies with the full help\n" " whenever a user misuses a command. If this value is set to True, the " @@ -693,7 +718,7 @@ msgid "" " help) rather than the full help." msgstr "" -#: src/conf.py:639 +#: src/conf.py:655 msgid "" "Determines what prefix characters the bot will\n" " reply to. A prefix character is a single character that the bot will " @@ -707,7 +732,7 @@ msgid "" " assume it is being addressed." msgstr "" -#: src/conf.py:648 +#: src/conf.py:664 msgid "" "Determines what strings the\n" " bot will reply to when they are at the beginning of the message. " @@ -718,20 +743,20 @@ msgid "" " prefixed by either @@ or ??." msgstr "" -#: src/conf.py:655 +#: src/conf.py:671 msgid "" "Determines whether the bot will reply when\n" " people address it by its nick, rather than with a prefix character." msgstr "" -#: src/conf.py:658 +#: src/conf.py:674 msgid "" "Determines whether the bot will reply when\n" " people address it by its nick at the end of the message, rather than at\n" " the beginning." msgstr "" -#: src/conf.py:662 +#: src/conf.py:678 msgid "" "Determines what extra nicks\n" " the bot will always respond to when addressed by, even if its current " @@ -739,11 +764,11 @@ msgid "" " is something else." msgstr "" -#: src/conf.py:672 +#: src/conf.py:688 msgid "The operation succeeded." msgstr "Anweisung erfolgreich." -#: src/conf.py:673 +#: src/conf.py:689 msgid "" "Determines what message the bot replies with when a command succeeded.\n" " If this configuration variable is empty, no success message will be\n" @@ -753,25 +778,28 @@ msgstr "" "erfolgreich war. Falls diese Konfigurationsvariable leer ist wird keine " "Erfolgsmeldung gesendet." -#: src/conf.py:678 +#: src/conf.py:694 +#, fuzzy msgid "" "An error has occurred and has been logged.\n" -" Please contact this bot's administrator for more information." +" Please contact this bot's administrator for more information.\n" +" If this configuration variable is empty, no generic error message will " +"be sent." msgstr "" "Ein Fehler ist aufgetreten und wurde gelogged.\n" " Bitte kontaktiere den Botadministartor für mehr Informationen." -#: src/conf.py:679 +#: src/conf.py:697 +#, fuzzy msgid "" -"\n" -" Determines what error message the bot gives when it wants to be\n" +"Determines what error message the bot gives when it wants to be\n" " ambiguous." msgstr "" "\n" "Bestimmt welche Fehlermeldung der Bot ausgibt, wenn er zweideutig sein " "möchte." -#: src/conf.py:684 +#: src/conf.py:701 #, fuzzy msgid "" "An error has occurred and has been logged.\n" @@ -780,7 +808,7 @@ msgstr "" "Ein Fehler ist augetreten und wurde protokolliert.\n" " Überprüfe die Protokolldateien." -#: src/conf.py:685 +#: src/conf.py:702 msgid "" "Determines what error\n" " message the bot gives to the owner when it wants to be ambiguous." @@ -788,7 +816,7 @@ msgstr "" "Bestimmt welche Fehlermeldung der Bot an den Besitzer ausgibt, wenn er " "zweideutig sein möchte." -#: src/conf.py:689 +#: src/conf.py:706 msgid "" "Your hostmask doesn't match or your password\n" " is wrong." @@ -796,7 +824,7 @@ msgstr "" "Deine Hostmaske passt nicht oder dein Passwort\n" " ist falsch." -#: src/conf.py:690 +#: src/conf.py:707 msgid "" "Determines what message the bot replies with when\n" " someone tries to use a command that requires being identified or having " @@ -807,7 +835,7 @@ msgstr "" "versucht der es erforderlich macht sich identifiziert zu haben oder korrekte " "Anmeldedaten zu haben." -#: src/conf.py:696 +#: src/conf.py:713 msgid "" "I can't find %s in my user\n" " database. If you didn't give a user name, then I might not know what " @@ -818,7 +846,7 @@ msgstr "" "Benutzernamen angegeben hast, weiß ich vielleicht nicht wer du bist unnd du " "mich dich identifizieren bevor dieser Befehl funktioniert." -#: src/conf.py:699 +#: src/conf.py:716 msgid "" "Determines what error message the bot replies with when someone tries\n" " to accessing some information on a user the bot doesn't know about." @@ -826,7 +854,7 @@ msgstr "" "Bestimmt welche Fehlermeldung der Bot ausgibt, wenn jemand versucht auf " "Informationen zuzugreifen über die der Bot nichts weiß." -#: src/conf.py:703 +#: src/conf.py:720 msgid "" "You must be registered to use this command.\n" " If you are already registered, you must either identify (using the " @@ -839,7 +867,7 @@ msgstr "" "Befehl) oder eine Hostmaske hinzufügen die zu deiner momentanen Hostmaske " "passt (durch den \"hostmask add\" Befehl)." -#: src/conf.py:706 +#: src/conf.py:723 msgid "" "Determines what error message the bot\n" " replies with when someone tries to do something that requires them to " @@ -849,7 +877,7 @@ msgstr "" "Bestimmt welche Fehlermeldung der Bot antortet wenn jemand etwas versucht, " "das es erforderlich macht registriert zu sein, es aber nicht ist." -#: src/conf.py:711 +#: src/conf.py:728 msgid "" "You don't have the %s capability. If you\n" " think that you should have this capability, be sure that you are " @@ -861,7 +889,7 @@ msgstr "" "dir sicher das du identifiziert bist, bevor du es erneurt versuchst. Der " "Befehl 'whoami' kann dir sagen ob du identifiziert bist." -#: src/conf.py:714 +#: src/conf.py:731 msgid "" "Determines what error message is given when the bot\n" " is telling someone they aren't cool enough to use the command they tried " @@ -871,7 +899,7 @@ msgstr "" "Bestimmt welche Fehlermeldung der Bot einer Person ausgibt, die nicht cool " "genug ist den Befehl auszuführen." -#: src/conf.py:719 +#: src/conf.py:736 msgid "" "You're missing some capability you need.\n" " This could be because you actually possess the anti-capability for the\n" @@ -892,7 +920,7 @@ msgstr "" "erlaubt ausgenommen der explizit zugestandenen mittels Fähigkeiten. Wie dem " "auch sei, das was du versuchst funktioniert gerade nicht." -#: src/conf.py:727 +#: src/conf.py:744 msgid "" "Determines what generic error message is given when the bot is telling\n" " someone that they aren't cool enough to use the command they tried to " @@ -904,14 +932,14 @@ msgstr "" "nicht cool genug ist den Befehl auszuführen den sie versucht hat und der " "Autor des Codes hat keine bestimmte Fähigkeit dafür bereitgestellt." -#: src/conf.py:733 +#: src/conf.py:750 #, fuzzy msgid "" "That operation cannot be done in a\n" " channel." msgstr "Diese Anweisung kann nicht in einem Kanal gegeben werden." -#: src/conf.py:734 +#: src/conf.py:751 msgid "" "Determines what error messages the bot sends to people\n" " who try to do things in a channel that really should be done in\n" @@ -920,7 +948,7 @@ msgstr "" "Bestimmt welche Fehlermeldung der Bot an Leute schickt, die Dinge im Kanal " "versuchen, welche jedoch besser per privater Nachricht getan werden sollten." -#: src/conf.py:739 +#: src/conf.py:756 #, fuzzy msgid "" "This may be a bug. If you think it is,\n" @@ -931,7 +959,7 @@ msgstr "" "Fehler bitte bei <http://sourceforge.net/tracker/?" "func=add&group_id=58965&atid=489447>." -#: src/conf.py:742 +#: src/conf.py:759 msgid "" "Determines what message the bot sends when it thinks you've\n" " encountered a bug that the developers don't know about." @@ -939,11 +967,11 @@ msgstr "" "Bestimmt welche Meldung der Bot schickt, wenn er glaubt, dass du einen " "Programmierfehler gefunden hast von dem die Entwickler nichts wissen." -#: src/conf.py:749 +#: src/conf.py:766 msgid "$Type #$id: $text (added by $username at $at)" msgstr "" -#: src/conf.py:750 +#: src/conf.py:767 msgid "" "Format used by generic database plugins (Lart, Dunno, Prase, Success,\n" " Quote, ...) to show an entry. You can use the following variables:\n" @@ -951,7 +979,7 @@ msgid "" " $at (creation time), $userid/$username/$nick (author)." msgstr "" -#: src/conf.py:760 +#: src/conf.py:777 msgid "" "A floating point number of seconds to throttle\n" " snarfed URLs, in order to prevent loops between two bots snarfing the " @@ -963,7 +991,7 @@ msgstr "" "erschnüffeln und zum anderen die erschnüffelte URL in der Ausgabe der " "erschnüffelten Nachricht zu haben." -#: src/conf.py:765 +#: src/conf.py:782 msgid "" "Determines the number of seconds\n" " between running the upkeep function that flushes (commits) open " @@ -975,7 +1003,7 @@ msgstr "" "Funktion, die offene in die Datenbank schreibt, Müll sammelt und ein paar " "nützliche Statistiken zum Zwecke der Fehlersuche sammelt." -#: src/conf.py:771 +#: src/conf.py:788 msgid "" "Determines whether the bot will periodically\n" " flush data and configuration files to disk. Generally, the only time\n" @@ -993,7 +1021,7 @@ msgstr "" "Änderungen innerhalb des Bots nicht gespeichert werden. Um diese Änderungen " "permanent zu machen musst du die Registrierung händisch anpassen." -#: src/conf.py:797 +#: src/conf.py:814 msgid "" "Determines what characters are valid for quoting\n" " arguments to commands in order to prevent them from being tokenized.\n" @@ -1002,20 +1030,20 @@ msgstr "" "Bestimmt welche Zeichen für das Zitieren von Argumenten an Befehle gültig " "sind um zu verhindern, dass diese in Tokens übersetzt werden." -#: src/conf.py:804 +#: src/conf.py:821 msgid "" "Determines whether the bot will allow nested\n" " commands, which rule. You definitely should keep this on." msgstr "" -#: src/conf.py:807 +#: src/conf.py:824 msgid "" "Determines what the maximum number of\n" " nested commands will be; users will receive an error if they attempt\n" " commands more nested than this." msgstr "" -#: src/conf.py:816 +#: src/conf.py:833 msgid "" "Supybot allows you to specify what brackets\n" " are used for your nested commands. Valid sets of brackets include\n" @@ -1025,7 +1053,7 @@ msgid "" " channel." msgstr "" -#: src/conf.py:823 +#: src/conf.py:840 msgid "" "Supybot allows nested commands. Enabling this\n" " option will allow nested commands with a syntax similar to UNIX pipes, " @@ -1036,7 +1064,7 @@ msgstr "" "der Bot verschachtelte Befehle erlauben, mit einer Syntax die ähnlich ist " "wie UNIX Pipes, zum Beispiel 'bot: foo | bar'." -#: src/conf.py:828 +#: src/conf.py:845 msgid "" "Determines what commands have default\n" " plugins set, and which plugins are set to be the default for each of " @@ -1044,7 +1072,7 @@ msgid "" " commands." msgstr "" -#: src/conf.py:834 +#: src/conf.py:851 msgid "" "Determines what plugins automatically get precedence over all\n" " other plugins when selecting a default plugin for a command. By\n" @@ -1055,7 +1083,7 @@ msgid "" " case-sensitive." msgstr "" -#: src/conf.py:844 +#: src/conf.py:861 msgid "" "Allows this bot's owner user to use commands\n" " that grants them shell access. This config variable exists in case you " @@ -1067,19 +1095,19 @@ msgid "" " used to indirectly gain shell access." msgstr "" -#: src/conf.py:859 +#: src/conf.py:876 msgid "" "Determines the interval used for\n" " the history storage." msgstr "" -#: src/conf.py:862 +#: src/conf.py:879 msgid "" "Determines whether the bot will defend itself\n" " against command-flooding." msgstr "" -#: src/conf.py:865 +#: src/conf.py:882 msgid "" "Determines how many commands users are\n" " allowed per minute. If a user sends more than this many commands in " @@ -1088,26 +1116,26 @@ msgid "" " supybot.abuse.flood.command.punishment seconds." msgstr "" -#: src/conf.py:870 +#: src/conf.py:887 msgid "" "Determines how many seconds the bot\n" " will ignore users who flood it with commands." msgstr "" -#: src/conf.py:873 +#: src/conf.py:890 #, fuzzy msgid "" "Determines whether the bot will notify people\n" " that they're being ignored for command flooding." msgstr "Legt fest ob der Bot automatisch alles als Befehl behandeln soll." -#: src/conf.py:877 +#: src/conf.py:894 msgid "" "Determines whether the bot will defend itself\n" " against invalid command-flooding." msgstr "" -#: src/conf.py:880 +#: src/conf.py:897 msgid "" "Determines how many invalid commands users\n" " are allowed per minute. If a user sends more than this many invalid\n" @@ -1119,7 +1147,7 @@ msgid "" " commands than for them to flood with valid commands." msgstr "" -#: src/conf.py:888 +#: src/conf.py:905 msgid "" "Determines how many seconds the bot\n" " will ignore users who flood it with invalid commands. Typically, this\n" @@ -1129,63 +1157,71 @@ msgid "" " commands than for them to flood with valid commands." msgstr "" -#: src/conf.py:894 +#: src/conf.py:911 msgid "" "Determines whether the bot will notify people\n" " that they're being ignored for invalid command flooding." msgstr "" -#: src/conf.py:903 +#: src/conf.py:920 msgid "" "Determines the default length of time a\n" " driver should block waiting for input." msgstr "" -#: src/conf.py:911 +#: src/conf.py:928 msgid "" "Determines what driver module the \n" " bot will use. Current, the only (and default) driver is Socket." msgstr "" -#: src/conf.py:915 +#: src/conf.py:932 +#, fuzzy +msgid "" +"Determines the minimum time the bot will\n" +" wait before attempting to reconnect to an IRC server." +msgstr "" +"Legt fest ob der Bot versuchen soll per SSL Sockets zu %s zu verbinden." + +#: src/conf.py:936 msgid "" "Determines the maximum time the bot will\n" " wait before attempting to reconnect to an IRC server. The bot may, of\n" " course, reconnect earlier if possible." msgstr "" -#: src/conf.py:967 +#: src/conf.py:988 msgid "" "Determines what directory configuration data is\n" " put into." msgstr "" "Legt fest in welchem Verzeichnis Konfigurationsdaten gespeichert werden." -#: src/conf.py:970 +#: src/conf.py:991 msgid "Determines what directory data is put into." msgstr "Legt fest in welchem Verzeichnis Daten gespeichert werden." -#: src/conf.py:972 +#: src/conf.py:993 msgid "" "Determines what directory backup data is put\n" " into. Set it to /dev/null to disable backup (it is a special value,\n" " so it also works on Windows and systems without /dev/null)." msgstr "" -#: src/conf.py:979 +#: src/conf.py:1000 msgid "" "Determines what directory temporary files\n" " are put into." msgstr "Legt fest in welchem Verzeichnis temporäre Dateien gespeichert werden." -#: src/conf.py:982 +#: src/conf.py:1003 #, fuzzy msgid "" "Determines what directory files of the\n" " web server (templates, custom images, ...) are put into." msgstr "Legt fest in welchem Verzeichnis temporäre Dateien gespeichert werden." -#: src/conf.py:995 +#: src/conf.py:1016 msgid "" "Determines what directories\n" " the bot will look for plugins in. Accepts a comma-separated list of\n" @@ -1197,7 +1233,7 @@ msgid "" " [config supybot.directories.plugins], newPluginDirectory'." msgstr "" -#: src/conf.py:1003 +#: src/conf.py:1024 msgid "" "List of all plugins that were\n" " ever loaded. Currently has no effect whatsoever. You probably want to " @@ -1206,7 +1242,7 @@ msgid "" " instead of this." msgstr "" -#: src/conf.py:1008 +#: src/conf.py:1029 msgid "" "Determines whether the bot will always load\n" " important plugins (Admin, Channel, Config, Misc, Owner, and User)\n" @@ -1218,7 +1254,7 @@ msgid "" " enough to change the value of this variable appropriately :)" msgstr "" -#: src/conf.py:1036 +#: src/conf.py:1063 msgid "" "Determines what databases are available for use. If this\n" " value is not configured (that is, if its value is empty) then sane " @@ -1226,7 +1262,7 @@ msgid "" " will be provided." msgstr "" -#: src/conf.py:1042 +#: src/conf.py:1069 msgid "" "Determines what filename will be used\n" " for the users database. This file will go into the directory specified " @@ -1234,7 +1270,7 @@ msgid "" " the supybot.directories.conf variable." msgstr "" -#: src/conf.py:1046 +#: src/conf.py:1073 msgid "" "Determines how long it takes identification to\n" " time out. If the value is less than or equal to zero, identification " @@ -1242,7 +1278,7 @@ msgid "" " times out." msgstr "" -#: src/conf.py:1050 +#: src/conf.py:1077 msgid "" "Determines whether the bot will allow users to\n" " unregister their users. This can wreak havoc with already-existing\n" @@ -1254,7 +1290,7 @@ msgid "" " " msgstr "" -#: src/conf.py:1059 +#: src/conf.py:1086 msgid "" "Determines what filename will be used\n" " for the ignores database. This file will go into the directory " @@ -1262,7 +1298,7 @@ msgid "" " by the supybot.directories.conf variable." msgstr "" -#: src/conf.py:1065 +#: src/conf.py:1092 msgid "" "Determines what filename will be used\n" " for the channels database. This file will go into the directory " @@ -1270,7 +1306,7 @@ msgid "" " by the supybot.directories.conf variable." msgstr "" -#: src/conf.py:1071 +#: src/conf.py:1098 msgid "" "Determines what filename will be used\n" " for the networks database. This file will go into the directory " @@ -1278,14 +1314,14 @@ msgid "" " by the supybot.directories.conf variable." msgstr "" -#: src/conf.py:1103 +#: src/conf.py:1130 msgid "" "Determines whether the bot will require user\n" " registration to use 'add' commands in database-based Supybot\n" " plugins." msgstr "" -#: src/conf.py:1107 +#: src/conf.py:1134 msgid "" "Determines whether database-based plugins that\n" " can be channel-specific will be so. This can be overridden by " @@ -1299,7 +1335,7 @@ msgid "" " to share a certain channel's databases globally." msgstr "" -#: src/conf.py:1115 +#: src/conf.py:1142 msgid "" "Determines what channel global\n" " (non-channel-specific) databases will be considered a part of. This is\n" @@ -1315,7 +1351,7 @@ msgid "" " for your channel." msgstr "" -#: src/conf.py:1124 +#: src/conf.py:1151 msgid "" "Determines whether another channel's global\n" " (non-channel-specific) databases will be allowed to link to this " @@ -1327,13 +1363,13 @@ msgid "" " " msgstr "" -#: src/conf.py:1142 +#: src/conf.py:1169 msgid "" "Determines\n" " whether CDB databases will be allowed as a database implementation." msgstr "" -#: src/conf.py:1145 +#: src/conf.py:1172 msgid "" "Determines how often CDB databases will have\n" " their modifications flushed to disk. When the number of modified " @@ -1343,13 +1379,13 @@ msgid "" " will be entirely flushed to disk." msgstr "" -#: src/conf.py:1237 +#: src/conf.py:1337 msgid "" "Determines what will be used as the\n" " default banmask style." msgstr "Legt fest was als Standard Banmaskenstil verwendet wird." -#: src/conf.py:1241 +#: src/conf.py:1341 msgid "" "Determines whether the bot will strictly\n" " follow the RFC; currently this only affects what strings are\n" @@ -1358,7 +1394,7 @@ msgid "" " then you you should set this to False." msgstr "" -#: src/conf.py:1248 +#: src/conf.py:1348 msgid "" "Determines whether the bot will enable\n" " draft/experimental extensions of the IRC protocol. Setting this to True\n" @@ -1368,7 +1404,7 @@ msgid "" " doing." msgstr "" -#: src/conf.py:1255 +#: src/conf.py:1355 #, fuzzy msgid "" "Determines what certificate file (if any) the bot\n" @@ -1376,7 +1412,7 @@ msgid "" msgstr "" "Legt fest ob der Bot versuchen soll per SSL Sockets zu %s zu verbinden." -#: src/conf.py:1259 +#: src/conf.py:1359 msgid "" "Determines what user modes the bot will request\n" " from the server when it first connects. Many people might choose +i; " @@ -1386,19 +1422,19 @@ msgid "" " that you should be given a fake host." msgstr "" -#: src/conf.py:1265 +#: src/conf.py:1365 msgid "" "Determines what vhost the bot will bind to before\n" " connecting a server (IRC, HTTP, ...) via IPv4." msgstr "" -#: src/conf.py:1269 +#: src/conf.py:1369 msgid "" "Determines what vhost the bot will bind to before\n" " connecting a server (IRC, HTTP, ...) via IPv6." msgstr "" -#: src/conf.py:1273 +#: src/conf.py:1373 msgid "" "Determines how many old messages the bot will\n" " keep around in its history. Changing this variable will not take " @@ -1406,7 +1442,7 @@ msgid "" " on a network until it is reconnected." msgstr "" -#: src/conf.py:1278 +#: src/conf.py:1378 msgid "" "A floating point number of seconds to throttle\n" " queued messages -- that is, messages will not be sent faster than once " @@ -1414,7 +1450,7 @@ msgid "" " throttleTime seconds." msgstr "" -#: src/conf.py:1283 +#: src/conf.py:1383 msgid "" "Determines whether the bot will send PINGs to\n" " the server it's connected to in order to keep the connection alive and\n" @@ -1424,13 +1460,13 @@ msgid "" " some strange server issues." msgstr "" -#: src/conf.py:1290 +#: src/conf.py:1390 msgid "" "Determines the number of seconds between sending\n" " pings to the server, if pings are being sent to the server." msgstr "" -#: src/conf.py:1295 +#: src/conf.py:1395 msgid "" "Determines whether the bot will refuse\n" " duplicated messages to be queued for delivery to the server. This is a\n" @@ -1440,7 +1476,7 @@ msgid "" " doing certain kinds of plugin hacking." msgstr "" -#: src/conf.py:1303 +#: src/conf.py:1403 msgid "" "Determines how many seconds must elapse between\n" " JOINs sent to the server." @@ -1448,7 +1484,7 @@ msgstr "" "Legt fest wieviel Zeit, zwischen den JOINs die an den Server gesendet " "werden, vergehen muss." -#: src/conf.py:1311 +#: src/conf.py:1411 msgid "" "Determines how many bytes the bot will\n" " 'peek' at when looking through a URL for a doctype or title or " @@ -1458,13 +1494,13 @@ msgid "" " found what it was looking for." msgstr "" -#: src/conf.py:1335 +#: src/conf.py:1435 msgid "" "Determines what HTTP proxy all HTTP requests should go\n" " through. The value should be of the form 'host:port'." msgstr "" -#: src/conf.py:1375 +#: src/conf.py:1475 msgid "" "If set, the Accept-Language HTTP header will be set to this\n" " value for requests. Useful for overriding the auto-detected language " @@ -1472,13 +1508,13 @@ msgid "" " the server's location." msgstr "" -#: src/conf.py:1381 +#: src/conf.py:1481 msgid "" "If set, the User-Agent HTTP header will be set to a randomly\n" " selected value from this comma-separated list of strings for requests." msgstr "" -#: src/conf.py:1389 +#: src/conf.py:1489 msgid "" "Determines whether server certificates\n" " will be verified, which checks whether the server certificate is signed\n" @@ -1489,34 +1525,34 @@ msgid "" " is set." msgstr "" -#: src/conf.py:1416 +#: src/conf.py:1516 msgid "" "If true, uses IPV6_V6ONLY to disable\n" " forwaring of IPv4 traffic to IPv6 sockets. On *nix, has the same\n" " effect as setting kernel variable net.ipv6.bindv6only to 1." msgstr "" -#: src/conf.py:1420 +#: src/conf.py:1520 #, fuzzy msgid "" "Space-separated list of IPv4 hosts the HTTP server\n" " will bind." msgstr "Legt fest an welchen host sich der HTTP Server bindet." -#: src/conf.py:1423 +#: src/conf.py:1523 #, fuzzy msgid "" "Space-separated list of IPv6 hosts the HTTP server will\n" " bind." msgstr "Legt den Port fest an den der HTTP Server bindet." -#: src/conf.py:1426 +#: src/conf.py:1526 msgid "" "Determines what port the HTTP server will\n" " bind." msgstr "Legt den Port fest an den der HTTP Server bindet." -#: src/conf.py:1429 +#: src/conf.py:1529 #, fuzzy msgid "" "Determines whether the server will stay\n" @@ -1527,14 +1563,14 @@ msgstr "" " kein Plugin ihn benutzt. Das bedeutet außerdem das der Server startet\n" " obwohl er nicht benutzt wird." -#: src/conf.py:1433 +#: src/conf.py:1533 #, fuzzy msgid "" "Determines the path of the file served as\n" " favicon to browsers." msgstr "Legt den Port fest an den der HTTP Server bindet." -#: src/conf.py:1436 +#: src/conf.py:1536 msgid "" "Determines the public URL of the server.\n" " By default it is http://<hostname>:<port>/, but you will want to change\n" @@ -1542,7 +1578,7 @@ msgid "" " the bot." msgstr "" -#: src/conf.py:1446 +#: src/conf.py:1546 msgid "" "Determines whether the bot will ignore\n" " unidentified users by default. Of course, that'll make it\n" @@ -1550,7 +1586,7 @@ msgid "" " without adding their hostmasks, but that's your problem to solve." msgstr "" -#: src/conf.py:1453 +#: src/conf.py:1553 msgid "" "A string that is the external IP of the bot. If this is the\n" " empty string, the bot will attempt to find out its IP dynamically " @@ -1558,13 +1594,13 @@ msgid "" " sometimes that doesn't work, hence this variable). This variable is not " "used\n" " by Limnoria and its built-in plugins: see supybot.protocols.irc.vhost /\n" -" supybot.protocols.irc.vhost6 to set the IRC bind host, and\n" +" supybot.protocols.irc.vhostv6 to set the IRC bind host, and\n" " supybot.servers.http.hosts4 / supybot.servers.http.hosts6 to set the " "HTTP\n" " server bind host." msgstr "" -#: src/conf.py:1472 +#: src/conf.py:1572 msgid "" "Determines what the default timeout for socket\n" " objects will be. This means that *all* sockets will timeout when this " @@ -1574,7 +1610,7 @@ msgid "" " that uses the sockets)." msgstr "" -#: src/conf.py:1478 +#: src/conf.py:1578 msgid "" "Determines what file the bot should write its PID\n" " (Process ID) to, so you can kill it more easily. If it's left unset (as " @@ -1584,13 +1620,13 @@ msgid "" " changes to this variable to take effect." msgstr "" -#: src/conf.py:1488 +#: src/conf.py:1588 msgid "" "Determines whether the bot will automatically\n" " thread all commands." msgstr "Legt fest ob der Bot automatisch alles als Befehl behandeln soll." -#: src/conf.py:1491 +#: src/conf.py:1591 msgid "" "Determines whether the bot will automatically\n" " flush all flushers *very* often. Useful for debugging when you don't " @@ -1606,7 +1642,7 @@ msgstr "Supybot Web Server Index" msgid "Here is a list of the plugins that have a Web interface:" msgstr "Das ist eine Liste der Plugins die ein Webinterface haben:" -#: src/httpserver.py:245 +#: src/httpserver.py:352 #, fuzzy msgid "" "\n" @@ -1620,7 +1656,7 @@ msgstr "" " entwickelst und das weder diese Nachricht übersüringst oder einen " "Handler für diese Anfrage definiert hast." -#: src/httpserver.py:291 +#: src/httpserver.py:398 msgid "" "\n" " I am a pretty clever IRC bot, but I suck at serving Web pages, " @@ -1630,66 +1666,66 @@ msgid "" " trained to help you in such a case." msgstr "" -#: src/httpserver.py:310 +#: src/httpserver.py:417 #, fuzzy msgid "Request not handled." msgstr "Anfrage nicht behandelt." -#: src/httpserver.py:317 +#: src/httpserver.py:424 msgid "No plugins available." msgstr "Keine Plugins verfügbar" -#: src/httpserver.py:335 src/httpserver.py:353 src/httpserver.py:391 +#: src/httpserver.py:442 src/httpserver.py:460 src/httpserver.py:498 #, fuzzy msgid "Request not handled" msgstr "Anfrage nicht behandelt." -#: src/httpserver.py:378 +#: src/httpserver.py:485 msgid "No favicon set." msgstr "" -#: src/ircutils.py:573 +#: src/ircutils.py:592 msgid "is an op on %L" msgstr "" -#: src/ircutils.py:575 +#: src/ircutils.py:594 msgid "is a halfop on %L" msgstr "" -#: src/ircutils.py:577 +#: src/ircutils.py:596 msgid "is voiced on %L" msgstr "" -#: src/ircutils.py:580 +#: src/ircutils.py:599 msgid "is also on %L" msgstr "" -#: src/ircutils.py:582 +#: src/ircutils.py:601 msgid "is on %L" msgstr "" -#: src/ircutils.py:585 +#: src/ircutils.py:604 msgid "isn't on any publicly visible channels" msgstr "" -#: src/ircutils.py:593 src/ircutils.py:594 src/ircutils.py:600 +#: src/ircutils.py:612 src/ircutils.py:613 src/ircutils.py:619 msgid "<unknown>" msgstr "" -#: src/ircutils.py:602 +#: src/ircutils.py:621 #, fuzzy msgid " %s is away: %s." msgstr "%s nicht zulässig als %s" -#: src/ircutils.py:607 +#: src/ircutils.py:626 msgid " identified" msgstr "" -#: src/ircutils.py:613 +#: src/ircutils.py:632 msgid "%s (%s) has been%s on server %s since %s (idle for %s). %s %s.%s" msgstr "" -#: src/ircutils.py:617 +#: src/ircutils.py:636 msgid "%s (%s) has been%s on server %s and disconnected on %s." msgstr "" @@ -1713,85 +1749,85 @@ msgstr "Passwort erneut eingeben:" msgid "Passwords don't match." msgstr "Passwörter stimmen nicht überein" -#: src/registry.py:219 +#: src/registry.py:224 #, fuzzy msgid "%r is not a valid entry in %r" msgstr "%s nicht zulässig als %s" -#: src/registry.py:568 +#: src/registry.py:573 msgid "Value must be either True or False (or On or Off), not %r." msgstr "" -#: src/registry.py:585 +#: src/registry.py:590 msgid "Value must be an integer, not %r." msgstr "" -#: src/registry.py:595 +#: src/registry.py:600 #, fuzzy msgid "Value must be a non-negative integer, not %r." msgstr "nicht negative Ganzzahl" -#: src/registry.py:604 +#: src/registry.py:609 msgid "Value must be positive (non-zero) integer, not %r." msgstr "" -#: src/registry.py:613 +#: src/registry.py:618 msgid "Value must be a floating-point number, not %r." msgstr "" -#: src/registry.py:629 +#: src/registry.py:634 msgid "Value must be a floating-point number greater than zero, not %r." msgstr "" -#: src/registry.py:640 +#: src/registry.py:645 msgid "Value must be a floating point number in the range [0, 1], not %r." msgstr "" -#: src/registry.py:655 +#: src/registry.py:660 msgid "Value should be a valid Python string, not %r." msgstr "" -#: src/registry.py:693 +#: src/registry.py:698 msgid "Valid values include %L." msgstr "" -#: src/registry.py:695 +#: src/registry.py:700 msgid "Valid values include %L, not %%r." msgstr "" -#: src/registry.py:769 +#: src/registry.py:777 msgid "Value must be a valid regular expression, not %r." msgstr "" -#: src/utils/gen.py:113 +#: src/utils/gen.py:115 msgid "year" msgstr "" -#: src/utils/gen.py:116 +#: src/utils/gen.py:118 msgid "week" msgstr "" -#: src/utils/gen.py:119 +#: src/utils/gen.py:121 msgid "day" msgstr "" -#: src/utils/gen.py:122 +#: src/utils/gen.py:124 msgid "hour" msgstr "" -#: src/utils/gen.py:126 +#: src/utils/gen.py:128 msgid "minute" msgstr "" -#: src/utils/gen.py:129 +#: src/utils/gen.py:131 msgid "second" msgstr "" -#: src/utils/gen.py:138 +#: src/utils/gen.py:140 msgid "%s ago" msgstr "" -#: src/utils/str.py:349 +#: src/utils/str.py:375 msgid "and" msgstr "" diff --git a/locales/fi.po b/locales/fi.po index 4daf8c8e6..5237d8352 100644 --- a/locales/fi.po +++ b/locales/fi.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: Limnoria core\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2014-12-20 11:27+0200\n" "Last-Translator: Mikaela Suomalainen <mikaela.suomalainen@outlook.com>\n" "Language-Team: Finnish <>\n" @@ -25,7 +25,7 @@ msgstr "Virhe: " msgid "Error: I tried to send you an empty message." msgstr "Virhe: Yritin lähettää sinulle tyhjän viestin." -#: src/callbacks.py:361 +#: src/callbacks.py:365 msgid "" "Missing \"%s\". You may want to quote your arguments with double quotes in " "order to prevent extra brackets from being evaluated as nested commands." @@ -34,7 +34,7 @@ msgstr "" "estääksesi ylimääräisiä hakasulkuja tulemasta tulkituiksi sisäkkäisiksi " "komennoiksi." -#: src/callbacks.py:390 +#: src/callbacks.py:394 msgid "" "\"|\" with nothing preceding. I obviously can't do a pipe with nothing " "before the |." @@ -42,7 +42,7 @@ msgstr "" "\"|\" ennen mitään. En ilmiselvästi voi putkittaa tyhjyyttä ilman mitään " "ennen |-merkkiä." -#: src/callbacks.py:398 +#: src/callbacks.py:402 msgid "" "Spurious \"%s\". You may want to quote your arguments with double quotes in " "order to prevent extra brackets from being evaluated as nested commands." @@ -51,7 +51,7 @@ msgstr "" "estääksesiylimääräisiä hakasulkuja tulemasta tulkituiksi sisäkkäisiksi " "komennoiksi." -#: src/callbacks.py:407 +#: src/callbacks.py:411 msgid "" "\"|\" with nothing following. I obviously can't do a pipe with nothing " "after the |." @@ -59,33 +59,33 @@ msgstr "" "\"|\" ilman mitään sen perässä. En ilmeisesti voi putkittaa tyhjyyttä |:n " "jälkeen." -#: src/callbacks.py:623 +#: src/callbacks.py:630 msgid "%s is not a valid %s." msgstr "%s ei ole kelvollinen %s." -#: src/callbacks.py:625 +#: src/callbacks.py:632 msgid "That's not a valid %s." msgstr "Tuo ei ole kelvollinen %s." -#: src/callbacks.py:794 +#: src/callbacks.py:812 msgid "(XX more messages)" msgstr "(XX viestiä jatkoa)" -#: src/callbacks.py:849 +#: src/callbacks.py:873 msgid "more message" msgstr "viesti jatkoa" -#: src/callbacks.py:851 +#: src/callbacks.py:875 msgid "more messages" msgstr "viestejä jatkoa" -#: src/callbacks.py:986 +#: src/callbacks.py:1011 msgid "You've attempted more nesting than is currently allowed on this bot." msgstr "" "Yritit enempiä sisäkkäisiä komentoja, kuin on tällä hetkellä sallittu tässä " "botissa." -#: src/callbacks.py:1171 +#: src/callbacks.py:1198 msgid "" "The command %q is available in the %L plugins. Please specify the plugin " "whose command you wish to call by using its name as a command before %q." @@ -93,7 +93,7 @@ msgstr "" "Komento %q on saatavilla %L lisäosissa. Ole hyvä ja määritä minkä lisäosan " "komentoa tahdot kutsua laittamalla sen nimi komentoon ennen %q:ta." -#: src/callbacks.py:1356 +#: src/callbacks.py:1383 msgid "" "Determines what commands are currently disabled. Such\n" " commands will not appear in command lists, etc. They will appear not " @@ -104,165 +104,165 @@ msgstr "" " komennot eivät ilmesty komento listoissa, jne. Ne eivät näytä edes\n" " olevan olemassa." -#: src/callbacks.py:1595 +#: src/callbacks.py:1622 msgid "Invalid arguments for %s." msgstr "Virheelliset parametrit kohteelle %s." -#: src/callbacks.py:1627 +#: src/callbacks.py:1654 msgid "The %q command has no help." msgstr "Komennolla %q ei ole ohjetta." -#: src/commands.py:284 +#: src/commands.py:291 msgid "integer" msgstr "kokonaisluku" -#: src/commands.py:295 +#: src/commands.py:302 msgid "non-integer value" msgstr "ei-kokonaisluku arvo" -#: src/commands.py:306 +#: src/commands.py:313 msgid "floating point number" msgstr "liukuluku numero" -#: src/commands.py:315 +#: src/commands.py:322 msgid "positive integer" msgstr "positiivinen kokonaisluku" -#: src/commands.py:319 +#: src/commands.py:326 msgid "non-negative integer" msgstr "ei-negatiivinen kokonaisluku" -#: src/commands.py:322 +#: src/commands.py:329 msgid "index" msgstr "indeksi" -#: src/commands.py:347 +#: src/commands.py:354 msgid "number of seconds" msgstr "määrä sekunteja" -#: src/commands.py:354 +#: src/commands.py:361 msgid "boolean" msgstr "boolean" -#: src/commands.py:368 src/commands.py:375 src/commands.py:384 -#: src/commands.py:391 src/commands.py:400 +#: src/commands.py:375 src/commands.py:382 src/commands.py:391 +#: src/commands.py:398 src/commands.py:407 msgid "do that" msgstr "tee se" -#: src/commands.py:371 src/commands.py:378 src/commands.py:387 -#: src/commands.py:394 src/commands.py:403 +#: src/commands.py:378 src/commands.py:385 src/commands.py:394 +#: src/commands.py:401 src/commands.py:410 msgid "I'm not even in %s." msgstr "En edes ole kanavalla %s." -#: src/commands.py:373 +#: src/commands.py:380 msgid "I need to be voiced to %s." msgstr "Minulla täytyy olla ääni tehdäkseni %s." -#: src/commands.py:381 +#: src/commands.py:388 #, fuzzy msgid "I need to be at least voiced to %s." msgstr "Minulla täytyy olla ainakin voice, jotta voin %s" -#: src/commands.py:389 +#: src/commands.py:396 msgid "I need to be halfopped to %s." msgstr "" "Minulla täytyy olla puolikanavaoperaattorin valtuudet voidakseni tehdä %s." -#: src/commands.py:397 +#: src/commands.py:404 msgid "I need to be at least halfopped to %s." msgstr "" "Minulla täytyy olla vähintään puolioperaattorin oikeudet voidakseni tehdä %s" -#: src/commands.py:405 +#: src/commands.py:412 msgid "I need to be opped to %s." msgstr "Minun täytyy olla opattuna, jotta voin %s." -#: src/commands.py:411 src/commands.py:569 +#: src/commands.py:418 src/commands.py:585 msgid "channel" msgstr "kanava" -#: src/commands.py:424 +#: src/commands.py:431 msgid "nick or hostmask" msgstr "nimimerkki tai hostmask" -#: src/commands.py:478 +#: src/commands.py:492 msgid "regular expression" msgstr "säännöllinen lauseke" -#: src/commands.py:489 src/commands.py:493 +#: src/commands.py:503 src/commands.py:507 msgid "nick" msgstr "nimimerkki" -#: src/commands.py:490 +#: src/commands.py:504 msgid "That nick is too long for this server." msgstr "Tuo nimimerkki on liian pitkä tälle palvelimelle." -#: src/commands.py:501 +#: src/commands.py:515 msgid "I haven't seen %s." msgstr "En ole nähnyt käyttäjää %s." -#: src/commands.py:548 src/commands.py:567 +#: src/commands.py:564 src/commands.py:583 msgid "I'm not in %s." msgstr "En ole kanavalla %s." -#: src/commands.py:552 +#: src/commands.py:568 msgid "This command may only be given in a channel that I am in." msgstr "Tämä komento voidaan antaa vain kanavalla, jolla minä olen." -#: src/commands.py:565 +#: src/commands.py:581 msgid "You must be in %s." msgstr "Sinun täytyy olla kanavalla %s." -#: src/commands.py:576 +#: src/commands.py:592 msgid "%s is not in %s." msgstr "%s ei ole kanavalla %s." -#: src/commands.py:624 +#: src/commands.py:640 msgid "You must not give the empty string as an argument." msgstr "Et voi antaa tyhjää merkkiketjua parametriksi." -#: src/commands.py:632 +#: src/commands.py:648 #, fuzzy msgid "You must not give a string containing spaces as an argument." msgstr "Et voi antaa välilyöntejä sisältävää merkkiketjua parametriksi." -#: src/commands.py:642 +#: src/commands.py:658 msgid "This message must be sent in a channel." msgstr "Tämä viesti täytyy lähettää kanavalla." -#: src/commands.py:674 src/commands.py:681 +#: src/commands.py:690 src/commands.py:697 msgid "url" msgstr "url" -#: src/commands.py:687 +#: src/commands.py:703 msgid "IRI" msgstr "" -#: src/commands.py:693 +#: src/commands.py:709 msgid "email" msgstr "sähköposti" -#: src/commands.py:703 src/commands.py:711 +#: src/commands.py:719 src/commands.py:727 msgid "http url" msgstr "http URL-osoite" -#: src/commands.py:718 +#: src/commands.py:734 msgid "command name" msgstr "komennon nimi" -#: src/commands.py:726 +#: src/commands.py:742 msgid "ip" msgstr "IP" -#: src/commands.py:732 +#: src/commands.py:748 msgid "letter" msgstr "kirjain" -#: src/commands.py:764 +#: src/commands.py:780 msgid "plugin" msgstr "lisä-osa" -#: src/commands.py:772 +#: src/commands.py:788 msgid "irc color" msgstr "irc väri" @@ -439,7 +439,31 @@ msgstr "" "tyhjä\n" " oletusasetus on supybot.protocols.irc.umodes." -#: src/conf.py:424 +#: src/conf.py:423 +#, fuzzy +msgid "" +"Determines what vhost the bot will bind to before\n" +" connecting a server (IRC, HTTP, ...) via IPv4. If empty, defaults " +"to\n" +" supybot.protocols.irc.vhost" +msgstr "" +"Määrittää mihin vhostiin botti sitoutuu, ennen kuin ottaa yhdeyden (IRC, " +"HTTP\n" +" jne.) palvelimeen käyttäen IPv4:ää." + +#: src/conf.py:427 +#, fuzzy +msgid "" +"Determines what vhost the bot will bind to before\n" +" connecting a server (IRC, HTTP, ...) via IPv6. If empty, defaults " +"to\n" +" supybot.protocols.irc.vhostv6" +msgstr "" +"Määrittää mihin vhostiin botti sitoutuu, ennen kuin ottaa yhdeyden (IRC, " +"HTTP\n" +" jne.) palvelimeen käyttäen IPv6:tta." + +#: src/conf.py:433 #, fuzzy msgid "" "Determines what SASL username will be used on %s. This should\n" @@ -451,18 +475,18 @@ msgstr "" "nimimerkkiä ei\n" " voida käyttää." -#: src/conf.py:427 +#: src/conf.py:436 msgid "Determines what SASL password will be used on %s." msgstr "Määrittää mitä SASL salasanaa käytetään verkossa %s." -#: src/conf.py:430 +#: src/conf.py:439 msgid "" "Determines what SASL ECDSA key (if any) will be used on %s.\n" " The public key must be registered with NickServ for SASL\n" " ECDSA-NIST256P-CHALLENGE to work." msgstr "" -#: src/conf.py:435 +#: src/conf.py:444 #, fuzzy msgid "" "Determines what SASL mechanisms will be tried and in which order.\n" @@ -471,7 +495,7 @@ msgstr "" "Määrittää mitä salasanaa (jos mitään) käytetään kanavalle\n" " liittymisessä." -#: src/conf.py:438 +#: src/conf.py:447 #, fuzzy msgid "" "Determines whether the bot will abort the connection if the\n" @@ -480,7 +504,7 @@ msgstr "" "Määrittää yrittääkö botti yhdistää SSL\n" " solmuilla verkkoon %s." -#: src/conf.py:441 +#: src/conf.py:450 #, fuzzy msgid "" "If not empty, determines the hostname:port of the socks proxy that\n" @@ -489,11 +513,11 @@ msgstr "" "Ollessaan täytetty, määrittää sen socks-välityspalvelimen isäntämimen, jota " "käytetään tähän verkkoon yhdistettäessä." -#: src/conf.py:461 +#: src/conf.py:470 msgid "Determines how urls should be formatted." msgstr "Määrittää kuinka URL:t muotoillaan." -#: src/conf.py:469 +#: src/conf.py:478 msgid "" "Determines how timestamps\n" " printed for human reading should be formatted. Refer to the Python\n" @@ -506,7 +530,7 @@ msgstr "" " aika moduulille nähdäksesi kelvolliset muotoilumerkit \n" " ajan muodoille." -#: src/conf.py:484 +#: src/conf.py:493 msgid "" "Determines whether elapsed times will be given\n" " as \"1 day, 2 hours, 3 minutes, and 15 seconds\" or as \"1d 2h 3m 15s\"." @@ -514,18 +538,18 @@ msgstr "" "Määrittää näytetäänkö kulunut aika muodossa\n" " \"1 päivä, 2 tuntia, 3 minuuttia, ja 15 sekuntia\" vai \"1d 2h 3m 15s\"." -#: src/conf.py:495 +#: src/conf.py:504 msgid "" "Maximum number of items in a list\n" " before the end is replaced with 'and others'. Set to 0 to always\n" " show the entire list." msgstr "" -#: src/conf.py:512 +#: src/conf.py:521 msgid "other" msgstr "" -#: src/conf.py:517 +#: src/conf.py:526 msgid "" "Determines the absolute maximum length of\n" " the bot's reply -- no reply will be passed through the bot with a " @@ -536,7 +560,7 @@ msgstr "" " -- yksikään vastaus, joka on suurempi, kuin tämä\n" " ei mene botin läpi." -#: src/conf.py:522 +#: src/conf.py:531 msgid "" "Determines whether the bot will break up long\n" " messages into chunks and allow users to use the 'more' command to get " @@ -547,7 +571,7 @@ msgstr "" " paloihin ja sallii käyttäjien käyttää 'more' komentoa\n" " saadakseen jäljelläolevat palat." -#: src/conf.py:527 +#: src/conf.py:536 msgid "" "Determines what the maximum number of\n" " chunks (for use with the 'more' command) will be." @@ -555,7 +579,7 @@ msgstr "" "Määrittää maksimimäärän\n" " paloja (käytettäväksi 'more' komennon) kanssa." -#: src/conf.py:531 +#: src/conf.py:540 msgid "" "Determines how long individual chunks\n" " will be. If set to 0, uses our super-tweaked,\n" @@ -565,7 +589,7 @@ msgstr "" " olemaan. Jos tämä on asetettu arvoon 0, tämä käyttää meidän\n" " super-muokattua-saa-suurin-osa-ulos-yksittäisestä-viestistä oletusta." -#: src/conf.py:536 +#: src/conf.py:545 msgid "" "Determines how many mores will be sent\n" " instantly (i.e., without the use of the more command, immediately when\n" @@ -580,7 +604,23 @@ msgstr "" "kaikille muille, paitsi\n" " ensinmäiselle palalle." -#: src/conf.py:542 +#: src/conf.py:552 +#, fuzzy +msgid "" +"Determines how many mores will be sent\n" +" instantly (i.e., without the use of the more command, immediately when\n" +" they are formed) when sending messages in private. Defaults to 0, which " +"means\n" +" that it defaults to the generic supybot.reply.mores.instant value." +msgstr "" +"Määrittää, kuinka monta \"more\"a lähetetään heti \n" +" (esim., ilman \"more\" command käyttöä, heti, kun ne ovat " +"muodostettuja. \n" +" On oletuksena 1, joka tarkoittaa, että \"more\" komentoa vaaditaan " +"kaikille muille, paitsi\n" +" ensinmäiselle palalle." + +#: src/conf.py:558 msgid "" "Determines whether the bot will send\n" " multi-message replies in a single message. This defaults to True \n" @@ -589,11 +629,11 @@ msgid "" msgstr "" "Määrittää lähettääkö botti monen viestin vastaukset yhdessä viestissä. Tämä " "on\n" -" oletuksena \"True\", ettei botti floodaa. Jos tämä asetetaan arvoon \"False" -"\", botti\n" +" oletuksena \"True\", ettei botti floodaa. Jos tämä asetetaan arvoon " +"\"False\", botti\n" " lähettää monen viestin vastaukset usealla rivillä." -#: src/conf.py:548 +#: src/conf.py:564 msgid "" "Determines whether the bot will reply with an\n" " error message when it is addressed but not given a valid command. If " @@ -607,7 +647,7 @@ msgstr "" " botti pysyy hiljaisena, mikäli muita lisäosia, jotka ohittavat \n" " tämän käytöksen ei ole." -#: src/conf.py:555 +#: src/conf.py:571 msgid "" "Determines whether error messages that result\n" " from bugs in the bot will show a detailed error message (the uncaught\n" @@ -618,7 +658,7 @@ msgstr "" " (selittämätön poikkeus )\n" " vai tavallisen virheilmoituksen." -#: src/conf.py:559 +#: src/conf.py:575 msgid "" "Determines whether the bot will send error\n" " messages to users in private. You might want to do this in order to " @@ -632,7 +672,7 @@ msgstr "" " Tämä voidaan yhdistää asetusarvon \n" " supybot.reply.error.withNotice kanssa." -#: src/conf.py:564 +#: src/conf.py:580 #, fuzzy msgid "" "Determines whether the bot will send error\n" @@ -654,7 +694,7 @@ msgstr "" "yksityiskeskustelu ikkunaa \n" " enimmissä IRC-asiakasohjelmissa." -#: src/conf.py:571 +#: src/conf.py:587 #, fuzzy msgid "" "Determines whether the bot will *not* provide\n" @@ -673,7 +713,7 @@ msgstr "" "suorittamasta \n" " tiettyjä komentoja." -#: src/conf.py:579 +#: src/conf.py:595 msgid "" "Determines whether the bot will reply\n" " privately when replying in a channel, rather than replying to the " @@ -684,7 +724,7 @@ msgstr "" " kanavalla mielummin, kuin vastaa koko \n" " kanavalle." -#: src/conf.py:584 +#: src/conf.py:600 msgid "" "Determines whether the bot will reply with a\n" " notice when replying in a channel, rather than replying with a privmsg " @@ -695,7 +735,7 @@ msgstr "" " mielummin kuin PRIVMSG:llä, jolla se vastaa \n" " tavallisesti." -#: src/conf.py:590 +#: src/conf.py:606 #, fuzzy msgid "" "Determines whether the bot will reply with a\n" @@ -708,7 +748,7 @@ msgstr "" " Yksittäiset käyttäjät voivat ohittaa tämän asetusarvolla \n" " reply.withNoticeWhenPrivate." -#: src/conf.py:595 +#: src/conf.py:611 #, fuzzy msgid "" "Determines whether the bot will always prefix\n" @@ -717,7 +757,7 @@ msgstr "" "Määrittää aloittaako botti rivin sen käyttäjän nimimerkillä, joka antoi \n" " komennon." -#: src/conf.py:599 +#: src/conf.py:615 msgid "" "Determines whether the bot should attempt to\n" " reply to all messages even if they don't address it (either via its " @@ -732,7 +772,7 @@ msgstr "" " sen etuliitemerkillä. Jos tämä asetetaan arvoon True,\n" " supybot.reply.whenNotCommand tahdotaan asettaa Falseksi." -#: src/conf.py:605 +#: src/conf.py:621 msgid "" "Determines whether the bot will allow you to\n" " send channel-related commands outside of that channel. Sometimes " @@ -748,7 +788,7 @@ msgstr "" " käyttäytymistä kanavalla, mutta komento lähetettiin kanavan itsensä \n" " ulkopuolella." -#: src/conf.py:612 +#: src/conf.py:628 msgid "" "Determines whether the bot will unidentify\n" " someone when that person changes their nick. Setting this to True\n" @@ -761,7 +801,7 @@ msgstr "" "mmuutoksia. Se\n" " on oletuksena False hiukan paremman turvallisuuden vuoksi." -#: src/conf.py:618 +#: src/conf.py:634 msgid "" "Determines whether the bot will always join a\n" " channel when it's invited. If this value is False, the bot will only " @@ -775,7 +815,7 @@ msgstr "" "käyttäjällä on 'admin' valtuus (tai sen\n" " on käsketty liittyä kanavalle käyttäen komentoa Admin.join)." -#: src/conf.py:624 +#: src/conf.py:640 msgid "" "Supybot normally replies with the full help\n" " whenever a user misuses a command. If this value is set to True, the " @@ -788,7 +828,7 @@ msgstr "" "vastaa vain komennon syntaksilla (ensinmäinen rivi ohjetekstiä) ennemmin, " "kuin täydellä ohjetekstillä." -#: src/conf.py:639 +#: src/conf.py:655 msgid "" "Determines what prefix characters the bot will\n" " reply to. A prefix character is a single character that the bot will " @@ -809,7 +849,7 @@ msgstr "" "niistä käyetään etuliitemerkkinä, botti olettaa, että viesti on osoitettu " "sille." -#: src/conf.py:648 +#: src/conf.py:664 msgid "" "Determines what strings the\n" " bot will reply to when they are at the beginning of the message. " @@ -827,7 +867,7 @@ msgstr "" "joksikin, kuten '@@ ??' ja botti vastaa, kun viestissä on etuliiteenä joko " "@@ tai ??." -#: src/conf.py:655 +#: src/conf.py:671 msgid "" "Determines whether the bot will reply when\n" " people address it by its nick, rather than with a prefix character." @@ -835,7 +875,7 @@ msgstr "" "Määrittää vastaako botti, kun ihmiset osoittavat sitä \n" " nimimerkillä, mielummin kuin aloitusmerkillä." -#: src/conf.py:658 +#: src/conf.py:674 msgid "" "Determines whether the bot will reply when\n" " people address it by its nick at the end of the message, rather than at\n" @@ -846,7 +886,7 @@ msgstr "" "eikä \n" " alussa." -#: src/conf.py:662 +#: src/conf.py:678 msgid "" "Determines what extra nicks\n" " the bot will always respond to when addressed by, even if its current " @@ -857,11 +897,11 @@ msgstr "" " vastaa aina, jopa jos sen nykyinen nimimerkki on jokin \n" " muu." -#: src/conf.py:672 +#: src/conf.py:688 msgid "The operation succeeded." msgstr "Tehtävä suoritettu onnistuneesti." -#: src/conf.py:673 +#: src/conf.py:689 msgid "" "Determines what message the bot replies with when a command succeeded.\n" " If this configuration variable is empty, no success message will be\n" @@ -870,25 +910,28 @@ msgstr "" "Määrittää millä viestillä botti vastaa, kun komento on onnistunut.\n" " Jos tämä asetusarvo on tyhjä, onnistumisviestejä ei lähetetä." -#: src/conf.py:678 +#: src/conf.py:694 +#, fuzzy msgid "" "An error has occurred and has been logged.\n" -" Please contact this bot's administrator for more information." +" Please contact this bot's administrator for more information.\n" +" If this configuration variable is empty, no generic error message will " +"be sent." msgstr "" "Virhe on tapahtunut ja tallennettu lokiin.\n" " Ole hyvä ja ota yhteyttä tämän botin ylläpitäjään saadaksesi lisätietoja." # Google Kääntäjän mukaan "ambiguos" tarkoittaa epäselvää, mutta miksi botti haluaisi olla epäselvä? -#: src/conf.py:679 +#: src/conf.py:697 +#, fuzzy msgid "" -"\n" -" Determines what error message the bot gives when it wants to be\n" +"Determines what error message the bot gives when it wants to be\n" " ambiguous." msgstr "" "\n" " Määrittää minkä virheilmoituksen botti antaa tahtoessaan olla epäselvä." -#: src/conf.py:684 +#: src/conf.py:701 msgid "" "An error has occurred and has been logged.\n" " Check the logs for more information." @@ -896,7 +939,7 @@ msgstr "" "Virhe on tapahtunut ja tallennettu lokiin. Lisätietoja saadaan lokeista." # Miksi botti tahtoisi olevansa epäselvä? Google Kääntäjä... -#: src/conf.py:685 +#: src/conf.py:702 msgid "" "Determines what error\n" " message the bot gives to the owner when it wants to be ambiguous." @@ -905,13 +948,13 @@ msgstr "" "epäselvä." # Pitäisikö "hostmask" kääntää "isäntänaamioksi" vai pitää kuten se on? -#: src/conf.py:689 +#: src/conf.py:706 msgid "" "Your hostmask doesn't match or your password\n" " is wrong." msgstr "Hostmask ei täsmää tai salasana on väärä." -#: src/conf.py:690 +#: src/conf.py:707 msgid "" "Determines what message the bot replies with when\n" " someone tries to use a command that requires being identified or having " @@ -921,7 +964,7 @@ msgstr "" "Määrittää millä viestillä botti vastaa, kun joku yrittää antaa komennon, " "joka vaatii tunnistautumista, ja kumpikaan vaatimus ei ole täytetty." -#: src/conf.py:696 +#: src/conf.py:713 msgid "" "I can't find %s in my user\n" " database. If you didn't give a user name, then I might not know what " @@ -934,7 +977,7 @@ msgstr "" "kuin tämä\n" " komento saattaa toimia." -#: src/conf.py:699 +#: src/conf.py:716 msgid "" "Determines what error message the bot replies with when someone tries\n" " to accessing some information on a user the bot doesn't know about." @@ -942,7 +985,7 @@ msgstr "" "Määrittää millä virheilmoituksella botti vastaa, kun joku yrittää päästä " "tietoihin käyttäjästä, jota ei ole olemassakaan." -#: src/conf.py:703 +#: src/conf.py:720 msgid "" "You must be registered to use this command.\n" " If you are already registered, you must either identify (using the " @@ -956,7 +999,7 @@ msgstr "" " hostmask, joka täsmää nykyiseen hostmaskiisi (käyttämällä \"hostmask add\" " "komentoa)." -#: src/conf.py:706 +#: src/conf.py:723 msgid "" "Determines what error message the bot\n" " replies with when someone tries to do something that requires them to " @@ -970,7 +1013,7 @@ msgstr "" " tunnistettu." # Tämän pitäisi mahdollisesti olla passiivissa, mutta en ole varma miten tämä pitäisi olla passiivissa. Merkitsen sen epäselväksi. -#: src/conf.py:711 +#: src/conf.py:728 #, fuzzy msgid "" "You don't have the %s capability. If you\n" @@ -985,7 +1028,7 @@ msgstr "" "'whoami' voi\n" " kertoa sinulle oletko tunnistautunut." -#: src/conf.py:714 +#: src/conf.py:731 msgid "" "Determines what error message is given when the bot\n" " is telling someone they aren't cool enough to use the command they tried " @@ -996,7 +1039,7 @@ msgstr "" "ole\n" " riittävän kuuli käyttääkseen komentoa, jota hän yritti käyttää." -#: src/conf.py:719 +#: src/conf.py:736 msgid "" "You're missing some capability you need.\n" " This could be because you actually possess the anti-capability for the\n" @@ -1019,7 +1062,7 @@ msgstr "" "mitä tahdot\n" " tehdä." -#: src/conf.py:727 +#: src/conf.py:744 msgid "" "Determines what generic error message is given when the bot is telling\n" " someone that they aren't cool enough to use the command they tried to " @@ -1034,13 +1077,13 @@ msgstr "" " kutsuu errorNoCapability koodin ei tarjonnut tarkkaa valtuutta ihansama " "mistä syystä." -#: src/conf.py:733 +#: src/conf.py:750 msgid "" "That operation cannot be done in a\n" " channel." msgstr "Tätä tehtävää ei voida suorittaa kanavalla." -#: src/conf.py:734 +#: src/conf.py:751 msgid "" "Determines what error messages the bot sends to people\n" " who try to do things in a channel that really should be done in\n" @@ -1050,7 +1093,7 @@ msgstr "" "tehdä\n" " asioita, jotka todella pitäisi tehdä yksityisesti, kanavalla." -#: src/conf.py:739 +#: src/conf.py:756 msgid "" "This may be a bug. If you think it is,\n" " please file a bug report at\n" @@ -1060,7 +1103,7 @@ msgstr "" " <https://github.com/progval/Limnoria/issues>. Bugiraportit kirjoitetaan " "englanniksi." -#: src/conf.py:742 +#: src/conf.py:759 msgid "" "Determines what message the bot sends when it thinks you've\n" " encountered a bug that the developers don't know about." @@ -1069,11 +1112,11 @@ msgstr "" "josta\n" " kehittäjät eivät ole tietoisia." -#: src/conf.py:749 +#: src/conf.py:766 msgid "$Type #$id: $text (added by $username at $at)" msgstr "" -#: src/conf.py:750 +#: src/conf.py:767 msgid "" "Format used by generic database plugins (Lart, Dunno, Prase, Success,\n" " Quote, ...) to show an entry. You can use the following variables:\n" @@ -1081,7 +1124,7 @@ msgid "" " $at (creation time), $userid/$username/$nick (author)." msgstr "" -#: src/conf.py:760 +#: src/conf.py:777 msgid "" "A floating point number of seconds to throttle\n" " snarfed URLs, in order to prevent loops between two bots snarfing the " @@ -1094,7 +1137,7 @@ msgstr "" "ulostulevassa\n" " kaappausviestissä." -#: src/conf.py:765 +#: src/conf.py:782 msgid "" "Determines the number of seconds\n" " between running the upkeep function that flushes (commits) open " @@ -1107,7 +1150,7 @@ msgstr "" " , kerää jätteet ja tallentaa hyödyllisiä tilastotietoja debuggaus tasolle, " "välissä." -#: src/conf.py:771 +#: src/conf.py:788 msgid "" "Determines whether the bot will periodically\n" " flush data and configuration files to disk. Generally, the only time\n" @@ -1131,7 +1174,7 @@ msgstr "" " muokata itse." # Google Kääntäjä ei tiedä mitä "tokenized" tarkoittaa. En tiedä minäkään. -#: src/conf.py:797 +#: src/conf.py:814 #, fuzzy msgid "" "Determines what characters are valid for quoting\n" @@ -1142,7 +1185,7 @@ msgstr "" "estetään niitä\n" " tulemasta tokenisoiduiksi " -#: src/conf.py:804 +#: src/conf.py:821 msgid "" "Determines whether the bot will allow nested\n" " commands, which rule. You definitely should keep this on." @@ -1151,7 +1194,7 @@ msgstr "" "parhaita. Tämä\n" " täytyy varmasti pitää käytössä." -#: src/conf.py:807 +#: src/conf.py:824 msgid "" "Determines what the maximum number of\n" " nested commands will be; users will receive an error if they attempt\n" @@ -1163,7 +1206,7 @@ msgstr "" "komentoja,\n" " kuin tämä arvo sallii." -#: src/conf.py:816 +#: src/conf.py:833 #, fuzzy msgid "" "Supybot allows you to specify what brackets\n" @@ -1182,7 +1225,7 @@ msgstr "" "komennot\n" " eivät ole sallittuja kanavalla." -#: src/conf.py:823 +#: src/conf.py:840 msgid "" "Supybot allows nested commands. Enabling this\n" " option will allow nested commands with a syntax similar to UNIX pipes, " @@ -1195,7 +1238,7 @@ msgstr "" "putket,\n" " esimerkiksi 'botti: foo | bar'." -#: src/conf.py:828 +#: src/conf.py:845 msgid "" "Determines what commands have default\n" " plugins set, and which plugins are set to be the default for each of " @@ -1206,7 +1249,7 @@ msgstr "" "on\n" " määritetty olemann oletuksia kaikille noille komennoille." -#: src/conf.py:834 +#: src/conf.py:851 msgid "" "Determines what plugins automatically get precedence over all\n" " other plugins when selecting a default plugin for a command. By\n" @@ -1226,7 +1269,7 @@ msgstr "" "asetusarvossa\n" " kirjainkoolla on merkitystä." -#: src/conf.py:844 +#: src/conf.py:861 msgid "" "Allows this bot's owner user to use commands\n" " that grants them shell access. This config variable exists in case you " @@ -1238,20 +1281,20 @@ msgid "" " used to indirectly gain shell access." msgstr "" -#: src/conf.py:859 +#: src/conf.py:876 #, fuzzy msgid "" "Determines the interval used for\n" " the history storage." msgstr "Määrittää historian tallennukseen käytettävän aikavälin." -#: src/conf.py:862 +#: src/conf.py:879 msgid "" "Determines whether the bot will defend itself\n" " against command-flooding." msgstr "Määrittää puolustaako botti itseään komento tulvimista vastaan." -#: src/conf.py:865 +#: src/conf.py:882 #, fuzzy msgid "" "Determines how many commands users are\n" @@ -1268,7 +1311,7 @@ msgstr "" "asetusarvossa\n" " supybot.abuse.flood.command.punishment." -#: src/conf.py:870 +#: src/conf.py:887 msgid "" "Determines how many seconds the bot\n" " will ignore users who flood it with commands." @@ -1277,7 +1320,7 @@ msgstr "" "sitä\n" " komennoilla, botti jättää huomioimatta." -#: src/conf.py:873 +#: src/conf.py:890 #, fuzzy msgid "" "Determines whether the bot will notify people\n" @@ -1287,7 +1330,7 @@ msgstr "" "välitetä, jos \n" " heidän olemassa olostaan ei välitetä viallisten komentojen tulvan takia." -#: src/conf.py:877 +#: src/conf.py:894 msgid "" "Determines whether the bot will defend itself\n" " against invalid command-flooding." @@ -1295,7 +1338,7 @@ msgstr "" "Määrittää puolustaako botti itseään \n" " viallisten komentojen tulvaa vastaan." -#: src/conf.py:880 +#: src/conf.py:897 #, fuzzy msgid "" "Determines how many invalid commands users\n" @@ -1320,7 +1363,7 @@ msgstr "" "heille\n" " tulvia kelvollisilla komennoilla." -#: src/conf.py:888 +#: src/conf.py:905 msgid "" "Determines how many seconds the bot\n" " will ignore users who flood it with invalid commands. Typically, this\n" @@ -1339,7 +1382,7 @@ msgstr "" "tulvia\n" " kelvollisilla komennoilla." -#: src/conf.py:894 +#: src/conf.py:911 msgid "" "Determines whether the bot will notify people\n" " that they're being ignored for invalid command flooding." @@ -1349,7 +1392,7 @@ msgstr "" " heidän olemassa olostaan ei välitetä viallisten komentojen tulvan takia." # Mitäköhän tämä tarkoittaa? -#: src/conf.py:903 +#: src/conf.py:920 #, fuzzy msgid "" "Determines the default length of time a\n" @@ -1357,13 +1400,25 @@ msgid "" msgstr "" "Määrittää, oletus ajanjakson, joka ajurin pitäisi estää odottaen sisääntuloa." -#: src/conf.py:911 +#: src/conf.py:928 msgid "" "Determines what driver module the \n" " bot will use. Current, the only (and default) driver is Socket." msgstr "" -#: src/conf.py:915 +#: src/conf.py:932 +#, fuzzy +msgid "" +"Determines the minimum time the bot will\n" +" wait before attempting to reconnect to an IRC server." +msgstr "" +"Määrittää maksimi ajan, jonka botti odottaa, ennen kuin yrittää yhdistää " +"uudelleen\n" +" IRC palvelimeen. Botti voi tietysti yhdistää palvelimeen uudelleen " +"aikaisemminkin,\n" +" mikäli se on mahdollista." + +#: src/conf.py:936 msgid "" "Determines the maximum time the bot will\n" " wait before attempting to reconnect to an IRC server. The bot may, of\n" @@ -1375,17 +1430,17 @@ msgstr "" "aikaisemminkin,\n" " mikäli se on mahdollista." -#: src/conf.py:967 +#: src/conf.py:988 msgid "" "Determines what directory configuration data is\n" " put into." msgstr "Määrittää mihin hakemistoon asetustiedostot laitetaan." -#: src/conf.py:970 +#: src/conf.py:991 msgid "Determines what directory data is put into." msgstr "Määrittää mihin hakemistoon data laitetaan." -#: src/conf.py:972 +#: src/conf.py:993 msgid "" "Determines what directory backup data is put\n" " into. Set it to /dev/null to disable backup (it is a special value,\n" @@ -1398,13 +1453,13 @@ msgstr "" " erityisarvo, joten se toimi myös Windowsilla ja käyttöjärjestelmillä,\n" " joilla ei ole hakemistoa /dev/null)." -#: src/conf.py:979 +#: src/conf.py:1000 msgid "" "Determines what directory temporary files\n" " are put into." msgstr "Määrittää mihin hakemistoon väliaikaistiedostot laitetaan." -#: src/conf.py:982 +#: src/conf.py:1003 msgid "" "Determines what directory files of the\n" " web server (templates, custom images, ...) are put into." @@ -1413,7 +1468,7 @@ msgstr "" "kuvat\n" " jne.) laitetaan." -#: src/conf.py:995 +#: src/conf.py:1016 msgid "" "Determines what directories\n" " the bot will look for plugins in. Accepts a comma-separated list of\n" @@ -1432,7 +1487,7 @@ msgstr "" " 'config supybot.directories.plugins [config supybot.directories.plugins],\n" " UusiLisäosaHakemisto." -#: src/conf.py:1003 +#: src/conf.py:1024 msgid "" "List of all plugins that were\n" " ever loaded. Currently has no effect whatsoever. You probably want to " @@ -1441,7 +1496,7 @@ msgid "" " instead of this." msgstr "" -#: src/conf.py:1008 +#: src/conf.py:1029 msgid "" "Determines whether the bot will always load\n" " important plugins (Admin, Channel, Config, Misc, Owner, and User)\n" @@ -1462,7 +1517,7 @@ msgstr "" "lisäosia ovat\n" " tarpeeksi teräviä vaihtaakseen tätä asetusarvoa sopivasti :)" -#: src/conf.py:1036 +#: src/conf.py:1063 msgid "" "Determines what databases are available for use. If this\n" " value is not configured (that is, if its value is empty) then sane " @@ -1473,7 +1528,7 @@ msgstr "" "määritetty,\n" " (se tarkottaa, että sen arvo on tyhjä) niin järkevät oletukset tarjotaan." -#: src/conf.py:1042 +#: src/conf.py:1069 msgid "" "Determines what filename will be used\n" " for the users database. This file will go into the directory specified " @@ -1485,7 +1540,7 @@ msgstr "" " tiedosto menee hakemistoon, jonka määrittää asetusarvo supybot.directories." "conf." -#: src/conf.py:1046 +#: src/conf.py:1073 msgid "" "Determines how long it takes identification to\n" " time out. If the value is less than or equal to zero, identification " @@ -1496,7 +1551,7 @@ msgstr "" "on vähemmän\n" " tai yhtäsuuri kuin nolla, tunnistautuminen ei ikinä vanhene." -#: src/conf.py:1050 +#: src/conf.py:1077 msgid "" "Determines whether the bot will allow users to\n" " unregister their users. This can wreak havoc with already-existing\n" @@ -1515,7 +1570,7 @@ msgstr "" "asetusarvo estä\n" " botin omistajaa käyttänästä \"unregister\" komentoa.)" -#: src/conf.py:1059 +#: src/conf.py:1086 msgid "" "Determines what filename will be used\n" " for the ignores database. This file will go into the directory " @@ -1527,7 +1582,7 @@ msgstr "" "asetusarvo\n" " supybot.directories.conf." -#: src/conf.py:1065 +#: src/conf.py:1092 msgid "" "Determines what filename will be used\n" " for the channels database. This file will go into the directory " @@ -1538,7 +1593,7 @@ msgstr "" "tiedosto laitetaan\n" " hakemistoon, joka määritetään asetusarvolla supybot.directories.conf." -#: src/conf.py:1071 +#: src/conf.py:1098 #, fuzzy msgid "" "Determines what filename will be used\n" @@ -1551,7 +1606,7 @@ msgstr "" "asetusarvo\n" " supybot.directories.conf." -#: src/conf.py:1103 +#: src/conf.py:1130 #, fuzzy msgid "" "Determines whether the bot will require user\n" @@ -1561,7 +1616,7 @@ msgstr "" "Määrittää puolustaako botti itseään \n" " viallisten komentojen tulvaa vastaan." -#: src/conf.py:1107 +#: src/conf.py:1134 msgid "" "Determines whether database-based plugins that\n" " can be channel-specific will be so. This can be overridden by " @@ -1586,7 +1641,7 @@ msgstr "" "sopivaksi,\n" " mikäli tietyn kanavan tietokannat, tahdotaan jakaa globaalisti." -#: src/conf.py:1115 +#: src/conf.py:1142 msgid "" "Determines what channel global\n" " (non-channel-specific) databases will be considered a part of. This is\n" @@ -1615,7 +1670,7 @@ msgstr "" "lisäosat\n" " eivät välttämättä toimi kanavalla." -#: src/conf.py:1124 +#: src/conf.py:1151 msgid "" "Determines whether another channel's global\n" " (non-channel-specific) databases will be allowed to link to this " @@ -1634,14 +1689,14 @@ msgstr "" "lisäosat\n" " eivät välttämättä toimi kanavalla." -#: src/conf.py:1142 +#: src/conf.py:1169 msgid "" "Determines\n" " whether CDB databases will be allowed as a database implementation." msgstr "" "Määrittää sallitaanko CDB tietokantojen käyttö tietokantaimplementaationa." -#: src/conf.py:1145 +#: src/conf.py:1172 msgid "" "Determines how often CDB databases will have\n" " their modifications flushed to disk. When the number of modified " @@ -1656,13 +1711,13 @@ msgstr "" "yhteismäärästä,\n" " tietokanta tallennetaan levylle kokonaan." -#: src/conf.py:1237 +#: src/conf.py:1337 msgid "" "Determines what will be used as the\n" " default banmask style." msgstr "Määrittää mitä käytetään oletus porttikiellon anto tyylinä." -#: src/conf.py:1241 +#: src/conf.py:1341 #, fuzzy msgid "" "Determines whether the bot will strictly\n" @@ -1678,7 +1733,7 @@ msgstr "" " verkkoa, joka vaatii viestien lähetyksen nimimerkille, kuten esimerkiksi\n" " services@tämän.verkon.palvelin, niin tämä pitäisi asettaa arvoon \"False\"." -#: src/conf.py:1248 +#: src/conf.py:1348 msgid "" "Determines whether the bot will enable\n" " draft/experimental extensions of the IRC protocol. Setting this to True\n" @@ -1688,7 +1743,7 @@ msgid "" " doing." msgstr "" -#: src/conf.py:1255 +#: src/conf.py:1355 msgid "" "Determines what certificate file (if any) the bot\n" " will use connect with SSL sockets by default." @@ -1696,7 +1751,7 @@ msgstr "" "Määrittää mitä SSL-varmennetta (jos mitään) botti käyttää oletuksena\n" " yhdistäessään SSL-solmuilla." -#: src/conf.py:1259 +#: src/conf.py:1359 msgid "" "Determines what user modes the bot will request\n" " from the server when it first connects. Many people might choose +i; " @@ -1713,7 +1768,7 @@ msgstr "" "antaa\n" " väärennetty isäntä." -#: src/conf.py:1265 +#: src/conf.py:1365 #, fuzzy msgid "" "Determines what vhost the bot will bind to before\n" @@ -1723,7 +1778,7 @@ msgstr "" "HTTP\n" " jne.) palvelimeen käyttäen IPv4:ää." -#: src/conf.py:1269 +#: src/conf.py:1369 #, fuzzy msgid "" "Determines what vhost the bot will bind to before\n" @@ -1733,7 +1788,7 @@ msgstr "" "HTTP\n" " jne.) palvelimeen käyttäen IPv6:tta." -#: src/conf.py:1273 +#: src/conf.py:1373 #, fuzzy msgid "" "Determines how many old messages the bot will\n" @@ -1745,7 +1800,7 @@ msgstr "" "asetusarvon\n" " muuttaminen ei vaikuta ennen uudelleenkäynnistystä." -#: src/conf.py:1278 +#: src/conf.py:1378 #, fuzzy msgid "" "A floating point number of seconds to throttle\n" @@ -1757,7 +1812,7 @@ msgstr "" "estää viestejä\n" " tulemasta lähetetyiksi nopeammin kuin kerran throttleTime sekunteja." -#: src/conf.py:1283 +#: src/conf.py:1383 msgid "" "Determines whether the bot will send PINGs to\n" " the server it's connected to in order to keep the connection alive and\n" @@ -1774,7 +1829,7 @@ msgstr "" "olla \"True\",\n" " mikäli et kokeile omituisia palvelinongelmia." -#: src/conf.py:1290 +#: src/conf.py:1390 msgid "" "Determines the number of seconds between sending\n" " pings to the server, if pings are being sent to the server." @@ -1783,7 +1838,7 @@ msgstr "" "pingejä\n" " lähetetään palvelimelle." -#: src/conf.py:1295 +#: src/conf.py:1395 msgid "" "Determines whether the bot will refuse\n" " duplicated messages to be queued for delivery to the server. This is a\n" @@ -1800,7 +1855,7 @@ msgstr "" "merkitystä\n" " mikäli et ole tekemässä lisäosien hakkerointia." -#: src/conf.py:1303 +#: src/conf.py:1403 msgid "" "Determines how many seconds must elapse between\n" " JOINs sent to the server." @@ -1808,7 +1863,7 @@ msgstr "" "Määrittää, kuinka monta sekuntia täytyy kulua palvelimelle lähetettyjen \n" " JOINien välissä." -#: src/conf.py:1311 +#: src/conf.py:1411 msgid "" "Determines how many bytes the bot will\n" " 'peek' at when looking through a URL for a doctype or title or " @@ -1823,7 +1878,7 @@ msgstr "" "määrän bittejä,\n" " vaikka ei löytäisikään etsimäänsä." -#: src/conf.py:1335 +#: src/conf.py:1435 #, fuzzy msgid "" "Determines what HTTP proxy all HTTP requests should go\n" @@ -1833,7 +1888,7 @@ msgstr "" "mennä. \n" " Arvon pitäisi olla muodossa 'isäntä:portti'." -#: src/conf.py:1375 +#: src/conf.py:1475 msgid "" "If set, the Accept-Language HTTP header will be set to this\n" " value for requests. Useful for overriding the auto-detected language " @@ -1841,13 +1896,13 @@ msgid "" " the server's location." msgstr "" -#: src/conf.py:1381 +#: src/conf.py:1481 msgid "" "If set, the User-Agent HTTP header will be set to a randomly\n" " selected value from this comma-separated list of strings for requests." msgstr "" -#: src/conf.py:1389 +#: src/conf.py:1489 msgid "" "Determines whether server certificates\n" " will be verified, which checks whether the server certificate is signed\n" @@ -1858,14 +1913,14 @@ msgid "" " is set." msgstr "" -#: src/conf.py:1416 +#: src/conf.py:1516 msgid "" "If true, uses IPV6_V6ONLY to disable\n" " forwaring of IPv4 traffic to IPv6 sockets. On *nix, has the same\n" " effect as setting kernel variable net.ipv6.bindv6only to 1." msgstr "" -#: src/conf.py:1420 +#: src/conf.py:1520 msgid "" "Space-separated list of IPv4 hosts the HTTP server\n" " will bind." @@ -1873,7 +1928,7 @@ msgstr "" "Välilyönneille eroiteltu lista IPv4-osoitteista, joita HTTP-palvelin " "kuuntelee." -#: src/conf.py:1423 +#: src/conf.py:1523 msgid "" "Space-separated list of IPv6 hosts the HTTP server will\n" " bind." @@ -1881,7 +1936,7 @@ msgstr "" "Välilyönneilla erotettu lista IPv6-osoitteista, joita HTTP-palvelin " "kuuntelee." -#: src/conf.py:1426 +#: src/conf.py:1526 msgid "" "Determines what port the HTTP server will\n" " bind." @@ -1889,7 +1944,7 @@ msgstr "" "Määrittää mihin porttiin HTTP palvelin \n" " sitoutuu." -#: src/conf.py:1429 +#: src/conf.py:1529 msgid "" "Determines whether the server will stay\n" " alive if no plugin is using it. This also means that the server will\n" @@ -1900,14 +1955,14 @@ msgstr "" "mikäli sitä \n" " ei käytetä." -#: src/conf.py:1433 +#: src/conf.py:1533 #, fuzzy msgid "" "Determines the path of the file served as\n" " favicon to browsers." msgstr "Määrittää polun tiedostoon, joka annetaan faviconina selaimille." -#: src/conf.py:1436 +#: src/conf.py:1536 msgid "" "Determines the public URL of the server.\n" " By default it is http://<hostname>:<port>/, but you will want to change\n" @@ -1915,7 +1970,7 @@ msgid "" " the bot." msgstr "" -#: src/conf.py:1446 +#: src/conf.py:1546 msgid "" "Determines whether the bot will ignore\n" " unidentified users by default. Of course, that'll make it\n" @@ -1928,7 +1983,7 @@ msgstr "" " kanssa vaikeaksi, ellei heillä ole lisättyjä hostmaskeja, mutta se on sinun " "ongelmasi." -#: src/conf.py:1453 +#: src/conf.py:1553 msgid "" "A string that is the external IP of the bot. If this is the\n" " empty string, the bot will attempt to find out its IP dynamically " @@ -1936,13 +1991,13 @@ msgid "" " sometimes that doesn't work, hence this variable). This variable is not " "used\n" " by Limnoria and its built-in plugins: see supybot.protocols.irc.vhost /\n" -" supybot.protocols.irc.vhost6 to set the IRC bind host, and\n" +" supybot.protocols.irc.vhostv6 to set the IRC bind host, and\n" " supybot.servers.http.hosts4 / supybot.servers.http.hosts6 to set the " "HTTP\n" " server bind host." msgstr "" -#: src/conf.py:1472 +#: src/conf.py:1572 msgid "" "Determines what the default timeout for socket\n" " objects will be. This means that *all* sockets will timeout when this " @@ -1957,7 +2012,7 @@ msgstr "" "solmuja\n" " käyttävän koodin kirjoittaja on erikseen muokannut tätä)." -#: src/conf.py:1478 +#: src/conf.py:1578 msgid "" "Determines what file the bot should write its PID\n" " (Process ID) to, so you can kill it more easily. If it's left unset (as " @@ -1973,7 +2028,7 @@ msgstr "" "käynnistys on vaadittu\n" " tämän asetusarvon muutosten vaikutuksen aikaansaamiseksi." -#: src/conf.py:1488 +#: src/conf.py:1588 msgid "" "Determines whether the bot will automatically\n" " thread all commands." @@ -1981,7 +2036,7 @@ msgstr "" "Määrittää ketjuttaako botti kaikki\n" " komennot." -#: src/conf.py:1491 +#: src/conf.py:1591 msgid "" "Determines whether the bot will automatically\n" " flush all flushers *very* often. Useful for debugging when you don't " @@ -2001,7 +2056,7 @@ msgstr "Supybot verkkopalvelin indeksi." msgid "Here is a list of the plugins that have a Web interface:" msgstr "Tässä on lista lisäosista, joilla on verkko käyttöliittymä:" -#: src/httpserver.py:245 +#: src/httpserver.py:352 msgid "" "\n" " This is a default response of the Supybot HTTP server. If you see this\n" @@ -2015,7 +2070,7 @@ msgstr "" "tälle\n" " pyynnölle ole määritetty käsittelijää." -#: src/httpserver.py:291 +#: src/httpserver.py:398 msgid "" "\n" " I am a pretty clever IRC bot, but I suck at serving Web pages, " @@ -2032,65 +2087,65 @@ msgstr "" "virheen, ja minua ei ole koulutettu\n" " auttamaan sinua sellaisessa tapauksessa." -#: src/httpserver.py:310 +#: src/httpserver.py:417 msgid "Request not handled." msgstr "Pyyntöä ei hyväksytty." -#: src/httpserver.py:317 +#: src/httpserver.py:424 msgid "No plugins available." msgstr "Ei lisäosia saatavilla." -#: src/httpserver.py:335 src/httpserver.py:353 src/httpserver.py:391 +#: src/httpserver.py:442 src/httpserver.py:460 src/httpserver.py:498 msgid "Request not handled" msgstr "Pyyntöä ei käsitelty." -#: src/httpserver.py:378 +#: src/httpserver.py:485 #, fuzzy msgid "No favicon set." msgstr "Faviconia ei ole asetettu." -#: src/ircutils.py:573 +#: src/ircutils.py:592 msgid "is an op on %L" msgstr "" -#: src/ircutils.py:575 +#: src/ircutils.py:594 msgid "is a halfop on %L" msgstr "" -#: src/ircutils.py:577 +#: src/ircutils.py:596 msgid "is voiced on %L" msgstr "" -#: src/ircutils.py:580 +#: src/ircutils.py:599 msgid "is also on %L" msgstr "" -#: src/ircutils.py:582 +#: src/ircutils.py:601 msgid "is on %L" msgstr "" -#: src/ircutils.py:585 +#: src/ircutils.py:604 msgid "isn't on any publicly visible channels" msgstr "" -#: src/ircutils.py:593 src/ircutils.py:594 src/ircutils.py:600 +#: src/ircutils.py:612 src/ircutils.py:613 src/ircutils.py:619 msgid "<unknown>" msgstr "" -#: src/ircutils.py:602 +#: src/ircutils.py:621 #, fuzzy msgid " %s is away: %s." msgstr "%s ei ole kelvollinen %s." -#: src/ircutils.py:607 +#: src/ircutils.py:626 msgid " identified" msgstr "" -#: src/ircutils.py:613 +#: src/ircutils.py:632 msgid "%s (%s) has been%s on server %s since %s (idle for %s). %s %s.%s" msgstr "" -#: src/ircutils.py:617 +#: src/ircutils.py:636 msgid "%s (%s) has been%s on server %s and disconnected on %s." msgstr "" @@ -2114,88 +2169,88 @@ msgstr "Anna salasana uudelleen: " msgid "Passwords don't match." msgstr "Salasanat eivät täsmää." -#: src/registry.py:219 +#: src/registry.py:224 #, fuzzy msgid "%r is not a valid entry in %r" msgstr "%s ei ole kelvollinen %s." -#: src/registry.py:568 +#: src/registry.py:573 msgid "Value must be either True or False (or On or Off), not %r." msgstr "" "Arvon täytyy olla \"True\" tai \"False (tai \"On\" tai \"Off\"), ei %r." -#: src/registry.py:585 +#: src/registry.py:590 msgid "Value must be an integer, not %r." msgstr "Arvon täytyy olla kokonaisluku, eikä %r." -#: src/registry.py:595 +#: src/registry.py:600 msgid "Value must be a non-negative integer, not %r." msgstr "Arvon täytyy olla positiivinen kokonaisluku, ei %r." -#: src/registry.py:604 +#: src/registry.py:609 msgid "Value must be positive (non-zero) integer, not %r." msgstr "Arvon täytyy olla positiivinen (muu kuin nolla) kokonaisluku eikä %r." -#: src/registry.py:613 +#: src/registry.py:618 msgid "Value must be a floating-point number, not %r." msgstr "Arvon täytyy olla likuluku, ei %r." -#: src/registry.py:629 +#: src/registry.py:634 msgid "Value must be a floating-point number greater than zero, not %r." msgstr "Arvon täytyy olla nollaa suurempi liukuluku, ei %r." -#: src/registry.py:640 +#: src/registry.py:645 #, fuzzy msgid "Value must be a floating point number in the range [0, 1], not %r." msgstr "Arvon täytyy olla liukuluku alueella [0,1] eikä %r." -#: src/registry.py:655 +#: src/registry.py:660 #, fuzzy msgid "Value should be a valid Python string, not %r." msgstr "Arvon täytyy olla kelvollinen Python merkkijono eikä %r." -#: src/registry.py:693 +#: src/registry.py:698 msgid "Valid values include %L." msgstr "Kelvolliset arvot ovat %L." -#: src/registry.py:695 +#: src/registry.py:700 msgid "Valid values include %L, not %%r." msgstr "Kelvolliset arvot ovat %L, eikä %%r." -#: src/registry.py:769 +#: src/registry.py:777 msgid "Value must be a valid regular expression, not %r." msgstr "Arvon täytyy olla kelvollinen säännöllinen lauseke, eikä %r." -#: src/utils/gen.py:113 +#: src/utils/gen.py:115 msgid "year" msgstr "vuosi" -#: src/utils/gen.py:116 +#: src/utils/gen.py:118 msgid "week" msgstr "viikko" -#: src/utils/gen.py:119 +#: src/utils/gen.py:121 msgid "day" msgstr "päivä" -#: src/utils/gen.py:122 +#: src/utils/gen.py:124 msgid "hour" msgstr "tunti" -#: src/utils/gen.py:126 +#: src/utils/gen.py:128 msgid "minute" msgstr "minuutti" -#: src/utils/gen.py:129 +#: src/utils/gen.py:131 msgid "second" msgstr "sekunti" -#: src/utils/gen.py:138 +#: src/utils/gen.py:140 #, fuzzy msgid "%s ago" msgstr "%s sitten" -#: src/utils/str.py:349 +#: src/utils/str.py:375 msgid "and" msgstr "ja" diff --git a/locales/fr.po b/locales/fr.po index 8cf536aec..680f6724b 100644 --- a/locales/fr.po +++ b/locales/fr.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Limnoria\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2019-11-24 12:41+0100\n" "Last-Translator: \n" "Language-Team: French <kde-i18n-doc@kde.org>\n" @@ -22,7 +22,7 @@ msgstr "Erreur : " msgid "Error: I tried to send you an empty message." msgstr "Erreur : J'ai essayé de vous envoyer un message vide." -#: src/callbacks.py:361 +#: src/callbacks.py:365 msgid "" "Missing \"%s\". You may want to quote your arguments with double quotes in " "order to prevent extra brackets from being evaluated as nested commands." @@ -31,7 +31,7 @@ msgstr "" "pour éviter que les crochets ne soient évalués comme étant des commandes " "imbriquées." -#: src/callbacks.py:390 +#: src/callbacks.py:394 msgid "" "\"|\" with nothing preceding. I obviously can't do a pipe with nothing " "before the |." @@ -39,7 +39,7 @@ msgstr "" "\"|\" avec rien ne le précédant. Je ne peux évidtemment pas faire un pipe " "avec rien avant le |." -#: src/callbacks.py:398 +#: src/callbacks.py:402 msgid "" "Spurious \"%s\". You may want to quote your arguments with double quotes in " "order to prevent extra brackets from being evaluated as nested commands." @@ -48,7 +48,7 @@ msgstr "" "éviter que les crochets ne soient évalués comme étant des commandes " "imbriquées." -#: src/callbacks.py:407 +#: src/callbacks.py:411 msgid "" "\"|\" with nothing following. I obviously can't do a pipe with nothing " "after the |." @@ -56,33 +56,33 @@ msgstr "" "\"|\" avec rien ne le suivant. Je ne peux évidtemment pas faire un pipe avec " "rien après le |." -#: src/callbacks.py:623 +#: src/callbacks.py:630 msgid "%s is not a valid %s." msgstr "%s n'est pas un(e) %s valide." -#: src/callbacks.py:625 +#: src/callbacks.py:632 msgid "That's not a valid %s." msgstr "Ce n'est pas un(e) %s valide." -#: src/callbacks.py:794 +#: src/callbacks.py:812 msgid "(XX more messages)" msgstr "(XX messages supplémentaires)" -#: src/callbacks.py:849 +#: src/callbacks.py:873 msgid "more message" msgstr "message supplémentaire" -#: src/callbacks.py:851 +#: src/callbacks.py:875 msgid "more messages" msgstr "messages supplémentaires" -#: src/callbacks.py:986 +#: src/callbacks.py:1011 msgid "You've attempted more nesting than is currently allowed on this bot." msgstr "" "Vous avez essayé de faire plus d'imbrication que ce qui est actuellement " "autorisé sur ce bot." -#: src/callbacks.py:1171 +#: src/callbacks.py:1198 msgid "" "The command %q is available in the %L plugins. Please specify the plugin " "whose command you wish to call by using its name as a command before %q." @@ -91,7 +91,7 @@ msgstr "" "quel plugin se trouve la commande que vous souhaitez appeler, en ajoutant le " "nom du plugin avant %q." -#: src/callbacks.py:1356 +#: src/callbacks.py:1383 msgid "" "Determines what commands are currently disabled. Such\n" " commands will not appear in command lists, etc. They will appear not " @@ -102,163 +102,163 @@ msgstr "" "commandes n'apparaitront pas dans la liste des commandes, etc. Ça sera comme " "si elles n'existaient pas." -#: src/callbacks.py:1595 +#: src/callbacks.py:1622 msgid "Invalid arguments for %s." msgstr "Argument invalide pour %s" -#: src/callbacks.py:1627 +#: src/callbacks.py:1654 msgid "The %q command has no help." msgstr "La commande %q n'a pas d'aide." -#: src/commands.py:284 +#: src/commands.py:291 msgid "integer" msgstr "entier" -#: src/commands.py:295 +#: src/commands.py:302 msgid "non-integer value" msgstr "valeur non entière" -#: src/commands.py:306 +#: src/commands.py:313 msgid "floating point number" msgstr "nombre à virgule flottante" -#: src/commands.py:315 +#: src/commands.py:322 msgid "positive integer" msgstr "entier positif" -#: src/commands.py:319 +#: src/commands.py:326 msgid "non-negative integer" msgstr "entier non négatif" -#: src/commands.py:322 +#: src/commands.py:329 msgid "index" msgstr "index" -#: src/commands.py:347 +#: src/commands.py:354 msgid "number of seconds" msgstr "nombre de secondes" -#: src/commands.py:354 +#: src/commands.py:361 msgid "boolean" msgstr "booléen" -#: src/commands.py:368 src/commands.py:375 src/commands.py:384 -#: src/commands.py:391 src/commands.py:400 +#: src/commands.py:375 src/commands.py:382 src/commands.py:391 +#: src/commands.py:398 src/commands.py:407 msgid "do that" msgstr "faire ça" -#: src/commands.py:371 src/commands.py:378 src/commands.py:387 -#: src/commands.py:394 src/commands.py:403 +#: src/commands.py:378 src/commands.py:385 src/commands.py:394 +#: src/commands.py:401 src/commands.py:410 msgid "I'm not even in %s." msgstr "Je ne suis pas sur %s." -#: src/commands.py:373 +#: src/commands.py:380 msgid "I need to be voiced to %s." msgstr "Je doit être voicé pour %s" -#: src/commands.py:381 +#: src/commands.py:388 msgid "I need to be at least voiced to %s." msgstr "Je doit être au moins voice pour %s" -#: src/commands.py:389 +#: src/commands.py:396 msgid "I need to be halfopped to %s." msgstr "Je doit être halfop pour %s" -#: src/commands.py:397 +#: src/commands.py:404 msgid "I need to be at least halfopped to %s." msgstr "Je doit être au moins halfop pour %s" -#: src/commands.py:405 +#: src/commands.py:412 msgid "I need to be opped to %s." msgstr "Je doit être opé pour %s" -#: src/commands.py:411 src/commands.py:569 +#: src/commands.py:418 src/commands.py:585 msgid "channel" msgstr "canal" -#: src/commands.py:424 +#: src/commands.py:431 msgid "nick or hostmask" msgstr "nick ou masque d'hôte" -#: src/commands.py:478 +#: src/commands.py:492 msgid "regular expression" msgstr "expression régulière" -#: src/commands.py:489 src/commands.py:493 +#: src/commands.py:503 src/commands.py:507 msgid "nick" msgstr "nick" -#: src/commands.py:490 +#: src/commands.py:504 msgid "That nick is too long for this server." msgstr "Ce nick est trop long pour ce serveur." -#: src/commands.py:501 +#: src/commands.py:515 msgid "I haven't seen %s." msgstr "Je n'ai pas vu %s." -#: src/commands.py:548 src/commands.py:567 +#: src/commands.py:564 src/commands.py:583 msgid "I'm not in %s." msgstr "Je ne suis pas sur %s" -#: src/commands.py:552 +#: src/commands.py:568 msgid "This command may only be given in a channel that I am in." msgstr "" "Cette commande ne peut être donnée que sur un canal sur lequel je suis." -#: src/commands.py:565 +#: src/commands.py:581 msgid "You must be in %s." msgstr "Vous devez être sur %s" -#: src/commands.py:576 +#: src/commands.py:592 msgid "%s is not in %s." msgstr "%s n'est pas sur %s" -#: src/commands.py:624 +#: src/commands.py:640 msgid "You must not give the empty string as an argument." msgstr "Vous ne pouvez me donner une chaine vide comme argument." -#: src/commands.py:632 +#: src/commands.py:648 msgid "You must not give a string containing spaces as an argument." msgstr "" "Vous ne pouvez me donner une chaine contenant des espaces comme argument." -#: src/commands.py:642 +#: src/commands.py:658 msgid "This message must be sent in a channel." msgstr "Ce message doit être envoyé sur un canal." -#: src/commands.py:674 src/commands.py:681 +#: src/commands.py:690 src/commands.py:697 msgid "url" msgstr "url" -#: src/commands.py:687 +#: src/commands.py:703 msgid "IRI" msgstr "" -#: src/commands.py:693 +#: src/commands.py:709 msgid "email" msgstr "courriel" -#: src/commands.py:703 src/commands.py:711 +#: src/commands.py:719 src/commands.py:727 msgid "http url" msgstr "URL HTTP" -#: src/commands.py:718 +#: src/commands.py:734 msgid "command name" msgstr "nom de commande" -#: src/commands.py:726 +#: src/commands.py:742 msgid "ip" msgstr "IP" -#: src/commands.py:732 +#: src/commands.py:748 msgid "letter" msgstr "lettre" -#: src/commands.py:764 +#: src/commands.py:780 msgid "plugin" msgstr "plugin" -#: src/commands.py:772 +#: src/commands.py:788 msgid "irc color" msgstr "couleur IRC" @@ -432,7 +432,29 @@ msgstr "" "connectera. Si cette variable de configuration est vide, le nick par défaut " "sera pris dans supybot.protocols.irc.umodes." -#: src/conf.py:424 +#: src/conf.py:423 +#, fuzzy +msgid "" +"Determines what vhost the bot will bind to before\n" +" connecting a server (IRC, HTTP, ...) via IPv4. If empty, defaults " +"to\n" +" supybot.protocols.irc.vhost" +msgstr "" +"Détermine quelle vhost le bot bindera avant de se connecter à un serveur " +"(IRC, HTTP, ...) par IPv4." + +#: src/conf.py:427 +#, fuzzy +msgid "" +"Determines what vhost the bot will bind to before\n" +" connecting a server (IRC, HTTP, ...) via IPv6. If empty, defaults " +"to\n" +" supybot.protocols.irc.vhostv6" +msgstr "" +"Détermine quelle vhost le bot bindera avant de se connecter à un serveur " +"(IRC, HTTP, ...) par IPv6." + +#: src/conf.py:433 #, fuzzy msgid "" "Determines what SASL username will be used on %s. This should\n" @@ -442,11 +464,11 @@ msgstr "" "nom du compte du bot. À cause de la façon dont SASL fonctionne, vous ne " "pouvez pas utiliser un nick groupé." -#: src/conf.py:427 +#: src/conf.py:436 msgid "Determines what SASL password will be used on %s." msgstr "Détermine quel mot de passe SASL sera utilisé sur %s." -#: src/conf.py:430 +#: src/conf.py:439 msgid "" "Determines what SASL ECDSA key (if any) will be used on %s.\n" " The public key must be registered with NickServ for SASL\n" @@ -457,14 +479,14 @@ msgstr "" "La clé publique doit être enregistrée avec NickServ avec SASL ECDSA-NIST256P-" "CHALLENGE pour qu'elle puisse être utilisée." -#: src/conf.py:435 +#: src/conf.py:444 #, fuzzy msgid "" "Determines what SASL mechanisms will be tried and in which order.\n" " " msgstr "Détermine quels mécanismes SASL seront utilisés et dans quel ordre." -#: src/conf.py:438 +#: src/conf.py:447 msgid "" "Determines whether the bot will abort the connection if the\n" " none of the enabled SASL mechanism succeeded." @@ -472,7 +494,7 @@ msgstr "" "Détermine si le bot doit terminer la connexion si aucun des mécanismes SASL " "activés ne fonctionne." -#: src/conf.py:441 +#: src/conf.py:450 #, fuzzy msgid "" "If not empty, determines the hostname:port of the socks proxy that\n" @@ -481,11 +503,11 @@ msgstr "" "Si non vide, détermine l'hôte du proxy socks qui sera utilisé pour se " "connecter à ce réseau." -#: src/conf.py:461 +#: src/conf.py:470 msgid "Determines how urls should be formatted." msgstr "Détermine comment les URLs seront formatées." -#: src/conf.py:469 +#: src/conf.py:478 msgid "" "Determines how timestamps\n" " printed for human reading should be formatted. Refer to the Python\n" @@ -497,16 +519,16 @@ msgstr "" "Référez-vous à la documentation Python sur le module time pour plus " "d'information sur les formats valides." -#: src/conf.py:484 +#: src/conf.py:493 msgid "" "Determines whether elapsed times will be given\n" " as \"1 day, 2 hours, 3 minutes, and 15 seconds\" or as \"1d 2h 3m 15s\"." msgstr "" "Détermine si un utilise des temps plus courts, c'est à dire par exemple " -"\"1d 2h 3m 15s\" au lieu de \"1 day, 2 hours, 3 minutes, and 15 seconds" -"\"." +"\"1d 2h 3m 15s\" au lieu de \"1 day, 2 hours, 3 minutes, and 15 " +"seconds\"." -#: src/conf.py:495 +#: src/conf.py:504 msgid "" "Maximum number of items in a list\n" " before the end is replaced with 'and others'. Set to 0 to always\n" @@ -516,11 +538,11 @@ msgstr "" "remplacée par 'et autres'. Définir à 0 pour toujours afficher la liste " "complète." -#: src/conf.py:512 +#: src/conf.py:521 msgid "other" msgstr "autre" -#: src/conf.py:517 +#: src/conf.py:526 msgid "" "Determines the absolute maximum length of\n" " the bot's reply -- no reply will be passed through the bot with a " @@ -530,7 +552,7 @@ msgstr "" "Détermine la longueur maximum absolue des réponses du bot ; le bot " "n'enverra aucune réponse qui dépassera ce nombre." -#: src/conf.py:522 +#: src/conf.py:531 msgid "" "Determines whether the bot will break up long\n" " messages into chunks and allow users to use the 'more' command to get " @@ -541,7 +563,7 @@ msgstr "" "aux utilisateurs et utilisatrices d'utiliser la commande 'more' pour " "récupérer les morceaux restants." -#: src/conf.py:527 +#: src/conf.py:536 msgid "" "Determines what the maximum number of\n" " chunks (for use with the 'more' command) will be." @@ -549,7 +571,7 @@ msgstr "" "Détermine quel est le nombre maximum de morceaux (que l'on récupère avec " "la commande 'more')." -#: src/conf.py:531 +#: src/conf.py:540 msgid "" "Determines how long individual chunks\n" " will be. If set to 0, uses our super-tweaked,\n" @@ -559,7 +581,7 @@ msgstr "" "variable à 0 permet d'utiliser notre super algorithme pour optimiser " "cette longueur en fonction des paramètres du serveur." -#: src/conf.py:536 +#: src/conf.py:545 msgid "" "Determines how many mores will be sent\n" " instantly (i.e., without the use of the more command, immediately when\n" @@ -572,7 +594,21 @@ msgstr "" "trice ait envoyé la commande. Par défaut, cela vaut 1, ce qui signifie " "que seul le premier morceau est envoyé. Avant l'appel de 'more'." -#: src/conf.py:542 +#: src/conf.py:552 +#, fuzzy +msgid "" +"Determines how many mores will be sent\n" +" instantly (i.e., without the use of the more command, immediately when\n" +" they are formed) when sending messages in private. Defaults to 0, which " +"means\n" +" that it defaults to the generic supybot.reply.mores.instant value." +msgstr "" +"Détermine combien de 'more's sont envoyés immédiatement (c'est à dire, " +"avant l'utilisation de la commande 'more', juste après que l'utilisateur/" +"trice ait envoyé la commande. Par défaut, cela vaut 1, ce qui signifie " +"que seul le premier morceau est envoyé. Avant l'appel de 'more'." + +#: src/conf.py:558 msgid "" "Determines whether the bot will send\n" " multi-message replies in a single message. This defaults to True \n" @@ -584,7 +620,7 @@ msgstr "" "flooder. Si cela vaut False, alors le bot enverra les réponses multi-" "messages sur plusieurs lignes." -#: src/conf.py:548 +#: src/conf.py:564 msgid "" "Determines whether the bot will reply with an\n" " error message when it is addressed but not given a valid command. If " @@ -597,7 +633,7 @@ msgstr "" "valeur est à False, le bot restera silencieux, du moment qu'aucun plugin " "ne modifie le comportement normal." -#: src/conf.py:555 +#: src/conf.py:571 msgid "" "Determines whether error messages that result\n" " from bugs in the bot will show a detailed error message (the uncaught\n" @@ -607,7 +643,7 @@ msgstr "" "un message d'erreur (l'exception non interceptée) ou si un message " "d'erreur générique est utilisé." -#: src/conf.py:559 +#: src/conf.py:575 msgid "" "Determines whether the bot will send error\n" " messages to users in private. You might want to do this in order to " @@ -620,7 +656,7 @@ msgstr "" "Vous pouvez utiliser ceci en combinaison avec supybot.reply.error." "withNotice." -#: src/conf.py:564 +#: src/conf.py:580 #, fuzzy msgid "" "Determines whether the bot will send error\n" @@ -639,7 +675,7 @@ msgstr "" "errorInPrivate, pour que les erreurs en privé n'ouvrent pas une nouvelle " "fenêtre de requête, sur la plupart des clients." -#: src/conf.py:571 +#: src/conf.py:587 msgid "" "Determines whether the bot will *not* provide\n" " details in the error\n" @@ -656,7 +692,7 @@ msgstr "" "utilisateurs/trices comprennent le système sous-jacent de capacités pour " "lancer certaines commandes." -#: src/conf.py:579 +#: src/conf.py:595 msgid "" "Determines whether the bot will reply\n" " privately when replying in a channel, rather than replying to the " @@ -666,7 +702,7 @@ msgstr "" "Détermine si le bot répondra en privé, plutôt que de répondre sur le " "canal." -#: src/conf.py:584 +#: src/conf.py:600 msgid "" "Determines whether the bot will reply with a\n" " notice when replying in a channel, rather than replying with a privmsg " @@ -676,7 +712,7 @@ msgstr "" "Détermine si le bot répondra par notice sur un canal plutôt que par " "privmsg comme d'habitude" -#: src/conf.py:590 +#: src/conf.py:606 msgid "" "Determines whether the bot will reply with a\n" " notice when it is sending a private message, in order not to open a /" @@ -686,7 +722,7 @@ msgstr "" "Détermine si le bot répondra avec une notice lorsque l'on s'adresse à lui " "en privé, pour éviter de devoir ouvrir une fenêtre /query." -#: src/conf.py:595 +#: src/conf.py:611 msgid "" "Determines whether the bot will always prefix\n" " the user's nick to its reply to that user's command." @@ -694,7 +730,7 @@ msgstr "" "Détermine si le bot préfixera toujours ses réponses par le nick de " "l’utilisateur ayant invoqué la commande." -#: src/conf.py:599 +#: src/conf.py:615 msgid "" "Determines whether the bot should attempt to\n" " reply to all messages even if they don't address it (either via its " @@ -708,7 +744,7 @@ msgstr "" "Si vous définissez ceci à True, vous voudrez probablement mettre supybot." "reply.whenNotCommand à False." -#: src/conf.py:605 +#: src/conf.py:621 msgid "" "Determines whether the bot will allow you to\n" " send channel-related commands outside of that channel. Sometimes " @@ -723,7 +759,7 @@ msgstr "" "comportement du canal, alors que la commande est envoyée en-dehors du " "canal." -#: src/conf.py:612 +#: src/conf.py:628 msgid "" "Determines whether the bot will unidentify\n" " someone when that person changes their nick. Setting this to True\n" @@ -735,7 +771,7 @@ msgstr "" "changements. Il est par défaut à False pour améliorer légèrement la " "sécurité." -#: src/conf.py:618 +#: src/conf.py:634 msgid "" "Determines whether the bot will always join a\n" " channel when it's invited. If this value is False, the bot will only " @@ -749,7 +785,7 @@ msgstr "" "personne l'invitant a la capacité 'admin' (ou si il lui a directement " "envoyé la commande Admin join)" -#: src/conf.py:624 +#: src/conf.py:640 msgid "" "Supybot normally replies with the full help\n" " whenever a user misuses a command. If this value is set to True, the " @@ -762,7 +798,7 @@ msgstr "" "qu'avec la syntaxe de la commande (la première ligne de l'aide), plutôt " "que par toute l'aide." -#: src/conf.py:639 +#: src/conf.py:655 msgid "" "Determines what prefix characters the bot will\n" " reply to. A prefix character is a single character that the bot will " @@ -782,7 +818,7 @@ msgstr "" "interprété individuellement ; vous pouvez avoir plusieurs caractères " "simultanément, et un seul d'entre eux suffira pour s'adresser au bot." -#: src/conf.py:648 +#: src/conf.py:664 msgid "" "Determines what strings the\n" " bot will reply to when they are at the beginning of the message. " @@ -798,7 +834,7 @@ msgstr "" "chaînes séparées par des espaces, vous pouvez donc par exemple mettre " "'@@ ??' et le bot répondra lorsqu'un message est préfixé par @@ ou par ??." -#: src/conf.py:655 +#: src/conf.py:671 msgid "" "Determines whether the bot will reply when\n" " people address it by its nick, rather than with a prefix character." @@ -806,7 +842,7 @@ msgstr "" "Détermine si le bot will répondra lorsque des gens s'adresseront à lui " "par si nick, au lieu de ne répondre qu'aux caractères de préfixe." -#: src/conf.py:658 +#: src/conf.py:674 msgid "" "Determines whether the bot will reply when\n" " people address it by its nick at the end of the message, rather than at\n" @@ -815,7 +851,7 @@ msgstr "" "Détermine si le bot répondra lorsque les personnes mettent son nick à la " "fin d'un message, plutôt qu'au début." -#: src/conf.py:662 +#: src/conf.py:678 msgid "" "Determines what extra nicks\n" " the bot will always respond to when addressed by, even if its current " @@ -825,11 +861,11 @@ msgstr "" "Détermine à quels nicks supplémentaires le bot répondra lorsqu'on " "s'adressera à lui par ceux-ci, même si le nick est actuellement utilisé." -#: src/conf.py:672 +#: src/conf.py:688 msgid "The operation succeeded." msgstr "Opération effectuée avec succès." -#: src/conf.py:673 +#: src/conf.py:689 msgid "" "Determines what message the bot replies with when a command succeeded.\n" " If this configuration variable is empty, no success message will be\n" @@ -839,25 +875,28 @@ msgstr "" "effectuée avec succès. Si cette variable de configuration est vide, aucun " "message de succès ne sera envoyé." -#: src/conf.py:678 +#: src/conf.py:694 +#, fuzzy msgid "" "An error has occurred and has been logged.\n" -" Please contact this bot's administrator for more information." +" Please contact this bot's administrator for more information.\n" +" If this configuration variable is empty, no generic error message will " +"be sent." msgstr "" "Une erreur est survenue et a été logguée. Contactez l'administrateur du " "bot pour plus d'informations." -#: src/conf.py:679 +#: src/conf.py:697 +#, fuzzy msgid "" -"\n" -" Determines what error message the bot gives when it wants to be\n" +"Determines what error message the bot gives when it wants to be\n" " ambiguous." msgstr "" "\n" "Détermine quel message d'erreur le bot donnera, quand il décidera de ne " "pas être plus précis." -#: src/conf.py:684 +#: src/conf.py:701 msgid "" "An error has occurred and has been logged.\n" " Check the logs for more information." @@ -865,7 +904,7 @@ msgstr "" "Une erreur est survenue et a été logguée. R les logs pour plus " "d'informations." -#: src/conf.py:685 +#: src/conf.py:702 msgid "" "Determines what error\n" " message the bot gives to the owner when it wants to be ambiguous." @@ -873,7 +912,7 @@ msgstr "" "Détermine quel message d'erreur le bot donnera au propriétaire lorsqu'il " "veut être ambigu." -#: src/conf.py:689 +#: src/conf.py:706 msgid "" "Your hostmask doesn't match or your password\n" " is wrong." @@ -881,7 +920,7 @@ msgstr "" "Votre masque d'hôte ne correspond pas, ou votre mot de passe est " "incorrect." -#: src/conf.py:690 +#: src/conf.py:707 msgid "" "Determines what message the bot replies with when\n" " someone tries to use a command that requires being identified or having " @@ -891,7 +930,7 @@ msgstr "" "Détermine quel message le bot répondra lorsque quelqu'un utiliser une " "commande qui nécessite d'être identifié." -#: src/conf.py:696 +#: src/conf.py:713 msgid "" "I can't find %s in my user\n" " database. If you didn't give a user name, then I might not know what " @@ -903,7 +942,7 @@ msgstr "" "utilisateur, et vous devrez vous identifier avant que cette commande " "fonctionne." -#: src/conf.py:699 +#: src/conf.py:716 msgid "" "Determines what error message the bot replies with when someone tries\n" " to accessing some information on a user the bot doesn't know about." @@ -911,7 +950,7 @@ msgstr "" "Détermine quel message d'erreur est envoyé lorsque quelqu'un essaye " "d'accéder à une information sur une personne que le bot ne connait pas." -#: src/conf.py:703 +#: src/conf.py:720 msgid "" "You must be registered to use this command.\n" " If you are already registered, you must either identify (using the " @@ -924,7 +963,7 @@ msgstr "" "'identify') ou ajouter un masque d'hôte correspondant à votre masque " "d'hôte courant (en utilisant la commande 'hostmask add')." -#: src/conf.py:706 +#: src/conf.py:723 msgid "" "Determines what error message the bot\n" " replies with when someone tries to do something that requires them to " @@ -935,7 +974,7 @@ msgstr "" "de faire quelque chose qui nécessit d'être enregistré, alors qu'il n'est " "pas reconnu." -#: src/conf.py:711 +#: src/conf.py:728 msgid "" "You don't have the %s capability. If you\n" " think that you should have this capability, be sure that you are " @@ -947,7 +986,7 @@ msgstr "" "vous d'être identifié(e) et réessayez. La commande 'whoami' vous dit si " "vous êtes identifié(e)." -#: src/conf.py:714 +#: src/conf.py:731 msgid "" "Determines what error message is given when the bot\n" " is telling someone they aren't cool enough to use the command they tried " @@ -957,7 +996,7 @@ msgstr "" "Détermine quel message d'erreur est donné lorsqu'une personne tente " "d'utiliser une commande à laquelle il n'y pas accès." -#: src/conf.py:719 +#: src/conf.py:736 msgid "" "You're missing some capability you need.\n" " This could be because you actually possess the anti-capability for the\n" @@ -979,7 +1018,7 @@ msgstr "" "défaut (elles doivent être autorisées une par une par un administrateur). " "En clair, vous ne pouvez pas le faire." -#: src/conf.py:727 +#: src/conf.py:744 msgid "" "Determines what generic error message is given when the bot is telling\n" " someone that they aren't cool enough to use the command they tried to " @@ -993,13 +1032,13 @@ msgstr "" "code appelant errorNoCapability ne fourni pas d'information explicite " "sur la raison de ce refus." -#: src/conf.py:733 +#: src/conf.py:750 msgid "" "That operation cannot be done in a\n" " channel." msgstr "Cette opération ne peut être faite sur un canal." -#: src/conf.py:734 +#: src/conf.py:751 msgid "" "Determines what error messages the bot sends to people\n" " who try to do things in a channel that really should be done in\n" @@ -1009,7 +1048,7 @@ msgstr "" "de faire quelque chose sur un canal, alors que cela doit être fait en " "privé." -#: src/conf.py:739 +#: src/conf.py:756 msgid "" "This may be a bug. If you think it is,\n" " please file a bug report at\n" @@ -1018,7 +1057,7 @@ msgstr "" "Ceci semble être un bug. Si vous pensez que c'en est un, veillez à " "envoyer un rapport de bug sur <http://github.com/progval/Limnoria/issues>." -#: src/conf.py:742 +#: src/conf.py:759 msgid "" "Determines what message the bot sends when it thinks you've\n" " encountered a bug that the developers don't know about." @@ -1026,11 +1065,11 @@ msgstr "" "Détermine quel message le bot envoie quand il pense que l'on a rencontré " "un bug que les développeurs ne connaissent pas." -#: src/conf.py:749 +#: src/conf.py:766 msgid "$Type #$id: $text (added by $username at $at)" msgstr "" -#: src/conf.py:750 +#: src/conf.py:767 msgid "" "Format used by generic database plugins (Lart, Dunno, Prase, Success,\n" " Quote, ...) to show an entry. You can use the following variables:\n" @@ -1038,7 +1077,7 @@ msgid "" " $at (creation time), $userid/$username/$nick (author)." msgstr "" -#: src/conf.py:760 +#: src/conf.py:777 msgid "" "A floating point number of seconds to throttle\n" " snarfed URLs, in order to prevent loops between two bots snarfing the " @@ -1049,7 +1088,7 @@ msgstr "" "attendre avant de 'snarfer' la même URL, dans le but d'éviter que deux " "bots entrent ainsi en boucle infinie." -#: src/conf.py:765 +#: src/conf.py:782 msgid "" "Determines the number of seconds\n" " between running the upkeep function that flushes (commits) open " @@ -1061,7 +1100,7 @@ msgstr "" "upkeep, qui rafraichit les bases de données ouvertes, vide le cache, et " "enregistre des statistiques utiles pour le débogage." -#: src/conf.py:771 +#: src/conf.py:788 msgid "" "Determines whether the bot will periodically\n" " flush data and configuration files to disk. Generally, the only time\n" @@ -1081,7 +1120,7 @@ msgstr "" "Si vous voulez rendre ce changement définitif, vous devez éditer le " "registre vous-même." -#: src/conf.py:797 +#: src/conf.py:814 msgid "" "Determines what characters are valid for quoting\n" " arguments to commands in order to prevent them from being tokenized.\n" @@ -1090,7 +1129,7 @@ msgstr "" "Détermine quels caractères sont valides pour citer des arguments à des " "commandes, pour leur éviter d'être tokénisés." -#: src/conf.py:804 +#: src/conf.py:821 msgid "" "Determines whether the bot will allow nested\n" " commands, which rule. You definitely should keep this on." @@ -1099,7 +1138,7 @@ msgstr "" "bot, ce qui est une fonctionnalité génial. Vous devriez vraiment garder " "ceci actif." -#: src/conf.py:807 +#: src/conf.py:824 msgid "" "Determines what the maximum number of\n" " nested commands will be; users will receive an error if they attempt\n" @@ -1108,7 +1147,7 @@ msgstr "" "Détermine le nombre maximum de commandes imbriquées ; les utilisateurs " "recevront une erreur si ils ou elles tentent d'en mettre plus." -#: src/conf.py:816 +#: src/conf.py:833 msgid "" "Supybot allows you to specify what brackets\n" " are used for your nested commands. Valid sets of brackets include\n" @@ -1124,7 +1163,7 @@ msgstr "" "peuvent apparaître dans un nick. Si cette chaîne est vide, les commandes " "imbriquées ne seront pas autorisées sur ce canal." -#: src/conf.py:823 +#: src/conf.py:840 msgid "" "Supybot allows nested commands. Enabling this\n" " option will allow nested commands with a syntax similar to UNIX pipes, " @@ -1135,7 +1174,7 @@ msgstr "" "aux commandes imbriquées d'utiliser une syntaxe similaire aux 'pipes' " "UNIX, par exemple : 'bot: foo | bar'." -#: src/conf.py:828 +#: src/conf.py:845 msgid "" "Determines what commands have default\n" " plugins set, and which plugins are set to be the default for each of " @@ -1145,7 +1184,7 @@ msgstr "" "Détermine, lorsque l'on appelle une commande appartenant à plusieurs " "plugins, lequel sera choisi par défaut pour chacune de ces commandes." -#: src/conf.py:834 +#: src/conf.py:851 msgid "" "Determines what plugins automatically get precedence over all\n" " other plugins when selecting a default plugin for a command. By\n" @@ -1162,7 +1201,7 @@ msgstr "" "que vous faites, sachez que les noms de plugins sont sensibles à la " "classe." -#: src/conf.py:844 +#: src/conf.py:861 msgid "" "Allows this bot's owner user to use commands\n" " that grants them shell access. This config variable exists in case you " @@ -1181,13 +1220,13 @@ msgstr "" "plugins et commandes qui peuvent être utilisées pour indirectement gagner un " "accès shell." -#: src/conf.py:859 +#: src/conf.py:876 msgid "" "Determines the interval used for\n" " the history storage." msgstr "Détermine l’intervalle utilisé pour le stockage de l’historique." -#: src/conf.py:862 +#: src/conf.py:879 msgid "" "Determines whether the bot will defend itself\n" " against command-flooding." @@ -1195,7 +1234,7 @@ msgstr "" "Détermine si le bot se défendra contre les attaques par flood de " "commandes." -#: src/conf.py:865 +#: src/conf.py:882 msgid "" "Determines how many commands users are\n" " allowed per minute. If a user sends more than this many commands in " @@ -1207,7 +1246,7 @@ msgstr "" "une minute. Si une personne dépasse cette limite, elle sera ignoré " "supybot.abuse.flood.command.punishment secondes." -#: src/conf.py:870 +#: src/conf.py:887 msgid "" "Determines how many seconds the bot\n" " will ignore users who flood it with commands." @@ -1215,7 +1254,7 @@ msgstr "" "Détermine combien de secondes le bot ignorera les personnes qui le " "floodent de commandes." -#: src/conf.py:873 +#: src/conf.py:890 msgid "" "Determines whether the bot will notify people\n" " that they're being ignored for command flooding." @@ -1223,14 +1262,14 @@ msgstr "" "Détermine si le bot notifiera les personnes lorsqu'elles se font ignorer " "pour flood de commande." -#: src/conf.py:877 +#: src/conf.py:894 msgid "" "Determines whether the bot will defend itself\n" " against invalid command-flooding." msgstr "" "Détermine si le bot se défendra contre le flood de commandes invalides." -#: src/conf.py:880 +#: src/conf.py:897 msgid "" "Determines how many invalid commands users\n" " are allowed per minute. If a user sends more than this many invalid\n" @@ -1249,7 +1288,7 @@ msgstr "" "personnes floodent avec des commandes invalides qu'avec des commandes " "valides." -#: src/conf.py:888 +#: src/conf.py:905 msgid "" "Determines how many seconds the bot\n" " will ignore users who flood it with invalid commands. Typically, this\n" @@ -1264,7 +1303,7 @@ msgstr "" "car il est plus probable que les personnes floodent avec des commandes " "invalides qu'avec des commandes valides." -#: src/conf.py:894 +#: src/conf.py:911 msgid "" "Determines whether the bot will notify people\n" " that they're being ignored for invalid command flooding." @@ -1272,7 +1311,7 @@ msgstr "" "Détermine si le bot notifiera les personnes lorsqu'elles se font ignorer " "pour flood de commande." -#: src/conf.py:903 +#: src/conf.py:920 msgid "" "Determines the default length of time a\n" " driver should block waiting for input." @@ -1280,13 +1319,23 @@ msgstr "" "Détermine la durée par défaut durant laquelle un moteur réseau peut être " "bloquant, en attente de données entrantes." -#: src/conf.py:911 +#: src/conf.py:928 msgid "" "Determines what driver module the \n" " bot will use. Current, the only (and default) driver is Socket." msgstr "" -#: src/conf.py:915 +#: src/conf.py:932 +#, fuzzy +msgid "" +"Determines the minimum time the bot will\n" +" wait before attempting to reconnect to an IRC server." +msgstr "" +"Détermine le temps maximum durant lequel le bot attendra avant de se " +"reconnecter à un serveur IRC. Le bot peut, bien sûr, se reconnecter plus " +"tôt, si c'est possible." + +#: src/conf.py:936 msgid "" "Determines the maximum time the bot will\n" " wait before attempting to reconnect to an IRC server. The bot may, of\n" @@ -1296,17 +1345,17 @@ msgstr "" "reconnecter à un serveur IRC. Le bot peut, bien sûr, se reconnecter plus " "tôt, si c'est possible." -#: src/conf.py:967 +#: src/conf.py:988 msgid "" "Determines what directory configuration data is\n" " put into." msgstr "Détermine dans quel répertoire les données de configuration sont." -#: src/conf.py:970 +#: src/conf.py:991 msgid "Determines what directory data is put into." msgstr "Détermine dans quel répertoire les données sont." -#: src/conf.py:972 +#: src/conf.py:993 msgid "" "Determines what directory backup data is put\n" " into. Set it to /dev/null to disable backup (it is a special value,\n" @@ -1317,13 +1366,13 @@ msgstr "" "spéciale, donc elle marchera également sur Windows et les systèmes qui n'ont " "pas de /dev/null)." -#: src/conf.py:979 +#: src/conf.py:1000 msgid "" "Determines what directory temporary files\n" " are put into." msgstr "Détermine dans quel répertoire les fichiers temporaires sont." -#: src/conf.py:982 +#: src/conf.py:1003 msgid "" "Determines what directory files of the\n" " web server (templates, custom images, ...) are put into." @@ -1331,7 +1380,7 @@ msgstr "" "Détermine dans quel répertoire seront les fichiers du serveur web " "(templates, images personnalisées, ...)." -#: src/conf.py:995 +#: src/conf.py:1016 msgid "" "Determines what directories\n" " the bot will look for plugins in. Accepts a comma-separated list of\n" @@ -1349,7 +1398,7 @@ msgstr "" "directories.plugins [config supybot.directories.plugins], " "nouveauRepertoireDePlugins'." -#: src/conf.py:1003 +#: src/conf.py:1024 msgid "" "List of all plugins that were\n" " ever loaded. Currently has no effect whatsoever. You probably want to " @@ -1358,7 +1407,7 @@ msgid "" " instead of this." msgstr "" -#: src/conf.py:1008 +#: src/conf.py:1029 msgid "" "Determines whether the bot will always load\n" " important plugins (Admin, Channel, Config, Misc, Owner, and User)\n" @@ -1377,7 +1426,7 @@ msgstr "" "sont suffisement intelligents pour changer la valeur de cette variable de " "façon appropriée :)" -#: src/conf.py:1036 +#: src/conf.py:1063 msgid "" "Determines what databases are available for use. If this\n" " value is not configured (that is, if its value is empty) then sane " @@ -1388,7 +1437,7 @@ msgstr "" "n'est pas configurée (c'est à dire si sa valeur est vide), alors une " "manière par défaut saine sera utilisée." -#: src/conf.py:1042 +#: src/conf.py:1069 msgid "" "Determines what filename will be used\n" " for the users database. This file will go into the directory specified " @@ -1399,7 +1448,7 @@ msgstr "" "utilisateurs. Ce fichiers ira dans le répertoire spécifié par la variable " "supybot.directories.conf." -#: src/conf.py:1046 +#: src/conf.py:1073 msgid "" "Determines how long it takes identification to\n" " time out. If the value is less than or equal to zero, identification " @@ -1410,7 +1459,7 @@ msgstr "" "Si cette valeur est inférieure ou égale à zéro, l'identification " "n'expirera jamais." -#: src/conf.py:1050 +#: src/conf.py:1077 msgid "" "Determines whether the bot will allow users to\n" " unregister their users. This can wreak havoc with already-existing\n" @@ -1427,7 +1476,7 @@ msgstr "" "périls. (Notez également que ceci n'empêche pas le propriétaire du bot de " "se désenregistrer.)" -#: src/conf.py:1059 +#: src/conf.py:1086 msgid "" "Determines what filename will be used\n" " for the ignores database. This file will go into the directory " @@ -1438,7 +1487,7 @@ msgstr "" "données d'ignorance. Ce fichiers ira dans le répertoire spécifié par la " "variable supybot.directories.conf." -#: src/conf.py:1065 +#: src/conf.py:1092 msgid "" "Determines what filename will be used\n" " for the channels database. This file will go into the directory " @@ -1449,7 +1498,7 @@ msgstr "" "données de canaux. Ce fichiers ira dans le répertoire spécifié par la " "variable supybot.directories.conf." -#: src/conf.py:1071 +#: src/conf.py:1098 #, fuzzy msgid "" "Determines what filename will be used\n" @@ -1461,7 +1510,7 @@ msgstr "" "données d'ignorance. Ce fichiers ira dans le répertoire spécifié par la " "variable supybot.directories.conf." -#: src/conf.py:1103 +#: src/conf.py:1130 msgid "" "Determines whether the bot will require user\n" " registration to use 'add' commands in database-based Supybot\n" @@ -1471,7 +1520,7 @@ msgstr "" "pour utiliser les commandes 'add' des plugins Supybot basés sur des bases de " "données." -#: src/conf.py:1107 +#: src/conf.py:1134 msgid "" "Determines whether database-based plugins that\n" " can be channel-specific will be so. This can be overridden by " @@ -1493,7 +1542,7 @@ msgstr "" "appropriée si vous voulez partager les bases de données de certains " "canaux." -#: src/conf.py:1115 +#: src/conf.py:1142 msgid "" "Determines what channel global\n" " (non-channel-specific) databases will be considered a part of. This is\n" @@ -1518,7 +1567,7 @@ msgstr "" "changé cette variable ou vos plugins basés sur une base de données " "pourraient ne pas fonctionner." -#: src/conf.py:1124 +#: src/conf.py:1151 msgid "" "Determines whether another channel's global\n" " (non-channel-specific) databases will be allowed to link to this " @@ -1534,7 +1583,7 @@ msgstr "" "immédiatement après avoir changé cette variable ou vos plugins basés sur " "une base de données pourraient ne pas marcher pour votre canal." -#: src/conf.py:1142 +#: src/conf.py:1169 msgid "" "Determines\n" " whether CDB databases will be allowed as a database implementation." @@ -1542,7 +1591,7 @@ msgstr "" "Détermine si les bases de données CDB seront autorisées comme " "implémentation de base de données." -#: src/conf.py:1145 +#: src/conf.py:1172 msgid "" "Determines how often CDB databases will have\n" " their modifications flushed to disk. When the number of modified " @@ -1556,13 +1605,13 @@ msgstr "" "le nombre d'enregistrements non modifiés, la base de données sera " "entièrement enregistrée sur le disque." -#: src/conf.py:1237 +#: src/conf.py:1337 msgid "" "Determines what will be used as the\n" " default banmask style." msgstr "Détermine le style de masque de bannissement utilisé par défaut." -#: src/conf.py:1241 +#: src/conf.py:1341 msgid "" "Determines whether the bot will strictly\n" " follow the RFC; currently this only affects what strings are\n" @@ -1576,7 +1625,7 @@ msgstr "" "nick tel queservices@this.network.server, vous devriez défini ceci à " "False." -#: src/conf.py:1248 +#: src/conf.py:1348 msgid "" "Determines whether the bot will enable\n" " draft/experimental extensions of the IRC protocol. Setting this to True\n" @@ -1586,7 +1635,7 @@ msgid "" " doing." msgstr "" -#: src/conf.py:1255 +#: src/conf.py:1355 msgid "" "Determines what certificate file (if any) the bot\n" " will use connect with SSL sockets by default." @@ -1594,7 +1643,7 @@ msgstr "" "Détermine quel fichier de certificat (s’il y en a un) le bot utilisera par " "défaut pour se connecter par SSL." -#: src/conf.py:1259 +#: src/conf.py:1359 msgid "" "Determines what user modes the bot will request\n" " from the server when it first connects. Many people might choose +i; " @@ -1608,7 +1657,7 @@ msgstr "" "autorisent +x, ce qui indique aux services du réseau que l'on veut " "'cloaker' (masquer) notre masque d'hôte." -#: src/conf.py:1265 +#: src/conf.py:1365 msgid "" "Determines what vhost the bot will bind to before\n" " connecting a server (IRC, HTTP, ...) via IPv4." @@ -1616,7 +1665,7 @@ msgstr "" "Détermine quelle vhost le bot bindera avant de se connecter à un serveur " "(IRC, HTTP, ...) par IPv4." -#: src/conf.py:1269 +#: src/conf.py:1369 msgid "" "Determines what vhost the bot will bind to before\n" " connecting a server (IRC, HTTP, ...) via IPv6." @@ -1624,7 +1673,7 @@ msgstr "" "Détermine quelle vhost le bot bindera avant de se connecter à un serveur " "(IRC, HTTP, ...) par IPv6." -#: src/conf.py:1273 +#: src/conf.py:1373 msgid "" "Determines how many old messages the bot will\n" " keep around in its history. Changing this variable will not take " @@ -1635,7 +1684,7 @@ msgstr "" "Changer cette variable ne prend effet qu'après pour un réseau qu'après une " "reconnexion." -#: src/conf.py:1278 +#: src/conf.py:1378 msgid "" "A floating point number of seconds to throttle\n" " queued messages -- that is, messages will not be sent faster than once " @@ -1646,7 +1695,7 @@ msgstr "" "messages à envoyé ; c'est à dire que les messages ne seront pas envoyé " "plus vite que 1 par throttleTime secondes." -#: src/conf.py:1283 +#: src/conf.py:1383 msgid "" "Determines whether the bot will send PINGs to\n" " the server it's connected to in order to keep the connection alive and\n" @@ -1661,7 +1710,7 @@ msgstr "" "débogage : vous devriez toujours laisser cette option à True excepté si " "il vous arrive des trucs bizarres avec le serveur." -#: src/conf.py:1290 +#: src/conf.py:1390 msgid "" "Determines the number of seconds between sending\n" " pings to the server, if pings are being sent to the server." @@ -1669,7 +1718,7 @@ msgstr "" "Détermine le nombre de secondes entre deux envois de PING au serveur, si " "les pings sont envoyés au serveur." -#: src/conf.py:1295 +#: src/conf.py:1395 msgid "" "Determines whether the bot will refuse\n" " duplicated messages to be queued for delivery to the server. This is a\n" @@ -1684,7 +1733,7 @@ msgstr "" "plupart du temps, vous n'avez pas à vous en préoccuper, à moins que vous " "ne bidouilliez des plugins." -#: src/conf.py:1303 +#: src/conf.py:1403 msgid "" "Determines how many seconds must elapse between\n" " JOINs sent to the server." @@ -1692,7 +1741,7 @@ msgstr "" "Détermine combien de secondes doivent s'écouler entre deux envois de JOIN " "au serveur." -#: src/conf.py:1311 +#: src/conf.py:1411 msgid "" "Determines how many bytes the bot will\n" " 'peek' at when looking through a URL for a doctype or title or " @@ -1705,7 +1754,7 @@ msgstr "" "doctype, le title, ou autre chose dans une URL. Après avoir lu ces " "octets, le bot abandonnera sa recherche." -#: src/conf.py:1335 +#: src/conf.py:1435 msgid "" "Determines what HTTP proxy all HTTP requests should go\n" " through. The value should be of the form 'host:port'." @@ -1713,7 +1762,7 @@ msgstr "" "Détermine par quel proxy toutes les requêtes HTTP devraient passer. Cette " "valeur doit être de la forme 'host:port'." -#: src/conf.py:1375 +#: src/conf.py:1475 msgid "" "If set, the Accept-Language HTTP header will be set to this\n" " value for requests. Useful for overriding the auto-detected language " @@ -1721,13 +1770,13 @@ msgid "" " the server's location." msgstr "" -#: src/conf.py:1381 +#: src/conf.py:1481 msgid "" "If set, the User-Agent HTTP header will be set to a randomly\n" " selected value from this comma-separated list of strings for requests." msgstr "" -#: src/conf.py:1389 +#: src/conf.py:1489 #, fuzzy msgid "" "Determines whether server certificates\n" @@ -1742,7 +1791,7 @@ msgstr "" "certificat est signé par une autorité de certification reconnue, et termine " "la connexion si ce n'est pas le cas." -#: src/conf.py:1416 +#: src/conf.py:1516 msgid "" "If true, uses IPV6_V6ONLY to disable\n" " forwaring of IPv4 traffic to IPv6 sockets. On *nix, has the same\n" @@ -1752,7 +1801,7 @@ msgstr "" "des sockets IPv6. Sur *nix, cela a le même effet que de définir l'option " "noyau net.ipv6.bindv6only à 1" -#: src/conf.py:1420 +#: src/conf.py:1520 msgid "" "Space-separated list of IPv4 hosts the HTTP server\n" " will bind." @@ -1760,7 +1809,7 @@ msgstr "" "Liste d'adresses IPv4 séparées par des espaces que le serveur HTTP va « " "binder »." -#: src/conf.py:1423 +#: src/conf.py:1523 msgid "" "Space-separated list of IPv6 hosts the HTTP server will\n" " bind." @@ -1768,13 +1817,13 @@ msgstr "" "Liste d'adresses IPv6 séparées par des espaces que le serveur HTTP va « " "binder »." -#: src/conf.py:1426 +#: src/conf.py:1526 msgid "" "Determines what port the HTTP server will\n" " bind." msgstr "Détermine à quel port le serveur HTTP va s'attacher." -#: src/conf.py:1429 +#: src/conf.py:1529 msgid "" "Determines whether the server will stay\n" " alive if no plugin is using it. This also means that the server will\n" @@ -1783,13 +1832,13 @@ msgstr "" "Détermine si le serveur restera lancé si aucun plugin ne l'utilise. Cela " "signifie également que le serveur va démarrer même si il n'est pas utilisé." -#: src/conf.py:1433 +#: src/conf.py:1533 msgid "" "Determines the path of the file served as\n" " favicon to browsers." msgstr "Détermine le chemin du fichier servi comme favicon aux navigateurs." -#: src/conf.py:1436 +#: src/conf.py:1536 msgid "" "Determines the public URL of the server.\n" " By default it is http://<hostname>:<port>/, but you will want to change\n" @@ -1797,7 +1846,7 @@ msgid "" " the bot." msgstr "" -#: src/conf.py:1446 +#: src/conf.py:1546 msgid "" "Determines whether the bot will ignore\n" " unidentified users by default. Of course, that'll make it\n" @@ -1808,7 +1857,8 @@ msgstr "" "enregistrées. Bien sûr, cela rendra très difficile pour les utilisateurs/" "trices de s'enregistrer ou de s'identifier, mais c'est votre problème." -#: src/conf.py:1453 +#: src/conf.py:1553 +#, fuzzy msgid "" "A string that is the external IP of the bot. If this is the\n" " empty string, the bot will attempt to find out its IP dynamically " @@ -1816,7 +1866,7 @@ msgid "" " sometimes that doesn't work, hence this variable). This variable is not " "used\n" " by Limnoria and its built-in plugins: see supybot.protocols.irc.vhost /\n" -" supybot.protocols.irc.vhost6 to set the IRC bind host, and\n" +" supybot.protocols.irc.vhostv6 to set the IRC bind host, and\n" " supybot.servers.http.hosts4 / supybot.servers.http.hosts6 to set the " "HTTP\n" " server bind host." @@ -1828,7 +1878,7 @@ msgstr "" "supybot.protocols.irc.vhost6 pour définir le « bind host » pour IRC, et " "supybot.servers.http.hosts4 / supybot.servers.http.hosts6 pour HTTP." -#: src/conf.py:1472 +#: src/conf.py:1572 msgid "" "Determines what the default timeout for socket\n" " objects will be. This means that *all* sockets will timeout when this " @@ -1841,7 +1891,7 @@ msgstr "" "signifie que *toutes* les sockets expireront au bout de cette durée (à " "moins que l'auteur du code n'ait changé cette valeur)." -#: src/conf.py:1478 +#: src/conf.py:1578 msgid "" "Determines what file the bot should write its PID\n" " (Process ID) to, so you can kill it more easily. If it's left unset (as " @@ -1855,13 +1905,13 @@ msgstr "" "vide, le PID ne sera écrit dans aucun fichier. Un redémarrage est requis " "pour que cette variable prenne effet." -#: src/conf.py:1488 +#: src/conf.py:1588 msgid "" "Determines whether the bot will automatically\n" " thread all commands." msgstr "Détermine si le bot threadera automatiquement toutes les commandes." -#: src/conf.py:1491 +#: src/conf.py:1591 msgid "" "Determines whether the bot will automatically\n" " flush all flushers *very* often. Useful for debugging when you don't " @@ -1880,7 +1930,7 @@ msgstr "Index du serveur Web de Supybot" msgid "Here is a list of the plugins that have a Web interface:" msgstr "Voici une liste des plugins qui ont une interface Web :" -#: src/httpserver.py:245 +#: src/httpserver.py:352 msgid "" "\n" " This is a default response of the Supybot HTTP server. If you see this\n" @@ -1893,7 +1943,7 @@ msgstr "" "développer un plugin, et que vous n'avez ni outrepassé ce message ni " "défini un gestionnaire pour cette requête." -#: src/httpserver.py:291 +#: src/httpserver.py:398 msgid "" "\n" " I am a pretty clever IRC bot, but I suck at serving Web pages, " @@ -1909,64 +1959,64 @@ msgstr "" "déclencher une erreur 404 Not Found, and je ne suis pas entraîné à vous " "aider dans un tel cas." -#: src/httpserver.py:310 +#: src/httpserver.py:417 msgid "Request not handled." msgstr "Requête non gérée." -#: src/httpserver.py:317 +#: src/httpserver.py:424 msgid "No plugins available." msgstr "Aucun plugin disponible." -#: src/httpserver.py:335 src/httpserver.py:353 src/httpserver.py:391 +#: src/httpserver.py:442 src/httpserver.py:460 src/httpserver.py:498 msgid "Request not handled" msgstr "Requête non gérée." -#: src/httpserver.py:378 +#: src/httpserver.py:485 msgid "No favicon set." msgstr "Pas de favicon définie." -#: src/ircutils.py:573 +#: src/ircutils.py:592 msgid "is an op on %L" msgstr "est op sur %L" -#: src/ircutils.py:575 +#: src/ircutils.py:594 msgid "is a halfop on %L" msgstr "est halfop sur %L" -#: src/ircutils.py:577 +#: src/ircutils.py:596 msgid "is voiced on %L" msgstr "est voice sur %L" -#: src/ircutils.py:580 +#: src/ircutils.py:599 msgid "is also on %L" msgstr "est aussi sur %L" -#: src/ircutils.py:582 +#: src/ircutils.py:601 msgid "is on %L" msgstr "est sur %L" -#: src/ircutils.py:585 +#: src/ircutils.py:604 msgid "isn't on any publicly visible channels" msgstr "n'est sur aucun canal visible" -#: src/ircutils.py:593 src/ircutils.py:594 src/ircutils.py:600 +#: src/ircutils.py:612 src/ircutils.py:613 src/ircutils.py:619 msgid "<unknown>" msgstr "<inconnu>" -#: src/ircutils.py:602 +#: src/ircutils.py:621 msgid " %s is away: %s." msgstr "%s est absent/e : %s." -#: src/ircutils.py:607 +#: src/ircutils.py:626 msgid " identified" msgstr " identifié" -#: src/ircutils.py:613 +#: src/ircutils.py:632 msgid "%s (%s) has been%s on server %s since %s (idle for %s). %s %s.%s" msgstr "" "%s (%s) est% sur le serveur %s depuis %s (inactif/ive pendant %s). %s %s.%s" -#: src/ircutils.py:617 +#: src/ircutils.py:636 msgid "%s (%s) has been%s on server %s and disconnected on %s." msgstr "%s (%s) est% sur le serveur %s et s'est déconnect(e) à %s" @@ -1990,88 +2040,88 @@ msgstr "Entrez à nouveau le mot de passe : " msgid "Passwords don't match." msgstr "Les mots de passe ne correspondent pas." -#: src/registry.py:219 +#: src/registry.py:224 #, fuzzy msgid "%r is not a valid entry in %r" msgstr "%s n'est pas un(e) %s valide." -#: src/registry.py:568 +#: src/registry.py:573 msgid "Value must be either True or False (or On or Off), not %r." msgstr "La valeur doit être True ou False (ou On ou Off), pas %r." -#: src/registry.py:585 +#: src/registry.py:590 msgid "Value must be an integer, not %r." msgstr "La valeur doit être un entrier, pas %r." -#: src/registry.py:595 +#: src/registry.py:600 msgid "Value must be a non-negative integer, not %r." msgstr "La valeur doit être un entier non négatif, pas %r." -#: src/registry.py:604 +#: src/registry.py:609 msgid "Value must be positive (non-zero) integer, not %r." msgstr "La valeur doit être un entier positif (non nul), pas %r." -#: src/registry.py:613 +#: src/registry.py:618 msgid "Value must be a floating-point number, not %r." msgstr "La valeur doit être un nombre à virgule flottante, pas %r." -#: src/registry.py:629 +#: src/registry.py:634 msgid "Value must be a floating-point number greater than zero, not %r." msgstr "" "La valeur doit être un nombre à virgule flottante plus grand que zéro, pas " "%r." -#: src/registry.py:640 +#: src/registry.py:645 msgid "Value must be a floating point number in the range [0, 1], not %r." msgstr "" "La valeur doit être un nombre à virgule flottante compris entre 0 et 1, pas " "%r." -#: src/registry.py:655 +#: src/registry.py:660 msgid "Value should be a valid Python string, not %r." msgstr "La valeur doit être une chaîne Python valide, pas %r." -#: src/registry.py:693 +#: src/registry.py:698 msgid "Valid values include %L." msgstr "Les valeurs valides sont %L." -#: src/registry.py:695 +#: src/registry.py:700 msgid "Valid values include %L, not %%r." msgstr "Les valeurs valides sont %L, pas %%r." -#: src/registry.py:769 +#: src/registry.py:777 msgid "Value must be a valid regular expression, not %r." msgstr "La valeur doit être une expression rationnelle valide, pas %r." -#: src/utils/gen.py:113 +#: src/utils/gen.py:115 msgid "year" msgstr "année" -#: src/utils/gen.py:116 +#: src/utils/gen.py:118 msgid "week" msgstr "semaine" -#: src/utils/gen.py:119 +#: src/utils/gen.py:121 msgid "day" msgstr "jour" -#: src/utils/gen.py:122 +#: src/utils/gen.py:124 msgid "hour" msgstr "heure" -#: src/utils/gen.py:126 +#: src/utils/gen.py:128 msgid "minute" msgstr "minute" -#: src/utils/gen.py:129 +#: src/utils/gen.py:131 msgid "second" msgstr "seconde" -#: src/utils/gen.py:138 +#: src/utils/gen.py:140 msgid "%s ago" msgstr "il y a %s" -#: src/utils/str.py:349 +#: src/utils/str.py:375 msgid "and" msgstr "et" diff --git a/locales/it.po b/locales/it.po index 8f413e718..156c88aba 100644 --- a/locales/it.po +++ b/locales/it.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: Supybot-fr\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2014-07-05 00:13+0200\n" "Last-Translator: skizzhg <skizzhg@gmx.com>\n" "Language-Team: Italian <skizzhg@gmx.com>\n" @@ -18,7 +18,7 @@ msgstr "Errore: " msgid "Error: I tried to send you an empty message." msgstr "Errore: ho cercato di inviarti un messaggio vuoto." -#: src/callbacks.py:361 +#: src/callbacks.py:365 msgid "" "Missing \"%s\". You may want to quote your arguments with double quotes in " "order to prevent extra brackets from being evaluated as nested commands." @@ -26,7 +26,7 @@ msgstr "" "\"%s\" mancante. Dovresti racchiudere gli argomenti tra virgolette per " "evitare che le parentesi vengano interpretate come comandi nidificati." -#: src/callbacks.py:390 +#: src/callbacks.py:394 msgid "" "\"|\" with nothing preceding. I obviously can't do a pipe with nothing " "before the |." @@ -34,7 +34,7 @@ msgstr "" "\"|\" con niente che la precede. Ovviamente non posso usare una pipe senza " "nulla prima di |." -#: src/callbacks.py:398 +#: src/callbacks.py:402 msgid "" "Spurious \"%s\". You may want to quote your arguments with double quotes in " "order to prevent extra brackets from being evaluated as nested commands." @@ -42,7 +42,7 @@ msgstr "" "\"%s\" eccedente. Dovresti racchiudere gli argomenti tra virgolette per " "evitare che le parentesi vengano interpretate come comandi nidificati." -#: src/callbacks.py:407 +#: src/callbacks.py:411 msgid "" "\"|\" with nothing following. I obviously can't do a pipe with nothing " "after the |." @@ -50,31 +50,31 @@ msgstr "" "\"|\" con niente che la segue. Ovviamente non posso usare una pipe senza " "nulla dopo di |." -#: src/callbacks.py:623 +#: src/callbacks.py:630 msgid "%s is not a valid %s." msgstr "%s non è un %s valido." -#: src/callbacks.py:625 +#: src/callbacks.py:632 msgid "That's not a valid %s." msgstr "Questo non è un %s valido." -#: src/callbacks.py:794 +#: src/callbacks.py:812 msgid "(XX more messages)" msgstr "(XX altri messaggi)" -#: src/callbacks.py:849 +#: src/callbacks.py:873 msgid "more message" msgstr "altro messaggio" -#: src/callbacks.py:851 +#: src/callbacks.py:875 msgid "more messages" msgstr "altri messaggi" -#: src/callbacks.py:986 +#: src/callbacks.py:1011 msgid "You've attempted more nesting than is currently allowed on this bot." msgstr "Hai tentato di nidificare più di quanto sia attualmente consentito." -#: src/callbacks.py:1171 +#: src/callbacks.py:1198 msgid "" "The command %q is available in the %L plugins. Please specify the plugin " "whose command you wish to call by using its name as a command before %q." @@ -82,7 +82,7 @@ msgstr "" "Il comando %q è disponibile nei plugin %L. Specifica in quale plugin si " "trova quello che desideri usare aggiungendo il suo nome prima di %q." -#: src/callbacks.py:1356 +#: src/callbacks.py:1383 msgid "" "Determines what commands are currently disabled. Such\n" " commands will not appear in command lists, etc. They will appear not " @@ -93,164 +93,164 @@ msgstr "" "appariranno\n" " nell'elenco dei comandi, ecc.; sarà come se non esistessero." -#: src/callbacks.py:1595 +#: src/callbacks.py:1622 msgid "Invalid arguments for %s." msgstr "Argomenti non validi per %s." -#: src/callbacks.py:1627 +#: src/callbacks.py:1654 msgid "The %q command has no help." msgstr "Il comando %q non ha un help." -#: src/commands.py:284 +#: src/commands.py:291 msgid "integer" msgstr "intero" -#: src/commands.py:295 +#: src/commands.py:302 msgid "non-integer value" msgstr "valore non intero" -#: src/commands.py:306 +#: src/commands.py:313 msgid "floating point number" msgstr "numero in virgola mobile" -#: src/commands.py:315 +#: src/commands.py:322 msgid "positive integer" msgstr "intero positivo" -#: src/commands.py:319 +#: src/commands.py:326 msgid "non-negative integer" msgstr "intero non negativo" -#: src/commands.py:322 +#: src/commands.py:329 msgid "index" msgstr "indice" -#: src/commands.py:347 +#: src/commands.py:354 msgid "number of seconds" msgstr "numero di secondi" -#: src/commands.py:354 +#: src/commands.py:361 msgid "boolean" msgstr "booleano" -#: src/commands.py:368 src/commands.py:375 src/commands.py:384 -#: src/commands.py:391 src/commands.py:400 +#: src/commands.py:375 src/commands.py:382 src/commands.py:391 +#: src/commands.py:398 src/commands.py:407 msgid "do that" msgstr "fare ciò" -#: src/commands.py:371 src/commands.py:378 src/commands.py:387 -#: src/commands.py:394 src/commands.py:403 +#: src/commands.py:378 src/commands.py:385 src/commands.py:394 +#: src/commands.py:401 src/commands.py:410 msgid "I'm not even in %s." msgstr "Non sono in %s." -#: src/commands.py:373 +#: src/commands.py:380 msgid "I need to be voiced to %s." msgstr "Devo avere il voice per %s." -#: src/commands.py:381 +#: src/commands.py:388 #, fuzzy msgid "I need to be at least voiced to %s." msgstr "Devo almeno essere halfop per %s." -#: src/commands.py:389 +#: src/commands.py:396 msgid "I need to be halfopped to %s." msgstr "Devo essere halfop per %s." -#: src/commands.py:397 +#: src/commands.py:404 msgid "I need to be at least halfopped to %s." msgstr "Devo almeno essere halfop per %s." -#: src/commands.py:405 +#: src/commands.py:412 msgid "I need to be opped to %s." msgstr "Devo essere op per %s." -#: src/commands.py:411 src/commands.py:569 +#: src/commands.py:418 src/commands.py:585 msgid "channel" msgstr "canale" -#: src/commands.py:424 +#: src/commands.py:431 msgid "nick or hostmask" msgstr "nick o hostmask" -#: src/commands.py:478 +#: src/commands.py:492 msgid "regular expression" msgstr "espressione regolare" -#: src/commands.py:489 src/commands.py:493 +#: src/commands.py:503 src/commands.py:507 msgid "nick" msgstr "" -#: src/commands.py:490 +#: src/commands.py:504 msgid "That nick is too long for this server." msgstr "Il nick è troppo lungo per questo server." -#: src/commands.py:501 +#: src/commands.py:515 #, fuzzy msgid "I haven't seen %s." msgstr "Non sono in %s." -#: src/commands.py:548 src/commands.py:567 +#: src/commands.py:564 src/commands.py:583 msgid "I'm not in %s." msgstr "Non sono in %s." -#: src/commands.py:552 +#: src/commands.py:568 msgid "This command may only be given in a channel that I am in." msgstr "Questo comando può essere dato solo in un canale in cui sono presente." -#: src/commands.py:565 +#: src/commands.py:581 msgid "You must be in %s." msgstr "Devo essere in %s." -#: src/commands.py:576 +#: src/commands.py:592 msgid "%s is not in %s." msgstr "%s non è in %s." -#: src/commands.py:624 +#: src/commands.py:640 msgid "You must not give the empty string as an argument." msgstr "Non puoi darmi una stringa vuota come argomento." -#: src/commands.py:632 +#: src/commands.py:648 #, fuzzy msgid "You must not give a string containing spaces as an argument." msgstr "Non puoi darmi una stringa vuota come argomento." -#: src/commands.py:642 +#: src/commands.py:658 msgid "This message must be sent in a channel." msgstr "Questo messaggio va inviato in canale." -#: src/commands.py:674 src/commands.py:681 +#: src/commands.py:690 src/commands.py:697 msgid "url" msgstr "" -#: src/commands.py:687 +#: src/commands.py:703 msgid "IRI" msgstr "" -#: src/commands.py:693 +#: src/commands.py:709 msgid "email" msgstr "" -#: src/commands.py:703 src/commands.py:711 +#: src/commands.py:719 src/commands.py:727 msgid "http url" msgstr "URL HTTP" -#: src/commands.py:718 +#: src/commands.py:734 msgid "command name" msgstr "nome comando" -#: src/commands.py:726 +#: src/commands.py:742 msgid "ip" msgstr "IP" -#: src/commands.py:732 +#: src/commands.py:748 msgid "letter" msgstr "lettera" -#: src/commands.py:764 +#: src/commands.py:780 msgid "plugin" msgstr "plugin" -#: src/commands.py:772 +#: src/commands.py:788 msgid "irc color" msgstr "colore IRC" @@ -419,7 +419,27 @@ msgstr "" "Determina che nick userà il bot su questa rete. Se lasciato vuoto assegna il " "valore di supybot.nick." -#: src/conf.py:424 +#: src/conf.py:423 +#, fuzzy +msgid "" +"Determines what vhost the bot will bind to before\n" +" connecting a server (IRC, HTTP, ...) via IPv4. If empty, defaults " +"to\n" +" supybot.protocols.irc.vhost" +msgstr "" +"Determina quale vhost associare al bot prima di connettersi al server IRC." + +#: src/conf.py:427 +#, fuzzy +msgid "" +"Determines what vhost the bot will bind to before\n" +" connecting a server (IRC, HTTP, ...) via IPv6. If empty, defaults " +"to\n" +" supybot.protocols.irc.vhostv6" +msgstr "" +"Determina quale vhost associare al bot prima di connettersi al server IRC." + +#: src/conf.py:433 #, fuzzy msgid "" "Determines what SASL username will be used on %s. This should\n" @@ -431,18 +451,18 @@ msgstr "" "possibile usare\n" " un nick raggruppato." -#: src/conf.py:427 +#: src/conf.py:436 msgid "Determines what SASL password will be used on %s." msgstr "Determina quale password per SASL sarà usata su %s." -#: src/conf.py:430 +#: src/conf.py:439 msgid "" "Determines what SASL ECDSA key (if any) will be used on %s.\n" " The public key must be registered with NickServ for SASL\n" " ECDSA-NIST256P-CHALLENGE to work." msgstr "" -#: src/conf.py:435 +#: src/conf.py:444 #, fuzzy msgid "" "Determines what SASL mechanisms will be tried and in which order.\n" @@ -450,25 +470,25 @@ msgid "" msgstr "" "Determina quale password (eventuale) verrà usata per entrare in canale." -#: src/conf.py:438 +#: src/conf.py:447 #, fuzzy msgid "" "Determines whether the bot will abort the connection if the\n" " none of the enabled SASL mechanism succeeded." msgstr "Determina se il bot tenterà di connettersi a %s tramite un socket SSL." -#: src/conf.py:441 +#: src/conf.py:450 msgid "" "If not empty, determines the hostname:port of the socks proxy that\n" " will be used to connect to this network." msgstr "" -#: src/conf.py:461 +#: src/conf.py:470 #, fuzzy msgid "Determines how urls should be formatted." msgstr "Determina quali plugin saranno caricati." -#: src/conf.py:469 +#: src/conf.py:478 msgid "" "Determines how timestamps\n" " printed for human reading should be formatted. Refer to the Python\n" @@ -481,7 +501,7 @@ msgstr "" "documentazione\n" " di Python per il modulo time." -#: src/conf.py:484 +#: src/conf.py:493 msgid "" "Determines whether elapsed times will be given\n" " as \"1 day, 2 hours, 3 minutes, and 15 seconds\" or as \"1d 2h 3m 15s\"." @@ -490,18 +510,18 @@ msgstr "" "ore,\n" " 3 minuti e 15 secondi\" o \"1d 2h 3m 15s\"." -#: src/conf.py:495 +#: src/conf.py:504 msgid "" "Maximum number of items in a list\n" " before the end is replaced with 'and others'. Set to 0 to always\n" " show the entire list." msgstr "" -#: src/conf.py:512 +#: src/conf.py:521 msgid "other" msgstr "" -#: src/conf.py:517 +#: src/conf.py:526 msgid "" "Determines the absolute maximum length of\n" " the bot's reply -- no reply will be passed through the bot with a " @@ -511,7 +531,7 @@ msgstr "" "Determina la lunghezza massima delle risposte; il bot non invierà alcuna " "risposta che supera questo valore." -#: src/conf.py:522 +#: src/conf.py:531 msgid "" "Determines whether the bot will break up long\n" " messages into chunks and allow users to use the 'more' command to get " @@ -521,14 +541,14 @@ msgstr "" "Determina se il bot separerà i messaggi lunghi in più parti permettendo\n" " agli utenti di utilizzare il comando \"more\" per ottenere il resto." -#: src/conf.py:527 +#: src/conf.py:536 msgid "" "Determines what the maximum number of\n" " chunks (for use with the 'more' command) will be." msgstr "" "Determina il numero massimo di parti (da utilizzare con il comando \"more\")." -#: src/conf.py:531 +#: src/conf.py:540 msgid "" "Determines how long individual chunks\n" " will be. If set to 0, uses our super-tweaked,\n" @@ -538,7 +558,7 @@ msgstr "" " di usare il nostro super algoritmo per ottenere il più possibile da ogni " "messaggio." -#: src/conf.py:536 +#: src/conf.py:545 msgid "" "Determines how many mores will be sent\n" " instantly (i.e., without the use of the more command, immediately when\n" @@ -551,7 +571,21 @@ msgstr "" " \"more\"). Impostato a 1 in modo predefinito, per cui viene ne viene " "visualizzato uno solo." -#: src/conf.py:542 +#: src/conf.py:552 +#, fuzzy +msgid "" +"Determines how many mores will be sent\n" +" instantly (i.e., without the use of the more command, immediately when\n" +" they are formed) when sending messages in private. Defaults to 0, which " +"means\n" +" that it defaults to the generic supybot.reply.mores.instant value." +msgstr "" +"Determina quanti pezzi saranno inviati immediatamente (ovvero senza " +"utilizzare il comando\n" +" \"more\"). Impostato a 1 in modo predefinito, per cui viene ne viene " +"visualizzato uno solo." + +#: src/conf.py:558 #, fuzzy msgid "" "Determines whether the bot will send\n" @@ -564,7 +598,7 @@ msgstr "" "tutto\n" " in un singolo messaggio e utilizzando \"more\" se necessario." -#: src/conf.py:548 +#: src/conf.py:564 msgid "" "Determines whether the bot will reply with an\n" " error message when it is addressed but not given a valid command. If " @@ -578,7 +612,7 @@ msgstr "" "silenzioso,\n" " a meno che altri plugin modifichino questo comportamento." -#: src/conf.py:555 +#: src/conf.py:571 msgid "" "Determines whether error messages that result\n" " from bugs in the bot will show a detailed error message (the uncaught\n" @@ -588,7 +622,7 @@ msgstr "" " in modo dettagliato (eccezione non gestita) o con un messaggio di errore " "generico." -#: src/conf.py:559 +#: src/conf.py:575 msgid "" "Determines whether the bot will send error\n" " messages to users in private. You might want to do this in order to " @@ -601,7 +635,7 @@ msgstr "" " traffico del canale. Può essere usato in combinazione con supybot.reply." "error.withNotice." -#: src/conf.py:564 +#: src/conf.py:580 #, fuzzy msgid "" "Determines whether the bot will send error\n" @@ -622,7 +656,7 @@ msgstr "" " affinché gli errori non causino l'apertura di una finestra privata nel " "client IRC." -#: src/conf.py:571 +#: src/conf.py:587 #, fuzzy msgid "" "Determines whether the bot will *not* provide\n" @@ -642,7 +676,7 @@ msgstr "" "sottostante\n" " che impedisce loro di eseguire certi comandi." -#: src/conf.py:579 +#: src/conf.py:595 msgid "" "Determines whether the bot will reply\n" " privately when replying in a channel, rather than replying to the " @@ -650,7 +684,7 @@ msgid "" " channel." msgstr "Determina se il bot risponderà in privato piuttosto che in canale." -#: src/conf.py:584 +#: src/conf.py:600 msgid "" "Determines whether the bot will reply with a\n" " notice when replying in a channel, rather than replying with a privmsg " @@ -658,7 +692,7 @@ msgid "" " normal." msgstr "Determina se il bot risponderà con un notice piuttosto che in privato." -#: src/conf.py:590 +#: src/conf.py:606 #, fuzzy msgid "" "Determines whether the bot will reply with a\n" @@ -673,7 +707,7 @@ msgstr "" " per singolo utente tramite la variabile di configurazione reply." "withNoticeWhenPrivate." -#: src/conf.py:595 +#: src/conf.py:611 #, fuzzy msgid "" "Determines whether the bot will always prefix\n" @@ -682,7 +716,7 @@ msgstr "" "Determina se il bot userà sempre il nick dell'utente come prefisso della " "risposta al comando richiesto." -#: src/conf.py:599 +#: src/conf.py:615 msgid "" "Determines whether the bot should attempt to\n" " reply to all messages even if they don't address it (either via its " @@ -697,7 +731,7 @@ msgstr "" "certamente\n" " impostare supybot.reply.whenNotCommand a False." -#: src/conf.py:605 +#: src/conf.py:621 msgid "" "Determines whether the bot will allow you to\n" " send channel-related commands outside of that channel. Sometimes " @@ -711,7 +745,7 @@ msgstr "" " comando (come Filter.outfilter) modifichi il comportamento del canale\n" " ma è stato inviato fuori da questo." -#: src/conf.py:612 +#: src/conf.py:628 msgid "" "Determines whether the bot will unidentify\n" " someone when that person changes their nick. Setting this to True\n" @@ -722,7 +756,7 @@ msgstr "" " Impostandolo a True, il bot terrà traccia di questi cambiamenti; è\n" " su False in modo predefinito per migliorare leggermente la sicurezza." -#: src/conf.py:618 +#: src/conf.py:634 msgid "" "Determines whether the bot will always join a\n" " channel when it's invited. If this value is False, the bot will only " @@ -737,7 +771,7 @@ msgstr "" " (o se gli è stato esplicitamente detto di farlo tramite il comando Admin." "join)." -#: src/conf.py:624 +#: src/conf.py:640 msgid "" "Supybot normally replies with the full help\n" " whenever a user misuses a command. If this value is set to True, the " @@ -750,7 +784,7 @@ msgstr "" " il bot risponderà solo con la sintassi del comando (la prima riga " "dell'help)." -#: src/conf.py:639 +#: src/conf.py:655 msgid "" "Determines what prefix characters the bot will\n" " reply to. A prefix character is a single character that the bot will " @@ -771,7 +805,7 @@ msgstr "" "interpretato\n" " individualmente ed è possibile impostarne più di uno." -#: src/conf.py:648 +#: src/conf.py:664 msgid "" "Determines what strings the\n" " bot will reply to when they are at the beginning of the message. " @@ -790,7 +824,7 @@ msgstr "" " per cui è possibile ad esempio impostare \"@@ ??\" e far sì che il bot\n" " risponderà sia ad un messaggio prefissato da \"@@\" sia da \"??\"." -#: src/conf.py:655 +#: src/conf.py:671 msgid "" "Determines whether the bot will reply when\n" " people address it by its nick, rather than with a prefix character." @@ -798,7 +832,7 @@ msgstr "" "Determina se il bot risponderà quando gli utenti lo richiamano\n" " tramite il nick piuttosto che con un prefisso." -#: src/conf.py:658 +#: src/conf.py:674 msgid "" "Determines whether the bot will reply when\n" " people address it by its nick at the end of the message, rather than at\n" @@ -807,7 +841,7 @@ msgstr "" "Determina se il bot risponderà quando gli utenti lo richiamano\n" " tramite il nick alla fine del messaggio piuttosto che all'inizio." -#: src/conf.py:662 +#: src/conf.py:678 msgid "" "Determines what extra nicks\n" " the bot will always respond to when addressed by, even if its current " @@ -817,11 +851,11 @@ msgstr "" "Determina a quali ulteriori nick risponderà il bot, anche se quello attuale " "è diverso." -#: src/conf.py:672 +#: src/conf.py:688 msgid "The operation succeeded." msgstr "L'operazione è riuscita." -#: src/conf.py:673 +#: src/conf.py:689 msgid "" "Determines what message the bot replies with when a command succeeded.\n" " If this configuration variable is empty, no success message will be\n" @@ -831,25 +865,28 @@ msgstr "" " effettuato con successo. Se questa variabile è vuota non verrà inviato " "alcun messaggio." -#: src/conf.py:678 +#: src/conf.py:694 +#, fuzzy msgid "" "An error has occurred and has been logged.\n" -" Please contact this bot's administrator for more information." +" Please contact this bot's administrator for more information.\n" +" If this configuration variable is empty, no generic error message will " +"be sent." msgstr "" "Si è verificato un errore ed è stato registrato. Per ulteriori informazioni\n" " contattare l'amministratore del bot." -#: src/conf.py:679 +#: src/conf.py:697 +#, fuzzy msgid "" -"\n" -" Determines what error message the bot gives when it wants to be\n" +"Determines what error message the bot gives when it wants to be\n" " ambiguous." msgstr "" "\n" " Determina quale messagggio di errore riporterà il bot quando non vuole " "essere preciso." -#: src/conf.py:684 +#: src/conf.py:701 #, fuzzy msgid "" "An error has occurred and has been logged.\n" @@ -858,7 +895,7 @@ msgstr "" "Si è verificato un errore ed è stato registrato. Per ulteriori informazioni " "controllare i log." -#: src/conf.py:685 +#: src/conf.py:702 msgid "" "Determines what error\n" " message the bot gives to the owner when it wants to be ambiguous." @@ -866,13 +903,13 @@ msgstr "" "Determina quale messagggio di errore riporterà il bot all'owner quando non " "vuole essere preciso." -#: src/conf.py:689 +#: src/conf.py:706 msgid "" "Your hostmask doesn't match or your password\n" " is wrong." msgstr "La tua hostmask non corrisponde o la password è errata." -#: src/conf.py:690 +#: src/conf.py:707 msgid "" "Determines what message the bot replies with when\n" " someone tries to use a command that requires being identified or having " @@ -884,7 +921,7 @@ msgstr "" " per cui bisogna essere identificati, o ha una password, e le " "credenziali non sono corrette." -#: src/conf.py:696 +#: src/conf.py:713 msgid "" "I can't find %s in my user\n" " database. If you didn't give a user name, then I might not know what " @@ -896,7 +933,7 @@ msgstr "" " sapere quale sia e dovrai identificarti prima di utilizzare questo " "comando." -#: src/conf.py:699 +#: src/conf.py:716 msgid "" "Determines what error message the bot replies with when someone tries\n" " to accessing some information on a user the bot doesn't know about." @@ -905,7 +942,7 @@ msgstr "" " prova ad accedere a informazioni riguardanti un utente di cui il bot non " "sa nulla." -#: src/conf.py:703 +#: src/conf.py:720 msgid "" "You must be registered to use this command.\n" " If you are already registered, you must either identify (using the " @@ -919,7 +956,7 @@ msgstr "" "corrisponda a quella\n" " attuale (tramite il comando \"hostmask add\")." -#: src/conf.py:706 +#: src/conf.py:723 msgid "" "Determines what error message the bot\n" " replies with when someone tries to do something that requires them to " @@ -930,7 +967,7 @@ msgstr "" "qualcosa\n" " per cui bisogna essere registrati ma non si è attualmente riconosciuti." -#: src/conf.py:711 +#: src/conf.py:728 msgid "" "You don't have the %s capability. If you\n" " think that you should have this capability, be sure that you are " @@ -942,7 +979,7 @@ msgstr "" "prima\n" " di riprovare. Il comando \"whoami\" ti dirà se lo sei." -#: src/conf.py:714 +#: src/conf.py:731 msgid "" "Determines what error message is given when the bot\n" " is telling someone they aren't cool enough to use the command they tried " @@ -952,7 +989,7 @@ msgstr "" "Determina quale messaggio di errore fornire quando il bot dice a qualcuno\n" " di non avere accesso ad un certo comando." -#: src/conf.py:719 +#: src/conf.py:736 msgid "" "You're missing some capability you need.\n" " This could be because you actually possess the anti-capability for the\n" @@ -979,7 +1016,7 @@ msgstr "" "ti è\n" " permesso fare ciò che intendevi." -#: src/conf.py:727 +#: src/conf.py:744 msgid "" "Determines what generic error message is given when the bot is telling\n" " someone that they aren't cool enough to use the command they tried to " @@ -993,13 +1030,13 @@ msgstr "" "richiama\n" " errorNoCapability non ha fornito un'informazione esplicita sul motivo." -#: src/conf.py:733 +#: src/conf.py:750 msgid "" "That operation cannot be done in a\n" " channel." msgstr "L'operazione non può essere eseguita in un canale." -#: src/conf.py:734 +#: src/conf.py:751 msgid "" "Determines what error messages the bot sends to people\n" " who try to do things in a channel that really should be done in\n" @@ -1009,7 +1046,7 @@ msgstr "" "qualcosa\n" " in canale e che dovrebbe invece fare in privato." -#: src/conf.py:739 +#: src/conf.py:756 msgid "" "This may be a bug. If you think it is,\n" " please file a bug report at\n" @@ -1019,7 +1056,7 @@ msgstr "" "all'indirizzo\n" " <https://github.com/progval/Limnoria/issues>." -#: src/conf.py:742 +#: src/conf.py:759 msgid "" "Determines what message the bot sends when it thinks you've\n" " encountered a bug that the developers don't know about." @@ -1027,11 +1064,11 @@ msgstr "" "Determina quale messaggio invierà il bot quando pensa tu abbia trovato\n" " un bug di cui gli sviluppatori non sono a conoscenza." -#: src/conf.py:749 +#: src/conf.py:766 msgid "$Type #$id: $text (added by $username at $at)" msgstr "" -#: src/conf.py:750 +#: src/conf.py:767 msgid "" "Format used by generic database plugins (Lart, Dunno, Prase, Success,\n" " Quote, ...) to show an entry. You can use the following variables:\n" @@ -1039,7 +1076,7 @@ msgid "" " $at (creation time), $userid/$username/$nick (author)." msgstr "" -#: src/conf.py:760 +#: src/conf.py:777 msgid "" "A floating point number of seconds to throttle\n" " snarfed URLs, in order to prevent loops between two bots snarfing the " @@ -1050,7 +1087,7 @@ msgstr "" " intercettare lo stesso URL, in modo da evitare che due bot entrino in\n" " un loop infinito intercettandosi a vicenda." -#: src/conf.py:765 +#: src/conf.py:782 msgid "" "Determines the number of seconds\n" " between running the upkeep function that flushes (commits) open " @@ -1063,7 +1100,7 @@ msgstr "" " aggiorna i database, svuota la cache e registra le statistiche utili per " "il debug." -#: src/conf.py:771 +#: src/conf.py:788 msgid "" "Determines whether the bot will periodically\n" " flush data and configuration files to disk. Generally, the only time\n" @@ -1085,7 +1122,7 @@ msgstr "" " Se vuoi che questa modifica sia permanente devi modificare il registro a " "mano." -#: src/conf.py:797 +#: src/conf.py:814 msgid "" "Determines what characters are valid for quoting\n" " arguments to commands in order to prevent them from being tokenized.\n" @@ -1095,7 +1132,7 @@ msgstr "" ", ed evitare che vengano tokenizzati.\n" " " -#: src/conf.py:804 +#: src/conf.py:821 msgid "" "Determines whether the bot will allow nested\n" " commands, which rule. You definitely should keep this on." @@ -1103,7 +1140,7 @@ msgstr "" "Determina se il bot permetterà comandi nidificati. È un'ottima\n" " funzionalità, devi assolutamente tenerla attiva." -#: src/conf.py:807 +#: src/conf.py:824 msgid "" "Determines what the maximum number of\n" " nested commands will be; users will receive an error if they attempt\n" @@ -1112,7 +1149,7 @@ msgstr "" "Determina il numero massimo di comandi nidificati. Se gli utenti tentano\n" " di utilizzarne di più, riceveranno un errore." -#: src/conf.py:816 +#: src/conf.py:833 #, fuzzy msgid "" "Supybot allows you to specify what brackets\n" @@ -1132,7 +1169,7 @@ msgstr "" "nidificati non\n" " saranno permessi." -#: src/conf.py:823 +#: src/conf.py:840 msgid "" "Supybot allows nested commands. Enabling this\n" " option will allow nested commands with a syntax similar to UNIX pipes, " @@ -1143,7 +1180,7 @@ msgstr "" "permetterà l'uso\n" " con una sintassi simile alle pipe UNIX, ad esempio: 'bot: foo | bar'." -#: src/conf.py:828 +#: src/conf.py:845 msgid "" "Determines what commands have default\n" " plugins set, and which plugins are set to be the default for each of " @@ -1154,7 +1191,7 @@ msgstr "" "utilizzato\n" " in modo predefinito per ciascuno di questi comandi." -#: src/conf.py:834 +#: src/conf.py:851 msgid "" "Determines what plugins automatically get precedence over all\n" " other plugins when selecting a default plugin for a command. By\n" @@ -1174,7 +1211,7 @@ msgstr "" "sappi anche\n" " che i nomi sono case sensitive." -#: src/conf.py:844 +#: src/conf.py:861 msgid "" "Allows this bot's owner user to use commands\n" " that grants them shell access. This config variable exists in case you " @@ -1186,13 +1223,13 @@ msgid "" " used to indirectly gain shell access." msgstr "" -#: src/conf.py:859 +#: src/conf.py:876 msgid "" "Determines the interval used for\n" " the history storage." msgstr "" -#: src/conf.py:862 +#: src/conf.py:879 msgid "" "Determines whether the bot will defend itself\n" " against command-flooding." @@ -1200,7 +1237,7 @@ msgstr "" "Determina se il bot si difenderà dall'uso di troppi comandi alla volta " "(flood)." -#: src/conf.py:865 +#: src/conf.py:882 msgid "" "Determines how many commands users are\n" " allowed per minute. If a user sends more than this many commands in " @@ -1214,7 +1251,7 @@ msgstr "" "variabile\n" " supybot.abuse.flood.command.punishment." -#: src/conf.py:870 +#: src/conf.py:887 msgid "" "Determines how many seconds the bot\n" " will ignore users who flood it with commands." @@ -1222,7 +1259,7 @@ msgstr "" "Determina per quanti secondi il bot ignorerà un utente che abusa dei comandi " "(flood)." -#: src/conf.py:873 +#: src/conf.py:890 #, fuzzy msgid "" "Determines whether the bot will notify people\n" @@ -1231,7 +1268,7 @@ msgstr "" "Determina se il bot avvertirà l'utente che è stato ignorato per abuso di " "comandi non validi (flood)." -#: src/conf.py:877 +#: src/conf.py:894 msgid "" "Determines whether the bot will defend itself\n" " against invalid command-flooding." @@ -1239,7 +1276,7 @@ msgstr "" "Determina se il bot si difenderà dall'uso di troppi comandi non validi alla " "volta (flood)." -#: src/conf.py:880 +#: src/conf.py:897 msgid "" "Determines how many invalid commands users\n" " are allowed per minute. If a user sends more than this many invalid\n" @@ -1260,7 +1297,7 @@ msgstr "" "probabile che un utente\n" " abusi di comandi non validi piuttosto che di quelli validi." -#: src/conf.py:888 +#: src/conf.py:905 msgid "" "Determines how many seconds the bot\n" " will ignore users who flood it with invalid commands. Typically, this\n" @@ -1276,7 +1313,7 @@ msgstr "" " in quanto è meno probabile che un utente abusi di comandi non validi " "piuttosto che di quelli validi." -#: src/conf.py:894 +#: src/conf.py:911 msgid "" "Determines whether the bot will notify people\n" " that they're being ignored for invalid command flooding." @@ -1284,7 +1321,7 @@ msgstr "" "Determina se il bot avvertirà l'utente che è stato ignorato per abuso di " "comandi non validi (flood)." -#: src/conf.py:903 +#: src/conf.py:920 msgid "" "Determines the default length of time a\n" " driver should block waiting for input." @@ -1292,13 +1329,23 @@ msgstr "" "Determina la quantità di tempo predefinita durante il quale un driver\n" " di rete debba bloccarsi in attesa dei dati in entrata." -#: src/conf.py:911 +#: src/conf.py:928 msgid "" "Determines what driver module the \n" " bot will use. Current, the only (and default) driver is Socket." msgstr "" -#: src/conf.py:915 +#: src/conf.py:932 +#, fuzzy +msgid "" +"Determines the minimum time the bot will\n" +" wait before attempting to reconnect to an IRC server." +msgstr "" +"Determina il tempo massimo che il bot attenderà prima di riconnettersi al " +"server\n" +" IRC. Se ne avrà la possibilità potrà comunque connettersi prima." + +#: src/conf.py:936 msgid "" "Determines the maximum time the bot will\n" " wait before attempting to reconnect to an IRC server. The bot may, of\n" @@ -1308,17 +1355,17 @@ msgstr "" "server\n" " IRC. Se ne avrà la possibilità potrà comunque connettersi prima." -#: src/conf.py:967 +#: src/conf.py:988 msgid "" "Determines what directory configuration data is\n" " put into." msgstr "Determina in quale directory collocare i dati di configurazione." -#: src/conf.py:970 +#: src/conf.py:991 msgid "Determines what directory data is put into." msgstr "Determina in quale directory collocare i dati." -#: src/conf.py:972 +#: src/conf.py:993 msgid "" "Determines what directory backup data is put\n" " into. Set it to /dev/null to disable backup (it is a special value,\n" @@ -1330,20 +1377,20 @@ msgstr "" "su\n" " Windows e sistemi privi di questo device)." -#: src/conf.py:979 +#: src/conf.py:1000 msgid "" "Determines what directory temporary files\n" " are put into." msgstr "Determina in quale directory collocare i file temporanei." -#: src/conf.py:982 +#: src/conf.py:1003 #, fuzzy msgid "" "Determines what directory files of the\n" " web server (templates, custom images, ...) are put into." msgstr "Determina in quale directory collocare i file temporanei." -#: src/conf.py:995 +#: src/conf.py:1016 msgid "" "Determines what directories\n" " the bot will look for plugins in. Accepts a comma-separated list of\n" @@ -1363,7 +1410,7 @@ msgstr "" " \"config supybot.directories.plugins [config supybot.directories." "plugins], nuovaDirectory\"." -#: src/conf.py:1003 +#: src/conf.py:1024 msgid "" "List of all plugins that were\n" " ever loaded. Currently has no effect whatsoever. You probably want to " @@ -1372,7 +1419,7 @@ msgid "" " instead of this." msgstr "" -#: src/conf.py:1008 +#: src/conf.py:1029 msgid "" "Determines whether the bot will always load\n" " important plugins (Admin, Channel, Config, Misc, Owner, and User)\n" @@ -1393,7 +1440,7 @@ msgstr "" "sufficientemente abile\n" " nel modificare il valore di questa variabile in modo appropriato :)" -#: src/conf.py:1036 +#: src/conf.py:1063 msgid "" "Determines what databases are available for use. If this\n" " value is not configured (that is, if its value is empty) then sane " @@ -1403,7 +1450,7 @@ msgstr "" "Determina quali database rendere disponibili. Se non configurato (ovvero il\n" " valore è vuoto) verrà utilizzato uno predefinito." -#: src/conf.py:1042 +#: src/conf.py:1069 msgid "" "Determines what filename will be used\n" " for the users database. This file will go into the directory specified " @@ -1414,7 +1461,7 @@ msgstr "" "finirà\n" " nella directory specificata dalla variabile supybot.directories.conf." -#: src/conf.py:1046 +#: src/conf.py:1073 msgid "" "Determines how long it takes identification to\n" " time out. If the value is less than or equal to zero, identification " @@ -1424,7 +1471,7 @@ msgstr "" "Determina per quanto tempo rimarrà identificato un utente. Se il valore è\n" " inferiore o uguale a zero l'identificazione non scadrà mai." -#: src/conf.py:1050 +#: src/conf.py:1077 msgid "" "Determines whether the bot will allow users to\n" " unregister their users. This can wreak havoc with already-existing\n" @@ -1443,7 +1490,7 @@ msgstr "" " bot (owner) di utilizzare il comando \"unregister\".\n" " " -#: src/conf.py:1059 +#: src/conf.py:1086 msgid "" "Determines what filename will be used\n" " for the ignores database. This file will go into the directory " @@ -1454,7 +1501,7 @@ msgstr "" "finirà\n" " nella directory specificata dalla variabile supybot.directories.conf." -#: src/conf.py:1065 +#: src/conf.py:1092 msgid "" "Determines what filename will be used\n" " for the channels database. This file will go into the directory " @@ -1464,7 +1511,7 @@ msgstr "" "Determina il nome del file utilizzato per il database dei canali che finirà\n" " nella directory specificata dalla variabile supybot.directories.conf." -#: src/conf.py:1071 +#: src/conf.py:1098 #, fuzzy msgid "" "Determines what filename will be used\n" @@ -1476,7 +1523,7 @@ msgstr "" "finirà\n" " nella directory specificata dalla variabile supybot.directories.conf." -#: src/conf.py:1103 +#: src/conf.py:1130 #, fuzzy msgid "" "Determines whether the bot will require user\n" @@ -1486,7 +1533,7 @@ msgstr "" "Determina se il bot si difenderà dall'uso di troppi comandi non validi alla " "volta (flood)." -#: src/conf.py:1107 +#: src/conf.py:1134 msgid "" "Determines whether database-based plugins that\n" " can be channel-specific will be so. This can be overridden by " @@ -1509,7 +1556,7 @@ msgstr "" " canale a livello globale è inoltre possibile impostare la variabile\n" " supybot.databases.plugins.channelSpecific.link in modo appropriato." -#: src/conf.py:1115 +#: src/conf.py:1142 msgid "" "Determines what channel global\n" " (non-channel-specific) databases will be considered a part of. This is\n" @@ -1536,7 +1583,7 @@ msgstr "" "plugin\n" " potrebbero non funzionare." -#: src/conf.py:1124 +#: src/conf.py:1151 msgid "" "Determines whether another channel's global\n" " (non-channel-specific) databases will be allowed to link to this " @@ -1554,7 +1601,7 @@ msgstr "" " di questa variabile altrimenti tali plugin potrebbero non funzionare.\n" " " -#: src/conf.py:1142 +#: src/conf.py:1169 msgid "" "Determines\n" " whether CDB databases will be allowed as a database implementation." @@ -1562,7 +1609,7 @@ msgstr "" "Determina se i database CDB sono permessi come implementazione di un " "database." -#: src/conf.py:1145 +#: src/conf.py:1172 msgid "" "Determines how often CDB databases will have\n" " their modifications flushed to disk. When the number of modified " @@ -1577,13 +1624,13 @@ msgstr "" "modificati il\n" " database verrà interamente scritto sul disco." -#: src/conf.py:1237 +#: src/conf.py:1337 msgid "" "Determines what will be used as the\n" " default banmask style." msgstr "Determina il tipo di banmask utilizzata in modo predefinito." -#: src/conf.py:1241 +#: src/conf.py:1341 #, fuzzy msgid "" "Determines whether the bot will strictly\n" @@ -1600,7 +1647,7 @@ msgstr "" "server\", è\n" " necessario impostare questo valore a False." -#: src/conf.py:1248 +#: src/conf.py:1348 msgid "" "Determines whether the bot will enable\n" " draft/experimental extensions of the IRC protocol. Setting this to True\n" @@ -1610,14 +1657,14 @@ msgid "" " doing." msgstr "" -#: src/conf.py:1255 +#: src/conf.py:1355 #, fuzzy msgid "" "Determines what certificate file (if any) the bot\n" " will use connect with SSL sockets by default." msgstr "Determina se il bot tenterà di connettersi a %s tramite un socket SSL." -#: src/conf.py:1259 +#: src/conf.py:1359 msgid "" "Determines what user modes the bot will request\n" " from the server when it first connects. Many people might choose +i; " @@ -1632,7 +1679,7 @@ msgstr "" "che si\n" " desidera avere l'hostmask camuffata (vhost) o parzialmente crittata." -#: src/conf.py:1265 +#: src/conf.py:1365 #, fuzzy msgid "" "Determines what vhost the bot will bind to before\n" @@ -1640,7 +1687,7 @@ msgid "" msgstr "" "Determina quale vhost associare al bot prima di connettersi al server IRC." -#: src/conf.py:1269 +#: src/conf.py:1369 #, fuzzy msgid "" "Determines what vhost the bot will bind to before\n" @@ -1648,7 +1695,7 @@ msgid "" msgstr "" "Determina quale vhost associare al bot prima di connettersi al server IRC." -#: src/conf.py:1273 +#: src/conf.py:1373 #, fuzzy msgid "" "Determines how many old messages the bot will\n" @@ -1659,7 +1706,7 @@ msgstr "" "Determina quanti messaggi vecchi terrà il bot nella cronologia. La modifica\n" " di questa variabile non avrà effetto finché non si riavvia il bot." -#: src/conf.py:1278 +#: src/conf.py:1378 msgid "" "A floating point number of seconds to throttle\n" " queued messages -- that is, messages will not be sent faster than once " @@ -1670,7 +1717,7 @@ msgstr "" " inviare i messaggi in coda; vale a dire che verranno inviati una volta\n" " ogni numero di secondi specificati." -#: src/conf.py:1283 +#: src/conf.py:1383 msgid "" "Determines whether the bot will send PINGs to\n" " the server it's connected to in order to keep the connection alive and\n" @@ -1686,7 +1733,7 @@ msgstr "" " si incontrino problemi strani con il server, andrebbe sempre tenuta a " "True." -#: src/conf.py:1290 +#: src/conf.py:1390 msgid "" "Determines the number of seconds between sending\n" " pings to the server, if pings are being sent to the server." @@ -1694,7 +1741,7 @@ msgstr "" "Determina il numero di secondi tra ogni invio di PING al server, se questo " "avviene." -#: src/conf.py:1295 +#: src/conf.py:1395 msgid "" "Determines whether the bot will refuse\n" " duplicated messages to be queued for delivery to the server. This is a\n" @@ -1711,14 +1758,14 @@ msgstr "" "non si\n" " facciano delle modifiche ai plugin." -#: src/conf.py:1303 +#: src/conf.py:1403 msgid "" "Determines how many seconds must elapse between\n" " JOINs sent to the server." msgstr "" "Determina quanti secondi debbano trascorrere tra un invio di JOIN e l'altro." -#: src/conf.py:1311 +#: src/conf.py:1411 msgid "" "Determines how many bytes the bot will\n" " 'peek' at when looking through a URL for a doctype or title or " @@ -1734,7 +1781,7 @@ msgstr "" " letto questa quantità di byte, anche se non trova quel che stava " "cercando." -#: src/conf.py:1335 +#: src/conf.py:1435 #, fuzzy msgid "" "Determines what HTTP proxy all HTTP requests should go\n" @@ -1743,7 +1790,7 @@ msgstr "" "Determina tramite quale proxy debbano passare le richieste HTTP.\n" " Il valore deve essere nella forma \"host:porta\"." -#: src/conf.py:1375 +#: src/conf.py:1475 msgid "" "If set, the Accept-Language HTTP header will be set to this\n" " value for requests. Useful for overriding the auto-detected language " @@ -1751,13 +1798,13 @@ msgid "" " the server's location." msgstr "" -#: src/conf.py:1381 +#: src/conf.py:1481 msgid "" "If set, the User-Agent HTTP header will be set to a randomly\n" " selected value from this comma-separated list of strings for requests." msgstr "" -#: src/conf.py:1389 +#: src/conf.py:1489 msgid "" "Determines whether server certificates\n" " will be verified, which checks whether the server certificate is signed\n" @@ -1768,34 +1815,34 @@ msgid "" " is set." msgstr "" -#: src/conf.py:1416 +#: src/conf.py:1516 msgid "" "If true, uses IPV6_V6ONLY to disable\n" " forwaring of IPv4 traffic to IPv6 sockets. On *nix, has the same\n" " effect as setting kernel variable net.ipv6.bindv6only to 1." msgstr "" -#: src/conf.py:1420 +#: src/conf.py:1520 #, fuzzy msgid "" "Space-separated list of IPv4 hosts the HTTP server\n" " will bind." msgstr "Determina a quale host si collegherà il server HTTP." -#: src/conf.py:1423 +#: src/conf.py:1523 #, fuzzy msgid "" "Space-separated list of IPv6 hosts the HTTP server will\n" " bind." msgstr "Determina a quale porta si collegherà il server HTTP." -#: src/conf.py:1426 +#: src/conf.py:1526 msgid "" "Determines what port the HTTP server will\n" " bind." msgstr "Determina a quale porta si collegherà il server HTTP." -#: src/conf.py:1429 +#: src/conf.py:1529 msgid "" "Determines whether the server will stay\n" " alive if no plugin is using it. This also means that the server will\n" @@ -1804,14 +1851,14 @@ msgstr "" "Definisce se il server rimarrà in esecuzione se nessun plugin lo utilizza.\n" " Ciò significa che verrà avviato anche se non utilizzato." -#: src/conf.py:1433 +#: src/conf.py:1533 #, fuzzy msgid "" "Determines the path of the file served as\n" " favicon to browsers." msgstr "Determina a quale porta si collegherà il server HTTP." -#: src/conf.py:1436 +#: src/conf.py:1536 msgid "" "Determines the public URL of the server.\n" " By default it is http://<hostname>:<port>/, but you will want to change\n" @@ -1819,7 +1866,7 @@ msgid "" " the bot." msgstr "" -#: src/conf.py:1446 +#: src/conf.py:1546 #, fuzzy msgid "" "Determines whether the bot will ignore\n" @@ -1831,7 +1878,7 @@ msgstr "" " Naturalmente renderà difficoltoso registrarsi o identificarsi, ma questo " "è un tuo problema." -#: src/conf.py:1453 +#: src/conf.py:1553 msgid "" "A string that is the external IP of the bot. If this is the\n" " empty string, the bot will attempt to find out its IP dynamically " @@ -1839,13 +1886,13 @@ msgid "" " sometimes that doesn't work, hence this variable). This variable is not " "used\n" " by Limnoria and its built-in plugins: see supybot.protocols.irc.vhost /\n" -" supybot.protocols.irc.vhost6 to set the IRC bind host, and\n" +" supybot.protocols.irc.vhostv6 to set the IRC bind host, and\n" " supybot.servers.http.hosts4 / supybot.servers.http.hosts6 to set the " "HTTP\n" " server bind host." msgstr "" -#: src/conf.py:1472 +#: src/conf.py:1572 msgid "" "Determines what the default timeout for socket\n" " objects will be. This means that *all* sockets will timeout when this " @@ -1859,7 +1906,7 @@ msgstr "" " scadranno dopo questo periodo (a meno che l'utore del codice ne abbia " "modificato il valore)." -#: src/conf.py:1478 +#: src/conf.py:1578 msgid "" "Determines what file the bot should write its PID\n" " (Process ID) to, so you can kill it more easily. If it's left unset (as " @@ -1875,13 +1922,13 @@ msgstr "" " file. Perché le modifiche a questa variabile abbiano effetto è " "necessario un riavvio." -#: src/conf.py:1488 +#: src/conf.py:1588 msgid "" "Determines whether the bot will automatically\n" " thread all commands." msgstr "Determina se il bot userà i thread per tutti i comandi." -#: src/conf.py:1491 +#: src/conf.py:1591 msgid "" "Determines whether the bot will automatically\n" " flush all flushers *very* often. Useful for debugging when you don't " @@ -1902,7 +1949,7 @@ msgstr "Indice del server web di Supybot" msgid "Here is a list of the plugins that have a Web interface:" msgstr "Ecco un elenco dei plugin che hanno un'interfaccia web:" -#: src/httpserver.py:245 +#: src/httpserver.py:352 msgid "" "\n" " This is a default response of the Supybot HTTP server. If you see this\n" @@ -1916,7 +1963,7 @@ msgstr "" "e non\n" " hai sovrascritto questo messaggio o definito un gestore per questa query." -#: src/httpserver.py:291 +#: src/httpserver.py:398 msgid "" "\n" " I am a pretty clever IRC bot, but I suck at serving Web pages, " @@ -1933,64 +1980,64 @@ msgstr "" " appena causato un \"404 Not Found\" e non sono addestrato per aiutarti " "in questa circostanza." -#: src/httpserver.py:310 +#: src/httpserver.py:417 msgid "Request not handled." msgstr "Richiesta non gestita." -#: src/httpserver.py:317 +#: src/httpserver.py:424 msgid "No plugins available." msgstr "Nessun plugin disponibile." -#: src/httpserver.py:335 src/httpserver.py:353 src/httpserver.py:391 +#: src/httpserver.py:442 src/httpserver.py:460 src/httpserver.py:498 msgid "Request not handled" msgstr "Richiesta non gestita" -#: src/httpserver.py:378 +#: src/httpserver.py:485 msgid "No favicon set." msgstr "" -#: src/ircutils.py:573 +#: src/ircutils.py:592 msgid "is an op on %L" msgstr "" -#: src/ircutils.py:575 +#: src/ircutils.py:594 msgid "is a halfop on %L" msgstr "" -#: src/ircutils.py:577 +#: src/ircutils.py:596 msgid "is voiced on %L" msgstr "" -#: src/ircutils.py:580 +#: src/ircutils.py:599 msgid "is also on %L" msgstr "" -#: src/ircutils.py:582 +#: src/ircutils.py:601 msgid "is on %L" msgstr "" -#: src/ircutils.py:585 +#: src/ircutils.py:604 msgid "isn't on any publicly visible channels" msgstr "" -#: src/ircutils.py:593 src/ircutils.py:594 src/ircutils.py:600 +#: src/ircutils.py:612 src/ircutils.py:613 src/ircutils.py:619 msgid "<unknown>" msgstr "" -#: src/ircutils.py:602 +#: src/ircutils.py:621 #, fuzzy msgid " %s is away: %s." msgstr "%s non è un %s valido." -#: src/ircutils.py:607 +#: src/ircutils.py:626 msgid " identified" msgstr "" -#: src/ircutils.py:613 +#: src/ircutils.py:632 msgid "%s (%s) has been%s on server %s since %s (idle for %s). %s %s.%s" msgstr "" -#: src/ircutils.py:617 +#: src/ircutils.py:636 msgid "%s (%s) has been%s on server %s and disconnected on %s." msgstr "" @@ -2014,85 +2061,85 @@ msgstr "Inserire nuovamente la password: " msgid "Passwords don't match." msgstr "Le password non corrispondono." -#: src/registry.py:219 +#: src/registry.py:224 #, fuzzy msgid "%r is not a valid entry in %r" msgstr "%s non è un %s valido." -#: src/registry.py:568 +#: src/registry.py:573 msgid "Value must be either True or False (or On or Off), not %r." msgstr "" -#: src/registry.py:585 +#: src/registry.py:590 msgid "Value must be an integer, not %r." msgstr "" -#: src/registry.py:595 +#: src/registry.py:600 #, fuzzy msgid "Value must be a non-negative integer, not %r." msgstr "intero non negativo" -#: src/registry.py:604 +#: src/registry.py:609 msgid "Value must be positive (non-zero) integer, not %r." msgstr "" -#: src/registry.py:613 +#: src/registry.py:618 msgid "Value must be a floating-point number, not %r." msgstr "" -#: src/registry.py:629 +#: src/registry.py:634 msgid "Value must be a floating-point number greater than zero, not %r." msgstr "" -#: src/registry.py:640 +#: src/registry.py:645 msgid "Value must be a floating point number in the range [0, 1], not %r." msgstr "" -#: src/registry.py:655 +#: src/registry.py:660 msgid "Value should be a valid Python string, not %r." msgstr "" -#: src/registry.py:693 +#: src/registry.py:698 msgid "Valid values include %L." msgstr "" -#: src/registry.py:695 +#: src/registry.py:700 msgid "Valid values include %L, not %%r." msgstr "" -#: src/registry.py:769 +#: src/registry.py:777 msgid "Value must be a valid regular expression, not %r." msgstr "" -#: src/utils/gen.py:113 +#: src/utils/gen.py:115 msgid "year" msgstr "" -#: src/utils/gen.py:116 +#: src/utils/gen.py:118 msgid "week" msgstr "" -#: src/utils/gen.py:119 +#: src/utils/gen.py:121 msgid "day" msgstr "" -#: src/utils/gen.py:122 +#: src/utils/gen.py:124 msgid "hour" msgstr "" -#: src/utils/gen.py:126 +#: src/utils/gen.py:128 msgid "minute" msgstr "" -#: src/utils/gen.py:129 +#: src/utils/gen.py:131 msgid "second" msgstr "" -#: src/utils/gen.py:138 +#: src/utils/gen.py:140 msgid "%s ago" msgstr "" -#: src/utils/str.py:349 +#: src/utils/str.py:375 msgid "and" msgstr "" diff --git a/locales/messages.pot b/locales/messages.pot index 0f8de1c6f..e9ef27102 100644 --- a/locales/messages.pot +++ b/locales/messages.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -23,212 +23,212 @@ msgstr "" msgid "Error: I tried to send you an empty message." msgstr "" -#: src/callbacks.py:361 +#: src/callbacks.py:365 msgid "Missing \"%s\". You may want to quote your arguments with double quotes in order to prevent extra brackets from being evaluated as nested commands." msgstr "" -#: src/callbacks.py:390 +#: src/callbacks.py:394 msgid "\"|\" with nothing preceding. I obviously can't do a pipe with nothing before the |." msgstr "" -#: src/callbacks.py:398 +#: src/callbacks.py:402 msgid "Spurious \"%s\". You may want to quote your arguments with double quotes in order to prevent extra brackets from being evaluated as nested commands." msgstr "" -#: src/callbacks.py:407 +#: src/callbacks.py:411 msgid "\"|\" with nothing following. I obviously can't do a pipe with nothing after the |." msgstr "" -#: src/callbacks.py:623 +#: src/callbacks.py:630 msgid "%s is not a valid %s." msgstr "" -#: src/callbacks.py:625 +#: src/callbacks.py:632 msgid "That's not a valid %s." msgstr "" -#: src/callbacks.py:794 +#: src/callbacks.py:812 msgid "(XX more messages)" msgstr "" -#: src/callbacks.py:849 +#: src/callbacks.py:873 msgid "more message" msgstr "" -#: src/callbacks.py:851 +#: src/callbacks.py:875 msgid "more messages" msgstr "" -#: src/callbacks.py:986 +#: src/callbacks.py:1011 msgid "You've attempted more nesting than is currently allowed on this bot." msgstr "" -#: src/callbacks.py:1171 +#: src/callbacks.py:1198 msgid "The command %q is available in the %L plugins. Please specify the plugin whose command you wish to call by using its name as a command before %q." msgstr "" -#: src/callbacks.py:1356 +#: src/callbacks.py:1383 msgid "" "Determines what commands are currently disabled. Such\n" " commands will not appear in command lists, etc. They will appear not even\n" " to exist." msgstr "" -#: src/callbacks.py:1595 +#: src/callbacks.py:1622 msgid "Invalid arguments for %s." msgstr "" -#: src/callbacks.py:1627 +#: src/callbacks.py:1654 msgid "The %q command has no help." msgstr "" -#: src/commands.py:284 +#: src/commands.py:291 msgid "integer" msgstr "" -#: src/commands.py:295 +#: src/commands.py:302 msgid "non-integer value" msgstr "" -#: src/commands.py:306 +#: src/commands.py:313 msgid "floating point number" msgstr "" -#: src/commands.py:315 +#: src/commands.py:322 msgid "positive integer" msgstr "" -#: src/commands.py:319 +#: src/commands.py:326 msgid "non-negative integer" msgstr "" -#: src/commands.py:322 +#: src/commands.py:329 msgid "index" msgstr "" -#: src/commands.py:347 +#: src/commands.py:354 msgid "number of seconds" msgstr "" -#: src/commands.py:354 +#: src/commands.py:361 msgid "boolean" msgstr "" -#: src/commands.py:368 src/commands.py:375 src/commands.py:384 -#: src/commands.py:391 src/commands.py:400 +#: src/commands.py:375 src/commands.py:382 src/commands.py:391 +#: src/commands.py:398 src/commands.py:407 msgid "do that" msgstr "" -#: src/commands.py:371 src/commands.py:378 src/commands.py:387 -#: src/commands.py:394 src/commands.py:403 +#: src/commands.py:378 src/commands.py:385 src/commands.py:394 +#: src/commands.py:401 src/commands.py:410 msgid "I'm not even in %s." msgstr "" -#: src/commands.py:373 +#: src/commands.py:380 msgid "I need to be voiced to %s." msgstr "" -#: src/commands.py:381 +#: src/commands.py:388 msgid "I need to be at least voiced to %s." msgstr "" -#: src/commands.py:389 +#: src/commands.py:396 msgid "I need to be halfopped to %s." msgstr "" -#: src/commands.py:397 +#: src/commands.py:404 msgid "I need to be at least halfopped to %s." msgstr "" -#: src/commands.py:405 +#: src/commands.py:412 msgid "I need to be opped to %s." msgstr "" -#: src/commands.py:411 src/commands.py:569 +#: src/commands.py:418 src/commands.py:585 msgid "channel" msgstr "" -#: src/commands.py:424 +#: src/commands.py:431 msgid "nick or hostmask" msgstr "" -#: src/commands.py:478 +#: src/commands.py:492 msgid "regular expression" msgstr "" -#: src/commands.py:489 src/commands.py:493 +#: src/commands.py:503 src/commands.py:507 msgid "nick" msgstr "" -#: src/commands.py:490 +#: src/commands.py:504 msgid "That nick is too long for this server." msgstr "" -#: src/commands.py:501 +#: src/commands.py:515 msgid "I haven't seen %s." msgstr "" -#: src/commands.py:548 src/commands.py:567 +#: src/commands.py:564 src/commands.py:583 msgid "I'm not in %s." msgstr "" -#: src/commands.py:552 +#: src/commands.py:568 msgid "This command may only be given in a channel that I am in." msgstr "" -#: src/commands.py:565 +#: src/commands.py:581 msgid "You must be in %s." msgstr "" -#: src/commands.py:576 +#: src/commands.py:592 msgid "%s is not in %s." msgstr "" -#: src/commands.py:624 +#: src/commands.py:640 msgid "You must not give the empty string as an argument." msgstr "" -#: src/commands.py:632 +#: src/commands.py:648 msgid "You must not give a string containing spaces as an argument." msgstr "" -#: src/commands.py:642 +#: src/commands.py:658 msgid "This message must be sent in a channel." msgstr "" -#: src/commands.py:674 src/commands.py:681 +#: src/commands.py:690 src/commands.py:697 msgid "url" msgstr "" -#: src/commands.py:687 +#: src/commands.py:703 msgid "IRI" msgstr "" -#: src/commands.py:693 +#: src/commands.py:709 msgid "email" msgstr "" -#: src/commands.py:703 src/commands.py:711 +#: src/commands.py:719 src/commands.py:727 msgid "http url" msgstr "" -#: src/commands.py:718 +#: src/commands.py:734 msgid "command name" msgstr "" -#: src/commands.py:726 +#: src/commands.py:742 msgid "ip" msgstr "" -#: src/commands.py:732 +#: src/commands.py:748 msgid "letter" msgstr "" -#: src/commands.py:764 +#: src/commands.py:780 msgid "plugin" msgstr "" -#: src/commands.py:772 +#: src/commands.py:788 msgid "irc color" msgstr "" @@ -357,46 +357,60 @@ msgid "" " supybot.protocols.irc.umodes" msgstr "" -#: src/conf.py:424 +#: src/conf.py:423 +msgid "" +"Determines what vhost the bot will bind to before\n" +" connecting a server (IRC, HTTP, ...) via IPv4. If empty, defaults to\n" +" supybot.protocols.irc.vhost" +msgstr "" + +#: src/conf.py:427 +msgid "" +"Determines what vhost the bot will bind to before\n" +" connecting a server (IRC, HTTP, ...) via IPv6. If empty, defaults to\n" +" supybot.protocols.irc.vhostv6" +msgstr "" + +#: src/conf.py:433 msgid "" "Determines what SASL username will be used on %s. This should\n" " be the bot's account name." msgstr "" -#: src/conf.py:427 +#: src/conf.py:436 msgid "Determines what SASL password will be used on %s." msgstr "" -#: src/conf.py:430 +#: src/conf.py:439 msgid "" "Determines what SASL ECDSA key (if any) will be used on %s.\n" " The public key must be registered with NickServ for SASL\n" " ECDSA-NIST256P-CHALLENGE to work." msgstr "" -#: src/conf.py:435 +#: src/conf.py:444 msgid "" "Determines what SASL mechanisms will be tried and in which order.\n" " " msgstr "" -#: src/conf.py:438 +#: src/conf.py:447 msgid "" "Determines whether the bot will abort the connection if the\n" " none of the enabled SASL mechanism succeeded." msgstr "" -#: src/conf.py:441 +#: src/conf.py:450 msgid "" "If not empty, determines the hostname:port of the socks proxy that\n" " will be used to connect to this network." msgstr "" -#: src/conf.py:461 +#: src/conf.py:470 msgid "Determines how urls should be formatted." msgstr "" -#: src/conf.py:469 +#: src/conf.py:478 msgid "" "Determines how timestamps\n" " printed for human reading should be formatted. Refer to the Python\n" @@ -404,51 +418,51 @@ msgid "" " time formats." msgstr "" -#: src/conf.py:484 +#: src/conf.py:493 msgid "" "Determines whether elapsed times will be given\n" " as \"1 day, 2 hours, 3 minutes, and 15 seconds\" or as \"1d 2h 3m 15s\"." msgstr "" -#: src/conf.py:495 +#: src/conf.py:504 msgid "" "Maximum number of items in a list\n" " before the end is replaced with 'and others'. Set to 0 to always\n" " show the entire list." msgstr "" -#: src/conf.py:512 +#: src/conf.py:521 msgid "other" msgstr "" -#: src/conf.py:517 +#: src/conf.py:526 msgid "" "Determines the absolute maximum length of\n" " the bot's reply -- no reply will be passed through the bot with a length\n" " greater than this." msgstr "" -#: src/conf.py:522 +#: src/conf.py:531 msgid "" "Determines whether the bot will break up long\n" " messages into chunks and allow users to use the 'more' command to get the\n" " remaining chunks." msgstr "" -#: src/conf.py:527 +#: src/conf.py:536 msgid "" "Determines what the maximum number of\n" " chunks (for use with the 'more' command) will be." msgstr "" -#: src/conf.py:531 +#: src/conf.py:540 msgid "" "Determines how long individual chunks\n" " will be. If set to 0, uses our super-tweaked,\n" " get-the-most-out-of-an-individual-message default." msgstr "" -#: src/conf.py:536 +#: src/conf.py:545 msgid "" "Determines how many mores will be sent\n" " instantly (i.e., without the use of the more command, immediately when\n" @@ -456,7 +470,15 @@ msgid "" " required for all but the first chunk." msgstr "" -#: src/conf.py:542 +#: src/conf.py:552 +msgid "" +"Determines how many mores will be sent\n" +" instantly (i.e., without the use of the more command, immediately when\n" +" they are formed) when sending messages in private. Defaults to 0, which means\n" +" that it defaults to the generic supybot.reply.mores.instant value." +msgstr "" + +#: src/conf.py:558 msgid "" "Determines whether the bot will send\n" " multi-message replies in a single message. This defaults to True \n" @@ -464,7 +486,7 @@ msgid "" " the bot will send multi-message replies on multiple lines." msgstr "" -#: src/conf.py:548 +#: src/conf.py:564 msgid "" "Determines whether the bot will reply with an\n" " error message when it is addressed but not given a valid command. If this\n" @@ -472,14 +494,14 @@ msgid "" " override the normal behavior." msgstr "" -#: src/conf.py:555 +#: src/conf.py:571 msgid "" "Determines whether error messages that result\n" " from bugs in the bot will show a detailed error message (the uncaught\n" " exception) or a generic error message." msgstr "" -#: src/conf.py:559 +#: src/conf.py:575 msgid "" "Determines whether the bot will send error\n" " messages to users in private. You might want to do this in order to keep\n" @@ -487,7 +509,7 @@ msgid "" " supybot.reply.error.withNotice." msgstr "" -#: src/conf.py:564 +#: src/conf.py:580 msgid "" "Determines whether the bot will send error\n" " messages to users via NOTICE instead of PRIVMSG. You might want to do this\n" @@ -497,7 +519,7 @@ msgid "" " in most IRC clients." msgstr "" -#: src/conf.py:571 +#: src/conf.py:587 msgid "" "Determines whether the bot will *not* provide\n" " details in the error\n" @@ -507,34 +529,34 @@ msgid "" " running certain commands." msgstr "" -#: src/conf.py:579 +#: src/conf.py:595 msgid "" "Determines whether the bot will reply\n" " privately when replying in a channel, rather than replying to the whole\n" " channel." msgstr "" -#: src/conf.py:584 +#: src/conf.py:600 msgid "" "Determines whether the bot will reply with a\n" " notice when replying in a channel, rather than replying with a privmsg as\n" " normal." msgstr "" -#: src/conf.py:590 +#: src/conf.py:606 msgid "" "Determines whether the bot will reply with a\n" " notice when it is sending a private message, in order not to open a /query\n" " window in clients." msgstr "" -#: src/conf.py:595 +#: src/conf.py:611 msgid "" "Determines whether the bot will always prefix\n" " the user's nick to its reply to that user's command." msgstr "" -#: src/conf.py:599 +#: src/conf.py:615 msgid "" "Determines whether the bot should attempt to\n" " reply to all messages even if they don't address it (either via its nick\n" @@ -542,7 +564,7 @@ msgid "" " to set supybot.reply.whenNotCommand to False." msgstr "" -#: src/conf.py:605 +#: src/conf.py:621 msgid "" "Determines whether the bot will allow you to\n" " send channel-related commands outside of that channel. Sometimes people\n" @@ -551,7 +573,7 @@ msgid "" " itself." msgstr "" -#: src/conf.py:612 +#: src/conf.py:628 msgid "" "Determines whether the bot will unidentify\n" " someone when that person changes their nick. Setting this to True\n" @@ -559,7 +581,7 @@ msgid "" " little greater security." msgstr "" -#: src/conf.py:618 +#: src/conf.py:634 msgid "" "Determines whether the bot will always join a\n" " channel when it's invited. If this value is False, the bot will only join\n" @@ -567,7 +589,7 @@ msgid "" " explicitly told to join the channel using the Admin.join command)." msgstr "" -#: src/conf.py:624 +#: src/conf.py:640 msgid "" "Supybot normally replies with the full help\n" " whenever a user misuses a command. If this value is set to True, the bot\n" @@ -575,7 +597,7 @@ msgid "" " help) rather than the full help." msgstr "" -#: src/conf.py:639 +#: src/conf.py:655 msgid "" "Determines what prefix characters the bot will\n" " reply to. A prefix character is a single character that the bot will use\n" @@ -586,7 +608,7 @@ msgid "" " assume it is being addressed." msgstr "" -#: src/conf.py:648 +#: src/conf.py:664 msgid "" "Determines what strings the\n" " bot will reply to when they are at the beginning of the message. Whereas\n" @@ -596,89 +618,89 @@ msgid "" " prefixed by either @@ or ??." msgstr "" -#: src/conf.py:655 +#: src/conf.py:671 msgid "" "Determines whether the bot will reply when\n" " people address it by its nick, rather than with a prefix character." msgstr "" -#: src/conf.py:658 +#: src/conf.py:674 msgid "" "Determines whether the bot will reply when\n" " people address it by its nick at the end of the message, rather than at\n" " the beginning." msgstr "" -#: src/conf.py:662 +#: src/conf.py:678 msgid "" "Determines what extra nicks\n" " the bot will always respond to when addressed by, even if its current nick\n" " is something else." msgstr "" -#: src/conf.py:672 +#: src/conf.py:688 msgid "The operation succeeded." msgstr "" -#: src/conf.py:673 +#: src/conf.py:689 msgid "" "Determines what message the bot replies with when a command succeeded.\n" " If this configuration variable is empty, no success message will be\n" " sent." msgstr "" -#: src/conf.py:678 +#: src/conf.py:694 msgid "" "An error has occurred and has been logged.\n" -" Please contact this bot's administrator for more information." +" Please contact this bot's administrator for more information.\n" +" If this configuration variable is empty, no generic error message will be sent." msgstr "" -#: src/conf.py:679 +#: src/conf.py:697 msgid "" -"\n" -" Determines what error message the bot gives when it wants to be\n" +"Determines what error message the bot gives when it wants to be\n" " ambiguous." msgstr "" -#: src/conf.py:684 +#: src/conf.py:701 msgid "" "An error has occurred and has been logged.\n" " Check the logs for more information." msgstr "" -#: src/conf.py:685 +#: src/conf.py:702 msgid "" "Determines what error\n" " message the bot gives to the owner when it wants to be ambiguous." msgstr "" -#: src/conf.py:689 +#: src/conf.py:706 msgid "" "Your hostmask doesn't match or your password\n" " is wrong." msgstr "" -#: src/conf.py:690 +#: src/conf.py:707 msgid "" "Determines what message the bot replies with when\n" " someone tries to use a command that requires being identified or having a\n" " password and neither credential is correct." msgstr "" -#: src/conf.py:696 +#: src/conf.py:713 msgid "" "I can't find %s in my user\n" " database. If you didn't give a user name, then I might not know what your\n" " user is, and you'll need to identify before this command might work." msgstr "" -#: src/conf.py:699 +#: src/conf.py:716 msgid "" "Determines what error message the bot replies with when someone tries\n" " to accessing some information on a user the bot doesn't know about." msgstr "" -#: src/conf.py:703 +#: src/conf.py:720 msgid "" "You must be registered to use this command.\n" " If you are already registered, you must either identify (using the identify\n" @@ -686,14 +708,14 @@ msgid "" " \"hostmask add\" command)." msgstr "" -#: src/conf.py:706 +#: src/conf.py:723 msgid "" "Determines what error message the bot\n" " replies with when someone tries to do something that requires them to be\n" " registered but they're not currently recognized." msgstr "" -#: src/conf.py:711 +#: src/conf.py:728 msgid "" "You don't have the %s capability. If you\n" " think that you should have this capability, be sure that you are identified\n" @@ -701,14 +723,14 @@ msgid "" " identified." msgstr "" -#: src/conf.py:714 +#: src/conf.py:731 msgid "" "Determines what error message is given when the bot\n" " is telling someone they aren't cool enough to use the command they tried to\n" " use." msgstr "" -#: src/conf.py:719 +#: src/conf.py:736 msgid "" "You're missing some capability you need.\n" " This could be because you actually possess the anti-capability for the\n" @@ -720,7 +742,7 @@ msgid "" " what you want to do." msgstr "" -#: src/conf.py:727 +#: src/conf.py:744 msgid "" "Determines what generic error message is given when the bot is telling\n" " someone that they aren't cool enough to use the command they tried to use,\n" @@ -728,37 +750,37 @@ msgid "" " explicit capability for whatever reason." msgstr "" -#: src/conf.py:733 +#: src/conf.py:750 msgid "" "That operation cannot be done in a\n" " channel." msgstr "" -#: src/conf.py:734 +#: src/conf.py:751 msgid "" "Determines what error messages the bot sends to people\n" " who try to do things in a channel that really should be done in\n" " private." msgstr "" -#: src/conf.py:739 +#: src/conf.py:756 msgid "" "This may be a bug. If you think it is,\n" " please file a bug report at\n" " <https://github.com/progval/Limnoria/issues>." msgstr "" -#: src/conf.py:742 +#: src/conf.py:759 msgid "" "Determines what message the bot sends when it thinks you've\n" " encountered a bug that the developers don't know about." msgstr "" -#: src/conf.py:749 +#: src/conf.py:766 msgid "$Type #$id: $text (added by $username at $at)" msgstr "" -#: src/conf.py:750 +#: src/conf.py:767 msgid "" "Format used by generic database plugins (Lart, Dunno, Prase, Success,\n" " Quote, ...) to show an entry. You can use the following variables:\n" @@ -766,14 +788,14 @@ msgid "" " $at (creation time), $userid/$username/$nick (author)." msgstr "" -#: src/conf.py:760 +#: src/conf.py:777 msgid "" "A floating point number of seconds to throttle\n" " snarfed URLs, in order to prevent loops between two bots snarfing the same\n" " URLs and having the snarfed URL in the output of the snarf message." msgstr "" -#: src/conf.py:765 +#: src/conf.py:782 msgid "" "Determines the number of seconds\n" " between running the upkeep function that flushes (commits) open databases,\n" @@ -781,7 +803,7 @@ msgid "" " level." msgstr "" -#: src/conf.py:771 +#: src/conf.py:788 msgid "" "Determines whether the bot will periodically\n" " flush data and configuration files to disk. Generally, the only time\n" @@ -792,27 +814,27 @@ msgid "" " permanent, you must edit the registry yourself." msgstr "" -#: src/conf.py:797 +#: src/conf.py:814 msgid "" "Determines what characters are valid for quoting\n" " arguments to commands in order to prevent them from being tokenized.\n" " " msgstr "" -#: src/conf.py:804 +#: src/conf.py:821 msgid "" "Determines whether the bot will allow nested\n" " commands, which rule. You definitely should keep this on." msgstr "" -#: src/conf.py:807 +#: src/conf.py:824 msgid "" "Determines what the maximum number of\n" " nested commands will be; users will receive an error if they attempt\n" " commands more nested than this." msgstr "" -#: src/conf.py:816 +#: src/conf.py:833 msgid "" "Supybot allows you to specify what brackets\n" " are used for your nested commands. Valid sets of brackets include\n" @@ -822,21 +844,21 @@ msgid "" " channel." msgstr "" -#: src/conf.py:823 +#: src/conf.py:840 msgid "" "Supybot allows nested commands. Enabling this\n" " option will allow nested commands with a syntax similar to UNIX pipes, for\n" " example: 'bot: foo | bar'." msgstr "" -#: src/conf.py:828 +#: src/conf.py:845 msgid "" "Determines what commands have default\n" " plugins set, and which plugins are set to be the default for each of those\n" " commands." msgstr "" -#: src/conf.py:834 +#: src/conf.py:851 msgid "" "Determines what plugins automatically get precedence over all\n" " other plugins when selecting a default plugin for a command. By\n" @@ -846,7 +868,7 @@ msgid "" " case-sensitive." msgstr "" -#: src/conf.py:844 +#: src/conf.py:861 msgid "" "Allows this bot's owner user to use commands\n" " that grants them shell access. This config variable exists in case you want\n" @@ -856,19 +878,19 @@ msgid "" " used to indirectly gain shell access." msgstr "" -#: src/conf.py:859 +#: src/conf.py:876 msgid "" "Determines the interval used for\n" " the history storage." msgstr "" -#: src/conf.py:862 +#: src/conf.py:879 msgid "" "Determines whether the bot will defend itself\n" " against command-flooding." msgstr "" -#: src/conf.py:865 +#: src/conf.py:882 msgid "" "Determines how many commands users are\n" " allowed per minute. If a user sends more than this many commands in any\n" @@ -876,25 +898,25 @@ msgid "" " supybot.abuse.flood.command.punishment seconds." msgstr "" -#: src/conf.py:870 +#: src/conf.py:887 msgid "" "Determines how many seconds the bot\n" " will ignore users who flood it with commands." msgstr "" -#: src/conf.py:873 +#: src/conf.py:890 msgid "" "Determines whether the bot will notify people\n" " that they're being ignored for command flooding." msgstr "" -#: src/conf.py:877 +#: src/conf.py:894 msgid "" "Determines whether the bot will defend itself\n" " against invalid command-flooding." msgstr "" -#: src/conf.py:880 +#: src/conf.py:897 msgid "" "Determines how many invalid commands users\n" " are allowed per minute. If a user sends more than this many invalid\n" @@ -905,7 +927,7 @@ msgid "" " commands than for them to flood with valid commands." msgstr "" -#: src/conf.py:888 +#: src/conf.py:905 msgid "" "Determines how many seconds the bot\n" " will ignore users who flood it with invalid commands. Typically, this\n" @@ -914,61 +936,67 @@ msgid "" " commands than for them to flood with valid commands." msgstr "" -#: src/conf.py:894 +#: src/conf.py:911 msgid "" "Determines whether the bot will notify people\n" " that they're being ignored for invalid command flooding." msgstr "" -#: src/conf.py:903 +#: src/conf.py:920 msgid "" "Determines the default length of time a\n" " driver should block waiting for input." msgstr "" -#: src/conf.py:911 +#: src/conf.py:928 msgid "" "Determines what driver module the \n" " bot will use. Current, the only (and default) driver is Socket." msgstr "" -#: src/conf.py:915 +#: src/conf.py:932 +msgid "" +"Determines the minimum time the bot will\n" +" wait before attempting to reconnect to an IRC server." +msgstr "" + +#: src/conf.py:936 msgid "" "Determines the maximum time the bot will\n" " wait before attempting to reconnect to an IRC server. The bot may, of\n" " course, reconnect earlier if possible." msgstr "" -#: src/conf.py:967 +#: src/conf.py:988 msgid "" "Determines what directory configuration data is\n" " put into." msgstr "" -#: src/conf.py:970 +#: src/conf.py:991 msgid "Determines what directory data is put into." msgstr "" -#: src/conf.py:972 +#: src/conf.py:993 msgid "" "Determines what directory backup data is put\n" " into. Set it to /dev/null to disable backup (it is a special value,\n" " so it also works on Windows and systems without /dev/null)." msgstr "" -#: src/conf.py:979 +#: src/conf.py:1000 msgid "" "Determines what directory temporary files\n" " are put into." msgstr "" -#: src/conf.py:982 +#: src/conf.py:1003 msgid "" "Determines what directory files of the\n" " web server (templates, custom images, ...) are put into." msgstr "" -#: src/conf.py:995 +#: src/conf.py:1016 msgid "" "Determines what directories\n" " the bot will look for plugins in. Accepts a comma-separated list of\n" @@ -978,7 +1006,7 @@ msgid "" " [config supybot.directories.plugins], newPluginDirectory'." msgstr "" -#: src/conf.py:1003 +#: src/conf.py:1024 msgid "" "List of all plugins that were\n" " ever loaded. Currently has no effect whatsoever. You probably want to use\n" @@ -986,7 +1014,7 @@ msgid "" " instead of this." msgstr "" -#: src/conf.py:1008 +#: src/conf.py:1029 msgid "" "Determines whether the bot will always load\n" " important plugins (Admin, Channel, Config, Misc, Owner, and User)\n" @@ -996,28 +1024,28 @@ msgid "" " enough to change the value of this variable appropriately :)" msgstr "" -#: src/conf.py:1036 +#: src/conf.py:1063 msgid "" "Determines what databases are available for use. If this\n" " value is not configured (that is, if its value is empty) then sane defaults\n" " will be provided." msgstr "" -#: src/conf.py:1042 +#: src/conf.py:1069 msgid "" "Determines what filename will be used\n" " for the users database. This file will go into the directory specified by\n" " the supybot.directories.conf variable." msgstr "" -#: src/conf.py:1046 +#: src/conf.py:1073 msgid "" "Determines how long it takes identification to\n" " time out. If the value is less than or equal to zero, identification never\n" " times out." msgstr "" -#: src/conf.py:1050 +#: src/conf.py:1077 msgid "" "Determines whether the bot will allow users to\n" " unregister their users. This can wreak havoc with already-existing\n" @@ -1027,35 +1055,35 @@ msgid "" " " msgstr "" -#: src/conf.py:1059 +#: src/conf.py:1086 msgid "" "Determines what filename will be used\n" " for the ignores database. This file will go into the directory specified\n" " by the supybot.directories.conf variable." msgstr "" -#: src/conf.py:1065 +#: src/conf.py:1092 msgid "" "Determines what filename will be used\n" " for the channels database. This file will go into the directory specified\n" " by the supybot.directories.conf variable." msgstr "" -#: src/conf.py:1071 +#: src/conf.py:1098 msgid "" "Determines what filename will be used\n" " for the networks database. This file will go into the directory specified\n" " by the supybot.directories.conf variable." msgstr "" -#: src/conf.py:1103 +#: src/conf.py:1130 msgid "" "Determines whether the bot will require user\n" " registration to use 'add' commands in database-based Supybot\n" " plugins." msgstr "" -#: src/conf.py:1107 +#: src/conf.py:1134 msgid "" "Determines whether database-based plugins that\n" " can be channel-specific will be so. This can be overridden by individual\n" @@ -1066,7 +1094,7 @@ msgid "" " to share a certain channel's databases globally." msgstr "" -#: src/conf.py:1115 +#: src/conf.py:1142 msgid "" "Determines what channel global\n" " (non-channel-specific) databases will be considered a part of. This is\n" @@ -1078,7 +1106,7 @@ msgid "" " for your channel." msgstr "" -#: src/conf.py:1124 +#: src/conf.py:1151 msgid "" "Determines whether another channel's global\n" " (non-channel-specific) databases will be allowed to link to this channel's\n" @@ -1087,13 +1115,13 @@ msgid "" " " msgstr "" -#: src/conf.py:1142 +#: src/conf.py:1169 msgid "" "Determines\n" " whether CDB databases will be allowed as a database implementation." msgstr "" -#: src/conf.py:1145 +#: src/conf.py:1172 msgid "" "Determines how often CDB databases will have\n" " their modifications flushed to disk. When the number of modified records\n" @@ -1101,13 +1129,13 @@ msgid "" " will be entirely flushed to disk." msgstr "" -#: src/conf.py:1237 +#: src/conf.py:1337 msgid "" "Determines what will be used as the\n" " default banmask style." msgstr "" -#: src/conf.py:1241 +#: src/conf.py:1341 msgid "" "Determines whether the bot will strictly\n" " follow the RFC; currently this only affects what strings are\n" @@ -1116,7 +1144,7 @@ msgid "" " then you you should set this to False." msgstr "" -#: src/conf.py:1248 +#: src/conf.py:1348 msgid "" "Determines whether the bot will enable\n" " draft/experimental extensions of the IRC protocol. Setting this to True\n" @@ -1125,13 +1153,13 @@ msgid "" " doing." msgstr "" -#: src/conf.py:1255 +#: src/conf.py:1355 msgid "" "Determines what certificate file (if any) the bot\n" " will use connect with SSL sockets by default." msgstr "" -#: src/conf.py:1259 +#: src/conf.py:1359 msgid "" "Determines what user modes the bot will request\n" " from the server when it first connects. Many people might choose +i; some\n" @@ -1139,33 +1167,33 @@ msgid "" " that you should be given a fake host." msgstr "" -#: src/conf.py:1265 +#: src/conf.py:1365 msgid "" "Determines what vhost the bot will bind to before\n" " connecting a server (IRC, HTTP, ...) via IPv4." msgstr "" -#: src/conf.py:1269 +#: src/conf.py:1369 msgid "" "Determines what vhost the bot will bind to before\n" " connecting a server (IRC, HTTP, ...) via IPv6." msgstr "" -#: src/conf.py:1273 +#: src/conf.py:1373 msgid "" "Determines how many old messages the bot will\n" " keep around in its history. Changing this variable will not take effect\n" " on a network until it is reconnected." msgstr "" -#: src/conf.py:1278 +#: src/conf.py:1378 msgid "" "A floating point number of seconds to throttle\n" " queued messages -- that is, messages will not be sent faster than once per\n" " throttleTime seconds." msgstr "" -#: src/conf.py:1283 +#: src/conf.py:1383 msgid "" "Determines whether the bot will send PINGs to\n" " the server it's connected to in order to keep the connection alive and\n" @@ -1174,13 +1202,13 @@ msgid "" " some strange server issues." msgstr "" -#: src/conf.py:1290 +#: src/conf.py:1390 msgid "" "Determines the number of seconds between sending\n" " pings to the server, if pings are being sent to the server." msgstr "" -#: src/conf.py:1295 +#: src/conf.py:1395 msgid "" "Determines whether the bot will refuse\n" " duplicated messages to be queued for delivery to the server. This is a\n" @@ -1189,13 +1217,13 @@ msgid "" " doing certain kinds of plugin hacking." msgstr "" -#: src/conf.py:1303 +#: src/conf.py:1403 msgid "" "Determines how many seconds must elapse between\n" " JOINs sent to the server." msgstr "" -#: src/conf.py:1311 +#: src/conf.py:1411 msgid "" "Determines how many bytes the bot will\n" " 'peek' at when looking through a URL for a doctype or title or something\n" @@ -1203,26 +1231,26 @@ msgid "" " found what it was looking for." msgstr "" -#: src/conf.py:1335 +#: src/conf.py:1435 msgid "" "Determines what HTTP proxy all HTTP requests should go\n" " through. The value should be of the form 'host:port'." msgstr "" -#: src/conf.py:1375 +#: src/conf.py:1475 msgid "" "If set, the Accept-Language HTTP header will be set to this\n" " value for requests. Useful for overriding the auto-detected language based on\n" " the server's location." msgstr "" -#: src/conf.py:1381 +#: src/conf.py:1481 msgid "" "If set, the User-Agent HTTP header will be set to a randomly\n" " selected value from this comma-separated list of strings for requests." msgstr "" -#: src/conf.py:1389 +#: src/conf.py:1489 msgid "" "Determines whether server certificates\n" " will be verified, which checks whether the server certificate is signed\n" @@ -1231,45 +1259,45 @@ msgid "" " is set." msgstr "" -#: src/conf.py:1416 +#: src/conf.py:1516 msgid "" "If true, uses IPV6_V6ONLY to disable\n" " forwaring of IPv4 traffic to IPv6 sockets. On *nix, has the same\n" " effect as setting kernel variable net.ipv6.bindv6only to 1." msgstr "" -#: src/conf.py:1420 +#: src/conf.py:1520 msgid "" "Space-separated list of IPv4 hosts the HTTP server\n" " will bind." msgstr "" -#: src/conf.py:1423 +#: src/conf.py:1523 msgid "" "Space-separated list of IPv6 hosts the HTTP server will\n" " bind." msgstr "" -#: src/conf.py:1426 +#: src/conf.py:1526 msgid "" "Determines what port the HTTP server will\n" " bind." msgstr "" -#: src/conf.py:1429 +#: src/conf.py:1529 msgid "" "Determines whether the server will stay\n" " alive if no plugin is using it. This also means that the server will\n" " start even if it is not used." msgstr "" -#: src/conf.py:1433 +#: src/conf.py:1533 msgid "" "Determines the path of the file served as\n" " favicon to browsers." msgstr "" -#: src/conf.py:1436 +#: src/conf.py:1536 msgid "" "Determines the public URL of the server.\n" " By default it is http://<hostname>:<port>/, but you will want to change\n" @@ -1277,7 +1305,7 @@ msgid "" " the bot." msgstr "" -#: src/conf.py:1446 +#: src/conf.py:1546 msgid "" "Determines whether the bot will ignore\n" " unidentified users by default. Of course, that'll make it\n" @@ -1285,18 +1313,18 @@ msgid "" " without adding their hostmasks, but that's your problem to solve." msgstr "" -#: src/conf.py:1453 +#: src/conf.py:1553 msgid "" "A string that is the external IP of the bot. If this is the\n" " empty string, the bot will attempt to find out its IP dynamically (though\n" " sometimes that doesn't work, hence this variable). This variable is not used\n" " by Limnoria and its built-in plugins: see supybot.protocols.irc.vhost /\n" -" supybot.protocols.irc.vhost6 to set the IRC bind host, and\n" +" supybot.protocols.irc.vhostv6 to set the IRC bind host, and\n" " supybot.servers.http.hosts4 / supybot.servers.http.hosts6 to set the HTTP\n" " server bind host." msgstr "" -#: src/conf.py:1472 +#: src/conf.py:1572 msgid "" "Determines what the default timeout for socket\n" " objects will be. This means that *all* sockets will timeout when this many\n" @@ -1304,7 +1332,7 @@ msgid "" " that uses the sockets)." msgstr "" -#: src/conf.py:1478 +#: src/conf.py:1578 msgid "" "Determines what file the bot should write its PID\n" " (Process ID) to, so you can kill it more easily. If it's left unset (as is\n" @@ -1312,13 +1340,13 @@ msgid "" " changes to this variable to take effect." msgstr "" -#: src/conf.py:1488 +#: src/conf.py:1588 msgid "" "Determines whether the bot will automatically\n" " thread all commands." msgstr "" -#: src/conf.py:1491 +#: src/conf.py:1591 msgid "" "Determines whether the bot will automatically\n" " flush all flushers *very* often. Useful for debugging when you don't know\n" @@ -1333,7 +1361,7 @@ msgstr "" msgid "Here is a list of the plugins that have a Web interface:" msgstr "" -#: src/httpserver.py:245 +#: src/httpserver.py:352 msgid "" "\n" " This is a default response of the Supybot HTTP server. If you see this\n" @@ -1341,7 +1369,7 @@ msgid "" " neither overriden this message or defined an handler for this query." msgstr "" -#: src/httpserver.py:291 +#: src/httpserver.py:398 msgid "" "\n" " I am a pretty clever IRC bot, but I suck at serving Web pages, particulary\n" @@ -1350,63 +1378,63 @@ msgid "" " trained to help you in such a case." msgstr "" -#: src/httpserver.py:310 +#: src/httpserver.py:417 msgid "Request not handled." msgstr "" -#: src/httpserver.py:317 +#: src/httpserver.py:424 msgid "No plugins available." msgstr "" -#: src/httpserver.py:335 src/httpserver.py:353 src/httpserver.py:391 +#: src/httpserver.py:442 src/httpserver.py:460 src/httpserver.py:498 msgid "Request not handled" msgstr "" -#: src/httpserver.py:378 +#: src/httpserver.py:485 msgid "No favicon set." msgstr "" -#: src/ircutils.py:573 +#: src/ircutils.py:592 msgid "is an op on %L" msgstr "" -#: src/ircutils.py:575 +#: src/ircutils.py:594 msgid "is a halfop on %L" msgstr "" -#: src/ircutils.py:577 +#: src/ircutils.py:596 msgid "is voiced on %L" msgstr "" -#: src/ircutils.py:580 +#: src/ircutils.py:599 msgid "is also on %L" msgstr "" -#: src/ircutils.py:582 +#: src/ircutils.py:601 msgid "is on %L" msgstr "" -#: src/ircutils.py:585 +#: src/ircutils.py:604 msgid "isn't on any publicly visible channels" msgstr "" -#: src/ircutils.py:593 src/ircutils.py:594 src/ircutils.py:600 +#: src/ircutils.py:612 src/ircutils.py:613 src/ircutils.py:619 msgid "<unknown>" msgstr "" -#: src/ircutils.py:602 +#: src/ircutils.py:621 msgid " %s is away: %s." msgstr "" -#: src/ircutils.py:607 +#: src/ircutils.py:626 msgid " identified" msgstr "" -#: src/ircutils.py:613 +#: src/ircutils.py:632 msgid "%s (%s) has been%s on server %s since %s (idle for %s). %s %s.%s" msgstr "" -#: src/ircutils.py:617 +#: src/ircutils.py:636 msgid "%s (%s) has been%s on server %s and disconnected on %s." msgstr "" @@ -1430,83 +1458,83 @@ msgstr "" msgid "Passwords don't match." msgstr "" -#: src/registry.py:219 +#: src/registry.py:224 msgid "%r is not a valid entry in %r" msgstr "" -#: src/registry.py:568 +#: src/registry.py:573 msgid "Value must be either True or False (or On or Off), not %r." msgstr "" -#: src/registry.py:585 +#: src/registry.py:590 msgid "Value must be an integer, not %r." msgstr "" -#: src/registry.py:595 +#: src/registry.py:600 msgid "Value must be a non-negative integer, not %r." msgstr "" -#: src/registry.py:604 +#: src/registry.py:609 msgid "Value must be positive (non-zero) integer, not %r." msgstr "" -#: src/registry.py:613 +#: src/registry.py:618 msgid "Value must be a floating-point number, not %r." msgstr "" -#: src/registry.py:629 +#: src/registry.py:634 msgid "Value must be a floating-point number greater than zero, not %r." msgstr "" -#: src/registry.py:640 +#: src/registry.py:645 msgid "Value must be a floating point number in the range [0, 1], not %r." msgstr "" -#: src/registry.py:655 +#: src/registry.py:660 msgid "Value should be a valid Python string, not %r." msgstr "" -#: src/registry.py:693 +#: src/registry.py:698 msgid "Valid values include %L." msgstr "" -#: src/registry.py:695 +#: src/registry.py:700 msgid "Valid values include %L, not %%r." msgstr "" -#: src/registry.py:769 +#: src/registry.py:777 msgid "Value must be a valid regular expression, not %r." msgstr "" -#: src/utils/gen.py:113 +#: src/utils/gen.py:115 msgid "year" msgstr "" -#: src/utils/gen.py:116 +#: src/utils/gen.py:118 msgid "week" msgstr "" -#: src/utils/gen.py:119 +#: src/utils/gen.py:121 msgid "day" msgstr "" -#: src/utils/gen.py:122 +#: src/utils/gen.py:124 msgid "hour" msgstr "" -#: src/utils/gen.py:126 +#: src/utils/gen.py:128 msgid "minute" msgstr "" -#: src/utils/gen.py:129 +#: src/utils/gen.py:131 msgid "second" msgstr "" -#: src/utils/gen.py:138 +#: src/utils/gen.py:140 msgid "%s ago" msgstr "" -#: src/utils/str.py:349 +#: src/utils/str.py:375 msgid "and" msgstr "" diff --git a/locales/ru.po b/locales/ru.po index 2deb2a54a..0dded98ff 100644 --- a/locales/ru.po +++ b/locales/ru.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2024-08-25 11:06+0300\n" "Last-Translator: ssdaniel24 <bo7oaonteg2m__at__mailDOTru>\n" "Language-Team: \n" @@ -20,7 +20,7 @@ msgstr "Ошибка: " msgid "Error: I tried to send you an empty message." msgstr "Ошибка: я пытался отправить вам пустое сообщение." -#: src/callbacks.py:361 +#: src/callbacks.py:365 msgid "" "Missing \"%s\". You may want to quote your arguments with double quotes in " "order to prevent extra brackets from being evaluated as nested commands." @@ -29,7 +29,7 @@ msgstr "" "кавычки, чтобы предотвратить считывание дополнительных скобок как вложенных " "команд." -#: src/callbacks.py:390 +#: src/callbacks.py:394 msgid "" "\"|\" with nothing preceding. I obviously can't do a pipe with nothing " "before the |." @@ -37,7 +37,7 @@ msgstr "" "\"I\", перед которым ничего не стоит. Я не могу создать конвейер, если перед " "этим символом ничего не написано." -#: src/callbacks.py:398 +#: src/callbacks.py:402 msgid "" "Spurious \"%s\". You may want to quote your arguments with double quotes in " "order to prevent extra brackets from being evaluated as nested commands." @@ -45,7 +45,7 @@ msgstr "" "Ложный \"%s\". Возможно вы захотите заключить аргументы в двойные кавычки, " "чтобы предотвратить считывание дополнительных скобок как вложенных команд." -#: src/callbacks.py:407 +#: src/callbacks.py:411 msgid "" "\"|\" with nothing following. I obviously can't do a pipe with nothing " "after the |." @@ -53,31 +53,31 @@ msgstr "" "\"I\", за которым ничего не стоит. Я не могу создать конвейер, если после " "этого символом ничего не написано." -#: src/callbacks.py:623 +#: src/callbacks.py:630 msgid "%s is not a valid %s." msgstr "%s не является допустимым %s." -#: src/callbacks.py:625 +#: src/callbacks.py:632 msgid "That's not a valid %s." msgstr "Это не является допустимым %s." -#: src/callbacks.py:794 +#: src/callbacks.py:812 msgid "(XX more messages)" msgstr "(XX сообщений осталось)" -#: src/callbacks.py:849 +#: src/callbacks.py:873 msgid "more message" msgstr "сообщение осталось" -#: src/callbacks.py:851 +#: src/callbacks.py:875 msgid "more messages" msgstr "сообщений осталось" -#: src/callbacks.py:986 +#: src/callbacks.py:1011 msgid "You've attempted more nesting than is currently allowed on this bot." msgstr "Вы попробовали вложить больше команд, чем это дозволено в боте сейчас." -#: src/callbacks.py:1171 +#: src/callbacks.py:1198 msgid "" "The command %q is available in the %L plugins. Please specify the plugin " "whose command you wish to call by using its name as a command before %q." @@ -85,7 +85,7 @@ msgstr "" "Команда %q доступна в плагинах %L. Уточните из какого плагина вы пытаетесь " "вызвать команду, указав его название как команду перед %q." -#: src/callbacks.py:1356 +#: src/callbacks.py:1383 msgid "" "Determines what commands are currently disabled. Such\n" " commands will not appear in command lists, etc. They will appear not " @@ -95,162 +95,162 @@ msgstr "" "Определяет, какие команды сейчас отключены. Эти команды не будут появляться " "в списках команд. Будет казаться, что их даже не существует." -#: src/callbacks.py:1595 +#: src/callbacks.py:1622 msgid "Invalid arguments for %s." msgstr "Недопустимые аргументы для %s." -#: src/callbacks.py:1627 +#: src/callbacks.py:1654 msgid "The %q command has no help." msgstr "Команда %q не имеет справки." -#: src/commands.py:284 +#: src/commands.py:291 msgid "integer" msgstr "целое число" -#: src/commands.py:295 +#: src/commands.py:302 msgid "non-integer value" msgstr "нецелое значение" -#: src/commands.py:306 +#: src/commands.py:313 msgid "floating point number" msgstr "дробное число" -#: src/commands.py:315 +#: src/commands.py:322 msgid "positive integer" msgstr "положительное целое число" -#: src/commands.py:319 +#: src/commands.py:326 msgid "non-negative integer" msgstr "неотрицательное целое число" -#: src/commands.py:322 +#: src/commands.py:329 msgid "index" msgstr "индекс" -#: src/commands.py:347 +#: src/commands.py:354 msgid "number of seconds" msgstr "число секунд" -#: src/commands.py:354 +#: src/commands.py:361 msgid "boolean" msgstr "логический тип" -#: src/commands.py:368 src/commands.py:375 src/commands.py:384 -#: src/commands.py:391 src/commands.py:400 +#: src/commands.py:375 src/commands.py:382 src/commands.py:391 +#: src/commands.py:398 src/commands.py:407 msgid "do that" msgstr "сделайте это" -#: src/commands.py:371 src/commands.py:378 src/commands.py:387 -#: src/commands.py:394 src/commands.py:403 +#: src/commands.py:378 src/commands.py:385 src/commands.py:394 +#: src/commands.py:401 src/commands.py:410 msgid "I'm not even in %s." msgstr "Я даже не присутствую в %s." -#: src/commands.py:373 +#: src/commands.py:380 msgid "I need to be voiced to %s." msgstr "Мне требуется голос (voice) в %s." -#: src/commands.py:381 +#: src/commands.py:388 msgid "I need to be at least voiced to %s." msgstr "Мне требуется хотя бы голос (voice) в %s." -#: src/commands.py:389 +#: src/commands.py:396 msgid "I need to be halfopped to %s." msgstr "Мне требуется быть полуоператором в %s." -#: src/commands.py:397 +#: src/commands.py:404 msgid "I need to be at least halfopped to %s." msgstr "Мне требуется хотя бы быть полуоператором в %s." -#: src/commands.py:405 +#: src/commands.py:412 msgid "I need to be opped to %s." msgstr "Мне требуется быть оператором в %s." -#: src/commands.py:411 src/commands.py:569 +#: src/commands.py:418 src/commands.py:585 msgid "channel" msgstr "канал" -#: src/commands.py:424 +#: src/commands.py:431 msgid "nick or hostmask" msgstr "ник или маска хоста" -#: src/commands.py:478 +#: src/commands.py:492 msgid "regular expression" msgstr "регулярное выражение" -#: src/commands.py:489 src/commands.py:493 +#: src/commands.py:503 src/commands.py:507 msgid "nick" msgstr "ник" -#: src/commands.py:490 +#: src/commands.py:504 msgid "That nick is too long for this server." msgstr "Данный ник слишком длинный для этого сервера." -#: src/commands.py:501 +#: src/commands.py:515 msgid "I haven't seen %s." msgstr "Я ещё не видел %s." -#: src/commands.py:548 src/commands.py:567 +#: src/commands.py:564 src/commands.py:583 msgid "I'm not in %s." msgstr "Меня нет в %s." -#: src/commands.py:552 +#: src/commands.py:568 msgid "This command may only be given in a channel that I am in." msgstr "" "Данная команда может быть отправлена только в канал, в котором присутствую я." -#: src/commands.py:565 +#: src/commands.py:581 msgid "You must be in %s." msgstr "Вы должны быть в %s." -#: src/commands.py:576 +#: src/commands.py:592 msgid "%s is not in %s." msgstr "%s отсутствует в %s." -#: src/commands.py:624 +#: src/commands.py:640 msgid "You must not give the empty string as an argument." msgstr "Вы не можете передавать пустую строку как аргумент." -#: src/commands.py:632 +#: src/commands.py:648 msgid "You must not give a string containing spaces as an argument." msgstr "Вы не можете передавать строку с пробелами как аргумент." -#: src/commands.py:642 +#: src/commands.py:658 msgid "This message must be sent in a channel." msgstr "Это сообщение должно быть отправлено в канале." -#: src/commands.py:674 src/commands.py:681 +#: src/commands.py:690 src/commands.py:697 msgid "url" msgstr "url" -#: src/commands.py:687 +#: src/commands.py:703 msgid "IRI" msgstr "IRI" -#: src/commands.py:693 +#: src/commands.py:709 msgid "email" msgstr "э. почта" -#: src/commands.py:703 src/commands.py:711 +#: src/commands.py:719 src/commands.py:727 msgid "http url" msgstr "http url" -#: src/commands.py:718 +#: src/commands.py:734 msgid "command name" msgstr "название команды" -#: src/commands.py:726 +#: src/commands.py:742 msgid "ip" msgstr "ip" -#: src/commands.py:732 +#: src/commands.py:748 msgid "letter" msgstr "буква" -#: src/commands.py:764 +#: src/commands.py:780 msgid "plugin" msgstr "плагин" -#: src/commands.py:772 +#: src/commands.py:788 msgid "irc color" msgstr "irc-цвет" @@ -418,7 +418,29 @@ msgstr "" "впервые присоединится. Если не указано, то используется supybot.protocols." "irc.umodes." -#: src/conf.py:424 +#: src/conf.py:423 +#, fuzzy +msgid "" +"Determines what vhost the bot will bind to before\n" +" connecting a server (IRC, HTTP, ...) via IPv4. If empty, defaults " +"to\n" +" supybot.protocols.irc.vhost" +msgstr "" +"Определяет, к какому виртуальному хосту будет привязан бот перед " +"подключением к серверу (IRC, HTTP, ...) через IPv4." + +#: src/conf.py:427 +#, fuzzy +msgid "" +"Determines what vhost the bot will bind to before\n" +" connecting a server (IRC, HTTP, ...) via IPv6. If empty, defaults " +"to\n" +" supybot.protocols.irc.vhostv6" +msgstr "" +"Определяет, к какому виртуальному хосту будет привязан бот перед " +"подключением к серверу (IRC, HTTP, ...) через IPv6." + +#: src/conf.py:433 msgid "" "Determines what SASL username will be used on %s. This should\n" " be the bot's account name." @@ -426,11 +448,11 @@ msgstr "" "Определяет имя пользователя для SASL, которое будет использоваться в %s. Это " "должно быть именем аккаунта бота." -#: src/conf.py:427 +#: src/conf.py:436 msgid "Determines what SASL password will be used on %s." msgstr "Определяет пароль SASL, который будет использован в %s." -#: src/conf.py:430 +#: src/conf.py:439 msgid "" "Determines what SASL ECDSA key (if any) will be used on %s.\n" " The public key must be registered with NickServ for SASL\n" @@ -440,14 +462,14 @@ msgstr "" "Публичный ключ должен быть зарегистрирован с помощью NickServ для SASL ECDSA-" "NIST256P-CHALLENGE, чтобы это работало." -#: src/conf.py:435 +#: src/conf.py:444 msgid "" "Determines what SASL mechanisms will be tried and in which order.\n" " " msgstr "" "Определяет, в каком порядке и какие механизмы SASL должны быть опробованы." -#: src/conf.py:438 +#: src/conf.py:447 msgid "" "Determines whether the bot will abort the connection if the\n" " none of the enabled SASL mechanism succeeded." @@ -455,7 +477,7 @@ msgstr "" "Определяет, будет ли бот разрывать соединение, если ни один из включённых " "механизмов SASL не сработал успешно." -#: src/conf.py:441 +#: src/conf.py:450 msgid "" "If not empty, determines the hostname:port of the socks proxy that\n" " will be used to connect to this network." @@ -463,11 +485,11 @@ msgstr "" "Если указано, то определяет хост:порт socks-прокси, которое будет " "использовать для подключения к этой сети." -#: src/conf.py:461 +#: src/conf.py:470 msgid "Determines how urls should be formatted." msgstr "Определяет форматирование url-адресов." -#: src/conf.py:469 +#: src/conf.py:478 msgid "" "Determines how timestamps\n" " printed for human reading should be formatted. Refer to the Python\n" @@ -479,7 +501,7 @@ msgstr "" "модулю time в документации Python, чтобы увидеть допустимые символы для " "форматирования." -#: src/conf.py:484 +#: src/conf.py:493 msgid "" "Determines whether elapsed times will be given\n" " as \"1 day, 2 hours, 3 minutes, and 15 seconds\" or as \"1d 2h 3m 15s\"." @@ -487,7 +509,7 @@ msgstr "" "Определяет, как будет указано прошедшее время: \"1 день, 2 часа, 3 минуты, и " "15 секунд\" или \"1д 2ч 3м 15с\"." -#: src/conf.py:495 +#: src/conf.py:504 msgid "" "Maximum number of items in a list\n" " before the end is replaced with 'and others'. Set to 0 to always\n" @@ -496,12 +518,12 @@ msgstr "" "Максимальное число позиций в списке, которые показываются до надписи 'и " "другие'. При установке значения в 0 всегда будет показываться весь список." -#: src/conf.py:512 +#: src/conf.py:521 #, fuzzy msgid "other" msgstr "другие" -#: src/conf.py:517 +#: src/conf.py:526 msgid "" "Determines the absolute maximum length of\n" " the bot's reply -- no reply will be passed through the bot with a " @@ -511,7 +533,7 @@ msgstr "" "Определяет абсолютный максимум длины ответа бота -- ботом не будут " "отправлены ответы длиннее указанного значения." -#: src/conf.py:522 +#: src/conf.py:531 msgid "" "Determines whether the bot will break up long\n" " messages into chunks and allow users to use the 'more' command to get " @@ -522,7 +544,7 @@ msgstr "" "пользователям использовать команду 'more', чтобы получить оставшиеся части " "сообщения." -#: src/conf.py:527 +#: src/conf.py:536 msgid "" "Determines what the maximum number of\n" " chunks (for use with the 'more' command) will be." @@ -530,7 +552,7 @@ msgstr "" "Определяет максимальное число частей сообщения (для использования команды " "'more')." -#: src/conf.py:531 +#: src/conf.py:540 msgid "" "Determines how long individual chunks\n" " will be. If set to 0, uses our super-tweaked,\n" @@ -539,7 +561,7 @@ msgstr "" "Определяет длину отдельных частей сообщения. Если установлено в 0, то " "используется наше значение по умолчанию." -#: src/conf.py:536 +#: src/conf.py:545 msgid "" "Determines how many mores will be sent\n" " instantly (i.e., without the use of the more command, immediately when\n" @@ -552,7 +574,21 @@ msgstr "" "умолчанию задано 1, что означает, что для получения каждой части сообщения " "нужен будет вызов команды 'more'." -#: src/conf.py:542 +#: src/conf.py:552 +#, fuzzy +msgid "" +"Determines how many mores will be sent\n" +" instantly (i.e., without the use of the more command, immediately when\n" +" they are formed) when sending messages in private. Defaults to 0, which " +"means\n" +" that it defaults to the generic supybot.reply.mores.instant value." +msgstr "" +"Определяет сколько ещё частей сообщения будет отправлено сразу, т.е. без " +"использования команды 'more', сразу после того, как команда выполнилась. По " +"умолчанию задано 1, что означает, что для получения каждой части сообщения " +"нужен будет вызов команды 'more'." + +#: src/conf.py:558 msgid "" "Determines whether the bot will send\n" " multi-message replies in a single message. This defaults to True \n" @@ -564,7 +600,7 @@ msgstr "" "переполнения бота. Если установлено в False, то бот будет отправлять ответы " "в отдельных сообщениях." -#: src/conf.py:548 +#: src/conf.py:564 msgid "" "Determines whether the bot will reply with an\n" " error message when it is addressed but not given a valid command. If " @@ -576,7 +612,7 @@ msgstr "" "неправильную команду. Если указано False, то в этих случаях бот будет " "молчать, если другие плагины не изменят это поведение." -#: src/conf.py:555 +#: src/conf.py:571 msgid "" "Determines whether error messages that result\n" " from bugs in the bot will show a detailed error message (the uncaught\n" @@ -585,7 +621,7 @@ msgstr "" "Определяет, будут ли сообщения об ошибках в результате багов содержать " "подробное сообщение об ошибке (не перехваченное исключение)." -#: src/conf.py:559 +#: src/conf.py:575 msgid "" "Determines whether the bot will send error\n" " messages to users in private. You might want to do this in order to " @@ -598,7 +634,7 @@ msgstr "" "сообщения в канале к минимуму. Это может быть использовано в сочетании с " "supybot.reply.error.withNotice." -#: src/conf.py:564 +#: src/conf.py:580 msgid "" "Determines whether the bot will send error\n" " messages to users via NOTICE instead of PRIVMSG. You might want to do " @@ -616,7 +652,7 @@ msgstr "" "ошибки в личных сообщениях не будут создавать новое окно переписки в " "большинстве IRC-клиентов." -#: src/conf.py:571 +#: src/conf.py:587 msgid "" "Determines whether the bot will *not* provide\n" " details in the error\n" @@ -633,7 +669,7 @@ msgstr "" "смогли понять устройство системы безопасности, не позволяющую им выполнять " "привилегированные команды." -#: src/conf.py:579 +#: src/conf.py:595 msgid "" "Determines whether the bot will reply\n" " privately when replying in a channel, rather than replying to the " @@ -643,7 +679,7 @@ msgstr "" "Определяет, будет ли бот отвечать в личный диалог на сообщение, а не в самом " "канале." -#: src/conf.py:584 +#: src/conf.py:600 msgid "" "Determines whether the bot will reply with a\n" " notice when replying in a channel, rather than replying with a privmsg " @@ -653,7 +689,7 @@ msgstr "" "Определяет, будет ли бот отвечать на сообщение в канале через NOTICE, нежели " "через PRIVMSG как обычно." -#: src/conf.py:590 +#: src/conf.py:606 msgid "" "Determines whether the bot will reply with a\n" " notice when it is sending a private message, in order not to open a /" @@ -663,7 +699,7 @@ msgstr "" "Определяет, будет ли бот отвечать на личное сообщение через NOTICE, чтобы не " "открывать /query окно на клиентах." -#: src/conf.py:595 +#: src/conf.py:611 msgid "" "Determines whether the bot will always prefix\n" " the user's nick to its reply to that user's command." @@ -671,7 +707,7 @@ msgstr "" "Определяет, будет ли бот использовать ник пользователя в качестве префикса к " "своему ответу на команду пользователя." -#: src/conf.py:599 +#: src/conf.py:615 msgid "" "Determines whether the bot should attempt to\n" " reply to all messages even if they don't address it (either via its " @@ -685,7 +721,7 @@ msgstr "" "Если вы укажите True, то вы точно захотите установить и supybot.reply." "whenNotCommand в False." -#: src/conf.py:605 +#: src/conf.py:621 msgid "" "Determines whether the bot will allow you to\n" " send channel-related commands outside of that channel. Sometimes " @@ -699,7 +735,7 @@ msgstr "" "команда, которая меняет поведение канала (например, Filter.outfilter), была " "отправлена вне этого самого канала." -#: src/conf.py:612 +#: src/conf.py:628 msgid "" "Determines whether the bot will unidentify\n" " someone when that person changes their nick. Setting this to True\n" @@ -710,7 +746,7 @@ msgstr "" "Если установить значение в True, то бот будет отслеживать такие изменения. " "По умолчанию для большей безопасности значение - False." -#: src/conf.py:618 +#: src/conf.py:634 msgid "" "Determines whether the bot will always join a\n" " channel when it's invited. If this value is False, the bot will only " @@ -721,11 +757,11 @@ msgid "" msgstr "" "Определяет, будет ли бот всегда присоединятся к каналу, куда он был " "приглашён. Если указано False, то бот будет присоединяться к каналам по " -"приглашению только, если приглашающий пользователь имеет привилегию 'admin' " -"(или если боту явно дана команда присоединиться к каналу с помощью Admin." -"join)." +"приглашению только, если приглашающий пользователь имеет привилегию " +"'admin' (или если боту явно дана команда присоединиться к каналу с помощью " +"Admin.join)." -#: src/conf.py:624 +#: src/conf.py:640 msgid "" "Supybot normally replies with the full help\n" " whenever a user misuses a command. If this value is set to True, the " @@ -737,7 +773,7 @@ msgstr "" "команды пользователем. Если указано True, то бот ответит только справкой о " "синтаксисе команды (первая строка справки) вместо полной справки." -#: src/conf.py:639 +#: src/conf.py:655 msgid "" "Determines what prefix characters the bot will\n" " reply to. A prefix character is a single character that the bot will " @@ -756,7 +792,7 @@ msgstr "" "свой ник. Каждый символ в строке считывается как символ-префикс, поэтому у " "бота их может быть несколько, и на все он будет отзываться." -#: src/conf.py:648 +#: src/conf.py:664 msgid "" "Determines what strings the\n" " bot will reply to when they are at the beginning of the message. " @@ -772,7 +808,7 @@ msgstr "" "пробел, поэтому вы можете указать что-то вроде '@@ ??', и бот будет отвечать " "на все сообщения, если у них будет в начале @@ или ??." -#: src/conf.py:655 +#: src/conf.py:671 msgid "" "Determines whether the bot will reply when\n" " people address it by its nick, rather than with a prefix character." @@ -780,7 +816,7 @@ msgstr "" "Определяет, будет ли бот отвечать людям, если те вызывают его через его ник, " "а не через символ-префикс." -#: src/conf.py:658 +#: src/conf.py:674 msgid "" "Determines whether the bot will reply when\n" " people address it by its nick at the end of the message, rather than at\n" @@ -789,7 +825,7 @@ msgstr "" "Определяет, будет ли бот отвечать, когда люди вызывают его по нику в конце " "сообщения, а не в начале." -#: src/conf.py:662 +#: src/conf.py:678 msgid "" "Determines what extra nicks\n" " the bot will always respond to when addressed by, even if its current " @@ -799,11 +835,11 @@ msgstr "" "Определяет дополнительные ники, на которые бот всегда будет отзываться, даже " "если его текущий ник отличается." -#: src/conf.py:672 +#: src/conf.py:688 msgid "The operation succeeded." msgstr "Операция прошла успешно." -#: src/conf.py:673 +#: src/conf.py:689 msgid "" "Determines what message the bot replies with when a command succeeded.\n" " If this configuration variable is empty, no success message will be\n" @@ -813,24 +849,27 @@ msgstr "" "выполнения команды. Если эта настройка пуста, то сообщение не будет " "отправлено." -#: src/conf.py:678 +#: src/conf.py:694 +#, fuzzy msgid "" "An error has occurred and has been logged.\n" -" Please contact this bot's administrator for more information." +" Please contact this bot's administrator for more information.\n" +" If this configuration variable is empty, no generic error message will " +"be sent." msgstr "" "Произошла ошибка, записана в журнал. Пожалуйста, свяжитесь с админом этого " "бота для получения доп. информации." -#: src/conf.py:679 +#: src/conf.py:697 +#, fuzzy msgid "" -"\n" -" Determines what error message the bot gives when it wants to be\n" +"Determines what error message the bot gives when it wants to be\n" " ambiguous." msgstr "" "Определяет содержание общего сообщения об ошибке, которым бот отвечает на не " "выполнившиеся команды." -#: src/conf.py:684 +#: src/conf.py:701 msgid "" "An error has occurred and has been logged.\n" " Check the logs for more information." @@ -838,7 +877,7 @@ msgstr "" "Произошла ошибка, записана в журнал. Проверьте его для дополнительной " "информации." -#: src/conf.py:685 +#: src/conf.py:702 msgid "" "Determines what error\n" " message the bot gives to the owner when it wants to be ambiguous." @@ -846,13 +885,13 @@ msgstr "" "Определяет, какое сообщение об ошибке бот выдает владельцу, если оно " "неоднозначное." -#: src/conf.py:689 +#: src/conf.py:706 msgid "" "Your hostmask doesn't match or your password\n" " is wrong." msgstr "Ваша маска хоста не совпадает, или ваш пароль неверный." -#: src/conf.py:690 +#: src/conf.py:707 #, fuzzy msgid "" "Determines what message the bot replies with when\n" @@ -863,7 +902,7 @@ msgstr "" "Определяет содержание сообщения, которым бот отвечает, когда кто-то пытается " "использовать команду, требующую идентификации или наличия пароля." -#: src/conf.py:696 +#: src/conf.py:713 msgid "" "I can't find %s in my user\n" " database. If you didn't give a user name, then I might not know what " @@ -874,7 +913,7 @@ msgstr "" "пользователя, то возможно я вас не знаю, и вам необходимо " "идентифицироваться, прежде чем эта команда сможет быть выполнена." -#: src/conf.py:699 +#: src/conf.py:716 msgid "" "Determines what error message the bot replies with when someone tries\n" " to accessing some information on a user the bot doesn't know about." @@ -882,7 +921,7 @@ msgstr "" "Определяет содержание сообщения об ошибке, которым бот отвечает, если кто-то " "пытается получить какую-либо информацию о пользователе, неизвестном боту." -#: src/conf.py:703 +#: src/conf.py:720 msgid "" "You must be registered to use this command.\n" " If you are already registered, you must either identify (using the " @@ -895,7 +934,7 @@ msgstr "" "identify, или добавить хост-маску, совпадающую с вашей текущей, используя " "команду \"hostmask add\"." -#: src/conf.py:706 +#: src/conf.py:723 msgid "" "Determines what error message the bot\n" " replies with when someone tries to do something that requires them to " @@ -905,7 +944,7 @@ msgstr "" "Определяет содержание сообщение об ошибке, которым бот отвечает, когда кто-" "то пытается выполнить команду, требующую регистрации, но бот его не помнит." -#: src/conf.py:711 +#: src/conf.py:728 msgid "" "You don't have the %s capability. If you\n" " think that you should have this capability, be sure that you are " @@ -917,7 +956,7 @@ msgstr "" "привилегия, убедитесь, что в своей идентификации, прежде чем повторить " "попытку. Команда 'whoami' может сказать вам, идентифицированы ли вы." -#: src/conf.py:714 +#: src/conf.py:731 #, fuzzy msgid "" "Determines what error message is given when the bot\n" @@ -928,7 +967,7 @@ msgstr "" "Определяет содержание сообщения об ошибке, которым бот отвечает, если кто-то " "недостаточно крут для использования команды, которую тот пытался запустить." -#: src/conf.py:719 +#: src/conf.py:736 msgid "" "You're missing some capability you need.\n" " This could be because you actually possess the anti-capability for the\n" @@ -950,7 +989,7 @@ msgstr "" "соответствует вашим возможностям. В любом случае вы не можете делать то, что " "хотите." -#: src/conf.py:727 +#: src/conf.py:744 msgid "" "Determines what generic error message is given when the bot is telling\n" " someone that they aren't cool enough to use the command they tried to " @@ -963,13 +1002,13 @@ msgstr "" "кода, вызвавшего ошибку errorNoCapability, не предоставил явную информацию " "по какой-либо причине." -#: src/conf.py:733 +#: src/conf.py:750 msgid "" "That operation cannot be done in a\n" " channel." msgstr "Эта операция не может быть выполнена в канале." -#: src/conf.py:734 +#: src/conf.py:751 msgid "" "Determines what error messages the bot sends to people\n" " who try to do things in a channel that really should be done in\n" @@ -978,7 +1017,7 @@ msgstr "" "Определяет содержание сообщения об ошибке, которое бот отправляет людям, " "пытающимся сделать то, что должны делать в личной переписке." -#: src/conf.py:739 +#: src/conf.py:756 msgid "" "This may be a bug. If you think it is,\n" " please file a bug report at\n" @@ -987,7 +1026,7 @@ msgstr "" "Возможно, что вы столкнулись ошибкой. Если это так, то, пожалуйста, сообщите " "о ней в <https://github.com/progval/Limnoria/issues>." -#: src/conf.py:742 +#: src/conf.py:759 msgid "" "Determines what message the bot sends when it thinks you've\n" " encountered a bug that the developers don't know about." @@ -995,11 +1034,11 @@ msgstr "" "Определяет содержание сообщения, которое отправит бот, если он посчитает, " "что вы столкнулись с ошибкой, неизвестной разработчикам." -#: src/conf.py:749 +#: src/conf.py:766 msgid "$Type #$id: $text (added by $username at $at)" msgstr "$Type #$id: $text (добавлено пользователем $username в $at)" -#: src/conf.py:750 +#: src/conf.py:767 msgid "" "Format used by generic database plugins (Lart, Dunno, Prase, Success,\n" " Quote, ...) to show an entry. You can use the following variables:\n" @@ -1011,7 +1050,7 @@ msgstr "" "поля: $type/$types/$Type/$Types (название плагина и его варианты), $id, " "$text, $at (время создания), $userid/$username/$nick (автор)." -#: src/conf.py:760 +#: src/conf.py:777 #, fuzzy msgid "" "A floating point number of seconds to throttle\n" @@ -1024,7 +1063,7 @@ msgstr "" "перехватывающих одни и те же URL-адреса, и включения перехваченного URL-" "адреса в результат сообщения о перехвате." -#: src/conf.py:765 +#: src/conf.py:782 msgid "" "Determines the number of seconds\n" " between running the upkeep function that flushes (commits) open " @@ -1036,7 +1075,7 @@ msgstr "" "записывает открытые базы данных, собирает мусор и журналирует некоторую " "полезную статистику на отладочном уровне." -#: src/conf.py:771 +#: src/conf.py:788 msgid "" "Determines whether the bot will periodically\n" " flush data and configuration files to disk. Generally, the only time\n" @@ -1054,7 +1093,7 @@ msgstr "" "значение в False в самом боте, то вам придётся изменить конфиг " "самостоятельно, чтобы сделать это изменения постоянным." -#: src/conf.py:797 +#: src/conf.py:814 msgid "" "Determines what characters are valid for quoting\n" " arguments to commands in order to prevent them from being tokenized.\n" @@ -1063,7 +1102,7 @@ msgstr "" "Определяет, какие символы допустимы для изолирования аргументов команд, " "чтобы предотвратить их токенизацию." -#: src/conf.py:804 +#: src/conf.py:821 msgid "" "Determines whether the bot will allow nested\n" " commands, which rule. You definitely should keep this on." @@ -1071,7 +1110,7 @@ msgstr "" "Определяет, будет ли бот разрешать использование вложенных команд. Это " "определённо стоит оставить включённым." -#: src/conf.py:807 +#: src/conf.py:824 msgid "" "Determines what the maximum number of\n" " nested commands will be; users will receive an error if they attempt\n" @@ -1081,7 +1120,7 @@ msgstr "" "сообщение об ошибке, если попытаются выполнить больше вложенных команд, чем " "в этой настройке." -#: src/conf.py:816 +#: src/conf.py:833 msgid "" "Supybot allows you to specify what brackets\n" " are used for your nested commands. Valid sets of brackets include\n" @@ -1096,7 +1135,7 @@ msgstr "" "они не могут использоваться в никах. Если эта строка пуста, то в этом канале " "вложенные команды будут запрещены." -#: src/conf.py:823 +#: src/conf.py:840 msgid "" "Supybot allows nested commands. Enabling this\n" " option will allow nested commands with a syntax similar to UNIX pipes, " @@ -1107,7 +1146,7 @@ msgstr "" "вам использовать команды с синтаксисом, похожим на конвейеры UNIX, например: " "'bot: foo | bar'." -#: src/conf.py:828 +#: src/conf.py:845 msgid "" "Determines what commands have default\n" " plugins set, and which plugins are set to be the default for each of " @@ -1117,7 +1156,7 @@ msgstr "" "Определяет, для каких команд установлены плагины по умолчанию, и какие " "плагины будут установлены по умолчанию для каждой из этих команд." -#: src/conf.py:834 +#: src/conf.py:851 msgid "" "Determines what plugins automatically get precedence over all\n" " other plugins when selecting a default plugin for a command. By\n" @@ -1132,7 +1171,7 @@ msgstr "" "Не стоит менять это, если вы не знаете, что пытаетесь сделать. Иначе " "учитывайте, что эта настройка чувствительна к регистру." -#: src/conf.py:844 +#: src/conf.py:861 msgid "" "Allows this bot's owner user to use commands\n" " that grants them shell access. This config variable exists in case you " @@ -1150,19 +1189,19 @@ msgstr "" "владельца. Установка значения в False также отключит плагины и команды, " "которые могут быть использованы для получения доступа к командной строке." -#: src/conf.py:859 +#: src/conf.py:876 msgid "" "Determines the interval used for\n" " the history storage." msgstr "Определяет интервал для хранения истории." -#: src/conf.py:862 +#: src/conf.py:879 msgid "" "Determines whether the bot will defend itself\n" " against command-flooding." msgstr "Определяет, будет ли бот защищать себя от массовой отправки команд." -#: src/conf.py:865 +#: src/conf.py:882 msgid "" "Determines how many commands users are\n" " allowed per minute. If a user sends more than this many commands in " @@ -1175,7 +1214,7 @@ msgstr "" "их будут игнорировать в течение некоторого количества секунд, указанного в " "supybot.abuse.flood.command.punishment." -#: src/conf.py:870 +#: src/conf.py:887 msgid "" "Determines how many seconds the bot\n" " will ignore users who flood it with commands." @@ -1183,7 +1222,7 @@ msgstr "" "Определяет количество секунд, в течение которых бот будет игнорировать " "пользователей, засыпающих его командами." -#: src/conf.py:873 +#: src/conf.py:890 msgid "" "Determines whether the bot will notify people\n" " that they're being ignored for command flooding." @@ -1191,7 +1230,7 @@ msgstr "" "Определяет, будет ли бот уведомлять пользователей о том, что их игнорируют " "из-за слишком большого количества отправленных ими команд." -#: src/conf.py:877 +#: src/conf.py:894 msgid "" "Determines whether the bot will defend itself\n" " against invalid command-flooding." @@ -1199,7 +1238,7 @@ msgstr "" "Определяет, будет ли бот защищать себя от массовой отправки ему недопустимых " "команд." -#: src/conf.py:880 +#: src/conf.py:897 msgid "" "Determines how many invalid commands users\n" " are allowed per minute. If a user sends more than this many invalid\n" @@ -1218,7 +1257,7 @@ msgstr "" "вероятно (но гораздо более раздражающе), что пользователи будут засорять " "каналы недопустимыми командами, чем правильными командами." -#: src/conf.py:888 +#: src/conf.py:905 msgid "" "Determines how many seconds the bot\n" " will ignore users who flood it with invalid commands. Typically, this\n" @@ -1233,7 +1272,7 @@ msgstr "" "пользователи будут засорять каналы недопустимыми командами, чем правильными " "командами." -#: src/conf.py:894 +#: src/conf.py:911 msgid "" "Determines whether the bot will notify people\n" " that they're being ignored for invalid command flooding." @@ -1241,7 +1280,7 @@ msgstr "" "Определяет, будет ли бот уведомлять пользователей о том, что их игнорируют " "из-за слишком большого количества отправленных ими команд." -#: src/conf.py:903 +#: src/conf.py:920 msgid "" "Determines the default length of time a\n" " driver should block waiting for input." @@ -1249,7 +1288,7 @@ msgstr "" "Определяет продолжительность времени по умолчанию, в течение которой драйвер " "должен блокироваться в ожидании ввода." -#: src/conf.py:911 +#: src/conf.py:928 msgid "" "Determines what driver module the \n" " bot will use. Current, the only (and default) driver is Socket." @@ -1257,7 +1296,17 @@ msgstr "" "Определяет, какой модуль драйвера будет использовать бот. Текущим и " "единственным (и по умолчанию) драйвером является Socket." -#: src/conf.py:915 +#: src/conf.py:932 +#, fuzzy +msgid "" +"Determines the minimum time the bot will\n" +" wait before attempting to reconnect to an IRC server." +msgstr "" +"Определяет максимальное время, которое бот будет ждать перед попыткой " +"переподключения к IRC-серверу. Конечно, бот может переподключиться раньше, " +"если это возможно." + +#: src/conf.py:936 msgid "" "Determines the maximum time the bot will\n" " wait before attempting to reconnect to an IRC server. The bot may, of\n" @@ -1267,17 +1316,17 @@ msgstr "" "переподключения к IRC-серверу. Конечно, бот может переподключиться раньше, " "если это возможно." -#: src/conf.py:967 +#: src/conf.py:988 msgid "" "Determines what directory configuration data is\n" " put into." msgstr "Определяет, в какой каталог помещаются данные настроек." -#: src/conf.py:970 +#: src/conf.py:991 msgid "Determines what directory data is put into." msgstr "Определяет, в какой каталог помещаются данные." -#: src/conf.py:972 +#: src/conf.py:993 msgid "" "Determines what directory backup data is put\n" " into. Set it to /dev/null to disable backup (it is a special value,\n" @@ -1287,13 +1336,13 @@ msgstr "" "его в /dev/null, чтобы отключить резервное копирование (это специальное " "значение, поэтому оно также работает на Windows и системах без /dev/null)." -#: src/conf.py:979 +#: src/conf.py:1000 msgid "" "Determines what directory temporary files\n" " are put into." msgstr "Определяет, в какой каталог будут помещены временные файлы." -#: src/conf.py:982 +#: src/conf.py:1003 msgid "" "Determines what directory files of the\n" " web server (templates, custom images, ...) are put into." @@ -1301,7 +1350,7 @@ msgstr "" "Определяет, в какую директорию будут помещены файлы веб-сервера (шаблоны, " "пользовательские изображения, ...)." -#: src/conf.py:995 +#: src/conf.py:1016 msgid "" "Determines what directories\n" " the bot will look for plugins in. Accepts a comma-separated list of\n" @@ -1318,7 +1367,7 @@ msgstr "" "вы можете сделать так: bot: 'config supybot.directories.plugins [config " "supybot.directories.plugins], newPluginDirectory'." -#: src/conf.py:1003 +#: src/conf.py:1024 msgid "" "List of all plugins that were\n" " ever loaded. Currently has no effect whatsoever. You probably want to " @@ -1330,7 +1379,7 @@ msgstr "" "не имеет никакого эффекта. Вы, вероятно, захотите использовать команды " "'load' или 'unload', или изменить supybot.plugins.<pluginname> вместо этого." -#: src/conf.py:1008 +#: src/conf.py:1029 msgid "" "Determines whether the bot will always load\n" " important plugins (Admin, Channel, Config, Misc, Owner, and User)\n" @@ -1348,7 +1397,7 @@ msgstr "" "которые не хотят загружать эти плагины, достаточно умны, чтобы изменить " "значение этой переменной соответствующим образом :)" -#: src/conf.py:1036 +#: src/conf.py:1063 msgid "" "Determines what databases are available for use. If this\n" " value is not configured (that is, if its value is empty) then sane " @@ -1359,7 +1408,7 @@ msgstr "" "не задано (т.е. если его значение пустое), то будут предоставлены значения " "по умолчанию." -#: src/conf.py:1042 +#: src/conf.py:1069 msgid "" "Determines what filename will be used\n" " for the users database. This file will go into the directory specified " @@ -1370,7 +1419,7 @@ msgstr "" "пользователей. Этот файл будет находиться в каталоге, указанном в supybot." "directories.conf." -#: src/conf.py:1046 +#: src/conf.py:1073 msgid "" "Determines how long it takes identification to\n" " time out. If the value is less than or equal to zero, identification " @@ -1380,7 +1429,7 @@ msgstr "" "Определяет, через какое время идентификация истекает. Если значение меньше " "или равно нулю, идентификация никогда не истечёт." -#: src/conf.py:1050 +#: src/conf.py:1077 msgid "" "Determines whether the bot will allow users to\n" " unregister their users. This can wreak havoc with already-existing\n" @@ -1397,7 +1446,7 @@ msgstr "" "обратите внимание, что это не мешает владельцу бота использовать команду " "unregister)." -#: src/conf.py:1059 +#: src/conf.py:1086 msgid "" "Determines what filename will be used\n" " for the ignores database. This file will go into the directory " @@ -1407,7 +1456,7 @@ msgstr "" "Определяет, какое имя файла будет использоваться для базы данных игноров. " "Этот файл будет находиться в каталоге, указанном в supybot.directories.conf." -#: src/conf.py:1065 +#: src/conf.py:1092 msgid "" "Determines what filename will be used\n" " for the channels database. This file will go into the directory " @@ -1417,7 +1466,7 @@ msgstr "" "Определяет, какое имя файла будет использоваться для базы данных каналов. " "Этот файл будет находиться в каталоге, указанном в supybot.directories.conf." -#: src/conf.py:1071 +#: src/conf.py:1098 msgid "" "Determines what filename will be used\n" " for the networks database. This file will go into the directory " @@ -1427,7 +1476,7 @@ msgstr "" "Определяет, какое имя файла будет использоваться для базы данных сетей. " "Этот файл будет находиться в каталоге, указанном в supybot.directories.conf." -#: src/conf.py:1103 +#: src/conf.py:1130 msgid "" "Determines whether the bot will require user\n" " registration to use 'add' commands in database-based Supybot\n" @@ -1436,7 +1485,7 @@ msgstr "" "Определяет, будет ли бот требовать регистрации пользователя для " "использования команд 'add' в плагинах Supybot, основанных на базах данных." -#: src/conf.py:1107 +#: src/conf.py:1134 msgid "" "Determines whether database-based plugins that\n" " can be channel-specific will be so. This can be overridden by " @@ -1457,7 +1506,7 @@ msgstr "" "plugins.channelSpecific.link соответствующим образом, если вы хотите " "использовать базы данных определенного канала глобально." -#: src/conf.py:1115 +#: src/conf.py:1142 #, fuzzy msgid "" "Determines what channel global\n" @@ -1482,7 +1531,7 @@ msgstr "" "после изменения этой переменной, иначе ваши плагины баз данных могут не " "работать для вашего канала." -#: src/conf.py:1124 +#: src/conf.py:1151 msgid "" "Determines whether another channel's global\n" " (non-channel-specific) databases will be allowed to link to this " @@ -1498,7 +1547,7 @@ msgstr "" "внимание, что бот должен быть перезапущен сразу после изменения этой " "переменной, иначе ваши БД-плагины могут не работать на вашем канале." -#: src/conf.py:1142 +#: src/conf.py:1169 msgid "" "Determines\n" " whether CDB databases will be allowed as a database implementation." @@ -1506,7 +1555,7 @@ msgstr "" "Определяет, будут ли разрешены базы данных CDB в качестве реализации баз " "данных." -#: src/conf.py:1145 +#: src/conf.py:1172 msgid "" "Determines how often CDB databases will have\n" " their modifications flushed to disk. When the number of modified " @@ -1519,7 +1568,7 @@ msgstr "" "Когда число измененных записей превышает эту долю от общего числа записей, " "база данных будет полностью сброшена на диск." -#: src/conf.py:1237 +#: src/conf.py:1337 #, fuzzy msgid "" "Determines what will be used as the\n" @@ -1528,7 +1577,7 @@ msgstr "" "Определяет, что будет использоваться в качестве стиля маски бана по " "умолчанию." -#: src/conf.py:1241 +#: src/conf.py:1341 msgid "" "Determines whether the bot will strictly\n" " follow the RFC; currently this only affects what strings are\n" @@ -1541,7 +1590,7 @@ msgstr "" "сеть, которая требует от вас сообщения с таким ником, как services@this." "network.server, то вам следует установить значение False." -#: src/conf.py:1248 +#: src/conf.py:1348 msgid "" "Determines whether the bot will enable\n" " draft/experimental extensions of the IRC protocol. Setting this to True\n" @@ -1555,7 +1604,7 @@ msgstr "" "вашего бота в любое время без предупреждения и/или необратимо нарушить ваши " "настройки. Поэтому держите значение в False, если вы не знаете, что делаете." -#: src/conf.py:1255 +#: src/conf.py:1355 msgid "" "Determines what certificate file (if any) the bot\n" " will use connect with SSL sockets by default." @@ -1563,7 +1612,7 @@ msgstr "" "Определяет, какой файл сертификата (если таковой есть) бот будет " "использовать для соединения с SSL-сокетами по умолчанию." -#: src/conf.py:1259 +#: src/conf.py:1359 msgid "" "Determines what user modes the bot will request\n" " from the server when it first connects. Many people might choose +i; " @@ -1577,7 +1626,7 @@ msgstr "" "+x, указывающий службам аутентификации в этих сетях, что вам должен быть " "предоставлен фальшивый хост." -#: src/conf.py:1265 +#: src/conf.py:1365 msgid "" "Determines what vhost the bot will bind to before\n" " connecting a server (IRC, HTTP, ...) via IPv4." @@ -1585,7 +1634,7 @@ msgstr "" "Определяет, к какому виртуальному хосту будет привязан бот перед " "подключением к серверу (IRC, HTTP, ...) через IPv4." -#: src/conf.py:1269 +#: src/conf.py:1369 msgid "" "Determines what vhost the bot will bind to before\n" " connecting a server (IRC, HTTP, ...) via IPv6." @@ -1593,7 +1642,7 @@ msgstr "" "Определяет, к какому виртуальному хосту будет привязан бот перед " "подключением к серверу (IRC, HTTP, ...) через IPv6." -#: src/conf.py:1273 +#: src/conf.py:1373 msgid "" "Determines how many old messages the bot will\n" " keep around in its history. Changing this variable will not take " @@ -1604,7 +1653,7 @@ msgstr "" "Изменение этой переменной не будет действовать в сети до тех пор, пока к ней " "не будет выполнено переподключение." -#: src/conf.py:1278 +#: src/conf.py:1378 msgid "" "A floating point number of seconds to throttle\n" " queued messages -- that is, messages will not be sent faster than once " @@ -1614,7 +1663,7 @@ msgstr "" "Дробное число секунд для регулирования сообщений в очереди, то есть " "сообщения не будут отправляться быстрее, чем один раз за throttleTime секунд." -#: src/conf.py:1283 +#: src/conf.py:1383 msgid "" "Determines whether the bot will send PINGs to\n" " the server it's connected to in order to keep the connection alive and\n" @@ -1629,7 +1678,7 @@ msgstr "" "всегда должны ставить его в True, если только вы не исследуете (тестируете) " "загадочные проблемы с сервером." -#: src/conf.py:1290 +#: src/conf.py:1390 msgid "" "Determines the number of seconds between sending\n" " pings to the server, if pings are being sent to the server." @@ -1637,7 +1686,7 @@ msgstr "" "Определяет количество секунд между отправкой пингов на сервер, если таковые " "отправляются на сервер." -#: src/conf.py:1295 +#: src/conf.py:1395 msgid "" "Determines whether the bot will refuse\n" " duplicated messages to be queued for delivery to the server. This is a\n" @@ -1652,14 +1701,14 @@ msgstr "" "случаев это не имеет значения, если только вы не занимаетесь " "экспериментальной разработкой плагинов." -#: src/conf.py:1303 +#: src/conf.py:1403 msgid "" "Determines how many seconds must elapse between\n" " JOINs sent to the server." msgstr "" "Определяет, сколько секунд должно пройти между JOIN, отправленными на сервер." -#: src/conf.py:1311 +#: src/conf.py:1411 msgid "" "Determines how many bytes the bot will\n" " 'peek' at when looking through a URL for a doctype or title or " @@ -1673,7 +1722,7 @@ msgstr "" "того, как прочитает указанное количество байт, даже если не нашел того, что " "искал." -#: src/conf.py:1335 +#: src/conf.py:1435 msgid "" "Determines what HTTP proxy all HTTP requests should go\n" " through. The value should be of the form 'host:port'." @@ -1681,7 +1730,7 @@ msgstr "" "Определяет, через какой HTTP-прокси должны проходить все HTTP-запросы. " "Значение должно иметь вид 'host:port'." -#: src/conf.py:1375 +#: src/conf.py:1475 msgid "" "If set, the Accept-Language HTTP header will be set to this\n" " value for requests. Useful for overriding the auto-detected language " @@ -1692,7 +1741,7 @@ msgstr "" "использоваться это значение. Полезно для переопределения автоматически " "определяемого языка на основе местоположения сервера." -#: src/conf.py:1381 +#: src/conf.py:1481 msgid "" "If set, the User-Agent HTTP header will be set to a randomly\n" " selected value from this comma-separated list of strings for requests." @@ -1701,7 +1750,7 @@ msgstr "" "установлено случайно выбранное значение из этого списка строк, разделенных " "запятыми." -#: src/conf.py:1389 +#: src/conf.py:1489 msgid "" "Determines whether server certificates\n" " will be verified, which checks whether the server certificate is signed\n" @@ -1717,7 +1766,7 @@ msgstr "" "настройка установлена в true, то также определены serverFingerprints или " "authorityCertificate." -#: src/conf.py:1416 +#: src/conf.py:1516 msgid "" "If true, uses IPV6_V6ONLY to disable\n" " forwaring of IPv4 traffic to IPv6 sockets. On *nix, has the same\n" @@ -1727,7 +1776,7 @@ msgstr "" "трафика на IPv6-сокеты. На *nix имеет тот же эффект, что и установка " "переменной ядра net.ipv6.bindv6only в 1." -#: src/conf.py:1420 +#: src/conf.py:1520 msgid "" "Space-separated list of IPv4 hosts the HTTP server\n" " will bind." @@ -1735,7 +1784,7 @@ msgstr "" "Список IPv4-хостов, разделенных пробелами, к которым будет привязан HTTP-" "сервер." -#: src/conf.py:1423 +#: src/conf.py:1523 msgid "" "Space-separated list of IPv6 hosts the HTTP server will\n" " bind." @@ -1743,13 +1792,13 @@ msgstr "" "Список IPv6-хостов, разделенных пробелами, к которым будет привязан HTTP-" "сервер." -#: src/conf.py:1426 +#: src/conf.py:1526 msgid "" "Determines what port the HTTP server will\n" " bind." msgstr "Определяет, к какому порту будет привязан HTTP-сервер." -#: src/conf.py:1429 +#: src/conf.py:1529 msgid "" "Determines whether the server will stay\n" " alive if no plugin is using it. This also means that the server will\n" @@ -1759,13 +1808,13 @@ msgstr "" "не использует. Это также означает, что сервер будет запущен, даже если он не " "используется." -#: src/conf.py:1433 +#: src/conf.py:1533 msgid "" "Determines the path of the file served as\n" " favicon to browsers." msgstr "Определяет путь к файлу, передаваемому браузерам в качестве favicon." -#: src/conf.py:1436 +#: src/conf.py:1536 msgid "" "Determines the public URL of the server.\n" " By default it is http://<hostname>:<port>/, but you will want to change\n" @@ -1776,7 +1825,7 @@ msgstr "" "<port>/, но вы захотите изменить, если перед ботом стоит обратный прокси " "(nginx, apache, ...)." -#: src/conf.py:1446 +#: src/conf.py:1546 msgid "" "Determines whether the bot will ignore\n" " unidentified users by default. Of course, that'll make it\n" @@ -1788,7 +1837,8 @@ msgstr "" "идентификацию этих пользователей в боте без добавления их масок хоста, но " "это уже ваша проблема." -#: src/conf.py:1453 +#: src/conf.py:1553 +#, fuzzy msgid "" "A string that is the external IP of the bot. If this is the\n" " empty string, the bot will attempt to find out its IP dynamically " @@ -1796,7 +1846,7 @@ msgid "" " sometimes that doesn't work, hence this variable). This variable is not " "used\n" " by Limnoria and its built-in plugins: see supybot.protocols.irc.vhost /\n" -" supybot.protocols.irc.vhost6 to set the IRC bind host, and\n" +" supybot.protocols.irc.vhostv6 to set the IRC bind host, and\n" " supybot.servers.http.hosts4 / supybot.servers.http.hosts6 to set the " "HTTP\n" " server bind host." @@ -1808,7 +1858,7 @@ msgstr "" "irc.vhost6 для установки хоста IRC, и supybot.servers.http.hosts4 / supybot." "servers.http.hosts6 для установки хоста HTTP-сервера." -#: src/conf.py:1472 +#: src/conf.py:1572 msgid "" "Determines what the default timeout for socket\n" " objects will be. This means that *all* sockets will timeout when this " @@ -1821,7 +1871,7 @@ msgstr "" "сокеты будут отключаться по истечении указанного количества секунд (если это " "поведение не изменено автором кода, использующего сокеты)." -#: src/conf.py:1478 +#: src/conf.py:1578 msgid "" "Determines what file the bot should write its PID\n" " (Process ID) to, so you can kill it more easily. If it's left unset (as " @@ -1835,7 +1885,7 @@ msgstr "" "по умолчанию), то PID-файл записываться не будет. Чтобы изменения в этой " "переменной вступили в силу, потребуется перезагрузка." -#: src/conf.py:1488 +#: src/conf.py:1588 msgid "" "Determines whether the bot will automatically\n" " thread all commands." @@ -1843,7 +1893,7 @@ msgstr "" "Определяет, будет ли бот автоматически выполнять все команды в отдельных " "потоках." -#: src/conf.py:1491 +#: src/conf.py:1591 msgid "" "Determines whether the bot will automatically\n" " flush all flushers *very* often. Useful for debugging when you don't " @@ -1863,7 +1913,7 @@ msgstr "Индекс веб-сервера Supybot" msgid "Here is a list of the plugins that have a Web interface:" msgstr "Вот список плагинов, имеющих веб-интерфейс:" -#: src/httpserver.py:245 +#: src/httpserver.py:352 msgid "" "\n" " This is a default response of the Supybot HTTP server. If you see this\n" @@ -1874,7 +1924,7 @@ msgstr "" "возможно вы занимаетесь разработкой плагина и не задали это сообщение или не " "задали обработчик для этого запроса." -#: src/httpserver.py:291 +#: src/httpserver.py:398 msgid "" "\n" " I am a pretty clever IRC bot, but I suck at serving Web pages, " @@ -1888,65 +1938,65 @@ msgstr "" "вы только что спровоцировали ошибку 404 (Not Found), а я не способен помочь " "вам в этом случае." -#: src/httpserver.py:310 +#: src/httpserver.py:417 msgid "Request not handled." msgstr "Запрос не обработан." -#: src/httpserver.py:317 +#: src/httpserver.py:424 msgid "No plugins available." msgstr "Нет доступных плагинов." -#: src/httpserver.py:335 src/httpserver.py:353 src/httpserver.py:391 +#: src/httpserver.py:442 src/httpserver.py:460 src/httpserver.py:498 msgid "Request not handled" msgstr "Запрос не обработан" -#: src/httpserver.py:378 +#: src/httpserver.py:485 msgid "No favicon set." msgstr "Нет установленного favicon." -#: src/ircutils.py:573 +#: src/ircutils.py:592 msgid "is an op on %L" msgstr "является оператором в %L" -#: src/ircutils.py:575 +#: src/ircutils.py:594 msgid "is a halfop on %L" msgstr "является полуоператором в %L" -#: src/ircutils.py:577 +#: src/ircutils.py:596 msgid "is voiced on %L" msgstr "имеет voice в %L" -#: src/ircutils.py:580 +#: src/ircutils.py:599 msgid "is also on %L" msgstr "также есть в %L" -#: src/ircutils.py:582 +#: src/ircutils.py:601 msgid "is on %L" msgstr "находится в %L" -#: src/ircutils.py:585 +#: src/ircutils.py:604 msgid "isn't on any publicly visible channels" msgstr "нет ни в одном общедоступном канале" -#: src/ircutils.py:593 src/ircutils.py:594 src/ircutils.py:600 +#: src/ircutils.py:612 src/ircutils.py:613 src/ircutils.py:619 msgid "<unknown>" msgstr "<неизвестный>" -#: src/ircutils.py:602 +#: src/ircutils.py:621 msgid " %s is away: %s." msgstr " %s отсутствует: %s." -#: src/ircutils.py:607 +#: src/ircutils.py:626 msgid " identified" msgstr " идентифицированный" -#: src/ircutils.py:613 +#: src/ircutils.py:632 #, fuzzy msgid "%s (%s) has been%s on server %s since %s (idle for %s). %s %s.%s" msgstr "" "%s (%s) находится%s на сервере %s с %s (простаивает в течение %s). %s %s.%s" -#: src/ircutils.py:617 +#: src/ircutils.py:636 #, fuzzy msgid "%s (%s) has been%s on server %s and disconnected on %s." msgstr "%s (%s) был %s на сервере %s и отключен на %s." @@ -1972,84 +2022,84 @@ msgstr "Повторите пароль: " msgid "Passwords don't match." msgstr "Пароли не совпадают." -#: src/registry.py:219 +#: src/registry.py:224 #, fuzzy msgid "%r is not a valid entry in %r" msgstr "%r не является действительной записью в %r" -#: src/registry.py:568 +#: src/registry.py:573 msgid "Value must be either True or False (or On or Off), not %r." msgstr "Значение должно быть либо True, либо False (или On, или Off), а не %r." -#: src/registry.py:585 +#: src/registry.py:590 msgid "Value must be an integer, not %r." msgstr "Значение должно быть целым числом, а не %r." -#: src/registry.py:595 +#: src/registry.py:600 msgid "Value must be a non-negative integer, not %r." msgstr "Значение должно быть целым неотрицательным числом, а не %r." -#: src/registry.py:604 +#: src/registry.py:609 msgid "Value must be positive (non-zero) integer, not %r." msgstr "Значение должно быть положительным (ненулевым) целым числом, а не %r." -#: src/registry.py:613 +#: src/registry.py:618 msgid "Value must be a floating-point number, not %r." msgstr "Значение должно быть числом с плавающей точкой, а не %r." -#: src/registry.py:629 +#: src/registry.py:634 msgid "Value must be a floating-point number greater than zero, not %r." msgstr "Значение должно быть числом с плавающей точкой больше нуля, а не %r." -#: src/registry.py:640 +#: src/registry.py:645 msgid "Value must be a floating point number in the range [0, 1], not %r." msgstr "" "Значение должно быть числом с плавающей точкой в диапазоне [0, 1], а не %r." -#: src/registry.py:655 +#: src/registry.py:660 msgid "Value should be a valid Python string, not %r." msgstr "Значение должно быть допустимой Python-строкой, а не %r." -#: src/registry.py:693 +#: src/registry.py:698 msgid "Valid values include %L." msgstr "Допустимые значения включают %L." -#: src/registry.py:695 +#: src/registry.py:700 msgid "Valid values include %L, not %%r." msgstr "Допустимые значения включают в себя %L, а не %%r." -#: src/registry.py:769 +#: src/registry.py:777 msgid "Value must be a valid regular expression, not %r." msgstr "Значение должно быть допустимым регулярным выражением, а не %r." -#: src/utils/gen.py:113 +#: src/utils/gen.py:115 msgid "year" msgstr "год" -#: src/utils/gen.py:116 +#: src/utils/gen.py:118 msgid "week" msgstr "неделя" -#: src/utils/gen.py:119 +#: src/utils/gen.py:121 msgid "day" msgstr "день" -#: src/utils/gen.py:122 +#: src/utils/gen.py:124 msgid "hour" msgstr "час" -#: src/utils/gen.py:126 +#: src/utils/gen.py:128 msgid "minute" msgstr "минута" -#: src/utils/gen.py:129 +#: src/utils/gen.py:131 msgid "second" msgstr "секунда" -#: src/utils/gen.py:138 +#: src/utils/gen.py:140 msgid "%s ago" msgstr "%s назад" -#: src/utils/str.py:349 +#: src/utils/str.py:375 msgid "and" msgstr "и" diff --git a/plugins/Admin/messages.pot b/plugins/Admin/messages.pot index f8b09cfad..f1326f9a7 100644 --- a/plugins/Admin/messages.pot +++ b/plugins/Admin/messages.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/plugins/Aka/locales/fi.po b/plugins/Aka/locales/fi.po index 9df0eb539..ecdef4fdc 100644 --- a/plugins/Aka/locales/fi.po +++ b/plugins/Aka/locales/fi.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: Aka plugin for Limnoria\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2014-12-20 13:57+0200\n" "Last-Translator: Mikaela Suomalainen <mikaela.suomalainen@outlook.com>\n" "Language-Team: \n" @@ -32,12 +32,12 @@ msgid "" " browsable through the HTTP server." msgstr "" -#: plugin.py:141 plugin.py:274 plugin.py:732 +#: plugin.py:141 plugin.py:274 plugin.py:728 msgid "This Aka already exists." msgstr "Tämä Aka on jo olemassa." #: plugin.py:170 plugin.py:182 plugin.py:196 plugin.py:301 plugin.py:318 -#: plugin.py:335 plugin.py:912 +#: plugin.py:335 plugin.py:908 msgid "This Aka does not exist." msgstr "Tätä Akaa ei ole olemassa." @@ -90,10 +90,10 @@ msgid "" " Trout\n" " ^^^^^\n" "\n" -" Add an aka, trout, which expects a word as an argument::\n" +" Add an aka, ``trout``, which expects a word as an argument::\n" "\n" -" <jamessan> @aka add trout \"reply action slaps $1 with a large trout" -"\"\n" +" <jamessan> @aka add trout \"reply action slaps $1 with a large " +"trout\"\n" " <bot> jamessan: The operation succeeded.\n" " <jamessan> @trout me\n" " * bot slaps me with a large trout\n" @@ -101,46 +101,38 @@ msgid "" " This ``trout`` aka requires the plugin ``Reply`` to be loaded since it\n" " provides the ``action`` command.\n" "\n" -" LastFM\n" -" ^^^^^^\n" +" Random percentage\n" +" ^^^^^^^^^^^^^^^^^\n" "\n" -" Add an aka, ``lastfm``, which expects a last.fm username and replies " -"with\n" -" their most recently played item::\n" +" Add an aka, ``randpercent``, which returns a random percentage value::\n" "\n" -" @aka add lastfm \"rss [format concat http://ws.audioscrobbler." -"com/1.0/user/ [format concat [web urlquote $1] /recenttracks.rss]]\"\n" +" @aka add randpercent \"squish [dice 1d100]%\"\n" "\n" -" This ``lastfm`` aka requires the following plugins to be loaded: " -"``RSS``,\n" -" ``Format`` and ``Web``.\n" +" This requires the ``Filter`` and ``Games`` plugins to be loaded.\n" "\n" -" ``RSS`` provides ``rss``, ``Format`` provides ``concat`` and ``Web`` " -"provides\n" -" ``urlquote``.\n" -"\n" -" Note that if the nested commands being aliased hadn't been quoted, then\n" -" those commands would have been run immediately, and ``@lastfm`` would " -"always\n" -" reply with the same information, the result of those commands.\n" +" Note that nested commands in an alias should be quoted, or they will " +"only\n" +" run once when you create the alias, and not each time the alias is\n" +" called. (In this case, not quoting the nested command would mean that\n" +" ``@randpercent`` always responds with the same value!)\n" " " msgstr "" -#: plugin.py:699 +#: plugin.py:695 msgid "You've attempted more nesting than is currently allowed on this bot." msgstr "" "Olet yrittänyt sisällyttää enemmän komentoja, kuin tässä botti sallii juuri " "nyt." -#: plugin.py:703 +#: plugin.py:699 msgid " at least" msgstr "ainakin" -#: plugin.py:712 +#: plugin.py:708 msgid "Locked by %s at %s" msgstr "Lukinnut %s aikaan %s" -#: plugin.py:717 +#: plugin.py:713 #, fuzzy msgid "" "<a global alias,%s %n>\n" @@ -151,11 +143,11 @@ msgstr "" "\n" "Alias komennolle %q.%s" -#: plugin.py:718 plugin.py:722 +#: plugin.py:714 plugin.py:718 msgid "argument" msgstr "parametri" -#: plugin.py:721 +#: plugin.py:717 #, fuzzy msgid "" "<an alias on %s,%s %n>\n" @@ -166,24 +158,24 @@ msgstr "" "\n" "Alias komennolle %q.%s" -#: plugin.py:729 +#: plugin.py:725 msgid "You can't overwrite commands in this plugin." msgstr "Et voi ylikirjoittaa tämän lisä-osan komentoja." -#: plugin.py:734 +#: plugin.py:730 msgid "This Aka has too many spaces in its name." msgstr "Tämän Akan nimessä on liian monta välilyöntiä." -#: plugin.py:739 +#: plugin.py:735 msgid "Can't mix $* and optional args (@1, etc.)" msgstr "" "$*:ä ja vapaaehtoisia parametrejä (@1, jne.) ei voida sekoittaa keskenään" -#: plugin.py:746 +#: plugin.py:742 msgid "This Aka is locked." msgstr "Tämä Aka on lukittu." -#: plugin.py:750 +#: plugin.py:746 #, fuzzy msgid "" "[--channel <#channel>] <name> <command>\n" @@ -214,12 +206,12 @@ msgstr "" "parametrit.\n" " " -#: plugin.py:764 plugin.py:796 plugin.py:827 plugin.py:859 plugin.py:882 -#: plugin.py:905 plugin.py:951 plugin.py:994 +#: plugin.py:760 plugin.py:792 plugin.py:823 plugin.py:855 plugin.py:878 +#: plugin.py:901 plugin.py:947 plugin.py:990 msgid "%r is not a valid channel." msgstr "%r ei ole kelvollinen kanava." -#: plugin.py:782 +#: plugin.py:778 #, fuzzy msgid "" "[--channel <#channel>] <name> <command>\n" @@ -249,7 +241,7 @@ msgstr "" "$2 jne.\", esimerkiksi. se sisällyttää\n" " myös kaikki vapaaehtoiset parametrit." -#: plugin.py:819 +#: plugin.py:815 msgid "" "[--channel <#channel>] <name>\n" "\n" @@ -261,7 +253,7 @@ msgstr "" " Poistaa annetun aliaksen, ellei se ole lukittu.\n" " " -#: plugin.py:841 +#: plugin.py:837 msgid "" "Check if the user has any of the required capabilities to manage\n" " the regexp database." @@ -269,7 +261,7 @@ msgstr "" "Tarkistaa onko käyttäjällä vaadittu valtuus säännöllisten lausekkeiden\n" " tietokannan hallintaan." -#: plugin.py:851 +#: plugin.py:847 msgid "" "[--channel <#channel>] <alias>\n" "\n" @@ -281,7 +273,7 @@ msgstr "" " Lukitsee aliaksen estäen muita muokkaamasta sitä.\n" " " -#: plugin.py:874 +#: plugin.py:870 msgid "" "[--channel <#channel>] <alias>\n" "\n" @@ -293,7 +285,7 @@ msgstr "" " Avaa aliaksen, jotta kaikki voivat määrittää uusia aliaksia sen päälle.\n" " " -#: plugin.py:897 +#: plugin.py:893 msgid "" "[--channel <#channel>] <alias>\n" "\n" @@ -304,7 +296,7 @@ msgstr "" "\n" " Tämä komento näyttää Akan sisällön." -#: plugin.py:917 +#: plugin.py:913 msgid "" "takes no arguments\n" "\n" @@ -314,15 +306,15 @@ msgstr "" "\n" " Tuo Aliaksen tietokannan Akaan ja tyhjentää aiemman." -#: plugin.py:922 +#: plugin.py:918 msgid "Alias plugin is not loaded." msgstr "Alias lisä-osa ei ole ladattu." -#: plugin.py:933 +#: plugin.py:929 msgid "Error occured when importing the %n: %L" msgstr "Virhe komennon %n tuomisessa: %L" -#: plugin.py:941 +#: plugin.py:937 msgid "" "[--channel <#channel>] [--keys] [--unlocked|--locked]\n" "\n" @@ -332,15 +324,15 @@ msgid "" " and not their commands." msgstr "" -#: plugin.py:960 +#: plugin.py:956 msgid "--locked and --unlocked are incompatible options." msgstr "" -#: plugin.py:980 +#: plugin.py:976 msgid "No Akas found." msgstr "" -#: plugin.py:985 +#: plugin.py:981 msgid "" "[--channel <#channel>] <query>\n" "\n" @@ -348,7 +340,7 @@ msgid "" " searches all global Akas." msgstr "" -#: plugin.py:1004 +#: plugin.py:1000 msgid "No matching Akas were found." msgstr "" diff --git a/plugins/Aka/locales/ru.po b/plugins/Aka/locales/ru.po index ee86bc44c..d8d4ea84a 100644 --- a/plugins/Aka/locales/ru.po +++ b/plugins/Aka/locales/ru.po @@ -4,7 +4,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2024-06-12 21:50+0300\n" "Last-Translator: ssdaniel24 <bo7oaonteg2m__at__mailDOTru>\n" "Language-Team: \n" @@ -31,12 +31,12 @@ msgid "" " browsable through the HTTP server." msgstr "Определяет, где псевдонимы могут быть просмотрены через HTTP-сервер." -#: plugin.py:141 plugin.py:274 plugin.py:732 +#: plugin.py:141 plugin.py:274 plugin.py:728 msgid "This Aka already exists." msgstr "Этот псевдоним уже существует." #: plugin.py:170 plugin.py:182 plugin.py:196 plugin.py:301 plugin.py:318 -#: plugin.py:335 plugin.py:912 +#: plugin.py:335 plugin.py:908 msgid "This Aka does not exist." msgstr "Этот псевдоним не существует." @@ -53,10 +53,10 @@ msgid "By %s at %s" msgstr "%s %s" #: plugin.py:501 +#, fuzzy msgid "" "\n" -" This plugin allows users to define aliases to commands and " -"combinations\n" +" This plugin allows users to define aliases to commands and combinations\n" " of commands (via nesting).\n" "\n" " Importing from Alias\n" @@ -89,7 +89,7 @@ msgid "" " Trout\n" " ^^^^^\n" "\n" -" Add an aka, trout, which expects a word as an argument::\n" +" Add an aka, ``trout``, which expects a word as an argument::\n" "\n" " <jamessan> @aka add trout \"reply action slaps $1 with a large " "trout\"\n" @@ -100,29 +100,20 @@ msgid "" " This ``trout`` aka requires the plugin ``Reply`` to be loaded since it\n" " provides the ``action`` command.\n" "\n" -" LastFM\n" -" ^^^^^^\n" +" Random percentage\n" +" ^^^^^^^^^^^^^^^^^\n" "\n" -" Add an aka, ``lastfm``, which expects a last.fm username and replies " -"with\n" -" their most recently played item::\n" +" Add an aka, ``randpercent``, which returns a random percentage value::\n" "\n" -" @aka add lastfm \"rss [format concat http://ws.audioscrobbler." -"com/1.0/user/ [format concat [web urlquote $1] /recenttracks.rss]]\"\n" +" @aka add randpercent \"squish [dice 1d100]%\"\n" "\n" -" This ``lastfm`` aka requires the following plugins to be loaded: " -"``RSS``,\n" -" ``Format`` and ``Web``.\n" +" This requires the ``Filter`` and ``Games`` plugins to be loaded.\n" "\n" -" ``RSS`` provides ``rss``, ``Format`` provides ``concat`` and ``Web`` " -"provides\n" -" ``urlquote``.\n" -"\n" -" Note that if the nested commands being aliased hadn't been quoted, " -"then\n" -" those commands would have been run immediately, and ``@lastfm`` would " -"always\n" -" reply with the same information, the result of those commands.\n" +" Note that nested commands in an alias should be quoted, or they will " +"only\n" +" run once when you create the alias, and not each time the alias is\n" +" called. (In this case, not quoting the nested command would mean that\n" +" ``@randpercent`` always responds with the same value!)\n" " " msgstr "" "\n" @@ -141,8 +132,8 @@ msgstr "" " <jamessan> @load Aka\n" " <bot> jamessan: The operation succeeded.\n" "\n" -"После этого импортируем базу данных плагина Alias в Aka, если та " -"существует, и отключим плагин Alias::\n" +"После этого импортируем базу данных плагина Alias в Aka, если та существует, " +"и отключим плагин Alias::\n" "\n" "<jamessan> @importaliasdatabase\n" "<bot> jamessan: The operation succeeded.\n" @@ -155,8 +146,8 @@ msgstr "" "<jamessan> @aka add \"alias\" \"aka $1 $*\"\n" "<bot> jamessan: The operation succeeded.\n" "\n" -"Теперь вы можете использовать плагин Aka как вы использовали до этого " -"плагин Alias.\n" +"Теперь вы можете использовать плагин Aka как вы использовали до этого плагин " +"Alias.\n" "\n" "Дать леща\n" "^^^^^^^^^\n" @@ -181,27 +172,27 @@ msgstr "" "Этот псевдоним ``lastfm`` требует для работы следующие плагины: ``RSS``, " "``Format`` и ``Web``.\n" "\n" -"``RSS`` предоставляет ``rss``, ``Format`` предоставляет ``concat`` и " -"``Web`` предоставляет ``urlquote``.\n" +"``RSS`` предоставляет ``rss``, ``Format`` предоставляет ``concat`` и ``Web`` " +"предоставляет ``urlquote``.\n" "\n" "Обратите внимание, что если бы вложенные команды не были бы обозначены " "кавычками, то они были бы запущены немедленно, и псевдоним ``@lastfm`` " "показывал бы всегда одну и ту же информацию - результат выполнения этих " "команд." -#: plugin.py:699 +#: plugin.py:695 msgid "You've attempted more nesting than is currently allowed on this bot." msgstr "Вы попробовали больше вложений, чем сейчас это разрешено в боте." -#: plugin.py:703 +#: plugin.py:699 msgid " at least" msgstr " хотя бы" -#: plugin.py:712 +#: plugin.py:708 msgid "Locked by %s at %s" msgstr "Заблокировано %s %s" -#: plugin.py:717 +#: plugin.py:713 msgid "" "<a global alias,%s %n>\n" "\n" @@ -211,11 +202,11 @@ msgstr "" "\n" "Псевдоним для %q.%s" -#: plugin.py:718 plugin.py:722 +#: plugin.py:714 plugin.py:718 msgid "argument" msgstr "аргумент" -#: plugin.py:721 +#: plugin.py:717 msgid "" "<an alias on %s,%s %n>\n" "\n" @@ -225,23 +216,23 @@ msgstr "" "\n" "Псевдоним для %q.%s" -#: plugin.py:729 +#: plugin.py:725 msgid "You can't overwrite commands in this plugin." msgstr "Вы не можете перезаписывать команды в этом плагине." -#: plugin.py:734 +#: plugin.py:730 msgid "This Aka has too many spaces in its name." msgstr "Этот псевдоним содержит слишком много пробелов в имени." -#: plugin.py:739 +#: plugin.py:735 msgid "Can't mix $* and optional args (@1, etc.)" msgstr "Нельзя перемешивать $* и необязательные аргументы (@1 и др.)" -#: plugin.py:746 +#: plugin.py:742 msgid "This Aka is locked." msgstr "Этот псевдоним заблокирован." -#: plugin.py:750 +#: plugin.py:746 msgid "" "[--channel <#channel>] <name> <command>\n" "\n" @@ -267,12 +258,12 @@ msgstr "" "заменены с помощью $1, $2 и т.д.\", это включает в себя и необязательные " "аргументы тоже." -#: plugin.py:764 plugin.py:796 plugin.py:827 plugin.py:859 plugin.py:882 -#: plugin.py:905 plugin.py:951 plugin.py:994 +#: plugin.py:760 plugin.py:792 plugin.py:823 plugin.py:855 plugin.py:878 +#: plugin.py:901 plugin.py:947 plugin.py:990 msgid "%r is not a valid channel." msgstr "%r не является допустимым каналом." -#: plugin.py:782 +#: plugin.py:778 msgid "" "[--channel <#channel>] <name> <command>\n" "\n" @@ -300,7 +291,7 @@ msgstr "" "аргументов; $* означает \"все аргументы, которые не были заменены с помощью " "$1, $2 и т.д.\", это включает в себя и необязательные аргументы тоже." -#: plugin.py:819 +#: plugin.py:815 msgid "" "[--channel <#channel>] <name>\n" "\n" @@ -311,7 +302,7 @@ msgstr "" "\n" "Удаляет данный псевдоним, если тот не заблокирован." -#: plugin.py:841 +#: plugin.py:837 msgid "" "Check if the user has any of the required capabilities to manage\n" " the regexp database." @@ -319,7 +310,7 @@ msgstr "" "Проверяет, есть ли у пользователя необходимые привилегии для управления " "базой данных регулярных выражений." -#: plugin.py:851 +#: plugin.py:847 msgid "" "[--channel <#channel>] <alias>\n" "\n" @@ -330,7 +321,7 @@ msgstr "" "\n" "Блокирует данный псевдоним, чтобы никто не мог его изменить." -#: plugin.py:874 +#: plugin.py:870 msgid "" "[--channel <#channel>] <alias>\n" "\n" @@ -342,7 +333,7 @@ msgstr "" "Разблокирует данный псевдоним, чтобы люди могли определять новые псевдонимы " "поверх этого." -#: plugin.py:897 +#: plugin.py:893 msgid "" "[--channel <#channel>] <alias>\n" "\n" @@ -353,7 +344,7 @@ msgstr "" "\n" "Эта команда показывает содержание данного псевдонима." -#: plugin.py:917 +#: plugin.py:913 msgid "" "takes no arguments\n" "\n" @@ -363,22 +354,21 @@ msgstr "" "\n" "Импортирует базу данных Alias в Aka, и очищает первую." -#: plugin.py:922 +#: plugin.py:918 msgid "Alias plugin is not loaded." msgstr "Плагин Alias не загружен." -#: plugin.py:933 +#: plugin.py:929 msgid "Error occured when importing the %n: %L" msgstr "Произошла ошибка при импорте %n: %L" -#: plugin.py:941 +#: plugin.py:937 msgid "" "[--channel <#channel>] [--keys] [--unlocked|--locked]\n" "\n" " Lists all Akas defined for <channel>. If <channel> is not " "specified,\n" -" lists all global Akas. If --keys is given, lists only the Aka " -"names\n" +" lists all global Akas. If --keys is given, lists only the Aka names\n" " and not their commands." msgstr "" "[--channel <#канал>] [--keys] [--unlocked|--locked]\n" @@ -388,20 +378,19 @@ msgstr "" "keys, то показывает только названия псевдонимов без соответствующих им " "команд." -#: plugin.py:960 +#: plugin.py:956 msgid "--locked and --unlocked are incompatible options." msgstr "--locked и --unlocked – несовместимые параметры." -#: plugin.py:980 +#: plugin.py:976 msgid "No Akas found." msgstr "Не найдено ни одного псевдонима." -#: plugin.py:985 +#: plugin.py:981 msgid "" "[--channel <#channel>] <query>\n" "\n" -" Searches Akas defined for <channel>. If <channel> is not " -"specified,\n" +" Searches Akas defined for <channel>. If <channel> is not specified,\n" " searches all global Akas." msgstr "" "[--channel <#канал>] <запрос>\n" @@ -410,6 +399,6 @@ msgstr "" "данному <запросу>. Если <канал> не дан в аргументах, то поиск производится " "по всем глобальным псевдонимам." -#: plugin.py:1004 +#: plugin.py:1000 msgid "No matching Akas were found." msgstr "Не найдено ни одного совпадающего псевдонима." diff --git a/plugins/Aka/messages.pot b/plugins/Aka/messages.pot index 8dd6692f7..1b680f951 100644 --- a/plugins/Aka/messages.pot +++ b/plugins/Aka/messages.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -28,12 +28,12 @@ msgid "" " browsable through the HTTP server." msgstr "" -#: plugin.py:141 plugin.py:274 plugin.py:732 +#: plugin.py:141 plugin.py:274 plugin.py:728 msgid "This Aka already exists." msgstr "" #: plugin.py:170 plugin.py:182 plugin.py:196 plugin.py:301 plugin.py:318 -#: plugin.py:335 plugin.py:912 +#: plugin.py:335 plugin.py:908 msgid "This Aka does not exist." msgstr "" @@ -86,7 +86,7 @@ msgid "" " Trout\n" " ^^^^^\n" "\n" -" Add an aka, trout, which expects a word as an argument::\n" +" Add an aka, ``trout``, which expects a word as an argument::\n" "\n" " <jamessan> @aka add trout \"reply action slaps $1 with a large trout\"\n" " <bot> jamessan: The operation succeeded.\n" @@ -96,73 +96,69 @@ msgid "" " This ``trout`` aka requires the plugin ``Reply`` to be loaded since it\n" " provides the ``action`` command.\n" "\n" -" LastFM\n" -" ^^^^^^\n" +" Random percentage\n" +" ^^^^^^^^^^^^^^^^^\n" "\n" -" Add an aka, ``lastfm``, which expects a last.fm username and replies with\n" -" their most recently played item::\n" +" Add an aka, ``randpercent``, which returns a random percentage value::\n" "\n" -" @aka add lastfm \"rss [format concat http://ws.audioscrobbler.com/1.0/user/ [format concat [web urlquote $1] /recenttracks.rss]]\"\n" +" @aka add randpercent \"squish [dice 1d100]%\"\n" "\n" -" This ``lastfm`` aka requires the following plugins to be loaded: ``RSS``,\n" -" ``Format`` and ``Web``.\n" +" This requires the ``Filter`` and ``Games`` plugins to be loaded.\n" "\n" -" ``RSS`` provides ``rss``, ``Format`` provides ``concat`` and ``Web`` provides\n" -" ``urlquote``.\n" -"\n" -" Note that if the nested commands being aliased hadn't been quoted, then\n" -" those commands would have been run immediately, and ``@lastfm`` would always\n" -" reply with the same information, the result of those commands.\n" +" Note that nested commands in an alias should be quoted, or they will only\n" +" run once when you create the alias, and not each time the alias is\n" +" called. (In this case, not quoting the nested command would mean that\n" +" ``@randpercent`` always responds with the same value!)\n" " " msgstr "" -#: plugin.py:699 +#: plugin.py:695 msgid "You've attempted more nesting than is currently allowed on this bot." msgstr "" -#: plugin.py:703 +#: plugin.py:699 msgid " at least" msgstr "" -#: plugin.py:712 +#: plugin.py:708 msgid "Locked by %s at %s" msgstr "" -#: plugin.py:717 +#: plugin.py:713 msgid "" "<a global alias,%s %n>\n" "\n" "Alias for %q.%s" msgstr "" -#: plugin.py:718 plugin.py:722 +#: plugin.py:714 plugin.py:718 msgid "argument" msgstr "" -#: plugin.py:721 +#: plugin.py:717 msgid "" "<an alias on %s,%s %n>\n" "\n" "Alias for %q.%s" msgstr "" -#: plugin.py:729 +#: plugin.py:725 msgid "You can't overwrite commands in this plugin." msgstr "" -#: plugin.py:734 +#: plugin.py:730 msgid "This Aka has too many spaces in its name." msgstr "" -#: plugin.py:739 +#: plugin.py:735 msgid "Can't mix $* and optional args (@1, etc.)" msgstr "" -#: plugin.py:746 +#: plugin.py:742 msgid "This Aka is locked." msgstr "" -#: plugin.py:750 +#: plugin.py:746 #, docstring msgid "" "[--channel <#channel>] <name> <command>\n" @@ -177,12 +173,12 @@ msgid "" " " msgstr "" -#: plugin.py:764 plugin.py:796 plugin.py:827 plugin.py:859 plugin.py:882 -#: plugin.py:905 plugin.py:951 plugin.py:994 +#: plugin.py:760 plugin.py:792 plugin.py:823 plugin.py:855 plugin.py:878 +#: plugin.py:901 plugin.py:947 plugin.py:990 msgid "%r is not a valid channel." msgstr "" -#: plugin.py:782 +#: plugin.py:778 #, docstring msgid "" "[--channel <#channel>] <name> <command>\n" @@ -197,7 +193,7 @@ msgid "" " " msgstr "" -#: plugin.py:819 +#: plugin.py:815 #, docstring msgid "" "[--channel <#channel>] <name>\n" @@ -206,14 +202,14 @@ msgid "" " " msgstr "" -#: plugin.py:841 +#: plugin.py:837 #, docstring msgid "" "Check if the user has any of the required capabilities to manage\n" " the regexp database." msgstr "" -#: plugin.py:851 +#: plugin.py:847 #, docstring msgid "" "[--channel <#channel>] <alias>\n" @@ -222,7 +218,7 @@ msgid "" " " msgstr "" -#: plugin.py:874 +#: plugin.py:870 #, docstring msgid "" "[--channel <#channel>] <alias>\n" @@ -231,7 +227,7 @@ msgid "" " " msgstr "" -#: plugin.py:897 +#: plugin.py:893 #, docstring msgid "" "[--channel <#channel>] <alias>\n" @@ -240,7 +236,7 @@ msgid "" " " msgstr "" -#: plugin.py:917 +#: plugin.py:913 #, docstring msgid "" "takes no arguments\n" @@ -248,15 +244,15 @@ msgid "" " Imports the Alias database into Aka's, and clean the former." msgstr "" -#: plugin.py:922 +#: plugin.py:918 msgid "Alias plugin is not loaded." msgstr "" -#: plugin.py:933 +#: plugin.py:929 msgid "Error occured when importing the %n: %L" msgstr "" -#: plugin.py:941 +#: plugin.py:937 #, docstring msgid "" "[--channel <#channel>] [--keys] [--unlocked|--locked]\n" @@ -266,15 +262,15 @@ msgid "" " and not their commands." msgstr "" -#: plugin.py:960 +#: plugin.py:956 msgid "--locked and --unlocked are incompatible options." msgstr "" -#: plugin.py:980 +#: plugin.py:976 msgid "No Akas found." msgstr "" -#: plugin.py:985 +#: plugin.py:981 #, docstring msgid "" "[--channel <#channel>] <query>\n" @@ -283,7 +279,7 @@ msgid "" " searches all global Akas." msgstr "" -#: plugin.py:1004 +#: plugin.py:1000 msgid "No matching Akas were found." msgstr "" diff --git a/plugins/Alias/locales/de.po b/plugins/Alias/locales/de.po index e6e009925..96eca3461 100644 --- a/plugins/Alias/locales/de.po +++ b/plugins/Alias/locales/de.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: Supybot\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2012-04-27 15:36+0200\n" "Last-Translator: Mikaela Suomalainen <mikaela.suomalainen@outlook.com>\n" "Language-Team: German <fbesser@gmail.com>\n" @@ -66,28 +66,29 @@ msgid "" "using\n" " the 'importaliasdatabase' command.\n" "\n" -" To add an alias, `trout`, which expects a word as an argument::\n" +" To add an alias, ``trout``, which expects a word as an argument::\n" "\n" " <jamessan> @alias add trout \"action slaps $1 with a large trout\"\n" " <bot> jamessan: The operation succeeded.\n" " <jamessan> @trout me\n" " * bot slaps me with a large trout\n" "\n" -" To add an alias, `lastfm`, which expects a last.fm user and replies " -"with\n" -" their recently played items::\n" +" Add an alias, ``randpercent``, which returns a random percentage " +"value::\n" "\n" -" @alias add lastfm \"rss [format concat http://ws.audioscrobbler." -"com/1.0/user/ [format concat [urlquote $1] /recenttracks.rss]]\"\n" +" @alias add randpercent \"squish [dice 1d100]%\"\n" "\n" -" Note that if the nested commands being aliased hadn't been quoted, then\n" -" those commands would have been run immediately, and `@lastfm` would " -"always\n" -" reply with the same information, the result of those commands.\n" +" This requires the ``Filter`` and ``Games`` plugins to be loaded.\n" +"\n" +" Note that nested commands in an alias should be quoted, or they will " +"only\n" +" run once when you create the alias, and not each time the alias is\n" +" called. (In this case, not quoting the nested command would mean that\n" +" ``@randpercent`` always responds with the same value!)\n" " " msgstr "" -#: plugin.py:357 +#: plugin.py:359 msgid "" "<alias>\n" "\n" @@ -98,11 +99,11 @@ msgstr "" "\n" "Versperrt ein Alias, sodass er nicht verändert werden kann." -#: plugin.py:365 plugin.py:378 +#: plugin.py:367 plugin.py:380 msgid "There is no such alias." msgstr "Es gibt keinen Alias mit diesem Namen." -#: plugin.py:370 +#: plugin.py:372 msgid "" "<alias>\n" "\n" @@ -113,11 +114,11 @@ msgstr "" "\n" "Entsperrt den Alias, sodass andere Personen ihn verändern können." -#: plugin.py:386 +#: plugin.py:388 msgid "That name isn't valid. Try %q instead." msgstr "Dieser Name ist nicht zulässig. Probiere anstatt %q." -#: plugin.py:426 +#: plugin.py:428 #, fuzzy msgid "" "<name> <command>\n" @@ -140,7 +141,7 @@ msgstr "" "Standardform \"Befehl Argument [verschachtelter Befehl Argument\" angegeben " "werden." -#: plugin.py:449 +#: plugin.py:451 msgid "" "<name>\n" "\n" @@ -151,7 +152,7 @@ msgstr "" "\n" "Entfernt den gegeben Alias, falls er nicht gesperrt ist." -#: plugin.py:463 +#: plugin.py:465 msgid "" "[--locked|--unlocked]\n" "\n" @@ -161,15 +162,15 @@ msgid "" " " msgstr "" -#: plugin.py:470 +#: plugin.py:472 msgid "Cannot specify --locked and --unlocked simultaneously" msgstr "" -#: plugin.py:486 +#: plugin.py:488 msgid "There are no aliases of that type." msgstr "" -#: plugin.py:488 +#: plugin.py:490 #, fuzzy msgid "There are no aliases." msgstr "Es gibt keinen Alias mit diesem Namen." diff --git a/plugins/Alias/locales/fi.po b/plugins/Alias/locales/fi.po index 44c5c8fe9..7b5536a21 100644 --- a/plugins/Alias/locales/fi.po +++ b/plugins/Alias/locales/fi.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: Supybot Alias plugin\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2014-12-20 13:47+0200\n" "Last-Translator: Mikaela Suomalainen <mikaela.suomalainen@outlook.com>\n" "Language-Team: suomi <>\n" @@ -73,28 +73,29 @@ msgid "" "using\n" " the 'importaliasdatabase' command.\n" "\n" -" To add an alias, `trout`, which expects a word as an argument::\n" +" To add an alias, ``trout``, which expects a word as an argument::\n" "\n" " <jamessan> @alias add trout \"action slaps $1 with a large trout\"\n" " <bot> jamessan: The operation succeeded.\n" " <jamessan> @trout me\n" " * bot slaps me with a large trout\n" "\n" -" To add an alias, `lastfm`, which expects a last.fm user and replies " -"with\n" -" their recently played items::\n" +" Add an alias, ``randpercent``, which returns a random percentage " +"value::\n" "\n" -" @alias add lastfm \"rss [format concat http://ws.audioscrobbler." -"com/1.0/user/ [format concat [urlquote $1] /recenttracks.rss]]\"\n" +" @alias add randpercent \"squish [dice 1d100]%\"\n" "\n" -" Note that if the nested commands being aliased hadn't been quoted, then\n" -" those commands would have been run immediately, and `@lastfm` would " -"always\n" -" reply with the same information, the result of those commands.\n" +" This requires the ``Filter`` and ``Games`` plugins to be loaded.\n" +"\n" +" Note that nested commands in an alias should be quoted, or they will " +"only\n" +" run once when you create the alias, and not each time the alias is\n" +" called. (In this case, not quoting the nested command would mean that\n" +" ``@randpercent`` always responds with the same value!)\n" " " msgstr "" -#: plugin.py:357 +#: plugin.py:359 msgid "" "<alias>\n" "\n" @@ -106,11 +107,11 @@ msgstr "" " Lukitsee aliaksen, niin ettei kukaan muu voi muuttaa sitä.\n" " " -#: plugin.py:365 plugin.py:378 +#: plugin.py:367 plugin.py:380 msgid "There is no such alias." msgstr "Tuollaista aliasta ei ole." -#: plugin.py:370 +#: plugin.py:372 msgid "" "<alias>\n" "\n" @@ -123,11 +124,11 @@ msgstr "" "aliaksia sen päälle.\n" " " -#: plugin.py:386 +#: plugin.py:388 msgid "That name isn't valid. Try %q instead." msgstr "Tuo nimi ei ole kelvollinen. Yritä sen sijaan %q:ta." -#: plugin.py:426 +#: plugin.py:428 msgid "" "<name> <command>\n" "\n" @@ -156,7 +157,7 @@ msgstr "" "parametrejä.\n" " " -#: plugin.py:449 +#: plugin.py:451 msgid "" "<name>\n" "\n" @@ -168,7 +169,7 @@ msgstr "" " Poistaa annetun aliaksen jos se ei ole lukittu.\n" " " -#: plugin.py:463 +#: plugin.py:465 msgid "" "[--locked|--unlocked]\n" "\n" @@ -178,15 +179,15 @@ msgid "" " " msgstr "" -#: plugin.py:470 +#: plugin.py:472 msgid "Cannot specify --locked and --unlocked simultaneously" msgstr "" -#: plugin.py:486 +#: plugin.py:488 msgid "There are no aliases of that type." msgstr "" -#: plugin.py:488 +#: plugin.py:490 #, fuzzy msgid "There are no aliases." msgstr "Tuollaista aliasta ei ole." diff --git a/plugins/Alias/locales/fr.po b/plugins/Alias/locales/fr.po index 2dde2dd82..1b73552dc 100644 --- a/plugins/Alias/locales/fr.po +++ b/plugins/Alias/locales/fr.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: Limnoria\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: Limnoria <progval@gmail.com>\n" @@ -65,28 +65,29 @@ msgid "" "using\n" " the 'importaliasdatabase' command.\n" "\n" -" To add an alias, `trout`, which expects a word as an argument::\n" +" To add an alias, ``trout``, which expects a word as an argument::\n" "\n" " <jamessan> @alias add trout \"action slaps $1 with a large trout\"\n" " <bot> jamessan: The operation succeeded.\n" " <jamessan> @trout me\n" " * bot slaps me with a large trout\n" "\n" -" To add an alias, `lastfm`, which expects a last.fm user and replies " -"with\n" -" their recently played items::\n" +" Add an alias, ``randpercent``, which returns a random percentage " +"value::\n" "\n" -" @alias add lastfm \"rss [format concat http://ws.audioscrobbler." -"com/1.0/user/ [format concat [urlquote $1] /recenttracks.rss]]\"\n" +" @alias add randpercent \"squish [dice 1d100]%\"\n" "\n" -" Note that if the nested commands being aliased hadn't been quoted, then\n" -" those commands would have been run immediately, and `@lastfm` would " -"always\n" -" reply with the same information, the result of those commands.\n" +" This requires the ``Filter`` and ``Games`` plugins to be loaded.\n" +"\n" +" Note that nested commands in an alias should be quoted, or they will " +"only\n" +" run once when you create the alias, and not each time the alias is\n" +" called. (In this case, not quoting the nested command would mean that\n" +" ``@randpercent`` always responds with the same value!)\n" " " msgstr "" -#: plugin.py:357 +#: plugin.py:359 msgid "" "<alias>\n" "\n" @@ -97,11 +98,11 @@ msgstr "" "\n" "Vérouille un alias pour que personne d'autre ne puisse le changer." -#: plugin.py:365 plugin.py:378 +#: plugin.py:367 plugin.py:380 msgid "There is no such alias." msgstr "Cet alias n'existe pas." -#: plugin.py:370 +#: plugin.py:372 msgid "" "<alias>\n" "\n" @@ -112,11 +113,11 @@ msgstr "" "\n" "Déverrouille un alias de façon à ce que des gens puissent le redéfinir." -#: plugin.py:386 +#: plugin.py:388 msgid "That name isn't valid. Try %q instead." msgstr "Ce nom n'est pas valide. Essayez plutôt %q." -#: plugin.py:426 +#: plugin.py:428 msgid "" "<name> <command>\n" "\n" @@ -142,7 +143,7 @@ msgstr "" "simplement *tous* les arguments restants, et ne peut être combiné avec des " "arguments optionnels." -#: plugin.py:449 +#: plugin.py:451 msgid "" "<name>\n" "\n" @@ -153,7 +154,7 @@ msgstr "" "\n" "Supprime l'alias donné, si il n'est pas verrouillé." -#: plugin.py:463 +#: plugin.py:465 msgid "" "[--locked|--unlocked]\n" "\n" @@ -163,15 +164,15 @@ msgid "" " " msgstr "" -#: plugin.py:470 +#: plugin.py:472 msgid "Cannot specify --locked and --unlocked simultaneously" msgstr "" -#: plugin.py:486 +#: plugin.py:488 msgid "There are no aliases of that type." msgstr "" -#: plugin.py:488 +#: plugin.py:490 #, fuzzy msgid "There are no aliases." msgstr "Cet alias n'existe pas." diff --git a/plugins/Alias/locales/hu.po b/plugins/Alias/locales/hu.po index 05ac11a00..d13e59b95 100644 --- a/plugins/Alias/locales/hu.po +++ b/plugins/Alias/locales/hu.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Limnoria Alias\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2012-04-27 15:12+0200\n" "Last-Translator: Mikaela Suomalainen <mikaela.suomalainen@outlook.com>\n" "Language-Team: \n" @@ -70,28 +70,29 @@ msgid "" "using\n" " the 'importaliasdatabase' command.\n" "\n" -" To add an alias, `trout`, which expects a word as an argument::\n" +" To add an alias, ``trout``, which expects a word as an argument::\n" "\n" " <jamessan> @alias add trout \"action slaps $1 with a large trout\"\n" " <bot> jamessan: The operation succeeded.\n" " <jamessan> @trout me\n" " * bot slaps me with a large trout\n" "\n" -" To add an alias, `lastfm`, which expects a last.fm user and replies " -"with\n" -" their recently played items::\n" +" Add an alias, ``randpercent``, which returns a random percentage " +"value::\n" "\n" -" @alias add lastfm \"rss [format concat http://ws.audioscrobbler." -"com/1.0/user/ [format concat [urlquote $1] /recenttracks.rss]]\"\n" +" @alias add randpercent \"squish [dice 1d100]%\"\n" "\n" -" Note that if the nested commands being aliased hadn't been quoted, then\n" -" those commands would have been run immediately, and `@lastfm` would " -"always\n" -" reply with the same information, the result of those commands.\n" +" This requires the ``Filter`` and ``Games`` plugins to be loaded.\n" +"\n" +" Note that nested commands in an alias should be quoted, or they will " +"only\n" +" run once when you create the alias, and not each time the alias is\n" +" called. (In this case, not quoting the nested command would mean that\n" +" ``@randpercent`` always responds with the same value!)\n" " " msgstr "" -#: plugin.py:357 +#: plugin.py:359 msgid "" "<alias>\n" "\n" @@ -102,11 +103,11 @@ msgstr "" "\n" "Lezár egy álnevet, hogy senki más ne változtathassa meg." -#: plugin.py:365 plugin.py:378 +#: plugin.py:367 plugin.py:380 msgid "There is no such alias." msgstr "Nincs ilyen álnév." -#: plugin.py:370 +#: plugin.py:372 msgid "" "<alias>\n" "\n" @@ -117,11 +118,11 @@ msgstr "" "\n" "Feloldja egy álnév lezárását, hogy az emberek új álnevekkel írhassák felül." -#: plugin.py:386 +#: plugin.py:388 msgid "That name isn't valid. Try %q instead." msgstr "Az a név nem érvényes. Próbáld meg %q-t inkább." -#: plugin.py:426 +#: plugin.py:428 msgid "" "<name> <command>\n" "\n" @@ -147,7 +148,7 @@ msgstr "" "jelenti, \"az összes hátralévő paraméter,\" és nem kombinálható választható " "paraméterekkel." -#: plugin.py:449 +#: plugin.py:451 msgid "" "<name>\n" "\n" @@ -158,7 +159,7 @@ msgstr "" "\n" "Eltávolítja a megadott álnevet, ha nincs lezárva." -#: plugin.py:463 +#: plugin.py:465 msgid "" "[--locked|--unlocked]\n" "\n" @@ -168,15 +169,15 @@ msgid "" " " msgstr "" -#: plugin.py:470 +#: plugin.py:472 msgid "Cannot specify --locked and --unlocked simultaneously" msgstr "" -#: plugin.py:486 +#: plugin.py:488 msgid "There are no aliases of that type." msgstr "" -#: plugin.py:488 +#: plugin.py:490 #, fuzzy msgid "There are no aliases." msgstr "Nincs ilyen álnév." diff --git a/plugins/Alias/locales/it.po b/plugins/Alias/locales/it.po index 328911fef..75ed4c968 100644 --- a/plugins/Alias/locales/it.po +++ b/plugins/Alias/locales/it.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: Limnoria\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2011-06-07 08:23+0200\n" "Last-Translator: skizzhg <skizzhg@gmx.com>\n" "Language-Team: Italian <skizzhg@gmx.com>\n" @@ -65,28 +65,29 @@ msgid "" "using\n" " the 'importaliasdatabase' command.\n" "\n" -" To add an alias, `trout`, which expects a word as an argument::\n" +" To add an alias, ``trout``, which expects a word as an argument::\n" "\n" " <jamessan> @alias add trout \"action slaps $1 with a large trout\"\n" " <bot> jamessan: The operation succeeded.\n" " <jamessan> @trout me\n" " * bot slaps me with a large trout\n" "\n" -" To add an alias, `lastfm`, which expects a last.fm user and replies " -"with\n" -" their recently played items::\n" +" Add an alias, ``randpercent``, which returns a random percentage " +"value::\n" "\n" -" @alias add lastfm \"rss [format concat http://ws.audioscrobbler." -"com/1.0/user/ [format concat [urlquote $1] /recenttracks.rss]]\"\n" +" @alias add randpercent \"squish [dice 1d100]%\"\n" "\n" -" Note that if the nested commands being aliased hadn't been quoted, then\n" -" those commands would have been run immediately, and `@lastfm` would " -"always\n" -" reply with the same information, the result of those commands.\n" +" This requires the ``Filter`` and ``Games`` plugins to be loaded.\n" +"\n" +" Note that nested commands in an alias should be quoted, or they will " +"only\n" +" run once when you create the alias, and not each time the alias is\n" +" called. (In this case, not quoting the nested command would mean that\n" +" ``@randpercent`` always responds with the same value!)\n" " " msgstr "" -#: plugin.py:357 +#: plugin.py:359 msgid "" "<alias>\n" "\n" @@ -98,11 +99,11 @@ msgstr "" " Blocca un alias affinché nessun altro possa modificarlo.\n" " " -#: plugin.py:365 plugin.py:378 +#: plugin.py:367 plugin.py:380 msgid "There is no such alias." msgstr "Non c'è nessun alias." -#: plugin.py:370 +#: plugin.py:372 msgid "" "<alias>\n" "\n" @@ -114,11 +115,11 @@ msgstr "" " Sblocca un alias affinché chiunque possa ridefinirne di nuovi.\n" " " -#: plugin.py:386 +#: plugin.py:388 msgid "That name isn't valid. Try %q instead." msgstr "Nome non valido. Prova %q invece." -#: plugin.py:426 +#: plugin.py:428 msgid "" "<name> <command>\n" "\n" @@ -147,7 +148,7 @@ msgstr "" " rimanenti\" e non può essere combinato con quelli opzionali.\n" " " -#: plugin.py:449 +#: plugin.py:451 msgid "" "<name>\n" "\n" @@ -159,7 +160,7 @@ msgstr "" " Rimuove l'alias specificato, se questo non è bloccato.\n" " " -#: plugin.py:463 +#: plugin.py:465 msgid "" "[--locked|--unlocked]\n" "\n" @@ -169,15 +170,15 @@ msgid "" " " msgstr "" -#: plugin.py:470 +#: plugin.py:472 msgid "Cannot specify --locked and --unlocked simultaneously" msgstr "" -#: plugin.py:486 +#: plugin.py:488 msgid "There are no aliases of that type." msgstr "" -#: plugin.py:488 +#: plugin.py:490 #, fuzzy msgid "There are no aliases." msgstr "Non c'è nessun alias." diff --git a/plugins/Alias/messages.pot b/plugins/Alias/messages.pot index 1f412ada6..7cfabc3c3 100644 --- a/plugins/Alias/messages.pot +++ b/plugins/Alias/messages.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -61,25 +61,27 @@ msgid "" " built-in Aka plugin instead (you can migrate your existing aliases using\n" " the 'importaliasdatabase' command.\n" "\n" -" To add an alias, `trout`, which expects a word as an argument::\n" +" To add an alias, ``trout``, which expects a word as an argument::\n" "\n" " <jamessan> @alias add trout \"action slaps $1 with a large trout\"\n" " <bot> jamessan: The operation succeeded.\n" " <jamessan> @trout me\n" " * bot slaps me with a large trout\n" "\n" -" To add an alias, `lastfm`, which expects a last.fm user and replies with\n" -" their recently played items::\n" +" Add an alias, ``randpercent``, which returns a random percentage value::\n" "\n" -" @alias add lastfm \"rss [format concat http://ws.audioscrobbler.com/1.0/user/ [format concat [urlquote $1] /recenttracks.rss]]\"\n" +" @alias add randpercent \"squish [dice 1d100]%\"\n" "\n" -" Note that if the nested commands being aliased hadn't been quoted, then\n" -" those commands would have been run immediately, and `@lastfm` would always\n" -" reply with the same information, the result of those commands.\n" +" This requires the ``Filter`` and ``Games`` plugins to be loaded.\n" +"\n" +" Note that nested commands in an alias should be quoted, or they will only\n" +" run once when you create the alias, and not each time the alias is\n" +" called. (In this case, not quoting the nested command would mean that\n" +" ``@randpercent`` always responds with the same value!)\n" " " msgstr "" -#: plugin.py:357 +#: plugin.py:359 #, docstring msgid "" "<alias>\n" @@ -88,11 +90,11 @@ msgid "" " " msgstr "" -#: plugin.py:365 plugin.py:378 +#: plugin.py:367 plugin.py:380 msgid "There is no such alias." msgstr "" -#: plugin.py:370 +#: plugin.py:372 #, docstring msgid "" "<alias>\n" @@ -101,11 +103,11 @@ msgid "" " " msgstr "" -#: plugin.py:386 +#: plugin.py:388 msgid "That name isn't valid. Try %q instead." msgstr "" -#: plugin.py:426 +#: plugin.py:428 #, docstring msgid "" "<name> <command>\n" @@ -119,7 +121,7 @@ msgid "" " " msgstr "" -#: plugin.py:449 +#: plugin.py:451 #, docstring msgid "" "<name>\n" @@ -128,7 +130,7 @@ msgid "" " " msgstr "" -#: plugin.py:463 +#: plugin.py:465 #, docstring msgid "" "[--locked|--unlocked]\n" @@ -138,15 +140,15 @@ msgid "" " " msgstr "" -#: plugin.py:470 +#: plugin.py:472 msgid "Cannot specify --locked and --unlocked simultaneously" msgstr "" -#: plugin.py:486 +#: plugin.py:488 msgid "There are no aliases of that type." msgstr "" -#: plugin.py:488 +#: plugin.py:490 msgid "There are no aliases." msgstr "" diff --git a/plugins/Anonymous/messages.pot b/plugins/Anonymous/messages.pot index a7f18168a..697b6f4ab 100644 --- a/plugins/Anonymous/messages.pot +++ b/plugins/Anonymous/messages.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/plugins/AutoMode/messages.pot b/plugins/AutoMode/messages.pot index d67371eea..83901cdc6 100644 --- a/plugins/AutoMode/messages.pot +++ b/plugins/AutoMode/messages.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/plugins/Autocomplete/messages.pot b/plugins/Autocomplete/messages.pot index 19ba44347..d41ed7004 100644 --- a/plugins/Autocomplete/messages.pot +++ b/plugins/Autocomplete/messages.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/plugins/BadWords/locales/fi.po b/plugins/BadWords/locales/fi.po index 111e3cf25..15ebf968d 100644 --- a/plugins/BadWords/locales/fi.po +++ b/plugins/BadWords/locales/fi.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: Supybot BadWords\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: \n" "Last-Translator: Mikaela Suomalainen <mikaela.suomalainen@outlook.com>\n" "Language-Team: \n" @@ -122,6 +122,15 @@ msgstr "" " tekstin värittämistä tai korostamista tekevien lisäosien kanssa." #: config.py:117 +#, fuzzy +msgid "" +"Determines whether the bot will filter its own\n" +" messages." +msgstr "" +"Määrittää potkiiko botti ihmiset\n" +" varoituksella jos he käyttävät pahoja sanoja." + +#: config.py:120 msgid "" "Determines whether the bot will kick people with\n" " a warning when they use bad words." @@ -129,7 +138,7 @@ msgstr "" "Määrittää potkiiko botti ihmiset\n" " varoituksella jos he käyttävät pahoja sanoja." -#: config.py:120 +#: config.py:123 msgid "" "You have been kicked for using a word\n" " prohibited in the presence of this bot. Please use more appropriate\n" @@ -139,7 +148,7 @@ msgstr "" " käytöstä tämän botin läsnäollessa. Ole hyvä ja käytä asianmukaisempaa\n" " kieltä tulevaisuudessa." -#: config.py:122 +#: config.py:125 msgid "" "Determines the kick message used by the\n" " bot when kicking users for saying bad words." @@ -158,7 +167,7 @@ msgstr "" "botilla\n" " on opit." -#: plugin.py:127 +#: plugin.py:128 msgid "" "takes no arguments\n" "\n" @@ -170,11 +179,11 @@ msgstr "" " Palauttaa listan sanoista, joita sensuroidaan.\n" " " -#: plugin.py:137 +#: plugin.py:138 msgid "I'm not currently censoring any bad words." msgstr "En ole sensuroimassa yhtään pahaa sanaa juuri nyt." -#: plugin.py:142 +#: plugin.py:143 msgid "" "<word> [<word> ...]\n" "\n" @@ -186,7 +195,7 @@ msgstr "" " Lisää kaikki <sana>(t) sensuroitaviin sanoihin.\n" " " -#: plugin.py:162 +#: plugin.py:163 msgid "" "<word> [<word> ...]\n" "\n" diff --git a/plugins/BadWords/locales/fr.po b/plugins/BadWords/locales/fr.po index 23bebe95e..f3232ea07 100644 --- a/plugins/BadWords/locales/fr.po +++ b/plugins/BadWords/locales/fr.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: Limnoria\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: \n" "Last-Translator: Valentin Lorentz <progval@gmail.com>\n" "Language-Team: Limnoria <progval@gmail.com>\n" @@ -108,6 +108,15 @@ msgstr "" "toute couleur ou formattage des autres plugins" #: config.py:117 +#, fuzzy +msgid "" +"Determines whether the bot will filter its own\n" +" messages." +msgstr "" +"Détermine si le bot kickera les gens avec un avertissement lorsqu'ils " +"utilisent des gros mots." + +#: config.py:120 msgid "" "Determines whether the bot will kick people with\n" " a warning when they use bad words." @@ -115,7 +124,7 @@ msgstr "" "Détermine si le bot kickera les gens avec un avertissement lorsqu'ils " "utilisent des gros mots." -#: config.py:120 +#: config.py:123 msgid "" "You have been kicked for using a word\n" " prohibited in the presence of this bot. Please use more appropriate\n" @@ -124,7 +133,7 @@ msgstr "" "Vous avez été kické(e) parce que vous avez utilisé un mot interdit en la " "présence de ce bot. Veuillez utiliser un langage plus approprié par le futur." -#: config.py:122 +#: config.py:125 msgid "" "Determines the kick message used by the\n" " bot when kicking users for saying bad words." @@ -139,7 +148,7 @@ msgid "" " has op." msgstr "" -#: plugin.py:127 +#: plugin.py:128 msgid "" "takes no arguments\n" "\n" @@ -150,11 +159,11 @@ msgstr "" "\n" "Retourne une liste de mots qui sont censurés." -#: plugin.py:137 +#: plugin.py:138 msgid "I'm not currently censoring any bad words." msgstr "Je ne censure actuellement aucun mot." -#: plugin.py:142 +#: plugin.py:143 msgid "" "<word> [<word> ...]\n" "\n" @@ -165,7 +174,7 @@ msgstr "" "\n" "Ajoute tous les mots à la liste des mots que le bot ne doit pas dire." -#: plugin.py:162 +#: plugin.py:163 msgid "" "<word> [<word> ...]\n" "\n" diff --git a/plugins/BadWords/locales/it.po b/plugins/BadWords/locales/it.po index 904fccb5a..23d95ba63 100644 --- a/plugins/BadWords/locales/it.po +++ b/plugins/BadWords/locales/it.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: Limnoria\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2011-06-28 23:29+0200\n" "Last-Translator: skizzhg <skizzhg@gmx.com>\n" "Language-Team: Italian <skizzhg@gmx.com>\n" @@ -79,8 +79,8 @@ msgid "" " length of the bad word); this string is configurable via\n" " supybot.plugins.BadWords.simpleReplacement." msgstr "" -"Determina come verranno sostituite le parole volgari. \"nastyCharacters" -"\" (predefinito)\n" +"Determina come verranno sostituite le parole volgari. " +"\"nastyCharacters\" (predefinito)\n" " rimpiazzerà la parola con lo stesso numero di \"brutti caratteri\" (come " "quelli usati\n" " nei fumetti; configurabile da supybot.plugins.BadWords.nastyChars). " @@ -117,6 +117,15 @@ msgstr "" " con altri plugin che colorano o rendono il testo grassetto." #: config.py:117 +#, fuzzy +msgid "" +"Determines whether the bot will filter its own\n" +" messages." +msgstr "" +"Determina se il bot caccerà (kick) gli utenti con un avvertimento quando " +"usano volgarità." + +#: config.py:120 msgid "" "Determines whether the bot will kick people with\n" " a warning when they use bad words." @@ -124,7 +133,7 @@ msgstr "" "Determina se il bot caccerà (kick) gli utenti con un avvertimento quando " "usano volgarità." -#: config.py:120 +#: config.py:123 msgid "" "You have been kicked for using a word\n" " prohibited in the presence of this bot. Please use more appropriate\n" @@ -133,7 +142,7 @@ msgstr "" "Sei stato/a cacciato/a per aver usato parole proibite in presenza del bot.\n" " In futuro utilizza un linguaggio più appropriato." -#: config.py:122 +#: config.py:125 msgid "" "Determines the kick message used by the\n" " bot when kicking users for saying bad words." @@ -151,7 +160,7 @@ msgstr "" " Se il bot ha lo stato di operatore, può essere anche utilizzato\n" " per cacciare (kick) utenti che scrivono queste parole." -#: plugin.py:127 +#: plugin.py:128 msgid "" "takes no arguments\n" "\n" @@ -163,11 +172,11 @@ msgstr "" " Riporta l'elenco delle parole censurate.\n" " " -#: plugin.py:137 +#: plugin.py:138 msgid "I'm not currently censoring any bad words." msgstr "Al momento non ho alcuna parola censurata." -#: plugin.py:142 +#: plugin.py:143 msgid "" "<word> [<word> ...]\n" "\n" @@ -179,7 +188,7 @@ msgstr "" " Aggiunge <parola> all'elenco di quelle da censurare.\n" " " -#: plugin.py:162 +#: plugin.py:163 msgid "" "<word> [<word> ...]\n" "\n" diff --git a/plugins/BadWords/messages.pot b/plugins/BadWords/messages.pot index b67ae4adc..ecc67ccab 100644 --- a/plugins/BadWords/messages.pot +++ b/plugins/BadWords/messages.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -112,7 +112,7 @@ msgid "" " has op." msgstr "" -#: plugin.py:127 +#: plugin.py:128 #, docstring msgid "" "takes no arguments\n" @@ -121,11 +121,11 @@ msgid "" " " msgstr "" -#: plugin.py:137 +#: plugin.py:138 msgid "I'm not currently censoring any bad words." msgstr "" -#: plugin.py:142 +#: plugin.py:143 #, docstring msgid "" "<word> [<word> ...]\n" @@ -134,7 +134,7 @@ msgid "" " " msgstr "" -#: plugin.py:162 +#: plugin.py:163 #, docstring msgid "" "<word> [<word> ...]\n" diff --git a/plugins/Channel/locales/de.po b/plugins/Channel/locales/de.po index b3e1b32a8..204c05a86 100644 --- a/plugins/Channel/locales/de.po +++ b/plugins/Channel/locales/de.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: sdf\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2012-04-27 15:33+0200\n" "Last-Translator: Mikaela Suomalainen <mikaela.suomalainen@outlook.com>\n" "Language-Team: \n" @@ -352,8 +352,10 @@ msgid "kick someone" msgstr "jemanden kicken" #: plugin.py:316 +#, fuzzy msgid "" -"[<channel>] [--{exact,nick,user,host}] <nick> [<seconds>] [<reason>]\n" +"[<channel>] [--{exact,nick,user,host,account}] <nick> [<seconds>] " +"[<reason>]\n" "\n" " If you have the #channel,op capability, this will kickban <nick> " "for\n" @@ -362,13 +364,13 @@ msgid "" " don't specify a number of seconds) it will ban the person " "indefinitely.\n" " --exact bans only the exact hostmask; --nick bans just the nick;\n" -" --user bans just the user, and --host bans just the host. You can\n" -" combine these options as you choose. <reason> is a reason to give " -"for\n" -" the kick.\n" -" <channel> is only necessary if the message isn't sent in the " -"channel\n" -" itself.\n" +" --user bans just the user, and --host bans just the host\n" +" You can combine the --nick, --user, and --host options as you " +"choose.\n" +" If --account is provided and the user is logged in and the network\n" +" supports account bans, this will ban the user's account instead.\n" +" <channel> is only necessary if the message isn't sent in the channel " +"itself.\n" " " msgstr "" "[<Kanal>] [--{exact,nick,user,host}] <Nick> [<Sekunden>] [<Begründung>]\n" @@ -382,11 +384,11 @@ msgstr "" "den Kick. <Kanal> ist nur notwendig, wenn die Nachricht nicht im Kanal " "selbst gesendet wurde." -#: plugin.py:333 +#: plugin.py:334 msgid "kick or ban someone" msgstr "jemanden kicken oder bannen" -#: plugin.py:341 +#: plugin.py:342 #, fuzzy msgid "" "[<channel>] [--{exact,nick,user,host}] <nick> [<seconds>]\n" @@ -396,11 +398,13 @@ msgid "" "or\n" " don't specify a number of seconds) it will ban the person " "indefinitely.\n" -" --exact can be used to specify an exact hostmask. You can combine " -"the\n" -" exact, nick, user, and host options as you choose. <channel> is " -"only\n" -" necessary if the message isn't sent in the channel itself.\n" +" --exact can be used to specify an exact hostmask.\n" +" You can combine the --nick, --user, and --host options as you " +"choose.\n" +" If --account is provided and the user is logged in and the network\n" +" supports account bans, this will ban the user's account instead.\n" +" <channel> is only necessary if the message isn't sent in the channel " +"itself.\n" " " msgstr "" "[<Kanal>] [--{exact,nick,user,host}] <Nick> [<Sekunden>] [<Begründung>]\n" @@ -414,28 +418,28 @@ msgstr "" "den Kick. <Kanal> ist nur notwendig, wenn die Nachricht nicht im Kanal " "selbst gesendet wurde." -#: plugin.py:355 plugin.py:581 +#: plugin.py:359 plugin.py:610 #, fuzzy msgid "ban someone" msgstr "jemanden entbannen" -#: plugin.py:375 +#: plugin.py:382 msgid "I haven't seen %s." msgstr "Ich habe % nicht gesehen." -#: plugin.py:385 +#: plugin.py:394 msgid "I cowardly refuse to kickban myself." msgstr "Ich bin zu feige um mich selbst zu kicken und zu bannen." -#: plugin.py:394 +#: plugin.py:397 plugin.py:409 plugin.py:418 msgid "I cowardly refuse to ban myself." msgstr "Ich bin zu feige um mich selbst zu bannen." -#: plugin.py:422 +#: plugin.py:451 msgid "%s has %s too, you can't ban them." msgstr "%s hat auch %s, du kannst ihn/sie/es nicht bannen." -#: plugin.py:433 +#: plugin.py:462 #, fuzzy msgid "" "[<channel>] [<hostmask|--all>]\n" @@ -457,19 +461,19 @@ msgstr "" "entbannen, falls du versehentlich im Kanal gebannt wurdest. <Kanal> ist nur " "notwendig, wenn die Nachricht nicht im Kanal selbst gesendet wurde." -#: plugin.py:453 +#: plugin.py:482 msgid "All bans on %s matching %s have been removed." msgstr "Alle Bans von %s die auf %s zutreffen wurden entfernt." -#: plugin.py:457 +#: plugin.py:486 msgid "No bans matching %s were found on %s." msgstr "Keine passenden Bans %s wurden in %s gefunden." -#: plugin.py:460 +#: plugin.py:489 msgid "unban someone" msgstr "jemanden entbannen" -#: plugin.py:467 +#: plugin.py:496 msgid "" "[<channel>]\n" "\n" @@ -477,11 +481,11 @@ msgid "" " If <channel> is not given, it defaults to the current channel." msgstr "" -#: plugin.py:471 +#: plugin.py:500 msgid "No bans." msgstr "" -#: plugin.py:476 +#: plugin.py:505 msgid "" "[<channel>] <nick>\n" "\n" @@ -496,19 +500,19 @@ msgstr "" "<Kanal> zu betreten. <Kanal> ist nur notwendig, wenn die Nachricht nicht im " "Kanal selbst gesendet wurde." -#: plugin.py:485 +#: plugin.py:514 msgid "invite someone" msgstr "jemanden einladen" -#: plugin.py:504 +#: plugin.py:533 msgid "%s is already in %s." msgstr "%s ist schon in %s." -#: plugin.py:511 +#: plugin.py:540 msgid "There is no %s on this network." msgstr "%s nicht auf diesem Netzwerk." -#: plugin.py:523 +#: plugin.py:552 msgid "" "[<channel>]\n" "\n" @@ -528,7 +532,7 @@ msgstr "" "im Kanal getätigt werden. <Kanal> ist nur notwendig, wenn die Nachricht " "nicht im Kanal selbst gesendet wurde." -#: plugin.py:538 +#: plugin.py:567 msgid "" "[<channel>]\n" "\n" @@ -547,7 +551,7 @@ msgstr "" "Kanal. <Kanal> ist nur notwendig, wenn die Nachricht nicht im Kanal selbst " "gesendet wurde." -#: plugin.py:553 +#: plugin.py:582 msgid "" "takes no arguments\n" "\n" @@ -558,16 +562,16 @@ msgstr "" "\n" "Gibt die Kanäle aus in denen der Bot hirnamputiert ist." -#: plugin.py:568 +#: plugin.py:597 msgid "I'm currently lobotomized in %L." msgstr "Ich bin momentan hirnamputiert in %L." -#: plugin.py:571 +#: plugin.py:600 msgid "I'm not currently lobotomized in any channels that you're in." msgstr "" "Momentan bin ich nicht hirnamputiert in allen Kanälen in denen du bist." -#: plugin.py:585 +#: plugin.py:614 msgid "" "[<channel>] <nick|hostmask> [<expires>]\n" "\n" @@ -595,7 +599,7 @@ msgstr "" "falls nicht angegeben wird der Ban niemals automatisch ablaufen. <Kanal> ist " "nur notwendig, wenn die Nachricht nicht im Kanal selbst gesendet wurde." -#: plugin.py:605 +#: plugin.py:639 msgid "" "[<channel>] <hostmask>\n" "\n" @@ -611,11 +615,11 @@ msgstr "" "<Hostmaske> aufgehoben. <Kanal> ist nur notwendig, wenn die Nachricht nicht " "im Kanal selbst gesendet wurde." -#: plugin.py:617 +#: plugin.py:651 msgid "There are no persistent bans for that hostmask." msgstr "Es gibt keine beständigen Bans für diese Hostmaske." -#: plugin.py:622 +#: plugin.py:656 #, fuzzy msgid "" "[<channel>] [<mask>]\n" @@ -633,19 +637,19 @@ msgstr "" "<Hostmaske> aufgehoben. <Kanal> ist nur notwendig, wenn die Nachricht nicht " "im Kanal selbst gesendet wurde." -#: plugin.py:640 +#: plugin.py:674 msgid "%q (expires %t)" msgstr "%q (läuft ab:%t)" -#: plugin.py:643 +#: plugin.py:677 msgid "%q (never expires)" msgstr "%q(läuft niemals ab)" -#: plugin.py:647 +#: plugin.py:681 msgid "There are no persistent bans on %s." msgstr "Es gibt keine beständigen Bans für %s." -#: plugin.py:654 +#: plugin.py:688 msgid "" "[<channel>] <nick|hostmask> [<expires>]\n" "\n" @@ -669,7 +673,7 @@ msgstr "" "Ignorierung niemals automatisch ablaufen. <Kanal> ist nur notwendig, wenn " "die Nachricht nicht im Kanal selbst gesendet wurde." -#: plugin.py:672 +#: plugin.py:706 #, fuzzy msgid "" "[<channel>] <nick|hostmask>\n" @@ -686,11 +690,11 @@ msgstr "" "von <Hostmaske> im Kanal entfernen. <Kanal> ist nur notwendig, wenn die " "Nachricht nicht im Kanal selbst gesendet wurde." -#: plugin.py:684 +#: plugin.py:718 msgid "There are no ignores for that hostmask." msgstr "Es gibt keine Ignorierungen für diese Hostmaske." -#: plugin.py:689 +#: plugin.py:723 msgid "" "[<channel>]\n" "\n" @@ -705,11 +709,11 @@ msgstr "" "Listet die Hostmasken auf, die der Bot im gegeben Kanal ignoriert. <Kanal> " "ist nur notwendig, wenn die Nachricht nicht im Kanal selbst gesendet wurde." -#: plugin.py:698 +#: plugin.py:732 msgid "I'm not currently ignoring any hostmasks in %q" msgstr "Momentan ignoriere ich keine Hostmasken in %s." -#: plugin.py:709 +#: plugin.py:743 #, fuzzy msgid "" "[<channel>] <nick|username> <capability> [<capability> ...]\n" @@ -727,7 +731,7 @@ msgstr "" "<Kanal> ist nur notwendig, wenn die Nachricht nicht im Kanal selbst gesendet " "wurde." -#: plugin.py:725 +#: plugin.py:759 msgid "" "[<channel>] <name|hostmask> <capability> [<capability> ...]\n" "\n" @@ -746,11 +750,11 @@ msgstr "" "auf des Benutzers auf den die <Hostmaske> zutrifft). <Kanal> ist nur " "notwendig, wenn die Nachricht nicht im Kanal selbst gesendet wurde." -#: plugin.py:744 +#: plugin.py:778 msgid "That user didn't have the %L %s." msgstr "Der Nutzer hatte nicht %L %s." -#: plugin.py:753 +#: plugin.py:787 msgid "" "[<channel>] {True|False}\n" "\n" @@ -770,7 +774,7 @@ msgstr "" "angegeben Antwort setzen. <Kanal> ist nur notwendig, wenn die Nachricht " "nicht im Kanal selbst gesendet wurde." -#: plugin.py:771 +#: plugin.py:805 msgid "" "[<channel>] <capability> [<capability> ...]\n" "\n" @@ -787,7 +791,7 @@ msgstr "" "<Fähigkeit> für alle Benutzer hinzugefügt. <Kanal> ist nur notwendig, wenn " "die Nachricht nicht im Kanal selbst gesendet wurde." -#: plugin.py:786 +#: plugin.py:820 msgid "" "[<channel>] <capability> [<capability> ...]\n" "\n" @@ -807,15 +811,15 @@ msgstr "" "vorrang haben. <Kanal> ist nur notwendig, wenn die Nachricht nicht im Kanal " "selbst gesendet wurde." -#: plugin.py:802 +#: plugin.py:836 msgid "capability" msgstr "Fähigkeit" -#: plugin.py:805 +#: plugin.py:839 msgid "I do not know about the %L %s." msgstr "Ich weiß nichts von %L %s." -#: plugin.py:812 +#: plugin.py:846 msgid "" "[<channel>]\n" "\n" @@ -828,7 +832,7 @@ msgstr "" "Gibt die Fähigkeiten zurück, die es im <Kanal> gibt. <Kanal> ist nur " "notwendig, falls die Nachricht nicht im Kanal selbt gegeben wurde." -#: plugin.py:824 +#: plugin.py:858 msgid "" "[<channel>] [<plugin>] [<command>]\n" "\n" @@ -849,15 +853,15 @@ msgstr "" "angegeben wurde, werden alle Befehle des Plugins deaktiviert. <Kanal> ist " "nur notwendig, wenn die Nachricht nicht im Kanal selbst gesendet wurde." -#: plugin.py:840 plugin.py:879 +#: plugin.py:874 plugin.py:913 msgid "The %s plugin does not have a command called %s." msgstr "%s Plugin hat keinen Befehl %s." -#: plugin.py:847 plugin.py:886 +#: plugin.py:881 plugin.py:920 msgid "No plugin or command named %s could be found." msgstr "Kein Plugin oder Befehl mit dem Namen %s konnte gefunden werden." -#: plugin.py:863 +#: plugin.py:897 msgid "" "[<channel>] [<plugin>] [<command>]\n" "\n" @@ -879,11 +883,11 @@ msgstr "" "wurde, werden alle Befehle des Plugins aktiviert. <Kanal> ist nur notwendig, " "wenn die Nachricht nicht im Kanal selbst gesendet wurde." -#: plugin.py:900 +#: plugin.py:934 msgid "%s was not disabled." msgstr "%s wurde nicht abgeschaltet." -#: plugin.py:909 +#: plugin.py:943 msgid "" "[<channel>] [--count]\n" "\n" @@ -899,11 +903,11 @@ msgstr "" "Nachricht nicht im Kanal selbst gesendet wurde. Gibt nur die Anzahl der " "Nicks an, falls die --count Option angegeben wurde." -#: plugin.py:931 +#: plugin.py:965 msgid "You don't have access to that information." msgstr "Ich habe keinen Zugriff auf diese Informationen." -#: plugin.py:946 +#: plugin.py:980 msgid "" "Internal message for notifying all the #channel,ops in a channel of\n" " a given situation." @@ -911,15 +915,15 @@ msgstr "" "Interne Nachricht die alle #channel,ops eines Kanals über eine Situation " "informiert." -#: plugin.py:949 +#: plugin.py:983 msgid "Alert to all %s ops: %s" msgstr "Alarm an alle %s Operatoren: %s" -#: plugin.py:951 +#: plugin.py:985 msgid " (from %s)" msgstr "(von %s)" -#: plugin.py:963 +#: plugin.py:997 msgid "" "[<channel>] <text>\n" "\n" @@ -932,7 +936,7 @@ msgstr "" "\n" "Sendet <Text an alle Nutzer im <Kanal>, die die <Kanal>,op Fähigkeit haben." -#: plugin.py:973 +#: plugin.py:1007 msgid "" "[<channel>] [<reason>]\n" "\n" @@ -947,11 +951,15 @@ msgid "" " " msgstr "" -#: plugin.py:994 +#: plugin.py:1028 #, fuzzy msgid "I'm not in %s." msgstr "Ich habe % nicht gesehen." +#: plugin.py:1032 +msgid "%s removed from configured join list." +msgstr "" + #~ msgid "" #~ "I cowardly refuse to devoice myself. If you really want me devoiced, " #~ "tell me to op you and then devoice me yourself." diff --git a/plugins/Channel/locales/fi.po b/plugins/Channel/locales/fi.po index 48373839e..ed346b65b 100644 --- a/plugins/Channel/locales/fi.po +++ b/plugins/Channel/locales/fi.po @@ -4,7 +4,7 @@ msgid "" msgstr "" "Project-Id-Version: Supybot Channel\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2014-12-20 12:14+0200\n" "Last-Translator: Mikaela Suomalainen <mikaela.suomalainen@outlook.com>\n" "Language-Team: suomi <>\n" @@ -384,8 +384,10 @@ msgid "kick someone" msgstr "potki joku" #: plugin.py:316 +#, fuzzy msgid "" -"[<channel>] [--{exact,nick,user,host}] <nick> [<seconds>] [<reason>]\n" +"[<channel>] [--{exact,nick,user,host,account}] <nick> [<seconds>] " +"[<reason>]\n" "\n" " If you have the #channel,op capability, this will kickban <nick> " "for\n" @@ -394,13 +396,13 @@ msgid "" " don't specify a number of seconds) it will ban the person " "indefinitely.\n" " --exact bans only the exact hostmask; --nick bans just the nick;\n" -" --user bans just the user, and --host bans just the host. You can\n" -" combine these options as you choose. <reason> is a reason to give " -"for\n" -" the kick.\n" -" <channel> is only necessary if the message isn't sent in the " -"channel\n" -" itself.\n" +" --user bans just the user, and --host bans just the host\n" +" You can combine the --nick, --user, and --host options as you " +"choose.\n" +" If --account is provided and the user is logged in and the network\n" +" supports account bans, this will ban the user's account instead.\n" +" <channel> is only necessary if the message isn't sent in the channel " +"itself.\n" " " msgstr "" "[<kanava>] [--{exact,nick,user,host}] <nimimerkki> [<sekuntit>] [<syy>]\n" @@ -422,11 +424,12 @@ msgstr "" " itsellään.\n" " " -#: plugin.py:333 +#: plugin.py:334 msgid "kick or ban someone" msgstr "potki tai anna jollekulle porttikielto" -#: plugin.py:341 +#: plugin.py:342 +#, fuzzy msgid "" "[<channel>] [--{exact,nick,user,host}] <nick> [<seconds>]\n" "\n" @@ -435,11 +438,13 @@ msgid "" "or\n" " don't specify a number of seconds) it will ban the person " "indefinitely.\n" -" --exact can be used to specify an exact hostmask. You can combine " -"the\n" -" exact, nick, user, and host options as you choose. <channel> is " -"only\n" -" necessary if the message isn't sent in the channel itself.\n" +" --exact can be used to specify an exact hostmask.\n" +" You can combine the --nick, --user, and --host options as you " +"choose.\n" +" If --account is provided and the user is logged in and the network\n" +" supports account bans, this will ban the user's account instead.\n" +" <channel> is only necessary if the message isn't sent in the channel " +"itself.\n" " " msgstr "" "[<kanava>] [--{exact,nick,user,host}] <nimimerkki> [<sekuntit>]\n" @@ -457,30 +462,30 @@ msgstr "" "lähetetä \n" " kanavalla itsellään." -#: plugin.py:355 plugin.py:581 +#: plugin.py:359 plugin.py:610 msgid "ban someone" msgstr "anna jollekulle porttikielto" -#: plugin.py:375 +#: plugin.py:382 msgid "I haven't seen %s." msgstr "Minä en ole nähnyt käyttäjää %s." -#: plugin.py:385 +#: plugin.py:394 msgid "I cowardly refuse to kickban myself." msgstr "" "Minä pelkurimaisesti kieltäydyn potkimasta itseäni ja antamasta itselleni " "porttikieltoa." -#: plugin.py:394 +#: plugin.py:397 plugin.py:409 plugin.py:418 msgid "I cowardly refuse to ban myself." msgstr "Minä pelkurimaisesti kieltäydyn antamasta itselleni porttikieltoa." -#: plugin.py:422 +#: plugin.py:451 msgid "%s has %s too, you can't ban them." msgstr "" "Käyttäjälltä %s on myös valtuus %s, et voi antaa hänelle/sille porttikieltoa." -#: plugin.py:433 +#: plugin.py:462 #, fuzzy msgid "" "[<channel>] [<hostmask|--all>]\n" @@ -506,21 +511,21 @@ msgstr "" " vaadittu vain jos viestiä ei lähetetä kanavalla itsellään.\n" " " -#: plugin.py:453 +#: plugin.py:482 msgid "All bans on %s matching %s have been removed." msgstr "" "Kaikki porttikiellot, jotka täsmäävät kanavalla %s käyttäjään %s on " "poistettu." -#: plugin.py:457 +#: plugin.py:486 msgid "No bans matching %s were found on %s." msgstr "Banneja, jotka täsmäävät käyttäjään %s ei löydetty kanavalla %s." -#: plugin.py:460 +#: plugin.py:489 msgid "unban someone" msgstr "poista joltakulta porttikielto" -#: plugin.py:467 +#: plugin.py:496 msgid "" "[<channel>]\n" "\n" @@ -532,11 +537,11 @@ msgstr "" " Luettelee kaikki kanavan porttikiellot.\n" " Jos <kanavaa> ei ole annettu, se on oletuksena nykyinen kanava." -#: plugin.py:471 +#: plugin.py:500 msgid "No bans." msgstr "Ei porttikieltoja." -#: plugin.py:476 +#: plugin.py:505 msgid "" "[<channel>] <nick>\n" "\n" @@ -552,19 +557,19 @@ msgstr "" " ei lähetetä kanavalla itsessään.\n" " " -#: plugin.py:485 +#: plugin.py:514 msgid "invite someone" msgstr "kutsu joku" -#: plugin.py:504 +#: plugin.py:533 msgid "%s is already in %s." msgstr "%s on jo kanavalla %s" -#: plugin.py:511 +#: plugin.py:540 msgid "There is no %s on this network." msgstr "Käyttäjä %s ei ole tässä verkossa." -#: plugin.py:523 +#: plugin.py:552 msgid "" "[<channel>]\n" "\n" @@ -587,7 +592,7 @@ msgstr "" " kanavalla itsellään.\n" " " -#: plugin.py:538 +#: plugin.py:567 msgid "" "[<channel>]\n" "\n" @@ -608,7 +613,7 @@ msgstr "" "itsellään.\n" " " -#: plugin.py:553 +#: plugin.py:582 msgid "" "takes no arguments\n" "\n" @@ -620,15 +625,15 @@ msgstr "" " Palauttaa kanavat, joilla botti on lobotomoitu.\n" " " -#: plugin.py:568 +#: plugin.py:597 msgid "I'm currently lobotomized in %L." msgstr "Minut on tällä hetkellä lobotomoity seuraavilla kanavilla: %L." -#: plugin.py:571 +#: plugin.py:600 msgid "I'm not currently lobotomized in any channels that you're in." msgstr "En tällä hetkellä ole lobotomoitu millään kanavalla, jolla sinä olet." -#: plugin.py:585 +#: plugin.py:614 msgid "" "[<channel>] <nick|hostmask> [<expires>]\n" "\n" @@ -665,7 +670,7 @@ msgstr "" " kanavalla itsellään.\n" " " -#: plugin.py:605 +#: plugin.py:639 msgid "" "[<channel>] <hostmask>\n" "\n" @@ -683,11 +688,11 @@ msgstr "" " viestiä ei lähetetä kanavalla itsellään.\n" " " -#: plugin.py:617 +#: plugin.py:651 msgid "There are no persistent bans for that hostmask." msgstr "Tuolla hostmaskilla ei ole pysyvää porttikieltoa." -#: plugin.py:622 +#: plugin.py:656 #, fuzzy msgid "" "[<channel>] [<mask>]\n" @@ -707,19 +712,19 @@ msgstr "" " viestiä ei lähetetä kanavalla itsellään.\n" " " -#: plugin.py:640 +#: plugin.py:674 msgid "%q (expires %t)" msgstr "%q (venhentuu %t)" -#: plugin.py:643 +#: plugin.py:677 msgid "%q (never expires)" msgstr "%q (ei vanhene ikinä)" -#: plugin.py:647 +#: plugin.py:681 msgid "There are no persistent bans on %s." msgstr "Kanavalla %s ei ole pysyviä porttikieltoja." -#: plugin.py:654 +#: plugin.py:688 msgid "" "[<channel>] <nick|hostmask> [<expires>]\n" "\n" @@ -748,7 +753,7 @@ msgstr "" " kanavalla itsellään.\n" " " -#: plugin.py:672 +#: plugin.py:706 #, fuzzy msgid "" "[<channel>] <nick|hostmask>\n" @@ -767,11 +772,11 @@ msgstr "" " viestiä ei lähetetä kanavalla itsellään.\n" " " -#: plugin.py:684 +#: plugin.py:718 msgid "There are no ignores for that hostmask." msgstr "Tuolla hostmaskilla ei ole pysyviä huomiotta jättämisiä." -#: plugin.py:689 +#: plugin.py:723 msgid "" "[<channel>]\n" "\n" @@ -789,11 +794,11 @@ msgstr "" " kanavalla itsellään.\n" " " -#: plugin.py:698 +#: plugin.py:732 msgid "I'm not currently ignoring any hostmasks in %q" msgstr "En tällä hetkellä jätä mitään hostmaskia huomiotta kanavalla %q." -#: plugin.py:709 +#: plugin.py:743 msgid "" "[<channel>] <nick|username> <capability> [<capability> ...]\n" "\n" @@ -812,7 +817,7 @@ msgstr "" " vaadittu vain jos viestiä ei lähetetä kanavalla itsellään.\n" " " -#: plugin.py:725 +#: plugin.py:759 msgid "" "[<channel>] <name|hostmask> <capability> [<capability> ...]\n" "\n" @@ -833,11 +838,11 @@ msgstr "" " vaadittu vain jos viestiä ei lähetetä kanavalla itsellään.\n" " " -#: plugin.py:744 +#: plugin.py:778 msgid "That user didn't have the %L %s." msgstr "Tuolla käyttäjällä ei ollut valtuutta %L kanavalla %s." -#: plugin.py:753 +#: plugin.py:787 msgid "" "[<channel>] {True|False}\n" "\n" @@ -858,7 +863,7 @@ msgstr "" " jos viestiä ei lähetetä kanavalla itsellään.\n" " " -#: plugin.py:771 +#: plugin.py:805 msgid "" "[<channel>] <capability> [<capability> ...]\n" "\n" @@ -876,7 +881,7 @@ msgstr "" " vaadittu vain jos viestiä ei lähetetä kanavalla itsellään.\n" " " -#: plugin.py:786 +#: plugin.py:820 msgid "" "[<channel>] <capability> [<capability> ...]\n" "\n" @@ -897,15 +902,15 @@ msgstr "" " vain jos viestiä ei lähetetä kanavalla itsellään.\n" " " -#: plugin.py:802 +#: plugin.py:836 msgid "capability" msgstr "valtuus" -#: plugin.py:805 +#: plugin.py:839 msgid "I do not know about the %L %s." msgstr "En tiedä valtuudesta %L kanavalla %s." -#: plugin.py:812 +#: plugin.py:846 msgid "" "[<channel>]\n" "\n" @@ -920,7 +925,7 @@ msgstr "" " vaadittu vain, jos viestiä ei lähetetä kanavalla itsellään.\n" " " -#: plugin.py:824 +#: plugin.py:858 msgid "" "[<channel>] [<plugin>] [<command>]\n" "\n" @@ -945,15 +950,15 @@ msgstr "" " viestiä ei lähetetä kanavalla itsellään.\n" " " -#: plugin.py:840 plugin.py:879 +#: plugin.py:874 plugin.py:913 msgid "The %s plugin does not have a command called %s." msgstr "%s lisäosassa ei ole komentoa %s." -#: plugin.py:847 plugin.py:886 +#: plugin.py:881 plugin.py:920 msgid "No plugin or command named %s could be found." msgstr "Lisäosaa tai komentoa nimeltä %s ei löytynyt." -#: plugin.py:863 +#: plugin.py:897 msgid "" "[<channel>] [<plugin>] [<command>]\n" "\n" @@ -979,11 +984,11 @@ msgstr "" " on vaadittu vain jos viestiä ei lähetetä kanavalla itsellään.\n" " " -#: plugin.py:900 +#: plugin.py:934 msgid "%s was not disabled." msgstr "%s ei ollut poistettu käytöstä." -#: plugin.py:909 +#: plugin.py:943 msgid "" "[<channel>] [--count]\n" "\n" @@ -1000,11 +1005,11 @@ msgstr "" " viestiä ei lähetetä kanavalla itsellään.\n" " " -#: plugin.py:931 +#: plugin.py:965 msgid "You don't have access to that information." msgstr "Sinulla ei ole pääsyoikeutta tuohon tietoon." -#: plugin.py:946 +#: plugin.py:980 msgid "" "Internal message for notifying all the #channel,ops in a channel of\n" " a given situation." @@ -1013,15 +1018,15 @@ msgstr "" "valtuus kanavalla,\n" " annetusta tilanteesta." -#: plugin.py:949 +#: plugin.py:983 msgid "Alert to all %s ops: %s" msgstr "Hälytys kaikille kanavan %s operaattoreille: %s" -#: plugin.py:951 +#: plugin.py:985 msgid " (from %s)" msgstr "(lähettänyt %s)" -#: plugin.py:963 +#: plugin.py:997 msgid "" "[<channel>] <text>\n" "\n" @@ -1037,7 +1042,7 @@ msgstr "" " valtuus.\n" " " -#: plugin.py:973 +#: plugin.py:1007 msgid "" "[<channel>] [<reason>]\n" "\n" @@ -1052,11 +1057,15 @@ msgid "" " " msgstr "" -#: plugin.py:994 +#: plugin.py:1028 #, fuzzy msgid "I'm not in %s." msgstr "Minä en ole nähnyt käyttäjää %s." +#: plugin.py:1032 +msgid "%s removed from configured join list." +msgstr "" + #~ msgid "" #~ "I cowardly refuse to devoice myself. If you really want me devoiced, " #~ "tell me to op you and then devoice me yourself." diff --git a/plugins/Channel/locales/fr.po b/plugins/Channel/locales/fr.po index 02bee0305..47d571e0a 100644 --- a/plugins/Channel/locales/fr.po +++ b/plugins/Channel/locales/fr.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: Limnoria\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: \n" "Last-Translator: Valentin Lorentz <progval@gmail.com>\n" "Language-Team: Limnoria <progval@gmail.com>\n" @@ -348,8 +348,10 @@ msgid "kick someone" msgstr "kicker quelqu'un" #: plugin.py:316 +#, fuzzy msgid "" -"[<channel>] [--{exact,nick,user,host}] <nick> [<seconds>] [<reason>]\n" +"[<channel>] [--{exact,nick,user,host,account}] <nick> [<seconds>] " +"[<reason>]\n" "\n" " If you have the #channel,op capability, this will kickban <nick> " "for\n" @@ -358,13 +360,13 @@ msgid "" " don't specify a number of seconds) it will ban the person " "indefinitely.\n" " --exact bans only the exact hostmask; --nick bans just the nick;\n" -" --user bans just the user, and --host bans just the host. You can\n" -" combine these options as you choose. <reason> is a reason to give " -"for\n" -" the kick.\n" -" <channel> is only necessary if the message isn't sent in the " -"channel\n" -" itself.\n" +" --user bans just the user, and --host bans just the host\n" +" You can combine the --nick, --user, and --host options as you " +"choose.\n" +" If --account is provided and the user is logged in and the network\n" +" supports account bans, this will ban the user's account instead.\n" +" <channel> is only necessary if the message isn't sent in the channel " +"itself.\n" " " msgstr "" "[<canal>] [--{exact,nick,user,host}] <nick> [<secondes>] [<raison>]\n" @@ -377,11 +379,11 @@ msgstr "" "<raison> est une raison que vous donnez pour le kick. <canal> n'est " "nécessaire que si le message n'est pas envoyé sur le canal lui-même." -#: plugin.py:333 +#: plugin.py:334 msgid "kick or ban someone" msgstr "kicker ou bannir quelqu'un" -#: plugin.py:341 +#: plugin.py:342 #, fuzzy msgid "" "[<channel>] [--{exact,nick,user,host}] <nick> [<seconds>]\n" @@ -391,11 +393,13 @@ msgid "" "or\n" " don't specify a number of seconds) it will ban the person " "indefinitely.\n" -" --exact can be used to specify an exact hostmask. You can combine " -"the\n" -" exact, nick, user, and host options as you choose. <channel> is " -"only\n" -" necessary if the message isn't sent in the channel itself.\n" +" --exact can be used to specify an exact hostmask.\n" +" You can combine the --nick, --user, and --host options as you " +"choose.\n" +" If --account is provided and the user is logged in and the network\n" +" supports account bans, this will ban the user's account instead.\n" +" <channel> is only necessary if the message isn't sent in the channel " +"itself.\n" " " msgstr "" "[<canal>] [--{exact,nick,user,host}] <nick> [<secondes>]\n" @@ -408,27 +412,27 @@ msgstr "" "raison que vous donnez pour le kick. <canal> n'est nécessaire que si le " "message n'est pas envoyé sur le canal lui-même." -#: plugin.py:355 plugin.py:581 +#: plugin.py:359 plugin.py:610 msgid "ban someone" msgstr "bannir quelqu'un" -#: plugin.py:375 +#: plugin.py:382 msgid "I haven't seen %s." msgstr "Je n'ai jamais vu %s." -#: plugin.py:385 +#: plugin.py:394 msgid "I cowardly refuse to kickban myself." msgstr "Je suis trop couard pour me kickbannir moi-même." -#: plugin.py:394 +#: plugin.py:397 plugin.py:409 plugin.py:418 msgid "I cowardly refuse to ban myself." msgstr "Je suis trop couard pour me bannir moi-même." -#: plugin.py:422 +#: plugin.py:451 msgid "%s has %s too, you can't ban them." msgstr "%s est aussi %s, je ne peux le/la bannir." -#: plugin.py:433 +#: plugin.py:462 msgid "" "[<channel>] [<hostmask|--all>]\n" "\n" @@ -449,19 +453,19 @@ msgstr "" "manière inatendue ou accidentelle d'un canal. <canal> n'est nécessaire que " "si le message n'est pas envoyé sur le canal lui-même." -#: plugin.py:453 +#: plugin.py:482 msgid "All bans on %s matching %s have been removed." msgstr "Tous les bannissements sur %s correspondant à %s ont été supprimés." -#: plugin.py:457 +#: plugin.py:486 msgid "No bans matching %s were found on %s." msgstr "Aucun bannissement correspondant à %s n'a été trouvé sur %s." -#: plugin.py:460 +#: plugin.py:489 msgid "unban someone" msgstr "débannir quelqu'un" -#: plugin.py:467 +#: plugin.py:496 msgid "" "[<channel>]\n" "\n" @@ -471,11 +475,11 @@ msgstr "" "[<canal>]Liste tous les bannissements du salon. Si <canal> n'est pas donné, " "il correspond au canal actuel." -#: plugin.py:471 +#: plugin.py:500 msgid "No bans." msgstr "Pas de bannissement." -#: plugin.py:476 +#: plugin.py:505 msgid "" "[<channel>] <nick>\n" "\n" @@ -490,19 +494,19 @@ msgstr "" "<canal>. <canal> n'est nécessaire que si le message n'est pas envoyé sur le " "canal lui-même." -#: plugin.py:485 +#: plugin.py:514 msgid "invite someone" msgstr "inviter quelqu'un" -#: plugin.py:504 +#: plugin.py:533 msgid "%s is already in %s." msgstr "%s est déjà sur %s." -#: plugin.py:511 +#: plugin.py:540 msgid "There is no %s on this network." msgstr "Il n'y a aucun %s sur ce réseau." -#: plugin.py:523 +#: plugin.py:552 msgid "" "[<channel>]\n" "\n" @@ -522,7 +526,7 @@ msgstr "" "canal. <canal> n'est nécessaire que si le message n'est pas envoyé sur le " "canal lui-même." -#: plugin.py:538 +#: plugin.py:567 msgid "" "[<channel>]\n" "\n" @@ -541,7 +545,7 @@ msgstr "" "sur le canal. <canal> n'est nécessaire que si le message n'est pas envoyé " "sur le canal lui-même." -#: plugin.py:553 +#: plugin.py:582 msgid "" "takes no arguments\n" "\n" @@ -552,15 +556,15 @@ msgstr "" "\n" "Retourne les canaux sur lesquels le bot est lobotomisé." -#: plugin.py:568 +#: plugin.py:597 msgid "I'm currently lobotomized in %L." msgstr "Je suis actuellement lobotomisé sur %L." -#: plugin.py:571 +#: plugin.py:600 msgid "I'm not currently lobotomized in any channels that you're in." msgstr "Je ne suis actuellement lobotomisé sur aucun canal où vous êtes." -#: plugin.py:585 +#: plugin.py:614 msgid "" "[<channel>] <nick|hostmask> [<expires>]\n" "\n" @@ -586,7 +590,7 @@ msgstr "" "masque d'hôte lorsqu'ils entrent. <expiration> est un argument option, " "correspondant à la durée, en secondes, que doit avoir le bannissement." -#: plugin.py:605 +#: plugin.py:639 msgid "" "[<channel>] <hostmask>\n" "\n" @@ -602,11 +606,11 @@ msgstr "" "persistant sur le <masque d'hôte>. <canal> n'est nécessaire que si le " "message n'est pas envoyé sur le canal lui-même." -#: plugin.py:617 +#: plugin.py:651 msgid "There are no persistent bans for that hostmask." msgstr "Il n'y a pas de bannissement persistant pour ce masque d'hôte." -#: plugin.py:622 +#: plugin.py:656 #, fuzzy msgid "" "[<channel>] [<mask>]\n" @@ -624,19 +628,19 @@ msgstr "" "persistant sur le <masque d'hôte>. <canal> n'est nécessaire que si le " "message n'est pas envoyé sur le canal lui-même." -#: plugin.py:640 +#: plugin.py:674 msgid "%q (expires %t)" msgstr "%q (expire dans %t)" -#: plugin.py:643 +#: plugin.py:677 msgid "%q (never expires)" msgstr "%q (n'expire jamais)" -#: plugin.py:647 +#: plugin.py:681 msgid "There are no persistent bans on %s." msgstr "Il n'y a pas de bannissement persistant sur %s." -#: plugin.py:654 +#: plugin.py:688 msgid "" "[<channel>] <nick|hostmask> [<expires>]\n" "\n" @@ -660,7 +664,7 @@ msgstr "" "n'expirera jamais. <canal> n'est nécessaire que si le message n'est pas " "envoyé sur le canal lui-même." -#: plugin.py:672 +#: plugin.py:706 #, fuzzy msgid "" "[<channel>] <nick|hostmask>\n" @@ -677,11 +681,11 @@ msgstr "" "persistant du <masque d'hôte> sur le canal. <canal> n'est nécessaire que si " "le message n'est pas envoyé sur le canal lui-même." -#: plugin.py:684 +#: plugin.py:718 msgid "There are no ignores for that hostmask." msgstr "Il n'y a pas d'ignorance pour ce masque d'hôte." -#: plugin.py:689 +#: plugin.py:723 msgid "" "[<channel>]\n" "\n" @@ -696,11 +700,11 @@ msgstr "" "Liste les masques d'hôte que le bot ignore sur le canal donné. <canal> n'est " "nécessaire que si le message n'est pas envoyé sur le canal lui-même." -#: plugin.py:698 +#: plugin.py:732 msgid "I'm not currently ignoring any hostmasks in %q" msgstr "Je n'ignore actuellement aucun masque d'hôte sur %q." -#: plugin.py:709 +#: plugin.py:743 msgid "" "[<channel>] <nick|username> <capability> [<capability> ...]\n" "\n" @@ -716,7 +720,7 @@ msgstr "" "ayant actuellement le <nick>) la <capacité> sur le canal. <canal> n'est " "nécessaire que si le message n'est pas envoyé sur le canal lui-même." -#: plugin.py:725 +#: plugin.py:759 msgid "" "[<channel>] <name|hostmask> <capability> [<capability> ...]\n" "\n" @@ -735,11 +739,11 @@ msgstr "" "op. <canal> n'est nécessaire que si le message n'est pas envoyé sur le canal " "lui-même." -#: plugin.py:744 +#: plugin.py:778 msgid "That user didn't have the %L %s." msgstr "Cet utilisateur n'a pas les %L %s." -#: plugin.py:753 +#: plugin.py:787 msgid "" "[<channel>] {True|False}\n" "\n" @@ -759,7 +763,7 @@ msgstr "" "<canal> n'est nécessaire que si le message n'est pas envoyé sur " "le canal lui-même." -#: plugin.py:771 +#: plugin.py:805 msgid "" "[<channel>] <capability> [<capability> ...]\n" "\n" @@ -776,7 +780,7 @@ msgstr "" "tous les utilisateurs du canal. <canal> n'est nécessaire que si le message " "n'est pas envoyé sur le canal lui-même." -#: plugin.py:786 +#: plugin.py:820 msgid "" "[<channel>] <capability> [<capability> ...]\n" "\n" @@ -795,15 +799,15 @@ msgstr "" "utilisateurs du canal aient la <capacité> de canal. <canal> n'est nécessaire " "que si le message n'est pas envoyé sur le canal lui-même." -#: plugin.py:802 +#: plugin.py:836 msgid "capability" msgstr "capacité" -#: plugin.py:805 +#: plugin.py:839 msgid "I do not know about the %L %s." msgstr "Je ne sais rien à propos des %L %s." -#: plugin.py:812 +#: plugin.py:846 msgid "" "[<channel>]\n" "\n" @@ -816,7 +820,7 @@ msgstr "" "Retourne les capacité présentes sur le <canal>. <canal> n'est nécessaire que " "si le message n'est pas envoyé sur le canal lui-même." -#: plugin.py:824 +#: plugin.py:858 msgid "" "[<channel>] [<plugin>] [<command>]\n" "\n" @@ -836,15 +840,15 @@ msgstr "" "désactivées. <canal> n'est nécessaire que si le message n'est pas envoyé sur " "le canal lui-même." -#: plugin.py:840 plugin.py:879 +#: plugin.py:874 plugin.py:913 msgid "The %s plugin does not have a command called %s." msgstr "Le plugin %s n'a pas de commande appelée %s." -#: plugin.py:847 plugin.py:886 +#: plugin.py:881 plugin.py:920 msgid "No plugin or command named %s could be found." msgstr "Aucun plugin ou commande appelé %s n'a pû être trouvé." -#: plugin.py:863 +#: plugin.py:897 msgid "" "[<channel>] [<plugin>] [<command>]\n" "\n" @@ -865,11 +869,11 @@ msgstr "" "la commande de ce plugin sera activée. <canal> n'est nécessaire " "n'est pas envoyé sur le canal lui-même." -#: plugin.py:900 +#: plugin.py:934 msgid "%s was not disabled." msgstr "%s n'était pas désactivé." -#: plugin.py:909 +#: plugin.py:943 msgid "" "[<channel>] [--count]\n" "\n" @@ -885,11 +889,11 @@ msgstr "" "n'est pas envoyé sur le canal lui-même. Ne retourne que le nombre de nicks " "si --count est donné." -#: plugin.py:931 +#: plugin.py:965 msgid "You don't have access to that information." msgstr "Vous n'avez pas accès à cette information" -#: plugin.py:946 +#: plugin.py:980 msgid "" "Internal message for notifying all the #channel,ops in a channel of\n" " a given situation." @@ -897,15 +901,15 @@ msgstr "" "Message interne pour notifier tous les #canal,ops sur un canal d'une " "situation donnée." -#: plugin.py:949 +#: plugin.py:983 msgid "Alert to all %s ops: %s" msgstr "Alerte à tous les ops de %s : %s" -#: plugin.py:951 +#: plugin.py:985 msgid " (from %s)" msgstr "(de %s)" -#: plugin.py:963 +#: plugin.py:997 msgid "" "[<channel>] <text>\n" "\n" @@ -919,7 +923,7 @@ msgstr "" "Envoie le <texte> à tous les utilisateurs sur <canal> qui ont la capacité " "#canal,op." -#: plugin.py:973 +#: plugin.py:1007 msgid "" "[<channel>] [<reason>]\n" "\n" @@ -934,11 +938,15 @@ msgid "" " " msgstr "" -#: plugin.py:994 +#: plugin.py:1028 #, fuzzy msgid "I'm not in %s." msgstr "Je n'ai jamais vu %s." +#: plugin.py:1032 +msgid "%s removed from configured join list." +msgstr "" + #~ msgid "" #~ "I cowardly refuse to devoice myself. If you really want me devoiced, " #~ "tell me to op you and then devoice me yourself." diff --git a/plugins/Channel/locales/hu.po b/plugins/Channel/locales/hu.po index 3a03926aa..61df4e44f 100644 --- a/plugins/Channel/locales/hu.po +++ b/plugins/Channel/locales/hu.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: Limnoria Channel\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2012-04-27 14:49+0200\n" "Last-Translator: Mikaela Suomalainen <mikaela.suomalainen@outlook.com>\n" "Language-Team: \n" @@ -354,8 +354,10 @@ msgid "kick someone" msgstr "kirúgni valakit" #: plugin.py:316 +#, fuzzy msgid "" -"[<channel>] [--{exact,nick,user,host}] <nick> [<seconds>] [<reason>]\n" +"[<channel>] [--{exact,nick,user,host,account}] <nick> [<seconds>] " +"[<reason>]\n" "\n" " If you have the #channel,op capability, this will kickban <nick> " "for\n" @@ -364,13 +366,13 @@ msgid "" " don't specify a number of seconds) it will ban the person " "indefinitely.\n" " --exact bans only the exact hostmask; --nick bans just the nick;\n" -" --user bans just the user, and --host bans just the host. You can\n" -" combine these options as you choose. <reason> is a reason to give " -"for\n" -" the kick.\n" -" <channel> is only necessary if the message isn't sent in the " -"channel\n" -" itself.\n" +" --user bans just the user, and --host bans just the host\n" +" You can combine the --nick, --user, and --host options as you " +"choose.\n" +" If --account is provided and the user is logged in and the network\n" +" supports account bans, this will ban the user's account instead.\n" +" <channel> is only necessary if the message isn't sent in the channel " +"itself.\n" " " msgstr "" "[<csatorna>] [--{exact,nick,user,host}] <név> [<másodpercek>] [<ok>]\n" @@ -382,11 +384,11 @@ msgstr "" "tiltja ki, és --host csak a hosztot tiltja ki. Kombinálhatod az opciókat " "ahogy szeretnéd. <ok> egy ok a kirúgáshoz." -#: plugin.py:333 +#: plugin.py:334 msgid "kick or ban someone" msgstr "kirúgni vagy kitiltani valakit" -#: plugin.py:341 +#: plugin.py:342 #, fuzzy msgid "" "[<channel>] [--{exact,nick,user,host}] <nick> [<seconds>]\n" @@ -396,11 +398,13 @@ msgid "" "or\n" " don't specify a number of seconds) it will ban the person " "indefinitely.\n" -" --exact can be used to specify an exact hostmask. You can combine " -"the\n" -" exact, nick, user, and host options as you choose. <channel> is " -"only\n" -" necessary if the message isn't sent in the channel itself.\n" +" --exact can be used to specify an exact hostmask.\n" +" You can combine the --nick, --user, and --host options as you " +"choose.\n" +" If --account is provided and the user is logged in and the network\n" +" supports account bans, this will ban the user's account instead.\n" +" <channel> is only necessary if the message isn't sent in the channel " +"itself.\n" " " msgstr "" "[<csatorna>] [--{exact,nick,user,host}] <név> [<másodpercek>] [<ok>]\n" @@ -412,28 +416,28 @@ msgstr "" "tiltja ki, és --host csak a hosztot tiltja ki. Kombinálhatod az opciókat " "ahogy szeretnéd. <ok> egy ok a kirúgáshoz." -#: plugin.py:355 plugin.py:581 +#: plugin.py:359 plugin.py:610 #, fuzzy msgid "ban someone" msgstr "eltávolítani a tiltást valakiről" -#: plugin.py:375 +#: plugin.py:382 msgid "I haven't seen %s." msgstr "Nem láttam %s-t." -#: plugin.py:385 +#: plugin.py:394 msgid "I cowardly refuse to kickban myself." msgstr "Gyáván megtagadom, hogy kirúgjam és kitiltsam magam." -#: plugin.py:394 +#: plugin.py:397 plugin.py:409 plugin.py:418 msgid "I cowardly refuse to ban myself." msgstr "Gyáván megtagadom, hogy kitiltsam magam." -#: plugin.py:422 +#: plugin.py:451 msgid "%s has %s too, you can't ban them." msgstr "%s-nek is van %s, nem tilthatod ki őt." -#: plugin.py:433 +#: plugin.py:462 #, fuzzy msgid "" "[<channel>] [<hostmask|--all>]\n" @@ -455,19 +459,19 @@ msgstr "" "véletlenül) ki lettél tiltva a csatornáról. <csatorna> csak akkor szükséges, " "ha az üzenet nem a csatornában van elküldve." -#: plugin.py:453 +#: plugin.py:482 msgid "All bans on %s matching %s have been removed." msgstr "Minden tiltás %s-ban, ami illeszkedik %s-ra el lett távolítva." -#: plugin.py:457 +#: plugin.py:486 msgid "No bans matching %s were found on %s." msgstr "Nem található %s-ra illeszkedő tiltás %s-ban." -#: plugin.py:460 +#: plugin.py:489 msgid "unban someone" msgstr "eltávolítani a tiltást valakiről" -#: plugin.py:467 +#: plugin.py:496 msgid "" "[<channel>]\n" "\n" @@ -475,11 +479,11 @@ msgid "" " If <channel> is not given, it defaults to the current channel." msgstr "" -#: plugin.py:471 +#: plugin.py:500 msgid "No bans." msgstr "" -#: plugin.py:476 +#: plugin.py:505 msgid "" "[<channel>] <nick>\n" "\n" @@ -493,19 +497,19 @@ msgstr "" "Ha rendelkezel a #csatorna,op képességgel, meghívja <név>-et <csatorna>-ra. " "<csatorna> csak akkor szükséges, ha az üzenet nem a csatornában van elküldve." -#: plugin.py:485 +#: plugin.py:514 msgid "invite someone" msgstr "meghívni valakit" -#: plugin.py:504 +#: plugin.py:533 msgid "%s is already in %s." msgstr "%s már %s-ban van." -#: plugin.py:511 +#: plugin.py:540 msgid "There is no %s on this network." msgstr "Nincs %s ezen a hálózaton." -#: plugin.py:523 +#: plugin.py:552 msgid "" "[<channel>]\n" "\n" @@ -524,7 +528,7 @@ msgstr "" "némáva teszi azt és nem fog válaszolni a csatornában végrehajtott kérésekre. " "<csatorna> csak akkor szükséges, ha az üzenet nem a csatornában van elküldve." -#: plugin.py:538 +#: plugin.py:567 msgid "" "[<channel>]\n" "\n" @@ -542,7 +546,7 @@ msgstr "" "így az újra válaszol a csatornában vérgehajtott kérésekre. <csatorna> csak " "akkor szükséges, ha az üzenet nem a csatornában van elküldve." -#: plugin.py:553 +#: plugin.py:582 msgid "" "takes no arguments\n" "\n" @@ -553,15 +557,15 @@ msgstr "" "\n" "Kiírja a csatornákat, ahol a bot némítva van." -#: plugin.py:568 +#: plugin.py:597 msgid "I'm currently lobotomized in %L." msgstr "Jelenleg némítva vagyok %L-ban." -#: plugin.py:571 +#: plugin.py:600 msgid "I'm not currently lobotomized in any channels that you're in." msgstr "Jelenleg nem vagyok némítva egy csatornában sem, ahol vagy." -#: plugin.py:585 +#: plugin.py:614 msgid "" "[<channel>] <nick|hostmask> [<expires>]\n" "\n" @@ -590,7 +594,7 @@ msgstr "" "lejárni. <csatorna> csak akkor szükséges, ha az üzenet nem a csaotnában van " "elküldve." -#: plugin.py:605 +#: plugin.py:639 msgid "" "[<channel>] <hostmask>\n" "\n" @@ -606,11 +610,11 @@ msgstr "" "ról. <csatorna> csak akkor szükséges, ha az üzenet nem a csatornában van " "elküldve." -#: plugin.py:617 +#: plugin.py:651 msgid "There are no persistent bans for that hostmask." msgstr "Nincsenek tiltások erre a hosztra." -#: plugin.py:622 +#: plugin.py:656 #, fuzzy msgid "" "[<channel>] [<mask>]\n" @@ -628,19 +632,19 @@ msgstr "" "ról. <csatorna> csak akkor szükséges, ha az üzenet nem a csatornában van " "elküldve." -#: plugin.py:640 +#: plugin.py:674 msgid "%q (expires %t)" msgstr "%q (lejár %t)" -#: plugin.py:643 +#: plugin.py:677 msgid "%q (never expires)" msgstr "%q (soha nem jár le)" -#: plugin.py:647 +#: plugin.py:681 msgid "There are no persistent bans on %s." msgstr "Nincsenek tiltások %s-on." -#: plugin.py:654 +#: plugin.py:688 msgid "" "[<channel>] <nick|hostmask> [<expires>]\n" "\n" @@ -663,7 +667,7 @@ msgstr "" "mellőzés soha nem fog automatikusan lejárni. <csatorna> csak akkor " "szükséges, ha az üzenet nem a csatornában van elküldve." -#: plugin.py:672 +#: plugin.py:706 #, fuzzy msgid "" "[<channel>] <nick|hostmask>\n" @@ -680,11 +684,11 @@ msgstr "" "<hoszt>-ról a csatornában. <csatorna> csak akkor szükséges, ha az üzenet nem " "a csatornában van elküldve." -#: plugin.py:684 +#: plugin.py:718 msgid "There are no ignores for that hostmask." msgstr "Nincsenek mellőzések erre a hosztra." -#: plugin.py:689 +#: plugin.py:723 msgid "" "[<channel>]\n" "\n" @@ -699,11 +703,11 @@ msgstr "" "Kiírja a hosztokat, amelyeket a bot mellőz a megadott csatornában. " "<csatorna> csak akkor szükséges, ha az üzenet nem a csatornában van elküldve." -#: plugin.py:698 +#: plugin.py:732 msgid "I'm not currently ignoring any hostmasks in %q" msgstr "Nem mellőzők egy hosztot sem %q-ban." -#: plugin.py:709 +#: plugin.py:743 #, fuzzy msgid "" "[<channel>] <nick|username> <capability> [<capability> ...]\n" @@ -721,7 +725,7 @@ msgstr "" "csatornában. <csatorna> csak akkor szükséges, ha az üzenet nem a csatornában " "van elküldve." -#: plugin.py:725 +#: plugin.py:759 msgid "" "[<channel>] <name|hostmask> <capability> [<capability> ...]\n" "\n" @@ -740,11 +744,11 @@ msgstr "" "illeszkedik) a <képesség> képességet a csatornában. <csatorna> csak akkor " "szükséges, ha az üzenet nem a csatornában van elküldve." -#: plugin.py:744 +#: plugin.py:778 msgid "That user didn't have the %L %s." msgstr "A felhasználónak nem volt a(z) %L %s." -#: plugin.py:753 +#: plugin.py:787 msgid "" "[<channel>] {True|False}\n" "\n" @@ -764,7 +768,7 @@ msgstr "" "megadott értékre állítja. <csatorna> csak akkor szükséges, ha az üzenet nem " "a csatornában van elküldve." -#: plugin.py:771 +#: plugin.py:805 msgid "" "[<channel>] <capability> [<capability> ...]\n" "\n" @@ -781,7 +785,7 @@ msgstr "" "csatorna képességeihez. <csatorna> csak akkor szükséges, ha az üzenet nem, a " "csatornában van elküldve." -#: plugin.py:786 +#: plugin.py:820 msgid "" "[<channel>] <capability> [<capability> ...]\n" "\n" @@ -801,15 +805,15 @@ msgstr "" "alapértelmezett képességei lesznek előnyben. <csatorna> csak akkor " "szükséges, ha az üzenet nem a csatornában van elküldve." -#: plugin.py:802 +#: plugin.py:836 msgid "capability" msgstr "képesség" -#: plugin.py:805 +#: plugin.py:839 msgid "I do not know about the %L %s." msgstr "Nem tudok a %L %s-ról." -#: plugin.py:812 +#: plugin.py:846 msgid "" "[<channel>]\n" "\n" @@ -822,7 +826,7 @@ msgstr "" "Kiírja <csatorna> képességeit. <csatorna> csak akkor szükséges, ha az üzenet " "nem a csatornában van elküldve." -#: plugin.py:824 +#: plugin.py:858 msgid "" "[<channel>] [<plugin>] [<command>]\n" "\n" @@ -843,15 +847,15 @@ msgstr "" "le lesz tiltva a megadott bővítményben. <csatorna> csak akkor szükséges, ha " "az üzenet nem a csatornában van elküldve." -#: plugin.py:840 plugin.py:879 +#: plugin.py:874 plugin.py:913 msgid "The %s plugin does not have a command called %s." msgstr "A %s bővítménynek nincs %s nevű parancsa." -#: plugin.py:847 plugin.py:886 +#: plugin.py:881 plugin.py:920 msgid "No plugin or command named %s could be found." msgstr "Nem található bővítmény vagy parancs %s néven." -#: plugin.py:863 +#: plugin.py:897 msgid "" "[<channel>] [<plugin>] [<command>]\n" "\n" @@ -871,11 +875,11 @@ msgstr "" "<csatorna>-ban ha le lett tiltva. Ha <bővítmény> meg van adva, <parancs> " "csak a megadott bővítményben lesz engedélyezve." -#: plugin.py:900 +#: plugin.py:934 msgid "%s was not disabled." msgstr "%s nem volt letiltva." -#: plugin.py:909 +#: plugin.py:943 msgid "" "[<channel>] [--count]\n" "\n" @@ -891,25 +895,25 @@ msgstr "" "üzenet nem a csatornában van elküldve. Ha a --count opció meg van adva, csak " "a nevek számát írja ki." -#: plugin.py:931 +#: plugin.py:965 msgid "You don't have access to that information." msgstr "Nincs hozzáférésed ehhez az információhoz." -#: plugin.py:946 +#: plugin.py:980 msgid "" "Internal message for notifying all the #channel,ops in a channel of\n" " a given situation." msgstr "Belső üzenet #csatorna,op-ok értesítésére egy adott szituációban." -#: plugin.py:949 +#: plugin.py:983 msgid "Alert to all %s ops: %s" msgstr "Riasztás minden %s operátornak: %s" -#: plugin.py:951 +#: plugin.py:985 msgid " (from %s)" msgstr "(%s-tól)" -#: plugin.py:963 +#: plugin.py:997 msgid "" "[<channel>] <text>\n" "\n" @@ -925,7 +929,7 @@ msgstr "" "operátor státuszt. <csatorna> csak akkor szükséges, ha az üzenet nem a " "csatornában van elküldve." -#: plugin.py:973 +#: plugin.py:1007 msgid "" "[<channel>] [<reason>]\n" "\n" @@ -940,11 +944,15 @@ msgid "" " " msgstr "" -#: plugin.py:994 +#: plugin.py:1028 #, fuzzy msgid "I'm not in %s." msgstr "Nem láttam %s-t." +#: plugin.py:1032 +msgid "%s removed from configured join list." +msgstr "" + #~ msgid "" #~ "I cowardly refuse to devoice myself. If you really want me devoiced, " #~ "tell me to op you and then devoice me yourself." diff --git a/plugins/Channel/locales/it.po b/plugins/Channel/locales/it.po index 4de83bffe..3defe47a4 100644 --- a/plugins/Channel/locales/it.po +++ b/plugins/Channel/locales/it.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: Limnoria\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2012-06-09 09:33+0200\n" "Last-Translator: skizzhg <skizzhg@gmx.com>\n" "Language-Team: Italian <skizzhg@gmx.com>\n" @@ -377,8 +377,10 @@ msgid "kick someone" msgstr "cacciare (kick) qualcuno" #: plugin.py:316 +#, fuzzy msgid "" -"[<channel>] [--{exact,nick,user,host}] <nick> [<seconds>] [<reason>]\n" +"[<channel>] [--{exact,nick,user,host,account}] <nick> [<seconds>] " +"[<reason>]\n" "\n" " If you have the #channel,op capability, this will kickban <nick> " "for\n" @@ -387,13 +389,13 @@ msgid "" " don't specify a number of seconds) it will ban the person " "indefinitely.\n" " --exact bans only the exact hostmask; --nick bans just the nick;\n" -" --user bans just the user, and --host bans just the host. You can\n" -" combine these options as you choose. <reason> is a reason to give " -"for\n" -" the kick.\n" -" <channel> is only necessary if the message isn't sent in the " -"channel\n" -" itself.\n" +" --user bans just the user, and --host bans just the host\n" +" You can combine the --nick, --user, and --host options as you " +"choose.\n" +" If --account is provided and the user is logged in and the network\n" +" supports account bans, this will ban the user's account instead.\n" +" <channel> is only necessary if the message isn't sent in the channel " +"itself.\n" " " msgstr "" "[<canale>] [--{exact,nick,user,host}] <nick> [<secondi>] [<motivo>]\n" @@ -411,11 +413,11 @@ msgstr "" " se il messaggio non viene inviato nel canale stesso.\n" " " -#: plugin.py:333 +#: plugin.py:334 msgid "kick or ban someone" msgstr "cacciare (kick) o bannare qualcuno" -#: plugin.py:341 +#: plugin.py:342 #, fuzzy msgid "" "[<channel>] [--{exact,nick,user,host}] <nick> [<seconds>]\n" @@ -425,11 +427,13 @@ msgid "" "or\n" " don't specify a number of seconds) it will ban the person " "indefinitely.\n" -" --exact can be used to specify an exact hostmask. You can combine " -"the\n" -" exact, nick, user, and host options as you choose. <channel> is " -"only\n" -" necessary if the message isn't sent in the channel itself.\n" +" --exact can be used to specify an exact hostmask.\n" +" You can combine the --nick, --user, and --host options as you " +"choose.\n" +" If --account is provided and the user is logged in and the network\n" +" supports account bans, this will ban the user's account instead.\n" +" <channel> is only necessary if the message isn't sent in the channel " +"itself.\n" " " msgstr "" "[<canale>] [--{exact,nick,user,host}] <nick> [<secondi>] [<motivo>]\n" @@ -447,28 +451,28 @@ msgstr "" " se il messaggio non viene inviato nel canale stesso.\n" " " -#: plugin.py:355 plugin.py:581 +#: plugin.py:359 plugin.py:610 #, fuzzy msgid "ban someone" msgstr "rimuovere il ban a qualcuno" -#: plugin.py:375 +#: plugin.py:382 msgid "I haven't seen %s." msgstr "Non ho mai visto %s." -#: plugin.py:385 +#: plugin.py:394 msgid "I cowardly refuse to kickban myself." msgstr "Codardamente mi rifiuto di espellere (kickban) me stesso." -#: plugin.py:394 +#: plugin.py:397 plugin.py:409 plugin.py:418 msgid "I cowardly refuse to ban myself." msgstr "Codardamente mi rifiuto di bannare stesso." -#: plugin.py:422 +#: plugin.py:451 msgid "%s has %s too, you can't ban them." msgstr "anche %s ha %s, non puoi bannarlo/a." -#: plugin.py:433 +#: plugin.py:462 #, fuzzy msgid "" "[<channel>] [<hostmask|--all>]\n" @@ -495,19 +499,19 @@ msgstr "" " messaggio non viene inviato nel canale stesso.\n" " " -#: plugin.py:453 +#: plugin.py:482 msgid "All bans on %s matching %s have been removed." msgstr "Tutti i ban su %s che corrisopndono a %s sono stati rimossi." -#: plugin.py:457 +#: plugin.py:486 msgid "No bans matching %s were found on %s." msgstr "Non è stato trovato alcun ban corrispondente a %s su %s." -#: plugin.py:460 +#: plugin.py:489 msgid "unban someone" msgstr "rimuovere il ban a qualcuno" -#: plugin.py:467 +#: plugin.py:496 msgid "" "[<channel>]\n" "\n" @@ -515,11 +519,11 @@ msgid "" " If <channel> is not given, it defaults to the current channel." msgstr "" -#: plugin.py:471 +#: plugin.py:500 msgid "No bans." msgstr "" -#: plugin.py:476 +#: plugin.py:505 msgid "" "[<channel>] <nick>\n" "\n" @@ -536,19 +540,19 @@ msgstr "" "canale stesso.\n" " " -#: plugin.py:485 +#: plugin.py:514 msgid "invite someone" msgstr "invitare qualcuno" -#: plugin.py:504 +#: plugin.py:533 msgid "%s is already in %s." msgstr "%s è già in %s." -#: plugin.py:511 +#: plugin.py:540 msgid "There is no %s on this network." msgstr "Non c'è nessun %s su questa rete." -#: plugin.py:523 +#: plugin.py:552 msgid "" "[<channel>]\n" "\n" @@ -571,7 +575,7 @@ msgstr "" "canale stesso.\n" " " -#: plugin.py:538 +#: plugin.py:567 msgid "" "[<channel>]\n" "\n" @@ -593,7 +597,7 @@ msgstr "" "canale stesso.\n" " " -#: plugin.py:553 +#: plugin.py:582 msgid "" "takes no arguments\n" "\n" @@ -605,15 +609,15 @@ msgstr "" " Riporta l'elenco dei canali nei quali il bot è lobotomizzato.\n" " " -#: plugin.py:568 +#: plugin.py:597 msgid "I'm currently lobotomized in %L." msgstr "Sono attualmente lobotomizzato in %L." -#: plugin.py:571 +#: plugin.py:600 msgid "I'm not currently lobotomized in any channels that you're in." msgstr "Al momento non sono lobotomizzato in nessun canale in cui sei." -#: plugin.py:585 +#: plugin.py:614 msgid "" "[<channel>] <nick|hostmask> [<expires>]\n" "\n" @@ -647,7 +651,7 @@ msgstr "" "canale stesso.\n" " " -#: plugin.py:605 +#: plugin.py:639 msgid "" "[<channel>] <hostmask>\n" "\n" @@ -665,11 +669,11 @@ msgstr "" "canale stesso.\n" " " -#: plugin.py:617 +#: plugin.py:651 msgid "There are no persistent bans for that hostmask." msgstr "Non ci sono ban permanenti per questa hostmask." -#: plugin.py:622 +#: plugin.py:656 #, fuzzy msgid "" "[<channel>] [<mask>]\n" @@ -689,19 +693,19 @@ msgstr "" "canale stesso.\n" " " -#: plugin.py:640 +#: plugin.py:674 msgid "%q (expires %t)" msgstr "%q (scade il %t)" -#: plugin.py:643 +#: plugin.py:677 msgid "%q (never expires)" msgstr "%q (non scade)" -#: plugin.py:647 +#: plugin.py:681 msgid "There are no persistent bans on %s." msgstr "Non ci sono ban permanenti su %s." -#: plugin.py:654 +#: plugin.py:688 msgid "" "[<channel>] <nick|hostmask> [<expires>]\n" "\n" @@ -729,7 +733,7 @@ msgstr "" " se il messaggio non viene inviato nel canale stesso.\n" " " -#: plugin.py:672 +#: plugin.py:706 #, fuzzy msgid "" "[<channel>] <nick|hostmask>\n" @@ -748,11 +752,11 @@ msgstr "" "canale stesso.\n" " " -#: plugin.py:684 +#: plugin.py:718 msgid "There are no ignores for that hostmask." msgstr "Non ci sono ignore per questa hostmask." -#: plugin.py:689 +#: plugin.py:723 msgid "" "[<channel>]\n" "\n" @@ -769,11 +773,11 @@ msgstr "" "stesso.\n" " " -#: plugin.py:698 +#: plugin.py:732 msgid "I'm not currently ignoring any hostmasks in %q" msgstr "Al momento non sto ignorando nessuna hostmasks in %q" -#: plugin.py:709 +#: plugin.py:743 msgid "" "[<channel>] <nick|username> <capability> [<capability> ...]\n" "\n" @@ -792,7 +796,7 @@ msgstr "" "stesso.\n" " " -#: plugin.py:725 +#: plugin.py:759 msgid "" "[<channel>] <name|hostmask> <capability> [<capability> ...]\n" "\n" @@ -814,11 +818,11 @@ msgstr "" "canale stesso.\n" " " -#: plugin.py:744 +#: plugin.py:778 msgid "That user didn't have the %L %s." msgstr "Questo utente non ha la %L %s." -#: plugin.py:753 +#: plugin.py:787 msgid "" "[<channel>] {True|False}\n" "\n" @@ -841,7 +845,7 @@ msgstr "" "stesso.\n" " " -#: plugin.py:771 +#: plugin.py:805 msgid "" "[<channel>] <capability> [<capability> ...]\n" "\n" @@ -861,7 +865,7 @@ msgstr "" " solo se il messaggio non viene inviato nel canale stesso.\n" " " -#: plugin.py:786 +#: plugin.py:820 msgid "" "[<channel>] <capability> [<capability> ...]\n" "\n" @@ -885,15 +889,15 @@ msgstr "" " solo se il messaggio non viene inviato nel canale stesso.\n" " " -#: plugin.py:802 +#: plugin.py:836 msgid "capability" msgstr "capacità" -#: plugin.py:805 +#: plugin.py:839 msgid "I do not know about the %L %s." msgstr "Non so nulla a proposito di %L %s." -#: plugin.py:812 +#: plugin.py:846 msgid "" "[<channel>]\n" "\n" @@ -907,7 +911,7 @@ msgstr "" " solo se il messaggio non viene inviato nel canale stesso.\n" " " -#: plugin.py:824 +#: plugin.py:858 msgid "" "[<channel>] [<plugin>] [<command>]\n" "\n" @@ -932,15 +936,15 @@ msgstr "" "canale stesso.\n" " " -#: plugin.py:840 plugin.py:879 +#: plugin.py:874 plugin.py:913 msgid "The %s plugin does not have a command called %s." msgstr "Il plugin %s non ha un comando chiamato %s." -#: plugin.py:847 plugin.py:886 +#: plugin.py:881 plugin.py:920 msgid "No plugin or command named %s could be found." msgstr "Non è stato trovato nessun plugin o comando chiamato %s." -#: plugin.py:863 +#: plugin.py:897 msgid "" "[<channel>] [<plugin>] [<command>]\n" "\n" @@ -967,11 +971,11 @@ msgstr "" " inviato nel canale stesso.\n" " " -#: plugin.py:900 +#: plugin.py:934 msgid "%s was not disabled." msgstr "%s non è stato disabilitato." -#: plugin.py:909 +#: plugin.py:943 msgid "" "[<channel>] [--count]\n" "\n" @@ -989,11 +993,11 @@ msgstr "" " l'opzione --count, mostra solo il numero dei nick.\n" " " -#: plugin.py:931 +#: plugin.py:965 msgid "You don't have access to that information." msgstr "Non hai accesso a questa informazione." -#: plugin.py:946 +#: plugin.py:980 msgid "" "Internal message for notifying all the #channel,ops in a channel of\n" " a given situation." @@ -1001,15 +1005,15 @@ msgstr "" "Messaggio interno per notificare una data situazione a tutti gli operatori " "(#canale,op) in un canale." -#: plugin.py:949 +#: plugin.py:983 msgid "Alert to all %s ops: %s" msgstr "Avviso a tutti gli op di %s: %s" -#: plugin.py:951 +#: plugin.py:985 msgid " (from %s)" msgstr " (da %s)" -#: plugin.py:963 +#: plugin.py:997 msgid "" "[<channel>] <text>\n" "\n" @@ -1024,7 +1028,7 @@ msgstr "" "<canale>,op.\n" " " -#: plugin.py:973 +#: plugin.py:1007 msgid "" "[<channel>] [<reason>]\n" "\n" @@ -1039,11 +1043,15 @@ msgid "" " " msgstr "" -#: plugin.py:994 +#: plugin.py:1028 #, fuzzy msgid "I'm not in %s." msgstr "Non ho mai visto %s." +#: plugin.py:1032 +msgid "%s removed from configured join list." +msgstr "" + #~ msgid "" #~ "I cowardly refuse to devoice myself. If you really want me devoiced, " #~ "tell me to op you and then devoice me yourself." diff --git a/plugins/Channel/messages.pot b/plugins/Channel/messages.pot index 560f5b8b9..7b0556047 100644 --- a/plugins/Channel/messages.pot +++ b/plugins/Channel/messages.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -265,25 +265,25 @@ msgstr "" #: plugin.py:316 #, docstring msgid "" -"[<channel>] [--{exact,nick,user,host}] <nick> [<seconds>] [<reason>]\n" +"[<channel>] [--{exact,nick,user,host,account}] <nick> [<seconds>] [<reason>]\n" "\n" " If you have the #channel,op capability, this will kickban <nick> for\n" " as many seconds as you specify, or else (if you specify 0 seconds or\n" " don't specify a number of seconds) it will ban the person indefinitely.\n" " --exact bans only the exact hostmask; --nick bans just the nick;\n" -" --user bans just the user, and --host bans just the host. You can\n" -" combine these options as you choose. <reason> is a reason to give for\n" -" the kick.\n" -" <channel> is only necessary if the message isn't sent in the channel\n" -" itself.\n" +" --user bans just the user, and --host bans just the host\n" +" You can combine the --nick, --user, and --host options as you choose.\n" +" If --account is provided and the user is logged in and the network\n" +" supports account bans, this will ban the user's account instead.\n" +" <channel> is only necessary if the message isn't sent in the channel itself.\n" " " msgstr "" -#: plugin.py:333 +#: plugin.py:334 msgid "kick or ban someone" msgstr "" -#: plugin.py:341 +#: plugin.py:342 #, docstring msgid "" "[<channel>] [--{exact,nick,user,host}] <nick> [<seconds>]\n" @@ -291,33 +291,35 @@ msgid "" " If you have the #channel,op capability, this will ban <nick> for\n" " as many seconds as you specify, otherwise (if you specify 0 seconds or\n" " don't specify a number of seconds) it will ban the person indefinitely.\n" -" --exact can be used to specify an exact hostmask. You can combine the\n" -" exact, nick, user, and host options as you choose. <channel> is only\n" -" necessary if the message isn't sent in the channel itself.\n" +" --exact can be used to specify an exact hostmask.\n" +" You can combine the --nick, --user, and --host options as you choose.\n" +" If --account is provided and the user is logged in and the network\n" +" supports account bans, this will ban the user's account instead.\n" +" <channel> is only necessary if the message isn't sent in the channel itself.\n" " " msgstr "" -#: plugin.py:355 plugin.py:581 +#: plugin.py:359 plugin.py:610 msgid "ban someone" msgstr "" -#: plugin.py:375 +#: plugin.py:382 msgid "I haven't seen %s." msgstr "" -#: plugin.py:385 +#: plugin.py:394 msgid "I cowardly refuse to kickban myself." msgstr "" -#: plugin.py:394 +#: plugin.py:397 plugin.py:409 plugin.py:418 msgid "I cowardly refuse to ban myself." msgstr "" -#: plugin.py:422 +#: plugin.py:451 msgid "%s has %s too, you can't ban them." msgstr "" -#: plugin.py:433 +#: plugin.py:462 #, docstring msgid "" "[<channel>] [<hostmask|--all>]\n" @@ -330,19 +332,19 @@ msgid "" " " msgstr "" -#: plugin.py:453 +#: plugin.py:482 msgid "All bans on %s matching %s have been removed." msgstr "" -#: plugin.py:457 +#: plugin.py:486 msgid "No bans matching %s were found on %s." msgstr "" -#: plugin.py:460 +#: plugin.py:489 msgid "unban someone" msgstr "" -#: plugin.py:467 +#: plugin.py:496 #, docstring msgid "" "[<channel>]\n" @@ -351,11 +353,11 @@ msgid "" " If <channel> is not given, it defaults to the current channel." msgstr "" -#: plugin.py:471 +#: plugin.py:500 msgid "No bans." msgstr "" -#: plugin.py:476 +#: plugin.py:505 #, docstring msgid "" "[<channel>] <nick>\n" @@ -366,19 +368,19 @@ msgid "" " " msgstr "" -#: plugin.py:485 +#: plugin.py:514 msgid "invite someone" msgstr "" -#: plugin.py:504 +#: plugin.py:533 msgid "%s is already in %s." msgstr "" -#: plugin.py:511 +#: plugin.py:540 msgid "There is no %s on this network." msgstr "" -#: plugin.py:523 +#: plugin.py:552 #, docstring msgid "" "[<channel>]\n" @@ -390,7 +392,7 @@ msgid "" " " msgstr "" -#: plugin.py:538 +#: plugin.py:567 #, docstring msgid "" "[<channel>]\n" @@ -402,7 +404,7 @@ msgid "" " " msgstr "" -#: plugin.py:553 +#: plugin.py:582 #, docstring msgid "" "takes no arguments\n" @@ -411,15 +413,15 @@ msgid "" " " msgstr "" -#: plugin.py:568 +#: plugin.py:597 msgid "I'm currently lobotomized in %L." msgstr "" -#: plugin.py:571 +#: plugin.py:600 msgid "I'm not currently lobotomized in any channels that you're in." msgstr "" -#: plugin.py:585 +#: plugin.py:614 #, docstring msgid "" "[<channel>] <nick|hostmask> [<expires>]\n" @@ -436,7 +438,7 @@ msgid "" " " msgstr "" -#: plugin.py:605 +#: plugin.py:639 #, docstring msgid "" "[<channel>] <hostmask>\n" @@ -447,11 +449,11 @@ msgid "" " " msgstr "" -#: plugin.py:617 +#: plugin.py:651 msgid "There are no persistent bans for that hostmask." msgstr "" -#: plugin.py:622 +#: plugin.py:656 #, docstring msgid "" "[<channel>] [<mask>]\n" @@ -464,19 +466,19 @@ msgid "" " " msgstr "" -#: plugin.py:640 +#: plugin.py:674 msgid "%q (expires %t)" msgstr "" -#: plugin.py:643 +#: plugin.py:677 msgid "%q (never expires)" msgstr "" -#: plugin.py:647 +#: plugin.py:681 msgid "There are no persistent bans on %s." msgstr "" -#: plugin.py:654 +#: plugin.py:688 #, docstring msgid "" "[<channel>] <nick|hostmask> [<expires>]\n" @@ -491,7 +493,7 @@ msgid "" " " msgstr "" -#: plugin.py:672 +#: plugin.py:706 #, docstring msgid "" "[<channel>] <nick|hostmask>\n" @@ -502,11 +504,11 @@ msgid "" " " msgstr "" -#: plugin.py:684 +#: plugin.py:718 msgid "There are no ignores for that hostmask." msgstr "" -#: plugin.py:689 +#: plugin.py:723 #, docstring msgid "" "[<channel>]\n" @@ -517,11 +519,11 @@ msgid "" " " msgstr "" -#: plugin.py:698 +#: plugin.py:732 msgid "I'm not currently ignoring any hostmasks in %q" msgstr "" -#: plugin.py:709 +#: plugin.py:743 #, docstring msgid "" "[<channel>] <nick|username> <capability> [<capability> ...]\n" @@ -533,7 +535,7 @@ msgid "" " " msgstr "" -#: plugin.py:725 +#: plugin.py:759 #, docstring msgid "" "[<channel>] <name|hostmask> <capability> [<capability> ...]\n" @@ -545,11 +547,11 @@ msgid "" " " msgstr "" -#: plugin.py:744 +#: plugin.py:778 msgid "That user didn't have the %L %s." msgstr "" -#: plugin.py:753 +#: plugin.py:787 #, docstring msgid "" "[<channel>] {True|False}\n" @@ -561,7 +563,7 @@ msgid "" " " msgstr "" -#: plugin.py:771 +#: plugin.py:805 #, docstring msgid "" "[<channel>] <capability> [<capability> ...]\n" @@ -572,7 +574,7 @@ msgid "" " " msgstr "" -#: plugin.py:786 +#: plugin.py:820 #, docstring msgid "" "[<channel>] <capability> [<capability> ...]\n" @@ -584,15 +586,15 @@ msgid "" " " msgstr "" -#: plugin.py:802 +#: plugin.py:836 msgid "capability" msgstr "" -#: plugin.py:805 +#: plugin.py:839 msgid "I do not know about the %L %s." msgstr "" -#: plugin.py:812 +#: plugin.py:846 #, docstring msgid "" "[<channel>]\n" @@ -602,7 +604,7 @@ msgid "" " " msgstr "" -#: plugin.py:824 +#: plugin.py:858 #, docstring msgid "" "[<channel>] [<plugin>] [<command>]\n" @@ -615,15 +617,15 @@ msgid "" " " msgstr "" -#: plugin.py:840 plugin.py:879 +#: plugin.py:874 plugin.py:913 msgid "The %s plugin does not have a command called %s." msgstr "" -#: plugin.py:847 plugin.py:886 +#: plugin.py:881 plugin.py:920 msgid "No plugin or command named %s could be found." msgstr "" -#: plugin.py:863 +#: plugin.py:897 #, docstring msgid "" "[<channel>] [<plugin>] [<command>]\n" @@ -636,11 +638,11 @@ msgid "" " " msgstr "" -#: plugin.py:900 +#: plugin.py:934 msgid "%s was not disabled." msgstr "" -#: plugin.py:909 +#: plugin.py:943 #, docstring msgid "" "[<channel>] [--count]\n" @@ -651,26 +653,26 @@ msgid "" " " msgstr "" -#: plugin.py:931 +#: plugin.py:965 msgid "You don't have access to that information." msgstr "" -#: plugin.py:946 +#: plugin.py:980 #, docstring msgid "" "Internal message for notifying all the #channel,ops in a channel of\n" " a given situation." msgstr "" -#: plugin.py:949 +#: plugin.py:983 msgid "Alert to all %s ops: %s" msgstr "" -#: plugin.py:951 +#: plugin.py:985 msgid " (from %s)" msgstr "" -#: plugin.py:963 +#: plugin.py:997 #, docstring msgid "" "[<channel>] <text>\n" @@ -680,7 +682,7 @@ msgid "" " " msgstr "" -#: plugin.py:973 +#: plugin.py:1007 #, docstring msgid "" "[<channel>] [<reason>]\n" @@ -694,7 +696,11 @@ msgid "" " " msgstr "" -#: plugin.py:994 +#: plugin.py:1028 msgid "I'm not in %s." msgstr "" +#: plugin.py:1032 +msgid "%s removed from configured join list." +msgstr "" + diff --git a/plugins/ChannelLogger/messages.pot b/plugins/ChannelLogger/messages.pot index 4ec2e6e74..23d3d145c 100644 --- a/plugins/ChannelLogger/messages.pot +++ b/plugins/ChannelLogger/messages.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/plugins/ChannelStats/messages.pot b/plugins/ChannelStats/messages.pot index 1cdab5869..9f2d8402e 100644 --- a/plugins/ChannelStats/messages.pot +++ b/plugins/ChannelStats/messages.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/plugins/Conditional/messages.pot b/plugins/Conditional/messages.pot index 7048ade84..ba62bd5c5 100644 --- a/plugins/Conditional/messages.pot +++ b/plugins/Conditional/messages.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/plugins/Config/messages.pot b/plugins/Config/messages.pot index 7bd71c336..68d6e85f5 100644 --- a/plugins/Config/messages.pot +++ b/plugins/Config/messages.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/plugins/Ctcp/messages.pot b/plugins/Ctcp/messages.pot index de924cb10..f925c2372 100644 --- a/plugins/Ctcp/messages.pot +++ b/plugins/Ctcp/messages.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/plugins/DDG/messages.pot b/plugins/DDG/messages.pot index 606b79fd7..ced8aac21 100644 --- a/plugins/DDG/messages.pot +++ b/plugins/DDG/messages.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/plugins/Debug/messages.pot b/plugins/Debug/messages.pot index dbde0ca73..e2b56aae3 100644 --- a/plugins/Debug/messages.pot +++ b/plugins/Debug/messages.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -15,19 +15,27 @@ msgstr "" "Generated-By: pygettext.py 1.5\n" -#: plugin.py:50 +#: plugin.py:31 +#, docstring +msgid "" +"\n" +"This is for debugging purposes only and you shouldn't load this it unless\n" +"a Supybot developer requests you to debug some issue.\n" +msgstr "" + +#: plugin.py:48 #, docstring msgid "Pseudo-module" msgstr "" -#: plugin.py:77 +#: plugin.py:75 #, docstring msgid "" "This plugin provides debugging abilities for Supybot. It\n" " should not be loaded with a default installation." msgstr "" -#: plugin.py:98 +#: plugin.py:96 #, docstring msgid "" "<expression>\n" @@ -38,7 +46,7 @@ msgid "" " " msgstr "" -#: plugin.py:117 +#: plugin.py:115 #, docstring msgid "" "<statement>\n" @@ -47,7 +55,7 @@ msgid "" " " msgstr "" -#: plugin.py:127 +#: plugin.py:125 #, docstring msgid "" "<expression>\n" @@ -56,7 +64,7 @@ msgid "" " " msgstr "" -#: plugin.py:139 +#: plugin.py:137 #, docstring msgid "" "<exception name>\n" @@ -65,7 +73,7 @@ msgid "" " " msgstr "" -#: plugin.py:152 +#: plugin.py:150 #, docstring msgid "" "<raw IRC message>\n" @@ -74,7 +82,7 @@ msgid "" " " msgstr "" -#: plugin.py:161 +#: plugin.py:159 #, docstring msgid "" "[<filename>]\n" @@ -84,7 +92,7 @@ msgid "" " " msgstr "" -#: plugin.py:176 +#: plugin.py:174 #, docstring msgid "" "takes no arguments\n" @@ -93,7 +101,7 @@ msgid "" " " msgstr "" -#: plugin.py:186 +#: plugin.py:184 #, docstring msgid "" "[<channel>]\n" @@ -102,7 +110,7 @@ msgid "" " " msgstr "" -#: plugin.py:194 +#: plugin.py:192 #, docstring msgid "" "[<times>]\n" @@ -112,7 +120,7 @@ msgid "" " " msgstr "" -#: plugin.py:207 +#: plugin.py:205 #, docstring msgid "" "takes no arguments\n" diff --git a/plugins/Dict/messages.pot b/plugins/Dict/messages.pot index 14504b1c8..fd1c8cdfc 100644 --- a/plugins/Dict/messages.pot +++ b/plugins/Dict/messages.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/plugins/Dunno/messages.pot b/plugins/Dunno/messages.pot index 5b1367fac..d5979c42d 100644 --- a/plugins/Dunno/messages.pot +++ b/plugins/Dunno/messages.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/plugins/Factoids/locales/fi.po b/plugins/Factoids/locales/fi.po index 75bb99250..b59e98353 100644 --- a/plugins/Factoids/locales/fi.po +++ b/plugins/Factoids/locales/fi.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: Factoids plugin for Limnoria\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2014-12-20 14:33+0200\n" "Last-Translator: Mikaela Suomalainen <mikaela.suomalainen@outlook.com>\n" "Language-Team: Finnish <>\n" @@ -448,11 +448,11 @@ msgstr "" " sijaan.\n" " " -#: plugin.py:854 plugin.py:864 +#: plugin.py:858 plugin.py:868 msgid "No keys matched that query." msgstr "Yksikään avain ei täsmännyt hakuun." -#: plugin.py:860 plugin.py:870 +#: plugin.py:864 plugin.py:911 msgid "More than 100 keys matched that query; please narrow your query." msgstr "Yli 100 avainta täsmäsi tuohon hakuun; ole hyvä ja kavenna hakuasi." diff --git a/plugins/Factoids/locales/fr.po b/plugins/Factoids/locales/fr.po index e0c25c11d..8a0acb27c 100644 --- a/plugins/Factoids/locales/fr.po +++ b/plugins/Factoids/locales/fr.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: Limnoria\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: Limnoria <progval@gmail.com>\n" @@ -410,11 +410,11 @@ msgstr "" "est donné, recherche parmi les valeurs, plutôt que parmi les clefs. <canal> " "n'est nécessaire que si le message n'est pas envoyé sur le canal lui-même." -#: plugin.py:854 plugin.py:864 +#: plugin.py:858 plugin.py:868 msgid "No keys matched that query." msgstr "Aucune clef ne correspond à cette requête." -#: plugin.py:860 plugin.py:870 +#: plugin.py:864 plugin.py:911 msgid "More than 100 keys matched that query; please narrow your query." msgstr "" "Plus de 100 clefs correspondent à votre requête ; veuillez la préciser." diff --git a/plugins/Factoids/locales/it.po b/plugins/Factoids/locales/it.po index 5a333b861..e704932e6 100644 --- a/plugins/Factoids/locales/it.po +++ b/plugins/Factoids/locales/it.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: Limnoria\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2011-07-18 13:05+0200\n" "Last-Translator: skizzhg <skizzhg@gmx.com>\n" "Language-Team: Italian <skizzhg@gmx.com>\n" @@ -213,8 +213,8 @@ msgstr "" " <numero> è necessario solo se c'è più di un factoid associato a " "<chiave vecchia>.\n" "\n" -" La stessa cosa può essere ottenuta utilizzando la funzione \"learn" -"\"\n" +" La stessa cosa può essere ottenuta utilizzando la funzione " +"\"learn\"\n" " con una nuova chiave su un factoid esistente.\n" " " @@ -446,11 +446,11 @@ msgstr "" " specificato, cerca i valori piuttosto che le chiavi.\n" " " -#: plugin.py:854 plugin.py:864 +#: plugin.py:858 plugin.py:868 msgid "No keys matched that query." msgstr "Nessuna chiave corrisponde a questa richiesta." -#: plugin.py:860 plugin.py:870 +#: plugin.py:864 plugin.py:911 msgid "More than 100 keys matched that query; please narrow your query." msgstr "" "A questa richiesta corrispondono più di 100 chiavi, restringi la ricerca." diff --git a/plugins/Factoids/messages.pot b/plugins/Factoids/messages.pot index 7a7f8b9bf..abcba504f 100644 --- a/plugins/Factoids/messages.pot +++ b/plugins/Factoids/messages.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -307,11 +307,11 @@ msgid "" " " msgstr "" -#: plugin.py:854 plugin.py:864 +#: plugin.py:858 plugin.py:868 msgid "No keys matched that query." msgstr "" -#: plugin.py:860 plugin.py:870 +#: plugin.py:864 plugin.py:911 msgid "More than 100 keys matched that query; please narrow your query." msgstr "" diff --git a/plugins/Fediverse/messages.pot b/plugins/Fediverse/messages.pot index 0dbc2811d..4b706f0dc 100644 --- a/plugins/Fediverse/messages.pot +++ b/plugins/Fediverse/messages.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -39,14 +39,14 @@ msgid "" " when the status has a Content Warning." msgstr "" -#: plugin.py:54 +#: plugin.py:59 msgid "" "\n" " You shouldn't be here, this subfolder is not for you. Go back to the\n" " index and try out other plugins (if any)." msgstr "" -#: plugin.py:119 +#: plugin.py:124 #, docstring msgid "" "Fetches information from ActivityPub servers.\n" @@ -75,23 +75,27 @@ msgid "" " " msgstr "" -#: plugin.py:233 +#: plugin.py:242 msgid "<error: %s>" msgstr "" -#: plugin.py:245 +#: plugin.py:278 msgid "%s: \002[CW %s]\002 %s" msgstr "" -#: plugin.py:254 +#: plugin.py:287 msgid "%s: CW %s" msgstr "" -#: plugin.py:258 plugin.py:292 plugin.py:300 +#: plugin.py:291 plugin.py:336 plugin.py:344 msgid "%s: %s" msgstr "" -#: plugin.py:286 +#: plugin.py:316 +msgid "\002%s\002 (%T) by %s: %s" +msgstr "" + +#: plugin.py:330 #, docstring msgid "" "<@user@instance>\n" @@ -99,7 +103,7 @@ msgid "" " Returns generic information on the account @user@instance." msgstr "" -#: plugin.py:376 +#: plugin.py:420 #, docstring msgid "" "<@user@instance>\n" @@ -108,11 +112,11 @@ msgid "" " " msgstr "" -#: plugin.py:382 plugin.py:388 +#: plugin.py:426 plugin.py:432 msgid "No featured statuses." msgstr "" -#: plugin.py:399 +#: plugin.py:443 #, docstring msgid "" "<@user@instance>\n" @@ -121,11 +125,11 @@ msgid "" " " msgstr "" -#: plugin.py:405 +#: plugin.py:449 msgid "No status." msgstr "" -#: plugin.py:422 +#: plugin.py:466 #, docstring msgid "" "<url>\n" @@ -134,7 +138,7 @@ msgid "" " " msgstr "" -#: plugin.py:429 +#: plugin.py:473 msgid "Could not get status: %s" msgstr "" diff --git a/plugins/Filter/messages.pot b/plugins/Filter/messages.pot index 0df05317b..94394b51b 100644 --- a/plugins/Filter/messages.pot +++ b/plugins/Filter/messages.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/plugins/Format/messages.pot b/plugins/Format/messages.pot index 3a696a3ae..cc3cd0aba 100644 --- a/plugins/Format/messages.pot +++ b/plugins/Format/messages.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/plugins/GPG/messages.pot b/plugins/GPG/messages.pot index 9c77390b2..9bc8b4187 100644 --- a/plugins/GPG/messages.pot +++ b/plugins/GPG/messages.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -33,10 +33,42 @@ msgstr "" #: plugin.py:92 #, docstring -msgid "Provides authentication based on GPG keys." +msgid "" +"Provides authentication based on GPG keys.\n" +"\n" +" First you must associate your GPG key with your Limnoria account. The gpg\n" +" add command takes two arguments, key id and key server.\n" +"\n" +" My key is 0x0C207F07B2F32B67 and it's on keyserver pool.sks-keyservers.net\n" +" so and now I add it to my bot::\n" +"\n" +" <Mikaela> +gpg add 0x0C207F07B2F32B67 pool.sks-keyservers.net\n" +" <Yvzabevn> 1 key imported, 0 unchanged, 0 not imported.\n" +"\n" +" Now I can get token to sign so I can identify::\n" +"\n" +" <Guest45020> +gpg gettoken\n" +" <Yvzabevn> Your token is: {03640620-97ea-4fdf-b0c3-ce8fb62f2dc5}. Please sign it with your GPG key, paste it somewhere, and call the 'auth' command with the URL to the (raw) file containing the signature.\n" +"\n" +" Then I follow the instructions and sign my token in terminal::\n" +"\n" +" echo \"{03640620-97ea-4fdf-b0c3-ce8fb62f2dc5}\"|gpg --clearsign|curl -F 'sprunge=<-' http://sprunge.us\n" +"\n" +" Note that I sent the output to curl with flags to directly send the\n" +" clearsigned content to sprunge.us pastebin. Curl should be installed on\n" +" most of distributions and comes with msysgit. If you remove the curl part,\n" +" you get the output to terminal and can pastebin it to any pastebin of\n" +" your choice. Sprunge.us has only plain text and is easy so I used it in\n" +" this example.\n" +"\n" +" And last I give the bot link to the plain text signature::\n" +"\n" +" <Guest45020> +gpg auth http://sprunge.us/DUdd\n" +" <Yvzabevn> You are now authenticated as Mikaela.\n" +" " msgstr "" -#: plugin.py:96 +#: plugin.py:127 #, docstring msgid "" "<key id> <key server>\n" @@ -44,27 +76,27 @@ msgid "" " Add a GPG key to your account." msgstr "" -#: plugin.py:100 +#: plugin.py:131 msgid "This key is already associated with your account." msgstr "" -#: plugin.py:104 +#: plugin.py:135 msgid "%n imported, %i unchanged, %i not imported." msgstr "" -#: plugin.py:105 +#: plugin.py:136 msgid "key" msgstr "" -#: plugin.py:116 +#: plugin.py:147 msgid "You must give a valid key id" msgstr "" -#: plugin.py:118 +#: plugin.py:149 msgid "You must give a valid key server" msgstr "" -#: plugin.py:122 +#: plugin.py:153 #, docstring msgid "" "<fingerprint>\n" @@ -72,11 +104,11 @@ msgid "" " Remove a GPG key from your account." msgstr "" -#: plugin.py:138 +#: plugin.py:169 msgid "GPG key not associated with your account." msgstr "" -#: plugin.py:143 +#: plugin.py:174 #, docstring msgid "" "takes no arguments\n" @@ -84,11 +116,11 @@ msgid "" " List your GPG keys." msgstr "" -#: plugin.py:148 +#: plugin.py:179 msgid "No key is associated with your account." msgstr "" -#: plugin.py:165 +#: plugin.py:196 #, docstring msgid "" "takes no arguments\n" @@ -96,11 +128,11 @@ msgid "" " Send you a token that you'll have to sign with your key." msgstr "" -#: plugin.py:172 +#: plugin.py:203 msgid "Your token is: %s. Please sign it with your GPG key, paste it somewhere, and call the 'auth' command with the URL to the (raw) file containing the signature." msgstr "" -#: plugin.py:187 +#: plugin.py:218 #, docstring msgid "" "<url>\n" @@ -109,31 +141,31 @@ msgid "" " the key used is associated to a user." msgstr "" -#: plugin.py:197 +#: plugin.py:228 msgid "Signature or token not found." msgstr "" -#: plugin.py:201 +#: plugin.py:232 msgid "Unknown token. It may have expired before you submit it." msgstr "" -#: plugin.py:204 +#: plugin.py:235 msgid "Your hostname/nick changed in the process. Authentication aborted." msgstr "" -#: plugin.py:216 +#: plugin.py:247 msgid "Your secure flag is true and your hostmask doesn't match any of your known hostmasks." msgstr "" -#: plugin.py:220 +#: plugin.py:251 msgid "You are now authenticated as %s." msgstr "" -#: plugin.py:223 +#: plugin.py:254 msgid "Unknown GPG key." msgstr "" -#: plugin.py:225 +#: plugin.py:256 msgid "Signature could not be verified. Make sure this is a valid GPG signature and the URL is valid." msgstr "" diff --git a/plugins/Games/messages.pot b/plugins/Games/messages.pot index 85b96175d..32734f1bd 100644 --- a/plugins/Games/messages.pot +++ b/plugins/Games/messages.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/plugins/Geography/messages.pot b/plugins/Geography/messages.pot index 9c5de4011..e1e05cf2e 100644 --- a/plugins/Geography/messages.pot +++ b/plugins/Geography/messages.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -44,15 +44,15 @@ msgid "" " This uses data from Wikidata and Nominatim." msgstr "" -#: plugin.py:84 plugin.py:122 +#: plugin.py:84 plugin.py:137 msgid "Could not find the location" msgstr "" -#: plugin.py:110 plugin.py:167 +#: plugin.py:110 plugin.py:178 msgid "Could not find the timezone of this location." msgstr "" -#: plugin.py:115 +#: plugin.py:130 #, docstring msgid "" "<location name to search>\n" diff --git a/plugins/Google/locales/fi.po b/plugins/Google/locales/fi.po index 999ccfc3e..5bb176542 100644 --- a/plugins/Google/locales/fi.po +++ b/plugins/Google/locales/fi.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: Google plugin for Limnoria\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2014-12-20 14:10+0200\n" "Last-Translator: Mikaela Suomalainen <mikaela.suomalainen@outlook.com>\n" "Language-Team: \n" @@ -215,44 +215,12 @@ msgstr "" " hyväksyy suodatus tason ('active', 'moderate', 'off').\n" " " -#: plugin.py:236 -msgid "" -"<url>\n" -"\n" -" Returns a link to the cached version of <url> if it is available.\n" -" " -msgstr "" -"<url>\n" -"\n" -" Palauttaa linkin <url:in> välimuistissa olevaan versioon, jos se on " -"saatavilla.\n" -" " - -#: plugin.py:247 -msgid "Google seems to have no cache for that site." -msgstr "Googlella ei näytä olevan välimuistia tuolle sivulle." - -#: plugin.py:253 -msgid "" -"<search string> <search string> [<search string> ...]\n" -"\n" -" Returns the results of each search, in order, from greatest number\n" -" of results to least.\n" -" " -msgstr "" -"<hakumerkkijono> <hakumerkkijono> [<hakumerkkijono> ...]\n" -"\n" -" Palauttaa tulokset jokaiselle haulle järjestyksessä suurimmasta " -"numerosta\n" -" pienimpään.\n" -" " - -#: plugin.py:309 +#: plugin.py:263 #, fuzzy msgid "No translations found." msgstr "Osumia ei löytynyt." -#: plugin.py:313 +#: plugin.py:267 #, fuzzy msgid "" "<source language> [to] <target language> <text>\n" @@ -268,37 +236,65 @@ msgstr "" " Kääntää <tekstin> <lähdekielestä> <kohdekieleksi>.\n" " " -#: plugin.py:325 +#: plugin.py:279 msgid "^google\\s+(.*)$" msgstr "^google\\s+(.*)$" -#: plugin.py:347 -msgid "" -"<expression>\n" -"\n" -" Uses Google's calculator to calculate the value of <expression>.\n" -" " -msgstr "" -"<lauseke>\n" -"\n" -" Käyttää Googlen laskinta laskeakseen <lausekkeen> arvon.\n" -" " +#~ msgid "" +#~ "<url>\n" +#~ "\n" +#~ " Returns a link to the cached version of <url> if it is " +#~ "available.\n" +#~ " " +#~ msgstr "" +#~ "<url>\n" +#~ "\n" +#~ " Palauttaa linkin <url:in> välimuistissa olevaan versioon, jos se " +#~ "on saatavilla.\n" +#~ " " -#: plugin.py:378 -msgid "" -"<phone number>\n" -"\n" -" Looks <phone number> up on Google.\n" -" " -msgstr "" -"<puhelinnumero>\n" -"\n" -" Etsii <puhelinnumeroa> Googlesta.\n" -" " +#~ msgid "Google seems to have no cache for that site." +#~ msgstr "Googlella ei näytä olevan välimuistia tuolle sivulle." -#: plugin.py:392 -msgid "Google's phonebook didn't come up with anything." -msgstr "Googlen puhelinluettelo ei keksinyt mitään." +#~ msgid "" +#~ "<search string> <search string> [<search string> ...]\n" +#~ "\n" +#~ " Returns the results of each search, in order, from greatest " +#~ "number\n" +#~ " of results to least.\n" +#~ " " +#~ msgstr "" +#~ "<hakumerkkijono> <hakumerkkijono> [<hakumerkkijono> ...]\n" +#~ "\n" +#~ " Palauttaa tulokset jokaiselle haulle järjestyksessä suurimmasta " +#~ "numerosta\n" +#~ " pienimpään.\n" +#~ " " + +#~ msgid "" +#~ "<expression>\n" +#~ "\n" +#~ " Uses Google's calculator to calculate the value of <expression>.\n" +#~ " " +#~ msgstr "" +#~ "<lauseke>\n" +#~ "\n" +#~ " Käyttää Googlen laskinta laskeakseen <lausekkeen> arvon.\n" +#~ " " + +#~ msgid "" +#~ "<phone number>\n" +#~ "\n" +#~ " Looks <phone number> up on Google.\n" +#~ " " +#~ msgstr "" +#~ "<puhelinnumero>\n" +#~ "\n" +#~ " Etsii <puhelinnumeroa> Googlesta.\n" +#~ " " + +#~ msgid "Google's phonebook didn't come up with anything." +#~ msgstr "Googlen puhelinluettelo ei keksinyt mitään." #~ msgid "" #~ "This is a simple plugin to provide access to the Google services we\n" diff --git a/plugins/Google/locales/fr.po b/plugins/Google/locales/fr.po index 0302e0c55..08dde3330 100644 --- a/plugins/Google/locales/fr.po +++ b/plugins/Google/locales/fr.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: Limnoria\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: Limnoria <progval@gmail.com>\n" @@ -201,40 +201,12 @@ msgstr "" "sont donnés. --language accepte une abbréviation de langue ; --filter " "accepte un niveau de filtrage ('active', 'moderate', 'off')." -#: plugin.py:236 -msgid "" -"<url>\n" -"\n" -" Returns a link to the cached version of <url> if it is available.\n" -" " -msgstr "" -"<url>\n" -"\n" -"Retourne un lien vers la version en cache de l'<url>, si elle est disponible." - -#: plugin.py:247 -msgid "Google seems to have no cache for that site." -msgstr "Google semble ne pas avoir de cache pour ce site." - -#: plugin.py:253 -msgid "" -"<search string> <search string> [<search string> ...]\n" -"\n" -" Returns the results of each search, in order, from greatest number\n" -" of results to least.\n" -" " -msgstr "" -"<chaîne 1> <chaîne 2> [<chaîne 3> ...]\n" -"\n" -"Retourne les résultats de chaque recherche, dans l'ordre, par ordre " -"croissant du nombre de résultats." - -#: plugin.py:309 +#: plugin.py:263 #, fuzzy msgid "No translations found." msgstr "Aucune correspondance." -#: plugin.py:313 +#: plugin.py:267 #, fuzzy msgid "" "<source language> [to] <target language> <text>\n" @@ -250,35 +222,60 @@ msgstr "" "Retourne le <texte>, traduire de la <langue de départ> vers la <langue " "finale>." -#: plugin.py:325 +#: plugin.py:279 msgid "^google\\s+(.*)$" msgstr "^google\\s+(.*)$" -#: plugin.py:347 -msgid "" -"<expression>\n" -"\n" -" Uses Google's calculator to calculate the value of <expression>.\n" -" " -msgstr "" -"<expression>\n" -"\n" -"Utilise la calculatrice Google pour calculer la valeur de l'<expression>." +#~ msgid "" +#~ "<url>\n" +#~ "\n" +#~ " Returns a link to the cached version of <url> if it is " +#~ "available.\n" +#~ " " +#~ msgstr "" +#~ "<url>\n" +#~ "\n" +#~ "Retourne un lien vers la version en cache de l'<url>, si elle est " +#~ "disponible." -#: plugin.py:378 -msgid "" -"<phone number>\n" -"\n" -" Looks <phone number> up on Google.\n" -" " -msgstr "" -"<numéro de téléphone>\n" -"\n" -"Recherche le <numéro de téléphone> sur Google." +#~ msgid "Google seems to have no cache for that site." +#~ msgstr "Google semble ne pas avoir de cache pour ce site." -#: plugin.py:392 -msgid "Google's phonebook didn't come up with anything." -msgstr "L'annuaire téléphonique de Google ne donne aucun résultat." +#~ msgid "" +#~ "<search string> <search string> [<search string> ...]\n" +#~ "\n" +#~ " Returns the results of each search, in order, from greatest " +#~ "number\n" +#~ " of results to least.\n" +#~ " " +#~ msgstr "" +#~ "<chaîne 1> <chaîne 2> [<chaîne 3> ...]\n" +#~ "\n" +#~ "Retourne les résultats de chaque recherche, dans l'ordre, par ordre " +#~ "croissant du nombre de résultats." + +#~ msgid "" +#~ "<expression>\n" +#~ "\n" +#~ " Uses Google's calculator to calculate the value of <expression>.\n" +#~ " " +#~ msgstr "" +#~ "<expression>\n" +#~ "\n" +#~ "Utilise la calculatrice Google pour calculer la valeur de l'<expression>." + +#~ msgid "" +#~ "<phone number>\n" +#~ "\n" +#~ " Looks <phone number> up on Google.\n" +#~ " " +#~ msgstr "" +#~ "<numéro de téléphone>\n" +#~ "\n" +#~ "Recherche le <numéro de téléphone> sur Google." + +#~ msgid "Google's phonebook didn't come up with anything." +#~ msgstr "L'annuaire téléphonique de Google ne donne aucun résultat." #~ msgid "We broke The Google!" #~ msgstr "Google est toukassay !" diff --git a/plugins/Google/locales/it.po b/plugins/Google/locales/it.po index daf5236d8..63672fa75 100644 --- a/plugins/Google/locales/it.po +++ b/plugins/Google/locales/it.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: Limnoria\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2012-03-15 20:55+0100\n" "Last-Translator: skizzhg <skizzhg@gmx.com>\n" "Language-Team: Italian <skizzhg@gmx.com>\n" @@ -105,8 +105,8 @@ msgid "" " by default. 'active' - most filtering, 'moderate' - default filtering,\n" " 'off' - no filtering" msgstr "" -"Determina quale livello di filtraggio usare in modo predefinito. \"active" -"\":\n" +"Determina quale livello di filtraggio usare in modo predefinito. " +"\"active\":\n" " filtra tutto; \"moderate\": filtro predefinito; \"off\": filtro " "disattivato." @@ -207,43 +207,12 @@ msgstr "" " ('active', 'moderate', 'off').\n" " " -#: plugin.py:236 -msgid "" -"<url>\n" -"\n" -" Returns a link to the cached version of <url> if it is available.\n" -" " -msgstr "" -"<url>\n" -"\n" -" Restituisce un link della versione in cache di <url>, se " -"disponibile.\n" -" " - -#: plugin.py:247 -msgid "Google seems to have no cache for that site." -msgstr "Google sembra non avere cache per questo sito." - -#: plugin.py:253 -msgid "" -"<search string> <search string> [<search string> ...]\n" -"\n" -" Returns the results of each search, in order, from greatest number\n" -" of results to least.\n" -" " -msgstr "" -"<stringa di ricerca> <stringa di ricerca> [<stringa di ricerca> ...]\n" -"\n" -" Restituisce i risultati di ogni ricerca in ordine decrescente in " -"base al numero di risultati.\n" -" " - -#: plugin.py:309 +#: plugin.py:263 #, fuzzy msgid "No translations found." msgstr "Nessun risultato trovato." -#: plugin.py:313 +#: plugin.py:267 #, fuzzy msgid "" "<source language> [to] <target language> <text>\n" @@ -261,38 +230,65 @@ msgstr "" " può produrre risultati molto strani.\n" " " -#: plugin.py:325 +#: plugin.py:279 msgid "^google\\s+(.*)$" msgstr "^google\\s+(.*)$" -#: plugin.py:347 -msgid "" -"<expression>\n" -"\n" -" Uses Google's calculator to calculate the value of <expression>.\n" -" " -msgstr "" -"<espressione>\n" -"\n" -" Utilizza la calcolatrice di Google per calcolare il valore di " -"<espressione>.\n" -" " +#~ msgid "" +#~ "<url>\n" +#~ "\n" +#~ " Returns a link to the cached version of <url> if it is " +#~ "available.\n" +#~ " " +#~ msgstr "" +#~ "<url>\n" +#~ "\n" +#~ " Restituisce un link della versione in cache di <url>, se " +#~ "disponibile.\n" +#~ " " -#: plugin.py:378 -msgid "" -"<phone number>\n" -"\n" -" Looks <phone number> up on Google.\n" -" " -msgstr "" -"<numero telefonico>\n" -"\n" -" Cerca <numero telefonico> su Google.\n" -" " +#~ msgid "Google seems to have no cache for that site." +#~ msgstr "Google sembra non avere cache per questo sito." -#: plugin.py:392 -msgid "Google's phonebook didn't come up with anything." -msgstr "La rubrica di Google non ha fornito alcun risultato." +#~ msgid "" +#~ "<search string> <search string> [<search string> ...]\n" +#~ "\n" +#~ " Returns the results of each search, in order, from greatest " +#~ "number\n" +#~ " of results to least.\n" +#~ " " +#~ msgstr "" +#~ "<stringa di ricerca> <stringa di ricerca> [<stringa di ricerca> ...]\n" +#~ "\n" +#~ " Restituisce i risultati di ogni ricerca in ordine decrescente in " +#~ "base al numero di risultati.\n" +#~ " " + +#~ msgid "" +#~ "<expression>\n" +#~ "\n" +#~ " Uses Google's calculator to calculate the value of <expression>.\n" +#~ " " +#~ msgstr "" +#~ "<espressione>\n" +#~ "\n" +#~ " Utilizza la calcolatrice di Google per calcolare il valore di " +#~ "<espressione>.\n" +#~ " " + +#~ msgid "" +#~ "<phone number>\n" +#~ "\n" +#~ " Looks <phone number> up on Google.\n" +#~ " " +#~ msgstr "" +#~ "<numero telefonico>\n" +#~ "\n" +#~ " Cerca <numero telefonico> su Google.\n" +#~ " " + +#~ msgid "Google's phonebook didn't come up with anything." +#~ msgstr "La rubrica di Google non ha fornito alcun risultato." #~ msgid "We broke The Google!" #~ msgstr "Abbiamo rotto Google!" diff --git a/plugins/Google/messages.pot b/plugins/Google/messages.pot index 52c720585..34d28b8e1 100644 --- a/plugins/Google/messages.pot +++ b/plugins/Google/messages.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -168,34 +168,11 @@ msgid "" " " msgstr "" -#: plugin.py:236 -#, docstring -msgid "" -"<url>\n" -"\n" -" Returns a link to the cached version of <url> if it is available.\n" -" " -msgstr "" - -#: plugin.py:247 -msgid "Google seems to have no cache for that site." -msgstr "" - -#: plugin.py:253 -#, docstring -msgid "" -"<search string> <search string> [<search string> ...]\n" -"\n" -" Returns the results of each search, in order, from greatest number\n" -" of results to least.\n" -" " -msgstr "" - -#: plugin.py:309 +#: plugin.py:263 msgid "No translations found." msgstr "" -#: plugin.py:313 +#: plugin.py:267 #, docstring msgid "" "<source language> [to] <target language> <text>\n" @@ -207,30 +184,8 @@ msgid "" " " msgstr "" -#: plugin.py:325 +#: plugin.py:279 #, docstring msgid "^google\\s+(.*)$" msgstr "" -#: plugin.py:347 -#, docstring -msgid "" -"<expression>\n" -"\n" -" Uses Google's calculator to calculate the value of <expression>.\n" -" " -msgstr "" - -#: plugin.py:378 -#, docstring -msgid "" -"<phone number>\n" -"\n" -" Looks <phone number> up on Google.\n" -" " -msgstr "" - -#: plugin.py:392 -msgid "Google's phonebook didn't come up with anything." -msgstr "" - diff --git a/plugins/Hashes/messages.pot b/plugins/Hashes/messages.pot index 138b04915..f2d91e169 100644 --- a/plugins/Hashes/messages.pot +++ b/plugins/Hashes/messages.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/plugins/Herald/messages.pot b/plugins/Herald/messages.pot index 19e30f184..12c4d60be 100644 --- a/plugins/Herald/messages.pot +++ b/plugins/Herald/messages.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/plugins/Internet/locales/fi.po b/plugins/Internet/locales/fi.po index df2632745..5e040aaa3 100644 --- a/plugins/Internet/locales/fi.po +++ b/plugins/Internet/locales/fi.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: Internet plugin for Limnoria\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2014-12-20 13:25+0200\n" "Last-Translator: Mikaela Suomalainen <mikaela.suomalainen@outlook.com>\n" "Language-Team: \n" @@ -17,7 +17,7 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 1.6.10\n" -#: plugin.py:45 +#: plugin.py:44 #, fuzzy msgid "" "Provides commands to query DNS, search WHOIS databases,\n" @@ -27,7 +27,7 @@ msgstr "" "muuttamaan\n" " IP-osoitteet hexoiksi." -#: plugin.py:50 +#: plugin.py:49 msgid "" "<host|ip>\n" "\n" @@ -39,11 +39,11 @@ msgstr "" " Palauttaa <isännän> ip:een tai <ip:een> käänteisen isäntänimen.\n" " " -#: plugin.py:57 plugin.py:72 +#: plugin.py:56 plugin.py:71 msgid "Host not found." msgstr "Isäntää ei löytynyt." -#: plugin.py:87 +#: plugin.py:86 msgid "" "<domain>\n" "\n" @@ -55,35 +55,35 @@ msgstr "" " Palauttaa WHOIS tiedot <verkkotunnusten> rekisteröimisestä.\n" " " -#: plugin.py:149 +#: plugin.py:148 msgid "updated %s" msgstr "päivitetty %s" -#: plugin.py:152 +#: plugin.py:151 msgid "registered %s" msgstr "rekisteröity %s" -#: plugin.py:155 +#: plugin.py:154 msgid "expires %s" msgstr "vanhenee %s" -#: plugin.py:175 +#: plugin.py:174 msgid " <registered at %s>" msgstr " <rekisteröity aikaan %s>" -#: plugin.py:177 +#: plugin.py:176 msgid " <registered by %s>" msgstr " <rekisteröinyt %s>" -#: plugin.py:184 +#: plugin.py:183 msgid "%s%s is %L." msgstr "%s%s on %L." -#: plugin.py:187 +#: plugin.py:186 msgid "I couldn't find such a domain." msgstr "En voi löytää sellaista verkkotunnusta." -#: plugin.py:192 +#: plugin.py:191 msgid "" "<ip>\n" "\n" diff --git a/plugins/Internet/locales/fr.po b/plugins/Internet/locales/fr.po index 93ed7278d..cf1dd20a5 100644 --- a/plugins/Internet/locales/fr.po +++ b/plugins/Internet/locales/fr.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: Limnoria\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: \n" "Last-Translator: Valentin Lorentz <progval@gmail.com>\n" "Language-Team: Limnoria <progval@gmail.com>\n" @@ -13,13 +13,13 @@ msgstr "" "X-Poedit-Country: France\n" "X-Poedit-SourceCharset: ASCII\n" -#: plugin.py:45 +#: plugin.py:44 msgid "" "Provides commands to query DNS, search WHOIS databases,\n" " and convert IPs to hex." msgstr "" -#: plugin.py:50 +#: plugin.py:49 msgid "" "<host|ip>\n" "\n" @@ -30,11 +30,11 @@ msgstr "" "\n" "Retourne l'ip de l'<hôte>, ou le reverse DNS de l'<ip>" -#: plugin.py:57 plugin.py:72 +#: plugin.py:56 plugin.py:71 msgid "Host not found." msgstr "Hôte non trouvé." -#: plugin.py:87 +#: plugin.py:86 msgid "" "<domain>\n" "\n" @@ -45,35 +45,35 @@ msgstr "" "\n" "Retourne les informations du WHOIS sur le <domaine>." -#: plugin.py:149 +#: plugin.py:148 msgid "updated %s" msgstr "mis à jour le %s" -#: plugin.py:152 +#: plugin.py:151 msgid "registered %s" msgstr "enregistré le %s" -#: plugin.py:155 +#: plugin.py:154 msgid "expires %s" msgstr "expire le %s" -#: plugin.py:175 +#: plugin.py:174 msgid " <registered at %s>" msgstr " <enregistré le %s>" -#: plugin.py:177 +#: plugin.py:176 msgid " <registered by %s>" msgstr " <enregistré par %s>" -#: plugin.py:184 +#: plugin.py:183 msgid "%s%s is %L." msgstr "%s%s est %L" -#: plugin.py:187 +#: plugin.py:186 msgid "I couldn't find such a domain." msgstr "Je ne peux trouver ce domaine." -#: plugin.py:192 +#: plugin.py:191 msgid "" "<ip>\n" "\n" diff --git a/plugins/Internet/locales/it.po b/plugins/Internet/locales/it.po index 864948262..c151e825a 100644 --- a/plugins/Internet/locales/it.po +++ b/plugins/Internet/locales/it.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: Limnoria\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2011-06-12 14:14+0200\n" "Last-Translator: skizzhg <skizzhg@gmx.com>\n" "Language-Team: Italian <skizzhg@gmx.com>\n" @@ -10,13 +10,13 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: plugin.py:45 +#: plugin.py:44 msgid "" "Provides commands to query DNS, search WHOIS databases,\n" " and convert IPs to hex." msgstr "" -#: plugin.py:50 +#: plugin.py:49 msgid "" "<host|ip>\n" "\n" @@ -28,11 +28,11 @@ msgstr "" " Restituisce l'ip di <host> o il DNS inverso di <ip>.\n" " " -#: plugin.py:57 plugin.py:72 +#: plugin.py:56 plugin.py:71 msgid "Host not found." msgstr "Host non trovato." -#: plugin.py:87 +#: plugin.py:86 msgid "" "<domain>\n" "\n" @@ -44,35 +44,35 @@ msgstr "" " Restituisce le informazioni WHOIS sulla registrazione di <dominio>.\n" " " -#: plugin.py:149 +#: plugin.py:148 msgid "updated %s" msgstr "aggiornato il %s" -#: plugin.py:152 +#: plugin.py:151 msgid "registered %s" msgstr "registrato il %s" -#: plugin.py:155 +#: plugin.py:154 msgid "expires %s" msgstr "scade il %s" -#: plugin.py:175 +#: plugin.py:174 msgid " <registered at %s>" msgstr " <registrato il %s>" -#: plugin.py:177 +#: plugin.py:176 msgid " <registered by %s>" msgstr " <registrato da %s>" -#: plugin.py:184 +#: plugin.py:183 msgid "%s%s is %L." msgstr "%s%s è %L." -#: plugin.py:187 +#: plugin.py:186 msgid "I couldn't find such a domain." msgstr "Non riesco a trovare un dominio." -#: plugin.py:192 +#: plugin.py:191 msgid "" "<ip>\n" "\n" diff --git a/plugins/Internet/messages.pot b/plugins/Internet/messages.pot index bd472e6ce..e2d1b978a 100644 --- a/plugins/Internet/messages.pot +++ b/plugins/Internet/messages.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -15,14 +15,14 @@ msgstr "" "Generated-By: pygettext.py 1.5\n" -#: plugin.py:45 +#: plugin.py:44 #, docstring msgid "" "Provides commands to query DNS, search WHOIS databases,\n" " and convert IPs to hex." msgstr "" -#: plugin.py:50 +#: plugin.py:49 #, docstring msgid "" "<host|ip>\n" @@ -31,11 +31,11 @@ msgid "" " " msgstr "" -#: plugin.py:57 plugin.py:72 +#: plugin.py:56 plugin.py:71 msgid "Host not found." msgstr "" -#: plugin.py:87 +#: plugin.py:86 #, docstring msgid "" "<domain>\n" @@ -44,35 +44,35 @@ msgid "" " " msgstr "" -#: plugin.py:149 +#: plugin.py:148 msgid "updated %s" msgstr "" -#: plugin.py:152 +#: plugin.py:151 msgid "registered %s" msgstr "" -#: plugin.py:155 +#: plugin.py:154 msgid "expires %s" msgstr "" -#: plugin.py:175 +#: plugin.py:174 msgid " <registered at %s>" msgstr "" -#: plugin.py:177 +#: plugin.py:176 msgid " <registered by %s>" msgstr "" -#: plugin.py:184 +#: plugin.py:183 msgid "%s%s is %L." msgstr "" -#: plugin.py:187 +#: plugin.py:186 msgid "I couldn't find such a domain." msgstr "" -#: plugin.py:192 +#: plugin.py:191 #, docstring msgid "" "<ip>\n" diff --git a/plugins/Karma/messages.pot b/plugins/Karma/messages.pot index 845d205e1..f9147e5ae 100644 --- a/plugins/Karma/messages.pot +++ b/plugins/Karma/messages.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/plugins/Lart/messages.pot b/plugins/Lart/messages.pot index 83c8fdd85..1fa21c539 100644 --- a/plugins/Lart/messages.pot +++ b/plugins/Lart/messages.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/plugins/Later/messages.pot b/plugins/Later/messages.pot index 9689aca3e..026838bbf 100644 --- a/plugins/Later/messages.pot +++ b/plugins/Later/messages.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/plugins/Limiter/messages.pot b/plugins/Limiter/messages.pot index e3ac2d5c2..51e837021 100644 --- a/plugins/Limiter/messages.pot +++ b/plugins/Limiter/messages.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/plugins/LogToIrc/messages.pot b/plugins/LogToIrc/messages.pot index afe0b8600..2b22b366e 100644 --- a/plugins/LogToIrc/messages.pot +++ b/plugins/LogToIrc/messages.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -25,3 +25,10 @@ msgstr "" msgid "Value must be a valid channel or a valid nick." msgstr "" +#: plugin.py:33 +#, docstring +msgid "" +"\n" +"Allows for sending the bot's logging output to channels or users.\n" +msgstr "" + diff --git a/plugins/Math/locales/fi.po b/plugins/Math/locales/fi.po index ad99c0da7..5df9c22a0 100644 --- a/plugins/Math/locales/fi.po +++ b/plugins/Math/locales/fi.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: Math plugin for Limnoria\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2014-12-20 12:16+0200\n" "Last-Translator: Mikaela Suomalainen <mikaela.suomalainen@outlook.com>\n" "Language-Team: \n" @@ -117,7 +117,7 @@ msgstr "" " 'trusted' valtuuden.\n" " " -#: plugin.py:187 +#: plugin.py:198 #, fuzzy msgid "" "<rpn math expression>\n" @@ -130,19 +130,19 @@ msgstr "" " Palauttaa RPN lausekkeen arvon.\n" " " -#: plugin.py:212 +#: plugin.py:223 msgid "Not enough arguments for %s" msgstr "Ei tarpeeksi parametrejä %s:lle." -#: plugin.py:225 +#: plugin.py:236 msgid "%q is not a defined function." msgstr "%q ei ole määritetty funktio." -#: plugin.py:232 +#: plugin.py:243 msgid "Stack: [%s]" msgstr "Pino: [%s]" -#: plugin.py:236 +#: plugin.py:247 msgid "" "[<number>] <unit> to <other unit>\n" "\n" @@ -157,7 +157,7 @@ msgstr "" " on oletuksena 1. Yksikkö tiedoille, katso 'units' komento.\n" " " -#: plugin.py:266 +#: plugin.py:277 msgid "" " [<type>]\n" "\n" diff --git a/plugins/Math/locales/fr.po b/plugins/Math/locales/fr.po index 82bcfb620..11c183406 100644 --- a/plugins/Math/locales/fr.po +++ b/plugins/Math/locales/fr.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: Limnoria\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: Limnoria <progval@gmail.com>\n" @@ -100,7 +100,7 @@ msgstr "" "des mathématiques entières, ce qui peut causer une surconsommation de CPU de " "la part du bot. C'est pourquoi elle requiert la capacité 'trusted'." -#: plugin.py:187 +#: plugin.py:198 msgid "" "<rpn math expression>\n" "\n" @@ -111,19 +111,19 @@ msgstr "" "\n" "Retourne la valeur de l'expression mathématique NPI." -#: plugin.py:212 +#: plugin.py:223 msgid "Not enough arguments for %s" msgstr "Pas assez d'arguments pour %s." -#: plugin.py:225 +#: plugin.py:236 msgid "%q is not a defined function." msgstr "%q n'est pas une fonction définie." -#: plugin.py:232 +#: plugin.py:243 msgid "Stack: [%s]" msgstr "Pile : [%s]" -#: plugin.py:236 +#: plugin.py:247 msgid "" "[<number>] <unit> to <other unit>\n" "\n" @@ -137,7 +137,7 @@ msgstr "" "vaut 1 par défaut. Pour plus d'informations sur les unités, utilisez la " "commande 'units'." -#: plugin.py:266 +#: plugin.py:277 msgid "" " [<type>]\n" "\n" diff --git a/plugins/Math/locales/hu.po b/plugins/Math/locales/hu.po index 3fe4dabc5..47310d0eb 100644 --- a/plugins/Math/locales/hu.po +++ b/plugins/Math/locales/hu.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: Limnoria Math\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2011-08-02 21:06+0200\n" "Last-Translator: nyuszika7h <litemininyuszika@gmail.com>\n" "Language-Team: \n" @@ -105,7 +105,7 @@ msgstr "" "matematikát, és előidézheti, hogy a bot felszívjon sok CPU-t. Ezért a " "'trusted' képesség szükséges a használatához." -#: plugin.py:187 +#: plugin.py:198 msgid "" "<rpn math expression>\n" "\n" @@ -116,19 +116,19 @@ msgstr "" "\n" "Kiírja egy RPN kifejezés értékét." -#: plugin.py:212 +#: plugin.py:223 msgid "Not enough arguments for %s" msgstr "Nincs elég paraméter %s-hoz." -#: plugin.py:225 +#: plugin.py:236 msgid "%q is not a defined function." msgstr "%q nincs meghatározva függvényként." -#: plugin.py:232 +#: plugin.py:243 msgid "Stack: [%s]" msgstr "Verem: [%s]" -#: plugin.py:236 +#: plugin.py:247 msgid "" "[<number>] <unit> to <other unit>\n" "\n" @@ -142,7 +142,7 @@ msgstr "" "alapértelmezett értéke 1. Mértékegység információért lásd az 'units' " "parancsot." -#: plugin.py:266 +#: plugin.py:277 msgid "" " [<type>]\n" "\n" diff --git a/plugins/Math/locales/it.po b/plugins/Math/locales/it.po index 25166eda4..9e8539389 100644 --- a/plugins/Math/locales/it.po +++ b/plugins/Math/locales/it.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: Limnoria\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2011-06-21 17:27+0200\n" "Last-Translator: skizzhg <skizzhg@gmx.com>\n" "Language-Team: Italian <skizzhg@gmx.com>\n" @@ -108,7 +108,7 @@ msgstr "" " richiede la capacità \"trusted\" per poterlo utilizzare.\n" " " -#: plugin.py:187 +#: plugin.py:198 msgid "" "<rpn math expression>\n" "\n" @@ -121,19 +121,19 @@ msgstr "" "Notation).\n" " " -#: plugin.py:212 +#: plugin.py:223 msgid "Not enough arguments for %s" msgstr "Argomenti per %s insufficienti" -#: plugin.py:225 +#: plugin.py:236 msgid "%q is not a defined function." msgstr "%q non è una funzione definita." -#: plugin.py:232 +#: plugin.py:243 msgid "Stack: [%s]" msgstr "Stack: [%s]" -#: plugin.py:236 +#: plugin.py:247 msgid "" "[<number>] <unit> to <other unit>\n" "\n" @@ -149,7 +149,7 @@ msgstr "" "comando \"units\".\n" " " -#: plugin.py:266 +#: plugin.py:277 msgid "" " [<type>]\n" "\n" diff --git a/plugins/Math/messages.pot b/plugins/Math/messages.pot index 87d40048b..a08838ecf 100644 --- a/plugins/Math/messages.pot +++ b/plugins/Math/messages.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -88,7 +88,7 @@ msgid "" " " msgstr "" -#: plugin.py:187 +#: plugin.py:198 #, docstring msgid "" "<rpn math expression>\n" @@ -97,19 +97,19 @@ msgid "" " " msgstr "" -#: plugin.py:212 +#: plugin.py:223 msgid "Not enough arguments for %s" msgstr "" -#: plugin.py:225 +#: plugin.py:236 msgid "%q is not a defined function." msgstr "" -#: plugin.py:232 +#: plugin.py:243 msgid "Stack: [%s]" msgstr "" -#: plugin.py:236 +#: plugin.py:247 #, docstring msgid "" "[<number>] <unit> to <other unit>\n" @@ -119,7 +119,7 @@ msgid "" " " msgstr "" -#: plugin.py:266 +#: plugin.py:277 #, docstring msgid "" " [<type>]\n" diff --git a/plugins/MessageParser/locales/fi.po b/plugins/MessageParser/locales/fi.po index 7dcaa65c5..29552fd2f 100644 --- a/plugins/MessageParser/locales/fi.po +++ b/plugins/MessageParser/locales/fi.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2014-03-22 14:39+0200\n" "Last-Translator: Mikaela Suomalainen <mikaela.suomalainen@outlook.com>\n" "Language-Team: \n" @@ -115,7 +115,7 @@ msgid "Run a command from message, as if command was sent over IRC." msgstr "" "Suorittaa komennon viestistä, kuin jos komento olisi lähetetty IRC:een yli." -#: plugin.py:146 +#: plugin.py:147 msgid "" "Check if the user has any of the required capabilities to manage\n" " the regexp database." @@ -123,7 +123,7 @@ msgstr "" "Tarkista onko käyttäjällä vaadittu oikeus säännöllisen lauseke tietokannan\n" " muokkaamiseen." -#: plugin.py:209 +#: plugin.py:227 #, fuzzy msgid "" "[<channel>|global] <regexp> <action>\n" @@ -140,15 +140,15 @@ msgstr "" " toiminto toistetaan säännöllisen lausekkeen täsmätessä muuttujilla $1, $2,\n" " jne. tulevat interpolatoiduiksi säännöllisen lausekkeen täsmäysryhmistä." -#: plugin.py:231 +#: plugin.py:249 msgid "Invalid python regexp: %s" msgstr "Viallinen Python säännöllinen lauseke: %s" -#: plugin.py:243 +#: plugin.py:261 msgid "That trigger is locked." msgstr "Tuo liipaisin on lukittu." -#: plugin.py:249 +#: plugin.py:267 #, fuzzy msgid "" "[<channel>|global] [--id] <regexp>]\n" @@ -170,15 +170,15 @@ msgstr "" "sisällöllä.\n" " " -#: plugin.py:271 plugin.py:301 plugin.py:324 plugin.py:352 plugin.py:382 +#: plugin.py:289 plugin.py:319 plugin.py:342 plugin.py:370 plugin.py:400 msgid "There is no such regexp trigger." msgstr "Tuollaista säännöllinen lauseke liipaisinta ei ole." -#: plugin.py:275 +#: plugin.py:293 msgid "This regexp trigger is locked." msgstr "Tämä säännöllinen lauseke liipaisin on lukittu." -#: plugin.py:287 +#: plugin.py:305 #, fuzzy msgid "" "[<channel>|global] <regexp>\n" @@ -197,7 +197,7 @@ msgstr "" "itsellään.\n" " " -#: plugin.py:310 +#: plugin.py:328 #, fuzzy msgid "" "[<channel>|global] <regexp>\n" @@ -217,7 +217,7 @@ msgstr "" " lähetetä kanavalla itsellään.\n" " " -#: plugin.py:333 +#: plugin.py:351 #, fuzzy msgid "" "[<channel>|global] [--id] <regexp>\n" @@ -238,7 +238,7 @@ msgstr "" "ei sisällön perusteella\n" " " -#: plugin.py:362 +#: plugin.py:380 #, fuzzy msgid "" "[<channel>|global] [--id] <regexp>\n" @@ -260,7 +260,7 @@ msgstr "" "sisällön perusteella.\n" " " -#: plugin.py:385 +#: plugin.py:403 msgid "" "The regexp id is %d, regexp is \"%s\", and action is \"%s\". It was added by " "user %s on %s, has been triggered %d times, and is %s." @@ -268,15 +268,15 @@ msgstr "" "Säännöllisen lausekkeen id on %d, säännöllinen lauseke on \"%s\", ja " "toiminto on \"%s\". Sen lisäsi %s %s:llä, on liipaistu %d kertaa, ja on %s." -#: plugin.py:394 +#: plugin.py:412 msgid "locked" msgstr "lukittu" -#: plugin.py:394 +#: plugin.py:412 msgid "not locked" msgstr "ei lukittu" -#: plugin.py:401 +#: plugin.py:419 #, fuzzy msgid "" "[<channel>|global]\n" @@ -295,11 +295,11 @@ msgstr "" " itsellään. Säännöllinen lauseke ID on luetteloitu suluissa.\n" " " -#: plugin.py:414 plugin.py:440 +#: plugin.py:432 plugin.py:458 msgid "There are no regexp triggers in the database." msgstr "Säännöllinen lauseke tietokannassa ei ole liipaisimia." -#: plugin.py:424 +#: plugin.py:442 #, fuzzy msgid "" "[<channel>|global]\n" @@ -321,7 +321,7 @@ msgstr "" " kanavalla itsellään.\n" " " -#: plugin.py:448 +#: plugin.py:466 #, fuzzy msgid "" "[<channel>|global]\n" diff --git a/plugins/MessageParser/locales/fr.po b/plugins/MessageParser/locales/fr.po index 9dd83150a..e9290c745 100644 --- a/plugins/MessageParser/locales/fr.po +++ b/plugins/MessageParser/locales/fr.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: Limnoria\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: Limnoria <progval@gmail.com>\n" @@ -101,13 +101,13 @@ msgstr "." msgid "Run a command from message, as if command was sent over IRC." msgstr "." -#: plugin.py:146 +#: plugin.py:147 msgid "" "Check if the user has any of the required capabilities to manage\n" " the regexp database." msgstr "." -#: plugin.py:209 +#: plugin.py:227 msgid "" "[<channel>|global] <regexp> <action>\n" "\n" @@ -124,15 +124,15 @@ msgstr "" "régulière>.<canal> n'est nécessaire que si le message n'est pas envoyé sur " "le canal lui-même." -#: plugin.py:231 +#: plugin.py:249 msgid "Invalid python regexp: %s" msgstr "Expression régulière Python invalide : %s" -#: plugin.py:243 +#: plugin.py:261 msgid "That trigger is locked." msgstr "Ce trigger est bloqué." -#: plugin.py:249 +#: plugin.py:267 msgid "" "[<channel>|global] [--id] <regexp>]\n" "\n" @@ -148,15 +148,15 @@ msgstr "" "des déclencheurs. Si l'option --id est spécifiée, l'id de l'<expression " "régulière> sera récupéré, et non le contenu." -#: plugin.py:271 plugin.py:301 plugin.py:324 plugin.py:352 plugin.py:382 +#: plugin.py:289 plugin.py:319 plugin.py:342 plugin.py:370 plugin.py:400 msgid "There is no such regexp trigger." msgstr "Cette expression régulière n'existe pas." -#: plugin.py:275 +#: plugin.py:293 msgid "This regexp trigger is locked." msgstr "Cette expression régulière est verrouillée" -#: plugin.py:287 +#: plugin.py:305 msgid "" "[<channel>|global] <regexp>\n" "\n" @@ -172,7 +172,7 @@ msgstr "" "supprimer ou la modifier. <canal> n'est nécessaire que si le message n'est " "pas envoyé sur le canal lui-même." -#: plugin.py:310 +#: plugin.py:328 msgid "" "[<channel>|global] <regexp>\n" "\n" @@ -188,7 +188,7 @@ msgstr "" "la supprimer ou la modifier. <canal> n'est nécessaire que si le message " "n'est pas envoyé sur le canal lui-même." -#: plugin.py:333 +#: plugin.py:351 msgid "" "[<channel>|global] [--id] <regexp>\n" "\n" @@ -205,7 +205,7 @@ msgstr "" "déclencheurs. Si l'option --id est spécifiée, l'id de l'<expression " "régulière> sera récupéré, et non le contenu." -#: plugin.py:362 +#: plugin.py:380 msgid "" "[<channel>|global] [--id] <regexp>\n" "\n" @@ -222,7 +222,7 @@ msgstr "" "données des déclencheurs. Si l'option --id est spécifiée, l'id de " "l'<expression régulière> sera récupéré, et non le contenu." -#: plugin.py:385 +#: plugin.py:403 msgid "" "The regexp id is %d, regexp is \"%s\", and action is \"%s\". It was added by " "user %s on %s, has been triggered %d times, and is %s." @@ -231,15 +231,15 @@ msgstr "" "l'action est \"%s\". Elle a été ajoutée par l'utilisateur %s le %s, et a été " "utilisée %d fois, et est %s" -#: plugin.py:394 +#: plugin.py:412 msgid "locked" msgstr "verouillée" -#: plugin.py:394 +#: plugin.py:412 msgid "not locked" msgstr "non verrouillée" -#: plugin.py:401 +#: plugin.py:419 msgid "" "[<channel>|global]\n" "\n" @@ -254,11 +254,11 @@ msgstr "" "Liste les expressions régulières présentes dans la base de données. <canal> " "n'est nécessaire que si le message n'est pas envoyé sur le canal lui-même." -#: plugin.py:414 plugin.py:440 +#: plugin.py:432 plugin.py:458 msgid "There are no regexp triggers in the database." msgstr "Il n'y a pas d'expression régulière dans ma base de données." -#: plugin.py:424 +#: plugin.py:442 msgid "" "[<channel>|global]\n" "\n" @@ -275,7 +275,7 @@ msgstr "" "plugins.MessageParser.rankListLength. <canal> n'est nécessaire que si le " "message n'est pas envoyé sur le canal lui-même." -#: plugin.py:448 +#: plugin.py:466 msgid "" "[<channel>|global]\n" "\n" diff --git a/plugins/MessageParser/locales/it.po b/plugins/MessageParser/locales/it.po index e087f9b11..aeb8c4d8f 100644 --- a/plugins/MessageParser/locales/it.po +++ b/plugins/MessageParser/locales/it.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: Limnoria\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2011-07-17 01:43+0200\n" "Last-Translator: skizzhg <skizzhg@gmx.com>\n" "Language-Team: Italian <skizzhg@gmx.com>\n" @@ -98,7 +98,7 @@ msgid "Run a command from message, as if command was sent over IRC." msgstr "" "Esegue un comando da un messaggio, come se questo fosse stato inviato su IRC." -#: plugin.py:146 +#: plugin.py:147 msgid "" "Check if the user has any of the required capabilities to manage\n" " the regexp database." @@ -106,7 +106,7 @@ msgstr "" "Controlla se l'utente ha una delle capacità richieste per gestire il " "database delle regexp." -#: plugin.py:209 +#: plugin.py:227 #, fuzzy msgid "" "[<channel>|global] <regexp> <action>\n" @@ -126,15 +126,15 @@ msgstr "" "messaggio\n" " non viene inviato nel canale stesso." -#: plugin.py:231 +#: plugin.py:249 msgid "Invalid python regexp: %s" msgstr "Espressione regolare python non valida: %s" -#: plugin.py:243 +#: plugin.py:261 msgid "That trigger is locked." msgstr "Questo trigger è bloccato." -#: plugin.py:249 +#: plugin.py:267 #, fuzzy msgid "" "[<channel>|global] [--id] <regexp>]\n" @@ -154,15 +154,15 @@ msgstr "" "contenuto.\n" " " -#: plugin.py:271 plugin.py:301 plugin.py:324 plugin.py:352 plugin.py:382 +#: plugin.py:289 plugin.py:319 plugin.py:342 plugin.py:370 plugin.py:400 msgid "There is no such regexp trigger." msgstr "Questa espressione regolare non esiste." -#: plugin.py:275 +#: plugin.py:293 msgid "This regexp trigger is locked." msgstr "Questa espressione regolare è bloccata." -#: plugin.py:287 +#: plugin.py:305 #, fuzzy msgid "" "[<channel>|global] <regexp>\n" @@ -181,7 +181,7 @@ msgstr "" "canale stesso.\n" " " -#: plugin.py:310 +#: plugin.py:328 #, fuzzy msgid "" "[<channel>|global] <regexp>\n" @@ -200,7 +200,7 @@ msgstr "" "inviato nel canale stesso.\n" " " -#: plugin.py:333 +#: plugin.py:351 #, fuzzy msgid "" "[<channel>|global] [--id] <regexp>\n" @@ -222,7 +222,7 @@ msgstr "" "contenuto.\n" " " -#: plugin.py:362 +#: plugin.py:380 #, fuzzy msgid "" "[<channel>|global] [--id] <regexp>\n" @@ -244,7 +244,7 @@ msgstr "" "anziché contenuto.\n" " " -#: plugin.py:385 +#: plugin.py:403 msgid "" "The regexp id is %d, regexp is \"%s\", and action is \"%s\". It was added by " "user %s on %s, has been triggered %d times, and is %s." @@ -252,15 +252,15 @@ msgstr "" "L'ID della regexp è %d, la regexp è \"%s\" e l'azione associata è \"%s\". È " "stata aggiunta dall'utente %s il %s, è stata utilizzata %d volte ed è %s." -#: plugin.py:394 +#: plugin.py:412 msgid "locked" msgstr "bloccata" -#: plugin.py:394 +#: plugin.py:412 msgid "not locked" msgstr "non bloccata" -#: plugin.py:401 +#: plugin.py:419 #, fuzzy msgid "" "[<channel>|global]\n" @@ -279,11 +279,11 @@ msgstr "" "sono tra parentesi.\n" " " -#: plugin.py:414 plugin.py:440 +#: plugin.py:432 plugin.py:458 msgid "There are no regexp triggers in the database." msgstr "Non ci sono espressioni regolari nel database." -#: plugin.py:424 +#: plugin.py:442 #, fuzzy msgid "" "[<channel>|global]\n" @@ -304,7 +304,7 @@ msgstr "" "stesso.\n" " " -#: plugin.py:448 +#: plugin.py:466 #, fuzzy msgid "" "[<channel>|global]\n" diff --git a/plugins/MessageParser/messages.pot b/plugins/MessageParser/messages.pot index 9a60cb1f3..e064475b8 100644 --- a/plugins/MessageParser/messages.pot +++ b/plugins/MessageParser/messages.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -90,14 +90,14 @@ msgstr "" msgid "Run a command from message, as if command was sent over IRC." msgstr "" -#: plugin.py:146 +#: plugin.py:147 #, docstring msgid "" "Check if the user has any of the required capabilities to manage\n" " the regexp database." msgstr "" -#: plugin.py:209 +#: plugin.py:227 #, docstring msgid "" "[<channel>|global] <regexp> <action>\n" @@ -108,15 +108,15 @@ msgid "" " etc. being interpolated from the regexp match groups." msgstr "" -#: plugin.py:231 +#: plugin.py:249 msgid "Invalid python regexp: %s" msgstr "" -#: plugin.py:243 +#: plugin.py:261 msgid "That trigger is locked." msgstr "" -#: plugin.py:249 +#: plugin.py:267 #, docstring msgid "" "[<channel>|global] [--id] <regexp>]\n" @@ -128,15 +128,15 @@ msgid "" " " msgstr "" -#: plugin.py:271 plugin.py:301 plugin.py:324 plugin.py:352 plugin.py:382 +#: plugin.py:289 plugin.py:319 plugin.py:342 plugin.py:370 plugin.py:400 msgid "There is no such regexp trigger." msgstr "" -#: plugin.py:275 +#: plugin.py:293 msgid "This regexp trigger is locked." msgstr "" -#: plugin.py:287 +#: plugin.py:305 #, docstring msgid "" "[<channel>|global] <regexp>\n" @@ -147,7 +147,7 @@ msgid "" " " msgstr "" -#: plugin.py:310 +#: plugin.py:328 #, docstring msgid "" "[<channel>|global] <regexp>\n" @@ -158,7 +158,7 @@ msgid "" " " msgstr "" -#: plugin.py:333 +#: plugin.py:351 #, docstring msgid "" "[<channel>|global] [--id] <regexp>\n" @@ -170,7 +170,7 @@ msgid "" " " msgstr "" -#: plugin.py:362 +#: plugin.py:380 #, docstring msgid "" "[<channel>|global] [--id] <regexp>\n" @@ -182,19 +182,19 @@ msgid "" " " msgstr "" -#: plugin.py:385 +#: plugin.py:403 msgid "The regexp id is %d, regexp is \"%s\", and action is \"%s\". It was added by user %s on %s, has been triggered %d times, and is %s." msgstr "" -#: plugin.py:394 +#: plugin.py:412 msgid "locked" msgstr "" -#: plugin.py:394 +#: plugin.py:412 msgid "not locked" msgstr "" -#: plugin.py:401 +#: plugin.py:419 #, docstring msgid "" "[<channel>|global]\n" @@ -205,11 +205,11 @@ msgid "" " " msgstr "" -#: plugin.py:414 plugin.py:440 +#: plugin.py:432 plugin.py:458 msgid "There are no regexp triggers in the database." msgstr "" -#: plugin.py:424 +#: plugin.py:442 #, docstring msgid "" "[<channel>|global]\n" @@ -221,7 +221,7 @@ msgid "" " " msgstr "" -#: plugin.py:448 +#: plugin.py:466 #, docstring msgid "" "[<channel>|global]\n" diff --git a/plugins/Misc/locales/de.po b/plugins/Misc/locales/de.po index 5d30c1a3a..790ea0260 100644 --- a/plugins/Misc/locales/de.po +++ b/plugins/Misc/locales/de.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: Supybot\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2012-04-27 15:40+0200\n" "Last-Translator: Mikaela Suomalainen <mikaela.suomalainen@outlook.com>\n" "Language-Team: German <fbesser@gmail.com>\n" @@ -80,13 +80,13 @@ msgstr "" "Legt fest ob der Nick mit in der Ausgabe stehen soll, wenn der letzte Befehl " "teil eines verschachtelten Befehls war." -#: plugin.py:76 +#: plugin.py:79 msgid "" "Miscellaneous commands to access Supybot core. This is a core\n" " Supybot plugin that should not be removed!" msgstr "" -#: plugin.py:114 +#: plugin.py:117 #, fuzzy msgid "" "You've given me %s invalid commands within the last %i seconds; I'm now " @@ -95,7 +95,7 @@ msgstr "" "Du hast mir %s nicht zulässige Befehle innerhalb der letzten Minute gegeben. " "Ich werde dich für %s ignorieren." -#: plugin.py:157 +#: plugin.py:160 msgid "" "The %q plugin is loaded, but there is no command named %q in it. Try \"list " "%s\" to see the commands in the %q plugin." @@ -103,15 +103,15 @@ msgstr "" "Das %q Plugin ist geladen, aber es besitzt keinen Befehl mit dem Namen %q. " "Versuche \"list %s\" um die Befehle des %q Plugins zu sehen." -#: plugin.py:163 plugin.py:166 +#: plugin.py:166 plugin.py:169 msgid "command" msgstr "" -#: plugin.py:172 +#: plugin.py:175 msgid "private" msgstr "" -#: plugin.py:188 +#: plugin.py:191 #, fuzzy msgid "" "[--private] [--unloaded] [<plugin>]\n" @@ -128,19 +128,19 @@ msgstr "" "angegeben wird, werden alle verfügbaren öffentliche Befehle aufgelistet. " "Falls --private angegeben wird, werden alle privaten Plugins aufgelistet." -#: plugin.py:209 +#: plugin.py:212 msgid "--private and --unloaded are incompatible options." msgstr "" -#: plugin.py:237 +#: plugin.py:240 msgid "There are no private plugins." msgstr "Es gibt keine privaten Plugins." -#: plugin.py:239 +#: plugin.py:242 msgid "There are no public plugins." msgstr "Es gibt keine öffentlichen Plugins." -#: plugin.py:246 +#: plugin.py:249 msgid "" "That plugin exists, but has no commands. This probably means that it has " "some configuration variables that can be changed in order to modify its " @@ -152,7 +152,7 @@ msgstr "" "Verhalten zu beeinflussen. Probiere \"config list supybot.plugins.%s\" um zu " "sehen welche Konfigurationsvariablen es hat." -#: plugin.py:258 +#: plugin.py:261 msgid "" "<string>\n" "\n" @@ -165,11 +165,11 @@ msgstr "" "Sucht nach <Zeichenkette> in den Befehlen die der Bot momentan anbietet, " "gibt eine Liste der Befehle zurück in denen die Zeichenkette vorkommt." -#: plugin.py:277 +#: plugin.py:280 msgid "No appropriate commands were found." msgstr "Kein passender Befehl gefunden." -#: plugin.py:282 +#: plugin.py:285 #, fuzzy msgid "" "[<plugin>] [<command>]\n" @@ -187,13 +187,13 @@ msgstr "" "Gibt eine nützliche Beschreibung was der <Befehl> tut. <Plugin> wird nur " "benötigt, falls es den Befehl in mehr wie einem Plugin gibt." -#: plugin.py:295 +#: plugin.py:298 msgid "" "Use the 'list' command to list all plugins, and 'list <plugin>' to list all " "commands in a plugin. To show the help of a command, use 'help <command>'. " msgstr "" -#: plugin.py:306 +#: plugin.py:309 msgid "" "That command exists in the %L plugins. Please specify exactly which plugin " "command you want help with." @@ -201,23 +201,23 @@ msgstr "" "Den Befehl gibt es in diesen %L Plugins. Bitte gibt genau an mit welchen " "Plugin Befehl du Hilfe benötigst." -#: plugin.py:315 +#: plugin.py:318 msgid "There is no command %q." msgstr "Es gibt keinen Befehl %q." -#: plugin.py:319 +#: plugin.py:322 msgid "" " However, '{0}' is the name of a loaded plugin, and you may be able to find " "its help using 'plugin help {0}' and its provided commands using 'list {0}'." msgstr "" -#: plugin.py:326 +#: plugin.py:329 msgid "" " However, '{0}' is the name of a loaded plugin, and you may be able to find " "its provided commands using 'list {0}'." msgstr "" -#: plugin.py:337 +#: plugin.py:340 msgid "" "takes no arguments\n" "\n" @@ -228,27 +228,26 @@ msgstr "" "\n" "Gibt die momentane Bot Version aus." -#: plugin.py:354 -msgid "The newest versions available online are %s." +#: plugin.py:366 +#, fuzzy +msgid "" +"The newest version available online is %(release_version)s, or " +"%(git_version)s in Git" msgstr "Die neuste online Version ist %s." -#: plugin.py:355 -msgid "%s (in %s)" -msgstr "%s (in %s)" - -#: plugin.py:359 +#: plugin.py:372 msgid "I couldn't fetch the newest version from the Limnoria repository." msgstr "" "Ich konnte mir die neuste Version nicht aus dem Limnoria Verzeichnis holen." -#: plugin.py:361 +#: plugin.py:374 #, fuzzy msgid "" "The current (running) version of this Limnoria is %s, running on Python %s. " "%s" msgstr "Die momentane (laufende) Version von Supybot ist %s. %s" -#: plugin.py:369 +#: plugin.py:382 msgid "" "takes no arguments\n" "\n" @@ -259,12 +258,12 @@ msgstr "" "\n" "Gibt eine URL zurück die dir sagt wo man Limnoria bekommt." -#: plugin.py:373 +#: plugin.py:386 #, fuzzy msgid "My source is at https://github.com/progval/Limnoria" msgstr "Mein Quellcode ist auf https://github.com/ProgVal/Limnoria" -#: plugin.py:378 +#: plugin.py:391 msgid "" "[<nick>]\n" "\n" @@ -283,15 +282,15 @@ msgstr "" "Befehls ausgegben. Falls <nick> angegeben wird, wird die AUsgabe des letzten " "Befehls von <nick> weitergeführt, anstatt der Person die den Befehl sendete." -#: plugin.py:395 +#: plugin.py:408 msgid "%s has no public mores." msgstr "%s hat keine öffentlichen Nachrichten mehr." -#: plugin.py:398 +#: plugin.py:411 msgid "Sorry, I can't find any mores for %s" msgstr "Sorry, Ich kann nicht mehr für %s finden" -#: plugin.py:403 +#: plugin.py:416 msgid "" "You haven't asked me a command; perhaps you want to see someone else's " "more. To do so, call this command with that person's nick." @@ -300,11 +299,11 @@ msgstr "" "anderen Person sehen. Um das zu ereichen, rufe diesen Befehl auf mit dem " "Nicknamen der Person auf." -#: plugin.py:433 +#: plugin.py:446 msgid "That's all, there is no more." msgstr "Das ist alles, mehr ist nicht da." -#: plugin.py:443 +#: plugin.py:456 msgid "" "[--{from,in,on,with,without,regexp} <value>] [--nolimit]\n" "\n" @@ -333,11 +332,7 @@ msgstr "" "wurden. Voreinstellung: Der Kanal in dem der Befehl gegeben wird, wird " "durchsucht." -#: plugin.py:540 -msgid "The regular expression timed out." -msgstr "" - -#: plugin.py:553 +#: plugin.py:589 msgid "" "I couldn't find a message matching that criteria in my history of %s " "messages." @@ -345,23 +340,23 @@ msgstr "" "I konnte keine Nachricht in meiner Geschichte von %s Nachrichten finden die " "auf die Kriterien passt." -#: plugin.py:572 +#: plugin.py:608 msgid "Hey, just give the command. No need for the tell." msgstr "Junge, gib mir einfach den Befehl." -#: plugin.py:577 +#: plugin.py:613 msgid "You just told me, why should I tell myself?" msgstr "Das hast du mir gerade gesagt, wieso sollte ich es mir selbst sagen?" -#: plugin.py:582 +#: plugin.py:618 msgid "I haven't seen %s, I'll let you do the telling." msgstr "Ich habe %s nicht gesehen, sag es ihm selbst." -#: plugin.py:587 +#: plugin.py:623 msgid "%s wants me to tell you: %s" msgstr "%s will dir folgendes sagen: %s" -#: plugin.py:593 +#: plugin.py:629 msgid "" "<nick> <text>\n" "\n" @@ -374,7 +369,7 @@ msgstr "" "Sagt <nick> den Inhalt von <text>. Benutze verschachtelte Befehle um nutzen " "daraus zu ziehen." -#: plugin.py:603 +#: plugin.py:639 #, fuzzy msgid "" "<nick> <text>\n" @@ -388,7 +383,7 @@ msgstr "" "Sagt <nick> den Inhalt von <text>. Benutze verschachtelte Befehle um nutzen " "daraus zu ziehen." -#: plugin.py:613 +#: plugin.py:649 msgid "" "takes no arguments\n" "\n" @@ -399,11 +394,11 @@ msgstr "" "\n" "Überprüft ob der Bot noch am Leben ist." -#: plugin.py:617 +#: plugin.py:653 msgid "pong" msgstr "Pong" -#: plugin.py:621 +#: plugin.py:657 msgid "" "[<channel>] <beginning> [--match-case]\n" "\n" @@ -413,15 +408,15 @@ msgid "" " <channel> defaults to the current channel." msgstr "" -#: plugin.py:627 +#: plugin.py:663 msgid "I'm not even in %s." msgstr "" -#: plugin.py:639 +#: plugin.py:675 msgid "No such nick." msgstr "" -#: plugin.py:645 +#: plugin.py:681 #, fuzzy msgid "" "takes no arguments\n" @@ -432,6 +427,9 @@ msgstr "" "\n" "Gibt die momentane Bot Version aus." +#~ msgid "%s (in %s)" +#~ msgstr "%s (in %s)" + #, fuzzy #~ msgid "1 more message" #~ msgstr "1 mehr Nachricht" diff --git a/plugins/Misc/locales/fi.po b/plugins/Misc/locales/fi.po index 76916eadb..7e1d7ca2a 100644 --- a/plugins/Misc/locales/fi.po +++ b/plugins/Misc/locales/fi.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: Misc plugin for Limnoria\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2014-12-20 14:51+0200\n" "Last-Translator: Mikaela Suomalainen <mikaela.suomalainen@outlook.com>\n" "Language-Team: \n" @@ -98,7 +98,7 @@ msgstr "" "sisäkkäisiä\n" " komentoja." -#: plugin.py:76 +#: plugin.py:79 msgid "" "Miscellaneous commands to access Supybot core. This is a core\n" " Supybot plugin that should not be removed!" @@ -106,7 +106,7 @@ msgstr "" "Sekalaisia komentoja Supybotin ytimeen pääsemiseksi. Tänä on ydin Supybot-" "plugini, jota ei pitäisi poistaa." -#: plugin.py:114 +#: plugin.py:117 msgid "" "You've given me %s invalid commands within the last %i seconds; I'm now " "ignoring you for %s." @@ -114,7 +114,7 @@ msgstr "" "Olet antanut minulle %s epäkelvollista komentoa minuutin sisällä; Minä jätän " "sinut nyt huomioitta ajaksi %s." -#: plugin.py:157 +#: plugin.py:160 msgid "" "The %q plugin is loaded, but there is no command named %q in it. Try \"list " "%s\" to see the commands in the %q plugin." @@ -122,15 +122,15 @@ msgstr "" "Lisäosa %q on ladattu, mutta siinä ei ole %q nimistä komentoa. Käytä " "komentoa \"list %s\" mähdäksesi kaikki komennot lisäosassa %q." -#: plugin.py:163 plugin.py:166 +#: plugin.py:166 plugin.py:169 msgid "command" msgstr "komento" -#: plugin.py:172 +#: plugin.py:175 msgid "private" msgstr "yksityinen" -#: plugin.py:188 +#: plugin.py:191 msgid "" "[--private] [--unloaded] [<plugin>]\n" "\n" @@ -148,19 +148,19 @@ msgstr "" " luettelee kaikki yksityiset lisäosat.\n" " " -#: plugin.py:209 +#: plugin.py:212 msgid "--private and --unloaded are incompatible options." msgstr "--private ja --unloaded ovat epäyhteensopivia asetuksia." -#: plugin.py:237 +#: plugin.py:240 msgid "There are no private plugins." msgstr "Yksityisiä lisäosia ei ole." -#: plugin.py:239 +#: plugin.py:242 msgid "There are no public plugins." msgstr "Julkisia lisäosia ei ole." -#: plugin.py:246 +#: plugin.py:249 msgid "" "That plugin exists, but has no commands. This probably means that it has " "some configuration variables that can be changed in order to modify its " @@ -172,7 +172,7 @@ msgstr "" "sen käyttäytymisen muokkaamiseksi. Käytä komentoa \"config list supybot." "plugins.%s\" nähdäksesi mitä asetusarvoja sillä on." -#: plugin.py:258 +#: plugin.py:261 msgid "" "<string>\n" "\n" @@ -187,11 +187,11 @@ msgstr "" " palauttaen listan komennoista, jotka sisältävät sen merkkiketjun.\n" " " -#: plugin.py:277 +#: plugin.py:280 msgid "No appropriate commands were found." msgstr "Sopivia komentoja ei löytynyt." -#: plugin.py:282 +#: plugin.py:285 msgid "" "[<plugin>] [<command>]\n" "\n" @@ -212,13 +212,13 @@ msgstr "" "ja komentojen luettelointiin.\n" " " -#: plugin.py:295 +#: plugin.py:298 msgid "" "Use the 'list' command to list all plugins, and 'list <plugin>' to list all " "commands in a plugin. To show the help of a command, use 'help <command>'. " msgstr "" -#: plugin.py:306 +#: plugin.py:309 msgid "" "That command exists in the %L plugins. Please specify exactly which plugin " "command you want help with." @@ -226,23 +226,23 @@ msgstr "" "Tuo komento on %L lisäosassa. Ole hyvä ja määritä minkä komennon kanssa " "haluat apua." -#: plugin.py:315 +#: plugin.py:318 msgid "There is no command %q." msgstr "Komentoa %q ei ole." -#: plugin.py:319 +#: plugin.py:322 msgid "" " However, '{0}' is the name of a loaded plugin, and you may be able to find " "its help using 'plugin help {0}' and its provided commands using 'list {0}'." msgstr "" -#: plugin.py:326 +#: plugin.py:329 msgid "" " However, '{0}' is the name of a loaded plugin, and you may be able to find " "its provided commands using 'list {0}'." msgstr "" -#: plugin.py:337 +#: plugin.py:340 msgid "" "takes no arguments\n" "\n" @@ -254,19 +254,18 @@ msgstr "" " Palauttaa nykyisen botin version.\n" " " -#: plugin.py:354 -msgid "The newest versions available online are %s." +#: plugin.py:366 +#, fuzzy +msgid "" +"The newest version available online is %(release_version)s, or " +"%(git_version)s in Git" msgstr "Uusimmat verkossa olevat versiot ovat %s." -#: plugin.py:355 -msgid "%s (in %s)" -msgstr "%s (%s:ssa)" - -#: plugin.py:359 +#: plugin.py:372 msgid "I couldn't fetch the newest version from the Limnoria repository." msgstr "Minä en voinut tarkistaa uusinta versiota Limnorian pakettivarastosta." -#: plugin.py:361 +#: plugin.py:374 #, fuzzy msgid "" "The current (running) version of this Limnoria is %s, running on Python %s. " @@ -275,7 +274,7 @@ msgstr "" "Tällä hetkellä (käynnissä) oleva versio tästä Supybotista on %s, Python, " "jota suoritetaan Pythonin versiolla %s. %s" -#: plugin.py:369 +#: plugin.py:382 msgid "" "takes no arguments\n" "\n" @@ -287,12 +286,12 @@ msgstr "" " Palauttaa URL:n, joka kertoo mistä Limnorian saa.\n" " " -#: plugin.py:373 +#: plugin.py:386 #, fuzzy msgid "My source is at https://github.com/progval/Limnoria" msgstr "Minun lähdekoodini on osoitteessa: https://github.com/ProgVal/Limnoria" -#: plugin.py:378 +#: plugin.py:391 msgid "" "[<nick>]\n" "\n" @@ -312,15 +311,15 @@ msgstr "" " <nimimerkiltä> komennon antaneen henkilön sijasta.\n" " " -#: plugin.py:395 +#: plugin.py:408 msgid "%s has no public mores." msgstr "%s:llä ei ole julkista jatkoa." -#: plugin.py:398 +#: plugin.py:411 msgid "Sorry, I can't find any mores for %s" msgstr "Anteeksi, en voi löytää jatkoa %s:lle." -#: plugin.py:403 +#: plugin.py:416 msgid "" "You haven't asked me a command; perhaps you want to see someone else's " "more. To do so, call this command with that person's nick." @@ -328,11 +327,11 @@ msgstr "" "Et ole pyytänyt minulta komentoa; ehkäpä tahdoit nähdä jonkun muun jatkon. " "Tehdäksesi niin, käytä tätä komentoa tuon henkilön nimimerkillä." -#: plugin.py:433 +#: plugin.py:446 msgid "That's all, there is no more." msgstr "Siinä kaikki, enempää ei ole." -#: plugin.py:443 +#: plugin.py:456 msgid "" "[--{from,in,on,with,without,regexp} <value>] [--nolimit]\n" "\n" @@ -365,11 +364,7 @@ msgstr "" " komento on annettu.\n" " " -#: plugin.py:540 -msgid "The regular expression timed out." -msgstr "Säännöllinen lauseke aiheutti aikakatkaisun." - -#: plugin.py:553 +#: plugin.py:589 msgid "" "I couldn't find a message matching that criteria in my history of %s " "messages." @@ -377,23 +372,23 @@ msgstr "" "En voinut löytää viestiä, joka täsmää noihin kriteereihin %s:än viestin " "historiassa." -#: plugin.py:572 +#: plugin.py:608 msgid "Hey, just give the command. No need for the tell." msgstr "Keikari, anna vain komento. Ei tarvitse kertoa." -#: plugin.py:577 +#: plugin.py:613 msgid "You just told me, why should I tell myself?" msgstr "Sinä kerroit juuri minulle, miksi minun pitäisi kertoa itselleni?" -#: plugin.py:582 +#: plugin.py:618 msgid "I haven't seen %s, I'll let you do the telling." msgstr "En ole nähnyt %s:ää, annan sinun hoitaa kertomisen." -#: plugin.py:587 +#: plugin.py:623 msgid "%s wants me to tell you: %s" msgstr "%s haluaa minun kertovan sinulle: %s" -#: plugin.py:593 +#: plugin.py:629 msgid "" "<nick> <text>\n" "\n" @@ -408,7 +403,7 @@ msgstr "" " eduksesi tässä.\n" " " -#: plugin.py:603 +#: plugin.py:639 msgid "" "<nick> <text>\n" "\n" @@ -423,7 +418,7 @@ msgstr "" " sisäkkäisiä komentoja hyväksesi tässä.\n" " " -#: plugin.py:613 +#: plugin.py:649 msgid "" "takes no arguments\n" "\n" @@ -435,11 +430,11 @@ msgstr "" " Tarkistaa onko botti elossa.\n" " " -#: plugin.py:617 +#: plugin.py:653 msgid "pong" msgstr "pong" -#: plugin.py:621 +#: plugin.py:657 msgid "" "[<channel>] <beginning> [--match-case]\n" "\n" @@ -454,15 +449,15 @@ msgstr "" " annetulla <alulla>.\n" " <Kanava> on oletuksena nykyinen kanava." -#: plugin.py:627 +#: plugin.py:663 msgid "I'm not even in %s." msgstr "En edes ole kanavalla %s." -#: plugin.py:639 +#: plugin.py:675 msgid "No such nick." msgstr "Tuollaista nimimerkkiä ei ole." -#: plugin.py:645 +#: plugin.py:681 #, fuzzy msgid "" "takes no arguments\n" @@ -474,6 +469,12 @@ msgstr "" " Palauttaa nykyisen botin version.\n" " " +#~ msgid "%s (in %s)" +#~ msgstr "%s (%s:ssa)" + +#~ msgid "The regular expression timed out." +#~ msgstr "Säännöllinen lauseke aiheutti aikakatkaisun." + #~ msgid "1 more message" #~ msgstr "1 viesti jäljellä" diff --git a/plugins/Misc/locales/fr.po b/plugins/Misc/locales/fr.po index a2c346b85..a4a046257 100644 --- a/plugins/Misc/locales/fr.po +++ b/plugins/Misc/locales/fr.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: Limnoria\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: Limnoria <progval@gmail.com>\n" @@ -83,13 +83,13 @@ msgstr "" "Détermine si le nick est inclu dans la sortie de 'last' lorsqu'il est dans " "une commande imbriquée." -#: plugin.py:76 +#: plugin.py:79 msgid "" "Miscellaneous commands to access Supybot core. This is a core\n" " Supybot plugin that should not be removed!" msgstr "" -#: plugin.py:114 +#: plugin.py:117 msgid "" "You've given me %s invalid commands within the last %i seconds; I'm now " "ignoring you for %s." @@ -97,7 +97,7 @@ msgstr "" "Vous m'avez donné %s commandes invalides durant les %i dernières secondes, " "je vous ignore maintenant pendant %s." -#: plugin.py:157 +#: plugin.py:160 msgid "" "The %q plugin is loaded, but there is no command named %q in it. Try \"list " "%s\" to see the commands in the %q plugin." @@ -105,15 +105,15 @@ msgstr "" "Le plugin %q est chargé, mais il n'a pas de commande appelée %q. Essayez " "\"list %s\" pour voir les commandes dans le plugin %q." -#: plugin.py:163 plugin.py:166 +#: plugin.py:166 plugin.py:169 msgid "command" msgstr "commande" -#: plugin.py:172 +#: plugin.py:175 msgid "private" msgstr "" -#: plugin.py:188 +#: plugin.py:191 msgid "" "[--private] [--unloaded] [<plugin>]\n" "\n" @@ -130,19 +130,19 @@ msgstr "" "plugins privés. Si --unloaded est donné, il liste les plugins disponibles " "qui ne sont pas chargés." -#: plugin.py:209 +#: plugin.py:212 msgid "--private and --unloaded are incompatible options." msgstr "--private et --unloaded ne sont pas des options compatibles." -#: plugin.py:237 +#: plugin.py:240 msgid "There are no private plugins." msgstr "Il n'y a pas de plugin privé." -#: plugin.py:239 +#: plugin.py:242 msgid "There are no public plugins." msgstr "Il n'y a pas de plugin privé." -#: plugin.py:246 +#: plugin.py:249 msgid "" "That plugin exists, but has no commands. This probably means that it has " "some configuration variables that can be changed in order to modify its " @@ -154,7 +154,7 @@ msgstr "" "comportement. Essayez \"config list supybot.plugins.%s\" pour voir quelles " "variables de configuration il a." -#: plugin.py:258 +#: plugin.py:261 msgid "" "<string>\n" "\n" @@ -167,11 +167,11 @@ msgstr "" "Recherche la <chaîne> dans les commandes actuellement fournies par le bot et " "retourne une list des commandes contenant cette chaîne." -#: plugin.py:277 +#: plugin.py:280 msgid "No appropriate commands were found." msgstr "Aucune commande appropriée n'a été trouvée." -#: plugin.py:282 +#: plugin.py:285 msgid "" "[<plugin>] [<command>]\n" "\n" @@ -190,13 +190,13 @@ msgstr "" "plugin. Il se peut que vous vouliez utiliser la commande « list » pour " "lister tous les plugins et commandes disponibles." -#: plugin.py:295 +#: plugin.py:298 msgid "" "Use the 'list' command to list all plugins, and 'list <plugin>' to list all " "commands in a plugin. To show the help of a command, use 'help <command>'. " msgstr "" -#: plugin.py:306 +#: plugin.py:309 msgid "" "That command exists in the %L plugins. Please specify exactly which plugin " "command you want help with." @@ -204,23 +204,23 @@ msgstr "" "Cette commande existe dans les plugins %L. Veuillez spécifier dans quel " "plugin se trouve la commande pour laquelle vous cherchez de l'aide." -#: plugin.py:315 +#: plugin.py:318 msgid "There is no command %q." msgstr "Il n'y a pas de commande %q." -#: plugin.py:319 +#: plugin.py:322 msgid "" " However, '{0}' is the name of a loaded plugin, and you may be able to find " "its help using 'plugin help {0}' and its provided commands using 'list {0}'." msgstr "" -#: plugin.py:326 +#: plugin.py:329 msgid "" " However, '{0}' is the name of a loaded plugin, and you may be able to find " "its provided commands using 'list {0}'." msgstr "" -#: plugin.py:337 +#: plugin.py:340 msgid "" "takes no arguments\n" "\n" @@ -231,19 +231,18 @@ msgstr "" "\n" "Retourne la version actuelle du bot" -#: plugin.py:354 -msgid "The newest versions available online are %s." +#: plugin.py:366 +#, fuzzy +msgid "" +"The newest version available online is %(release_version)s, or " +"%(git_version)s in Git" msgstr "Les dernières versions disponibles en ligne sont %s." -#: plugin.py:355 -msgid "%s (in %s)" -msgstr "%s (dans %s)" - -#: plugin.py:359 +#: plugin.py:372 msgid "I couldn't fetch the newest version from the Limnoria repository." msgstr "Je ne peux récupérer la dernière version sur le dépôt de Limnoria." -#: plugin.py:361 +#: plugin.py:374 #, fuzzy msgid "" "The current (running) version of this Limnoria is %s, running on Python %s. " @@ -251,7 +250,7 @@ msgid "" msgstr "" "La version actuelle de ce Supybot est %s, fonctionnant sur Python %s. %s" -#: plugin.py:369 +#: plugin.py:382 msgid "" "takes no arguments\n" "\n" @@ -262,12 +261,12 @@ msgstr "" "\n" "Retourne une URL disant où trouver Limnoria." -#: plugin.py:373 +#: plugin.py:386 #, fuzzy msgid "My source is at https://github.com/progval/Limnoria" msgstr "Ma source est disponible sur https://github.com/ProgVal/Limnoria" -#: plugin.py:378 +#: plugin.py:391 msgid "" "[<nick>]\n" "\n" @@ -286,15 +285,15 @@ msgstr "" "commande. Si le <nick> est donné, continue la dernière commande du <nick> " "plutôt que de la personne envoyant ce message." -#: plugin.py:395 +#: plugin.py:408 msgid "%s has no public mores." msgstr "%s n'a pas de 'more' public." -#: plugin.py:398 +#: plugin.py:411 msgid "Sorry, I can't find any mores for %s" msgstr "Désolé, je ne peux trouver de 'more' pour %s" -#: plugin.py:403 +#: plugin.py:416 msgid "" "You haven't asked me a command; perhaps you want to see someone else's " "more. To do so, call this command with that person's nick." @@ -303,11 +302,11 @@ msgstr "" "de quelqu'un d'autre. Pour cela, appelez cette commande en ajoutant le nick " "de cette personne." -#: plugin.py:433 +#: plugin.py:446 msgid "That's all, there is no more." msgstr "C'est tout, il n'y a plus de 'more'" -#: plugin.py:443 +#: plugin.py:456 msgid "" "[--{from,in,on,with,without,regexp} <value>] [--nolimit]\n" "\n" @@ -335,11 +334,7 @@ msgstr "" "qui peuvent être trouvés. Par défaut, recherche dans les logs du canal sur " "lequel est envoyée cette commande." -#: plugin.py:540 -msgid "The regular expression timed out." -msgstr "L'expression régulière a pris trop de temps à être évaluée." - -#: plugin.py:553 +#: plugin.py:589 msgid "" "I couldn't find a message matching that criteria in my history of %s " "messages." @@ -347,24 +342,24 @@ msgstr "" "Je ne peux trouver de message correspondant à ce critère dans mon historique " "de %s messages." -#: plugin.py:572 +#: plugin.py:608 msgid "Hey, just give the command. No need for the tell." msgstr "" "Oh, contentes-toi de me donner la commande. Pas besoin d'utiliser 'tell'." -#: plugin.py:577 +#: plugin.py:613 msgid "You just told me, why should I tell myself?" msgstr "Vous venez de me le dire, pourquoi devrais-je me le dire moi-même ?" -#: plugin.py:582 +#: plugin.py:618 msgid "I haven't seen %s, I'll let you do the telling." msgstr "Je n'ai pas vu %s, je vous laisse lui dire." -#: plugin.py:587 +#: plugin.py:623 msgid "%s wants me to tell you: %s" msgstr "%s veut que je vous dise : %s" -#: plugin.py:593 +#: plugin.py:629 msgid "" "<nick> <text>\n" "\n" @@ -376,7 +371,7 @@ msgstr "" "\n" "Dit le <texte> au <nick>. Utile si vous utilisez des commandes imbriquées." -#: plugin.py:603 +#: plugin.py:639 msgid "" "<nick> <text>\n" "\n" @@ -389,7 +384,7 @@ msgstr "" "Dit le <texte> à <nick>, dans une notice. Utile si vous utilisez des " "commandes imbriquées." -#: plugin.py:613 +#: plugin.py:649 msgid "" "takes no arguments\n" "\n" @@ -400,11 +395,11 @@ msgstr "" "\n" "Vérifie si le bot est encore en vie." -#: plugin.py:617 +#: plugin.py:653 msgid "pong" msgstr "pong" -#: plugin.py:621 +#: plugin.py:657 msgid "" "[<channel>] <beginning> [--match-case]\n" "\n" @@ -417,15 +412,15 @@ msgstr "" "Retourne le nick de quelqu'un dans le salon dont le nick commence par les " "<lettres> indiquées. <channel> correspond par défaut au salon actuel." -#: plugin.py:627 +#: plugin.py:663 msgid "I'm not even in %s." msgstr "Je ne suis pas dans %s." -#: plugin.py:639 +#: plugin.py:675 msgid "No such nick." msgstr "Ce nick n'existe pas." -#: plugin.py:645 +#: plugin.py:681 #, fuzzy msgid "" "takes no arguments\n" @@ -436,6 +431,12 @@ msgstr "" "\n" "Retourne la version actuelle du bot" +#~ msgid "%s (in %s)" +#~ msgstr "%s (dans %s)" + +#~ msgid "The regular expression timed out." +#~ msgstr "L'expression régulière a pris trop de temps à être évaluée." + #~ msgid "1 more message" #~ msgstr "1 autre message" diff --git a/plugins/Misc/locales/hu.po b/plugins/Misc/locales/hu.po index f757f671c..9802a6d48 100644 --- a/plugins/Misc/locales/hu.po +++ b/plugins/Misc/locales/hu.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: Limnoria Misc\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2012-04-27 15:15+0200\n" "Last-Translator: Mikaela Suomalainen <mikaela.suomalainen@outlook.com>\n" "Language-Team: \n" @@ -85,13 +85,13 @@ msgstr "" "Meghatározza, hogy a last kimenete tartalmazza-e a nevet, ha az egy " "beágyazott parancs része." -#: plugin.py:76 +#: plugin.py:79 msgid "" "Miscellaneous commands to access Supybot core. This is a core\n" " Supybot plugin that should not be removed!" msgstr "" -#: plugin.py:114 +#: plugin.py:117 #, fuzzy msgid "" "You've given me %s invalid commands within the last %i seconds; I'm now " @@ -99,7 +99,7 @@ msgid "" msgstr "" "%s érvénytelen parancsot adtál nekem az utolsó percben; most mellőzlek %s-ig." -#: plugin.py:157 +#: plugin.py:160 msgid "" "The %q plugin is loaded, but there is no command named %q in it. Try \"list " "%s\" to see the commands in the %q plugin." @@ -107,15 +107,15 @@ msgstr "" "A %q bővítmény be van töltve, de nincs benne parancs %q névvel. Próbáld meg " "a \"list %s\"-t, hogy lásd a parancsokat a %q bővítményben." -#: plugin.py:163 plugin.py:166 +#: plugin.py:166 plugin.py:169 msgid "command" msgstr "" -#: plugin.py:172 +#: plugin.py:175 msgid "private" msgstr "" -#: plugin.py:188 +#: plugin.py:191 #, fuzzy msgid "" "[--private] [--unloaded] [<plugin>]\n" @@ -132,19 +132,19 @@ msgstr "" "bővítmény, kiírja az elérhető publikus bővítményeket. Ha --private meg van " "adva, kiírja a privát bővítményeket." -#: plugin.py:209 +#: plugin.py:212 msgid "--private and --unloaded are incompatible options." msgstr "" -#: plugin.py:237 +#: plugin.py:240 msgid "There are no private plugins." msgstr "Nincsenek privát bővítmények." -#: plugin.py:239 +#: plugin.py:242 msgid "There are no public plugins." msgstr "Nincsenek publikus bővítmények." -#: plugin.py:246 +#: plugin.py:249 msgid "" "That plugin exists, but has no commands. This probably means that it has " "some configuration variables that can be changed in order to modify its " @@ -156,7 +156,7 @@ msgstr "" "módosítsd a viselkedését. Próbáld meg a \"config list supybot.plugins.%s\"-" "t, hogy lásd, milyen konfigurációs változói vannak." -#: plugin.py:258 +#: plugin.py:261 msgid "" "<string>\n" "\n" @@ -169,11 +169,11 @@ msgstr "" "<karakterlánc>-ra keres a parancsokban, amelyeket a bot kínál, és kiírja a " "parancsokat, amelyek tartalmazzák a karakterláncot." -#: plugin.py:277 +#: plugin.py:280 msgid "No appropriate commands were found." msgstr "Nem található megfelelő parancs." -#: plugin.py:282 +#: plugin.py:285 #, fuzzy msgid "" "[<plugin>] [<command>]\n" @@ -191,13 +191,13 @@ msgstr "" "Ez a parancs egy hasznos leírást ad arról, hogy mit csinál <parancs>. " "<bővítmény> csak akkor szükséges, ha a parancs egynél több bővítményben van." -#: plugin.py:295 +#: plugin.py:298 msgid "" "Use the 'list' command to list all plugins, and 'list <plugin>' to list all " "commands in a plugin. To show the help of a command, use 'help <command>'. " msgstr "" -#: plugin.py:306 +#: plugin.py:309 msgid "" "That command exists in the %L plugins. Please specify exactly which plugin " "command you want help with." @@ -205,23 +205,23 @@ msgstr "" "Ez a parancs a(z) %L bővítményekben létezik. Kérlek pontosan határozd meg, " "hogy melyik bővítmény parancsának akarod látni a segítségét." -#: plugin.py:315 +#: plugin.py:318 msgid "There is no command %q." msgstr "Nincs %q parancs." -#: plugin.py:319 +#: plugin.py:322 msgid "" " However, '{0}' is the name of a loaded plugin, and you may be able to find " "its help using 'plugin help {0}' and its provided commands using 'list {0}'." msgstr "" -#: plugin.py:326 +#: plugin.py:329 msgid "" " However, '{0}' is the name of a loaded plugin, and you may be able to find " "its provided commands using 'list {0}'." msgstr "" -#: plugin.py:337 +#: plugin.py:340 msgid "" "takes no arguments\n" "\n" @@ -232,26 +232,25 @@ msgstr "" "\n" "Kiírja a bot verzióját." -#: plugin.py:354 -msgid "The newest versions available online are %s." +#: plugin.py:366 +#, fuzzy +msgid "" +"The newest version available online is %(release_version)s, or " +"%(git_version)s in Git" msgstr "A legújabb elérhető verziók az interneten: %s." -#: plugin.py:355 -msgid "%s (in %s)" -msgstr "%s (%s-ban)" - -#: plugin.py:359 +#: plugin.py:372 msgid "I couldn't fetch the newest version from the Limnoria repository." msgstr "Nem tudtam lekérdezni a legújabb verziót a Limnoria gyűjteményből." -#: plugin.py:361 +#: plugin.py:374 #, fuzzy msgid "" "The current (running) version of this Limnoria is %s, running on Python %s. " "%s" msgstr "Az aktuális (futó) verziója ennek a Supybot-nak %s. %s" -#: plugin.py:369 +#: plugin.py:382 msgid "" "takes no arguments\n" "\n" @@ -261,12 +260,12 @@ msgstr "" "paraméter nélküli\n" "Kiír egy linket, ami megmondja, honnan lehet a Limnoria-t megszerezni." -#: plugin.py:373 +#: plugin.py:386 #, fuzzy msgid "My source is at https://github.com/progval/Limnoria" msgstr "A forrásom https://github.com/ProgVal/Limnoria -ban van." -#: plugin.py:378 +#: plugin.py:391 msgid "" "[<nick>]\n" "\n" @@ -284,15 +283,15 @@ msgstr "" "miatt, kiírja a következő részét az utolsó parancs eredményének. Ha <név> " "meg van adva, <név> utolsó parancsának a folytatását írja ki." -#: plugin.py:395 +#: plugin.py:408 msgid "%s has no public mores." msgstr "%s-nek nincsenek publikus folytatásai." -#: plugin.py:398 +#: plugin.py:411 msgid "Sorry, I can't find any mores for %s" msgstr "Sajnálom, nem találok folytatásokat %s-hoz." -#: plugin.py:403 +#: plugin.py:416 msgid "" "You haven't asked me a command; perhaps you want to see someone else's " "more. To do so, call this command with that person's nick." @@ -300,11 +299,11 @@ msgstr "" "Nem adtál nekem parancsot; talán valaki más folyatását szeretnéd látni. Ha " "ezt szeretnéd tenni, hívd meg ezt a parancsot az adott ember nevével." -#: plugin.py:433 +#: plugin.py:446 msgid "That's all, there is no more." msgstr "Ez minden, nincs több." -#: plugin.py:443 +#: plugin.py:456 msgid "" "[--{from,in,on,with,without,regexp} <value>] [--nolimit]\n" "\n" @@ -331,11 +330,7 @@ msgstr "" "kiírja az összes talált üzenetet. Alapértelmezésben abban a csatornában " "keres, ahol ez a parancs végre lett hajtva." -#: plugin.py:540 -msgid "The regular expression timed out." -msgstr "" - -#: plugin.py:553 +#: plugin.py:589 msgid "" "I couldn't find a message matching that criteria in my history of %s " "messages." @@ -343,23 +338,23 @@ msgstr "" "Nem találtam a kritériumra illeszkedő üzenetet a(z) %s üzenetes " "előzményeimben." -#: plugin.py:572 +#: plugin.py:608 msgid "Hey, just give the command. No need for the tell." msgstr "Haver, csak add meg a parancsot. Nem kell mondani." -#: plugin.py:577 +#: plugin.py:613 msgid "You just told me, why should I tell myself?" msgstr "Most mondtad el nekem, miért mondjam el magamnak?" -#: plugin.py:582 +#: plugin.py:618 msgid "I haven't seen %s, I'll let you do the telling." msgstr "Nem láttam %s-t, rád hagyom a mondást." -#: plugin.py:587 +#: plugin.py:623 msgid "%s wants me to tell you: %s" msgstr "%s szeretné, hogy megmondjam neked: %s" -#: plugin.py:593 +#: plugin.py:629 msgid "" "<nick> <text>\n" "\n" @@ -370,7 +365,7 @@ msgstr "" "<név> <szöveg>Megmondja <név>-nek szöveget. Itt az előnyödre használhatod a " "beágyazott parancsokat." -#: plugin.py:603 +#: plugin.py:639 #, fuzzy msgid "" "<nick> <text>\n" @@ -382,7 +377,7 @@ msgstr "" "<név> <szöveg>Megmondja <név>-nek szöveget. Itt az előnyödre használhatod a " "beágyazott parancsokat." -#: plugin.py:613 +#: plugin.py:649 msgid "" "takes no arguments\n" "\n" @@ -393,11 +388,11 @@ msgstr "" "\n" "Ellenőrzi, hogy a bot él-e." -#: plugin.py:617 +#: plugin.py:653 msgid "pong" msgstr "pong" -#: plugin.py:621 +#: plugin.py:657 msgid "" "[<channel>] <beginning> [--match-case]\n" "\n" @@ -407,15 +402,15 @@ msgid "" " <channel> defaults to the current channel." msgstr "" -#: plugin.py:627 +#: plugin.py:663 msgid "I'm not even in %s." msgstr "" -#: plugin.py:639 +#: plugin.py:675 msgid "No such nick." msgstr "" -#: plugin.py:645 +#: plugin.py:681 #, fuzzy msgid "" "takes no arguments\n" @@ -426,6 +421,9 @@ msgstr "" "\n" "Kiírja a bot verzióját." +#~ msgid "%s (in %s)" +#~ msgstr "%s (%s-ban)" + #, fuzzy #~ msgid "1 more message" #~ msgstr "eggyel több üzenet" diff --git a/plugins/Misc/locales/it.po b/plugins/Misc/locales/it.po index 3c7f6fc13..527016349 100644 --- a/plugins/Misc/locales/it.po +++ b/plugins/Misc/locales/it.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: Limnoria\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2012-03-15 21:01+0100\n" "Last-Translator: skizzhg <skizzhg@gmx.com>\n" "Language-Team: Italian <skizzhg@gmx.com>\n" @@ -85,13 +85,13 @@ msgstr "" "Determines se il nick verrà incluso o meno nell'output di \"last\" quando fa " "parte di un comando nidificato." -#: plugin.py:76 +#: plugin.py:79 msgid "" "Miscellaneous commands to access Supybot core. This is a core\n" " Supybot plugin that should not be removed!" msgstr "" -#: plugin.py:114 +#: plugin.py:117 #, fuzzy msgid "" "You've given me %s invalid commands within the last %i seconds; I'm now " @@ -99,23 +99,23 @@ msgid "" msgstr "" "Mi hai fornito %s comandi non validi entro l'ultimo minuto; ti ignoro per %s." -#: plugin.py:157 +#: plugin.py:160 msgid "" "The %q plugin is loaded, but there is no command named %q in it. Try \"list " "%s\" to see the commands in the %q plugin." msgstr "" -"Il plugin %q è caricato ma non ha nessun comando chiamato %q. Prova \"list %s" -"\" per vedere i comandi disponibili nel plugin %q." +"Il plugin %q è caricato ma non ha nessun comando chiamato %q. Prova \"list " +"%s\" per vedere i comandi disponibili nel plugin %q." -#: plugin.py:163 plugin.py:166 +#: plugin.py:166 plugin.py:169 msgid "command" msgstr "" -#: plugin.py:172 +#: plugin.py:175 msgid "private" msgstr "" -#: plugin.py:188 +#: plugin.py:191 msgid "" "[--private] [--unloaded] [<plugin>]\n" "\n" @@ -134,19 +134,19 @@ msgstr "" " privati, mentre con --unloaded quelli non caricati.\n" " " -#: plugin.py:209 +#: plugin.py:212 msgid "--private and --unloaded are incompatible options." msgstr "Le opzioni --private e --unloaded non possono essere usate insieme." -#: plugin.py:237 +#: plugin.py:240 msgid "There are no private plugins." msgstr "Non ci sono plugin privati." -#: plugin.py:239 +#: plugin.py:242 msgid "There are no public plugins." msgstr "Non ci sono plugin pubblici." -#: plugin.py:246 +#: plugin.py:249 msgid "" "That plugin exists, but has no commands. This probably means that it has " "some configuration variables that can be changed in order to modify its " @@ -157,7 +157,7 @@ msgstr "" "variabili di configurazione modificabili che cambiano il suo comportamento. " "Prova \"config list supybot.plugins.%s\" per vedere quali sono disponibili." -#: plugin.py:258 +#: plugin.py:261 msgid "" "<string>\n" "\n" @@ -171,11 +171,11 @@ msgstr "" " riportando un elenco di quelli che contengono la stringa.\n" " " -#: plugin.py:277 +#: plugin.py:280 msgid "No appropriate commands were found." msgstr "Non è stato trovato alcun comando appropriato." -#: plugin.py:282 +#: plugin.py:285 #, fuzzy msgid "" "[<plugin>] [<command>]\n" @@ -194,35 +194,35 @@ msgstr "" " necessario solo se il comando è presente in più di un plugin.\n" " " -#: plugin.py:295 +#: plugin.py:298 msgid "" "Use the 'list' command to list all plugins, and 'list <plugin>' to list all " "commands in a plugin. To show the help of a command, use 'help <command>'. " msgstr "" -#: plugin.py:306 +#: plugin.py:309 msgid "" "That command exists in the %L plugins. Please specify exactly which plugin " "command you want help with." msgstr "Questo comando esiste nei plugin %L. Specifica per quale vuoi aiuto." -#: plugin.py:315 +#: plugin.py:318 msgid "There is no command %q." msgstr "Non c'è nessun comando %q." -#: plugin.py:319 +#: plugin.py:322 msgid "" " However, '{0}' is the name of a loaded plugin, and you may be able to find " "its help using 'plugin help {0}' and its provided commands using 'list {0}'." msgstr "" -#: plugin.py:326 +#: plugin.py:329 msgid "" " However, '{0}' is the name of a loaded plugin, and you may be able to find " "its provided commands using 'list {0}'." msgstr "" -#: plugin.py:337 +#: plugin.py:340 msgid "" "takes no arguments\n" "\n" @@ -234,27 +234,26 @@ msgstr "" " Riporta la versione attuale del bot.\n" " " -#: plugin.py:354 -msgid "The newest versions available online are %s." +#: plugin.py:366 +#, fuzzy +msgid "" +"The newest version available online is %(release_version)s, or " +"%(git_version)s in Git" msgstr "Le versioni online più recenti sono %s." -#: plugin.py:355 -msgid "%s (in %s)" -msgstr "%s (in %s)" - -#: plugin.py:359 +#: plugin.py:372 msgid "I couldn't fetch the newest version from the Limnoria repository." msgstr "" "Non riesco a recuperare la versione più recente dal repository di Limnoria." -#: plugin.py:361 +#: plugin.py:374 #, fuzzy msgid "" "The current (running) version of this Limnoria is %s, running on Python %s. " "%s" msgstr "La versione di questo Supybot è %s. %s" -#: plugin.py:369 +#: plugin.py:382 msgid "" "takes no arguments\n" "\n" @@ -266,14 +265,14 @@ msgstr "" " Riporta un URL che dice dove ottenere Limnoria.\n" " " -#: plugin.py:373 +#: plugin.py:386 #, fuzzy msgid "My source is at https://github.com/progval/Limnoria" msgstr "" "I miei sorgenti sono disponibili all'indirizzo https://github.com/ProgVal/" "Limnoria" -#: plugin.py:378 +#: plugin.py:391 msgid "" "[<nick>]\n" "\n" @@ -296,15 +295,15 @@ msgstr "" " dell'utente che usa questo comando.\n" " " -#: plugin.py:395 +#: plugin.py:408 msgid "%s has no public mores." msgstr "%s non ha \"more\" pubblici." -#: plugin.py:398 +#: plugin.py:411 msgid "Sorry, I can't find any mores for %s" msgstr "Spiacente, non trovo alcun \"more\" per %s" -#: plugin.py:403 +#: plugin.py:416 msgid "" "You haven't asked me a command; perhaps you want to see someone else's " "more. To do so, call this command with that person's nick." @@ -312,11 +311,11 @@ msgstr "" "Non mi hai richiesto un comando, forse vuoi vedere quelli di qualcun altro. " "Per farlo usa questo comando con il nick di quell'utente." -#: plugin.py:433 +#: plugin.py:446 msgid "That's all, there is no more." msgstr "È tutto, non c'è nessun \"more\"." -#: plugin.py:443 +#: plugin.py:456 msgid "" "[--{from,in,on,with,without,regexp} <value>] [--nolimit]\n" "\n" @@ -350,11 +349,7 @@ msgstr "" "stato dato il comando.\n" " " -#: plugin.py:540 -msgid "The regular expression timed out." -msgstr "L'espressione regolare è scaduta." - -#: plugin.py:553 +#: plugin.py:589 msgid "" "I couldn't find a message matching that criteria in my history of %s " "messages." @@ -362,23 +357,23 @@ msgstr "" "Non trovo un messaggio corrispondente a questo criterio nella cronologia di " "%s messaggi." -#: plugin.py:572 +#: plugin.py:608 msgid "Hey, just give the command. No need for the tell." msgstr "Dammi il comando, non c'è bisogno di usare \"tell\"." -#: plugin.py:577 +#: plugin.py:613 msgid "You just told me, why should I tell myself?" msgstr "Me l'hai appena detto, perché dovrei ripetermelo?" -#: plugin.py:582 +#: plugin.py:618 msgid "I haven't seen %s, I'll let you do the telling." msgstr "Non ho mai visto %s, lascio a te l'invio del messaggio." -#: plugin.py:587 +#: plugin.py:623 msgid "%s wants me to tell you: %s" msgstr "%s vuole che ti dica: %s" -#: plugin.py:593 +#: plugin.py:629 msgid "" "<nick> <text>\n" "\n" @@ -392,7 +387,7 @@ msgstr "" "vantaggio.\n" " " -#: plugin.py:603 +#: plugin.py:639 #, fuzzy msgid "" "<nick> <text>\n" @@ -407,7 +402,7 @@ msgstr "" "vantaggio.\n" " " -#: plugin.py:613 +#: plugin.py:649 msgid "" "takes no arguments\n" "\n" @@ -419,11 +414,11 @@ msgstr "" " Controlla che il bot sia ancora vivo.\n" " " -#: plugin.py:617 +#: plugin.py:653 msgid "pong" msgstr "pong" -#: plugin.py:621 +#: plugin.py:657 msgid "" "[<channel>] <beginning> [--match-case]\n" "\n" @@ -439,15 +434,15 @@ msgstr "" " specificato da <inizio>.\n" " <canale> è quello corrente." -#: plugin.py:627 +#: plugin.py:663 msgid "I'm not even in %s." msgstr "Non sono in %s." -#: plugin.py:639 +#: plugin.py:675 msgid "No such nick." msgstr "Nessun nick trovato." -#: plugin.py:645 +#: plugin.py:681 #, fuzzy msgid "" "takes no arguments\n" @@ -459,6 +454,12 @@ msgstr "" " Riporta la versione attuale del bot.\n" " " +#~ msgid "%s (in %s)" +#~ msgstr "%s (in %s)" + +#~ msgid "The regular expression timed out." +#~ msgstr "L'espressione regolare è scaduta." + #, fuzzy #~ msgid "1 more message" #~ msgstr "altro messaggio" diff --git a/plugins/Misc/messages.pot b/plugins/Misc/messages.pot index aca67d4c4..b170c6235 100644 --- a/plugins/Misc/messages.pot +++ b/plugins/Misc/messages.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -65,30 +65,30 @@ msgid "" " command" msgstr "" -#: plugin.py:76 +#: plugin.py:79 #, docstring msgid "" "Miscellaneous commands to access Supybot core. This is a core\n" " Supybot plugin that should not be removed!" msgstr "" -#: plugin.py:114 +#: plugin.py:117 msgid "You've given me %s invalid commands within the last %i seconds; I'm now ignoring you for %s." msgstr "" -#: plugin.py:157 +#: plugin.py:160 msgid "The %q plugin is loaded, but there is no command named %q in it. Try \"list %s\" to see the commands in the %q plugin." msgstr "" -#: plugin.py:163 plugin.py:166 +#: plugin.py:166 plugin.py:169 msgid "command" msgstr "" -#: plugin.py:172 +#: plugin.py:175 msgid "private" msgstr "" -#: plugin.py:188 +#: plugin.py:191 #, docstring msgid "" "[--private] [--unloaded] [<plugin>]\n" @@ -100,23 +100,23 @@ msgid "" " " msgstr "" -#: plugin.py:209 +#: plugin.py:212 msgid "--private and --unloaded are incompatible options." msgstr "" -#: plugin.py:237 +#: plugin.py:240 msgid "There are no private plugins." msgstr "" -#: plugin.py:239 +#: plugin.py:242 msgid "There are no public plugins." msgstr "" -#: plugin.py:246 +#: plugin.py:249 msgid "That plugin exists, but has no commands. This probably means that it has some configuration variables that can be changed in order to modify its behavior. Try \"config list supybot.plugins.%s\" to see what configuration variables it has." msgstr "" -#: plugin.py:258 +#: plugin.py:261 #, docstring msgid "" "<string>\n" @@ -126,11 +126,11 @@ msgid "" " " msgstr "" -#: plugin.py:277 +#: plugin.py:280 msgid "No appropriate commands were found." msgstr "" -#: plugin.py:282 +#: plugin.py:285 #, docstring msgid "" "[<plugin>] [<command>]\n" @@ -143,27 +143,27 @@ msgid "" " " msgstr "" -#: plugin.py:295 +#: plugin.py:298 msgid "Use the 'list' command to list all plugins, and 'list <plugin>' to list all commands in a plugin. To show the help of a command, use 'help <command>'. " msgstr "" -#: plugin.py:306 +#: plugin.py:309 msgid "That command exists in the %L plugins. Please specify exactly which plugin command you want help with." msgstr "" -#: plugin.py:315 +#: plugin.py:318 msgid "There is no command %q." msgstr "" -#: plugin.py:319 +#: plugin.py:322 msgid " However, '{0}' is the name of a loaded plugin, and you may be able to find its help using 'plugin help {0}' and its provided commands using 'list {0}'." msgstr "" -#: plugin.py:326 +#: plugin.py:329 msgid " However, '{0}' is the name of a loaded plugin, and you may be able to find its provided commands using 'list {0}'." msgstr "" -#: plugin.py:337 +#: plugin.py:340 #, docstring msgid "" "takes no arguments\n" @@ -172,23 +172,19 @@ msgid "" " " msgstr "" -#: plugin.py:354 -msgid "The newest versions available online are %s." +#: plugin.py:366 +msgid "The newest version available online is %(release_version)s, or %(git_version)s in Git" msgstr "" -#: plugin.py:355 -msgid "%s (in %s)" -msgstr "" - -#: plugin.py:359 +#: plugin.py:372 msgid "I couldn't fetch the newest version from the Limnoria repository." msgstr "" -#: plugin.py:361 +#: plugin.py:374 msgid "The current (running) version of this Limnoria is %s, running on Python %s. %s" msgstr "" -#: plugin.py:369 +#: plugin.py:382 #, docstring msgid "" "takes no arguments\n" @@ -197,11 +193,11 @@ msgid "" " " msgstr "" -#: plugin.py:373 +#: plugin.py:386 msgid "My source is at https://github.com/progval/Limnoria" msgstr "" -#: plugin.py:378 +#: plugin.py:391 #, docstring msgid "" "[<nick>]\n" @@ -213,23 +209,23 @@ msgid "" " " msgstr "" -#: plugin.py:395 +#: plugin.py:408 msgid "%s has no public mores." msgstr "" -#: plugin.py:398 +#: plugin.py:411 msgid "Sorry, I can't find any mores for %s" msgstr "" -#: plugin.py:403 +#: plugin.py:416 msgid "You haven't asked me a command; perhaps you want to see someone else's more. To do so, call this command with that person's nick." msgstr "" -#: plugin.py:433 +#: plugin.py:446 msgid "That's all, there is no more." msgstr "" -#: plugin.py:443 +#: plugin.py:456 #, docstring msgid "" "[--{from,in,on,with,without,regexp} <value>] [--nolimit]\n" @@ -244,31 +240,27 @@ msgid "" " " msgstr "" -#: plugin.py:540 -msgid "The regular expression timed out." -msgstr "" - -#: plugin.py:553 +#: plugin.py:589 msgid "I couldn't find a message matching that criteria in my history of %s messages." msgstr "" -#: plugin.py:572 +#: plugin.py:608 msgid "Hey, just give the command. No need for the tell." msgstr "" -#: plugin.py:577 +#: plugin.py:613 msgid "You just told me, why should I tell myself?" msgstr "" -#: plugin.py:582 +#: plugin.py:618 msgid "I haven't seen %s, I'll let you do the telling." msgstr "" -#: plugin.py:587 +#: plugin.py:623 msgid "%s wants me to tell you: %s" msgstr "" -#: plugin.py:593 +#: plugin.py:629 #, docstring msgid "" "<nick> <text>\n" @@ -278,7 +270,7 @@ msgid "" " " msgstr "" -#: plugin.py:603 +#: plugin.py:639 #, docstring msgid "" "<nick> <text>\n" @@ -288,7 +280,7 @@ msgid "" " " msgstr "" -#: plugin.py:613 +#: plugin.py:649 #, docstring msgid "" "takes no arguments\n" @@ -297,11 +289,11 @@ msgid "" " " msgstr "" -#: plugin.py:617 +#: plugin.py:653 msgid "pong" msgstr "" -#: plugin.py:621 +#: plugin.py:657 #, docstring msgid "" "[<channel>] <beginning> [--match-case]\n" @@ -311,15 +303,15 @@ msgid "" " <channel> defaults to the current channel." msgstr "" -#: plugin.py:627 +#: plugin.py:663 msgid "I'm not even in %s." msgstr "" -#: plugin.py:639 +#: plugin.py:675 msgid "No such nick." msgstr "" -#: plugin.py:645 +#: plugin.py:681 #, docstring msgid "" "takes no arguments\n" diff --git a/plugins/MoobotFactoids/locales/fi.po b/plugins/MoobotFactoids/locales/fi.po index 9fd9c6b31..e529c121f 100644 --- a/plugins/MoobotFactoids/locales/fi.po +++ b/plugins/MoobotFactoids/locales/fi.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: MoobotFactoids plugin for Limnoria\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2014-12-20 13:02+0200\n" "Last-Translator: Mikaela Suomalainen <mikaela.suomalainen@outlook.com>\n" "Language-Team: \n" @@ -47,41 +47,53 @@ msgid "" "says\n" " ``something is something``.\n" "\n" -" If you want factoid to be in different format say (for example):\n" +" If you want the factoid to be in different format say (for example):\n" " ``@Hi is <reply> Hello`` And when you call ``@hi`` the bot says ``Hello." "``\n" "\n" " If you want the bot to use /mes with Factoids, that is possible too.\n" " ``@test is <action> tests.`` and everytime when someone calls for\n" " ``test`` the bot answers ``* bot tests.``\n" +"\n" +" If you want the factoid to have random answers say (for example):\n" +" ``@fruit is <reply> (orange|apple|banana)``. So when ``@fruit`` is " +"called\n" +" the bot will reply with one of the listed fruits (random): ``orange``.\n" +" \n" +" If you want to replace the value of the factoid, for example:\n" +" ``@no Hi is <reply> Hey`` when you call ``@hi`` the bot says ``Hey``.\n" +"\n" +" If you want to append to the current value of a factoid say:\n" +" ``@Hi is also Hello``, so that when you call ``@hi`` the\n" +" bot says ``Hey, or Hello.`` \n" " " msgstr "" -#: plugin.py:358 +#: plugin.py:369 msgid "%s is %s" msgstr "%s on %s" -#: plugin.py:377 +#: plugin.py:388 msgid "Factoid %q is locked." msgstr "Factoidi %q on lukittu." -#: plugin.py:384 +#: plugin.py:395 msgid "Factoid %q not found." msgstr "Factoidia %q ei löytynyt." -#: plugin.py:394 +#: plugin.py:405 msgid "Missing an 'is' or '_is_'." msgstr "Puuttuva 'is' tai '_is_'." -#: plugin.py:410 +#: plugin.py:421 msgid "Factoid %q already exists." msgstr "Factoidi %q on jo olemassa." -#: plugin.py:444 +#: plugin.py:455 msgid "%s, or %s" msgstr "%s, tai %s" -#: plugin.py:465 +#: plugin.py:476 msgid "" "[<channel>] <factoid key>\n" "\n" @@ -101,7 +113,7 @@ msgstr "" " kanavalla itsellään.\n" " " -#: plugin.py:478 +#: plugin.py:489 msgid "" "[<channel>] <factoid key>\n" "\n" @@ -118,39 +130,39 @@ msgstr "" " itsellään.\n" " " -#: plugin.py:489 plugin.py:529 +#: plugin.py:500 plugin.py:540 msgid "No such factoid: %q" msgstr "Ei sellaista factoidia: %q" -#: plugin.py:498 +#: plugin.py:509 msgid "Created by %s on %s." msgstr "luonut %s kello %s." -#: plugin.py:504 +#: plugin.py:515 msgid " Last modified by %s on %s." msgstr "Viimeeksi muokattu %s kello %s." -#: plugin.py:512 +#: plugin.py:523 msgid " Last requested by %s on %s, requested %n." msgstr "Viimeeksi pyytänyt %s kello %s, pyytänyt %n." -#: plugin.py:519 +#: plugin.py:530 msgid " Locked by %s on %s." msgstr "%s:än lukitsema %s:llä." -#: plugin.py:534 +#: plugin.py:545 msgid "Factoid %q is already locked." msgstr "Factoidi %q on jo lukittu." -#: plugin.py:537 +#: plugin.py:548 msgid "Factoid %q is not locked." msgstr "Factoidi %q is not locked." -#: plugin.py:547 +#: plugin.py:558 msgid "Cannot %s someone else's factoid unless you are an admin." msgstr "Et voi %s jonkun muun factoidia paitsi, jos olet admin." -#: plugin.py:559 +#: plugin.py:570 msgid "" "[<channel>] <factoid key>\n" "\n" @@ -169,7 +181,7 @@ msgstr "" " vaadittu vain jos viestiä ei lähetetä kanavalla itsellään.\n" " " -#: plugin.py:570 +#: plugin.py:581 msgid "" "[<channel>] <factoid key>\n" "\n" @@ -185,7 +197,7 @@ msgstr "" " vain jos viestiä ei lähetetä kanavalla itsellään.\n" " " -#: plugin.py:581 +#: plugin.py:592 msgid "" "[<channel>] {popular|authored|recent}\n" "\n" @@ -211,51 +223,51 @@ msgstr "" " itsellään.\n" " " -#: plugin.py:603 +#: plugin.py:614 msgid "author" msgstr "kirjoittaja" -#: plugin.py:605 +#: plugin.py:616 msgid "authors" msgstr "kirjoittajat" -#: plugin.py:606 +#: plugin.py:617 msgid "Most prolific %s: %L" msgstr "Tuottoisimmat %s: %L" -#: plugin.py:608 plugin.py:620 +#: plugin.py:619 plugin.py:631 msgid "There are no factoids in my database." msgstr "Tietokannassani ei ole factoideja." -#: plugin.py:615 +#: plugin.py:626 msgid "latest factoid" msgstr "viimeisin factoidi" -#: plugin.py:617 +#: plugin.py:628 msgid "latest factoids" msgstr "viimeisimmät factoidit" -#: plugin.py:618 +#: plugin.py:629 msgid "%i %s: %L" msgstr "%i %s: %L" -#: plugin.py:627 +#: plugin.py:638 msgid "requested factoid" msgstr "pyydetty factoidi" -#: plugin.py:629 +#: plugin.py:640 msgid "requested factoids" msgstr "pyydetyt factoidit" -#: plugin.py:630 +#: plugin.py:641 msgid "Top %i %s: %L" msgstr "Huippu %i %s: %L" -#: plugin.py:632 +#: plugin.py:643 msgid "No factoids have been requested from my database." msgstr "Factoideja ei ole pyydetty tietokannastani." -#: plugin.py:636 +#: plugin.py:647 msgid "" "[<channel>] <author name>\n" "\n" @@ -278,15 +290,15 @@ msgstr "" " viestiä ei lähetetä kanavalla itsellään.\n" " " -#: plugin.py:649 +#: plugin.py:660 msgid "No factoids by %q found." msgstr "%q:n kirjoittamia factoideja ei löytynyt." -#: plugin.py:652 +#: plugin.py:663 msgid "Author search for %q (%i found): %L" msgstr "Kirjoittaja haku %q:lle (%i löytynyt): %L" -#: plugin.py:659 +#: plugin.py:670 msgid "" "[<channel>] <text>\n" "\n" @@ -304,15 +316,15 @@ msgstr "" " itsellään.\n" " " -#: plugin.py:667 +#: plugin.py:678 msgid "No keys matching %q found." msgstr "Avaimia, jotka täsmäävät %q:un ei löytynyt." -#: plugin.py:675 +#: plugin.py:686 msgid "Key search for %q (%i found): %L" msgstr "Avain haku %q:lle (%i löytynyt): %L" -#: plugin.py:682 +#: plugin.py:693 msgid "" "[<channel>] <text>\n" "\n" @@ -330,15 +342,15 @@ msgstr "" " kanavalla itsellään.\n" " " -#: plugin.py:690 +#: plugin.py:701 msgid "No values matching %q found." msgstr "%q:un täsmääviä avaimia ei löytynyt." -#: plugin.py:693 +#: plugin.py:704 msgid "Value search for %q (%i found): %L" msgstr "Arvo haku %q:lle (%i löytynyt): %L" -#: plugin.py:700 +#: plugin.py:711 msgid "" "[<channel>] <factoid key>\n" "\n" @@ -354,7 +366,7 @@ msgstr "" " viestiä ei lähetetä kanavalla itsellään.\n" " " -#: plugin.py:713 +#: plugin.py:724 msgid "" "[<channel>]\n" "\n" @@ -371,7 +383,7 @@ msgstr "" " itsellään.\n" " " -#: plugin.py:721 +#: plugin.py:732 msgid "No factoids in the database." msgstr "Tietokannassa ei ole factoideja." diff --git a/plugins/MoobotFactoids/locales/fr.po b/plugins/MoobotFactoids/locales/fr.po index ba636e736..f606f6fd8 100644 --- a/plugins/MoobotFactoids/locales/fr.po +++ b/plugins/MoobotFactoids/locales/fr.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: Limnoria\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: \n" "Last-Translator: Valentin Lorentz <progval@gmail.com>\n" "Language-Team: Limnoria <progval@gmail.com>\n" @@ -41,41 +41,53 @@ msgid "" "says\n" " ``something is something``.\n" "\n" -" If you want factoid to be in different format say (for example):\n" +" If you want the factoid to be in different format say (for example):\n" " ``@Hi is <reply> Hello`` And when you call ``@hi`` the bot says ``Hello." "``\n" "\n" " If you want the bot to use /mes with Factoids, that is possible too.\n" " ``@test is <action> tests.`` and everytime when someone calls for\n" " ``test`` the bot answers ``* bot tests.``\n" +"\n" +" If you want the factoid to have random answers say (for example):\n" +" ``@fruit is <reply> (orange|apple|banana)``. So when ``@fruit`` is " +"called\n" +" the bot will reply with one of the listed fruits (random): ``orange``.\n" +" \n" +" If you want to replace the value of the factoid, for example:\n" +" ``@no Hi is <reply> Hey`` when you call ``@hi`` the bot says ``Hey``.\n" +"\n" +" If you want to append to the current value of a factoid say:\n" +" ``@Hi is also Hello``, so that when you call ``@hi`` the\n" +" bot says ``Hey, or Hello.`` \n" " " msgstr "" -#: plugin.py:358 +#: plugin.py:369 msgid "%s is %s" msgstr "%s est %s" -#: plugin.py:377 +#: plugin.py:388 msgid "Factoid %q is locked." msgstr "La factoid %q est verrouillée" -#: plugin.py:384 +#: plugin.py:395 msgid "Factoid %q not found." msgstr "Factoid %q non trouvée." -#: plugin.py:394 +#: plugin.py:405 msgid "Missing an 'is' or '_is_'." msgstr "Il manque un 'is' ou un '_is_'" -#: plugin.py:410 +#: plugin.py:421 msgid "Factoid %q already exists." msgstr "La factoid %q existe déjà." -#: plugin.py:444 +#: plugin.py:455 msgid "%s, or %s" msgstr "%s, ou %s" -#: plugin.py:465 +#: plugin.py:476 msgid "" "[<channel>] <factoid key>\n" "\n" @@ -92,7 +104,7 @@ msgstr "" "effecté sur la valeur de la factoid. <canal> n'est nécesaire que si le " "message n'est pas envoyé sur le canal lui-même." -#: plugin.py:478 +#: plugin.py:489 msgid "" "[<channel>] <factoid key>\n" "\n" @@ -108,40 +120,40 @@ msgstr "" "<canal> n'est nécesaire que si le message n'est pas envoyé sur le canal lui-" "même." -#: plugin.py:489 plugin.py:529 +#: plugin.py:500 plugin.py:540 msgid "No such factoid: %q" msgstr "Cette factoid n'existe pas : %q" -#: plugin.py:498 +#: plugin.py:509 msgid "Created by %s on %s." msgstr "Créé par %s le %s" -#: plugin.py:504 +#: plugin.py:515 msgid " Last modified by %s on %s." msgstr "Dernière modification par %s le %s" -#: plugin.py:512 +#: plugin.py:523 msgid " Last requested by %s on %s, requested %n." msgstr "Dernière requete par %s le %s ; a demandé %n." -#: plugin.py:519 +#: plugin.py:530 msgid " Locked by %s on %s." msgstr "Verrouillé par %s le %s" -#: plugin.py:534 +#: plugin.py:545 msgid "Factoid %q is already locked." msgstr "La factoid %q est déjà bloquée." -#: plugin.py:537 +#: plugin.py:548 msgid "Factoid %q is not locked." msgstr "La factoid %q n'est pas bloquée." -#: plugin.py:547 +#: plugin.py:558 msgid "Cannot %s someone else's factoid unless you are an admin." msgstr "" "Impossible de %s la factoid de quelqu'un d'autre à moins d'être un admin." -#: plugin.py:559 +#: plugin.py:570 msgid "" "[<channel>] <factoid key>\n" "\n" @@ -158,7 +170,7 @@ msgstr "" "enregistré et ait créé la factoid. <canal> n'est nécesaire que si le message " "n'est pas envoyé sur le canal lui-même." -#: plugin.py:570 +#: plugin.py:581 msgid "" "[<channel>] <factoid key>\n" "\n" @@ -173,7 +185,7 @@ msgstr "" "enregistré et ait verrouillé la factoid. <canal> n'est nécesaire que si le " "message n'est pas envoyé sur le canal lui-même." -#: plugin.py:581 +#: plugin.py:592 msgid "" "[<channel>] {popular|authored|recent}\n" "\n" @@ -195,51 +207,51 @@ msgstr "" "\"recent\" liste les factoids les plus récentes. <canal> n'est nécesaire que " "si le message n'est pas envoyé sur le canal lui-même." -#: plugin.py:603 +#: plugin.py:614 msgid "author" msgstr "auteur" -#: plugin.py:605 +#: plugin.py:616 msgid "authors" msgstr "auteurs" -#: plugin.py:606 +#: plugin.py:617 msgid "Most prolific %s: %L" msgstr "%s ayant posté le plus de factoids : %L" -#: plugin.py:608 plugin.py:620 +#: plugin.py:619 plugin.py:631 msgid "There are no factoids in my database." msgstr "Il n'y a pas de factoid dans ma base de données." -#: plugin.py:615 +#: plugin.py:626 msgid "latest factoid" msgstr "dernière factoid" -#: plugin.py:617 +#: plugin.py:628 msgid "latest factoids" msgstr "dernières factoids" -#: plugin.py:618 +#: plugin.py:629 msgid "%i %s: %L" msgstr "%i %s : %L" -#: plugin.py:627 +#: plugin.py:638 msgid "requested factoid" msgstr "factoid la plus demandée" -#: plugin.py:629 +#: plugin.py:640 msgid "requested factoids" msgstr "factoids les plus demandées" -#: plugin.py:630 +#: plugin.py:641 msgid "Top %i %s: %L" msgstr "Top des %i %s : %L" -#: plugin.py:632 +#: plugin.py:643 msgid "No factoids have been requested from my database." msgstr "Aucune factoid n'a été demandée dans ma base de données." -#: plugin.py:636 +#: plugin.py:647 msgid "" "[<channel>] <author name>\n" "\n" @@ -259,15 +271,15 @@ msgstr "" "d'utilisateur !) <canal> n'est nécesaire que si le message n'est pas " "envoyé sur le canal lui-même." -#: plugin.py:649 +#: plugin.py:660 msgid "No factoids by %q found." msgstr "Aucune factoid par %q ne peut être trouvée." -#: plugin.py:652 +#: plugin.py:663 msgid "Author search for %q (%i found): %L" msgstr "Recherche d'auteur pour %q (%i trouvé(s)) : %L" -#: plugin.py:659 +#: plugin.py:670 msgid "" "[<channel>] <text>\n" "\n" @@ -283,15 +295,15 @@ msgstr "" "Liste les clefs des factoids dont la clef contient le texte fourni. <canal> " "n'est nécessaire que si la commande n'est pas envoyée sur le canal lui-même." -#: plugin.py:667 +#: plugin.py:678 msgid "No keys matching %q found." msgstr "Aucune factoid correspondant à %q trouvée." -#: plugin.py:675 +#: plugin.py:686 msgid "Key search for %q (%i found): %L" msgstr "Recherche de clef pour %q (%i trouvée(s)) : %L" -#: plugin.py:682 +#: plugin.py:693 msgid "" "[<channel>] <text>\n" "\n" @@ -307,15 +319,15 @@ msgstr "" "Liste les clefs dont la valeur contient le texte recherché. <canal> n'est " "nécesaire que si le message n'est pas envoyé sur le canal lui-même." -#: plugin.py:690 +#: plugin.py:701 msgid "No values matching %q found." msgstr "Aucune valeur correspondant à %q trouvée." -#: plugin.py:693 +#: plugin.py:704 msgid "Value search for %q (%i found): %L" msgstr "Recherche de valeurs pour %q (%i trouvée(s)) : %L" -#: plugin.py:700 +#: plugin.py:711 msgid "" "[<channel>] <factoid key>\n" "\n" @@ -329,7 +341,7 @@ msgstr "" "Supprime la factoid avec la clef donnée. <canal> n'est nécesaire que si le " "message n'est pas envoyé sur le canal lui-même." -#: plugin.py:713 +#: plugin.py:724 msgid "" "[<channel>]\n" "\n" @@ -344,6 +356,6 @@ msgstr "" "Affiche une factoid aléatoire (avec sa clef) de la base de données. <canal> " "n'est nécesaire que si le message n'est pas envoyé sur le canal lui-même." -#: plugin.py:721 +#: plugin.py:732 msgid "No factoids in the database." msgstr "Aucune factoid dans la base de données." diff --git a/plugins/MoobotFactoids/locales/it.po b/plugins/MoobotFactoids/locales/it.po index 7f62a6fd3..a32189fd2 100644 --- a/plugins/MoobotFactoids/locales/it.po +++ b/plugins/MoobotFactoids/locales/it.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: Limnoria\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2011-07-17 16:39+0200\n" "Last-Translator: skizzhg <skizzhg@gmx.com>\n" "Language-Team: Italian <skizzhg@gmx.com>\n" @@ -37,41 +37,53 @@ msgid "" "says\n" " ``something is something``.\n" "\n" -" If you want factoid to be in different format say (for example):\n" +" If you want the factoid to be in different format say (for example):\n" " ``@Hi is <reply> Hello`` And when you call ``@hi`` the bot says ``Hello." "``\n" "\n" " If you want the bot to use /mes with Factoids, that is possible too.\n" " ``@test is <action> tests.`` and everytime when someone calls for\n" " ``test`` the bot answers ``* bot tests.``\n" +"\n" +" If you want the factoid to have random answers say (for example):\n" +" ``@fruit is <reply> (orange|apple|banana)``. So when ``@fruit`` is " +"called\n" +" the bot will reply with one of the listed fruits (random): ``orange``.\n" +" \n" +" If you want to replace the value of the factoid, for example:\n" +" ``@no Hi is <reply> Hey`` when you call ``@hi`` the bot says ``Hey``.\n" +"\n" +" If you want to append to the current value of a factoid say:\n" +" ``@Hi is also Hello``, so that when you call ``@hi`` the\n" +" bot says ``Hey, or Hello.`` \n" " " msgstr "" -#: plugin.py:358 +#: plugin.py:369 msgid "%s is %s" msgstr "%s è %s" -#: plugin.py:377 +#: plugin.py:388 msgid "Factoid %q is locked." msgstr "Il factoid %q è bloccato." -#: plugin.py:384 +#: plugin.py:395 msgid "Factoid %q not found." msgstr "Factoid %q non trovato." -#: plugin.py:394 +#: plugin.py:405 msgid "Missing an 'is' or '_is_'." msgstr "Manca un 'is' o un '_is_'." -#: plugin.py:410 +#: plugin.py:421 msgid "Factoid %q already exists." msgstr "Il factoid %q esiste già." -#: plugin.py:444 +#: plugin.py:455 msgid "%s, or %s" msgstr "%s, o %s" -#: plugin.py:465 +#: plugin.py:476 msgid "" "[<channel>] <factoid key>\n" "\n" @@ -90,7 +102,7 @@ msgstr "" "inviato nel canale stesso.\n" " " -#: plugin.py:478 +#: plugin.py:489 msgid "" "[<channel>] <factoid key>\n" "\n" @@ -108,41 +120,41 @@ msgstr "" "stesso.\n" " " -#: plugin.py:489 plugin.py:529 +#: plugin.py:500 plugin.py:540 msgid "No such factoid: %q" msgstr "Nessun factoid: %q" -#: plugin.py:498 +#: plugin.py:509 msgid "Created by %s on %s." msgstr "Creato da %s il %s." -#: plugin.py:504 +#: plugin.py:515 msgid " Last modified by %s on %s." msgstr " Ultima modifica da %s il %s." -#: plugin.py:512 +#: plugin.py:523 msgid " Last requested by %s on %s, requested %n." msgstr " Ultima richiesta da %s il %s, richiesto %n." -#: plugin.py:519 +#: plugin.py:530 msgid " Locked by %s on %s." msgstr " Bloccato da %s il %s." -#: plugin.py:534 +#: plugin.py:545 msgid "Factoid %q is already locked." msgstr "Il factoid %q è già bloccato." -#: plugin.py:537 +#: plugin.py:548 msgid "Factoid %q is not locked." msgstr "Il factoid %q non è bloccato." -#: plugin.py:547 +#: plugin.py:558 msgid "Cannot %s someone else's factoid unless you are an admin." msgstr "" "Impossibile %s il factoid di qualcun altro a meno che non sei un " "amministratore." -#: plugin.py:559 +#: plugin.py:570 msgid "" "[<channel>] <factoid key>\n" "\n" @@ -162,7 +174,7 @@ msgstr "" " messaggio non viene inviato nel canale stesso.\n" " " -#: plugin.py:570 +#: plugin.py:581 msgid "" "[<channel>] <factoid key>\n" "\n" @@ -180,7 +192,7 @@ msgstr "" " il messaggio non viene inviato nel canale stesso.\n" " " -#: plugin.py:581 +#: plugin.py:592 msgid "" "[<channel>] {popular|authored|recent}\n" "\n" @@ -205,53 +217,53 @@ msgstr "" "viene inviato nel canale stesso.\n" " " -#: plugin.py:603 +#: plugin.py:614 msgid "author" msgstr "autore" -#: plugin.py:605 +#: plugin.py:616 msgid "authors" msgstr "autori" -#: plugin.py:606 +#: plugin.py:617 msgid "Most prolific %s: %L" msgstr "%s più prolifico: %L" -#: plugin.py:608 plugin.py:620 +#: plugin.py:619 plugin.py:631 msgid "There are no factoids in my database." msgstr "Non ci sono factoid nel mio database." -#: plugin.py:615 +#: plugin.py:626 msgid "latest factoid" msgstr "ultimo factoid" -#: plugin.py:617 +#: plugin.py:628 msgid "latest factoids" msgstr "ultimi factoid" -#: plugin.py:618 +#: plugin.py:629 #, fuzzy msgid "%i %s: %L" msgstr "%s: %L" -#: plugin.py:627 +#: plugin.py:638 msgid "requested factoid" msgstr "factoid più richiesto" -#: plugin.py:629 +#: plugin.py:640 msgid "requested factoids" msgstr "factoid più richiesti" -#: plugin.py:630 +#: plugin.py:641 #, fuzzy msgid "Top %i %s: %L" msgstr "%s: %L" -#: plugin.py:632 +#: plugin.py:643 msgid "No factoids have been requested from my database." msgstr "Non è stato richiesto alcun factoid dal mio database." -#: plugin.py:636 +#: plugin.py:647 msgid "" "[<channel>] <author name>\n" "\n" @@ -273,15 +285,15 @@ msgstr "" "inviato nel canale stesso.\n" " " -#: plugin.py:649 +#: plugin.py:660 msgid "No factoids by %q found." msgstr "Nessun factoid di %q trovato." -#: plugin.py:652 +#: plugin.py:663 msgid "Author search for %q (%i found): %L" msgstr "Ricerca di autori per %q (trovati %i): %L" -#: plugin.py:659 +#: plugin.py:670 msgid "" "[<channel>] <text>\n" "\n" @@ -300,15 +312,15 @@ msgstr "" "canale stesso.\n" " " -#: plugin.py:667 +#: plugin.py:678 msgid "No keys matching %q found." msgstr "Nessun factoid corrispondente a %q trovato." -#: plugin.py:675 +#: plugin.py:686 msgid "Key search for %q (%i found): %L" msgstr "Ricerca di chiavi per %q (trovate %i): %L" -#: plugin.py:682 +#: plugin.py:693 msgid "" "[<channel>] <text>\n" "\n" @@ -327,15 +339,15 @@ msgstr "" "canale stesso.\n" " " -#: plugin.py:690 +#: plugin.py:701 msgid "No values matching %q found." msgstr "Nessun valore corrispondente a %q trovato." -#: plugin.py:693 +#: plugin.py:704 msgid "Value search for %q (%i found): %L" msgstr "Ricerca di valori per %q (trovati %i): %L" -#: plugin.py:700 +#: plugin.py:711 msgid "" "[<channel>] <factoid key>\n" "\n" @@ -351,7 +363,7 @@ msgstr "" " solo se se il messaggio non viene inviato nel canale stesso.\n" " " -#: plugin.py:713 +#: plugin.py:724 msgid "" "[<channel>]\n" "\n" @@ -369,6 +381,6 @@ msgstr "" "stesso.\n" " " -#: plugin.py:721 +#: plugin.py:732 msgid "No factoids in the database." msgstr "Nessun factoid nel database." diff --git a/plugins/MoobotFactoids/messages.pot b/plugins/MoobotFactoids/messages.pot index 0d806547b..9b57d435c 100644 --- a/plugins/MoobotFactoids/messages.pot +++ b/plugins/MoobotFactoids/messages.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -39,40 +39,51 @@ msgid "" " ``@something is something`` And when you call ``@something`` the bot says\n" " ``something is something``.\n" "\n" -" If you want factoid to be in different format say (for example):\n" +" If you want the factoid to be in different format say (for example):\n" " ``@Hi is <reply> Hello`` And when you call ``@hi`` the bot says ``Hello.``\n" "\n" " If you want the bot to use /mes with Factoids, that is possible too.\n" " ``@test is <action> tests.`` and everytime when someone calls for\n" " ``test`` the bot answers ``* bot tests.``\n" +"\n" +" If you want the factoid to have random answers say (for example):\n" +" ``@fruit is <reply> (orange|apple|banana)``. So when ``@fruit`` is called\n" +" the bot will reply with one of the listed fruits (random): ``orange``.\n" +" \n" +" If you want to replace the value of the factoid, for example:\n" +" ``@no Hi is <reply> Hey`` when you call ``@hi`` the bot says ``Hey``.\n" +"\n" +" If you want to append to the current value of a factoid say:\n" +" ``@Hi is also Hello``, so that when you call ``@hi`` the\n" +" bot says ``Hey, or Hello.`` \n" " " msgstr "" -#: plugin.py:358 +#: plugin.py:369 msgid "%s is %s" msgstr "" -#: plugin.py:377 +#: plugin.py:388 msgid "Factoid %q is locked." msgstr "" -#: plugin.py:384 +#: plugin.py:395 msgid "Factoid %q not found." msgstr "" -#: plugin.py:394 +#: plugin.py:405 msgid "Missing an 'is' or '_is_'." msgstr "" -#: plugin.py:410 +#: plugin.py:421 msgid "Factoid %q already exists." msgstr "" -#: plugin.py:444 +#: plugin.py:455 msgid "%s, or %s" msgstr "" -#: plugin.py:465 +#: plugin.py:476 #, docstring msgid "" "[<channel>] <factoid key>\n" @@ -83,7 +94,7 @@ msgid "" " " msgstr "" -#: plugin.py:478 +#: plugin.py:489 #, docstring msgid "" "[<channel>] <factoid key>\n" @@ -94,39 +105,39 @@ msgid "" " " msgstr "" -#: plugin.py:489 plugin.py:529 +#: plugin.py:500 plugin.py:540 msgid "No such factoid: %q" msgstr "" -#: plugin.py:498 +#: plugin.py:509 msgid "Created by %s on %s." msgstr "" -#: plugin.py:504 +#: plugin.py:515 msgid " Last modified by %s on %s." msgstr "" -#: plugin.py:512 +#: plugin.py:523 msgid " Last requested by %s on %s, requested %n." msgstr "" -#: plugin.py:519 +#: plugin.py:530 msgid " Locked by %s on %s." msgstr "" -#: plugin.py:534 +#: plugin.py:545 msgid "Factoid %q is already locked." msgstr "" -#: plugin.py:537 +#: plugin.py:548 msgid "Factoid %q is not locked." msgstr "" -#: plugin.py:547 +#: plugin.py:558 msgid "Cannot %s someone else's factoid unless you are an admin." msgstr "" -#: plugin.py:559 +#: plugin.py:570 #, docstring msgid "" "[<channel>] <factoid key>\n" @@ -137,7 +148,7 @@ msgid "" " " msgstr "" -#: plugin.py:570 +#: plugin.py:581 #, docstring msgid "" "[<channel>] <factoid key>\n" @@ -148,7 +159,7 @@ msgid "" " " msgstr "" -#: plugin.py:581 +#: plugin.py:592 #, docstring msgid "" "[<channel>] {popular|authored|recent}\n" @@ -161,51 +172,51 @@ msgid "" " " msgstr "" -#: plugin.py:603 +#: plugin.py:614 msgid "author" msgstr "" -#: plugin.py:605 +#: plugin.py:616 msgid "authors" msgstr "" -#: plugin.py:606 +#: plugin.py:617 msgid "Most prolific %s: %L" msgstr "" -#: plugin.py:608 plugin.py:620 +#: plugin.py:619 plugin.py:631 msgid "There are no factoids in my database." msgstr "" -#: plugin.py:615 +#: plugin.py:626 msgid "latest factoid" msgstr "" -#: plugin.py:617 +#: plugin.py:628 msgid "latest factoids" msgstr "" -#: plugin.py:618 +#: plugin.py:629 msgid "%i %s: %L" msgstr "" -#: plugin.py:627 +#: plugin.py:638 msgid "requested factoid" msgstr "" -#: plugin.py:629 +#: plugin.py:640 msgid "requested factoids" msgstr "" -#: plugin.py:630 +#: plugin.py:641 msgid "Top %i %s: %L" msgstr "" -#: plugin.py:632 +#: plugin.py:643 msgid "No factoids have been requested from my database." msgstr "" -#: plugin.py:636 +#: plugin.py:647 #, docstring msgid "" "[<channel>] <author name>\n" @@ -217,15 +228,15 @@ msgid "" " " msgstr "" -#: plugin.py:649 +#: plugin.py:660 msgid "No factoids by %q found." msgstr "" -#: plugin.py:652 +#: plugin.py:663 msgid "Author search for %q (%i found): %L" msgstr "" -#: plugin.py:659 +#: plugin.py:670 #, docstring msgid "" "[<channel>] <text>\n" @@ -236,15 +247,15 @@ msgid "" " " msgstr "" -#: plugin.py:667 +#: plugin.py:678 msgid "No keys matching %q found." msgstr "" -#: plugin.py:675 +#: plugin.py:686 msgid "Key search for %q (%i found): %L" msgstr "" -#: plugin.py:682 +#: plugin.py:693 #, docstring msgid "" "[<channel>] <text>\n" @@ -255,15 +266,15 @@ msgid "" " " msgstr "" -#: plugin.py:690 +#: plugin.py:701 msgid "No values matching %q found." msgstr "" -#: plugin.py:693 +#: plugin.py:704 msgid "Value search for %q (%i found): %L" msgstr "" -#: plugin.py:700 +#: plugin.py:711 #, docstring msgid "" "[<channel>] <factoid key>\n" @@ -273,7 +284,7 @@ msgid "" " " msgstr "" -#: plugin.py:713 +#: plugin.py:724 #, docstring msgid "" "[<channel>]\n" @@ -284,7 +295,7 @@ msgid "" " " msgstr "" -#: plugin.py:721 +#: plugin.py:732 msgid "No factoids in the database." msgstr "" diff --git a/plugins/Network/locales/de.po b/plugins/Network/locales/de.po index dc6913f66..742fdbfe0 100644 --- a/plugins/Network/locales/de.po +++ b/plugins/Network/locales/de.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: Supybot\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2011-10-29 20:20+0100\n" "Last-Translator: Florian Besser <fbesser@gmail.com>\n" "Language-Team: German <fbesser@gmail.com>\n" @@ -220,6 +220,22 @@ msgid "" " " msgstr "" +#: plugin.py:310 +#, fuzzy +msgid "" +"takes no arguments\n" +"\n" +" Manually initiate SASL authentication.\n" +" " +msgstr "" +"hat keine Argumente\n" +"\n" +"Gibt an zu welchen Netzwerken der Bot momentan verbunden ist." + +#: plugin.py:318 +msgid "SASL not supported" +msgstr "" + #~ msgid "is an op on %L" #~ msgstr "ist ein Operator in %L" @@ -248,13 +264,3 @@ msgstr "" #~ msgid "%s (%s) has been%s on server %s since %s (idle for %s) and %s.%s" #~ msgstr "" #~ "%s (%s) ist%s auf dem Server % seit %s (im Leerlauf für %s) und %s.%s" - -#~ msgid "" -#~ "takes no arguments\n" -#~ "\n" -#~ " Returns the networks to which the bot is currently connected.\n" -#~ " " -#~ msgstr "" -#~ "hat keine Argumente\n" -#~ "\n" -#~ "Gibt an zu welchen Netzwerken der Bot momentan verbunden ist." diff --git a/plugins/Network/locales/fi.po b/plugins/Network/locales/fi.po index 0e4fbf835..8bae86e05 100644 --- a/plugins/Network/locales/fi.po +++ b/plugins/Network/locales/fi.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: Network plugin for Limnoria\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2014-12-20 11:34+0200\n" "Last-Translator: Mikaela Suomalainen <mikaela.suomalainen@outlook.com>\n" "Language-Team: Finnish <>\n" @@ -259,6 +259,24 @@ msgstr "" "\n" " Palauttaa ajan, joka on kulunut siitä, kun yhteys muodostettiin.]" +#: plugin.py:310 +#, fuzzy +msgid "" +"takes no arguments\n" +"\n" +" Manually initiate SASL authentication.\n" +" " +msgstr "" +"ei ota parametrejä\n" +"\n" +" Palauttaa verkot, joihin botti on tällä hetkellä muodostanut " +"yhteyden.\n" +" " + +#: plugin.py:318 +msgid "SASL not supported" +msgstr "" + #~ msgid "is an op on %L" #~ msgstr "on kanavaoperaattori %L:llä" @@ -293,15 +311,3 @@ msgstr "" #, fuzzy #~ msgid "%s (%s) has been%s on server %s and disconnected on %s." #~ msgstr "%s (%s) on ollut %s palvelimella %s %s lähtien (jouten %s) ja %s.%s" - -#~ msgid "" -#~ "takes no arguments\n" -#~ "\n" -#~ " Returns the networks to which the bot is currently connected.\n" -#~ " " -#~ msgstr "" -#~ "ei ota parametrejä\n" -#~ "\n" -#~ " Palauttaa verkot, joihin botti on tällä hetkellä muodostanut " -#~ "yhteyden.\n" -#~ " " diff --git a/plugins/Network/locales/fr.po b/plugins/Network/locales/fr.po index ef45a76f3..e8c043d6c 100644 --- a/plugins/Network/locales/fr.po +++ b/plugins/Network/locales/fr.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: Limnoria\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: Limnoria <progval@gmail.com>\n" @@ -224,6 +224,22 @@ msgstr "" "\n" "Indique depuis combien de temps la connexion est établie." +#: plugin.py:310 +#, fuzzy +msgid "" +"takes no arguments\n" +"\n" +" Manually initiate SASL authentication.\n" +" " +msgstr "" +"ne prend pas d'argument\n" +" \n" +"Retourne la liste des réseaux auxquels le bot est actuellement connecté." + +#: plugin.py:318 +msgid "SASL not supported" +msgstr "" + #~ msgid "is an op on %L" #~ msgstr "est op sur %L" @@ -254,13 +270,3 @@ msgstr "" #~ msgid "%s (%s) has been%s on server %s and disconnect on %s." #~ msgstr "%s (%s) a été%s sur le serveur %s puis c’est déconnecté à %s." - -#~ msgid "" -#~ "takes no arguments\n" -#~ "\n" -#~ " Returns the networks to which the bot is currently connected.\n" -#~ " " -#~ msgstr "" -#~ "ne prend pas d'argument\n" -#~ " \n" -#~ "Retourne la liste des réseaux auxquels le bot est actuellement connecté." diff --git a/plugins/Network/locales/it.po b/plugins/Network/locales/it.po index 31cd1e5c0..d8cff6582 100644 --- a/plugins/Network/locales/it.po +++ b/plugins/Network/locales/it.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: Limnoria\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2012-07-04 19:51+0200\n" "Last-Translator: skizzhg <skizzhg@gmx.com>\n" "Language-Team: Italian <skizzhg@gmx.com>\n" @@ -243,6 +243,23 @@ msgstr "" " Riporta da quanto tempo è connesso il bot.\n" " " +#: plugin.py:310 +#, fuzzy +msgid "" +"takes no arguments\n" +"\n" +" Manually initiate SASL authentication.\n" +" " +msgstr "" +"non necessita argomenti\n" +"\n" +" Restituisce le reti alle quali è attualmente connesso il bot.\n" +" " + +#: plugin.py:318 +msgid "SASL not supported" +msgstr "" + #~ msgid "is an op on %L" #~ msgstr "è un op su %L" @@ -269,14 +286,3 @@ msgstr "" #~ msgid "%s (%s) has been%s on server %s since %s (idle for %s) and %s.%s" #~ msgstr "%s (%s) è%s sul server %s dalle %s (inattivo da %s) ed %s.%s" - -#~ msgid "" -#~ "takes no arguments\n" -#~ "\n" -#~ " Returns the networks to which the bot is currently connected.\n" -#~ " " -#~ msgstr "" -#~ "non necessita argomenti\n" -#~ "\n" -#~ " Restituisce le reti alle quali è attualmente connesso il bot.\n" -#~ " " diff --git a/plugins/Network/messages.pot b/plugins/Network/messages.pot index 2930b7d44..d3e63070e 100644 --- a/plugins/Network/messages.pot +++ b/plugins/Network/messages.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -180,3 +180,16 @@ msgid "" " " msgstr "" +#: plugin.py:310 +#, docstring +msgid "" +"takes no arguments\n" +"\n" +" Manually initiate SASL authentication.\n" +" " +msgstr "" + +#: plugin.py:318 +msgid "SASL not supported" +msgstr "" + diff --git a/plugins/News/messages.pot b/plugins/News/messages.pot index 53b6df35c..4987ecc16 100644 --- a/plugins/News/messages.pot +++ b/plugins/News/messages.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/plugins/NickAuth/messages.pot b/plugins/NickAuth/messages.pot index de13bf713..17cb0af1b 100644 --- a/plugins/NickAuth/messages.pot +++ b/plugins/NickAuth/messages.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/plugins/NickCapture/messages.pot b/plugins/NickCapture/messages.pot index 5ce21f985..3561d4562 100644 --- a/plugins/NickCapture/messages.pot +++ b/plugins/NickCapture/messages.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/plugins/Nickometer/messages.pot b/plugins/Nickometer/messages.pot index 7b70365ca..5b65b6120 100644 --- a/plugins/Nickometer/messages.pot +++ b/plugins/Nickometer/messages.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/plugins/Note/messages.pot b/plugins/Note/messages.pot index 5bedccc63..f0ba1f6ed 100644 --- a/plugins/Note/messages.pot +++ b/plugins/Note/messages.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/plugins/Owner/locales/de.po b/plugins/Owner/locales/de.po index 07d3e7ed8..e9b207cdf 100644 --- a/plugins/Owner/locales/de.po +++ b/plugins/Owner/locales/de.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: Supybot\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2012-04-27 15:38+0200\n" "Last-Translator: Mikaela Suomalainen <mikaela.suomalainen@outlook.com>\n" "Language-Team: German <fbesser@gmail.com>\n" @@ -18,7 +18,7 @@ msgid "" " that should not be removed!" msgstr "" -#: plugin.py:319 +#: plugin.py:374 msgid "" "If the given message is a command, triggers Limnoria's\n" " command-dispatching for that command.\n" @@ -35,7 +35,7 @@ msgid "" " " msgstr "" -#: plugin.py:372 +#: plugin.py:427 msgid "" "<text>\n" "\n" @@ -49,7 +49,7 @@ msgstr "" "Schreibt <Text> in die globale Supybot Logdatei mit kritischer Priorität. " "Nützlich um Logdateien zu markieren um sie später zu durchsuchen." -#: plugin.py:382 +#: plugin.py:437 msgid "" "<text>\n" "\n" @@ -62,7 +62,7 @@ msgstr "" "Sendet <Text> an alle Kanäle in denen der Bot momentan ist und nicht " "hirnamputiert ist." -#: plugin.py:403 +#: plugin.py:458 msgid "" "[--remove] <command> [<plugin>]\n" "\n" @@ -82,7 +82,7 @@ msgstr "" "ausgegeben. Schau auch nach supybot.commands.defaultPlugins." "importantPlugins. " -#: plugin.py:441 +#: plugin.py:496 msgid "" "<string to be sent to the server>\n" "\n" @@ -93,7 +93,7 @@ msgstr "" "\n" "Sendet die Zeichenketten zum angegeben Server." -#: plugin.py:455 +#: plugin.py:514 #, fuzzy msgid "" "[<text>]\n" @@ -114,7 +114,7 @@ msgstr "" "wird die Standard Endnachricht (supybot.plugins.Owner.quitMsg) benutzt. Wenn " "es keine standard quitMsg gesetzt ist, wird dein Nickname benutzt." -#: plugin.py:473 +#: plugin.py:532 msgid "" "takes no arguments\n" "\n" @@ -127,7 +127,7 @@ msgstr "" "Führt alle periodischen Flusher in world.flushers aus. Das beinhaltet alle " "Log und Konfigurationsänderung auf die Festplatte zu schreiben." -#: plugin.py:483 +#: plugin.py:542 msgid "" "[<level>]\n" "\n" @@ -147,7 +147,7 @@ msgstr "" "veranlässt viele Caches aufzuräumen und normale Instandhaltung zu " "bestreiben)." -#: plugin.py:529 +#: plugin.py:588 msgid "" "[--deprecated] <plugin>\n" "\n" @@ -164,7 +164,7 @@ msgstr "" "Hauptinstallationsverzeichnis und 'plugins' im momentanen Verzeichnis. --" "deprecated ist nötig falls du veraltete Plugins laden möchtest." -#: plugin.py:567 +#: plugin.py:626 msgid "" "<plugin>\n" "\n" @@ -177,7 +177,7 @@ msgstr "" "Entläd und läd das das Plugin neu; benutze den Befehl 'list' um dir die " "momentan geladenen Plugins anzuzeigen zu lassen." -#: plugin.py:602 +#: plugin.py:661 #, fuzzy msgid "" "<plugin>\n" @@ -193,7 +193,7 @@ msgstr "" "Callbacks momentan geladen sind. Es ist wohl klar, dass das Owner Plugin " "nicht entladen werden kann." -#: plugin.py:631 +#: plugin.py:690 msgid "" "{add|remove} <capability>\n" "\n" @@ -209,7 +209,7 @@ msgstr "" "den Standardfähigkeiten die den Benutzern gegeben werden (die " "Konfigurationsvariable supybot.capabilities speichert diese)." -#: plugin.py:656 +#: plugin.py:715 msgid "" "[<plugin>] <command>\n" "\n" @@ -231,7 +231,7 @@ msgstr "" "Nutzer deaktiveren willst setze eine standard Fähigkeit -plugin.befehl oder -" "befehl (falls du den Befehl von allen Plugins deaktivieren willst)." -#: plugin.py:683 +#: plugin.py:742 msgid "" "[<plugin>] <command>\n" "\n" @@ -247,7 +247,7 @@ msgstr "" "nur der <Befehl> von <Plugin> aktiviert. Dieser Befehl ist das gegenteil von " "disable." -#: plugin.py:702 +#: plugin.py:761 msgid "" "<plugin> <command> <new name>\n" "\n" @@ -258,7 +258,7 @@ msgstr "" "\n" "Benennt <Befehl> von <Plugin> in <Neuer Name> um." -#: plugin.py:719 +#: plugin.py:778 msgid "" "<plugin>\n" "\n" @@ -271,7 +271,7 @@ msgstr "" "Entfernt alle Namensänderungen in <Plugin>. Das Plugin wird neu geladen nach " "diesem Befehl." -#: plugin.py:732 +#: plugin.py:791 msgid "" "takes no argument\n" "\n" diff --git a/plugins/Owner/locales/fi.po b/plugins/Owner/locales/fi.po index 1a9aceb0c..26cfad406 100644 --- a/plugins/Owner/locales/fi.po +++ b/plugins/Owner/locales/fi.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2012-03-15 08:28+0200\n" "Last-Translator: Mikaela Suomalainen <mikaela.suomalainen@outlook.com>\n" "Language-Team: \n" @@ -23,7 +23,7 @@ msgid "" " that should not be removed!" msgstr "" -#: plugin.py:319 +#: plugin.py:374 msgid "" "If the given message is a command, triggers Limnoria's\n" " command-dispatching for that command.\n" @@ -40,7 +40,7 @@ msgid "" " " msgstr "" -#: plugin.py:372 +#: plugin.py:427 msgid "" "<text>\n" "\n" @@ -50,7 +50,7 @@ msgid "" " " msgstr "" -#: plugin.py:382 +#: plugin.py:437 msgid "" "<text>\n" "\n" @@ -59,7 +59,7 @@ msgid "" " " msgstr "" -#: plugin.py:403 +#: plugin.py:458 msgid "" "[--remove] <command> [<plugin>]\n" "\n" @@ -72,7 +72,7 @@ msgid "" " " msgstr "" -#: plugin.py:441 +#: plugin.py:496 msgid "" "<string to be sent to the server>\n" "\n" @@ -80,7 +80,7 @@ msgid "" " " msgstr "" -#: plugin.py:455 +#: plugin.py:514 msgid "" "[<text>]\n" "\n" @@ -95,7 +95,7 @@ msgid "" " " msgstr "" -#: plugin.py:473 +#: plugin.py:532 msgid "" "takes no arguments\n" "\n" @@ -104,7 +104,7 @@ msgid "" " " msgstr "" -#: plugin.py:483 +#: plugin.py:542 msgid "" "[<level>]\n" "\n" @@ -117,7 +117,7 @@ msgid "" " " msgstr "" -#: plugin.py:529 +#: plugin.py:588 msgid "" "[--deprecated] <plugin>\n" "\n" @@ -128,7 +128,7 @@ msgid "" " " msgstr "" -#: plugin.py:567 +#: plugin.py:626 msgid "" "<plugin>\n" "\n" @@ -137,7 +137,7 @@ msgid "" " " msgstr "" -#: plugin.py:602 +#: plugin.py:661 msgid "" "<plugin>\n" "\n" @@ -147,7 +147,7 @@ msgid "" " " msgstr "" -#: plugin.py:631 +#: plugin.py:690 msgid "" "{add|remove} <capability>\n" "\n" @@ -158,7 +158,7 @@ msgid "" " " msgstr "" -#: plugin.py:656 +#: plugin.py:715 msgid "" "[<plugin>] <command>\n" "\n" @@ -173,7 +173,7 @@ msgid "" " " msgstr "" -#: plugin.py:683 +#: plugin.py:742 msgid "" "[<plugin>] <command>\n" "\n" @@ -184,7 +184,7 @@ msgid "" " " msgstr "" -#: plugin.py:702 +#: plugin.py:761 msgid "" "<plugin> <command> <new name>\n" "\n" @@ -192,7 +192,7 @@ msgid "" " " msgstr "" -#: plugin.py:719 +#: plugin.py:778 msgid "" "<plugin>\n" "\n" @@ -201,7 +201,7 @@ msgid "" " " msgstr "" -#: plugin.py:732 +#: plugin.py:791 msgid "" "takes no argument\n" "\n" diff --git a/plugins/Owner/locales/fr.po b/plugins/Owner/locales/fr.po index 0586dfe64..3f968c059 100644 --- a/plugins/Owner/locales/fr.po +++ b/plugins/Owner/locales/fr.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: Limnoria\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: \n" "Last-Translator: Valentin Lorentz <progval@gmail.com>\n" "Language-Team: Limnoria <progval@gmail.com>\n" @@ -19,7 +19,7 @@ msgid "" " that should not be removed!" msgstr "" -#: plugin.py:319 +#: plugin.py:374 msgid "" "If the given message is a command, triggers Limnoria's\n" " command-dispatching for that command.\n" @@ -36,7 +36,7 @@ msgid "" " " msgstr "" -#: plugin.py:372 +#: plugin.py:427 msgid "" "<text>\n" "\n" @@ -50,7 +50,7 @@ msgstr "" "Log le <texte> aux logs globaux de Supybot avec une priorité critique. Utile " "pour marquer les fichiers de logs pour des recherches ultérieures." -#: plugin.py:382 +#: plugin.py:437 msgid "" "<text>\n" "\n" @@ -63,7 +63,7 @@ msgstr "" "Envoie le <texte> à tous les canaux sur lesquels le bot est sans être " "lobotomisé." -#: plugin.py:403 +#: plugin.py:458 msgid "" "[--remove] <command> [<plugin>]\n" "\n" @@ -82,7 +82,7 @@ msgstr "" "retourne le plugin par défaut actuel. Voyez supybot.commands.defaultPlugins." "importantPlugins pour plus d'informations." -#: plugin.py:441 +#: plugin.py:496 msgid "" "<string to be sent to the server>\n" "\n" @@ -93,7 +93,7 @@ msgstr "" "\n" "Envoie la chaîne directement au serveur." -#: plugin.py:455 +#: plugin.py:514 #, fuzzy msgid "" "[<text>]\n" @@ -114,7 +114,7 @@ msgstr "" "donné, le message de quit par défaut (supybot.plugins.Owner.quitMsg) est " "utilisé. Si quitMsg est vide, votre nick sera utilisé." -#: plugin.py:473 +#: plugin.py:532 msgid "" "takes no arguments\n" "\n" @@ -127,7 +127,7 @@ msgstr "" "Lance tous les 'flushers' périodiques dans world.flushers. Ceci inclue " "l'écriture des logs et de la configuration sur le disque." -#: plugin.py:483 +#: plugin.py:542 msgid "" "[<level>]\n" "\n" @@ -146,7 +146,7 @@ msgstr "" "\"high\", ce qui fait que le bot vide beaucoup plus de cache que ce qu'il " "fait normalement)." -#: plugin.py:529 +#: plugin.py:588 msgid "" "[--deprecated] <plugin>\n" "\n" @@ -163,7 +163,7 @@ msgstr "" "l'installation, et 'plugins' dans le répertoire courrant. Utilisez --" "deprected si nécessaire pour charger des plugins dépréciés." -#: plugin.py:567 +#: plugin.py:626 msgid "" "<plugin>\n" "\n" @@ -176,7 +176,7 @@ msgstr "" "Décharger et recharge immédiatement le <plugin> ; utilisez la commande " "'list' pour lister les plugins actuellement chargés." -#: plugin.py:602 +#: plugin.py:661 msgid "" "<plugin>\n" "\n" @@ -190,7 +190,7 @@ msgstr "" "Décharge le <plugin> ; utilisez la commande 'list' pour lister les plugins " "actuellement chargés. Évidemment, le plugin Owner ne peut être déchargé." -#: plugin.py:631 +#: plugin.py:690 msgid "" "{add|remove} <capability>\n" "\n" @@ -206,7 +206,7 @@ msgstr "" "liste des capacités par défaut données aux utilisateurs (stockée dans la " "variable de configuration supybot.capabilities)." -#: plugin.py:656 +#: plugin.py:715 msgid "" "[<plugin>] <command>\n" "\n" @@ -228,7 +228,7 @@ msgstr "" "utilisateurs sauf vous-même, définissez la capacité par défaut -plugin." "command ou -command." -#: plugin.py:683 +#: plugin.py:742 msgid "" "[<plugin>] <command>\n" "\n" @@ -244,7 +244,7 @@ msgstr "" "ne réactive la <commande> que pour le <plugin>. Cette commande est l'inverse " "de disable." -#: plugin.py:702 +#: plugin.py:761 msgid "" "<plugin> <command> <new name>\n" "\n" @@ -255,7 +255,7 @@ msgstr "" "\n" "Renomme la <commande> du <plugin> par un <nouveau nom>." -#: plugin.py:719 +#: plugin.py:778 msgid "" "<plugin>\n" "\n" @@ -268,7 +268,7 @@ msgstr "" "Supprime tous les renommages du <plugin>. Ce plugin sera rechargé après que " "cette commande ait été lancée." -#: plugin.py:732 +#: plugin.py:791 msgid "" "takes no argument\n" "\n" diff --git a/plugins/Owner/locales/hu.po b/plugins/Owner/locales/hu.po index bf7ab3c79..81c3e76e2 100644 --- a/plugins/Owner/locales/hu.po +++ b/plugins/Owner/locales/hu.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: Limnoria Owner\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2012-04-27 15:13+0200\n" "Last-Translator: Mikaela Suomalainen <mikaela.suomalainen@outlook.com>\n" "Language-Team: \n" @@ -21,7 +21,7 @@ msgid "" " that should not be removed!" msgstr "" -#: plugin.py:319 +#: plugin.py:374 msgid "" "If the given message is a command, triggers Limnoria's\n" " command-dispatching for that command.\n" @@ -38,7 +38,7 @@ msgid "" " " msgstr "" -#: plugin.py:372 +#: plugin.py:427 msgid "" "<text>\n" "\n" @@ -52,7 +52,7 @@ msgstr "" "Naplózza <szöveg>-et a globális Supybot naplóba kritikus prioritással. " "Hasznos a naplófájlok megjelölésére későbbi kereséshez." -#: plugin.py:382 +#: plugin.py:437 msgid "" "<text>\n" "\n" @@ -64,7 +64,7 @@ msgstr "" "\n" "Elküldi <szöveg>-et minden csatornára, ahol a bot van és nincs némítva." -#: plugin.py:403 +#: plugin.py:458 msgid "" "[--remove] <command> [<plugin>]\n" "\n" @@ -82,7 +82,7 @@ msgstr "" "Ha nincs bővítmény megadva, kiírja <parancs> jelenlegi alapértelmezett " "bővítményét. Lásd még, supybot.commands.defaultPlugins.importantPlugins." -#: plugin.py:441 +#: plugin.py:496 msgid "" "<string to be sent to the server>\n" "\n" @@ -93,7 +93,7 @@ msgstr "" "\n" "Elküldi a megadott nyers karakterláncot a szervernek." -#: plugin.py:455 +#: plugin.py:514 #, fuzzy msgid "" "[<text>]\n" @@ -115,7 +115,7 @@ msgstr "" "használva. Ha nincs alapértelmezett kilépési üzenet beállítva, a neved lesz " "használva." -#: plugin.py:473 +#: plugin.py:532 msgid "" "takes no arguments\n" "\n" @@ -128,7 +128,7 @@ msgstr "" "Futtatja az összes időszakos öblítőket world.flushers-ban. Ez magában " "foglalja az összes naplófájl és konfigurációs fájl mentését a lemezre." -#: plugin.py:483 +#: plugin.py:542 msgid "" "[<level>]\n" "\n" @@ -147,7 +147,7 @@ msgstr "" "az egyetlen témogatott szint a \"high\", amellyel a bot öblít nagyon sok " "gyorsítótárat és megcsinálja a normális karbantartási dolgokat." -#: plugin.py:529 +#: plugin.py:588 msgid "" "[--deprecated] <plugin>\n" "\n" @@ -164,7 +164,7 @@ msgstr "" "egy 'plugins' a jelenlegi könyvtárban. --deprecated akkor szükséges, ha " "elavult bővítményeket szeretnél betölteni." -#: plugin.py:567 +#: plugin.py:626 msgid "" "<plugin>\n" "\n" @@ -177,7 +177,7 @@ msgstr "" "Kirakja és aztán újratölti a megadott bővítményt név szerint; használd a " "'list' parancsot, hogy lásd a jelenleg betöltött bővítményeket." -#: plugin.py:602 +#: plugin.py:661 #, fuzzy msgid "" "<plugin>\n" @@ -193,7 +193,7 @@ msgstr "" "lásd a jelenleg betöltött bővítményeket. Nyilvánvalóan az Owner bővítményt " "nem lehet kirakni." -#: plugin.py:631 +#: plugin.py:690 msgid "" "{add|remove} <capability>\n" "\n" @@ -209,7 +209,7 @@ msgstr "" "felhasználóknak adott alapértelmezett képességekhez/-ből (a supybot." "capabilities konfigurációs változó tárolja ezeket)." -#: plugin.py:656 +#: plugin.py:715 msgid "" "[<plugin>] <command>\n" "\n" @@ -232,7 +232,7 @@ msgstr "" "alapértelmezett képességet (ha minden bővítményben le szeretnéd tiltani a " "parancsot)." -#: plugin.py:683 +#: plugin.py:742 msgid "" "[<plugin>] <command>\n" "\n" @@ -248,7 +248,7 @@ msgstr "" "van adva, csak <bővítmény>-ben engedélyezi <parancs>-ot. Ez a parancs a " "fordítottja a disable-nek." -#: plugin.py:702 +#: plugin.py:761 msgid "" "<plugin> <command> <new name>\n" "\n" @@ -259,7 +259,7 @@ msgstr "" "\n" "Átnevezi <parancs>-ot <bővítmény>-ben az <új név>-re." -#: plugin.py:719 +#: plugin.py:778 msgid "" "<plugin>\n" "\n" @@ -272,7 +272,7 @@ msgstr "" "Eltávolítja az összes átnevezést <bővítmény>-ben. A bővítmény újra lesz " "töltve miután ez a parancs lefutott." -#: plugin.py:732 +#: plugin.py:791 msgid "" "takes no argument\n" "\n" diff --git a/plugins/Owner/locales/it.po b/plugins/Owner/locales/it.po index a55045bc2..ea147d57d 100644 --- a/plugins/Owner/locales/it.po +++ b/plugins/Owner/locales/it.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: Limnoria\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2012-03-15 23:59+0100\n" "Last-Translator: skizzhg <skizzhg@gmx.com>\n" "Language-Team: Italian <skizzhg@gmx.com>\n" @@ -16,7 +16,7 @@ msgid "" " that should not be removed!" msgstr "" -#: plugin.py:319 +#: plugin.py:374 msgid "" "If the given message is a command, triggers Limnoria's\n" " command-dispatching for that command.\n" @@ -33,7 +33,7 @@ msgid "" " " msgstr "" -#: plugin.py:372 +#: plugin.py:427 msgid "" "<text>\n" "\n" @@ -48,7 +48,7 @@ msgstr "" " Utile per contrassegnare i file di log per ricerche successive.\n" " " -#: plugin.py:382 +#: plugin.py:437 msgid "" "<text>\n" "\n" @@ -62,7 +62,7 @@ msgstr "" "e non è lobotomizzato.\n" " " -#: plugin.py:403 +#: plugin.py:458 msgid "" "[--remove] <command> [<plugin>]\n" "\n" @@ -84,7 +84,7 @@ msgstr "" "importantPlugins.\n" " " -#: plugin.py:441 +#: plugin.py:496 msgid "" "<string to be sent to the server>\n" "\n" @@ -96,7 +96,7 @@ msgstr "" " Invia la data stringa direttamente al server.\n" " " -#: plugin.py:455 +#: plugin.py:514 #, fuzzy msgid "" "[<text>]\n" @@ -119,7 +119,7 @@ msgstr "" "altrimenti il tuo nick.\n" " " -#: plugin.py:473 +#: plugin.py:532 msgid "" "takes no arguments\n" "\n" @@ -134,7 +134,7 @@ msgstr "" "configurazione.\n" " " -#: plugin.py:483 +#: plugin.py:542 msgid "" "[<level>]\n" "\n" @@ -156,7 +156,7 @@ msgstr "" "normale).\n" " " -#: plugin.py:529 +#: plugin.py:588 msgid "" "[--deprecated] <plugin>\n" "\n" @@ -175,7 +175,7 @@ msgstr "" " --deprecated è necessario per caricare plugin deprecati.\n" " " -#: plugin.py:567 +#: plugin.py:626 msgid "" "<plugin>\n" "\n" @@ -189,7 +189,7 @@ msgstr "" "l'elenco di quelli attualmente caricati.\n" " " -#: plugin.py:602 +#: plugin.py:661 msgid "" "<plugin>\n" "\n" @@ -206,7 +206,7 @@ msgstr "" ". Il plugin Owner non può essere de-caricato.\n" " " -#: plugin.py:631 +#: plugin.py:690 msgid "" "{add|remove} <capability>\n" "\n" @@ -224,7 +224,7 @@ msgstr "" "capabilities).\n" " " -#: plugin.py:656 +#: plugin.py:715 msgid "" "[<plugin>] <command>\n" "\n" @@ -251,7 +251,7 @@ msgstr "" " disabilita il comando in tutti i plugin).\n" " " -#: plugin.py:683 +#: plugin.py:742 msgid "" "[<plugin>] <command>\n" "\n" @@ -268,7 +268,7 @@ msgstr "" "\"disable\".\n" " " -#: plugin.py:702 +#: plugin.py:761 msgid "" "<plugin> <command> <new name>\n" "\n" @@ -280,7 +280,7 @@ msgstr "" " Rinomina <comando> in <plugin> con <nuovo nome>.\n" " " -#: plugin.py:719 +#: plugin.py:778 msgid "" "<plugin>\n" "\n" @@ -294,7 +294,7 @@ msgstr "" "plugin verrà ricaricato.\n" " " -#: plugin.py:732 +#: plugin.py:791 msgid "" "takes no argument\n" "\n" diff --git a/plugins/Owner/messages.pot b/plugins/Owner/messages.pot index 2f4a66e57..2fa82de9b 100644 --- a/plugins/Owner/messages.pot +++ b/plugins/Owner/messages.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -22,7 +22,7 @@ msgid "" " that should not be removed!" msgstr "" -#: plugin.py:319 +#: plugin.py:374 #, docstring msgid "" "If the given message is a command, triggers Limnoria's\n" @@ -39,7 +39,7 @@ msgid "" " " msgstr "" -#: plugin.py:372 +#: plugin.py:427 #, docstring msgid "" "<text>\n" @@ -49,7 +49,7 @@ msgid "" " " msgstr "" -#: plugin.py:382 +#: plugin.py:437 #, docstring msgid "" "<text>\n" @@ -59,7 +59,7 @@ msgid "" " " msgstr "" -#: plugin.py:403 +#: plugin.py:458 #, docstring msgid "" "[--remove] <command> [<plugin>]\n" @@ -71,7 +71,7 @@ msgid "" " " msgstr "" -#: plugin.py:441 +#: plugin.py:496 #, docstring msgid "" "<string to be sent to the server>\n" @@ -80,7 +80,7 @@ msgid "" " " msgstr "" -#: plugin.py:455 +#: plugin.py:514 #, docstring msgid "" "[<text>]\n" @@ -92,7 +92,7 @@ msgid "" " " msgstr "" -#: plugin.py:473 +#: plugin.py:532 #, docstring msgid "" "takes no arguments\n" @@ -102,7 +102,7 @@ msgid "" " " msgstr "" -#: plugin.py:483 +#: plugin.py:542 #, docstring msgid "" "[<level>]\n" @@ -114,7 +114,7 @@ msgid "" " " msgstr "" -#: plugin.py:529 +#: plugin.py:588 #, docstring msgid "" "[--deprecated] <plugin>\n" @@ -126,7 +126,7 @@ msgid "" " " msgstr "" -#: plugin.py:567 +#: plugin.py:626 #, docstring msgid "" "<plugin>\n" @@ -136,7 +136,7 @@ msgid "" " " msgstr "" -#: plugin.py:602 +#: plugin.py:661 #, docstring msgid "" "<plugin>\n" @@ -147,7 +147,7 @@ msgid "" " " msgstr "" -#: plugin.py:631 +#: plugin.py:690 #, docstring msgid "" "{add|remove} <capability>\n" @@ -158,7 +158,7 @@ msgid "" " " msgstr "" -#: plugin.py:656 +#: plugin.py:715 #, docstring msgid "" "[<plugin>] <command>\n" @@ -171,7 +171,7 @@ msgid "" " " msgstr "" -#: plugin.py:683 +#: plugin.py:742 #, docstring msgid "" "[<plugin>] <command>\n" @@ -182,7 +182,7 @@ msgid "" " " msgstr "" -#: plugin.py:702 +#: plugin.py:761 #, docstring msgid "" "<plugin> <command> <new name>\n" @@ -191,7 +191,7 @@ msgid "" " " msgstr "" -#: plugin.py:719 +#: plugin.py:778 #, docstring msgid "" "<plugin>\n" @@ -201,7 +201,7 @@ msgid "" " " msgstr "" -#: plugin.py:732 +#: plugin.py:791 #, docstring msgid "" "takes no argument\n" diff --git a/plugins/Plugin/messages.pot b/plugins/Plugin/messages.pot index 295b46feb..90ad159d4 100644 --- a/plugins/Plugin/messages.pot +++ b/plugins/Plugin/messages.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/plugins/PluginDownloader/locales/de.po b/plugins/PluginDownloader/locales/de.po index b69649515..ec7a74a94 100644 --- a/plugins/PluginDownloader/locales/de.po +++ b/plugins/PluginDownloader/locales/de.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: Supybot\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2012-04-27 15:39+0200\n" "Last-Translator: Mikaela Suomalainen <mikaela.suomalainen@outlook.com>\n" "Language-Team: German <fbesser@gmail.com>\n" @@ -11,23 +11,17 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: pygettext.py 1.5\n" -#: plugin.py:167 +#: plugin.py:152 msgid "" -"Plugin is probably not compatible with your Python version (3.x) and could " -"not be converted because 2to3 is not installed." +"Plugin installed. However, it may be incompatible with Python 3 and require " +"manual code changes to work correctly." msgstr "" -#: plugin.py:174 -msgid "" -"Plugin was designed for Python 2, but an attempt to convert it to Python 3 " -"has been made. There is no guarantee it will work, though." -msgstr "" - -#: plugin.py:178 +#: plugin.py:154 msgid "Plugin successfully installed." msgstr "" -#: plugin.py:323 +#: plugin.py:241 msgid "" "\n" " This plugin allows you to install unofficial plugins from\n" @@ -84,7 +78,7 @@ msgid "" " " msgstr "" -#: plugin.py:368 +#: plugin.py:286 msgid "" "[<repository>]\n" "\n" @@ -93,46 +87,46 @@ msgid "" " repositories." msgstr "" -#: plugin.py:376 plugin.py:387 +#: plugin.py:294 plugin.py:305 msgid ", " msgstr ", " -#: plugin.py:378 plugin.py:400 plugin.py:425 +#: plugin.py:296 plugin.py:318 plugin.py:343 msgid "This repository does not exist or is not known by this bot." msgstr "Diese Quelle existiert nicht, oder sie ist dem Bot nicht bekannt." -#: plugin.py:385 +#: plugin.py:303 msgid "No plugin found in this repository." msgstr "Kein Plugin in dieser Quelle gefunden." -#: plugin.py:392 +#: plugin.py:310 msgid "" "<repository> <plugin>\n" "\n" " Downloads and installs the <plugin> from the <repository>." msgstr "" -#: plugin.py:396 +#: plugin.py:314 msgid "" "This command is not available, because supybot.commands.allowShell is False." msgstr "" -#: plugin.py:405 plugin.py:430 +#: plugin.py:323 plugin.py:348 msgid "This plugin does not exist in this repository." msgstr "Das Plugin ist in dieser Quelle nicht vorhanden." -#: plugin.py:420 +#: plugin.py:338 msgid "" "<repository> <plugin>\n" "\n" " Displays informations on the <plugin> in the <repository>." msgstr "" -#: plugin.py:434 +#: plugin.py:352 msgid "No README found for this plugin." msgstr "" -#: plugin.py:437 +#: plugin.py:355 #, fuzzy msgid "This plugin has no description." msgstr "Das Plugin ist in dieser Quelle nicht vorhanden." diff --git a/plugins/PluginDownloader/locales/fi.po b/plugins/PluginDownloader/locales/fi.po index 7b18fc47f..6b9238bee 100644 --- a/plugins/PluginDownloader/locales/fi.po +++ b/plugins/PluginDownloader/locales/fi.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2014-03-22 16:38+0200\n" "Last-Translator: Mikaela Suomalainen <mikaela.suomalainen@outlook.com>\n" "Language-Team: Finnish <>\n" @@ -17,27 +17,17 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n!=1);\n" "X-Generator: Poedit 1.5.4\n" -#: plugin.py:167 +#: plugin.py:152 msgid "" -"Plugin is probably not compatible with your Python version (3.x) and could " -"not be converted because 2to3 is not installed." +"Plugin installed. However, it may be incompatible with Python 3 and require " +"manual code changes to work correctly." msgstr "" -"Lisä-osa ei luultavasti ole yhteensopiva Python-versiosi (3.x) kanssa, eikä " -"sitä voitu muuntaa, koska 2to3 ei ole asennettu." -#: plugin.py:174 -msgid "" -"Plugin was designed for Python 2, but an attempt to convert it to Python 3 " -"has been made. There is no guarantee it will work, though." -msgstr "" -"Lisä-osa suunniteltiin Python 2:lle, mutta yritys muuntaa se Python 3:lle on " -"tehty. Ei kuitenkaan ole takuuta, että se toimisi." - -#: plugin.py:178 +#: plugin.py:154 msgid "Plugin successfully installed." msgstr "Lisä-osa asennettiin onnistuneesti." -#: plugin.py:323 +#: plugin.py:241 msgid "" "\n" " This plugin allows you to install unofficial plugins from\n" @@ -94,7 +84,7 @@ msgid "" " " msgstr "" -#: plugin.py:368 +#: plugin.py:286 msgid "" "[<repository>]\n" "\n" @@ -109,20 +99,20 @@ msgstr "" "olevista\n" " ohjelmistolähteistä." -#: plugin.py:376 plugin.py:387 +#: plugin.py:294 plugin.py:305 msgid ", " msgstr ", " -#: plugin.py:378 plugin.py:400 plugin.py:425 +#: plugin.py:296 plugin.py:318 plugin.py:343 msgid "This repository does not exist or is not known by this bot." msgstr "" "Tämä ohjelmistolähde ei ole olemassakaan tai tämä botti ei tiedä siitä." -#: plugin.py:385 +#: plugin.py:303 msgid "No plugin found in this repository." msgstr "Lisäosaa ei löytynyt tästä ohjelmistolähteestä." -#: plugin.py:392 +#: plugin.py:310 msgid "" "<repository> <plugin>\n" "\n" @@ -132,16 +122,16 @@ msgstr "" "\n" " Lataa ja asentaa <lisäosan> <ohjelmistolähteestä>." -#: plugin.py:396 +#: plugin.py:314 msgid "" "This command is not available, because supybot.commands.allowShell is False." msgstr "" -#: plugin.py:405 plugin.py:430 +#: plugin.py:323 plugin.py:348 msgid "This plugin does not exist in this repository." msgstr "Tämä lisäosa ei ole tässä ohjelmistolähteessä." -#: plugin.py:420 +#: plugin.py:338 msgid "" "<repository> <plugin>\n" "\n" @@ -151,14 +141,28 @@ msgstr "" "\n" " Näyttää tietoja <lisäosasta> <ohjelmistolähteessä>." -#: plugin.py:434 +#: plugin.py:352 msgid "No README found for this plugin." msgstr "Tämän lisäosan README-tiedostoa ei löydy." -#: plugin.py:437 +#: plugin.py:355 msgid "This plugin has no description." msgstr "Tällä lisäosalla ei ole kuvausta." +#~ msgid "" +#~ "Plugin is probably not compatible with your Python version (3.x) and " +#~ "could not be converted because 2to3 is not installed." +#~ msgstr "" +#~ "Lisä-osa ei luultavasti ole yhteensopiva Python-versiosi (3.x) kanssa, " +#~ "eikä sitä voitu muuntaa, koska 2to3 ei ole asennettu." + +#~ msgid "" +#~ "Plugin was designed for Python 2, but an attempt to convert it to Python " +#~ "3 has been made. There is no guarantee it will work, though." +#~ msgstr "" +#~ "Lisä-osa suunniteltiin Python 2:lle, mutta yritys muuntaa se Python 3:lle " +#~ "on tehty. Ei kuitenkaan ole takuuta, että se toimisi." + #~ msgid "" #~ "This plugin allows you to install unofficial plugins from\n" #~ " multiple repositories easily. Use the \"repolist\" command to see " diff --git a/plugins/PluginDownloader/locales/fr.po b/plugins/PluginDownloader/locales/fr.po index cde726e17..509081a53 100644 --- a/plugins/PluginDownloader/locales/fr.po +++ b/plugins/PluginDownloader/locales/fr.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: limnoria\n" "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2014-01-22 07:52+0100\n" "Last-Translator: \n" "Language-Team: French <fr@li.org>\n" @@ -18,29 +18,17 @@ msgstr "" "X-Launchpad-Export-Date: 2012-04-19 19:44+0000\n" "X-Generator: Poedit 1.5.4\n" -#: plugin.py:167 -#, fuzzy +#: plugin.py:152 msgid "" -"Plugin is probably not compatible with your Python version (3.x) and could " -"not be converted because 2to3 is not installed." +"Plugin installed. However, it may be incompatible with Python 3 and require " +"manual code changes to work correctly." msgstr "" -"Ce plugin n’est probablement pas compatible avec votre version de Python (3." -"x), mais il n’a pas pu être converti car 2to3 n’est pas installé." -#: plugin.py:174 -msgid "" -"Plugin was designed for Python 2, but an attempt to convert it to Python 3 " -"has been made. There is no guarantee it will work, though." -msgstr "" -"Ce plugin a été conçu pour Python 2, mais une tentative de conversion à " -"Python 3 a été faite. Cependant, il n’y a pas de garantie que le plugin " -"fonctionnera." - -#: plugin.py:178 +#: plugin.py:154 msgid "Plugin successfully installed." msgstr "Plugin installé avec succès." -#: plugin.py:323 +#: plugin.py:241 msgid "" "\n" " This plugin allows you to install unofficial plugins from\n" @@ -97,7 +85,7 @@ msgid "" " " msgstr "" -#: plugin.py:368 +#: plugin.py:286 msgid "" "[<repository>]\n" "\n" @@ -110,19 +98,19 @@ msgstr "" "Affiche une liste des plugins du <dépôt>. Si <dépôt> n'est pas donné, " "retourne une liste des dépôts disponibles." -#: plugin.py:376 plugin.py:387 +#: plugin.py:294 plugin.py:305 msgid ", " msgstr ", " -#: plugin.py:378 plugin.py:400 plugin.py:425 +#: plugin.py:296 plugin.py:318 plugin.py:343 msgid "This repository does not exist or is not known by this bot." msgstr "Ce dépôt n'existe pas ou n'est pas connu de ce bot." -#: plugin.py:385 +#: plugin.py:303 msgid "No plugin found in this repository." msgstr "Aucun plugin trouvé dans ce dépôt." -#: plugin.py:392 +#: plugin.py:310 msgid "" "<repository> <plugin>\n" "\n" @@ -132,16 +120,16 @@ msgstr "" "\n" "Télécharge et installe le <plugin> depuis le <dépôt>." -#: plugin.py:396 +#: plugin.py:314 msgid "" "This command is not available, because supybot.commands.allowShell is False." msgstr "" -#: plugin.py:405 plugin.py:430 +#: plugin.py:323 plugin.py:348 msgid "This plugin does not exist in this repository." msgstr "Ce plugin n'existe pas dans ce dépôt." -#: plugin.py:420 +#: plugin.py:338 msgid "" "<repository> <plugin>\n" "\n" @@ -151,14 +139,30 @@ msgstr "" "\n" "Affiche des informations sur <plugin> depuis le <dépôt>." -#: plugin.py:434 +#: plugin.py:352 msgid "No README found for this plugin." msgstr "Aucun README trouvé pour ce plugin." -#: plugin.py:437 +#: plugin.py:355 msgid "This plugin has no description." msgstr "Ce plugin n'a pas de description." +#, fuzzy +#~ msgid "" +#~ "Plugin is probably not compatible with your Python version (3.x) and " +#~ "could not be converted because 2to3 is not installed." +#~ msgstr "" +#~ "Ce plugin n’est probablement pas compatible avec votre version de Python " +#~ "(3.x), mais il n’a pas pu être converti car 2to3 n’est pas installé." + +#~ msgid "" +#~ "Plugin was designed for Python 2, but an attempt to convert it to Python " +#~ "3 has been made. There is no guarantee it will work, though." +#~ msgstr "" +#~ "Ce plugin a été conçu pour Python 2, mais une tentative de conversion à " +#~ "Python 3 a été faite. Cependant, il n’y a pas de garantie que le plugin " +#~ "fonctionnera." + #~ msgid "" #~ "This plugin allows you to install unofficial plugins from\n" #~ " multiple repositories easily. Use the \"repolist\" command to see " diff --git a/plugins/PluginDownloader/locales/it.po b/plugins/PluginDownloader/locales/it.po index b50c0f5d4..48257aaa3 100644 --- a/plugins/PluginDownloader/locales/it.po +++ b/plugins/PluginDownloader/locales/it.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: Limnoria\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2012-05-04 01:17+020\n" "Last-Translator: skizzhg <skizzhg@gmx.com>\n" "Language-Team: Italian <skizzhg@gmx.com>\n" @@ -10,23 +10,17 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: plugin.py:167 +#: plugin.py:152 msgid "" -"Plugin is probably not compatible with your Python version (3.x) and could " -"not be converted because 2to3 is not installed." +"Plugin installed. However, it may be incompatible with Python 3 and require " +"manual code changes to work correctly." msgstr "" -#: plugin.py:174 -msgid "" -"Plugin was designed for Python 2, but an attempt to convert it to Python 3 " -"has been made. There is no guarantee it will work, though." -msgstr "" - -#: plugin.py:178 +#: plugin.py:154 msgid "Plugin successfully installed." msgstr "" -#: plugin.py:323 +#: plugin.py:241 msgid "" "\n" " This plugin allows you to install unofficial plugins from\n" @@ -83,7 +77,7 @@ msgid "" " " msgstr "" -#: plugin.py:368 +#: plugin.py:286 msgid "" "[<repository>]\n" "\n" @@ -97,19 +91,19 @@ msgstr "" " Se <repository> non è specificato riporta una lista di quelli " "disponibili." -#: plugin.py:376 plugin.py:387 +#: plugin.py:294 plugin.py:305 msgid ", " msgstr ", " -#: plugin.py:378 plugin.py:400 plugin.py:425 +#: plugin.py:296 plugin.py:318 plugin.py:343 msgid "This repository does not exist or is not known by this bot." msgstr "Questo repository non esiste o non è riconosciuto." -#: plugin.py:385 +#: plugin.py:303 msgid "No plugin found in this repository." msgstr "Nessun plugin trovato in questo repository." -#: plugin.py:392 +#: plugin.py:310 msgid "" "<repository> <plugin>\n" "\n" @@ -119,16 +113,16 @@ msgstr "" "\n" " Scarica e installa <plugin> da <repository>." -#: plugin.py:396 +#: plugin.py:314 msgid "" "This command is not available, because supybot.commands.allowShell is False." msgstr "" -#: plugin.py:405 plugin.py:430 +#: plugin.py:323 plugin.py:348 msgid "This plugin does not exist in this repository." msgstr "Il plugin non esiste in questo repository." -#: plugin.py:420 +#: plugin.py:338 msgid "" "<repository> <plugin>\n" "\n" @@ -138,12 +132,12 @@ msgstr "" "\n" " Visualizza informazioni riguardo <plugin> in <repository>." -#: plugin.py:434 +#: plugin.py:352 #, fuzzy msgid "No README found for this plugin." msgstr "Non è stato trovato nessun file README per questo plugin." -#: plugin.py:437 +#: plugin.py:355 msgid "This plugin has no description." msgstr "Questo plugin non ha una descrizione." diff --git a/plugins/PluginDownloader/locales/ru.po b/plugins/PluginDownloader/locales/ru.po index 53ebbc6f7..83e9cf7a2 100644 --- a/plugins/PluginDownloader/locales/ru.po +++ b/plugins/PluginDownloader/locales/ru.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2024-06-12 22:10+0300\n" "Last-Translator: ssdaniel24 <bo7oaonteg2m__at__mailDOTru>\n" "Language-Team: \n" @@ -16,27 +16,17 @@ msgstr "" "Generated-By: pygettext.py 1.5\n" "X-Generator: Poedit 3.4.2\n" -#: plugin.py:167 +#: plugin.py:152 msgid "" -"Plugin is probably not compatible with your Python version (3.x) and could " -"not be converted because 2to3 is not installed." +"Plugin installed. However, it may be incompatible with Python 3 and require " +"manual code changes to work correctly." msgstr "" -"Плагин возможно несовместим с вашей версией Python (3.x) и не может быть " -"конвертирован, так как 2to3 не установлен." -#: plugin.py:174 -msgid "" -"Plugin was designed for Python 2, but an attempt to convert it to Python 3 " -"has been made. There is no guarantee it will work, though." -msgstr "" -"Плагин был разработан на Python 2, но была сделана попытка конвертировать " -"его на Python 3, однако не гарантируется, что плагин будет работать." - -#: plugin.py:178 +#: plugin.py:154 msgid "Plugin successfully installed." msgstr "Плагин успешно установлен." -#: plugin.py:323 +#: plugin.py:241 msgid "" "\n" " This plugin allows you to install unofficial plugins from\n" @@ -140,7 +130,7 @@ msgstr "" "< Mikaela> @load Wikipedia\n" "< Limnoria> Ok." -#: plugin.py:368 +#: plugin.py:286 msgid "" "[<repository>]\n" "\n" @@ -153,19 +143,19 @@ msgstr "" "Показывает список плагинов в данном <репозитории>. Если <репозиторий> не дан " "аргументом, то показывает список доступных репозиториев." -#: plugin.py:376 plugin.py:387 +#: plugin.py:294 plugin.py:305 msgid ", " msgstr "" -#: plugin.py:378 plugin.py:400 plugin.py:425 +#: plugin.py:296 plugin.py:318 plugin.py:343 msgid "This repository does not exist or is not known by this bot." msgstr "Этот репозиторий не существует или неизвестен боту." -#: plugin.py:385 +#: plugin.py:303 msgid "No plugin found in this repository." msgstr "В этом репозитории не найдено ни одного плагина." -#: plugin.py:392 +#: plugin.py:310 msgid "" "<repository> <plugin>\n" "\n" @@ -175,18 +165,18 @@ msgstr "" "\n" "Скачивает и устанавливает данный <плагин> из данного <репозитория>." -#: plugin.py:396 +#: plugin.py:314 msgid "" "This command is not available, because supybot.commands.allowShell is False." msgstr "" "Эта команда недоступна, так как настройка supybot.command.allowShell " "установлена в False." -#: plugin.py:405 plugin.py:430 +#: plugin.py:323 plugin.py:348 msgid "This plugin does not exist in this repository." msgstr "Этого плагина нет в данном репозитории." -#: plugin.py:420 +#: plugin.py:338 msgid "" "<repository> <plugin>\n" "\n" @@ -196,10 +186,24 @@ msgstr "" "\n" "Показывает информацию о данном <плагине> в этом <репозитории>." -#: plugin.py:434 +#: plugin.py:352 msgid "No README found for this plugin." msgstr "В этом плагине не найдено файла README." -#: plugin.py:437 +#: plugin.py:355 msgid "This plugin has no description." msgstr "Этот плагин не предоставляет описание." + +#~ msgid "" +#~ "Plugin is probably not compatible with your Python version (3.x) and " +#~ "could not be converted because 2to3 is not installed." +#~ msgstr "" +#~ "Плагин возможно несовместим с вашей версией Python (3.x) и не может быть " +#~ "конвертирован, так как 2to3 не установлен." + +#~ msgid "" +#~ "Plugin was designed for Python 2, but an attempt to convert it to Python " +#~ "3 has been made. There is no guarantee it will work, though." +#~ msgstr "" +#~ "Плагин был разработан на Python 2, но была сделана попытка конвертировать " +#~ "его на Python 3, однако не гарантируется, что плагин будет работать." diff --git a/plugins/PluginDownloader/messages.pot b/plugins/PluginDownloader/messages.pot index eb360c4e1..9fd03122d 100644 --- a/plugins/PluginDownloader/messages.pot +++ b/plugins/PluginDownloader/messages.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -15,19 +15,15 @@ msgstr "" "Generated-By: pygettext.py 1.5\n" -#: plugin.py:167 -msgid "Plugin is probably not compatible with your Python version (3.x) and could not be converted because 2to3 is not installed." +#: plugin.py:152 +msgid "Plugin installed. However, it may be incompatible with Python 3 and require manual code changes to work correctly." msgstr "" -#: plugin.py:174 -msgid "Plugin was designed for Python 2, but an attempt to convert it to Python 3 has been made. There is no guarantee it will work, though." -msgstr "" - -#: plugin.py:178 +#: plugin.py:154 msgid "Plugin successfully installed." msgstr "" -#: plugin.py:323 +#: plugin.py:241 #, docstring msgid "" "\n" @@ -72,7 +68,7 @@ msgid "" " " msgstr "" -#: plugin.py:368 +#: plugin.py:286 #, docstring msgid "" "[<repository>]\n" @@ -82,19 +78,19 @@ msgid "" " repositories." msgstr "" -#: plugin.py:376 plugin.py:387 +#: plugin.py:294 plugin.py:305 msgid ", " msgstr "" -#: plugin.py:378 plugin.py:400 plugin.py:425 +#: plugin.py:296 plugin.py:318 plugin.py:343 msgid "This repository does not exist or is not known by this bot." msgstr "" -#: plugin.py:385 +#: plugin.py:303 msgid "No plugin found in this repository." msgstr "" -#: plugin.py:392 +#: plugin.py:310 #, docstring msgid "" "<repository> <plugin>\n" @@ -102,15 +98,15 @@ msgid "" " Downloads and installs the <plugin> from the <repository>." msgstr "" -#: plugin.py:396 +#: plugin.py:314 msgid "This command is not available, because supybot.commands.allowShell is False." msgstr "" -#: plugin.py:405 plugin.py:430 +#: plugin.py:323 plugin.py:348 msgid "This plugin does not exist in this repository." msgstr "" -#: plugin.py:420 +#: plugin.py:338 #, docstring msgid "" "<repository> <plugin>\n" @@ -118,11 +114,11 @@ msgid "" " Displays informations on the <plugin> in the <repository>." msgstr "" -#: plugin.py:434 +#: plugin.py:352 msgid "No README found for this plugin." msgstr "" -#: plugin.py:437 +#: plugin.py:355 msgid "This plugin has no description." msgstr "" diff --git a/plugins/Poll/messages.pot b/plugins/Poll/messages.pot index c3e8b9779..05767619c 100644 --- a/plugins/Poll/messages.pot +++ b/plugins/Poll/messages.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -87,11 +87,11 @@ msgstr "" msgid "Duplicate answer identifier(s): %L" msgstr "" -#: plugin.py:155 +#: plugin.py:158 msgid "Poll # %d created." msgstr "" -#: plugin.py:159 +#: plugin.py:162 #, docstring msgid "" "[<channel>] <poll_id>\n" @@ -99,11 +99,11 @@ msgid "" " Closes the specified poll." msgstr "" -#: plugin.py:167 +#: plugin.py:170 msgid "This poll was already closed." msgstr "" -#: plugin.py:180 +#: plugin.py:183 #, docstring msgid "" "[<channel>] <poll_id> <answer_id>\n" @@ -113,19 +113,19 @@ msgid "" " answer)." msgstr "" -#: plugin.py:189 +#: plugin.py:192 msgid "This poll is closed." msgstr "" -#: plugin.py:192 +#: plugin.py:195 msgid "You already voted on this poll." msgstr "" -#: plugin.py:197 +#: plugin.py:202 msgid "Invalid answer ID. Valid answers are: %L" msgstr "" -#: plugin.py:209 +#: plugin.py:214 #, docstring msgid "" "[<channel>] <poll_id>\n" @@ -133,7 +133,27 @@ msgid "" " Returns the results of the specified poll." msgstr "" -#: plugin.py:221 +#: plugin.py:226 msgid "%n for %s" msgstr "" +#: plugin.py:226 plugin.py:242 +msgid "vote" +msgstr "" + +#: plugin.py:234 +#, docstring +msgid "" +"[<channel>]\n" +"\n" +" Lists open polls in the <channel>." +msgstr "" + +#: plugin.py:239 +msgid "%i: %s (%n)" +msgstr "" + +#: plugin.py:251 +msgid "There are no open polls." +msgstr "" + diff --git a/plugins/Praise/messages.pot b/plugins/Praise/messages.pot index 46c43c0b0..2bb97d0aa 100644 --- a/plugins/Praise/messages.pot +++ b/plugins/Praise/messages.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/plugins/Protector/locales/fi.po b/plugins/Protector/locales/fi.po index 8d0d0d1a6..879004c56 100644 --- a/plugins/Protector/locales/fi.po +++ b/plugins/Protector/locales/fi.po @@ -4,7 +4,7 @@ msgid "" msgstr "" "Project-Id-Version: Protector plugin for Limnoria\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2014-12-20 12:09+0200\n" "Last-Translator: Mikaela Suomalainen <mikaela.suomalainen@outlook.com>\n" "Language-Team: \n" @@ -24,7 +24,7 @@ msgstr "" "Määrittää onko tämä lisäosa käytössä\n" " annetulla kanavalla." -#: config.py:55 +#: config.py:56 msgid "" "Determines what nicks the bot will consider to\n" " be immune from enforcement. These nicks will not even have their " diff --git a/plugins/Protector/locales/fr.po b/plugins/Protector/locales/fr.po index e56106ef2..c504b7dab 100644 --- a/plugins/Protector/locales/fr.po +++ b/plugins/Protector/locales/fr.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: Limnoria\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: \n" "Last-Translator: Valentin Lorentz <progval@gmail.com>\n" "Language-Team: Limnoria <progval@gmail.com>\n" @@ -19,7 +19,7 @@ msgid "" " given channel." msgstr "Détermine si le plugin est activé sur un canal donné." -#: config.py:55 +#: config.py:56 msgid "" "Determines what nicks the bot will consider to\n" " be immune from enforcement. These nicks will not even have their " diff --git a/plugins/Protector/locales/it.po b/plugins/Protector/locales/it.po index 461b5ff71..98019a638 100644 --- a/plugins/Protector/locales/it.po +++ b/plugins/Protector/locales/it.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: Limnoria\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2012-07-25 23:33+0200\n" "Last-Translator: skizzhg <skizzhg@gmx.com>\n" "Language-Team: Italian <skizzhg@gmx.com>\n" @@ -16,7 +16,7 @@ msgid "" " given channel." msgstr "Determina se il plugin è abilitato in un dato canale." -#: config.py:55 +#: config.py:56 msgid "" "Determines what nicks the bot will consider to\n" " be immune from enforcement. These nicks will not even have their " diff --git a/plugins/Protector/messages.pot b/plugins/Protector/messages.pot index e980a212b..b21bfaae0 100644 --- a/plugins/Protector/messages.pot +++ b/plugins/Protector/messages.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -21,7 +21,7 @@ msgid "" " given channel." msgstr "" -#: config.py:55 +#: config.py:56 msgid "" "Determines what nicks the bot will consider to\n" " be immune from enforcement. These nicks will not even have their actions\n" diff --git a/plugins/Quote/messages.pot b/plugins/Quote/messages.pot index 485befa09..94462a726 100644 --- a/plugins/Quote/messages.pot +++ b/plugins/Quote/messages.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/plugins/QuoteGrabs/messages.pot b/plugins/QuoteGrabs/messages.pot index 160dd7359..7f856cf7a 100644 --- a/plugins/QuoteGrabs/messages.pot +++ b/plugins/QuoteGrabs/messages.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/plugins/RSS/locales/de.po b/plugins/RSS/locales/de.po index e1ab972e6..f8bd26df8 100644 --- a/plugins/RSS/locales/de.po +++ b/plugins/RSS/locales/de.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: Supybot\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2011-10-29 17:09+0100\n" "Last-Translator: Valentin Lorentz <progval@gmail.com>\n" "Language-Team: German <fbesser@gmail.com>\n" @@ -40,22 +40,24 @@ msgid "" " manually. In addition to fields defined by feedparser ($published\n" " (the entry date), $title, $link, $description, $id, etc.), the " "following\n" -" variables can be used: $feed_name, $date (parsed date, as defined in\n" +" variables can be used: $feed_name (the configured name)\n" +" $feed_title/$feed_subtitle/$feed_author/$feed_language/$feed_link,\n" +" $date (parsed date, as defined in\n" " supybot.reply.format.time)" msgstr "" -#: config.py:74 +#: config.py:76 msgid "News from $feed_name: $title <$link>" msgstr "" -#: config.py:75 +#: config.py:77 msgid "" "The format the bot will use for displaying headlines of a RSS feed\n" " that is announced. See supybot.plugins.RSS.format for the available\n" " variables." msgstr "" -#: config.py:83 +#: config.py:85 msgid "" "Determines which RSS feeds\n" " should be announced in the channel; valid input is a list of strings\n" @@ -65,7 +67,7 @@ msgstr "" "eingaben sind Listen von Zeichenketten (entweder registrierte RSS Feed oder " "URLs zu RSS Feed), mit einem Leerzeichen getrennt" -#: config.py:87 +#: config.py:89 msgid "" "Indicates how many seconds the bot will\n" " wait between retrieving RSS feeds; requests made within this period " @@ -76,7 +78,7 @@ msgstr "" "Feeds; Anfragen die innerhalb dieser Zeit gemachten werden, führt zu " "zwischengespeicherten Ergebnissen." -#: config.py:91 +#: config.py:93 msgid "" "Determines whether feed items should be\n" " sorted by their publication/update timestamp or kept in the same order " @@ -84,31 +86,31 @@ msgid "" " they appear in a feed." msgstr "" -#: config.py:95 +#: config.py:97 msgid "" "Determines whether announces will be sent\n" " as notices instead of privmsgs." msgstr "" -#: config.py:98 +#: config.py:100 msgid "" "Indicates how many new news entries may\n" " be sent at the same time. Extra entries will be discarded." msgstr "" -#: config.py:104 +#: config.py:106 msgid "" "Indicates how many headlines an rss feed\n" " will output by default, if no number is provided." msgstr "" -#: config.py:107 +#: config.py:109 msgid "" "Indicates how many headlines an rss feed\n" " will output when it is first added to announce for a channel." msgstr "" -#: config.py:110 +#: config.py:112 msgid "" "Space separated list of \n" " strings, lets you filter headlines to those containing one or more " @@ -116,26 +118,26 @@ msgid "" " in this whitelist." msgstr "" -#: config.py:114 +#: config.py:116 msgid "" "Space separated list of \n" " strings, lets you filter headlines to those not containing any items\n" " in this blacklist." msgstr "" -#: config.py:127 +#: config.py:129 msgid "" "Feed-specific format. Defaults to\n" " supybot.plugins.RSS.format if empty." msgstr "" -#: config.py:130 +#: config.py:132 msgid "" "Feed-specific announce format.\n" " Defaults to supybot.plugins.RSS.announceFormat if empty." msgstr "" -#: config.py:133 +#: config.py:135 msgid "" "If set to a non-zero\n" " value, overrides supybot.plugins.RSS.waitPeriod for this\n" @@ -163,8 +165,8 @@ msgid "" " This plugin is useful both for announcing updates to RSS feeds in a\n" " channel, and for retrieving the headlines of RSS feeds via command. " "Use\n" -" the \"add\" command to add feeds to this plugin, and use the \"announce" -"\"\n" +" the \"add\" command to add feeds to this plugin, and use the " +"\"announce\"\n" " command to determine what feeds should be announced in a given channel.\n" "\n" " Basic usage\n" @@ -213,7 +215,7 @@ msgstr "" msgid "I already have a feed with that URL named %s." msgstr "" -#: plugin.py:508 +#: plugin.py:565 msgid "" "<name> <url>\n" "\n" @@ -226,7 +228,7 @@ msgstr "" "Fügt einen Befehl zu diesem Plugin hinzu, der den RSS Feed von angegebener " "URL abruft." -#: plugin.py:521 +#: plugin.py:578 msgid "" "<name>\n" "\n" @@ -238,11 +240,11 @@ msgstr "" "\n" "Entfernt den Befehl um RSS Feeds von <Name> abzurufen aus diesem Plugin" -#: plugin.py:528 +#: plugin.py:585 msgid "That's not a valid RSS feed command name." msgstr "Das ist kein gültiger RSS Feed Befehl." -#: plugin.py:547 +#: plugin.py:604 msgid "" "[<channel>]\n" "\n" @@ -255,11 +257,11 @@ msgstr "" "Gibt eine Liste der Feeds, die in einem <Kanal> verkündet werden, zurück. " "<Kanal> ist nur nötig falls der Befehl nicht direkt im Kanal abgegeben wird." -#: plugin.py:556 +#: plugin.py:613 msgid "I am currently not announcing any feeds." msgstr "Momentan kündige ich keine Feeds an." -#: plugin.py:561 +#: plugin.py:618 msgid "" "[<channel>] <name|url> [<name|url> ...]\n" "\n" @@ -278,11 +280,11 @@ msgstr "" "auch URLs für RSS Feeds. <Kanal> ist nur nötig falls die Nachricht nicht im " "Kanal gesendet wird." -#: plugin.py:572 +#: plugin.py:629 msgid "These feeds are unknown: %L" msgstr "" -#: plugin.py:593 +#: plugin.py:650 msgid "" "[<channel>] <name|url> [<name|url> ...]\n" "\n" @@ -301,7 +303,7 @@ msgstr "" "auch URLs für RSS Feeds. <Kanal> ist nur nötig falls die Nachricht nicht im " "Kanal gesendet wird." -#: plugin.py:618 +#: plugin.py:675 msgid "" "<name|url>\n" "\n" @@ -311,7 +313,7 @@ msgid "" " " msgstr "" -#: plugin.py:642 +#: plugin.py:699 #, fuzzy msgid "" "<name|url> [<number of headlines>]\n" @@ -325,15 +327,15 @@ msgstr "" "Empfängt die Titel des angegeben RSS Feeds. Falls <Anzahl der Kopfzeilen> " "angegeben wurde, werden nur soviele Kopfzeilen ausgegeben." -#: plugin.py:658 +#: plugin.py:715 msgid "Couldn't get RSS feed." msgstr "Konnte den RSS Feed nicht bekommen." -#: plugin.py:661 +#: plugin.py:718 msgid " Parser error: " msgstr "" -#: plugin.py:677 +#: plugin.py:736 msgid "" "<url|feed>\n" "\n" @@ -346,19 +348,19 @@ msgstr "" "Gibt Informationen zum angegeben RSS Feed aus. Den Titel, URL, Beschreibung " "und das Datum des letzten Updates, wenn verfügbar." -#: plugin.py:692 +#: plugin.py:751 msgid "I couldn't retrieve that RSS feed." msgstr "Ich konnte den RSS Feed nicht empfangen." -#: plugin.py:700 +#: plugin.py:759 msgid "time unavailable" msgstr "" -#: plugin.py:701 plugin.py:702 plugin.py:703 +#: plugin.py:760 plugin.py:761 plugin.py:762 msgid "unavailable" msgstr "" -#: plugin.py:705 +#: plugin.py:764 msgid "Title: %s; URL: %u; Description: %s; Last updated: %s." msgstr "Titel: %s; URL: %u; Beschreibung: %s; Zuletzt aktualisiert: %s." diff --git a/plugins/RSS/locales/fi.po b/plugins/RSS/locales/fi.po index b4f6140a6..57475793d 100644 --- a/plugins/RSS/locales/fi.po +++ b/plugins/RSS/locales/fi.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: RSS plugin for Limnoria\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2014-12-20 12:12+0200\n" "Last-Translator: Mikaela Suomalainen <mikaela.suomalainen@outlook.com>\n" "Language-Team: Finnish <>\n" @@ -52,7 +52,9 @@ msgid "" " manually. In addition to fields defined by feedparser ($published\n" " (the entry date), $title, $link, $description, $id, etc.), the " "following\n" -" variables can be used: $feed_name, $date (parsed date, as defined in\n" +" variables can be used: $feed_name (the configured name)\n" +" $feed_title/$feed_subtitle/$feed_author/$feed_language/$feed_link,\n" +" $date (parsed date, as defined in\n" " supybot.reply.format.time)" msgstr "" "Muoto, jota käytetään manuaalisesti pyydetyn RSS-syltteen otsikoissa.\n" @@ -62,11 +64,11 @@ msgstr "" "$feed_name,\n" " $date (parsittu päiväys, jonka määrittää asetus supybot.reply.format.time)" -#: config.py:74 +#: config.py:76 msgid "News from $feed_name: $title <$link>" msgstr "Uutisia lähteestä $feed_name: $title <$link>" -#: config.py:75 +#: config.py:77 msgid "" "The format the bot will use for displaying headlines of a RSS feed\n" " that is announced. See supybot.plugins.RSS.format for the available\n" @@ -76,7 +78,7 @@ msgstr "" "näyttämiseen.\n" " Kelvolliset muuttujat näkee asetuksesta supybot.plugins.RSS.format." -#: config.py:83 +#: config.py:85 msgid "" "Determines which RSS feeds\n" " should be announced in the channel; valid input is a list of strings\n" @@ -87,7 +89,7 @@ msgstr "" "syöte\n" "-osoitteita) välilyönneillä erotettuina." -#: config.py:87 +#: config.py:89 msgid "" "Indicates how many seconds the bot will\n" " wait between retrieving RSS feeds; requests made within this period " @@ -99,7 +101,7 @@ msgstr "" "ajalla\n" " palauttavat välimuistissa olevia tuloksia." -#: config.py:91 +#: config.py:93 #, fuzzy msgid "" "Determines whether feed items should be\n" @@ -112,19 +114,19 @@ msgstr "" "ilmestyvät\n" " syötteessä." -#: config.py:95 +#: config.py:97 msgid "" "Determines whether announces will be sent\n" " as notices instead of privmsgs." msgstr "" -#: config.py:98 +#: config.py:100 msgid "" "Indicates how many new news entries may\n" " be sent at the same time. Extra entries will be discarded." msgstr "" -#: config.py:104 +#: config.py:106 msgid "" "Indicates how many headlines an rss feed\n" " will output by default, if no number is provided." @@ -132,7 +134,7 @@ msgstr "" "Ilmaisee kuinka monta otsikkoa RSS-syötteen ulostulossa on oletuksena,\n" " jos määrää ei määritetä komennossa." -#: config.py:107 +#: config.py:109 msgid "" "Indicates how many headlines an rss feed\n" " will output when it is first added to announce for a channel." @@ -141,7 +143,7 @@ msgstr "" "kerralla, kun sen kuuluttaminen\n" " lisätään kanavalle." -#: config.py:110 +#: config.py:112 msgid "" "Space separated list of \n" " strings, lets you filter headlines to those containing one or more " @@ -152,7 +154,7 @@ msgstr "" "suodattamisen\n" " yhteen tai useampaan kohteeseen, jotka ovat tällä valkoisella listalla." -#: config.py:114 +#: config.py:116 msgid "" "Space separated list of \n" " strings, lets you filter headlines to those not containing any items\n" @@ -162,14 +164,14 @@ msgstr "" " tämä sallii kohteiden, jotka ovat tällä mustalla listalla, suodattamisen " "pois." -#: config.py:127 +#: config.py:129 #, fuzzy msgid "" "Feed-specific format. Defaults to\n" " supybot.plugins.RSS.format if empty." msgstr "Syötekohtainen muoto. Oletuksena supybot.plugins.RSS.format." -#: config.py:130 +#: config.py:132 #, fuzzy msgid "" "Feed-specific announce format.\n" @@ -177,7 +179,7 @@ msgid "" msgstr "" "Syötekohtainen kuulutusmuoto. Oletuksena supybot.plugins.RSS.announceFormat." -#: config.py:133 +#: config.py:135 msgid "" "If set to a non-zero\n" " value, overrides supybot.plugins.RSS.waitPeriod for this\n" @@ -213,8 +215,8 @@ msgid "" " This plugin is useful both for announcing updates to RSS feeds in a\n" " channel, and for retrieving the headlines of RSS feeds via command. " "Use\n" -" the \"add\" command to add feeds to this plugin, and use the \"announce" -"\"\n" +" the \"add\" command to add feeds to this plugin, and use the " +"\"announce\"\n" " command to determine what feeds should be announced in a given channel.\n" "\n" " Basic usage\n" @@ -263,7 +265,7 @@ msgstr "Minulla on jo komento %s tässä lisä-osassa." msgid "I already have a feed with that URL named %s." msgstr "Minulla on jo syöte nimeltä %s." -#: plugin.py:508 +#: plugin.py:565 msgid "" "<name> <url>\n" "\n" @@ -277,7 +279,7 @@ msgstr "" " URL osoitteesta..\n" " " -#: plugin.py:521 +#: plugin.py:578 msgid "" "<name>\n" "\n" @@ -291,11 +293,11 @@ msgstr "" " lisäosasta.\n" " " -#: plugin.py:528 +#: plugin.py:585 msgid "That's not a valid RSS feed command name." msgstr "Tuo ei ole kelvollinen RSS sylte komento nimi." -#: plugin.py:547 +#: plugin.py:604 msgid "" "[<channel>]\n" "\n" @@ -310,11 +312,11 @@ msgstr "" " vaadittu vain jos viestiä ei lähetetä kanavalla itsellään.\n" " " -#: plugin.py:556 +#: plugin.py:613 msgid "I am currently not announcing any feeds." msgstr "Minä en tällä hetkellä kuuluta yhtään syötettä." -#: plugin.py:561 +#: plugin.py:618 msgid "" "[<channel>] <name|url> [<name|url> ...]\n" "\n" @@ -336,12 +338,12 @@ msgstr "" " viestiä ei lähetetä kanavalla itsellään.\n" " " -#: plugin.py:572 +#: plugin.py:629 #, fuzzy msgid "These feeds are unknown: %L" msgstr "Nämä syötteet ovat tuntemattomia: %L" -#: plugin.py:593 +#: plugin.py:650 msgid "" "[<channel>] <name|url> [<name|url> ...]\n" "\n" @@ -363,7 +365,7 @@ msgstr "" " ei lähetetä kanavalla itsellään.\n" " " -#: plugin.py:618 +#: plugin.py:675 msgid "" "<name|url>\n" "\n" @@ -373,7 +375,7 @@ msgid "" " " msgstr "" -#: plugin.py:642 +#: plugin.py:699 #, fuzzy msgid "" "<name|url> [<number of headlines>]\n" @@ -389,15 +391,15 @@ msgstr "" "otsikkoa.\n" " " -#: plugin.py:658 +#: plugin.py:715 msgid "Couldn't get RSS feed." msgstr "RSS syötettä ei pystytty hakemaan." -#: plugin.py:661 +#: plugin.py:718 msgid " Parser error: " msgstr "" -#: plugin.py:677 +#: plugin.py:736 msgid "" "<url|feed>\n" "\n" @@ -411,20 +413,20 @@ msgstr "" " URL, kuvauksen, ja viimeisen päivityksen, jos saatavilla.\n" " " -#: plugin.py:692 +#: plugin.py:751 msgid "I couldn't retrieve that RSS feed." msgstr "En voinut noutaa tuota RSS syötettä." -#: plugin.py:700 +#: plugin.py:759 #, fuzzy msgid "time unavailable" msgstr "aika ei ole saatavilla" -#: plugin.py:701 plugin.py:702 plugin.py:703 +#: plugin.py:760 plugin.py:761 plugin.py:762 msgid "unavailable" msgstr "ei saatavilla" -#: plugin.py:705 +#: plugin.py:764 msgid "Title: %s; URL: %u; Description: %s; Last updated: %s." msgstr "Otsikko: %s; URL: %u; Kuvaus: %s; Viimeeksi päivitetty: %s." @@ -441,8 +443,8 @@ msgstr "Otsikko: %s; URL: %u; Kuvaus: %s; Viimeeksi päivitetty: %s." #~ "kuuluttamiseen\n" #~ " kanavalla, ja hakemaan RSS syötteen uusimmat otsikot komennon " #~ "kautta. Käytä\n" -#~ " \"add\" komentoa lisätäksesi syötteitä tähän lisäosaan ja \"announce" -#~ "\"\n" +#~ " \"add\" komentoa lisätäksesi syötteitä tähän lisäosaan ja " +#~ "\"announce\"\n" #~ " komentoa määrittämään mitkä syötteet pitäisi kuuluttaa annetulla " #~ "kanavalla." diff --git a/plugins/RSS/locales/fr.po b/plugins/RSS/locales/fr.po index 50a169ce7..a361d8b08 100644 --- a/plugins/RSS/locales/fr.po +++ b/plugins/RSS/locales/fr.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: Limnoria\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: Limnoria <progval@gmail.com>\n" @@ -41,22 +41,24 @@ msgid "" " manually. In addition to fields defined by feedparser ($published\n" " (the entry date), $title, $link, $description, $id, etc.), the " "following\n" -" variables can be used: $feed_name, $date (parsed date, as defined in\n" +" variables can be used: $feed_name (the configured name)\n" +" $feed_title/$feed_subtitle/$feed_author/$feed_language/$feed_link,\n" +" $date (parsed date, as defined in\n" " supybot.reply.format.time)" msgstr "" -#: config.py:74 +#: config.py:76 msgid "News from $feed_name: $title <$link>" msgstr "" -#: config.py:75 +#: config.py:77 msgid "" "The format the bot will use for displaying headlines of a RSS feed\n" " that is announced. See supybot.plugins.RSS.format for the available\n" " variables." msgstr "" -#: config.py:83 +#: config.py:85 msgid "" "Determines which RSS feeds\n" " should be announced in the channel; valid input is a list of strings\n" @@ -66,7 +68,7 @@ msgstr "" "est une liste de chaînes (des flux enregistrés ou des URLs de flux RSS), " "séparées par des espaces." -#: config.py:87 +#: config.py:89 msgid "" "Indicates how many seconds the bot will\n" " wait between retrieving RSS feeds; requests made within this period " @@ -76,7 +78,7 @@ msgstr "" "Détermine le temps (en secondes) entre deux rafraichissement des flux RSS. " "Durant cette période, les flux seront mis en cache." -#: config.py:91 +#: config.py:93 #, fuzzy msgid "" "Determines whether feed items should be\n" @@ -87,19 +89,19 @@ msgstr "" "Détermine si les éléments du flux doivent être triés selon la date de leur " "mise à jour ou si ils doivent être conservés dans l'ordre original du flux." -#: config.py:95 +#: config.py:97 msgid "" "Determines whether announces will be sent\n" " as notices instead of privmsgs." msgstr "" -#: config.py:98 +#: config.py:100 msgid "" "Indicates how many new news entries may\n" " be sent at the same time. Extra entries will be discarded." msgstr "" -#: config.py:104 +#: config.py:106 msgid "" "Indicates how many headlines an rss feed\n" " will output by default, if no number is provided." @@ -107,7 +109,7 @@ msgstr "" "Indique combien d'éléments un flux rss affichera par défaut, si aucun nombre " "n'est donné." -#: config.py:107 +#: config.py:109 msgid "" "Indicates how many headlines an rss feed\n" " will output when it is first added to announce for a channel." @@ -115,7 +117,7 @@ msgstr "" "Indique combien d'éléments un flux rss affichera lorsque qu'il vient d'être " "configuré pour être annoncé sur le salon." -#: config.py:110 +#: config.py:112 msgid "" "Space separated list of \n" " strings, lets you filter headlines to those containing one or more " @@ -125,7 +127,7 @@ msgstr "" "Liste séparée par des espaces de chaînes, qui vous permet de filtrer les " "éléments par liste blanche." -#: config.py:114 +#: config.py:116 msgid "" "Space separated list of \n" " strings, lets you filter headlines to those not containing any items\n" @@ -134,19 +136,19 @@ msgstr "" "Liste séparée par des espaces de chaînes, qui vous permet de filtrer les " "éléments par liste noire." -#: config.py:127 +#: config.py:129 msgid "" "Feed-specific format. Defaults to\n" " supybot.plugins.RSS.format if empty." msgstr "" -#: config.py:130 +#: config.py:132 msgid "" "Feed-specific announce format.\n" " Defaults to supybot.plugins.RSS.announceFormat if empty." msgstr "" -#: config.py:133 +#: config.py:135 msgid "" "If set to a non-zero\n" " value, overrides supybot.plugins.RSS.waitPeriod for this\n" @@ -174,8 +176,8 @@ msgid "" " This plugin is useful both for announcing updates to RSS feeds in a\n" " channel, and for retrieving the headlines of RSS feeds via command. " "Use\n" -" the \"add\" command to add feeds to this plugin, and use the \"announce" -"\"\n" +" the \"add\" command to add feeds to this plugin, and use the " +"\"announce\"\n" " command to determine what feeds should be announced in a given channel.\n" "\n" " Basic usage\n" @@ -224,7 +226,7 @@ msgstr "" msgid "I already have a feed with that URL named %s." msgstr "" -#: plugin.py:508 +#: plugin.py:565 msgid "" "<name> <url>\n" "\n" @@ -237,7 +239,7 @@ msgstr "" "Ajoute un commande à ce plugin qui permet de regarder le flux situé à " "l'<url>." -#: plugin.py:521 +#: plugin.py:578 msgid "" "<name>\n" "\n" @@ -249,11 +251,11 @@ msgstr "" "\n" "Supprime le flux des flux qui peuvent être lus grâce à une commande." -#: plugin.py:528 +#: plugin.py:585 msgid "That's not a valid RSS feed command name." msgstr "Ce n'est pas une commande de flux RSS valide" -#: plugin.py:547 +#: plugin.py:604 msgid "" "[<channel>]\n" "\n" @@ -266,11 +268,11 @@ msgstr "" "Retourne la liste des flux annoncés sur le <canal>. <canal> n'est nécessaire " "que si le message n'est pas envoyé sur le canal lui-même." -#: plugin.py:556 +#: plugin.py:613 msgid "I am currently not announcing any feeds." msgstr "Je n'annonce actuellement aucun flux." -#: plugin.py:561 +#: plugin.py:618 msgid "" "[<channel>] <name|url> [<name|url> ...]\n" "\n" @@ -289,11 +291,11 @@ msgstr "" "l'<url> dans le cas contraire. <canal> n'est nécessaire que si le message " "n'est pas envoyé sur le canal lui-même." -#: plugin.py:572 +#: plugin.py:629 msgid "These feeds are unknown: %L" msgstr "" -#: plugin.py:593 +#: plugin.py:650 msgid "" "[<channel>] <name|url> [<name|url> ...]\n" "\n" @@ -312,7 +314,7 @@ msgstr "" "l'<url> dans le cas contraire. <canal> n'est nécessaire que si le message " "n'est pas envoyé sur le canal lui-même." -#: plugin.py:618 +#: plugin.py:675 msgid "" "<name|url>\n" "\n" @@ -322,7 +324,7 @@ msgid "" " " msgstr "" -#: plugin.py:642 +#: plugin.py:699 #, fuzzy msgid "" "<name|url> [<number of headlines>]\n" @@ -336,15 +338,15 @@ msgstr "" "Récupère le titre des éléments du flux RSS donné. si le <nombre de lignes> " "est donné, ne retourne que ce nombre de lignes d'en-tête." -#: plugin.py:658 +#: plugin.py:715 msgid "Couldn't get RSS feed." msgstr "Ne peut récupérer le flux RSS." -#: plugin.py:661 +#: plugin.py:718 msgid " Parser error: " msgstr "" -#: plugin.py:677 +#: plugin.py:736 msgid "" "<url|feed>\n" "\n" @@ -357,19 +359,19 @@ msgstr "" "Retourne des informations sur le flux RSS donné : le titre, l'URL, la " "description, et la dernière mise à jour." -#: plugin.py:692 +#: plugin.py:751 msgid "I couldn't retrieve that RSS feed." msgstr "Je ne peux récupérer ce flux RSS." -#: plugin.py:700 +#: plugin.py:759 msgid "time unavailable" msgstr "" -#: plugin.py:701 plugin.py:702 plugin.py:703 +#: plugin.py:760 plugin.py:761 plugin.py:762 msgid "unavailable" msgstr "" -#: plugin.py:705 +#: plugin.py:764 msgid "Title: %s; URL: %u; Description: %s; Last updated: %s." msgstr "Titre : %s , URL : %u ; description : %s ; dernière mise à jour : %s." @@ -431,5 +433,6 @@ msgstr "Titre : %s , URL : %u ; description : %s ; dernière mise à jour : %s." #~ msgstr "" #~ "Ce plugin est utile pour annoncer des flux RSS sur un canal, et pour " #~ "récupérer les en-tête des flux RSS via une commande. Utilisez la commande " -#~ "\"add\" pour ajouter des flux au plugin, et utilisez la commande \"annonce" -#~ "\" pour détermine quels flux pourront être annoncés sur un canal donné." +#~ "\"add\" pour ajouter des flux au plugin, et utilisez la commande " +#~ "\"annonce\" pour détermine quels flux pourront être annoncés sur un canal " +#~ "donné." diff --git a/plugins/RSS/locales/hu.po b/plugins/RSS/locales/hu.po index 4f9f2ef97..0efc9223d 100644 --- a/plugins/RSS/locales/hu.po +++ b/plugins/RSS/locales/hu.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: Limnoria RSS\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2014-05-10 23:46+0200\n" "Last-Translator: nyuszika7h <nyuszika7h@outlook.com>\n" "Language-Team: \n" @@ -45,22 +45,24 @@ msgid "" " manually. In addition to fields defined by feedparser ($published\n" " (the entry date), $title, $link, $description, $id, etc.), the " "following\n" -" variables can be used: $feed_name, $date (parsed date, as defined in\n" +" variables can be used: $feed_name (the configured name)\n" +" $feed_title/$feed_subtitle/$feed_author/$feed_language/$feed_link,\n" +" $date (parsed date, as defined in\n" " supybot.reply.format.time)" msgstr "" -#: config.py:74 +#: config.py:76 msgid "News from $feed_name: $title <$link>" msgstr "" -#: config.py:75 +#: config.py:77 msgid "" "The format the bot will use for displaying headlines of a RSS feed\n" " that is announced. See supybot.plugins.RSS.format for the available\n" " variables." msgstr "" -#: config.py:83 +#: config.py:85 msgid "" "Determines which RSS feeds\n" " should be announced in the channel; valid input is a list of strings\n" @@ -71,7 +73,7 @@ msgstr "" "hírcsatornák vagy RSS hírcsatorna hivatkozások) szóközzel elválasztott " "listája." -#: config.py:87 +#: config.py:89 msgid "" "Indicates how many seconds the bot will\n" " wait between retrieving RSS feeds; requests made within this period " @@ -82,7 +84,7 @@ msgstr "" "az ebben az időszakban végrehajtott kérések gyorsítótárazott eredményeket " "adnak vissza." -#: config.py:91 +#: config.py:93 msgid "" "Determines whether feed items should be\n" " sorted by their publication/update timestamp or kept in the same order " @@ -90,31 +92,31 @@ msgid "" " they appear in a feed." msgstr "" -#: config.py:95 +#: config.py:97 msgid "" "Determines whether announces will be sent\n" " as notices instead of privmsgs." msgstr "" -#: config.py:98 +#: config.py:100 msgid "" "Indicates how many new news entries may\n" " be sent at the same time. Extra entries will be discarded." msgstr "" -#: config.py:104 +#: config.py:106 msgid "" "Indicates how many headlines an rss feed\n" " will output by default, if no number is provided." msgstr "" -#: config.py:107 +#: config.py:109 msgid "" "Indicates how many headlines an rss feed\n" " will output when it is first added to announce for a channel." msgstr "" -#: config.py:110 +#: config.py:112 msgid "" "Space separated list of \n" " strings, lets you filter headlines to those containing one or more " @@ -122,26 +124,26 @@ msgid "" " in this whitelist." msgstr "" -#: config.py:114 +#: config.py:116 msgid "" "Space separated list of \n" " strings, lets you filter headlines to those not containing any items\n" " in this blacklist." msgstr "" -#: config.py:127 +#: config.py:129 msgid "" "Feed-specific format. Defaults to\n" " supybot.plugins.RSS.format if empty." msgstr "" -#: config.py:130 +#: config.py:132 msgid "" "Feed-specific announce format.\n" " Defaults to supybot.plugins.RSS.announceFormat if empty." msgstr "" -#: config.py:133 +#: config.py:135 msgid "" "If set to a non-zero\n" " value, overrides supybot.plugins.RSS.waitPeriod for this\n" @@ -169,8 +171,8 @@ msgid "" " This plugin is useful both for announcing updates to RSS feeds in a\n" " channel, and for retrieving the headlines of RSS feeds via command. " "Use\n" -" the \"add\" command to add feeds to this plugin, and use the \"announce" -"\"\n" +" the \"add\" command to add feeds to this plugin, and use the " +"\"announce\"\n" " command to determine what feeds should be announced in a given channel.\n" "\n" " Basic usage\n" @@ -219,7 +221,7 @@ msgstr "" msgid "I already have a feed with that URL named %s." msgstr "" -#: plugin.py:508 +#: plugin.py:565 msgid "" "<name> <url>\n" "\n" @@ -232,7 +234,7 @@ msgstr "" "Hozzáad egy parancsot ehhez a bővítményhez, amely le fogja kérdezni az RSS " "hírcsatornát a megadott hivatkozáson." -#: plugin.py:521 +#: plugin.py:578 msgid "" "<name>\n" "\n" @@ -244,11 +246,11 @@ msgstr "" "\n" "Eltávolítja a <név> RSS hírcsatornáinak lekérdezéséhez a bővítményből." -#: plugin.py:528 +#: plugin.py:585 msgid "That's not a valid RSS feed command name." msgstr "Ez nem egy érvényes RSS hírcsatorna parancsnév." -#: plugin.py:547 +#: plugin.py:604 msgid "" "[<channel>]\n" "\n" @@ -261,11 +263,11 @@ msgstr "" "Kiírja a <csatorna>-n bejelentett hírcsatornákat. <csatorna> csak akkor " "szükséges, ha az üzenet nem a csatornában van elküldve." -#: plugin.py:556 +#: plugin.py:613 msgid "I am currently not announcing any feeds." msgstr "Jelenleg nem jelentek be semmilyen hírcsatornát." -#: plugin.py:561 +#: plugin.py:618 msgid "" "[<channel>] <name|url> [<name|url> ...]\n" "\n" @@ -284,11 +286,11 @@ msgstr "" "hírcsatornák nevei és az RSS hírcsatornák hivatkozásai. <csatorna> csak " "akkor szükséges, ha az üzenet nem a csatornában van elküldve." -#: plugin.py:572 +#: plugin.py:629 msgid "These feeds are unknown: %L" msgstr "" -#: plugin.py:593 +#: plugin.py:650 msgid "" "[<channel>] <name|url> [<name|url> ...]\n" "\n" @@ -307,7 +309,7 @@ msgstr "" "regisztrált hírcsatornák nevei és az RSS hírcsatornák hivatkozásai. " "<csatorna> csak akkor szükséges, ha az üzenet nem a csatornában van elküldve." -#: plugin.py:618 +#: plugin.py:675 msgid "" "<name|url>\n" "\n" @@ -317,7 +319,7 @@ msgid "" " " msgstr "" -#: plugin.py:642 +#: plugin.py:699 #, fuzzy msgid "" "<name|url> [<number of headlines>]\n" @@ -331,15 +333,15 @@ msgstr "" "Lekérdezi a főcímeket a megadott RSS hírcsatornából. Ha <főcímek száma> meg " "van adva, csak annyi főcímet ír ki." -#: plugin.py:658 +#: plugin.py:715 msgid "Couldn't get RSS feed." msgstr "Nem sikerült elérni az RSS hírcsatornát." -#: plugin.py:661 +#: plugin.py:718 msgid " Parser error: " msgstr "" -#: plugin.py:677 +#: plugin.py:736 msgid "" "<url|feed>\n" "\n" @@ -352,19 +354,19 @@ msgstr "" "Információt ír ki a megadott RSS hírcsatornáról, név szerint a címet, a " "hivatkozást, a leírást és a legutóbbi frissítés idejét, ha elérhető." -#: plugin.py:692 +#: plugin.py:751 msgid "I couldn't retrieve that RSS feed." msgstr "Nem tudtam lekérdezni a megadott RSS hírcsatornát." -#: plugin.py:700 +#: plugin.py:759 msgid "time unavailable" msgstr "" -#: plugin.py:701 plugin.py:702 plugin.py:703 +#: plugin.py:760 plugin.py:761 plugin.py:762 msgid "unavailable" msgstr "" -#: plugin.py:705 +#: plugin.py:764 msgid "Title: %s; URL: %u; Description: %s; Last updated: %s." msgstr "Cím: %s; Hivatkozás: %u; Leírás: %s; Legutóbbi frissítés: %s." diff --git a/plugins/RSS/locales/it.po b/plugins/RSS/locales/it.po index d78156aab..d813c0bd0 100644 --- a/plugins/RSS/locales/it.po +++ b/plugins/RSS/locales/it.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: Limnoria\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2012-06-03 04:49+0200\n" "Last-Translator: skizzhg <skizzhg@gmx.com>\n" "Language-Team: Italian <skizzhg@gmx.com>\n" @@ -38,22 +38,24 @@ msgid "" " manually. In addition to fields defined by feedparser ($published\n" " (the entry date), $title, $link, $description, $id, etc.), the " "following\n" -" variables can be used: $feed_name, $date (parsed date, as defined in\n" +" variables can be used: $feed_name (the configured name)\n" +" $feed_title/$feed_subtitle/$feed_author/$feed_language/$feed_link,\n" +" $date (parsed date, as defined in\n" " supybot.reply.format.time)" msgstr "" -#: config.py:74 +#: config.py:76 msgid "News from $feed_name: $title <$link>" msgstr "" -#: config.py:75 +#: config.py:77 msgid "" "The format the bot will use for displaying headlines of a RSS feed\n" " that is announced. See supybot.plugins.RSS.format for the available\n" " variables." msgstr "" -#: config.py:83 +#: config.py:85 msgid "" "Determines which RSS feeds\n" " should be announced in the channel; valid input is a list of strings\n" @@ -63,7 +65,7 @@ msgstr "" "elenco di stringhe\n" " (sia di feed registrati sia di URL di feed) separate da spazi." -#: config.py:87 +#: config.py:89 msgid "" "Indicates how many seconds the bot will\n" " wait between retrieving RSS feeds; requests made within this period " @@ -74,7 +76,7 @@ msgstr "" "effettuate\n" " entro questo periodo verranno memorizzate nella cache." -#: config.py:91 +#: config.py:93 #, fuzzy msgid "" "Determines whether feed items should be\n" @@ -86,31 +88,31 @@ msgstr "" "aggiornamento\n" " o mantenuti nello stesso ordine con il quale appaiono." -#: config.py:95 +#: config.py:97 msgid "" "Determines whether announces will be sent\n" " as notices instead of privmsgs." msgstr "" -#: config.py:98 +#: config.py:100 msgid "" "Indicates how many new news entries may\n" " be sent at the same time. Extra entries will be discarded." msgstr "" -#: config.py:104 +#: config.py:106 msgid "" "Indicates how many headlines an rss feed\n" " will output by default, if no number is provided." msgstr "" -#: config.py:107 +#: config.py:109 msgid "" "Indicates how many headlines an rss feed\n" " will output when it is first added to announce for a channel." msgstr "" -#: config.py:110 +#: config.py:112 msgid "" "Space separated list of \n" " strings, lets you filter headlines to those containing one or more " @@ -118,26 +120,26 @@ msgid "" " in this whitelist." msgstr "" -#: config.py:114 +#: config.py:116 msgid "" "Space separated list of \n" " strings, lets you filter headlines to those not containing any items\n" " in this blacklist." msgstr "" -#: config.py:127 +#: config.py:129 msgid "" "Feed-specific format. Defaults to\n" " supybot.plugins.RSS.format if empty." msgstr "" -#: config.py:130 +#: config.py:132 msgid "" "Feed-specific announce format.\n" " Defaults to supybot.plugins.RSS.announceFormat if empty." msgstr "" -#: config.py:133 +#: config.py:135 msgid "" "If set to a non-zero\n" " value, overrides supybot.plugins.RSS.waitPeriod for this\n" @@ -165,8 +167,8 @@ msgid "" " This plugin is useful both for announcing updates to RSS feeds in a\n" " channel, and for retrieving the headlines of RSS feeds via command. " "Use\n" -" the \"add\" command to add feeds to this plugin, and use the \"announce" -"\"\n" +" the \"add\" command to add feeds to this plugin, and use the " +"\"announce\"\n" " command to determine what feeds should be announced in a given channel.\n" "\n" " Basic usage\n" @@ -215,7 +217,7 @@ msgstr "" msgid "I already have a feed with that URL named %s." msgstr "" -#: plugin.py:508 +#: plugin.py:565 msgid "" "<name> <url>\n" "\n" @@ -229,7 +231,7 @@ msgstr "" "specificato.\n" " " -#: plugin.py:521 +#: plugin.py:578 msgid "" "<name>\n" "\n" @@ -242,11 +244,11 @@ msgstr "" " Rimuove il comando per cercare feed RSS con <nome>.\n" " " -#: plugin.py:528 +#: plugin.py:585 msgid "That's not a valid RSS feed command name." msgstr "Questo non è un comando di feed RSS valido." -#: plugin.py:547 +#: plugin.py:604 msgid "" "[<channel>]\n" "\n" @@ -262,11 +264,11 @@ msgstr "" "stesso.\n" " " -#: plugin.py:556 +#: plugin.py:613 msgid "I am currently not announcing any feeds." msgstr "Attualmente non sto annunciando alcun feed." -#: plugin.py:561 +#: plugin.py:618 msgid "" "[<channel>] <name|url> [<name|url> ...]\n" "\n" @@ -288,11 +290,11 @@ msgstr "" "canale stesso.\n" " " -#: plugin.py:572 +#: plugin.py:629 msgid "These feeds are unknown: %L" msgstr "" -#: plugin.py:593 +#: plugin.py:650 msgid "" "[<channel>] <name|url> [<name|url> ...]\n" "\n" @@ -314,7 +316,7 @@ msgstr "" "canale stesso.\n" " " -#: plugin.py:618 +#: plugin.py:675 msgid "" "<name|url>\n" "\n" @@ -324,7 +326,7 @@ msgid "" " " msgstr "" -#: plugin.py:642 +#: plugin.py:699 #, fuzzy msgid "" "<name|url> [<number of headlines>]\n" @@ -339,15 +341,15 @@ msgstr "" " Se <numero di titoli> è fornito, restituisce solo quella quantità.\n" " " -#: plugin.py:658 +#: plugin.py:715 msgid "Couldn't get RSS feed." msgstr "Impossibile recuperare il feed RSS." -#: plugin.py:661 +#: plugin.py:718 msgid " Parser error: " msgstr "" -#: plugin.py:677 +#: plugin.py:736 msgid "" "<url|feed>\n" "\n" @@ -361,19 +363,19 @@ msgstr "" " URL, descrizione e data dell'ultimo aggiornamento.\n" " " -#: plugin.py:692 +#: plugin.py:751 msgid "I couldn't retrieve that RSS feed." msgstr "Non riesco a recuperare questo feed RSS." -#: plugin.py:700 +#: plugin.py:759 msgid "time unavailable" msgstr "" -#: plugin.py:701 plugin.py:702 plugin.py:703 +#: plugin.py:760 plugin.py:761 plugin.py:762 msgid "unavailable" msgstr "" -#: plugin.py:705 +#: plugin.py:764 msgid "Title: %s; URL: %u; Description: %s; Last updated: %s." msgstr "Titolo: %s; URL: %u; Descrizione: %s; Ultimo aggiornamento: %s." diff --git a/plugins/RSS/messages.pot b/plugins/RSS/messages.pot index 7279a4e59..9c86b9e77 100644 --- a/plugins/RSS/messages.pot +++ b/plugins/RSS/messages.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -42,93 +42,95 @@ msgid "" " will use for displaying headlines of a RSS feed that is triggered\n" " manually. In addition to fields defined by feedparser ($published\n" " (the entry date), $title, $link, $description, $id, etc.), the following\n" -" variables can be used: $feed_name, $date (parsed date, as defined in\n" +" variables can be used: $feed_name (the configured name)\n" +" $feed_title/$feed_subtitle/$feed_author/$feed_language/$feed_link,\n" +" $date (parsed date, as defined in\n" " supybot.reply.format.time)" msgstr "" -#: config.py:74 +#: config.py:76 msgid "News from $feed_name: $title <$link>" msgstr "" -#: config.py:75 +#: config.py:77 msgid "" "The format the bot will use for displaying headlines of a RSS feed\n" " that is announced. See supybot.plugins.RSS.format for the available\n" " variables." msgstr "" -#: config.py:83 +#: config.py:85 msgid "" "Determines which RSS feeds\n" " should be announced in the channel; valid input is a list of strings\n" " (either registered RSS feeds or RSS feed URLs) separated by spaces." msgstr "" -#: config.py:87 +#: config.py:89 msgid "" "Indicates how many seconds the bot will\n" " wait between retrieving RSS feeds; requests made within this period will\n" " return cached results." msgstr "" -#: config.py:91 +#: config.py:93 msgid "" "Determines whether feed items should be\n" " sorted by their publication/update timestamp or kept in the same order as\n" " they appear in a feed." msgstr "" -#: config.py:95 +#: config.py:97 msgid "" "Determines whether announces will be sent\n" " as notices instead of privmsgs." msgstr "" -#: config.py:98 +#: config.py:100 msgid "" "Indicates how many new news entries may\n" " be sent at the same time. Extra entries will be discarded." msgstr "" -#: config.py:104 +#: config.py:106 msgid "" "Indicates how many headlines an rss feed\n" " will output by default, if no number is provided." msgstr "" -#: config.py:107 +#: config.py:109 msgid "" "Indicates how many headlines an rss feed\n" " will output when it is first added to announce for a channel." msgstr "" -#: config.py:110 +#: config.py:112 msgid "" "Space separated list of \n" " strings, lets you filter headlines to those containing one or more items\n" " in this whitelist." msgstr "" -#: config.py:114 +#: config.py:116 msgid "" "Space separated list of \n" " strings, lets you filter headlines to those not containing any items\n" " in this blacklist." msgstr "" -#: config.py:127 +#: config.py:129 msgid "" "Feed-specific format. Defaults to\n" " supybot.plugins.RSS.format if empty." msgstr "" -#: config.py:130 +#: config.py:132 msgid "" "Feed-specific announce format.\n" " Defaults to supybot.plugins.RSS.announceFormat if empty." msgstr "" -#: config.py:133 +#: config.py:135 msgid "" "If set to a non-zero\n" " value, overrides supybot.plugins.RSS.waitPeriod for this\n" @@ -203,7 +205,7 @@ msgstr "" msgid "I already have a feed with that URL named %s." msgstr "" -#: plugin.py:508 +#: plugin.py:565 #, docstring msgid "" "<name> <url>\n" @@ -213,7 +215,7 @@ msgid "" " " msgstr "" -#: plugin.py:521 +#: plugin.py:578 #, docstring msgid "" "<name>\n" @@ -223,11 +225,11 @@ msgid "" " " msgstr "" -#: plugin.py:528 +#: plugin.py:585 msgid "That's not a valid RSS feed command name." msgstr "" -#: plugin.py:547 +#: plugin.py:604 #, docstring msgid "" "[<channel>]\n" @@ -237,11 +239,11 @@ msgid "" " " msgstr "" -#: plugin.py:556 +#: plugin.py:613 msgid "I am currently not announcing any feeds." msgstr "" -#: plugin.py:561 +#: plugin.py:618 #, docstring msgid "" "[<channel>] <name|url> [<name|url> ...]\n" @@ -253,11 +255,11 @@ msgid "" " " msgstr "" -#: plugin.py:572 +#: plugin.py:629 msgid "These feeds are unknown: %L" msgstr "" -#: plugin.py:593 +#: plugin.py:650 #, docstring msgid "" "[<channel>] <name|url> [<name|url> ...]\n" @@ -269,7 +271,7 @@ msgid "" " " msgstr "" -#: plugin.py:618 +#: plugin.py:675 #, docstring msgid "" "<name|url>\n" @@ -279,7 +281,7 @@ msgid "" " " msgstr "" -#: plugin.py:642 +#: plugin.py:699 #, docstring msgid "" "<name|url> [<number of headlines>]\n" @@ -289,15 +291,15 @@ msgid "" " " msgstr "" -#: plugin.py:658 +#: plugin.py:715 msgid "Couldn't get RSS feed." msgstr "" -#: plugin.py:661 +#: plugin.py:718 msgid " Parser error: " msgstr "" -#: plugin.py:677 +#: plugin.py:736 #, docstring msgid "" "<url|feed>\n" @@ -307,19 +309,19 @@ msgid "" " " msgstr "" -#: plugin.py:692 +#: plugin.py:751 msgid "I couldn't retrieve that RSS feed." msgstr "" -#: plugin.py:700 +#: plugin.py:759 msgid "time unavailable" msgstr "" -#: plugin.py:701 plugin.py:702 plugin.py:703 +#: plugin.py:760 plugin.py:761 plugin.py:762 msgid "unavailable" msgstr "" -#: plugin.py:705 +#: plugin.py:764 msgid "Title: %s; URL: %u; Description: %s; Last updated: %s." msgstr "" diff --git a/plugins/Relay/locales/fi.po b/plugins/Relay/locales/fi.po index b4025869f..b0f0df23e 100644 --- a/plugins/Relay/locales/fi.po +++ b/plugins/Relay/locales/fi.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: Relay plugin for Limnoria\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2014-12-20 12:17+0200\n" "Last-Translator: Mikaela Suomalainen <mikaela.suomalainen@outlook.com>\n" "Language-Team: \n" @@ -29,7 +29,7 @@ msgstr "Minkä kanavien? Erota ne välilyönnillä." msgid "Would you like to use color to distinguish between nicks?" msgstr "Haluaisitko botin käyttävän värejä erottamaan nimimerkit toisistaan?" -#: config.py:60 +#: config.py:62 msgid "" "Determines whether the bot will color relayed\n" " PRIVMSGs so as to make the messages easier to read." @@ -37,7 +37,7 @@ msgstr "" "Määrittää värjääkö botti välitetyt\n" " PRIVMSG:eet, jotta viestit olisivat helpommin luettavia." -#: config.py:63 +#: config.py:65 msgid "" "Determines whether the bot will synchronize\n" " topics between networks in the channels it relays." @@ -45,7 +45,7 @@ msgstr "" "Määrittää synkronoiko botti\n" " aiheet kanavilla, joita se välittää kaikkiin verkkoihin." -#: config.py:66 +#: config.py:68 msgid "" "Determines whether the bot will relay the\n" " hostmask of the person joining or parting the channel when they join\n" @@ -55,7 +55,7 @@ msgstr "" " liittyvän tai poistuvan henkilön hostmaskin, hänen liittyessään/" "poistuessaan." -#: config.py:70 +#: config.py:72 msgid "" "Determines whether the bot will include the\n" " network in relayed PRIVMSGs; if you're only relaying between two " @@ -66,7 +66,7 @@ msgstr "" " verkon välitetyissä PRIVMSG:issä; jos välität vain kahta verkkoa,\n" " se on aika tarpeeton, ja saatat tahtoa säästää tilaa." -#: config.py:74 +#: config.py:76 msgid "" "Determines whether the bot will detect other\n" " bots relaying and respond by kickbanning them." @@ -75,7 +75,7 @@ msgstr "" " välittävät botit ja vastaa potkimalla ne ja antamalla niille " "porttikiellon." -#: config.py:77 +#: config.py:79 msgid "" "Determines which channels the bot\n" " will relay in." @@ -83,7 +83,7 @@ msgstr "" "Määrittää mitä kanavia botti\n" " välittää." -#: config.py:80 +#: config.py:82 #, fuzzy msgid "" "Determines whether the bot\n" @@ -96,7 +96,7 @@ msgstr "" "joihin\n" " botti on yhdistänyt." -#: config.py:84 +#: config.py:86 msgid "" "Determines what hostmasks will not be relayed on a\n" " channel." @@ -104,7 +104,7 @@ msgstr "" "Määrittää mitä hostmaskeja ei välitetä\n" " kanavalla." -#: config.py:87 +#: config.py:89 msgid "" "Determines whether the bot will used NOTICEs\n" " rather than PRIVMSGs for non-PRIVMSG relay messages (i.e., joins, " diff --git a/plugins/Relay/locales/fr.po b/plugins/Relay/locales/fr.po index 7a09d8b6e..11465a0e8 100644 --- a/plugins/Relay/locales/fr.po +++ b/plugins/Relay/locales/fr.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: Limnoria\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: \n" "Last-Translator: Mikaela Suomalainen <mikaela.suomalainen@outlook.com>\n" "Language-Team: Limnoria <progval@gmail.com>\n" @@ -24,7 +24,7 @@ msgstr "Quels canaux ? Séparez-les par des espaces." msgid "Would you like to use color to distinguish between nicks?" msgstr "Voulez-vous utiliser de la couleur pour distinguer les nicks ?" -#: config.py:60 +#: config.py:62 msgid "" "Determines whether the bot will color relayed\n" " PRIVMSGs so as to make the messages easier to read." @@ -32,7 +32,7 @@ msgstr "" "Détermine si le bot colorera les PRIVMSGs relayez, pour rendre les messages " "plus faciles à lire." -#: config.py:63 +#: config.py:65 msgid "" "Determines whether the bot will synchronize\n" " topics between networks in the channels it relays." @@ -40,7 +40,7 @@ msgstr "" "Détermine si le bot synchronisera les topics entre les réseaux sur les " "canaux qu'il relaye." -#: config.py:66 +#: config.py:68 #, fuzzy msgid "" "Determines whether the bot will relay the\n" @@ -50,7 +50,7 @@ msgstr "" "Détermine si le bot relayera le masque d'hôte d'une personne joignant ou " "partant d'un canal." -#: config.py:70 +#: config.py:72 msgid "" "Determines whether the bot will include the\n" " network in relayed PRIVMSGs; if you're only relaying between two " @@ -61,7 +61,7 @@ msgstr "" "ne relayez qu'entre deux réseaux, ce sera quelque chose de redondant que " "vous pouvez supprimer pour gagner de la place." -#: config.py:74 +#: config.py:76 msgid "" "Determines whether the bot will detect other\n" " bots relaying and respond by kickbanning them." @@ -69,13 +69,13 @@ msgstr "" "Détermine si le bot détectera d'autres bots relayant et y répondra en les " "kickbannissant." -#: config.py:77 +#: config.py:79 msgid "" "Determines which channels the bot\n" " will relay in." msgstr "Détermine sur quels canaux le bot relayera." -#: config.py:80 +#: config.py:82 #, fuzzy msgid "" "Determines whether the bot\n" @@ -86,13 +86,13 @@ msgstr "" "Détermine si le bot rejoindra toujours le(s) canal(aux) qu'il relaye sur " "tous les réseaux auxquels il est connecté." -#: config.py:84 +#: config.py:86 msgid "" "Determines what hostmasks will not be relayed on a\n" " channel." msgstr "Détermine quels masques d'hôte ne seront pas relayés sur un canal." -#: config.py:87 +#: config.py:89 msgid "" "Determines whether the bot will used NOTICEs\n" " rather than PRIVMSGs for non-PRIVMSG relay messages (i.e., joins, " diff --git a/plugins/Relay/locales/it.po b/plugins/Relay/locales/it.po index 9852eec4e..364710f14 100644 --- a/plugins/Relay/locales/it.po +++ b/plugins/Relay/locales/it.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: Limnoria\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2014-05-11 17:50+0200\n" "Last-Translator: Mikaela Suomalainen <mikaela.suomalainen@outlook.com>\n" "Language-Team: Italian <skizzhg@gmx.com>\n" @@ -23,7 +23,7 @@ msgstr "Quali canali? Separali con spazi." msgid "Would you like to use color to distinguish between nicks?" msgstr "Vuoi usare colori per distinguere i nick?" -#: config.py:60 +#: config.py:62 msgid "" "Determines whether the bot will color relayed\n" " PRIVMSGs so as to make the messages easier to read." @@ -31,7 +31,7 @@ msgstr "" "Determina se il bot colorerà i PRIVMSG inoltrati per renderne più semplice " "la lettura." -#: config.py:63 +#: config.py:65 msgid "" "Determines whether the bot will synchronize\n" " topics between networks in the channels it relays." @@ -39,7 +39,7 @@ msgstr "" "Determina se il bot sincronizzerà i topic tra le reti nei canali in cui " "inoltra." -#: config.py:66 +#: config.py:68 #, fuzzy msgid "" "Determines whether the bot will relay the\n" @@ -49,7 +49,7 @@ msgstr "" "Determina se il bot inoltrerà l'hostmask dell'utente che entra o esce dal " "canale." -#: config.py:70 +#: config.py:72 msgid "" "Determines whether the bot will include the\n" " network in relayed PRIVMSGs; if you're only relaying between two " @@ -61,7 +61,7 @@ msgstr "" " tra due sole reti è alquanto ridondante e si preferirà risparmiare " "spazio." -#: config.py:74 +#: config.py:76 msgid "" "Determines whether the bot will detect other\n" " bots relaying and respond by kickbanning them." @@ -69,13 +69,13 @@ msgstr "" "Determina se il bot rileverà altri bot che stanno inoltrando rispondendo con " "un kickban." -#: config.py:77 +#: config.py:79 msgid "" "Determines which channels the bot\n" " will relay in." msgstr "Determina in quale canale il bot inoltrerà i messaggi." -#: config.py:80 +#: config.py:82 #, fuzzy msgid "" "Determines whether the bot\n" @@ -86,13 +86,13 @@ msgstr "" "Determina se il bot entrerà sempre nei canali in cui trasmette per tutte le " "reti a cui è connesso." -#: config.py:84 +#: config.py:86 msgid "" "Determines what hostmasks will not be relayed on a\n" " channel." msgstr "Determina quale hostmask non verrà inoltrata su un canale." -#: config.py:87 +#: config.py:89 msgid "" "Determines whether the bot will used NOTICEs\n" " rather than PRIVMSGs for non-PRIVMSG relay messages (i.e., joins, " diff --git a/plugins/Relay/messages.pot b/plugins/Relay/messages.pot index 68d2bd2d3..a04dc143e 100644 --- a/plugins/Relay/messages.pot +++ b/plugins/Relay/messages.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -27,58 +27,58 @@ msgstr "" msgid "Would you like to use color to distinguish between nicks?" msgstr "" -#: config.py:60 +#: config.py:62 msgid "" "Determines whether the bot will color relayed\n" " PRIVMSGs so as to make the messages easier to read." msgstr "" -#: config.py:63 +#: config.py:65 msgid "" "Determines whether the bot will synchronize\n" " topics between networks in the channels it relays." msgstr "" -#: config.py:66 +#: config.py:68 msgid "" "Determines whether the bot will relay the\n" " hostmask of the person joining or parting the channel when they join\n" " or part." msgstr "" -#: config.py:70 +#: config.py:72 msgid "" "Determines whether the bot will include the\n" " network in relayed PRIVMSGs; if you're only relaying between two networks,\n" " it's somewhat redundant, and you may wish to save the space." msgstr "" -#: config.py:74 +#: config.py:76 msgid "" "Determines whether the bot will detect other\n" " bots relaying and respond by kickbanning them." msgstr "" -#: config.py:77 +#: config.py:79 msgid "" "Determines which channels the bot\n" " will relay in." msgstr "" -#: config.py:80 +#: config.py:82 msgid "" "Determines whether the bot\n" " will always join the channel(s) it relays when connecting to any network.\n" " " msgstr "" -#: config.py:84 +#: config.py:86 msgid "" "Determines what hostmasks will not be relayed on a\n" " channel." msgstr "" -#: config.py:87 +#: config.py:89 msgid "" "Determines whether the bot will used NOTICEs\n" " rather than PRIVMSGs for non-PRIVMSG relay messages (i.e., joins, parts,\n" diff --git a/plugins/Reply/messages.pot b/plugins/Reply/messages.pot index 1195587d6..d1ba6f072 100644 --- a/plugins/Reply/messages.pot +++ b/plugins/Reply/messages.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/plugins/Scheduler/locales/fi.po b/plugins/Scheduler/locales/fi.po index 7e093bcf6..b3d254f1f 100644 --- a/plugins/Scheduler/locales/fi.po +++ b/plugins/Scheduler/locales/fi.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: Scheduler plugin for Limnoria\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2014-12-20 13:38+0200\n" "Last-Translator: Mikaela Suomalainen <mikaela.suomalainen@outlook.com>\n" "Language-Team: \n" @@ -26,16 +26,16 @@ msgstr "" msgid "Makes a function suitable for scheduling from command." msgstr "Tekee toiminnon sopivaksi komennosta ajastamiseen." -#: plugin.py:155 +#: plugin.py:162 #, fuzzy msgid "Makes a function suitable for scheduling text" msgstr "Tekee toiminnon sopivaksi komennosta ajastamiseen." -#: plugin.py:160 +#: plugin.py:167 msgid "Reminder: %s" msgstr "" -#: plugin.py:181 +#: plugin.py:188 msgid "" "<seconds> <command>\n" "\n" @@ -60,28 +60,28 @@ msgstr "" "tuossa esimerkissä.\n" " " -#: plugin.py:191 +#: plugin.py:198 msgid "Event #%i added." msgstr "Tapahtuma #%i lisätty." -#: plugin.py:196 +#: plugin.py:203 msgid "" " <seconds> <text>\n" "\n" " Sets a reminder with string <text> to run <seconds> seconds in the\n" -" future. For example, 'scheduler remind [seconds 30m] \"Hello World" -"\"'\n" +" future. For example, 'scheduler remind [seconds 30m] \"Hello " +"World\"'\n" " will return '<nick> Reminder: Hello World' 30 minutes after being " "set.\n" " " msgstr "" -#: plugin.py:204 +#: plugin.py:211 #, fuzzy msgid "Reminder Event #%i added." msgstr "Tapahtuma #%i lisätty." -#: plugin.py:209 +#: plugin.py:216 msgid "" "<id>\n" "\n" @@ -93,11 +93,11 @@ msgstr "" " Poistaa ajastetun komennon <id> ajastuksesta.\n" " " -#: plugin.py:223 plugin.py:225 +#: plugin.py:230 plugin.py:232 msgid "Invalid event id." msgstr "Viallinen tapahtuma id." -#: plugin.py:244 +#: plugin.py:251 #, fuzzy msgid "" "[--delay <delay>] <name> <seconds> <command>\n" @@ -118,12 +118,12 @@ msgstr "" " poistaa.\n" " " -#: plugin.py:255 +#: plugin.py:262 msgid "There is already an event with that name, please choose another name." msgstr "" "On jo olemassa tapahtuma tuolla nimellä, ole hyvä ja käytä toista nimeä." -#: plugin.py:270 +#: plugin.py:277 msgid "" "takes no arguments\n" "\n" @@ -135,6 +135,6 @@ msgstr "" " Luettelee tällä hetkellä ajastetut komennot.\n" " " -#: plugin.py:290 +#: plugin.py:297 msgid "There are currently no scheduled commands." msgstr "Tällä hetkellä ei ole ajastettuja komentoja." diff --git a/plugins/Scheduler/locales/fr.po b/plugins/Scheduler/locales/fr.po index ca1f7d34e..23e13bca2 100644 --- a/plugins/Scheduler/locales/fr.po +++ b/plugins/Scheduler/locales/fr.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: Limnoria\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: \n" "Last-Translator: Valentin Lorentz <progval@gmail.com>\n" "Language-Team: Limnoria <progval@gmail.com>\n" @@ -22,17 +22,17 @@ msgid "Makes a function suitable for scheduling from command." msgstr "" "Crée une fonction utilisable pour la programmation à partir d'une commande." -#: plugin.py:155 +#: plugin.py:162 #, fuzzy msgid "Makes a function suitable for scheduling text" msgstr "" "Crée une fonction utilisable pour la programmation à partir d'une commande." -#: plugin.py:160 +#: plugin.py:167 msgid "Reminder: %s" msgstr "" -#: plugin.py:181 +#: plugin.py:188 msgid "" "<seconds> <command>\n" "\n" @@ -53,28 +53,28 @@ msgstr "" "pour être envoyée sur le canal. Faites attention à l'utilisateur des " "guillemets dans cet exemple." -#: plugin.py:191 +#: plugin.py:198 msgid "Event #%i added." msgstr "Évènement #%i ajouté." -#: plugin.py:196 +#: plugin.py:203 msgid "" " <seconds> <text>\n" "\n" " Sets a reminder with string <text> to run <seconds> seconds in the\n" -" future. For example, 'scheduler remind [seconds 30m] \"Hello World" -"\"'\n" +" future. For example, 'scheduler remind [seconds 30m] \"Hello " +"World\"'\n" " will return '<nick> Reminder: Hello World' 30 minutes after being " "set.\n" " " msgstr "" -#: plugin.py:204 +#: plugin.py:211 #, fuzzy msgid "Reminder Event #%i added." msgstr "Évènement #%i ajouté." -#: plugin.py:209 +#: plugin.py:216 msgid "" "<id>\n" "\n" @@ -85,11 +85,11 @@ msgstr "" "\n" "Déprogramme l'évènement programmé d'<id> donné." -#: plugin.py:223 plugin.py:225 +#: plugin.py:230 plugin.py:232 msgid "Invalid event id." msgstr "Id d'évènement invalide." -#: plugin.py:244 +#: plugin.py:251 #, fuzzy msgid "" "[--delay <delay>] <name> <seconds> <command>\n" @@ -109,11 +109,11 @@ msgstr "" "certain nombres de <secondes>, puis dans deux fois ce temps, etc). Le <nom> " "est utilisé pour déprogrammer la commande." -#: plugin.py:255 +#: plugin.py:262 msgid "There is already an event with that name, please choose another name." msgstr "Il y a déjà un évènement avec ce nom, veuillez en choisir un autre." -#: plugin.py:270 +#: plugin.py:277 msgid "" "takes no arguments\n" "\n" @@ -124,6 +124,6 @@ msgstr "" "\n" "Liste tous les évènement actuellement programmés" -#: plugin.py:290 +#: plugin.py:297 msgid "There are currently no scheduled commands." msgstr "Il n'y a actuellement aucune commande programmée." diff --git a/plugins/Scheduler/locales/it.po b/plugins/Scheduler/locales/it.po index 1ed7c8892..422bfee90 100644 --- a/plugins/Scheduler/locales/it.po +++ b/plugins/Scheduler/locales/it.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: Limnoria\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2011-07-31 11:51+0200\n" "Last-Translator: skizzhg <skizzhg@gmx.com>\n" "Language-Team: Italian <skizzhg@gmx.com>\n" @@ -19,17 +19,17 @@ msgid "Makes a function suitable for scheduling from command." msgstr "" "Rende disponibile una funzione per la programmazione a partire da un comando." -#: plugin.py:155 +#: plugin.py:162 #, fuzzy msgid "Makes a function suitable for scheduling text" msgstr "" "Rende disponibile una funzione per la programmazione a partire da un comando." -#: plugin.py:160 +#: plugin.py:167 msgid "Reminder: %s" msgstr "" -#: plugin.py:181 +#: plugin.py:188 msgid "" "<seconds> <command>\n" "\n" @@ -55,28 +55,28 @@ msgstr "" "nell'esempio.\n" " " -#: plugin.py:191 +#: plugin.py:198 msgid "Event #%i added." msgstr "Aggiunto l'evento #%i." -#: plugin.py:196 +#: plugin.py:203 msgid "" " <seconds> <text>\n" "\n" " Sets a reminder with string <text> to run <seconds> seconds in the\n" -" future. For example, 'scheduler remind [seconds 30m] \"Hello World" -"\"'\n" +" future. For example, 'scheduler remind [seconds 30m] \"Hello " +"World\"'\n" " will return '<nick> Reminder: Hello World' 30 minutes after being " "set.\n" " " msgstr "" -#: plugin.py:204 +#: plugin.py:211 #, fuzzy msgid "Reminder Event #%i added." msgstr "Aggiunto l'evento #%i." -#: plugin.py:209 +#: plugin.py:216 msgid "" "<id>\n" "\n" @@ -88,11 +88,11 @@ msgstr "" " Rimuove l'evento programmato tramite l'<id> fornito.\n" " " -#: plugin.py:223 plugin.py:225 +#: plugin.py:230 plugin.py:232 msgid "Invalid event id." msgstr "Id di evento non valido." -#: plugin.py:244 +#: plugin.py:251 #, fuzzy msgid "" "[--delay <delay>] <name> <seconds> <command>\n" @@ -116,11 +116,11 @@ msgstr "" " rimosso dalla programmazione.\n" " " -#: plugin.py:255 +#: plugin.py:262 msgid "There is already an event with that name, please choose another name." msgstr "C'è già un evento con quel nome, scegline un altro." -#: plugin.py:270 +#: plugin.py:277 msgid "" "takes no arguments\n" "\n" @@ -132,6 +132,6 @@ msgstr "" " Elenca gli eventi attualmente programmati.\n" " " -#: plugin.py:290 +#: plugin.py:297 msgid "There are currently no scheduled commands." msgstr "Al momento non ci sono comandi programmati." diff --git a/plugins/Scheduler/messages.pot b/plugins/Scheduler/messages.pot index f32af6af3..961e08cae 100644 --- a/plugins/Scheduler/messages.pot +++ b/plugins/Scheduler/messages.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -25,16 +25,16 @@ msgstr "" msgid "Makes a function suitable for scheduling from command." msgstr "" -#: plugin.py:155 +#: plugin.py:162 #, docstring msgid "Makes a function suitable for scheduling text" msgstr "" -#: plugin.py:160 +#: plugin.py:167 msgid "Reminder: %s" msgstr "" -#: plugin.py:181 +#: plugin.py:188 #, docstring msgid "" "<seconds> <command>\n" @@ -47,11 +47,11 @@ msgid "" " " msgstr "" -#: plugin.py:191 +#: plugin.py:198 msgid "Event #%i added." msgstr "" -#: plugin.py:196 +#: plugin.py:203 #, docstring msgid "" " <seconds> <text>\n" @@ -62,11 +62,11 @@ msgid "" " " msgstr "" -#: plugin.py:204 +#: plugin.py:211 msgid "Reminder Event #%i added." msgstr "" -#: plugin.py:209 +#: plugin.py:216 #, docstring msgid "" "<id>\n" @@ -75,11 +75,11 @@ msgid "" " " msgstr "" -#: plugin.py:223 plugin.py:225 +#: plugin.py:230 plugin.py:232 msgid "Invalid event id." msgstr "" -#: plugin.py:244 +#: plugin.py:251 #, docstring msgid "" "[--delay <delay>] <name> <seconds> <command>\n" @@ -92,11 +92,11 @@ msgid "" " " msgstr "" -#: plugin.py:255 +#: plugin.py:262 msgid "There is already an event with that name, please choose another name." msgstr "" -#: plugin.py:270 +#: plugin.py:277 #, docstring msgid "" "takes no arguments\n" @@ -105,7 +105,7 @@ msgid "" " " msgstr "" -#: plugin.py:290 +#: plugin.py:297 msgid "There are currently no scheduled commands." msgstr "" diff --git a/plugins/SedRegex/messages.pot b/plugins/SedRegex/messages.pot index 56596af78..94ed8876e 100644 --- a/plugins/SedRegex/messages.pot +++ b/plugins/SedRegex/messages.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -36,6 +36,31 @@ msgid "" msgstr "" #: config.py:61 +msgid "$nick meant to say: $replacement" +msgstr "" + +#: config.py:61 +msgid "" +"Sets the format\n" +" string for a message edited by the original\n" +" author. Required fields: $nick (nick of the\n" +" author), $replacement (edited message)" +msgstr "" + +#: config.py:66 +msgid "" +"\n" +" Sets the format string for a message edited by\n" +" another author. Required fields: $nick (nick\n" +" of the original author), $otherNick (nick of\n" +" the editor), $replacement (edited message)" +msgstr "" + +#: config.py:66 +msgid "$otherNick thinks $nick meant to say: $replacement" +msgstr "" + +#: config.py:72 msgid "" "Sets the timeout when processing a single\n" " regexp. The default should be adequate unless\n" @@ -95,15 +120,11 @@ msgstr "" msgid "SedRegex replacer error: %s" msgstr "" -#: plugin.py:242 -msgid "%s meant to say: %s" -msgstr "" - -#: plugin.py:245 +#: plugin.py:248 msgid "SedRegex error: %s" msgstr "" -#: plugin.py:248 +#: plugin.py:251 msgid "SedRegex: Search %r not found in the last %i messages of %s." msgstr "" diff --git a/plugins/Seen/locales/de.po b/plugins/Seen/locales/de.po index 9339746d5..5ebf53a48 100644 --- a/plugins/Seen/locales/de.po +++ b/plugins/Seen/locales/de.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: Supybot\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2012-04-27 15:33+0200\n" "Last-Translator: Mikaela Suomalainen <mikaela.suomalainen@outlook.com>\n" "Language-Team: German <fbesser@gmail.com>\n" @@ -36,46 +36,59 @@ msgstr "" msgid "Not enough non-wildcard characters." msgstr "" -#: plugin.py:198 plugin.py:306 +#: plugin.py:199 +#, fuzzy +msgid "%s was last seen in %s %s ago, and is in the channel now" +msgstr "%s wurde zuletzt in %s vor %s gesehen: %s" + +#: plugin.py:203 plugin.py:328 #, fuzzy msgid "%s was last seen in %s %s ago" msgstr "%s wurde zuletzt in %s vor %s gesehen: %s" -#: plugin.py:204 plugin.py:283 plugin.py:310 +#: plugin.py:209 plugin.py:300 plugin.py:332 msgid "%s: %s" msgstr "" -#: plugin.py:210 +#: plugin.py:216 +msgid "%s (%s ago, and is in the channel now)" +msgstr "" + +#: plugin.py:219 msgid "%s (%s ago)" msgstr "%s (vor %s)" -#: plugin.py:212 +#: plugin.py:221 msgid "%s could be %L" msgstr "%s könnte %L sein" -#: plugin.py:212 +#: plugin.py:221 msgid "or" msgstr "oder" -#: plugin.py:214 +#: plugin.py:223 msgid "I haven't seen anyone matching %s." msgstr "Ich habe niemanden gesehen der auf %s passt." -#: plugin.py:216 plugin.py:313 +#: plugin.py:226 plugin.py:336 +msgid "%s is in the channel right now." +msgstr "" + +#: plugin.py:228 plugin.py:338 msgid "I have not seen %s." msgstr "Ich habe %s nicht gesehn." -#: plugin.py:223 +#: plugin.py:235 #, fuzzy msgid "You must be in %s to use this command." msgstr "Du musst in %s sein, um diesen Befehl zu benutzen." -#: plugin.py:225 +#: plugin.py:237 #, fuzzy msgid "%s must be in %s to use this command." msgstr "Du musst in %s sein, um diesen Befehl zu benutzen." -#: plugin.py:231 +#: plugin.py:243 msgid "" "[<channel>] <nick>\n" "\n" @@ -91,11 +104,11 @@ msgstr "" "sagte. <Kanal> ist nur nötig, falls die Nachricht nicht im Kanal selbst " "gesendet wurde. <Nick> kann * als Platzhalter beinhalten." -#: plugin.py:238 plugin.py:256 +#: plugin.py:250 plugin.py:268 msgid "You've found me!" msgstr "" -#: plugin.py:246 +#: plugin.py:258 msgid "" "[<channel>] [--user <name>] [<nick>]\n" "\n" @@ -119,16 +132,20 @@ msgstr "" "die Zeit ausgegeben als der Benutzer zuletzte Aktiv war im <Kanal>. <Kanal> " "ist nur nötig, falls die Nachricht nicht im Kanal selbst gesendet wurde." -#: plugin.py:280 -#, fuzzy -msgid "Someone was last seen in %s %s ago" -msgstr "Jemand wurde zuletzt in %s gesehen, vor %s: %s" +#: plugin.py:295 +msgid "I couldn't parse the nick of the speaker of the last line." +msgstr "" -#: plugin.py:286 +#: plugin.py:297 +#, fuzzy +msgid "Last seen in %s was %s, %s ago" +msgstr "%s wurde zuletzt in %s vor %s gesehen: %s" + +#: plugin.py:303 msgid "I have never seen anyone." msgstr "Ich habe noch niemals jemanden gesehen." -#: plugin.py:290 +#: plugin.py:307 msgid "" "[<channel>]\n" "\n" @@ -142,7 +159,12 @@ msgstr "" "Gibt das zuletzt gesagte im <Kanal> aus. <Kanal> ist nur nötig, falls die " "Nachricht nicht im Kanal selbst gesendet wurde." -#: plugin.py:317 +#: plugin.py:324 +#, fuzzy +msgid "%s was last seen in %s %s ago and is in the channel now" +msgstr "%s wurde zuletzt in %s vor %s gesehen: %s" + +#: plugin.py:342 msgid "" "[<channel>] <name>\n" "\n" @@ -162,7 +184,7 @@ msgstr "" "dass es jeder Nick sein kann der vom Benutzer <Name> gesehen wurde. <Kanal> " "ist nur nötig, falls die Nachricht nicht im Kanal selbst gesendet wurde." -#: plugin.py:331 +#: plugin.py:356 #, fuzzy msgid "" "[<channel>] [<nick>]\n" @@ -177,18 +199,22 @@ msgstr "" "Gibt die Nachrichten zurück, die seit dem verlassen von <Nick> im Kanal " "gesendet wurden." -#: plugin.py:363 +#: plugin.py:388 msgid "I couldn't find in my history of %s messages where %r last left %s" msgstr "" "Ich konnte in meiner Vergangenheit von %s Nachrichten nichts finden, wo %r " "zuletzt %s verlassen hat." -#: plugin.py:372 +#: plugin.py:397 msgid "Either %s didn't leave, or no messages were sent while %s was gone." msgstr "" "Entweder ist %s nicht gegangen, oder keine Nachrichten wurde gesendet " "während %s weg war." +#, fuzzy +#~ msgid "Someone was last seen in %s %s ago" +#~ msgstr "Jemand wurde zuletzt in %s gesehen, vor %s: %s" + #, fuzzy #~ msgid "I am not in %s." #~ msgstr "Ich habe %s nicht gesehn." diff --git a/plugins/Seen/locales/fi.po b/plugins/Seen/locales/fi.po index 12070005f..60ef3963f 100644 --- a/plugins/Seen/locales/fi.po +++ b/plugins/Seen/locales/fi.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: Seen plugin for Limnoria\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2014-12-20 13:06+0200\n" "Last-Translator: Mikaela Suomalainen <mikaela.suomalainen@outlook.com>\n" "Language-Team: \n" @@ -52,45 +52,58 @@ msgstr "" msgid "Not enough non-wildcard characters." msgstr "Ei-jokerimerkki merkkejä ei ole annettu riittävästi." -#: plugin.py:198 plugin.py:306 +#: plugin.py:199 +#, fuzzy +msgid "%s was last seen in %s %s ago, and is in the channel now" +msgstr "%s nähtiin viimeksi kanavalla %s %s sitten: %s" + +#: plugin.py:203 plugin.py:328 #, fuzzy msgid "%s was last seen in %s %s ago" msgstr "%s nähtiin viimeksi kanavalla %s %s sitten: %s" -#: plugin.py:204 plugin.py:283 plugin.py:310 +#: plugin.py:209 plugin.py:300 plugin.py:332 msgid "%s: %s" msgstr "%s: %s" -#: plugin.py:210 +#: plugin.py:216 +msgid "%s (%s ago, and is in the channel now)" +msgstr "" + +#: plugin.py:219 msgid "%s (%s ago)" msgstr "%s (%s sitten)" -#: plugin.py:212 +#: plugin.py:221 msgid "%s could be %L" msgstr "%s voisi olla %L" -#: plugin.py:212 +#: plugin.py:221 msgid "or" msgstr "tai" -#: plugin.py:214 +#: plugin.py:223 msgid "I haven't seen anyone matching %s." msgstr "En ole nähnyt kenenkään täsmäävän %s." -#: plugin.py:216 plugin.py:313 +#: plugin.py:226 plugin.py:336 +msgid "%s is in the channel right now." +msgstr "" + +#: plugin.py:228 plugin.py:338 msgid "I have not seen %s." msgstr "En ole nähnyt %s:ää." -#: plugin.py:223 +#: plugin.py:235 #, fuzzy msgid "You must be in %s to use this command." msgstr "Käyttäjän %s täytyy olla kanavalla %s käyttääkseen tätä komentoa." -#: plugin.py:225 +#: plugin.py:237 msgid "%s must be in %s to use this command." msgstr "Käyttäjän %s täytyy olla kanavalla %s käyttääkseen tätä komentoa." -#: plugin.py:231 +#: plugin.py:243 msgid "" "[<channel>] <nick>\n" "\n" @@ -108,11 +121,11 @@ msgstr "" " itsellään.\n" " " -#: plugin.py:238 plugin.py:256 +#: plugin.py:250 plugin.py:268 msgid "You've found me!" msgstr "Löysit minut!" -#: plugin.py:246 +#: plugin.py:258 msgid "" "[<channel>] [--user <name>] [<nick>]\n" "\n" @@ -142,16 +155,20 @@ msgstr "" " on vaadittu vain, jos viestiä ei lähetetä kanavalla itsellään.\n" " " -#: plugin.py:280 -#, fuzzy -msgid "Someone was last seen in %s %s ago" -msgstr "Joku nähtiin viimeeksi kanavalla %s %s sitten: %s" +#: plugin.py:295 +msgid "I couldn't parse the nick of the speaker of the last line." +msgstr "" -#: plugin.py:286 +#: plugin.py:297 +#, fuzzy +msgid "Last seen in %s was %s, %s ago" +msgstr "%s nähtiin viimeksi kanavalla %s %s sitten: %s" + +#: plugin.py:303 msgid "I have never seen anyone." msgstr "Minä en ole nähnyt ketään." -#: plugin.py:290 +#: plugin.py:307 msgid "" "[<channel>]\n" "\n" @@ -167,7 +184,12 @@ msgstr "" " viestiä ei lähetetä kanavalla itsellään.\n" " " -#: plugin.py:317 +#: plugin.py:324 +#, fuzzy +msgid "%s was last seen in %s %s ago and is in the channel now" +msgstr "%s nähtiin viimeksi kanavalla %s %s sitten: %s" + +#: plugin.py:342 msgid "" "[<channel>] <name>\n" "\n" @@ -192,7 +214,7 @@ msgstr "" " itsellään.\n" " " -#: plugin.py:331 +#: plugin.py:356 msgid "" "[<channel>] [<nick>]\n" "\n" @@ -208,17 +230,21 @@ msgstr "" "Ellei <nimimerkkiä> anneta, se on oletuksena komentoa pyytävän henkilön " "nimimerkki. " -#: plugin.py:363 +#: plugin.py:388 msgid "I couldn't find in my history of %s messages where %r last left %s" msgstr "" "En voinut löytää %s viestin historiasta milloin %r viimeksi lähti kanavalta " "%s" -#: plugin.py:372 +#: plugin.py:397 msgid "Either %s didn't leave, or no messages were sent while %s was gone." msgstr "" "Joko %s ei lähtenyt, tai yhtään viestiä ei lähetetty silloin, kun %s oli " "poissa." +#, fuzzy +#~ msgid "Someone was last seen in %s %s ago" +#~ msgstr "Joku nähtiin viimeeksi kanavalla %s %s sitten: %s" + #~ msgid "I am not in %s." #~ msgstr "En ole nähnyt %s:ää." diff --git a/plugins/Seen/locales/fr.po b/plugins/Seen/locales/fr.po index 4e3df31b4..879e7d3e6 100644 --- a/plugins/Seen/locales/fr.po +++ b/plugins/Seen/locales/fr.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: Limnoria\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: Limnoria <progval@gmail.com>\n" @@ -42,44 +42,57 @@ msgstr "" msgid "Not enough non-wildcard characters." msgstr "Pas assez de caractères non-joker." -#: plugin.py:198 plugin.py:306 +#: plugin.py:199 +#, fuzzy +msgid "%s was last seen in %s %s ago, and is in the channel now" +msgstr "%s a été vu-e pour la dernière fois sur %s il y a %s" + +#: plugin.py:203 plugin.py:328 msgid "%s was last seen in %s %s ago" msgstr "%s a été vu-e pour la dernière fois sur %s il y a %s" -#: plugin.py:204 plugin.py:283 plugin.py:310 +#: plugin.py:209 plugin.py:300 plugin.py:332 msgid "%s: %s" msgstr "%s : %s" -#: plugin.py:210 +#: plugin.py:216 +msgid "%s (%s ago, and is in the channel now)" +msgstr "" + +#: plugin.py:219 msgid "%s (%s ago)" msgstr "%s (il y a %s)" -#: plugin.py:212 +#: plugin.py:221 msgid "%s could be %L" msgstr "%s doit être %L" -#: plugin.py:212 +#: plugin.py:221 msgid "or" msgstr "ou" -#: plugin.py:214 +#: plugin.py:223 msgid "I haven't seen anyone matching %s." msgstr "Je n'ai vu personne correspondant à %s." -#: plugin.py:216 plugin.py:313 +#: plugin.py:226 plugin.py:336 +msgid "%s is in the channel right now." +msgstr "" + +#: plugin.py:228 plugin.py:338 msgid "I have not seen %s." msgstr "Je n'ai pas vu %s." -#: plugin.py:223 +#: plugin.py:235 #, fuzzy msgid "You must be in %s to use this command." msgstr "%s doit être dans %s pour utiliser cette commande." -#: plugin.py:225 +#: plugin.py:237 msgid "%s must be in %s to use this command." msgstr "%s doit être dans %s pour utiliser cette commande." -#: plugin.py:231 +#: plugin.py:243 msgid "" "[<channel>] <nick>\n" "\n" @@ -95,11 +108,11 @@ msgstr "" "<nick> a parlé. <canal> n'est nécessaire que si le message n'est pas envoyé " "sur le canal lui-même. <nick> peut contenir le joker *." -#: plugin.py:238 plugin.py:256 +#: plugin.py:250 plugin.py:268 msgid "You've found me!" msgstr "" -#: plugin.py:246 +#: plugin.py:258 msgid "" "[<channel>] [--user <name>] [<nick>]\n" "\n" @@ -124,15 +137,20 @@ msgstr "" "en question a été vu-e actif-ve sur le <canal. <canal> n'est nécessaire que " "si le message n'est pas envoyé sur le canal lui-même." -#: plugin.py:280 -msgid "Someone was last seen in %s %s ago" -msgstr "Quelqu'un a été vu-e pour la dernière fois sur %s il y a %s" +#: plugin.py:295 +msgid "I couldn't parse the nick of the speaker of the last line." +msgstr "" -#: plugin.py:286 +#: plugin.py:297 +#, fuzzy +msgid "Last seen in %s was %s, %s ago" +msgstr "%s a été vu-e pour la dernière fois sur %s il y a %s" + +#: plugin.py:303 msgid "I have never seen anyone." msgstr "Je n'ai jamais vu personne." -#: plugin.py:290 +#: plugin.py:307 msgid "" "[<channel>]\n" "\n" @@ -146,7 +164,12 @@ msgstr "" "Retourne la dernière chose dite sur le <canal>. <canal> n'est nécessaire que " "si le message n'est pas envoyé sur le canal lui-même." -#: plugin.py:317 +#: plugin.py:324 +#, fuzzy +msgid "%s was last seen in %s %s ago and is in the channel now" +msgstr "%s a été vu-e pour la dernière fois sur %s il y a %s" + +#: plugin.py:342 msgid "" "[<channel>] <name>\n" "\n" @@ -167,7 +190,7 @@ msgstr "" "l'utilisateur <nom>, il n'est pas considéré comme vu. <canal> n'est " "nécessaire que si le message n'est pas envoyé sur le canal lui-même." -#: plugin.py:331 +#: plugin.py:356 msgid "" "[<channel>] [<nick>]\n" "\n" @@ -181,17 +204,20 @@ msgstr "" "Retourne les messages depuis que <nick> est parti-e du canal.<nick> " "correspond par défaut au nick de la personne appelant la commande." -#: plugin.py:363 +#: plugin.py:388 msgid "I couldn't find in my history of %s messages where %r last left %s" msgstr "" "Je ne peux pas trouver dans mon historique de %s messages, où %r a quitté il " "y a %s" -#: plugin.py:372 +#: plugin.py:397 msgid "Either %s didn't leave, or no messages were sent while %s was gone." msgstr "" "Soit %s n'est jamais parti-e, soit aucun message n'a été envoyé depuis " "qu'iel est parti-e." +#~ msgid "Someone was last seen in %s %s ago" +#~ msgstr "Quelqu'un a été vu-e pour la dernière fois sur %s il y a %s" + #~ msgid "I am not in %s." #~ msgstr "Je ne suis pas dans %s." diff --git a/plugins/Seen/locales/it.po b/plugins/Seen/locales/it.po index f0f01b406..5fb07c490 100644 --- a/plugins/Seen/locales/it.po +++ b/plugins/Seen/locales/it.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: Limnoria\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2012-03-16 00:09+0100\n" "Last-Translator: skizzhg <skizzhg@gmx.com>\n" "Language-Team: Italian <skizzhg@gmx.com>\n" @@ -35,45 +35,58 @@ msgstr "" msgid "Not enough non-wildcard characters." msgstr "" -#: plugin.py:198 plugin.py:306 +#: plugin.py:199 +#, fuzzy +msgid "%s was last seen in %s %s ago, and is in the channel now" +msgstr "%s è stato visto per l'ultima volta in %s %s fa: %s" + +#: plugin.py:203 plugin.py:328 #, fuzzy msgid "%s was last seen in %s %s ago" msgstr "%s è stato visto per l'ultima volta in %s %s fa: %s" -#: plugin.py:204 plugin.py:283 plugin.py:310 +#: plugin.py:209 plugin.py:300 plugin.py:332 msgid "%s: %s" msgstr "" -#: plugin.py:210 +#: plugin.py:216 +msgid "%s (%s ago, and is in the channel now)" +msgstr "" + +#: plugin.py:219 msgid "%s (%s ago)" msgstr "%s (%s fa)" -#: plugin.py:212 +#: plugin.py:221 msgid "%s could be %L" msgstr "%s potrebbe essere %L" -#: plugin.py:212 +#: plugin.py:221 msgid "or" msgstr "oppure" -#: plugin.py:214 +#: plugin.py:223 msgid "I haven't seen anyone matching %s." msgstr "Non ho visto nessuno che corrisponda a %s." -#: plugin.py:216 plugin.py:313 +#: plugin.py:226 plugin.py:336 +msgid "%s is in the channel right now." +msgstr "" + +#: plugin.py:228 plugin.py:338 msgid "I have not seen %s." msgstr "Non ho visto %s." -#: plugin.py:223 +#: plugin.py:235 #, fuzzy msgid "You must be in %s to use this command." msgstr "Per usare questo comando %s deve essere in %s." -#: plugin.py:225 +#: plugin.py:237 msgid "%s must be in %s to use this command." msgstr "Per usare questo comando %s deve essere in %s." -#: plugin.py:231 +#: plugin.py:243 msgid "" "[<channel>] <nick>\n" "\n" @@ -92,11 +105,11 @@ msgstr "" " stesso. <nick> può contenere * come wildcard.\n" " " -#: plugin.py:238 plugin.py:256 +#: plugin.py:250 plugin.py:268 msgid "You've found me!" msgstr "" -#: plugin.py:246 +#: plugin.py:258 msgid "" "[<channel>] [--user <name>] [<nick>]\n" "\n" @@ -125,16 +138,20 @@ msgstr "" " solo se il messaggio non viene inviato nel canale stesso.\n" " " -#: plugin.py:280 -#, fuzzy -msgid "Someone was last seen in %s %s ago" -msgstr "Qualcuno è stato visto per l'ultima volta in %s %s fa: %s" +#: plugin.py:295 +msgid "I couldn't parse the nick of the speaker of the last line." +msgstr "" -#: plugin.py:286 +#: plugin.py:297 +#, fuzzy +msgid "Last seen in %s was %s, %s ago" +msgstr "%s è stato visto per l'ultima volta in %s %s fa: %s" + +#: plugin.py:303 msgid "I have never seen anyone." msgstr "Non ho mai visto nessuno." -#: plugin.py:290 +#: plugin.py:307 msgid "" "[<channel>]\n" "\n" @@ -149,7 +166,12 @@ msgstr "" " solo se il messaggio non viene inviato nel canale stesso.\n" " " -#: plugin.py:317 +#: plugin.py:324 +#, fuzzy +msgid "%s was last seen in %s %s ago and is in the channel now" +msgstr "%s è stato visto per l'ultima volta in %s %s fa: %s" + +#: plugin.py:342 msgid "" "[<channel>] <name>\n" "\n" @@ -173,7 +195,7 @@ msgstr "" "canale stesso.\n" " " -#: plugin.py:331 +#: plugin.py:356 #, fuzzy msgid "" "[<channel>] [<nick>]\n" @@ -189,15 +211,19 @@ msgstr "" "volta.\n" " " -#: plugin.py:363 +#: plugin.py:388 msgid "I couldn't find in my history of %s messages where %r last left %s" msgstr "" "Non trovo nella cronologia dei messaggi di %s dove %r ha lasciato %s " "l'ultima volta." -#: plugin.py:372 +#: plugin.py:397 msgid "Either %s didn't leave, or no messages were sent while %s was gone." msgstr "%s non è uscito o non ha inviato alcun messaggio quando se n'é andato." +#, fuzzy +#~ msgid "Someone was last seen in %s %s ago" +#~ msgstr "Qualcuno è stato visto per l'ultima volta in %s %s fa: %s" + #~ msgid "I am not in %s." #~ msgstr "Non sono in %s." diff --git a/plugins/Seen/locales/ru.po b/plugins/Seen/locales/ru.po index 82c6b3343..e00726079 100644 --- a/plugins/Seen/locales/ru.po +++ b/plugins/Seen/locales/ru.po @@ -4,7 +4,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2024-06-12 15:01+0300\n" "Last-Translator: ssdaniel24 <bo7oaonteg2m__at__mailDOTru>\n" "Language-Team: \n" @@ -47,48 +47,60 @@ msgstr "" msgid "Not enough non-wildcard characters." msgstr "Недостаточно обыкновенных символов (НЕ символов подстановки)." -#: plugin.py:198 plugin.py:306 +#: plugin.py:199 +#, fuzzy +msgid "%s was last seen in %s %s ago, and is in the channel now" +msgstr "%s в последний раз видели в %s %s назад." + +#: plugin.py:203 plugin.py:328 msgid "%s was last seen in %s %s ago" msgstr "%s в последний раз видели в %s %s назад." -#: plugin.py:204 plugin.py:283 plugin.py:310 +#: plugin.py:209 plugin.py:300 plugin.py:332 msgid "%s: %s" msgstr "%s: %s" -#: plugin.py:210 +#: plugin.py:216 +msgid "%s (%s ago, and is in the channel now)" +msgstr "" + +#: plugin.py:219 msgid "%s (%s ago)" msgstr "%s (%s назад)" -#: plugin.py:212 +#: plugin.py:221 msgid "%s could be %L" msgstr "%s мог(ла) быть %L" -#: plugin.py:212 +#: plugin.py:221 msgid "or" msgstr "или" -#: plugin.py:214 +#: plugin.py:223 msgid "I haven't seen anyone matching %s." msgstr "Я не видел никого, кто бы соответствовал %s." -#: plugin.py:216 plugin.py:313 +#: plugin.py:226 plugin.py:336 +msgid "%s is in the channel right now." +msgstr "" + +#: plugin.py:228 plugin.py:338 msgid "I have not seen %s." msgstr "Я не видел %s." -#: plugin.py:223 +#: plugin.py:235 msgid "You must be in %s to use this command." msgstr "Вы должны быть в %s для использования этой команды." -#: plugin.py:225 +#: plugin.py:237 msgid "%s must be in %s to use this command." msgstr "%s должен/должна быть в %s для использования этой команды." -#: plugin.py:231 +#: plugin.py:243 msgid "" "[<channel>] <nick>\n" "\n" -" Returns the last time <nick> was seen and what <nick> was last " -"seen\n" +" Returns the last time <nick> was seen and what <nick> was last seen\n" " saying. <channel> is only necessary if the message isn't sent on " "the\n" " channel itself. <nick> may contain * as a wildcard.\n" @@ -96,20 +108,19 @@ msgid "" msgstr "" "[<канал>] <ник>\n" "\n" -"Возвращает последнее время, когда видели <ник> и его/её последнее " -"сообщение. Передавать <канал> требуется в случае, если команда запущена не " -"на этом канале. Данный <ник> может содержать * как символ подстановки." +"Возвращает последнее время, когда видели <ник> и его/её последнее сообщение. " +"Передавать <канал> требуется в случае, если команда запущена не на этом " +"канале. Данный <ник> может содержать * как символ подстановки." -#: plugin.py:238 plugin.py:256 +#: plugin.py:250 plugin.py:268 msgid "You've found me!" msgstr "О нет! Вы нашли меня." -#: plugin.py:246 +#: plugin.py:258 msgid "" "[<channel>] [--user <name>] [<nick>]\n" "\n" -" Returns the last time <nick> was seen and what <nick> was last " -"seen\n" +" Returns the last time <nick> was seen and what <nick> was last seen\n" " doing. This includes any form of activity, instead of just " "PRIVMSGs.\n" " If <nick> isn't specified, returns the last activity seen in\n" @@ -122,23 +133,27 @@ msgid "" msgstr "" "[<канал>] [--user <имя>] [<ник>]\n" "\n" -"Возвращает последнее время, когда видели <ник> и его/её последние " -"действия. Это включает в себя любые формы активности, не ограничиваясь " -"только PRIVMSG. Если <ник> не задан, то возвращает последнюю активность в " -"данном <канале>. Если задан --user, то ищет данное <имя> в базе данных и " -"возвращает последнее время, когда этот пользователь был активен в данном " -"<канале>. Передавать <канал> требуется в случае, если команда запущена не " -"на этом канале." +"Возвращает последнее время, когда видели <ник> и его/её последние действия. " +"Это включает в себя любые формы активности, не ограничиваясь только PRIVMSG. " +"Если <ник> не задан, то возвращает последнюю активность в данном <канале>. " +"Если задан --user, то ищет данное <имя> в базе данных и возвращает последнее " +"время, когда этот пользователь был активен в данном <канале>. Передавать " +"<канал> требуется в случае, если команда запущена не на этом канале." -#: plugin.py:280 -msgid "Someone was last seen in %s %s ago" -msgstr "В последний раз кого-то видели в %s %s назад" +#: plugin.py:295 +msgid "I couldn't parse the nick of the speaker of the last line." +msgstr "" -#: plugin.py:286 +#: plugin.py:297 +#, fuzzy +msgid "Last seen in %s was %s, %s ago" +msgstr "%s в последний раз видели в %s %s назад." + +#: plugin.py:303 msgid "I have never seen anyone." msgstr "Я не видел никого." -#: plugin.py:290 +#: plugin.py:307 msgid "" "[<channel>]\n" "\n" @@ -152,16 +167,19 @@ msgstr "" "Возвращает последнее, что писали в <канале>. Передавать в аргумент <канал> " "требуется в случае, если команда запущена не на этом канале." -#: plugin.py:317 +#: plugin.py:324 +#, fuzzy +msgid "%s was last seen in %s %s ago and is in the channel now" +msgstr "%s в последний раз видели в %s %s назад." + +#: plugin.py:342 msgid "" "[<channel>] <name>\n" "\n" -" Returns the last time <name> was seen and what <name> was last " -"seen\n" +" Returns the last time <name> was seen and what <name> was last seen\n" " saying. This looks up <name> in the user seen database, which " "means\n" -" that it could be any nick recognized as user <name> that was " -"seen.\n" +" that it could be any nick recognized as user <name> that was seen.\n" " <channel> is only necessary if the message isn't sent in the " "channel\n" " itself.\n" @@ -172,10 +190,10 @@ msgstr "" "Возвращает время, когда в последний раз видели <имя> и его/её последнее " "сообщение. Эта команда ищет <имя> в базе данных пользователей Seen, что " "значит поиск будет производится среди всех ников, закреплённых за " -"пользователем с данным <именем>. Передавать в аргументы <канал> требуется " -"в случае, если команда запущена не на этом канале." +"пользователем с данным <именем>. Передавать в аргументы <канал> требуется в " +"случае, если команда запущена не на этом канале." -#: plugin.py:331 +#: plugin.py:356 msgid "" "[<channel>] [<nick>]\n" "\n" @@ -186,16 +204,18 @@ msgid "" msgstr "" "[<канал>] [<ник>]\n" "\n" -"Возвращает сообщения с тех пор как данный <ник> покинул канал. Если <ник> " -"не передан в аргументы, то используется ник пользователя, запустившего " -"команду." +"Возвращает сообщения с тех пор как данный <ник> покинул канал. Если <ник> не " +"передан в аргументы, то используется ник пользователя, запустившего команду." -#: plugin.py:363 +#: plugin.py:388 msgid "I couldn't find in my history of %s messages where %r last left %s" msgstr "Не могу найти в моей истории сообщений (%s), где %r покинул %s." -#: plugin.py:372 +#: plugin.py:397 msgid "Either %s didn't leave, or no messages were sent while %s was gone." msgstr "" "Либо %s не покидал(а) канал, либо ни одного сообщения не было отправлено с " "тех пор, как %s вышел/вышла." + +#~ msgid "Someone was last seen in %s %s ago" +#~ msgstr "В последний раз кого-то видели в %s %s назад" diff --git a/plugins/Seen/messages.pot b/plugins/Seen/messages.pot index 19cd8b4db..f887292a2 100644 --- a/plugins/Seen/messages.pot +++ b/plugins/Seen/messages.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -40,43 +40,55 @@ msgstr "" msgid "Not enough non-wildcard characters." msgstr "" -#: plugin.py:198 plugin.py:306 +#: plugin.py:199 +msgid "%s was last seen in %s %s ago, and is in the channel now" +msgstr "" + +#: plugin.py:203 plugin.py:328 msgid "%s was last seen in %s %s ago" msgstr "" -#: plugin.py:204 plugin.py:283 plugin.py:310 +#: plugin.py:209 plugin.py:300 plugin.py:332 msgid "%s: %s" msgstr "" -#: plugin.py:210 +#: plugin.py:216 +msgid "%s (%s ago, and is in the channel now)" +msgstr "" + +#: plugin.py:219 msgid "%s (%s ago)" msgstr "" -#: plugin.py:212 +#: plugin.py:221 msgid "%s could be %L" msgstr "" -#: plugin.py:212 +#: plugin.py:221 msgid "or" msgstr "" -#: plugin.py:214 +#: plugin.py:223 msgid "I haven't seen anyone matching %s." msgstr "" -#: plugin.py:216 plugin.py:313 +#: plugin.py:226 plugin.py:336 +msgid "%s is in the channel right now." +msgstr "" + +#: plugin.py:228 plugin.py:338 msgid "I have not seen %s." msgstr "" -#: plugin.py:223 +#: plugin.py:235 msgid "You must be in %s to use this command." msgstr "" -#: plugin.py:225 +#: plugin.py:237 msgid "%s must be in %s to use this command." msgstr "" -#: plugin.py:231 +#: plugin.py:243 #, docstring msgid "" "[<channel>] <nick>\n" @@ -87,11 +99,11 @@ msgid "" " " msgstr "" -#: plugin.py:238 plugin.py:256 +#: plugin.py:250 plugin.py:268 msgid "You've found me!" msgstr "" -#: plugin.py:246 +#: plugin.py:258 #, docstring msgid "" "[<channel>] [--user <name>] [<nick>]\n" @@ -105,15 +117,19 @@ msgid "" " " msgstr "" -#: plugin.py:280 -msgid "Someone was last seen in %s %s ago" +#: plugin.py:295 +msgid "I couldn't parse the nick of the speaker of the last line." msgstr "" -#: plugin.py:286 +#: plugin.py:297 +msgid "Last seen in %s was %s, %s ago" +msgstr "" + +#: plugin.py:303 msgid "I have never seen anyone." msgstr "" -#: plugin.py:290 +#: plugin.py:307 #, docstring msgid "" "[<channel>]\n" @@ -123,7 +139,11 @@ msgid "" " " msgstr "" -#: plugin.py:317 +#: plugin.py:324 +msgid "%s was last seen in %s %s ago and is in the channel now" +msgstr "" + +#: plugin.py:342 #, docstring msgid "" "[<channel>] <name>\n" @@ -136,7 +156,7 @@ msgid "" " " msgstr "" -#: plugin.py:331 +#: plugin.py:356 #, docstring msgid "" "[<channel>] [<nick>]\n" @@ -147,11 +167,11 @@ msgid "" " " msgstr "" -#: plugin.py:363 +#: plugin.py:388 msgid "I couldn't find in my history of %s messages where %r last left %s" msgstr "" -#: plugin.py:372 +#: plugin.py:397 msgid "Either %s didn't leave, or no messages were sent while %s was gone." msgstr "" diff --git a/plugins/Services/locales/de.po b/plugins/Services/locales/de.po index daae1fd9e..e234cd11a 100644 --- a/plugins/Services/locales/de.po +++ b/plugins/Services/locales/de.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: Supybot\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2011-11-13 18:58+0100\n" "Last-Translator: Florian Besser <fbesser@gmail.com>\n" "Language-Team: German <fbesser@gmail.com>\n" @@ -39,23 +39,24 @@ msgstr "Wie heißt der ChanServ?" msgid "What is your NickServ named?" msgstr "Wie heißt der NickServ?" -#: config.py:70 +#: config.py:71 +#, fuzzy msgid "" -"Determines what nicks the bot will use with\n" +"Space-separated list of nicks the bot will use with\n" " services." msgstr "Legt fest der was für einen Nick der Bot mit den Services nutzt." -#: config.py:77 +#: config.py:78 msgid "" "Determines what networks this plugin\n" " will be disabled on." msgstr "Legt fest auf welchen Netzwerken dieses Plugin deaktiviert sein soll." -#: config.py:77 +#: config.py:78 msgid "QuakeNet" msgstr "QuakeNet" -#: config.py:81 +#: config.py:82 msgid "" "Determines whether the bot will not join any\n" " channels until it is identified. This may be useful, for instances, if\n" @@ -67,32 +68,40 @@ msgstr "" "erst nach dem Identifizeren gesetzt wird, oder du +R Kanaäle betreten willt, " "die es nicht erlauben sie zu betreten solange du nicht identifiziert bist." -#: config.py:86 +#: config.py:87 #, fuzzy msgid "" "Determines how many seconds the bot will\n" " wait between successive GHOST attempts. Set this to 0 to disable GHOST." msgstr "legt fest wie viele Sekunden der Bot zwischen GHOST versuchen wartet." -#: config.py:89 +#: config.py:90 +msgid "" +"Determines the NickServ command to use for GHOST. If the network\n" +" you're using runs Anope, set this to \"RECOVER\". If the network you're " +"using runs Atheme,\n" +" set this to \"GHOST\" or \"REGAIN\"." +msgstr "" + +#: config.py:94 msgid "" "Determines what nick the 'NickServ' service\n" " has." msgstr "Legt fest welchen Nick der 'NickServ' Service hat." -#: config.py:93 +#: config.py:98 msgid "" "Determines what nick the 'ChanServ' service\n" " has." msgstr "Legt fest welchen Nick der 'ChanServ' Service hat." -#: config.py:96 +#: config.py:101 msgid "" "Determines what password the bot will use with\n" " ChanServ." msgstr "Legt fest welches Passwort der Bot für den ChanServ nutzt." -#: config.py:99 +#: config.py:104 msgid "" "Determines whether the bot will request to get\n" " opped by the ChanServ when it joins the channel." @@ -100,7 +109,7 @@ msgstr "" "Legt fest ob der Bot Op von ChanServ erfragen soll, sobald er einen Kanal " "betritt." -#: config.py:102 +#: config.py:107 msgid "" "Determines whether the bot will request to get\n" " half-opped by the ChanServ when it joins the channel." @@ -108,7 +117,7 @@ msgstr "" "Legt fest ob der Bot halb-Op von ChanServ erfragen soll, sobald er einen " "Kanal betritt." -#: config.py:105 +#: config.py:110 msgid "" "Determines whether the bot will request to get\n" " voiced by the ChanServ when it joins the channel." @@ -116,7 +125,7 @@ msgstr "" "Legt fest ob der Bot Voice von ChanServ erfragen soll, sobald er einen Kanal " "betritt." -#: plugin.py:54 +#: plugin.py:55 msgid "" "This plugin handles dealing with Services on networks that provide them.\n" " Basically, you should use the \"password\" command to tell the bot a " @@ -139,7 +148,7 @@ msgstr "" "Netzwerk zutreffen. Andere Befehle, wie identify, op etc., sollten nicht " "nötig sein falls der Bot richtig konfiguriert ist." -#: plugin.py:441 +#: plugin.py:472 msgid "" "You must set supybot.plugins.Services.ChanServ before I'm able to send the " "%s command." @@ -147,7 +156,7 @@ msgstr "" "Du musst supybot.plugins.Services.ChanServ setzen, damit es mir möglich ist " "den %s Befehl auszuführen." -#: plugin.py:447 +#: plugin.py:478 msgid "" "[<channel>]\n" "\n" @@ -160,11 +169,11 @@ msgstr "" "Versucht Op durch ChanServ im <Kanal> zu bekommen. <Kanal> ist nur " "notwendig, falls die Nachricht nicht im Kanal selbst gesendet wurde." -#: plugin.py:453 +#: plugin.py:484 msgid "I'm already opped in %s." msgstr "Ich habe schon Op in %s." -#: plugin.py:460 +#: plugin.py:491 msgid "" "[<channel>]\n" "\n" @@ -177,11 +186,11 @@ msgstr "" "Versucht Voice durch ChanServ im <Kanal> zu bekommen. <Kanal> ist nur " "notwendig, falls die Nachricht nicht im Kanal selbst gesendet wurde." -#: plugin.py:466 +#: plugin.py:497 msgid "I'm already voiced in %s." msgstr "Ich habe schon Voice in %s." -#: plugin.py:483 +#: plugin.py:514 msgid "" "[<channel>]\n" "\n" @@ -200,7 +209,7 @@ msgstr "" "wahrscheinlich wird der Befehl sowieso nicht im Kanal selbst gesendet, wenn " "du den Befehl braucht." -#: plugin.py:504 +#: plugin.py:535 msgid "" "[<channel>]\n" "\n" @@ -219,7 +228,7 @@ msgstr "" "wahrscheinlich wird der Befehl sowieso nicht im Kanal selbst gesendet, wenn " "du den Befehl braucht." -#: plugin.py:526 +#: plugin.py:557 msgid "" "takes no arguments\n" "\n" @@ -230,11 +239,11 @@ msgstr "" "\n" "Identifiziert mit dem NickServ mit dem momentanen Nick." -#: plugin.py:535 +#: plugin.py:566 msgid "I don't have a configured password for my current nick." msgstr "Du hast kein Passwort für meinen momentanen Nick konfiguriert." -#: plugin.py:538 +#: plugin.py:569 msgid "" "You must set supybot.plugins.Services.NickServ before I'm able to do " "identify." @@ -242,7 +251,7 @@ msgstr "" "Du musst supybot.plugins.Services.NickServ setzen, damit es mich möglich ist " "mich zu identifizieren." -#: plugin.py:544 +#: plugin.py:575 msgid "" "[<nick>]\n" "\n" @@ -255,11 +264,11 @@ msgstr "" "'Ghost' den Bot Nick und nimmt ihn sich. Falls kein Nick angegeben wirde, " "wird 'ghost' für den konfigurierten Nick gesendet." -#: plugin.py:553 +#: plugin.py:584 msgid "I cowardly refuse to ghost myself." msgstr "Ich verweigere es auf mich selbst 'ghost' anzuwenden." -#: plugin.py:558 +#: plugin.py:589 msgid "" "You must set supybot.plugins.Services.NickServ before I'm able to ghost a " "nick." @@ -267,7 +276,7 @@ msgstr "" "Du musst supybot.plugins.Services.NickServ setzen, erst dann ist es mir " "möglich 'ghost' auf einen Nick anzuwenden." -#: plugin.py:563 +#: plugin.py:594 msgid "" "<text>\n" "\n" @@ -275,7 +284,7 @@ msgid "" " on Atheme, use: @nickserv REGISTER <password> <email-address>." msgstr "" -#: plugin.py:572 +#: plugin.py:603 #, fuzzy msgid "" "You must set supybot.plugins.Services.NickServ before I'm able to message " @@ -284,7 +293,7 @@ msgstr "" "Du musst supybot.plugins.Services.NickServ setzen, erst dann ist es mir " "möglich 'ghost' auf einen Nick anzuwenden." -#: plugin.py:577 +#: plugin.py:608 msgid "" "<text>\n" "\n" @@ -292,7 +301,7 @@ msgid "" " on Atheme, use: @chanserv REGISTER <#channel>." msgstr "" -#: plugin.py:586 +#: plugin.py:617 #, fuzzy msgid "" "You must set supybot.plugins.Services.ChanServ before I'm able to message " @@ -301,7 +310,7 @@ msgstr "" "Du musst supybot.plugins.Services.ChanServ setzen, damit es mir möglich ist " "den %s Befehl auszuführen." -#: plugin.py:593 +#: plugin.py:624 msgid "" "<nick> [<password>]\n" "\n" @@ -315,11 +324,11 @@ msgstr "" "nicht angegeben wurde, wird der <Nick> aus der Liste der konfigurierten " "Nicks entfernt." -#: plugin.py:605 +#: plugin.py:636 msgid "That nick was not configured with a password." msgstr "Für diesen Nick wurde kein Passwort konfiguriert." -#: plugin.py:618 +#: plugin.py:649 msgid "" "takes no arguments\n" "\n" @@ -333,27 +342,27 @@ msgstr "" "Gibt die Nicks aus, für die dieses Plugin konfiguriert wurde um sich zu " "identifizieren und 'ghost' zu benutzen." -#: plugin.py:628 +#: plugin.py:659 msgid "I'm not currently configured for any nicks." msgstr "Ich habe zur Zeit keine Nicks konfiguriert." -#: plugin.py:635 +#: plugin.py:666 msgid "Experimental IRC extensions are not enabled for this bot." msgstr "" -#: plugin.py:641 +#: plugin.py:672 msgid "This network does not support draft/account-registration." msgstr "" -#: plugin.py:647 +#: plugin.py:678 msgid "This network does not support labeled-response." msgstr "" -#: plugin.py:653 +#: plugin.py:684 msgid "This bot is already authenticated on the network." msgstr "" -#: plugin.py:658 +#: plugin.py:689 msgid "" "[<network>] <password> [<email>]\n" "\n" @@ -366,11 +375,11 @@ msgid "" " your email address." msgstr "" -#: plugin.py:672 +#: plugin.py:703 msgid "This network requires an email address to register." msgstr "" -#: plugin.py:686 +#: plugin.py:717 msgid "" "[<network>] <account> <code>\n" "\n" diff --git a/plugins/Services/locales/fi.po b/plugins/Services/locales/fi.po index 619d59f12..d42911105 100644 --- a/plugins/Services/locales/fi.po +++ b/plugins/Services/locales/fi.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2011-08-13 23:02+0200\n" "Last-Translator: Mikaela Suomalainen <mikaela.suomalainen@outlook.com>\n" "Language-Team: \n" @@ -38,15 +38,16 @@ msgstr "Minkä niminen ChanServisi on?" msgid "What is your NickServ named?" msgstr "Minkä niminen NickServisi on?" -#: config.py:70 +#: config.py:71 +#, fuzzy msgid "" -"Determines what nicks the bot will use with\n" +"Space-separated list of nicks the bot will use with\n" " services." msgstr "" "Määrittää mitä nimimerkkiä botti käyttää\n" " palvelujen kanssa." -#: config.py:77 +#: config.py:78 msgid "" "Determines what networks this plugin\n" " will be disabled on." @@ -54,11 +55,11 @@ msgstr "" "Määrittää missä verkoissa tämä\n" " lisäosa on poistettu käytöstä." -#: config.py:77 +#: config.py:78 msgid "QuakeNet" msgstr "QuakeNet" -#: config.py:81 +#: config.py:82 msgid "" "Determines whether the bot will not join any\n" " channels until it is identified. This may be useful, for instances, if\n" @@ -71,7 +72,7 @@ msgstr "" " liittymässä +r kanaville, jotka eivät salli sinun liittyvän, paitsi jos " "olet tunnistautunut." -#: config.py:86 +#: config.py:87 #, fuzzy msgid "" "Determines how many seconds the bot will\n" @@ -80,7 +81,15 @@ msgstr "" "Määrittää monta sekuntia botti odottaa\n" " GHOSTaus yritysten välillä." -#: config.py:89 +#: config.py:90 +msgid "" +"Determines the NickServ command to use for GHOST. If the network\n" +" you're using runs Anope, set this to \"RECOVER\". If the network you're " +"using runs Atheme,\n" +" set this to \"GHOST\" or \"REGAIN\"." +msgstr "" + +#: config.py:94 msgid "" "Determines what nick the 'NickServ' service\n" " has." @@ -88,7 +97,7 @@ msgstr "" "Määrittää mikä nimimerkki 'NickServ' palvelulla\n" " on." -#: config.py:93 +#: config.py:98 msgid "" "Determines what nick the 'ChanServ' service\n" " has." @@ -96,7 +105,7 @@ msgstr "" "Määrittää mikä nimimerkki 'ChanServ' palvelulla\n" " on." -#: config.py:96 +#: config.py:101 msgid "" "Determines what password the bot will use with\n" " ChanServ." @@ -104,7 +113,7 @@ msgstr "" "Määrittää mitä salasanaa botti käyttää\n" " ChanServin kanssa." -#: config.py:99 +#: config.py:104 msgid "" "Determines whether the bot will request to get\n" " opped by the ChanServ when it joins the channel." @@ -112,7 +121,7 @@ msgstr "" "Määrittää pyytääkö botti ChanServin oppaamaksi\n" " tulemista, kun se liittyy kanavalle." -#: config.py:102 +#: config.py:107 msgid "" "Determines whether the bot will request to get\n" " half-opped by the ChanServ when it joins the channel." @@ -120,7 +129,7 @@ msgstr "" "Määrittää pyytääkö botti tulla ChanServin puolioppaamaksi, kun\n" " se liittyy kanavalle." -#: config.py:105 +#: config.py:110 msgid "" "Determines whether the bot will request to get\n" " voiced by the ChanServ when it joins the channel." @@ -128,7 +137,7 @@ msgstr "" "Määrittää pyytääkö botti ChanServiltä äänen, kun\n" " se liittyy kanavalle." -#: plugin.py:54 +#: plugin.py:55 msgid "" "This plugin handles dealing with Services on networks that provide them.\n" " Basically, you should use the \"password\" command to tell the bot a " @@ -152,7 +161,7 @@ msgstr "" " Muiden komentojen, kuten identify, op, jne. ei\n" " pitäisi olla vaadittuja, jos botti on määritetty hyvin." -#: plugin.py:441 +#: plugin.py:472 msgid "" "You must set supybot.plugins.Services.ChanServ before I'm able to send the " "%s command." @@ -160,7 +169,7 @@ msgstr "" "Sinun täytyy asettaa supybot.plugins.Services.ChanServ ennen kuin pystyn " "lähettämään komennon %s." -#: plugin.py:447 +#: plugin.py:478 msgid "" "[<channel>]\n" "\n" @@ -175,11 +184,11 @@ msgstr "" " jos viestiä ei lähetetä kanavalla itsellään.\n" " " -#: plugin.py:453 +#: plugin.py:484 msgid "I'm already opped in %s." msgstr "Minut on jo opattu kanavalla %s." -#: plugin.py:460 +#: plugin.py:491 msgid "" "[<channel>]\n" "\n" @@ -194,11 +203,11 @@ msgstr "" " viestiä ei lähetetä kanavalla itsellään.\n" " " -#: plugin.py:466 +#: plugin.py:497 msgid "I'm already voiced in %s." msgstr "Minulla on jo ääni kanavalla %s." -#: plugin.py:483 +#: plugin.py:514 msgid "" "[<channel>]\n" "\n" @@ -219,7 +228,7 @@ msgstr "" " itsellään.\n" " " -#: plugin.py:504 +#: plugin.py:535 msgid "" "[<channel>]\n" "\n" @@ -240,7 +249,7 @@ msgstr "" " itsellään.\n" " " -#: plugin.py:526 +#: plugin.py:557 msgid "" "takes no arguments\n" "\n" @@ -252,11 +261,11 @@ msgstr "" " Tunnistautuu NickServille käyttämällä nykyistä nimimerkkiä.\n" " " -#: plugin.py:535 +#: plugin.py:566 msgid "I don't have a configured password for my current nick." msgstr "Minulla ei ole määritettyä salasanaa nimimerkilleni." -#: plugin.py:538 +#: plugin.py:569 msgid "" "You must set supybot.plugins.Services.NickServ before I'm able to do " "identify." @@ -264,7 +273,7 @@ msgstr "" "Sinun täytyy asettaa supybot.plugins.Services.NickServ ennen kuin pystyn " "tunnistautumaan." -#: plugin.py:544 +#: plugin.py:575 msgid "" "[<nick>]\n" "\n" @@ -279,11 +288,11 @@ msgstr "" " ghostaa botin määritetyn nimimerkin ja ottaa sen.\n" " " -#: plugin.py:553 +#: plugin.py:584 msgid "I cowardly refuse to ghost myself." msgstr "Minä pelkurimaisesti kieltäydyn ghostaamasta itseäni." -#: plugin.py:558 +#: plugin.py:589 msgid "" "You must set supybot.plugins.Services.NickServ before I'm able to ghost a " "nick." @@ -291,7 +300,7 @@ msgstr "" "Sinun täytyy asettaa supybot.plugins.Services.NickServ ennen kuin pystyn " "ghostaamaan nimimerkin." -#: plugin.py:563 +#: plugin.py:594 msgid "" "<text>\n" "\n" @@ -299,7 +308,7 @@ msgid "" " on Atheme, use: @nickserv REGISTER <password> <email-address>." msgstr "" -#: plugin.py:572 +#: plugin.py:603 #, fuzzy msgid "" "You must set supybot.plugins.Services.NickServ before I'm able to message " @@ -308,7 +317,7 @@ msgstr "" "Sinun täytyy asettaa supybot.plugins.Services.NickServ ennen kuin pystyn " "ghostaamaan nimimerkin." -#: plugin.py:577 +#: plugin.py:608 msgid "" "<text>\n" "\n" @@ -316,7 +325,7 @@ msgid "" " on Atheme, use: @chanserv REGISTER <#channel>." msgstr "" -#: plugin.py:586 +#: plugin.py:617 #, fuzzy msgid "" "You must set supybot.plugins.Services.ChanServ before I'm able to message " @@ -325,7 +334,7 @@ msgstr "" "Sinun täytyy asettaa supybot.plugins.Services.ChanServ ennen kuin pystyn " "lähettämään komennon %s." -#: plugin.py:593 +#: plugin.py:624 msgid "" "<nick> [<password>]\n" "\n" @@ -341,11 +350,11 @@ msgstr "" " ole annettu, poistaa <nimimerkin> määritetyistä nimimerkeistä.\n" " " -#: plugin.py:605 +#: plugin.py:636 msgid "That nick was not configured with a password." msgstr "Tuota nimimerkkiä ei ole määritetty salasanan kanssa." -#: plugin.py:618 +#: plugin.py:649 msgid "" "takes no arguments\n" "\n" @@ -361,27 +370,27 @@ msgstr "" " ghostaamaan.\n" " " -#: plugin.py:628 +#: plugin.py:659 msgid "I'm not currently configured for any nicks." msgstr "Minulle ei ole tällä hetkellä määritetty yhtään nimimerkkiä." -#: plugin.py:635 +#: plugin.py:666 msgid "Experimental IRC extensions are not enabled for this bot." msgstr "" -#: plugin.py:641 +#: plugin.py:672 msgid "This network does not support draft/account-registration." msgstr "" -#: plugin.py:647 +#: plugin.py:678 msgid "This network does not support labeled-response." msgstr "" -#: plugin.py:653 +#: plugin.py:684 msgid "This bot is already authenticated on the network." msgstr "" -#: plugin.py:658 +#: plugin.py:689 msgid "" "[<network>] <password> [<email>]\n" "\n" @@ -394,11 +403,11 @@ msgid "" " your email address." msgstr "" -#: plugin.py:672 +#: plugin.py:703 msgid "This network requires an email address to register." msgstr "" -#: plugin.py:686 +#: plugin.py:717 msgid "" "[<network>] <account> <code>\n" "\n" diff --git a/plugins/Services/locales/fr.po b/plugins/Services/locales/fr.po index 1c95d7ef5..6ab93dc8f 100644 --- a/plugins/Services/locales/fr.po +++ b/plugins/Services/locales/fr.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: Limnoria\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: \n" "Last-Translator: Valentin Lorentz <progval@gmail.com>\n" "Language-Team: Limnoria <progval@gmail.com>\n" @@ -37,23 +37,24 @@ msgstr "Comment est nommé ChanServ ?" msgid "What is your NickServ named?" msgstr "Comment est nommé NickServ ?" -#: config.py:70 +#: config.py:71 +#, fuzzy msgid "" -"Determines what nicks the bot will use with\n" +"Space-separated list of nicks the bot will use with\n" " services." msgstr "Détermine quels nicks le bot utilisera avec les services." -#: config.py:77 +#: config.py:78 msgid "" "Determines what networks this plugin\n" " will be disabled on." msgstr "Détermine sur quels réseaux ce plugin sera désactivé." -#: config.py:77 +#: config.py:78 msgid "QuakeNet" msgstr "QuakeNet" -#: config.py:81 +#: config.py:82 msgid "" "Determines whether the bot will not join any\n" " channels until it is identified. This may be useful, for instances, if\n" @@ -66,7 +67,7 @@ msgstr "" "rejoindre des canaux en +r (=des canaux que l'on ne peut joindre sans être " "identifié)" -#: config.py:86 +#: config.py:87 #, fuzzy msgid "" "Determines how many seconds the bot will\n" @@ -74,25 +75,33 @@ msgid "" msgstr "" "Détermine le nombre de secondes entre deux tentatives successives de GHOST." -#: config.py:89 +#: config.py:90 +msgid "" +"Determines the NickServ command to use for GHOST. If the network\n" +" you're using runs Anope, set this to \"RECOVER\". If the network you're " +"using runs Atheme,\n" +" set this to \"GHOST\" or \"REGAIN\"." +msgstr "" + +#: config.py:94 msgid "" "Determines what nick the 'NickServ' service\n" " has." msgstr "Détermine quel nick NickServ a." -#: config.py:93 +#: config.py:98 msgid "" "Determines what nick the 'ChanServ' service\n" " has." msgstr "Détermine quel nick ChanServ a." -#: config.py:96 +#: config.py:101 msgid "" "Determines what password the bot will use with\n" " ChanServ." msgstr "Détermine quel mot de passe le bot utilisera avec ChanServ." -#: config.py:99 +#: config.py:104 msgid "" "Determines whether the bot will request to get\n" " opped by the ChanServ when it joins the channel." @@ -100,7 +109,7 @@ msgstr "" "Détermine si le bot demandera à être oppé par ChanServ lorsqu'il rejoint le " "canal." -#: config.py:102 +#: config.py:107 msgid "" "Determines whether the bot will request to get\n" " half-opped by the ChanServ when it joins the channel." @@ -108,7 +117,7 @@ msgstr "" "Détermine si le bot demandera à être oppé par NickServ lorsqu'il rejoint le " "canal." -#: config.py:105 +#: config.py:110 msgid "" "Determines whether the bot will request to get\n" " voiced by the ChanServ when it joins the channel." @@ -116,7 +125,7 @@ msgstr "" "Détermine si le bot demandera à être voicé par ChanServ lorsqu'il rejoint le " "canal." -#: plugin.py:54 +#: plugin.py:55 msgid "" "This plugin handles dealing with Services on networks that provide them.\n" " Basically, you should use the \"password\" command to tell the bot a " @@ -139,7 +148,7 @@ msgstr "" "commandes, comme 'identify', 'op', ... ne sont pas nécessaires quand le bot " "est configuré correctement." -#: plugin.py:441 +#: plugin.py:472 msgid "" "You must set supybot.plugins.Services.ChanServ before I'm able to send the " "%s command." @@ -147,7 +156,7 @@ msgstr "" "vous devez définir supybot.plugins.Services.ChanServ avant que je ne puisse " "envoyer la commande %s" -#: plugin.py:447 +#: plugin.py:478 msgid "" "[<channel>]\n" "\n" @@ -160,11 +169,11 @@ msgstr "" "Demande à être opé par ChanServ sur le <canal>. <canal> n'est nécessaire que " "si la commande n'est pas envoyée sur le canal lui-même." -#: plugin.py:453 +#: plugin.py:484 msgid "I'm already opped in %s." msgstr "Je suis déjà opé sur %s." -#: plugin.py:460 +#: plugin.py:491 msgid "" "[<channel>]\n" "\n" @@ -177,11 +186,11 @@ msgstr "" " Demande à être voicé par ChanServ sur le <canal>. <canal> n'est nécessaire " "que si la commande n'est pas envoyée sur le canal lui-même." -#: plugin.py:466 +#: plugin.py:497 msgid "I'm already voiced in %s." msgstr "Je suis déjà voicé sur %s." -#: plugin.py:483 +#: plugin.py:514 msgid "" "[<channel>]\n" "\n" @@ -200,7 +209,7 @@ msgstr "" "n'avez probablement pas besoin d'utiliser cette commande sur le canal en " "question." -#: plugin.py:504 +#: plugin.py:535 msgid "" "[<channel>]\n" "\n" @@ -219,7 +228,7 @@ msgstr "" "n'avez probablement pas besoin d'utiliser cette commande sur le canal en " "question." -#: plugin.py:526 +#: plugin.py:557 msgid "" "takes no arguments\n" "\n" @@ -230,11 +239,11 @@ msgstr "" "\n" "S'identifie auprès de NickServ, en utilisant le nick actuel." -#: plugin.py:535 +#: plugin.py:566 msgid "I don't have a configured password for my current nick." msgstr "Je n'ai pas de mot de passe configuré pour mon nick actuel." -#: plugin.py:538 +#: plugin.py:569 msgid "" "You must set supybot.plugins.Services.NickServ before I'm able to do " "identify." @@ -242,7 +251,7 @@ msgstr "" "Vous devez définir supybot.plugins.Services.NickServ avant que je ne puisse " "m'identifier" -#: plugin.py:544 +#: plugin.py:575 msgid "" "[<nick>]\n" "\n" @@ -255,11 +264,11 @@ msgstr "" "Ghost le nick donné du bot et le prend. Si aucun nick n'est donné, utilise " "celui configuré." -#: plugin.py:553 +#: plugin.py:584 msgid "I cowardly refuse to ghost myself." msgstr "Je suis trop couard pour me ghoster moi-même." -#: plugin.py:558 +#: plugin.py:589 msgid "" "You must set supybot.plugins.Services.NickServ before I'm able to ghost a " "nick." @@ -267,7 +276,7 @@ msgstr "" "Vous devez définir supybot.plugins.Services.NickServ avant que je ne puisse " "ghoster un nick." -#: plugin.py:563 +#: plugin.py:594 msgid "" "<text>\n" "\n" @@ -275,7 +284,7 @@ msgid "" " on Atheme, use: @nickserv REGISTER <password> <email-address>." msgstr "" -#: plugin.py:572 +#: plugin.py:603 #, fuzzy msgid "" "You must set supybot.plugins.Services.NickServ before I'm able to message " @@ -284,7 +293,7 @@ msgstr "" "Vous devez définir supybot.plugins.Services.NickServ avant que je ne puisse " "ghoster un nick." -#: plugin.py:577 +#: plugin.py:608 msgid "" "<text>\n" "\n" @@ -292,7 +301,7 @@ msgid "" " on Atheme, use: @chanserv REGISTER <#channel>." msgstr "" -#: plugin.py:586 +#: plugin.py:617 #, fuzzy msgid "" "You must set supybot.plugins.Services.ChanServ before I'm able to message " @@ -301,7 +310,7 @@ msgstr "" "vous devez définir supybot.plugins.Services.ChanServ avant que je ne puisse " "envoyer la commande %s" -#: plugin.py:593 +#: plugin.py:624 msgid "" "<nick> [<password>]\n" "\n" @@ -315,11 +324,11 @@ msgstr "" "Défini le <mot de passe> NickServ pour le <nick>. Si le <mot de passe> n'est " "pas donné, supprime <nick> de la liste des nis, configurés." -#: plugin.py:605 +#: plugin.py:636 msgid "That nick was not configured with a password." msgstr "Ce nick n'est pas configuré avec un mot de passe." -#: plugin.py:618 +#: plugin.py:649 msgid "" "takes no arguments\n" "\n" @@ -333,27 +342,27 @@ msgstr "" "Retourne les nicks pour lesquels ce plugin est configuré pour s'identifier " "et ghoster." -#: plugin.py:628 +#: plugin.py:659 msgid "I'm not currently configured for any nicks." msgstr "Je ne suis actuellement configuré pour aucun nick." -#: plugin.py:635 +#: plugin.py:666 msgid "Experimental IRC extensions are not enabled for this bot." msgstr "" -#: plugin.py:641 +#: plugin.py:672 msgid "This network does not support draft/account-registration." msgstr "" -#: plugin.py:647 +#: plugin.py:678 msgid "This network does not support labeled-response." msgstr "" -#: plugin.py:653 +#: plugin.py:684 msgid "This bot is already authenticated on the network." msgstr "" -#: plugin.py:658 +#: plugin.py:689 msgid "" "[<network>] <password> [<email>]\n" "\n" @@ -366,11 +375,11 @@ msgid "" " your email address." msgstr "" -#: plugin.py:672 +#: plugin.py:703 msgid "This network requires an email address to register." msgstr "" -#: plugin.py:686 +#: plugin.py:717 msgid "" "[<network>] <account> <code>\n" "\n" diff --git a/plugins/Services/locales/it.po b/plugins/Services/locales/it.po index 09e69d2d0..4e622ab01 100644 --- a/plugins/Services/locales/it.po +++ b/plugins/Services/locales/it.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: Limnoria\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2011-07-10 12:57+0200\n" "Last-Translator: skizzhg <skizzhg@gmx.com>\n" "Language-Team: Italian <skizzhg@gmx.com>\n" @@ -33,23 +33,24 @@ msgstr "Come si chiama ChanServ?" msgid "What is your NickServ named?" msgstr "Come si chiama NickServ?" -#: config.py:70 +#: config.py:71 +#, fuzzy msgid "" -"Determines what nicks the bot will use with\n" +"Space-separated list of nicks the bot will use with\n" " services." msgstr "Determina quali nick il bot userà con i servizi." -#: config.py:77 +#: config.py:78 msgid "" "Determines what networks this plugin\n" " will be disabled on." msgstr "Determina su quali reti sarà disattivato questo plugin." -#: config.py:77 +#: config.py:78 msgid "QuakeNet" msgstr "QuakeNet" -#: config.py:81 +#: config.py:82 msgid "" "Determines whether the bot will not join any\n" " channels until it is identified. This may be useful, for instances, if\n" @@ -62,7 +63,7 @@ msgstr "" " entrare in un canale con un mode +r (su Freenode, +j su Azzurra) che\n" " non permette il join a utenti non identificati." -#: config.py:86 +#: config.py:87 #, fuzzy msgid "" "Determines how many seconds the bot will\n" @@ -71,25 +72,33 @@ msgstr "" "Determina quanti secondi il bot aspetterà tra un tentativo di GHOST e " "l'altro." -#: config.py:89 +#: config.py:90 +msgid "" +"Determines the NickServ command to use for GHOST. If the network\n" +" you're using runs Anope, set this to \"RECOVER\". If the network you're " +"using runs Atheme,\n" +" set this to \"GHOST\" or \"REGAIN\"." +msgstr "" + +#: config.py:94 msgid "" "Determines what nick the 'NickServ' service\n" " has." msgstr "Determina quale nick ha il servizio \"NickServ\"." -#: config.py:93 +#: config.py:98 msgid "" "Determines what nick the 'ChanServ' service\n" " has." msgstr "Determina quale nick ha il servizio \"ChanServ\"." -#: config.py:96 +#: config.py:101 msgid "" "Determines what password the bot will use with\n" " ChanServ." msgstr "Determina quale password il bot userà con ChanServ." -#: config.py:99 +#: config.py:104 msgid "" "Determines whether the bot will request to get\n" " opped by the ChanServ when it joins the channel." @@ -97,7 +106,7 @@ msgstr "" "Determina se il bot richiederà lo stato di op da ChanServ quando entra nel " "canale." -#: config.py:102 +#: config.py:107 msgid "" "Determines whether the bot will request to get\n" " half-opped by the ChanServ when it joins the channel." @@ -105,14 +114,14 @@ msgstr "" "Determina se il bot richiederà lo stato di halfop da ChanServ quando entra " "nel canale." -#: config.py:105 +#: config.py:110 msgid "" "Determines whether the bot will request to get\n" " voiced by the ChanServ when it joins the channel." msgstr "" "Determina se il bot richiederà il voice da ChanServ quando entra nel canale." -#: plugin.py:54 +#: plugin.py:55 msgid "" "This plugin handles dealing with Services on networks that provide them.\n" " Basically, you should use the \"password\" command to tell the bot a " @@ -140,7 +149,7 @@ msgstr "" "comandi\n" " come \"identify\", \"op\", ecc. non dovrebbero essere necessari." -#: plugin.py:441 +#: plugin.py:472 msgid "" "You must set supybot.plugins.Services.ChanServ before I'm able to send the " "%s command." @@ -148,7 +157,7 @@ msgstr "" "È necessario impostare la variabile supybot.plugins.Services.ChanServ " "affinché possa inviare il comando %s." -#: plugin.py:447 +#: plugin.py:478 msgid "" "[<channel>]\n" "\n" @@ -163,11 +172,11 @@ msgstr "" "stesso.\n" " " -#: plugin.py:453 +#: plugin.py:484 msgid "I'm already opped in %s." msgstr "Sono già op in %s." -#: plugin.py:460 +#: plugin.py:491 msgid "" "[<channel>]\n" "\n" @@ -182,11 +191,11 @@ msgstr "" "stesso.\n" " " -#: plugin.py:466 +#: plugin.py:497 msgid "I'm already voiced in %s." msgstr "Ho già il voice in %s." -#: plugin.py:483 +#: plugin.py:514 msgid "" "[<channel>]\n" "\n" @@ -207,7 +216,7 @@ msgstr "" "canale.\n" " " -#: plugin.py:504 +#: plugin.py:535 msgid "" "[<channel>]\n" "\n" @@ -228,7 +237,7 @@ msgstr "" " che se serve questo comando non lo si stia inviando in canale.\n" " " -#: plugin.py:526 +#: plugin.py:557 msgid "" "takes no arguments\n" "\n" @@ -240,11 +249,11 @@ msgstr "" " Si identifica con NickServ utilizzando l'attuale nick in uso.\n" " " -#: plugin.py:535 +#: plugin.py:566 msgid "I don't have a configured password for my current nick." msgstr "Non ho una password configurata per il mio attuale nick." -#: plugin.py:538 +#: plugin.py:569 msgid "" "You must set supybot.plugins.Services.NickServ before I'm able to do " "identify." @@ -252,7 +261,7 @@ msgstr "" "È necessario impostare la variabile supybot.plugins.Services.NickServ " "affinché possa identificarmi." -#: plugin.py:544 +#: plugin.py:575 msgid "" "[<nick>]\n" "\n" @@ -267,12 +276,12 @@ msgstr "" " Se non è specificato alcun nick, riprende quello configurato.\n" " " -#: plugin.py:553 +#: plugin.py:584 msgid "I cowardly refuse to ghost myself." msgstr "" "Codardamente mi rifiuto di terminare una connessione \"fantasma\" (ghost)." -#: plugin.py:558 +#: plugin.py:589 msgid "" "You must set supybot.plugins.Services.NickServ before I'm able to ghost a " "nick." @@ -280,7 +289,7 @@ msgstr "" "È necessario impostare la variabile supybot.plugins.Services.NickServ " "affinché possa riprendermi il nick (ghost)." -#: plugin.py:563 +#: plugin.py:594 msgid "" "<text>\n" "\n" @@ -288,7 +297,7 @@ msgid "" " on Atheme, use: @nickserv REGISTER <password> <email-address>." msgstr "" -#: plugin.py:572 +#: plugin.py:603 #, fuzzy msgid "" "You must set supybot.plugins.Services.NickServ before I'm able to message " @@ -297,7 +306,7 @@ msgstr "" "È necessario impostare la variabile supybot.plugins.Services.NickServ " "affinché possa riprendermi il nick (ghost)." -#: plugin.py:577 +#: plugin.py:608 msgid "" "<text>\n" "\n" @@ -305,7 +314,7 @@ msgid "" " on Atheme, use: @chanserv REGISTER <#channel>." msgstr "" -#: plugin.py:586 +#: plugin.py:617 #, fuzzy msgid "" "You must set supybot.plugins.Services.ChanServ before I'm able to message " @@ -314,7 +323,7 @@ msgstr "" "È necessario impostare la variabile supybot.plugins.Services.ChanServ " "affinché possa inviare il comando %s." -#: plugin.py:593 +#: plugin.py:624 msgid "" "<nick> [<password>]\n" "\n" @@ -329,11 +338,11 @@ msgstr "" " non è specificata, rimuove <nick> dai nick configurati.\n" " " -#: plugin.py:605 +#: plugin.py:636 msgid "That nick was not configured with a password." msgstr "Questo nick non è stato configurato con una password." -#: plugin.py:618 +#: plugin.py:649 msgid "" "takes no arguments\n" "\n" @@ -348,27 +357,27 @@ msgstr "" "l'identificazione e il ghost.\n" " " -#: plugin.py:628 +#: plugin.py:659 msgid "I'm not currently configured for any nicks." msgstr "Al momento non sono configurato per alcun nick." -#: plugin.py:635 +#: plugin.py:666 msgid "Experimental IRC extensions are not enabled for this bot." msgstr "" -#: plugin.py:641 +#: plugin.py:672 msgid "This network does not support draft/account-registration." msgstr "" -#: plugin.py:647 +#: plugin.py:678 msgid "This network does not support labeled-response." msgstr "" -#: plugin.py:653 +#: plugin.py:684 msgid "This bot is already authenticated on the network." msgstr "" -#: plugin.py:658 +#: plugin.py:689 msgid "" "[<network>] <password> [<email>]\n" "\n" @@ -381,11 +390,11 @@ msgid "" " your email address." msgstr "" -#: plugin.py:672 +#: plugin.py:703 msgid "This network requires an email address to register." msgstr "" -#: plugin.py:686 +#: plugin.py:717 msgid "" "[<network>] <account> <code>\n" "\n" diff --git a/plugins/Services/messages.pot b/plugins/Services/messages.pot index 97c61cc85..36304bc3b 100644 --- a/plugins/Services/messages.pot +++ b/plugins/Services/messages.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -35,23 +35,23 @@ msgstr "" msgid "What is your NickServ named?" msgstr "" -#: config.py:70 +#: config.py:71 msgid "" -"Determines what nicks the bot will use with\n" +"Space-separated list of nicks the bot will use with\n" " services." msgstr "" -#: config.py:77 +#: config.py:78 msgid "" "Determines what networks this plugin\n" " will be disabled on." msgstr "" -#: config.py:77 +#: config.py:78 msgid "QuakeNet" msgstr "" -#: config.py:81 +#: config.py:82 msgid "" "Determines whether the bot will not join any\n" " channels until it is identified. This may be useful, for instances, if\n" @@ -59,49 +59,56 @@ msgid "" " joining +r channels that won't allow you to join unless you identify." msgstr "" -#: config.py:86 +#: config.py:87 msgid "" "Determines how many seconds the bot will\n" " wait between successive GHOST attempts. Set this to 0 to disable GHOST." msgstr "" -#: config.py:89 +#: config.py:90 +msgid "" +"Determines the NickServ command to use for GHOST. If the network\n" +" you're using runs Anope, set this to \"RECOVER\". If the network you're using runs Atheme,\n" +" set this to \"GHOST\" or \"REGAIN\"." +msgstr "" + +#: config.py:94 msgid "" "Determines what nick the 'NickServ' service\n" " has." msgstr "" -#: config.py:93 +#: config.py:98 msgid "" "Determines what nick the 'ChanServ' service\n" " has." msgstr "" -#: config.py:96 +#: config.py:101 msgid "" "Determines what password the bot will use with\n" " ChanServ." msgstr "" -#: config.py:99 +#: config.py:104 msgid "" "Determines whether the bot will request to get\n" " opped by the ChanServ when it joins the channel." msgstr "" -#: config.py:102 +#: config.py:107 msgid "" "Determines whether the bot will request to get\n" " half-opped by the ChanServ when it joins the channel." msgstr "" -#: config.py:105 +#: config.py:110 msgid "" "Determines whether the bot will request to get\n" " voiced by the ChanServ when it joins the channel." msgstr "" -#: plugin.py:54 +#: plugin.py:55 #, docstring msgid "" "This plugin handles dealing with Services on networks that provide them.\n" @@ -114,11 +121,11 @@ msgid "" " necessary if the bot is properly configured." msgstr "" -#: plugin.py:441 +#: plugin.py:472 msgid "You must set supybot.plugins.Services.ChanServ before I'm able to send the %s command." msgstr "" -#: plugin.py:447 +#: plugin.py:478 #, docstring msgid "" "[<channel>]\n" @@ -128,11 +135,11 @@ msgid "" " " msgstr "" -#: plugin.py:453 +#: plugin.py:484 msgid "I'm already opped in %s." msgstr "" -#: plugin.py:460 +#: plugin.py:491 #, docstring msgid "" "[<channel>]\n" @@ -142,11 +149,11 @@ msgid "" " " msgstr "" -#: plugin.py:466 +#: plugin.py:497 msgid "I'm already voiced in %s." msgstr "" -#: plugin.py:483 +#: plugin.py:514 #, docstring msgid "" "[<channel>]\n" @@ -158,7 +165,7 @@ msgid "" " " msgstr "" -#: plugin.py:504 +#: plugin.py:535 #, docstring msgid "" "[<channel>]\n" @@ -170,7 +177,7 @@ msgid "" " " msgstr "" -#: plugin.py:526 +#: plugin.py:557 #, docstring msgid "" "takes no arguments\n" @@ -179,15 +186,15 @@ msgid "" " " msgstr "" -#: plugin.py:535 +#: plugin.py:566 msgid "I don't have a configured password for my current nick." msgstr "" -#: plugin.py:538 +#: plugin.py:569 msgid "You must set supybot.plugins.Services.NickServ before I'm able to do identify." msgstr "" -#: plugin.py:544 +#: plugin.py:575 #, docstring msgid "" "[<nick>]\n" @@ -197,15 +204,15 @@ msgid "" " " msgstr "" -#: plugin.py:553 +#: plugin.py:584 msgid "I cowardly refuse to ghost myself." msgstr "" -#: plugin.py:558 +#: plugin.py:589 msgid "You must set supybot.plugins.Services.NickServ before I'm able to ghost a nick." msgstr "" -#: plugin.py:563 +#: plugin.py:594 #, docstring msgid "" "<text>\n" @@ -214,11 +221,11 @@ msgid "" " on Atheme, use: @nickserv REGISTER <password> <email-address>." msgstr "" -#: plugin.py:572 +#: plugin.py:603 msgid "You must set supybot.plugins.Services.NickServ before I'm able to message NickServ" msgstr "" -#: plugin.py:577 +#: plugin.py:608 #, docstring msgid "" "<text>\n" @@ -227,11 +234,11 @@ msgid "" " on Atheme, use: @chanserv REGISTER <#channel>." msgstr "" -#: plugin.py:586 +#: plugin.py:617 msgid "You must set supybot.plugins.Services.ChanServ before I'm able to message ChanServ" msgstr "" -#: plugin.py:593 +#: plugin.py:624 #, docstring msgid "" "<nick> [<password>]\n" @@ -241,11 +248,11 @@ msgid "" " " msgstr "" -#: plugin.py:605 +#: plugin.py:636 msgid "That nick was not configured with a password." msgstr "" -#: plugin.py:618 +#: plugin.py:649 #, docstring msgid "" "takes no arguments\n" @@ -255,27 +262,27 @@ msgid "" " " msgstr "" -#: plugin.py:628 +#: plugin.py:659 msgid "I'm not currently configured for any nicks." msgstr "" -#: plugin.py:635 +#: plugin.py:666 msgid "Experimental IRC extensions are not enabled for this bot." msgstr "" -#: plugin.py:641 +#: plugin.py:672 msgid "This network does not support draft/account-registration." msgstr "" -#: plugin.py:647 +#: plugin.py:678 msgid "This network does not support labeled-response." msgstr "" -#: plugin.py:653 +#: plugin.py:684 msgid "This bot is already authenticated on the network." msgstr "" -#: plugin.py:658 +#: plugin.py:689 #, docstring msgid "" "[<network>] <password> [<email>]\n" @@ -287,11 +294,11 @@ msgid "" " your email address." msgstr "" -#: plugin.py:672 +#: plugin.py:703 msgid "This network requires an email address to register." msgstr "" -#: plugin.py:686 +#: plugin.py:717 #, docstring msgid "" "[<network>] <account> <code>\n" diff --git a/plugins/ShrinkUrl/messages.pot b/plugins/ShrinkUrl/messages.pot index 36e541da6..b6bea623c 100644 --- a/plugins/ShrinkUrl/messages.pot +++ b/plugins/ShrinkUrl/messages.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/plugins/Status/locales/de.po b/plugins/Status/locales/de.po index d98017988..d0fbd1cdc 100644 --- a/plugins/Status/locales/de.po +++ b/plugins/Status/locales/de.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: Supybot\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2012-04-27 15:46+0200\n" "Last-Translator: Mikaela Suomalainen <mikaela.suomalainen@outlook.com>\n" "Language-Team: German <fbesser@gmail.com>\n" @@ -53,19 +53,21 @@ msgstr "" "\n" "Gibt den Status des Bots aus." -#: plugin.py:83 -msgid "%s as %L" -msgstr "%s als %L" +#: plugin.py:109 +msgid "" +"I am connected to %s as %s: Channels: %s, Ops: %s, Half-Ops: %s, Voiced: %s, " +"Regular: %s" +msgstr "" -#: plugin.py:84 -msgid "I am connected to %L." -msgstr "Ich bin verbunden zu %L." - -#: plugin.py:86 +#: plugin.py:121 msgid "I am currently in code profiling mode." msgstr "Momentan bin ich im quelltextanalyse Modus." -#: plugin.py:92 +#: plugin.py:122 +msgid "%L" +msgstr "" + +#: plugin.py:128 msgid "" "takes no arguments\n" "\n" @@ -76,11 +78,11 @@ msgstr "" "\n" "Gibt aus wieviele Threads momentan aktiv sind." -#: plugin.py:98 +#: plugin.py:134 msgid "I have spawned %n; %n %b still currently active: %L." msgstr "Ich habe %n erzeugt. %n %b sind jetzt noch Aktiv: %L." -#: plugin.py:105 +#: plugin.py:141 #, fuzzy msgid "" "takes no arguments\n" @@ -93,7 +95,7 @@ msgstr "" "\n" "Gibt aus wieviele Threads momentan aktiv sind." -#: plugin.py:120 +#: plugin.py:156 msgid "" "takes no arguments\n" "\n" @@ -104,11 +106,11 @@ msgstr "" "\n" "Gibt einige interessante Netzwerk bezogene Statistiken aus." -#: plugin.py:128 +#: plugin.py:164 msgid "an indeterminate amount of time" msgstr "eine unbestimmte Zeit" -#: plugin.py:129 +#: plugin.py:165 msgid "" "I have received %s messages for a total of %S. I have sent %s messages for " "a total of %S. I have been connected to %s for %s." @@ -116,7 +118,7 @@ msgstr "" "Ich habe %s Nachrichten empfangen, im totalen %S. Ich habe %s Nachrichten " "gesendet, im totalen %S. Ich bin mit %s verbunden, seit %s." -#: plugin.py:138 +#: plugin.py:174 msgid "" "takes no arguments\n" "\n" @@ -127,7 +129,7 @@ msgstr "" "\n" "Gibt einige interessante CPU bezogene Statistiken des Bots aus." -#: plugin.py:148 +#: plugin.py:184 msgid "" "My children have taken %.2f seconds of user time and %.2f seconds of system " "time for a total of %.2f seconds of CPU time." @@ -135,7 +137,7 @@ msgstr "" "Meine Kindsprozesse haben %.2f Sekunden an Nutzerzeit und %.2f Systemzeit " "gebraucht, im totalen %.2f Sekunden der CPU Zeit." -#: plugin.py:155 +#: plugin.py:191 msgid "" "I have taken %.2f seconds of user time and %.2f seconds of system time, for " "a total of %.2f seconds of CPU time. %s" @@ -143,20 +145,20 @@ msgstr "" "Ich habe %.2f Sekunden an benutzer Zeit und %.2f Sekunden an Systemzeit " "benötigt, in allen %.2f CPU Zeit. %s" -#: plugin.py:177 +#: plugin.py:213 msgid "Unable to run ps command." msgstr "Ich kann den Befehl ps nicht ausführen." -#: plugin.py:184 +#: plugin.py:220 msgid " I'm taking up %S of memory." msgstr " Ich verbrauche %S Speicher." -#: plugin.py:187 +#: plugin.py:223 #, fuzzy msgid " I'm taking up an unknown amount of memory." msgstr " Ich verbrauche %S Speicher." -#: plugin.py:195 +#: plugin.py:231 msgid "" "takes no arguments\n" "\n" @@ -167,11 +169,11 @@ msgstr "" "\n" "Gibt einige interessante befehlbezogene Statistiken aus." -#: plugin.py:205 +#: plugin.py:241 msgid "I offer a total of %n in %n. I have processed %n." msgstr "Ich biete %n in %n an. Ich habe %n bearbeitet." -#: plugin.py:214 +#: plugin.py:250 msgid "" "takes no arguments\n" "\n" @@ -182,7 +184,7 @@ msgstr "" "\n" "Gibt eine Liste der Befehle zurück, die der Bot anbietet." -#: plugin.py:228 +#: plugin.py:264 msgid "" "takes no arguments\n" "\n" @@ -193,11 +195,11 @@ msgstr "" "\n" "Gibt aus wie lange der Bot schon läuft." -#: plugin.py:232 +#: plugin.py:268 msgid "I have been running for %s." msgstr "Ich laufe seit %s." -#: plugin.py:239 +#: plugin.py:275 msgid "" "takes no arguments\n" "\n" @@ -208,7 +210,7 @@ msgstr "" "\n" "Gibt den Server aus mit dem der Bot verbunden ist." -#: plugin.py:248 +#: plugin.py:284 #, fuzzy msgid "" "takes no arguments\n" @@ -219,3 +221,9 @@ msgstr "" "hat keine Arguments\n" "\n" "Gibt den Server aus mit dem der Bot verbunden ist." + +#~ msgid "%s as %L" +#~ msgstr "%s als %L" + +#~ msgid "I am connected to %L." +#~ msgstr "Ich bin verbunden zu %L." diff --git a/plugins/Status/locales/fi.po b/plugins/Status/locales/fi.po index b34eafc36..a919e48b7 100644 --- a/plugins/Status/locales/fi.po +++ b/plugins/Status/locales/fi.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: Status plugin for Limnoria\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2014-12-20 11:37+0200\n" "Last-Translator: Mikaela Suomalainen <mikaela.suomalainen@outlook.com>\n" "Language-Team: \n" @@ -61,19 +61,21 @@ msgstr "" " Palauttaa botin tilan.\n" " " -#: plugin.py:83 -msgid "%s as %L" -msgstr "%s verkossa %L" +#: plugin.py:109 +msgid "" +"I am connected to %s as %s: Channels: %s, Ops: %s, Half-Ops: %s, Voiced: %s, " +"Regular: %s" +msgstr "" -#: plugin.py:84 -msgid "I am connected to %L." -msgstr "Olen yhdistänyt verkkoon %L" - -#: plugin.py:86 +#: plugin.py:121 msgid "I am currently in code profiling mode." msgstr "Olen tällä hetkellä koodin profilointi tilassa." -#: plugin.py:92 +#: plugin.py:122 +msgid "%L" +msgstr "" + +#: plugin.py:128 msgid "" "takes no arguments\n" "\n" @@ -85,11 +87,11 @@ msgstr "" " Palauttaa botin tämänhetkiset ketjut, jotka ovat aktiivisia.\n" " " -#: plugin.py:98 +#: plugin.py:134 msgid "I have spawned %n; %n %b still currently active: %L." msgstr "Minä olen ilmestyttänyt %n; %n %b yhä aktiivinen: %L." -#: plugin.py:105 +#: plugin.py:141 msgid "" "takes no arguments\n" "\n" @@ -104,7 +106,7 @@ msgstr "" " aktiivisia..\n" " " -#: plugin.py:120 +#: plugin.py:156 msgid "" "takes no arguments\n" "\n" @@ -117,11 +119,11 @@ msgstr "" "tilastotietoja.\n" " " -#: plugin.py:128 +#: plugin.py:164 msgid "an indeterminate amount of time" msgstr "määrittämätön määrä aikaa" -#: plugin.py:129 +#: plugin.py:165 msgid "" "I have received %s messages for a total of %S. I have sent %s messages for " "a total of %S. I have been connected to %s for %s." @@ -130,7 +132,7 @@ msgstr "" "lähettänyt %s viestiä määrän %S edestä. Olen ollut yhdistettynä palvelimeen " "%s ajan %s." -#: plugin.py:138 +#: plugin.py:174 msgid "" "takes no arguments\n" "\n" @@ -143,7 +145,7 @@ msgstr "" "tilastotietoja botista.\n" " " -#: plugin.py:148 +#: plugin.py:184 msgid "" "My children have taken %.2f seconds of user time and %.2f seconds of system " "time for a total of %.2f seconds of CPU time." @@ -151,7 +153,7 @@ msgstr "" "Minun lapseni ovat vieneet %.2f käyttäjän aikaa ja %.2f sekuntia " "järjestelmän aikaa. Lapseni ovat ottaneet yhteensä %.2f sekuntia CPU aikaa." -#: plugin.py:155 +#: plugin.py:191 msgid "" "I have taken %.2f seconds of user time and %.2f seconds of system time, for " "a total of %.2f seconds of CPU time. %s" @@ -159,20 +161,20 @@ msgstr "" "Olen ottanut %.2f sekuntia käyttäjän aikaa %.2f sekuntia järjestelmän aikaa. " "Olen ottanut yhteensä %.2f sekuntia CPU ajasta. %s" -#: plugin.py:177 +#: plugin.py:213 msgid "Unable to run ps command." msgstr "ps komentoa ei pystytä suorittamaan." -#: plugin.py:184 +#: plugin.py:220 msgid " I'm taking up %S of memory." msgstr " Muistinkäyttöni on yhteensä %S." -#: plugin.py:187 +#: plugin.py:223 #, fuzzy msgid " I'm taking up an unknown amount of memory." msgstr " Muistinkäyttöni on yhteensä %S." -#: plugin.py:195 +#: plugin.py:231 msgid "" "takes no arguments\n" "\n" @@ -185,11 +187,11 @@ msgstr "" "tilastotietoja.\n" " " -#: plugin.py:205 +#: plugin.py:241 msgid "I offer a total of %n in %n. I have processed %n." msgstr "Tarjoan yhteensä %n määrän %n sisässä. Olen käsitellyt %n." -#: plugin.py:214 +#: plugin.py:250 msgid "" "takes no arguments\n" "\n" @@ -201,7 +203,7 @@ msgstr "" " Palauttaa listan komennoista, jotka botti tarjoaa.\n" " " -#: plugin.py:228 +#: plugin.py:264 msgid "" "takes no arguments\n" "\n" @@ -213,11 +215,11 @@ msgstr "" " Palauttaa ajan, jonka botti on ollut käynnissä.\n" " " -#: plugin.py:232 +#: plugin.py:268 msgid "I have been running for %s." msgstr "Olen ollut käynnissä ajan %s." -#: plugin.py:239 +#: plugin.py:275 msgid "" "takes no arguments\n" "\n" @@ -229,7 +231,7 @@ msgstr "" " Palauttaa palvelimen, jolla botti on.\n" " " -#: plugin.py:248 +#: plugin.py:284 msgid "" "takes no arguments\n" "\n" @@ -240,3 +242,9 @@ msgstr "" "\n" " Palauttaa verkon, jossa botti on.\n" " " + +#~ msgid "%s as %L" +#~ msgstr "%s verkossa %L" + +#~ msgid "I am connected to %L." +#~ msgstr "Olen yhdistänyt verkkoon %L" diff --git a/plugins/Status/locales/fr.po b/plugins/Status/locales/fr.po index 835086a62..8f69669f9 100644 --- a/plugins/Status/locales/fr.po +++ b/plugins/Status/locales/fr.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: Limnoria\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: Limnoria <progval@gmail.com>\n" @@ -52,19 +52,21 @@ msgstr "" "\n" "Retourne le status du bot." -#: plugin.py:83 -msgid "%s as %L" -msgstr "%s en tant que %L" +#: plugin.py:109 +msgid "" +"I am connected to %s as %s: Channels: %s, Ops: %s, Half-Ops: %s, Voiced: %s, " +"Regular: %s" +msgstr "" -#: plugin.py:84 -msgid "I am connected to %L." -msgstr "Je suis connecté à %L" - -#: plugin.py:86 +#: plugin.py:121 msgid "I am currently in code profiling mode." msgstr "Je suis actuellement en mode de profiling du code." -#: plugin.py:92 +#: plugin.py:122 +msgid "%L" +msgstr "" + +#: plugin.py:128 msgid "" "takes no arguments\n" "\n" @@ -75,11 +77,11 @@ msgstr "" "\n" "Retourne les threads actifs." -#: plugin.py:98 +#: plugin.py:134 msgid "I have spawned %n; %n %b still currently active: %L." msgstr "J'ai lancé %n ; %n %b encore actuellement en vie : %L." -#: plugin.py:105 +#: plugin.py:141 msgid "" "takes no arguments\n" "\n" @@ -92,7 +94,7 @@ msgstr "" "Retourne le nombre de processus qui ont été lancés, et la liste de ceux qui " "sont encore actifs." -#: plugin.py:120 +#: plugin.py:156 msgid "" "takes no arguments\n" "\n" @@ -103,11 +105,11 @@ msgstr "" "\n" "Retourne quelques statistiques intéressantes liées au réseau." -#: plugin.py:128 +#: plugin.py:164 msgid "an indeterminate amount of time" msgstr "une durée indéterminée" -#: plugin.py:129 +#: plugin.py:165 msgid "" "I have received %s messages for a total of %S. I have sent %s messages for " "a total of %S. I have been connected to %s for %s." @@ -115,7 +117,7 @@ msgstr "" "J'ai reçu %s message pour un total de %S. J'ai envoyé %s messages pour un " "total de %S. J'ai été connecté à %s pendant %s." -#: plugin.py:138 +#: plugin.py:174 msgid "" "takes no arguments\n" "\n" @@ -126,7 +128,7 @@ msgstr "" "\n" "Retourne quelques statistiques intéressantes reliées au CPU." -#: plugin.py:148 +#: plugin.py:184 msgid "" "My children have taken %.2f seconds of user time and %.2f seconds of system " "time for a total of %.2f seconds of CPU time." @@ -134,7 +136,7 @@ msgstr "" "Mes enfants ont pris %.2f secondes du temps utilisateur et %.2f secondes du " "temps système, pour un total de %.2f secondes de temps CPU." -#: plugin.py:155 +#: plugin.py:191 msgid "" "I have taken %.2f seconds of user time and %.2f seconds of system time, for " "a total of %.2f seconds of CPU time. %s" @@ -142,20 +144,20 @@ msgstr "" "J'ai pris %.2f secondes du temps utilisateur et %.2f secondes du temps " "système, pour un total de %.2f secondes de temps CPU. %s" -#: plugin.py:177 +#: plugin.py:213 msgid "Unable to run ps command." msgstr "Impossible de lancer la commande ps." -#: plugin.py:184 +#: plugin.py:220 msgid " I'm taking up %S of memory." msgstr " Je prend plus de %S de mémoire." -#: plugin.py:187 +#: plugin.py:223 #, fuzzy msgid " I'm taking up an unknown amount of memory." msgstr " Je prend plus de %S de mémoire." -#: plugin.py:195 +#: plugin.py:231 msgid "" "takes no arguments\n" "\n" @@ -166,11 +168,11 @@ msgstr "" "\n" "Retourne quelques statistiques intéressantes liées aux commandes." -#: plugin.py:205 +#: plugin.py:241 msgid "I offer a total of %n in %n. I have processed %n." msgstr "J'offre un total de %n dans %n plugins. J'ai géré %n." -#: plugin.py:214 +#: plugin.py:250 msgid "" "takes no arguments\n" "\n" @@ -181,7 +183,7 @@ msgstr "" "\n" "Retourne une liste des commandes offertes par le bot." -#: plugin.py:228 +#: plugin.py:264 msgid "" "takes no arguments\n" "\n" @@ -192,11 +194,11 @@ msgstr "" "\n" "Retourne la durée durant laquelle le bot est lancée." -#: plugin.py:232 +#: plugin.py:268 msgid "I have been running for %s." msgstr "Je suis lancé depuis %s." -#: plugin.py:239 +#: plugin.py:275 msgid "" "takes no arguments\n" "\n" @@ -207,7 +209,7 @@ msgstr "" "\n" "Retourne le(s) serveur(s) sur le(s)quel(s) le bot est." -#: plugin.py:248 +#: plugin.py:284 msgid "" "takes no arguments\n" "\n" @@ -217,3 +219,9 @@ msgstr "" "ne prend pas d'argument\n" "\n" "Retourne le(s) serveur(s) sur le(s)quel(s) le bot est." + +#~ msgid "%s as %L" +#~ msgstr "%s en tant que %L" + +#~ msgid "I am connected to %L." +#~ msgstr "Je suis connecté à %L" diff --git a/plugins/Status/locales/it.po b/plugins/Status/locales/it.po index 294af11ef..2227c1001 100644 --- a/plugins/Status/locales/it.po +++ b/plugins/Status/locales/it.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: Limnoria\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2012-03-16 12:41+0100\n" "Last-Translator: skizzhg <skizzhg@gmx.com>\n" "Language-Team: Italian <skizzhg@gmx.com>\n" @@ -50,19 +50,21 @@ msgstr "" " Riporta lo stato del bot.\n" " " -#: plugin.py:83 -msgid "%s as %L" -msgstr "%s come %L" +#: plugin.py:109 +msgid "" +"I am connected to %s as %s: Channels: %s, Ops: %s, Half-Ops: %s, Voiced: %s, " +"Regular: %s" +msgstr "" -#: plugin.py:84 -msgid "I am connected to %L." -msgstr "Sono connesso a %L." - -#: plugin.py:86 +#: plugin.py:121 msgid "I am currently in code profiling mode." msgstr "Sto analizzando i dati." -#: plugin.py:92 +#: plugin.py:122 +msgid "%L" +msgstr "" + +#: plugin.py:128 msgid "" "takes no arguments\n" "\n" @@ -74,11 +76,11 @@ msgstr "" " Riporta gli attuali thread attivi.\n" " " -#: plugin.py:98 +#: plugin.py:134 msgid "I have spawned %n; %n %b still currently active: %L." msgstr "Ho avviato %n; %n %b attualmente ancora attivi: %L." -#: plugin.py:105 +#: plugin.py:141 #, fuzzy msgid "" "takes no arguments\n" @@ -92,7 +94,7 @@ msgstr "" " Riporta gli attuali thread attivi.\n" " " -#: plugin.py:120 +#: plugin.py:156 msgid "" "takes no arguments\n" "\n" @@ -104,11 +106,11 @@ msgstr "" " Riporta alcune statistiche interessanti riguardanti la rete.\n" " " -#: plugin.py:128 +#: plugin.py:164 msgid "an indeterminate amount of time" msgstr "una quantità di tempo indeterminato" -#: plugin.py:129 +#: plugin.py:165 msgid "" "I have received %s messages for a total of %S. I have sent %s messages for " "a total of %S. I have been connected to %s for %s." @@ -116,7 +118,7 @@ msgstr "" "Ho ricevuto %s messaggi per un totale di %S. Ho inviato %s messaggi per un " "totale di %S. Sono connesso a %s da %s." -#: plugin.py:138 +#: plugin.py:174 msgid "" "takes no arguments\n" "\n" @@ -128,7 +130,7 @@ msgstr "" " Riporta alcune statistiche interessanti riguardanti la CPU.\n" " " -#: plugin.py:148 +#: plugin.py:184 msgid "" "My children have taken %.2f seconds of user time and %.2f seconds of system " "time for a total of %.2f seconds of CPU time." @@ -137,7 +139,7 @@ msgstr "" "e %.2f secondi a livello di sistema per un totale di %.2f secondi di tempo " "di CPU." -#: plugin.py:155 +#: plugin.py:191 msgid "" "I have taken %.2f seconds of user time and %.2f seconds of system time, for " "a total of %.2f seconds of CPU time. %s" @@ -145,20 +147,20 @@ msgstr "" "Ho impiegato %.2f secondi di tempo a livello utente e %.2f secondi a livello " "di sistema per un totale di %.2f secondi di tempo di CPU. %s" -#: plugin.py:177 +#: plugin.py:213 msgid "Unable to run ps command." msgstr "Impossibile eseguire il comando ps." -#: plugin.py:184 +#: plugin.py:220 msgid " I'm taking up %S of memory." msgstr " Sto impiegando il %S di memoria. " -#: plugin.py:187 +#: plugin.py:223 #, fuzzy msgid " I'm taking up an unknown amount of memory." msgstr " Sto impiegando il %S di memoria. " -#: plugin.py:195 +#: plugin.py:231 msgid "" "takes no arguments\n" "\n" @@ -170,11 +172,11 @@ msgstr "" " Riporta alcune statistiche interessanti riguardanti i comandi.\n" " " -#: plugin.py:205 +#: plugin.py:241 msgid "I offer a total of %n in %n. I have processed %n." msgstr "Offro un totale di %n in %n. Ho elaborato %n." -#: plugin.py:214 +#: plugin.py:250 msgid "" "takes no arguments\n" "\n" @@ -186,7 +188,7 @@ msgstr "" " Restituisce un elenco dei comandi offerti dal bot.\n" " " -#: plugin.py:228 +#: plugin.py:264 msgid "" "takes no arguments\n" "\n" @@ -198,11 +200,11 @@ msgstr "" " Riporta da quanto tempo il bot è in esecuzione.\n" " " -#: plugin.py:232 +#: plugin.py:268 msgid "I have been running for %s." msgstr "Sono in funzione da %s." -#: plugin.py:239 +#: plugin.py:275 msgid "" "takes no arguments\n" "\n" @@ -214,7 +216,7 @@ msgstr "" " Restituisce i server ai quali è connesso il bot.\n" " " -#: plugin.py:248 +#: plugin.py:284 msgid "" "takes no arguments\n" "\n" @@ -225,3 +227,9 @@ msgstr "" "\n" " Restituisce la network alla quale è connesso il bot.\n" " " + +#~ msgid "%s as %L" +#~ msgstr "%s come %L" + +#~ msgid "I am connected to %L." +#~ msgstr "Sono connesso a %L." diff --git a/plugins/Status/messages.pot b/plugins/Status/messages.pot index 21f7b8f1e..53397a344 100644 --- a/plugins/Status/messages.pot +++ b/plugins/Status/messages.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -49,19 +49,19 @@ msgid "" " " msgstr "" -#: plugin.py:83 -msgid "%s as %L" +#: plugin.py:109 +msgid "I am connected to %s as %s: Channels: %s, Ops: %s, Half-Ops: %s, Voiced: %s, Regular: %s" msgstr "" -#: plugin.py:84 -msgid "I am connected to %L." -msgstr "" - -#: plugin.py:86 +#: plugin.py:121 msgid "I am currently in code profiling mode." msgstr "" -#: plugin.py:92 +#: plugin.py:122 +msgid "%L" +msgstr "" + +#: plugin.py:128 #, docstring msgid "" "takes no arguments\n" @@ -70,11 +70,11 @@ msgid "" " " msgstr "" -#: plugin.py:98 +#: plugin.py:134 msgid "I have spawned %n; %n %b still currently active: %L." msgstr "" -#: plugin.py:105 +#: plugin.py:141 #, docstring msgid "" "takes no arguments\n" @@ -84,7 +84,7 @@ msgid "" " " msgstr "" -#: plugin.py:120 +#: plugin.py:156 #, docstring msgid "" "takes no arguments\n" @@ -93,15 +93,15 @@ msgid "" " " msgstr "" -#: plugin.py:128 +#: plugin.py:164 msgid "an indeterminate amount of time" msgstr "" -#: plugin.py:129 +#: plugin.py:165 msgid "I have received %s messages for a total of %S. I have sent %s messages for a total of %S. I have been connected to %s for %s." msgstr "" -#: plugin.py:138 +#: plugin.py:174 #, docstring msgid "" "takes no arguments\n" @@ -110,27 +110,27 @@ msgid "" " " msgstr "" -#: plugin.py:148 +#: plugin.py:184 msgid "My children have taken %.2f seconds of user time and %.2f seconds of system time for a total of %.2f seconds of CPU time." msgstr "" -#: plugin.py:155 +#: plugin.py:191 msgid "I have taken %.2f seconds of user time and %.2f seconds of system time, for a total of %.2f seconds of CPU time. %s" msgstr "" -#: plugin.py:177 +#: plugin.py:213 msgid "Unable to run ps command." msgstr "" -#: plugin.py:184 +#: plugin.py:220 msgid " I'm taking up %S of memory." msgstr "" -#: plugin.py:187 +#: plugin.py:223 msgid " I'm taking up an unknown amount of memory." msgstr "" -#: plugin.py:195 +#: plugin.py:231 #, docstring msgid "" "takes no arguments\n" @@ -139,11 +139,11 @@ msgid "" " " msgstr "" -#: plugin.py:205 +#: plugin.py:241 msgid "I offer a total of %n in %n. I have processed %n." msgstr "" -#: plugin.py:214 +#: plugin.py:250 #, docstring msgid "" "takes no arguments\n" @@ -152,7 +152,7 @@ msgid "" " " msgstr "" -#: plugin.py:228 +#: plugin.py:264 #, docstring msgid "" "takes no arguments\n" @@ -161,11 +161,11 @@ msgid "" " " msgstr "" -#: plugin.py:232 +#: plugin.py:268 msgid "I have been running for %s." msgstr "" -#: plugin.py:239 +#: plugin.py:275 #, docstring msgid "" "takes no arguments\n" @@ -174,7 +174,7 @@ msgid "" " " msgstr "" -#: plugin.py:248 +#: plugin.py:284 #, docstring msgid "" "takes no arguments\n" diff --git a/plugins/String/locales/fi.po b/plugins/String/locales/fi.po index b5215da5f..4d490ba9c 100644 --- a/plugins/String/locales/fi.po +++ b/plugins/String/locales/fi.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: String plugin for Limnoria\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2014-12-20 12:20+0200\n" "Last-Translator: Mikaela Suomalainen <mikaela.suomalainen@outlook.com>\n" "Language-Team: \n" @@ -66,9 +66,9 @@ msgstr "" #: plugin.py:55 #, fuzzy msgid "" -"<letter>\n" +"<string>\n" "\n" -" Returns the unicode codepoint of <letter>.\n" +" Returns the unicode codepoint of characters in <string>.\n" " " msgstr "" "<kirjain>\n" @@ -96,27 +96,28 @@ msgstr "Tuo numero ei kartoitu 8-bittiseen merkkiin." #: plugin.py:74 msgid "" -"<character>\n" +"<string>\n" "\n" -" Returns the name of the given unicode <character>." +" Returns the name of characters in <string>.\n" +" This will error if any character is not a valid Unicode character." msgstr "" -#: plugin.py:82 -msgid "No name found for this character." +#: plugin.py:83 +msgid "No name found for character %r at position %d." msgstr "" -#: plugin.py:86 +#: plugin.py:89 msgid "" "<name>\n" "\n" " Searches for a unicode character from its <name>." msgstr "" -#: plugin.py:92 +#: plugin.py:95 msgid "No character found with this name." msgstr "" -#: plugin.py:96 +#: plugin.py:99 msgid "" "<encoding> <text>\n" "\n" @@ -133,11 +134,11 @@ msgstr "" " <http://docs.python.org/library/codecs.html#standard-encodings>.\n" " " -#: plugin.py:112 plugin.py:151 +#: plugin.py:115 plugin.py:154 msgid "encoding" msgstr "salaus" -#: plugin.py:133 +#: plugin.py:136 msgid "" "<encoding> <text>\n" "\n" @@ -155,11 +156,11 @@ msgstr "" " <http://docs.python.org/library/codecs.html#standard-encodings>.\n" " " -#: plugin.py:157 +#: plugin.py:160 msgid "base64 string" msgstr "base64 merkkiketju" -#: plugin.py:158 +#: plugin.py:161 msgid "" "Base64 strings must be a multiple of 4 in length, padded with '=' if " "necessary." @@ -167,12 +168,12 @@ msgstr "" "Base64 merkkiketjujen täytyy olla kerrollisia 4:llä, pehmustettuna '='-" "merkillä jos vaadittu." -#: plugin.py:176 +#: plugin.py:179 msgid "" "<string1> <string2>\n" "\n" -" Returns the levenshtein distance (also known as the \"edit distance" -"\"\n" +" Returns the levenshtein distance (also known as the \"edit " +"distance\"\n" " between <string1> and <string2>)\n" " " msgstr "" @@ -183,7 +184,7 @@ msgstr "" " <merkkiketju1:den> ja <merkkiketju2:den> välillä.)\n" " " -#: plugin.py:183 +#: plugin.py:186 msgid "" "Levenshtein distance is a complicated algorithm, try it with some smaller " "inputs." @@ -191,7 +192,7 @@ msgstr "" "Levenshtein etäisyys on monimutkainen algoritmi, kokeile sitä pienemmillä " "sisäänmenoilla." -#: plugin.py:190 +#: plugin.py:193 #, fuzzy msgid "" "<string> [<length>]\n" @@ -210,7 +211,7 @@ msgstr "" " käytä 0:aa.\n" " " -#: plugin.py:203 +#: plugin.py:206 msgid "" "<text>\n" "\n" @@ -222,7 +223,7 @@ msgstr "" " Palauttaa <tekstin> pituuden.\n" " " -#: plugin.py:211 +#: plugin.py:214 msgid "" "<regexp> <text>\n" "\n" @@ -243,11 +244,11 @@ msgstr "" " <tekstiin>.\n" " " -#: plugin.py:219 +#: plugin.py:223 msgid "You probably don't want to match the empty string." msgstr "Et luultavasti halua täsmätä tyhjään merkkiketjuun." -#: plugin.py:236 +#: plugin.py:240 #, fuzzy msgid "" "<password> <text>\n" @@ -260,7 +261,7 @@ msgstr "" " Palauttaa <tekstin> pituuden.\n" " " -#: plugin.py:246 +#: plugin.py:250 #, fuzzy msgid "" "<text>\n" @@ -273,7 +274,7 @@ msgstr "" " Palauttaa <tekstin> pituuden.\n" " " -#: plugin.py:254 +#: plugin.py:258 #, fuzzy msgid "" "<text>\n" diff --git a/plugins/String/locales/fr.po b/plugins/String/locales/fr.po index 5e339969f..c65e893c4 100644 --- a/plugins/String/locales/fr.po +++ b/plugins/String/locales/fr.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: Limnoria\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: Limnoria <progval@gmail.com>\n" @@ -57,9 +57,9 @@ msgstr "" #: plugin.py:55 #, fuzzy msgid "" -"<letter>\n" +"<string>\n" "\n" -" Returns the unicode codepoint of <letter>.\n" +" Returns the unicode codepoint of characters in <string>.\n" " " msgstr "" "<lettre>\n" @@ -85,27 +85,28 @@ msgstr "Ce nombre ne correspond pas à un caractère 8 bits." #: plugin.py:74 msgid "" -"<character>\n" +"<string>\n" "\n" -" Returns the name of the given unicode <character>." +" Returns the name of characters in <string>.\n" +" This will error if any character is not a valid Unicode character." msgstr "" -#: plugin.py:82 -msgid "No name found for this character." +#: plugin.py:83 +msgid "No name found for character %r at position %d." msgstr "" -#: plugin.py:86 +#: plugin.py:89 msgid "" "<name>\n" "\n" " Searches for a unicode character from its <name>." msgstr "" -#: plugin.py:92 +#: plugin.py:95 msgid "No character found with this name." msgstr "" -#: plugin.py:96 +#: plugin.py:99 msgid "" "<encoding> <text>\n" "\n" @@ -120,11 +121,11 @@ msgstr "" "disponibles dans la documentation du module codec de Python : http://docs." "python.org/library/codecs.html#standard-encodings" -#: plugin.py:112 plugin.py:151 +#: plugin.py:115 plugin.py:154 msgid "encoding" msgstr "encodage" -#: plugin.py:133 +#: plugin.py:136 msgid "" "<encoding> <text>\n" "\n" @@ -140,11 +141,11 @@ msgstr "" "disponibles dans la documentation du module codec de Python : http://docs." "python.org/library/codecs.html#standard-encodings" -#: plugin.py:157 +#: plugin.py:160 msgid "base64 string" msgstr "chaîne base64" -#: plugin.py:158 +#: plugin.py:161 msgid "" "Base64 strings must be a multiple of 4 in length, padded with '=' if " "necessary." @@ -152,12 +153,12 @@ msgstr "" "Les chaînes base64 doivent avoir une longueur multiple de 4, entourées de " "'=' si nécessaire." -#: plugin.py:176 +#: plugin.py:179 msgid "" "<string1> <string2>\n" "\n" -" Returns the levenshtein distance (also known as the \"edit distance" -"\"\n" +" Returns the levenshtein distance (also known as the \"edit " +"distance\"\n" " between <string1> and <string2>)\n" " " msgstr "" @@ -166,7 +167,7 @@ msgstr "" "Retourne la distance levenhtein (aussi connue sous le nom de \"distance " "d'édition) entre les deux chaînes." -#: plugin.py:183 +#: plugin.py:186 msgid "" "Levenshtein distance is a complicated algorithm, try it with some smaller " "inputs." @@ -174,7 +175,7 @@ msgstr "" "La distance levenshtein est un algorithme compliqué ; essayez avec des " "données plus petites." -#: plugin.py:190 +#: plugin.py:193 msgid "" "<string> [<length>]\n" "\n" @@ -190,7 +191,7 @@ msgstr "" "de 4, c'est le standard pour un hash soundex. Pour une longueur illimitée, " "utilisez 0. La longueur maximum est 1024." -#: plugin.py:203 +#: plugin.py:206 msgid "" "<text>\n" "\n" @@ -201,7 +202,7 @@ msgstr "" "\n" "Retourne la longueur du <texte>." -#: plugin.py:211 +#: plugin.py:214 msgid "" "<regexp> <text>\n" "\n" @@ -218,13 +219,13 @@ msgstr "" "régulière> est de la forme de s/regexp/remplacement/flags, retourne le " "résultat de l'application de l'expression régulière sur le <texte>." -#: plugin.py:219 +#: plugin.py:223 msgid "You probably don't want to match the empty string." msgstr "" "Vous ne voulez probablement appliquer une expression régulière sur une " "chaîne vide." -#: plugin.py:236 +#: plugin.py:240 #, fuzzy msgid "" "<password> <text>\n" @@ -236,7 +237,7 @@ msgstr "" "\n" "Retourne la longueur du <texte>." -#: plugin.py:246 +#: plugin.py:250 #, fuzzy msgid "" "<text>\n" @@ -248,7 +249,7 @@ msgstr "" "\n" "Retourne la longueur du <texte>." -#: plugin.py:254 +#: plugin.py:258 #, fuzzy msgid "" "<text>\n" diff --git a/plugins/String/locales/it.po b/plugins/String/locales/it.po index 60bcd04ca..7ce2a03fe 100644 --- a/plugins/String/locales/it.po +++ b/plugins/String/locales/it.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: Limnoria\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2011-07-07 11:35+0200\n" "Last-Translator: skizzhg <skizzhg@gmx.com>\n" "Language-Team: Italian <skizzhg@gmx.com>\n" @@ -54,9 +54,9 @@ msgstr "" #: plugin.py:55 #, fuzzy msgid "" -"<letter>\n" +"<string>\n" "\n" -" Returns the unicode codepoint of <letter>.\n" +" Returns the unicode codepoint of characters in <string>.\n" " " msgstr "" "<lettera>\n" @@ -84,27 +84,28 @@ msgstr "Questo numero non corrisponde a un carattere 8-bit." #: plugin.py:74 msgid "" -"<character>\n" +"<string>\n" "\n" -" Returns the name of the given unicode <character>." +" Returns the name of characters in <string>.\n" +" This will error if any character is not a valid Unicode character." msgstr "" -#: plugin.py:82 -msgid "No name found for this character." +#: plugin.py:83 +msgid "No name found for character %r at position %d." msgstr "" -#: plugin.py:86 +#: plugin.py:89 msgid "" "<name>\n" "\n" " Searches for a unicode character from its <name>." msgstr "" -#: plugin.py:92 +#: plugin.py:95 msgid "No character found with this name." msgstr "" -#: plugin.py:96 +#: plugin.py:99 msgid "" "<encoding> <text>\n" "\n" @@ -121,11 +122,11 @@ msgstr "" " <http://docs.python.org/library/codecs.html#standard-encodings>.\n" " " -#: plugin.py:112 plugin.py:151 +#: plugin.py:115 plugin.py:154 msgid "encoding" msgstr "codifica" -#: plugin.py:133 +#: plugin.py:136 msgid "" "<encoding> <text>\n" "\n" @@ -144,11 +145,11 @@ msgstr "" " <http://docs.python.org/library/codecs.html#standard-encodings>.\n" " " -#: plugin.py:157 +#: plugin.py:160 msgid "base64 string" msgstr "stringa base64" -#: plugin.py:158 +#: plugin.py:161 msgid "" "Base64 strings must be a multiple of 4 in length, padded with '=' if " "necessary." @@ -156,12 +157,12 @@ msgstr "" "Le stringhe in base64 devono avere una lunghezza in multipli di 4, " "circondate da \"=\" se necessario." -#: plugin.py:176 +#: plugin.py:179 msgid "" "<string1> <string2>\n" "\n" -" Returns the levenshtein distance (also known as the \"edit distance" -"\"\n" +" Returns the levenshtein distance (also known as the \"edit " +"distance\"\n" " between <string1> and <string2>)\n" " " msgstr "" @@ -172,14 +173,14 @@ msgstr "" " modifica\" tra <stringa1> e <stringa2>)\n" " " -#: plugin.py:183 +#: plugin.py:186 msgid "" "Levenshtein distance is a complicated algorithm, try it with some smaller " "inputs." msgstr "" "La distanza levenshtein è un algoritmo complesso, prova a inserire meno dati." -#: plugin.py:190 +#: plugin.py:193 #, fuzzy msgid "" "<string> [<length>]\n" @@ -199,7 +200,7 @@ msgstr "" " Per lunghezze illimitate usa 0.\n" " " -#: plugin.py:203 +#: plugin.py:206 msgid "" "<text>\n" "\n" @@ -211,7 +212,7 @@ msgstr "" " Riporta la lunghezza di <testo>.\n" " " -#: plugin.py:211 +#: plugin.py:214 msgid "" "<regexp> <text>\n" "\n" @@ -228,11 +229,11 @@ msgstr "" " il risultato dell'applicare la regexp a <testo>.\n" " " -#: plugin.py:219 +#: plugin.py:223 msgid "You probably don't want to match the empty string." msgstr "È probabile che tu non voglia confrontare una stringa vuota." -#: plugin.py:236 +#: plugin.py:240 #, fuzzy msgid "" "<password> <text>\n" @@ -245,7 +246,7 @@ msgstr "" " Riporta la lunghezza di <testo>.\n" " " -#: plugin.py:246 +#: plugin.py:250 #, fuzzy msgid "" "<text>\n" @@ -258,7 +259,7 @@ msgstr "" " Riporta la lunghezza di <testo>.\n" " " -#: plugin.py:254 +#: plugin.py:258 #, fuzzy msgid "" "<text>\n" diff --git a/plugins/String/messages.pot b/plugins/String/messages.pot index 474b0fd7f..d9cc09889 100644 --- a/plugins/String/messages.pot +++ b/plugins/String/messages.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -44,9 +44,9 @@ msgstr "" #: plugin.py:55 #, docstring msgid "" -"<letter>\n" +"<string>\n" "\n" -" Returns the unicode codepoint of <letter>.\n" +" Returns the unicode codepoint of characters in <string>.\n" " " msgstr "" @@ -66,16 +66,17 @@ msgstr "" #: plugin.py:74 #, docstring msgid "" -"<character>\n" +"<string>\n" "\n" -" Returns the name of the given unicode <character>." +" Returns the name of characters in <string>.\n" +" This will error if any character is not a valid Unicode character." msgstr "" -#: plugin.py:82 -msgid "No name found for this character." +#: plugin.py:83 +msgid "No name found for character %r at position %d." msgstr "" -#: plugin.py:86 +#: plugin.py:89 #, docstring msgid "" "<name>\n" @@ -83,11 +84,11 @@ msgid "" " Searches for a unicode character from its <name>." msgstr "" -#: plugin.py:92 +#: plugin.py:95 msgid "No character found with this name." msgstr "" -#: plugin.py:96 +#: plugin.py:99 #, docstring msgid "" "<encoding> <text>\n" @@ -98,11 +99,11 @@ msgid "" " " msgstr "" -#: plugin.py:112 plugin.py:151 +#: plugin.py:115 plugin.py:154 msgid "encoding" msgstr "" -#: plugin.py:133 +#: plugin.py:136 #, docstring msgid "" "<encoding> <text>\n" @@ -113,15 +114,15 @@ msgid "" " " msgstr "" -#: plugin.py:157 +#: plugin.py:160 msgid "base64 string" msgstr "" -#: plugin.py:158 +#: plugin.py:161 msgid "Base64 strings must be a multiple of 4 in length, padded with '=' if necessary." msgstr "" -#: plugin.py:176 +#: plugin.py:179 #, docstring msgid "" "<string1> <string2>\n" @@ -131,11 +132,11 @@ msgid "" " " msgstr "" -#: plugin.py:183 +#: plugin.py:186 msgid "Levenshtein distance is a complicated algorithm, try it with some smaller inputs." msgstr "" -#: plugin.py:190 +#: plugin.py:193 #, docstring msgid "" "<string> [<length>]\n" @@ -146,7 +147,7 @@ msgid "" " " msgstr "" -#: plugin.py:203 +#: plugin.py:206 #, docstring msgid "" "<text>\n" @@ -155,7 +156,7 @@ msgid "" " " msgstr "" -#: plugin.py:211 +#: plugin.py:214 #, docstring msgid "" "<regexp> <text>\n" @@ -167,11 +168,11 @@ msgid "" " " msgstr "" -#: plugin.py:219 +#: plugin.py:223 msgid "You probably don't want to match the empty string." msgstr "" -#: plugin.py:236 +#: plugin.py:240 #, docstring msgid "" "<password> <text>\n" @@ -180,7 +181,7 @@ msgid "" " " msgstr "" -#: plugin.py:246 +#: plugin.py:250 #, docstring msgid "" "<text>\n" @@ -189,7 +190,7 @@ msgid "" " " msgstr "" -#: plugin.py:254 +#: plugin.py:258 #, docstring msgid "" "<text>\n" diff --git a/plugins/Success/messages.pot b/plugins/Success/messages.pot index 66e15de2a..dfd2a24ec 100644 --- a/plugins/Success/messages.pot +++ b/plugins/Success/messages.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/plugins/Time/locales/de.po b/plugins/Time/locales/de.po index d9e2f1616..01af9d473 100644 --- a/plugins/Time/locales/de.po +++ b/plugins/Time/locales/de.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: Supybot\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2012-04-27 15:34+0200\n" "Last-Translator: Mikaela Suomalainen <mikaela.suomalainen@outlook.com>\n" "Language-Team: German <fbesser@gmail.com>\n" @@ -25,11 +25,11 @@ msgstr "" "werden. Falls du diese Variable auf eine leere Zeichenkette setzt, wird kein " "Zeitstempel angezeigt." -#: plugin.py:75 +#: plugin.py:82 msgid "This plugin allows you to use different time-related functions." msgstr "" -#: plugin.py:78 +#: plugin.py:85 msgid "" "[<years>y] [<weeks>w] [<days>d] [<hours>h] [<minutes>m] [<seconds>s]\n" "\n" @@ -49,7 +49,7 @@ msgstr "" "9000 zurückgeben, dass ist '3600*2 + 30*60'. Nützlich um Events zu einem " "Zeitpunkt von Sekunden in der Zukunft zu planen." -#: plugin.py:113 +#: plugin.py:123 #, fuzzy msgid "" "[<time string>]\n" @@ -65,17 +65,17 @@ msgstr "" "\n" "Gibt die " -#: plugin.py:124 plugin.py:141 +#: plugin.py:134 plugin.py:151 msgid "" "This command is not available on this bot, ask the owner to install the " "python-dateutil library." msgstr "" -#: plugin.py:131 plugin.py:150 +#: plugin.py:141 plugin.py:160 msgid "That's right now!" msgstr "Das ist jetzt" -#: plugin.py:136 +#: plugin.py:146 msgid "" "<time string>\n" "\n" @@ -86,7 +86,7 @@ msgstr "" "\n" "Gibt die Nummer der Sekunden bis <Zeit Zeichenkette> zurück." -#: plugin.py:155 +#: plugin.py:165 msgid "" "[<seconds since epoch>]\n" "\n" @@ -101,11 +101,11 @@ msgstr "" "momentane ctime, falls <Sekunden seit Beginn der Unix Zeitrechnung> nicht " "angegeben wurde." -#: plugin.py:161 +#: plugin.py:171 msgid "number of seconds since epoch" msgstr "Sekunden seit Beginn der Unix Zeitrechnung" -#: plugin.py:166 +#: plugin.py:176 #, fuzzy msgid "" "[<channel>] [<format>] [<seconds since epoch>]\n" @@ -123,7 +123,7 @@ msgstr "" "Beginn der Unix Zeitrechnung> nicht angegeben ist, wird die momentante Zeit " "benutzt. " -#: plugin.py:188 +#: plugin.py:198 msgid "" "<seconds>\n" "\n" @@ -136,7 +136,7 @@ msgstr "" "Gibt eine schöne Zeichenkette zurück die die Zeitspanne von <Sekunden> " "repräsentiert." -#: plugin.py:198 +#: plugin.py:208 #, fuzzy msgid "" "<region>/<city> (or <region>/<state>/<city>)\n" @@ -148,23 +148,23 @@ msgstr "" "\n" "Gibt die lokale zeit von <Region>/<Stadt> zurück" -#: plugin.py:205 +#: plugin.py:224 msgid "Unknown timezone" msgstr "Unbekannte Zeitzone" -#: plugin.py:207 +#: plugin.py:226 msgid "" "Timezone-related commands are not available. Your administrator need to " "either upgrade Python to version 3.9 or greater, or install pytz." msgstr "" -#: plugin.py:219 +#: plugin.py:239 msgid "" "[<year> <month> <day>]\n" " Returns a the Discordian date today, or an optional different date." msgstr "" -#: plugin.py:230 +#: plugin.py:250 msgid "" "The 'ddate' module is not installed. Use '%s -m pip install --user ddate' or " "see %u for more information." diff --git a/plugins/Time/locales/fi.po b/plugins/Time/locales/fi.po index 3a7b1ba2d..34121fadd 100644 --- a/plugins/Time/locales/fi.po +++ b/plugins/Time/locales/fi.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: Time plugin for Limnoria\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2014-12-20 13:43+0200\n" "Last-Translator: Mikaela Suomalainen <mikaela.suomalainen@outlook.com>\n" "Language-Team: \n" @@ -32,11 +32,11 @@ msgstr "" "tämän tyhjäksi\n" " merkkiketjuksi, aikaleimaa ei näytetä." -#: plugin.py:75 +#: plugin.py:82 msgid "This plugin allows you to use different time-related functions." msgstr "Tämä plugini sallii erilaisten aikaan liittyvien funktioiden käytön." -#: plugin.py:78 +#: plugin.py:85 msgid "" "[<years>y] [<weeks>w] [<days>d] [<hours>h] [<minutes>m] [<seconds>s]\n" "\n" @@ -60,7 +60,7 @@ msgstr "" " tulevaisuudessa.\n" " " -#: plugin.py:113 +#: plugin.py:123 #, fuzzy msgid "" "[<time string>]\n" @@ -81,7 +81,7 @@ msgstr "" " ja katso toimiiko se.\n" " " -#: plugin.py:124 plugin.py:141 +#: plugin.py:134 plugin.py:151 msgid "" "This command is not available on this bot, ask the owner to install the " "python-dateutil library." @@ -89,11 +89,11 @@ msgstr "" "Tämä komento ei ole saatavilla tällä botilla. Pyydä omistajaa asentamaan " "python-dateutil sovelluskirjasto." -#: plugin.py:131 plugin.py:150 +#: plugin.py:141 plugin.py:160 msgid "That's right now!" msgstr "Se on juuri nyt!" -#: plugin.py:136 +#: plugin.py:146 msgid "" "<time string>\n" "\n" @@ -105,7 +105,7 @@ msgstr "" " Palauttaa sekuntien määrän <aika merkkiketjuun>.\n" " " -#: plugin.py:155 +#: plugin.py:165 msgid "" "[<seconds since epoch>]\n" "\n" @@ -121,11 +121,11 @@ msgstr "" " <sekunteja ajanlaskun alkamisen jälkeen> on annettu.\n" " " -#: plugin.py:161 +#: plugin.py:171 msgid "number of seconds since epoch" msgstr "sekuntien määrä ajanlaskun alkamisen jälkeen" -#: plugin.py:166 +#: plugin.py:176 #, fuzzy msgid "" "[<channel>] [<format>] [<seconds since epoch>]\n" @@ -145,7 +145,7 @@ msgstr "" "nykyistä aikaa.\n" " " -#: plugin.py:188 +#: plugin.py:198 msgid "" "<seconds>\n" "\n" @@ -159,7 +159,7 @@ msgstr "" " esitetty.\n" " " -#: plugin.py:198 +#: plugin.py:208 #, fuzzy msgid "" "<region>/<city> (or <region>/<state>/<city>)\n" @@ -172,23 +172,23 @@ msgstr "" " Näyttää kaupungin ja sen osan paikallisen ajan. Tämä komento käyttää\n" " IANAn aikavyöhyketietokantaa." -#: plugin.py:205 +#: plugin.py:224 msgid "Unknown timezone" msgstr "Tuntematon aikavyöhyke" -#: plugin.py:207 +#: plugin.py:226 msgid "" "Timezone-related commands are not available. Your administrator need to " "either upgrade Python to version 3.9 or greater, or install pytz." msgstr "" -#: plugin.py:219 +#: plugin.py:239 msgid "" "[<year> <month> <day>]\n" " Returns a the Discordian date today, or an optional different date." msgstr "" -#: plugin.py:230 +#: plugin.py:250 msgid "" "The 'ddate' module is not installed. Use '%s -m pip install --user ddate' or " "see %u for more information." diff --git a/plugins/Time/locales/fr.po b/plugins/Time/locales/fr.po index edf0db698..e04f5d1ec 100644 --- a/plugins/Time/locales/fr.po +++ b/plugins/Time/locales/fr.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: Limnoria\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: Limnoria <progval@gmail.com>\n" @@ -26,11 +26,11 @@ msgstr "" "Si vous définissez cette variable à une chaîne vide, le timestamp ne sera " "pas affiché." -#: plugin.py:75 +#: plugin.py:82 msgid "This plugin allows you to use different time-related functions." msgstr "" -#: plugin.py:78 +#: plugin.py:85 msgid "" "[<years>y] [<weeks>w] [<days>d] [<hours>h] [<minutes>m] [<seconds>s]\n" "\n" @@ -49,7 +49,7 @@ msgstr "" "est \"seconds 2h 30m\", ce qui retournera 9000. Utile pour planifier des " "évènement à un certain nombre de secondes dans le futur." -#: plugin.py:113 +#: plugin.py:123 msgid "" "[<time string>]\n" "\n" @@ -66,7 +66,7 @@ msgstr "" "n'importe lequel des formats naturels, essayez seulement, et voyez si ça " "marche.<moment> vaut l’instant actuel par défaut." -#: plugin.py:124 plugin.py:141 +#: plugin.py:134 plugin.py:151 msgid "" "This command is not available on this bot, ask the owner to install the " "python-dateutil library." @@ -74,11 +74,11 @@ msgstr "" "Cette commande n’est pas disponible sur ce bot, demandez au/à la " "propriétaire d’installer la bibliothèque python-dateutil." -#: plugin.py:131 plugin.py:150 +#: plugin.py:141 plugin.py:160 msgid "That's right now!" msgstr "C'est maintenant !" -#: plugin.py:136 +#: plugin.py:146 msgid "" "<time string>\n" "\n" @@ -89,7 +89,7 @@ msgstr "" "\n" "Retourne le nombre de secondes depuis le <moment>." -#: plugin.py:155 +#: plugin.py:165 msgid "" "[<seconds since epoch>]\n" "\n" @@ -103,11 +103,11 @@ msgstr "" " Renvoie le ctime pour le moment il y a <temps> secondes, ou le " "ctime courant, si aucun <temps> n'est donné." -#: plugin.py:161 +#: plugin.py:171 msgid "number of seconds since epoch" msgstr "nombre de secondes depuis une époque" -#: plugin.py:166 +#: plugin.py:176 #, fuzzy msgid "" "[<channel>] [<format>] [<seconds since epoch>]\n" @@ -124,7 +124,7 @@ msgstr "" "donné, utilise le format actuellement configuré pour le canal. Si le <temps> " "n'est pas donné, le temps actuel est utilisé." -#: plugin.py:188 +#: plugin.py:198 msgid "" "<seconds>\n" "\n" @@ -136,7 +136,7 @@ msgstr "" "\n" "Retourne le nombre de <secondes>, joliement formatté." -#: plugin.py:198 +#: plugin.py:208 #, fuzzy msgid "" "<region>/<city> (or <region>/<state>/<city>)\n" @@ -148,23 +148,23 @@ msgstr "" "\n" "Prend en argument une ville et sa zone, et retourne le temps local." -#: plugin.py:205 +#: plugin.py:224 msgid "Unknown timezone" msgstr "Timezone inconnue" -#: plugin.py:207 +#: plugin.py:226 msgid "" "Timezone-related commands are not available. Your administrator need to " "either upgrade Python to version 3.9 or greater, or install pytz." msgstr "" -#: plugin.py:219 +#: plugin.py:239 msgid "" "[<year> <month> <day>]\n" " Returns a the Discordian date today, or an optional different date." msgstr "" -#: plugin.py:230 +#: plugin.py:250 msgid "" "The 'ddate' module is not installed. Use '%s -m pip install --user ddate' or " "see %u for more information." diff --git a/plugins/Time/locales/hu.po b/plugins/Time/locales/hu.po index 367ba1530..146315f19 100644 --- a/plugins/Time/locales/hu.po +++ b/plugins/Time/locales/hu.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: Limnoria Time\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2012-04-27 14:49+0200\n" "Last-Translator: Mikaela Suomalainen <mikaela.suomalainen@outlook.com>\n" "Language-Team: \n" @@ -28,11 +28,11 @@ msgstr "" "Python dokumentációját, hogy lásd, milyen formátumok fogadhatók el. Ha ezt a " "változót üres karakterláncra állítod, az időbélygező nem lesz megjelenítve." -#: plugin.py:75 +#: plugin.py:82 msgid "This plugin allows you to use different time-related functions." msgstr "" -#: plugin.py:78 +#: plugin.py:85 msgid "" "[<years>y] [<weeks>w] [<days>d] [<hours>h] [<minutes>m] [<seconds>s]\n" "\n" @@ -48,11 +48,11 @@ msgstr "" "[<évek>y] [<hetek>w] [<napok>d] [<órák>h] [<percek>m] [<másodpercek>s]\n" "\n" "Kiírja a másodpercek számát a megadott számú <évek>-ben, <hetek>-ben, " -"<napok>-ban, <órák>-ban és <másodperc>-ekben. Egy lehetőség \"seconds 2h 30m" -"\", amely 9000-et írna ki, ami '3600*2 + 30*60'. Hasznos az események " +"<napok>-ban, <órák>-ban és <másodperc>-ekben. Egy lehetőség \"seconds 2h " +"30m\", amely 9000-et írna ki, ami '3600*2 + 30*60'. Hasznos az események " "időzítésére megadott számú másodpercek múlva a jövőben." -#: plugin.py:113 +#: plugin.py:123 #, fuzzy msgid "" "[<time string>]\n" @@ -70,17 +70,17 @@ msgstr "" "<időkarakterlánc> alapján. Az <időkarakterlány> lehet bármilyen természetes " "formátum; csak próbálj ki valamit, és nézd meg, hogy működik-e." -#: plugin.py:124 plugin.py:141 +#: plugin.py:134 plugin.py:151 msgid "" "This command is not available on this bot, ask the owner to install the " "python-dateutil library." msgstr "" -#: plugin.py:131 plugin.py:150 +#: plugin.py:141 plugin.py:160 msgid "That's right now!" msgstr "Ez éppen most van!" -#: plugin.py:136 +#: plugin.py:146 msgid "" "<time string>\n" "\n" @@ -91,7 +91,7 @@ msgstr "" "\n" "Kiírja, az <időkarakterlánc>-ig hátralévő másodpercek számát." -#: plugin.py:155 +#: plugin.py:165 msgid "" "[<seconds since epoch>]\n" "\n" @@ -105,11 +105,11 @@ msgstr "" "Kiírja az időkarakterláncot az <epoch óta eltelt másodpercek>-hez, vagy a " "jelenlegi időt ha nincs <epoch óta eltelt másodpercek> megadva." -#: plugin.py:161 +#: plugin.py:171 msgid "number of seconds since epoch" msgstr "epoch óta eltelt másodpercek száma" -#: plugin.py:166 +#: plugin.py:176 #, fuzzy msgid "" "[<channel>] [<format>] [<seconds since epoch>]\n" @@ -126,7 +126,7 @@ msgstr "" "megadva, a konfigurálható formátumot használja a jelenlegi csatornához. Ha " "nincs <epoch üta eltelt másodpercek> idő megadva, a jelenlegi idő használt." -#: plugin.py:188 +#: plugin.py:198 msgid "" "<seconds>\n" "\n" @@ -139,7 +139,7 @@ msgstr "" "Kiír egy szép karakterláncot, amely a <másodpercek> által képviselt idő " "mennyisége." -#: plugin.py:198 +#: plugin.py:208 #, fuzzy msgid "" "<region>/<city> (or <region>/<state>/<city>)\n" @@ -151,23 +151,23 @@ msgstr "" "\n" "Egy várost és a régióját fogadja, és kiírja az időzóna szerinti időt." -#: plugin.py:205 +#: plugin.py:224 msgid "Unknown timezone" msgstr "Ismeretlen időzóna" -#: plugin.py:207 +#: plugin.py:226 msgid "" "Timezone-related commands are not available. Your administrator need to " "either upgrade Python to version 3.9 or greater, or install pytz." msgstr "" -#: plugin.py:219 +#: plugin.py:239 msgid "" "[<year> <month> <day>]\n" " Returns a the Discordian date today, or an optional different date." msgstr "" -#: plugin.py:230 +#: plugin.py:250 msgid "" "The 'ddate' module is not installed. Use '%s -m pip install --user ddate' or " "see %u for more information." diff --git a/plugins/Time/locales/it.po b/plugins/Time/locales/it.po index 4d8af32a1..bdc052fed 100644 --- a/plugins/Time/locales/it.po +++ b/plugins/Time/locales/it.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: Limnoria\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2012-04-23 19:37+0200\n" "Last-Translator: skizzhg <skizzhg@gmx.com>\n" "Language-Team: Italian <skizzhg@gmx.com>\n" @@ -25,11 +25,11 @@ msgstr "" "assegna\n" " una stringa vuota a questa variabile, il timestamp non verrà mostrato." -#: plugin.py:75 +#: plugin.py:82 msgid "This plugin allows you to use different time-related functions." msgstr "" -#: plugin.py:78 +#: plugin.py:85 msgid "" "[<years>y] [<weeks>w] [<days>d] [<hours>h] [<minutes>m] [<seconds>s]\n" "\n" @@ -53,7 +53,7 @@ msgstr "" "futuro.\n" " " -#: plugin.py:113 +#: plugin.py:123 #, fuzzy msgid "" "[<time string>]\n" @@ -74,17 +74,17 @@ msgstr "" " qualcosa e vedere se funziona.\n" " " -#: plugin.py:124 plugin.py:141 +#: plugin.py:134 plugin.py:151 msgid "" "This command is not available on this bot, ask the owner to install the " "python-dateutil library." msgstr "" -#: plugin.py:131 plugin.py:150 +#: plugin.py:141 plugin.py:160 msgid "That's right now!" msgstr "È adesso!" -#: plugin.py:136 +#: plugin.py:146 msgid "" "<time string>\n" "\n" @@ -96,7 +96,7 @@ msgstr "" " Riporta il numero di secondi fino a <tempo>.\n" " " -#: plugin.py:155 +#: plugin.py:165 msgid "" "[<seconds since epoch>]\n" "\n" @@ -111,11 +111,11 @@ msgstr "" " l'attuale ctime (epoca equivale all'Unix time).\n" " " -#: plugin.py:161 +#: plugin.py:171 msgid "number of seconds since epoch" msgstr "numero di secondi a partire dall'epoca (Unix time)" -#: plugin.py:166 +#: plugin.py:176 #, fuzzy msgid "" "[<channel>] [<format>] [<seconds since epoch>]\n" @@ -136,7 +136,7 @@ msgstr "" " l'orario attuale (epoca equivale all'Unix time).\n" " " -#: plugin.py:188 +#: plugin.py:198 msgid "" "<seconds>\n" "\n" @@ -149,7 +149,7 @@ msgstr "" " Riporta l'ammontare di <secondi> in una stringa ben formattata.\n" " " -#: plugin.py:198 +#: plugin.py:208 #, fuzzy msgid "" "<region>/<city> (or <region>/<state>/<city>)\n" @@ -162,23 +162,23 @@ msgstr "" " Prende come argomento una città e la sua zona e restituisce l'ora " "locale." -#: plugin.py:205 +#: plugin.py:224 msgid "Unknown timezone" msgstr "Fuso orario sconosciuto" -#: plugin.py:207 +#: plugin.py:226 msgid "" "Timezone-related commands are not available. Your administrator need to " "either upgrade Python to version 3.9 or greater, or install pytz." msgstr "" -#: plugin.py:219 +#: plugin.py:239 msgid "" "[<year> <month> <day>]\n" " Returns a the Discordian date today, or an optional different date." msgstr "" -#: plugin.py:230 +#: plugin.py:250 msgid "" "The 'ddate' module is not installed. Use '%s -m pip install --user ddate' or " "see %u for more information." diff --git a/plugins/Time/messages.pot b/plugins/Time/messages.pot index c6d514d0f..7b64ff88d 100644 --- a/plugins/Time/messages.pot +++ b/plugins/Time/messages.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -23,12 +23,12 @@ msgid "" " the empty string, the timestamp will not be shown." msgstr "" -#: plugin.py:75 +#: plugin.py:82 #, docstring msgid "This plugin allows you to use different time-related functions." msgstr "" -#: plugin.py:78 +#: plugin.py:85 #, docstring msgid "" "[<years>y] [<weeks>w] [<days>d] [<hours>h] [<minutes>m] [<seconds>s]\n" @@ -41,7 +41,7 @@ msgid "" " " msgstr "" -#: plugin.py:113 +#: plugin.py:123 #, docstring msgid "" "[<time string>]\n" @@ -53,15 +53,15 @@ msgid "" " " msgstr "" -#: plugin.py:124 plugin.py:141 +#: plugin.py:134 plugin.py:151 msgid "This command is not available on this bot, ask the owner to install the python-dateutil library." msgstr "" -#: plugin.py:131 plugin.py:150 +#: plugin.py:141 plugin.py:160 msgid "That's right now!" msgstr "" -#: plugin.py:136 +#: plugin.py:146 #, docstring msgid "" "<time string>\n" @@ -70,7 +70,7 @@ msgid "" " " msgstr "" -#: plugin.py:155 +#: plugin.py:165 #, docstring msgid "" "[<seconds since epoch>]\n" @@ -80,11 +80,11 @@ msgid "" " " msgstr "" -#: plugin.py:161 +#: plugin.py:171 msgid "number of seconds since epoch" msgstr "" -#: plugin.py:166 +#: plugin.py:176 #, docstring msgid "" "[<channel>] [<format>] [<seconds since epoch>]\n" @@ -96,7 +96,7 @@ msgid "" " " msgstr "" -#: plugin.py:188 +#: plugin.py:198 #, docstring msgid "" "<seconds>\n" @@ -106,7 +106,7 @@ msgid "" " " msgstr "" -#: plugin.py:198 +#: plugin.py:208 #, docstring msgid "" "<region>/<city> (or <region>/<state>/<city>)\n" @@ -115,22 +115,22 @@ msgid "" " command uses the IANA Time Zone Database." msgstr "" -#: plugin.py:205 +#: plugin.py:224 msgid "Unknown timezone" msgstr "" -#: plugin.py:207 +#: plugin.py:226 msgid "Timezone-related commands are not available. Your administrator need to either upgrade Python to version 3.9 or greater, or install pytz." msgstr "" -#: plugin.py:219 +#: plugin.py:239 #, docstring msgid "" "[<year> <month> <day>]\n" " Returns a the Discordian date today, or an optional different date." msgstr "" -#: plugin.py:230 +#: plugin.py:250 msgid "The 'ddate' module is not installed. Use '%s -m pip install --user ddate' or see %u for more information." msgstr "" diff --git a/plugins/Todo/messages.pot b/plugins/Todo/messages.pot index aacab9040..245c2d439 100644 --- a/plugins/Todo/messages.pot +++ b/plugins/Todo/messages.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/plugins/Topic/messages.pot b/plugins/Topic/messages.pot index 3e7cda006..b2f575da1 100644 --- a/plugins/Topic/messages.pot +++ b/plugins/Topic/messages.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/plugins/URL/locales/fi.po b/plugins/URL/locales/fi.po index e9253681a..f5acc56d0 100644 --- a/plugins/URL/locales/fi.po +++ b/plugins/URL/locales/fi.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: URL plugin for Limnoria\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2014-12-20 14:41+0200\n" "Last-Translator: Mikaela Suomalainen <mikaela.suomalainen@outlook.com>\n" "Language-Team: \n" @@ -93,6 +93,6 @@ msgstr "" " itsellään.\n" " " -#: plugin.py:147 +#: plugin.py:149 msgid "No URLs matched that criteria." msgstr "Yksikään URL-osoite ei täsmännyt noihin kriteereihin." diff --git a/plugins/URL/locales/fr.po b/plugins/URL/locales/fr.po index 03d30d5b5..2a24888d4 100644 --- a/plugins/URL/locales/fr.po +++ b/plugins/URL/locales/fr.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: Limnoria\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: \n" "Last-Translator: Valentin Lorentz <progval@gmail.com>\n" "Language-Team: Limnoria <progval@gmail.com>\n" @@ -78,6 +78,6 @@ msgstr "" "seule. <canal> n'est nécessaire que si la commande n'est pas " "envoyée sur le canal lui-même." -#: plugin.py:147 +#: plugin.py:149 msgid "No URLs matched that criteria." msgstr "Aucune URL ne correspond à ces critères." diff --git a/plugins/URL/locales/it.po b/plugins/URL/locales/it.po index 64bb7acf2..5b488bfef 100644 --- a/plugins/URL/locales/it.po +++ b/plugins/URL/locales/it.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: Limnoria\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2011-08-10 02:43+0200\n" "Last-Translator: skizzhg <skizzhg@gmx.com>\n" "Language-Team: Italian <skizzhg@gmx.com>\n" @@ -81,6 +81,6 @@ msgstr "" " messaggio non viene inviato nel canale stesso.\n" " " -#: plugin.py:147 +#: plugin.py:149 msgid "No URLs matched that criteria." msgstr "Nessun URL corrisponde a questo criterio." diff --git a/plugins/URL/messages.pot b/plugins/URL/messages.pot index a1d2c098d..cfab006df 100644 --- a/plugins/URL/messages.pot +++ b/plugins/URL/messages.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -59,7 +59,7 @@ msgid "" " " msgstr "" -#: plugin.py:147 +#: plugin.py:149 msgid "No URLs matched that criteria." msgstr "" diff --git a/plugins/Unix/locales/fi.po b/plugins/Unix/locales/fi.po index bee64bd33..7cbeaebcc 100644 --- a/plugins/Unix/locales/fi.po +++ b/plugins/Unix/locales/fi.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: Unix plugin for Limnoria\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2014-12-20 13:10+0200\n" "Last-Translator: Mikaela Suomalainen <mikaela.suomalainen@outlook.com>\n" "Language-Team: \n" @@ -119,16 +119,16 @@ msgstr "" "Määrittää minkä komennon\n" " 'wtf' komento kutsuu." -#: plugin.py:57 +#: plugin.py:62 msgid "" "This command is not available, because supybot.commands.allowShell is False." msgstr "" -#: plugin.py:82 +#: plugin.py:87 msgid "Provides Utilities for Unix-like systems." msgstr "Tarjoaa työkaluja Unixin kaltaisille järjestelmille." -#: plugin.py:86 +#: plugin.py:91 msgid "" "<error number or code>\n" "\n" @@ -140,19 +140,19 @@ msgstr "" " Palauttaa virhenumeron , tai virhekoodin virhenumeron.\n" " " -#: plugin.py:98 +#: plugin.py:103 msgid "I can't find the errno number for that code." msgstr "En voi löytää virhenumeroa tuolle koodille." -#: plugin.py:101 +#: plugin.py:106 msgid "(unknown)" msgstr "(tuntematon)" -#: plugin.py:102 +#: plugin.py:107 msgid "%s (#%i): %s" msgstr "%s (#%i): %s" -#: plugin.py:107 +#: plugin.py:112 msgid "" "takes no arguments\n" "\n" @@ -165,7 +165,7 @@ msgstr "" "prosessista.\n" " " -#: plugin.py:115 +#: plugin.py:120 msgid "" "takes no arguments\n" "\n" @@ -177,16 +177,18 @@ msgstr "" " Palauttaa tämän Supybot prosessin nykyisen pidin.\n" " " -#: plugin.py:125 +#: plugin.py:131 +#, fuzzy msgid "" "<password> [<salt>]\n" "\n" -" Returns the resulting of doing a crypt() on <password>. If <salt> " -"is\n" -" not given, uses a random salt. If running on a glibc2 system,\n" -" prepending '$1$' to your salt will cause crypt to return an MD5sum\n" -" based crypt rather than the standard DES based crypt.\n" -" " +" Returns the resulting of doing a crypt() on <password>. If " +"<salt> is\n" +" not given, uses a random salt. If running on a glibc2 system,\n" +" prepending '$1$' to your salt will cause crypt to return an " +"MD5sum\n" +" based crypt rather than the standard DES based crypt.\n" +" " msgstr "" "<salasana> [<suola>]\n" "\n" @@ -198,7 +200,7 @@ msgstr "" " normaalin DES pohjaisen kryptin.\n" " " -#: plugin.py:144 +#: plugin.py:150 msgid "" "<word>\n" "\n" @@ -217,7 +219,7 @@ msgstr "" " <sanoja>.\n" " " -#: plugin.py:153 +#: plugin.py:159 msgid "" "The spell checking command is not configured. If one is installed, " "reconfigure supybot.plugins.Unix.spell.command appropriately." @@ -225,31 +227,31 @@ msgstr "" "Oikeinkirjoituksen tarkistusohjelma ei ole säädetty. Jos sellainen on " "asennttu, säädä supybot.plugins.Unix.spell.command sopivaksi." -#: plugin.py:159 +#: plugin.py:165 msgid "<word> must begin with an alphabet character." msgstr "<Sanan> täytyy alkaa aakkosellisella merkillä." -#: plugin.py:181 +#: plugin.py:187 msgid "No results found." msgstr "Tuloksia ei löytynyt." -#: plugin.py:192 +#: plugin.py:198 msgid "%q may be spelled correctly." msgstr "%q saattaa olla kirjoitettu oikein." -#: plugin.py:194 +#: plugin.py:200 msgid "I could not find an alternate spelling for %q" msgstr "En löytänyt vaihtoehtoista kirjoitustapaa sanalle %q" -#: plugin.py:198 +#: plugin.py:204 msgid "Possible spellings for %q: %L." msgstr "Mahdolliset kirjoitustavat sanalle %q ovat: %L." -#: plugin.py:201 +#: plugin.py:207 msgid "Something unexpected was seen in the [ai]spell output." msgstr "Jotakin odottamatonta nähtiin [ai]spellin ulostulossa." -#: plugin.py:207 +#: plugin.py:213 #, fuzzy msgid "" "takes no arguments\n" @@ -262,11 +264,11 @@ msgstr "" " Palauttaa ennustuksen *nix ennustusohjelmalta.\n" " " -#: plugin.py:230 +#: plugin.py:236 msgid "It seems the configured fortune command was not available." msgstr "Näyttää siltä, että määritetty ennustusohjelma ei ollut saatavilla." -#: plugin.py:243 +#: plugin.py:249 msgid "" "The fortune command is not configured. If fortune is installed on this " "system, reconfigure the supybot.plugins.Unix.fortune.command configuration " @@ -276,7 +278,7 @@ msgstr "" "järjestelmään, määritä uudelleen asetusarvo supybot.plugins.Unix.fortune." "command oikein." -#: plugin.py:250 +#: plugin.py:256 #, fuzzy msgid "" "[is] <something>\n" @@ -296,11 +298,11 @@ msgstr "" " 'bsdgames' paketissa.\n" " " -#: plugin.py:266 +#: plugin.py:272 msgid "It seems the configured wtf command was not available." msgstr "Vaikuttaa siltä, ettei määritetty wtf komento ollut saatavilla." -#: plugin.py:275 +#: plugin.py:281 msgid "" "The wtf command is not configured. If it is installed on this system, " "reconfigure the supybot.plugins.Unix.wtf.command configuration variable " @@ -309,7 +311,7 @@ msgstr "" "Wtf komento ei ole määritetty. Jos se on asennettu tähän järjestelmään, " "määritä supybot.plugins.Unix.wtf.command asetusarvo oikein." -#: plugin.py:346 +#: plugin.py:352 msgid "" "takes no arguments\n" "\n" @@ -320,7 +322,7 @@ msgstr "" " Palauttaa järjestelmän, jolla botti on ylläoloajan.\n" " " -#: plugin.py:375 +#: plugin.py:381 msgid "" "takes no arguments\n" "\n" @@ -333,7 +335,7 @@ msgstr "" "on.\n" " " -#: plugin.py:404 +#: plugin.py:410 msgid "" "<command to call with any arguments>\n" " Calls any command available on the system, and returns its output.\n" @@ -355,7 +357,7 @@ msgstr "" "laittaa koneesi polvilleen. \n" " " -#: plugin.py:435 +#: plugin.py:441 msgid "" "<command to call with any arguments>\n" " Calls any command available on the system using the shell\n" diff --git a/plugins/Unix/locales/fr.po b/plugins/Unix/locales/fr.po index bd7319278..4e075bb0c 100644 --- a/plugins/Unix/locales/fr.po +++ b/plugins/Unix/locales/fr.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Limnoria\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2012-07-29 11:58+0100\n" "Last-Translator: Valentin Lorentz <progval@gmail.com>\n" "Language-Team: French <kde-i18n-doc@kde.org>\n" @@ -101,16 +101,16 @@ msgid "" " command will be called for the wtf command." msgstr "Détermine quelle commande sera appelée par la commande 'wtf'." -#: plugin.py:57 +#: plugin.py:62 msgid "" "This command is not available, because supybot.commands.allowShell is False." msgstr "" -#: plugin.py:82 +#: plugin.py:87 msgid "Provides Utilities for Unix-like systems." msgstr "" -#: plugin.py:86 +#: plugin.py:91 msgid "" "<error number or code>\n" "\n" @@ -121,19 +121,19 @@ msgstr "" "\n" "Retourne le code du numéro d'erreur, ou le numéro d'erreur du code." -#: plugin.py:98 +#: plugin.py:103 msgid "I can't find the errno number for that code." msgstr "Je ne peux trouver le numéro d'erreur pour ce code." -#: plugin.py:101 +#: plugin.py:106 msgid "(unknown)" msgstr "(inconnu)" -#: plugin.py:102 +#: plugin.py:107 msgid "%s (#%i): %s" msgstr "%s (#%i) : %s" -#: plugin.py:107 +#: plugin.py:112 msgid "" "takes no arguments\n" "\n" @@ -144,7 +144,7 @@ msgstr "" "\n" "Retourn différentes informations unix-y à propos du processus de supybot." -#: plugin.py:115 +#: plugin.py:120 msgid "" "takes no arguments\n" "\n" @@ -155,16 +155,18 @@ msgstr "" "\n" "Retourne le pid du processus de Supybot." -#: plugin.py:125 +#: plugin.py:131 +#, fuzzy msgid "" "<password> [<salt>]\n" "\n" -" Returns the resulting of doing a crypt() on <password>. If <salt> " -"is\n" -" not given, uses a random salt. If running on a glibc2 system,\n" -" prepending '$1$' to your salt will cause crypt to return an MD5sum\n" -" based crypt rather than the standard DES based crypt.\n" -" " +" Returns the resulting of doing a crypt() on <password>. If " +"<salt> is\n" +" not given, uses a random salt. If running on a glibc2 system,\n" +" prepending '$1$' to your salt will cause crypt to return an " +"MD5sum\n" +" based crypt rather than the standard DES based crypt.\n" +" " msgstr "" "<mot de passe> [<sel>]\n" "\n" @@ -173,7 +175,7 @@ msgstr "" "ajouter '$1$' au début de votre sel fera que crypt retournera un crypt basé " "sur MD5sum plutôt que sur le crypt basé sur DES standard." -#: plugin.py:144 +#: plugin.py:150 msgid "" "<word>\n" "\n" @@ -189,7 +191,7 @@ msgstr "" "affichés sont triés du meilleur au pire en fonction de comment ils " "correspondent au <mot>." -#: plugin.py:153 +#: plugin.py:159 msgid "" "The spell checking command is not configured. If one is installed, " "reconfigure supybot.plugins.Unix.spell.command appropriately." @@ -198,31 +200,31 @@ msgstr "" "il y en a une, configurez supybot.plugins.Unix.spell.command de façon " "appropriée." -#: plugin.py:159 +#: plugin.py:165 msgid "<word> must begin with an alphabet character." msgstr "<mo> doit commencer par une lettre de l'alphabet." -#: plugin.py:181 +#: plugin.py:187 msgid "No results found." msgstr "Aucun résultat trouvé." -#: plugin.py:192 +#: plugin.py:198 msgid "%q may be spelled correctly." msgstr "%q semble être orthographié correctement." -#: plugin.py:194 +#: plugin.py:200 msgid "I could not find an alternate spelling for %q" msgstr "Je ne peux pas trouver d'orthographe alternative pour %q" -#: plugin.py:198 +#: plugin.py:204 msgid "Possible spellings for %q: %L." msgstr "Orthographes possibles pour %q : %L" -#: plugin.py:201 +#: plugin.py:207 msgid "Something unexpected was seen in the [ai]spell output." msgstr "Quelque chose d'imprévu a été trouvé dans la sortie de [ai]spell." -#: plugin.py:207 +#: plugin.py:213 #, fuzzy msgid "" "takes no arguments\n" @@ -234,11 +236,11 @@ msgstr "" "\n" "Retourne une fortune depuis le programme fortune de *nix." -#: plugin.py:230 +#: plugin.py:236 msgid "It seems the configured fortune command was not available." msgstr "Il semble que la commande fortune configurée ne soit pas disponible." -#: plugin.py:243 +#: plugin.py:249 msgid "" "The fortune command is not configured. If fortune is installed on this " "system, reconfigure the supybot.plugins.Unix.fortune.command configuration " @@ -247,7 +249,7 @@ msgstr "" "La commande fortune n'est pas configurée. Si fortune est installé sur ce " "système, configurez supybot.plugins.Unix.fortune.command de façon appropriée." -#: plugin.py:250 +#: plugin.py:256 #, fuzzy msgid "" "[is] <something>\n" @@ -264,11 +266,11 @@ msgstr "" "qui est apparue dans NetBSD 1.5. Dans la plupart des machines unices, elle " "fait partie du paquet 'bsdgames'." -#: plugin.py:266 +#: plugin.py:272 msgid "It seems the configured wtf command was not available." msgstr "Il semble que la commande wtf ne soit pas disponible." -#: plugin.py:275 +#: plugin.py:281 msgid "" "The wtf command is not configured. If it is installed on this system, " "reconfigure the supybot.plugins.Unix.wtf.command configuration variable " @@ -277,7 +279,7 @@ msgstr "" "La commande wtf n'est pas configurée. Si elle est installée sur ce système, " "veuillez configurer supybot.plugins.Unix.wtf.command de façon appropriée." -#: plugin.py:346 +#: plugin.py:352 msgid "" "takes no arguments\n" "\n" @@ -288,7 +290,7 @@ msgstr "" "\n" "Retourne l'uptime du système sur lequel fonctionne le bot." -#: plugin.py:375 +#: plugin.py:381 msgid "" "takes no arguments\n" "\n" @@ -299,7 +301,7 @@ msgstr "" "\n" "Retourne le \"uname -a\" du système sur lequel le bot fonctionne." -#: plugin.py:404 +#: plugin.py:410 #, fuzzy msgid "" "<command to call with any arguments>\n" @@ -319,7 +321,7 @@ msgstr "" "sorties. Donc, c'est à vous de vous assurez que ça ne fera rien qui spammera " "le canal ou que ça ne va pas faire tomber votre machine à genoux." -#: plugin.py:435 +#: plugin.py:441 #, fuzzy msgid "" "<command to call with any arguments>\n" diff --git a/plugins/Unix/locales/it.po b/plugins/Unix/locales/it.po index 9b78a252f..c83dd479d 100644 --- a/plugins/Unix/locales/it.po +++ b/plugins/Unix/locales/it.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: Limnoria\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2012-01-02 20:09+0100\n" "Last-Translator: skizzhg <skizzhg@gmx.com>\n" "Language-Team: Italian <skizzhg@gmx.com>\n" @@ -102,16 +102,16 @@ msgid "" " command will be called for the wtf command." msgstr "Determina quale comando verrà richiamato tramite \"wtf\"." -#: plugin.py:57 +#: plugin.py:62 msgid "" "This command is not available, because supybot.commands.allowShell is False." msgstr "" -#: plugin.py:82 +#: plugin.py:87 msgid "Provides Utilities for Unix-like systems." msgstr "" -#: plugin.py:86 +#: plugin.py:91 msgid "" "<error number or code>\n" "\n" @@ -124,19 +124,19 @@ msgstr "" "errore di un numero.\n" " " -#: plugin.py:98 +#: plugin.py:103 msgid "I can't find the errno number for that code." msgstr "Non trovo un numero di errore per quel codice." -#: plugin.py:101 +#: plugin.py:106 msgid "(unknown)" msgstr "(sconosciuto)" -#: plugin.py:102 +#: plugin.py:107 msgid "%s (#%i): %s" msgstr "%s (#%i): %s" -#: plugin.py:107 +#: plugin.py:112 msgid "" "takes no arguments\n" "\n" @@ -149,7 +149,7 @@ msgstr "" "esecuzione.\n" " " -#: plugin.py:115 +#: plugin.py:120 msgid "" "takes no arguments\n" "\n" @@ -161,16 +161,18 @@ msgstr "" " Riporta l'attuale PID del processo per questo Supybot.\n" " " -#: plugin.py:125 +#: plugin.py:131 +#, fuzzy msgid "" "<password> [<salt>]\n" "\n" -" Returns the resulting of doing a crypt() on <password>. If <salt> " -"is\n" -" not given, uses a random salt. If running on a glibc2 system,\n" -" prepending '$1$' to your salt will cause crypt to return an MD5sum\n" -" based crypt rather than the standard DES based crypt.\n" -" " +" Returns the resulting of doing a crypt() on <password>. If " +"<salt> is\n" +" not given, uses a random salt. If running on a glibc2 system,\n" +" prepending '$1$' to your salt will cause crypt to return an " +"MD5sum\n" +" based crypt rather than the standard DES based crypt.\n" +" " msgstr "" "<password> [<sale>]\n" "\n" @@ -182,7 +184,7 @@ msgstr "" "standard DES.\n" " " -#: plugin.py:144 +#: plugin.py:150 msgid "" "<word>\n" "\n" @@ -201,7 +203,7 @@ msgstr "" " potenziale ortografia corretta di <parola>.\n" " " -#: plugin.py:153 +#: plugin.py:159 msgid "" "The spell checking command is not configured. If one is installed, " "reconfigure supybot.plugins.Unix.spell.command appropriately." @@ -210,31 +212,31 @@ msgstr "" "installato, configurare la variabile supybot.plugins.Unix.spell.command in " "modo appropriato." -#: plugin.py:159 +#: plugin.py:165 msgid "<word> must begin with an alphabet character." msgstr "<parola> deve iniziare con un carattere dell'alfabeto." -#: plugin.py:181 +#: plugin.py:187 msgid "No results found." msgstr "Nessun risultato trovato." -#: plugin.py:192 +#: plugin.py:198 msgid "%q may be spelled correctly." msgstr "%q sembra scritto correttamente." -#: plugin.py:194 +#: plugin.py:200 msgid "I could not find an alternate spelling for %q" msgstr "Impossibile trovare un'ortografia alternativa per %q" -#: plugin.py:198 +#: plugin.py:204 msgid "Possible spellings for %q: %L." msgstr "Ortografia possibile per %q: %L." -#: plugin.py:201 +#: plugin.py:207 msgid "Something unexpected was seen in the [ai]spell output." msgstr "È stato trovato qualcosa di inaspettato nell'output di [ai]spell." -#: plugin.py:207 +#: plugin.py:213 #, fuzzy msgid "" "takes no arguments\n" @@ -247,11 +249,11 @@ msgstr "" " Restituisce un biscottino della fortuna dal programma *nix fortune.\n" " " -#: plugin.py:230 +#: plugin.py:236 msgid "It seems the configured fortune command was not available." msgstr "Sembra che il comando fortune configurato non sia disponibile." -#: plugin.py:243 +#: plugin.py:249 msgid "" "The fortune command is not configured. If fortune is installed on this " "system, reconfigure the supybot.plugins.Unix.fortune.command configuration " @@ -260,7 +262,7 @@ msgstr "" "Il comando fortune non è configurato. Se ve n'è uno installato, configurare " "la variabile supybot.plugins.Unix.fortune.command in modo appropriato." -#: plugin.py:250 +#: plugin.py:256 #, fuzzy msgid "" "[is] <something>\n" @@ -279,11 +281,11 @@ msgstr "" "nel pacchetto \"bsdgames\".\n" " " -#: plugin.py:266 +#: plugin.py:272 msgid "It seems the configured wtf command was not available." msgstr "Sembra che il comando wtf configurato non sia disponibile." -#: plugin.py:275 +#: plugin.py:281 msgid "" "The wtf command is not configured. If it is installed on this system, " "reconfigure the supybot.plugins.Unix.wtf.command configuration variable " @@ -292,7 +294,7 @@ msgstr "" "Il comando wtf non è configurato. Se ve n'è uno installato, configurare la " "variabile supybot.plugins.Unix.wtf.command in modo appropriato." -#: plugin.py:346 +#: plugin.py:352 msgid "" "takes no arguments\n" "\n" @@ -304,7 +306,7 @@ msgstr "" " Riporta l'uptime del sistema su cui è in esecuzione il bot.\n" " " -#: plugin.py:375 +#: plugin.py:381 msgid "" "takes no arguments\n" "\n" @@ -317,7 +319,7 @@ msgstr "" "esecuzione il bot.\n" " " -#: plugin.py:404 +#: plugin.py:410 #, fuzzy msgid "" "<command to call with any arguments>\n" @@ -341,7 +343,7 @@ msgstr "" " canale (flood) o che metta in ginocchio la tua macchina.\n" " " -#: plugin.py:435 +#: plugin.py:441 #, fuzzy msgid "" "<command to call with any arguments>\n" diff --git a/plugins/Unix/messages.pot b/plugins/Unix/messages.pot index cedfdaec0..9a964063e 100644 --- a/plugins/Unix/messages.pot +++ b/plugins/Unix/messages.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -84,16 +84,16 @@ msgid "" " command will be called for the wtf command." msgstr "" -#: plugin.py:57 +#: plugin.py:62 msgid "This command is not available, because supybot.commands.allowShell is False." msgstr "" -#: plugin.py:82 +#: plugin.py:87 #, docstring msgid "Provides Utilities for Unix-like systems." msgstr "" -#: plugin.py:86 +#: plugin.py:91 #, docstring msgid "" "<error number or code>\n" @@ -102,19 +102,19 @@ msgid "" " " msgstr "" -#: plugin.py:98 +#: plugin.py:103 msgid "I can't find the errno number for that code." msgstr "" -#: plugin.py:101 +#: plugin.py:106 msgid "(unknown)" msgstr "" -#: plugin.py:102 +#: plugin.py:107 msgid "%s (#%i): %s" msgstr "" -#: plugin.py:107 +#: plugin.py:112 #, docstring msgid "" "takes no arguments\n" @@ -123,7 +123,7 @@ msgid "" " " msgstr "" -#: plugin.py:115 +#: plugin.py:120 #, docstring msgid "" "takes no arguments\n" @@ -132,19 +132,19 @@ msgid "" " " msgstr "" -#: plugin.py:125 +#: plugin.py:131 #, docstring msgid "" "<password> [<salt>]\n" "\n" -" Returns the resulting of doing a crypt() on <password>. If <salt> is\n" -" not given, uses a random salt. If running on a glibc2 system,\n" -" prepending '$1$' to your salt will cause crypt to return an MD5sum\n" -" based crypt rather than the standard DES based crypt.\n" -" " +" Returns the resulting of doing a crypt() on <password>. If <salt> is\n" +" not given, uses a random salt. If running on a glibc2 system,\n" +" prepending '$1$' to your salt will cause crypt to return an MD5sum\n" +" based crypt rather than the standard DES based crypt.\n" +" " msgstr "" -#: plugin.py:144 +#: plugin.py:150 #, docstring msgid "" "<word>\n" @@ -155,35 +155,35 @@ msgid "" " " msgstr "" -#: plugin.py:153 +#: plugin.py:159 msgid "The spell checking command is not configured. If one is installed, reconfigure supybot.plugins.Unix.spell.command appropriately." msgstr "" -#: plugin.py:159 +#: plugin.py:165 msgid "<word> must begin with an alphabet character." msgstr "" -#: plugin.py:181 +#: plugin.py:187 msgid "No results found." msgstr "" -#: plugin.py:192 +#: plugin.py:198 msgid "%q may be spelled correctly." msgstr "" -#: plugin.py:194 +#: plugin.py:200 msgid "I could not find an alternate spelling for %q" msgstr "" -#: plugin.py:198 +#: plugin.py:204 msgid "Possible spellings for %q: %L." msgstr "" -#: plugin.py:201 +#: plugin.py:207 msgid "Something unexpected was seen in the [ai]spell output." msgstr "" -#: plugin.py:207 +#: plugin.py:213 #, docstring msgid "" "takes no arguments\n" @@ -192,15 +192,15 @@ msgid "" " " msgstr "" -#: plugin.py:230 +#: plugin.py:236 msgid "It seems the configured fortune command was not available." msgstr "" -#: plugin.py:243 +#: plugin.py:249 msgid "The fortune command is not configured. If fortune is installed on this system, reconfigure the supybot.plugins.Unix.fortune.command configuration variable appropriately." msgstr "" -#: plugin.py:250 +#: plugin.py:256 #, docstring msgid "" "[is] <something>\n" @@ -211,15 +211,15 @@ msgid "" " " msgstr "" -#: plugin.py:266 +#: plugin.py:272 msgid "It seems the configured wtf command was not available." msgstr "" -#: plugin.py:275 +#: plugin.py:281 msgid "The wtf command is not configured. If it is installed on this system, reconfigure the supybot.plugins.Unix.wtf.command configuration variable appropriately." msgstr "" -#: plugin.py:346 +#: plugin.py:352 #, docstring msgid "" "takes no arguments\n" @@ -228,7 +228,7 @@ msgid "" " " msgstr "" -#: plugin.py:375 +#: plugin.py:381 #, docstring msgid "" "takes no arguments\n" @@ -237,7 +237,7 @@ msgid "" " " msgstr "" -#: plugin.py:404 +#: plugin.py:410 #, docstring msgid "" "<command to call with any arguments>\n" @@ -250,7 +250,7 @@ msgid "" " " msgstr "" -#: plugin.py:435 +#: plugin.py:441 #, docstring msgid "" "<command to call with any arguments>\n" diff --git a/plugins/User/locales/de.po b/plugins/User/locales/de.po index e342822b3..a1e456784 100644 --- a/plugins/User/locales/de.po +++ b/plugins/User/locales/de.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: Supybot\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2012-04-27 15:48+0200\n" "Last-Translator: Mikaela Suomalainen <mikaela.suomalainen@outlook.com>\n" "Language-Team: German <fbesser@gmail.com>\n" @@ -374,7 +374,7 @@ msgstr "" "wird, werden die Fähigkeiten des Benutzer ausgegeben, der diesen Befehl " "ausführt." -#: plugin.py:459 +#: plugin.py:460 msgid "" "<name> <password>\n" "\n" @@ -390,7 +390,7 @@ msgstr "" "Befehle die ein Passwort beinhalten) muss an den Bot privat gesendet werden, " "nicht in einem Kanal." -#: plugin.py:471 +#: plugin.py:472 msgid "" "Your secure flag is true and your hostmask doesn't match any of your known " "hostmasks." @@ -398,7 +398,7 @@ msgstr "" "Dein Sicherheitsflag ist auf wahr gesetzt und deine Hostmaske passt zu " "keiner Hostmaske die zu deinen passt." -#: plugin.py:481 +#: plugin.py:482 msgid "" "takes no arguments\n" "\n" @@ -417,7 +417,7 @@ msgstr "" "möglicherweise Hostmasken zu deinem Bot hinzugefügt hast, die dazu führen " "das der Bot dich weitehrin erkennt." -#: plugin.py:490 +#: plugin.py:491 msgid "" "If you remain recognized after giving this command, you're being recognized " "by hostmask, rather than by password. You must remove whatever hostmask is " @@ -428,7 +428,7 @@ msgstr "" "entfernen die dazu führt du das beachtet wirst um nicht mehr beachtet zu " "werden." -#: plugin.py:499 +#: plugin.py:500 msgid "" "takes no arguments\n" "\n" @@ -439,14 +439,14 @@ msgstr "" "\n" "Gibt den Namen den Benutzers aus, der den Befehl aufruft." -#: plugin.py:508 +#: plugin.py:509 msgid "" "I don't recognize you. You can message me either of these two commands: " "\"user identify <username> <password>\" to log in or \"user register " "<username> <password>\" to register." msgstr "" -#: plugin.py:514 +#: plugin.py:515 msgid "" "takes no arguments\n" "\n" @@ -457,7 +457,7 @@ msgstr "" "\n" "Gibt ein paar Statistiken über die Benutzerdatenbank zurück." -#: plugin.py:532 +#: plugin.py:533 msgid "I have %s registered users with %s registered hostmasks; %n and %n." msgstr "" "Ich habe %s registierte Benutzer mit %s registrierten Hostmasken; %n und %n." diff --git a/plugins/User/locales/fi.po b/plugins/User/locales/fi.po index d8b95cf09..9d47c4677 100644 --- a/plugins/User/locales/fi.po +++ b/plugins/User/locales/fi.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: User plugin for Limnoria\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2014-12-20 12:00+0200\n" "Last-Translator: Mikaela Suomalainen <mikaela.suomalainen@outlook.com>\n" "Language-Team: suomi <>\n" @@ -417,7 +417,7 @@ msgstr "" "valtuudet.\n" " " -#: plugin.py:459 +#: plugin.py:460 msgid "" "<name> <password>\n" "\n" @@ -435,7 +435,7 @@ msgstr "" " ei kanavalla.\n" " " -#: plugin.py:471 +#: plugin.py:472 msgid "" "Your secure flag is true and your hostmask doesn't match any of your known " "hostmasks." @@ -443,7 +443,7 @@ msgstr "" "Sinun 'secure' lippusi on 'true' ja sinun hostmaskisi ei täsmää yhteenkään " "sinun tunnettuun hostmaskiisi." -#: plugin.py:481 +#: plugin.py:482 msgid "" "takes no arguments\n" "\n" @@ -464,7 +464,7 @@ msgstr "" " tunnistaa sinut yhä.\n" " " -#: plugin.py:490 +#: plugin.py:491 msgid "" "If you remain recognized after giving this command, you're being recognized " "by hostmask, rather than by password. You must remove whatever hostmask is " @@ -475,7 +475,7 @@ msgstr "" "hostmaski, joka aiheuttaa sinun tunnistamisesi, tullaksesi " "tunnistamattomaksi." -#: plugin.py:499 +#: plugin.py:500 msgid "" "takes no arguments\n" "\n" @@ -487,7 +487,7 @@ msgstr "" " Palauttaa komennon antaneen käyttäjän tunnuksen.\n" " " -#: plugin.py:508 +#: plugin.py:509 #, fuzzy msgid "" "I don't recognize you. You can message me either of these two commands: " @@ -498,7 +498,7 @@ msgstr "" "komennoista: \"user identify <username> <password>\" kirjautuaksesi sisään " "tai rekisteröityäksesi \"user register <username> <password>\"." -#: plugin.py:514 +#: plugin.py:515 msgid "" "takes no arguments\n" "\n" @@ -510,7 +510,7 @@ msgstr "" " Palauttaa joitakin tilastotietoja käyttäjä tietokannasta.\n" " " -#: plugin.py:532 +#: plugin.py:533 msgid "I have %s registered users with %s registered hostmasks; %n and %n." msgstr "" "Minulla on %s rekisteröityä käyttäjää %s rekisteröidyllä hostmaskilla; %n ja " diff --git a/plugins/User/locales/fr.po b/plugins/User/locales/fr.po index efbb3103f..a6c46ef3c 100644 --- a/plugins/User/locales/fr.po +++ b/plugins/User/locales/fr.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: Limnoria\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2014-07-05 00:10+0200\n" "Last-Translator: \n" "Language-Team: Limnoria <progval@gmail.com>\n" @@ -376,7 +376,7 @@ msgstr "" "<nom> n'est pas spécifié, retourne les capacités de l'utilisateur appelant " "la commande." -#: plugin.py:459 +#: plugin.py:460 msgid "" "<name> <password>\n" "\n" @@ -392,7 +392,7 @@ msgstr "" "qui requierent un mot de passe) doivent être envoyées en privé au bot, et " "non sur un canal." -#: plugin.py:471 +#: plugin.py:472 msgid "" "Your secure flag is true and your hostmask doesn't match any of your known " "hostmasks." @@ -400,7 +400,7 @@ msgstr "" "Votre flag secure est True, et votre masque d'hôte ne correspond à aucune de " "vos masques d'hôte connus." -#: plugin.py:481 +#: plugin.py:482 msgid "" "takes no arguments\n" "\n" @@ -418,7 +418,7 @@ msgstr "" "le bot vous reconnait grâce au masque d'hôte ; il continuera alors à vous " "reconnaître." -#: plugin.py:490 +#: plugin.py:491 msgid "" "If you remain recognized after giving this command, you're being recognized " "by hostmask, rather than by password. You must remove whatever hostmask is " @@ -429,7 +429,7 @@ msgstr "" "supprimer tout masque d'hôte susceptible de vous reconnaitre, dans le but de " "ne pas être reconnu(e)." -#: plugin.py:499 +#: plugin.py:500 msgid "" "takes no arguments\n" "\n" @@ -440,14 +440,14 @@ msgstr "" "\n" "Retourne le nom de l'utilisateur appellant la commande." -#: plugin.py:508 +#: plugin.py:509 msgid "" "I don't recognize you. You can message me either of these two commands: " "\"user identify <username> <password>\" to log in or \"user register " "<username> <password>\" to register." msgstr "" -#: plugin.py:514 +#: plugin.py:515 msgid "" "takes no arguments\n" "\n" @@ -458,7 +458,7 @@ msgstr "" "\n" "Retourne des statistiques sur la base de données." -#: plugin.py:532 +#: plugin.py:533 msgid "I have %s registered users with %s registered hostmasks; %n and %n." msgstr "" "J'ai %s utilisateurs enregistrés, avec %s masques d'hôte enregistrés ; %n et " diff --git a/plugins/User/locales/hu.po b/plugins/User/locales/hu.po index 566808774..6d2cb45b1 100644 --- a/plugins/User/locales/hu.po +++ b/plugins/User/locales/hu.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: Limnoria User\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2014-07-05 00:10+0200\n" "Last-Translator: Mikaela Suomalainen <mikaela.suomalainen@outlook.com>\n" "Language-Team: \n" @@ -298,7 +298,7 @@ msgid "" " " msgstr "" -#: plugin.py:459 +#: plugin.py:460 msgid "" "<name> <password>\n" "\n" @@ -309,7 +309,7 @@ msgid "" " " msgstr "" -#: plugin.py:471 +#: plugin.py:472 msgid "" "Your secure flag is true and your hostmask doesn't match any of your known " "hostmasks." @@ -317,7 +317,7 @@ msgstr "" "A secure jelződ igaz és a hosztmaszkod nem egyezik egy ismert " "hosztmaszkoddal sem." -#: plugin.py:481 +#: plugin.py:482 msgid "" "takes no arguments\n" "\n" @@ -330,7 +330,7 @@ msgid "" " " msgstr "" -#: plugin.py:490 +#: plugin.py:491 msgid "" "If you remain recognized after giving this command, you're being recognized " "by hostmask, rather than by password. You must remove whatever hostmask is " @@ -340,7 +340,7 @@ msgstr "" "felismerve, jelszó helyett. El kell távolítanod akármilyen hosztmaszkot, " "amely a fekusmerésedet okozza, hogy ne legyél felismerve." -#: plugin.py:499 +#: plugin.py:500 msgid "" "takes no arguments\n" "\n" @@ -348,14 +348,14 @@ msgid "" " " msgstr "" -#: plugin.py:508 +#: plugin.py:509 msgid "" "I don't recognize you. You can message me either of these two commands: " "\"user identify <username> <password>\" to log in or \"user register " "<username> <password>\" to register." msgstr "" -#: plugin.py:514 +#: plugin.py:515 msgid "" "takes no arguments\n" "\n" @@ -363,7 +363,7 @@ msgid "" " " msgstr "" -#: plugin.py:532 +#: plugin.py:533 msgid "I have %s registered users with %s registered hostmasks; %n and %n." msgstr "" "%s regisztrált felhasználóm van %s regisztrált hosztmaszkkal; %n és %n." diff --git a/plugins/User/locales/it.po b/plugins/User/locales/it.po index 6320866c7..e5a7838da 100644 --- a/plugins/User/locales/it.po +++ b/plugins/User/locales/it.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: Limnoria\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2014-07-05 00:10+0200\n" "Last-Translator: skizzhg <skizzhg@gmx.com>\n" "Language-Team: Italian <skizzhg@gmx.com>\n" @@ -402,7 +402,7 @@ msgstr "" "comando.\n" " " -#: plugin.py:459 +#: plugin.py:460 msgid "" "<name> <password>\n" "\n" @@ -419,7 +419,7 @@ msgstr "" "mai in canale.\n" " " -#: plugin.py:471 +#: plugin.py:472 msgid "" "Your secure flag is true and your hostmask doesn't match any of your known " "hostmasks." @@ -427,7 +427,7 @@ msgstr "" "Il tuo flag secure è impostato a True e la tua hostmask non corrisponde a " "nessuna di quelle conosciute." -#: plugin.py:481 +#: plugin.py:482 msgid "" "takes no arguments\n" "\n" @@ -448,7 +448,7 @@ msgstr "" " aggiunta altre hostmask per il tuo utente.\n" " " -#: plugin.py:490 +#: plugin.py:491 msgid "" "If you remain recognized after giving this command, you're being recognized " "by hostmask, rather than by password. You must remove whatever hostmask is " @@ -458,7 +458,7 @@ msgstr "" "tramite l'hostmask piuttosto che la password. È necessario rimuovere " "qualsiasi hostmask che causa il riconoscimento." -#: plugin.py:499 +#: plugin.py:500 msgid "" "takes no arguments\n" "\n" @@ -470,14 +470,14 @@ msgstr "" " Restituisce il nome dell'utente che usa questo comando.\n" " " -#: plugin.py:508 +#: plugin.py:509 msgid "" "I don't recognize you. You can message me either of these two commands: " "\"user identify <username> <password>\" to log in or \"user register " "<username> <password>\" to register." msgstr "" -#: plugin.py:514 +#: plugin.py:515 msgid "" "takes no arguments\n" "\n" @@ -489,7 +489,7 @@ msgstr "" " Riporta alcune statistiche a proposito del database degli utenti.\n" " " -#: plugin.py:532 +#: plugin.py:533 msgid "I have %s registered users with %s registered hostmasks; %n and %n." msgstr "Ho %s utenti registrati con %s hostmask registrate; %n e %n." diff --git a/plugins/User/messages.pot b/plugins/User/messages.pot index a20f0b7f6..875416a86 100644 --- a/plugins/User/messages.pot +++ b/plugins/User/messages.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -273,7 +273,7 @@ msgid "" " " msgstr "" -#: plugin.py:459 +#: plugin.py:460 #, docstring msgid "" "<name> <password>\n" @@ -284,11 +284,11 @@ msgid "" " " msgstr "" -#: plugin.py:471 +#: plugin.py:472 msgid "Your secure flag is true and your hostmask doesn't match any of your known hostmasks." msgstr "" -#: plugin.py:481 +#: plugin.py:482 #, docstring msgid "" "takes no arguments\n" @@ -300,11 +300,11 @@ msgid "" " " msgstr "" -#: plugin.py:490 +#: plugin.py:491 msgid "If you remain recognized after giving this command, you're being recognized by hostmask, rather than by password. You must remove whatever hostmask is causing you to be recognized in order not to be recognized." msgstr "" -#: plugin.py:499 +#: plugin.py:500 #, docstring msgid "" "takes no arguments\n" @@ -313,11 +313,11 @@ msgid "" " " msgstr "" -#: plugin.py:508 +#: plugin.py:509 msgid "I don't recognize you. You can message me either of these two commands: \"user identify <username> <password>\" to log in or \"user register <username> <password>\" to register." msgstr "" -#: plugin.py:514 +#: plugin.py:515 #, docstring msgid "" "takes no arguments\n" @@ -326,7 +326,7 @@ msgid "" " " msgstr "" -#: plugin.py:532 +#: plugin.py:533 msgid "I have %s registered users with %s registered hostmasks; %n and %n." msgstr "" diff --git a/plugins/Utilities/messages.pot b/plugins/Utilities/messages.pot index b5235723a..a92ef2d02 100644 --- a/plugins/Utilities/messages.pot +++ b/plugins/Utilities/messages.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/plugins/Web/locales/de.po b/plugins/Web/locales/de.po index ff0cf2ce1..af69b3dbc 100644 --- a/plugins/Web/locales/de.po +++ b/plugins/Web/locales/de.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: Supybot\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2012-04-27 15:47+0200\n" "Last-Translator: Mikaela Suomalainen <mikaela.suomalainen@outlook.com>\n" "Language-Team: German <fbesser@gmail.com>\n" @@ -119,25 +119,40 @@ msgstr "" msgid "Add the help for 'help Web' here." msgstr "Füge die Hilfe für \"help Web\" hier hinzu." -#: plugin.py:171 +#: plugin.py:154 +msgid "" +"Returns a new URL that should be the target of a new request,\n" +" or None if the request is fine as it is.\n" +"\n" +" The returned URL may be the same as the parameter, in case\n" +" something else was changed by this function through side-" +"effects.\n" +" " +msgstr "" + +#: plugin.py:198 +msgid "Connection to %s timed out" +msgstr "" + +#: plugin.py:232 msgid "Could not guess the page's encoding. (Try installing python-charade.)" msgstr "" -#: plugin.py:192 +#: plugin.py:253 msgid "That URL appears to have no HTML title." msgstr "Es scheint so als habe die URL keinen HTML Titel." -#: plugin.py:195 +#: plugin.py:256 msgid "That URL appears to have no HTML title within the first %S." msgstr "" "Es scheint so als habe die URL keinen HTML Titel innerhalb der ersten %S." -#: plugin.py:237 +#: plugin.py:298 #, fuzzy msgid " (at %s)" msgstr "Titel: %s (auf %s)" -#: plugin.py:262 +#: plugin.py:323 msgid "" "<url>\n" "\n" @@ -149,11 +164,11 @@ msgstr "" "\n" "Gibt den HTTP Kopf von <url> aus. Natürlich sind nur HTTP URLS zulässig." -#: plugin.py:273 +#: plugin.py:334 msgid "%s: %s" msgstr "%s: %s" -#: plugin.py:283 +#: plugin.py:344 msgid "" "<url>\n" "\n" @@ -163,7 +178,7 @@ msgid "" " Useful to \"un-tinify\" URLs." msgstr "" -#: plugin.py:299 +#: plugin.py:360 msgid "" "<url>\n" "\n" @@ -176,11 +191,11 @@ msgstr "" "Gibt die DOCTYPE Zeichenkette von <url> aus. Natürlich sind nur HTTP URLS " "zulässig" -#: plugin.py:315 +#: plugin.py:376 msgid "That URL has no specified doctype." msgstr "Diese URL hat doctype nicht spezifiziert." -#: plugin.py:321 +#: plugin.py:382 msgid "" "<url>\n" "\n" @@ -193,17 +208,17 @@ msgstr "" "\n" "Gibt Content-Length Kopf der <url> aus. Natürlich sind nur HTTP URLs zulässig" -#: plugin.py:336 plugin.py:341 +#: plugin.py:397 plugin.py:402 msgid "%u is %S long." msgstr "%u ist %S lang." -#: plugin.py:343 +#: plugin.py:404 #, fuzzy msgid "The server didn't tell me how long %u is but it's longer than %S." msgstr "" "Der Server hat mir nicht gesagt wie lang %u ist, aber es ist länger als %S." -#: plugin.py:353 +#: plugin.py:414 msgid "" "[--no-filter] <url>\n" "\n" @@ -213,7 +228,7 @@ msgid "" " " msgstr "" -#: plugin.py:374 +#: plugin.py:435 msgid "" "<text>\n" "\n" @@ -224,7 +239,7 @@ msgstr "" "\n" "Gibt die URL zitierte Form vom gegeben Text aus." -#: plugin.py:382 +#: plugin.py:443 msgid "" "<text>\n" "\n" @@ -235,7 +250,7 @@ msgstr "" "\n" "Gibt den Text nicht URL zitiert aus." -#: plugin.py:393 +#: plugin.py:454 msgid "" "<url>\n" "\n" @@ -251,7 +266,7 @@ msgstr "" "maximum konfiguriert wurde. Falls diese Konfigurationsvariable auf 0 gesetzt " "ist, wird der Befehl praktisch deaktiviert." -#: plugin.py:405 +#: plugin.py:466 msgid "" "This command is disabled (supybot.plugins.Web.fetch.maximum is set to 0)." msgstr "" diff --git a/plugins/Web/locales/fi.po b/plugins/Web/locales/fi.po index b1b6b13ea..c76fdbfc3 100644 --- a/plugins/Web/locales/fi.po +++ b/plugins/Web/locales/fi.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: Web plugin for Limnoria\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2014-12-20 14:42+0200\n" "Last-Translator: Mikaela Suomalainen <mikaela.suomalainen@outlook.com>\n" "Language-Team: \n" @@ -134,28 +134,43 @@ msgstr "Näytä kiva virheilmoitus ilmoitukset \"Virhe on tapahtunut\" sijaan." msgid "Add the help for 'help Web' here." msgstr "Lisää ohje komennolle \"help Web\" tähän." -#: plugin.py:171 +#: plugin.py:154 +msgid "" +"Returns a new URL that should be the target of a new request,\n" +" or None if the request is fine as it is.\n" +"\n" +" The returned URL may be the same as the parameter, in case\n" +" something else was changed by this function through side-" +"effects.\n" +" " +msgstr "" + +#: plugin.py:198 +msgid "Connection to %s timed out" +msgstr "" + +#: plugin.py:232 #, fuzzy msgid "Could not guess the page's encoding. (Try installing python-charade.)" msgstr "" "Sivun merkistökoodausta ei pystytty arvaamaan. (Kokeile python-charade:n " "asentamista.)" -#: plugin.py:192 +#: plugin.py:253 msgid "That URL appears to have no HTML title." msgstr "Tuolla URL-osoitteella ei vaikuta olevan HTTP otsikkoa." -#: plugin.py:195 +#: plugin.py:256 msgid "That URL appears to have no HTML title within the first %S." msgstr "" "Tuolla URL-osoitteella ei vaikuta olevan HTML otsikkoa ensinmäisissä %S." -#: plugin.py:237 +#: plugin.py:298 #, fuzzy msgid " (at %s)" msgstr "Otsikko: %s (sivustolla %s)" -#: plugin.py:262 +#: plugin.py:323 msgid "" "<url>\n" "\n" @@ -169,11 +184,11 @@ msgstr "" " HTTP URL-osoitteet ovat kelvollisia.\n" " " -#: plugin.py:273 +#: plugin.py:334 msgid "%s: %s" msgstr "%s: %s" -#: plugin.py:283 +#: plugin.py:344 msgid "" "<url>\n" "\n" @@ -183,7 +198,7 @@ msgid "" " Useful to \"un-tinify\" URLs." msgstr "" -#: plugin.py:299 +#: plugin.py:360 msgid "" "<url>\n" "\n" @@ -197,11 +212,11 @@ msgstr "" " vain HTTP URL-osoitteet ovat kelvollisia.\n" " " -#: plugin.py:315 +#: plugin.py:376 msgid "That URL has no specified doctype." msgstr "Tuo URL-osoite ei ole määrittänyt doctypeä." -#: plugin.py:321 +#: plugin.py:382 msgid "" "<url>\n" "\n" @@ -216,17 +231,17 @@ msgstr "" " vain HTTP URL-osoitteet ovat kelvollisia.\n" " " -#: plugin.py:336 plugin.py:341 +#: plugin.py:397 plugin.py:402 msgid "%u is %S long." msgstr "%u on %S pitkä." -#: plugin.py:343 +#: plugin.py:404 msgid "The server didn't tell me how long %u is but it's longer than %S." msgstr "" "Palvelin ei kertonut minulle, kuinka pitkä %u on, mutta se on pidempi kuin " "%S." -#: plugin.py:353 +#: plugin.py:414 msgid "" "[--no-filter] <url>\n" "\n" @@ -242,7 +257,7 @@ msgstr "" " DCC, ...) ei riisuta.\n" " " -#: plugin.py:374 +#: plugin.py:435 msgid "" "<text>\n" "\n" @@ -254,7 +269,7 @@ msgstr "" " Palauttaa URL lainatun muodon tekstistä.\n" " " -#: plugin.py:382 +#: plugin.py:443 msgid "" "<text>\n" "\n" @@ -266,7 +281,7 @@ msgstr "" " Palauttaa tekstin URL lainaamattomassa muodossa.\n" " " -#: plugin.py:393 +#: plugin.py:454 msgid "" "<url>\n" "\n" @@ -285,7 +300,7 @@ msgstr "" " tämä komento poistetaan käytöstä.\n" " " -#: plugin.py:405 +#: plugin.py:466 msgid "" "This command is disabled (supybot.plugins.Web.fetch.maximum is set to 0)." msgstr "" diff --git a/plugins/Web/locales/fr.po b/plugins/Web/locales/fr.po index b86d4c548..3d5737a3c 100644 --- a/plugins/Web/locales/fr.po +++ b/plugins/Web/locales/fr.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: Limnoria\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: Limnoria <progval@gmail.com>\n" @@ -116,25 +116,40 @@ msgstr "." msgid "Add the help for 'help Web' here." msgstr "" -#: plugin.py:171 +#: plugin.py:154 +msgid "" +"Returns a new URL that should be the target of a new request,\n" +" or None if the request is fine as it is.\n" +"\n" +" The returned URL may be the same as the parameter, in case\n" +" something else was changed by this function through side-" +"effects.\n" +" " +msgstr "" + +#: plugin.py:198 +msgid "Connection to %s timed out" +msgstr "" + +#: plugin.py:232 msgid "Could not guess the page's encoding. (Try installing python-charade.)" msgstr "" -#: plugin.py:192 +#: plugin.py:253 msgid "That URL appears to have no HTML title." msgstr "Cette URL semble ne pas avoir de titre HTML." -#: plugin.py:195 +#: plugin.py:256 msgid "That URL appears to have no HTML title within the first %S." msgstr "" "Ce URL semble ne pas avoir de titre HTML dans les %S au début du fichier." -#: plugin.py:237 +#: plugin.py:298 #, fuzzy msgid " (at %s)" msgstr "Titre : %s (de %s)" -#: plugin.py:262 +#: plugin.py:323 msgid "" "<url>\n" "\n" @@ -147,11 +162,11 @@ msgstr "" "Retourne les en-têtes HTTP de l'<url>. Seules les URLs HTTP sont valides, " "bien sûr." -#: plugin.py:273 +#: plugin.py:334 msgid "%s: %s" msgstr "%s : %s" -#: plugin.py:283 +#: plugin.py:344 msgid "" "<url>\n" "\n" @@ -161,7 +176,7 @@ msgid "" " Useful to \"un-tinify\" URLs." msgstr "" -#: plugin.py:299 +#: plugin.py:360 msgid "" "<url>\n" "\n" @@ -173,11 +188,11 @@ msgstr "" "\n" "Retourne le DOCTYPE de l'<url>. Seules les URLs HTTP sont valides, bien sûr." -#: plugin.py:315 +#: plugin.py:376 msgid "That URL has no specified doctype." msgstr "Cette URL n'a pas de doctype spécifié." -#: plugin.py:321 +#: plugin.py:382 msgid "" "<url>\n" "\n" @@ -191,17 +206,17 @@ msgstr "" "Retourne le'en-têtes HTTP Content-Length de l'<url>. Seules les URLs HTTP " "sont valides, bien sûr." -#: plugin.py:336 plugin.py:341 +#: plugin.py:397 plugin.py:402 msgid "%u is %S long." msgstr "%u est long de %S." -#: plugin.py:343 +#: plugin.py:404 msgid "The server didn't tell me how long %u is but it's longer than %S." msgstr "" "Le serveur ne m'a pas dit quelle est la longueur de %u, mais c'est sûr que " "c'est plus que %S." -#: plugin.py:353 +#: plugin.py:414 msgid "" "[--no-filter] <url>\n" "\n" @@ -214,7 +229,7 @@ msgstr "" "Si --no-filter est donné, le bot ne supprimera pas les caractères spéciaux " "(action, DCC, ...)" -#: plugin.py:374 +#: plugin.py:435 msgid "" "<text>\n" "\n" @@ -225,7 +240,7 @@ msgstr "" "\n" "Retourne la forme formattée pour URLs du texte." -#: plugin.py:382 +#: plugin.py:443 msgid "" "<text>\n" "\n" @@ -236,7 +251,7 @@ msgstr "" "\n" "Retourne la forme dé-formattée pour URLs du texte." -#: plugin.py:393 +#: plugin.py:454 msgid "" "<url>\n" "\n" @@ -252,7 +267,7 @@ msgstr "" "premiers octets. Si la variable de configution est définie à 0, elle sera " "effectivement désactivée." -#: plugin.py:405 +#: plugin.py:466 msgid "" "This command is disabled (supybot.plugins.Web.fetch.maximum is set to 0)." msgstr "" diff --git a/plugins/Web/locales/it.po b/plugins/Web/locales/it.po index b07a3a8b6..7756c7078 100644 --- a/plugins/Web/locales/it.po +++ b/plugins/Web/locales/it.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: Limnoria\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: 2011-01-28 20:03+0100\n" "Last-Translator: skizzhg <skizzhg@gmx.com>\n" "Language-Team: Italian <skizzhg@gmx.com>\n" @@ -108,24 +108,39 @@ msgstr "" msgid "Add the help for 'help Web' here." msgstr "" -#: plugin.py:171 +#: plugin.py:154 +msgid "" +"Returns a new URL that should be the target of a new request,\n" +" or None if the request is fine as it is.\n" +"\n" +" The returned URL may be the same as the parameter, in case\n" +" something else was changed by this function through side-" +"effects.\n" +" " +msgstr "" + +#: plugin.py:198 +msgid "Connection to %s timed out" +msgstr "" + +#: plugin.py:232 msgid "Could not guess the page's encoding. (Try installing python-charade.)" msgstr "" -#: plugin.py:192 +#: plugin.py:253 msgid "That URL appears to have no HTML title." msgstr "Questo URL sembra non avere un titolo HTML." -#: plugin.py:195 +#: plugin.py:256 msgid "That URL appears to have no HTML title within the first %S." msgstr "Sembra che questo URL non abbia un titolo HTML entro i primi %S." -#: plugin.py:237 +#: plugin.py:298 #, fuzzy msgid " (at %s)" msgstr "Titolo: %s (su %s)" -#: plugin.py:262 +#: plugin.py:323 msgid "" "<url>\n" "\n" @@ -139,11 +154,11 @@ msgstr "" "ULR HTTP.\n" " " -#: plugin.py:273 +#: plugin.py:334 msgid "%s: %s" msgstr "%s: %s" -#: plugin.py:283 +#: plugin.py:344 msgid "" "<url>\n" "\n" @@ -153,7 +168,7 @@ msgid "" " Useful to \"un-tinify\" URLs." msgstr "" -#: plugin.py:299 +#: plugin.py:360 msgid "" "<url>\n" "\n" @@ -167,11 +182,11 @@ msgstr "" "solo URL HTTP.\n" " " -#: plugin.py:315 +#: plugin.py:376 msgid "That URL has no specified doctype." msgstr "Questo URL non ha un doctype specificato." -#: plugin.py:321 +#: plugin.py:382 msgid "" "<url>\n" "\n" @@ -186,15 +201,15 @@ msgstr "" "validi solo ULR HTTP.\n" " " -#: plugin.py:336 plugin.py:341 +#: plugin.py:397 plugin.py:402 msgid "%u is %S long." msgstr "%u è lungo %S." -#: plugin.py:343 +#: plugin.py:404 msgid "The server didn't tell me how long %u is but it's longer than %S." msgstr "Il server non mi ha detto quanto sia lungo %u ma è più di %S." -#: plugin.py:353 +#: plugin.py:414 msgid "" "[--no-filter] <url>\n" "\n" @@ -204,7 +219,7 @@ msgid "" " " msgstr "" -#: plugin.py:374 +#: plugin.py:435 msgid "" "<text>\n" "\n" @@ -216,7 +231,7 @@ msgstr "" " Codifica il testo in base alla codifica URL.\n" " " -#: plugin.py:382 +#: plugin.py:443 msgid "" "<text>\n" "\n" @@ -228,7 +243,7 @@ msgstr "" " Decodifica il testo codificato secondo la codifica URL.\n" " " -#: plugin.py:393 +#: plugin.py:454 msgid "" "<url>\n" "\n" @@ -246,7 +261,7 @@ msgstr "" " il comando sarà disabilitato.\n" " " -#: plugin.py:405 +#: plugin.py:466 msgid "" "This command is disabled (supybot.plugins.Web.fetch.maximum is set to 0)." msgstr "" diff --git a/plugins/Web/messages.pot b/plugins/Web/messages.pot index 0333f7c95..c7d890696 100644 --- a/plugins/Web/messages.pot +++ b/plugins/Web/messages.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2022-02-06 00:12+0100\n" +"POT-Creation-Date: 2024-12-06 11:00+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -106,23 +106,38 @@ msgstr "" msgid "Add the help for 'help Web' here." msgstr "" -#: plugin.py:171 +#: plugin.py:154 +#, docstring +msgid "" +"Returns a new URL that should be the target of a new request,\n" +" or None if the request is fine as it is.\n" +"\n" +" The returned URL may be the same as the parameter, in case\n" +" something else was changed by this function through side-effects.\n" +" " +msgstr "" + +#: plugin.py:198 +msgid "Connection to %s timed out" +msgstr "" + +#: plugin.py:232 msgid "Could not guess the page's encoding. (Try installing python-charade.)" msgstr "" -#: plugin.py:192 +#: plugin.py:253 msgid "That URL appears to have no HTML title." msgstr "" -#: plugin.py:195 +#: plugin.py:256 msgid "That URL appears to have no HTML title within the first %S." msgstr "" -#: plugin.py:237 +#: plugin.py:298 msgid " (at %s)" msgstr "" -#: plugin.py:262 +#: plugin.py:323 #, docstring msgid "" "<url>\n" @@ -132,11 +147,11 @@ msgid "" " " msgstr "" -#: plugin.py:273 +#: plugin.py:334 msgid "%s: %s" msgstr "" -#: plugin.py:283 +#: plugin.py:344 #, docstring msgid "" "<url>\n" @@ -147,7 +162,7 @@ msgid "" " Useful to \"un-tinify\" URLs." msgstr "" -#: plugin.py:299 +#: plugin.py:360 #, docstring msgid "" "<url>\n" @@ -157,11 +172,11 @@ msgid "" " " msgstr "" -#: plugin.py:315 +#: plugin.py:376 msgid "That URL has no specified doctype." msgstr "" -#: plugin.py:321 +#: plugin.py:382 #, docstring msgid "" "<url>\n" @@ -171,15 +186,15 @@ msgid "" " " msgstr "" -#: plugin.py:336 plugin.py:341 +#: plugin.py:397 plugin.py:402 msgid "%u is %S long." msgstr "" -#: plugin.py:343 +#: plugin.py:404 msgid "The server didn't tell me how long %u is but it's longer than %S." msgstr "" -#: plugin.py:353 +#: plugin.py:414 #, docstring msgid "" "[--no-filter] <url>\n" @@ -190,7 +205,7 @@ msgid "" " " msgstr "" -#: plugin.py:374 +#: plugin.py:435 #, docstring msgid "" "<text>\n" @@ -199,7 +214,7 @@ msgid "" " " msgstr "" -#: plugin.py:382 +#: plugin.py:443 #, docstring msgid "" "<text>\n" @@ -208,7 +223,7 @@ msgid "" " " msgstr "" -#: plugin.py:393 +#: plugin.py:454 #, docstring msgid "" "<url>\n" @@ -219,7 +234,7 @@ msgid "" " " msgstr "" -#: plugin.py:405 +#: plugin.py:466 msgid "This command is disabled (supybot.plugins.Web.fetch.maximum is set to 0)." msgstr "" From 941d3121ebb0a47eed021f5bf98b0938c4df08e7 Mon Sep 17 00:00:00 2001 From: Valentin Lorentz <progval+git@progval.net> Date: Fri, 6 Dec 2024 12:49:00 +0100 Subject: [PATCH 50/69] Fix comment grammar --- src/i18n.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/i18n.py b/src/i18n.py index 4557fb758..f1d6dc7cf 100644 --- a/src/i18n.py +++ b/src/i18n.py @@ -111,7 +111,7 @@ def getLocalePath(name, localeName, extension): if name != 'supybot': base = getPluginDir(name) else: - from . import ansi # Any Supybot plugin could fit + from . import ansi # Any Supybot module works base = ansi.__file__[0:-len('ansi.pyc')] directory = os.path.join(base, 'locales') return '%s/%s.%s' % (directory, localeName, extension) From 993cb2355cfecfc88bd143881eabb9b687ed0348 Mon Sep 17 00:00:00 2001 From: ssdaniel24 <107036969+ssdaniel24@users.noreply.github.com> Date: Sat, 7 Dec 2024 11:38:53 +0000 Subject: [PATCH 51/69] Add --random flag for 'rss' command --- plugins/RSS/plugin.py | 20 +++++++++++++++----- plugins/RSS/test.py | 6 ++++++ 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/plugins/RSS/plugin.py b/plugins/RSS/plugin.py index 29e0edd0e..cba29de23 100644 --- a/plugins/RSS/plugin.py +++ b/plugins/RSS/plugin.py @@ -36,6 +36,7 @@ import json import time import types import string +import random import socket import threading import feedparser @@ -170,6 +171,9 @@ def sort_feed_items(items, order): """Return feed items, sorted according to sortFeedItems.""" if order == 'asInFeed': return items + elif order == 'random': + random.shuffle(items) + return items (key, reverse) = _sort_arguments(order) try: sitems = sorted(items, key=key, reverse=reverse) @@ -695,11 +699,12 @@ class RSS(callbacks.Plugin): channels = wrap(channels, ['feedName']) @internationalizeDocstring - def rss(self, irc, msg, args, url, n): - """<name|url> [<number of headlines>] + def rss(self, irc, msg, args, optlist, url, n): + """[--random] <name|url> [<number of headlines>] Gets the title components of the given RSS feed. If <number of headlines> is given, return only that many headlines. + Use --random flag for random sorting of entries. """ self.log.debug('Fetching %u', url) try: @@ -719,17 +724,22 @@ class RSS(callbacks.Plugin): s += str(feed.last_exception) irc.error(s) return - n = n or self.registryValue('defaultNumberOfHeadlines', channel, irc.network) entries = list(filter(lambda e:self.should_send_entry(irc.network, channel, e), feed.entries)) - entries = sort_feed_items(entries, 'newestFirst') + order = 'newestFirst' + if 'random' in (k for k,v in optlist): + order = 'random' + entries = sort_feed_items(entries, order) + n = n or self.registryValue('defaultNumberOfHeadlines', channel, irc.network) entries = entries[:n] entries = sort_feed_items(entries, self.registryValue('sortFeedItems')) headlines = map(lambda e:self.format_entry(irc.network, channel, feed, e, False), entries) sep = self.registryValue('headlineSeparator', channel, irc.network) irc.replies(headlines, joiner=sep) - rss = wrap(rss, [first('url', 'feedName'), additional('int')]) + rss = wrap(rss, [getopts({ 'random': '', }), + first('url', 'feedName'), + additional('int')]) @internationalizeDocstring def info(self, irc, msg, args, url): diff --git a/plugins/RSS/test.py b/plugins/RSS/test.py index 494b1e9b0..2e8a3c761 100644 --- a/plugins/RSS/test.py +++ b/plugins/RSS/test.py @@ -571,6 +571,12 @@ class RSSTestCase(ChannelPluginTestCase): m = self.assertNotError('rss %s 2' % url) self.assertEqual(m.args[1].count(' | '), 1) + def testRssRandom(self): + timeFastForward(1.1) + self.assertNotError('rss --random %s' % url) + m = self.assertNotError('rss --random %s 2' % url) + self.assertEqual(m.args[1].count(' | '), 1) + def testRssAdd(self): timeFastForward(1.1) self.assertNotError('rss add advogato %s' % url) From 467fd5472f6c6245c3a15be676c944975fe5be26 Mon Sep 17 00:00:00 2001 From: Valentin Lorentz <progval+git@progval.net> Date: Fri, 6 Dec 2024 12:49:49 +0100 Subject: [PATCH 52/69] Fix loading core locales on editable installs On editable instances, ansi.py is in the src/ directory, so that's where i18n.py looks for locales. --- src/locales | 1 + 1 file changed, 1 insertion(+) create mode 120000 src/locales diff --git a/src/locales b/src/locales new file mode 120000 index 000000000..c797dba35 --- /dev/null +++ b/src/locales @@ -0,0 +1 @@ +../locales \ No newline at end of file From 56e06a9ce8143f04237b87ae1870fd1a79ff5a47 Mon Sep 17 00:00:00 2001 From: Valentin Lorentz <progval+git@progval.net> Date: Fri, 6 Dec 2024 11:42:55 +0100 Subject: [PATCH 53/69] i18n: Remove hacks for Python 2 --- src/i18n.py | 23 +++++++---------------- 1 file changed, 7 insertions(+), 16 deletions(-) diff --git a/src/i18n.py b/src/i18n.py index f1d6dc7cf..45cca009d 100644 --- a/src/i18n.py +++ b/src/i18n.py @@ -117,7 +117,7 @@ def getLocalePath(name, localeName, extension): return '%s/%s.%s' % (directory, localeName, extension) i18nClasses = weakref.WeakValueDictionary() -internationalizedCommands = weakref.WeakValueDictionary() +internationalizedCommands = weakref.WeakSet() def reloadLocalesIfRequired(): global currentLocale @@ -132,7 +132,7 @@ def reloadLocales(): for pluginClass in i18nClasses.values(): pluginClass.loadLocale() - for command in list(internationalizedCommands.values()): + for command in list(internationalizedCommands): internationalizeDocstring(command) utils.str._relocalizeFunctions(PluginInternationalization()) @@ -331,19 +331,10 @@ class _PluginInternationalization: return self._l10nFunctions[name] -try: - class InternationalizedString(str): - """Simple subclass to str, that allow to add attributes. Also used to - know if a string is already localized""" - __slots__ = ('_original', '_internationalizer') -except TypeError: - # Fallback for CPython 2.x: - # TypeError: Error when calling the metaclass bases - # nonempty __slots__ not supported for subtype of 'str' - class InternationalizedString(str): - """Simple subclass to str, that allow to add attributes. Also used to - know if a string is already localized""" - pass +class InternationalizedString(str): + """Simple subclass to str, that allow to add attributes. Also used to + know if a string is already localized""" + __slots__ = ('_original', '_internationalizer') def internationalizeDocstring(obj): @@ -354,7 +345,7 @@ def internationalizeDocstring(obj): return obj plugin_module = sys.modules[obj.__module__] if '_' in plugin_module.__dict__: - internationalizedCommands.update({hash(obj): obj}) + internationalizedCommands.add(obj) try: obj.__doc__ = plugin_module._.__call__(obj.__doc__) # We use _.__call__() instead of _() because of a pygettext warning. From 912e334f6b68a484cf585ec67bf98b04e81230e7 Mon Sep 17 00:00:00 2001 From: Valentin Lorentz <progval+git@progval.net> Date: Sat, 25 May 2024 17:43:47 +0200 Subject: [PATCH 54/69] Math: Round trailing nines up in `@convert` --- plugins/Math/plugin.py | 13 +++++++++++++ plugins/Math/test.py | 7 +++++++ 2 files changed, 20 insertions(+) diff --git a/plugins/Math/plugin.py b/plugins/Math/plugin.py index 21250aacc..0d47cc1f2 100644 --- a/plugins/Math/plugin.py +++ b/plugins/Math/plugin.py @@ -253,6 +253,7 @@ class Math(callbacks.Plugin): digits = len(str(number).split('.')[1]) except IndexError: digits = 0 + try: newNum = convertcore.convert(number, unit1, unit2) if isinstance(newNum, float): @@ -261,11 +262,23 @@ class Math(callbacks.Plugin): if char != '0': break zeros += 1 + # Let's add one signifiant digit. Physicists would not like # that, but common people usually do not give extra zeros... # (for example, with '32 C to F', an extra digit would be # expected). newNum = round(newNum, digits + 1 + zeros) + + # However, if the difference is negligeable compared to the + # precision we got in the input, we remove two more digits. + # this is useful for rounding .9999999 up. + newNum2 = round(newNum, digits - 1 + zeros) + try: + if abs((newNum2 - newNum) / newNum) < 10**(-digits-10): + newNum = newNum2 + except ZeroDivisionError: + pass + newNum = self._floatToString(newNum) irc.reply(str(newNum)) except convertcore.UnitDataError as ude: diff --git a/plugins/Math/test.py b/plugins/Math/test.py index 160d8f768..97bc591ec 100644 --- a/plugins/Math/test.py +++ b/plugins/Math/test.py @@ -188,6 +188,13 @@ class MathTestCase(PluginTestCase): self.assertError('convert 1 mol to grams') self.assertError('convert 1 m to kpa') + def testConvertSignificantDigits(self): + self.assertResponse('convert 1 s to ns', '1000000000') + self.assertResponse('convert 0.9999999999999999 s to ns', + '999999999.9999999') + self.assertResponse('convert 1000000000 ns to s', '1') + self.assertResponse('convert 999999999.9999999 ns to s', '1') + def testConvertSingularPlural(self): self.assertResponse('convert [calc 2*pi] rads to degrees', '360') self.assertResponse('convert 1 carat to grams', '0.2') From aaeab253a5442aeab670dbb877e5920e8f209fa3 Mon Sep 17 00:00:00 2001 From: Val Lorentz <progval+git@progval.net> Date: Fri, 20 Dec 2024 07:57:23 +0100 Subject: [PATCH 55/69] Fix interference of wrap() and internationalizeDocstring() Most commands are decorated with @internationalizeDocstring then with wrap(). wrap() itself calls internationalizeDocstring(), so that plugins wrapping with @internationalizeDocstring() is now optional; but many still do it. This means that docstrings went twice through the _PluginInternationalization. This fixes the bug that on the second run, it would try to translate again the translated message, which fails (because the translated message is not in English); and then fell back to the original string (which is in English). This commit changes the behavior to return the already-translated string directly instead. --- src/i18n.py | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/i18n.py b/src/i18n.py index 45cca009d..3885fb254 100644 --- a/src/i18n.py +++ b/src/i18n.py @@ -1,5 +1,5 @@ ### -# Copyright (c) 2010-2021, Valentin Lorentz +# Copyright (c) 2010-2024, Valentin Lorentz # All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -263,16 +263,17 @@ class _PluginInternationalization: """Main function. This is the function which is called when a plugin runs _()""" - normalizedUntranslated = normalize(untranslated, True) + if untranslated.__class__ is InternationalizedString: + originalUntranslated = untranslated._original + else: + originalUntranslated = untranslated + + normalizedUntranslated = normalize(originalUntranslated, True) try: string = self._translate(normalizedUntranslated) - return self._addTracker(string, untranslated) except KeyError: - pass - if untranslated.__class__ is InternationalizedString: - return untranslated._original - else: - return untranslated + string = originalUntranslated + return self._addTracker(string, untranslated) def _translate(self, string): """Translate the string. From ab25c3e039f6c04957daf375f55498280ef2787b Mon Sep 17 00:00:00 2001 From: Val Lorentz <progval+git@progval.net> Date: Fri, 20 Dec 2024 07:57:41 +0100 Subject: [PATCH 56/69] Clarify semantics of vhost/vhostv6 --- src/conf.py | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/conf.py b/src/conf.py index d0d202d14..4770f1592 100644 --- a/src/conf.py +++ b/src/conf.py @@ -422,11 +422,15 @@ def registerNetwork(name, password='', ssl=True, sasl_username='', registerGlobalValue(network, 'vhost', registry.String('', _("""Determines what vhost the bot will bind to before connecting a server (IRC, HTTP, ...) via IPv4. If empty, defaults to - supybot.protocols.irc.vhost"""))) + supybot.protocols.irc.vhost. It must be (or resolve to) an IP address + assigned to one of the network interfaces (see 'ip addr' on Linux). + This may differ from the bot's public IP address, if it is behind a NAT."""))) registerGlobalValue(network, 'vhostv6', registry.String('', _("""Determines what vhost the bot will bind to before connecting a server (IRC, HTTP, ...) via IPv6. If empty, defaults to - supybot.protocols.irc.vhostv6"""))) + supybot.protocols.irc.vhostv6. It must be (or resolve to) an IP address + assigned to one of the network interfaces (see 'ip addr' on Linux). + This may differ from the bot's public IP address, if it is behind a NAT."""))) sasl = registerGroup(network, 'sasl') registerGlobalValue(sasl, 'username', registry.String(sasl_username, @@ -1363,11 +1367,17 @@ registerGlobalValue(supybot.protocols.irc, 'umodes', registerGlobalValue(supybot.protocols.irc, 'vhost', registry.String('', _("""Determines what vhost the bot will bind to before - connecting a server (IRC, HTTP, ...) via IPv4."""))) + connecting a server (IRC, HTTP, ...) via IPv4. It must be (or resolve to) + an IP address assigned to one of the network interfaces (see 'ip addr' on + Linux). + This may differ from the bot's public IP address, if it is behind a NAT."""))) registerGlobalValue(supybot.protocols.irc, 'vhostv6', registry.String('', _("""Determines what vhost the bot will bind to before - connecting a server (IRC, HTTP, ...) via IPv6."""))) + connecting a server (IRC, HTTP, ...) via IPv6. It must be (or resolve to) + an IP address assigned to one of the network interfaces (see 'ip -6 addr' on + Linux). + This may differ from the bot's public IP address, if it is behind a NAT."""))) registerGlobalValue(supybot.protocols.irc, 'maxHistoryLength', registry.Integer(1000, _("""Determines how many old messages the bot will From e57f7ebc2aff78b2b33f5e2d75b5f49944448c42 Mon Sep 17 00:00:00 2001 From: Val Lorentz <progval+git@progval.net> Date: Fri, 20 Dec 2024 07:58:40 +0100 Subject: [PATCH 57/69] Add support for Python 3.14.0-alpha1 --- .github/workflows/test.yml | 4 ++++ src/callbacks.py | 8 ++------ src/commands.py | 32 +++++++++++++++++--------------- src/utils/math_evaluator.py | 8 ++++++++ src/utils/str.py | 4 ++-- src/world.py | 2 +- 6 files changed, 34 insertions(+), 24 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index a1a724f59..b47f73443 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -15,6 +15,10 @@ jobs: strategy: matrix: include: + - python-version: "3.14.0-alpha.1" + with-opt-deps: true + runs-on: ubuntu-22.04 + - python-version: "3.13.0" with-opt-deps: true runs-on: ubuntu-22.04 diff --git a/src/callbacks.py b/src/callbacks.py index e3772c81b..69eea38c0 100644 --- a/src/callbacks.py +++ b/src/callbacks.py @@ -1355,12 +1355,8 @@ class CommandProcess(world.SupyProcess): pn, cn) log.debug('Spawning process %s (args: %r)', procName, args) - self.__parent = super(CommandProcess, self) - self.__parent.__init__(target=target, name=procName, - args=args, kwargs=kwargs) - - def run(self): - self.__parent.run() + super().__init__(target=target, name=procName, + args=args, kwargs=kwargs) class CanonicalString(registry.NormalizedString): def normalize(self, s): diff --git a/src/commands.py b/src/commands.py index 7c11ff5d2..c57e75fe2 100644 --- a/src/commands.py +++ b/src/commands.py @@ -88,6 +88,20 @@ def _rlimit_min(a, b): else: return min(soft, heap_size) +def _process_target(f, q, heap_size, *args, **kwargs): + """Called by :func:`process`""" + if resource: + rsrc = resource.RLIMIT_DATA + (soft, hard) = resource.getrlimit(rsrc) + soft = _rlimit_min(soft, heap_size) + hard = _rlimit_min(hard, heap_size) + resource.setrlimit(rsrc, (soft, hard)) + try: + r = f(*args, **kwargs) + q.put([False, r]) + except Exception as e: + q.put([True, e]) + def process(f, *args, **kwargs): """Runs a function <f> in a subprocess. @@ -122,21 +136,9 @@ def process(f, *args, **kwargs): '(See https://github.com/travis-ci/travis-core/issues/187\n' 'for more information about this bug.)\n') raise - def newf(f, q, *args, **kwargs): - if resource: - rsrc = resource.RLIMIT_DATA - (soft, hard) = resource.getrlimit(rsrc) - soft = _rlimit_min(soft, heap_size) - hard = _rlimit_min(hard, heap_size) - resource.setrlimit(rsrc, (soft, hard)) - try: - r = f(*args, **kwargs) - q.put([False, r]) - except Exception as e: - q.put([True, e]) - targetArgs = (f, q,) + args - p = callbacks.CommandProcess(target=newf, - args=targetArgs, kwargs=kwargs) + targetArgs = (f, q, heap_size) + args + p = callbacks.CommandProcess(target=_process_target, + args=targetArgs, kwargs=kwargs) try: p.start() except OSError as e: diff --git a/src/utils/math_evaluator.py b/src/utils/math_evaluator.py index b7ef34027..ff04009ab 100644 --- a/src/utils/math_evaluator.py +++ b/src/utils/math_evaluator.py @@ -154,8 +154,16 @@ class SafeEvalVisitor(ast.NodeVisitor): return self.visit(node.body) def visit_Num(self, node): + """Python < 3.14 only""" return self._convert_num(node.n) + def visit_Constant(self, node): + """Python >= 3.14 only""" + if type(node.value) in (float, complex, int): + return self._convert_num(node.value) + else: + raise InvalidNode('illegal constant %s' % node.value) + def visit_Name(self, node): id_ = node.id.lower() if id_ in self._env: diff --git a/src/utils/str.py b/src/utils/str.py index c9a86c21e..5fe7ae943 100644 --- a/src/utils/str.py +++ b/src/utils/str.py @@ -307,9 +307,9 @@ def perlReToReplacer(s): flags = ''.join(flags) r = perlReToPythonRe(sep.join(('', regexp, flags))) if g: - return lambda s: r.sub(replace, s) + return functools.partial(r.sub, replace) else: - return lambda s: r.sub(replace, s, 1) + return functools.partial(r.sub, replace, count=1) _perlVarSubstituteRe = re.compile(r'\$\{([^}]+)\}|\$([a-zA-Z][a-zA-Z0-9]*)') def perlVariableSubstitute(vars, text): diff --git a/src/world.py b/src/world.py index 85f581ec5..75f994682 100644 --- a/src/world.py +++ b/src/world.py @@ -65,7 +65,7 @@ class SupyThread(threading.Thread, object): log.debug('Spawning thread %q.', self.getName()) processesSpawned = 1 # Starts at one for the initial process. -class SupyProcess(multiprocessing.Process): +class SupyProcess(multiprocessing.get_context('fork').Process): def __init__(self, *args, **kwargs): global processesSpawned processesSpawned += 1 From 4f9734935a1f549099780036cf704d4b32f4c180 Mon Sep 17 00:00:00 2001 From: Valentin Lorentz <progval+git@progval.net> Date: Fri, 7 Feb 2025 22:02:23 +0100 Subject: [PATCH 58/69] ChannelStats: Fix crash caused by expectation of __str__ being called before setValue This assumption no longer true since 8ec873015aac3ba4193a2d498eb294975615b296. --- plugins/ChannelStats/config.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/plugins/ChannelStats/config.py b/plugins/ChannelStats/config.py index de1959032..ccea66284 100644 --- a/plugins/ChannelStats/config.py +++ b/plugins/ChannelStats/config.py @@ -45,6 +45,10 @@ def configure(advanced): conf.registerPlugin('ChannelStats', True) class Smileys(registry.Value): + def __init__(self, *args, **kwargs): + self.s = '' + super().__init__(*args, **kwargs) + def set(self, s): L = s.split() self.setValue(L) From a558d1d95bdbbad6d1d5fc21be29cd7453430944 Mon Sep 17 00:00:00 2001 From: Mattia Rizzolo <mattia@mapreri.org> Date: Mon, 17 Mar 2025 10:13:34 +0100 Subject: [PATCH 59/69] Fix errors reported by msgfmt on Russian translations gettext: locales/ru.po:1922: 'msgid' and 'msgstr' entries do not both begin with '\n' locales/ru.po:1935: 'msgid' and 'msgstr' entries do not both begin with '\n' msgfmt: found 2 fatal errors gettext: plugins/Anonymous/locales/ru.po:101: 'msgid' and 'msgstr' entries do not both begin with '\n' msgfmt: found 1 fatal error gettext: plugins/NickAuth/locales/ru.po:29: 'msgid' and 'msgstr' entries do not both begin with '\n' msgfmt: found 1 fatal error gettext: plugins/PluginDownloader/locales/ru.po:84: 'msgid' and 'msgstr' entries do not both begin with '\n' msgfmt: found 1 fatal error Signed-off-by: Mattia Rizzolo <mattia@mapreri.org> --- locales/ru.po | 2 ++ plugins/Anonymous/locales/ru.po | 1 + plugins/NickAuth/locales/ru.po | 1 + plugins/PluginDownloader/locales/ru.po | 1 + 4 files changed, 5 insertions(+) diff --git a/locales/ru.po b/locales/ru.po index 0dded98ff..f25c186d4 100644 --- a/locales/ru.po +++ b/locales/ru.po @@ -1920,6 +1920,7 @@ msgid "" " message, it probably means you are developing a plugin, and you have\n" " neither overriden this message or defined an handler for this query." msgstr "" +"\n" "Это стандартный ответ HTTP-сервера Supybot. Если вы видите это сообщение, " "возможно вы занимаетесь разработкой плагина и не задали это сообщение или не " "задали обработчик для этого запроса." @@ -1933,6 +1934,7 @@ msgid "" " What I'm saying is you just triggered a 404 Not Found, and I am not\n" " trained to help you in such a case." msgstr "" +"\n" "Я довольно умный IRC-бот, но у меня плохо получается работать с веб-" "страницами, особенно, если я не знаю, что именно нужно пользователю. То есть " "вы только что спровоцировали ошибку 404 (Not Found), а я не способен помочь " diff --git a/plugins/Anonymous/locales/ru.po b/plugins/Anonymous/locales/ru.po index b55ca654e..b7a2cd579 100644 --- a/plugins/Anonymous/locales/ru.po +++ b/plugins/Anonymous/locales/ru.po @@ -99,6 +99,7 @@ msgid "" "\n" " " msgstr "" +"\n" "Этот плагин позволяет пользователям анонимно взаимодействовать через бота. " "Команда 'do' позволяет выполнить некоторое анонимное действие через бота в " "данном канале, и команда 'say' позволяет другим пользователям общаться " diff --git a/plugins/NickAuth/locales/ru.po b/plugins/NickAuth/locales/ru.po index f324e9ac1..8e4fa4f29 100644 --- a/plugins/NickAuth/locales/ru.po +++ b/plugins/NickAuth/locales/ru.po @@ -27,6 +27,7 @@ msgid "" " identify to the bot.\n" " " msgstr "" +"\n" "Этот плагин позволяет пользователям использовать их аккаунт в сервисах IRC-" "сети для авторизации в боте.\n" "\n" diff --git a/plugins/PluginDownloader/locales/ru.po b/plugins/PluginDownloader/locales/ru.po index 83e9cf7a2..aac670824 100644 --- a/plugins/PluginDownloader/locales/ru.po +++ b/plugins/PluginDownloader/locales/ru.po @@ -82,6 +82,7 @@ msgid "" " < Limnoria> Ok.\n" " " msgstr "" +"\n" "Этот плагин позволяет вам с легкостью устанавливать неофициальные плагины из " "различных репозиториев. Используйте команду \"repolist\", чтобы увидеть " "список доступных репозиториев, и команду \"repolist <репозиторий>\", чтобы " From 35731acd86d16ff81289a0eae87ceae59f16b91a Mon Sep 17 00:00:00 2001 From: Valentin Lorentz <progval+git@progval.net> Date: Fri, 28 Mar 2025 22:11:12 +0100 Subject: [PATCH 60/69] Log current version on startup We recently got a bug report from someone running Limnoria in Docker, and it turned out that a plugin's import was segfaulting and Docker silently restarted the process. I wasted some time figuring out what happened because I didn't notice the process was being restarted. This should make this more noticeable in the future. --- src/scripts/limnoria.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/scripts/limnoria.py b/src/scripts/limnoria.py index 6eb1cbd6c..d8b006a2c 100644 --- a/src/scripts/limnoria.py +++ b/src/scripts/limnoria.py @@ -76,6 +76,9 @@ from supybot.version import version def run(): import supybot.log as log + + log.info("Starting Limnoria %s on Python %s", version, sys.version) + import supybot.conf as conf import supybot.world as world import supybot.drivers as drivers From ccf26351f5d48b2e7b21a621113bd83ee1a5d4d8 Mon Sep 17 00:00:00 2001 From: Valentin Lorentz <progval+git@progval.net> Date: Sat, 29 Mar 2025 22:38:04 +0100 Subject: [PATCH 61/69] Make supybot.plugins.Web.urlWhitelist channel-specific --- plugins/Web/config.py | 5 +++-- plugins/Web/plugin.py | 20 +++++++++++--------- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/plugins/Web/config.py b/plugins/Web/config.py index faacfa8d3..47be13519 100644 --- a/plugins/Web/config.py +++ b/plugins/Web/config.py @@ -74,11 +74,12 @@ conf.registerChannelValue(Web, 'checkIgnored', registry.Boolean(True, _("""Determines whether the title snarfer checks if the author of a message is ignored."""))) -conf.registerGlobalValue(Web, 'urlWhitelist', +conf.registerChannelValue(Web, 'urlWhitelist', registry.SpaceSeparatedListOfStrings([], """If set, bot will only fetch data from urls in the whitelist, i.e. starting with http://domain/optionalpath/. This will apply to all commands that retrieve data from user-supplied URLs, - including fetch, headers, title, doctype.""")) + including fetch, headers, title, doctype."""), + opSettable=False) conf.registerGlobalValue(Web, 'timeout', registry.NonNegativeInteger(5, """Determines the maximum number of diff --git a/plugins/Web/plugin.py b/plugins/Web/plugin.py index c9d9c069e..0af8a5d5f 100644 --- a/plugins/Web/plugin.py +++ b/plugins/Web/plugin.py @@ -274,7 +274,7 @@ class Web(callbacks.PluginRegexp): return if self.registryValue('titleSnarfer', channel, network): url = match.group(0) - if not self._checkURLWhitelist(url): + if not self._checkURLWhitelist(irc, msg, url): return r = self.registryValue('nonSnarfingRegexp', channel, network) if r and r.search(url): @@ -303,11 +303,13 @@ class Web(callbacks.PluginRegexp): titleSnarfer = urlSnarfer(titleSnarfer) titleSnarfer.__doc__ = utils.web._httpUrlRe - def _checkURLWhitelist(self, url): - if not self.registryValue('urlWhitelist'): + def _checkURLWhitelist(self, irc, msg, url): + if not self.registryValue('urlWhitelist', + channel=msg.channel, network=irc.network): return True passed = False - for wu in self.registryValue('urlWhitelist'): + for wu in self.registryValue('urlWhitelist', + channel=msg.channel, network=irc.network): if wu.endswith('/') and url.find(wu) == 0: passed = True break @@ -325,7 +327,7 @@ class Web(callbacks.PluginRegexp): Returns the HTTP headers of <url>. Only HTTP urls are valid, of course. """ - if not self._checkURLWhitelist(url): + if not self._checkURLWhitelist(irc, msg, url): irc.error("This url is not on the whitelist.") return timeout = self.registryValue('timeout') @@ -362,7 +364,7 @@ class Web(callbacks.PluginRegexp): Returns the DOCTYPE string of <url>. Only HTTP urls are valid, of course. """ - if not self._checkURLWhitelist(url): + if not self._checkURLWhitelist(irc, msg, url): irc.error("This url is not on the whitelist.") return size = conf.supybot.protocols.http.peekSize() @@ -384,7 +386,7 @@ class Web(callbacks.PluginRegexp): Returns the Content-Length header of <url>. Only HTTP urls are valid, of course. """ - if not self._checkURLWhitelist(url): + if not self._checkURLWhitelist(irc, msg, url): irc.error("This url is not on the whitelist.") return timeout = self.registryValue('timeout') @@ -417,7 +419,7 @@ class Web(callbacks.PluginRegexp): If --no-filter is given, the bot won't strip special chars (action, DCC, ...). """ - if not self._checkURLWhitelist(url): + if not self._checkURLWhitelist(irc, msg, url): irc.error("This url is not on the whitelist.") return r = self.getTitle(irc, url, True, msg) @@ -457,7 +459,7 @@ class Web(callbacks.PluginRegexp): supybot.plugins.Web.fetch.maximum. If that configuration variable is set to 0, this command will be effectively disabled. """ - if not self._checkURLWhitelist(url): + if not self._checkURLWhitelist(irc, msg, url): irc.error("This url is not on the whitelist.") return max = self.registryValue('fetch.maximum') From c795cdc655ef57c8ca770e0ee4f949e9c2977ec3 Mon Sep 17 00:00:00 2001 From: Valentin Lorentz <progval+git@progval.net> Date: Sun, 6 Apr 2025 09:00:23 +0200 Subject: [PATCH 62/69] registry.Json: Fix serialization/deserialization points self.value should be the deserialized value (because we set 'self.value = default' in registry.close()), so setValue()/__call__() should return it as-is. Doing otherwise failed serialization of the default, and crashed with the same error as in https://github.com/progval/Limnoria/issues/1604 since 8ec873015aac3ba4193a2d498eb294975615b296 --- src/registry.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/registry.py b/src/registry.py index 8a18d9627..eb9620fdf 100644 --- a/src/registry.py +++ b/src/registry.py @@ -920,13 +920,11 @@ class TemplatedString(String): class Json(String): __slots__ = () - # Json-serializable data + def set(self, v): self.setValue(json.loads(v)) - def setValue(self, v): - super(Json, self).setValue(json.dumps(v)) - def __call__(self): - return json.loads(super(Json, self).__call__()) + def __str__(self): + return json.dumps(self()) class _Context: def __init__(self, var): From c81ff286975701ae78246cd8f24284ca3aeac86d Mon Sep 17 00:00:00 2001 From: Valentin Lorentz <progval+git@progval.net> Date: Sun, 6 Apr 2025 10:19:17 +0200 Subject: [PATCH 63/69] registry.Json: Fix broken test due to returning the internal state directly --- src/registry.py | 3 +++ test/test_registry.py | 6 +++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/registry.py b/src/registry.py index eb9620fdf..270daa8e7 100644 --- a/src/registry.py +++ b/src/registry.py @@ -31,6 +31,7 @@ import re import os +import copy import time import json import codecs @@ -921,6 +922,8 @@ class TemplatedString(String): class Json(String): __slots__ = () + def __call__(self): + return copy.deepcopy(super(Json, self).__call__()) def set(self, v): self.setValue(json.loads(v)) def __str__(self): diff --git a/test/test_registry.py b/test/test_registry.py index d015f2180..59fab3e76 100644 --- a/test/test_registry.py +++ b/test/test_registry.py @@ -140,13 +140,13 @@ class ValuesTestCase(SupyTestCase): self.assertIsNot(v(), data) with v.editable() as dict_: - dict_['supy'] = 'bot' + dict_['supy'] = ['bot'] del dict_['qux'] self.assertNotIn('supy', v()) self.assertIn('qux', v()) self.assertIn('supy', v()) - self.assertEqual(v()['supy'], 'bot') - self.assertIsNot(v()['supy'], 'bot') + self.assertEqual(v()['supy'], ['bot']) + self.assertIsNot(v()['supy'], ['bot']) self.assertNotIn('qux', v()) def testNormalizedString(self): From 83d301c604edaf14825ca6c67c256fe910e0729e Mon Sep 17 00:00:00 2001 From: James Lu <james@overdrivenetworks.com> Date: Sat, 12 Apr 2025 19:13:22 -0700 Subject: [PATCH 64/69] NickAuth: refer to "services accounts" instead of "nicks" in help On modern networks, account names are usually separated from your current nick, so the idea of registering "nicks" is confusing. For instance, you can be using a grouped nick that is not your main account name, and WHOIS will only ever show your main account name. Also, the bot username is optional in the `add` and `remove` commands - update the docs to reflect that. --- plugins/NickAuth/plugin.py | 48 ++++++++++++++++++++------------------ plugins/NickAuth/test.py | 2 +- 2 files changed, 26 insertions(+), 24 deletions(-) diff --git a/plugins/NickAuth/plugin.py b/plugins/NickAuth/plugin.py index 7597fa285..fcccd41e1 100644 --- a/plugins/NickAuth/plugin.py +++ b/plugins/NickAuth/plugin.py @@ -48,8 +48,8 @@ class NickAuth(callbacks.Plugin): This plugin allows users to use their network services account to authenticate to the bot. - They first have to use ``@nickauth nick add <the nick>`` while being - identified to the bot and then use ``@auth`` when they want to + They first have to use ``@nickauth nick add <services account name>`` while + identified to the bot, and then use ``@auth`` when they want to identify to the bot. """ @@ -59,12 +59,12 @@ class NickAuth(callbacks.Plugin): class nick(callbacks.Commands): def _check_auth(self, irc, msg, user): if user is None: - irc.error(_('You are not authenticated.'), Raise=True) + irc.error(_('You are not logged in to the bot.'), Raise=True) if not user.checkHostmask(msg.prefix): try: u = ircdb.users.getUser(msg.prefix) except KeyError: - irc.error(_('You are not authenticated.'), + irc.error(_('You are not logged in to the bot.'), Raise=True) if not u._checkCapability('owner'): irc.error(_('You must be owner to do that.'), @@ -72,11 +72,11 @@ class NickAuth(callbacks.Plugin): @internationalizeDocstring def add(self, irc, msg, args, network, user, nick): - """[<network>] <user> <nick> + """[<network>] [<bot username>] <account> - Add <nick> to the list of nicks owned by the <user> on the - <network>. You have to register this nick to the network - services to be authenticated. + Add <account> to the list of network services accounts owned by + <bot username> on <network>. <bot username> is only required if you + are not already logged in to Limnoria. <network> defaults to the current network. """ network = network.network or irc.network @@ -85,8 +85,8 @@ class NickAuth(callbacks.Plugin): try: user.addNick(network, nick) except KeyError: - irc.error(_('This nick is already used by someone on this ' - 'network.'), Raise=True) + irc.error(_('This services account is already used by someone ' + 'on this network.'), Raise=True) irc.replySuccess() add = wrap(add, [optional('networkIrc'), optional('otherUser'), @@ -94,10 +94,11 @@ class NickAuth(callbacks.Plugin): @internationalizeDocstring def remove(self, irc, msg, args, network, user, nick): - """[<network>] <user> <nick> + """[<network>] [<bot username>] <account> - Remove <nick> from the list of nicks owned by the <user> on the - <network>. + Remove <account> from the list of network services accounts owned by + <bot username> on <network>. <bot username> is only required if you + are not already logged in to Limnoria. <network> defaults to the current network. """ network = network.network or irc.network @@ -106,8 +107,8 @@ class NickAuth(callbacks.Plugin): try: user.removeNick(network, nick) except KeyError: - irc.error(_('This nick is not registered to you on this ' - 'network.'), Raise=True) + irc.error(_('This services account is not registered to you on ' + 'this network.'), Raise=True) irc.replySuccess() remove = wrap(remove, [optional('networkIrc'), optional('otherUser'), @@ -115,9 +116,10 @@ class NickAuth(callbacks.Plugin): @internationalizeDocstring def list(self, irc, msg, args, network, user): - """[<network>] [<user>] + """[<network>] [<bot username>] - Lists nicks of the <user> on the network. + Lists services accounts registered to <bot username> on the network, + or your own bot account if no username is given. <network> defaults to the current network. """ network = network.network or irc.network @@ -135,11 +137,11 @@ class NickAuth(callbacks.Plugin): raise KeyError except KeyError: if user == ircdb.users.getUser(msg.prefix): - irc.error(_('You have no recognized nick on this ' - 'network.'), Raise=True) + irc.error(_('You have no recognized services accounts on ' + 'this network.'), Raise=True) else: - irc.error(_('%s has no recognized nick on this ' - 'network.') % user.name, Raise=True) + irc.error(_('%s has no recognized services accounts on this ' + 'network.') % user.name, Raise=True) list = wrap(list, [optional('networkIrc'), optional('otherUser')]) @@ -148,7 +150,7 @@ class NickAuth(callbacks.Plugin): """takes no argument Tries to authenticate you using network services. - If you get no reply, it means you are not authenticated to the + If you get no reply, it means you are not authenticated to network services.""" nick = ircutils.toLower(msg.nick) self._requests[(irc.network, msg.nick)] = (time.time(), msg.prefix, irc) @@ -183,7 +185,7 @@ class NickAuth(callbacks.Plugin): ircdb.users.setUser(user, flush=False) irc.reply(_('You are now authenticated as %s.') % user.name) else: - irc.error(_('No user claimed the nick %s on this network. ' + irc.error(_('No user claimed the account %s on this network. ' 'If this is you, you should connect with an other ' 'method and use the "nickauth nick add" command, ' 'or ask the owner of the bot to do it.') diff --git a/plugins/NickAuth/test.py b/plugins/NickAuth/test.py index 4542358e5..d2cb2b26a 100644 --- a/plugins/NickAuth/test.py +++ b/plugins/NickAuth/test.py @@ -128,7 +128,7 @@ class NickAuthTestCase(PluginTestCase): def testList(self): self.assertNotError('register foobar 123') - self.assertRegexp('nick list', 'You have no recognized nick') + self.assertRegexp('nick list', 'You have no recognized services accounts') self.assertNotError('nick add foo') self.assertRegexp('nick list', 'foo') self.assertNotError('nick add %s bar' % self.nick) From 2030ac2125c0e909ece434c9da2b0f11b981a9be Mon Sep 17 00:00:00 2001 From: Valentin Lorentz <progval+git@progval.net> Date: Sun, 27 Apr 2025 22:15:15 +0200 Subject: [PATCH 65/69] Fix CI to work with setuptools >= 80.0.0 --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index b47f73443..be5947807 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -88,7 +88,7 @@ jobs: - name: Install run: | - LIMNORIA_WARN_OLD_PYTHON=0 python3 setup.py install + LIMNORIA_WARN_OLD_PYTHON=0 pip install . - name: Test with unittest run: | From c59686729ad580403a96c9f8c7c3137fef0687e1 Mon Sep 17 00:00:00 2001 From: James Lu <james@overdrivenetworks.com> Date: Sun, 27 Apr 2025 17:55:36 -0700 Subject: [PATCH 66/69] MessageParser: add link to new usage guide --- plugins/MessageParser/README.rst | 6 ++++-- plugins/MessageParser/__init__.py | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/plugins/MessageParser/README.rst b/plugins/MessageParser/README.rst index f3b0a32ce..cc51b3bb0 100644 --- a/plugins/MessageParser/README.rst +++ b/plugins/MessageParser/README.rst @@ -11,8 +11,10 @@ which will trigger the bot to respond if they match anywhere in the message. This is useful for those cases when you want a bot response even when the bot was not explicitly addressed by name or prefix character. -An updated page of this plugin's documentation is located here: -https://sourceforge.net/p/gribble/wiki/MessageParser_Plugin/ +You can find usage examples at +https://docs.limnoria.net/use/messageparser.html +and +https://sourceforge.net/p/gribble/wiki/MessageParser_Plugin/ (older reference) Usage ----- diff --git a/plugins/MessageParser/__init__.py b/plugins/MessageParser/__init__.py index 21d0652ae..69198be0a 100644 --- a/plugins/MessageParser/__init__.py +++ b/plugins/MessageParser/__init__.py @@ -35,8 +35,10 @@ which will trigger the bot to respond if they match anywhere in the message. This is useful for those cases when you want a bot response even when the bot was not explicitly addressed by name or prefix character. -An updated page of this plugin's documentation is located here: -https://sourceforge.net/p/gribble/wiki/MessageParser_Plugin/ +You can find usage examples at +https://docs.limnoria.net/use/messageparser.html +and +https://sourceforge.net/p/gribble/wiki/MessageParser_Plugin/ (older reference) """ From 7cf1a789b6eefcb2cef2b059e28342c4421de5d8 Mon Sep 17 00:00:00 2001 From: James Lu <james@overdrivenetworks.com> Date: Fri, 2 May 2025 22:17:37 -0700 Subject: [PATCH 67/69] Remove sandbox/release.py (#1622) Limnoria doesn't use SourceForge, so this script is a historical relic at this point. (It also still only works on Python 2) --- sandbox/release.py | 188 --------------------------------------------- 1 file changed, 188 deletions(-) delete mode 100644 sandbox/release.py diff --git a/sandbox/release.py b/sandbox/release.py deleted file mode 100644 index c5d72a3db..000000000 --- a/sandbox/release.py +++ /dev/null @@ -1,188 +0,0 @@ -#!/usr/bin/env python - -import os -import re -import sys -import shutil -import subprocess - -from optparse import OptionParser - -def firstLines(filename, n): - fd = file(filename) - lines = [] - while n: - n -= 1 - lines.append(fd.readline().rstrip('\r\n')) - fd.close() - return lines - -def firstLine(filename): - return firstLines(filename, 1)[0] - -def error(s): - sys.stderr.write(s+'\n') - sys.exit(-1) - -def system(sh, errmsg=None, **kwargs): - if errmsg is None: - if isinstance(sh, minisix.string_types): - errmsg = repr(sh) - else: - errmsg = repr(' '.join(sh)) - ret = subprocess.call(sh, **kwargs) - if ret: - error(errmsg + ' (error code: %s)' % ret) - -def checkGitRepo(): - system('test "$(git rev-parse --is-inside-work-tree)" = "true"', - 'Must be run from a git checkout.', - shell=True) - system('test "$(git rev-parse --show-cdup >/dev/null)" = ""', - 'Must be run from the top-level directory of the git checkout.', - shell=True) - system('git rev-parse --verify HEAD >/dev/null ' - '&& git update-index --refresh' - '&& git diff-files --quiet' - '&& git diff-index --cached --quiet HEAD --', - 'Your tree is unclean. Can\'t run from here.', - shell=True) - -if __name__ == '__main__': - usage = 'usage: %prog [options] <username> <version>' - parser = OptionParser(usage=usage) - parser.set_defaults(sign=False, verbose=False, branch='master') - parser.add_option('-s', '--sign', action='store_true', dest='sign', - help='Pass on -s to relevant git commands') - parser.add_option('-n', '--dry-run', action='store_true', dest='dry_run', - help='Build the release, but do not push to the git ' - 'remote or upload the release archives.') - parser.add_option('-b', '--branch', metavar='BRANCH', dest='branch', - help='Branch to use for the release. Default: %default') - (options, args) = parser.parse_args() - - if len(args) != 2: - parser.error('Both username and version must be specified') - - (u, v) = args - if not re.match(r'^\d+\.\d+\.\d+(\.\d+)?\w*$', v): - parser.error('Invalid version string: ' - 'must be of the form MAJOR.MINOR.PATCHLEVEL') - - checkGitRepo() - - sign = options.sign - dryrun = options.dry_run - branch = options.branch - - if os.path.exists('supybot'): - error('I need to make the directory "supybot" but it already exists.' - ' Change to an appropriate directory or remove the supybot ' - 'directory to continue.') - print 'Checking out fresh tree from git.' - repo = 'git+ssh://%s@supybot.git.sourceforge.net/gitroot/supybot/supybot' % u - system(['git', 'clone', '-b', branch, repo]) - os.chdir('supybot') - - print 'Checking RELNOTES version line.' - if firstLine('RELNOTES') != 'Version %s' % v: - error('Invalid first line in RELNOTES.') - - print 'Checking ChangeLog version line.' - (first, _, third) = firstLines('ChangeLog', 3) - if not re.match(r'^20\d\d-\d{2}-\d{2}\s+\w+.*<\S+@\S+>$', first): - error('Invalid first line in ChangeLog.') - if not re.match(r'^\t\* Version %s!$' % v, third): - error('Invalid third line in ChangeLog.') - - print 'Updating version in version files.' - versionFiles = ['src/version.py'] - for fn in versionFiles: - sh = ['perl', '-pi', '-e', 's/^version\s*=.*/version = \'%s\'/' % v, fn] - system(sh, 'Error changing version in %s' % fn) - commit = ['git', 'commit'] - if sign: - commit.append('-s') - system(commit + ['-m', 'Updated to %s.' % v] + versionFiles) - - print 'Tagging release.' - tag = ['git', 'tag'] - if sign: - tag.append('-s') - system(tag + ['-m', "Release %s" % v, 'v%s' % v]) - - print 'Committing %s+git to version files.' % v - for fn in versionFiles: - system(['perl', '-pi', '-e', - 's/^version\s*=.*/version = \'%s+git\'/' % v, fn], - 'Error changing version in %s' % fn) - system(commit + ['-m', 'Updated to %s+git.' % v] + versionFiles) - - if not dryrun: - print 'Pushing commits and tag.' - system(['git', 'push', 'origin', branch]) - system(['git', 'push', '--tags']) - - archive = ['git', 'archive', '--prefix=Supybot-%s/' % v] - print 'Creating tarball (gzip).' - system(archive + ['-o', '../Supybot-%s.tar.gz' % v, - '--format=tgz', 'v%s' % v]) - - system(['git', 'config', 'tar.bz2.command', 'bzip2 -c']) - - print 'Creating tarball (bzip2).' - system(archive + ['-o', '../Supybot-%s.tar.bz2' % v, - '--format=bz2', 'v%s' % v]) - - print 'Creating zip.' - system(archive + ['-o', '../Supybot-%s.zip' % v, - '--format=zip', 'v%s' % v]) - - os.chdir('..') - shutil.rmtree('supybot') - - if not dryrun: - print 'Uploading package files to upload.sf.net.' - system('scp Supybot-%s.tar.gz Supybot-%s.tar.bz2 Supybot-%s.zip ' - '%s@frs.sourceforge.net:uploads' % (v, v, v, u)) - os.unlink('Supybot-%s.tar.gz' % v) - os.unlink('Supybot-%s.tar.bz2' % v) - os.unlink('Supybot-%s.zip' % v) - - print 'Copying new version.txt over to project webserver.' - system('echo %s > version.txt' % v) - system('scp version.txt %s@web.sf.net:/home/groups/s/su/supybot/htdocs' - %u) - os.unlink('version.txt') - -# print 'Generating documentation.' -# # docFiles is in the format {directory: files} -# docFiles = {'.': ('README', 'INSTALL', 'ChangeLog'), -# 'docs': ('config.html', 'CAPABILITIES', 'commands.html', -# 'CONFIGURATION', 'FAQ', 'GETTING_STARTED', -# 'INTERFACES', 'OVERVIEW', 'PLUGIN-EXAMPLE', -# 'plugins', 'plugins.html', 'STYLE'), -# } -# system('python scripts/supybot-plugin-doc') -# pwd = os.getcwd() -# os.chmod('docs/plugins', 0775) -# sh = 'tar rf %s/docs.tar %%s' % pwd -# for (dir, L) in docFiles.iteritems(): -# os.chdir(os.path.join(pwd, dir)) -# system(sh % ' '.join(L)) -# os.chdir(pwd) -# system('bzip2 docs.tar') -# -# print 'Uploading documentation to webspace.' -# system('scp docs.tar.bz2 %s@supybot.sf.net:/home/groups/s/su/supybot' -# '/htdocs/docs/.' % u) -# system('ssh %s@supybot.sf.net "cd /home/groups/s/su/supybot/htdocs/docs; ' -# 'tar jxf docs.tar.bz2"' % u) -# -# print 'Cleaning up generated documentation.' -# shutil.rmtree('docs/plugins') -# configFiles = ('docs/config.html', 'docs/plugins.html', -# 'docs/commands.html', 'docs.tar.bz2', 'test-conf', -# 'test-data', 'test-logs', 'tmp') -# for fn in configFiles: -# os.remove(fn) From f0d7286bded835b644a668e3aac59a3431fb6d7d Mon Sep 17 00:00:00 2001 From: James Lu <james@overdrivenetworks.com> Date: Sun, 27 Apr 2025 13:08:59 -0700 Subject: [PATCH 68/69] Remove historical ChangeLog and RELNOTES These haven't been updated since ~2013. Keeping them around is only going to confuse people. --- ChangeLog | 2022 ----------------------------------------------------- RELNOTES | 435 ------------ 2 files changed, 2457 deletions(-) delete mode 100644 ChangeLog delete mode 100644 RELNOTES diff --git a/ChangeLog b/ChangeLog deleted file mode 100644 index 3b26666c8..000000000 --- a/ChangeLog +++ /dev/null @@ -1,2022 +0,0 @@ -2009-05-25 James Vega <jamessan@supybot.com> - - * Version 0.83.4.1! - - * Fixed a bug in Factoids where the help could not be retrieved for - any command. - - * Fixed a bug where Plugin.list wouldn't list any aliases/RSS feeds - from the Alias/RSS plugins. - - * Updated Google to ensure the third-party json module (different API - than simplejson) isn't loaded. Based on a patch from Ricky Zhou. - - * Updated Channel.nicks so it doesn't reply with nicks from secret - channels outside of that channel. - - * Updated Channel.{op,halfop,voice,deop,dehalfop,devoice} commands so - they respect the server's "max mode changes per message" setting. - - * Updated utils.str.nItems to accept long as well as int. Thanks to - Ricky Zhou for the patch. - -2009-05-18 James Vega <jamessan@supybot.com> - - * Version 0.83.4! - - * Fixed a bug where we were attempting to tag a non-existent IrcMsg. - - * Fixed a bug where the Web plugin was not catching the correct - exception. - - * Fixed a bug where the Protector plugin was attempting to use a - non-existent variable. - - * Added verbiage to supybot.log.level indicating that it doesn't - control the logging level for stdout and pointing out the correct - config variable. - - * Added a new rank command to the ChannelStats plugin. - - * Added a new remove command to the Later plugin. - - * Added new azn and uniud commands to the Filter plugin. - - * Fixed a bug in the Socket driver that could cause it to continually - attempt to reconnect to a server which is unavailable. - - * Fixed a bug in supybot-wizard that would cause it to abort if the user - chose to use SSL. - - * Fixed the haveOp context to call getChannel if it wasn't already - called. - - * Fixed a bug in supybot-test where the entire test run would end if one - plugin couldn't be loaded. - - * Updated the httpUrl context to prepend 'http://' if that would result - in a valid HTTP URL. A noticeable benefit is that users can now call - "@title slashdot.org" instead of requiring the user to call - "@title http://slashdot.org". - - * Fixed Supybot to be compatible with Python 2.6 - - * Added a note to Owner.defaultplugin's help to point out - supybot.commands.defaultPlugin.importantPlugins, which affects which - plugins have priorities over ambiguous command names. - - * Rewrote the Google plugin to use the new AJAX API since Google - hasn't been giving out new keys for the SOAP API. - - * Added a new translate command to the Google plugin. - - * Fixed a copy/paste error in the help for User.capabilities. - - * Updated Web.title to give a more appropriate message if the URL - definitely has no title. - - * Fixed irc.reply so prefixNick is not used when action=True. - - * Implemented the command flood prevention, controlled by - supybot.abuse.flood.command.*, thanks to a patch from nebajoth. - - * Added utils/crypt.py to provide a uniform interface to the Python - crypt functionality regardless of the Python version being used. - - * Fixed the urlRe and httpUrlRe regexes in utils/web.py to be more - correct about what they match. They now match according to RFCs 1034 - and 1738. - - * Updated getSyntax to allow the syntax string to be specified, - similar to getHelp. - - * Updated getCommandHelp to respect supybot.reply.showSimpleSyntax. - - * Updated Factoids.getCommandHelp to respect - supybot.reply.showSimpleSyntax. - - * Fixed a bug where getCommandMethod would return methods that weren't - actually commands. This was exposed by adding a die Alias. - - * Removed supybot.plugins.Channel.banmask in favor of a general config - variable, supybot.protocols.irc.banmask. - - * Updated AutoMode to respect supybot.protocols.irc.banmask when - banning. - - * Updated Channel.ignore.add and Channel.ban.add to respect - supybot.protocols.irc.banmask. - - * Fixed Channel.kban so that it will fall back to an exact hostmask - instead of refusing to ban the user when the banmask would also match - the bot's hostmask. - - * Added the ability to disable ChannelLogger's logging on a - per-channel basis. - - * Fixed Config so it will respond with an error when the set, get, or - default commands are called on config groups that don't have values. - - * Added a new config variable, supybot.plugins.AutoMode.owner, which - can be used to prevent AutoMode behavior from applying to the owner(s) - (since the owner has all capabilities). - - * Fixed the regex parsing in utils/str.py to correctly handle multiple - backslashes before the search/replace separator. - - * Renamed supybot.plugins.Google.safeSearch to - supybot.plugins.Google.searchFilter since the behavior and valid - values changed as part of the switch to the AJAX API. - - * Updated RSS.announce to have list, add, and remove sub-commands - instead of the old option-parsing interface. - - * Added a new config variable, - supybot.plugins.ShrinkUrl.shrinkSnarfer.showDomain, which controls - whether the shrinkSnarfer displays the domain of the original URL - along with the shrunken URL. - - * Updated the default value for - supybot.plugins.ChannelLogger.filenameTimestamp so it sorts - chronologically. - - * Updated Misc.last to prevent users from retrieving messages from - channels they aren't in or from private channels when they're in - another channel. - - * Fixed supybot.directories.plugins so the directory Supybot is - installed to is not included. This change makes the config file work - across Python upgrades without user-intervention. - - * Updated Config.config to show both the global and channel-specific - value (if it exists) of the variable. - - * Fixed Google.calc to work around a change in Google's HTML. This - change should be more resilient to future HTML changes. - - * Fixed a bug where User.set.password could not be used if your - current hostmask wasn't recognized. - - * Fixed a bug in Limiter where the limit could be set to fewer than - the current number of users in the channel. - - * Updated String to give a more useful message when decoding a base64 - string fails. - - * Updated User.hostmask.add to require it be called in private since a - password may be given as part of the command. - - * Updated BadWords to only strip the formatting of messages which have - a bad word in them. - - * Fixed a bug in the supybot script where it would continue to run - even if it was unable to create the pidFile. This could cause - multiple instances of supybot to run simultaneously if using - supybot-botchk were being used to keep supybot running. - - * Updated plugins.DB to return a fake database check when generating - documentation. This allows the user to generate docs without having - the required database plugins installed. - - * Updated supybot-plugin-doc to be able to generate reStructuredText. - - * Removed the Insult plugin. - - * Added the Dunno plugin, which can be taught responses to use in - place of the normal invalid command response. - - * Added the Success plugin, which can be taught responses to use in - place of the normal operation succeeded response. - - * Updated the data file for Math's convert command. - -2007-10-22 James Vega <jamessan@supybot.com> - - * Version 0.83.3! - - * Added the BadWords plugin from supybot-plugins and updated the - plugin to allow kicking of people who use defined BadWords. - - * Added support for different log levels on stdout vs the log file. - - * Fixed a bug where the bot always reacted to invalid command floods - even if supybot.abuse.flood.command.invalid indicated not to. - (Closes: #1716878) - - * Fixed a bug where the RSS plugin would lower-case URLs, thus making - them impossible to retrieve. (Closes: #1666786) - - * Fixed ircmsgs.prettyPrint to handle unrecognized commands. - (Closes: #1630963) - - * Fixed a bug in the Services plugin where the bot would continuously - send Ghost commands. - - * Fixed Google.calc to handle a change in Google's HTML. - - * Fixed a bug where Plugin.list was listing functions which weren't - valid commands. - - * Fixed RSS's handling of encodings to eliminate some ascii conversion - errors. - - * Updated the rssparser using plugins with the renamed and newer - feedparser 4.1 in order to properly handle Bugzilla RSS feeds. - - * Updated PLUGIN_TUTORIAL to specify that the user needs to import - Python's random module. - - * Updated the Web plugin so it uses HTMLParser over sgmllib's parser - since sgmllib's enters an infinite loop on invalid input. - - * Updated getHelp() so callers can pass in the help string. This is - used in the Factoids plugin to dynamically generate a help string - based on a config value. - - * Updated questions.py so bolding is handled better. User input, - default values, and defined choices are no longer bolded. - - * Updated String.len to use wrap(). This greatly simplifies the - command and introduces better argument handling. - - * Updated a few uses of sre to use re if the bot is running under - Python 2.5. - - * Fixed test cases for mircColor and sorted (thanks dcraven). - - * Updated assertAction's error message to give useful information - about what went wrong. - -2006-07-23 James Vega <jamessan@supybot.com> - - * Version 0.83.2! (A long overdue bugfix release) - - * Added ADVANCED_PLUGIN_CONFIG, ADVANCED_PLUGIN_TESTING, CAPABILITIES, - USING_UTILS, USING_WRAP, STYLE, and PLUGIN_TUTORIAL docs. - - * Updated the Services plugin such that it will not spam GHOST - commands faster than once every 60 seconds (or as set by - supybot.plugins.Services.ghostDelay). - - * Updated the Seen plugin so that performing @seen with a leading - wildcard will not result in duplicate nicks in the response. - - * Updated RSS to handle the feed's advertised character encoding in - more of its commands. - - * Updated "Channel.ban list" to show how long until the ban expires. - - * Fixed the bug where addressed karma adjustments would cause the bot - to crash. - - * Fixed Alias.lock and Alias.unlock to work properly now that the - alias functions are no longer attributes of the Alias plugin. - - * Fixed a Windows-specific NameError in log.py. - - * Fixed Config.help to actually perform the string substitution of the - given config name. - - * Replace Twisted with Socket as the default network driver. - - * Added an --ssl option to Network.connect. - - * Added a question about SSL network connections in supybot-wizard. - - * Added recognition of UnrealIRCd's protected users and channelowners - as ops. - - * Updated URL.last to perform a case-insensitive search. - - * Updated the Author class so it performs the email munging. This - prevents munging occurring for punctuation in a person's name. - - * Updated ircutils' color handling to specify a default foreground - color of white if only a background color is specified. - - * Updated registry.StringWithSpaceOnRight to accept the empty string. - - * Updated registry.StringSurroundedBySpaces to be a single space if - given an empty string. - - * Updated utils.str.format to recognize digits before the '.' in %f - formatting. - - * Stop explicitly setting a umask. Instead we'll just obey the user's - umask. - -2005-09-01 James Vega <jamessan@supybot.com> - - * Version 0.83.1! - - * Fixed a bug in Owner where plugins would not be automatically loaded - unless the bot was connected to more than one network. - -2005-08-30 James Vega <jamessan@supybot.com> - - * Version 0.83.0! - - * Updated the Services plugin to realize it is identified when - NickServ says that the bot is already identified. - - * Updated Network.whois so that +s channels are only returned when in - that channel. - - * Updated RSS.info to retrieve the proper information from - rssparser's results. - - * Updated the RSS plugin to encode the headlines in the proper - charset, if the feed specifies an encoding. - - * Fixed a bug in Todo.todo when negative priorities are used. - - * Fixed a bug in Web where the entire title was not correctly parsed - from the web page. - - * Fixed a bug in Web where the title was correctly parsed, but a later - parsing problem caused the command to not reply with the title. - - * Fixed a bug in Misc.last where the last message in a channel was - skipped when the command was not called in that channel. - - * Fixed a bug in Channel.ban remove and Channel.ignore remove when - there were no bans or ignores. - - * Fixed a bug in User.hostmask list when there are no registered - hostmasks. - - * Changed the prefixName keyword argument to prefixNick. - - * Updated the socket handling to properly detect when an IPV6 - connection should be made. - - * Updated irclib to handle IRCds (like IRCNet) which send a - MAXLIST-style value for the MAXBAN 005 key. - - * Updated the plugin loading to happen during __init__ instead of when - receiving the 001 message. This allows the bot to connect to networks - that require a CTCP response on connect. - - * Updated the SIGHUP handler to reload the ignoresdb. - - * Fixed a bug in ircutils.isNick so that it no longer allows nicks to - start with a hyphen. - - * Fixed a bug in the first spec which would cause an error to be - raised if the first converter failed. - - -2005-05-30 James Vega <jamessan@supybot.com> - - * Version 0.83.0rc3! - - * Updated Topic such that it can undo the first topic change performed - in a channel. - - * Removed -O and -OO options for scripts/supybot. - - * Removed password hashing options for scripts/supybot-adduser. - - * Fixed a bug where RSS.remove wasn't removing the feed from - conf.supybot.plugins.RSS.feeds. - - * Fixed a bug in Topic.set where setting the first topic would change - the entire topic. - - * Fixed an AttributeError in the Ctcp plugin. - - * Fixed a problem where Supybot would attempt to connect to a network - it was already connected to. - - * Fixed a problem where a command with the same name as its plugin had - to be invoked as "plugin command". - - * Fixed an exception when irc.reply was called with a non-string - argument. - - * Fixed an ImportError in Twisted driver when OpenSSL wasn't - available. - - * Updated Socket driver to fix some longstanding issues. - - * Added supybot.drivers.maxReconnectWait, which determines the maximum - amount of time the bot will wait before attempting to reconnect to an - IRC server. - - * Added utils.python.Synchronized metaclass to ensure synchronized - access to class methods. - - * Moved utils.changeFunctionName to utils.python.changeFunctionName. - - -2005-05-12 James Vega <jamessan@supybot.com> - - * Version 0.83.0rc2! - - * Added News, Unix, and Insult plugins which were missing in the - previous RC. - - * Updated Misc.list to show the full configuration variable name when - the plugin has no commands. - - * Fixed an HtmlParseError exception in Web's title command and - titleSnarfer. - - * Fixed an ImportError exception when calling Todo.todo with no - arguments. - - * Fixed a bug where Channel.{enable,disable} would throw an exception - if only a command names was specified. - - * Added utils.str.ordinal (patch from genjamin AT gmail DOT com). - - -2005-05-02 James Vega <jamessan@supybot.com> - - * Version 0.83.0rc1! - - * Added supybot-botchk script. This script can be run from a - cron job to make sure your Supybot restarts when the computer it - runs on is rebooted, and can make sure the bot restarts if it - ever crashes (which it shouldn't). It also allows restarting the - bot without shelling out to the box it runs on; if you quit the - bot, it'll automatically restart. - - * Added supybot-plugin-doc script, which generates documentation for a - plugin. - - * Added SSL server support for the Twisted driver. - - * Added Web plugin, which contains most of the commands that were - in the (formerly included) Http plugin. - - * Added Reply plugin, which contains several commands that were - in the Misc and Utilities plugins. - - * Added Games plugin, which contains several commands that were - in the (formerly included) Fun plugin. - - * Added String plugin, which contains several commands that were - also in the formerly included Fun plugin. - - * Added Topic.fit, which adds a new topic to the end of the - channel topic, removing topics at the beginning as necessary to - squeeze the new topic in. - - * Added Seen.any, which reports the last time a person was seen - at all, rather than just the last time a person said something in - a PRIVMSG. - - * Added Web.fetch, which replies with the text of the given URL. - This might be useful in combination with Utilities.re command, - for pseudo-parsing URLs within aliases. - - * Added Note.next to retrieve the next unread note (patch from Sune - Foldager. Come back, Sune!). - - * Updated User.capabilities always to respond in private (for - owner users) and to prevent non-owner-users from retrieving other - user's capabilities. - - * Updated Relay.{join,part} so they require the admin capability. - - * Updated Plugin.contributors to pull author/contributor information - from the plugin in addition to the authors already hard-coded in - Supybot. - - * Added conf.supybot.protocols.irc.queuing.rateLimit.join to throttle - how fast Supybot joins channels. - - * Added conf.supybot.plugins.Herald.requireCapability, which specifies - the capability a user needs to affect another user's herald. - - * Added conf.supybot.plugins.ShrinkUrl.bold, which specifies whether - the plugin should use bold in its responses. - - * Renamed conf.supybot.plugins.Herald.throttleTime to - conf.supybot.plugins.Herald.throttle. - - * Renamed conf.supybot.plugins.Herald.throttleTimeAfterPart to - conf.supybot.plugins.Herald.throttle.afterPart. - - * Renamed the general log file (misc.log) to messages.log. - - * Renamed Google.metagoogle to Google.meta. - - * Renamed conf.supybot.protocols.irc.queueDuplicateMessages to - conf.supybot.protocols.irc.queuing.duplicates. - - * Updated Alias.add so that alias names can coincide with plugin names. - - * Added netsplit throttling to Herald. Now if only we could do - that to Relay... - - * Changed Todo's db format to a single flatfile db per user. - - * Fixed a bug where the nickInChannel converter would add the channel - to the args list. - - * Fixed some exceptions in RSS. - - * Fixed a problem with RSS not properly escaping feed names. - - * Fixed supybot.utils.str parsing of regular expression separators - other than / (patch from gcbirzan). - - * Fixed Owner.enable so that commands can actually be re-enabled. - - * Fixed Bug #1190350, incorrect extraction of a website's title. - - * Added various functions to supybot.utils.file (touch, writeLine, - readLines, chunks). - - * Renamed the 'regexps' attribute in callbacks.PluginRegexp - (formerly callbacks.PrivmsgCommandAndRegexp) to unaddressedRegexps - to callbacks.PluginRegexp so as to complement addressedRegexps. - - * Removed the extra argument to utils.str.pluralize which specified - whether or not to pluralize the string. - - * Changed the order of the arguments to utils.str.nItems. - - -2005-01-16 James Vega <jamessan@supybot.com> - - * Version 0.80.0! - - * Updated Babelfish to include Dutch, Greek, Russian, and traditional - Chinese as supported languages. - - * Updated RSS.rss to obey supybot.reply.oneToOne. - - * Updated registry.py to specify which registry value has an improper - docstring. - - * Fixed a bug in Ebay.auction, the "Current bid" regexp needed to be - updated. - -2005-01-12 James Vega <jamessan@supybot.com> - - * Version 0.80.0rc3! - - * Updated the Geekquote snarfer to snarf qdb.us' links. - - * Fixed a bug in Infobot, mis-typed registry value. - - * Fixed Network.connect to actually use the supplied password. - - * Fixed supybot.databases.plugins.channelSpecific.getChannelLink() - to return the proper channel link instead of returning the given - channel. - - -2005-01-11 James Vega <jamessan@supybot.com> - - * Version 0.80.0rc2! - - * Implemented Observer.remove, which disables and removes the observer - from all channels. - - * Added supybot.databases.channelSpecific.link.allow to determine - whether a channel allows other channels to link to its database. - - * Added supybot.plugins.BadWords.stripFormatting, which determines - whether the bot will strip any formatting before filtering bad words. - - * Added supybot.plugins.Markov.ignoreBotCommands, which determines - whether the Markov plugin will learn commands given to the bot. - - * Added a Network.driver command, which reports the current driver - being used. - - * Added an Infobot.update command, which allows the user to import an - existing Infobot factpack. - - * Added a Topic.replace command, which replaces the given topic with a - new topic. - - * Added a Note.search command, which allows the user to search for - notes they have sent or received. - - * Added supybot.databases.channelSpecific.getChannelLink(), which - returns a channel based on how channels link to each other. - - * Added supybot.plugins.Channel.banmask which specifies the default - method of generating Channel.kban's banmask. - - * Renamed supybot.databases.plugins.channelSpecific.channel to - supybot.databases.plugins.channelSpecific.link. - - * Updated RSS.announce such that it adds the arguments to the current - list of announced feeds instead of overwriting the current list. - - * Update the Google groupsSnarfer to work with Google's beta groups - website. - - * Updated Network.disconnect to announce that the disconnection - attempt has started. - - * Updated Debian.bug to handle website changes. - - * Updated Observer.{add,remove} to require the Admin capability. - - * Updated Infobot so that it actually works reasonably well; removed - the deprecation. - - * Updated Sourceforge to handle changes in the website. - - * Updated UrbanDict to handle changes in the website. - - * Updated plugins.getChannel and plugins.makeChannelFilename to - properly handle the new channelSpecific database setup. - - * Fixed a bug with ShrinkUrl.ln; the url needed to be urlquoted before - being passed off to ln-s.net. - - * Fixed some database conversion bugs in fundbConvert.py. - - * Fixed a bug in socketDrivers where reconnection attempts would - always occur immediately, thus continually blocking the bot. - - * Fixed an exception in registry.OnlySomeString's error method; - the parent method doesn't accept an argument. - - * Fixed a bug in RSS where announcing the same feed in multiple - channels would cause improper displaying of the new feeds. - - -2004-12-22 Jeremy Fincher <jemfinch@supybot.com> - - * Version 0.80.0pre6! - - * Added a Topic.separator command, which replaces the current - separator with a new separator, changing the topic to reflect the - change. - - * Changed the supybot.user configuration variable so that if it - isn't configured, the user will stay up-to-date with the current - version of the bot. To take advantage of this, set your - supybot.user configuration variable to "" - - * Removed the supybot.databases.users.hash configuration - variable, so all bots hash by default. - - * Fixed a bug with AutoMode's auto-banning feature; a variable - was misspelled. - - * Fixed a bug with ChannelValues picking up children that aren't - channels. - - * Fixed Misc.apropos not to be case-sensitive. - - * Fixed bug in User.register; it works now. - - -2004-12-20 Jeremy Fincher <jemfinch@supybot.com> - - * Version 0.80.0pre5! - - * Added a "shuffle" command to the Utilities plugin, which - shuffles its arguments. Useful in combination with - Utilities.last, which returns the last argument it's given, in - combination with Utilities.apply, in order to pick a random - string (think aliases). - - * Added supybot.plugins.Relay.noticeNonPrivmsgs, for making the - relay plugin use NOTICEs rather than PRIVMSGs to relay - non-PRIVMSG messages to a channel. This often affects tab - coloring in IRC clients and thus makes it so that relay messages - color the tabs like the actual messages would have. - - * Numerous bug fixes. Many, many bugs fixed. Oodles and oodles - of bugs have been fixed. Myriad bugs fixed. Get the idea? :) - - -2004-12-17 James Vega <jamessan@supybot.org> - - * Version 0.80.0pre4! - - * supybot.databases.plugins.channelSpecific.channel is now a - channelValue so that individual channels can decide to link their - databases. - - * Deprecated asyncoreDrivers. Use twistedDrivers or socketDrivers - instead. - - * Moved {eval,exec} from Owner.py to Debug.py in the sandbox. - - * Numerous bug fixes. - - -2004-09-30 Jeremy Fincher <jemfinch@supybot.org> - - * Version 0.80.0pre3! - - * Deprecated FunDB, added two new plugins, Lart and Praise, to - handle the same features individually for larts and praises. - There is a script in tools/ that will convert from a FunDB to a - lart or praise database. - - * Deprecated the Infobot plugin, in expectation of a rewrite. - - * Deprecated the Quotes plugin, since we don't know anyone who - seriously uses it. Let us know if you do use it, because it may - be removed in a future version. - - * Added Karma.{dump,load} for dumping and subsequently loading - the Karma database. - - * Changed the News database implementation to a flatfile - database. - - * Removed the tinyurl shrinking code from the URL plugin and put - it in the ShrinkUrl plugin, and added the ability to use ln-s.net - as different URL shrinker as well. - - * Added an outFilter to the ShrinkUrl plugin that will shrink any - outgoing URL that is longer than the minimum length. - - * Added a Freenode plugin as proof-of-concept; the bot can now - use CAPAB IDENTIFY-MSG to ignore users that aren't identified. - - * Added the ability for the Seen plugin to match nicks with - wildcards. - - * Added a showLinks configuration option to the RSS plugin to - show links during announcements (and another such variable for - non-announcements). - - * Added the spellit, hebrew, and shrink filters to the Filter - plugin. - - * Added the ability to log to separate directories to - ChannelLogger. - - * Added the option to Lookup.add to add lookups that don't reply - with the key. - - * Added "at" and "until" commands to the Time plugin; they're not - perfect, and they don't parse nearly enough times, but they're - somewhat tolerable for now. - - * Added a Sourceforge.stats command. - - * Added single-letter commands to the Words plugin when a hangman - game is active. - - * Added supybot.plugins.Services.disabledNetworks, to disable the - Services plugin specific networks. - - * Added supybot.protocols.irc.vhost, for binding to a vhost - before connecting. - - * Added supybot.reply.format.time.elapsed.short, offering now a - "short" formatting for elapsed times. - - * Added supybot.commands.quotes, for configuring which quotes can - be used to quote arguments to commands. - - * Added supybot.databases.plugins.channelSpecific.channel, - specifying the "default channel" for non-channel-specific - databases to use. - - * Moved the supybot.humanTimestampFormat configuration variable - to supybot.reply.format.time. - - * Added a configuration variable determining the maximum length - of replies internally, so they can't suck up as much CPU as they - would otherwise. - - * Added a configuration variable determining the maximum nesting - depth allowed, so exceedingly nested commands will be stopped - before they're executed. - - * Added configuration variables concerning the formats used by - the central and plugin logging facilities. - - * Added a configuration variable determining the quote characters - used by the bot to quote literal strings. - - * Added support for line-wrapping the registry configuration - file. - - * Moved supybot.reply.{brackets,pipeSyntax} to - supybot.commands.nested. - - * Fixed a longstanding bug with the bot "forgetting" - channel-specific configuration variables if they weren't - exercised during the duration of the bot's uptime. - - * Fixed renames so they're finally persistent. - - * Fixed a bug having to do with Note and unsent notes. - - * Fixed several bugs in the interaction of Infobot with other - plugins. - - * Added commands.wrap, the new method for wrapping commands and - handling type validation errors consistently throughout the bot. - - * Upgraded many of the outside projects we include to their - newest versions. - - -2004-09-17 James Vega <jamessan@users.sf.net> - - * Version 0.80.0pre2! - - * Added supybot.plugins.Google.colorfulSnarfer, which determines - whether the word 'google' in the bot's output will be made colorful - (like Google's logo). - - * Added the Time plugin, to hold all of our Time related commands. - - * Added max() and min() to Math.calc. - - * Added Unix.pid, which allows the Owner to retrieve the pid of the - bot's process. - - * Added supybot.plugins.Sourceforge.enableSpecificTrackerCommands, - which enables the rfe, bug, and patch commands. - - * Added Topic.topic, which returns the current topic of the channel. - - * Updated conf.Databases to use a more sane database ordering and - include anydbm. - - * Updated various plugins to use our new-style database abstraction. - Plugin databases using this new-style will be named Plugin.dbtype.db. - -2004-09-12 Jeremy Fincher <jemfinch@supybot.org> - - * Version 0.80.0pre1! - - * Added the facility to supporting several different database - implementations in a plugin, allowing the user to specify which - databases are supported as well as in what order of preference. - - * Added the Insult plugin, for colorful, creative insults. - - * Added the UrbanDict plugin, for defining words based on - UrbanDictionary.com. - - * Added the Observer plugin, for watching a channel for regexps - and running commands when the bot sees such regexps. - - * Moved Http.geekquote to a new Geekquote plugin, added a command - for using qdb.us, and added a snarfer. - - * Added a SuperIgnore plugin, a good example of an inFilter and a - way to completely, totally ignore people. - - * Changed the name of the Network plugin to Internet. - - * Added a new Network plugin, and moved some commands from Owner, - Misc, and Relay to it. - - * Added CTCP flood protection. - - * Added a supybot.plugins.Karma.allowUnaddressedKarma - configuration variable, for allowing karma increments/decrements - similar to Infobot. - - * Added supybot.reply.whenAddressedBy.nicks, to allow users to - specify a list of nicks to which the bot will respond as if they - were its own nick. - - * Added the ability to support multiple-word karma - increments/decrements. - - * Changed Owner.rename to be handled persistently; now renames - work across restarts of the bot or reloads of a plugin. - - * Changed Misc.last to include a timestamp for when the message - was sent. - - * Added the Channel.alert command, to send all currently - connected ops on a channel a message. - - * Changed the MoobotFactoids plugin to allow commands to be - nested in factoids definitions and searches. - - * Removed the futurama command in favor of adding a - futurama.supyfact file to supybot-data. - - * Improved the Http.kernel command, showing more kernel types. - - * Added a new contributors command and a way of storing - contributors and their contributions in a plugin. - - * Changed the name of Anonymous.action to Anonymous.do, to be - more consistent with "say" and other bots (MozBot, iirc). - - * Added the ability for channel bans and ignores and global - ignores to have expiration times. - - * Added invalid command flood protection. - - * Changed RSS' headlines output to bold the separators in order - to make it easier to distinguish the headlines. - - * Added a --no-network option to supybot-wizard. - - * Added several attributes to IrcMsg objects as they pass through - the bot; currently we tag them with receivedAt, receivedBy, and - receivedOn. - - * Added RichReplyMethods.errorInvalid, a nice helper method for - sending errors about invalid values. - - * Changed the --nonetwork and --noplugins options to test/test.py - to --no-network and --no-plugins. - - * Changed plugins.makeChannelFilename, swapping the order of the - channel and filename arguments and making the channel optional. - - * Changed the first argument to callbacks.Privmsg.callCommand to - be a name rather than a method, for greater justice. - - * Added a new mechanism for ordering plugins (subclasses of - callbacks.Privmsg) which is much more flexible than a simple - priority system. - - -2004-09-06 James Vega <jamessan@users.sf.net> - - * Version 0.79.9999! - - * Added stripFormatting option to ChannelLogger plugin, which - determines whether non-printable formatting characters are logged. - - * Added Sourceforge.patches command to complement the current bugs - and rfes commands. - - * Added abs() to Math.calc. - - * Improved the interface for Config.list. Now groups and values - are listed, with groups being denoted by a leading @. - - * Improved Config.config such that the user can specify the entire - config variable name (conf.supybot....). - - * Fixed a bug where ChannelLogger wouldn't log ignored nicks. - - * Fixed an incorrect path in INSTALL. - - * Fixed some missing imports in Unix's configure method. - - * Fixed a bug where an owner could publically retrieve a private - configuration variable. - - * Fixed an exception when trying to remove non-existent Heralds. - - * Fixed an exception in RSS.getHeadlines. - - * Fixed a couple bugs in Poll, when retrieving the Poll id. - - * Fixed a problem with trying to use socket.inet_pton under - Windows; Python doesn't build their Win32 port with IPV6 support, - so we have to brute-force IPV6 detection. - - * Fixed a few bugs with how Infobot handled the SQLite db. - - * Fixed others/convertcore.py so that liter-based units are - properly capitalized (L not l) and use 1000 as the conversion rate - for MB, KB, etc. since MiB, KiB, etc. are also known units. - - * Fixed a bug where Infobot would confirm an unaddressed factoid - definition. - - * Fixed a problem where Google.stats didn't keep track of all - searches. - - -2004-08-31 Jeremy Fincher <jemfinch@supybot.org> - - * Version 0.79.999! - - * Added the ability to send long fortunes line-by-line rather - than all in one (or several) messages; it will do this if - supybot.reply.oneToOne is set to False. - - * Added many configuration variables to the Unix plugin, allowing - configurable commands and options to those commands. - - * Changed the output of Config.list to show groups with a - preceding @, rather than use the --groups option. - - * Changed the Google.stats (formerly Google.info) command to be - persistent, using the registry to record old values for the - number of searches made and the number of seconds Google has - spent searching for the bot. - - * Added module __revision__ logging to our exception logs, for - more information in bug reports. - - * Fixed a bug with asyncoreDrivers' handling of reconnects; it - would not reconnect when commanded to if it had reconnected - before. - - * Fixed several bugs where the bot was testing nicks for - equivalence without first normalizing them, leading to some false - negatives. - - * Fixed a bug with the handling of - supybot.reply.withNoticeWhenPrivate so all private messages - really are replied to with a notice. - - * Fixed Http.geekquote to match the current bash.org layout. - Also, made sure all ids are valid ids before requesting a quote - (apparently bash.org is returning a certain quote for all invalid - ids). - - * Fixed a bad regular expression in the Ebay plugin which could - cause the bot to suck up 100% CPU for a signficant (perhaps - practically infinite) amount of time. - - * Fixed a bug where the bot would sometimes reconnect to a - network after being told to disconnect. - - * Fixed an uncaught exception in Owner.connect when the user - forgets the network name - - -2004-08-30 Jeremy Fincher <jemfinch@supybot.org> - - * Version 0.79.99! We're getting asymptotically closer to - 0.80.0! - - * Added Anonymous.action, to anonymously perform actions in a - specified channel. - - * Added a Karma.clear, so channel ops can clear the karma for a - given name. - - * Added a Topic.redo, to redo the last undo. - - * Added supybot.protocols.irc.umodes, to allow the bot to set - user modes upon connecting to a network. - - * Fixed numerous bugs involved with disconnecting, reconnecting, - and using multiple networks. - - * Fixed a bug that would prevent the bot from quitting except via - multiple Ctrl-Cs. - - * Fixed some mis-interaction between the Karma plugin and the - Infobot plugin. - - * Fixed RSS's announcements. - - * Fixed bug in Later whereby no more than one message could be - queued for a nick. - - * Fixed Services.configure, as well as several bugs in Services - which sometimes prevented the bot from identifying. - - * Fixed bugs in the Poll module that caused the list and poll - commands not to work. - - * Fixed the ebay snarfer. - - * Fixed exception raised by some CTCP messages when the URL - plugin was loaded. - - * Fixed Debian.version. - - * Fixed Amazon's use of unicode. - - -2004-08-27 Jeremy Fincher <jemfinch@supybot.org> - - * Version 0.79.9! - - * Added Infobot, a plugin to emulate Infobot. - - * Added Anonymous, a plugin for anonymously saying things to a - channel. - - * Added Tail, a plugin which will tail logfiles and send the - new lines to a configurable list of targets. - - * Added NickCapture, a plugin which tries to recapture a nick - that's being used by someone else, both by watching for QUITs - with that nick and by checking via ISON for that nick. - - * Changed the behavior of "seen" with the --user switch instead to - be a separated command, Seen.user. - - * Changed the behavior of "seen" with no arguments instead to be - a separate command, Seen.last. - - * Moved the connect and disconnect commands from the Relay plugin - to the Owner plugin, so a Supybot can be on multiple networks - without ever loading the Relay plugin. - - * Added relay bot detection to the Relay plugin. Now, rather - than get involved in a loop with another relay bot, a Supybot - will (if it has ops) rain down its wrath upon the offender. - - * Added supybot.plugins.Quotes.requireRegistration, which - determines whether a user need be registered to add Quotes to - the Quotes database. - - * Added supybot.plugins.RSS.showLinks, which determines whether - the bot will show links to the RSS headlines along with the - normally displayed titles. - - * Removed supybot.reply.withPrivateNotice and split it into two - separate configuration variables, supybot.reply.withNotice and - supybot.reply.inPrivate. - - * Added supybot.log.stdout.wrap, to allow optional (defaulting to - True) wrapping of stdout logs. - - * Added supybot.databases.plugins.channelSpecific, a value that - determines whether the database used for channel-based plugins - will be a channel-specific database or a global database. This - value, ironically enough, is channel-specific -- channels can - each individually decide to be "part of the Borg" or to "be their - own channel." The default, of course, is for databases to be - channel-specific. - - * Changed the way channel databases are handled; instead of - generating #channel-<name> files, instead we create a subdirectory - of the data directory named #channel, and then stick all the files - in there. It's a much cleaner way to do things, in our opinion. - - * Added several configuration variables to the Status plugin to - determine how verbose the cpu command is. These are, of course, - channel-specific. - - * Added a configuration variable to the Dunno plugin, - supybot.plugins.Dunno.prefixNick, which determines whether the - bot will prefix the nick of the user giving an invalid command to - its "dunno" response. Formerly, it never would; the default for - this variable, however, is True, because that's how the rest of - Supybot works. - - * Added Owner.rename, a command for renaming commands in other - plugins. - - * Added Config.channel, for getting/setting channel configuration - variables. - - * Fixed the problem with channels with dots or colons in them - raising exceptions whenever the registry was accessed. - - * Changed Fun.eightball to provide a similar answer for a question - asked multiple times. - - * Changed Fun.roulette to use a 6-barrel revolver. - - * Changed Bugzilla to use the registry, rather than a custom - flatfile database format. - - * Added the KeepAlive plugin, to send useless keepalive messages - to someone every some period. It's mostly just because we - noticed that MozBot had one, and we couldn't allow ourselves to - be outdone. - - * Changed the URL plugin to use flatfiles rather than SQLite - database. Also reduced the functionality of the last command by - removing some options that no one ever really used, and removed - the random command (who uses that anyway?) - - * Changed the Words plugin not to use SQLite. We lose the - anagram command, but crossword and hangman become much easier to - use, since all the user has to do is put a words file in - data/words. - - * Changed the Relay plugin to rely only on the registry, allowing - it to start and join all networks and channels with no user/owner - interaction at all. Also, removed the Relay.say and - Relay.reconnect commands, since both can be accomplished easily - using the Relay.command command in combination with - Owner.reconnect and Anonymous.say commands. - - * Added supybot.reply.withNoticeWhenPrivate, to make the bot - reply with a notice when it privately messages a user -- this - generally means that the user's client won't open a query window, - which may be nice. Do note that users can override this setting - via the user registry variable of the same name. - - * Added supybot.nick.alternates, which allows a list of alternate - nicks to try, in order, if the primary nick (supybot.nick) is - taken. Also added a nick-perturbation function that will change - supybot.nick if there are no alternates or if they're all taken - as well. As a result, removed supybot.nickmods. - - * Changed ChannelLogger to log channels to logs/ChannelLogger, - rather than simply logs. - - * Added the ChannelRelay plugin, to relay messages between two - channels. This might be useful for people who want to forward - CVS update messages from one channel (such as #commits) to - another. - - * Added Channel.mode, to set modes in the channel, Channel.limit, - to set the channel limit, Channel.moderate and - Channel.unmoderate, to set +m and -m, respectively, and - Channel.key to set or unset the channel keyword. - - * Added a new plugin, Format, which offers several commands for - formatting strings on IRC. Moved several commands from to it - from the Utilities plugin. - - * Improved the functionality of RSS.announce. Calling it with - no arguments now lists the currently announced feeds. Removing - feeds is done by specifying the --remove option. - - * Added a reconnect command to the Owner plugin. - - * Added aol and rainbow filters to the Filter plugin. - - * Added Nickometer plugin, a translation of Infobot's Nickometer. - - * Added multiple recipient support for notes. - - * Added BadWords.list, to list the bad words currently being - censored by the bot. - - * Changed Misc.help to allow plugins to specify their own help, - and added help for several of the more confusing plugins. - - * Added Dunno.stats, to return the number of dunnos in the - database. - - * Added the Currency plugin, to perform currency conversions. - - * Added conf.supybot.plugins.Karma.allowSelfRating, which - determines whether users are allowed to adjust the karma of their - current nick. - - * Added --nolimit option to Misc.last, which causes it to return - all matches that are in the history. - - * Added conf.supybot.plugins.Herald.defaultHerald, which provides - a default herald to use for unregistered users. Herald.default - was also added as a friendly interface to managing the - defaultHerald. - - * Added Weather.wunder, which uses wunderground.com to report the - current weather status. - - * Changed supybot.defaultCapabilities to be a space-separated - list rather than a comma-separated list. Also added a check to - make sure -owner was in supybot.defaultCapabilities, and to - require a command-line option to allow it not to be present. - - * Added Sourceforge.fight, which returns the list of specified - projects and their bug/rfe count in sorted order, least to most. - - * Added Utilities.reply for replying to a person with text. Like - echo, but it prepends the nick like the bot normally does. - - * Changed Utilities.success to accept an optional <text> argument - for text to be appended to the success message. - - * Changed User.{addhostmask,removehostmask,register,unregister} - to allow owner users to do what they will with their users. You - can now add hostmasks, remove hostmasks, register users, and - unregister users willy-nilly. - - * Changed and moved several configuration variables. - supybot.{throttleTime,maxHistoryLength,pingServer,pingInterval} - all moved to supybot.protocols.irc; supybot.httpPeekSize moved to - supybot.protocols.http; supybot.threadAllCommands moved to - supybot.debug.threadAllCommands, and probably a few others I - forgot to mention. - - * Added Http.zipinfo, which returns a veritable plethora of - information about the supplied zip code. - - * Added a configuration variable for every plugin, "public", that - determines whether the plugin is considered public (i.e., whether - it will show up in the list command when the list command isn't - given the --private option). - - * Added Misc.author, a command for finding out which author - claims a particular plugin. - - * Added Topic configuration supybot.plugins.Topic.format template - string allowing full customization of the Topic items. - - * Added Topic.lock and Topic.unlock, for locking and unlocking - the topic (setting +t or -t, respectively) - - * Added Topic.restore, for restoring the topic to the last-sent - topic. Useful for when people change your carefully crafted - topic by means other than the bot. - - * Changed supybot.brackets so you can now provide the empty - string, which means you cannot do nesting of commands. - - * Added Utilities.last, which replies with the last string - given to it. This is useful for sequencing commands and then - replying with the output of the last commnad. - - * Updated RSS.info to accept a feed name as well as a url. - - * Added a signal handler for SIGTERM, so you folks killing your - bots uncleanly won't have as many bugs :) - - * Added a signal handler for SIGHUP that reloads the bot's - various configuration files. - - * Added a new configuration variable, supybot.pidFile, which - determines what file the bot should write its PID to. The - default is not to write the PID file at all. - - * Added a comma argument to utils.commaAndify, which specifies the - character to use in place of the comma. - - -2004-04-16 Jeremy Fincher <jemfinch@supybot.org> - - * Version 0.77.2! - - * Fixed numerous bugs, high and low, big and small and - in-between. Definitely worthy of a release. - - * Added supybot.plugins.ChannelLogger.includeNetworkName, so the - logs aren't strangified when relaying between channels. - - * Added a --capability option to User.list, to allow people to - list all the users possessing a certain capability. The main - reason this was added is so jemfinch can tell who owns which - Supybots on #supybot :) - - * Added Utilities.success, mostly for making aliases such that - they can respond with success if no errors were encountered in - any nested commands. - - * Changed the name of the new filter, colorstrip, to be - stripcolor. Better now than after it was highly established :) - - * Added configuration variables - supybot.plugins.Services.NickServ.password (which replaces the - old supybot.plugins.Services.password) for specifying the - NickServ password, as well as - supybot.plugins.Services.ChanServ.{op,halfop,voice}, which - determine what the bot should request of ChanServ when it - identifies or joins a channel. These latter variables are, of - course, channel variables. - - * Added configuration variable - supybot.plugins.Babelfish.languages (which replaces the old - supybot.plugins.Babelfish.disabledLanguages) for specifying - which languages will be translated/spoken. - - * Fixed bug #863601, plugin BadWords fails on color codes. - - * Replaced Sourceforge.{rfe,bug} with Sourceforge.tracker, which - can query any tracker type (not just RFEs and bugs) and responds - with more information, a la trackerSnarfer. - - * Added supybot.log.individualPluginLogfiles, which determines - whether plugin logs will be logged to their individual logfiles - in addition to the misc.log logfile. - - * Added supybot.plugins.WordStats.ignoreQueries, which, when - true, makes the bot ignore queries (and not increment its word - statistics). - - * Added the LogToIrc plugin, for sending logs to an IRC - channel or nick. Useful for traceback notification and whatnot. - - * Changed supybot.log.timestampFormat to specially handle the - empty string -- if it's set to the empty string, it will log - times in seconds-since-epoch format. - - * Added supybot.plugins.Weather.convert, which determines whether - or not Weather.{weather,cnn,ham} will convert temperature to the - configured temperatureUnit. - - * Changed User.setpassword not to require the <old password> to - be correct if the requesting user has the owner capability (and - isn't the owner themself). - - * Added ircutils.strip{Bold,Reverse,Underline,Formatting}, which - will remove the specified formatting or all forms of formatting - in the case of stripFormatting. - - -2004-04-09 Jeremy Fincher <jemfinch@supybot.org> - - * Version 0.77.1! - - * Added supybot.reply.errorWithNotice to make the bot give its - error messages in a notice. - - * Added Filter.colorstrip, an outfilter that strips all color - codes from messages. - - * Added supybot.plugins.BadWords.{replaceMethod, nastyChars, - simpleReplacement, requireWordBoundaries}; see the associated - help strings to find out what they do. - - * Added supybot.plugins.Babelfish.disabledLanguages, to disable - certain languages from being translated/spoken. - - * Added supybot.reply.maximumMores, to give users the ability to - set the maximum number of "more" chunks replies will generate. - - * Added supybot.reply.truncate, to turn off the normal chunking - of replies that later can be retrieved with the more command. - Setting this variable to On means that no chunks will ever be - created. - - * Added supybot.plugins.Enforcer.takeRevengeOnOps, which makes - the bot even take revenge on #channel,ops who try to violate the - channel configuration. Of course, such people can change the - channel configuration to their bidding, but it's a decent - protection against errant botscripts or something. - - * Added supybot.plugins.Channels.alwaysRejoin, to make the bot - always rejoin when it's kicked. - - * Added supybot.databases.users.hash, allowing those running bots - to specify the default hashed/unhashed state of user passwords in - the config file. - - * Added Debian.bug, which retrieve bug info from Debian's BTS. - - * Changed Relay.names to Relay.nicks, to be consistent with - Channel.nicks. - - * Added supybot.brackets, a configuration variable for specifying - which set of matching brackets to use for nested commands. Valid - values are [] (the default), {}, <>, and (). - - * Added a configuration variable to ChannelLogger, timestamp, - which determines whether the bot will timestamp its logfiles. - This is a channel-specific variable, of course. - - * Updated ChannelLogger not to log messages starting with - [nolog], in order to allow private information to remain private. - - * Added a configuration variable to ChannelLogger, - flushImmediately, to cause all channel logs to be flushed every - time they're modified, for those people who like to read the logs - through tail -f or something similar. - - * Updated WordStats to allow removing of tracked words. - - * Updated Seen.seen to accept no arguments and return the last - message spoken by anyone. - - * Updated the Herald plugin to use the standard substitute until - we get it updated to use commands as heralds instead of plain - strings. - - * Updated echo to use the standard substitute on its reply. - - * Updated Network.whois so that it can now retrieve - information on all domains. - - * Updated the Weather plugin to be retrieve weather from either - hamweather.net or cnn.com. Also added - supybot.plugins.Weather.{command,temperatureUnit} so that you can - specify which command (Weather.cnn or Weather.ham) to use when - Weather.weather is called and in which unit (C, F, K) to report - the weather. - - * Updated standard replies (such as supybot.replies.success, etc.) - to use the standard substitute (such as $nick, $who, $channel, - etc.) in their text. - - * Fixed snarfers to respect lobotomies. - - * Fixed Admin.join not to add the channel to the supybot.channels - registry entry if joining the channel wasn't successful. - -2004-02-20 Jeremy Fincher <jemfinch@supybot.org> - - * Version 0.77.0! - - * Changed the format of the user and channel databases to - something much more readable and user-editable. Be sure, if - you're upgrading, to run tools/ircdbConvert.py on your user and - channel databases *BEFORE* installing the new version. - - * Updated almost every document we have, and added a - GETTING_STARTED document. Yay! - - * Added several new options for Channel.kban: --exact, --nick, - --user, --host, for more flexibility in determining what the - banmask is. - - * Added a Scheduler plugin for scheduling events to occur at - specific times. - - * Added a Herald plugin for announcing to the channel the arrival - of certain users. - - * Changed the reply method of the irc object given to plugins not - to require a msg object. - - * Added inter-factoid references for MoobotFactoids. Simply - define a factoid as "see <factoid-key>" (and nothing else) and it - will automatically go pick up the value for that factoid and - display it in its place. Sort of a "symlink" for MoobotFactoids. - - * Added the ability to reply to factoids without the "whatis" in - the Factoids plugin. Now, you can use "@foo" instead of "@whatis - foo". - - * Added --{from,to} and --sent options to Note.sent. - - * Changed Note.get to simply be "note". Instead of "note get - 145", you should use "note 145". - - * Changed channel capabilities to use a comma to separate the - channel from the capability instead of a period. This is because - channels can include periods (but not commas) and since we now - allow "plugin.command" capabilities, there's no way to know - whether a given dot is separating the channel from the capability - or the plugin from the command. - - * Removed Admin.setprefixchar, since it's unneeded with the new - configuration. - - * Removed Status.bestuptime, since it was buggy and no one felt - like maintaining it. - - * Added Http.cyborg, a fun little command for getting cyborg - abbreviations for names. - - * Added Sourceforge.totalbugs and Sourceforge.totalrfes - - * Removed Owner.{set,unset} since they matter not. - - * Made the smileys and frowns configurable in ChannelDB. - - * Added a vast array of new configurables -- check out the various - config commands in Configurable plugins to see. - - * Added better error reporting for Admin.join, explaining to the - user if the bot can't join the channel. - - * Added a title-snarfer to the URL plugin. - - * Added Relay.command, a command for sending commands to the bot - on a different network. - - * Added Bugzilla.search, a new command for searching a bugzilla - installation - - * Added an INVITE handler in Admin, allowing users with the admin - capability to INVITE the bot to a channel. There's also a config - variable, alwaysJoinOnInvite, that will cause the bot to join - a channel whenever someone invites it to a channel, not just users - with the admin capability. - - * Added conf.requireChannelCommandsToBeSentInChannel for requiring - all channel-related commands to be sent in the channel. - - * Added conf.followIdentificationThroughNickChanges for having the - bot update user's identified hostmask when they change nicks. - - * Added conf.replyWhenNotAddressed, a configuration variable for - having the bot always attempt to parse a message as a command. - - * Added conf.replyWhenAddressedByNick, a configuration variable - for having the bot *not* respond when addressed by its nick. - - * Added conf.replyWithNickPrefix, a configuration variable for - having the bot not prefix the nick of the person giving a command - to the reply. - - * Changed all "zegrep" stuff to "zgrep -e" stuff, since zegrep is - on fewer platforms than zgrep. - -2003-12-12 Jeremy Fincher <jemfinch@supybot.org> - - * Version 0.76.1! The birthday release! - - * Fixed a bug in irclib.py that could cause the bot to loop, - connecting and disconnecting from the server because it didn't - think the server responded to its PING. - - * Fixed a bug in the Services implementation that could cause - the bot to continually loop, connecting and disconnecting from the - server. - - * Fixed Misc.help to follow the same default plugin rules that the - rest of the bot follows. - - * Added better error reporting to Admin.join, so the various error - conditions that might make the bot incapable of joining a channel - will be reported. - - * Updated RootWarner to be configurable, offering each channel the - ability to define whether or not people who IRC as root will be - warned, what that warning will be, and whether or not they should - be kicked. - - * Added a configurable 'topic-sync' to the Relay plugin to - determine whether the topics of the two channels should be kept - synchronized. - - * Added Lookup.search for searching the various loaded lookups. - - * Added Topic.reorder, a new command for reordering the topics in a - specific manner. - - * Added Topic.list, a new command for listing the topics in a - channel (mostly in order to help out with Topic.reorder :)) - - * Added Http.extension, a new command to retrieve file extension - information from filext.com. - - * Updated Todo.remove to allow removing multiple taskids - - * Updated Relay.whois to include a user's away status and identified - state, if the server supports it. - - * Added utils.sorted, which does what list.sorted will do when 2.4 - is released. - - * Added ircutils.isCtcp, for determining whether or not a message - is a CTCP message. - -2003-12-6 Jeremy Fincher <jemfinch@supybot.org> - - * Version 0.76.0! - - * Added a "trusted" capability that defaults to off (-trusted) and - is required for Utilities.re (with which it's possible to DoS the - bot) and for the new Math.icalc (with which it is trivially - possible to DoS the bot). - - * Added Math.icalc, a new command for doing integer arithmetic. - It requires the "trusted" capability. - - * Added the Fun.ping command, because MozBot has it. - - * Added Note.unsend command, to allow users to "unsend" notes - they've sent but whose recipient has not yet read. - - * Added Channel.{deop,devoice,dehalfop,kick}. - - * Added Http.size and Http.doctype and Http.headers to retrieve - various meta-information on URLs. - - * Added a ranking to ChannelDB.wordstats. - - * Added Karma.most for determining various "mosts" in the Karma - database. - - * Added User.list command to list registered users. - - * Added 'roulette' command to Fun plugin. - - * Added a Channel.lobotomies command to list the channels in which - the bot is lobotomized. - - * Added a swap function to Math.rpn. - - * Changed the name of User.changeusername to User.changename. - - * Changed the logging infrastructure significantly; each plugin - now has its own logger (and thus logfile), in addition to being - logged in the main logfile. - - * Fixed bug in which the bot wouldn't rejoin channels after a - reconnect. Thank the Lord for tcpkill :) - - * Fixed Http.freshmeat for projects with a space in their names. - - * Changed RSS so RSS feed commands may be added while the bot is - running, and so added RSS feed commands are in the RSS plugin. - - * Changed Lookup so added lookups are added in the Lookup plugin - itself so there's no dependency on Alias, and so loaded lookups - can be seen via 'list Lookup'. - - * Fixed bug #850931 as well as several other minor bugs in - Utilities.re. - - * Fixed bug #851254, Factoids.whatis didn't work on numeric keys. - - * Added the ability to turn on/off the showing of ids in FunDB - excuse/insult/praise/lart. - - * Added the to= keyword argument to the various reply functions to - you can specify a target to send the message to. - - * Changed socketDrivers to allow more time (10x more, to be exact) - for connecting to the network than for the normal read. - - * Fixed a bug in Http.weather that would cause an ugly error - message for a command like "weather hell". - - * Added the number of strings to the Fun.object output. - - * Fixed bug in RSS.configure; no aliases could be added. - - * Changed Alias.freeze to Alias.lock. - - * Fixed sorting in Status' uptime database. - - * Updated the Gameknot tests for expired games, and updated the - Gameknot plugin to handle such links in its snarfer. - - * Added a 'server' attribute to Irc objects to unify the way to - access such information. - - * Added revision command for finding out the revision of the files - in a running bot; also added __revision__ strings so CVS would be - happy to keep such information for us :) - - * Fixed bug #848475 -- bad error message from regexp-expecting - commands. - - * Stopped listing the plugin dispatcher command in the list of - commands for that plugin. - - * Fixed bug in Gameknot.gkstats when retrieving the stats for - users who haven't yet played a game. - - * Added a numUsers() method to ircdb.UsersDB (ircdb.users). - -2003-11-18 Jeremy Fincher <jemfinch@users.sf.net> - - * Changed commands so that plugins no longer have to make sure - that their commands are unique within the bot. Ambiguous commands - will reply with an error message and instruct the user to - disambiguate the command by prefixing with the appropriate plugin - name.. Many commands that formerly contained the plugin name (or a - portion thereof) have had it removed, and many plugins have had - their names changed so prefixing a command with the plugin name is - less bulky. Rather than list each individual example, you can - read the plugin documentation posted at ***TODO*** - - * Renamed numerous plugins: OwnerCommands became Owner, - AdminCommands became Admin, ChannelCommands became Channel, - MiscCommands became Misc, UserCommands became User, URLSnarfer - became URL, Notes became Note, FunCommands became Fun, IMDB became - Movies, and Aliases became Alias. - - * Made aliases persistent across reloads/bot restarts. You should - probably change your botscripts not to add the aliases onStart, but - (assuming those aliases don't change) it should still work fine. - - * Added the ability for users to specify that their passwords - should be hashed on disk. - - * Added MoobotFactoids plugin for moobot-style factoids (which are - meant to mimic blootbot-style factoids). People used to - traditional IRC bot factoids plugins will probably find this - plugin more to their taste than Factoids. - - * Added Ebay plugin for snarfing eBay URLs as well as getting info on - certain auctions. - - * Added monitoring of occurrences of certain words on a per-user - basis, adding two new commands to ChannelDB (addword and - wordstats). - - * Added Bugzilla module for accessing various data in Bugzilla - pages. - - * Added QuoteGrabs module which allows people to grab interesting - quotes from other people and store them in the bot for later retrieval - (also optionally have the bot randomly snarf quotes). - - * Added a "change" command to change factoid values in the Factoids - plugin. - - * Added Dunno plugin as an optional replacement for the boring 'no - such command' response. - - * Changed FundB to allow accessing excuses, larts, and praises by - id. - - * Added substitutions for 'me' and 'my' in insult/praise/lart. - - * Added 'change' and 'old' commands for News. - - * Added ASPN Python Cookbook URL snarfer. - - * Moved karma out of ChannelDB and into its own Karma plugin. - - * Moved uptime-related commands to from FunDB to the Status plugin. - - * Renamed the Network.internic command to whois, since we can now fix - ambiguity by prefixing the plugin name. - - * Removed the "googlesite" function. - - * Removed "dictserver" command in favor of using the Configurable - framework with the Dict plugin instead. - - * Removed TwistedCommands plugin to the sandbox; the one command - it provided (dict) is now better provided in the Dict plugin. - - * Removed the Moobot plugin (the commands were moved to the Fun - plugin or dropped entirely). - - * Removed all example strings from plugins. To be replaced with an - automated process later. - - * Converted several plugins to the new Configurable plugin type - Plugins modified include Bugzilla, ChannelDB, Dict, Ebay, - Enforcer, Gameknot, Google, Python, Relay, and URL (formerly - URLSnarfer). - - * Changed ChannelDB database to use integer user ids instead of text - usernames. - - * Changed Http.geekquote to use multiline geekquotes (and removed - the option to do so, since it's now the default). - - * Added a --id switch to geekquote to pick a specific geekquote. - - * Changed most commands in News to require the 'news' capability. - - * Changed Relay.names output to show (and sort by) status in the - channel. - - * Removed 'relaycolor' command in favor of Configurable framework. - - * Added total memory usage to 'cpustats' output for several *nix - platforms. - - * Removed the total percentage of CPU time from 'cpustats'. Not - only was it inaccurate, but we needed the room for memory stats. - - * Changed Topic.shuffle to ensure that the topic is actually - shuffled. - - * Changed all commands which take an index (various Topic and - Factoids commands) to index from 1 instead of 0. - - * Fixed several bugs in Unix.spell whereby the bot could be - frozen. - - * Changed the name of the "bug" command in the AdminCommands - plugin to "reportbug" instead. - - * Added QUIT stat-keeping to ChannelDB. - - * Removed the OwnerCommands.say command; it wasn't useful enough, - and is so easily written that anyone can have it back if they want - it. - - * Changed OwnerCommands.load (and reload) to be case-insensitive, - so "load funcommands" works just as well as "load FunCommands". - - * Changed the keyword parameter "needed" to privmsgs.getArgs to be - "required" instead. It just sounds better, works with "optional" - better, and we won't get an opportunity later to change it. - - * Updated IrcObjectProxy.reply to allow a "notice" boolean keyword - to determine whether or not to reply via a notice. - - * Added privmsgs.urlSnarfer, a wrapper around snarfer methods that - handles both the threading and the limiting of replies so loops - between two snarfing bots can't happen. - - * Added structures.PersistentDictionary for dictionaries that - should be saved to a file in repr()ed form. - - * Added structures.TwoWayDictionary for dictionaries that should - map keys to values and vice versa. - - * Added a curry function to fix.py for doing currying (if you - don't know what it is, don't worry about it :)) - - * Added utils.depluralize to do the opposite of utils.pluralize. - - * Added utils.safeEval for safe evaluation of Python data - structures (lists, dictionaries, tuples, numbers, strings, etc., - but no operations on them). - - * Added utils.saltHash for handling the hashing of passwords with - a salt. - - * Added plugins.standardSubstitute to do standard substitutions - for things like $who, $nick, $channel, etc. - - * Added plugins.Configurable, a plugin mixin that allows easy - specification and persistence of configurable data on a global and - per-channel basis. - - * Fixed plugins.ChannelDBHandler (and added plugins.DBHandler) to - be threadsafe, so threaded plugins could still use a database, and - non-threaded database-using plugins could still receive the - results of a threaded command. - - * Removed ircutils.privmsgPayload and ircutils.shrinkList, both of - which existed prior to the addition of more, and aren't needed - anymore. - - -2003-10-12 Jeremy Fincher <jemfinch@users.sf.net> - - * Version 0.73.1! - - * Fixed a bug in Math.{calc,rpn} where certain functions - ("degrees" in particular) that didn't like complex arguments would - fail on numbers on which they shouldn't. - - * Added an optional "key" argument to ChannelCommands.cycle. - - * Fixed bolding in supybot-wizard.py. - - * Fixed handling of the secure flag by ircdb.IrcUser.setAuth; - previously it didn't prevent someone with an unmatched hostmask - from identifying. - - * Fixed imports in the DCC plugin. - - * Fixed a bug where the bot would not reply to nick-addressed - messages on a channel if its nick wasn't entirely lowercased. - - * Fixed the Relay plugin to relay topic changes; an oversight not - caught earlier because supybot has for a long time managed our - topics. - - * Fixed a bug in the Services plugin where the bot would ghost - itself if its nick didn't match in case the nick given. - - * Added the ability for PrivmsgCommandAndRegexp to have regexps - that are called *after* callbacks.addressed has been called on the - message -- see ChannelDB.{increase,decrease}Karma for an example. - - * Fixed bug in supybot-wizard.py where plugins without configure - functions would raise an uncaught exception. - - * Fixed debincoming to work since the removal of baseplugin; it - was missing an import. - - * Fixed MiscCommands.doPrivmsg to send an IrcObjectProxyRegexp to - the replyWhenNotCommand function. - - * Fixed debversion to display the correct output when no matching - packages were found. - - * Fixed ChannelDB to import conf; karma didn't work otherwise. - - * Fixed a bug in the Enforcer plugin that would cause the bot to - ban everyone from the channel whenever ChanServ deopped someone. - - * Changed the "whois" command in the Network plugin to "internic" - instead. - -2003-10-05 Jeremy Fincher <jemfinch@users.sf.net> - - * Version 0.73.0! - - * Added the News plugin, news handling for channels. - - * Changed the initial character of anti capabilities to '-' - instead of '!'. '!' can be the initial character in a channel - name, and so any command using getChannel and accepting a - capability as its first argument (several in ChannelCommands) will - have difficulties (the channel then *must* be specified since - getChannel will consider !capability to be a channel name). Note - that this means you'll need to either remove and re-create or edit - your config files to change ! to - in capabilities. - - * Removed the "cvsup" command; it's been useless since we had a - global install, and can only serve to confuse. - - * Added a "private" command to MiscCommands to allow users to - specify that a response should be made in private. - - * Added a "secure" flag to user database records that *requires* - that one of the user's hostmasks match if the user is to be - recognized. This flag may be set with the "setsecure" command. - - * Added a convert command to the Math plugin. More conversions - are necessary, if anyone's interested in doing it. The available - units are available via the "units" command. - - * Fixed the pydoc command to allow access to standard Python - modules that are shared libraries rather than pure Python code. - - * Added a "Python" plugin and moved FunCommands.{pydoc,zen} to - it. - - * Fixed the supybot- scripts to use optparse so they now - accept many command line options (but most importantly, the --help - option :)) - - * Added a debincoming command to the Debian plugin; it searches - the available packages at http://incoming.debian.org/ - - * Moved the "bug" command from MiscCommands to AdminCommands in - order to prevent possible abuse. - - * Changed ChannelDB.seen to default to using nicks; a --user - option can be passed to use the old behavior. Note that this - means you'll have to update your ChannelDB database; use this - SQL statement to do so: - CREATE TABLE nick_seen ( - name TEXT UNIQUE ON CONFLICT REPLACE, - last_seen TIMESTAMP, - last_msg TEXT - ); diff --git a/RELNOTES b/RELNOTES deleted file mode 100644 index fd4647142..000000000 --- a/RELNOTES +++ /dev/null @@ -1,435 +0,0 @@ -Version 0.83.5 - -The minimum supported Python version has been bumped to 2.6. - -utils.str.perlVariableSubstitute is deprecated in favor of using Python's -string.Template directly. perlVariableSubstitute will be removed in a future -release. - -Factoids' config variable supybot.plugins.Factoids.factoidPrefix has been -replaced by supybot.plugins.Factoids.format, which allows the user to -determine exactly how replies to Factoid queries are formatted. - -supybot-botchk no longer runs supybot inside an instance of /bin/sh. - - -Version 0.83.4.1 - -Simple bug-fix release for a couple changes that were introduced last minute -before the previous release. - -No incompatibilities. - - -Version 0.83.4 - -This release contains fixes for Python2.6 compability as well as a re-written -Google plugin which uses the AJAX API. The re-written plugin gained a -translate command and no longer needs an API key. - -ChannelLogger has a new config variable, supybot.plugins.ChannelLogger.enable, -which can be used on a per-channel basis to determine whether that channel is -logged. - -The RSS announce command has been restructured into the commands "announce -list", "announce remove", and "announce add" in order to simplify the -command's use. - -The supybot.directories.plugins config variable now determines its global -directory dynamically instead of adding the directory to the value. This -means values like '/usr/lib/python2.5/site-packages/supybot/plugins' can be -removed from the variable. This should help ease transitioning a Supybot -config from one Python release to another. - -Incompatibilities: -supybot.plugins.Google.safeSearch has been renamed to -supybot.plugins.Google.searchFilter - -supybot.plugins.Channel.banmask has been removed in favor of a new -supybot.protocols.irc.banmask config variable. This general config variable -is used by the various commands which would need to know what style of banmask -to use. - -Version 0.83.3 - -Overdue bug fix and Python2.5-compatible release. No significant changes to -worry about from the user perspective. - - -Version 0.83.2 - -Mainly bug fix release. The most noticeable change being a value of -'default' for supybot.drivers.module will use Socket instead of Twisted. - - -Version 0.83.1 - -No incompatibilities, just fixing an important bug with plugin loading. - - -Version 0.83.0 - -This far overdue release contains mostly bug-fixes. - -Incompatibilities: -Changed the prefixName keyword argument (which appears in various places -in callbacks.py and the reply-related irc methods) to prefixNick. - - -Version 0.83.0rc3 - -This release candidate contains mostly bug-fixes. - -Incompatibilities: -utils.changeFunctionName was moved to utils.python.changeFunctionName - - -Version 0.83.0rc2 - -This release candidate contains a few bug-fixes and some plugins we -forgot in the last RC. Otherwise, everything is compatible. - - -Version 0.83.0rc1 - -There have been some fairly significant changes since our last release. -This means that you should uninstall your previous version before -installing this version. - -First, plugins are now a directory of files rather than a single file. -This makes it much easier for an individual plugin to supply any -3rd-party modules it may depend on and resolves some bugs we had with -reloading plugins. supybot-plugin-create (nee supybot-newplugin) has -been updated to reflect this. A side effect of using a directory-based -plugin is that @load/@reload are now case-sensitive. "@load foo" is not -the same as "@load Foo". - -As part of the conversion to the new plugin format, some plugins were -broken up into more focused plugins. Also, not all of the plugins that -we used to ship are part of this release. Some we moved to the -supybot-plugins package and some others (which would be candidates for -supybot-plugins) have yet to be converted to the new format. - -Second, we've updated the scripts that ship with Supybot. As noted in -the previous section, supybot-newplugin is now named -supybot-plugin-create. We've also added the following scripts: - -supybot-botchk - Handy script for starting the bot and keeping it - running. Ideal for having cron automatically start the - bot. -supybot-plugin-doc - Generates documentation for the specified - plugin(s). Currently, the documentation is - generated using Structured TeXt so that it can - easily be uploaded to our website. -supybot-plugin-package - The beginning of a script to make a plugin - package which can be uploaded to our website - for general consumption. -supybot-test - Runs a plugin's test suite. - -Third, we've broken supybot.utils into focused sub-modules. There's no -longer a supybot.fix module and we now have the following modules: - -supybot.utils.file - utilities for dealing with files (e.g. the old - supybot.utils.transactionalFile is now - supybot.utils.file.AtomicFile) -supybot.utils.iter - utilities for dealing with iterables (all, any, - partition, groupBy, choice, etc) -supybot.utils.gen - general purpose utilities which are imported into - the supybot.utils namespace -supybot.utils.net - utilities for dealing with the network -supybot.utils.python - utilities for dealing with Python -supybot.utils.seq - utilities for dealing with sequences -supybot.utils.str - utilities for dealing with strings (including our - new format() function) -supybot.utils.structures - general purpose structures used in Supybot -supybot.utils.web - utilities for dealing with the web (used to be - supybot.webutils) - -Fourth, we've added source-nested plugins (using the class -callbacks.Commands). This allows you to group similar commands -together. Some examples are: - -Channel.{ban add,ban list,ban remove} -User.{hostmask add,hostmask list,hostmask remove} - -Fifth, we've removed the privmsgs module. All of the functionality -that was offered in that module is now available by using commands.wrap. -Use of this is documented at: -http://supybot.com/documentation/help/tutorial/wrap - -Sixth, we've renamed some plugin-related API changes. Some classes had -their names changed. The old names are still available for -backwards-compatibility. - -callbacks.Privmsg -> callbacks.Plugin -callbacks.PrivmsgCommandAndRegexp -> callbacks.PluginRegexp -callbacks.IrcObjectProxy -> callbacks.NestedCommandsIrcProxy - -callbacks.PrivmsgRegexp was removed since its functionality is covered -by setting using PluginRegexp. - -Also, the prototype for a plugin's __init__ method changed: - -def __init__(self): -> def __init__(self, irc): - -Remember to pass the irc object on when you call the parent class's -__init__ method. - - -Version 0.80.0 - -We *finally* hit 0.80.0! This release is completely compatible with -the last release candidate. - -An update to Babelfish may cause an error message to be displayed in -the console when the bot is first run. The error message should be -gone when the bot is restarted. - -We also have a new community website at http://www.supybot.com/ where -our users can submit their own plugins, view/download other people's -plugins and discuss all things Supybot-related. - - -Version 0.80.0rc3 - -Another bugfix release. This one was pretty important as it actually -makes supybot.database.plugins.channelSpecific work properly. - - -Version 0.80.0rc2 - -supybot.databases.plugins.channelSpecific.channel was renamed to -supybot.databases.plugins.channelSpecific.link. - -supybot.databases.plugins.channelSpecific.link.allow was added, which -determines whether a channel will allow other channels to link to its -database. - -Infobot is no longer deprecated and the following changes were made to -its config variables: -supybot.plugins.Infobot.answerUnaddressedQuestions was renamed to -supybot.plugins.Infobot.unaddressed.answerQuestions. -supybot.plugins.Infobot.snarfUnaddressedDefinitions was renamed to -supybot.plugins.Infobot.unaddressed.snarfDefinitions. -supybot.plugins.Infobot.unaddressed.replyExistingFactoid was added to -determine whether the bot will reply when someone attempts to create a -duplicate factoid. - - -Version 0.80.0pre6 - -Another bugfix release. No incompatibilities known. The only -registry change is that supybot.databases.users.hash has been -removed. - - -Version 0.80.0pre5 - -Completely bugfix release. No incompatibilies known. - - -Version 0.80.0pre4 - -Mainly a bug fix release. This will likely be the last release before -0.80.0final, but we're gonna let it stew for a couple weeks to attempt -to catch any lingering bugs. - -ansycoreDrivers is now deprecated in favor of socketDrivers or -twistedDrivers. - -supybot.databases.plugins.channelSpecific.channel is now a channelValue -so that you can link specific channels together (instead of all channels -being linked together). - -For those of you that use eval and/or exec, they have been removed from -the Owner plugin and are now in sandbox/Debug.py (which you'll have to -grab from CVS). - - -Version 0.80.0pre3 - -The database format for the Note plugin has changed to a flatfile -format; use tools/noteConvert.py to convert it to the new format. - -Ditto that for the URL database. - -FunDB is deprecated and will be removed at the next major release; -use tools/fundbConvert.py to convert your old FunDB databases to Lart -and Praise databases. - -If you had turned off supybot.databases.plugins.channelSpecific, your -non-channel-specific database files had gone directly into your data/ -directory. We had some problems with poor interactions between that -configuration variable and channel capabilities, though, so we -changed the implementation so that non-channel-specific databases are -considered databases of a single (configurable) channel (defaulting -to "#"). This will also help others who are converting from -channel-specific to non-channel-specific databases, but for you -who've already made the switch, you'll need to move your database -files again, from data/ to data/# (or whatever channel you might -change that variable to). - -supybot.channels doesn't exist anymore; now the only list of channels -to join is per-network, in supybot.networks.<network>.channels. - -We weren't serializing supybot.replies.* properly in older versions. -Now we are, but the old, improperly serialized versions won't work -properly. Remove from your configuration file all variables -beginning with "supybot.replies" before you start the bot. - -The URL database has been changed again, but it will use a different -filename so you shouldn't run into conflicts, just a newly-empty -database. - -We upgraded the SOAP stuff in others; you may do well to do a -setup.py install --clean this time around. - - -Version 0.80.0pre2 - -Many more bugs have been fixed. A few more plugins have been updated -to use our new-style database abstraction. If it seems like your -databases are suddenly empty, look for a new database file named -Plugin.dbtype.db. We've also added a few more configuration variables. - - -Version 0.80.0pre1 - -Tons of bugs fixed, many features and plugins added. Everything -should be entirely compatible; many more configuration variables have -been added. - - -Version 0.79.9999 - -Some more bugs fixed, added a few features and a couple configuration -variabless. This should hopefully be the last release before 0.80.0, -which will finally bring us to pure Beta status. - - -Version 0.79.999 - -Some bugs fixed, but the ones that were fixed were pretty big. This -is, of course, completely compatible with the last release. - - -Version 0.79.99 - -Many bugs fixed, thanks to the users who reported them. We're -getting asymptotically closer to 0.80.0 -- maybe this'll be the last -one, maybe we'll have to release an 0.79.999 -- either way, we're -getting close :) Check out the ChangeLog for the fixes and a few new -features. - - -Version 0.79.9 - -We've changed so much stuff in this release that we've given up on -users upgrading their configuration files for the new release. So -do a clean install (python2.3 setup.py install --clean), run the -wizard again, and kick some butt. - -(It's rumored that you can save most of your old configuration by -appending your new configuration at the end of your old configuration -and running supybot with that new configuration file. This, of -course, comes with no warranty or guarantee of utility -- try it if -you want, but backup your original configuration file!) - - -Version 0.77.2 - -This is a drop-in replacement for 0.77.1, with two exceptions. The -configuration variable formerly known as -"supybot.plugins.Services.password" is now known as -"supybot.plugins.Services.NickServ.password", due to the fact that -there might be different passwords for NickServ and ChanServ (and -ChanServ passwords are per-channel, whereas NickServ passwords are -global). If you're using the Services plugin, you'll need to make -this change in order to continue identifying with services. The -configuration variable formerly known as -"supybot.plugins.Babelfish.disabledLanguages" is now known as -"supybot.plugins.Babelfish.languages". The configuration variable now -accepts the languages that *will* be translated as opposed to ones -that are *not* translated. - -Tests and the developer sandbox are not longer delivered with our -release tarballs. If you're a developer and you want these, you -should either check out CVS or download one of our weekly CVS -snapshots, available at http://supybot.sourceforge.net/snapshots/ . - - -Version 0.77.1 - -This is a drop-in replacement for 0.77.0 -- no incompatibilities, to -out knowledge. Simply install over your old installation and restart -your bot :) - - -Version 0.77.0 - -Setup.py will automatically remove your old installations for you, no -need to worry about that yourself. - -Configuration has been *entirely* redone. Read the new -GETTING_STARTED document to see how to work with configuration -variables now. Your old botscripts from earlier versions *will not* -work with the new configuration method. We'd appreciate it if you'd -rerun the wizard in order for us to find any bugs that remain in it -before we officially declare ourselves Beta. Note also that because -of the new configuration method, the interface for plugins' configure -function has changed: there are no longer any onStart or afterConnect -arguments, so all configuration should be performed via the registry. - -Channel capabilities have been changed; rather than being -#channel.capability, they're now #channel,capability. It's a bit -uglier, we know, but dots can be valid in channel names, and we -needed the dot for handling plugin.command capabilities. -tools/ircdbConvert.py should update this for you. - -The on-disk format of the user/channel databases has changed to be far -more readable. A conversion utility is included, as mentioned before: -tools/ircdbConvert.py. Run this with no arguments to see the -directions for using it. - -Uh, we were just kidding about the upgrade script in 0.76.0 :) It'll -be a little while longer. We do have several little upgrade scripts, -though. - - -Version 0.76.1 - -Almost entirely bugfixes, just some minor (and some less minor) bugs -that need to get in before we really start hacking on the next -version. Should be *entirely* compatible with 0.76.0. - - -Version 0.76.0 - -Major bugfix release. A great number of bugs fixed. This is the last -release without an upgrade script. - -The only hiccup in the upgrade from 0.75.0 should be that you'll need -to update your botscript to reflect the removal of the debug module. -We'd rather you use supybot-wizard to generate a new botscript, of -course, but if you insist on modifying your existing botscript, take a -look at -<http://cvs.sourceforge.net/viewcvs.py/supybot/supybot/src/template.py?r1=1.20&r2=1.21> -to see what you need to do. - - -Version 0.75.0 - -Don't forget to reinstall (i.e., run "python setup.py install" as -root). Sometimes it even does good to remove the old installation; -$PYTHON/site-packages/supybot can be removed with no problems -whatsoever. - -You will need to re-run supybot-wizard and generate a new botscript. - -The Infobot plugin has been removed from this release; it's not ready -for prime time. If you're interested in getting it running (i.e., you -want full Infobot compatibility and aren't satisfied with either -MoobotFactoids or Factoids) then swing over to #supybot and we can -discuss the tests. We simply don't know enough about Infobot to make -sure our Infobot plugin is an exact replica, and need someone's help -with making the changes necessary for that. From fe00fbbfde810d7b9f980b223bccf39b6e76936f Mon Sep 17 00:00:00 2001 From: James Lu <james@overdrivenetworks.com> Date: Fri, 2 May 2025 22:13:26 -0700 Subject: [PATCH 69/69] Bump minimum Python version to 3.9 --- .github/workflows/test.yml | 21 --------------------- setup.py | 7 ++----- 2 files changed, 2 insertions(+), 26 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index be5947807..ee9bb0db2 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -48,27 +48,6 @@ jobs: with-opt-deps: true runs-on: ubuntu-22.04 - - python-version: "3.8" - with-opt-deps: true - runs-on: ubuntu-22.04 - - - python-version: "3.7" - with-opt-deps: true - runs-on: ubuntu-22.04 - - python-version: "3.7" - with-opt-deps: false - runs-on: ubuntu-22.04 - - python-version: "pypy-3.7" - with-opt-deps: false - runs-on: ubuntu-22.04 - - - python-version: "3.6" - with-opt-deps: false - runs-on: ubuntu-20.04 - - python-version: "pypy-3.6" - with-opt-deps: false - runs-on: ubuntu-20.04 - steps: - uses: actions/checkout@v2 - name: Set up Python ${{ matrix.python-version }} diff --git a/setup.py b/setup.py index 888cde1ef..1a8020df3 100644 --- a/setup.py +++ b/setup.py @@ -107,8 +107,8 @@ if version: fd.write(' pass\n') fd.close() -if sys.version_info < (3, 6, 0): - sys.stderr.write("Limnoria requires Python 3.6 or newer.") +if sys.version_info < (3, 9, 0): + sys.stderr.write("Limnoria requires Python 3.9 or newer.") sys.stderr.write(os.linesep) sys.exit(-1) @@ -201,9 +201,6 @@ setup( 'Operating System :: OS Independent', 'Operating System :: POSIX', 'Operating System :: Microsoft :: Windows', - 'Programming Language :: Python :: 3.6', - 'Programming Language :: Python :: 3.7', - 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', 'Programming Language :: Python :: 3.11',