Remove ShrinkUrl
This commit is contained in:
parent
ddd1076b61
commit
304e10c8d0
|
@ -1 +0,0 @@
|
||||||
This plugin features commands to shorten URLs through different services, like tinyurl.
|
|
|
@ -1,64 +0,0 @@
|
||||||
###
|
|
||||||
# Copyright (c) 2005, Jeremiah Fincher
|
|
||||||
# Copyright (c) 2009, James McCoy
|
|
||||||
# All rights reserved.
|
|
||||||
#
|
|
||||||
# Redistribution and use in source and binary forms, with or without
|
|
||||||
# modification, are permitted provided that the following conditions are met:
|
|
||||||
#
|
|
||||||
# * Redistributions of source code must retain the above copyright notice,
|
|
||||||
# this list of conditions, and the following disclaimer.
|
|
||||||
# * Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
# this list of conditions, and the following disclaimer in the
|
|
||||||
# documentation and/or other materials provided with the distribution.
|
|
||||||
# * Neither the name of the author of this software nor the name of
|
|
||||||
# contributors to this software may be used to endorse or promote products
|
|
||||||
# derived from this software without specific prior written consent.
|
|
||||||
#
|
|
||||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
||||||
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
||||||
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
|
||||||
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
||||||
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
||||||
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
||||||
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
||||||
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
||||||
# POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
###
|
|
||||||
|
|
||||||
"""
|
|
||||||
Shrinks URLs using various URL shrinking services.
|
|
||||||
"""
|
|
||||||
|
|
||||||
import supybot
|
|
||||||
import supybot.world as world
|
|
||||||
|
|
||||||
__version__ = "%%VERSION%%"
|
|
||||||
|
|
||||||
__author__ = getattr(supybot.authors, 'jemfinch',
|
|
||||||
supybot.Author('jemfinch', '', ''))
|
|
||||||
__maintainer__ = getattr(supybot.authors, 'oddluck',
|
|
||||||
supybot.Author('oddluck', 'oddluck', 'oddluck@riseup.net'))
|
|
||||||
|
|
||||||
# This is a dictionary mapping supybot.Author instances to lists of
|
|
||||||
# contributions.
|
|
||||||
__contributors__ = {supybot.authors.jamessan: ['xrl.us support',
|
|
||||||
'x0.no support']}
|
|
||||||
|
|
||||||
from . import config
|
|
||||||
from . import plugin
|
|
||||||
from importlib import reload
|
|
||||||
reload(plugin) # In case we're being reloaded.
|
|
||||||
# Add more reloads here if you add third-party modules and want them to be
|
|
||||||
# reloaded when this plugin is reloaded. Don't forget to import them as well!
|
|
||||||
|
|
||||||
if world.testing:
|
|
||||||
from . import test
|
|
||||||
|
|
||||||
Class = plugin.Class
|
|
||||||
configure = config.configure
|
|
||||||
|
|
||||||
|
|
||||||
# vim:set shiftwidth=4 softtabstop=4 expandtab textwidth=79:
|
|
|
@ -1,103 +0,0 @@
|
||||||
###
|
|
||||||
# Copyright (c) 2005, Jeremiah Fincher
|
|
||||||
# Copyright (c) 2009-2010, James McCoy
|
|
||||||
# All rights reserved.
|
|
||||||
#
|
|
||||||
# Redistribution and use in source and binary forms, with or without
|
|
||||||
# modification, are permitted provided that the following conditions are met:
|
|
||||||
#
|
|
||||||
# * Redistributions of source code must retain the above copyright notice,
|
|
||||||
# this list of conditions, and the following disclaimer.
|
|
||||||
# * Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
# this list of conditions, and the following disclaimer in the
|
|
||||||
# documentation and/or other materials provided with the distribution.
|
|
||||||
# * Neither the name of the author of this software nor the name of
|
|
||||||
# contributors to this software may be used to endorse or promote products
|
|
||||||
# derived from this software without specific prior written consent.
|
|
||||||
#
|
|
||||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
||||||
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
||||||
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
|
||||||
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
||||||
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
||||||
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
||||||
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
||||||
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
||||||
# POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
###
|
|
||||||
|
|
||||||
import supybot.conf as conf
|
|
||||||
import supybot.registry as registry
|
|
||||||
from supybot.i18n import PluginInternationalization, internationalizeDocstring
|
|
||||||
_ = PluginInternationalization('ShrinkUrl')
|
|
||||||
|
|
||||||
def configure(advanced):
|
|
||||||
from supybot.questions import output, expect, anything, something, yn
|
|
||||||
conf.registerPlugin('ShrinkUrl', True)
|
|
||||||
if yn(_("""This plugin offers a snarfer that will go retrieve a shorter
|
|
||||||
version of long URLs that are sent to the channel. Would you
|
|
||||||
like this snarfer to be enabled?"""), default=False):
|
|
||||||
conf.supybot.plugins.ShrinkUrl.shrinkSnarfer.setValue(True)
|
|
||||||
|
|
||||||
class ShrinkService(registry.OnlySomeStrings):
|
|
||||||
"""Valid values include 'tiny', 'ur1', and 'x0'."""
|
|
||||||
validStrings = ('tiny', 'ur1', 'x0')
|
|
||||||
|
|
||||||
class ShrinkCycle(registry.SpaceSeparatedListOfStrings):
|
|
||||||
"""Valid values include 'ln', 'tiny', 'ur1', and 'x0'."""
|
|
||||||
Value = ShrinkService
|
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
|
||||||
super(ShrinkCycle, self).__init__(*args, **kwargs)
|
|
||||||
self.lastIndex = -1
|
|
||||||
|
|
||||||
def setValue(self, v):
|
|
||||||
super(self.__class__, self).setValue(v)
|
|
||||||
self.lastIndex = -1
|
|
||||||
|
|
||||||
def getService(self):
|
|
||||||
L = self()
|
|
||||||
if L:
|
|
||||||
self.lastIndex = (self.lastIndex + 1) % len(L)
|
|
||||||
return L[self.lastIndex]
|
|
||||||
raise ValueError('No services have been configured for rotation. ' \
|
|
||||||
'See conf.supybot.plugins.ShrinkUrl.serviceRotation.')
|
|
||||||
|
|
||||||
ShrinkUrl = conf.registerPlugin('ShrinkUrl')
|
|
||||||
conf.registerChannelValue(ShrinkUrl, 'shrinkSnarfer',
|
|
||||||
registry.Boolean(False, _("""Determines whether the
|
|
||||||
shrink snarfer is enabled. This snarfer will watch for URLs in the
|
|
||||||
channel, and if they're sufficiently long (as determined by
|
|
||||||
supybot.plugins.ShrinkUrl.minimumLength) it will post a
|
|
||||||
smaller URL from the service as denoted in
|
|
||||||
supybot.plugins.ShrinkUrl.default.""")))
|
|
||||||
conf.registerChannelValue(ShrinkUrl.shrinkSnarfer, 'showDomain',
|
|
||||||
registry.Boolean(True, _("""Determines whether the snarfer will show the
|
|
||||||
domain of the URL being snarfed along with the shrunken URL.""")))
|
|
||||||
conf.registerChannelValue(ShrinkUrl, 'minimumLength',
|
|
||||||
registry.PositiveInteger(48, _("""The minimum length a URL must be before
|
|
||||||
the bot will shrink it.""")))
|
|
||||||
conf.registerChannelValue(ShrinkUrl, 'nonSnarfingRegexp',
|
|
||||||
registry.Regexp(None, _("""Determines what URLs are to be snarfed; URLs
|
|
||||||
matching the regexp given will not be snarfed. Give the empty string if
|
|
||||||
you have no URLs that you'd like to exclude from being snarfed.""")))
|
|
||||||
conf.registerChannelValue(ShrinkUrl, 'outFilter',
|
|
||||||
registry.Boolean(False, _("""Determines whether the bot will shrink the
|
|
||||||
URLs of outgoing messages if those URLs are longer than
|
|
||||||
supybot.plugins.ShrinkUrl.minimumLength.""")))
|
|
||||||
conf.registerChannelValue(ShrinkUrl, 'default',
|
|
||||||
ShrinkService('x0', _("""Determines what website the bot will use when
|
|
||||||
shrinking a URL.""")))
|
|
||||||
conf.registerGlobalValue(ShrinkUrl, 'bold',
|
|
||||||
registry.Boolean(True, _("""Determines whether this plugin will bold
|
|
||||||
certain portions of its replies.""")))
|
|
||||||
conf.registerChannelValue(ShrinkUrl, 'serviceRotation',
|
|
||||||
ShrinkCycle([], _("""If set to a non-empty value, specifies the list of
|
|
||||||
services to rotate through for the shrinkSnarfer and outFilter.""")))
|
|
||||||
conf.registerChannelValue(ShrinkUrl, 'fetchSpiffyTitle',
|
|
||||||
registry.Boolean(False, _("""Determines whether the bot will fetch URL
|
|
||||||
titles with the SpiffyTitles plugin.""")))
|
|
||||||
|
|
||||||
# vim:set shiftwidth=4 softtabstop=4 expandtab textwidth=79:
|
|
|
@ -1,205 +0,0 @@
|
||||||
# ShrinkUrl plugin in Limnoria.
|
|
||||||
# Copyright (C) 2011, 2012 Limnoria
|
|
||||||
# Mikaela Suomalainen <mkaysi@outlook.com>, 2011, 2012.
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: Limnoria\n"
|
|
||||||
"POT-Creation-Date: 2015-01-24 19:31+CET\n"
|
|
||||||
"PO-Revision-Date: 2015-01-24 19:31+0100\n"
|
|
||||||
"Last-Translator: Mikaela Suomalainen <mikaela.suomalainen@outlook.com>\n"
|
|
||||||
"Language-Team: suomi <>\n"
|
|
||||||
"Language: fi\n"
|
|
||||||
"MIME-Version: 1.0\n"
|
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
|
||||||
"Generated-By: pygettext.py 1.5\n"
|
|
||||||
"Plural-Forms: \n"
|
|
||||||
"X-Generator: Poedit 1.6.10\n"
|
|
||||||
|
|
||||||
#: config.py:39
|
|
||||||
msgid ""
|
|
||||||
"This plugin offers a snarfer that will go retrieve a shorter\n"
|
|
||||||
" version of long URLs that are sent to the channel. Would you\n"
|
|
||||||
" like this snarfer to be enabled?"
|
|
||||||
msgstr ""
|
|
||||||
"Tämä lisäosa tarjoaa kaappaajan,joka palauttaa lyhyemmän\n"
|
|
||||||
" version pitkistä URL-osoitteista, jotka lähetetään kanavalle. Haluaisitko\n"
|
|
||||||
" tämän kaappaajan olevan käytössä?"
|
|
||||||
|
|
||||||
#: config.py:45 config.py:49
|
|
||||||
msgid "Valid values include 'ln', 'tiny', 'goo', 'ur1', and 'x0'."
|
|
||||||
msgstr "Kelvolliset arvot ovat 'ln', 'tiny', 'goo', 'ur1' ja 'x0' ."
|
|
||||||
|
|
||||||
#: config.py:70
|
|
||||||
msgid ""
|
|
||||||
"Determines whether the\n"
|
|
||||||
" shrink snarfer is enabled. This snarfer will watch for URLs in the\n"
|
|
||||||
" channel, and if they're sufficiently long (as determined by\n"
|
|
||||||
" supybot.plugins.ShrinkUrl.minimumLength) it will post a\n"
|
|
||||||
" smaller URL from either ln-s.net or tinyurl.com, as denoted in\n"
|
|
||||||
" supybot.plugins.ShrinkUrl.default."
|
|
||||||
msgstr ""
|
|
||||||
"Määrittää onko kutistuskaappain käytössä.\n"
|
|
||||||
" Tämä kaappaaja vahtii URL-osoitteita kanavalla\n"
|
|
||||||
" ja jos ne ovat tarpeeksi pitkiä (määritetty asetusarvolla\n"
|
|
||||||
" supybot.plugins.ShrinkUrl.minimumLength), se lähettää lyhyemmän URL-"
|
|
||||||
"osoitteen\n"
|
|
||||||
" joko sivustolta ln-s.net tai tinyurl.com, riippuen, minkä asetuksen\n"
|
|
||||||
" supybot.plugins.ShrinkUrl.default määrittää."
|
|
||||||
|
|
||||||
#: config.py:77
|
|
||||||
msgid ""
|
|
||||||
"Determines whether the snarfer will show the\n"
|
|
||||||
" domain of the URL being snarfed along with the shrunken URL."
|
|
||||||
msgstr ""
|
|
||||||
"Määrittää näyttääkö kaappaaja kaapatun URL-osoitteen domainin lyhennetyn\n"
|
|
||||||
" URL-osoitteen kanssa."
|
|
||||||
|
|
||||||
#: config.py:80
|
|
||||||
msgid ""
|
|
||||||
"The minimum length a URL must be before\n"
|
|
||||||
" the bot will shrink it."
|
|
||||||
msgstr ""
|
|
||||||
"Vähimmäispituus joka URL-osoitteen täytyy olla, ennen kuin\n"
|
|
||||||
" botti kutistaa sen."
|
|
||||||
|
|
||||||
#: config.py:83
|
|
||||||
msgid ""
|
|
||||||
"Determines what URLs are to be snarfed; URLs\n"
|
|
||||||
" matching the regexp given will not be snarfed. Give the empty string "
|
|
||||||
"if\n"
|
|
||||||
" you have no URLs that you'd like to exclude from being snarfed."
|
|
||||||
msgstr ""
|
|
||||||
"Määrittää mitä URL-osoitteita ei kaapata; URL-osoitteet, jotka\n"
|
|
||||||
" täsmäävät annettuun säännölliseen lausekkeeseen jätetään kaappaamatta. "
|
|
||||||
"Anna tyhjä merkkiketju, jos\n"
|
|
||||||
" et halua estää mitään URL-osoitetta tulemasta kaapatuksi."
|
|
||||||
|
|
||||||
#: config.py:87
|
|
||||||
msgid ""
|
|
||||||
"Determines whether the bot will shrink the\n"
|
|
||||||
" URLs of outgoing messages if those URLs are longer than\n"
|
|
||||||
" supybot.plugins.ShrinkUrl.minimumLength."
|
|
||||||
msgstr ""
|
|
||||||
"Määrittää lyhentääkö botti ulosmenevien viestien\n"
|
|
||||||
" URL-osoitteet, jos ne ovat pidempiä kuin\n"
|
|
||||||
" supybot.plugins.ShrinkUrl.minimumLength."
|
|
||||||
|
|
||||||
#: config.py:91
|
|
||||||
msgid ""
|
|
||||||
"Determines what website the bot will use when\n"
|
|
||||||
" shrinking a URL."
|
|
||||||
msgstr ""
|
|
||||||
"Määrittää mitä verkkosivua botti käyttää lyhentäessään\n"
|
|
||||||
" URL-osoitetta."
|
|
||||||
|
|
||||||
#: config.py:94
|
|
||||||
msgid ""
|
|
||||||
"Determines whether this plugin will bold\n"
|
|
||||||
" certain portions of its replies."
|
|
||||||
msgstr ""
|
|
||||||
"Määrittää korostaako botti tietyt osat\n"
|
|
||||||
" vastauksissaan."
|
|
||||||
|
|
||||||
#: config.py:97
|
|
||||||
msgid ""
|
|
||||||
"If set to a non-empty value, specifies the list of\n"
|
|
||||||
" services to rotate through for the shrinkSnarfer and outFilter."
|
|
||||||
msgstr ""
|
|
||||||
"Jos tämä on asetettu muuksi, kuin tyhjäksi arvoksi, määrittää listan\n"
|
|
||||||
" palveluista, joita käytetään kutistuskaappaajalle ja ulostulon "
|
|
||||||
"suodattimelle."
|
|
||||||
|
|
||||||
#: plugin.py:90
|
|
||||||
msgid ""
|
|
||||||
"This plugin features commands to shorten URLs through different services,\n"
|
|
||||||
" like tinyurl."
|
|
||||||
msgstr ""
|
|
||||||
"Tämä plugin sisältää komennot URL-osoitteiden lyhentämiseen eri palveluilla, "
|
|
||||||
"kuten esimerkiksi\n"
|
|
||||||
" tinyurl:illa."
|
|
||||||
|
|
||||||
#: plugin.py:192
|
|
||||||
msgid ""
|
|
||||||
"<url>\n"
|
|
||||||
"\n"
|
|
||||||
" Returns an ln-s.net version of <url>.\n"
|
|
||||||
" "
|
|
||||||
msgstr ""
|
|
||||||
"<URL-osoite>\n"
|
|
||||||
"\n"
|
|
||||||
" Palauttaa ln-s.net version <URL-osoitteesta>.\n"
|
|
||||||
" "
|
|
||||||
|
|
||||||
#: plugin.py:219
|
|
||||||
msgid ""
|
|
||||||
"<url>\n"
|
|
||||||
"\n"
|
|
||||||
" Returns a TinyURL.com version of <url>\n"
|
|
||||||
" "
|
|
||||||
msgstr ""
|
|
||||||
"<URL-osoite>\n"
|
|
||||||
"\n"
|
|
||||||
" Palauttaa TinyURL.com palvelun lyhentämän version <URL-"
|
|
||||||
"osoitteesta>.\n"
|
|
||||||
" "
|
|
||||||
|
|
||||||
#: plugin.py:252
|
|
||||||
msgid ""
|
|
||||||
"<url>\n"
|
|
||||||
"\n"
|
|
||||||
" Returns an goo.gl version of <url>.\n"
|
|
||||||
" "
|
|
||||||
msgstr ""
|
|
||||||
"<url>\n"
|
|
||||||
"\n"
|
|
||||||
" Palauttaa goo.gl-palvelun lyhentämän version <URL-osoitteesta>."
|
|
||||||
|
|
||||||
#: plugin.py:282
|
|
||||||
msgid ""
|
|
||||||
"<url>\n"
|
|
||||||
"\n"
|
|
||||||
" Returns an ur1 version of <url>.\n"
|
|
||||||
" "
|
|
||||||
msgstr ""
|
|
||||||
"<url>\n"
|
|
||||||
" Palauttaa ur1-version <url:stä>.\n"
|
|
||||||
" "
|
|
||||||
|
|
||||||
#: plugin.py:309
|
|
||||||
msgid ""
|
|
||||||
"<url>\n"
|
|
||||||
"\n"
|
|
||||||
" Returns an x0.no version of <url>.\n"
|
|
||||||
" "
|
|
||||||
msgstr ""
|
|
||||||
"<url>\n"
|
|
||||||
"\n"
|
|
||||||
" Palauttaa x0.no palvelun lyhentämän version <URL-osoitteesta>.\n"
|
|
||||||
" "
|
|
||||||
|
|
||||||
#: plugin.py:336
|
|
||||||
msgid ""
|
|
||||||
"<url>\n"
|
|
||||||
"\n"
|
|
||||||
" Returns an expanded version of <url>.\n"
|
|
||||||
" "
|
|
||||||
msgstr ""
|
|
||||||
"<url>\n"
|
|
||||||
" Palauttaa laajennetun version <url-osoitteesta>.\n"
|
|
||||||
" "
|
|
||||||
|
|
||||||
#~ msgid ""
|
|
||||||
#~ "<url>\n"
|
|
||||||
#~ "\n"
|
|
||||||
#~ " Returns an xrl.us version of <url>.\n"
|
|
||||||
#~ " "
|
|
||||||
#~ msgstr ""
|
|
||||||
#~ "<URL-osoite>\n"
|
|
||||||
#~ "\n"
|
|
||||||
#~ " Palauttaa xrl.us palvelun lyhentämän version <URL-osoitteesta>.\n"
|
|
||||||
#~ " "
|
|
||||||
|
|
||||||
#~ msgid "Valid values include 'ln', 'tiny', 'xrl', 'goo', and 'x0'."
|
|
||||||
#~ msgstr "Kelvolliset arvot ovat 'ln', 'tiny', 'xrl', 'goo' ja 'x0' ."
|
|
|
@ -1,183 +0,0 @@
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: Limnoria\n"
|
|
||||||
"POT-Creation-Date: 2015-01-24 19:31+CET\n"
|
|
||||||
"PO-Revision-Date: 2015-01-24 19:32+0100\n"
|
|
||||||
"Last-Translator: Valentin Lorentz <progval@gmail.com>\n"
|
|
||||||
"Language-Team: Limnoria <progval@gmail.com>\n"
|
|
||||||
"Language: \n"
|
|
||||||
"MIME-Version: 1.0\n"
|
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
|
||||||
"X-Poedit-SourceCharset: ASCII\n"
|
|
||||||
"X-Generator: Poedit 1.5.4\n"
|
|
||||||
|
|
||||||
#: config.py:39
|
|
||||||
msgid ""
|
|
||||||
"This plugin offers a snarfer that will go retrieve a shorter\n"
|
|
||||||
" version of long URLs that are sent to the channel. Would you\n"
|
|
||||||
" like this snarfer to be enabled?"
|
|
||||||
msgstr ""
|
|
||||||
"Ce plugin offre un snarfer qui récupère de longues URLs envoyées sur un "
|
|
||||||
"canal pour en envoyer une version plus courte. Voulez-vous activer ce "
|
|
||||||
"snarfer ?"
|
|
||||||
|
|
||||||
#: config.py:45 config.py:49
|
|
||||||
msgid "Valid values include 'ln', 'tiny', 'goo', 'ur1', and 'x0'."
|
|
||||||
msgstr ""
|
|
||||||
"Les valeurs valides incluent 'ln', 'tiny', 'goo', 'ur1', et 'x0'."
|
|
||||||
|
|
||||||
#: config.py:70
|
|
||||||
msgid ""
|
|
||||||
"Determines whether the\n"
|
|
||||||
" shrink snarfer is enabled. This snarfer will watch for URLs in the\n"
|
|
||||||
" channel, and if they're sufficiently long (as determined by\n"
|
|
||||||
" supybot.plugins.ShrinkUrl.minimumLength) it will post a\n"
|
|
||||||
" smaller URL from either ln-s.net or tinyurl.com, as denoted in\n"
|
|
||||||
" supybot.plugins.ShrinkUrl.default."
|
|
||||||
msgstr ""
|
|
||||||
"Détermine si le snarfer d'URL est activé. Ce remplaceur sera à l'écoute de "
|
|
||||||
"toutes les URLs sur lle canal, et, si elle sont suffisamment longues "
|
|
||||||
"(déterminé par supybot.plugins.ShrinkUrl.minimumLength) le bot postera une "
|
|
||||||
"URL raccourcie avec ln-s.net ou tinyurl.com, comme défini par supybot."
|
|
||||||
"plugins.ShrinkUrl.default."
|
|
||||||
|
|
||||||
#: config.py:77
|
|
||||||
msgid ""
|
|
||||||
"Determines whether the snarfer will show the\n"
|
|
||||||
" domain of the URL being snarfed along with the shrunken URL."
|
|
||||||
msgstr ""
|
|
||||||
"Détermine si le snarfer affichera le domaine de l'URL snarfée avec l'URL "
|
|
||||||
"raccourcie."
|
|
||||||
|
|
||||||
#: config.py:80
|
|
||||||
msgid ""
|
|
||||||
"The minimum length a URL must be before\n"
|
|
||||||
" the bot will shrink it."
|
|
||||||
msgstr "La taille minimum d'une URL pour que le bot la raccourcice."
|
|
||||||
|
|
||||||
#: config.py:83
|
|
||||||
msgid ""
|
|
||||||
"Determines what URLs are to be snarfed; URLs\n"
|
|
||||||
" matching the regexp given will not be snarfed. Give the empty string "
|
|
||||||
"if\n"
|
|
||||||
" you have no URLs that you'd like to exclude from being snarfed."
|
|
||||||
msgstr ""
|
|
||||||
"Détermine quelles URLs seront snarfées ; les URLs correspondant à "
|
|
||||||
"l'expression régulière ne seront par snarfées. Donnez une chaîne vide si il "
|
|
||||||
"n'y a pas d'URL que vous voulez exclure."
|
|
||||||
|
|
||||||
#: config.py:87
|
|
||||||
msgid ""
|
|
||||||
"Determines whether the bot will shrink the\n"
|
|
||||||
" URLs of outgoing messages if those URLs are longer than\n"
|
|
||||||
" supybot.plugins.ShrinkUrl.minimumLength."
|
|
||||||
msgstr ""
|
|
||||||
"Détermine si le bot raccourcira les URLs des messages sortant si ces URLs "
|
|
||||||
"sont plus longues que supybot.plugins.ShrinkUrl.minimumLength."
|
|
||||||
|
|
||||||
#: config.py:91
|
|
||||||
msgid ""
|
|
||||||
"Determines what website the bot will use when\n"
|
|
||||||
" shrinking a URL."
|
|
||||||
msgstr "Détermine quel site web le bot utilisera pour raccourcir une URL"
|
|
||||||
|
|
||||||
#: config.py:94
|
|
||||||
msgid ""
|
|
||||||
"Determines whether this plugin will bold\n"
|
|
||||||
" certain portions of its replies."
|
|
||||||
msgstr ""
|
|
||||||
"Détermine si ce plugin mettra en gras certaines portions de ses réponses."
|
|
||||||
|
|
||||||
#: config.py:97
|
|
||||||
msgid ""
|
|
||||||
"If set to a non-empty value, specifies the list of\n"
|
|
||||||
" services to rotate through for the shrinkSnarfer and outFilter."
|
|
||||||
msgstr ""
|
|
||||||
"Si définit à une valeur non vide, définit la liste des services à faire "
|
|
||||||
"tourner pour shrinkSnarfer et outFilter."
|
|
||||||
|
|
||||||
#: plugin.py:90
|
|
||||||
msgid ""
|
|
||||||
"This plugin features commands to shorten URLs through different services,\n"
|
|
||||||
" like tinyurl."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: plugin.py:192
|
|
||||||
msgid ""
|
|
||||||
"<url>\n"
|
|
||||||
"\n"
|
|
||||||
" Returns an ln-s.net version of <url>.\n"
|
|
||||||
" "
|
|
||||||
msgstr ""
|
|
||||||
"<url>\n"
|
|
||||||
"\n"
|
|
||||||
"Retourne une version de ln-s.net de l'<url>."
|
|
||||||
|
|
||||||
#: plugin.py:219
|
|
||||||
msgid ""
|
|
||||||
"<url>\n"
|
|
||||||
"\n"
|
|
||||||
" Returns a TinyURL.com version of <url>\n"
|
|
||||||
" "
|
|
||||||
msgstr ""
|
|
||||||
"<url>\n"
|
|
||||||
"\n"
|
|
||||||
"Retourne une version de TinyURL.com de l'<url>."
|
|
||||||
|
|
||||||
#: plugin.py:252
|
|
||||||
msgid ""
|
|
||||||
"<url>\n"
|
|
||||||
"\n"
|
|
||||||
" Returns an goo.gl version of <url>.\n"
|
|
||||||
" "
|
|
||||||
msgstr ""
|
|
||||||
"<url>\n"
|
|
||||||
"\n"
|
|
||||||
"Retourne une version de goo.gl de l'<url>."
|
|
||||||
|
|
||||||
#: plugin.py:282
|
|
||||||
msgid ""
|
|
||||||
"<url>\n"
|
|
||||||
"\n"
|
|
||||||
" Returns an ur1 version of <url>.\n"
|
|
||||||
" "
|
|
||||||
msgstr ""
|
|
||||||
"<url>\n"
|
|
||||||
"\n"
|
|
||||||
"Retourne une version de ur1 de l'<url>."
|
|
||||||
|
|
||||||
#: plugin.py:309
|
|
||||||
msgid ""
|
|
||||||
"<url>\n"
|
|
||||||
"\n"
|
|
||||||
" Returns an x0.no version of <url>.\n"
|
|
||||||
" "
|
|
||||||
msgstr ""
|
|
||||||
"<url>\n"
|
|
||||||
"\n"
|
|
||||||
"Retourne une version de x0.no de l'<url>."
|
|
||||||
|
|
||||||
#: plugin.py:336
|
|
||||||
msgid ""
|
|
||||||
"<url>\n"
|
|
||||||
"\n"
|
|
||||||
" Returns an expanded version of <url>.\n"
|
|
||||||
" "
|
|
||||||
msgstr ""
|
|
||||||
"<url>\n"
|
|
||||||
"\n"
|
|
||||||
"Retourne la version large de l'<url>."
|
|
||||||
|
|
||||||
#~ msgid ""
|
|
||||||
#~ "<url>\n"
|
|
||||||
#~ "\n"
|
|
||||||
#~ " Returns an xrl.us version of <url>.\n"
|
|
||||||
#~ " "
|
|
||||||
#~ msgstr ""
|
|
||||||
#~ "<url>\n"
|
|
||||||
#~ "\n"
|
|
||||||
#~ "Retourne une version de xrl.us de l'<url>."
|
|
||||||
|
|
||||||
#~ msgid "Valid values include 'ln', 'tiny', 'xrl', 'goo', and 'x0'."
|
|
||||||
#~ msgstr "Les valeurs valides incluent 'ln', 'tiny', 'xrl', 'goo', et 'x0'."
|
|
|
@ -1,194 +0,0 @@
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: Limnoria\n"
|
|
||||||
"POT-Creation-Date: 2015-01-24 19:31+CET\n"
|
|
||||||
"PO-Revision-Date: 2015-01-24 11:45+0100\n"
|
|
||||||
"Last-Translator: skizzhg <skizzhg@gmx.com>\n"
|
|
||||||
"Language-Team: Italian <skizzhg@gmx.com>\n"
|
|
||||||
"Language: it\n"
|
|
||||||
"MIME-Version: 1.0\n"
|
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
|
||||||
|
|
||||||
#: config.py:39
|
|
||||||
msgid ""
|
|
||||||
"This plugin offers a snarfer that will go retrieve a shorter\n"
|
|
||||||
" version of long URLs that are sent to the channel. Would you\n"
|
|
||||||
" like this snarfer to be enabled?"
|
|
||||||
msgstr ""
|
|
||||||
"Questo plugin offre un cattura URL che riporterà una versione accorciata\n"
|
|
||||||
" di quelli lunghi inviati al canale. Lo si vuole abilitare?\n"
|
|
||||||
|
|
||||||
#: config.py:45 config.py:49
|
|
||||||
#, fuzzy
|
|
||||||
msgid "Valid values include 'ln', 'tiny', 'goo', 'ur1', and 'x0'."
|
|
||||||
msgstr ""
|
|
||||||
"I valori validi comprendono \"ln\", \"tiny\", \"goo\" e \"x0\"."
|
|
||||||
|
|
||||||
#: config.py:70
|
|
||||||
msgid ""
|
|
||||||
"Determines whether the\n"
|
|
||||||
" shrink snarfer is enabled. This snarfer will watch for URLs in the\n"
|
|
||||||
" channel, and if they're sufficiently long (as determined by\n"
|
|
||||||
" supybot.plugins.ShrinkUrl.minimumLength) it will post a\n"
|
|
||||||
" smaller URL from either ln-s.net or tinyurl.com, as denoted in\n"
|
|
||||||
" supybot.plugins.ShrinkUrl.default."
|
|
||||||
msgstr ""
|
|
||||||
"Determina se l'accorcia URL è abilitato. Questo controllerà gli URL che "
|
|
||||||
"passano\n"
|
|
||||||
" in canale e se sono sufficientemente lunghi (determinato da\n"
|
|
||||||
" supybot.plugins.ShrinkUrl.minimumLength) il bot ne invierà uno più "
|
|
||||||
"corto\n"
|
|
||||||
" tramite ln-s.net o tinyurl.com, come definito in supybot.plugins."
|
|
||||||
"ShrinkUrl.default."
|
|
||||||
|
|
||||||
#: config.py:77
|
|
||||||
msgid ""
|
|
||||||
"Determines whether the snarfer will show the\n"
|
|
||||||
" domain of the URL being snarfed along with the shrunken URL."
|
|
||||||
msgstr ""
|
|
||||||
"Determina se l'accorcia URL mostrerà il dominio dell'URL originale assieme a "
|
|
||||||
"quello accorciato."
|
|
||||||
|
|
||||||
#: config.py:80
|
|
||||||
msgid ""
|
|
||||||
"The minimum length a URL must be before\n"
|
|
||||||
" the bot will shrink it."
|
|
||||||
msgstr ""
|
|
||||||
"La lunghezza minima che un URL deve avere affinché il bot decida di "
|
|
||||||
"accorciarlo."
|
|
||||||
|
|
||||||
#: config.py:83
|
|
||||||
msgid ""
|
|
||||||
"Determines what URLs are to be snarfed; URLs\n"
|
|
||||||
" matching the regexp given will not be snarfed. Give the empty string "
|
|
||||||
"if\n"
|
|
||||||
" you have no URLs that you'd like to exclude from being snarfed."
|
|
||||||
msgstr ""
|
|
||||||
"Determina quali URL debbano essere intercettati; quelli che corrispondono "
|
|
||||||
"alla\n"
|
|
||||||
" regexp fornita non verranno coinvolti. Se non si vuole escludere alcun "
|
|
||||||
"URL,\n"
|
|
||||||
" aggiungere una stringa vuota."
|
|
||||||
|
|
||||||
#: config.py:87
|
|
||||||
msgid ""
|
|
||||||
"Determines whether the bot will shrink the\n"
|
|
||||||
" URLs of outgoing messages if those URLs are longer than\n"
|
|
||||||
" supybot.plugins.ShrinkUrl.minimumLength."
|
|
||||||
msgstr ""
|
|
||||||
"Determina se il bot accorcerà gli URL dei messaggi in uscita se questi sono "
|
|
||||||
"più\n"
|
|
||||||
" lunghi del valore di supybot.plugins.ShrinkUrl.minimumLength."
|
|
||||||
|
|
||||||
#: config.py:91
|
|
||||||
msgid ""
|
|
||||||
"Determines what website the bot will use when\n"
|
|
||||||
" shrinking a URL."
|
|
||||||
msgstr "Determina quale sito web il bot userà per accorciare un URL."
|
|
||||||
|
|
||||||
#: config.py:94
|
|
||||||
msgid ""
|
|
||||||
"Determines whether this plugin will bold\n"
|
|
||||||
" certain portions of its replies."
|
|
||||||
msgstr ""
|
|
||||||
"Determina se il plugin riporterà in grassetto alcune porzioni delle risposte."
|
|
||||||
|
|
||||||
#: config.py:97
|
|
||||||
msgid ""
|
|
||||||
"If set to a non-empty value, specifies the list of\n"
|
|
||||||
" services to rotate through for the shrinkSnarfer and outFilter."
|
|
||||||
msgstr ""
|
|
||||||
"Se impostato ad un valore non vuoto, specifica l'elenco dei servizi a cui\n"
|
|
||||||
" rivolgersi per le variabili shrinkSnarfer e outFilter."
|
|
||||||
|
|
||||||
#: plugin.py:90
|
|
||||||
msgid ""
|
|
||||||
"This plugin features commands to shorten URLs through different services,\n"
|
|
||||||
" like tinyurl."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: plugin.py:192
|
|
||||||
msgid ""
|
|
||||||
"<url>\n"
|
|
||||||
"\n"
|
|
||||||
" Returns an ln-s.net version of <url>.\n"
|
|
||||||
" "
|
|
||||||
msgstr ""
|
|
||||||
"<url>\n"
|
|
||||||
"\n"
|
|
||||||
" Restituisce una versione di ln-s.net di <url>.\n"
|
|
||||||
" "
|
|
||||||
|
|
||||||
#: plugin.py:219
|
|
||||||
msgid ""
|
|
||||||
"<url>\n"
|
|
||||||
"\n"
|
|
||||||
" Returns a TinyURL.com version of <url>\n"
|
|
||||||
" "
|
|
||||||
msgstr ""
|
|
||||||
"<url>\n"
|
|
||||||
"\n"
|
|
||||||
" Restituisce una versione di TinyURL.com di <url>\n"
|
|
||||||
" "
|
|
||||||
|
|
||||||
#: plugin.py:252
|
|
||||||
msgid ""
|
|
||||||
"<url>\n"
|
|
||||||
"\n"
|
|
||||||
" Returns an goo.gl version of <url>.\n"
|
|
||||||
" "
|
|
||||||
msgstr ""
|
|
||||||
"<url>\n"
|
|
||||||
"\n"
|
|
||||||
" Restituisce una versione di goo.gl di <url>.\n"
|
|
||||||
" "
|
|
||||||
|
|
||||||
#: plugin.py:282
|
|
||||||
#, fuzzy
|
|
||||||
msgid ""
|
|
||||||
"<url>\n"
|
|
||||||
"\n"
|
|
||||||
" Returns an ur1 version of <url>.\n"
|
|
||||||
" "
|
|
||||||
msgstr ""
|
|
||||||
"<url>\n"
|
|
||||||
"\n"
|
|
||||||
" Restituisce una versione di xrl.us di <url>.\n"
|
|
||||||
" "
|
|
||||||
|
|
||||||
#: plugin.py:309
|
|
||||||
msgid ""
|
|
||||||
"<url>\n"
|
|
||||||
"\n"
|
|
||||||
" Returns an x0.no version of <url>.\n"
|
|
||||||
" "
|
|
||||||
msgstr ""
|
|
||||||
"<url>\n"
|
|
||||||
"\n"
|
|
||||||
" Restituisce una versione di x0.no di <url>.\n"
|
|
||||||
" "
|
|
||||||
|
|
||||||
#: plugin.py:336
|
|
||||||
#, fuzzy
|
|
||||||
msgid ""
|
|
||||||
"<url>\n"
|
|
||||||
"\n"
|
|
||||||
" Returns an expanded version of <url>.\n"
|
|
||||||
" "
|
|
||||||
msgstr ""
|
|
||||||
"<url>\n"
|
|
||||||
"\n"
|
|
||||||
" Restituisce una versione di x0.no di <url>.\n"
|
|
||||||
" "
|
|
||||||
|
|
||||||
#~ msgid ""
|
|
||||||
#~ "<url>\n"
|
|
||||||
#~ "\n"
|
|
||||||
#~ " Returns an xrl.us version of <url>.\n"
|
|
||||||
#~ " "
|
|
||||||
#~ msgstr ""
|
|
||||||
#~ "<url>\n"
|
|
||||||
#~ "\n"
|
|
||||||
#~ " Restituisce una versione di xrl.us di <url>.\n"
|
|
||||||
#~ " "
|
|
|
@ -1,144 +0,0 @@
|
||||||
# SOME DESCRIPTIVE TITLE.
|
|
||||||
# Copyright (C) YEAR ORGANIZATION
|
|
||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
|
||||||
"POT-Creation-Date: 2015-01-24 19:31+CET\n"
|
|
||||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
|
||||||
"MIME-Version: 1.0\n"
|
|
||||||
"Content-Type: text/plain; charset=CHARSET\n"
|
|
||||||
"Content-Transfer-Encoding: ENCODING\n"
|
|
||||||
"Generated-By: pygettext.py 1.5\n"
|
|
||||||
|
|
||||||
|
|
||||||
#: config.py:39
|
|
||||||
msgid ""
|
|
||||||
"This plugin offers a snarfer that will go retrieve a shorter\n"
|
|
||||||
" version of long URLs that are sent to the channel. Would you\n"
|
|
||||||
" like this snarfer to be enabled?"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: config.py:45 config.py:49
|
|
||||||
#, docstring
|
|
||||||
msgid "Valid values include 'ln', 'tiny', 'goo', 'ur1', and 'x0'."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: config.py:70
|
|
||||||
msgid ""
|
|
||||||
"Determines whether the\n"
|
|
||||||
" shrink snarfer is enabled. This snarfer will watch for URLs in the\n"
|
|
||||||
" channel, and if they're sufficiently long (as determined by\n"
|
|
||||||
" supybot.plugins.ShrinkUrl.minimumLength) it will post a\n"
|
|
||||||
" smaller URL from either ln-s.net or tinyurl.com, as denoted in\n"
|
|
||||||
" supybot.plugins.ShrinkUrl.default."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: config.py:77
|
|
||||||
msgid ""
|
|
||||||
"Determines whether the snarfer will show the\n"
|
|
||||||
" domain of the URL being snarfed along with the shrunken URL."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: config.py:80
|
|
||||||
msgid ""
|
|
||||||
"The minimum length a URL must be before\n"
|
|
||||||
" the bot will shrink it."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: config.py:83
|
|
||||||
msgid ""
|
|
||||||
"Determines what URLs are to be snarfed; URLs\n"
|
|
||||||
" matching the regexp given will not be snarfed. Give the empty string if\n"
|
|
||||||
" you have no URLs that you'd like to exclude from being snarfed."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: config.py:87
|
|
||||||
msgid ""
|
|
||||||
"Determines whether the bot will shrink the\n"
|
|
||||||
" URLs of outgoing messages if those URLs are longer than\n"
|
|
||||||
" supybot.plugins.ShrinkUrl.minimumLength."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: config.py:91
|
|
||||||
msgid ""
|
|
||||||
"Determines what website the bot will use when\n"
|
|
||||||
" shrinking a URL."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: config.py:94
|
|
||||||
msgid ""
|
|
||||||
"Determines whether this plugin will bold\n"
|
|
||||||
" certain portions of its replies."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: config.py:97
|
|
||||||
msgid ""
|
|
||||||
"If set to a non-empty value, specifies the list of\n"
|
|
||||||
" services to rotate through for the shrinkSnarfer and outFilter."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: plugin.py:90
|
|
||||||
#, docstring
|
|
||||||
msgid ""
|
|
||||||
"This plugin features commands to shorten URLs through different services,\n"
|
|
||||||
" like tinyurl."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: plugin.py:192
|
|
||||||
#, docstring
|
|
||||||
msgid ""
|
|
||||||
"<url>\n"
|
|
||||||
"\n"
|
|
||||||
" Returns an ln-s.net version of <url>.\n"
|
|
||||||
" "
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: plugin.py:219
|
|
||||||
#, docstring
|
|
||||||
msgid ""
|
|
||||||
"<url>\n"
|
|
||||||
"\n"
|
|
||||||
" Returns a TinyURL.com version of <url>\n"
|
|
||||||
" "
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: plugin.py:252
|
|
||||||
#, docstring
|
|
||||||
msgid ""
|
|
||||||
"<url>\n"
|
|
||||||
"\n"
|
|
||||||
" Returns an goo.gl version of <url>.\n"
|
|
||||||
" "
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: plugin.py:282
|
|
||||||
#, docstring
|
|
||||||
msgid ""
|
|
||||||
"<url>\n"
|
|
||||||
"\n"
|
|
||||||
" Returns an ur1 version of <url>.\n"
|
|
||||||
" "
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: plugin.py:309
|
|
||||||
#, docstring
|
|
||||||
msgid ""
|
|
||||||
"<url>\n"
|
|
||||||
"\n"
|
|
||||||
" Returns an x0.no version of <url>.\n"
|
|
||||||
" "
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: plugin.py:336
|
|
||||||
#, docstring
|
|
||||||
msgid ""
|
|
||||||
"<url>\n"
|
|
||||||
"\n"
|
|
||||||
" Returns an expanded version of <url>.\n"
|
|
||||||
" "
|
|
||||||
msgstr ""
|
|
||||||
|
|
|
@ -1,275 +0,0 @@
|
||||||
###
|
|
||||||
# Copyright (c) 2002-2004, Jeremiah Fincher
|
|
||||||
# Copyright (c) 2009-2010, James McCoy
|
|
||||||
# All rights reserved.
|
|
||||||
#
|
|
||||||
# Redistribution and use in source and binary forms, with or without
|
|
||||||
# modification, are permitted provided that the following conditions are met:
|
|
||||||
#
|
|
||||||
# * Redistributions of source code must retain the above copyright notice,
|
|
||||||
# this list of conditions, and the following disclaimer.
|
|
||||||
# * Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
# this list of conditions, and the following disclaimer in the
|
|
||||||
# documentation and/or other materials provided with the distribution.
|
|
||||||
# * Neither the name of the author of this software nor the name of
|
|
||||||
# contributors to this software may be used to endorse or promote products
|
|
||||||
# derived from this software without specific prior written consent.
|
|
||||||
#
|
|
||||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
||||||
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
||||||
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
|
||||||
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
||||||
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
||||||
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
||||||
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
||||||
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
||||||
# POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
###
|
|
||||||
|
|
||||||
import re
|
|
||||||
import sys
|
|
||||||
import time
|
|
||||||
import json
|
|
||||||
|
|
||||||
import supybot.log as log
|
|
||||||
import supybot.conf as conf
|
|
||||||
import supybot.utils as utils
|
|
||||||
from supybot.commands import *
|
|
||||||
import supybot.ircmsgs as ircmsgs
|
|
||||||
import supybot.plugins as plugins
|
|
||||||
import supybot.ircutils as ircutils
|
|
||||||
import supybot.callbacks as callbacks
|
|
||||||
from supybot.i18n import PluginInternationalization, internationalizeDocstring
|
|
||||||
_ = PluginInternationalization('ShrinkUrl')
|
|
||||||
|
|
||||||
class CdbShrunkenUrlDB(object):
|
|
||||||
def __init__(self, filename):
|
|
||||||
self.dbs = {}
|
|
||||||
cdb = conf.supybot.databases.types.cdb
|
|
||||||
def register_service(service):
|
|
||||||
dbname = filename.replace('.db', service.capitalize() + '.db')
|
|
||||||
self.dbs[service] = cdb.connect(dbname)
|
|
||||||
for service in conf.supybot.plugins.ShrinkUrl.default.validStrings:
|
|
||||||
register_service(service)
|
|
||||||
register_service('Expand')
|
|
||||||
|
|
||||||
def get(self, service, url):
|
|
||||||
return self.dbs[service][url]
|
|
||||||
|
|
||||||
def set(self, service, url, shrunkurl):
|
|
||||||
self.dbs[service][url] = shrunkurl
|
|
||||||
|
|
||||||
def close(self):
|
|
||||||
for service in self.dbs:
|
|
||||||
self.dbs[service].close()
|
|
||||||
|
|
||||||
def flush(self):
|
|
||||||
for service in self.dbs:
|
|
||||||
self.dbs[service].flush()
|
|
||||||
|
|
||||||
ShrunkenUrlDB = plugins.DB('ShrinkUrl', {'cdb': CdbShrunkenUrlDB})
|
|
||||||
|
|
||||||
class ShrinkError(Exception):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def retry(f):
|
|
||||||
def newf(*args, **kwargs):
|
|
||||||
for x in range(0, 3):
|
|
||||||
try:
|
|
||||||
return f(*args, **kwargs)
|
|
||||||
except Exception:
|
|
||||||
log.exception('Shrinking URL failed. Trying again.')
|
|
||||||
time.sleep(1)
|
|
||||||
return f(*args, **kwargs)
|
|
||||||
return newf
|
|
||||||
|
|
||||||
class ShrinkUrl(callbacks.PluginRegexp):
|
|
||||||
"""This plugin features commands to shorten URLs through different services,
|
|
||||||
like tinyurl."""
|
|
||||||
regexps = ['shrinkSnarfer']
|
|
||||||
def __init__(self, irc):
|
|
||||||
self.__parent = super(ShrinkUrl, self)
|
|
||||||
self.__parent.__init__(irc)
|
|
||||||
self.db = ShrunkenUrlDB()
|
|
||||||
|
|
||||||
def die(self):
|
|
||||||
self.db.close()
|
|
||||||
|
|
||||||
def callCommand(self, command, irc, msg, *args, **kwargs):
|
|
||||||
try:
|
|
||||||
self.__parent.callCommand(command, irc, msg, *args, **kwargs)
|
|
||||||
except utils.web.Error as e:
|
|
||||||
irc.error(str(e))
|
|
||||||
|
|
||||||
def _outFilterThread(self, irc, msg):
|
|
||||||
(channel, text) = msg.args
|
|
||||||
network = irc.network
|
|
||||||
for m in utils.web.httpUrlRe.finditer(text):
|
|
||||||
url = m.group(1)
|
|
||||||
if len(url) > self.registryValue('minimumLength', channel, network):
|
|
||||||
try:
|
|
||||||
cmd = self.registryValue('serviceRotation',
|
|
||||||
channel, network, value=False)
|
|
||||||
cmd = cmd.getService().capitalize()
|
|
||||||
except ValueError:
|
|
||||||
cmd = self.registryValue('default', channel, network) \
|
|
||||||
.capitalize()
|
|
||||||
try:
|
|
||||||
shortUrl = getattr(self, '_get%sUrl' % cmd)(url)
|
|
||||||
text = text.replace(url, shortUrl)
|
|
||||||
except (utils.web.Error, AttributeError, ShrinkError):
|
|
||||||
pass
|
|
||||||
newMsg = ircmsgs.privmsg(channel, text, msg=msg)
|
|
||||||
newMsg.tag('shrunken')
|
|
||||||
irc.queueMsg(newMsg)
|
|
||||||
|
|
||||||
def outFilter(self, irc, msg):
|
|
||||||
if msg.command != 'PRIVMSG':
|
|
||||||
return msg
|
|
||||||
if msg.channel:
|
|
||||||
if not msg.shrunken:
|
|
||||||
if self.registryValue('outFilter', msg.channel, irc.network):
|
|
||||||
if utils.web.httpUrlRe.search(msg.args[1]):
|
|
||||||
self._outFilterThread(irc, msg)
|
|
||||||
return None
|
|
||||||
return msg
|
|
||||||
|
|
||||||
def shrinkSnarfer(self, irc, msg, match):
|
|
||||||
channel = msg.channel
|
|
||||||
network = irc.network
|
|
||||||
if not channel:
|
|
||||||
return
|
|
||||||
if self.registryValue('shrinkSnarfer', channel, network):
|
|
||||||
url = match.group(0)
|
|
||||||
r = self.registryValue('nonSnarfingRegexp', channel, network)
|
|
||||||
if r and r.search(url) is not None:
|
|
||||||
self.log.debug('Matched nonSnarfingRegexp: %u', url)
|
|
||||||
return
|
|
||||||
minlen = self.registryValue('minimumLength', channel, network)
|
|
||||||
try:
|
|
||||||
cmd = self.registryValue('serviceRotation',
|
|
||||||
channel, network, value=False)
|
|
||||||
cmd = cmd.getService().capitalize()
|
|
||||||
except ValueError:
|
|
||||||
cmd = self.registryValue('default', channel, network) \
|
|
||||||
.capitalize()
|
|
||||||
if len(url) >= minlen:
|
|
||||||
try:
|
|
||||||
shorturl = getattr(self, '_get%sUrl' % cmd)(url)
|
|
||||||
except (utils.web.Error, AttributeError, ShrinkError):
|
|
||||||
self.log.info('Couldn\'t get shorturl for %u', url)
|
|
||||||
return
|
|
||||||
if self.registryValue('shrinkSnarfer.showDomain',
|
|
||||||
channel, network):
|
|
||||||
domain = ' (at %s)' % utils.web.getDomain(url)
|
|
||||||
else:
|
|
||||||
domain = ''
|
|
||||||
if self.registryValue('bold'):
|
|
||||||
s = format('%u%s', ircutils.bold(shorturl), domain)
|
|
||||||
else:
|
|
||||||
s = format('%u%s', shorturl, domain)
|
|
||||||
m = irc.reply(s, prefixNick=False)
|
|
||||||
if m is not None:
|
|
||||||
m.tag('shrunken')
|
|
||||||
if self.registryValue("fetchSpiffyTitle", channel):
|
|
||||||
spiffy = irc.getCallback("SpiffyTitles")
|
|
||||||
if spiffy:
|
|
||||||
try:
|
|
||||||
result = spiffy.get_title_by_url(url, channel, msg.nick)
|
|
||||||
if result:
|
|
||||||
irc.reply(result, prefixNick=False)
|
|
||||||
except:
|
|
||||||
log.exception("ShrinkUrl/SpiffyTitles: failed to get title for url %s", url)
|
|
||||||
shrinkSnarfer = urlSnarfer(shrinkSnarfer)
|
|
||||||
shrinkSnarfer.__doc__ = utils.web._httpUrlRe
|
|
||||||
|
|
||||||
@retry
|
|
||||||
def _getTinyUrl(self, url):
|
|
||||||
try:
|
|
||||||
return self.db.get('tiny', url)
|
|
||||||
except KeyError:
|
|
||||||
text = utils.web.getUrl('http://tinyurl.com/api-create.php?url=' + url)
|
|
||||||
text = text.decode()
|
|
||||||
if text.startswith('Error'):
|
|
||||||
raise ShrinkError(text[5:])
|
|
||||||
self.db.set('tiny', url, text)
|
|
||||||
return text
|
|
||||||
|
|
||||||
@internationalizeDocstring
|
|
||||||
def tiny(self, irc, msg, args, url):
|
|
||||||
"""<url>
|
|
||||||
|
|
||||||
Returns a TinyURL.com version of <url>
|
|
||||||
"""
|
|
||||||
try:
|
|
||||||
tinyurl = self._getTinyUrl(url)
|
|
||||||
m = irc.reply(tinyurl)
|
|
||||||
if m is not None:
|
|
||||||
m.tag('shrunken')
|
|
||||||
except ShrinkError as e:
|
|
||||||
irc.errorPossibleBug(str(e))
|
|
||||||
tiny = thread(wrap(tiny, ['httpUrl']))
|
|
||||||
|
|
||||||
_ur1Api = 'http://ur1.ca/'
|
|
||||||
_ur1Regexp = re.compile(r'<a href="(?P<url>[^"]+)">')
|
|
||||||
@retry
|
|
||||||
def _getUr1Url(self, url):
|
|
||||||
try:
|
|
||||||
return self.db.get('ur1ca', utils.web.urlquote(url))
|
|
||||||
except KeyError:
|
|
||||||
parameters = utils.web.urlencode({'longurl': url})
|
|
||||||
response = utils.web.getUrl(self._ur1Api, data=parameters)
|
|
||||||
ur1ca = self._ur1Regexp.search(response.decode()).group('url')
|
|
||||||
if ur1ca:
|
|
||||||
self.db.set('ur1', url, ur1ca)
|
|
||||||
return ur1ca
|
|
||||||
else:
|
|
||||||
raise ShrinkError(response)
|
|
||||||
|
|
||||||
def ur1(self, irc, msg, args, url):
|
|
||||||
"""<url>
|
|
||||||
|
|
||||||
Returns an ur1 version of <url>.
|
|
||||||
"""
|
|
||||||
try:
|
|
||||||
ur1url = self._getUr1Url(url)
|
|
||||||
m = irc.reply(ur1url)
|
|
||||||
if m is not None:
|
|
||||||
m.tag('shrunken')
|
|
||||||
except ShrinkError as e:
|
|
||||||
irc.error(str(e))
|
|
||||||
ur1 = thread(wrap(ur1, ['httpUrl']))
|
|
||||||
|
|
||||||
_x0Api = 'https://x0.no/api/?%s'
|
|
||||||
@retry
|
|
||||||
def _getX0Url(self, url):
|
|
||||||
try:
|
|
||||||
return self.db.get('x0', url)
|
|
||||||
except KeyError:
|
|
||||||
text = utils.web.getUrl(self._x0Api % url).decode()
|
|
||||||
if text.startswith('ERROR:'):
|
|
||||||
raise ShrinkError(text[6:])
|
|
||||||
self.db.set('x0', url, text)
|
|
||||||
return text
|
|
||||||
|
|
||||||
@internationalizeDocstring
|
|
||||||
def x0(self, irc, msg, args, url):
|
|
||||||
"""<url>
|
|
||||||
|
|
||||||
Returns an x0.no version of <url>.
|
|
||||||
"""
|
|
||||||
try:
|
|
||||||
x0url = self._getX0Url(url)
|
|
||||||
m = irc.reply(x0url)
|
|
||||||
if m is not None:
|
|
||||||
m.tag('shrunken')
|
|
||||||
except ShrinkError as e:
|
|
||||||
irc.error(str(e))
|
|
||||||
x0 = thread(wrap(x0, ['httpUrl']))
|
|
||||||
|
|
||||||
Class = ShrinkUrl
|
|
||||||
|
|
||||||
# vim:set shiftwidth=4 softtabstop=4 expandtab textwidth=79:
|
|
||||||
|
|
|
@ -1,116 +0,0 @@
|
||||||
###
|
|
||||||
# Copyright (c) 2002-2004, Jeremiah Fincher
|
|
||||||
# Copyright (c) 2009-2010, James McCoy
|
|
||||||
# All rights reserved.
|
|
||||||
#
|
|
||||||
# Redistribution and use in source and binary forms, with or without
|
|
||||||
# modification, are permitted provided that the following conditions are met:
|
|
||||||
#
|
|
||||||
# * Redistributions of source code must retain the above copyright notice,
|
|
||||||
# this list of conditions, and the following disclaimer.
|
|
||||||
# * Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
# this list of conditions, and the following disclaimer in the
|
|
||||||
# documentation and/or other materials provided with the distribution.
|
|
||||||
# * Neither the name of the author of this software nor the name of
|
|
||||||
# contributors to this software may be used to endorse or promote products
|
|
||||||
# derived from this software without specific prior written consent.
|
|
||||||
#
|
|
||||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
||||||
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
||||||
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
|
||||||
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
||||||
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
||||||
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
||||||
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
||||||
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
||||||
# POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
###
|
|
||||||
|
|
||||||
from supybot.test import *
|
|
||||||
|
|
||||||
class ShrinkUrlTestCase(ChannelPluginTestCase):
|
|
||||||
plugins = ('ShrinkUrl',)
|
|
||||||
config = {'supybot.snarfThrottle': 0}
|
|
||||||
|
|
||||||
sfUrl ='http://sourceforge.net/p/supybot/bugs/?source=navbar'
|
|
||||||
udUrl = 'http://www.urbandictionary.com/define.php?' \
|
|
||||||
'term=all+your+base+are+belong+to+us'
|
|
||||||
tests = {'tiny': [(sfUrl, r'http://tinyurl.com/b7wyvfz'),
|
|
||||||
(udUrl, r'http://tinyurl.com/u479')],
|
|
||||||
'ur1': [(sfUrl, r'http://ur1.ca/ceqh8'),
|
|
||||||
(udUrl, r'http://ur1.ca/9xl9k')],
|
|
||||||
'x0': [(sfUrl, r'https://x0.no/a53s'),
|
|
||||||
(udUrl, r'https://x0.no/0l2k')]
|
|
||||||
}
|
|
||||||
if network:
|
|
||||||
def testShrink(self):
|
|
||||||
for (service, testdata) in self.tests.items():
|
|
||||||
for (url, shrunkurl) in testdata:
|
|
||||||
self.assertRegexp('shrinkurl %s %s' % (service, url),
|
|
||||||
shrunkurl)
|
|
||||||
|
|
||||||
def testShrinkCycle(self):
|
|
||||||
cycle = conf.supybot.plugins.ShrinkUrl.serviceRotation
|
|
||||||
snarfer = conf.supybot.plugins.ShrinkUrl.shrinkSnarfer
|
|
||||||
origcycle = cycle()
|
|
||||||
origsnarfer = snarfer()
|
|
||||||
try:
|
|
||||||
self.assertNotError(
|
|
||||||
'config plugins.ShrinkUrl.serviceRotation tiny x0')
|
|
||||||
self.assertError(
|
|
||||||
'config plugins.ShrinkUrl.serviceRotation tiny x1')
|
|
||||||
snarfer.setValue(True)
|
|
||||||
self.assertSnarfRegexp(self.udUrl, r'.*%s.* \(at' %
|
|
||||||
self.tests['tiny'][1][1])
|
|
||||||
self.assertSnarfRegexp(self.udUrl, r'.*%s.* \(at' %
|
|
||||||
self.tests['x0'][1][1])
|
|
||||||
finally:
|
|
||||||
cycle.setValue(origcycle)
|
|
||||||
snarfer.setValue(origsnarfer)
|
|
||||||
|
|
||||||
def _snarf(self, service):
|
|
||||||
shrink = conf.supybot.plugins.ShrinkUrl
|
|
||||||
origService = shrink.default()
|
|
||||||
origSnarf = shrink.shrinkSnarfer()
|
|
||||||
shrink.default.setValue(service)
|
|
||||||
shrink.shrinkSnarfer.setValue(True)
|
|
||||||
try:
|
|
||||||
for (url, shrunkurl) in self.tests[service]:
|
|
||||||
teststr = r'.*%s.* \(at' % shrunkurl
|
|
||||||
self.assertSnarfRegexp(url, teststr)
|
|
||||||
finally:
|
|
||||||
shrink.default.setValue(origService)
|
|
||||||
shrink.shrinkSnarfer.setValue(origSnarf)
|
|
||||||
|
|
||||||
def testTinysnarf(self):
|
|
||||||
self._snarf('tiny')
|
|
||||||
|
|
||||||
def testUr1snarf(self):
|
|
||||||
self._snarf('ur1')
|
|
||||||
|
|
||||||
def testX0snarf(self):
|
|
||||||
self._snarf('x0')
|
|
||||||
|
|
||||||
def testNonSnarfing(self):
|
|
||||||
shrink = conf.supybot.plugins.ShrinkUrl
|
|
||||||
origService = shrink.default()
|
|
||||||
origSnarf = shrink.shrinkSnarfer()
|
|
||||||
origLen = shrink.minimumLength()
|
|
||||||
origRegexp = shrink.nonSnarfingRegexp()
|
|
||||||
shrink.default.setValue('tiny')
|
|
||||||
shrink.shrinkSnarfer.setValue(True)
|
|
||||||
shrink.minimumLength.setValue(10)
|
|
||||||
shrink.nonSnarfingRegexp.set('m/sf/')
|
|
||||||
try:
|
|
||||||
self.assertSnarfNoResponse('http://sf.net/', 5)
|
|
||||||
self.assertSnarfRegexp('http://sourceforge.net/',
|
|
||||||
r'http://tinyurl.com/7vm7.*\(at ')
|
|
||||||
finally:
|
|
||||||
shrink.default.setValue(origService)
|
|
||||||
shrink.shrinkSnarfer.setValue(origSnarf)
|
|
||||||
shrink.minimumLength.setValue(origLen)
|
|
||||||
shrink.nonSnarfingRegexp.setValue(origRegexp)
|
|
||||||
|
|
||||||
# vim:set shiftwidth=4 softtabstop=4 expandtab textwidth=79:
|
|
|
@ -1602,8 +1602,6 @@ class SpiffyTitles(callbacks.Plugin):
|
||||||
|
|
||||||
self.get_source_by_url(url, retries + 1)
|
self.get_source_by_url(url, retries + 1)
|
||||||
except requests.exceptions.MissingSchema as e:
|
except requests.exceptions.MissingSchema as e:
|
||||||
if dynamic.irc.nick.lower() == dynamic.msg.nick.lower():
|
|
||||||
return
|
|
||||||
url_wschema = "http://%s" % (url)
|
url_wschema = "http://%s" % (url)
|
||||||
log.error("SpiffyTitles missing schema. Retrying with %s" % (url_wschema))
|
log.error("SpiffyTitles missing schema. Retrying with %s" % (url_wschema))
|
||||||
info = urlparse(url_wschema)
|
info = urlparse(url_wschema)
|
||||||
|
|
Loading…
Reference in New Issue