* supybot-plugin-create: compactify import statements in the template
* supybot-plugin-create: prefer importlib over imp on Python >= 3.4
The imp module is deprecated as of Python 3.4[1], with importlib being the successor. However, importlib is only available in Python 2.7+ and 3.1+, so we should still use a fallback.
[1]: https://docs.python.org/3.6/library/imp.html
* test: add test cases for supybot-plugin-create
* -plugin-create: fix errors when only a subset of args are given
* -plugin-create: rename --real-name to --author/-a
These days, working under a pseudonym or alias is not unheard of, so putting emphasis on real names feels somewhat out of place.
* -plugin-create: add -d as an alias to --desc for consistency
To call a command named 'X Y Z' in plugin 'P', we used to require lots of capabilities,
like 'P.X', 'P.Y', 'P.Z', 'P.X.Y', 'X.Y', 'P.Y', ...
Now, we only require 'P', 'P.X', 'P.X.Y', 'P.X.Y.Z', and 'Z'.
It makes it a lot easier to work with command names with a space when
supybot.capabilities.default is False.
- Adjust _chanRe to only match channels, as atheme also puts the target nick in bold
- Look for "unbanned <botnick>" messages in ChanServ notices (after stripping formatting)
This likely fixes GH-166. atheme has been using this format since at least 2005[1],
so it's possible that Supybot's rejoin-on-ban had never worked with it.
[1]: 4017c0da85 (diff-ba2bdc02ba7b29fd7e4931cafe63baa0R218)
On Atheme, Anope, and oftc-ircservices, /cs unban, invite, op, and voice
implicitly assume the caller if no nick is given. However, certain combinations
such as /cs invite *with* a nick are not supported on atheme per
https://github.com/atheme/atheme/issues/568, and cause rejoin-on-kick to +i
channels to fail.
This fixes one part of GH-1118.
* Streamlined all date calculation based on git timestamps.
* Removed incorrect utc_date calculation.
* Minimised the code differences for Python versions (down to one line).
* Changed the git show command to leverage the output displaying the
number of seconds since the epoch.
* Thus making the final UTC calculation simply a function of
specifying that in a time.gmtime call instead of attempting offset
based calculations (which the original code got wrong).