7486ae2 | Valentin Lorentz | 01 November 2022, 17:32:07 UTC | Fix crash on /pluginname path | 01 November 2022, 17:32:07 UTC |
e1b2d8f | Valentin Lorentz | 01 November 2022, 15:48:53 UTC | Set SERVER_NAME and SERVER_PORT | 01 November 2022, 15:48:53 UTC |
ffb2e84 | Valentin Lorentz | 31 October 2022, 21:13:34 UTC | httpserver: Add support for WSGI apps For example, with Flask: ``` from supybot import utils, plugins, ircutils, callbacks, httpserver from supybot.commands import * from supybot.i18n import PluginInternationalization _ = PluginInternationalization('TestWsgi') from flask import Flask, request, render_template app = Flask(__name__) @app.route("/") def hello_world(): return "<p>Hello, World!</p>" @app.route('/login/', methods=['POST', 'GET']) def login(): error = None if request.method == 'POST': if request.form['username'] == 'root' \ and request.form['password'] == 'admin': return 'Hello root' else: return 'Error: Invalid username/password' # the code below is executed if the request method # was GET or the credentials were invalid return ''' <form method="POST" action="."> <label for="username">Username: <input name="username" id="username" /> </label> <label for="password">Password: <input name="password" id="password" type="password" /> </label> <input type="Submit" /> </form> ''' class TestWsgi(callbacks.Plugin): """Test Flask""" def __init__(self, irc): self.__parent = super(TestWsgi, self) callbacks.Plugin.__init__(self, irc) httpserver.hook('testwsgi', app) def die(self): self.__parent.die() httpserver.unhook('testwsgi') Class = TestWsgi ``` | 31 October 2022, 21:13:56 UTC |
4da1291 | Valentin Lorentz | 30 October 2022, 19:43:43 UTC | URL: Lazily deserialize records from the end in @last Before this commit, the plugin first fetched a list of all (deserialized) records in a list, then reversed the list, and iterated on the reverse list. This proved to be slow, with most of the time being spent in `dbi.DB._newRecord` (which essentially deserializes one list of CSV). After this commit, the list is reversed first, then the plugin iterates on its generator, which calls `_newRecord` on records as they are requested. This means that when there are many URLs in the database, `@last` does not need to waste time deserializing most records, when the result is near the end (and if the result is the first record, then it does exactly as much work as before). | 30 October 2022, 19:46:35 UTC |
f4ac7f8 | Valentin Lorentz | 28 October 2022, 20:41:43 UTC | RSS: Don't crash on invalid variable name It's confusing not to have feedback on IRC when a variable name is typoed. | 28 October 2022, 20:41:43 UTC |
77805ff | Valentin Lorentz | 28 October 2022, 13:00:58 UTC | irclib: Abort authentication when server fails SCRAM challenge Will be tested by irctest: https://github.com/progval/irctest/pull/179 | 28 October 2022, 13:00:58 UTC |
e9a29e9 | Valentin Lorentz | 28 October 2022, 12:30:17 UTC | irclib: Fix crashes on ecdsa/scram signature failures | 28 October 2022, 12:57:57 UTC |
b0525bc | Valentin Lorentz | 28 October 2022, 12:19:09 UTC | Double default peekSize We bumped it to 8kB in 2015, but it is starting to be an issue again. | 28 October 2022, 12:22:44 UTC |
2cfc821 | Valentin Lorentz | 28 October 2022, 12:18:52 UTC | Web: Allow configuring higher peekSize on Youtube | 28 October 2022, 12:18:52 UTC |
009b900 | Valentin Lorentz | 24 October 2022, 21:43:50 UTC | Make TimeoutQueue.iter() actually expire items It is functionally fine not to, but causes objects to never be freed if iter() is the only method called on the queue (ie. no enqueue/dequeue, len(), ...) | 24 October 2022, 21:43:52 UTC |
2c5dc40 | Valentin Lorentz | 24 October 2022, 21:40:11 UTC | test: Revert generic 'The Limnoria Contributors' in copyright notices I forgot to include these in 63eb6672eac794a9c39dec87db3aa45147e06974 (This is fine because noone but me touched these files since the initial change in db7ef3f02517f9f2a3c56829a22b9fad3c36e374). | 24 October 2022, 21:41:26 UTC |
47253e0 | Valentin Lorentz | 24 October 2022, 21:21:11 UTC | Add test for structures.TimeoutQueue.__iter__ | 24 October 2022, 21:21:11 UTC |
d0a484c | Valentin Lorentz | 20 October 2022, 16:35:58 UTC | Sort remaining nondeterministc sets of values Closes GH-1516 | 20 October 2022, 16:35:58 UTC |
dc94f8d | Valentin Lorentz | 14 October 2022, 21:15:11 UTC | registry: Default to sorting sets of values Not sorting them causes the config file to change when the bot writes it, because order is nondeterministic. This is usually fine, but can be annoying when configs are deployed with Ansible. Closes GH-1516 | 14 October 2022, 21:15:11 UTC |
8c17505 | Valentin Lorentz | 13 October 2022, 19:46:50 UTC | User: Sort output of @capabilities It's more readable than a random order. | 13 October 2022, 19:46:50 UTC |
a6aa553 | Valentin Lorentz | 27 September 2022, 21:16:21 UTC | Ensure files written with AtomicFile are read in UTF8 With some locale configurations (not that uncommon on CentOS), open() may default to non-UTF8 encodings (eg. ANSI_X3.4-1968). This is usually not an issue, because we use open() both for writing and reading. However, AtomicFile implicitly enforces UTF8; which needs to be mirrored when reading. | 06 October 2022, 07:49:42 UTC |
b1cfb87 | James Lu | 06 October 2022, 01:40:03 UTC | String: allow multi-character inputs in "ord" and "unicodename" This allows them to support emoji ZWJ sequences, which render like one character but are actually multiple. | 06 October 2022, 06:31:22 UTC |
35bf599 | Valentin Lorentz | 20 September 2022, 05:51:46 UTC | utils/web: Add <br/> to the list of block elements It should always be replaced with a space. | 20 September 2022, 05:51:46 UTC |
169824a | Valentin Lorentz | 18 September 2022, 17:47:01 UTC | Math: make `@icalc` fail early when result is too large This avoids inconsistent errors between CPython 3.10.7 and older versions; and the result would not be readable anyway. Closes GH-1517. | 18 September 2022, 18:06:34 UTC |
acdae12 | Valentin Lorentz | 18 September 2022, 17:32:35 UTC | Bump CI version from 3.11.0-alpha.2 to 3.11.0-rc.2 | 18 September 2022, 18:06:34 UTC |
bc3a441 | Valentin Lorentz | 18 September 2022, 17:25:48 UTC | Poll: Make answers case-insensitive | 18 September 2022, 17:25:48 UTC |
200acdf | Valentin Lorentz | 07 September 2022, 10:31:19 UTC | registry: Normalize values before checking they are valid Otherwise, normalization is useless, and gives a surprising error message, such as: ``` <user> config plugins.rss.sortfeeditems oldestfirst <bot> Error: Valid values include 'asInFeed', 'oldestFirst', 'newestFirst', 'outdatedFirst', and 'updatedFirst', not 'oldestFirst'. ``` | 07 September 2022, 10:31:22 UTC |
86b3896 | Valentin Lorentz | 15 August 2022, 22:23:33 UTC | MessageParser: Ignore chathistory batches To be consistent with commands and PluginRegexp (snarfers) | 15 August 2022, 22:23:33 UTC |
fccb4f7 | Valentin Lorentz | 07 August 2022, 16:50:14 UTC | RSS: Log feed URL when feedparser.parse raises exceptions | 07 August 2022, 17:17:15 UTC |
4db32e2 | Valentin Lorentz | 06 August 2022, 13:09:10 UTC | Ctcp: Fix 'RuntimeError: dictionary changed size during iteration' | 06 August 2022, 13:09:10 UTC |
0780624 | Valentin Lorentz | 06 August 2022, 13:08:51 UTC | Time: Fix typo | 06 August 2022, 13:08:51 UTC |
b8dce0d | Valentin Lorentz | 02 August 2022, 11:16:21 UTC | Time: Skip new assertions on Python 3.6 so testSeconds passes | 02 August 2022, 11:16:21 UTC |
8f837a6 | Valentin Lorentz | 02 August 2022, 10:59:27 UTC | Time: Add support for omitting space in @seconds | 02 August 2022, 11:01:08 UTC |
cd0f9f2 | Valentin Lorentz | 31 July 2022, 07:04:27 UTC | Polls: Make nick matching case-insensitive This prevents the same nick from voting twice by changing the capitalization | 31 July 2022, 07:04:27 UTC |
28c52c2 | Valentin Lorentz | 30 July 2022, 19:25:47 UTC | Poll: Add @poll list command | 30 July 2022, 19:25:47 UTC |
2afa3c4 | Valentin Lorentz | 30 July 2022, 19:23:10 UTC | Fediverse: run black | 30 July 2022, 19:23:10 UTC |
ef08174 | Valentin Lorentz | 29 July 2022, 08:29:48 UTC | commands: Silence noisy logging of command evaluation | 29 July 2022, 08:29:48 UTC |
ee60431 | Valentin Lorentz | 29 July 2022, 08:03:39 UTC | Add debug logging when skipping SASL mechanisms It is useful to figure out what you forgot to configure | 29 July 2022, 08:03:39 UTC |
f549ec1 | Valentin Lorentz | 29 July 2022, 07:45:09 UTC | Add debug logging of SASL mechanisms | 29 July 2022, 07:45:09 UTC |
796f717 | Valentin Lorentz | 20 July 2022, 16:31:24 UTC | requirements.txt: Classify and provide a rationale for each dependency | 20 July 2022, 16:31:24 UTC |
7b9a944 | Valentin Lorentz | 20 July 2022, 16:25:27 UTC | Remove dependency on 'mock' It is a backport of unittest.mock for Python versions before 3.3, which we do not support anymore. | 20 July 2022, 16:25:27 UTC |
461c091 | Valentin Lorentz | 20 July 2022, 16:15:51 UTC | Fediverse: Hide channel actor on PeerTube | 20 July 2022, 16:15:51 UTC |
34f8842 | Valentin Lorentz | 20 July 2022, 16:09:41 UTC | Fediverse: Add support for descriptions with line breaks | 20 July 2022, 16:10:14 UTC |
2df2bc2 | Valentin Lorentz | 20 July 2022, 15:53:00 UTC | Fediverse: Add support for videos | 20 July 2022, 15:57:29 UTC |
d67fb2a | Valentin Lorentz | 20 July 2022, 15:52:40 UTC | Autocomplete, Fediverse, Geography, Poll: Run Black | 20 July 2022, 15:53:09 UTC |
5d8f59b | pratyushd | 13 July 2022, 19:02:28 UTC | add conditional to respond acc to kick being true or not (#1512) Co-authored-by: Pratyush Desai <pratyush.desai@liberta.casa> | 13 July 2022, 19:02:28 UTC |
964acac | Pratyush Desai | 13 July 2022, 06:20:44 UTC | for #1490 extend usage examples | 13 July 2022, 06:56:30 UTC |
65d8844 | James Lu | 09 July 2022, 21:24:13 UTC | supybot-plugin-doc: default to RST None of the current maintainers are sure what stx is?? | 09 July 2022, 21:24:13 UTC |
95f6b16 | James Lu | 09 July 2022, 21:15:57 UTC | Aka, Alias: replace obsolete LastFM example | 09 July 2022, 21:15:57 UTC |
988fe08 | James Lu | 09 July 2022, 21:15:33 UTC | .gitignore: add doc-* paths from supybot-plugin-doc | 09 July 2022, 21:15:33 UTC |
96b7f51 | Valentin Lorentz | 06 July 2022, 20:07:37 UTC | callbacks: Ignore chathistory batches in PluginRegexp This is consistent with what we already do with commands; and generally makes sense, as we don't want to re-send titles and others when cycling on UnrealIRCd (which includes a chathistory batch when joining when chmode +H is set, despite umode +B) | 06 July 2022, 20:07:37 UTC |
3ecb37d | Valentin Lorentz | 06 July 2022, 20:05:30 UTC | test_callbacks: Add PluginRegexpTestCase.testReply to check basic behavior | 06 July 2022, 20:05:30 UTC |
6a943b8 | Valentin Lorentz | 06 July 2022, 20:04:33 UTC | test_callbacks: Fix PluginRegexpTestCase to actually check regexp callbacks | 06 July 2022, 20:04:33 UTC |
d00113e | James Lu | 23 June 2022, 20:12:13 UTC | PluginDownloader: replace automatic 2to3 step with a simple warning The previous heuristic runs into false positives when imports are merged in __init__.py More broadly though, it's unlikely automatic 2to3 is particularly useful in 2022 - plugins that were written ~10 years ago are unlikely to work even if syntax errors are fixed. | 23 June 2022, 20:31:17 UTC |
8ccf2c7 | James Lu | 23 June 2022, 20:09:23 UTC | PluginDownloader: drop legacy Python 2-only repos Most of these haven't been updated in ~10 years and are unlikely to work out of the box today (obsolete web APIs, etc.) | 23 June 2022, 20:31:17 UTC |
b3443a5 | Valentin Lorentz | 22 June 2022, 18:31:53 UTC | setup: Fix install of subpackages when pip-installed from git repositories It seems setuptools needs to be explicitly told to include subpackages in this case. | 22 June 2022, 18:31:59 UTC |
d04e816 | SamStrongTalks | 17 June 2022, 14:44:12 UTC | Add ability to exclude channel from self censoring (#1508) | 17 June 2022, 14:44:12 UTC |
6379a9d | Valentin Lorentz | 17 June 2022, 07:11:35 UTC | supybot-reset-password: Update help string to match the man page | 17 June 2022, 07:11:35 UTC |
a65960b | Valentin Lorentz | 17 June 2022, 07:06:58 UTC | Add missing man page for supybot-reset-password. | 17 June 2022, 07:09:20 UTC |
fd04fcc | Valentin Lorentz | 16 June 2022, 22:29:38 UTC | i18n: Validate value of supybot.language | 16 June 2022, 22:29:38 UTC |
93370b6 | Valentin Lorentz | 16 June 2022, 21:43:34 UTC | utils: Rewrite i18n initialization The previous implementation was messy and needlessly complicated This simplifies the logic and removes hackiness by making utils/str.py handle internationalization logic itself, instead of bending over backwards to load logic from the parent package at import time. | 16 June 2022, 22:05:51 UTC |
4a620bf | Valentin Lorentz | 16 June 2022, 20:35:01 UTC | Socket: Use the right variable to initialize the reconnect delay | 16 June 2022, 20:35:08 UTC |
94d669e | Valentin Lorentz | 28 May 2022, 11:53:05 UTC | Make the minimum reconnect delay configurable | 28 May 2022, 11:53:05 UTC |
32198d4 | Valentin Lorentz | 27 April 2022, 20:15:43 UTC | i18n: Skip fuzzy strings The German translation currently has at least one fuzzy string with a missing %s; and several translations are completely wrong. | 27 April 2022, 20:15:43 UTC |
109f938 | Valentin Lorentz | 22 April 2022, 16:30:31 UTC | Implement +draft/channel-context | 22 April 2022, 16:30:31 UTC |
1d4a43e | Valentin Lorentz | 16 April 2022, 10:05:43 UTC | AutoMode: Fix crash on servers without ISUPPORT PREFIX | 16 April 2022, 10:05:43 UTC |
94c7c7d | Valentin Lorentz | 08 April 2022, 11:02:31 UTC | supybot-plugin-create: Remove fallback for missing supybot.i18n It is unlikely new plugins will be used on stock Supybot or Gribble. | 08 April 2022, 11:02:31 UTC |
9ec4eb9 | Valentin Lorentz | 08 April 2022, 10:44:42 UTC | irclib: Fix assertion failure on InspIRCd when Sigyn plugin is loaded | 08 April 2022, 10:44:42 UTC |
eb6fc93 | Valentin Lorentz | 04 April 2022, 21:29:47 UTC | Web: Fix matching for youtube | 04 April 2022, 21:29:47 UTC |
21ea999 | Valentin Lorentz | 04 April 2022, 20:07:06 UTC | Time: Add support for UTC offsets as tztime arguments. | 04 April 2022, 20:07:06 UTC |
4f3d6fc | Valentin Lorentz | 04 April 2022, 20:06:19 UTC | Geograpy: Fix formatting of negative non-integral offsets (and improve others) | 04 April 2022, 20:06:19 UTC |
088d0f5 | Valentin Lorentz | 17 March 2022, 21:29:10 UTC | irclib: Catch exception from outFilter, as with inFilter | 17 March 2022, 21:29:10 UTC |
862fca1 | Valentin Lorentz | 06 March 2022, 12:38:10 UTC | conf: Use imports instead of sys.modules to detect module availability `conf.supybot.databases()` may be called without any plugin supporting sqlite3 being loaded yet, which causes `sqlite3` to be missing from `sys.modules`; so it wouldn't be used by plugins loaded afterward. | 06 March 2022, 12:39:47 UTC |
d58d8d4 | Valentin Lorentz | 06 March 2022, 12:37:01 UTC | conf: Prioritize sqlite3 over sqlalchemy in supybot.databases It's usually a better choice for plugins that implement both | 06 March 2022, 12:39:41 UTC |
9e995d8 | Valentin Lorentz | 06 March 2022, 12:35:37 UTC | conf: Remove 'sqlite' module from supybot.databases It is wholy replaced by 'sqlite3', now | 06 March 2022, 12:39:19 UTC |
80b26c0 | PeGaSuS | 06 March 2022, 11:30:02 UTC | Fix typo in conf.py (#1501) Fixed typo that lead to a wrong variable name being pointed out | 06 March 2022, 11:30:02 UTC |
66d986e | Valentin Lorentz | 03 March 2022, 21:16:37 UTC | Web: Add overrides to support Youtube and Reddit; remove Twitter from tests. | 03 March 2022, 21:16:53 UTC |
76f7ece | Valentin Lorentz | 19 February 2022, 20:18:24 UTC | Fediverse: Update tests broken by previous commit | 19 February 2022, 20:18:24 UTC |
78bdc46 | Valentin Lorentz | 19 February 2022, 20:00:15 UTC | htmlToText: Don't replace inline element tags with spaces They are not meant to be displayed like this, so they look weird sometimes. For example, Mastodon splits long links between spans, so the Fediverse plugin always displayed them broken. | 19 February 2022, 20:00:51 UTC |
bc76f7e | Valentin Lorentz | 17 February 2022, 11:17:42 UTC | Fix utils.time.iana_timezone on python < 3.9 | 17 February 2022, 11:18:13 UTC |
4e60d88 | Valentin Lorentz | 16 February 2022, 20:27:26 UTC | Misc: Make @last handle --regexp in a single process for all messages Spawning one process for each message was a little silly, considering there can be thousands of messages. Plus, some instances do reach the timeout after running for a few weeks, so we really need to fix this. Ideally, `regexp_wrapper` should also be removed from other plugins (Todo, Notes, ...) as they have the same issues, but this will do for now. | 16 February 2022, 20:27:28 UTC |
4b892c2 | Valentin Lorentz | 05 February 2022, 23:14:47 UTC | all: Update .pot and .po files | 05 February 2022, 23:14:47 UTC |
f13d275 | Valentin Lorentz | 05 February 2022, 23:11:38 UTC | sandbox/update_pot.py: Run msgmerge as well | 05 February 2022, 23:12:42 UTC |
24f0e21 | Valentin Lorentz | 05 February 2022, 23:03:13 UTC | sandbox/update_pot.py: Also generate .pot file for the core | 05 February 2022, 23:11:20 UTC |
736430d | Valentin Lorentz | 05 February 2022, 22:51:04 UTC | Modernize sandbox/update_plugins_messagespot.py | 05 February 2022, 22:51:04 UTC |
5b7b2bd | Valentin Lorentz | 05 February 2022, 22:37:39 UTC | Fix chmods | 05 February 2022, 22:37:39 UTC |
dacaefd | Valentin Lorentz | 05 February 2022, 16:32:11 UTC | supybot-plugin-create: Create setup.py | 05 February 2022, 16:32:11 UTC |
498290f | Valentin Lorentz | 03 February 2022, 18:56:59 UTC | wizard: Fix mixup of sasl username and password | 03 February 2022, 18:56:59 UTC |
0ed743b | James Lu | 29 January 2022, 01:47:58 UTC | Format: allow empty substrings in 'replace' This allows for easy substring removal without having to use regex. | 29 January 2022, 01:50:31 UTC |
c7fa33b | Valentin Lorentz | 26 January 2022, 18:03:13 UTC | setup.py: Use the website's URL instead of the repo's | 26 January 2022, 18:03:47 UTC |
da549e4 | Valentin Lorentz | 16 January 2022, 19:45:41 UTC | Geography: Print current UTC offset next to timezones. | 16 January 2022, 19:45:41 UTC |
880efbb | Valentin Lorentz | 16 January 2022, 18:44:22 UTC | Merge branch 'geography' into testing | 16 January 2022, 18:44:22 UTC |
1643cb1 | Valentin Lorentz | 11 January 2022, 19:38:44 UTC | registry.Regexp: Better safeguard against misuses of _setValue() | 11 January 2022, 19:38:44 UTC |
28b28fe | Valentin Lorentz | 11 January 2022, 19:38:14 UTC | Config: Fix crash happening since the previous commit | 11 January 2022, 19:38:14 UTC |
dcca9f9 | Valentin Lorentz | 11 January 2022, 19:13:39 UTC | RSS: Make feed announces actually network-specific .getSpecific() always returned the channel-specific but non-network-specific var, unless the channel-specific and network-specific one was manually set. | 11 January 2022, 19:13:39 UTC |
40155ed | Valentin Lorentz | 09 January 2022, 13:10:15 UTC | Fix syntax DeprecationWarning. | 09 January 2022, 13:10:15 UTC |
74f8665 | Valentin Lorentz | 01 January 2022, 17:11:36 UTC | Remove fallbacks for old Python versions. | 01 January 2022, 17:11:36 UTC |
181e34b | Valentin Lorentz | 01 January 2022, 16:44:17 UTC | setup.py + CI: Remove support for Python 3.4 and 3.5 | 01 January 2022, 16:49:12 UTC |
7fade19 | Valentin Lorentz | 23 December 2021, 19:09:49 UTC | Google: Update suggestions in the deprecation warning 1. DDG is now built-in 2. GoogleCSE is actually limited to site-specific search | 23 December 2021, 19:09:49 UTC |
caa5aa3 | Valentin Lorentz | 19 December 2021, 20:11:26 UTC | Config: Replace inconsistent terminology | 19 December 2021, 20:11:26 UTC |
3f77c53 | Valentin Lorentz | 19 December 2021, 19:53:08 UTC | utils/structures: Fix typos, remove unused code | 19 December 2021, 19:53:11 UTC |
8053d74 | Valentin Lorentz | 18 December 2021, 18:38:49 UTC | setup.py: Fix typo | 18 December 2021, 18:38:49 UTC |
ac379eb | Valentin Lorentz | 18 December 2021, 17:37:46 UTC | supybot-wizard: Ask for SASL username and password | 18 December 2021, 17:37:46 UTC |
d1191d1 | Valentin Lorentz | 18 December 2021, 17:37:26 UTC | setup.py: Remove 3.4 and 4.5 from the classifiers | 18 December 2021, 17:37:26 UTC |
49c7c30 | Valentin Lorentz | 18 December 2021, 17:36:48 UTC | setup.py: Remove reference to supybot from the short description | 18 December 2021, 17:36:48 UTC |