├── .editorconfig ├── .mailmap ├── CONTRIBUTING.md ├── LICENSE.md ├── MANIFEST.in ├── Makefile ├── README.md ├── locales ├── __init__.py ├── de.po ├── fi.po ├── fr.po ├── fr.py ├── it.po ├── messages.pot └── ru.po ├── man ├── limnoria-adduser.1 ├── limnoria-botchk.1 ├── limnoria-plugin-create.1 ├── limnoria-plugin-doc.1 ├── limnoria-reset-password.1 ├── limnoria-test.1 ├── limnoria-wizard.1 ├── limnoria.1 ├── supybot-adduser.1 ├── supybot-botchk.1 ├── supybot-plugin-create.1 ├── supybot-plugin-doc.1 ├── supybot-reset-password.1 ├── supybot-test.1 ├── supybot-wizard.1 └── supybot.1 ├── plugins ├── Admin │ ├── README.rst │ ├── __init__.py │ ├── config.py │ ├── locales │ │ ├── de.po │ │ ├── fi.po │ │ ├── fr.po │ │ └── it.po │ ├── messages.pot │ ├── plugin.py │ └── test.py ├── Aka │ ├── README.rst │ ├── __init__.py │ ├── config.py │ ├── local │ │ └── __init__.py │ ├── locales │ │ ├── fi.po │ │ └── ru.po │ ├── messages.pot │ ├── plugin.py │ └── test.py ├── Alias │ ├── README.rst │ ├── __init__.py │ ├── config.py │ ├── locales │ │ ├── de.po │ │ ├── fi.po │ │ ├── fr.po │ │ ├── hu.po │ │ └── it.po │ ├── messages.pot │ ├── plugin.py │ └── test.py ├── Anonymous │ ├── README.rst │ ├── __init__.py │ ├── config.py │ ├── locales │ │ ├── de.po │ │ ├── fi.po │ │ ├── fr.po │ │ ├── hu.po │ │ ├── it.po │ │ └── ru.po │ ├── messages.pot │ ├── plugin.py │ └── test.py ├── AutoMode │ ├── README.rst │ ├── __init__.py │ ├── config.py │ ├── locales │ │ ├── de.po │ │ ├── fi.po │ │ ├── fr.po │ │ └── it.po │ ├── messages.pot │ ├── plugin.py │ └── test.py ├── Autocomplete │ ├── README.rst │ ├── __init__.py │ ├── config.py │ ├── local │ │ └── __init__.py │ ├── messages.pot │ ├── plugin.py │ └── test.py ├── BadWords │ ├── README.rst │ ├── __init__.py │ ├── config.py │ ├── locales │ │ ├── fi.po │ │ ├── fr.po │ │ └── it.po │ ├── messages.pot │ ├── plugin.py │ └── test.py ├── Channel │ ├── README.rst │ ├── __init__.py │ ├── config.py │ ├── locales │ │ ├── de.po │ │ ├── fi.po │ │ ├── fr.po │ │ ├── hu.po │ │ └── it.po │ ├── messages.pot │ ├── plugin.py │ └── test.py ├── ChannelLogger │ ├── README.rst │ ├── __init__.py │ ├── config.py │ ├── locales │ │ ├── fi.po │ │ ├── fr.po │ │ ├── hu.po │ │ └── it.po │ ├── messages.pot │ ├── plugin.py │ └── test.py ├── ChannelStats │ ├── README.rst │ ├── __init__.py │ ├── config.py │ ├── locales │ │ ├── fi.po │ │ ├── fr.po │ │ └── it.po │ ├── messages.pot │ ├── plugin.py │ └── test.py ├── Conditional │ ├── README.rst │ ├── __init__.py │ ├── config.py │ ├── local │ │ └── __init__.py │ ├── locales │ │ ├── fi.po │ │ ├── fr.po │ │ └── it.po │ ├── messages.pot │ ├── plugin.py │ └── test.py ├── Config │ ├── README.rst │ ├── __init__.py │ ├── config.py │ ├── locales │ │ ├── de.po │ │ ├── fi.po │ │ ├── fr.po │ │ ├── hu.po │ │ └── it.po │ ├── messages.pot │ ├── plugin.py │ └── test.py ├── Ctcp │ ├── README.rst │ ├── __init__.py │ ├── config.py │ ├── locales │ │ ├── de.po │ │ ├── fi.po │ │ ├── fr.po │ │ ├── hu.po │ │ └── it.po │ ├── messages.pot │ ├── plugin.py │ └── test.py ├── DDG │ ├── README.rst │ ├── __init__.py │ ├── config.py │ ├── local │ │ └── __init__.py │ ├── messages.pot │ ├── parser.py │ ├── plugin.py │ └── test.py ├── Debug │ ├── README.rst │ ├── __init__.py │ ├── config.py │ ├── messages.pot │ ├── plugin.py │ └── test.py ├── Dict │ ├── README.rst │ ├── __init__.py │ ├── config.py │ ├── local │ │ ├── __init__.py │ │ └── dictclient.py │ ├── locales │ │ ├── fi.po │ │ ├── fr.po │ │ └── it.po │ ├── messages.pot │ ├── plugin.py │ └── test.py ├── Dunno │ ├── README.rst │ ├── __init__.py │ ├── config.py │ ├── locales │ │ ├── de.po │ │ ├── fi.po │ │ ├── fr.po │ │ └── it.po │ ├── messages.pot │ ├── plugin.py │ └── test.py ├── Factoids │ ├── README.rst │ ├── __init__.py │ ├── config.py │ ├── locales │ │ ├── fi.po │ │ ├── fr.po │ │ └── it.po │ ├── messages.pot │ ├── plugin.py │ └── test.py ├── Fediverse │ ├── README.rst │ ├── __init__.py │ ├── activitypub.py │ ├── config.py │ ├── local │ │ └── __init__.py │ ├── messages.pot │ ├── plugin.py │ ├── test.py │ ├── test_data.py │ └── utils.py ├── Filter │ ├── README.rst │ ├── __init__.py │ ├── config.py │ ├── locales │ │ ├── fi.po │ │ ├── fr.po │ │ └── it.po │ ├── messages.pot │ ├── plugin.py │ └── test.py ├── Format │ ├── README.rst │ ├── __init__.py │ ├── config.py │ ├── locales │ │ ├── fi.po │ │ ├── fr.po │ │ └── it.po │ ├── messages.pot │ ├── plugin.py │ └── test.py ├── GPG │ ├── README.rst │ ├── __init__.py │ ├── config.py │ ├── local │ │ └── __init__.py │ ├── messages.pot │ ├── plugin.py │ └── test.py ├── Games │ ├── README.rst │ ├── __init__.py │ ├── config.py │ ├── locales │ │ ├── de.po │ │ ├── fi.po │ │ ├── fr.po │ │ └── it.po │ ├── messages.pot │ ├── plugin.py │ └── test.py ├── Geography │ ├── README.md │ ├── __init__.py │ ├── common.py │ ├── config.py │ ├── local │ │ └── __init__.py │ ├── messages.pot │ ├── nominatim.py │ ├── plugin.py │ ├── test.py │ └── wikidata.py ├── Google │ ├── README.rst │ ├── __init__.py │ ├── config.py │ ├── locales │ │ ├── fi.po │ │ ├── fr.po │ │ └── it.po │ ├── messages.pot │ ├── plugin.py │ └── test.py ├── Hashes │ ├── README.rst │ ├── __init__.py │ ├── config.py │ ├── messages.pot │ ├── plugin.py │ └── test.py ├── Herald │ ├── README.rst │ ├── __init__.py │ ├── config.py │ ├── locales │ │ ├── fi.po │ │ ├── fr.po │ │ └── it.po │ ├── messages.pot │ ├── plugin.py │ └── test.py ├── Internet │ ├── README.rst │ ├── __init__.py │ ├── config.py │ ├── locales │ │ ├── fi.po │ │ ├── fr.po │ │ └── it.po │ ├── messages.pot │ ├── plugin.py │ └── test.py ├── Karma │ ├── README.rst │ ├── __init__.py │ ├── config.py │ ├── locales │ │ ├── fi.po │ │ ├── fr.po │ │ └── it.po │ ├── messages.pot │ ├── plugin.py │ └── test.py ├── Lart │ ├── README.rst │ ├── __init__.py │ ├── config.py │ ├── locales │ │ ├── fi.po │ │ ├── fr.po │ │ └── it.po │ ├── messages.pot │ ├── plugin.py │ └── test.py ├── Later │ ├── README.rst │ ├── __init__.py │ ├── config.py │ ├── locales │ │ ├── de.po │ │ ├── fi.po │ │ ├── fr.po │ │ └── it.po │ ├── messages.pot │ ├── plugin.py │ └── test.py ├── Limiter │ ├── README.rst │ ├── __init__.py │ ├── config.py │ ├── locales │ │ ├── fi.po │ │ ├── fr.po │ │ ├── hu.po │ │ └── it.po │ ├── messages.pot │ ├── plugin.py │ └── test.py ├── LogToIrc │ ├── README.rst │ ├── __init__.py │ ├── config.py │ ├── handler.py │ ├── messages.pot │ ├── plugin.py │ └── test.py ├── Math │ ├── README.rst │ ├── __init__.py │ ├── config.py │ ├── local │ │ ├── __init__.py │ │ └── convertcore.py │ ├── locales │ │ ├── fi.po │ │ ├── fr.po │ │ ├── hu.po │ │ └── it.po │ ├── messages.pot │ ├── plugin.py │ └── test.py ├── MessageParser │ ├── README.rst │ ├── __init__.py │ ├── config.py │ ├── local │ │ └── __init__.py │ ├── locales │ │ ├── fi.po │ │ ├── fr.po │ │ └── it.po │ ├── messages.pot │ ├── plugin.py │ └── test.py ├── Misc │ ├── README.rst │ ├── __init__.py │ ├── config.py │ ├── locales │ │ ├── de.po │ │ ├── fi.po │ │ ├── fr.po │ │ ├── hu.po │ │ └── it.po │ ├── messages.pot │ ├── plugin.py │ └── test.py ├── MoobotFactoids │ ├── README.rst │ ├── __init__.py │ ├── config.py │ ├── locales │ │ ├── fi.po │ │ ├── fr.po │ │ └── it.po │ ├── messages.pot │ ├── plugin.py │ └── test.py ├── Network │ ├── README.rst │ ├── __init__.py │ ├── config.py │ ├── locales │ │ ├── de.po │ │ ├── fi.po │ │ ├── fr.po │ │ └── it.po │ ├── messages.pot │ ├── plugin.py │ └── test.py ├── News │ ├── README.rst │ ├── __init__.py │ ├── config.py │ ├── locales │ │ ├── fi.po │ │ ├── fr.po │ │ └── it.po │ ├── messages.pot │ ├── plugin.py │ └── test.py ├── NickAuth │ ├── README.rst │ ├── __init__.py │ ├── config.py │ ├── local │ │ └── __init__.py │ ├── locales │ │ ├── de.po │ │ ├── fi.po │ │ └── ru.po │ ├── messages.pot │ ├── plugin.py │ └── test.py ├── NickCapture │ ├── README.rst │ ├── __init__.py │ ├── config.py │ ├── locales │ │ ├── de.po │ │ ├── fi.po │ │ ├── fr.po │ │ └── it.po │ ├── messages.pot │ ├── plugin.py │ └── test.py ├── Nickometer │ ├── README.rst │ ├── __init__.py │ ├── config.py │ ├── locales │ │ ├── fi.po │ │ ├── fr.po │ │ └── it.po │ ├── messages.pot │ ├── plugin.py │ └── test.py ├── Note │ ├── README.rst │ ├── __init__.py │ ├── config.py │ ├── locales │ │ ├── fi.po │ │ ├── fr.po │ │ └── it.po │ ├── messages.pot │ ├── plugin.py │ └── test.py ├── Owner │ ├── README.rst │ ├── __init__.py │ ├── config.py │ ├── locales │ │ ├── de.po │ │ ├── fi.po │ │ ├── fr.po │ │ ├── hu.po │ │ └── it.po │ ├── messages.pot │ ├── plugin.py │ └── test.py ├── Plugin │ ├── README.rst │ ├── __init__.py │ ├── config.py │ ├── locales │ │ ├── de.po │ │ ├── fi.po │ │ ├── fr.po │ │ └── it.po │ ├── messages.pot │ ├── plugin.py │ └── test.py ├── PluginDownloader │ ├── README.rst │ ├── __init__.py │ ├── config.py │ ├── local │ │ └── __init__.py │ ├── locales │ │ ├── de.po │ │ ├── fi.po │ │ ├── fr.po │ │ ├── it.po │ │ └── ru.po │ ├── messages.pot │ ├── plugin.py │ └── test.py ├── Poll │ ├── README.rst │ ├── __init__.py │ ├── config.py │ ├── local │ │ └── __init__.py │ ├── messages.pot │ ├── plugin.py │ └── test.py ├── Praise │ ├── README.rst │ ├── __init__.py │ ├── config.py │ ├── locales │ │ ├── fi.po │ │ ├── fr.po │ │ └── it.po │ ├── messages.pot │ ├── plugin.py │ └── test.py ├── Protector │ ├── README.rst │ ├── __init__.py │ ├── config.py │ ├── locales │ │ ├── fi.po │ │ ├── fr.po │ │ └── it.po │ ├── messages.pot │ ├── plugin.py │ └── test.py ├── Quote │ ├── README.rst │ ├── __init__.py │ ├── config.py │ ├── locales │ │ ├── fi.po │ │ ├── fr.po │ │ └── it.po │ ├── messages.pot │ ├── plugin.py │ └── test.py ├── QuoteGrabs │ ├── README.rst │ ├── __init__.py │ ├── config.py │ ├── locales │ │ ├── fi.po │ │ ├── fr.po │ │ └── it.po │ ├── messages.pot │ ├── plugin.py │ └── test.py ├── RSS │ ├── README.rst │ ├── __init__.py │ ├── config.py │ ├── locales │ │ ├── de.po │ │ ├── fi.po │ │ ├── fr.po │ │ ├── hu.po │ │ └── it.po │ ├── messages.pot │ ├── plugin.py │ └── test.py ├── Relay │ ├── README.rst │ ├── __init__.py │ ├── config.py │ ├── locales │ │ ├── fi.po │ │ ├── fr.po │ │ └── it.po │ ├── messages.pot │ ├── plugin.py │ └── test.py ├── Reply │ ├── README.rst │ ├── __init__.py │ ├── config.py │ ├── locales │ │ ├── de.po │ │ ├── fi.po │ │ ├── fr.po │ │ ├── hu.po │ │ └── it.po │ ├── messages.pot │ ├── plugin.py │ └── test.py ├── Scheduler │ ├── README.rst │ ├── __init__.py │ ├── config.py │ ├── locales │ │ ├── fi.po │ │ ├── fr.po │ │ └── it.po │ ├── messages.pot │ ├── plugin.py │ └── test.py ├── SedRegex │ ├── README.rst │ ├── __init__.py │ ├── config.py │ ├── constants.py │ ├── local │ │ └── __init__.py │ ├── messages.pot │ ├── plugin.py │ └── test.py ├── Seen │ ├── README.rst │ ├── __init__.py │ ├── config.py │ ├── locales │ │ ├── de.po │ │ ├── fi.po │ │ ├── fr.po │ │ ├── it.po │ │ └── ru.po │ ├── messages.pot │ ├── plugin.py │ └── test.py ├── Services │ ├── README.rst │ ├── __init__.py │ ├── config.py │ ├── locales │ │ ├── de.po │ │ ├── fi.po │ │ ├── fr.po │ │ └── it.po │ ├── messages.pot │ ├── plugin.py │ └── test.py ├── ShrinkUrl │ ├── README.rst │ ├── __init__.py │ ├── config.py │ ├── locales │ │ ├── fi.po │ │ ├── fr.po │ │ └── it.po │ ├── messages.pot │ ├── plugin.py │ └── test.py ├── Status │ ├── README.rst │ ├── __init__.py │ ├── config.py │ ├── locales │ │ ├── de.po │ │ ├── fi.po │ │ ├── fr.po │ │ └── it.po │ ├── messages.pot │ ├── plugin.py │ └── test.py ├── String │ ├── README.rst │ ├── __init__.py │ ├── config.py │ ├── locales │ │ ├── fi.po │ │ ├── fr.po │ │ └── it.po │ ├── messages.pot │ ├── plugin.py │ └── test.py ├── Success │ ├── README.rst │ ├── __init__.py │ ├── config.py │ ├── locales │ │ ├── fi.po │ │ ├── fr.po │ │ └── it.po │ ├── messages.pot │ ├── plugin.py │ └── test.py ├── Time │ ├── README.rst │ ├── __init__.py │ ├── config.py │ ├── local │ │ └── __init__.py │ ├── locales │ │ ├── de.po │ │ ├── fi.po │ │ ├── fr.po │ │ ├── hu.po │ │ └── it.po │ ├── messages.pot │ ├── plugin.py │ └── test.py ├── Todo │ ├── README.rst │ ├── __init__.py │ ├── config.py │ ├── locales │ │ ├── de.po │ │ ├── fi.po │ │ ├── fr.po │ │ ├── it.po │ │ └── ru.po │ ├── messages.pot │ ├── plugin.py │ └── test.py ├── Topic │ ├── README.rst │ ├── __init__.py │ ├── config.py │ ├── locales │ │ ├── fi.po │ │ ├── fr.po │ │ └── it.po │ ├── messages.pot │ ├── plugin.py │ └── test.py ├── URL │ ├── README.rst │ ├── __init__.py │ ├── config.py │ ├── locales │ │ ├── fi.po │ │ ├── fr.po │ │ └── it.po │ ├── messages.pot │ ├── plugin.py │ └── test.py ├── Unix │ ├── README.rst │ ├── __init__.py │ ├── config.py │ ├── locales │ │ ├── fi.po │ │ ├── fr.po │ │ └── it.po │ ├── messages.pot │ ├── plugin.py │ └── test.py ├── User │ ├── README.rst │ ├── __init__.py │ ├── config.py │ ├── locales │ │ ├── de.po │ │ ├── fi.po │ │ ├── fr.po │ │ ├── hu.po │ │ └── it.po │ ├── messages.pot │ ├── plugin.py │ └── test.py ├── Utilities │ ├── README.rst │ ├── __init__.py │ ├── config.py │ ├── locales │ │ ├── de.po │ │ ├── fi.po │ │ ├── fr.po │ │ └── it.po │ ├── messages.pot │ ├── plugin.py │ └── test.py ├── Web │ ├── README.rst │ ├── __init__.py │ ├── config.py │ ├── locales │ │ ├── de.po │ │ ├── fi.po │ │ ├── fr.po │ │ └── it.po │ ├── messages.pot │ ├── plugin.py │ └── test.py ├── __init__.py └── messages.pot ├── pyproject.toml ├── requirements.txt ├── setup.py ├── src ├── __init__.py ├── ansi.py ├── callbacks.py ├── cdb.py ├── commands.py ├── conf.py ├── dbi.py ├── drivers │ ├── Socket.py │ └── __init__.py ├── dynamicScope.py ├── gpg.py ├── httpserver.py ├── i18n.py ├── ircdb.py ├── irclib.py ├── ircmsgs.py ├── ircutils.py ├── locales ├── log.py ├── plugin.py ├── plugins ├── questions.py ├── registry.py ├── schedule.py ├── scripts │ ├── __init__.py │ ├── limnoria.py │ ├── limnoria_adduser.py │ ├── limnoria_botchk.py │ ├── limnoria_plugin_create.py │ ├── limnoria_plugin_doc.py │ ├── limnoria_reset_password.py │ ├── limnoria_test.py │ └── limnoria_wizard.py ├── setup.py ├── shlex.py ├── test.py ├── unpreserve.py ├── utils │ ├── __init__.py │ ├── crypt.py │ ├── error.py │ ├── file.py │ ├── gen.py │ ├── iter.py │ ├── math_evaluator.py │ ├── minisix.py │ ├── net.py │ ├── python.py │ ├── seq.py │ ├── str.py │ ├── structures.py │ ├── time.py │ ├── transaction.py │ └── web.py └── world.py ├── supybot └── test ├── __init__.py ├── messages.pot ├── test.py ├── test_callbacks.py ├── test_commands.py ├── test_conf.py ├── test_drivers.py ├── test_dynamicScope.py ├── test_firewall.py ├── test_format.py ├── test_i18n.py ├── test_ircdb.py ├── test_irclib.py ├── test_ircmsgs.py ├── test_ircutils.py ├── test_misc.py ├── test_plugin.py ├── test_plugin_create.py ├── test_plugins.py ├── test_registry.py ├── test_schedule.py ├── test_standardSubstitute.py ├── test_utils.py └── test_yn.py /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | insert_final_newline = true 5 | indent_style = space 6 | 7 | [*.py] 8 | indent_size = 4 9 | max_line_length = 79 10 | -------------------------------------------------------------------------------- /.mailmap: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | Daniel Folkinshteyn Daniel F 15 | Daniel Folkinshteyn nanotube 16 | James Lu 17 | James Lu 18 | James Lu 19 | James Lu 20 | James McCoy 21 | Ken Spencer Iota Spencer 22 | Mikaela Suomalainen Mika Suomalainen 23 | Mikaela Suomalainen Mika Suomalainen 24 | Mikaela Suomalainen Mika Suomalainen 25 | Mikaela Suomalainen Mika Suomalainen 26 | Mikaela Suomalainen Mikaela Suomalainen 27 | Tannn3r 28 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing to Limnoria 2 | 3 | ## Guidelines 4 | 5 | Follow the [Style Guidelines]. 6 | 7 | When adding a string that will be shown on IRC, always internationalize 8 | it (wrap it in a call to `_()`). 9 | When making a trivial change to an internationalized string that does not 10 | affect the meaning of the string (typo fix, etc.), please update the 11 | `msgid` entry in localization file. It helps preserve the translation 12 | without the translator having to review it. 13 | 14 | Last rule: you shouldn't add a mandatory dependency. Limnoria does not 15 | come with any (besides Python), so please try to keep all dependencies 16 | optional. 17 | 18 | [Style Guidelines]:https://docs.limnoria.net/develop/style.html 19 | 20 | ## Sending patches 21 | 22 | Don't fear that you spam Limnoria by sending many pull requests. According 23 | to @ProgVal, it's easier for them to accept pull requests than to 24 | cherry-pick everything manually. 25 | 26 | Having at least one test case in any non-trivial pull-request 27 | is very appreciated. 28 | 29 | See also [Contributing to Limnoria] at [Limnoria documentation]. 30 | 31 | [Contributing to Limnoria]:https://docs.limnoria.net/contribute/index.html 32 | 33 | [Limnoria documentation]:https://docs.limnoria.net/ 34 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | Copyright (c) 2002-2009 Jeremiah Fincher and others 2 | All rights reserved. 3 | 4 | Redistribution and use in source and binary forms, with or without 5 | modification, are permitted provided that the following conditions are met: 6 | 7 | * Redistributions of source code must retain the above copyright notice, 8 | this list of conditions, and the following disclaimer. 9 | * Redistributions in binary form must reproduce the above copyright notice, 10 | this list of conditions, and the following disclaimer in the 11 | documentation and/or other materials provided with the distribution. 12 | * Neither the name of the author of this software nor the name of 13 | contributors to this software may be used to endorse or promote products 14 | derived from this software without specific prior written permission. 15 | 16 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 17 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 18 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 19 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE 20 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 21 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 22 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 23 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 24 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 25 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 | 27 | Portions of the included source code are copyright by its original author(s) 28 | and remain subject to its associated license. 29 | -------------------------------------------------------------------------------- /MANIFEST.in: -------------------------------------------------------------------------------- 1 | include LICENSE.md 2 | include README.md 3 | include Makefile 4 | include .travis.yml 5 | include requirements.txt 6 | include test/*.py 7 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | PYTHON=`which python3` 2 | DESTDIR=/ 3 | PROJECT=limnoria 4 | 5 | all: 6 | @echo "make source - Create source package" 7 | @echo "make install - Install on local system" 8 | @echo "make buildrpm - Generate a rpm package" 9 | @echo "make builddeb_py2 - Generate a deb package for Python 2" 10 | @echo "make builddeb_py3 - Generate a deb package for Python 3" 11 | @echo "make clean - Get rid of scratch and byte files" 12 | 13 | test: 14 | PATH=./scripts/:${PATH} PYTHONPATH=. $(PYTHON) ./scripts/supybot-test test --plugins-dir=plugins/ 15 | 16 | source: 17 | $(PYTHON) setup.py sdist $(COMPILE) 18 | 19 | install: 20 | $(PYTHON) setup.py install --root $(DESTDIR) $(COMPILE) 21 | 22 | buildrpm: 23 | $(PYTHON) setup.py bdist_rpm 24 | 25 | builddeb_py2: 26 | cp debian/control.py2 debian/control 27 | debuild -us -uc 28 | rm debian/control 29 | 30 | builddeb_py3: 31 | cp debian/control.py3 debian/control 32 | debuild -us -uc 33 | rm debian/control 34 | 35 | clean: 36 | $(PYTHON) setup.py clean 37 | $(MAKE) -f $(CURDIR)/debian/rules clean 38 | rm -rf build/ MANIFEST 39 | find . -name '*.pyc' -delete 40 | rm debian/control 41 | 42 | .PHONY: test 43 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Limnoria is a multipurpose Python IRC bot, designed for flexibility and robustness, 2 | while being easy to install, set up, and maintain. 3 | 4 | It aims to be an adequate replacement for most existing IRC bots. 5 | It includes a very flexible and powerful 6 | [ACL system](https://docs.limnoria.net/use/capabilities.html) 7 | for controlling access to commands, 8 | an equality powerful 9 | [configuration system](https://docs.limnoria.net/use/configuration.html) 10 | to customize your bot, 11 | as well as more than 60 builtin [plugins](https://limnoria.net/plugins.xhtml) 12 | providing around 400 actual commands. 13 | 14 | There are also dozens of third-party [plugins](https://limnoria.net/plugins.xhtml) 15 | written by dozens of independent developers, 16 | and it is very easy to 17 | [write your own](https://docs.limnoria.net/develop/plugin_tutorial.html) 18 | with only basic knowledge of Python. 19 | 20 | It is the successor of 21 | [Supybot](https://sourceforge.net/projects/supybot/) 22 | since 2010 and provides many new features, but keeps full compatibility 23 | with existing configurations and plugins. 24 | 25 | # Support 26 | 27 | ## Documentation 28 | 29 | If this is your first install, there is an [install guide](https://docs.limnoria.net/en/latest/use/install.html). 30 | You will probably be pointed to it if you ask on IRC how to install 31 | Limnoria. 32 | TL;DR version: 33 | 34 | ``` 35 | sudo apt-get install python3 python3-pip python3-wheel 36 | pip3 install --user limnoria 37 | # You might need to add $HOME/.local/bin to your PATH 38 | supybot-wizard 39 | ``` 40 | 41 | There is extensive documentation at [docs.limnoria.net] and at 42 | [Gribble wiki]. We took the time to write it; you should take the time to 43 | read it. 44 | 45 | [docs.limnoria.net]:https://docs.limnoria.net/ 46 | [Gribble wiki]:https://sourceforge.net/p/gribble/wiki/Main_Page/ 47 | 48 | ## IRC channels 49 | 50 | ### In English 51 | 52 | If you have any trouble, feel free to swing by [#limnoria](ircs://irc.libera.chat:6697/#limnoria) on 53 | [Libera.Chat](https://libera.chat/) and ask questions. We'll be happy to help 54 | wherever we can. And by all means, if you find anything hard to 55 | understand or think you know of a better way to do something, 56 | *please* post it on the [issue tracker] so we can improve the bot! 57 | 58 | [issue tracker]:https://github.com/ProgVal/Limnoria/issues 59 | 60 | ### In Other languages 61 | 62 | Only in French at the moment, located at [#limnoria-fr on Libera.Chat](ircs://irc.libera.chat:6697/#libera-fr). 63 | 64 | -------------------------------------------------------------------------------- /locales/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progval/Limnoria/b8eda935b74e82cc66d81d55d742bddba35565b1/locales/__init__.py -------------------------------------------------------------------------------- /man/limnoria-adduser.1: -------------------------------------------------------------------------------- 1 | .\" Process this file with 2 | .\" groff -man -Tascii limnoria-adduser.1 3 | .\" 4 | .TH LIMNORIA-ADDUSER 1 "APRIL 2005" 5 | .SH NAME 6 | limnoria-adduser \- Adds a user to a Limnoria users.conf file 7 | .SH SYNOPSIS 8 | .B limnoria-adduser 9 | .RI [ options ] " users.conf 10 | .SH DESCRIPTION 11 | .B limnoria-adduser 12 | adds a user to the specified users.conf file. 13 | .SH OPTIONS 14 | .TP 15 | .B \-\^\-version 16 | Show version of program. 17 | .TP 18 | .BR \-h ", " \-\^\-help 19 | Show summary of options. 20 | .TP 21 | .BR \-u " NAME" "\fR,\fP \-\^\-username=" NAME 22 | Specifies the username to use for the new user. 23 | .TP 24 | .BR \-p " PASSWORD" "\fR,\fP \-\^\-password=" PASSWORD 25 | Specifies the password to use for the new user. 26 | .TP 27 | .BR \-c " CAPABILITY" "\fR,\fP \-\^\-capability=" CAPABILITY 28 | Capability the user should have; this option may be given 29 | multiple times. 30 | .SH "SEE ALSO" 31 | .IR python (1), 32 | .IR limnoria (1), 33 | .IR limnoria-test (1), 34 | .IR limnoria-botchk (1), 35 | .IR limnoria-wizard (1), 36 | .IR limnoria-plugin-doc (1), 37 | .IR limnoria-plugin-create (1) 38 | .SH AUTHOR 39 | This manual page was originally written by James McCoy 40 | . Permission is granted to copy, 41 | distribute and/or modify this document under the terms of the Limnoria 42 | license, a BSD-style license. 43 | -------------------------------------------------------------------------------- /man/limnoria-botchk.1: -------------------------------------------------------------------------------- 1 | .\" Process this file with 2 | .\" groff -man -Tascii limnoria-botchk.1 3 | .\" 4 | .TH LIMNORIA-BOTCHK 1 "APRIL 2005" 5 | .SH NAME 6 | limnoria-botchk \- A script to start Limnoria if it's not already running. 7 | .SH SYNOPSIS 8 | .B limnoria-botchk 9 | .RI [ options ] 10 | .SH DESCRIPTION 11 | .B limnoria-botchk 12 | is a script that will start Limnoria if it detects that one is not currently 13 | running. This can be useful for scheduling 14 | .IR limnoria (1) 15 | to run via 16 | .IR cron (8). 17 | .SH OPTIONS 18 | .TP 19 | .BR \-h ", " \-\^\-help 20 | Show summary of options. 21 | .TP 22 | .BR \-v ", " \-\^\-verbose 23 | Use verbose output when running the script. 24 | .TP 25 | .BI \-\^\-botdir= BOTDIR 26 | Determines which directory the bot be started in. 27 | .TP 28 | .BI \-\^\-pidfile= PIDFILE 29 | Specifies the name of the pidfile to look for. This should be relative 30 | to the given botdir. 31 | .TP 32 | .BI \-\^\-limnoria= LIMNORIA 33 | Specifies the location of 34 | .IR limnoria (1). 35 | If this is not given, it is assumed that 36 | .IR limnoria (1) 37 | is in the user's $PATH. 38 | .TP 39 | .BI \-\^\-conffile= CONFFILE 40 | Specifies the path to the bot's configuration file. This will be used 41 | when (re)starting the bot. 42 | .SH "SEE ALSO" 43 | .IR python (1), 44 | .IR limnoria (1), 45 | .IR limnoria-test (1), 46 | .IR limnoria-wizard (1), 47 | .IR limnoria-adduser (1), 48 | .IR limnoria-plugin-doc (1), 49 | .IR limnoria-plugin-create (1) 50 | .SH AUTHOR 51 | This manual page was originally written by James McCoy 52 | . Permission is granted to copy, 53 | distribute and/or modify this document under the terms of the Limnoria 54 | license, a BSD-style license. 55 | -------------------------------------------------------------------------------- /man/limnoria-plugin-create.1: -------------------------------------------------------------------------------- 1 | .\" Process this file with 2 | .\" groff -man -Tascii limnoria-plugin-create.1 3 | .\" 4 | .TH LIMNORIA-PLUGIN-CREATE 1 "APRIL 2005" 5 | .SH NAME 6 | limnoria-plugin-create \- A wizard for creating Limnoria plugins 7 | .SH SYNOPSIS 8 | .B limnoria-plugin-create 9 | .RI [ options ] 10 | .SH DESCRIPTION 11 | .B limnoria-plugin-create 12 | is a wizard that creates a template python source file for a new 13 | .IR limnoria (1) 14 | plugin. 15 | .SH OPTIONS 16 | .TP 17 | .B \-\^\-version 18 | Show version of program. 19 | .TP 20 | .BR \-h ", " \-\^\-help 21 | Show summary of options. 22 | .TP 23 | .BI \-n " NAME" "\fR,\fP \-\^\-name=" NAME 24 | Sets the name for the plugin. 25 | .TP 26 | .BR \-t ", " \-\^\-thread 27 | Makes the plugin threaded. 28 | .TP 29 | .BI \-\^\-real\-name= REALNAME 30 | Specify what real name the copyright is assigned to. 31 | .SH "SEE ALSO" 32 | .IR python (1), 33 | .IR limnoria (1), 34 | .IR limnoria-test (1), 35 | .IR limnoria-botchk (1), 36 | .IR limnoria-wizard (1), 37 | .IR limnoria-adduser (1), 38 | .IR limnoria-plugin-doc (1) 39 | .SH AUTHOR 40 | This manual page was originally written by James McCoy 41 | . Permission is granted to copy, 42 | distribute and/or modify this document under the terms of the Limnoria 43 | license, a BSD-style license. 44 | -------------------------------------------------------------------------------- /man/limnoria-plugin-doc.1: -------------------------------------------------------------------------------- 1 | .\" Process this file with 2 | .\" groff -man -Tascii limnoria-plugin-doc.1 3 | .\" 4 | .TH LIMNORIA-PLUGIN-DOC 1 "May 2009" 5 | .SH NAME 6 | limnoria-plugin-doc \- Generates the documentation for a Limnoria plugin 7 | .SH SYNOPSIS 8 | .B limnoria-plugin-doc 9 | .RI [ options ] 10 | .SH DESCRIPTION 11 | .B limnoria-plugin-doc 12 | is used to generate documentation (StructuredText or reStructuredText format) 13 | for a 14 | .IR limnoria (1) 15 | plugin. 16 | .SH OPTIONS 17 | .TP 18 | .B \-\^\-version 19 | Show version of program. 20 | .TP 21 | .BR \-h ", " \-\^\-help 22 | Show summary of options. 23 | .TP 24 | .BR \-c ", " \-\^\-clean 25 | Clean the various data/conf/log directories after generating the docs. 26 | .TP 27 | .BR \-o ", " \-\^\-output\-dir= \fIOUTPUTDIR 28 | Specifies the directory in which to write the documentation for the plugin. 29 | .TP 30 | .BR \-f ", " \-\^\-format= \fIFORMAT 31 | Specifies which output format to use. Choices are 'rst' or 'stx'. 32 | .TP 33 | .BI \-\^\-plugins\-dir= PLUGINSDIRS 34 | Looks in the given directory for plugins and generates documentation for all of 35 | them. 36 | .SH "SEE ALSO" 37 | .IR python (1), 38 | .IR limnoria (1), 39 | .IR limnoria-test (1), 40 | .IR limnoria-botchk (1), 41 | .IR limnoria-wizard (1), 42 | .IR limnoria-adduser (1), 43 | .IR limnoria-plugin-create (1) 44 | .SH AUTHOR 45 | This manual page was originally written by James McCoy 46 | . Permission is granted to copy, 47 | distribute and/or modify this document under the terms of the Limnoria 48 | license, a BSD-style license. 49 | -------------------------------------------------------------------------------- /man/limnoria-reset-password.1: -------------------------------------------------------------------------------- 1 | .\" Process this file with 2 | .\" groff -man -Tascii limnoria-reset-password.1 3 | .\" 4 | .TH LIMNORIA-RESET-PASSWORD 1 "JUNE 2022" 5 | .SH NAME 6 | limnoria-reset-password \- Changes a user's password in a Limnoria users.conf file 7 | .SH SYNOPSIS 8 | .B limnoria-reset-password 9 | .RI [ options ] " users.conf 10 | .SH DESCRIPTION 11 | .B limnoria-reset-password 12 | changes a user's password in a Limnoria users.conf file 13 | .SH OPTIONS 14 | .TP 15 | .B \-\^\-version 16 | Show version of program. 17 | .TP 18 | .BR \-h ", " \-\^\-help 19 | Show summary of options. 20 | .TP 21 | .BR \-u " NAME" "\fR,\fP \-\^\-username=" NAME 22 | Specifies the username to use for the new user. 23 | .TP 24 | .BR \-p " PASSWORD" "\fR,\fP \-\^\-password=" PASSWORD 25 | Specifies the new password to use for the new user. 26 | .SH "SEE ALSO" 27 | .IR python (1), 28 | .IR limnoria (1), 29 | .IR limnoria-adduser (1) 30 | .SH AUTHOR 31 | This manual page was originally written by Valentin Lorentz 32 | . Permission is granted to copy, 33 | distribute and/or modify this document under the terms of the Limnoria 34 | license, a BSD-style license. 35 | 36 | -------------------------------------------------------------------------------- /man/limnoria-test.1: -------------------------------------------------------------------------------- 1 | .\" Process this file with 2 | .\" groff -man -Tascii limnoria-test.1 3 | .\" 4 | .TH LIMNORIA-TEST 1 "OCTOBER 2005" 5 | .SH NAME 6 | limnoria-test \- Runs the test suite for a Limnoria plugin 7 | .SH SYNOPSIS 8 | .B limnoria-test 9 | .RI [ options ] " plugins 10 | .SH DESCRIPTION 11 | .B limnoria-test 12 | Runs the test suite for a Limnoria plugin 13 | .SH OPTIONS 14 | .TP 15 | .B \-\^\-version 16 | Show version of program. 17 | .TP 18 | .BR \-h ", " \-\^\-help 19 | Show summary of options. 20 | .TP 21 | .BR \-c ", " \-\^\-clean 22 | Cleans the various data/conf/logs directories before running tests. 23 | .TP 24 | .BR \-t " TIMEOUT" "\fR,\fP \-\^\-timeout=" TIMEOUT 25 | Specifies the timeout for tests to return responses. 26 | .TP 27 | .BR \-v ", " \-\^\-verbose 28 | Sets the verbose flag, logging extra information about each test that runs. 29 | .TP 30 | .BR \-\^\-no\-network 31 | Prevents the network-based tests from being run. 32 | .TP 33 | .BR \-\^\-trace 34 | Traces all calls made. Unless you're really in a pinch, you probably 35 | shouldn't do this; it results in copious amounts of output. 36 | .TP 37 | .BR "\fR,\fP \-\^\-plugins\-dir=" PLUGINSDIR 38 | Looks in the given directory for plugins and loads the tests for all of them. 39 | .SH "SEE ALSO" 40 | .IR python (1), 41 | .IR limnoria (1), 42 | .IR limnoria-botchk (1), 43 | .IR limnoria-wizard (1), 44 | .IR limnoria-adduser (1), 45 | .IR limnoria-plugin-doc (1), 46 | .IR limnoria-plugin-create (1) 47 | .SH AUTHOR 48 | This manual page was originally written by James McCoy 49 | . Permission is granted to copy, 50 | distribute and/or modify this document under the terms of the Limnoria 51 | license, a BSD-style license. 52 | -------------------------------------------------------------------------------- /man/limnoria-wizard.1: -------------------------------------------------------------------------------- 1 | .\" Process this file with 2 | .\" groff -man -Tascii limnoria-wizard.1 3 | .\" 4 | .TH LIMNORIA-WIZARD 1 "SEPTEMBER 2004" 5 | .SH NAME 6 | limnoria-wizard \- A wizard for creating Limnoria configuration files 7 | .SH SYNOPSIS 8 | .B limnoria-wizard 9 | .RI [ options ] 10 | .SH DESCRIPTION 11 | .B limnoria-wizard 12 | is an in-depth wizard that provides a nice user interface for creating 13 | configuration files for 14 | .IR limnoria (1). 15 | .SH OPTIONS 16 | .TP 17 | .B \-\^\-version 18 | Show version of program. 19 | .TP 20 | .BR \-h ", " \-\^\-help 21 | Show summary of options. 22 | .TP 23 | .B \-\^\-allow\-root 24 | Determines whether the wizard will be allowed to run as root. You do not 25 | want this. Do not do it. Even if you think you want it, you do not. 26 | .TP 27 | .B \-\^\-no\-network 28 | Determines whether the wizard will be allowed to run without a network 29 | connection. 30 | .SH "SEE ALSO" 31 | .IR python (1), 32 | .IR limnoria (1), 33 | .IR limnoria-test (1), 34 | .IR limnoria-botchk (1), 35 | .IR limnoria-adduser (1), 36 | .IR limnoria-plugin-doc (1), 37 | .IR limnoria-plugin-create (1) 38 | .SH AUTHOR 39 | This manual page was originally written by James McCoy 40 | . Permission is granted to copy, 41 | distribute and/or modify this document under the terms of the Limnoria 42 | license, a BSD-style license. 43 | -------------------------------------------------------------------------------- /man/limnoria.1: -------------------------------------------------------------------------------- 1 | .\" Process this file with 2 | .\" groff -man -Tascii limnoria.1 3 | .\" 4 | .TH LIMNORIA 1 "JULY 2009" 5 | .SH NAME 6 | limnoria - A robust and user friendly Python IRC bot 7 | .SH SYNOPSIS 8 | .B limnoria 9 | .RI [ options ] " configFile 10 | .SH DESCRIPTION 11 | .B Limnoria 12 | is a robust, user-friendly, and programmer-friendly Python IRC bot. 13 | It aims to be an adequate replacement for most existing IRC bots. It 14 | includes a very flexible and powerful ACL system for controlling access 15 | to commands, as well as more than 50 builtin plugins providing around 16 | 400 actual commands. 17 | .SH OPTIONS 18 | .TP 19 | .B \-\^\-version 20 | Show version of program. 21 | .TP 22 | .BR \-h ", " \-\^\-help 23 | Show summary of options. 24 | .TP 25 | .BR \-P ", " \-\^\-profile 26 | Enable profiling. 27 | .TP 28 | .BI \-n " NICK" "\fR,\fP \-\^\-nick=" NICK 29 | Nick the bot should use. 30 | .TP 31 | .BI \-u " USER" "\fR,\fP \-\^\-user=" USER 32 | Full username the bot should use. 33 | .TP 34 | .BI \-i " IDENT" "\fR,\fP \-\^\-ident=" IDENT 35 | Ident the bot should use. 36 | .TP 37 | .BR \-d ", " \-\^\-daemon 38 | Determines whether the bot will daemonize. This is a no-op on 39 | non-POSIX systems. 40 | .TP 41 | .B \-\^\-allow\-default\-owner 42 | Determines whether the bot will allow its defaultCapabilities not to 43 | include "\-owner", thus giving all users the owner capability by 44 | default. This is dumb, hence we require a command-line option to 45 | enable it. 46 | .TP 47 | .B \-\^\-allow\-root 48 | Determines whether the bot will be allowed to run as root. You do not 49 | want this. Do not do it. Even if you think you want it, you do not. 50 | .TP 51 | .B \-\^\-debug 52 | Determines whether some extra debugging stuff will be logged by this 53 | script. 54 | .SH "SEE ALSO" 55 | .IR python (1), 56 | .IR limnoria-test (1), 57 | .IR limnoria-botchk (1), 58 | .IR limnoria-wizard (1), 59 | .IR limnoria-adduser (1), 60 | .IR limnoria-plugin-doc (1), 61 | .IR limnoria-plugin-create (1) 62 | .SH AUTHOR 63 | This manual page was originally written by James McCoy 64 | . Permission is granted to copy, 65 | distribute and/or modify this document under the terms of the Limnoria 66 | license, a BSD-style license. 67 | -------------------------------------------------------------------------------- /man/supybot-adduser.1: -------------------------------------------------------------------------------- 1 | limnoria-adduser.1 -------------------------------------------------------------------------------- /man/supybot-botchk.1: -------------------------------------------------------------------------------- 1 | limnoria-botchk.1 -------------------------------------------------------------------------------- /man/supybot-plugin-create.1: -------------------------------------------------------------------------------- 1 | limnoria-plugin-create.1 -------------------------------------------------------------------------------- /man/supybot-plugin-doc.1: -------------------------------------------------------------------------------- 1 | limnoria-plugin-doc.1 -------------------------------------------------------------------------------- /man/supybot-reset-password.1: -------------------------------------------------------------------------------- 1 | limnoria-reset-password.1 -------------------------------------------------------------------------------- /man/supybot-test.1: -------------------------------------------------------------------------------- 1 | limnoria-test.1 -------------------------------------------------------------------------------- /man/supybot-wizard.1: -------------------------------------------------------------------------------- 1 | limnoria-wizard.1 -------------------------------------------------------------------------------- /man/supybot.1: -------------------------------------------------------------------------------- 1 | limnoria.1 -------------------------------------------------------------------------------- /plugins/Admin/config.py: -------------------------------------------------------------------------------- 1 | ### 2 | # Copyright (c) 2004-2005, Jeremiah Fincher 3 | # Copyright (c) 2010-2021, Valentin Lorentz 4 | # All rights reserved. 5 | # 6 | # Redistribution and use in source and binary forms, with or without 7 | # modification, are permitted provided that the following conditions are met: 8 | # 9 | # * Redistributions of source code must retain the above copyright notice, 10 | # this list of conditions, and the following disclaimer. 11 | # * Redistributions in binary form must reproduce the above copyright notice, 12 | # this list of conditions, and the following disclaimer in the 13 | # documentation and/or other materials provided with the distribution. 14 | # * Neither the name of the author of this software nor the name of 15 | # contributors to this software may be used to endorse or promote products 16 | # derived from this software without specific prior written consent. 17 | # 18 | # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 19 | # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20 | # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21 | # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 22 | # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 23 | # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 24 | # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 25 | # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 26 | # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 27 | # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 28 | # POSSIBILITY OF SUCH DAMAGE. 29 | ### 30 | 31 | 32 | import supybot.conf as conf 33 | import supybot.registry as registry 34 | from supybot.i18n import PluginInternationalization, internationalizeDocstring 35 | _ = PluginInternationalization('Admin') 36 | 37 | def configure(advanced): 38 | # This will be called by supybot to configure this module. advanced is 39 | # a bool that specifies whether the user identified themself as an advanced 40 | # user or not. You should effect your configuration by manipulating the 41 | # registry as appropriate. 42 | from supybot.questions import expect, anything, something, yn 43 | conf.registerPlugin('Admin', True) 44 | 45 | Admin = conf.registerPlugin('Admin') 46 | 47 | # vim:set shiftwidth=4 softtabstop=4 expandtab textwidth=79: 48 | -------------------------------------------------------------------------------- /plugins/Aka/local/__init__.py: -------------------------------------------------------------------------------- 1 | # Stub so local is a module, used for third-party modules 2 | -------------------------------------------------------------------------------- /plugins/AutoMode/test.py: -------------------------------------------------------------------------------- 1 | ### 2 | # Copyright (c) 2005, Jeremiah Fincher 3 | # Copyright (c) 2010-2021, Valentin Lorentz 4 | # All rights reserved. 5 | # 6 | # Redistribution and use in source and binary forms, with or without 7 | # modification, are permitted provided that the following conditions are met: 8 | # 9 | # * Redistributions of source code must retain the above copyright notice, 10 | # this list of conditions, and the following disclaimer. 11 | # * Redistributions in binary form must reproduce the above copyright notice, 12 | # this list of conditions, and the following disclaimer in the 13 | # documentation and/or other materials provided with the distribution. 14 | # * Neither the name of the author of this software nor the name of 15 | # contributors to this software may be used to endorse or promote products 16 | # derived from this software without specific prior written consent. 17 | # 18 | # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 19 | # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20 | # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21 | # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 22 | # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 23 | # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 24 | # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 25 | # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 26 | # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 27 | # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 28 | # POSSIBILITY OF SUCH DAMAGE. 29 | ### 30 | 31 | from supybot.test import * 32 | 33 | class AutoModeTestCase(PluginTestCase): 34 | plugins = ('AutoMode',) 35 | 36 | 37 | # vim:set shiftwidth=4 softtabstop=4 expandtab textwidth=79: 38 | -------------------------------------------------------------------------------- /plugins/Autocomplete/README.rst: -------------------------------------------------------------------------------- 1 | .. _plugin-Autocomplete: 2 | 3 | Documentation for the Autocomplete plugin for Supybot 4 | ===================================================== 5 | 6 | Purpose 7 | ------- 8 | 9 | Autocomplete: Provides command autocompletion for IRC clients that support it. 10 | 11 | This plugin implements an early draft of the IRCv3 autocompletion client tags. 12 | As this is not yet a released specification, it does nothing unless 13 | ``supybot.protocols.irc.experimentalExtensions`` is set to True (keep it set to 14 | False unless you know what you are doing). 15 | 16 | If you are interested in this feature, please contribute to 17 | `the discussion `_ 18 | 19 | Usage 20 | ----- 21 | 22 | Provides command completion for IRC clients that support it. 23 | 24 | .. _conf-Autocomplete: 25 | 26 | Configuration 27 | ------------- 28 | 29 | .. _conf-supybot.plugins.Autocomplete.enabled: 30 | 31 | 32 | supybot.plugins.Autocomplete.enabled 33 | This config variable defaults to "False", is network-specific, and is channel-specific. 34 | 35 | Whether the bot should reply to autocomplete requests from clients. 36 | 37 | .. _conf-supybot.plugins.Autocomplete.public: 38 | 39 | 40 | supybot.plugins.Autocomplete.public 41 | This config variable defaults to "True", is not network-specific, and is not channel-specific. 42 | 43 | Determines whether this plugin is publicly visible. 44 | 45 | -------------------------------------------------------------------------------- /plugins/Autocomplete/local/__init__.py: -------------------------------------------------------------------------------- 1 | # Stub so local is a module, used for third-party modules 2 | -------------------------------------------------------------------------------- /plugins/Autocomplete/messages.pot: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR ORGANIZATION 3 | # FIRST AUTHOR , YEAR. 4 | # 5 | msgid "" 6 | msgstr "" 7 | "Project-Id-Version: PACKAGE VERSION\n" 8 | "POT-Creation-Date: 2024-12-06 11:00+0100\n" 9 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 10 | "Last-Translator: FULL NAME \n" 11 | "Language-Team: LANGUAGE \n" 12 | "MIME-Version: 1.0\n" 13 | "Content-Type: text/plain; charset=UTF-8\n" 14 | "Content-Transfer-Encoding: 8bit\n" 15 | "Generated-By: pygettext.py 1.5\n" 16 | 17 | 18 | #: config.py:62 19 | msgid "" 20 | "Whether the bot should reply to autocomplete\n" 21 | " requests from clients." 22 | msgstr "" 23 | 24 | #: plugin.py:42 25 | #, docstring 26 | msgid "Takes a list of lists, and returns their longest common prefix." 27 | msgstr "" 28 | 29 | #: plugin.py:57 30 | #, docstring 31 | msgid "" 32 | "Returns the value of the +draft/autocomplete-response tag for the given\n" 33 | " +draft/autocomplete-request payload." 34 | msgstr "" 35 | 36 | #: plugin.py:101 37 | #, docstring 38 | msgid "Returns a list of commands starting with the normalized_payload." 39 | msgstr "" 40 | 41 | #: plugin.py:121 42 | #, docstring 43 | msgid "Provides command completion for IRC clients that support it." 44 | msgstr "" 45 | 46 | -------------------------------------------------------------------------------- /plugins/Conditional/local/__init__.py: -------------------------------------------------------------------------------- 1 | # Stub so local is a module, used for third-party modules 2 | -------------------------------------------------------------------------------- /plugins/Config/__init__.py: -------------------------------------------------------------------------------- 1 | ### 2 | # Copyright (c) 2004-2005, Jeremiah Fincher 3 | # Copyright (c) 2010-2021, Valentin Lorentz 4 | # All rights reserved. 5 | # 6 | # Redistribution and use in source and binary forms, with or without 7 | # modification, are permitted provided that the following conditions are met: 8 | # 9 | # * Redistributions of source code must retain the above copyright notice, 10 | # this list of conditions, and the following disclaimer. 11 | # * Redistributions in binary form must reproduce the above copyright notice, 12 | # this list of conditions, and the following disclaimer in the 13 | # documentation and/or other materials provided with the distribution. 14 | # * Neither the name of the author of this software nor the name of 15 | # contributors to this software may be used to endorse or promote products 16 | # derived from this software without specific prior written consent. 17 | # 18 | # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 19 | # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20 | # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21 | # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 22 | # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 23 | # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 24 | # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 25 | # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 26 | # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 27 | # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 28 | # POSSIBILITY OF SUCH DAMAGE. 29 | ### 30 | 31 | """ 32 | Handles configuration of the bot while it is running. 33 | """ 34 | 35 | import supybot 36 | import supybot.world as world 37 | 38 | # Use this for the version of this plugin. You may wish to put a CVS keyword 39 | # in here if you\'re keeping the plugin in CVS or some similar system. 40 | __version__ = "%%VERSION%%" 41 | 42 | __author__ = supybot.authors.jemfinch 43 | __maintainer__ = supybot.authors.limnoria_core 44 | 45 | # This is a dictionary mapping supybot.Author instances to lists of 46 | # contributions. 47 | __contributors__ = {} 48 | 49 | from . import config 50 | from . import plugin 51 | from importlib import reload 52 | reload(plugin) # In case we're being reloaded. 53 | 54 | if world.testing: 55 | from . import test 56 | 57 | Class = plugin.Class 58 | configure = config.configure 59 | -------------------------------------------------------------------------------- /plugins/Ctcp/README.rst: -------------------------------------------------------------------------------- 1 | .. _plugin-Ctcp: 2 | 3 | Documentation for the Ctcp plugin for Supybot 4 | ============================================= 5 | 6 | Purpose 7 | ------- 8 | 9 | Handles standard CTCP responses to PING, TIME, SOURCE, VERSION, USERINFO, 10 | and FINGER. 11 | 12 | Usage 13 | ----- 14 | 15 | Provides replies to common CTCPs (version, time, etc.), and a command 16 | to fetch version responses from channels. 17 | 18 | Please note that the command `ctcp version` cannot receive any responses if the channel is 19 | mode +C or similar which prevents CTCP requests to channel. 20 | 21 | .. _commands-Ctcp: 22 | 23 | Commands 24 | -------- 25 | 26 | .. _command-ctcp-version: 27 | 28 | ``version [] [--nicks]`` 29 | Sends a CTCP VERSION to , 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. 30 | 31 | .. _conf-Ctcp: 32 | 33 | Configuration 34 | ------------- 35 | 36 | .. _conf-supybot.plugins.Ctcp.public: 37 | 38 | 39 | supybot.plugins.Ctcp.public 40 | This config variable defaults to "True", is not network-specific, and is not channel-specific. 41 | 42 | Determines whether this plugin is publicly visible. 43 | 44 | .. _conf-supybot.plugins.Ctcp.userinfo: 45 | 46 | 47 | supybot.plugins.Ctcp.userinfo 48 | This config variable defaults to "", is not network-specific, and is not channel-specific. 49 | 50 | Determines what will be sent when a USERINFO query is received. 51 | 52 | .. _conf-supybot.plugins.Ctcp.versionWait: 53 | 54 | 55 | supybot.plugins.Ctcp.versionWait 56 | This config variable defaults to "10", is not network-specific, and is not channel-specific. 57 | 58 | Determines how many seconds the bot will wait after getting a version command (not a CTCP VERSION, but an actual call of the command in this plugin named "version") before replying with the results it has collected. 59 | 60 | -------------------------------------------------------------------------------- /plugins/Ctcp/locales/de.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: Supybot\n" 4 | "POT-Creation-Date: 2022-02-06 00:12+0100\n" 5 | "PO-Revision-Date: 2011-10-29 19:22+0100\n" 6 | "Last-Translator: Florian Besser \n" 7 | "Language-Team: Germen \n" 8 | "Language: de\n" 9 | "MIME-Version: 1.0\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Content-Transfer-Encoding: 8bit\n" 12 | "Generated-By: pygettext.py 1.5\n" 13 | 14 | #: plugin.py:44 15 | msgid "" 16 | "\n" 17 | " Provides replies to common CTCPs (version, time, etc.), and a command\n" 18 | " to fetch version responses from channels.\n" 19 | "\n" 20 | " Please note that the command `ctcp version` cannot receive any responses " 21 | "if the channel is\n" 22 | " mode +C or similar which prevents CTCP requests to channel.\n" 23 | " " 24 | msgstr "" 25 | 26 | #: plugin.py:89 27 | #, fuzzy 28 | msgid "^PING(?: (.+))?$" 29 | msgstr "PING ?(.*)" 30 | 31 | #: plugin.py:98 32 | #, fuzzy 33 | msgid "^VERSION$" 34 | msgstr "VERSION" 35 | 36 | #: plugin.py:103 37 | #, fuzzy 38 | msgid "^USERINFO$" 39 | msgstr "USERINFO" 40 | 41 | #: plugin.py:108 42 | #, fuzzy 43 | msgid "^TIME$" 44 | msgstr "TIME" 45 | 46 | #: plugin.py:113 47 | #, fuzzy 48 | msgid "^FINGER$" 49 | msgstr "FINGER" 50 | 51 | #: plugin.py:116 52 | msgid "Supybot, the best Python IRC bot in existence!" 53 | msgstr "Supybot ist der beste Python IRC Bot den es gibt!" 54 | 55 | #: plugin.py:119 56 | #, fuzzy 57 | msgid "^SOURCE$" 58 | msgstr "SOURCE" 59 | 60 | #: plugin.py:135 61 | msgid "" 62 | "[] [--nicks]\n" 63 | "\n" 64 | " Sends a CTCP VERSION to , returning the various\n" 65 | " version strings returned. It waits for 10 seconds before returning\n" 66 | " the versions received at that point. If --nicks is given, nicks " 67 | "are\n" 68 | " associated with the version strings; otherwise, only the version\n" 69 | " strings are given.\n" 70 | " " 71 | msgstr "" 72 | "[] [--nicks] \n" 73 | "\n" 74 | "Sendet CTCP VERSION an , gibt die verschiedenen Versions " 75 | "Zeichenketten zurück. Es wartet 10 Sekunden bevor die Versionen die zu " 76 | "diesem Zeitpunkt emfpangen wurden zurückgegeben werden. Falls --nicks " 77 | "angegeben wird, werden die Versions Zeichenketten an die Nicks geknüpft;wenn " 78 | "nicht werden nur die Versions Zeichenketten zurückgegeben." 79 | -------------------------------------------------------------------------------- /plugins/Ctcp/locales/fi.po: -------------------------------------------------------------------------------- 1 | # Ctcp plugin in Limnoria. 2 | # Copyright (C) 2011-2014 Limnoria 3 | # Mikaela Suomalainen , 2011-2014 4 | # 5 | msgid "" 6 | msgstr "" 7 | "Project-Id-Version: \n" 8 | "POT-Creation-Date: 2022-02-06 00:12+0100\n" 9 | "PO-Revision-Date: 2014-03-22 16:16+0200\n" 10 | "Last-Translator: Mikaela Suomalainen \n" 11 | "Language-Team: \n" 12 | "Language: fi_FI\n" 13 | "MIME-Version: 1.0\n" 14 | "Content-Type: text/plain; charset=UTF-8\n" 15 | "Content-Transfer-Encoding: 8bit\n" 16 | "Generated-By: pygettext.py 1.5\n" 17 | "X-Generator: Poedit 1.5.4\n" 18 | 19 | #: plugin.py:44 20 | msgid "" 21 | "\n" 22 | " Provides replies to common CTCPs (version, time, etc.), and a command\n" 23 | " to fetch version responses from channels.\n" 24 | "\n" 25 | " Please note that the command `ctcp version` cannot receive any responses " 26 | "if the channel is\n" 27 | " mode +C or similar which prevents CTCP requests to channel.\n" 28 | " " 29 | msgstr "" 30 | 31 | #: plugin.py:89 32 | msgid "^PING(?: (.+))?$" 33 | msgstr "^PING(?: (.+))?$" 34 | 35 | #: plugin.py:98 36 | msgid "^VERSION$" 37 | msgstr "^VERSION$" 38 | 39 | #: plugin.py:103 40 | msgid "^USERINFO$" 41 | msgstr "^USERINFO$" 42 | 43 | #: plugin.py:108 44 | msgid "^TIME$" 45 | msgstr "^TIME$" 46 | 47 | #: plugin.py:113 48 | msgid "^FINGER$" 49 | msgstr "^FINGER$" 50 | 51 | #: plugin.py:116 52 | msgid "Supybot, the best Python IRC bot in existence!" 53 | msgstr "Supybot, paras Pythonilla toteutettu IRC-botti, joka on olemassa!" 54 | 55 | #: plugin.py:119 56 | msgid "^SOURCE$" 57 | msgstr "^SOURCE$" 58 | 59 | #: plugin.py:135 60 | #, fuzzy 61 | msgid "" 62 | "[] [--nicks]\n" 63 | "\n" 64 | " Sends a CTCP VERSION to , returning the various\n" 65 | " version strings returned. It waits for 10 seconds before returning\n" 66 | " the versions received at that point. If --nicks is given, nicks " 67 | "are\n" 68 | " associated with the version strings; otherwise, only the version\n" 69 | " strings are given.\n" 70 | " " 71 | msgstr "" 72 | "[] [--nicks]\n" 73 | "\n" 74 | " Lähettää CTCP VERSION , palauttaen \n" 75 | " palaavat versioketjut. Se odottaa 10 sekuntia ennen kuin palauttaa\n" 76 | " versiot, jotka vastaanotettiin tuolloin. Jos --nicks on annettu, " 77 | "nimimerkit\n" 78 | " liitetään versioketjuihin; muutoin vain versioketjut\n" 79 | " annetaan.\n" 80 | " " 81 | -------------------------------------------------------------------------------- /plugins/Ctcp/locales/fr.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: Limnoria\n" 4 | "POT-Creation-Date: 2022-02-06 00:12+0100\n" 5 | "PO-Revision-Date: \n" 6 | "Last-Translator: Mikaela Suomalainen \n" 7 | "Language-Team: Limnoria \n" 8 | "Language: fr_FR\n" 9 | "MIME-Version: 1.0\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Content-Transfer-Encoding: 8bit\n" 12 | "X-Poedit-Language: Français\n" 13 | "X-Poedit-Country: France\n" 14 | "X-Poedit-SourceCharset: ASCII\n" 15 | 16 | #: plugin.py:44 17 | msgid "" 18 | "\n" 19 | " Provides replies to common CTCPs (version, time, etc.), and a command\n" 20 | " to fetch version responses from channels.\n" 21 | "\n" 22 | " Please note that the command `ctcp version` cannot receive any responses " 23 | "if the channel is\n" 24 | " mode +C or similar which prevents CTCP requests to channel.\n" 25 | " " 26 | msgstr "" 27 | 28 | #: plugin.py:89 29 | #, fuzzy 30 | msgid "^PING(?: (.+))?$" 31 | msgstr "PING ?(.*)" 32 | 33 | #: plugin.py:98 34 | #, fuzzy 35 | msgid "^VERSION$" 36 | msgstr "VERSION" 37 | 38 | #: plugin.py:103 39 | #, fuzzy 40 | msgid "^USERINFO$" 41 | msgstr "USERINFO" 42 | 43 | #: plugin.py:108 44 | #, fuzzy 45 | msgid "^TIME$" 46 | msgstr "TIME" 47 | 48 | #: plugin.py:113 49 | #, fuzzy 50 | msgid "^FINGER$" 51 | msgstr "FINGER" 52 | 53 | #: plugin.py:116 54 | msgid "Supybot, the best Python IRC bot in existence!" 55 | msgstr "Supybot, le meilleur bot IRC en Python au monde !" 56 | 57 | #: plugin.py:119 58 | #, fuzzy 59 | msgid "^SOURCE$" 60 | msgstr "SOURCE" 61 | 62 | #: plugin.py:135 63 | msgid "" 64 | "[] [--nicks]\n" 65 | "\n" 66 | " Sends a CTCP VERSION to , returning the various\n" 67 | " version strings returned. It waits for 10 seconds before returning\n" 68 | " the versions received at that point. If --nicks is given, nicks " 69 | "are\n" 70 | " associated with the version strings; otherwise, only the version\n" 71 | " strings are given.\n" 72 | " " 73 | msgstr "" 74 | "[] [--nicks]\n" 75 | "\n" 76 | "Envoie un CTCP VERSION au canal, et renvoie les différentes réponses reçues. " 77 | "Il attend 10 secondes avant de renvoyer les réponses reçues jusqu'alors. Si " 78 | "--nicks est donné, les nicks sont associés à la chaîne de version ; sinon, " 79 | "seules les chaînes sont données." 80 | -------------------------------------------------------------------------------- /plugins/Ctcp/locales/hu.po: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR ORGANIZATION 3 | # FIRST AUTHOR , YEAR. 4 | # 5 | msgid "" 6 | msgstr "" 7 | "Project-Id-Version: Limnoria Ctcp\n" 8 | "POT-Creation-Date: 2022-02-06 00:12+0100\n" 9 | "PO-Revision-Date: 2011-07-31 12:12+CEST\n" 10 | "Last-Translator: nyuszika7h \n" 11 | "Language-Team: \n" 12 | "Language: hu_HU\n" 13 | "MIME-Version: 1.0\n" 14 | "Content-Type: text/plain; charset=UTF-8\n" 15 | "Content-Transfer-Encoding: 8bit\n" 16 | "Generated-By: pygettext.py 1.5\n" 17 | 18 | #: plugin.py:44 19 | msgid "" 20 | "\n" 21 | " Provides replies to common CTCPs (version, time, etc.), and a command\n" 22 | " to fetch version responses from channels.\n" 23 | "\n" 24 | " Please note that the command `ctcp version` cannot receive any responses " 25 | "if the channel is\n" 26 | " mode +C or similar which prevents CTCP requests to channel.\n" 27 | " " 28 | msgstr "" 29 | 30 | #: plugin.py:89 31 | #, fuzzy 32 | msgid "^PING(?: (.+))?$" 33 | msgstr "PING ?(.*)" 34 | 35 | #: plugin.py:98 36 | #, fuzzy 37 | msgid "^VERSION$" 38 | msgstr "VERSON" 39 | 40 | #: plugin.py:103 41 | #, fuzzy 42 | msgid "^USERINFO$" 43 | msgstr "USERINFO" 44 | 45 | #: plugin.py:108 46 | #, fuzzy 47 | msgid "^TIME$" 48 | msgstr "TIME" 49 | 50 | #: plugin.py:113 51 | #, fuzzy 52 | msgid "^FINGER$" 53 | msgstr "FINGER" 54 | 55 | #: plugin.py:116 56 | msgid "Supybot, the best Python IRC bot in existence!" 57 | msgstr "Supybot, a legjobb létező Python IRC bot!" 58 | 59 | #: plugin.py:119 60 | #, fuzzy 61 | msgid "^SOURCE$" 62 | msgstr "SOURCE" 63 | 64 | #: plugin.py:135 65 | msgid "" 66 | "[] [--nicks]\n" 67 | "\n" 68 | " Sends a CTCP VERSION to , returning the various\n" 69 | " version strings returned. It waits for 10 seconds before returning\n" 70 | " the versions received at that point. If --nicks is given, nicks " 71 | "are\n" 72 | " associated with the version strings; otherwise, only the version\n" 73 | " strings are given.\n" 74 | " " 75 | msgstr "" 76 | "[ [--nicks]\n" 77 | "\n" 78 | "Küld egy CTCP VERSION-t -ra, kiírva a különféle kapott verziókat. " 79 | "10 másodpercig vár a kapott verziók kiírása előtt. Ha --nicks meg van adva, " 80 | "a nevek össze vannak kapcsolva a verziókkal; egyébként csak a verziók vannak " 81 | "kiírva." 82 | -------------------------------------------------------------------------------- /plugins/Ctcp/locales/it.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: Limnoria\n" 4 | "POT-Creation-Date: 2022-02-06 00:12+0100\n" 5 | "PO-Revision-Date: 2011-06-12 13:43+0200\n" 6 | "Last-Translator: skizzhg \n" 7 | "Language-Team: Italian \n" 8 | "Language: it\n" 9 | "MIME-Version: 1.0\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Content-Transfer-Encoding: 8bit\n" 12 | 13 | #: plugin.py:44 14 | msgid "" 15 | "\n" 16 | " Provides replies to common CTCPs (version, time, etc.), and a command\n" 17 | " to fetch version responses from channels.\n" 18 | "\n" 19 | " Please note that the command `ctcp version` cannot receive any responses " 20 | "if the channel is\n" 21 | " mode +C or similar which prevents CTCP requests to channel.\n" 22 | " " 23 | msgstr "" 24 | 25 | #: plugin.py:89 26 | msgid "^PING(?: (.+))?$" 27 | msgstr "" 28 | 29 | #: plugin.py:98 30 | msgid "^VERSION$" 31 | msgstr "" 32 | 33 | #: plugin.py:103 34 | msgid "^USERINFO$" 35 | msgstr "" 36 | 37 | #: plugin.py:108 38 | msgid "^TIME$" 39 | msgstr "" 40 | 41 | #: plugin.py:113 42 | msgid "^FINGER$" 43 | msgstr "" 44 | 45 | #: plugin.py:116 46 | msgid "Supybot, the best Python IRC bot in existence!" 47 | msgstr "Supybot, il miglior bot IRC in Python esistente!" 48 | 49 | #: plugin.py:119 50 | msgid "^SOURCE$" 51 | msgstr "" 52 | 53 | #: plugin.py:135 54 | msgid "" 55 | "[] [--nicks]\n" 56 | "\n" 57 | " Sends a CTCP VERSION to , returning the various\n" 58 | " version strings returned. It waits for 10 seconds before returning\n" 59 | " the versions received at that point. If --nicks is given, nicks " 60 | "are\n" 61 | " associated with the version strings; otherwise, only the version\n" 62 | " strings are given.\n" 63 | " " 64 | msgstr "" 65 | "[] [--nicks]\n" 66 | "\n" 67 | " Invia un CTCP VERSION a restituendo le varie stringhe\n" 68 | " ricevute. Attende 10 secondi prima di mostrare le versioni ottenute\n" 69 | " fino a quel momento. Se --nicks è specificato, i nick sono " 70 | "associati\n" 71 | " alle stringhe di versione; altrimenti vengono fornite solo le " 72 | "stringhe.\n" 73 | " " 74 | -------------------------------------------------------------------------------- /plugins/Ctcp/messages.pot: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR ORGANIZATION 3 | # FIRST AUTHOR , YEAR. 4 | # 5 | msgid "" 6 | msgstr "" 7 | "Project-Id-Version: PACKAGE VERSION\n" 8 | "POT-Creation-Date: 2024-12-06 11:00+0100\n" 9 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 10 | "Last-Translator: FULL NAME \n" 11 | "Language-Team: LANGUAGE \n" 12 | "MIME-Version: 1.0\n" 13 | "Content-Type: text/plain; charset=UTF-8\n" 14 | "Content-Transfer-Encoding: 8bit\n" 15 | "Generated-By: pygettext.py 1.5\n" 16 | 17 | 18 | #: plugin.py:44 19 | #, docstring 20 | msgid "" 21 | "\n" 22 | " Provides replies to common CTCPs (version, time, etc.), and a command\n" 23 | " to fetch version responses from channels.\n" 24 | "\n" 25 | " Please note that the command `ctcp version` cannot receive any responses if the channel is\n" 26 | " mode +C or similar which prevents CTCP requests to channel.\n" 27 | " " 28 | msgstr "" 29 | 30 | #: plugin.py:89 31 | #, docstring 32 | msgid "^\001PING(?: (.+))?\001$" 33 | msgstr "" 34 | 35 | #: plugin.py:98 36 | #, docstring 37 | msgid "^\001VERSION\001$" 38 | msgstr "" 39 | 40 | #: plugin.py:103 41 | #, docstring 42 | msgid "^\001USERINFO\001$" 43 | msgstr "" 44 | 45 | #: plugin.py:108 46 | #, docstring 47 | msgid "^\001TIME\001$" 48 | msgstr "" 49 | 50 | #: plugin.py:113 51 | #, docstring 52 | msgid "^\001FINGER\001$" 53 | msgstr "" 54 | 55 | #: plugin.py:116 56 | msgid "Supybot, the best Python IRC bot in existence!" 57 | msgstr "" 58 | 59 | #: plugin.py:119 60 | #, docstring 61 | msgid "^\001SOURCE\001$" 62 | msgstr "" 63 | 64 | #: plugin.py:135 65 | #, docstring 66 | msgid "" 67 | "[] [--nicks]\n" 68 | "\n" 69 | " Sends a CTCP VERSION to , returning the various\n" 70 | " version strings returned. It waits for 10 seconds before returning\n" 71 | " the versions received at that point. If --nicks is given, nicks are\n" 72 | " associated with the version strings; otherwise, only the version\n" 73 | " strings are given.\n" 74 | " " 75 | msgstr "" 76 | 77 | -------------------------------------------------------------------------------- /plugins/Ctcp/test.py: -------------------------------------------------------------------------------- 1 | ### 2 | # Copyright (c) 2002-2004, Jeremiah Fincher 3 | # Copyright (c) 2010-2021, Valentin Lorentz 4 | # All rights reserved. 5 | # 6 | # Redistribution and use in source and binary forms, with or without 7 | # modification, are permitted provided that the following conditions are met: 8 | # 9 | # * Redistributions of source code must retain the above copyright notice, 10 | # this list of conditions, and the following disclaimer. 11 | # * Redistributions in binary form must reproduce the above copyright notice, 12 | # this list of conditions, and the following disclaimer in the 13 | # documentation and/or other materials provided with the distribution. 14 | # * Neither the name of the author of this software nor the name of 15 | # contributors to this software may be used to endorse or promote products 16 | # derived from this software without specific prior written consent. 17 | # 18 | # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 19 | # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20 | # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21 | # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 22 | # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 23 | # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 24 | # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 25 | # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 26 | # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 27 | # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 28 | # POSSIBILITY OF SUCH DAMAGE. 29 | ### 30 | 31 | from supybot.test import * 32 | 33 | class CtcpTestCase(PluginTestCase): 34 | plugins = ('Ctcp',) 35 | 36 | 37 | # vim:set shiftwidth=4 softtabstop=4 expandtab textwidth=79: 38 | 39 | -------------------------------------------------------------------------------- /plugins/DDG/README.rst: -------------------------------------------------------------------------------- 1 | .. _plugin-DDG: 2 | 3 | Documentation for the DDG plugin for Supybot 4 | ============================================ 5 | 6 | Purpose 7 | ------- 8 | 9 | Searches for results on DuckDuckGo's web search. 10 | 11 | Usage 12 | ----- 13 | 14 | Searches for results on DuckDuckGo. 15 | 16 | Example:: 17 | 18 | <+jlu5> %ddg search eiffel tower 19 | <@Atlas> The Eiffel Tower is an iron lattice tower located on the Champ de Mars in Paris. It was named after the engineer Gustave Eiffel, whose company designed and built the tower. - 20 | 21 | .. _commands-DDG: 22 | 23 | Commands 24 | -------- 25 | 26 | .. _command-ddg-search: 27 | 28 | ``search `` 29 | Searches for on DuckDuckGo's web search. 30 | 31 | .. _conf-DDG: 32 | 33 | Configuration 34 | ------------- 35 | 36 | .. _conf-supybot.plugins.DDG.maxResults: 37 | 38 | 39 | supybot.plugins.DDG.maxResults 40 | This config variable defaults to "4", is network-specific, and is channel-specific. 41 | 42 | Determines the maximum number of results the bot will respond with. 43 | 44 | .. _conf-supybot.plugins.DDG.public: 45 | 46 | 47 | supybot.plugins.DDG.public 48 | This config variable defaults to "True", is not network-specific, and is not channel-specific. 49 | 50 | Determines whether this plugin is publicly visible. 51 | 52 | .. _conf-supybot.plugins.DDG.region: 53 | 54 | 55 | supybot.plugins.DDG.region 56 | This config variable defaults to "", is network-specific, and is channel-specific. 57 | 58 | Set the DDG search region to return results for the language/country of your choice. E.g. 'us-en' for United States. https://duckduckgo.com/params 59 | 60 | .. _conf-supybot.plugins.DDG.searchFilter: 61 | 62 | 63 | supybot.plugins.DDG.searchFilter 64 | This config variable defaults to "moderate", is network-specific, and is channel-specific. 65 | 66 | Determines what level of search filtering to use by default. 'active' - most filtering, 'moderate' - default filtering, 'off' - no filtering Valid strings: active, moderate, and off. 67 | 68 | .. _conf-supybot.plugins.DDG.showSnippet: 69 | 70 | 71 | supybot.plugins.DDG.showSnippet 72 | This config variable defaults to "True", is network-specific, and is channel-specific. 73 | 74 | Determines whether the bot will show a snippet of each resulting link. If False, it will show the title of the link instead. 75 | 76 | -------------------------------------------------------------------------------- /plugins/DDG/local/__init__.py: -------------------------------------------------------------------------------- 1 | # Stub so local is a module, used for third-party modules 2 | -------------------------------------------------------------------------------- /plugins/DDG/messages.pot: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR ORGANIZATION 3 | # FIRST AUTHOR , YEAR. 4 | # 5 | msgid "" 6 | msgstr "" 7 | "Project-Id-Version: PACKAGE VERSION\n" 8 | "POT-Creation-Date: 2024-12-06 11:00+0100\n" 9 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 10 | "Last-Translator: FULL NAME \n" 11 | "Language-Team: LANGUAGE \n" 12 | "MIME-Version: 1.0\n" 13 | "Content-Type: text/plain; charset=UTF-8\n" 14 | "Content-Transfer-Encoding: 8bit\n" 15 | "Generated-By: pygettext.py 1.5\n" 16 | 17 | 18 | #: config.py:56 19 | msgid "" 20 | "Determines the maximum number of\n" 21 | " results the bot will respond with." 22 | msgstr "" 23 | 24 | #: config.py:59 25 | msgid "" 26 | "Determines whether the bot will show a\n" 27 | " snippet of each resulting link. If False, it will show the title\n" 28 | " of the link instead." 29 | msgstr "" 30 | 31 | #: config.py:63 32 | msgid "" 33 | "Set the DDG search region to return results\n" 34 | " for the language/country of your choice. E.g. 'us-en' for United States.\n" 35 | " https://duckduckgo.com/params" 36 | msgstr "" 37 | 38 | #: config.py:67 39 | msgid "" 40 | "Determines what level of search filtering to use\n" 41 | " by default. 'active' - most filtering, 'moderate' - default filtering,\n" 42 | " 'off' - no filtering" 43 | msgstr "" 44 | 45 | #: plugin.py:54 46 | #, docstring 47 | msgid "" 48 | "\n" 49 | " Searches for results on DuckDuckGo.\n" 50 | "\n" 51 | " Example::\n" 52 | "\n" 53 | " <+jlu5> %ddg search eiffel tower\n" 54 | " <@Atlas> The Eiffel Tower is an iron lattice tower located on the Champ de Mars in Paris. It was named after the engineer Gustave Eiffel, whose company designed and built the tower. - \n" 55 | "\n" 56 | " " 57 | msgstr "" 58 | 59 | #: plugin.py:93 60 | #, docstring 61 | msgid "" 62 | "\n" 63 | " Core results fetcher for the DDG plugin. Other plugins can call this as well via\n" 64 | " irc.getCallback('DDG').search_core(...)\n" 65 | " " 66 | msgstr "" 67 | 68 | #: plugin.py:150 69 | #, docstring 70 | msgid "" 71 | "\n" 72 | "\n" 73 | " Searches for on DuckDuckGo's web search." 74 | msgstr "" 75 | 76 | -------------------------------------------------------------------------------- /plugins/DDG/test.py: -------------------------------------------------------------------------------- 1 | ### 2 | # Copyright (c) 2014-2020, James Lu 3 | # Copyright (c) 2020-2021, Valentin Lorentz 4 | # All rights reserved. 5 | # 6 | # Redistribution and use in source and binary forms, with or without 7 | # modification, are permitted provided that the following conditions are met: 8 | # 9 | # * Redistributions of source code must retain the above copyright notice, 10 | # this list of conditions, and the following disclaimer. 11 | # * Redistributions in binary form must reproduce the above copyright notice, 12 | # this list of conditions, and the following disclaimer in the 13 | # documentation and/or other materials provided with the distribution. 14 | # * Neither the name of the author of this software nor the name of 15 | # contributors to this software may be used to endorse or promote products 16 | # derived from this software without specific prior written consent. 17 | # 18 | # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 19 | # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20 | # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21 | # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 22 | # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 23 | # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 24 | # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 25 | # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 26 | # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 27 | # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 28 | # POSSIBILITY OF SUCH DAMAGE. 29 | 30 | ### 31 | 32 | import supybot.conf as conf 33 | from supybot.test import * 34 | 35 | class DDGTestCase(PluginTestCase): 36 | plugins = ('DDG',) 37 | 38 | if network: 39 | 40 | def testSearch(self): 41 | self.assertRegexp( 42 | 'ddg search wikipedia', r'Wikipedia.*? - .*?https?\:\/\/') 43 | self.assertRegexp( 44 | 'ddg search en.wikipedia.org', 45 | 'Wikipedia, the free encyclopedia\x02 - ' 46 | '.* ') 47 | with conf.supybot.plugins.DDG.region.context('fr-fr'): 48 | self.assertRegexp( 49 | 'ddg search wikipedia', 50 | r'Wikipédia, l\'encyclopédie libre - .*?https?\:\/\/') 51 | 52 | # vim:set shiftwidth=4 tabstop=4 expandtab textwidth=79: 53 | -------------------------------------------------------------------------------- /plugins/Debug/README.rst: -------------------------------------------------------------------------------- 1 | .. _plugin-Debug: 2 | 3 | Documentation for the Debug plugin for Supybot 4 | ============================================== 5 | 6 | Purpose 7 | ------- 8 | 9 | This is for developers debugging their plugins; it provides an eval command 10 | as well as some other useful commands. 11 | It should not be loaded with a default installation. 12 | 13 | Usage 14 | ----- 15 | 16 | This plugin provides debugging abilities for Supybot. It 17 | should not be loaded with a default installation. 18 | 19 | .. _commands-Debug: 20 | 21 | Commands 22 | -------- 23 | 24 | .. _command-debug-channeldb: 25 | 26 | ``channeldb []`` 27 | Returns the result of the channeldb converter. 28 | 29 | .. _command-debug-collect: 30 | 31 | ``collect []`` 32 | Does gc collections, returning the number of objects collected each time. defaults to 1. 33 | 34 | .. _command-debug-environ: 35 | 36 | ``environ takes no arguments`` 37 | Returns the environment of the supybot process. 38 | 39 | .. _command-debug-eval: 40 | 41 | ``eval `` 42 | Evaluates (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). 43 | 44 | .. _command-debug-exec: 45 | 46 | ``exec `` 47 | Execs . Returns success if it didn't raise any exceptions. 48 | 49 | .. _command-debug-exn: 50 | 51 | ``exn `` 52 | Raises the exception matching . 53 | 54 | .. _command-debug-sendquote: 55 | 56 | ``sendquote `` 57 | Sends (not queues) the raw IRC message given. 58 | 59 | .. _command-debug-settrace: 60 | 61 | ``settrace []`` 62 | Starts tracing function calls to . If is not given, sys.stdout is used. This causes much output. 63 | 64 | .. _command-debug-simpleeval: 65 | 66 | ``simpleeval `` 67 | Evaluates the given expression. 68 | 69 | .. _command-debug-unsettrace: 70 | 71 | ``unsettrace takes no arguments`` 72 | Stops tracing function calls on stdout. 73 | 74 | .. _conf-Debug: 75 | 76 | Configuration 77 | ------------- 78 | 79 | .. _conf-supybot.plugins.Debug.public: 80 | 81 | 82 | supybot.plugins.Debug.public 83 | This config variable defaults to "True", is not network-specific, and is not channel-specific. 84 | 85 | Determines whether this plugin is publicly visible. 86 | 87 | -------------------------------------------------------------------------------- /plugins/Debug/config.py: -------------------------------------------------------------------------------- 1 | ### 2 | # Copyright (c) 2004, Jeremiah Fincher 3 | # Copyright (c) 2010-2021, Valentin Lorentz 4 | # All rights reserved. 5 | # 6 | # Redistribution and use in source and binary forms, with or without 7 | # modification, are permitted provided that the following conditions are met: 8 | # 9 | # * Redistributions of source code must retain the above copyright notice, 10 | # this list of conditions, and the following disclaimer. 11 | # * Redistributions in binary form must reproduce the above copyright notice, 12 | # this list of conditions, and the following disclaimer in the 13 | # documentation and/or other materials provided with the distribution. 14 | # * Neither the name of the author of this software nor the name of 15 | # contributors to this software may be used to endorse or promote products 16 | # derived from this software without specific prior written consent. 17 | # 18 | # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 19 | # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20 | # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21 | # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 22 | # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 23 | # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 24 | # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 25 | # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 26 | # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 27 | # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 28 | # POSSIBILITY OF SUCH DAMAGE. 29 | ### 30 | 31 | import supybot.conf as conf 32 | import supybot.registry as registry 33 | 34 | def configure(advanced): 35 | # This will be called by supybot to configure this module. advanced is 36 | # a bool that specifies whether the user identified themself as an advanced 37 | # user or not. You should effect your configuration by manipulating the 38 | # registry as appropriate. 39 | from supybot.questions import expect, anything, something, yn 40 | conf.registerPlugin('Debug', True) 41 | 42 | 43 | Debug = conf.registerPlugin('Debug') 44 | # This is where your configuration variables (if any) should go. For example: 45 | # conf.registerGlobalValue(Debug, 'someConfigVariableName', 46 | # registry.Boolean(False, """Help for someConfigVariableName.""")) 47 | 48 | 49 | # vim:set shiftwidth=4 softtabstop=4 expandtab textwidth=79: 50 | -------------------------------------------------------------------------------- /plugins/Dict/README.rst: -------------------------------------------------------------------------------- 1 | .. _plugin-Dict: 2 | 3 | Documentation for the Dict plugin for Supybot 4 | ============================================= 5 | 6 | Purpose 7 | ------- 8 | 9 | Commands that use the dictd protocol to define words. 10 | 11 | In order to use this plugin you must have the following modules 12 | installed: 13 | 14 | * dictclient: http://quux.org:70/devel/dictclient 15 | 16 | Usage 17 | ----- 18 | 19 | This plugin provides a function to look up words from different 20 | dictionaries. 21 | 22 | .. _commands-Dict: 23 | 24 | Commands 25 | -------- 26 | 27 | .. _command-dict-dict: 28 | 29 | ``dict [] `` 30 | Looks up the definition of on the dictd server specified by the supybot.plugins.Dict.server config variable. 31 | 32 | .. _command-dict-dictionaries: 33 | 34 | ``dictionaries takes no arguments`` 35 | Returns the dictionaries valid for the dict command. 36 | 37 | .. _command-dict-random: 38 | 39 | ``random takes no arguments`` 40 | Returns a random valid dictionary. 41 | 42 | .. _command-dict-synonym: 43 | 44 | ``synonym [ ...]`` 45 | 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. 46 | 47 | .. _conf-Dict: 48 | 49 | Configuration 50 | ------------- 51 | 52 | .. _conf-supybot.plugins.Dict.default: 53 | 54 | 55 | supybot.plugins.Dict.default 56 | This config variable defaults to "*", is network-specific, and is channel-specific. 57 | 58 | Determines the default dictionary the bot will ask for definitions in. If this value is '*' (without the quotes) the bot will use all dictionaries to define words. 59 | 60 | .. _conf-supybot.plugins.Dict.public: 61 | 62 | 63 | supybot.plugins.Dict.public 64 | This config variable defaults to "True", is not network-specific, and is not channel-specific. 65 | 66 | Determines whether this plugin is publicly visible. 67 | 68 | .. _conf-supybot.plugins.Dict.server: 69 | 70 | 71 | supybot.plugins.Dict.server 72 | This config variable defaults to "dict.org", is not network-specific, and is not channel-specific. 73 | 74 | Determines what server the bot will retrieve definitions from. 75 | 76 | .. _conf-supybot.plugins.Dict.showDictName: 77 | 78 | 79 | supybot.plugins.Dict.showDictName 80 | This config variable defaults to "True", is network-specific, and is channel-specific. 81 | 82 | Determines whether the bot will show which dictionaries responded to a query, if the selected dictionary is '*'. 83 | 84 | -------------------------------------------------------------------------------- /plugins/Dict/local/__init__.py: -------------------------------------------------------------------------------- 1 | # Stub so local is a module, used for third-party modules 2 | -------------------------------------------------------------------------------- /plugins/Dunno/locales/de.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: Supybot\n" 4 | "POT-Creation-Date: 2022-02-06 00:12+0100\n" 5 | "PO-Revision-Date: 2011-11-04 18:45+0100\n" 6 | "Last-Translator: Florian Besser \n" 7 | "Language-Team: German \n" 8 | "Language: de\n" 9 | "MIME-Version: 1.0\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Content-Transfer-Encoding: 8bit\n" 12 | "Generated-By: pygettext.py 1.5\n" 13 | 14 | #: config.py:47 15 | msgid "" 16 | "Determines whether the bot will prefix the nick\n" 17 | " of the user giving an invalid command to the \"dunno\" response." 18 | msgstr "Legt fest ob der Bot " 19 | 20 | #: plugin.py:38 21 | #, fuzzy 22 | msgid "" 23 | "This plugin was written initially to work with MoobotFactoids, the two\n" 24 | " of them to provide a similar-to-moobot-and-blootbot interface for " 25 | "factoids.\n" 26 | " Basically, it replaces the standard 'Error: is not a valid " 27 | "command.'\n" 28 | " messages with messages kept in a database, able to give more personable\n" 29 | " responses.\n" 30 | "\n" 31 | " ``$command`` in the message will be replaced by the command's name." 32 | msgstr "" 33 | "Dieses plugin wurde ursprünglich geschrieben um mit MoobotFactoids betrieben " 34 | "zu werden, die zwei zusammen um ein gleiches MooBot und Blootbot Interface " 35 | "für Factoids zu bieten. Es ersetzt die Standard 'Fehler: ist kein " 36 | "zulässiger Befehl.' Nachricht mit einer Nachricht die in der Datenbank " 37 | "gespeichert ist, um die Antworten mehr zu personalisieren." 38 | -------------------------------------------------------------------------------- /plugins/Dunno/locales/fi.po: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR ORGANIZATION 3 | # FIRST AUTHOR , YEAR. 4 | # 5 | msgid "" 6 | msgstr "" 7 | "Project-Id-Version: \n" 8 | "POT-Creation-Date: 2022-02-06 00:12+0100\n" 9 | "PO-Revision-Date: 2011-06-08 16:50+0200\n" 10 | "Last-Translator: Mikaela Suomalainen \n" 11 | "Language-Team: \n" 12 | "Language: fi_FI\n" 13 | "MIME-Version: 1.0\n" 14 | "Content-Type: text/plain; charset=UTF-8\n" 15 | "Content-Transfer-Encoding: 8bit\n" 16 | "Generated-By: pygettext.py 1.5\n" 17 | 18 | #: config.py:47 19 | msgid "" 20 | "Determines whether the bot will prefix the nick\n" 21 | " of the user giving an invalid command to the \"dunno\" response." 22 | msgstr "" 23 | "Määrittää lisääkö botti virheellisen komennon antaneen käyttäjän\n" 24 | " nimimerkin etuliitteeksi \"dunno\" vastaukselle." 25 | 26 | #: plugin.py:38 27 | #, fuzzy 28 | msgid "" 29 | "This plugin was written initially to work with MoobotFactoids, the two\n" 30 | " of them to provide a similar-to-moobot-and-blootbot interface for " 31 | "factoids.\n" 32 | " Basically, it replaces the standard 'Error: is not a valid " 33 | "command.'\n" 34 | " messages with messages kept in a database, able to give more personable\n" 35 | " responses.\n" 36 | "\n" 37 | " ``$command`` in the message will be replaced by the command's name." 38 | msgstr "" 39 | "Tämä lisäosa kirjoitettiin toimimaan MoobotFactoidsin kanssa, molemmat\n" 40 | " niistä tarjoavat samankaltainen-moobottiin-ja-blootbottiin " 41 | "käyttöliittymä factoideille.\n" 42 | " Yksinkertaisesti, it se korvaa perus 'Virhe: ei ole kelvollinen " 43 | "komento'\n" 44 | " viestit viesteillä, joita pidetään tietokannassa pystyäkseen antamaan " 45 | "persoonallisempia\n" 46 | " vastauksia." 47 | -------------------------------------------------------------------------------- /plugins/Dunno/locales/fr.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: Limnoria\n" 4 | "POT-Creation-Date: 2022-02-06 00:12+0100\n" 5 | "PO-Revision-Date: \n" 6 | "Last-Translator: Valentin Lorentz \n" 7 | "Language-Team: Limnoria \n" 8 | "Language: fr_FR\n" 9 | "MIME-Version: 1.0\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Content-Transfer-Encoding: 8bit\n" 12 | "X-Poedit-Language: Français\n" 13 | "X-Poedit-Country: France\n" 14 | "X-Poedit-SourceCharset: ASCII\n" 15 | 16 | #: config.py:47 17 | msgid "" 18 | "Determines whether the bot will prefix the nick\n" 19 | " of the user giving an invalid command to the \"dunno\" response." 20 | msgstr "" 21 | "Détermine si le bot utilisera comme préfixe le nick de l'utilisateur donnant " 22 | "la commande invalide dans la réponse \"dunno\"." 23 | 24 | #: plugin.py:38 25 | #, fuzzy 26 | msgid "" 27 | "This plugin was written initially to work with MoobotFactoids, the two\n" 28 | " of them to provide a similar-to-moobot-and-blootbot interface for " 29 | "factoids.\n" 30 | " Basically, it replaces the standard 'Error: is not a valid " 31 | "command.'\n" 32 | " messages with messages kept in a database, able to give more personable\n" 33 | " responses.\n" 34 | "\n" 35 | " ``$command`` in the message will be replaced by the command's name." 36 | msgstr "" 37 | "Ce plugin était à l'origine écrit pour fonctionner avec MoobotFactoids, pour " 38 | "fournir une interface similaire aux factoids de moobot et blootbot. Remplace " 39 | "simplement les message 'Error: is not a valid commande' par des messages " 40 | "configurés dans la base de données, ce qui vous permet de rendre les " 41 | "réponses plus personnalisables." 42 | -------------------------------------------------------------------------------- /plugins/Dunno/locales/it.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: Limnoria\n" 4 | "POT-Creation-Date: 2022-02-06 00:12+0100\n" 5 | "PO-Revision-Date: 2011-06-12 13:58+0200\n" 6 | "Last-Translator: skizzhg \n" 7 | "Language-Team: Italian \n" 8 | "Language: it\n" 9 | "MIME-Version: 1.0\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Content-Transfer-Encoding: 8bit\n" 12 | 13 | #: config.py:47 14 | msgid "" 15 | "Determines whether the bot will prefix the nick\n" 16 | " of the user giving an invalid command to the \"dunno\" response." 17 | msgstr "" 18 | "Determina se il bot userà il nick dell'utente che dà un comando non\n" 19 | " valido come prefisso per la risposta \"dunno\"." 20 | 21 | #: plugin.py:38 22 | #, fuzzy 23 | msgid "" 24 | "This plugin was written initially to work with MoobotFactoids, the two\n" 25 | " of them to provide a similar-to-moobot-and-blootbot interface for " 26 | "factoids.\n" 27 | " Basically, it replaces the standard 'Error: is not a valid " 28 | "command.'\n" 29 | " messages with messages kept in a database, able to give more personable\n" 30 | " responses.\n" 31 | "\n" 32 | " ``$command`` in the message will be replaced by the command's name." 33 | msgstr "" 34 | "Questo plugin fu inizialmente scritto per funzionare con MoobotFactoids, " 35 | "per\n" 36 | " fornire un'interfaccia simile ai factoid di moobot e blootbot.\n" 37 | " Sostituisce i messaggi standard \"Errore: non è un comando valido." 38 | "\"\n" 39 | " con quelli contenuti in un database, in modo da rendere le risposte più " 40 | "piacevoli." 41 | -------------------------------------------------------------------------------- /plugins/Dunno/messages.pot: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR ORGANIZATION 3 | # FIRST AUTHOR , YEAR. 4 | # 5 | msgid "" 6 | msgstr "" 7 | "Project-Id-Version: PACKAGE VERSION\n" 8 | "POT-Creation-Date: 2024-12-06 11:00+0100\n" 9 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 10 | "Last-Translator: FULL NAME \n" 11 | "Language-Team: LANGUAGE \n" 12 | "MIME-Version: 1.0\n" 13 | "Content-Type: text/plain; charset=UTF-8\n" 14 | "Content-Transfer-Encoding: 8bit\n" 15 | "Generated-By: pygettext.py 1.5\n" 16 | 17 | 18 | #: config.py:47 19 | msgid "" 20 | "Determines whether the bot will prefix the nick\n" 21 | " of the user giving an invalid command to the \"dunno\" response." 22 | msgstr "" 23 | 24 | #: plugin.py:38 25 | #, docstring 26 | msgid "" 27 | "This plugin was written initially to work with MoobotFactoids, the two\n" 28 | " of them to provide a similar-to-moobot-and-blootbot interface for factoids.\n" 29 | " Basically, it replaces the standard 'Error: is not a valid command.'\n" 30 | " messages with messages kept in a database, able to give more personable\n" 31 | " responses.\n" 32 | "\n" 33 | " ``$command`` in the message will be replaced by the command's name." 34 | msgstr "" 35 | 36 | -------------------------------------------------------------------------------- /plugins/Fediverse/local/__init__.py: -------------------------------------------------------------------------------- 1 | # Stub so local is a module, used for third-party modules 2 | -------------------------------------------------------------------------------- /plugins/GPG/local/__init__.py: -------------------------------------------------------------------------------- 1 | # Stub so local is a module, used for third-party modules 2 | -------------------------------------------------------------------------------- /plugins/Games/README.rst: -------------------------------------------------------------------------------- 1 | .. _plugin-Games: 2 | 3 | Documentation for the Games plugin for Supybot 4 | ============================================== 5 | 6 | Purpose 7 | ------- 8 | 9 | This plugin provides some fun games like (Russian) roulette, 8ball, monologue 10 | which tells you how many lines you have spoken without anyone interrupting 11 | you, coin and dice. 12 | 13 | Usage 14 | ----- 15 | 16 | This plugin provides some small games like (Russian) roulette, 17 | eightball, monologue, coin and dice. 18 | 19 | .. _commands-Games: 20 | 21 | Commands 22 | -------- 23 | 24 | .. _command-games-coin: 25 | 26 | ``coin takes no arguments`` 27 | Flips a coin and returns the result. 28 | 29 | .. _command-games-dice: 30 | 31 | ``dice d`` 32 | Rolls a die with number of sides times. For example, 2d6 will roll 2 six-sided dice; 10d10 will roll 10 ten-sided dice. 33 | 34 | .. _command-games-eightball: 35 | 36 | ``eightball []`` 37 | Ask a question and the answer shall be provided. 38 | 39 | .. _command-games-monologue: 40 | 41 | ``monologue []`` 42 | Returns the number of consecutive lines you've sent in without being interrupted by someone else (i.e. how long your current 'monologue' is). is only necessary if the message isn't sent in the channel itself. 43 | 44 | .. _command-games-roulette: 45 | 46 | ``roulette [spin]`` 47 | Fires the revolver. If the bullet was in the chamber, you're dead. Tell me to spin the chambers and I will. 48 | 49 | .. _conf-Games: 50 | 51 | Configuration 52 | ------------- 53 | 54 | .. _conf-supybot.plugins.Games.public: 55 | 56 | 57 | supybot.plugins.Games.public 58 | This config variable defaults to "True", is not network-specific, and is not channel-specific. 59 | 60 | Determines whether this plugin is publicly visible. 61 | 62 | -------------------------------------------------------------------------------- /plugins/Games/config.py: -------------------------------------------------------------------------------- 1 | ### 2 | # Copyright (c) 2003-2005, Jeremiah Fincher 3 | # Copyright (c) 2010-2021, Valentin Lorentz 4 | # All rights reserved. 5 | # 6 | # Redistribution and use in source and binary forms, with or without 7 | # modification, are permitted provided that the following conditions are met: 8 | # 9 | # * Redistributions of source code must retain the above copyright notice, 10 | # this list of conditions, and the following disclaimer. 11 | # * Redistributions in binary form must reproduce the above copyright notice, 12 | # this list of conditions, and the following disclaimer in the 13 | # documentation and/or other materials provided with the distribution. 14 | # * Neither the name of the author of this software nor the name of 15 | # contributors to this software may be used to endorse or promote products 16 | # derived from this software without specific prior written consent. 17 | # 18 | # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 19 | # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20 | # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21 | # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 22 | # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 23 | # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 24 | # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 25 | # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 26 | # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 27 | # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 28 | # POSSIBILITY OF SUCH DAMAGE. 29 | ### 30 | 31 | import supybot.conf as conf 32 | import supybot.registry as registry 33 | from supybot.i18n import PluginInternationalization, internationalizeDocstring 34 | _ = PluginInternationalization('Games') 35 | 36 | def configure(advanced): 37 | # This will be called by supybot to configure this module. advanced is 38 | # a bool that specifies whether the user identified themself as an advanced 39 | # user or not. You should effect your configuration by manipulating the 40 | # registry as appropriate. 41 | from supybot.questions import expect, anything, something, yn 42 | conf.registerPlugin('Games', True) 43 | 44 | 45 | Games = conf.registerPlugin('Games') 46 | 47 | 48 | # vim:set shiftwidth=4 softtabstop=4 expandtab textwidth=79: 49 | -------------------------------------------------------------------------------- /plugins/Geography/README.md: -------------------------------------------------------------------------------- 1 | Provides geography facts, such as timezones. 2 | -------------------------------------------------------------------------------- /plugins/Geography/common.py: -------------------------------------------------------------------------------- 1 | ### 2 | # Copyright (c) 2021, Valentin Lorentz 3 | # All rights reserved. 4 | # 5 | # Redistribution and use in source and binary forms, with or without 6 | # modification, are permitted provided that the following conditions are met: 7 | # 8 | # * Redistributions of source code must retain the above copyright notice, 9 | # this list of conditions, and the following disclaimer. 10 | # * Redistributions in binary form must reproduce the above copyright notice, 11 | # this list of conditions, and the following disclaimer in the 12 | # documentation and/or other materials provided with the distribution. 13 | # * Neither the name of the author of this software nor the name of 14 | # contributors to this software may be used to endorse or promote products 15 | # derived from this software without specific prior written consent. 16 | # 17 | # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 18 | # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19 | # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20 | # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 21 | # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 22 | # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 23 | # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 24 | # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 25 | # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 26 | # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 27 | # POSSIBILITY OF SUCH DAMAGE. 28 | 29 | ### 30 | 31 | import supybot.utils as utils 32 | 33 | 34 | def headers(): 35 | headers = utils.web.defaultHeaders.copy() 36 | 37 | # Comply with https://meta.wikimedia.org/wiki/User-Agent_policy 38 | # and https://operations.osmfoundation.org/policies/nominatim/ 39 | headers[ 40 | "User-agent" 41 | ] += " https://github.com/progval/Limnoria/ - Geography plugin" 42 | 43 | return headers 44 | -------------------------------------------------------------------------------- /plugins/Geography/local/__init__.py: -------------------------------------------------------------------------------- 1 | # Stub so local is a module, used for third-party modules 2 | -------------------------------------------------------------------------------- /plugins/Geography/messages.pot: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR ORGANIZATION 3 | # FIRST AUTHOR , YEAR. 4 | # 5 | msgid "" 6 | msgstr "" 7 | "Project-Id-Version: PACKAGE VERSION\n" 8 | "POT-Creation-Date: 2024-12-06 11:00+0100\n" 9 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 10 | "Last-Translator: FULL NAME \n" 11 | "Language-Team: LANGUAGE \n" 12 | "MIME-Version: 1.0\n" 13 | "Content-Type: text/plain; charset=UTF-8\n" 14 | "Content-Transfer-Encoding: 8bit\n" 15 | "Generated-By: pygettext.py 1.5\n" 16 | 17 | 18 | #: plugin.py:49 19 | msgid "Could not understand timezone: %s" 20 | msgstr "" 21 | 22 | #: plugin.py:54 23 | msgid "Timezone-related commands are not available. Your administrator need to either upgrade Python to version 3.9 or greater, or install pytz." 24 | msgstr "" 25 | 26 | #: plugin.py:66 27 | #, docstring 28 | msgid "" 29 | "Provides geography facts, such as timezones.\n" 30 | "\n" 31 | " This plugin uses data from `Wikidata `_\n" 32 | " and `OSM/Nominatim `.\n" 33 | " " 34 | msgstr "" 35 | 36 | #: plugin.py:76 37 | #, docstring 38 | msgid "" 39 | "\n" 40 | "\n" 41 | " Returns the current used in the given location. For example,\n" 42 | " the name could be \"Paris\" or \"Paris, France\". The response is\n" 43 | " formatted according to supybot.reply.format.time\n" 44 | " This uses data from Wikidata and Nominatim." 45 | msgstr "" 46 | 47 | #: plugin.py:84 plugin.py:137 48 | msgid "Could not find the location" 49 | msgstr "" 50 | 51 | #: plugin.py:110 plugin.py:178 52 | msgid "Could not find the timezone of this location." 53 | msgstr "" 54 | 55 | #: plugin.py:130 56 | #, docstring 57 | msgid "" 58 | "\n" 59 | "\n" 60 | " Returns the timezone used in the given location. For example,\n" 61 | " the name could be \"Paris\" or \"Paris, France\".\n" 62 | " This uses data from Wikidata and Nominatim." 63 | msgstr "" 64 | 65 | -------------------------------------------------------------------------------- /plugins/Google/config.py: -------------------------------------------------------------------------------- 1 | ### 2 | # Copyright (c) 2005, Jeremiah Fincher 3 | # Copyright (c) 2008-2010, James McCoy 4 | # Copyright (c) 2010-2021, Valentin Lorentz 5 | # All rights reserved. 6 | # 7 | # Redistribution and use in source and binary forms, with or without 8 | # modification, are permitted provided that the following conditions are met: 9 | # 10 | # * Redistributions of source code must retain the above copyright notice, 11 | # this list of conditions, and the following disclaimer. 12 | # * Redistributions in binary form must reproduce the above copyright notice, 13 | # this list of conditions, and the following disclaimer in the 14 | # documentation and/or other materials provided with the distribution. 15 | # * Neither the name of the author of this software nor the name of 16 | # contributors to this software may be used to endorse or promote products 17 | # derived from this software without specific prior written consent. 18 | # 19 | # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 20 | # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 21 | # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 22 | # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 23 | # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 24 | # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 25 | # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 26 | # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 27 | # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 28 | # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 29 | # POSSIBILITY OF SUCH DAMAGE. 30 | ### 31 | 32 | import supybot.conf as conf 33 | import supybot.registry as registry 34 | from supybot.i18n import PluginInternationalization, internationalizeDocstring 35 | _ = PluginInternationalization('Google') 36 | 37 | def configure(advanced): 38 | conf.registerPlugin('Google', True) 39 | 40 | Google = conf.registerPlugin('Google') 41 | 42 | # vim:set shiftwidth=4 softtabstop=4 expandtab textwidth=79: 43 | -------------------------------------------------------------------------------- /plugins/Google/test.py: -------------------------------------------------------------------------------- 1 | ### 2 | # Copyright (c) 2002-2004, Jeremiah Fincher 3 | # Copyright (c) 2008-2009, James Vega 4 | # Copyright (c) 2010-2021, Valentin Lorentz 5 | # All rights reserved. 6 | # 7 | # Redistribution and use in source and binary forms, with or without 8 | # modification, are permitted provided that the following conditions are met: 9 | # 10 | # * Redistributions of source code must retain the above copyright notice, 11 | # this list of conditions, and the following disclaimer. 12 | # * Redistributions in binary form must reproduce the above copyright notice, 13 | # this list of conditions, and the following disclaimer in the 14 | # documentation and/or other materials provided with the distribution. 15 | # * Neither the name of the author of this software nor the name of 16 | # contributors to this software may be used to endorse or promote products 17 | # derived from this software without specific prior written consent. 18 | # 19 | # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 20 | # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 21 | # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 22 | # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 23 | # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 24 | # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 25 | # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 26 | # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 27 | # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 28 | # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 29 | # POSSIBILITY OF SUCH DAMAGE. 30 | ### 31 | 32 | from supybot.test import * 33 | 34 | class GoogleTestCase(ChannelPluginTestCase): 35 | plugins = ('Google', 'Config') 36 | if network: 37 | def testTranslate(self): 38 | self.assertRegexp('translate en es hello world', '(?i)Hola mundo') 39 | 40 | # vim:set shiftwidth=4 softtabstop=4 expandtab textwidth=79: 41 | -------------------------------------------------------------------------------- /plugins/Hashes/README.rst: -------------------------------------------------------------------------------- 1 | .. _plugin-Hashes: 2 | 3 | Documentation for the Hashes plugin for Supybot 4 | =============================================== 5 | 6 | Purpose 7 | ------- 8 | 9 | Provides various hash- and encryption-related commands. 10 | 11 | Usage 12 | ----- 13 | 14 | Provides hash or encryption related commands 15 | 16 | .. _commands-Hashes: 17 | 18 | Commands 19 | -------- 20 | 21 | .. _command-hashes-algorithms: 22 | 23 | ``algorithms `` 24 | Returns the list of available algorithms. 25 | 26 | .. _command-hashes-md5: 27 | 28 | ``md5 `` 29 | Returns the md5 hash of a given string. 30 | 31 | .. _command-hashes-mkhash: 32 | 33 | ``mkhash `` 34 | Returns TEXT after it has been hashed with ALGORITHM. See the 'algorithms' command in this plugin to return the algorithms available on this system. 35 | 36 | .. _command-hashes-sha: 37 | 38 | ``sha `` 39 | Returns the SHA1 hash of a given string. 40 | 41 | .. _command-hashes-sha256: 42 | 43 | ``sha256 `` 44 | Returns a SHA256 hash of the given string. 45 | 46 | .. _command-hashes-sha512: 47 | 48 | ``sha512 `` 49 | Returns a SHA512 hash of the given string. 50 | 51 | .. _conf-Hashes: 52 | 53 | Configuration 54 | ------------- 55 | 56 | .. _conf-supybot.plugins.Hashes.public: 57 | 58 | 59 | supybot.plugins.Hashes.public 60 | This config variable defaults to "True", is not network-specific, and is not channel-specific. 61 | 62 | Determines whether this plugin is publicly visible. 63 | 64 | -------------------------------------------------------------------------------- /plugins/Hashes/config.py: -------------------------------------------------------------------------------- 1 | ### 2 | # Copyright (c) 2017, Ken Spencer 3 | # Copyright (c) 2017-2021, Valentin Lorentz 4 | # All rights reserved. 5 | # 6 | # Redistribution and use in source and binary forms, with or without 7 | # modification, are permitted provided that the following conditions are met: 8 | # 9 | # * Redistributions of source code must retain the above copyright notice, 10 | # this list of conditions, and the following disclaimer. 11 | # * Redistributions in binary form must reproduce the above copyright notice, 12 | # this list of conditions, and the following disclaimer in the 13 | # documentation and/or other materials provided with the distribution. 14 | # * Neither the name of the author of this software nor the name of 15 | # contributors to this software may be used to endorse or promote products 16 | # derived from this software without specific prior written consent. 17 | # 18 | # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 19 | # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20 | # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21 | # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 22 | # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 23 | # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 24 | # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 25 | # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 26 | # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 27 | # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 28 | # POSSIBILITY OF SUCH DAMAGE. 29 | ### 30 | 31 | import supybot.conf as conf 32 | import supybot.registry as registry 33 | from supybot.i18n import PluginInternationalization, internationalizeDocstring 34 | _ = PluginInternationalization('Hashes') 35 | 36 | def configure(advanced): 37 | # This will be called by supybot to configure this module. advanced is 38 | # a bool that specifies whether the user identified themself as an advanced 39 | # user or not. You should effect your configuration by manipulating the 40 | # registry as appropriate. 41 | from supybot.questions import expect, anything, something, yn 42 | conf.registerPlugin('Hashes', True) 43 | 44 | 45 | String = conf.registerPlugin('Hashes') 46 | -------------------------------------------------------------------------------- /plugins/Hashes/messages.pot: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR ORGANIZATION 3 | # FIRST AUTHOR , YEAR. 4 | # 5 | msgid "" 6 | msgstr "" 7 | "Project-Id-Version: PACKAGE VERSION\n" 8 | "POT-Creation-Date: 2024-12-06 11:00+0100\n" 9 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 10 | "Last-Translator: FULL NAME \n" 11 | "Language-Team: LANGUAGE \n" 12 | "MIME-Version: 1.0\n" 13 | "Content-Type: text/plain; charset=UTF-8\n" 14 | "Content-Transfer-Encoding: 8bit\n" 15 | "Generated-By: pygettext.py 1.5\n" 16 | 17 | 18 | #: plugin.py:45 19 | #, docstring 20 | msgid "Provides hash or encryption related commands" 21 | msgstr "" 22 | 23 | #: plugin.py:49 24 | #, docstring 25 | msgid "" 26 | "\n" 27 | "\n" 28 | " Returns the md5 hash of a given string.\n" 29 | " " 30 | msgstr "" 31 | 32 | #: plugin.py:58 33 | #, docstring 34 | msgid "" 35 | "\n" 36 | "\n" 37 | " Returns the SHA1 hash of a given string.\n" 38 | " " 39 | msgstr "" 40 | 41 | #: plugin.py:67 42 | #, docstring 43 | msgid "" 44 | "\n" 45 | "\n" 46 | " Returns a SHA256 hash of the given string.\n" 47 | " " 48 | msgstr "" 49 | 50 | #: plugin.py:76 51 | #, docstring 52 | msgid "" 53 | "\n" 54 | "\n" 55 | " Returns a SHA512 hash of the given string.\n" 56 | " " 57 | msgstr "" 58 | 59 | #: plugin.py:85 60 | #, docstring 61 | msgid "" 62 | "\n" 63 | "\n" 64 | " Returns the list of available algorithms." 65 | msgstr "" 66 | 67 | #: plugin.py:95 68 | #, docstring 69 | msgid "" 70 | " \n" 71 | "\n" 72 | " Returns TEXT after it has been hashed with ALGORITHM. See the 'algorithms' command in this plugin to return the algorithms available on this system." 73 | msgstr "" 74 | 75 | -------------------------------------------------------------------------------- /plugins/Herald/test.py: -------------------------------------------------------------------------------- 1 | ### 2 | # Copyright (c) 2002-2005, Jeremiah Fincher 3 | # Copyright (c) 2010-2021, Valentin Lorentz 4 | # All rights reserved. 5 | # 6 | # Redistribution and use in source and binary forms, with or without 7 | # modification, are permitted provided that the following conditions are met: 8 | # 9 | # * Redistributions of source code must retain the above copyright notice, 10 | # this list of conditions, and the following disclaimer. 11 | # * Redistributions in binary form must reproduce the above copyright notice, 12 | # this list of conditions, and the following disclaimer in the 13 | # documentation and/or other materials provided with the distribution. 14 | # * Neither the name of the author of this software nor the name of 15 | # contributors to this software may be used to endorse or promote products 16 | # derived from this software without specific prior written consent. 17 | # 18 | # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 19 | # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20 | # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21 | # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 22 | # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 23 | # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 24 | # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 25 | # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 26 | # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 27 | # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 28 | # POSSIBILITY OF SUCH DAMAGE. 29 | ### 30 | 31 | from supybot.test import * 32 | 33 | class HeraldTestCase(PluginTestCase): 34 | plugins = ('Herald',) 35 | 36 | 37 | # vim:set shiftwidth=4 softtabstop=4 expandtab textwidth=79: 38 | 39 | -------------------------------------------------------------------------------- /plugins/Internet/README.rst: -------------------------------------------------------------------------------- 1 | .. _plugin-Internet: 2 | 3 | Documentation for the Internet plugin for Supybot 4 | ================================================= 5 | 6 | Purpose 7 | ------- 8 | 9 | This plugin provides commands to transform domains into IP addresses and IP addresses to domains. 10 | It can also search WHOIS information and return hexips. 11 | 12 | Usage 13 | ----- 14 | 15 | Provides commands to query DNS, search WHOIS databases, 16 | and convert IPs to hex. 17 | 18 | .. _commands-Internet: 19 | 20 | Commands 21 | -------- 22 | 23 | .. _command-internet-dns: 24 | 25 | ``dns `` 26 | Returns the ip of or the reverse DNS hostname of . 27 | 28 | .. _command-internet-hexip: 29 | 30 | ``hexip `` 31 | Returns the hexadecimal IP for that IP. 32 | 33 | .. _command-internet-whois: 34 | 35 | ``whois `` 36 | Returns WHOIS information on the registration of . 37 | 38 | .. _conf-Internet: 39 | 40 | Configuration 41 | ------------- 42 | 43 | .. _conf-supybot.plugins.Internet.public: 44 | 45 | 46 | supybot.plugins.Internet.public 47 | This config variable defaults to "True", is not network-specific, and is not channel-specific. 48 | 49 | Determines whether this plugin is publicly visible. 50 | 51 | -------------------------------------------------------------------------------- /plugins/Internet/locales/fr.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: Limnoria\n" 4 | "POT-Creation-Date: 2024-12-06 11:00+0100\n" 5 | "PO-Revision-Date: \n" 6 | "Last-Translator: Valentin Lorentz \n" 7 | "Language-Team: Limnoria \n" 8 | "Language: fr_FR\n" 9 | "MIME-Version: 1.0\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Content-Transfer-Encoding: 8bit\n" 12 | "X-Poedit-Language: Français\n" 13 | "X-Poedit-Country: France\n" 14 | "X-Poedit-SourceCharset: ASCII\n" 15 | 16 | #: plugin.py:44 17 | msgid "" 18 | "Provides commands to query DNS, search WHOIS databases,\n" 19 | " and convert IPs to hex." 20 | msgstr "" 21 | 22 | #: plugin.py:49 23 | msgid "" 24 | "\n" 25 | "\n" 26 | " Returns the ip of or the reverse DNS hostname of .\n" 27 | " " 28 | msgstr "" 29 | "\n" 30 | "\n" 31 | "Retourne l'ip de l', ou le reverse DNS de l'" 32 | 33 | #: plugin.py:56 plugin.py:71 34 | msgid "Host not found." 35 | msgstr "Hôte non trouvé." 36 | 37 | #: plugin.py:86 38 | msgid "" 39 | "\n" 40 | "\n" 41 | " Returns WHOIS information on the registration of .\n" 42 | " " 43 | msgstr "" 44 | "\n" 45 | "\n" 46 | "Retourne les informations du WHOIS sur le ." 47 | 48 | #: plugin.py:148 49 | msgid "updated %s" 50 | msgstr "mis à jour le %s" 51 | 52 | #: plugin.py:151 53 | msgid "registered %s" 54 | msgstr "enregistré le %s" 55 | 56 | #: plugin.py:154 57 | msgid "expires %s" 58 | msgstr "expire le %s" 59 | 60 | #: plugin.py:174 61 | msgid " " 62 | msgstr " " 63 | 64 | #: plugin.py:176 65 | msgid " " 66 | msgstr " " 67 | 68 | #: plugin.py:183 69 | msgid "%s%s is %L." 70 | msgstr "%s%s est %L" 71 | 72 | #: plugin.py:186 73 | msgid "I couldn't find such a domain." 74 | msgstr "Je ne peux trouver ce domaine." 75 | 76 | #: plugin.py:191 77 | msgid "" 78 | "\n" 79 | "\n" 80 | " Returns the hexadecimal IP for that IP.\n" 81 | " " 82 | msgstr "" 83 | "\n" 84 | "\n" 85 | "Retourne l'IP hexadécimale pour cette IP." 86 | 87 | #~ msgid "domain" 88 | #~ msgstr "domaine" 89 | -------------------------------------------------------------------------------- /plugins/Internet/locales/it.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: Limnoria\n" 4 | "POT-Creation-Date: 2024-12-06 11:00+0100\n" 5 | "PO-Revision-Date: 2011-06-12 14:14+0200\n" 6 | "Last-Translator: skizzhg \n" 7 | "Language-Team: Italian \n" 8 | "Language: it\n" 9 | "MIME-Version: 1.0\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Content-Transfer-Encoding: 8bit\n" 12 | 13 | #: plugin.py:44 14 | msgid "" 15 | "Provides commands to query DNS, search WHOIS databases,\n" 16 | " and convert IPs to hex." 17 | msgstr "" 18 | 19 | #: plugin.py:49 20 | msgid "" 21 | "\n" 22 | "\n" 23 | " Returns the ip of or the reverse DNS hostname of .\n" 24 | " " 25 | msgstr "" 26 | "\n" 27 | "\n" 28 | " Restituisce l'ip di o il DNS inverso di .\n" 29 | " " 30 | 31 | #: plugin.py:56 plugin.py:71 32 | msgid "Host not found." 33 | msgstr "Host non trovato." 34 | 35 | #: plugin.py:86 36 | msgid "" 37 | "\n" 38 | "\n" 39 | " Returns WHOIS information on the registration of .\n" 40 | " " 41 | msgstr "" 42 | "\n" 43 | "\n" 44 | " Restituisce le informazioni WHOIS sulla registrazione di .\n" 45 | " " 46 | 47 | #: plugin.py:148 48 | msgid "updated %s" 49 | msgstr "aggiornato il %s" 50 | 51 | #: plugin.py:151 52 | msgid "registered %s" 53 | msgstr "registrato il %s" 54 | 55 | #: plugin.py:154 56 | msgid "expires %s" 57 | msgstr "scade il %s" 58 | 59 | #: plugin.py:174 60 | msgid " " 61 | msgstr " " 62 | 63 | #: plugin.py:176 64 | msgid " " 65 | msgstr " " 66 | 67 | #: plugin.py:183 68 | msgid "%s%s is %L." 69 | msgstr "%s%s è %L." 70 | 71 | #: plugin.py:186 72 | msgid "I couldn't find such a domain." 73 | msgstr "Non riesco a trovare un dominio." 74 | 75 | #: plugin.py:191 76 | msgid "" 77 | "\n" 78 | "\n" 79 | " Returns the hexadecimal IP for that IP.\n" 80 | " " 81 | msgstr "" 82 | "\n" 83 | "\n" 84 | " Restituisce l'IP esadecimale per questo IP.\n" 85 | " " 86 | 87 | #~ msgid "domain" 88 | #~ msgstr "dominio" 89 | -------------------------------------------------------------------------------- /plugins/Internet/messages.pot: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR ORGANIZATION 3 | # FIRST AUTHOR , YEAR. 4 | # 5 | msgid "" 6 | msgstr "" 7 | "Project-Id-Version: PACKAGE VERSION\n" 8 | "POT-Creation-Date: 2024-12-06 11:00+0100\n" 9 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 10 | "Last-Translator: FULL NAME \n" 11 | "Language-Team: LANGUAGE \n" 12 | "MIME-Version: 1.0\n" 13 | "Content-Type: text/plain; charset=UTF-8\n" 14 | "Content-Transfer-Encoding: 8bit\n" 15 | "Generated-By: pygettext.py 1.5\n" 16 | 17 | 18 | #: plugin.py:44 19 | #, docstring 20 | msgid "" 21 | "Provides commands to query DNS, search WHOIS databases,\n" 22 | " and convert IPs to hex." 23 | msgstr "" 24 | 25 | #: plugin.py:49 26 | #, docstring 27 | msgid "" 28 | "\n" 29 | "\n" 30 | " Returns the ip of or the reverse DNS hostname of .\n" 31 | " " 32 | msgstr "" 33 | 34 | #: plugin.py:56 plugin.py:71 35 | msgid "Host not found." 36 | msgstr "" 37 | 38 | #: plugin.py:86 39 | #, docstring 40 | msgid "" 41 | "\n" 42 | "\n" 43 | " Returns WHOIS information on the registration of .\n" 44 | " " 45 | msgstr "" 46 | 47 | #: plugin.py:148 48 | msgid "updated %s" 49 | msgstr "" 50 | 51 | #: plugin.py:151 52 | msgid "registered %s" 53 | msgstr "" 54 | 55 | #: plugin.py:154 56 | msgid "expires %s" 57 | msgstr "" 58 | 59 | #: plugin.py:174 60 | msgid " " 61 | msgstr "" 62 | 63 | #: plugin.py:176 64 | msgid " " 65 | msgstr "" 66 | 67 | #: plugin.py:183 68 | msgid "%s%s is %L." 69 | msgstr "" 70 | 71 | #: plugin.py:186 72 | msgid "I couldn't find such a domain." 73 | msgstr "" 74 | 75 | #: plugin.py:191 76 | #, docstring 77 | msgid "" 78 | "\n" 79 | "\n" 80 | " Returns the hexadecimal IP for that IP.\n" 81 | " " 82 | msgstr "" 83 | 84 | -------------------------------------------------------------------------------- /plugins/Internet/test.py: -------------------------------------------------------------------------------- 1 | ### 2 | # Copyright (c) 2003-2005, Jeremiah Fincher 3 | # Copyright (c) 2010, James McCoy 4 | # Copyright (c) 2010-2021, Valentin Lorentz 5 | # All rights reserved. 6 | # 7 | # Redistribution and use in source and binary forms, with or without 8 | # modification, are permitted provided that the following conditions are met: 9 | # 10 | # * Redistributions of source code must retain the above copyright notice, 11 | # this list of conditions, and the following disclaimer. 12 | # * Redistributions in binary form must reproduce the above copyright notice, 13 | # this list of conditions, and the following disclaimer in the 14 | # documentation and/or other materials provided with the distribution. 15 | # * Neither the name of the author of this software nor the name of 16 | # contributors to this software may be used to endorse or promote products 17 | # derived from this software without specific prior written consent. 18 | # 19 | # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 20 | # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 21 | # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 22 | # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 23 | # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 24 | # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 25 | # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 26 | # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 27 | # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 28 | # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 29 | # POSSIBILITY OF SUCH DAMAGE. 30 | ### 31 | 32 | from supybot.test import * 33 | 34 | class InternetTestCase(PluginTestCase): 35 | plugins = ('Internet',) 36 | if network: 37 | def testDns(self): 38 | self.assertNotError('dns slashdot.org') 39 | self.assertResponse('dns does.not.exist.', 40 | 'Host not found.') 41 | 42 | def testWhois(self): 43 | self.assertNotError('internet whois microsoft.com') 44 | self.assertNotError('internet whois inria.fr') 45 | self.assertNotError('internet whois slime.com.au') 46 | self.assertNotError('internet whois 8.8.8.8') 47 | self.assertNotError('internet whois net') 48 | 49 | 50 | # vim:set shiftwidth=4 softtabstop=4 expandtab textwidth=79: 51 | -------------------------------------------------------------------------------- /plugins/Lart/locales/fr.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: Limnoria\n" 4 | "POT-Creation-Date: 2022-02-06 00:12+0100\n" 5 | "PO-Revision-Date: \n" 6 | "Last-Translator: Valentin Lorentz \n" 7 | "Language-Team: Limnoria \n" 8 | "Language: fr_FR\n" 9 | "MIME-Version: 1.0\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Content-Transfer-Encoding: 8bit\n" 12 | "X-Poedit-Language: Français\n" 13 | "X-Poedit-Country: France\n" 14 | "X-Poedit-SourceCharset: ASCII\n" 15 | 16 | #: config.py:50 17 | msgid "" 18 | "Determines whether the bot will show the ids\n" 19 | " of a lart when the lart is given." 20 | msgstr "Détermine si le bot affichera les idées d'un lart lorsqu'il est donné." 21 | 22 | #: plugin.py:40 23 | msgid "" 24 | "\n" 25 | " Provides an implementation of the Luser Attitude Readjustment Tool\n" 26 | " for users.\n" 27 | "\n" 28 | " Example:\n" 29 | "\n" 30 | " * If you add ``slaps $who``.\n" 31 | " * And Someone says ``@lart ChanServ``.\n" 32 | " * ``* bot slaps ChanServ``.\n" 33 | " " 34 | msgstr "" 35 | 36 | #: plugin.py:59 37 | msgid "Larts must contain $who." 38 | msgstr "Les larts doivent contenir $who." 39 | 40 | #: plugin.py:63 41 | msgid "" 42 | "[] [] [for ]\n" 43 | "\n" 44 | " Uses the Luser Attitude Readjustment Tool on (for " 45 | ",\n" 46 | " if given). If is given, uses that specific lart. " 47 | "is\n" 48 | " only necessary if the message isn't sent in the channel itself.\n" 49 | " " 50 | msgstr "" 51 | "[] [] [ [for ]\n" 52 | "\n" 53 | "Utilise le Luser Attitude Readjustment Tool sur (pour la " 54 | ", si elle est donnée). Si l' est donné, utilise un LART " 55 | "spécifique. n'est nécessaire que si le message n'est pas envoyé sur " 56 | "le canal lui-même." 57 | 58 | #: plugin.py:77 59 | msgid "There is no lart with id #%i." 60 | msgstr "Il n'y a pas de lart d'id #%i." 61 | 62 | #: plugin.py:82 63 | msgid "There are no larts in my database for %s." 64 | msgstr "Il n'y a pas de lart dans ma base de données pour %s." 65 | 66 | #: plugin.py:88 67 | msgid "trying to dis me" 68 | msgstr "essaye de me manquer de respect" 69 | 70 | #: plugin.py:96 71 | msgid " for " 72 | msgstr " pour " 73 | -------------------------------------------------------------------------------- /plugins/Lart/locales/it.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: Limnoria\n" 4 | "POT-Creation-Date: 2022-02-06 00:12+0100\n" 5 | "PO-Revision-Date: 2011-06-12 14:41+0200\n" 6 | "Last-Translator: skizzhg \n" 7 | "Language-Team: Italian \n" 8 | "Language: it\n" 9 | "MIME-Version: 1.0\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Content-Transfer-Encoding: 8bit\n" 12 | 13 | #: config.py:50 14 | msgid "" 15 | "Determines whether the bot will show the ids\n" 16 | " of a lart when the lart is given." 17 | msgstr "" 18 | "Determina se il bot mostrerà gli id\n" 19 | " di un lart quando questo viene dato." 20 | 21 | #: plugin.py:40 22 | msgid "" 23 | "\n" 24 | " Provides an implementation of the Luser Attitude Readjustment Tool\n" 25 | " for users.\n" 26 | "\n" 27 | " Example:\n" 28 | "\n" 29 | " * If you add ``slaps $who``.\n" 30 | " * And Someone says ``@lart ChanServ``.\n" 31 | " * ``* bot slaps ChanServ``.\n" 32 | " " 33 | msgstr "" 34 | 35 | #: plugin.py:59 36 | msgid "Larts must contain $who." 37 | msgstr "I lart devono contenere $who." 38 | 39 | #: plugin.py:63 40 | msgid "" 41 | "[] [] [for ]\n" 42 | "\n" 43 | " Uses the Luser Attitude Readjustment Tool on (for " 44 | ",\n" 45 | " if given). If is given, uses that specific lart. " 46 | "is\n" 47 | " only necessary if the message isn't sent in the channel itself.\n" 48 | " " 49 | msgstr "" 50 | "[] [] [per ]\n" 51 | "\n" 52 | " Utilizza il Luser Attitude Readjustment Tool su (per " 53 | ",\n" 54 | " se fornito). Se viene dato, usa quello specifico lart. " 55 | "è\n" 56 | " necessario solo se il messaggio non viene inviato nel canale " 57 | "stesso.\n" 58 | " " 59 | 60 | #: plugin.py:77 61 | msgid "There is no lart with id #%i." 62 | msgstr "Non c'è nessun lart con l'id #%i." 63 | 64 | #: plugin.py:82 65 | msgid "There are no larts in my database for %s." 66 | msgstr "Non ci sono lart per %s nel mio database." 67 | 68 | #: plugin.py:88 69 | msgid "trying to dis me" 70 | msgstr "cercando di mancarmi di rispetto" 71 | 72 | #: plugin.py:96 73 | msgid " for " 74 | msgstr " per" 75 | -------------------------------------------------------------------------------- /plugins/Lart/messages.pot: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR ORGANIZATION 3 | # FIRST AUTHOR , YEAR. 4 | # 5 | msgid "" 6 | msgstr "" 7 | "Project-Id-Version: PACKAGE VERSION\n" 8 | "POT-Creation-Date: 2024-12-06 11:00+0100\n" 9 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 10 | "Last-Translator: FULL NAME \n" 11 | "Language-Team: LANGUAGE \n" 12 | "MIME-Version: 1.0\n" 13 | "Content-Type: text/plain; charset=UTF-8\n" 14 | "Content-Transfer-Encoding: 8bit\n" 15 | "Generated-By: pygettext.py 1.5\n" 16 | 17 | 18 | #: config.py:50 19 | msgid "" 20 | "Determines whether the bot will show the ids\n" 21 | " of a lart when the lart is given." 22 | msgstr "" 23 | 24 | #: plugin.py:40 25 | #, docstring 26 | msgid "" 27 | "\n" 28 | " Provides an implementation of the Luser Attitude Readjustment Tool\n" 29 | " for users.\n" 30 | "\n" 31 | " Example:\n" 32 | "\n" 33 | " * If you add ``slaps $who``.\n" 34 | " * And Someone says ``@lart ChanServ``.\n" 35 | " * ``* bot slaps ChanServ``.\n" 36 | " " 37 | msgstr "" 38 | 39 | #: plugin.py:59 40 | msgid "Larts must contain $who." 41 | msgstr "" 42 | 43 | #: plugin.py:63 44 | #, docstring 45 | msgid "" 46 | "[] [] [for ]\n" 47 | "\n" 48 | " Uses the Luser Attitude Readjustment Tool on (for ,\n" 49 | " if given). If is given, uses that specific lart. is\n" 50 | " only necessary if the message isn't sent in the channel itself.\n" 51 | " " 52 | msgstr "" 53 | 54 | #: plugin.py:77 55 | msgid "There is no lart with id #%i." 56 | msgstr "" 57 | 58 | #: plugin.py:82 59 | msgid "There are no larts in my database for %s." 60 | msgstr "" 61 | 62 | #: plugin.py:88 63 | msgid "trying to dis me" 64 | msgstr "" 65 | 66 | #: plugin.py:96 67 | msgid " for " 68 | msgstr "" 69 | 70 | -------------------------------------------------------------------------------- /plugins/Limiter/README.rst: -------------------------------------------------------------------------------- 1 | .. _plugin-Limiter: 2 | 3 | Documentation for the Limiter plugin for Supybot 4 | ================================================ 5 | 6 | Purpose 7 | ------- 8 | 9 | This plugin sets channel limits (MODE +l) based on 10 | ``plugins.Limiter.MaximumExcess`` plus the current number of users 11 | in the channel. This is useful to prevent flood attacks. 12 | 13 | Usage 14 | ----- 15 | 16 | In order to use this plugin, its config values need to be properly 17 | setup. supybot.plugins.Limiter.enable needs to be set to True and 18 | supybot.plugins.Limiter.{maximumExcess,minimumExcess} should be set to 19 | values appropriate to your channel (if the defaults aren't satisfactory). 20 | Once these are set, and someone enters/leaves the channel, Supybot will 21 | start setting the proper +l modes. 22 | 23 | .. _conf-Limiter: 24 | 25 | Configuration 26 | ------------- 27 | 28 | .. _conf-supybot.plugins.Limiter.enable: 29 | 30 | 31 | supybot.plugins.Limiter.enable 32 | This config variable defaults to "False", is network-specific, and is channel-specific. 33 | 34 | Determines whether the bot will maintain the channel limit to be slightly above the current number of people in the channel, in order to make clone/drone attacks harder. 35 | 36 | .. _conf-supybot.plugins.Limiter.maximumExcess: 37 | 38 | 39 | supybot.plugins.Limiter.maximumExcess 40 | This config variable defaults to "10", is network-specific, and is channel-specific. 41 | 42 | Determines the maximum number of free spots that will be saved when limits are being enforced. This should always be larger than supybot.plugins.Limiter.limit.minimumExcess. 43 | 44 | .. _conf-supybot.plugins.Limiter.minimumExcess: 45 | 46 | 47 | supybot.plugins.Limiter.minimumExcess 48 | This config variable defaults to "5", is network-specific, and is channel-specific. 49 | 50 | Determines the minimum number of free spots that will be saved when limits are being enforced. This should always be smaller than supybot.plugins.Limiter.limit.maximumExcess. 51 | 52 | .. _conf-supybot.plugins.Limiter.public: 53 | 54 | 55 | supybot.plugins.Limiter.public 56 | This config variable defaults to "True", is not network-specific, and is not channel-specific. 57 | 58 | Determines whether this plugin is publicly visible. 59 | 60 | -------------------------------------------------------------------------------- /plugins/Limiter/messages.pot: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR ORGANIZATION 3 | # FIRST AUTHOR , YEAR. 4 | # 5 | msgid "" 6 | msgstr "" 7 | "Project-Id-Version: PACKAGE VERSION\n" 8 | "POT-Creation-Date: 2024-12-06 11:00+0100\n" 9 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 10 | "Last-Translator: FULL NAME \n" 11 | "Language-Team: LANGUAGE \n" 12 | "MIME-Version: 1.0\n" 13 | "Content-Type: text/plain; charset=UTF-8\n" 14 | "Content-Transfer-Encoding: 8bit\n" 15 | "Generated-By: pygettext.py 1.5\n" 16 | 17 | 18 | #: config.py:47 19 | msgid "" 20 | "Determines whether the bot will maintain the\n" 21 | " channel limit to be slightly above the current number of people in the\n" 22 | " channel, in order to make clone/drone attacks harder." 23 | msgstr "" 24 | 25 | #: config.py:51 26 | msgid "" 27 | "Determines the minimum number of free\n" 28 | " spots that will be saved when limits are being enforced. This should\n" 29 | " always be smaller than supybot.plugins.Limiter.limit.maximumExcess." 30 | msgstr "" 31 | 32 | #: config.py:55 33 | msgid "" 34 | "Determines the maximum number of free spots\n" 35 | " that will be saved when limits are being enforced. This should always be\n" 36 | " larger than supybot.plugins.Limiter.limit.minimumExcess." 37 | msgstr "" 38 | 39 | #: plugin.py:40 40 | #, docstring 41 | msgid "" 42 | "In order to use this plugin, its config values need to be properly\n" 43 | " setup. supybot.plugins.Limiter.enable needs to be set to True and\n" 44 | " supybot.plugins.Limiter.{maximumExcess,minimumExcess} should be set to\n" 45 | " values appropriate to your channel (if the defaults aren't satisfactory).\n" 46 | " Once these are set, and someone enters/leaves the channel, Supybot will\n" 47 | " start setting the proper +l modes.\n" 48 | " " 49 | msgstr "" 50 | 51 | -------------------------------------------------------------------------------- /plugins/LogToIrc/messages.pot: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR ORGANIZATION 3 | # FIRST AUTHOR , YEAR. 4 | # 5 | msgid "" 6 | msgstr "" 7 | "Project-Id-Version: PACKAGE VERSION\n" 8 | "POT-Creation-Date: 2024-12-06 11:00+0100\n" 9 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 10 | "Last-Translator: FULL NAME \n" 11 | "Language-Team: LANGUAGE \n" 12 | "MIME-Version: 1.0\n" 13 | "Content-Type: text/plain; charset=UTF-8\n" 14 | "Content-Transfer-Encoding: 8bit\n" 15 | "Generated-By: pygettext.py 1.5\n" 16 | 17 | 18 | #: config.py:42 19 | #, docstring 20 | msgid "Value must be one of INFO, WARNING, ERROR, or CRITICAL." 21 | msgstr "" 22 | 23 | #: config.py:49 24 | #, docstring 25 | msgid "Value must be a valid channel or a valid nick." 26 | msgstr "" 27 | 28 | #: plugin.py:33 29 | #, docstring 30 | msgid "" 31 | "\n" 32 | "Allows for sending the bot's logging output to channels or users.\n" 33 | msgstr "" 34 | 35 | -------------------------------------------------------------------------------- /plugins/LogToIrc/test.py: -------------------------------------------------------------------------------- 1 | ### 2 | # Copyright (c) 2004, Stéphan Kochen 3 | # Copyright (c) 2021, Valentin Lorentz 4 | # All rights reserved. 5 | # 6 | # Redistribution and use in source and binary forms, with or without 7 | # modification, are permitted provided that the following conditions are met: 8 | # 9 | # * Redistributions of source code must retain the above copyright notice, 10 | # this list of conditions, and the following disclaimer. 11 | # * Redistributions in binary form must reproduce the above copyright notice, 12 | # this list of conditions, and the following disclaimer in the 13 | # documentation and/or other materials provided with the distribution. 14 | # * Neither the name of the author of this software nor the name of 15 | # contributors to this software may be used to endorse or promote products 16 | # derived from this software without specific prior written consent. 17 | # 18 | # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 19 | # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20 | # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21 | # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 22 | # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 23 | # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 24 | # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 25 | # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 26 | # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 27 | # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 28 | # POSSIBILITY OF SUCH DAMAGE. 29 | ### 30 | 31 | from supybot.test import * 32 | 33 | class LogToIrcTestCase(PluginTestCase): 34 | plugins = ('LogToIrc',) 35 | 36 | 37 | # vim:set shiftwidth=4 softtabstop=4 expandtab textwidth=79: 38 | -------------------------------------------------------------------------------- /plugins/Math/README.rst: -------------------------------------------------------------------------------- 1 | .. _plugin-Math: 2 | 3 | Documentation for the Math plugin for Supybot 4 | ============================================= 5 | 6 | Purpose 7 | ------- 8 | 9 | This plugin provides a calculator, converter, a list of units 10 | and other useful math functions. 11 | 12 | Usage 13 | ----- 14 | 15 | Provides commands to work with math, such as a calculator and 16 | a unit converter. 17 | 18 | .. _commands-Math: 19 | 20 | Commands 21 | -------- 22 | 23 | .. _command-math-base: 24 | 25 | ``base [] `` 26 | Converts from base to base . If is left out, it converts to decimal. 27 | 28 | .. _command-math-calc: 29 | 30 | ``calc `` 31 | Returns the value of the evaluated . 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. 32 | 33 | .. _command-math-convert: 34 | 35 | ``convert [] to `` 36 | Converts from to . If number isn't given, it defaults to 1. For unit information, see 'units' command. 37 | 38 | .. _command-math-icalc: 39 | 40 | ``icalc `` 41 | 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. 42 | 43 | .. _command-math-rpn: 44 | 45 | ``rpn `` 46 | Returns the value of an RPN expression. 47 | 48 | .. _command-math-units: 49 | 50 | ``units []`` 51 | 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. 52 | 53 | .. _conf-Math: 54 | 55 | Configuration 56 | ------------- 57 | 58 | .. _conf-supybot.plugins.Math.public: 59 | 60 | 61 | supybot.plugins.Math.public 62 | This config variable defaults to "True", is not network-specific, and is not channel-specific. 63 | 64 | Determines whether this plugin is publicly visible. 65 | 66 | -------------------------------------------------------------------------------- /plugins/Math/local/__init__.py: -------------------------------------------------------------------------------- 1 | # Stub so local is a module, used for third-party modules 2 | -------------------------------------------------------------------------------- /plugins/MessageParser/local/__init__.py: -------------------------------------------------------------------------------- 1 | # Stub so local is a module, used for third-party modules 2 | -------------------------------------------------------------------------------- /plugins/Misc/__init__.py: -------------------------------------------------------------------------------- 1 | ### 2 | # Copyright (c) 2004-2005, Jeremiah Fincher 3 | # Copyright (c) 2010-2021, Valentin Lorentz 4 | # All rights reserved. 5 | # 6 | # Redistribution and use in source and binary forms, with or without 7 | # modification, are permitted provided that the following conditions are met: 8 | # 9 | # * Redistributions of source code must retain the above copyright notice, 10 | # this list of conditions, and the following disclaimer. 11 | # * Redistributions in binary form must reproduce the above copyright notice, 12 | # this list of conditions, and the following disclaimer in the 13 | # documentation and/or other materials provided with the distribution. 14 | # * Neither the name of the author of this software nor the name of 15 | # contributors to this software may be used to endorse or promote products 16 | # derived from this software without specific prior written consent. 17 | # 18 | # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 19 | # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20 | # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21 | # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 22 | # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 23 | # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 24 | # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 25 | # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 26 | # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 27 | # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 28 | # POSSIBILITY OF SUCH DAMAGE. 29 | ### 30 | 31 | """ 32 | Miscellaneous commands. 33 | """ 34 | 35 | import supybot 36 | import supybot.world as world 37 | 38 | # Use this for the version of this plugin. You may wish to put a CVS keyword 39 | # in here if you\'re keeping the plugin in CVS or some similar system. 40 | __version__ = "%%VERSION%%" 41 | 42 | __author__ = supybot.authors.jemfinch 43 | __maintainer__ = supybot.authors.limnoria_core 44 | 45 | # This is a dictionary mapping supybot.Author instances to lists of 46 | # contributions. 47 | __contributors__ = {} 48 | 49 | from . import config 50 | from . import plugin 51 | from importlib import reload 52 | reload(plugin) # In case we're being reloaded. 53 | 54 | if world.testing: 55 | from . import test 56 | 57 | Class = plugin.Class 58 | configure = config.configure 59 | -------------------------------------------------------------------------------- /plugins/News/README.rst: -------------------------------------------------------------------------------- 1 | .. _plugin-News: 2 | 3 | Documentation for the News plugin for Supybot 4 | ============================================= 5 | 6 | Purpose 7 | ------- 8 | 9 | A module to allow each channel to have "news". News items may have expiration 10 | dates. 11 | It was partially inspired by the news system used on #debian's bot. 12 | 13 | Usage 14 | ----- 15 | 16 | This plugin provides a means of maintaining News for a channel. 17 | 18 | .. _commands-News: 19 | 20 | Commands 21 | -------- 22 | 23 | .. _command-news-add: 24 | 25 | ``add [] : `` 26 | Adds a given news item of to a channel with the given . If isn't 0, that news item will expire seconds from now. is only necessary if the message isn't sent in the channel itself. 27 | 28 | .. _command-news-change: 29 | 30 | ``change [] `` 31 | Changes the news item with from according to the regular expression . should be of the form s/text/replacement/flags. is only necessary if the message isn't sent on the channel itself. 32 | 33 | .. _command-news-news: 34 | 35 | ``news [] []`` 36 | Display the news items for in the format of '(#id) subject'. If is given, retrieve only that news item; otherwise retrieve all news items. is only necessary if the message isn't sent in the channel itself. 37 | 38 | .. _command-news-old: 39 | 40 | ``old [] []`` 41 | Returns the old news item for with . If no number is given, returns all the old news items in reverse order. is only necessary if the message isn't sent in the channel itself. 42 | 43 | .. _command-news-remove: 44 | 45 | ``remove [] `` 46 | Removes the news item with from . is only necessary if the message isn't sent in the channel itself. 47 | 48 | .. _conf-News: 49 | 50 | Configuration 51 | ------------- 52 | 53 | .. _conf-supybot.plugins.News.public: 54 | 55 | 56 | supybot.plugins.News.public 57 | This config variable defaults to "True", is not network-specific, and is not channel-specific. 58 | 59 | Determines whether this plugin is publicly visible. 60 | 61 | -------------------------------------------------------------------------------- /plugins/NickAuth/README.rst: -------------------------------------------------------------------------------- 1 | .. _plugin-NickAuth: 2 | 3 | Documentation for the NickAuth plugin for Supybot 4 | ================================================= 5 | 6 | Purpose 7 | ------- 8 | 9 | Support authentication based on nicks and network services. 10 | 11 | Usage 12 | ----- 13 | 14 | This plugin allows users to use their network services account to 15 | authenticate to the bot. 16 | 17 | They first have to use ``@nickauth nick add `` while being 18 | identified to the bot and then use ``@auth`` when they want to 19 | identify to the bot. 20 | 21 | .. _commands-NickAuth: 22 | 23 | Commands 24 | -------- 25 | 26 | .. _command-nickauth-auth: 27 | 28 | ``auth takes no argument`` 29 | Tries to authenticate you using network services. If you get no reply, it means you are not authenticated to the network services. 30 | 31 | .. _command-nickauth-nick.add: 32 | 33 | ``nick add [] `` 34 | Add to the list of nicks owned by the on the . You have to register this nick to the network services to be authenticated. defaults to the current network. 35 | 36 | .. _command-nickauth-nick.list: 37 | 38 | ``nick list [] []`` 39 | Lists nicks of the on the network. defaults to the current network. 40 | 41 | .. _command-nickauth-nick.remove: 42 | 43 | ``nick remove [] `` 44 | Remove from the list of nicks owned by the on the . defaults to the current network. 45 | 46 | .. _conf-NickAuth: 47 | 48 | Configuration 49 | ------------- 50 | 51 | .. _conf-supybot.plugins.NickAuth.public: 52 | 53 | 54 | supybot.plugins.NickAuth.public 55 | This config variable defaults to "True", is not network-specific, and is not channel-specific. 56 | 57 | Determines whether this plugin is publicly visible. 58 | 59 | -------------------------------------------------------------------------------- /plugins/NickAuth/local/__init__.py: -------------------------------------------------------------------------------- 1 | # Stub so local is a module, used for third-party modules 2 | -------------------------------------------------------------------------------- /plugins/NickCapture/README.rst: -------------------------------------------------------------------------------- 1 | .. _plugin-NickCapture: 2 | 3 | Documentation for the NickCapture plugin for Supybot 4 | ==================================================== 5 | 6 | Purpose 7 | ------- 8 | 9 | This module attempts to capture the bot's nick, watching for an opportunity to 10 | switch to that nick. 11 | 12 | Usage 13 | ----- 14 | 15 | This plugin constantly tries to take whatever nick is configured as 16 | supybot.nick. Just make sure that's set appropriately, and this plugin 17 | will do the rest. 18 | 19 | .. _conf-NickCapture: 20 | 21 | Configuration 22 | ------------- 23 | 24 | .. _conf-supybot.plugins.NickCapture.ison: 25 | 26 | 27 | supybot.plugins.NickCapture.ison 28 | This config variable defaults to "True", is not network-specific, and is not channel-specific. 29 | 30 | Determines whether the bot will check occasionally if its preferred nick is in use via the ISON command. 31 | 32 | .. _conf-supybot.plugins.NickCapture.ison.period: 33 | 34 | 35 | supybot.plugins.NickCapture.ison.period 36 | This config variable defaults to "600", is not network-specific, and is not channel-specific. 37 | 38 | Determines how often (in seconds) the bot will check whether its nick ISON. 39 | 40 | .. _conf-supybot.plugins.NickCapture.public: 41 | 42 | 43 | supybot.plugins.NickCapture.public 44 | This config variable defaults to "True", is not network-specific, and is not channel-specific. 45 | 46 | Determines whether this plugin is publicly visible. 47 | 48 | -------------------------------------------------------------------------------- /plugins/NickCapture/locales/de.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: Supybot\n" 4 | "POT-Creation-Date: 2022-02-06 00:12+0100\n" 5 | "PO-Revision-Date: 2011-10-31 13:02+0100\n" 6 | "Last-Translator: Florian Besser \n" 7 | "Language-Team: German \n" 8 | "Language: de\n" 9 | "MIME-Version: 1.0\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Content-Transfer-Encoding: 8bit\n" 12 | "Generated-By: pygettext.py 1.5\n" 13 | "X-Poedit-Language: German\n" 14 | "X-Poedit-Country: GERMANY\n" 15 | 16 | #: config.py:48 17 | msgid "" 18 | "Determines whether the bot will check\n" 19 | " occasionally if its preferred nick is in use via the ISON command." 20 | msgstr "" 21 | "Legt fest ob der Bot bei Bedarf, mit dem ISON Befehl, checken soll ob sein " 22 | "geschwünschter Nick in benutzung ist." 23 | 24 | #: config.py:51 25 | msgid "" 26 | "Determines how often (in seconds) the bot\n" 27 | " will check whether its nick ISON." 28 | msgstr "" 29 | "Legt fest wie oft (in Sekunden) der Bot checkt ob der Nick verfügbar ist." 30 | 31 | #: plugin.py:41 32 | msgid "" 33 | "This plugin constantly tries to take whatever nick is configured as\n" 34 | " supybot.nick. Just make sure that's set appropriately, and this plugin\n" 35 | " will do the rest." 36 | msgstr "" 37 | "Dieses Plugin versucht dauernd den Nick der in supybot.nick konfiguriert ist " 38 | "zu bekommen. Stelle nur sicher das dieser richtig gesetzt wurde und das " 39 | "Plugin macht den Rest." 40 | 41 | #: plugin.py:106 42 | msgid "This is returned by the ISON command." 43 | msgstr "Dies wird vom ISON Befehl zurückgegeben." 44 | 45 | #: plugin.py:113 46 | msgid "This is sent by the MONITOR when a nick goes offline." 47 | msgstr "" 48 | 49 | #: plugin.py:123 50 | msgid "Nick/channel is temporarily unavailable" 51 | msgstr "" 52 | -------------------------------------------------------------------------------- /plugins/NickCapture/locales/fi.po: -------------------------------------------------------------------------------- 1 | # NickCapture plugin in Limnoria. 2 | # Copyright (C) 2011 Limnoria 3 | # Mikaela Suomalainen , 2011. 4 | # 5 | msgid "" 6 | msgstr "" 7 | "Project-Id-Version: \n" 8 | "POT-Creation-Date: 2022-02-06 00:12+0100\n" 9 | "PO-Revision-Date: 2011-08-10 15:06+0200\n" 10 | "Last-Translator: Mikaela Suomalainen \n" 11 | "Language-Team: \n" 12 | "Language: fi_FI\n" 13 | "MIME-Version: 1.0\n" 14 | "Content-Type: text/plain; charset=UTF-8\n" 15 | "Content-Transfer-Encoding: 8bit\n" 16 | "Generated-By: pygettext.py 1.5\n" 17 | 18 | #: config.py:48 19 | msgid "" 20 | "Determines whether the bot will check\n" 21 | " occasionally if its preferred nick is in use via the ISON command." 22 | msgstr "" 23 | "Määrittää yrittääkö botti tarkistaa\n" 24 | " silloin tällöin onko sen haluama nimimerkki käytössä ISON komennolla." 25 | 26 | #: config.py:51 27 | msgid "" 28 | "Determines how often (in seconds) the bot\n" 29 | " will check whether its nick ISON." 30 | msgstr "" 31 | "Määrittää kuinka usein (sekunteina) botti\n" 32 | " tarkistaa nimimerkkinsä ISON komennolla." 33 | 34 | #: plugin.py:41 35 | msgid "" 36 | "This plugin constantly tries to take whatever nick is configured as\n" 37 | " supybot.nick. Just make sure that's set appropriately, and this plugin\n" 38 | " will do the rest." 39 | msgstr "" 40 | "Tämä lisäosa yrittää jatkuvasti ottaa sen nimimerkin, joka on määritetty\n" 41 | " asetusarvossa supybot.nick. Tee vain varmaksi, että se on määritetty " 42 | "kunnolla\n" 43 | " ja tämä lisäosa hoitaa loput." 44 | 45 | #: plugin.py:106 46 | msgid "This is returned by the ISON command." 47 | msgstr "Tämä on ISON komennon palauttama." 48 | 49 | #: plugin.py:113 50 | msgid "This is sent by the MONITOR when a nick goes offline." 51 | msgstr "" 52 | 53 | #: plugin.py:123 54 | msgid "Nick/channel is temporarily unavailable" 55 | msgstr "" 56 | -------------------------------------------------------------------------------- /plugins/NickCapture/locales/fr.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: Limnoria\n" 4 | "POT-Creation-Date: 2022-02-06 00:12+0100\n" 5 | "PO-Revision-Date: \n" 6 | "Last-Translator: Valentin Lorentz \n" 7 | "Language-Team: Limnoria \n" 8 | "Language: fr_FR\n" 9 | "MIME-Version: 1.0\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Content-Transfer-Encoding: 8bit\n" 12 | "X-Poedit-Language: Français\n" 13 | "X-Poedit-Country: France\n" 14 | "X-Poedit-SourceCharset: ASCII\n" 15 | 16 | #: config.py:48 17 | msgid "" 18 | "Determines whether the bot will check\n" 19 | " occasionally if its preferred nick is in use via the ISON command." 20 | msgstr "" 21 | "Détermine si le bot vérifiera occasionnellement si son nick préféré est en " 22 | "cours d'utilisation grâce à la commande ISON." 23 | 24 | #: config.py:51 25 | msgid "" 26 | "Determines how often (in seconds) the bot\n" 27 | " will check whether its nick ISON." 28 | msgstr "" 29 | "Détermine tous les combien de temps (en secondes) le bot vérifiera son nick " 30 | "via ISON" 31 | 32 | #: plugin.py:41 33 | msgid "" 34 | "This plugin constantly tries to take whatever nick is configured as\n" 35 | " supybot.nick. Just make sure that's set appropriately, and this plugin\n" 36 | " will do the rest." 37 | msgstr "" 38 | "Ce plugin essaye constament de récupérer le nick configuré dans supybot." 39 | "nick. Assurez-vous de le configurer correctement, et ce plugin fera le reste." 40 | 41 | #: plugin.py:106 42 | msgid "This is returned by the ISON command." 43 | msgstr "Ceci est retourné par la commande ISON." 44 | 45 | #: plugin.py:113 46 | msgid "This is sent by the MONITOR when a nick goes offline." 47 | msgstr "" 48 | 49 | #: plugin.py:123 50 | msgid "Nick/channel is temporarily unavailable" 51 | msgstr "" 52 | -------------------------------------------------------------------------------- /plugins/NickCapture/locales/it.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: Limnoria\n" 4 | "POT-Creation-Date: 2022-02-06 00:12+0100\n" 5 | "PO-Revision-Date: 2011-08-10 02:13+0200\n" 6 | "Last-Translator: skizzhg \n" 7 | "Language-Team: Italian \n" 8 | "Language: it\n" 9 | "MIME-Version: 1.0\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Content-Transfer-Encoding: 8bit\n" 12 | 13 | #: config.py:48 14 | msgid "" 15 | "Determines whether the bot will check\n" 16 | " occasionally if its preferred nick is in use via the ISON command." 17 | msgstr "" 18 | "Determina se di tanto in tanto il bot controllerà tramite\n" 19 | " il comando ISON se il suo nick sia in uso." 20 | 21 | #: config.py:51 22 | msgid "" 23 | "Determines how often (in seconds) the bot\n" 24 | " will check whether its nick ISON." 25 | msgstr "" 26 | "Determina quanto spesso (in secondi) il bot controllerà il suo nick con ISON." 27 | 28 | #: plugin.py:41 29 | msgid "" 30 | "This plugin constantly tries to take whatever nick is configured as\n" 31 | " supybot.nick. Just make sure that's set appropriately, and this plugin\n" 32 | " will do the rest." 33 | msgstr "" 34 | "Questo plugin cerca costantemente di ottenere qualsiasi nick sia impostato\n" 35 | " come supybot.nick. Assicurati che questa sia configurata correttamente\n" 36 | " e il plugin farà il resto." 37 | 38 | #: plugin.py:106 39 | msgid "This is returned by the ISON command." 40 | msgstr "Questo è restituito dal comando ISON." 41 | 42 | #: plugin.py:113 43 | msgid "This is sent by the MONITOR when a nick goes offline." 44 | msgstr "" 45 | 46 | #: plugin.py:123 47 | msgid "Nick/channel is temporarily unavailable" 48 | msgstr "" 49 | -------------------------------------------------------------------------------- /plugins/NickCapture/messages.pot: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR ORGANIZATION 3 | # FIRST AUTHOR , YEAR. 4 | # 5 | msgid "" 6 | msgstr "" 7 | "Project-Id-Version: PACKAGE VERSION\n" 8 | "POT-Creation-Date: 2024-12-06 11:00+0100\n" 9 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 10 | "Last-Translator: FULL NAME \n" 11 | "Language-Team: LANGUAGE \n" 12 | "MIME-Version: 1.0\n" 13 | "Content-Type: text/plain; charset=UTF-8\n" 14 | "Content-Transfer-Encoding: 8bit\n" 15 | "Generated-By: pygettext.py 1.5\n" 16 | 17 | 18 | #: config.py:48 19 | msgid "" 20 | "Determines whether the bot will check\n" 21 | " occasionally if its preferred nick is in use via the ISON command." 22 | msgstr "" 23 | 24 | #: config.py:51 25 | msgid "" 26 | "Determines how often (in seconds) the bot\n" 27 | " will check whether its nick ISON." 28 | msgstr "" 29 | 30 | #: plugin.py:41 31 | #, docstring 32 | msgid "" 33 | "This plugin constantly tries to take whatever nick is configured as\n" 34 | " supybot.nick. Just make sure that's set appropriately, and this plugin\n" 35 | " will do the rest." 36 | msgstr "" 37 | 38 | #: plugin.py:106 39 | #, docstring 40 | msgid "This is returned by the ISON command." 41 | msgstr "" 42 | 43 | #: plugin.py:113 44 | #, docstring 45 | msgid "This is sent by the MONITOR when a nick goes offline." 46 | msgstr "" 47 | 48 | #: plugin.py:123 49 | #, docstring 50 | msgid "Nick/channel is temporarily unavailable" 51 | msgstr "" 52 | 53 | -------------------------------------------------------------------------------- /plugins/NickCapture/test.py: -------------------------------------------------------------------------------- 1 | ### 2 | # Copyright (c) 2002-2004, Jeremiah Fincher 3 | # Copyright (c) 2010-2021, Valentin Lorentz 4 | # All rights reserved. 5 | # 6 | # Redistribution and use in source and binary forms, with or without 7 | # modification, are permitted provided that the following conditions are met: 8 | # 9 | # * Redistributions of source code must retain the above copyright notice, 10 | # this list of conditions, and the following disclaimer. 11 | # * Redistributions in binary form must reproduce the above copyright notice, 12 | # this list of conditions, and the following disclaimer in the 13 | # documentation and/or other materials provided with the distribution. 14 | # * Neither the name of the author of this software nor the name of 15 | # contributors to this software may be used to endorse or promote products 16 | # derived from this software without specific prior written consent. 17 | # 18 | # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 19 | # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20 | # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21 | # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 22 | # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 23 | # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 24 | # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 25 | # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 26 | # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 27 | # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 28 | # POSSIBILITY OF SUCH DAMAGE. 29 | ### 30 | 31 | from supybot.test import * 32 | 33 | class NickCaptureTestCase(PluginTestCase): 34 | plugins = ('NickCapture',) 35 | 36 | 37 | # vim:set shiftwidth=4 softtabstop=4 expandtab textwidth=79: 38 | 39 | -------------------------------------------------------------------------------- /plugins/Nickometer/README.rst: -------------------------------------------------------------------------------- 1 | .. _plugin-Nickometer: 2 | 3 | Documentation for the Nickometer plugin for Supybot 4 | =================================================== 5 | 6 | Purpose 7 | ------- 8 | 9 | A port of Infobot's nickometer command from Perl. This plugin 10 | provides one command (called nickometer) which will tell you how 'lame' 11 | an IRC nick is. It's an elitist hacker thing, but quite fun. 12 | 13 | Usage 14 | ----- 15 | 16 | Will tell you how lame a nick is by the command 'nickometer [nick]'. 17 | 18 | .. _commands-Nickometer: 19 | 20 | Commands 21 | -------- 22 | 23 | .. _command-nickometer-nickometer: 24 | 25 | ``nickometer []`` 26 | Tells you how lame said nick is. If is not given, uses the nick of the person giving the command. 27 | 28 | .. _conf-Nickometer: 29 | 30 | Configuration 31 | ------------- 32 | 33 | .. _conf-supybot.plugins.Nickometer.public: 34 | 35 | 36 | supybot.plugins.Nickometer.public 37 | This config variable defaults to "True", is not network-specific, and is not channel-specific. 38 | 39 | Determines whether this plugin is publicly visible. 40 | 41 | -------------------------------------------------------------------------------- /plugins/Nickometer/locales/fi.po: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR ORGANIZATION 3 | # Mikaela Suomalainen , 2011. 4 | # 5 | msgid "" 6 | msgstr "" 7 | "Project-Id-Version: Nickometer plugin for Limnoria\n" 8 | "POT-Creation-Date: 2014-12-20 14:04+EET\n" 9 | "PO-Revision-Date: 2014-12-20 14:19+0200\n" 10 | "Last-Translator: Mikaela Suomalainen \n" 11 | "Language-Team: \n" 12 | "Language: fi\n" 13 | "MIME-Version: 1.0\n" 14 | "Content-Type: text/plain; charset=UTF-8\n" 15 | "Content-Transfer-Encoding: 8bit\n" 16 | "Generated-By: pygettext.py 1.5\n" 17 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 18 | "X-Generator: Poedit 1.6.10\n" 19 | 20 | #: plugin.py:81 21 | msgid "Will tell you how lame a nick is by the command 'nickometer [nick]'." 22 | msgstr "" 23 | "Kertoo kuinka laimea nimimerkki on komennolla\n" 24 | " 'nickometer [nimimerkki]'" 25 | 26 | #: plugin.py:88 27 | msgid "" 28 | "[]\n" 29 | "\n" 30 | " Tells you how lame said nick is. If is not given, uses the\n" 31 | " nick of the person giving the command.\n" 32 | " " 33 | msgstr "" 34 | "[]\n" 35 | "\n" 36 | " Kertoo sinulle kuinka laimea sanottu nimimerkki on. Jos " 37 | " ei ole annettu, käyttää\n" 38 | " komennon antaneen henkilön nimimerkkiä.\n" 39 | " " 40 | 41 | #: plugin.py:231 42 | msgid "The \"lame nick-o-meter\" reading for \"%s\" is %s%%." 43 | msgstr "\"Laimea nimimerkki-maatti\" lukema \"%s\":lle on %s%%." 44 | -------------------------------------------------------------------------------- /plugins/Nickometer/locales/fr.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: Limnoria\n" 4 | "POT-Creation-Date: 2022-02-06 00:12+0100\n" 5 | "PO-Revision-Date: \n" 6 | "Last-Translator: Valentin Lorentz \n" 7 | "Language-Team: Limnoria \n" 8 | "Language: fr_FR\n" 9 | "MIME-Version: 1.0\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Content-Transfer-Encoding: 8bit\n" 12 | "X-Poedit-Language: Français\n" 13 | "X-Poedit-Country: France\n" 14 | "X-Poedit-SourceCharset: ASCII\n" 15 | 16 | #: plugin.py:81 17 | msgid "Will tell you how lame a nick is by the command 'nickometer [nick]'." 18 | msgstr "" 19 | 20 | #: plugin.py:88 21 | msgid "" 22 | "[]\n" 23 | "\n" 24 | " Tells you how lame said nick is. If is not given, uses the\n" 25 | " nick of the person giving the command.\n" 26 | " " 27 | msgstr "" 28 | "[]\n" 29 | "\n" 30 | "Mesure la décrédibilité du nick. Si le nick n'est pas donné, utilise le nick " 31 | "de la personne donnant la commande." 32 | 33 | #: plugin.py:231 34 | msgid "The \"lame nick-o-meter\" reading for \"%s\" is %s%%." 35 | msgstr "Le \"décrédibilit-o-mètre\" pour \"%s\" donne %s%%." 36 | -------------------------------------------------------------------------------- /plugins/Nickometer/locales/it.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: Limnoria\n" 4 | "POT-Creation-Date: 2022-02-06 00:12+0100\n" 5 | "PO-Revision-Date: 2011-06-12 17:05+0200\n" 6 | "Last-Translator: skizzhg \n" 7 | "Language-Team: Italian \n" 8 | "Language: it\n" 9 | "MIME-Version: 1.0\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Content-Transfer-Encoding: 8bit\n" 12 | 13 | #: plugin.py:81 14 | msgid "Will tell you how lame a nick is by the command 'nickometer [nick]'." 15 | msgstr "" 16 | 17 | #: plugin.py:88 18 | msgid "" 19 | "[]\n" 20 | "\n" 21 | " Tells you how lame said nick is. If is not given, uses the\n" 22 | " nick of the person giving the command.\n" 23 | " " 24 | msgstr "" 25 | "[]\n" 26 | "\n" 27 | " Misura quanto sia lamer un nick. Se non è fornito, utilizza\n" 28 | " quello della persona che ha dato il comando.\n" 29 | " " 30 | 31 | #: plugin.py:231 32 | msgid "The \"lame nick-o-meter\" reading for \"%s\" is %s%%." 33 | msgstr "Il \"nick-o-meter lamer\" per \"%s\" è %s%%." 34 | -------------------------------------------------------------------------------- /plugins/Nickometer/messages.pot: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR ORGANIZATION 3 | # FIRST AUTHOR , YEAR. 4 | # 5 | msgid "" 6 | msgstr "" 7 | "Project-Id-Version: PACKAGE VERSION\n" 8 | "POT-Creation-Date: 2024-12-06 11:00+0100\n" 9 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 10 | "Last-Translator: FULL NAME \n" 11 | "Language-Team: LANGUAGE \n" 12 | "MIME-Version: 1.0\n" 13 | "Content-Type: text/plain; charset=UTF-8\n" 14 | "Content-Transfer-Encoding: 8bit\n" 15 | "Generated-By: pygettext.py 1.5\n" 16 | 17 | 18 | #: plugin.py:81 19 | #, docstring 20 | msgid "Will tell you how lame a nick is by the command 'nickometer [nick]'." 21 | msgstr "" 22 | 23 | #: plugin.py:88 24 | #, docstring 25 | msgid "" 26 | "[]\n" 27 | "\n" 28 | " Tells you how lame said nick is. If is not given, uses the\n" 29 | " nick of the person giving the command.\n" 30 | " " 31 | msgstr "" 32 | 33 | #: plugin.py:231 34 | msgid "The \"lame nick-o-meter\" reading for \"%s\" is %s%%." 35 | msgstr "" 36 | 37 | -------------------------------------------------------------------------------- /plugins/Nickometer/test.py: -------------------------------------------------------------------------------- 1 | ### 2 | # Copyright (c) 2005, aafshar@gmail.com 3 | # Copyright (c) 2010-2021, Valentin Lorentz 4 | # All rights reserved. 5 | # 6 | # Redistribution and use in source and binary forms, with or without 7 | # modification, are permitted provided that the following conditions are met: 8 | # 9 | # * Redistributions of source code must retain the above copyright notice, 10 | # this list of conditions, and the following disclaimer. 11 | # * Redistributions in binary form must reproduce the above copyright notice, 12 | # this list of conditions, and the following disclaimer in the 13 | # documentation and/or other materials provided with the distribution. 14 | # * Neither the name of the author of this software nor the name of 15 | # contributors to this software may be used to endorse or promote products 16 | # derived from this software without specific prior written consent. 17 | # 18 | # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 19 | # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20 | # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21 | # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 22 | # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 23 | # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 24 | # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 25 | # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 26 | # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 27 | # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 28 | # POSSIBILITY OF SUCH DAMAGE. 29 | ### 30 | 31 | from supybot.test import * 32 | 33 | class NickometerTestCase(PluginTestCase): 34 | plugins = ('Nickometer',) 35 | def testNickometer(self): 36 | self.assertNotError('nickometer') 37 | self.assertResponse( 38 | 'nickometer jemfinch', 39 | 'The "lame nick-o-meter" reading for "jemfinch" is 0.0%.') 40 | nick = 'xXReallyObnoxious1337NickXx' 41 | self.assertResponse( 42 | 'nickometer %s' % nick, 43 | 'The "lame nick-o-meter" reading for "%s" is 99.96%%.' % nick) 44 | 45 | # vim:set shiftwidth=4 softtabstop=4 expandtab textwidth=79: 46 | -------------------------------------------------------------------------------- /plugins/Plugin/README.rst: -------------------------------------------------------------------------------- 1 | .. _plugin-Plugin: 2 | 3 | Documentation for the Plugin plugin for Supybot 4 | =============================================== 5 | 6 | Purpose 7 | ------- 8 | 9 | This plugin handles various plugin-related things, such as getting help for 10 | a plugin or retrieving author info. 11 | 12 | Usage 13 | ----- 14 | 15 | This plugin exists to help users manage their plugins. Use 'plugin 16 | list' to list the loaded plugins; use 'plugin help' to get the description 17 | of a plugin; use the 'plugin' command itself to determine what plugin a 18 | command exists in. 19 | 20 | .. _commands-Plugin: 21 | 22 | Commands 23 | -------- 24 | 25 | .. _command-plugin-author: 26 | 27 | ``author `` 28 | Returns the author of . This is the person you should talk to if you have ideas, suggestions, or other comments about a given plugin. 29 | 30 | .. _command-plugin-contributors: 31 | 32 | ``contributors []`` 33 | Replies with a list of people who made contributions to a given plugin. If 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. 34 | 35 | .. _command-plugin-help: 36 | 37 | ``help `` 38 | Returns a useful description of how to use , if the plugin has one. 39 | 40 | .. _command-plugin-plugin: 41 | 42 | ``plugin `` 43 | Returns the name of the plugin that would be used to call . If it is not uniquely determined, returns list of all plugins that contain . 44 | 45 | .. _command-plugin-plugins: 46 | 47 | ``plugins `` 48 | Returns the names of all plugins that contain . 49 | 50 | .. _conf-Plugin: 51 | 52 | Configuration 53 | ------------- 54 | 55 | .. _conf-supybot.plugins.Plugin.public: 56 | 57 | 58 | supybot.plugins.Plugin.public 59 | This config variable defaults to "True", is not network-specific, and is not channel-specific. 60 | 61 | Determines whether this plugin is publicly visible. 62 | 63 | -------------------------------------------------------------------------------- /plugins/PluginDownloader/local/__init__.py: -------------------------------------------------------------------------------- 1 | # Stub so local is a module, used for third-party modules 2 | -------------------------------------------------------------------------------- /plugins/Poll/local/__init__.py: -------------------------------------------------------------------------------- 1 | # Stub so local is a module, used for third-party modules 2 | -------------------------------------------------------------------------------- /plugins/Praise/messages.pot: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR ORGANIZATION 3 | # FIRST AUTHOR , YEAR. 4 | # 5 | msgid "" 6 | msgstr "" 7 | "Project-Id-Version: PACKAGE VERSION\n" 8 | "POT-Creation-Date: 2024-12-06 11:00+0100\n" 9 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 10 | "Last-Translator: FULL NAME \n" 11 | "Language-Team: LANGUAGE \n" 12 | "MIME-Version: 1.0\n" 13 | "Content-Type: text/plain; charset=UTF-8\n" 14 | "Content-Transfer-Encoding: 8bit\n" 15 | "Generated-By: pygettext.py 1.5\n" 16 | 17 | 18 | #: config.py:50 19 | msgid "" 20 | "Determines whether the bot will show the ids of\n" 21 | " a praise when the praise is given." 22 | msgstr "" 23 | 24 | #: plugin.py:40 25 | #, docstring 26 | msgid "" 27 | "\n" 28 | " Praise is a plugin for ... well, praising things. Feel free to add\n" 29 | " your own flavor to it by customizing what praises it gives. Use \"praise\n" 30 | " add \" to add new ones, making sure to include \"$who\" in where\n" 31 | " you want to insert the thing being praised.\n" 32 | "\n" 33 | " Example:\n" 34 | "\n" 35 | " * If you add ``hugs $who``\n" 36 | " * Someone says ``@praise ChanServ``.\n" 37 | " * ``* bot hugs ChanServ``\n" 38 | " " 39 | msgstr "" 40 | 41 | #: plugin.py:61 42 | msgid "Praises must contain $who." 43 | msgstr "" 44 | 45 | #: plugin.py:65 46 | #, docstring 47 | msgid "" 48 | "[] [] [for ]\n" 49 | "\n" 50 | " Praises (for , if given). If is given, uses\n" 51 | " that specific praise. is only necessary if the message isn't\n" 52 | " sent in the channel itself.\n" 53 | " " 54 | msgstr "" 55 | 56 | #: plugin.py:81 57 | msgid "There is no praise with id #%i." 58 | msgstr "" 59 | 60 | #: plugin.py:86 61 | msgid "There are no praises in my database for %s." 62 | msgstr "" 63 | 64 | #: plugin.py:94 65 | msgid " for " 66 | msgstr "" 67 | 68 | -------------------------------------------------------------------------------- /plugins/Praise/test.py: -------------------------------------------------------------------------------- 1 | ### 2 | # Copyright (c) 2005, Daniel DiPaolo 3 | # Copyright (c) 2010-2021, Valentin Lorentz 4 | # All rights reserved. 5 | # 6 | # Redistribution and use in source and binary forms, with or without 7 | # modification, are permitted provided that the following conditions are met: 8 | # 9 | # * Redistributions of source code must retain the above copyright notice, 10 | # this list of conditions, and the following disclaimer. 11 | # * Redistributions in binary form must reproduce the above copyright notice, 12 | # this list of conditions, and the following disclaimer in the 13 | # documentation and/or other materials provided with the distribution. 14 | # * Neither the name of the author of this software nor the name of 15 | # contributors to this software may be used to endorse or promote products 16 | # derived from this software without specific prior written consent. 17 | # 18 | # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 19 | # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20 | # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21 | # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 22 | # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 23 | # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 24 | # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 25 | # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 26 | # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 27 | # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 28 | # POSSIBILITY OF SUCH DAMAGE. 29 | ### 30 | 31 | from supybot.test import * 32 | 33 | class PraiseTestCase(ChannelPluginTestCase): 34 | plugins = ('Praise',) 35 | 36 | def testAdd(self): 37 | self.assertError('praise add foo') # needs $who 38 | 39 | def testPraise(self): 40 | self.assertError('praise foo') # no praises! 41 | 42 | # vim:set shiftwidth=4 softtabstop=4 expandtab textwidth=79: 43 | -------------------------------------------------------------------------------- /plugins/Protector/README.rst: -------------------------------------------------------------------------------- 1 | .. _plugin-Protector: 2 | 3 | Documentation for the Protector plugin for Supybot 4 | ================================================== 5 | 6 | Purpose 7 | ------- 8 | 9 | Defends a channel against actions by people who don't have the proper 10 | capabilities, even if they have +o or +h. 11 | 12 | Usage 13 | ----- 14 | 15 | Prevents users from doing things they are not supposed to do on a channel, 16 | even if they have +o or +h. 17 | 18 | .. _conf-Protector: 19 | 20 | Configuration 21 | ------------- 22 | 23 | .. _conf-supybot.plugins.Protector.enable: 24 | 25 | 26 | supybot.plugins.Protector.enable 27 | This config variable defaults to "False", is network-specific, and is channel-specific. 28 | 29 | Determines whether this plugin is enabled in a given channel. 30 | 31 | .. _conf-supybot.plugins.Protector.immune: 32 | 33 | 34 | supybot.plugins.Protector.immune 35 | This config variable defaults to " ", is network-specific, and is channel-specific. 36 | 37 | Determines what nicks the bot will consider to be immune from enforcement. These nicks will not even have their actions watched by this plugin. In general, only the ChanServ for this network will be in this list. 38 | 39 | .. _conf-supybot.plugins.Protector.public: 40 | 41 | 42 | supybot.plugins.Protector.public 43 | This config variable defaults to "True", is not network-specific, and is not channel-specific. 44 | 45 | Determines whether this plugin is publicly visible. 46 | 47 | -------------------------------------------------------------------------------- /plugins/Protector/locales/fi.po: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR ORGANIZATION 3 | # Mikaela Suomalainen , 2011. 4 | msgid "" 5 | msgstr "" 6 | "Project-Id-Version: Protector plugin for Limnoria\n" 7 | "POT-Creation-Date: 2024-12-06 11:00+0100\n" 8 | "PO-Revision-Date: 2014-12-20 12:09+0200\n" 9 | "Last-Translator: Mikaela Suomalainen \n" 10 | "Language-Team: \n" 11 | "Language: fi\n" 12 | "MIME-Version: 1.0\n" 13 | "Content-Type: text/plain; charset=UTF-8\n" 14 | "Content-Transfer-Encoding: 8bit\n" 15 | "Generated-By: pygettext.py 1.5\n" 16 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 17 | "X-Generator: Poedit 1.6.10\n" 18 | 19 | #: config.py:48 20 | msgid "" 21 | "Determines whether this plugin is enabled in a\n" 22 | " given channel." 23 | msgstr "" 24 | "Määrittää onko tämä lisäosa käytössä\n" 25 | " annetulla kanavalla." 26 | 27 | #: config.py:56 28 | msgid "" 29 | "Determines what nicks the bot will consider to\n" 30 | " be immune from enforcement. These nicks will not even have their " 31 | "actions\n" 32 | " watched by this plugin. In general, only the ChanServ for this network\n" 33 | " will be in this list." 34 | msgstr "" 35 | "Määrittää nimimerkit, jotka botti ajattelee\n" 36 | " immuuneiksi tästä pakotuksesta. Näiden nimimerkkien toiminnot jäävät\n" 37 | " tämän lisäosan valvonnan ulkopuolisiksi. Yleisesti, vain tämän verkon " 38 | "ChanServ tulee olemaan\n" 39 | " tässä listassa." 40 | 41 | #: plugin.py:40 42 | msgid "" 43 | "Prevents users from doing things they are not supposed to do on a channel,\n" 44 | " even if they have +o or +h." 45 | msgstr "" 46 | "Estää käyttäjiä tekemästä asioita, joita heidän ei ole tarkoitus tehdä " 47 | "kanavalla,\n" 48 | " vaikka heillä on +o tai +h." 49 | -------------------------------------------------------------------------------- /plugins/Protector/locales/fr.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: Limnoria\n" 4 | "POT-Creation-Date: 2024-12-06 11:00+0100\n" 5 | "PO-Revision-Date: \n" 6 | "Last-Translator: Valentin Lorentz \n" 7 | "Language-Team: Limnoria \n" 8 | "Language: fr_FR\n" 9 | "MIME-Version: 1.0\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Content-Transfer-Encoding: 8bit\n" 12 | "X-Poedit-Language: Français\n" 13 | "X-Poedit-Country: France\n" 14 | "X-Poedit-SourceCharset: ASCII\n" 15 | 16 | #: config.py:48 17 | msgid "" 18 | "Determines whether this plugin is enabled in a\n" 19 | " given channel." 20 | msgstr "Détermine si le plugin est activé sur un canal donné." 21 | 22 | #: config.py:56 23 | msgid "" 24 | "Determines what nicks the bot will consider to\n" 25 | " be immune from enforcement. These nicks will not even have their " 26 | "actions\n" 27 | " watched by this plugin. In general, only the ChanServ for this network\n" 28 | " will be in this list." 29 | msgstr "" 30 | "Détermine quels nicks le bot considérera comme imunisés. Les actions de ces " 31 | "nicks ne seront pas surveillés par ce plugin. En général, seul le ChanServ " 32 | "de ce réseau doit être dans cette liste." 33 | 34 | #: plugin.py:40 35 | msgid "" 36 | "Prevents users from doing things they are not supposed to do on a channel,\n" 37 | " even if they have +o or +h." 38 | msgstr "" 39 | -------------------------------------------------------------------------------- /plugins/Protector/locales/it.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: Limnoria\n" 4 | "POT-Creation-Date: 2024-12-06 11:00+0100\n" 5 | "PO-Revision-Date: 2012-07-25 23:33+0200\n" 6 | "Last-Translator: skizzhg \n" 7 | "Language-Team: Italian \n" 8 | "Language: it\n" 9 | "MIME-Version: 1.0\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Content-Transfer-Encoding: 8bit\n" 12 | 13 | #: config.py:48 14 | msgid "" 15 | "Determines whether this plugin is enabled in a\n" 16 | " given channel." 17 | msgstr "Determina se il plugin è abilitato in un dato canale." 18 | 19 | #: config.py:56 20 | msgid "" 21 | "Determines what nicks the bot will consider to\n" 22 | " be immune from enforcement. These nicks will not even have their " 23 | "actions\n" 24 | " watched by this plugin. In general, only the ChanServ for this network\n" 25 | " will be in this list." 26 | msgstr "" 27 | "Determina quali nick il bot considererà immuni, le azioni di questi nick " 28 | "non\n" 29 | " verranno monitorate dal plugin. In linea di massima sarà presente nella " 30 | "lista\n" 31 | " solo il ChanServ della rete." 32 | 33 | #: plugin.py:40 34 | msgid "" 35 | "Prevents users from doing things they are not supposed to do on a channel,\n" 36 | " even if they have +o or +h." 37 | msgstr "" 38 | -------------------------------------------------------------------------------- /plugins/Protector/messages.pot: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR ORGANIZATION 3 | # FIRST AUTHOR , YEAR. 4 | # 5 | msgid "" 6 | msgstr "" 7 | "Project-Id-Version: PACKAGE VERSION\n" 8 | "POT-Creation-Date: 2024-12-06 11:00+0100\n" 9 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 10 | "Last-Translator: FULL NAME \n" 11 | "Language-Team: LANGUAGE \n" 12 | "MIME-Version: 1.0\n" 13 | "Content-Type: text/plain; charset=UTF-8\n" 14 | "Content-Transfer-Encoding: 8bit\n" 15 | "Generated-By: pygettext.py 1.5\n" 16 | 17 | 18 | #: config.py:48 19 | msgid "" 20 | "Determines whether this plugin is enabled in a\n" 21 | " given channel." 22 | msgstr "" 23 | 24 | #: config.py:56 25 | msgid "" 26 | "Determines what nicks the bot will consider to\n" 27 | " be immune from enforcement. These nicks will not even have their actions\n" 28 | " watched by this plugin. In general, only the ChanServ for this network\n" 29 | " will be in this list." 30 | msgstr "" 31 | 32 | #: plugin.py:40 33 | #, docstring 34 | msgid "" 35 | "Prevents users from doing things they are not supposed to do on a channel,\n" 36 | " even if they have +o or +h." 37 | msgstr "" 38 | 39 | -------------------------------------------------------------------------------- /plugins/Protector/test.py: -------------------------------------------------------------------------------- 1 | ### 2 | # Copyright (c) 2005, Jeremiah Fincher 3 | # Copyright (c) 2010-2021, Valentin Lorentz 4 | # All rights reserved. 5 | # 6 | # Redistribution and use in source and binary forms, with or without 7 | # modification, are permitted provided that the following conditions are met: 8 | # 9 | # * Redistributions of source code must retain the above copyright notice, 10 | # this list of conditions, and the following disclaimer. 11 | # * Redistributions in binary form must reproduce the above copyright notice, 12 | # this list of conditions, and the following disclaimer in the 13 | # documentation and/or other materials provided with the distribution. 14 | # * Neither the name of the author of this software nor the name of 15 | # contributors to this software may be used to endorse or promote products 16 | # derived from this software without specific prior written consent. 17 | # 18 | # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 19 | # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20 | # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21 | # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 22 | # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 23 | # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 24 | # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 25 | # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 26 | # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 27 | # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 28 | # POSSIBILITY OF SUCH DAMAGE. 29 | ### 30 | 31 | from supybot.test import * 32 | 33 | class ProtectorTestCase(PluginTestCase): 34 | plugins = ('Protector',) 35 | 36 | 37 | # vim:set shiftwidth=4 softtabstop=4 expandtab textwidth=79: 38 | -------------------------------------------------------------------------------- /plugins/Quote/README.rst: -------------------------------------------------------------------------------- 1 | .. _plugin-Quote: 2 | 3 | Documentation for the Quote plugin for Supybot 4 | ============================================== 5 | 6 | Purpose 7 | ------- 8 | 9 | Maintains a Quotes database for each channel. 10 | 11 | Usage 12 | ----- 13 | 14 | This plugin allows you to add quotes to the database for a channel. 15 | 16 | .. _commands-Quote: 17 | 18 | Commands 19 | -------- 20 | 21 | .. _command-quote-add: 22 | 23 | ``add [] `` 24 | Adds to the quote database for . is only necessary if the message isn't sent in the channel itself. 25 | 26 | .. _command-quote-change: 27 | 28 | ``change [] `` 29 | Changes the quote with id according to the regular expression . is only necessary if the message isn't sent in the channel itself. 30 | 31 | .. _command-quote-get: 32 | 33 | ``get [] `` 34 | Gets the quote with id from the quote database for . is only necessary if the message isn't sent in the channel itself. 35 | 36 | .. _command-quote-random: 37 | 38 | ``random []`` 39 | Returns a random quote from . is only necessary if the message isn't sent in the channel itself. 40 | 41 | .. _command-quote-remove: 42 | 43 | ``remove [] `` 44 | Removes the quote with id from the quote database for . is only necessary if the message isn't sent in the channel itself. 45 | 46 | .. _command-quote-replace: 47 | 48 | ``replace [] `` 49 | Replace quote with . is only necessary if the message isn't sent in the channel itself. 50 | 51 | .. _command-quote-search: 52 | 53 | ``search [] [--{regexp,by} ] []`` 54 | Searches for quotes matching the criteria given. 55 | 56 | .. _command-quote-stats: 57 | 58 | ``stats []`` 59 | Returns the number of quotes in the database for . is only necessary if the message isn't sent in the channel itself. 60 | 61 | .. _conf-Quote: 62 | 63 | Configuration 64 | ------------- 65 | 66 | .. _conf-supybot.plugins.Quote.public: 67 | 68 | 69 | supybot.plugins.Quote.public 70 | This config variable defaults to "True", is not network-specific, and is not channel-specific. 71 | 72 | Determines whether this plugin is publicly visible. 73 | 74 | -------------------------------------------------------------------------------- /plugins/Quote/locales/fi.po: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR ORGANIZATION 3 | # Mikaela Suomalainen , 2011. 4 | # 5 | msgid "" 6 | msgstr "" 7 | "Project-Id-Version: Quote plugin for Limnoria\n" 8 | "POT-Creation-Date: 2022-02-06 00:12+0100\n" 9 | "PO-Revision-Date: 2014-12-20 13:07+0200\n" 10 | "Last-Translator: Mikaela Suomalainen \n" 11 | "Language-Team: \n" 12 | "Language: fi\n" 13 | "MIME-Version: 1.0\n" 14 | "Content-Type: text/plain; charset=UTF-8\n" 15 | "Content-Transfer-Encoding: 8bit\n" 16 | "Generated-By: pygettext.py 1.5\n" 17 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 18 | "X-Generator: Poedit 1.6.10\n" 19 | 20 | #: plugin.py:37 21 | msgid "This plugin allows you to add quotes to the database for a channel." 22 | msgstr "Tämä plugin sallii lainausten lisäämisen kanavan tietokantaan." 23 | 24 | #: plugin.py:40 25 | msgid "" 26 | "[]\n" 27 | "\n" 28 | " Returns a random quote from . is only necessary " 29 | "if\n" 30 | " the message isn't sent in the channel itself.\n" 31 | " " 32 | msgstr "" 33 | "[]\n" 34 | "\n" 35 | " Palauttaa satunnaisen lainauksen . on vaadittu " 36 | "vain, jos\n" 37 | " viestiä ei lähetetä kanavalla itsellään.\n" 38 | " " 39 | 40 | #: plugin.py:49 41 | msgid "I have no quotes in my database for %s." 42 | msgstr "Minun tietokannassani ei ole lainauksia kanavalla %s." 43 | 44 | #: plugin.py:53 45 | #, fuzzy 46 | msgid "" 47 | "[] \n" 48 | " Replace quote with . is only necessary if\n" 49 | " the message isn't sent in the channel itself.\n" 50 | " " 51 | msgstr "" 52 | "[]\n" 53 | "\n" 54 | " Palauttaa satunnaisen lainauksen . on vaadittu " 55 | "vain, jos\n" 56 | " viestiä ei lähetetä kanavalla itsellään.\n" 57 | " " 58 | -------------------------------------------------------------------------------- /plugins/Quote/locales/fr.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: Limnoria\n" 4 | "POT-Creation-Date: 2022-02-06 00:12+0100\n" 5 | "PO-Revision-Date: \n" 6 | "Last-Translator: Valentin Lorentz \n" 7 | "Language-Team: Limnoria \n" 8 | "Language: fr_FR\n" 9 | "MIME-Version: 1.0\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Content-Transfer-Encoding: 8bit\n" 12 | "X-Poedit-Language: Français\n" 13 | "X-Poedit-Country: France\n" 14 | "X-Poedit-SourceCharset: ASCII\n" 15 | 16 | #: plugin.py:37 17 | msgid "This plugin allows you to add quotes to the database for a channel." 18 | msgstr "" 19 | 20 | #: plugin.py:40 21 | msgid "" 22 | "[]\n" 23 | "\n" 24 | " Returns a random quote from . is only necessary " 25 | "if\n" 26 | " the message isn't sent in the channel itself.\n" 27 | " " 28 | msgstr "" 29 | "[]\n" 30 | "\n" 31 | "Retourne une citation aléatoire du . n'est nécessaire que si " 32 | "le message n'est pas envoyé sur le canal lui-même." 33 | 34 | #: plugin.py:49 35 | msgid "I have no quotes in my database for %s." 36 | msgstr "Je n'ai pas de citation dans ma base de données pour %s." 37 | 38 | #: plugin.py:53 39 | #, fuzzy 40 | msgid "" 41 | "[] \n" 42 | " Replace quote with . is only necessary if\n" 43 | " the message isn't sent in the channel itself.\n" 44 | " " 45 | msgstr "" 46 | "[]\n" 47 | "\n" 48 | "Retourne une citation aléatoire du . n'est nécessaire que si " 49 | "le message n'est pas envoyé sur le canal lui-même." 50 | -------------------------------------------------------------------------------- /plugins/Quote/locales/it.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: Limnoria\n" 4 | "POT-Creation-Date: 2022-02-06 00:12+0100\n" 5 | "PO-Revision-Date: 2011-06-12 18:39+0200\n" 6 | "Last-Translator: skizzhg \n" 7 | "Language-Team: Italian \n" 8 | "Language: it\n" 9 | "MIME-Version: 1.0\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Content-Transfer-Encoding: 8bit\n" 12 | 13 | #: plugin.py:37 14 | msgid "This plugin allows you to add quotes to the database for a channel." 15 | msgstr "" 16 | 17 | #: plugin.py:40 18 | msgid "" 19 | "[]\n" 20 | "\n" 21 | " Returns a random quote from . is only necessary " 22 | "if\n" 23 | " the message isn't sent in the channel itself.\n" 24 | " " 25 | msgstr "" 26 | "[]\n" 27 | "\n" 28 | " Restituisce una citazione casuale da . è necessario " 29 | "solo\n" 30 | " se il messaggio non viene inviato nel canale stesso.\n" 31 | " " 32 | 33 | #: plugin.py:49 34 | msgid "I have no quotes in my database for %s." 35 | msgstr "Non ho citazioni per %s nel mio database." 36 | 37 | #: plugin.py:53 38 | #, fuzzy 39 | msgid "" 40 | "[] \n" 41 | " Replace quote with . is only necessary if\n" 42 | " the message isn't sent in the channel itself.\n" 43 | " " 44 | msgstr "" 45 | "[]\n" 46 | "\n" 47 | " Restituisce una citazione casuale da . è necessario " 48 | "solo\n" 49 | " se il messaggio non viene inviato nel canale stesso.\n" 50 | " " 51 | -------------------------------------------------------------------------------- /plugins/Quote/messages.pot: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR ORGANIZATION 3 | # FIRST AUTHOR , YEAR. 4 | # 5 | msgid "" 6 | msgstr "" 7 | "Project-Id-Version: PACKAGE VERSION\n" 8 | "POT-Creation-Date: 2024-12-06 11:00+0100\n" 9 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 10 | "Last-Translator: FULL NAME \n" 11 | "Language-Team: LANGUAGE \n" 12 | "MIME-Version: 1.0\n" 13 | "Content-Type: text/plain; charset=UTF-8\n" 14 | "Content-Transfer-Encoding: 8bit\n" 15 | "Generated-By: pygettext.py 1.5\n" 16 | 17 | 18 | #: plugin.py:37 19 | #, docstring 20 | msgid "This plugin allows you to add quotes to the database for a channel." 21 | msgstr "" 22 | 23 | #: plugin.py:40 24 | #, docstring 25 | msgid "" 26 | "[]\n" 27 | "\n" 28 | " Returns a random quote from . is only necessary if\n" 29 | " the message isn't sent in the channel itself.\n" 30 | " " 31 | msgstr "" 32 | 33 | #: plugin.py:49 34 | msgid "I have no quotes in my database for %s." 35 | msgstr "" 36 | 37 | #: plugin.py:53 38 | #, docstring 39 | msgid "" 40 | "[] \n" 41 | " Replace quote with . is only necessary if\n" 42 | " the message isn't sent in the channel itself.\n" 43 | " " 44 | msgstr "" 45 | 46 | -------------------------------------------------------------------------------- /plugins/Relay/test.py: -------------------------------------------------------------------------------- 1 | ### 2 | # Copyright (c) 2002-2004, Jeremiah Fincher 3 | # Copyright (c) 2010-2021, Valentin Lorentz 4 | # All rights reserved. 5 | # 6 | # Redistribution and use in source and binary forms, with or without 7 | # modification, are permitted provided that the following conditions are met: 8 | # 9 | # * Redistributions of source code must retain the above copyright notice, 10 | # this list of conditions, and the following disclaimer. 11 | # * Redistributions in binary form must reproduce the above copyright notice, 12 | # this list of conditions, and the following disclaimer in the 13 | # documentation and/or other materials provided with the distribution. 14 | # * Neither the name of the author of this software nor the name of 15 | # contributors to this software may be used to endorse or promote products 16 | # derived from this software without specific prior written consent. 17 | # 18 | # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 19 | # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20 | # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21 | # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 22 | # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 23 | # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 24 | # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 25 | # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 26 | # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 27 | # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 28 | # POSSIBILITY OF SUCH DAMAGE. 29 | ### 30 | 31 | from supybot.test import * 32 | 33 | class RelayTestCase(PluginTestCase): 34 | plugins = ('Relay',) 35 | 36 | 37 | # vim:set shiftwidth=4 softtabstop=4 expandtab textwidth=79: 38 | 39 | -------------------------------------------------------------------------------- /plugins/Reply/README.rst: -------------------------------------------------------------------------------- 1 | .. _plugin-Reply: 2 | 3 | Documentation for the Reply plugin for Supybot 4 | ============================================== 5 | 6 | Purpose 7 | ------- 8 | 9 | This plugin contains various commands which elicit certain types of responses 10 | from the bot. 11 | 12 | Usage 13 | ----- 14 | 15 | This plugin contains a few commands that construct various types of 16 | replies. Some bot owners would be wise to not load this plugin because it 17 | can be easily abused. 18 | 19 | .. _commands-Reply: 20 | 21 | Commands 22 | -------- 23 | 24 | .. _command-reply-action: 25 | 26 | ``action `` 27 | Replies with as an action. Use nested commands to your benefit here. 28 | 29 | .. _command-reply-notice: 30 | 31 | ``notice `` 32 | Replies with in a notice. Use nested commands to your benefit here. If you want a private notice, nest the private command. 33 | 34 | .. _command-reply-private: 35 | 36 | ``private `` 37 | Replies with in private. Use nested commands to your benefit here. 38 | 39 | .. _command-reply-replies: 40 | 41 | ``replies [ ...]`` 42 | Replies with each of its arguments in separate replies, depending the configuration of supybot.reply.oneToOne. 43 | 44 | .. _command-reply-reply: 45 | 46 | ``reply `` 47 | Replies with . Equivalent to the alias, 'echo $nick: $1'. 48 | 49 | .. _conf-Reply: 50 | 51 | Configuration 52 | ------------- 53 | 54 | .. _conf-supybot.plugins.Reply.public: 55 | 56 | 57 | supybot.plugins.Reply.public 58 | This config variable defaults to "True", is not network-specific, and is not channel-specific. 59 | 60 | Determines whether this plugin is publicly visible. 61 | 62 | -------------------------------------------------------------------------------- /plugins/Reply/messages.pot: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR ORGANIZATION 3 | # FIRST AUTHOR , YEAR. 4 | # 5 | msgid "" 6 | msgstr "" 7 | "Project-Id-Version: PACKAGE VERSION\n" 8 | "POT-Creation-Date: 2024-12-06 11:00+0100\n" 9 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 10 | "Last-Translator: FULL NAME \n" 11 | "Language-Team: LANGUAGE \n" 12 | "MIME-Version: 1.0\n" 13 | "Content-Type: text/plain; charset=UTF-8\n" 14 | "Content-Transfer-Encoding: 8bit\n" 15 | "Generated-By: pygettext.py 1.5\n" 16 | 17 | 18 | #: plugin.py:38 19 | #, docstring 20 | msgid "" 21 | "This plugin contains a few commands that construct various types of\n" 22 | " replies. Some bot owners would be wise to not load this plugin because it\n" 23 | " can be easily abused.\n" 24 | " " 25 | msgstr "" 26 | 27 | #: plugin.py:44 28 | #, docstring 29 | msgid "" 30 | "\n" 31 | "\n" 32 | " Replies with in private. Use nested commands to your benefit\n" 33 | " here.\n" 34 | " " 35 | msgstr "" 36 | 37 | #: plugin.py:54 38 | #, docstring 39 | msgid "" 40 | "\n" 41 | "\n" 42 | " Replies with as an action. Use nested commands to your benefit\n" 43 | " here.\n" 44 | " " 45 | msgstr "" 46 | 47 | #: plugin.py:67 48 | #, docstring 49 | msgid "" 50 | "\n" 51 | "\n" 52 | " Replies with in a notice. Use nested commands to your benefit\n" 53 | " here. If you want a private notice, nest the private command.\n" 54 | " " 55 | msgstr "" 56 | 57 | #: plugin.py:77 58 | #, docstring 59 | msgid "" 60 | "\n" 61 | "\n" 62 | " Replies with . Equivalent to the alias, 'echo $nick: $1'.\n" 63 | " " 64 | msgstr "" 65 | 66 | #: plugin.py:86 67 | #, docstring 68 | msgid "" 69 | " [ ...]\n" 70 | "\n" 71 | " Replies with each of its arguments in separate replies, depending\n" 72 | " the configuration of supybot.reply.oneToOne.\n" 73 | " " 74 | msgstr "" 75 | 76 | -------------------------------------------------------------------------------- /plugins/Scheduler/README.rst: -------------------------------------------------------------------------------- 1 | .. _plugin-Scheduler: 2 | 3 | Documentation for the Scheduler plugin for Supybot 4 | ================================================== 5 | 6 | Purpose 7 | ------- 8 | 9 | Gives the user the ability to schedule commands to run at a particular time, 10 | or repeatedly run at a particular interval. For example, 11 | ``scheduler add [time seconds 30m] "utilities echo [status cpu]"`` 12 | will schedule the command `cpu` to be sent to the channel in 30 minutes. 13 | 14 | Usage 15 | ----- 16 | 17 | This plugin allows you to schedule commands to execute at a later time. 18 | 19 | .. _commands-Scheduler: 20 | 21 | Commands 22 | -------- 23 | 24 | .. _command-scheduler-add: 25 | 26 | ``add `` 27 | Schedules the command string to run 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. 28 | 29 | .. _command-scheduler-list: 30 | 31 | ``list takes no arguments`` 32 | Lists the currently scheduled events. 33 | 34 | .. _command-scheduler-remind: 35 | 36 | ``remind `` 37 | Sets a reminder with string to run seconds in the future. For example, 'scheduler remind [seconds 30m] "Hello World"' will return ' Reminder: Hello World' 30 minutes after being set. 38 | 39 | .. _command-scheduler-remove: 40 | 41 | ``remove `` 42 | Removes the event scheduled with id from the schedule. 43 | 44 | .. _command-scheduler-repeat: 45 | 46 | ``repeat [--delay ] `` 47 | Schedules the command to run every seconds, starting now (i.e., the command runs now, and every seconds thereafter). is a name by which the command can be unscheduled. If --delay is given, starts in seconds instead of now. 48 | 49 | .. _conf-Scheduler: 50 | 51 | Configuration 52 | ------------- 53 | 54 | .. _conf-supybot.plugins.Scheduler.public: 55 | 56 | 57 | supybot.plugins.Scheduler.public 58 | This config variable defaults to "True", is not network-specific, and is not channel-specific. 59 | 60 | Determines whether this plugin is publicly visible. 61 | 62 | -------------------------------------------------------------------------------- /plugins/SedRegex/constants.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | import re 4 | 5 | TAG_SEEN = 'SedRegex.seen' 6 | TAG_IS_REGEX = 'SedRegex.isRegex' 7 | 8 | SED_REGEX = re.compile( 9 | # This part matches an optional nick followed by ":" or ",", used to direct replacement 10 | # at a particular user. 11 | r"^(?:(?P.+?)[:,] )?" 12 | 13 | # Match and save the delimiter (any one symbol) as a named group 14 | r"s(?P[^\w\s])" 15 | 16 | # Match the pattern to replace, which can be any string up to the first instance of the delimiter 17 | r"(?P(?:(?!(?P=delim)).)*)(?P=delim)" 18 | 19 | # Ditto with the replacement 20 | r"(?P(?:(?!(?P=delim)).)*)" 21 | 22 | # Optional final delimiter plus flags at the end 23 | r"(?:(?P=delim)(?P[a-z]*))?" 24 | ) 25 | 26 | if __name__ == '__main__': 27 | print("This is the full regex used by the plugin; paste it into your favourite regex tester " 28 | "for debugging:") 29 | print(SED_REGEX) 30 | -------------------------------------------------------------------------------- /plugins/SedRegex/local/__init__.py: -------------------------------------------------------------------------------- 1 | # Stub so local is a module, used for third-party modules 2 | -------------------------------------------------------------------------------- /plugins/Success/locales/fi.po: -------------------------------------------------------------------------------- 1 | # Success plugin in Limnoria. 2 | # Copyright (C) 2011 Limnoria 3 | # Mikaela Suomalainen , 2011. 4 | # 5 | msgid "" 6 | msgstr "" 7 | "Project-Id-Version: \n" 8 | "POT-Creation-Date: 2022-02-06 00:12+0100\n" 9 | "PO-Revision-Date: 2011-10-25 15:18+0200\n" 10 | "Last-Translator: Mikaela Suomalainen \n" 11 | "Language-Team: \n" 12 | "Language: fi_FI\n" 13 | "MIME-Version: 1.0\n" 14 | "Content-Type: text/plain; charset=UTF-8\n" 15 | "Content-Transfer-Encoding: 8bit\n" 16 | "Generated-By: pygettext.py 1.5\n" 17 | 18 | #: config.py:50 19 | msgid "" 20 | "Determines whether the bot will prefix the nick\n" 21 | " of the user giving an invalid command to the success response." 22 | msgstr "" 23 | "Määrittää lisääkö botti käyttäjän nimimerkin lähettämänsä viestin alkuun, " 24 | "jos\n" 25 | " käyttäjä antaa viallisen komennon onnistumisvastaukselle." 26 | 27 | #: plugin.py:39 28 | msgid "" 29 | "This plugin was written initially to work with MoobotFactoids, the two\n" 30 | " of them to provide a similar-to-moobot-and-blootbot interface for " 31 | "factoids.\n" 32 | " Basically, it replaces the standard 'The operation succeeded.' messages\n" 33 | " with messages kept in a database, able to give more personable\n" 34 | " responses." 35 | msgstr "" 36 | "Tämä lisäosa kirjoitettiin alunperin toimimaan MoobotFactoids lisäosan " 37 | "kanssa, molemmat kaksi\n" 38 | " tarjoaisivat samankaltainen-kuin-moobot-ja-blootbot käyttöliittymän " 39 | "factoideille.\n" 40 | " Perusteellisesti, se korvaa perus 'Tehtävä suoritettu.' viestit\n" 41 | " vastauksilla tietokannoista, antaen mahdollisuuden luoda " 42 | "persoonallisempia\n" 43 | " vastauksia." 44 | -------------------------------------------------------------------------------- /plugins/Success/locales/fr.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: Limnoria\n" 4 | "POT-Creation-Date: 2022-02-06 00:12+0100\n" 5 | "PO-Revision-Date: \n" 6 | "Last-Translator: Valentin Lorentz \n" 7 | "Language-Team: Limnoria \n" 8 | "Language: fr_FR\n" 9 | "MIME-Version: 1.0\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Content-Transfer-Encoding: 8bit\n" 12 | "X-Poedit-Language: Français\n" 13 | "X-Poedit-Country: France\n" 14 | "X-Poedit-SourceCharset: ASCII\n" 15 | 16 | #: config.py:50 17 | msgid "" 18 | "Determines whether the bot will prefix the nick\n" 19 | " of the user giving an invalid command to the success response." 20 | msgstr "" 21 | "Détermine si le bot utilisera le nick de l'utilisateur donnant une commande " 22 | "invalide comme préfixe pour la réponse de Success." 23 | 24 | #: plugin.py:39 25 | msgid "" 26 | "This plugin was written initially to work with MoobotFactoids, the two\n" 27 | " of them to provide a similar-to-moobot-and-blootbot interface for " 28 | "factoids.\n" 29 | " Basically, it replaces the standard 'The operation succeeded.' messages\n" 30 | " with messages kept in a database, able to give more personable\n" 31 | " responses." 32 | msgstr "" 33 | "Ce plugin était à l'origine écrit pour fonctionner avec MoobotFactoids, qui " 34 | "fournit une interface similaire à celle de moobot et blootbot pour les " 35 | "factoids. Il remplacement le message 'the operation succeeded.' par un " 36 | "message stoché dans la base de données, ce qui vous permet d'en avoir un " 37 | "plus personnalisable." 38 | -------------------------------------------------------------------------------- /plugins/Success/locales/it.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: Limnoria\n" 4 | "POT-Creation-Date: 2022-02-06 00:12+0100\n" 5 | "PO-Revision-Date: 2011-06-12 18:43+0200\n" 6 | "Last-Translator: skizzhg \n" 7 | "Language-Team: Italian \n" 8 | "Language: it\n" 9 | "MIME-Version: 1.0\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Content-Transfer-Encoding: 8bit\n" 12 | 13 | #: config.py:50 14 | msgid "" 15 | "Determines whether the bot will prefix the nick\n" 16 | " of the user giving an invalid command to the success response." 17 | msgstr "" 18 | "Determina se il bot userà il nick dell'utente che dà un comando non\n" 19 | " valido come prefisso per la risposta di successo." 20 | 21 | #: plugin.py:39 22 | msgid "" 23 | "This plugin was written initially to work with MoobotFactoids, the two\n" 24 | " of them to provide a similar-to-moobot-and-blootbot interface for " 25 | "factoids.\n" 26 | " Basically, it replaces the standard 'The operation succeeded.' messages\n" 27 | " with messages kept in a database, able to give more personable\n" 28 | " responses." 29 | msgstr "" 30 | "Questo plugin fu inizialmente scritto per funzionare con MoobotFactoids, " 31 | "per\n" 32 | " fornire un'interfaccia simile ai factoid di moobot e blootbot.\n" 33 | " Sostituisce i messaggi standard \"L'operazione è riuscita.\"\n" 34 | " con quelli contenuti in un database, in modo da rendere le risposte più " 35 | "piacevoli." 36 | -------------------------------------------------------------------------------- /plugins/Success/messages.pot: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR ORGANIZATION 3 | # FIRST AUTHOR , YEAR. 4 | # 5 | msgid "" 6 | msgstr "" 7 | "Project-Id-Version: PACKAGE VERSION\n" 8 | "POT-Creation-Date: 2024-12-06 11:00+0100\n" 9 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 10 | "Last-Translator: FULL NAME \n" 11 | "Language-Team: LANGUAGE \n" 12 | "MIME-Version: 1.0\n" 13 | "Content-Type: text/plain; charset=UTF-8\n" 14 | "Content-Transfer-Encoding: 8bit\n" 15 | "Generated-By: pygettext.py 1.5\n" 16 | 17 | 18 | #: config.py:50 19 | msgid "" 20 | "Determines whether the bot will prefix the nick\n" 21 | " of the user giving an invalid command to the success response." 22 | msgstr "" 23 | 24 | #: plugin.py:39 25 | #, docstring 26 | msgid "" 27 | "This plugin was written initially to work with MoobotFactoids, the two\n" 28 | " of them to provide a similar-to-moobot-and-blootbot interface for factoids.\n" 29 | " Basically, it replaces the standard 'The operation succeeded.' messages\n" 30 | " with messages kept in a database, able to give more personable\n" 31 | " responses." 32 | msgstr "" 33 | 34 | -------------------------------------------------------------------------------- /plugins/Success/test.py: -------------------------------------------------------------------------------- 1 | ### 2 | # Copyright (c) 2005, Daniel DiPaolo 3 | # Copyright (c) 2010-2021, Valentin Lorentz 4 | # All rights reserved. 5 | # 6 | # Redistribution and use in source and binary forms, with or without 7 | # modification, are permitted provided that the following conditions are met: 8 | # 9 | # * Redistributions of source code must retain the above copyright notice, 10 | # this list of conditions, and the following disclaimer. 11 | # * Redistributions in binary form must reproduce the above copyright notice, 12 | # this list of conditions, and the following disclaimer in the 13 | # documentation and/or other materials provided with the distribution. 14 | # * Neither the name of the author of this software nor the name of 15 | # contributors to this software may be used to endorse or promote products 16 | # derived from this software without specific prior written consent. 17 | # 18 | # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 19 | # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20 | # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21 | # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 22 | # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 23 | # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 24 | # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 25 | # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 26 | # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 27 | # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 28 | # POSSIBILITY OF SUCH DAMAGE. 29 | ### 30 | 31 | import supybot.conf as conf 32 | from supybot.test import * 33 | 34 | class SuccessTestCase(ChannelPluginTestCase): 35 | plugins = ('Success', 'User') 36 | 37 | def setUp(self): 38 | ChannelPluginTestCase.setUp(self) 39 | self.prefix = 'mf2!bar@baz' 40 | self.irc.feedMsg(ircmsgs.privmsg(self.nick, 'register tester moo', 41 | prefix=self.prefix)) 42 | 43 | def testSuccess(self): 44 | self.assertResponse('success add success1:', 'The operation succeeded.') 45 | self.assertResponse('success add success2:', 46 | 'success1: Success #1 added.') 47 | 48 | 49 | # vim:set shiftwidth=4 softtabstop=8 expandtab textwidth=78: 50 | -------------------------------------------------------------------------------- /plugins/Time/local/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progval/Limnoria/b8eda935b74e82cc66d81d55d742bddba35565b1/plugins/Time/local/__init__.py -------------------------------------------------------------------------------- /plugins/Todo/README.rst: -------------------------------------------------------------------------------- 1 | .. _plugin-Todo: 2 | 3 | Documentation for the Todo plugin for Supybot 4 | ============================================= 5 | 6 | Purpose 7 | ------- 8 | 9 | The Todo plugin allows registered users to keep their own personal list of 10 | tasks to do, with an optional priority for each. 11 | 12 | Usage 13 | ----- 14 | 15 | This plugin allows you to create your own personal to-do list on 16 | the bot. 17 | 18 | .. _commands-Todo: 19 | 20 | Commands 21 | -------- 22 | 23 | .. _command-todo-add: 24 | 25 | ``add [--priority=] `` 26 | Adds 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. 27 | 28 | .. _command-todo-change: 29 | 30 | ``change `` 31 | Modify the task with the given id using the supplied regexp. 32 | 33 | .. _command-todo-remove: 34 | 35 | ``remove [ ...]`` 36 | Removes from your personal todo list. 37 | 38 | .. _command-todo-search: 39 | 40 | ``search [--{regexp} ] [ ...]`` 41 | Searches your todos for tasks matching . If --regexp is given, its associated value is taken as a regexp and matched against the tasks. 42 | 43 | .. _command-todo-setpriority: 44 | 45 | ``setpriority `` 46 | Sets the priority of the todo with the given id to the specified value. 47 | 48 | .. _command-todo-todo: 49 | 50 | ``todo [] []`` 51 | 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. 52 | 53 | .. _conf-Todo: 54 | 55 | Configuration 56 | ------------- 57 | 58 | .. _conf-supybot.plugins.Todo.allowThirdpartyReader: 59 | 60 | 61 | supybot.plugins.Todo.allowThirdpartyReader 62 | This config variable defaults to "False", is not network-specific, and is not channel-specific. 63 | 64 | Determines whether users can read the todo-list of another user. 65 | 66 | .. _conf-supybot.plugins.Todo.public: 67 | 68 | 69 | supybot.plugins.Todo.public 70 | This config variable defaults to "True", is not network-specific, and is not channel-specific. 71 | 72 | Determines whether this plugin is publicly visible. 73 | 74 | -------------------------------------------------------------------------------- /plugins/URL/README.rst: -------------------------------------------------------------------------------- 1 | .. _plugin-URL: 2 | 3 | Documentation for the URL plugin for Supybot 4 | ============================================ 5 | 6 | Purpose 7 | ------- 8 | 9 | Keeps track of URLs posted to a channel, along with relevant context. Allows 10 | searching for URLs and returning random URLs. Also provides statistics on the 11 | URLs in the database. 12 | 13 | Usage 14 | ----- 15 | 16 | This plugin records how many URLs have been mentioned in 17 | a channel and what the last URL was. 18 | 19 | .. _commands-URL: 20 | 21 | Commands 22 | -------- 23 | 24 | .. _command-url-last: 25 | 26 | ``last [] [--{from,with,without,near,proto} ] [--nolimit]`` 27 | 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. is only necessary if the message isn't sent in the channel itself. 28 | 29 | .. _command-url-stats: 30 | 31 | ``stats []`` 32 | Returns the number of URLs in the URL database. is only required if the message isn't sent in the channel itself. 33 | 34 | .. _conf-URL: 35 | 36 | Configuration 37 | ------------- 38 | 39 | .. _conf-supybot.plugins.URL.nonSnarfingRegexp: 40 | 41 | 42 | supybot.plugins.URL.nonSnarfingRegexp 43 | This config variable defaults to "", is network-specific, and is channel-specific. 44 | 45 | Determines what URLs are not to be snarfed and stored in the database for the channel; URLs matching the given regexp will not be snarfed. Give the empty string if you have no URLs that you'd like to exclude from being snarfed. 46 | 47 | .. _conf-supybot.plugins.URL.public: 48 | 49 | 50 | supybot.plugins.URL.public 51 | This config variable defaults to "True", is not network-specific, and is not channel-specific. 52 | 53 | Determines whether this plugin is publicly visible. 54 | 55 | -------------------------------------------------------------------------------- /plugins/URL/messages.pot: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR ORGANIZATION 3 | # FIRST AUTHOR , YEAR. 4 | # 5 | msgid "" 6 | msgstr "" 7 | "Project-Id-Version: PACKAGE VERSION\n" 8 | "POT-Creation-Date: 2024-12-06 11:00+0100\n" 9 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 10 | "Last-Translator: FULL NAME \n" 11 | "Language-Team: LANGUAGE \n" 12 | "MIME-Version: 1.0\n" 13 | "Content-Type: text/plain; charset=UTF-8\n" 14 | "Content-Transfer-Encoding: 8bit\n" 15 | "Generated-By: pygettext.py 1.5\n" 16 | 17 | 18 | #: config.py:46 19 | msgid "" 20 | "Determines what URLs are not to be snarfed and\n" 21 | " stored in the database for the channel; URLs matching the given regexp will\n" 22 | " not be snarfed. Give the empty string if you have no URLs that you'd like\n" 23 | " to exclude from being snarfed." 24 | msgstr "" 25 | 26 | #: plugin.py:67 27 | #, docstring 28 | msgid "" 29 | "This plugin records how many URLs have been mentioned in\n" 30 | " a channel and what the last URL was." 31 | msgstr "" 32 | 33 | #: plugin.py:93 34 | #, docstring 35 | msgid "" 36 | "[]\n" 37 | "\n" 38 | " Returns the number of URLs in the URL database. is only\n" 39 | " required if the message isn't sent in the channel itself.\n" 40 | " " 41 | msgstr "" 42 | 43 | #: plugin.py:100 44 | msgid "I have %n in my database." 45 | msgstr "" 46 | 47 | #: plugin.py:105 48 | #, docstring 49 | msgid "" 50 | "[] [--{from,with,without,near,proto} ] [--nolimit]\n" 51 | "\n" 52 | " Gives the last URL matching the given criteria. --from is from whom\n" 53 | " the URL came; --proto is the protocol the URL used; --with is something\n" 54 | " inside the URL; --without is something that should not be in the URL;\n" 55 | " --near is something in the same message as the URL. If --nolimit is\n" 56 | " given, returns all the URLs that are found to just the URL.\n" 57 | " is only necessary if the message isn't sent in the channel\n" 58 | " itself.\n" 59 | " " 60 | msgstr "" 61 | 62 | #: plugin.py:149 63 | msgid "No URLs matched that criteria." 64 | msgstr "" 65 | 66 | -------------------------------------------------------------------------------- /plugins/messages.pot: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR ORGANIZATION 3 | # FIRST AUTHOR , YEAR. 4 | # 5 | msgid "" 6 | msgstr "" 7 | "Project-Id-Version: PACKAGE VERSION\n" 8 | "POT-Creation-Date: 2014-03-22 12:04+EET\n" 9 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 10 | "Last-Translator: FULL NAME \n" 11 | "Language-Team: LANGUAGE \n" 12 | "MIME-Version: 1.0\n" 13 | "Content-Type: text/plain; charset=CHARSET\n" 14 | "Content-Transfer-Encoding: ENCODING\n" 15 | "Generated-By: pygettext.py 1.5\n" 16 | 17 | 18 | -------------------------------------------------------------------------------- /pyproject.toml: -------------------------------------------------------------------------------- 1 | [build-system] 2 | requires = ["setuptools", "wheel"] 3 | build-backend = "setuptools.build_meta" 4 | 5 | [tool.black] 6 | line-length = 79 7 | 8 | include = 'plugins/(Autocomplete|Fediverse|Geography|Poll)/.*\.pyi?$' 9 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | # mandatory: 2 | 3 | setuptools 4 | 5 | # optional core dependencies: 6 | 7 | chardet # to detect encoding of incoming IRC lines, if they are not in UTF-8 8 | python-gnupg # for authenticated based on GPG tokens 9 | PySocks # for SOCKS proxy (typically used to connect to IRC via Tor) 10 | pyxmpp2-scram # for the scram-sha-256 SASL mechanism 11 | 12 | # optional plugin dependencies: 13 | 14 | cryptography # required to load the Fediverse plugin (used to implement HTTP signatures to support Mastodon instances with AUTHORIZED_FETCH=true) 15 | feedparser # required to load the RSS plugin 16 | python-dateutil # enable fancy time string parsing in the Time plugin 17 | ddate # required for the ddate command in the Time plugin 18 | -------------------------------------------------------------------------------- /src/locales: -------------------------------------------------------------------------------- 1 | ../locales -------------------------------------------------------------------------------- /src/plugins: -------------------------------------------------------------------------------- 1 | ../plugins -------------------------------------------------------------------------------- /src/scripts/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progval/Limnoria/b8eda935b74e82cc66d81d55d742bddba35565b1/src/scripts/__init__.py -------------------------------------------------------------------------------- /src/utils/__init__.py: -------------------------------------------------------------------------------- 1 | ### 2 | # Copyright (c) 2002-2005, Jeremiah Fincher 3 | # Copyright (c) 2008, James McCoy 4 | # Copyright (c) 2010-2021, Valentin Lorentz 5 | # All rights reserved. 6 | # 7 | # Redistribution and use in source and binary forms, with or without 8 | # modification, are permitted provided that the following conditions are met: 9 | # 10 | # * Redistributions of source code must retain the above copyright notice, 11 | # this list of conditions, and the following disclaimer. 12 | # * Redistributions in binary form must reproduce the above copyright notice, 13 | # this list of conditions, and the following disclaimer in the 14 | # documentation and/or other materials provided with the distribution. 15 | # * Neither the name of the author of this software nor the name of 16 | # contributors to this software may be used to endorse or promote products 17 | # derived from this software without specific prior written consent. 18 | # 19 | # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 20 | # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 21 | # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 22 | # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 23 | # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 24 | # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 25 | # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 26 | # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 27 | # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 28 | # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 29 | # POSSIBILITY OF SUCH DAMAGE. 30 | ### 31 | 32 | from . import minisix 33 | 34 | ### 35 | # csv.{join,split} -- useful functions that should exist. 36 | ### 37 | import csv 38 | def join(L): 39 | fd = minisix.io.StringIO() 40 | writer = csv.writer(fd) 41 | writer.writerow(L) 42 | return fd.getvalue().rstrip('\r\n') 43 | 44 | def split(s): 45 | fd = minisix.io.StringIO(s) 46 | reader = csv.reader(fd) 47 | return next(reader) 48 | csv.join = join 49 | csv.split = split 50 | 51 | def force(x): 52 | if callable(x): 53 | return x() 54 | else: 55 | return x 56 | 57 | from .gen import * 58 | from . import crypt, error, file, iter, net, python, seq, str, time, transaction, web 59 | 60 | # vim:set shiftwidth=4 softtabstop=4 expandtab textwidth=79: 61 | -------------------------------------------------------------------------------- /src/utils/crypt.py: -------------------------------------------------------------------------------- 1 | ### 2 | # Copyright (c) 2008, James McCoy 3 | # Copyright (c) 2010-2021, Valentin Lorentz 4 | # All rights reserved. 5 | # 6 | # Redistribution and use in source and binary forms, with or without 7 | # modification, are permitted provided that the following conditions are met: 8 | # 9 | # * Redistributions of source code must retain the above copyright notice, 10 | # this list of conditions, and the following disclaimer. 11 | # * Redistributions in binary form must reproduce the above copyright notice, 12 | # this list of conditions, and the following disclaimer in the 13 | # documentation and/or other materials provided with the distribution. 14 | # * Neither the name of the author of this software nor the name of 15 | # contributors to this software may be used to endorse or promote products 16 | # derived from this software without specific prior written consent. 17 | # 18 | # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 19 | # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20 | # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21 | # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 22 | # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 23 | # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 24 | # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 25 | # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 26 | # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 27 | # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 28 | # POSSIBILITY OF SUCH DAMAGE. 29 | ### 30 | 31 | from hashlib import md5 32 | from hashlib import sha1 as sha 33 | 34 | # vim:set shiftwidth=4 softtabstop=4 expandtab textwidth=79: 35 | -------------------------------------------------------------------------------- /src/utils/error.py: -------------------------------------------------------------------------------- 1 | ### 2 | # Copyright (c) 2005, Jeremiah Fincher 3 | # Copyright (c) 2010-2021, Valentin Lorentz 4 | # All rights reserved. 5 | # 6 | # Redistribution and use in source and binary forms, with or without 7 | # modification, are permitted provided that the following conditions are met: 8 | # 9 | # * Redistributions of source code must retain the above copyright notice, 10 | # this list of conditions, and the following disclaimer. 11 | # * Redistributions in binary form must reproduce the above copyright notice, 12 | # this list of conditions, and the following disclaimer in the 13 | # documentation and/or other materials provided with the distribution. 14 | # * Neither the name of the author of this software nor the name of 15 | # contributors to this software may be used to endorse or promote products 16 | # derived from this software without specific prior written consent. 17 | # 18 | # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 19 | # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20 | # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21 | # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 22 | # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 23 | # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 24 | # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 25 | # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 26 | # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 27 | # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 28 | # POSSIBILITY OF SUCH DAMAGE. 29 | ### 30 | 31 | import os 32 | 33 | from . import gen 34 | 35 | class Error(Exception): 36 | def __init__(self, msg, e=None): 37 | self.msg = msg 38 | self.e = e 39 | 40 | def __str__(self): 41 | if self.e is not None: 42 | return os.linesep.join([self.msg, gen.exnToString(self.e)]) 43 | else: 44 | return self.msg 45 | 46 | # vim:set shiftwidth=4 softtabstop=8 expandtab textwidth=78: 47 | -------------------------------------------------------------------------------- /src/utils/time.py: -------------------------------------------------------------------------------- 1 | ### 2 | # Copyright (c) 2021, Valentin Lorentz 3 | # All rights reserved. 4 | # 5 | # Redistribution and use in source and binary forms, with or without 6 | # modification, are permitted provided that the following conditions are met: 7 | # 8 | # * Redistributions of source code must retain the above copyright notice, 9 | # this list of conditions, and the following disclaimer. 10 | # * Redistributions in binary form must reproduce the above copyright notice, 11 | # this list of conditions, and the following disclaimer in the 12 | # documentation and/or other materials provided with the distribution. 13 | # * Neither the name of the author of this software nor the name of 14 | # contributors to this software may be used to endorse or promote products 15 | # derived from this software without specific prior written consent. 16 | # 17 | # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 18 | # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19 | # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20 | # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 21 | # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 22 | # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 23 | # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 24 | # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 25 | # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 26 | # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 27 | # POSSIBILITY OF SUCH DAMAGE. 28 | 29 | ### 30 | 31 | import re 32 | import zoneinfo 33 | 34 | _IANA_TZ_RE = re.compile(r"([\w_-]+/)*[\w_-]+") 35 | 36 | class TimezoneException(Exception): 37 | pass 38 | 39 | class UnknownTimeZone(TimezoneException): 40 | pass 41 | 42 | def iana_timezone(name): 43 | """Returns a :class:datetime.tzinfo object, given an IANA timezone name, 44 | eg. ``"Europe/Paris"``. 45 | 46 | This uses :class:``zoneinfo.ZoneInfo`. 47 | 48 | May raise instances of :exc:`TimezoneException`. 49 | """ 50 | if not _IANA_TZ_RE.match(name): 51 | raise UnknownTimeZone(name) 52 | 53 | try: 54 | return zoneinfo.ZoneInfo(name) 55 | except zoneinfo.ZoneInfoNotFoundError as e: 56 | raise UnknownTimeZone(e.args[0]) from None 57 | -------------------------------------------------------------------------------- /supybot: -------------------------------------------------------------------------------- 1 | src -------------------------------------------------------------------------------- /test/__init__.py: -------------------------------------------------------------------------------- 1 | ### 2 | # Copyright (c) 2005, Jeremiah Fincher 3 | # Copyright (c) 2010-2021, Valentin Lorentz 4 | # All rights reserved. 5 | # 6 | # Redistribution and use in source and binary forms, with or without 7 | # modification, are permitted provided that the following conditions are met: 8 | # 9 | # * Redistributions of source code must retain the above copyright notice, 10 | # this list of conditions, and the following disclaimer. 11 | # * Redistributions in binary form must reproduce the above copyright notice, 12 | # this list of conditions, and the following disclaimer in the 13 | # documentation and/or other materials provided with the distribution. 14 | # * Neither the name of the author of this software nor the name of 15 | # contributors to this software may be used to endorse or promote products 16 | # derived from this software without specific prior written consent. 17 | # 18 | # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 19 | # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20 | # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21 | # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 22 | # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 23 | # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 24 | # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 25 | # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 26 | # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 27 | # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 28 | # POSSIBILITY OF SUCH DAMAGE. 29 | ### 30 | 31 | # We're just masquerading as a plugin :) 32 | from . import test 33 | 34 | # vim:set shiftwidth=4 softtabstop=4 expandtab textwidth=79: 35 | -------------------------------------------------------------------------------- /test/messages.pot: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR ORGANIZATION 3 | # FIRST AUTHOR , YEAR. 4 | # 5 | msgid "" 6 | msgstr "" 7 | "Project-Id-Version: PACKAGE VERSION\n" 8 | "POT-Creation-Date: 2022-02-05 23:49+0100\n" 9 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 10 | "Last-Translator: FULL NAME \n" 11 | "Language-Team: LANGUAGE \n" 12 | "MIME-Version: 1.0\n" 13 | "Content-Type: text/plain; charset=UTF-8\n" 14 | "Content-Transfer-Encoding: 8bit\n" 15 | "Generated-By: pygettext.py 1.5\n" 16 | 17 | 18 | -------------------------------------------------------------------------------- /test/test.py: -------------------------------------------------------------------------------- 1 | ### 2 | # Copyright (c) 2005, Jeremiah Fincher 3 | # Copyright (c) 2010-2021, Valentin Lorentz 4 | # All rights reserved. 5 | # 6 | # Redistribution and use in source and binary forms, with or without 7 | # modification, are permitted provided that the following conditions are met: 8 | # 9 | # * Redistributions of source code must retain the above copyright notice, 10 | # this list of conditions, and the following disclaimer. 11 | # * Redistributions in binary form must reproduce the above copyright notice, 12 | # this list of conditions, and the following disclaimer in the 13 | # documentation and/or other materials provided with the distribution. 14 | # * Neither the name of the author of this software nor the name of 15 | # contributors to this software may be used to endorse or promote products 16 | # derived from this software without specific prior written consent. 17 | # 18 | # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 19 | # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20 | # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21 | # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 22 | # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 23 | # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 24 | # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 25 | # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 26 | # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 27 | # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 28 | # POSSIBILITY OF SUCH DAMAGE. 29 | ### 30 | 31 | import sys 32 | import os.path 33 | import unittest 34 | 35 | import supybot.test as test 36 | 37 | load = unittest.defaultTestLoader.loadTestsFromModule 38 | 39 | GLOBALS = globals() 40 | dirname = os.path.dirname(__file__) 41 | sys.path.append(dirname) 42 | filenames = os.listdir(dirname) 43 | # Uncomment these if you need some consistency in the order these tests run. 44 | # filenames.sort() 45 | # filenames.reverse() 46 | for filename in filenames: 47 | if filename.startswith('test_') and filename.endswith('.py'): 48 | name = filename[:-3] 49 | plugin = __import__(name) 50 | test.suites.append(load(plugin)) 51 | 52 | module = None 53 | 54 | 55 | # vim:set shiftwidth=4 softtabstop=4 expandtab textwidth=79: 56 | -------------------------------------------------------------------------------- /test/test_format.py: -------------------------------------------------------------------------------- 1 | ### 2 | # Copyright (c) 2005, Jeremiah Fincher 3 | # Copyright (c) 2010-2021, Valentin Lorentz 4 | # All rights reserved. 5 | # 6 | # Redistribution and use in source and binary forms, with or without 7 | # modification, are permitted provided that the following conditions are met: 8 | # 9 | # * Redistributions of source code must retain the above copyright notice, 10 | # this list of conditions, and the following disclaimer. 11 | # * Redistributions in binary form must reproduce the above copyright notice, 12 | # this list of conditions, and the following disclaimer in the 13 | # documentation and/or other materials provided with the distribution. 14 | # * Neither the name of the author of this software nor the name of 15 | # contributors to this software may be used to endorse or promote products 16 | # derived from this software without specific prior written consent. 17 | # 18 | # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 19 | # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20 | # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21 | # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 22 | # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 23 | # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 24 | # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 25 | # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 26 | # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 27 | # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 28 | # POSSIBILITY OF SUCH DAMAGE. 29 | ### 30 | 31 | from supybot.test import * 32 | 33 | class FormatTestCase(SupyTestCase): 34 | def test_t_acceptsNone(self): 35 | self.assertTrue(format('%t', None)) 36 | 37 | def testFloatingPoint(self): 38 | self.assertEqual(format('%.2f', 0.12345), '0.12') 39 | 40 | 41 | # vim:set shiftwidth=4 softtabstop=4 expandtab textwidth=79: 42 | -------------------------------------------------------------------------------- /test/test_plugin.py: -------------------------------------------------------------------------------- 1 | ### 2 | # Copyright (c) 2005, Jeremiah Fincher 3 | # Copyright (c) 2010-2021, Valentin Lorentz 4 | # All rights reserved. 5 | # 6 | # Redistribution and use in source and binary forms, with or without 7 | # modification, are permitted provided that the following conditions are met: 8 | # 9 | # * Redistributions of source code must retain the above copyright notice, 10 | # this list of conditions, and the following disclaimer. 11 | # * Redistributions in binary form must reproduce the above copyright notice, 12 | # this list of conditions, and the following disclaimer in the 13 | # documentation and/or other materials provided with the distribution. 14 | # * Neither the name of the author of this software nor the name of 15 | # contributors to this software may be used to endorse or promote products 16 | # derived from this software without specific prior written consent. 17 | # 18 | # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 19 | # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20 | # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21 | # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 22 | # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 23 | # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 24 | # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 25 | # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 26 | # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 27 | # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 28 | # POSSIBILITY OF SUCH DAMAGE. 29 | ### 30 | 31 | from supybot.test import * 32 | 33 | import supybot.plugin as plugin 34 | 35 | class FunctionsTestCase(SupyTestCase): 36 | def testLoadPluginModule(self): 37 | self.assertRaises(ImportError, plugin.loadPluginModule, 'asldj') 38 | self.assertTrue(plugin.loadPluginModule('Owner')) 39 | self.assertTrue(plugin.loadPluginModule('owner')) 40 | 41 | 42 | # vim:set shiftwidth=4 softtabstop=4 expandtab textwidth=79: 43 | --------------------------------------------------------------------------------