pax_global_header 0000666 0000000 0000000 00000000064 13474520024 0014513 g ustar 00root root 0000000 0000000 52 comment=592735d4ea61f61212a9e5d1ae5f0a90c6f07983
sopel-6.6.9/ 0000775 0000000 0000000 00000000000 13474520024 0012657 5 ustar 00root root 0000000 0000000 sopel-6.6.9/.coveragerc 0000664 0000000 0000000 00000001177 13474520024 0015006 0 ustar 00root root 0000000 0000000 # Sample conf file from http://nedbatchelder.com/code/coverage/config.html
[run]
source = sopel
branch = True
[report]
# Regexes for lines to exclude from consideration
exclude_lines =
# Have to re-enable the standard pragma
pragma: no cover
# Don't complain about missing debug-only code:
#def __repr__
#if self\.debug
# Don't complain if tests don't hit defensive assertion code:
raise AssertionError
raise NotImplementedError
# Don't complain if non-runnable code isn't run:
if 0:
if False:
if __name__ == .__main__.:
show_missing = True
[html]
directory = coverage_html_report
sopel-6.6.9/.gitignore 0000664 0000000 0000000 00000000443 13474520024 0014650 0 ustar 00root root 0000000 0000000 build/
dist/
env/
MANIFEST
doc/build/*
logs/*
tests
sopel.egg-info/*
*.db
*.pyc
*.pyo
*.txt
*~
*.rpm
*.spec
.*.sw*
.pid-*
# IntelliJ idea
.idea
*.iml
# Eclipse/PyDev
.settings
.project
.pydevproject
# Test/Coverage
.cache
.pytest_cache
.coverage
coverage_html_report/
# macOS
*.DS_Store
sopel-6.6.9/.travis.yml 0000664 0000000 0000000 00000001540 13474520024 0014770 0 ustar 00root root 0000000 0000000 language: python
python:
- "2.7"
- "3.3"
- "3.4"
git:
submodules: false
branches:
only:
- master
- /^\d+\.\d+\.x$/ # allows building maintenance branches
- /^v?\d+\.\d+(\.\d+)?(-\S*)?$/ # allows building version tags
sudo: false # Enables running on faster infrastructure.
cache:
directories:
- $HOME/.cache/pip
addons:
apt:
packages:
- enchant
install:
- pip install -r requirements.txt -r dev-requirements.txt
script:
- ./checkstyle.sh
- coverage run -m py.test -v .
- coverage report
after_success:
coveralls
deploy:
provider: pypi
username: dgw
password:
secure: U9XLRA5fYRmII/pyJGDIT0BQ4p0zP8yZJtxUSUO9arFKozgYZu0ldvoLjKnzPMPQNCGs+q4f0hNuXgN+u/FgfRPF/Q3wtUj58uIC4JFnn7u2D2pv7RqzZkGi9Hr8+SS7dChlx9bVbhC1Y0md0XlrsT6rbNKKW457Jei05+vpjvg=
on:
tags: true
python: "3.4"
allow_failure: true
sopel-6.6.9/CONTRIBUTING.md 0000664 0000000 0000000 00000007055 13474520024 0015117 0 ustar 00root root 0000000 0000000 Submitting Issues
-----------------
When submitting issues to our
[issue tracker](https://github.com/sopel-irc/sopel/issues), it's important
that you do the following:
1. Describe your issue clearly and concisely.
2. Give Sopel the .version command, and include the output in your issue.
3. Note the OS you're running Sopel on, and how you installed Sopel (via your
package manager, pip, setup.py install, or running straight from source)
4. Include relevant output from the log files in ~/.sopel/logs.
Committing Code
---------------
We prefer code to be submitted through GitHub pull requests. We do require that
code submitted to the project be licensed under the Eiffel Forum License v2,
the text of which was distributed with the source code.
In order to make it easier for us to review and merge your code, it's important
to write good commits, and good commit messages. Below are some things you
should do when you want to submit code. These aren't hard and fast rules; we
may still consider code that doesn't meet all of them. But doing the stuff
below will make our lives easier, and by extension make us more likely to
include your changes.
* Commits should focus on one thing at a time. Do include whatever you need to
make your change work, but avoid putting unrelated changes in the same commit.
Preferably, one change in functionality should be in exactly one commit.
* pep8ify your code before you commit. We don't worry about line length much
(though it's good if you do keep lines short), but you should try to follow
the rest of the rules.
* Test your code before you commit. We don't have a formal testing plan in
place, but you should make sure your code works as promised before you commit.
* Make your commit messages clear and explicative. Our convention is to place
the name of the thing you're changing in at the beginning of the
message, followed by a colon: the module name for modules, docs for documentation files,
coretasks for coretasks.py, db for the database feature, and so on.
* Python files should always have `# coding=utf-8` as the first line (or the
second, if the first is `#!/usr/bin/env python`), and
`from __future__ import unicode_literals, absolute_import, print_function, division` as the first line after the module
docstring.
Issue Tags
----------
If you're looking to hack on some code, you should consider fixing one of the
issues that has been reported to the GitHub issue tracker. Here's a quick guide
to the tags we use:
* Easyfix - A great place for a new developer to start off, Easyfix
issues are ones which we think will be simple and quick
to address.
* Patches Welcome - Things we don't plan on doing, but which we might be
interested to see someone else submit code for
* Bug - An error or incorrect behavior
* Feature - A new thing the bot should be able to do
* Tweak - A minor change to something the bot already does, like
making something's output prettier, improving the
documentation on something, or addressing technical debt
* Tracking - An ongoing process that involves lots of changes in lots
of places. Often also a Tweak.
* Low Priority - Things we'll get around to doing eventually
* Medium Priority - Things that need to be done soon
* High Priority - Things that should've been done yesterday
* Tests - Issues regarding the testing unit in tests/
* Windows - Windows-specific bugs are labelled as such
sopel-6.6.9/COPYING 0000664 0000000 0000000 00000001776 13474520024 0013725 0 ustar 00root root 0000000 0000000
Eiffel Forum License, version 2
1. Permission is hereby granted to use, copy, modify and/or
distribute this package, provided that:
* copyright notices are retained unchanged,
* any distribution of this package, whether modified or not,
includes this license text.
2. Permission is hereby also granted to distribute binary programs
which depend on this package. If the binary program depends on a
modified version of this package, you are encouraged to publicly
release the modified version of this package.
***********************
THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT WARRANTY. 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 AUTHORS BE LIABLE TO ANY PARTY FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES ARISING IN ANY WAY OUT OF THE USE OF THIS PACKAGE.
***********************
sopel-6.6.9/CREDITS 0000664 0000000 0000000 00000001521 13474520024 0013676 0 ustar 00root root 0000000 0000000 This file is dedicated to the people who want to list their names (or handles) for their contribution to this work. This project is a fork of "phenny" from http://inamidst.com/phenny/
This project's name is "Sopel"
The original creator: Sean B. Palmer deserves the most credit for originally creating phenny. He has done an extraordinary job at producing this project, without him this fork would not exist.
Please feel free to add your name if you have added to this project in any way.
List of contributors:
Michael Yanovich (yano)
Matt Meinwald (meinwald)
Silas Baronda (sifi)
Morgan Goose (goosemo)
Alek Rollyson (al3k)
Kenneth K. Sham (Kays)
Joel Friedly (jfriedly)
Samuel Clements (Ziaix)
Dimitri Molenaars (Tyrope)
Elsie Powell (Embolalia)
Elad Alfassa (elad661)
Lior Ramati (FireRogue)
Syfaro Warraw (Syfaro)
sopel-6.6.9/MANIFEST.in 0000664 0000000 0000000 00000000032 13474520024 0014410 0 ustar 00root root 0000000 0000000 include *requirements.txt
sopel-6.6.9/NEWS 0000664 0000000 0000000 00000130107 13474520024 0013360 0 ustar 00root root 0000000 0000000 This file is used to auto-generate the "Changelog" section of Sopel's website.
When adding new entries, follow the style guide in NEWS.spec.md to avoid causing
problems with the site build.
Changes between 6.6.8 and 6.6.9
===============================
Module changes
--------------
* Also block changing `core.owner_account` setting in `admin` plugin [[#1599][]]
* Fixed `instagram` parsing after changes to the website [[#1608][]]
* `tld` plugin decodes HTML entities before output [[#1612][]]
* Handle an error condition when querying `ip` module using nickname [[#1631][]]
Core changes
------------
* Fixed populating `user` & `host` in the bot's user database when `NAMES` reply
arrives first [[#1630][]]
[#1599]: https://github.com/sopel-irc/sopel/pull/1599
[#1608]: https://github.com/sopel-irc/sopel/pull/1608
[#1612]: https://github.com/sopel-irc/sopel/pull/1612
[#1630]: https://github.com/sopel-irc/sopel/pull/1630
[#1631]: https://github.com/sopel-irc/sopel/pull/1631
Changes between 6.6.7 and 6.6.8
===============================
Module changes
--------------
* `admin` module no longer allows setting `core.owner` value [[#1587][]]
* Allowing any bot admin to change the owner opened Sopel to a
privilege-escalation attack
* Even with this patch, you still should add only users you really trust to
the `admins` list, for obvious reasons
API changes
-----------
* Fixed some content & formatting errors in documentation [[#1589][]]
[#1587]: https://github.com/sopel-irc/sopel/pull/1587
[#1589]: https://github.com/sopel-irc/sopel/pull/1589
Changes between 6.6.6 and 6.6.7
===============================
Fixing this bug, which was discovered after the previous release, serves to
exorcise the curse brought upon us by version 6.6.6.
Core changes
------------
* Fixed incorrect `MODE` message parsing that could lead to Sopel thinking
some users had higher channel privileges than they did [[#1575][]]
[#1575]: https://github.com/sopel-irc/sopel/pull/1575
Changes between 6.6.5 and 6.6.6
===============================
This slightly cursed version of Sopel is brought to you by the following happy
coincidences. When this release cycle began:
* 6.6.6 was the next patch version number
* Tax Day (in the U.S.) was just a few weeks off — the perfect release date
As it happens, the [v6.6.6 GitHub milestone][ms-666] ended up with 13 closed
issues/PRs in total. We *definitely* didn't try to *plan* any of this. Promise.
[ms-666]: https://github.com/sopel-irc/sopel/milestone/21?closed=1
Module changes
--------------
* Potential denial-of-service via repeated long output in the `.py` and `.calc`
commands was mitigated [[#1552][]]
* `admin` module's `.set` command no longer throws an exception if missing
arguments [[#1520][]]
* Fixed `admin` module's `.mode` command sending invalid raw line [[#1549][]]
* Tweaked output-formatting code in the `meetbot` & `reddit` modules [[#1516][]]
* The most visible effect of this is that moderators' names will now appear
green in `reddit`'s output, like on the site, instead of the old brown/purple
* Updated example/test output for `.ip` command [[#1523][]]
Core changes
------------
* Flood protection delay is now capped at 2 seconds [[#1552][]]
* The flood delay penalty is calculated using the message length before
truncation. Very long command output could thus "hang" the bot for many
minutes at a time, meaning some modules could be used to DoS the bot.
* Sopel 7 will add configuration for flood protection and perhaps reorganize
the logic to reduce silly bugs like this. (See: [#1518][], [#1559][])
* Fixed a few cases where keyboard interrupt (Control + C) wasn't handled
correctly [[#1534][], [#1558][]]
* Fixed invalid `MODE` command sent during connection phase [[#1544][]]
API changes
-----------
* Fixed a regression in testing modules by running them directly [[#1529][]]
* Fixed that `bot` output methods (`say`, `reply`, etc.) would cause errors
during tests if passed certain keyword arguments [[#1538][]]
[#1516]: https://github.com/sopel-irc/sopel/pull/1516
[#1518]: https://github.com/sopel-irc/sopel/pull/1518
[#1520]: https://github.com/sopel-irc/sopel/pull/1520
[#1523]: https://github.com/sopel-irc/sopel/pull/1523
[#1529]: https://github.com/sopel-irc/sopel/pull/1529
[#1534]: https://github.com/sopel-irc/sopel/pull/1534
[#1538]: https://github.com/sopel-irc/sopel/pull/1538
[#1544]: https://github.com/sopel-irc/sopel/pull/1544
[#1549]: https://github.com/sopel-irc/sopel/pull/1549
[#1552]: https://github.com/sopel-irc/sopel/pull/1552
[#1558]: https://github.com/sopel-irc/sopel/pull/1558
[#1559]: https://github.com/sopel-irc/sopel/issues/1559
Changes between 6.6.4 and 6.6.5
===============================
Module changes
--------------
* Fixed url module not cleaning punctuation when auto-titling [[#1515][]]
* Fixed url module's punctuation-cleaning on Python 2 [[#1517][]]
* Fixed `.redditor` command with newer `praw` versions (4.0+) [[#1506][]]
* Reloading modules now runs their `shutdown()` routines [[#1412][]]
[#1412]: https://github.com/sopel-irc/sopel/pull/1412
[#1506]: https://github.com/sopel-irc/sopel/pull/1506
[#1515]: https://github.com/sopel-irc/sopel/pull/1515
[#1517]: https://github.com/sopel-irc/sopel/pull/1517
Changes between 6.6.3 and 6.6.4
===============================
Module changes
--------------
* Replaced `help` pastebin with `clbin.com`
* `ptpb.pw` shut down due to abuse — see [ptpb/pb#246](
https://github.com/ptpb/pb/issues/246) for more
* More news on this front (reducing Sopel's dependence on specific pastebins)
in a future release. Several ideas are under consideration.
* Cleaned up code in `instagram` and `unicode` modules
* Core modules now use `bot.channels` instead of deprecated `bot.privileges`
Core changes
------------
* Privilege tracking now always updates both `bot.channels` & `bot.privileges`,
where before some handlers only updated one or the other
* This *should* have zero effect on behavior, but do report any observed.
Changes between 6.6.2 and 6.6.3
===============================
Module changes
--------------
* Fixed loading etymology module on Python 3.3
* Added Unicode support to calc module's `.py` output
* Correctly quote URL parameters in etymology and search modules
Core changes
------------
* Added docstrings to the privilege level constants in `sopel.module`
Changes between 6.6.1 and 6.6.2
===============================
Module changes
--------------
* wiktionary tries harder to get a valid result before erroring out
Core changes
------------
* Fixed an inconsistency between interpretations of the `--config` option in
normal operation vs. wizard mode
* Requirement specifiers tightened up to reduce/prevent `pip` trying to install
incompatible dependency versions (`IPython`, `dnspython`)
* SASL token is now split when required according to spec
* Multi-byte Unicode characters are now handled correctly when splitting lines
Changes between 6.6.0 and 6.6.1
===============================
Module changes
--------------
* spellcheck's `pyenchant` dependency is no longer required for py3.7+
* This should alleviate a lot of installation problems due to `pyenchant`
being unmaintained. If use of the spellcheck module is desired, the
necessary libraries may be installed manually.
Changes between 6.5.3 and 6.6.0
===============================
Sopel 6.6.0 has been a long time coming, but it contains a metric ton of fixes
and enhancements. The big stuff is yet to come in Sopel 7, though; stay tuned!
(You can get some hints by browsing the [GitHub milestones][].)
View and contribute toward Sopel's budgetary needs by visiting the project's
new [Open Collective page](https://opencollective.com/sopel).
Now that Sopel 6.6.0 is released, the focus will shift from preparing the new
release to migrating the website and documentation off of Embolalia's personal
infrastructure. Once this migration is complete, Sopel's [documentation][docs]
will be updated to reflect the changes/additions listed below. Questions about
the new (and old) API methods are welcome in [#sopel][] on Freenode, of course,
as always. Thank you for bearing with this transitional period!
Importantly, a couple of broken modules have been removed in this release. For
easy reference, they and their PyPI-installable replacements are listed near the
top of the "[Module changes](#module-changes)" section.
Because this is the last release planned before Sopel 7, it's important to note
some upcoming changes. They're mostly for module developers, or for bot owners
who run unmaintained third-party modules (which might need manual updating).
But first, a user-facing change. Sopel is drifting toward a more streamlined
release model, which will see most of the core module library split out into
separate packages. Moving modules to their own packages will enable faster fixes
when APIs change, and easier module adoption by members of the community.
Further process details will appear in future changelogs as modules are moved
out of core, but the plan is to have Sopel "require" modules it used to include
for a release or two after their removal. Existing installations should thereby
have a smooth transition, as long as they get updated reasonably often. To
discuss this plan, visit issue [#1291][].
And now, for the developer stuff.
There will be some attention given to how `Identifier` objects work in Sopel 7.
In particular, the way lowercase works appears to have been wrong for some time.
Subscribe to issue [#1389][] for updates, or to join the discussion on the best
plan for addressing this.
Also in Sopel 7, the following deprecated functions in `sopel.web` will be
removed: `get()`, `head()`, `post()`, `get_urllib_object()`. Module authors
should replace these with equivalent code using `requests`. If you don't know
what that is, you're in for a treat:
Remaining `sopel.web` functions might also move in a future major release. See
[#1318][] and comment your opinion if you are a module developer. There is still
plenty of time to give feedback; nothing will happen before Sopel 8 at the
earliest.
Support for multiple help examples on each module command is planned for Sopel 7
and will allow for clearer command and argument documentation. The current help
system uses a deterministic but unintuitive method to choose a single example to
output. The current plan is to make the new multi-example behavior opt-in, so
only help for modules that are explicitly updated to support it will change.
Follow this initiative in [#1200][].
Bot owners and admins might appreciate the new ignore system proposal, which
would (among other things) make "hostmask" blocks actually block hostmasks! See
[#1355][] to participate in the design process; this change is tentatively
planned for Sopel 7 but may be pushed back.
And finally, for users who hate SQLite with a passion: Work on bringing back
alternate DB support has begun! It's unclear how soon this will be ready, but
users who want to switch off SQLite to another database engine might be able to
do so as early as Sopel 7. Follow the ups and downs of this long-awaited
journey at [#1446][] for the time being.
[docs]: https://sopel.chat/docs/
[#sopel]: irc://chat.freenode.net/sopel
[GitHub milestones]: https://github.com/sopel-irc/sopel/milestones
[#1200]: https://github.com/sopel-irc/sopel/issues/1200
[#1291]: https://github.com/sopel-irc/sopel/issues/1291
[#1318]: https://github.com/sopel-irc/sopel/issues/1318
[#1355]: https://github.com/sopel-irc/sopel/issues/1355
[#1389]: https://github.com/sopel-irc/sopel/issues/1389
[#1446]: https://github.com/sopel-irc/sopel/pull/1446
----
Module changes
--------------
* Added emoticons module: includes `.shrug`, `.tableflip`, `.lenny`, and other
common kaomoji
* Added instagram module: displays information about Instagram links in chat
* Removed movie: The OMDb API went private some time ago (Q2 2017)
* See [`sopel-modules.imdb`][pypi-imdb] on PyPI for a functional replacement
* Removed weather: Yahoo deprecated its weather service, the last known keyless weather API
* See [`sopel-modules.weather`][pypi-weather] on PyPI for a functional
replacement that also adds the forecast command originally planned to launch
with Sopel 6.6.0.
* admin module's `.set` command handles spaces properly now
* bugzilla no longer spits out an error on shutdown if its domain list is empty
* dice module's `.roll`/`.dice`/`.d` command gives friendlier errors, and its
`.choice`/`.choose`/`.ch` command has cleaner output (will be further improved
in a later release)
* etymology module updated to work with etymonline.com's changes
* ip module can now look up nicknames (user's hostname) & IPv6 addresses
* ip module switched from deprecated GeoIP database to GeoIP2
* isup module can be forced to ignore untrusted/broken HTTPS with a new command
alias, `.isupinsecure`
* lmgtfy module gained improved output URLs (HTTPS, encoded query) and help
examples
* reddit module now picks up links under all commonly used subdomains
* reload's habit of duplicating packaged modules' command output has been
significantly curtailed
* There are still some edge cases (like reloading a module with a removed
function) that might still cause problems, but the majority of module
updates should be OK now.
* This feature will continue to improve over the next few releases.
* search module should behave better when encountering Unicode in URLs on py2
* search now warns `.ddg`/`.g` users of a bug affecting multiple "site:"
operators in a single query
* This is a bug in DuckDuckGo's plain-HTML SERP, and they have ignored all
attempts to report it. Sopel's DuckDuckGo code might be rewritten to use an
unaffected interface in the future.
* tld module gracefully handles missing arguments now
* translate now handles API failures gracefully
* url module can now create a short URL for convenience when fetching title
* only URLs longer than configured minimum length
* off by default
* url module will say an error if `.title` command fails
* url module's URL finder will ignore suspicious trailing punctuation, making
the auto-title feature more reliable when links are included in sentences
* version module no longer prints "wat" to the console/log when answering CTCP
`VERSION` requests
* wiktionary module now decodes HTML entities in its output before sending, and
it should also now give correct results for affixes & definitions containing
reference tags
* xkcd fetching by comic title should work again (switched back-end search
provider)
* Many modules updated to use HTTPS in both API calls and output
[pypi-imdb]: https://pypi.org/project/sopel-modules.imdb/
[pypi-weather]: https://pypi.org/project/sopel-modules.weather/
Core changes
------------
* Added `userserv` option for `auth_method`
* Added default value of `'UTC'` to `default_timezone`
* Added `alias_nicks` option
* Lets Sopel respond to (a) nickname(s) other than the name it uses for its
IRC nick
* Made handling `CNAME`'d TLS hostnames more forgiving
* Raw logging is no longer enabled by default
* Comparisons between Identifiers and other types were improved
* Sopel no longer sends the sticky modifier for capabilities
* Database tables are now created using "IF NOT EXISTS" to reduce error potential
* Deprecated `sopel.web` calls in various modules updated to use `requests`
instead
* Intents/CTCP handling fixed
* Fixed more cases where module shutdown routines weren't running
API changes
-----------
* New formatting methods: `italic`, `strikethrough`, `monospace`, `hex_color`, `reverse` (inverted video)
* With the exception of italics, these are all "niche" formatting codes that
have relatively limited client support, but they are included for
completeness.
* `sopel.db.get_uri()` was returning an incorrectly formatted result, now fixed
* Fixed populating `bot.channels` privileges dicts on connect
* Fixed updating `User` objects when receiving `NICK` events from the server
* Documentation added/corrected in several places
* Command prefix in examples is now assumed to match the default regex pattern (currently `\.`)
* This fixes some issues with incorrect help output, but might cause new
problems in modules that use non-standard prefixes in their examples.
* Sopel's maintenance team regrets not providing advance warning of this
change, but the potential impact is limited to perhaps a few misplaced
characters in help output, at most—same as the bug itself, but likely with a
much lower incidence.
Changes between 6.5.2 and 6.5.3
===============================
Module changes
--------------
* tell module takes nicknames up to 30 characters long now (previously 20)
* reddit module (and Sopel, by extension) once again accepts any installed
version of PRAW
Core changes
------------
* Specified which `IPython` versions pip should give Sopel depending on Python
version in use
* Fixed trying to use `pytest` stuff in production
* Various testing tweaks
Changes between 6.5.1 and 6.5.2
===============================
Larger than the usual "patch" release because it's been so long since the last
version and a number of bugs crept in. New maintainer (dgw) says hi.
To reduce the "dependency hell" of installing things that Sopel doesn't need
unless specific modules are used, the `spellcheck` and `ipython` modules will
likely be removed from core and published separately in a future release
(tentatively, Sopel 7).
----
Module changes
--------------
* Added (restored) `.bing` command to search module, and fixed Bing results
* Updated DDG ad filtering, and converted query URLs in search module to HTTPS
* Fixed search module `.suggest` command using Google suggestions API
* Fixed reddit and updated PRAW version requirement
* reload module no longer tries to reload nonexistent modules when passed the
name of a system package (e.g. "time" or "re")
* remind module will now give the reminder time in the correct timezone when
using `.at`
* wikipedia module ignores `File:` namespace links, and output from other Sopel
bots' wikipedia modules
* Fixed retrieving xkcd comics by number
* Fixed currency module (updated API URLs)
* Tweaked url module's title finder to reduce garbage from Gawker/Kinja sites
* help module now filters out duplicate commands from its command list
* Fixed wikipedia module's handling of special characters like `&`
* Prevent wikipedia module spewing an error if someone posts a link to an
article that doesn't exist
* help module now sends the command list to ptpb.pw, as GitHub removed their
anonymous Gist API
* Switched calc module to use new backend service for `.py` command, to reduce
outages
* Added physical temperature limit to units module
* Tweaked argument handling in pronouns module
Core changes
------------
* Logger bug squashed
* Shutdown method handling fixed
* Added documentation in a few places
* Made finding the system SSL/TLS certificate trust store more robust
* Modules with example tests no longer need to hack around `pytest` running
their `setup()` routines
* Corrected `IPython` dependency for ipython module (now installs with Sopel
automatically)
* Widened acceptable `requests` version range
API changes
-----------
* Module `shutdown()` methods should fire correctly now
* `ListAttribute` config values now return `[]` (empty list) when blank instead
of `[""]` (empty string in list)
* Updated documentation for (still deprecated) `sopel.web` (the documentation
for `post()` included a nonexistent kwarg, `headers`)
Changes between 6.5.0 and 6.5.1
===============================
Module changes
--------------
* A module to track users' pronouns is added
* A few bug and regression fixes
Changes between 6.4.0 and 6.5.0
===============================
Module changes
--------------
* xkcd module can now recognize xkcd.com urls
* SSL is verified for HTTP requests when not turned off in the config
* The command list is placed in a gist, to prevent flooding
* Title finding uses a custom user-agent, to prevent issues with some sites
Core changes
------------
* Intent handling is improved
API changes
-----------
* A `@url` decorator is added to simplify URL handling
Changes between 6.3.1 and 6.4.0
===============================
Module changes
--------------
* For some subreddits where NSFW is used to mark spoilers, an appropriate tag is
shown.
* `.ddg` avoids giving ad results.
* `.wa` is fully removed
* See [`sopel-modules.wolfram`][pypi-wolfram] on PyPI for a replacement
[pypi-wolfram]: https://pypi.org/project/sopel-modules.wolfram/
Core changes
------------
* Support for authenticating with Quakenet's Q is added.
* Errors from empty PID files are fixed.
* Issues with errors not being logged to the logging channel are fixed.
* Topic tracking is improved
* `extended-join` is supported properly
* Error messages being reported to the triggering channel/user can be disabled.
API changes
-----------
* Channel privileges are no longer checked in private messages.
* Rate limiting can now be done by channel and globally, not just per user.
Changes between 6.3.0 and 6.3.1
===============================
Module changes
--------------
* The xkcd module is working again
* Fix an issue causing Unicode errors to show for some URLs when using Python 2
(but you should really switch to 3!)
Core changes
------------
* Fix a bug in QUIT message parsing which caused certain users to be flooded
with PMs if their nick matched the first word of a user's QUIT message (such
as "disconnected" or "ping")
* Fix a rare Python 3 incompatibility bug when quitting due to too many core
errors
* We no longer show a warning when detecting a non-Unicode system locale if
you're still using Python 2
Changes between 6.2.0 and 6.3.0
===============================
Module changes
--------------
* Many modules ported to use `requests` package for stability and security
* Weather location lookup is fixed
* Confusing and unnecessary commands like .op were removed
* Splitting of options in `.choice` is now more intuitive
* Some edge cases in reddit post information were fixed
Core changes
------------
* A check is added to warn about an obscure environment issue that can cause
strange errors
* Regex characters in the bot's nick no longer cause issues when a rule has the
nickname added
* Rate limiting is tweaked slightly, which should reduce the severity of the
`.commands` flood bug until a proper solution is found
API changes
-----------
* The current topic of a channel is now available as the `Channel` object's
`topic` attribute
* `sopel.web` has been reworked as a wrapper around requests; it remains
deprecated
Changes between 6.1.1 and 6.2.0
===============================
Module changes
--------------
* An error in excluding URLs from title display is fixed
* Case sensitivity issues in currency and dice commands are fixed
* Guards to require channel or private message are added to a number of
commands, to avoid confusing errors
* A calculation bug in the countdown command is fixed
* Misc. minor bugfixes and improvements
Core changes
------------
* An occasional error with SSL connections on Python 3 is fixed
* On servers which support IRCv3 account extensions, the services account name
can be used to authenticate the owner
* Numerous additional IRCv3 features are supported
API changes
-----------
* `bot.privileges` is now deprecated in favor of `bot.channels`
* `bot.channels` contains more information about the channels the bot is in
* `bot.users` is now available with information about the users Sopel is aware
of
* `sopel.web` is now deprecated in favor of the third-party `requests` library
* `trigger.time` is added with the current time, or server-time if the server
supports it
* `sopel.tools.events` is now available as an enum of IRC numeric replies
Changes between 6.1.0 and 6.1.1
===============================
If you are updating from a pre-6.0 version (i.e. Willie), there are backwards-
incompatible changes which you should be aware of. See
for more information.
----
Core changes
------------
* A regression which caused the config wizard to be unusable is fixed
Changes between 6.0.0 and 6.1.0
===============================
If you are updating from a pre-6.0 version (i.e. Willie), there are backwards-
incompatible changes which you should be aware of. See
for more information.
----
Module changes
--------------
* A regression which prevented the URL safety detection from working is fixed.
* Issues with some special characters in DuckDuckGo searches are fixed
* `lxml` is no longer required by any modules, greatly simplifying the install
process
* Misc. minor bugfixes and improvements
Core changes
------------
* A regression which disabled blocking functionality is fixed
* Examples are no longer mangled by the `.help` command, and show the correct
prefix
* The listing from `.commands` is now separated by module
* Issues with reloading folder modules are fixed
API changes
-----------
* `ListAttribute` configs can be set to a list or set, with the same effect
* The configure method of validated config attributes now takes the parent config and section name
Changes between 5.5.1 and 6.0.0
===============================
This release contains backwards-incompatible changes. See
for more information.
This is the first release in which the bot will have a new name. Current
tentative name is Sopel.
----
Module changes
--------------
* chanlogs, rss, github, and radio modules are removed
* Default in admin module is now to join on invite from anyone; the old default
of only joining on invite from admins can be configured
* Wikipedia module's per-channel default language configuration is deprecated;
a database-backed option will be added in a future version
* `.seen` replies on action messages now display action messages differently
* `.kick` no longer truncates the message, and `.kickban` works properly
Core changes
------------
* Deprecated login configs have been removed in favor of the new `auth_*` values
* Module reloading has been redone to enable modules to be installed from PyPI
* IRCv3 capability negotiation is updated for v3.2
API changes
-----------
* Configuration has been entirely reworked. Old wizard functions and the
`get_list()` function are removed, but most other uses of the config should
continue to work.
* The reorganization of `willie.tools` introduced in 5.3.0 is finalized; the old
import locations no longer work.
* `bot.msg` is deprecated in favor of `bot.say`, which can now be used in
un-triggered contexts with an additional `recipient` argument
Changes between 5.5.0 and 5.5.1
===============================
This release continues preparations for Willie 6. See
----
Module changes
--------------
* The URL safety module correctly checks URLs
* The URL for the service used for `.py` and `.wa` is updated
Changes between 5.4.1 and 5.5.0
===============================
This release starts preparations for Willie 6. See
----
API changes
-----------
* The ability to import from the `sopel` package, rather than `willie`, is added
to enable forward compatibility with the rename in 6.0
* A `version_info` tuple, similar to Python's own `sys.version_info`, is added
* An error when setting a validated config attribute to `None` is fixed
Changes between 5.4.0 and 5.4.1
===============================
This release starts preparations for Willie 6. See
----
Core changes
------------
* Regression which prevented SSL verification from being disabled is fixed
Changes between 5.3.0 and 5.4.0
===============================
This release starts preparations for Willie 6. See
----
Module changes
--------------
* Dropping the lowest results from `.dice` rolls works properly
* `.blocks` listing is now on one line
* HTML entities in reddit post titles are now displayed correctly
Core changes
------------
* DB nick group merging now works properly
* A few combinations of authentication configuration that were broken are fixed
API changes
-----------
* The core config section now uses a 6.0-style config definition. Deprecated
attributes will give a warning.
* Accessing core config values directly from the `config` object itself (rather
than `config.core`) now appropriately prints a warning
* `@require_chanmsg` now works properly
Changes between 5.2.0 and 5.3.0
===============================
Module changes
--------------
* The YouTube module is removed due to breakage of its API by Google
* Fixes for Unicode in channel logging
* `.py` hits an updated service running Python 2.7, rather than 2.5
* Multiple new features are added in the reddit module
* Wind direction arrows in weather now point the right way
API changes
-----------
* Time and calculation tools are split out into multiple modules. The moved
things will also be available in `tools` itself until 6.0, whereupon they will
only be available in their new locations.
* Functions and classes used internally for scheduling jobs are moved. They are
still available in their old location, but are no longer documented and will
not be considered part of the public API in 6.0.
Changes between 5.1.1 and 5.2.0
===============================
Module changes
--------------
* An exception that failed the chanlogs module from loading is fixed
* Meetbot meeting subjects no longer fail with Unicode
Core changes
------------
* The various ways of authenticating the bot are now configured using the same
set of attributes. The old settings will be used as fallback until 6.0.0.
API changes
-----------
* Privilege decorators no longer cause an error when no message is given
* A new `@intent` decorator is added as a shortcut for triggering on a message
with an intent
Changes between 5.0.0 and 5.1.1
===============================
Module changes
--------------
* Fixed a regression that caused getting weather for a nick to fail
* Bugs related to channel log filenames are fixed
* Channel logs can now use the bot's preferred time zone
* Getter and setter methods for timezone and format are more consistently named
* `.seen` persists across bot restarts
* `.seen` no longer shows message or channel unless used within the same channel
* Special characters in Wikipedia URLs are handled correctly
Core changes
------------
* `help_prefix` can now be given in `[core]` to change the command prefix used
in help
API changes
-----------
* The `Trigger` object is now immutable, as expected
* New decorators for checking privileges on callables are added
Changes between 4.6.2 and 5.0.0
===============================
This release contains backwards-incompatible changes. See
for more information.
----
Module changes
--------------
* YouTube no longer shows bizarre lengths when the bot is running under Python 3
* When Wikipedia links are posted, a snippet of the article is shown
Core changes
------------
* `WillieDB` is entirely rewritten, meaning migration will be needed to access
old data
* Logging output to the debug channel is improved
* The name of the NickServ user can be configured with `nickserv_name` in
`[core]`
* SSL is disabled on Python 2.7 when `backports.ssl_match_hostname` is not
installed
API changes
-----------
* Deprecated `WillieDB` functions are removed
* CTCP actions are stripped prior to matching, and added to the `'intent'` key
of `trigger.tags`
* Deprecated `Trigger` functions are removed
* `bot.debug` is removed, in favor of standard Python logging
* `tools.Nick` is removed, in favor of the `tools.Identifier` introduced in
4.6.0
Changes between 4.6.1 and 4.6.2
===============================
This release starts preparations for Willie 5. See
for more information.
----
Module changes
--------------
* Due to API deprecation and instability, `.g` now uses DuckDuckGo instead of
Google
Core changes
------------
* Fix remaining regression in db update function
Changes between 4.6.0 and 4.6.1
===============================
This release starts preparations for Willie 5. See
for more information.
----
Module changes
--------------
* Fix regression in table creations and erroneously changed column names
Core changes
------------
* Fix regression in db update function
API changes
-----------
* Correctly print out deprecation warnings
Changes between 4.5.1 and 4.6.0
===============================
This release starts preparations for Willie 5. See
for more information.
----
Module changes
--------------
* The `^` operator in `.calc` is now equivalent to `**`
* `.dice`, `.tr`, and `.addtrace` give meaningful errors when no argument is
given
* A number of database issues were fixed (more will be fixed in Willie 5)
* A number of Python 3-related issues were fixed.
* Malicious URLs are now detected with VirusTotal and malwaredomains
* `.weather` no longer shows pressure
Core changes
------------
* The config wizard no longer configures the database, instead automatically
creating a SQLite DB
* MySQL and Postgres databases are deprecated; only SQLite will be supported in
Willie 5
* Logging channel and level can be configured with `logging_channel` and
`logging_level` in the config
* A `--version` switch was added to the `willie` command, to show the version
in use
* Corrupt PID files will no longer prevent the bot from starting
* Non-ASCII values no longer crash the config wizard
API changes
-----------
* Numerous functions were added to the db to ease the transition to Willie 5
* `tools.Nick` has been renamed to `tools.Identifier`. `Nick` will be removed in
Willie 5
* `willie.web` functions now specify a meaningful default user agent
* `web.post` now supports dicts as the payload, and can optionally return
headers
* `config.get` was added as an alias to `config.parser.get`
* Callables can now handle more than one event by stacking decorators
Changes between 4.5.0 and 4.5.1
===============================
Module changes
--------------
* Version checking module no longer causes an error at startup
* URL handling modules no longer repeat themselves after being reloaded
* `.isup` now adds a `.com` TLD if none is used
* IPython integration now works with older versions of IPython
Changes between 4.4.1 and 4.5.0
===============================
Module changes
--------------
* Willie will now alert the owner at startup, and every 24 hours, when a new
version is available
* `.calc` will now time out on excessively long calculations, and is less likely
to error out
* `.help` now works properly for command aliases
* `.help` will now output multi-line help in multiple messages, rather than all
at once
* A new `.uptime` command tells how long the bot has been running
* `.length` can now handle astronomical units
* Absolute vote counts are no longer shown in reddit output
* Using `.setlocation` without a location will no longer set your location to
Italy
* Time units for `.in` are now case-insensitive
* `.duck` no longer gives a long, unrelated URL
Core changes
------------
* Scheduled tasks now work properly under Python 3
* Willie no longer accepts partial matches for admin status
API changes
-----------
* Setting attributes on the bot object now works as expected
* The status code is now returned from `web.get` as `_http_status` in the
headers
* `web.get` now attempts to decode based on headers, rather than assuming utf-8
* `web.iri_to_uri` is now available to decode internationalized domain names
* A `willie.formatting` module is now available to simplify IRC bold, underline
and color formatting
Changes between 4.4.0 and 4.4.1
===============================
Module changes
--------------
* RSS no longer checks for malformed XML
* Starting RSS manually after bot restart is no longer needed
* Youtube video search properly handles spaces
* The `.at` command defaults to UTC if user's timezone is not set
Core changes
------------
* Ping timeout handling is working again
* `bind_host` configuration option is working again
Changes between 4.3.0 and 4.4.0
===============================
Module changes
--------------
* `.cur` behaves better when bad arguments are given
* Fixed numerous Unicode errors
* Added a command to open an IPython console within the module context
* Added mass units and millimeters to .cur
* GitHub pull requests now get extended URL info
* `.weather` now displays wind in m/s instead of kts
* A security issue involving improperly named channel logs was fixed
* Misc. bugfixes
Core changes
------------
* Channel joins at bot startup can be rate limited with the `throttle_joins`
option in the `[core]` config section to work around server limits
* Added the ability for SASL login where the nickname and username are different
* Improved loop protection and rate limiting
* Fixed multiple Python 3 errors
* Enable logging the bot in to Authserv at startup
* Added support for Postgres as the database backend
* SSL cert location detection now works on Debian-based systems
* Misc. bugfixes
API changes
-----------
* Unicode in command decorators now works properly
* `web.get` now decodes the result from UTF-8, with a `dont_decode` argument to
disable
Changes between 4.2.0 and 4.3.0
===============================
Module changes
--------------
* A new channel logging module is added
* Misc. bugfixes, especially when running with Python 3
Core changes
------------
* Fixed a regression that caused numerous errors in `willie.web`
* Misc. bugfixes
API changes
-----------
* Nick instances now have an `is_nick` attribute, which is `True` when the value
is a valid nickname (as opposed to a channel)
Changes between 4.1.0 and 4.2.0
===============================
Module changes
--------------
* A new `.cur` command can convert a number of currencies, including Bitcoin
* `.c` can now understand a comma used as a radix point (rather than a period)
* `.w` can now look in the Wikipedia for a specified (or configurable default)
language
* Timezones are now more user-friendly, and used more consistently across modules
* Misc. bugfixes
Core changes
------------
* `willie.web` now verifies HTTPS connections properly
* The SQLite database file respects use of `~` in the configured filename
* Willie can now run in Python 3
* Willie now depends on `python-backports.ssl_match_hostname` (see README.rst
for installation instructions)
* Misc. bugfixes
API changes
-----------
* `trigger.is_privmsg` is added for an easy way to see if a trigger was created
in a private or channel message
* `get_timezone` and `format_time` are added to `tools` to make displaying time
according to user/channel format easier
* Added `bot.notice` and an optional notice parameter for `bot.reply` for
easier sending of IRC `NOTICE` messages
Changes between 4.0.1 and 4.1.0
===============================
Module changes
--------------
* Admin-only `.set` command can now set non-existent config values
* The meetbot `.endmeeting` command now works properly
* Significant improvements made to RSS module
* The database structure for storing RSS feeds has been modified. The module
will attempt to migrate old data.
* Command syntax has changed in multiple ways
* `.rss` help is now available with more detailed information on usage.
* Module is overall better-behaved and less buggy
* Traceback can now be attached to a GitHub issue from Willie's logs
* GitHub module no longer puts "IRC" tag on issues it creates
* A `.listactions` command is added to allow actions to be listed before the end
of a meeting
* Dice now limits itself to 1000 dice, and output is cleaned up
* Willie now joins channels when invited
* Reddit module no longer gives an error if the submitter's account has been
deleted
* A new `.comments` feature allows optional comments on meetings, e.g. from
those muted in the channel
* `.xkcd` is more robust, and can now access the nth-latest comic
* calc module now uses an internal calculator, rather than the discontinued
iGoogle calculator
Core changes
------------
* Memory lock and unlock no longer cause errors
* Debugging target no longer needs to be a channel
* Whitespace can now be used in the command prefix
* Line numbers are given when modules fail to load
* Error messages are more consistent across core and modules
* Willie now retries joining channels if it fails initially
* SQLite is now the default and recommended database type
* MySQL remains supported; support may be dropped in a later version
* `MySQLdb` is no longer listed as a recommended dependency
* IRCv3 is now largely supported
* Willie can now authenticate with SASL
API changes
-----------
* Modules can now provide a `shutdown()` function to clean up when the bot is
quitting or the module is reloading
* `web.get` and `web.post` can be told to limit how much they read from a URL,
to prevent malicious use
* A new `@unblockable` decorator allows callables to be run even when triggered
by otherwise blocked users
* Willie can now connect over IPv6
* If the channel given to `bot.join` contains a space, the part after the space
will be used as the password
* IRCv3 is now largely supported
* Modules can now request capabilities from the server.
* Message tags, if enabled, can be read from `trigger.tags`
Changes between 4.0.0 and 4.0.1
===============================
Core changes
------------
* Setup script once again works properly
* Message splitting now works properly
* Bug fixes in handling of nick and hostmask blocks
Changes between 3.2.0 and 4.0.0
===============================
Module changes
--------------
* The following modules have been moved to the willie-extras repository:
* ai
* bucket
* fuckingweather
* nws
* roulette
* twit
* slap
* oblique
* The information of the last URL seen in a channel can now be replayed with
`.title`
* The YouTube module was reworked to use the YouTube JSON API
* The IP module is now independent of 3rd party services, and requires a local
copy of the (free) GeoLite database. If such database is not installed,
Willie will download it automatically.
* `.commands` now gives better output (no more truncated output due to message
length limit)
* Added a unit conversion module
* Better handling for non-Unicode page titles in the URL titler
* Removed bing support from search
* Various minor improvements and bugfixes across all modules
Core changes
------------
* Module discovery was reworked. Willie will now try to load additional modules
from `~/.willie/modules` by default, if installed.
* The home directory, usually `~/.willie`, can now be configured by adding
`homedir` under `[core]`
* The location of PID files can now be configured by adding `pid_dir` under
`[core]`
* Willie can now be run as a systemd service
* Case sensitivity in nick blocking is fixed
* Better handling of ping timeouts (connection problems)
* Major code cleanup
API changes
-----------
* Improved Unicode UTF-8 support across all codepaths
* Triggers, and the appropriate attributes thereof, are now `unicode` objects
* Decorators were introduced for setting attributes on callables, available in
`willie.module`
* The `NOLIMIT` return value was moved from the `Willie` class to
`willie.module`
* Callables with the same name in different modules no longer override each
other
* `willie.channels` is now properly maintained
* trigger.isvoice can now be used to determine if a user has voice privileges
* Added the max_messages parameter for `willie.msg()` and `willie.say()`. See
documentation for details.
* Added interval callable support (see documentation for details)
* Numerous minor features, and stability and usability fixes
Changes between 3.1.2 and 3.2.0
===============================
* `tools.Nick` class added for RFC-compliant nickname comparison and storage
* Returning `willie.NOLIMIT` from a callable ignores the rate limit for that
call
* `get_list()` added to `ConfigSection`. Will reliably return a list from a
config attribute.
* A number of bugs regarding admin and operator lists were fixed
* Unusual mode changes no longer cause errors
* Times shown by `.t`, `.in`, etc. all now use formats set by `.settimeformat`
* sed feature can use backslashed slashes in substitutions
* Weather module was rewritten, and now uses Yahoo! Weather
* Numerous stability and usability fixes
sopel-6.6.9/NEWS.spec.md 0000664 0000000 0000000 00000011642 13474520024 0014712 0 ustar 00root root 0000000 0000000 Sopel's NEWS file was originally used for plainly communicating the list of
changes in each release to humans. After Sopel 6.6.0, a lot of work went into
improving [the website](https://sopel.chat/), and part of that work involved
using the NEWS file to make HTML changelog pages. Since the file was already
Markdown-like, parsing it with a script became the chosen method.
What follows is a description of the syntax conventions used to keep NEWS
easily consumable by the [website build script][dvs]. It uses the common all-
caps RFC terms "MUST", "SHOULD", etc. according to the usual RFC conventions.
Anything set off by one of these is important to follow as it might affect the
website build script's ability to read this file correctly, or effectively
translate it into HTML pages.
[dvs]: https://github.com/sopel-irc/sopel.chat/blob/master/document_versions.py
----
The whole file SHOULD be hard-wrapped to 80 columns for ease of reading/updating
in terminal-based editors, but failure to wrap a few lines here and there
shouldn't break anything.
Each section MUST start with a Setext-style top-level heading (underlined using
`=`). There SHOULD always be two blank lines before and one blank line after
this release heading. The text MUST read `Changes between a.b.c and x.y.z` (it
is used to break this single file into one-page-per-version for the website).
Example release section heading, including blank line spacing:
```Markdown
Changes between 1.0.0 and 1.0.1
===============================
```
After that, there MAY be an optional prose section for general notes about the
release, notices about upcoming changes, migration instructions, etc. If
present, this section SHOULD end with a horizontal rule (`----`). Example:
```Markdown
Sopel 1.0.1 is a bugfix release with numerous small changes that add up to a big
improvement in the user experience when combined.
----
```
Each version's section SHOULD be subdivided into "Module changes", "Core
changes", and "API changes"—in that order. The three subsections MUST be marked
"up" (get it? because it's Mark*down*) as Setext-style second-level headings
(underlined using `-`). Each subsection heading SHOULD have one blank line above
and below. Subsections that remain empty after filling in the changes (see
below) SHOULD be omitted from the final release section.
Within the "changes" subsections, the convention is to present relevant line-
items from the release's commit log or list of merged pull requests as a
Markdown bulleted list (items begin with `* `; line continuations are indented
with two spaces to align with the start of that item's text). The subsection
names are mostly self-explanatory. Things that concern end users should go in
"Module" or "Core" changes; things that only affect developers (of modules or of
Sopel itself) should go in "API changes"—which, again, should appear last.
The change lists MAY have nested levels of bullets to convey additional details.
Each level should be indented by two additional spaces.
Command names (both Sopel and shell commands), Python package names, config
setting names, and anything else "code-like" SHOULD be marked up `as such` with
backticks. In most cases this doesn't really matter, but it really does ease
readability of the generated HTML pages. And some things (for example,
sequential hyphens in change entries about CLI options like `--config`) will
come out wrong without the backticks.
Example subsections and placeholder change entries:
```Markdown
Module changes
--------------
* foo module's `.bar` command won't baz any more
* eggs module removed
* replaced by a new bacon module
Core changes
------------
* IRC `foo` intent handled correctly
API changes
-----------
* `sopel.spam` is now deprecated and will be removed in Sopel 2.0. Use the new
tools in `sopel.sausage` introduced in 0.9.0 instead.
```
Links MAY be included anywhere it is appropriate, using any Markdown link style.
Implicitly referenced links (like `[link text][]`) are preferred because they
make the text easier to read; however, explicit references (`[link text][id]`)
are OK too if the same link is used in multiple places.
Link reference definitions SHOULD be placed at the end of the subsection where
they are first used, before any following horizontal rule or heading.
Link reference definitions SHOULD be indented with two spaces, EXCEPT directly
after lists:
```Markdown
[link text]: https://sopel.chat/ "Optional title"
```
After a list, DO NOT indent link references. The last list item will be
incorrectly formatted when the HTML for Sopel's website is rendered.
Link references MUST be defined within each release section, even if you are
reusing a previously defined link, because nothing outside the release section
will be accessible when the file is split into HTML pages for the website.
(N.B.: If this becomes overly tedious, the script could be made smarter; link
references "SHOULD" be indented to help with this in case it needs to happen.)
sopel-6.6.9/README.rst 0000664 0000000 0000000 00000011232 13474520024 0014345 0 ustar 00root root 0000000 0000000 =======
Sopel
=======
|version| |build| |issues| |coverage-status| |license| |ocbackers| |ocsponsors|
Introduction
------------
Sopel is a simple, lightweight, open source, easy-to-use IRC Utility bot,
written in Python. It's designed to be easy to use, run and extend.
Installation
------------
Latest stable release
=====================
On most systems where you can run Python, the best way to install Sopel is to
install `pip `_ and then ``pip install sopel``.
Arch users can install the ``sopel`` package from the [community] repository,
though new versions might take slightly longer to become available.
Failing both of those options, you can grab the latest tarball `from GitHub
`_ and follow the steps
for installing from the latest source below.
Latest source
=============
First, either clone the repository with ``git clone
git://github.com/sopel-irc/sopel.git`` or download a tarball `from GitHub
`_.
Note: Sopel requires Python 2.7.x or Python 3.3+ to run. On Python 2.7,
Sopel requires ``backports.ssl_match_hostname`` to be installed. Use
``pip install backports.ssl_match_hostname`` or
``yum install python-backports.ssl_match_hostname`` to install it, or download
and install it manually `from PyPI `_.
In the source directory (whether cloned or from the tarball) run
``setup.py install``. You can then run ``sopel`` to configure and start the
bot. Alternately, you can just run the ``sopel.py`` file in the source
directory.
Adding modules
--------------
The easiest place to put new modules is in ``~/.sopel/modules``. Some newer
modules are installable as packages; `search PyPI
`_ for these. Many more modules
written by other users can be found using your favorite search engine.
Some older, unmaintained modules are available in the
`sopel-extras `_ repository, but of
course you can also write your own. A `tutorial `_
for creating new modules is available on Sopel's website.
API documentation can be found online at https://sopel.chat/docs/, or
you can create a local version by running ``make html`` in the ``docs``
directory.
Further documentation
---------------------
The `official website `_ includes such valuable information
as a full listing of built-in `commands `_,
`tutorials `_, `API documentation `_,
and other `usage information `_.
Questions?
----------
Join us in `#sopel `_ on Freenode.
Credits
-------
Contributors
============
This project exists thanks to all the people who contribute! `Become a contributor`__.
.. image:: https://opencollective.com/sopel/contributors.svg?width=890&button=false
:target: https://github.com/sopel-irc/sopel/graphs/contributors
__ Contributor_
.. _Contributor: https://github.com/sopel-irc/sopel/blob/master/CONTRIBUTING.md
Backers
=======
Thank you to all our backers! `Become a backer`__.
.. image:: https://opencollective.com/sopel/backers.svg?width=890
:target: https://opencollective.com/sopel#backers
__ Backer_
.. _Backer: https://opencollective.com/sopel#backer
Sponsors
========
Support Sopel by becoming a sponsor. Your logo will show up here with a link to your website. `Become a sponsor`__.
.. image:: https://opencollective.com/sopel/sponsor/0/avatar.svg
:target: https://opencollective.com/sopel/sponsor/0/website
__ Sponsor_
.. _Sponsor: https://opencollective.com/sopel#sponsor
.. |version| image:: https://img.shields.io/pypi/v/sopel.svg
:target: https://pypi.python.org/pypi/sopel
.. |build| image:: https://travis-ci.org/sopel-irc/sopel.svg?branch=master
:target: https://travis-ci.org/sopel-irc/sopel
.. |issues| image:: https://img.shields.io/github/issues/sopel-irc/sopel.svg
:target: https://github.com/sopel-irc/sopel/issues
.. |coverage-status| image:: https://coveralls.io/repos/github/sopel-irc/sopel/badge.svg?branch=master
:target: https://coveralls.io/github/sopel-irc/sopel?branch=master
.. |license| image:: https://img.shields.io/pypi/l/sopel.svg
:target: https://github.com/sopel-irc/sopel/blob/master/COPYING
.. |ocbackers| image:: https://opencollective.com/sopel/backers/badge.svg
:alt: Backers on Open Collective
:target: #backers
.. |ocsponsors| image:: https://opencollective.com/sopel/sponsors/badge.svg
:alt: Sponsors on Open Collective
:target: #sponsors
sopel-6.6.9/checkstyle.sh 0000775 0000000 0000000 00000004074 13474520024 0015361 0 ustar 00root root 0000000 0000000 #!/bin/sh
find_source_files() {
find . -name '*.py' -size +0 -print | grep -ve './docs' -e 'env' -e './contrib' -e './conftest.py'
}
files=$(find_source_files)
# These are acceptable (for now). 128 and 127 should be removed eventually.
ignore='--ignore=E501,E128,E127'
# These are ignored by default (and we want to keep them ignored)
ignore=$ignore',W504'
# These are forbidding certain __future__ imports. The plugin has errors both
# for having and not having them; we want to always have them, so we ignore
# the having them errors and keep the not having them errors.
ignore=$ignore',FI50,FI51,FI52,FI53,FI54,FI55'
# F12 is with_statement, which is already in 2.7. F15 requires and F55 forbids
# generator_stop, which should probably be made mandatory at some point.
ignore=$ignore',F12,F15,F55'
# These are rules that are relatively new or have had their definitions tweaked
# recently, so we'll forgive them until versions of PEP8 in various developers'
# distros are updated
ignore=$ignore',E265,E713,E111,E113,E402,E731'
# For now, go through all the checking stages and only die at the end
exit_code=0
if ! flake8 $ignore --filename=*.py $(find_source_files); then
echo "ERROR: flake8 does not pass."
exit_code=1
fi
fail_coding=false
for file in $(find_source_files); do
line=$(head -n 1 $file)
if echo $line | grep -q '#!/usr/bin/env python'; then
line=$(head -n 2 $file | tail -n 1)
fi
if ! echo $line | grep -q '# coding=utf-8'; then
echo $file
fail_coding=true
fi
done
if $fail_coding; then
echo "ERROR: Above files do not have utf-8 coding declared."
exit_code=1
fi
# Find files which use the unicode type but (heuristically) don't make it py3
# safe
fail_py3_unicode=false
for file in $(find_source_files); do
if grep -qle 'unicode(' -e 'class .*(unicode)' $file; then
if ! grep -L 'unicode = str' $file; then
fail_py3_unicode=true
fi
fi
done
if $fail_py3_unicode; then
echo "ERROR: Above files use unicode() but do not make it safe for Python 3."
exit_code=1
fi
exit $exit_code
sopel-6.6.9/ci_build.sh 0000775 0000000 0000000 00000001042 13474520024 0014765 0 ustar 00root root 0000000 0000000 #!/bin/sh -x
# This script performs most of the same steps as the Travis build. The build
# doesn't actually run this script, since it uses Travis's ability to report
# the 2.7 and 3.x builds separately.
clean () {
find . -name '*.pyc' -exec rm {} \;
rm -rf build __pycache__ test/__pycache__
}
if test -z $VIRTUAL_ENV; then
SUDO=sudo
fi
clean
$SUDO pip2 install -r dev-requirements.txt
python2.7 pytest_run.py sopel test
clean
$SUDO pip3 install -r dev-requirements.txt
python3 pytest_run.py sopel test
clean
./checkstyle.sh
clean
sopel-6.6.9/conftest.py 0000664 0000000 0000000 00000000200 13474520024 0015046 0 ustar 00root root 0000000 0000000 # This file lists files which should be ignored by pytest
collect_ignore = ["setup.py", "sopel.py", "sopel/modules/ipython.py"]
sopel-6.6.9/contrib/ 0000775 0000000 0000000 00000000000 13474520024 0014317 5 ustar 00root root 0000000 0000000 sopel-6.6.9/contrib/README 0000664 0000000 0000000 00000001344 13474520024 0015201 0 ustar 00root root 0000000 0000000 This folder contains sopel.service and sopel.cfg designed to be distributed by 3rd party distrubtions such as Fedora Project or Arch Linux.
sopel.cfg is a default configuration file for sopel, that assumes the OS is new enough to have /run and /usr/lib/tmpfiles.d
sopel.service is a systemd service file that assumes you are using a rather recent Willie and has no multiple instance support (TODO). It also assumes that the system has a special user named sopel designated for running the bot and this user has access to /run/sopel (should be setup by sopel.conf in /usr/lib/tmpfiles.d), /var/log/sopel and /var/lib/sopel
Default installation paths:
sopel.cfg /etc
sopel.conf /usr/lib/tmpfiles.d
sopel.service /usr/lib/systemd/system
sopel-6.6.9/contrib/release.sh 0000775 0000000 0000000 00000001644 13474520024 0016303 0 ustar 00root root 0000000 0000000 #!/bin/sh
# Runs through the steps to release a Sopel version. This is only useful to
# the people with permissions to do so, of course.
set -e
cd $(dirname $0)/..
version=$(python -c "import sopel; print(sopel.__version__)")
echo "Releasing Sopel version $version."
echo "PyPI username:"
read pypi_user
echo "PyPI password:"
read pypi_pass
echo "sopel.chat username:"
read server_user
cat < ~/.pypirc
[distutils]
index-servers =
pypi
[pypi]
username:$pypi_user
password:$pypi_pass
EOF
echo "Building package and uploading to PyPI..."
./setup.py sdist upload --sign
rm ~/.pypirc
echo "Building docs..."
cd docs
make html
echo "Setting up folders on sopel.chat..."
ssh $server_user@sopel.chat "mkdir /var/www/sopel/$version; rm /var/www/sopel/docs; ln -s /var/www/sopel/$version/docs /var/www/sopel/docs"
echo "Uploading docs..."
scp -r build/html $server_user@sopel.chat:/var/www/sopel/$version/docs
echo "Done!"
sopel-6.6.9/contrib/rpm/ 0000775 0000000 0000000 00000000000 13474520024 0015115 5 ustar 00root root 0000000 0000000 sopel-6.6.9/contrib/rpm/makerpm.py 0000775 0000000 0000000 00000002323 13474520024 0017126 0 ustar 00root root 0000000 0000000 #!/usr/bin/python
import git
import sys
import os
import os.path
import time
from subprocess import *
import shutil
repo = git.Repo(os.getcwd())
head_hash = repo.head.commit.hexsha[:7]
now = time.strftime('%a %b %d %Y')
version = '3.3'
build = '0'
if len(sys.argv)>1:
build = sys.argv[1]
print 'Generating archive...'
f = open('sopel-%s.tar' % version, 'w')
repo.archive(f, prefix='sopel-%s/' % version)
f.close()
print 'Building spec file..'
spec_in = open('sopel.spec.in', 'r')
spec_out = open('sopel.spec', 'w')
for line in spec_in:
newline = line.replace('#GITTAG#', head_hash)
newline = newline.replace('#BUILD#', build)
newline = newline.replace('#LONGDATE#', now)
newline = newline.replace('#VERSION#', version)
spec_out.write(newline)
spec_in.close()
spec_out.close()
print 'Starting rpmbuild...'
cmdline = 'rpmbuild --define="%_specdir @wd@" --define="%_rpmdir @wd@" --define="%_srcrpmdir @wd@" --define="%_sourcedir @wd@" -ba sopel.spec'.replace('@wd@', os.getcwd())
p = call(cmdline, shell=True)
for item in os.listdir('noarch'):
os.rename(os.path.join('noarch', item), item)
print 'Cleaning...'
os.removedirs('noarch')
os.remove('sopel.spec')
os.remove('sopel-%s.tar' % version)
print 'Done'
sopel-6.6.9/contrib/rpm/sopel.spec.in 0000664 0000000 0000000 00000004514 13474520024 0017524 0 ustar 00root root 0000000 0000000 %{!?python_sitelib: %global python_sitelib %(%{__python} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")}
%define gittag #GITTAG#
Name: sopel
Version: #VERSION#
Release: 0.#BUILD#%{gittag}%{?dist}
Summary: Simple, lightweight and easy-to-use IRC Utility bot
License: EFL 2.0
URL: https://sopel.chat/
Source0: %{name}-%{version}.tar
BuildArch: noarch
BuildRequires: python2-devel
BuildRequires: python-sphinx
BuildRequires: dos2unix
BuildRequires: systemd
Requires: pytz
Requires: python-enchant
Requires: pyOpenSSL
Requires: python-praw
Requires: python-backports-ssl_match_hostname
%description
Willie is a simple, lightweight, open source, easy-to-use IRC Utility bot.
It is designed to be easy to use, run and extend.
%prep
%setup -q
%build
%{__python} setup.py build
dos2unix CREDITS
cd docs/
make singlehtml
mv build/singlehtml build/api-docs
rm build/api-docs/.buildinfo
%install
%{__python} setup.py install -O1 --skip-build --root $RPM_BUILD_ROOT
mkdir -p %{buildroot}%{_prefix}/lib/tmpfiles.d
install -m 0644 contrib/%{name}.conf %{buildroot}%{_prefix}/lib/tmpfiles.d/%{name}.conf
mkdir -p %{buildroot}/run
install -d -m 0755 %{buildroot}/run/%{name}/
mkdir -p %{buildroot}%{_sysconfdir}
install -m 0644 contrib/%{name}.cfg %{buildroot}%{_sysconfdir}/%{name}.cfg
mkdir -p %{buildroot}%{_unitdir}
install -m 0644 contrib/%{name}.service %{buildroot}%{_unitdir}/%{name}.service
mkdir -p %{buildroot}/var/log/%{name}
mkdir -p %{buildroot}/var/lib/%{name}
%files
%doc README.rst COPYING CREDITS NEWS docs/build/api-docs
%config(noreplace) %{_sysconfdir}/%{name}.cfg
%{python_sitelib}/*
%{_bindir}/sopel
%dir %attr(-,%{name}, %{name})/run/%{name}/
%{_prefix}/lib/tmpfiles.d/%{name}.conf
%{_unitdir}/%{name}.service
%dir %attr(-,%{name}, %{name})/var/lib/%{name}/
%dir %attr(-,%{name}, %{name})/var/log/%{name}/
%pre
getent group %{name} >/dev/null || groupadd -r %{name}
getent passwd %{name} >/dev/null || \
useradd -r -g %{name} -d /var/lib/%{name} -s /sbin/nologin \
-c "sopel ircbot account " %{name}
exit 0
%post
%systemd_post sopel.service
%preun
%systemd_preun sopel.service
%postun
%systemd_postun sopel.service
%changelog
* #LONGDATE# Elad Alfassa #VERSION#0.#BUILD##GITTAG#
- Update from git
sopel-6.6.9/contrib/sopel.cfg 0000664 0000000 0000000 00000001117 13474520024 0016122 0 ustar 00root root 0000000 0000000 # Default sopel configuration file for Fedora
# For information related to possible configuration values see
# https://sopel.chat/docs/config.html#the-core-configuration-section
# https://sopel.chat/usage/module-configuration/
#
# IMPORTANT NOTE!
# You must delete the not_configured line in order for the bot to work,
# otherwise it will refuse to start.
[core]
nick=sopel
not_configured=True
host=chat.freenode.net
port=6697
use_ssl=True
verify_ssl=True
owner=
logdir=/var/log/sopel
pid_dir=/run/sopel
homedir=/var/lib/sopel
[db]
userdb_type='sqlite'
userdb_file='/var/lib/sopel/user.db
sopel-6.6.9/contrib/sopel.conf 0000664 0000000 0000000 00000000102 13474520024 0016301 0 ustar 00root root 0000000 0000000 # Sopel temporary directory setup
d /run/sopel 0755 sopel sopel -
sopel-6.6.9/contrib/sopel.service 0000664 0000000 0000000 00000000511 13474520024 0017020 0 ustar 00root root 0000000 0000000 [Unit]
Description=Sopel IRC bot
Documentation=https://sopel.chat/
After=network.target
[Service]
Type=simple
User=sopel
PIDFile=/run/sopel/sopel-sopel.pid
ExecStart=/usr/bin/sopel -c /etc/sopel.cfg
Restart=on-failure
RestartPreventExitStatus=2
RestartSec=30
Environment=LC_ALL=en_US.UTF-8
[Install]
WantedBy=multi-user.target
sopel-6.6.9/contrib/suppress-warnings.py 0000664 0000000 0000000 00000000220 13474520024 0020375 0 ustar 00root root 0000000 0000000 # coding=utf-8
# suppress-warnings.py
# Suppress iPython's DeprecationWarnings on Sopel start
import warnings
warnings.filterwarnings('ignore')
sopel-6.6.9/contrib/update_db.py 0000775 0000000 0000000 00000004065 13474520024 0016630 0 ustar 00root root 0000000 0000000 #!/usr/bin/env python
# coding=utf8
"""update_db.py - A basic migration script for 3.x/4.x databases to 5.0.
Usage: ./update_db.py /path/to/config
Note that it takes the config, rather than the db. Currently, this only
supports text fields, since that's all the stock modules used. It migrates in
place, leaving old tables there, but you should still be sure to back up
everything first to be safe."""
import sqlite3
import sys
import willie
import willie.db
import willie.config
def main():
if willie.__version__.split('.', 1)[0] != '5':
print('Must have Willie 5 installed to run migration script.')
return
if len(sys.argv) != 2:
print('Usage: ./update_db.py /path/to/config')
config = willie.config.Config(sys.argv[1])
filename = config.db.userdb_file
if not filename:
filename = os.path.splitext(config.filename)[0] + '.db'
elif not config.core.db_filename:
print('Filename is only configured with old setting. Make sure you '
'set the db_filename setting in [core].')
print('Migrating db file {}'.format(filename))
new_db = willie.db.WillieDB(config)
conn = sqlite3.connect(new_db.filename)
cur = conn.cursor()
table_info = cur.execute('PRAGMA table_info(preferences)').fetchall()
for column in table_info:
old_name = column[1]
new_name = old_name if old_name != 'tz' else 'timezone'
if old_name == 'name':
continue
if column[2] != 'text':
msg = "Can't migrate non-text field {}. Please do so manually"
print(msg.format(old_name))
continue
print('Migrating column {}'.format(old_name))
values = cur.execute(
'SELECT name, {} FROM preferences WHERE {} NOT NULL'
.format(old_name, old_name)).fetchall()
for value in values:
if value[0][0] in '+%@&~#&':
new_db.set_channel_value(value[0], new_name, value[1])
else:
new_db.set_nick_value(value[0], new_name, value[1])
if __name__ == '__main__':
main()
sopel-6.6.9/dev-requirements.txt 0000664 0000000 0000000 00000000216 13474520024 0016716 0 ustar 00root root 0000000 0000000 pytest
coveralls
flake8<3.6.0; python_version == '3.3'
flake8>=3.6.0,<3.7.0; python_version != '3.3'
setuptools<40.0; python_version == '3.3'
sopel-6.6.9/docs/ 0000775 0000000 0000000 00000000000 13474520024 0013607 5 ustar 00root root 0000000 0000000 sopel-6.6.9/docs/Makefile 0000664 0000000 0000000 00000013011 13474520024 0015243 0 ustar 00root root 0000000 0000000 # Makefile for Sphinx documentation
#
# You can set these variables from the command line.
SPHINXOPTS =
SPHINXBUILD = sphinx-build
PAPER =
BUILDDIR = build
# Internal variables.
PAPEROPT_a4 = -D latex_paper_size=a4
PAPEROPT_letter = -D latex_paper_size=letter
ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source
# the i18n builder cannot share the environment and doctrees with the others
I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source
.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext
help:
@echo "Please use \`make ' where is one of"
@echo " html to make standalone HTML files"
@echo " dirhtml to make HTML files named index.html in directories"
@echo " singlehtml to make a single large HTML file"
@echo " pickle to make pickle files"
@echo " json to make JSON files"
@echo " htmlhelp to make HTML files and a HTML help project"
@echo " qthelp to make HTML files and a qthelp project"
@echo " devhelp to make HTML files and a Devhelp project"
@echo " epub to make an epub"
@echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
@echo " latexpdf to make LaTeX files and run them through pdflatex"
@echo " text to make text files"
@echo " man to make manual pages"
@echo " texinfo to make Texinfo files"
@echo " info to make Texinfo files and run them through makeinfo"
@echo " gettext to make PO message catalogs"
@echo " changes to make an overview of all changed/added/deprecated items"
@echo " linkcheck to check all external links for integrity"
@echo " doctest to run all doctests embedded in the documentation (if enabled)"
clean:
-rm -rf $(BUILDDIR)/*
html:
$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
@echo
@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
dirhtml:
$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
@echo
@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
singlehtml:
$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
@echo
@echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
pickle:
$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
@echo
@echo "Build finished; now you can process the pickle files."
json:
$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
@echo
@echo "Build finished; now you can process the JSON files."
htmlhelp:
$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
@echo
@echo "Build finished; now you can run HTML Help Workshop with the" \
".hhp project file in $(BUILDDIR)/htmlhelp."
qthelp:
$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
@echo
@echo "Build finished; now you can run "qcollectiongenerator" with the" \
".qhcp project file in $(BUILDDIR)/qthelp, like this:"
@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/PhennyJenniWillieIRCBot.qhcp"
@echo "To view the help file:"
@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/PhennyJenniWillieIRCBot.qhc"
devhelp:
$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
@echo
@echo "Build finished."
@echo "To view the help file:"
@echo "# mkdir -p $$HOME/.local/share/devhelp/PhennyJenniWillieIRCBot"
@echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/PhennyJenniWillieIRCBot"
@echo "# devhelp"
epub:
$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
@echo
@echo "Build finished. The epub file is in $(BUILDDIR)/epub."
latex:
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
@echo
@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
@echo "Run \`make' in that directory to run these through (pdf)latex" \
"(use \`make latexpdf' here to do that automatically)."
latexpdf:
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
@echo "Running LaTeX files through pdflatex..."
$(MAKE) -C $(BUILDDIR)/latex all-pdf
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
text:
$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
@echo
@echo "Build finished. The text files are in $(BUILDDIR)/text."
man:
$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
@echo
@echo "Build finished. The manual pages are in $(BUILDDIR)/man."
texinfo:
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
@echo
@echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
@echo "Run \`make' in that directory to run these through makeinfo" \
"(use \`make info' here to do that automatically)."
info:
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
@echo "Running Texinfo files through makeinfo..."
make -C $(BUILDDIR)/texinfo info
@echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
gettext:
$(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
@echo
@echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
changes:
$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
@echo
@echo "The overview file is in $(BUILDDIR)/changes."
linkcheck:
$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
@echo
@echo "Link check complete; look for any errors in the above output " \
"or in $(BUILDDIR)/linkcheck/output.txt."
doctest:
$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
@echo "Testing of doctests in the sources finished, look at the " \
"results in $(BUILDDIR)/doctest/output.txt."
sopel-6.6.9/docs/make.bat 0000664 0000000 0000000 00000012023 13474520024 0015212 0 ustar 00root root 0000000 0000000 @ECHO OFF
REM Command file for Sphinx documentation
if "%SPHINXBUILD%" == "" (
set SPHINXBUILD=sphinx-build
)
set BUILDDIR=build
set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% source
set I18NSPHINXOPTS=%SPHINXOPTS% source
if NOT "%PAPER%" == "" (
set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS%
set I18NSPHINXOPTS=-D latex_paper_size=%PAPER% %I18NSPHINXOPTS%
)
if "%1" == "" goto help
if "%1" == "help" (
:help
echo.Please use `make ^` where ^ is one of
echo. html to make standalone HTML files
echo. dirhtml to make HTML files named index.html in directories
echo. singlehtml to make a single large HTML file
echo. pickle to make pickle files
echo. json to make JSON files
echo. htmlhelp to make HTML files and a HTML help project
echo. qthelp to make HTML files and a qthelp project
echo. devhelp to make HTML files and a Devhelp project
echo. epub to make an epub
echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter
echo. text to make text files
echo. man to make manual pages
echo. texinfo to make Texinfo files
echo. gettext to make PO message catalogs
echo. changes to make an overview over all changed/added/deprecated items
echo. linkcheck to check all external links for integrity
echo. doctest to run all doctests embedded in the documentation if enabled
goto end
)
if "%1" == "clean" (
for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i
del /q /s %BUILDDIR%\*
goto end
)
if "%1" == "html" (
%SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html
if errorlevel 1 exit /b 1
echo.
echo.Build finished. The HTML pages are in %BUILDDIR%/html.
goto end
)
if "%1" == "dirhtml" (
%SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml
if errorlevel 1 exit /b 1
echo.
echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml.
goto end
)
if "%1" == "singlehtml" (
%SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml
if errorlevel 1 exit /b 1
echo.
echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml.
goto end
)
if "%1" == "pickle" (
%SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle
if errorlevel 1 exit /b 1
echo.
echo.Build finished; now you can process the pickle files.
goto end
)
if "%1" == "json" (
%SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json
if errorlevel 1 exit /b 1
echo.
echo.Build finished; now you can process the JSON files.
goto end
)
if "%1" == "htmlhelp" (
%SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp
if errorlevel 1 exit /b 1
echo.
echo.Build finished; now you can run HTML Help Workshop with the ^
.hhp project file in %BUILDDIR%/htmlhelp.
goto end
)
if "%1" == "qthelp" (
%SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp
if errorlevel 1 exit /b 1
echo.
echo.Build finished; now you can run "qcollectiongenerator" with the ^
.qhcp project file in %BUILDDIR%/qthelp, like this:
echo.^> qcollectiongenerator %BUILDDIR%\qthelp\PhennyJenniWillieIRCBot.qhcp
echo.To view the help file:
echo.^> assistant -collectionFile %BUILDDIR%\qthelp\PhennyJenniWillieIRCBot.ghc
goto end
)
if "%1" == "devhelp" (
%SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp
if errorlevel 1 exit /b 1
echo.
echo.Build finished.
goto end
)
if "%1" == "epub" (
%SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub
if errorlevel 1 exit /b 1
echo.
echo.Build finished. The epub file is in %BUILDDIR%/epub.
goto end
)
if "%1" == "latex" (
%SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex
if errorlevel 1 exit /b 1
echo.
echo.Build finished; the LaTeX files are in %BUILDDIR%/latex.
goto end
)
if "%1" == "text" (
%SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text
if errorlevel 1 exit /b 1
echo.
echo.Build finished. The text files are in %BUILDDIR%/text.
goto end
)
if "%1" == "man" (
%SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man
if errorlevel 1 exit /b 1
echo.
echo.Build finished. The manual pages are in %BUILDDIR%/man.
goto end
)
if "%1" == "texinfo" (
%SPHINXBUILD% -b texinfo %ALLSPHINXOPTS% %BUILDDIR%/texinfo
if errorlevel 1 exit /b 1
echo.
echo.Build finished. The Texinfo files are in %BUILDDIR%/texinfo.
goto end
)
if "%1" == "gettext" (
%SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale
if errorlevel 1 exit /b 1
echo.
echo.Build finished. The message catalogs are in %BUILDDIR%/locale.
goto end
)
if "%1" == "changes" (
%SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes
if errorlevel 1 exit /b 1
echo.
echo.The overview file is in %BUILDDIR%/changes.
goto end
)
if "%1" == "linkcheck" (
%SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck
if errorlevel 1 exit /b 1
echo.
echo.Link check complete; look for any errors in the above output ^
or in %BUILDDIR%/linkcheck/output.txt.
goto end
)
if "%1" == "doctest" (
%SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest
if errorlevel 1 exit /b 1
echo.
echo.Testing of doctests in the sources finished, look at the ^
results in %BUILDDIR%/doctest/output.txt.
goto end
)
:end
sopel-6.6.9/docs/source/ 0000775 0000000 0000000 00000000000 13474520024 0015107 5 ustar 00root root 0000000 0000000 sopel-6.6.9/docs/source/_static/ 0000775 0000000 0000000 00000000000 13474520024 0016535 5 ustar 00root root 0000000 0000000 sopel-6.6.9/docs/source/_static/favicon.ico 0000664 0000000 0000000 00000035356 13474520024 0020672 0 ustar 00root root 0000000 0000000 00 % 6 % h 6 ( 0 ` $ 8 o o 8 ) t t ) + 0 2 u ~ C W O G 8 &