* 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).
This fixes /names parsing when ! is a prefix character and userhost-in-names is enabled: previously, strings such as "!@user!ident@some.host" were incorrectly split into "" for nick and "@user!ident@some.host" for ident@host.
This fixes confusing "That configuration group exists, but seems to have no help." errors on the URL
options for feeds, when these options are actually relevant and settable.
* add plugin Hashes, containing hash and encryption related commands
* Hashes: make the default plugin Hashes when the commands are used by themselves
* Hashes: add supybot.conf because of registerDefaultPlugin
* Hashes: import registry to help with registerDefaultPlugin
* Hashes: add in nicks for test
* actually use hashlib instead of crypt, also s/'String'/'Hashes'
* Hashes/test: add group in for testing
* Hashes: add in changes per @GLolol
* Hashes: remove xor
* Hashes: make plugins = ('Hashes',) instead of ('Hashes') because python is weird
* Hashes: fix sha512 calling sha256, use utils.str.format on 'algorithms'
* Hashes: just use the variable instead of substitution per @GLolol
* Hashes: follow through with not using substitution
* Hashes: disable the 'algorithms' and 'mkhash' commands if the underlying 'hashlib.algorithms_available' isn't available
* Hashes: don't use registerDefaultPlugin its for core plugins
* Hashes: also somehow I didn't change the copyright
* Hashes/test: fix copyright in file
* src/ircmsgs: modes doesn't just quiet ('Returns a MODE to /quiet/ each of nicks on channel')
* plus also fix some possible english issues
* src/ircmsgs: fix up docs per @GLolol
* src/ircmsgs: fix up wording per @ProgVal s/pairs/2-tuples/
Previously, setting supybot.servers.http.hosts6 to multiple IP addresses always
failed because utils.net.isIPV6() gets passed a string with a space in it.
This code worked however for multiple IPv4 addresses because inet_aton(), which
is used internally by isIPV4(), allows and ignores trailing data after the
first IP address it finds.
Thanks to @MrBenC for reporting.
* Time: add 'ddate', fix contributors, add Time.local as a package_dir in setup.py
* Time: add in license information for ddate.py
* Time: change 'ddate' command to where it will error out gracefully if 'ddate.base' isn't available
* Time: add tests, remove Time.local from package_dir
As the command already calls reply() or noReply(), calling noReply()
there had disastrous effects:
* if reply() was called, noReply() erases the argument
* if noReply() was called, calling noReply() a second time erases **the next argument** (because the current argument was already erased).
This was 'caused' by the change of behavior of noReply() in 543edccd41.
* Config: Don't use a prefix in _setValue
-- deviated from normal '' line enclosure to allow use of ' in lines without escaping
* fix up edits per @Mikaela